diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index 86062e4394..54822829c4 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"7d3976ee03fc0f6880dd54c78d1a325b", files: { +hash:"0f14c5392fd01275e9aec0841c384482", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js index bdf15172f6..a2227f2e0f 100644 --- a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js @@ -1 +1 @@ -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=`; \ No newline at end of file +module.exports = `KGZ1bmN0aW9uKHdBLGQwKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWQwKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZDApOih3QT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp3QXx8c2VsZix3QS5tZXJtYWlkPWQwKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB3QShpKXtmb3IodmFyIGE9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTt2YXIgcD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7cFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHY9cC5yZWR1Y2UoZnVuY3Rpb24oRSxfKXt2YXIgTD1fLm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIEw/RS5jb25jYXQoTC5tYXAoZnVuY3Rpb24oTil7dmFyIEIsajtyZXR1cm4oaj0oQj1OLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxCPT09dm9pZCAwP3ZvaWQgMDpCLmxlbmd0aCkhPT1udWxsJiZqIT09dm9pZCAwP2o6MH0pKTpFfSxbXSk7aWYodi5sZW5ndGgpe3ZhciBtPW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCx2KSsifSIsImciKTtwPXAubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnJlcGxhY2UobSxgCmApfSl9cFswXT1wWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPXBbMF07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihFLF8pe3ZhciBMPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxOPUw/TFsxXToiIixCPUU7dHlwZW9mIEU9PSJzdHJpbmciJiZFLmluY2x1ZGVzKGAKYCkmJihCPVN0cmluZyhFKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihqLFIpe3JldHVybiBSPT09MD9qOiIiK04ran0pLmpvaW4oYApgKSksYis9QitwW18rMV19KSxifXZhciBkMD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEI3KGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIElMdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9MWUzLHA9NmU0LHY9MzZlNSxtPSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIixFPSJtaW51dGUiLF89ImhvdXIiLEw9ImRheSIsTj0id2VlayIsQj0ibW9udGgiLGo9InF1YXJ0ZXIiLFI9InllYXIiLHo9ImRhdGUiLEs9IkludmFsaWQgRGF0ZSIsaXQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sc3Q9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyx1dD17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihudCl7dmFyIE90PVsidGgiLCJzdCIsIm5kIiwicmQiXSxOdD1udCUxMDA7cmV0dXJuIlsiK250KyhPdFsoTnQtMjApJTEwXXx8T3RbTnRdfHxPdFswXSkrIl0ifX0sYnQ9ZnVuY3Rpb24obnQsT3QsTnQpe3ZhciBxdD1TdHJpbmcobnQpO3JldHVybiFxdHx8cXQubGVuZ3RoPj1PdD9udDoiIitBcnJheShPdCsxLXF0Lmxlbmd0aCkuam9pbihOdCkrbnR9LG10PXtzOmJ0LHo6ZnVuY3Rpb24obnQpe3ZhciBPdD0tbnQudXRjT2Zmc2V0KCksTnQ9TWF0aC5hYnMoT3QpLHF0PU1hdGguZmxvb3IoTnQvNjApLEN0PU50JTYwO3JldHVybihPdDw9MD8iKyI6Ii0iKStidChxdCwyLCIwIikrIjoiK2J0KEN0LDIsIjAiKX0sbTpmdW5jdGlvbiBudChPdCxOdCl7aWYoT3QuZGF0ZSgpPE50LmRhdGUoKSlyZXR1cm4tbnQoTnQsT3QpO3ZhciBxdD0xMiooTnQueWVhcigpLU90LnllYXIoKSkrKE50Lm1vbnRoKCktT3QubW9udGgoKSksQ3Q9T3QuY2xvbmUoKS5hZGQocXQsQiksWj1OdC1DdDwwLFR0PU90LmNsb25lKCkuYWRkKHF0KyhaPy0xOjEpLEIpO3JldHVybisoLShxdCsoTnQtQ3QpLyhaP0N0LVR0OlR0LUN0KSl8fDApfSxhOmZ1bmN0aW9uKG50KXtyZXR1cm4gbnQ8MD9NYXRoLmNlaWwobnQpfHwwOk1hdGguZmxvb3IobnQpfSxwOmZ1bmN0aW9uKG50KXtyZXR1cm57TTpCLHk6Uix3Ok4sZDpMLEQ6eixoOl8sbTpFLHM6YixtczptLFE6an1bbnRdfHxTdHJpbmcobnR8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24obnQpe3JldHVybiBudD09PXZvaWQgMH19LHl0PSJlbiIsZHQ9e307ZHRbeXRdPXV0O3ZhciBodD1mdW5jdGlvbihudCl7cmV0dXJuIG50IGluc3RhbmNlb2YgVX0sd3Q9ZnVuY3Rpb24gbnQoT3QsTnQscXQpe3ZhciBDdDtpZighT3QpcmV0dXJuIHl0O2lmKHR5cGVvZiBPdD09InN0cmluZyIpe3ZhciBaPU90LnRvTG93ZXJDYXNlKCk7ZHRbWl0mJihDdD1aKSxOdCYmKGR0W1pdPU50LEN0PVopO3ZhciBUdD1PdC5zcGxpdCgiLSIpO2lmKCFDdCYmVHQubGVuZ3RoPjEpcmV0dXJuIG50KFR0WzBdKX1lbHNle3ZhciBIdD1PdC5uYW1lO2R0W0h0XT1PdCxDdD1IdH1yZXR1cm4hcXQmJkN0JiYoeXQ9Q3QpLEN0fHwhcXQmJnl0fSxYPWZ1bmN0aW9uKG50LE90KXtpZihodChudCkpcmV0dXJuIG50LmNsb25lKCk7dmFyIE50PXR5cGVvZiBPdD09Im9iamVjdCI/T3Q6e307cmV0dXJuIE50LmRhdGU9bnQsTnQuYXJncz1hcmd1bWVudHMsbmV3IFUoTnQpfSxwdD1tdDtwdC5sPXd0LHB0Lmk9aHQscHQudz1mdW5jdGlvbihudCxPdCl7cmV0dXJuIFgobnQse2xvY2FsZTpPdC4kTCx1dGM6T3QuJHUseDpPdC4keCwkb2Zmc2V0Ok90LiRvZmZzZXR9KX07dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBudChOdCl7dGhpcy4kTD13dChOdC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShOdCl9dmFyIE90PW50LnByb3RvdHlwZTtyZXR1cm4gT3QucGFyc2U9ZnVuY3Rpb24oTnQpe3RoaXMuJGQ9ZnVuY3Rpb24ocXQpe3ZhciBDdD1xdC5kYXRlLFo9cXQudXRjO2lmKEN0PT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihwdC51KEN0KSlyZXR1cm4gbmV3IERhdGU7aWYoQ3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShDdCk7aWYodHlwZW9mIEN0PT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoQ3QpKXt2YXIgVHQ9Q3QubWF0Y2goaXQpO2lmKFR0KXt2YXIgSHQ9VHRbMl0tMXx8MCxJdD0oVHRbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFo/bmV3IERhdGUoRGF0ZS5VVEMoVHRbMV0sSHQsVHRbM118fDEsVHRbNF18fDAsVHRbNV18fDAsVHRbNl18fDAsSXQpKTpuZXcgRGF0ZShUdFsxXSxIdCxUdFszXXx8MSxUdFs0XXx8MCxUdFs1XXx8MCxUdFs2XXx8MCxJdCl9fXJldHVybiBuZXcgRGF0ZShDdCl9KE50KSx0aGlzLiR4PU50Lnh8fHt9LHRoaXMuaW5pdCgpfSxPdC5pbml0PWZ1bmN0aW9uKCl7dmFyIE50PXRoaXMuJGQ7dGhpcy4keT1OdC5nZXRGdWxsWWVhcigpLHRoaXMuJE09TnQuZ2V0TW9udGgoKSx0aGlzLiREPU50LmdldERhdGUoKSx0aGlzLiRXPU50LmdldERheSgpLHRoaXMuJEg9TnQuZ2V0SG91cnMoKSx0aGlzLiRtPU50LmdldE1pbnV0ZXMoKSx0aGlzLiRzPU50LmdldFNlY29uZHMoKSx0aGlzLiRtcz1OdC5nZXRNaWxsaXNlY29uZHMoKX0sT3QuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIHB0fSxPdC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PUt9LE90LmlzU2FtZT1mdW5jdGlvbihOdCxxdCl7dmFyIEN0PVgoTnQpO3JldHVybiB0aGlzLnN0YXJ0T2YocXQpPD1DdCYmQ3Q8PXRoaXMuZW5kT2YocXQpfSxPdC5pc0FmdGVyPWZ1bmN0aW9uKE50LHF0KXtyZXR1cm4gWChOdCk8dGhpcy5zdGFydE9mKHF0KX0sT3QuaXNCZWZvcmU9ZnVuY3Rpb24oTnQscXQpe3JldHVybiB0aGlzLmVuZE9mKHF0KTxYKE50KX0sT3QuJGc9ZnVuY3Rpb24oTnQscXQsQ3Qpe3JldHVybiBwdC51KE50KT90aGlzW3F0XTp0aGlzLnNldChDdCxOdCl9LE90LnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxPdC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxPdC5zdGFydE9mPWZ1bmN0aW9uKE50LHF0KXt2YXIgQ3Q9dGhpcyxaPSEhcHQudShxdCl8fHF0LFR0PXB0LnAoTnQpLEh0PWZ1bmN0aW9uKEtlLHdlKXt2YXIgX2U9cHQudyhDdC4kdT9EYXRlLlVUQyhDdC4keSx3ZSxLZSk6bmV3IERhdGUoQ3QuJHksd2UsS2UpLEN0KTtyZXR1cm4gWj9fZTpfZS5lbmRPZihMKX0sSXQ9ZnVuY3Rpb24oS2Usd2Upe3JldHVybiBwdC53KEN0LnRvRGF0ZSgpW0tlXS5hcHBseShDdC50b0RhdGUoInMiKSwoWj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKHdlKSksQ3QpfSxGdD10aGlzLiRXLGtlPXRoaXMuJE0scG49dGhpcy4kRCxNZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKFR0KXtjYXNlIFI6cmV0dXJuIFo/SHQoMSwwKTpIdCgzMSwxMSk7Y2FzZSBCOnJldHVybiBaP0h0KDEsa2UpOkh0KDAsa2UrMSk7Y2FzZSBOOnZhciB2ZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsR2U9KEZ0PHZlP0Z0Kzc6RnQpLXZlO3JldHVybiBIdChaP3BuLUdlOnBuKyg2LUdlKSxrZSk7Y2FzZSBMOmNhc2UgejpyZXR1cm4gSXQoTWUrIkhvdXJzIiwwKTtjYXNlIF86cmV0dXJuIEl0KE1lKyJNaW51dGVzIiwxKTtjYXNlIEU6cmV0dXJuIEl0KE1lKyJTZWNvbmRzIiwyKTtjYXNlIGI6cmV0dXJuIEl0KE1lKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LE90LmVuZE9mPWZ1bmN0aW9uKE50KXtyZXR1cm4gdGhpcy5zdGFydE9mKE50LCExKX0sT3QuJHNldD1mdW5jdGlvbihOdCxxdCl7dmFyIEN0LFo9cHQucChOdCksVHQ9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpLEh0PShDdD17fSxDdFtMXT1UdCsiRGF0ZSIsQ3Rbel09VHQrIkRhdGUiLEN0W0JdPVR0KyJNb250aCIsQ3RbUl09VHQrIkZ1bGxZZWFyIixDdFtfXT1UdCsiSG91cnMiLEN0W0VdPVR0KyJNaW51dGVzIixDdFtiXT1UdCsiU2Vjb25kcyIsQ3RbbV09VHQrIk1pbGxpc2Vjb25kcyIsQ3QpW1pdLEl0PVo9PT1MP3RoaXMuJEQrKHF0LXRoaXMuJFcpOnF0O2lmKFo9PT1CfHxaPT09Uil7dmFyIEZ0PXRoaXMuY2xvbmUoKS5zZXQoeiwxKTtGdC4kZFtIdF0oSXQpLEZ0LmluaXQoKSx0aGlzLiRkPUZ0LnNldCh6LE1hdGgubWluKHRoaXMuJEQsRnQuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgSHQmJnRoaXMuJGRbSHRdKEl0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sT3Quc2V0PWZ1bmN0aW9uKE50LHF0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoTnQscXQpfSxPdC5nZXQ9ZnVuY3Rpb24oTnQpe3JldHVybiB0aGlzW3B0LnAoTnQpXSgpfSxPdC5hZGQ9ZnVuY3Rpb24oTnQscXQpe3ZhciBDdCxaPXRoaXM7TnQ9TnVtYmVyKE50KTt2YXIgVHQ9cHQucChxdCksSHQ9ZnVuY3Rpb24oa2Upe3ZhciBwbj1YKFopO3JldHVybiBwdC53KHBuLmRhdGUocG4uZGF0ZSgpK01hdGgucm91bmQoa2UqTnQpKSxaKX07aWYoVHQ9PT1CKXJldHVybiB0aGlzLnNldChCLHRoaXMuJE0rTnQpO2lmKFR0PT09UilyZXR1cm4gdGhpcy5zZXQoUix0aGlzLiR5K050KTtpZihUdD09PUwpcmV0dXJuIEh0KDEpO2lmKFR0PT09TilyZXR1cm4gSHQoNyk7dmFyIEl0PShDdD17fSxDdFtFXT1wLEN0W19dPXYsQ3RbYl09ZixDdClbVHRdfHwxLEZ0PXRoaXMuJGQuZ2V0VGltZSgpK050Kkl0O3JldHVybiBwdC53KEZ0LHRoaXMpfSxPdC5zdWJ0cmFjdD1mdW5jdGlvbihOdCxxdCl7cmV0dXJuIHRoaXMuYWRkKC0xKk50LHF0KX0sT3QuZm9ybWF0PWZ1bmN0aW9uKE50KXt2YXIgcXQ9dGhpcyxDdD10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIEN0LmludmFsaWREYXRlfHxLO3ZhciBaPU50fHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLFR0PXB0LnoodGhpcyksSHQ9dGhpcy4kSCxJdD10aGlzLiRtLEZ0PXRoaXMuJE0sa2U9Q3Qud2Vla2RheXMscG49Q3QubW9udGhzLE1lPWZ1bmN0aW9uKHdlLF9lLCR0LHJlKXtyZXR1cm4gd2UmJih3ZVtfZV18fHdlKHF0LFopKXx8JHRbX2VdLnNsaWNlKDAscmUpfSx2ZT1mdW5jdGlvbih3ZSl7cmV0dXJuIHB0LnMoSHQlMTJ8fDEyLHdlLCIwIil9LEdlPUN0Lm1lcmlkaWVtfHxmdW5jdGlvbih3ZSxfZSwkdCl7dmFyIHJlPXdlPDEyPyJBTSI6IlBNIjtyZXR1cm4gJHQ/cmUudG9Mb3dlckNhc2UoKTpyZX0sS2U9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06RnQrMSxNTTpwdC5zKEZ0KzEsMiwiMCIpLE1NTTpNZShDdC5tb250aHNTaG9ydCxGdCxwbiwzKSxNTU1NOk1lKHBuLEZ0KSxEOnRoaXMuJEQsREQ6cHQucyh0aGlzLiRELDIsIjAiKSxkOlN0cmluZyh0aGlzLiRXKSxkZDpNZShDdC53ZWVrZGF5c01pbix0aGlzLiRXLGtlLDIpLGRkZDpNZShDdC53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsa2UsMyksZGRkZDprZVt0aGlzLiRXXSxIOlN0cmluZyhIdCksSEg6cHQucyhIdCwyLCIwIiksaDp2ZSgxKSxoaDp2ZSgyKSxhOkdlKEh0LEl0LCEwKSxBOkdlKEh0LEl0LCExKSxtOlN0cmluZyhJdCksbW06cHQucyhJdCwyLCIwIiksczpTdHJpbmcodGhpcy4kcyksc3M6cHQucyh0aGlzLiRzLDIsIjAiKSxTU1M6cHQucyh0aGlzLiRtcywzLCIwIiksWjpUdH07cmV0dXJuIFoucmVwbGFjZShzdCxmdW5jdGlvbih3ZSxfZSl7cmV0dXJuIF9lfHxLZVt3ZV18fFR0LnJlcGxhY2UoIjoiLCIiKX0pfSxPdC51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sT3QuZGlmZj1mdW5jdGlvbihOdCxxdCxDdCl7dmFyIFosVHQ9cHQucChxdCksSHQ9WChOdCksSXQ9KEh0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKnAsRnQ9dGhpcy1IdCxrZT1wdC5tKHRoaXMsSHQpO3JldHVybiBrZT0oWj17fSxaW1JdPWtlLzEyLFpbQl09a2UsWltqXT1rZS8zLFpbTl09KEZ0LUl0KS82MDQ4ZTUsWltMXT0oRnQtSXQpLzg2NGU1LFpbX109RnQvdixaW0VdPUZ0L3AsWltiXT1GdC9mLFopW1R0XXx8RnQsQ3Q/a2U6cHQuYShrZSl9LE90LmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoQikuJER9LE90LiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZHRbdGhpcy4kTF19LE90LmxvY2FsZT1mdW5jdGlvbihOdCxxdCl7aWYoIU50KXJldHVybiB0aGlzLiRMO3ZhciBDdD10aGlzLmNsb25lKCksWj13dChOdCxxdCwhMCk7cmV0dXJuIFomJihDdC4kTD1aKSxDdH0sT3QuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gcHQudyh0aGlzLiRkLHRoaXMpfSxPdC50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxPdC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LE90LnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sT3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxudH0oKSx4dD1VLnByb3RvdHlwZTtyZXR1cm4gWC5wcm90b3R5cGU9eHQsW1siJG1zIixtXSxbIiRzIixiXSxbIiRtIixFXSxbIiRIIixfXSxbIiRXIixMXSxbIiRNIixCXSxbIiR5IixSXSxbIiREIix6XV0uZm9yRWFjaChmdW5jdGlvbihudCl7eHRbbnRbMV1dPWZ1bmN0aW9uKE90KXtyZXR1cm4gdGhpcy4kZyhPdCxudFswXSxudFsxXSl9fSksWC5leHRlbmQ9ZnVuY3Rpb24obnQsT3Qpe3JldHVybiBudC4kaXx8KG50KE90LFUsWCksbnQuJGk9ITApLFh9LFgubG9jYWxlPXd0LFguaXNEYXlqcz1odCxYLnVuaXg9ZnVuY3Rpb24obnQpe3JldHVybiBYKDFlMypudCl9LFguZW49ZHRbeXRdLFguTHM9ZHQsWC5wPXt9LFh9KX0pKElMdCk7dmFyIEc1ZT1JTHQuZXhwb3J0cztjb25zdCBnMD1CNyhHNWUpLGQ1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFV0PXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LGpmdD1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBhPWQ1LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBkNSYmKGE9ZDVbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihhPWkpLFV0LnRyYWNlPSgpPT57fSxVdC5kZWJ1Zz0oKT0+e30sVXQuaW5mbz0oKT0+e30sVXQud2Fybj0oKT0+e30sVXQuZXJyb3I9KCk9Pnt9LFV0LmZhdGFsPSgpPT57fSxhPD1kNS5mYXRhbCYmKFV0LmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsVzIoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixXMigiRkFUQUwiKSkpLGE8PWQ1LmVycm9yJiYoVXQuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxXMigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLFcyKCJFUlJPUiIpKSksYTw9ZDUud2FybiYmKFV0Lndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsVzIoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLFcyKCJXQVJOIikpKSxhPD1kNS5pbmZvJiYoVXQuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxXMigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsVzIoIklORk8iKSkpLGE8PWQ1LmRlYnVnJiYoVXQuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxXMigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixXMigiREVCVUciKSkpLGE8PWQ1LnRyYWNlJiYoVXQudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxXMigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixXMigiVFJBQ0UiKSkpfSxXMj1pPT5gJWMke2cwKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgJGZ0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRNj0kZnQuc2FuaXRpemVVcmw9dm9pZCAwLFY1ZT0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sVTVlPS8mIyhcdyspKF5cd3w7KT8vZyxXNWU9LyYobmV3bGluZXx0YWIpOy9naSxLNWU9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSxZNWU9L14uKyg6fCZjb2xvbjspL2dpbSxYNWU9WyIuIiwiLyJdO2Z1bmN0aW9uIFE1ZShpKXtyZXR1cm4gWDVlLmluZGV4T2YoaVswXSk+LTF9ZnVuY3Rpb24gWjVlKGkpe3JldHVybiBpLnJlcGxhY2UoVTVlLGZ1bmN0aW9uKGEsZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KX1mdW5jdGlvbiBKNWUoaSl7dmFyIGE9WjVlKGl8fCIiKS5yZXBsYWNlKFc1ZSwiIikucmVwbGFjZShLNWUsIiIpLnRyaW0oKTtpZighYSlyZXR1cm4iYWJvdXQ6YmxhbmsiO2lmKFE1ZShhKSlyZXR1cm4gYTt2YXIgZj1hLm1hdGNoKFk1ZSk7aWYoIWYpcmV0dXJuIGE7dmFyIHA9ZlswXTtyZXR1cm4gVjVlLnRlc3QocCk/ImFib3V0OmJsYW5rIjphfVE2PSRmdC5zYW5pdGl6ZVVybD1KNWU7ZnVuY3Rpb24gZlUoaSxhKXtyZXR1cm4gaT09bnVsbHx8YT09bnVsbD9OYU46aTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gdHhlKGksYSl7cmV0dXJuIGk9PW51bGx8fGE9PW51bGw/TmFOOmE8aT8tMTphPmk/MTphPj1pPzA6TmFOfWZ1bmN0aW9uIHpmdChpKXtsZXQgYSxmLHA7aS5sZW5ndGghPT0yPyhhPWZVLGY9KEUsXyk9PmZVKGkoRSksXykscD0oRSxfKT0+aShFKS1fKTooYT1pPT09ZlV8fGk9PT10eGU/aTpleGUsZj1pLHA9aSk7ZnVuY3Rpb24gdihFLF8sTD0wLE49RS5sZW5ndGgpe2lmKEw8Til7aWYoYShfLF8pIT09MClyZXR1cm4gTjtkb3tjb25zdCBCPUwrTj4+PjE7ZihFW0JdLF8pPDA/TD1CKzE6Tj1CfXdoaWxlKEw8Til9cmV0dXJuIEx9ZnVuY3Rpb24gbShFLF8sTD0wLE49RS5sZW5ndGgpe2lmKEw8Til7aWYoYShfLF8pIT09MClyZXR1cm4gTjtkb3tjb25zdCBCPUwrTj4+PjE7ZihFW0JdLF8pPD0wP0w9QisxOk49Qn13aGlsZShMPE4pfXJldHVybiBMfWZ1bmN0aW9uIGIoRSxfLEw9MCxOPUUubGVuZ3RoKXtjb25zdCBCPXYoRSxfLEwsTi0xKTtyZXR1cm4gQj5MJiZwKEVbQi0xXSxfKT4tcChFW0JdLF8pP0ItMTpCfXJldHVybntsZWZ0OnYsY2VudGVyOmIscmlnaHQ6bX19ZnVuY3Rpb24gZXhlKCl7cmV0dXJuIDB9ZnVuY3Rpb24gbnhlKGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgcnhlPXpmdChmVSkucmlnaHQ7emZ0KG54ZSkuY2VudGVyO2NvbnN0IGl4ZT1yeGU7Y2xhc3MgREx0IGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKGEsZj1veGUpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6Zn19KSxhIT1udWxsKWZvcihjb25zdFtwLHZdb2YgYSl0aGlzLnNldChwLHYpfWdldChhKXtyZXR1cm4gc3VwZXIuZ2V0KE9MdCh0aGlzLGEpKX1oYXMoYSl7cmV0dXJuIHN1cGVyLmhhcyhPTHQodGhpcyxhKSl9c2V0KGEsZil7cmV0dXJuIHN1cGVyLnNldChzeGUodGhpcyxhKSxmKX1kZWxldGUoYSl7cmV0dXJuIHN1cGVyLmRlbGV0ZShheGUodGhpcyxhKSl9fWZ1bmN0aW9uIE9MdCh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTpmfWZ1bmN0aW9uIHN4ZSh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTooaS5zZXQocCxmKSxmKX1mdW5jdGlvbiBheGUoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCkmJihmPWkuZ2V0KHApLGkuZGVsZXRlKHApKSxmfWZ1bmN0aW9uIG94ZShpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfXZhciBxZnQ9TWF0aC5zcXJ0KDUwKSxIZnQ9TWF0aC5zcXJ0KDEwKSxHZnQ9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGN4ZShpLGEsZil7dmFyIHAsdj0tMSxtLGIsRTtpZihhPSthLGk9K2ksZj0rZixpPT09YSYmZj4wKXJldHVybltpXTtpZigocD1hPGkpJiYobT1pLGk9YSxhPW0pLChFPU5MdChpLGEsZikpPT09MHx8IWlzRmluaXRlKEUpKXJldHVybltdO2lmKEU+MCl7bGV0IF89TWF0aC5yb3VuZChpL0UpLEw9TWF0aC5yb3VuZChhL0UpO2ZvcihfKkU8aSYmKytfLEwqRT5hJiYtLUwsYj1uZXcgQXJyYXkobT1MLV8rMSk7Kyt2PG07KWJbdl09KF8rdikqRX1lbHNle0U9LUU7bGV0IF89TWF0aC5yb3VuZChpKkUpLEw9TWF0aC5yb3VuZChhKkUpO2ZvcihfL0U8aSYmKytfLEwvRT5hJiYtLUwsYj1uZXcgQXJyYXkobT1MLV8rMSk7Kyt2PG07KWJbdl09KF8rdikvRX1yZXR1cm4gcCYmYi5yZXZlcnNlKCksYn1mdW5jdGlvbiBOTHQoaSxhLGYpe3ZhciBwPShhLWkpL01hdGgubWF4KDAsZiksdj1NYXRoLmZsb29yKE1hdGgubG9nKHApL01hdGguTE4xMCksbT1wL01hdGgucG93KDEwLHYpO3JldHVybiB2Pj0wPyhtPj1xZnQ/MTA6bT49SGZ0PzU6bT49R2Z0PzI6MSkqTWF0aC5wb3coMTAsdik6LU1hdGgucG93KDEwLC12KS8obT49cWZ0PzEwOm0+PUhmdD81Om0+PUdmdD8yOjEpfWZ1bmN0aW9uIFZmdChpLGEsZil7dmFyIHA9TWF0aC5hYnMoYS1pKS9NYXRoLm1heCgwLGYpLHY9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhwKS9NYXRoLkxOMTApKSxtPXAvdjtyZXR1cm4gbT49cWZ0P3YqPTEwOm0+PUhmdD92Kj01Om0+PUdmdCYmKHYqPTIpLGE8aT8tdjp2fWZ1bmN0aW9uIHV4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY8dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIGx4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY+dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIGh4ZShpKXtyZXR1cm4gaX12YXIgZFU9MSxVZnQ9MixXZnQ9MyxnVT00LFBMdD0xZS02O2Z1bmN0aW9uIGZ4ZShpKXtyZXR1cm4idHJhbnNsYXRlKCIraSsiLDApIn1mdW5jdGlvbiBkeGUoaSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIraSsiKSJ9ZnVuY3Rpb24gZ3hlKGkpe3JldHVybiBhPT4raShhKX1mdW5jdGlvbiBweGUoaSxhKXtyZXR1cm4gYT1NYXRoLm1heCgwLGkuYmFuZHdpZHRoKCktYSoyKS8yLGkucm91bmQoKSYmKGE9TWF0aC5yb3VuZChhKSksZj0+K2koZikrYX1mdW5jdGlvbiBieGUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gRkx0KGksYSl7dmFyIGY9W10scD1udWxsLHY9bnVsbCxtPTYsYj02LEU9MyxfPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsTD1pPT09ZFV8fGk9PT1nVT8tMToxLE49aT09PWdVfHxpPT09VWZ0PyJ4IjoieSIsQj1pPT09ZFV8fGk9PT1XZnQ/ZnhlOmR4ZTtmdW5jdGlvbiBqKFIpe3ZhciB6PXA/PyhhLnRpY2tzP2EudGlja3MuYXBwbHkoYSxmKTphLmRvbWFpbigpKSxLPXY/PyhhLnRpY2tGb3JtYXQ/YS50aWNrRm9ybWF0LmFwcGx5KGEsZik6aHhlKSxpdD1NYXRoLm1heChtLDApK0Usc3Q9YS5yYW5nZSgpLHV0PStzdFswXStfLGJ0PStzdFtzdC5sZW5ndGgtMV0rXyxtdD0oYS5iYW5kd2lkdGg/cHhlOmd4ZSkoYS5jb3B5KCksXykseXQ9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSLGR0PXl0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxodD15dC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YSh6LGEpLm9yZGVyKCksd3Q9aHQuZXhpdCgpLFg9aHQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxwdD1odC5zZWxlY3QoImxpbmUiKSxVPWh0LnNlbGVjdCgidGV4dCIpO2R0PWR0Lm1lcmdlKGR0LmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxodD1odC5tZXJnZShYKSxwdD1wdC5tZXJnZShYLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoTisiMiIsTCptKSksVT1VLm1lcmdlKFguYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoTixMKml0KS5hdHRyKCJkeSIsaT09PWRVPyIwZW0iOmk9PT1XZnQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxSIT09eXQmJihkdD1kdC50cmFuc2l0aW9uKFIpLGh0PWh0LnRyYW5zaXRpb24oUikscHQ9cHQudHJhbnNpdGlvbihSKSxVPVUudHJhbnNpdGlvbihSKSx3dD13dC50cmFuc2l0aW9uKFIpLmF0dHIoIm9wYWNpdHkiLFBMdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4dCl7cmV0dXJuIGlzRmluaXRlKHh0PW10KHh0KSk/Qih4dCtfKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxYLmF0dHIoIm9wYWNpdHkiLFBMdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4dCl7dmFyIG50PXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIEIoKG50JiZpc0Zpbml0ZShudD1udCh4dCkpP250Om10KHh0KSkrXyl9KSksd3QucmVtb3ZlKCksZHQuYXR0cigiZCIsaT09PWdVfHxpPT09VWZ0P2I/Ik0iK0wqYisiLCIrdXQrIkgiK18rIlYiK2J0KyJIIitMKmI6Ik0iK18rIiwiK3V0KyJWIitidDpiPyJNIit1dCsiLCIrTCpiKyJWIitfKyJIIitidCsiViIrTCpiOiJNIit1dCsiLCIrXysiSCIrYnQpLGh0LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeHQpe3JldHVybiBCKG10KHh0KStfKX0pLHB0LmF0dHIoTisiMiIsTCptKSxVLmF0dHIoTixMKml0KS50ZXh0KEspLHl0LmZpbHRlcihieGUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLGk9PT1VZnQ/InN0YXJ0IjppPT09Z1U/ImVuZCI6Im1pZGRsZSIpLHl0LmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1tdH0pfXJldHVybiBqLnNjYWxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVIsaik6YX0sai50aWNrcz1mdW5jdGlvbigpe3JldHVybiBmPUFycmF5LmZyb20oYXJndW1lbnRzKSxqfSxqLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9Uj09bnVsbD9bXTpBcnJheS5mcm9tKFIpLGopOmYuc2xpY2UoKX0sai50aWNrVmFsdWVzPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPVI9PW51bGw/bnVsbDpBcnJheS5mcm9tKFIpLGopOnAmJnAuc2xpY2UoKX0sai50aWNrRm9ybWF0PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PVIsaik6dn0sai50aWNrU2l6ZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1iPStSLGopOm19LGoudGlja1NpemVJbm5lcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rUixqKTptfSxqLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K1Isaik6Yn0sai50aWNrUGFkZGluZz1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0rUixqKTpFfSxqLm9mZnNldD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rUixqKTpffSxqfWZ1bmN0aW9uIHZ4ZShpKXtyZXR1cm4gRkx0KGRVLGkpfWZ1bmN0aW9uIHd4ZShpKXtyZXR1cm4gRkx0KFdmdCxpKX12YXIgbXhlPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIEJMdCgpe2Zvcih2YXIgaT0wLGE9YXJndW1lbnRzLmxlbmd0aCxmPXt9LHA7aTxhOysraSl7aWYoIShwPWFyZ3VtZW50c1tpXSsiIil8fHAgaW4gZnx8L1tccy5dLy50ZXN0KHApKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3ApO2ZbcF09W119cmV0dXJuIG5ldyBwVShmKX1mdW5jdGlvbiBwVShpKXt0aGlzLl89aX1mdW5jdGlvbiB5eGUoaSxhKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGYpe3ZhciBwPSIiLHY9Zi5pbmRleE9mKCIuIik7aWYodj49MCYmKHA9Zi5zbGljZSh2KzEpLGY9Zi5zbGljZSgwLHYpKSxmJiYhYS5oYXNPd25Qcm9wZXJ0eShmKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitmKTtyZXR1cm57dHlwZTpmLG5hbWU6cH19KX1wVS5wcm90b3R5cGU9Qkx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cFUsb246ZnVuY3Rpb24oaSxhKXt2YXIgZj10aGlzLl8scD15eGUoaSsiIixmKSx2LG09LTEsYj1wLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KyttPGI7KWlmKCh2PShpPXBbbV0pLnR5cGUpJiYodj14eGUoZlt2XSxpLm5hbWUpKSlyZXR1cm4gdjtyZXR1cm59aWYoYSE9bnVsbCYmdHlwZW9mIGEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2EpO2Zvcig7KyttPGI7KWlmKHY9KGk9cFttXSkudHlwZSlmW3ZdPVJMdChmW3ZdLGkubmFtZSxhKTtlbHNlIGlmKGE9PW51bGwpZm9yKHYgaW4gZilmW3ZdPVJMdChmW3ZdLGkubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBpPXt9LGE9dGhpcy5fO2Zvcih2YXIgZiBpbiBhKWlbZl09YVtmXS5zbGljZSgpO3JldHVybiBuZXcgcFUoaSl9LGNhbGw6ZnVuY3Rpb24oaSxhKXtpZigodj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBmPW5ldyBBcnJheSh2KSxwPTAsdixtO3A8djsrK3ApZltwXT1hcmd1bWVudHNbcCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGkpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2kpO2ZvcihtPXRoaXMuX1tpXSxwPTAsdj1tLmxlbmd0aDtwPHY7KytwKW1bcF0udmFsdWUuYXBwbHkoYSxmKX0sYXBwbHk6ZnVuY3Rpb24oaSxhLGYpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKHZhciBwPXRoaXMuX1tpXSx2PTAsbT1wLmxlbmd0aDt2PG07Kyt2KXBbdl0udmFsdWUuYXBwbHkoYSxmKX19O2Z1bmN0aW9uIHh4ZShpLGEpe2Zvcih2YXIgZj0wLHA9aS5sZW5ndGgsdjtmPHA7KytmKWlmKCh2PWlbZl0pLm5hbWU9PT1hKXJldHVybiB2LnZhbHVlfWZ1bmN0aW9uIFJMdChpLGEsZil7Zm9yKHZhciBwPTAsdj1pLmxlbmd0aDtwPHY7KytwKWlmKGlbcF0ubmFtZT09PWEpe2lbcF09bXhlLGk9aS5zbGljZSgwLHApLmNvbmNhdChpLnNsaWNlKHArMSkpO2JyZWFrfXJldHVybiBmIT1udWxsJiZpLnB1c2goe25hbWU6YSx2YWx1ZTpmfSksaX12YXIgS2Z0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBqTHQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOktmdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGJVKGkpe3ZhciBhPWkrPSIiLGY9YS5pbmRleE9mKCI6Iik7cmV0dXJuIGY+PTAmJihhPWkuc2xpY2UoMCxmKSkhPT0ieG1sbnMiJiYoaT1pLnNsaWNlKGYrMSkpLGpMdC5oYXNPd25Qcm9wZXJ0eShhKT97c3BhY2U6akx0W2FdLGxvY2FsOml9Oml9ZnVuY3Rpb24ga3hlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMub3duZXJEb2N1bWVudCxmPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBmPT09S2Z0JiZhLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1LZnQ/YS5jcmVhdGVFbGVtZW50KGkpOmEuY3JlYXRlRWxlbWVudE5TKGYsaSl9fWZ1bmN0aW9uIEV4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiAkTHQoaSl7dmFyIGE9YlUoaSk7cmV0dXJuKGEubG9jYWw/RXhlOmt4ZSkoYSl9ZnVuY3Rpb24gVHhlKCl7fWZ1bmN0aW9uIFlmdChpKXtyZXR1cm4gaT09bnVsbD9UeGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGkpfX1mdW5jdGlvbiBDeGUoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPVlmdChpKSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLHY9MDt2PGY7Kyt2KWZvcih2YXIgbT1hW3ZdLGI9bS5sZW5ndGgsRT1wW3ZdPW5ldyBBcnJheShiKSxfLEwsTj0wO048YjsrK04pKF89bVtOXSkmJihMPWkuY2FsbChfLF8uX19kYXRhX18sTixtKSkmJigiX19kYXRhX18iaW4gXyYmKEwuX19kYXRhX189Xy5fX2RhdGFfXyksRVtOXT1MKTtyZXR1cm4gbmV3IG5nKHAsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gekx0KGkpe3JldHVybiBpPT1udWxsP1tdOkFycmF5LmlzQXJyYXkoaSk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIF94ZSgpe3JldHVybltdfWZ1bmN0aW9uIHFMdChpKXtyZXR1cm4gaT09bnVsbD9feGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGkpfX1mdW5jdGlvbiBTeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHpMdChpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEF4ZShpKXt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPVN4ZShpKTppPXFMdChpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1bXSx2PVtdLG09MDttPGY7KyttKWZvcih2YXIgYj1hW21dLEU9Yi5sZW5ndGgsXyxMPTA7TDxFOysrTCkoXz1iW0xdKSYmKHAucHVzaChpLmNhbGwoXyxfLl9fZGF0YV9fLEwsYikpLHYucHVzaChfKSk7cmV0dXJuIG5ldyBuZyhwLHYpfWZ1bmN0aW9uIEhMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGkpfX1mdW5jdGlvbiBHTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoZXMoaSl9fXZhciBMeGU9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gTXhlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBMeGUuY2FsbCh0aGlzLmNoaWxkcmVuLGkpfX1mdW5jdGlvbiBJeGUoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH1mdW5jdGlvbiBEeGUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0KGk9PW51bGw/SXhlOk14ZSh0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdMdChpKSkpfXZhciBPeGU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBOeGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBQeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE94ZS5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIEZ4ZShpKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwoaT09bnVsbD9OeGU6UHhlKHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R0x0KGkpKSl9ZnVuY3Rpb24gQnhlKGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1ITHQoaSkpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1hLmxlbmd0aCxwPW5ldyBBcnJheShmKSx2PTA7djxmOysrdilmb3IodmFyIG09YVt2XSxiPW0ubGVuZ3RoLEU9cFt2XT1bXSxfLEw9MDtMPGI7KytMKShfPW1bTF0pJiZpLmNhbGwoXyxfLl9fZGF0YV9fLEwsbSkmJkUucHVzaChfKTtyZXR1cm4gbmV3IG5nKHAsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVkx0KGkpe3JldHVybiBuZXcgQXJyYXkoaS5sZW5ndGgpfWZ1bmN0aW9uIFJ4ZSgpe3JldHVybiBuZXcgbmcodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoVkx0KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB2VShpLGEpe3RoaXMub3duZXJEb2N1bWVudD1pLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9aS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1pLHRoaXMuX19kYXRhX189YX12VS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZVLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGksdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihpLGEpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGksYSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGkpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChpKX19O2Z1bmN0aW9uIGp4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gJHhlKGksYSxmLHAsdixtKXtmb3IodmFyIGI9MCxFLF89YS5sZW5ndGgsTD1tLmxlbmd0aDtiPEw7KytiKShFPWFbYl0pPyhFLl9fZGF0YV9fPW1bYl0scFtiXT1FKTpmW2JdPW5ldyB2VShpLG1bYl0pO2Zvcig7YjxfOysrYikoRT1hW2JdKSYmKHZbYl09RSl9ZnVuY3Rpb24genhlKGksYSxmLHAsdixtLGIpe3ZhciBFLF8sTD1uZXcgTWFwLE49YS5sZW5ndGgsQj1tLmxlbmd0aCxqPW5ldyBBcnJheShOKSxSO2ZvcihFPTA7RTxOOysrRSkoXz1hW0VdKSYmKGpbRV09Uj1iLmNhbGwoXyxfLl9fZGF0YV9fLEUsYSkrIiIsTC5oYXMoUik/dltFXT1fOkwuc2V0KFIsXykpO2ZvcihFPTA7RTxCOysrRSlSPWIuY2FsbChpLG1bRV0sRSxtKSsiIiwoXz1MLmdldChSKSk/KHBbRV09XyxfLl9fZGF0YV9fPW1bRV0sTC5kZWxldGUoUikpOmZbRV09bmV3IHZVKGksbVtFXSk7Zm9yKEU9MDtFPE47KytFKShfPWFbRV0pJiZMLmdldChqW0VdKT09PV8mJih2W0VdPV8pfWZ1bmN0aW9uIHF4ZShpKXtyZXR1cm4gaS5fX2RhdGFfX31mdW5jdGlvbiBIeGUoaSxhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLHF4ZSk7dmFyIGY9YT96eGU6JHhlLHA9dGhpcy5fcGFyZW50cyx2PXRoaXMuX2dyb3Vwczt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9anhlKGkpKTtmb3IodmFyIG09di5sZW5ndGgsYj1uZXcgQXJyYXkobSksRT1uZXcgQXJyYXkobSksXz1uZXcgQXJyYXkobSksTD0wO0w8bTsrK0wpe3ZhciBOPXBbTF0sQj12W0xdLGo9Qi5sZW5ndGgsUj1HeGUoaS5jYWxsKE4sTiYmTi5fX2RhdGFfXyxMLHApKSx6PVIubGVuZ3RoLEs9RVtMXT1uZXcgQXJyYXkoeiksaXQ9YltMXT1uZXcgQXJyYXkoeiksc3Q9X1tMXT1uZXcgQXJyYXkoaik7ZihOLEIsSyxpdCxzdCxSLGEpO2Zvcih2YXIgdXQ9MCxidD0wLG10LHl0O3V0PHo7Kyt1dClpZihtdD1LW3V0XSl7Zm9yKHV0Pj1idCYmKGJ0PXV0KzEpOyEoeXQ9aXRbYnRdKSYmKytidDx6Oyk7bXQuX25leHQ9eXR8fG51bGx9fXJldHVybiBiPW5ldyBuZyhiLHApLGIuX2VudGVyPUUsYi5fZXhpdD1fLGJ9ZnVuY3Rpb24gR3hlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gVnhlKCl7cmV0dXJuIG5ldyBuZyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFZMdCksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVXhlKGksYSxmKXt2YXIgcD10aGlzLmVudGVyKCksdj10aGlzLG09dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iPyhwPWkocCkscCYmKHA9cC5zZWxlY3Rpb24oKSkpOnA9cC5hcHBlbmQoaSsiIiksYSE9bnVsbCYmKHY9YSh2KSx2JiYodj12LnNlbGVjdGlvbigpKSksZj09bnVsbD9tLnJlbW92ZSgpOmYobSkscCYmdj9wLm1lcmdlKHYpLm9yZGVyKCk6dn1mdW5jdGlvbiBXeGUoaSl7Zm9yKHZhciBhPWkuc2VsZWN0aW9uP2kuc2VsZWN0aW9uKCk6aSxmPXRoaXMuX2dyb3VwcyxwPWEuX2dyb3Vwcyx2PWYubGVuZ3RoLG09cC5sZW5ndGgsYj1NYXRoLm1pbih2LG0pLEU9bmV3IEFycmF5KHYpLF89MDtfPGI7KytfKWZvcih2YXIgTD1mW19dLE49cFtfXSxCPUwubGVuZ3RoLGo9RVtfXT1uZXcgQXJyYXkoQiksUix6PTA7ejxCOysreikoUj1MW3pdfHxOW3pdKSYmKGpbel09Uik7Zm9yKDtfPHY7KytfKUVbX109ZltfXTtyZXR1cm4gbmV3IG5nKEUsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gS3hlKCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPS0xLGY9aS5sZW5ndGg7KythPGY7KWZvcih2YXIgcD1pW2FdLHY9cC5sZW5ndGgtMSxtPXBbdl0sYjstLXY+PTA7KShiPXBbdl0pJiYobSYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtKV40JiZtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsbSksbT1iKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBZeGUoaSl7aXx8KGk9WHhlKTtmdW5jdGlvbiBhKEIsail7cmV0dXJuIEImJmo/aShCLl9fZGF0YV9fLGouX19kYXRhX18pOiFCLSFqfWZvcih2YXIgZj10aGlzLl9ncm91cHMscD1mLmxlbmd0aCx2PW5ldyBBcnJheShwKSxtPTA7bTxwOysrbSl7Zm9yKHZhciBiPWZbbV0sRT1iLmxlbmd0aCxfPXZbbV09bmV3IEFycmF5KEUpLEwsTj0wO048RTsrK04pKEw9YltOXSkmJihfW05dPUwpO18uc29ydChhKX1yZXR1cm4gbmV3IG5nKHYsdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBYeGUoaSxhKXtyZXR1cm4gaTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gUXhlKCl7dmFyIGk9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxpLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIFp4ZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfWZ1bmN0aW9uIEp4ZSgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMsYT0wLGY9aS5sZW5ndGg7YTxmOysrYSlmb3IodmFyIHA9aVthXSx2PTAsbT1wLmxlbmd0aDt2PG07Kyt2KXt2YXIgYj1wW3ZdO2lmKGIpcmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdDZlKCl7bGV0IGk9MDtmb3IoY29uc3QgYSBvZiB0aGlzKSsraTtyZXR1cm4gaX1mdW5jdGlvbiBlNmUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gbjZlKGkpe2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj0wLHA9YS5sZW5ndGg7ZjxwOysrZilmb3IodmFyIHY9YVtmXSxtPTAsYj12Lmxlbmd0aCxFO208YjsrK20pKEU9dlttXSkmJmkuY2FsbChFLEUuX19kYXRhX18sbSx2KTtyZXR1cm4gdGhpc31mdW5jdGlvbiByNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIGk2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHM2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGksYSl9fWZ1bmN0aW9uIGE2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGEpfX1mdW5jdGlvbiBvNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpOnRoaXMuc2V0QXR0cmlidXRlKGksZil9fWZ1bmN0aW9uIGM2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGYpfX1mdW5jdGlvbiB1NmUoaSxhKXt2YXIgZj1iVShpKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBwPXRoaXMubm9kZSgpO3JldHVybiBmLmxvY2FsP3AuZ2V0QXR0cmlidXRlTlMoZi5zcGFjZSxmLmxvY2FsKTpwLmdldEF0dHJpYnV0ZShmKX1yZXR1cm4gdGhpcy5lYWNoKChhPT1udWxsP2YubG9jYWw/aTZlOnI2ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9mLmxvY2FsP2M2ZTpvNmU6Zi5sb2NhbD9hNmU6czZlKShmLGEpKX1mdW5jdGlvbiBVTHQoaSl7cmV0dXJuIGkub3duZXJEb2N1bWVudCYmaS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxpLmRvY3VtZW50JiZpfHxpLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGw2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpfX1mdW5jdGlvbiBoNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLGYpfX1mdW5jdGlvbiBmNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3A9PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGkscCxmKX19ZnVuY3Rpb24gZDZlKGksYSxmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9sNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/ZjZlOmg2ZSkoaSxhLGY/PyIiKSk6bUEodGhpcy5ub2RlKCksaSl9ZnVuY3Rpb24gbUEoaSxhKXtyZXR1cm4gaS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGEpfHxVTHQoaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoYSl9ZnVuY3Rpb24gZzZlKGkpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2ldfX1mdW5jdGlvbiBwNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2ldPWF9fWZ1bmN0aW9uIGI2ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Y9PW51bGw/ZGVsZXRlIHRoaXNbaV06dGhpc1tpXT1mfX1mdW5jdGlvbiB2NmUoaSxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoYT09bnVsbD9nNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/YjZlOnA2ZSkoaSxhKSk6dGhpcy5ub2RlKClbaV19ZnVuY3Rpb24gV0x0KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBYZnQoaSl7cmV0dXJuIGkuY2xhc3NMaXN0fHxuZXcgS0x0KGkpfWZ1bmN0aW9uIEtMdChpKXt0aGlzLl9ub2RlPWksdGhpcy5fbmFtZXM9V0x0KGkuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9S0x0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMuX25hbWVzLmluZGV4T2YoaSk7YTwwJiYodGhpcy5fbmFtZXMucHVzaChpKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIGE9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTthPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGEsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoaSk+PTB9fTtmdW5jdGlvbiBZTHQoaSxhKXtmb3IodmFyIGY9WGZ0KGkpLHA9LTEsdj1hLmxlbmd0aDsrK3A8djspZi5hZGQoYVtwXSl9ZnVuY3Rpb24gWEx0KGksYSl7Zm9yKHZhciBmPVhmdChpKSxwPS0xLHY9YS5sZW5ndGg7KytwPHY7KWYucmVtb3ZlKGFbcF0pfWZ1bmN0aW9uIHc2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtZTHQodGhpcyxpKX19ZnVuY3Rpb24gbTZlKGkpe3JldHVybiBmdW5jdGlvbigpe1hMdCh0aGlzLGkpfX1mdW5jdGlvbiB5NmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXsoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/WUx0OlhMdCkodGhpcyxpKX19ZnVuY3Rpb24geDZlKGksYSl7dmFyIGY9V0x0KGkrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBwPVhmdCh0aGlzLm5vZGUoKSksdj0tMSxtPWYubGVuZ3RoOysrdjxtOylpZighcC5jb250YWlucyhmW3ZdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj95NmU6YT93NmU6bTZlKShmLGEpKX1mdW5jdGlvbiBrNmUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEU2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIFQ2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBDNmUoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/azZlOih0eXBlb2YgaT09ImZ1bmN0aW9uIj9UNmU6RTZlKShpKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9ZnVuY3Rpb24gXzZlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUzZlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWl9fWZ1bmN0aW9uIEE2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1hPz8iIn19ZnVuY3Rpb24gTDZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChpPT1udWxsP182ZToodHlwZW9mIGk9PSJmdW5jdGlvbiI/QTZlOlM2ZSkoaSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBNNmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSTZlKCl7cmV0dXJuIHRoaXMuZWFjaChNNmUpfWZ1bmN0aW9uIEQ2ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE82ZSgpe3JldHVybiB0aGlzLmVhY2goRDZlKX1mdW5jdGlvbiBONmUoaSl7dmFyIGE9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTokTHQoaSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9ZnVuY3Rpb24gUDZlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRjZlKGksYSl7dmFyIGY9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTokTHQoaSkscD1hPT1udWxsP1A2ZTp0eXBlb2YgYT09ImZ1bmN0aW9uIj9hOllmdChhKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZi5hcHBseSh0aGlzLGFyZ3VtZW50cykscC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gQjZlKCl7dmFyIGk9dGhpcy5wYXJlbnROb2RlO2kmJmkucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gUjZlKCl7cmV0dXJuIHRoaXMuZWFjaChCNmUpfWZ1bmN0aW9uIGo2ZSgpe3ZhciBpPXRoaXMuY2xvbmVOb2RlKCExKSxhPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYT9hLmluc2VydEJlZm9yZShpLHRoaXMubmV4dFNpYmxpbmcpOml9ZnVuY3Rpb24gJDZlKCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITApLGE9dGhpcy5wYXJlbnROb2RlO3JldHVybiBhP2EuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiB6NmUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0KGk/JDZlOmo2ZSl9ZnVuY3Rpb24gcTZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixpKTp0aGlzLm5vZGUoKS5fX2RhdGFfX31mdW5jdGlvbiBINmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe2kuY2FsbCh0aGlzLGEsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIEc2ZShpKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBmPSIiLHA9YS5pbmRleE9mKCIuIik7cmV0dXJuIHA+PTAmJihmPWEuc2xpY2UocCsxKSxhPWEuc2xpY2UoMCxwKSkse3R5cGU6YSxuYW1lOmZ9fSl9ZnVuY3Rpb24gVjZlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19vbjtpZihhKXtmb3IodmFyIGY9MCxwPS0xLHY9YS5sZW5ndGgsbTtmPHY7KytmKW09YVtmXSwoIWkudHlwZXx8bS50eXBlPT09aS50eXBlKSYmbS5uYW1lPT09aS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtLnR5cGUsbS5saXN0ZW5lcixtLm9wdGlvbnMpOmFbKytwXT1tOysrcD9hLmxlbmd0aD1wOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBVNmUoaSxhLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBwPXRoaXMuX19vbix2LG09SDZlKGEpO2lmKHApe2Zvcih2YXIgYj0wLEU9cC5sZW5ndGg7YjxFOysrYilpZigodj1wW2JdKS50eXBlPT09aS50eXBlJiZ2Lm5hbWU9PT1pLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcix2Lm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih2LnR5cGUsdi5saXN0ZW5lcj1tLHYub3B0aW9ucz1mKSx2LnZhbHVlPWE7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoaS50eXBlLG0sZiksdj17dHlwZTppLnR5cGUsbmFtZTppLm5hbWUsdmFsdWU6YSxsaXN0ZW5lcjptLG9wdGlvbnM6Zn0scD9wLnB1c2godik6dGhpcy5fX29uPVt2XX19ZnVuY3Rpb24gVzZlKGksYSxmKXt2YXIgcD1HNmUoaSsiIiksdixtPXAubGVuZ3RoLGI7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgRT10aGlzLm5vZGUoKS5fX29uO2lmKEUpe2Zvcih2YXIgXz0wLEw9RS5sZW5ndGgsTjtfPEw7KytfKWZvcih2PTAsTj1FW19dO3Y8bTsrK3YpaWYoKGI9cFt2XSkudHlwZT09PU4udHlwZSYmYi5uYW1lPT09Ti5uYW1lKXJldHVybiBOLnZhbHVlfXJldHVybn1mb3IoRT1hP1U2ZTpWNmUsdj0wO3Y8bTsrK3YpdGhpcy5lYWNoKEUocFt2XSxhLGYpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBRTHQoaSxhLGYpe3ZhciBwPVVMdChpKSx2PXAuQ3VzdG9tRXZlbnQ7dHlwZW9mIHY9PSJmdW5jdGlvbiI/dj1uZXcgdihhLGYpOih2PXAuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZj8odi5pbml0RXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlKSx2LmRldGFpbD1mLmRldGFpbCk6di5pbml0RXZlbnQoYSwhMSwhMSkpLGkuZGlzcGF0Y2hFdmVudCh2KX1mdW5jdGlvbiBLNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUUx0KHRoaXMsaSxhKX19ZnVuY3Rpb24gWTZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFMdCh0aGlzLGksYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBYNmUoaSxhKXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgYT09ImZ1bmN0aW9uIj9ZNmU6SzZlKShpLGEpKX1mdW5jdGlvbipRNmUoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLGE9MCxmPWkubGVuZ3RoO2E8ZjsrK2EpZm9yKHZhciBwPWlbYV0sdj0wLG09cC5sZW5ndGgsYjt2PG07Kyt2KShiPXBbdl0pJiYoeWllbGQgYil9dmFyIFFmdD1bbnVsbF07ZnVuY3Rpb24gbmcoaSxhKXt0aGlzLl9ncm91cHM9aSx0aGlzLl9wYXJlbnRzPWF9ZnVuY3Rpb24geU4oKXtyZXR1cm4gbmV3IG5nKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sUWZ0KX1mdW5jdGlvbiBaNmUoKXtyZXR1cm4gdGhpc31uZy5wcm90b3R5cGU9eU4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuZyxzZWxlY3Q6Q3hlLHNlbGVjdEFsbDpBeGUsc2VsZWN0Q2hpbGQ6RHhlLHNlbGVjdENoaWxkcmVuOkZ4ZSxmaWx0ZXI6QnhlLGRhdGE6SHhlLGVudGVyOlJ4ZSxleGl0OlZ4ZSxqb2luOlV4ZSxtZXJnZTpXeGUsc2VsZWN0aW9uOlo2ZSxvcmRlcjpLeGUsc29ydDpZeGUsY2FsbDpReGUsbm9kZXM6WnhlLG5vZGU6SnhlLHNpemU6dDZlLGVtcHR5OmU2ZSxlYWNoOm42ZSxhdHRyOnU2ZSxzdHlsZTpkNmUscHJvcGVydHk6djZlLGNsYXNzZWQ6eDZlLHRleHQ6QzZlLGh0bWw6TDZlLHJhaXNlOkk2ZSxsb3dlcjpPNmUsYXBwZW5kOk42ZSxpbnNlcnQ6RjZlLHJlbW92ZTpSNmUsY2xvbmU6ejZlLGRhdHVtOnE2ZSxvbjpXNmUsZGlzcGF0Y2g6WDZlLFtTeW1ib2wuaXRlcmF0b3JdOlE2ZX07ZnVuY3Rpb24geXIoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9uZXcgbmcoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbW2ldXSxRZnQpfWZ1bmN0aW9uIFpMdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyBuZyhbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBuZyhbekx0KGkpXSxRZnQpfWZ1bmN0aW9uIHhOKGksYSxmKXtpLnByb3RvdHlwZT1hLnByb3RvdHlwZT1mLGYuY29uc3RydWN0b3I9aX1mdW5jdGlvbiB3VShpLGEpe3ZhciBmPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcCBpbiBhKWZbcF09YVtwXTtyZXR1cm4gZn1mdW5jdGlvbiBSNygpe312YXIga049LjcsbVU9MS9rTix5QT0iXFxzKihbKy1dP1xcZCspXFxzKiIsRU49IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHMzPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsSjZlPS9eIyhbMC05YS1mXXszLDh9KSQvLHRrZT1uZXcgUmVnRXhwKGBecmdiXFwoJHt5QX0sJHt5QX0sJHt5QX1cXCkkYCksZWtlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke3MzfSwke3MzfSwke3MzfVxcKSRgKSxua2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3lBfSwke3lBfSwke3lBfSwke0VOfVxcKSRgKSxya2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke3MzfSwke3MzfSwke3MzfSwke0VOfVxcKSRgKSxpa2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7RU59LCR7czN9LCR7czN9XFwpJGApLHNrZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7RU59LCR7czN9LCR7czN9LCR7RU59XFwpJGApLEpMdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTt4TihSNyxqNyx7Y29weShpKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGkpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp0TXQsZm9ybWF0SGV4OnRNdCxmb3JtYXRIZXg4OmFrZSxmb3JtYXRIc2w6b2tlLGZvcm1hdFJnYjplTXQsdG9TdHJpbmc6ZU10fSk7ZnVuY3Rpb24gdE10KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gYWtlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfWZ1bmN0aW9uIG9rZSgpe3JldHVybiBvTXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gZU10KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gajcoaSl7dmFyIGEsZjtyZXR1cm4gaT0oaSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGE9SjZlLmV4ZWMoaSkpPyhmPWFbMV0ubGVuZ3RoLGE9cGFyc2VJbnQoYVsxXSwxNiksZj09PTY/bk10KGEpOmY9PT0zP25ldyBwMChhPj44JjE1fGE+PjQmMjQwLGE+PjQmMTV8YSYyNDAsKGEmMTUpPDw0fGEmMTUsMSk6Zj09PTg/eVUoYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwoYSYyNTUpLzI1NSk6Zj09PTQ/eVUoYT4+MTImMTV8YT4+OCYyNDAsYT4+OCYxNXxhPj40JjI0MCxhPj40JjE1fGEmMjQwLCgoYSYxNSk8PDR8YSYxNSkvMjU1KTpudWxsKTooYT10a2UuZXhlYyhpKSk/bmV3IHAwKGFbMV0sYVsyXSxhWzNdLDEpOihhPWVrZS5leGVjKGkpKT9uZXcgcDAoYVsxXSoyNTUvMTAwLGFbMl0qMjU1LzEwMCxhWzNdKjI1NS8xMDAsMSk6KGE9bmtlLmV4ZWMoaSkpP3lVKGFbMV0sYVsyXSxhWzNdLGFbNF0pOihhPXJrZS5leGVjKGkpKT95VShhWzFdKjI1NS8xMDAsYVsyXSoyNTUvMTAwLGFbM10qMjU1LzEwMCxhWzRdKTooYT1pa2UuZXhlYyhpKSk/YU10KGFbMV0sYVsyXS8xMDAsYVszXS8xMDAsMSk6KGE9c2tlLmV4ZWMoaSkpP2FNdChhWzFdLGFbMl0vMTAwLGFbM10vMTAwLGFbNF0pOkpMdC5oYXNPd25Qcm9wZXJ0eShpKT9uTXQoSkx0W2ldKTppPT09InRyYW5zcGFyZW50Ij9uZXcgcDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBuTXQoaSl7cmV0dXJuIG5ldyBwMChpPj4xNiYyNTUsaT4+OCYyNTUsaSYyNTUsMSl9ZnVuY3Rpb24geVUoaSxhLGYscCl7cmV0dXJuIHA8PTAmJihpPWE9Zj1OYU4pLG5ldyBwMChpLGEsZixwKX1mdW5jdGlvbiByTXQoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBSN3x8KGk9ajcoaSkpLGk/KGk9aS5yZ2IoKSxuZXcgcDAoaS5yLGkuZyxpLmIsaS5vcGFjaXR5KSk6bmV3IHAwfWZ1bmN0aW9uIFpmdChpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ck10KGkpOm5ldyBwMChpLGEsZixwPz8xKX1mdW5jdGlvbiBwMChpLGEsZixwKXt0aGlzLnI9K2ksdGhpcy5nPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4ocDAsWmZ0LHdVKFI3LHticmlnaHRlcihpKXtyZXR1cm4gaT1pPT1udWxsP21VOk1hdGgucG93KG1VLGkpLG5ldyBwMCh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9rTjpNYXRoLnBvdyhrTixpKSxuZXcgcDAodGhpcy5yKmksdGhpcy5nKmksdGhpcy5iKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBwMCgkNyh0aGlzLnIpLCQ3KHRoaXMuZyksJDcodGhpcy5iKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmlNdCxmb3JtYXRIZXg6aU10LGZvcm1hdEhleDg6Y2tlLGZvcm1hdFJnYjpzTXQsdG9TdHJpbmc6c010fSkpO2Z1bmN0aW9uIGlNdCgpe3JldHVybmAjJHt6Nyh0aGlzLnIpfSR7ejcodGhpcy5nKX0ke3o3KHRoaXMuYil9YH1mdW5jdGlvbiBja2UoKXtyZXR1cm5gIyR7ejcodGhpcy5yKX0ke3o3KHRoaXMuZyl9JHt6Nyh0aGlzLmIpfSR7ejcoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBzTXQoKXtjb25zdCBpPXhVKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7aT09PTE/InJnYigiOiJyZ2JhKCJ9JHskNyh0aGlzLnIpfSwgJHskNyh0aGlzLmcpfSwgJHskNyh0aGlzLmIpfSR7aT09PTE/IikiOmAsICR7aX0pYH1gfWZ1bmN0aW9uIHhVKGkpe3JldHVybiBpc05hTihpKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSl9ZnVuY3Rpb24gJDcoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoaSl8fDApKX1mdW5jdGlvbiB6NyhpKXtyZXR1cm4gaT0kNyhpKSwoaTwxNj8iMCI6IiIpK2kudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGFNdChpLGEsZixwKXtyZXR1cm4gcDw9MD9pPWE9Zj1OYU46Zjw9MHx8Zj49MT9pPWE9TmFOOmE8PTAmJihpPU5hTiksbmV3IFd3KGksYSxmLHApfWZ1bmN0aW9uIG9NdChpKXtpZihpIGluc3RhbmNlb2YgV3cpcmV0dXJuIG5ldyBXdyhpLmgsaS5zLGkubCxpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBSN3x8KGk9ajcoaSkpLCFpKXJldHVybiBuZXcgV3c7aWYoaSBpbnN0YW5jZW9mIFd3KXJldHVybiBpO2k9aS5yZ2IoKTt2YXIgYT1pLnIvMjU1LGY9aS5nLzI1NSxwPWkuYi8yNTUsdj1NYXRoLm1pbihhLGYscCksbT1NYXRoLm1heChhLGYscCksYj1OYU4sRT1tLXYsXz0obSt2KS8yO3JldHVybiBFPyhhPT09bT9iPShmLXApL0UrKGY8cCkqNjpmPT09bT9iPShwLWEpL0UrMjpiPShhLWYpL0UrNCxFLz1fPC41P20rdjoyLW0tdixiKj02MCk6RT1fPjAmJl88MT8wOmIsbmV3IFd3KGIsRSxfLGkub3BhY2l0eSl9ZnVuY3Rpb24gdWtlKGksYSxmLHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9vTXQoaSk6bmV3IFd3KGksYSxmLHA/PzEpfWZ1bmN0aW9uIFd3KGksYSxmLHApe3RoaXMuaD0raSx0aGlzLnM9K2EsdGhpcy5sPStmLHRoaXMub3BhY2l0eT0rcH14TihXdyx1a2Usd1UoUjcse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/bVU6TWF0aC5wb3cobVUsaSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBpPWk9PW51bGw/a046TWF0aC5wb3coa04saSksbmV3IFd3KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmksdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCxhPWlzTmFOKGkpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGY9dGhpcy5sLHA9ZisoZjwuNT9mOjEtZikqYSx2PTIqZi1wO3JldHVybiBuZXcgcDAoSmZ0KGk+PTI0MD9pLTI0MDppKzEyMCx2LHApLEpmdChpLHYscCksSmZ0KGk8MTIwP2krMjQwOmktMTIwLHYscCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFd3KGNNdCh0aGlzLmgpLGtVKHRoaXMucyksa1UodGhpcy5sKSx4VSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGk9eFUodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8iaHNsKCI6ImhzbGEoIn0ke2NNdCh0aGlzLmgpfSwgJHtrVSh0aGlzLnMpKjEwMH0lLCAke2tVKHRoaXMubCkqMTAwfSUke2k9PT0xPyIpIjpgLCAke2l9KWB9YH19KSk7ZnVuY3Rpb24gY010KGkpe3JldHVybiBpPShpfHwwKSUzNjAsaTwwP2krMzYwOml9ZnVuY3Rpb24ga1UoaSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxpfHwwKSl9ZnVuY3Rpb24gSmZ0KGksYSxmKXtyZXR1cm4oaTw2MD9hKyhmLWEpKmkvNjA6aTwxODA/ZjppPDI0MD9hKyhmLWEpKigyNDAtaSkvNjA6YSkqMjU1fWNvbnN0IGxrZT1NYXRoLlBJLzE4MCxoa2U9MTgwL01hdGguUEksRVU9MTgsdU10PS45NjQyMixsTXQ9MSxoTXQ9LjgyNTIxLGZNdD00LzI5LHhBPTYvMjksZE10PTMqeEEqeEEsZmtlPXhBKnhBKnhBO2Z1bmN0aW9uIGdNdChpKXtpZihpIGluc3RhbmNlb2YgYTMpcmV0dXJuIG5ldyBhMyhpLmwsaS5hLGkuYixpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiBnNSlyZXR1cm4gcE10KGkpO2kgaW5zdGFuY2VvZiBwMHx8KGk9ck10KGkpKTt2YXIgYT1yMXQoaS5yKSxmPXIxdChpLmcpLHA9cjF0KGkuYiksdj10MXQoKC4yMjI1MDQ1KmErLjcxNjg3ODYqZisuMDYwNjE2OSpwKS9sTXQpLG0sYjtyZXR1cm4gYT09PWYmJmY9PT1wP209Yj12OihtPXQxdCgoLjQzNjA3NDcqYSsuMzg1MDY0OSpmKy4xNDMwODA0KnApL3VNdCksYj10MXQoKC4wMTM5MzIyKmErLjA5NzEwNDUqZisuNzE0MTczMypwKS9oTXQpKSxuZXcgYTMoMTE2KnYtMTYsNTAwKihtLXYpLDIwMCoodi1iKSxpLm9wYWNpdHkpfWZ1bmN0aW9uIGRrZShpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z010KGkpOm5ldyBhMyhpLGEsZixwPz8xKX1mdW5jdGlvbiBhMyhpLGEsZixwKXt0aGlzLmw9K2ksdGhpcy5hPSthLHRoaXMuYj0rZix0aGlzLm9wYWNpdHk9K3B9eE4oYTMsZGtlLHdVKFI3LHticmlnaHRlcihpKXtyZXR1cm4gbmV3IGEzKHRoaXMubCtFVSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBhMyh0aGlzLmwtRVUqKGk/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGk9KHRoaXMubCsxNikvMTE2LGE9aXNOYU4odGhpcy5hKT9pOmkrdGhpcy5hLzUwMCxmPWlzTmFOKHRoaXMuYik/aTppLXRoaXMuYi8yMDA7cmV0dXJuIGE9dU10KmUxdChhKSxpPWxNdCplMXQoaSksZj1oTXQqZTF0KGYpLG5ldyBwMChuMXQoMy4xMzM4NTYxKmEtMS42MTY4NjY3KmktLjQ5MDYxNDYqZiksbjF0KC0uOTc4NzY4NCphKzEuOTE2MTQxNSppKy4wMzM0NTQqZiksbjF0KC4wNzE5NDUzKmEtLjIyODk5MTQqaSsxLjQwNTI0MjcqZiksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gdDF0KGkpe3JldHVybiBpPmZrZT9NYXRoLnBvdyhpLDEvMyk6aS9kTXQrZk10fWZ1bmN0aW9uIGUxdChpKXtyZXR1cm4gaT54QT9pKmkqaTpkTXQqKGktZk10KX1mdW5jdGlvbiBuMXQoaSl7cmV0dXJuIDI1NSooaTw9LjAwMzEzMDg/MTIuOTIqaToxLjA1NSpNYXRoLnBvdyhpLDEvMi40KS0uMDU1KX1mdW5jdGlvbiByMXQoaSl7cmV0dXJuKGkvPTI1NSk8PS4wNDA0NT9pLzEyLjkyOk1hdGgucG93KChpKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZ2tlKGkpe2lmKGkgaW5zdGFuY2VvZiBnNSlyZXR1cm4gbmV3IGc1KGkuaCxpLmMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGEzfHwoaT1nTXQoaSkpLGkuYT09PTAmJmkuYj09PTApcmV0dXJuIG5ldyBnNShOYU4sMDxpLmwmJmkubDwxMDA/MDpOYU4saS5sLGkub3BhY2l0eSk7dmFyIGE9TWF0aC5hdGFuMihpLmIsaS5hKSpoa2U7cmV0dXJuIG5ldyBnNShhPDA/YSszNjA6YSxNYXRoLnNxcnQoaS5hKmkuYStpLmIqaS5iKSxpLmwsaS5vcGFjaXR5KX1mdW5jdGlvbiBpMXQoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2drZShpKTpuZXcgZzUoaSxhLGYscD8/MSl9ZnVuY3Rpb24gZzUoaSxhLGYscCl7dGhpcy5oPStpLHRoaXMuYz0rYSx0aGlzLmw9K2YsdGhpcy5vcGFjaXR5PStwfWZ1bmN0aW9uIHBNdChpKXtpZihpc05hTihpLmgpKXJldHVybiBuZXcgYTMoaS5sLDAsMCxpLm9wYWNpdHkpO3ZhciBhPWkuaCpsa2U7cmV0dXJuIG5ldyBhMyhpLmwsTWF0aC5jb3MoYSkqaS5jLE1hdGguc2luKGEpKmkuYyxpLm9wYWNpdHkpfXhOKGc1LGkxdCx3VShSNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIG5ldyBnNSh0aGlzLmgsdGhpcy5jLHRoaXMubCtFVSooaT8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBuZXcgZzUodGhpcy5oLHRoaXMuYyx0aGlzLmwtRVUqKGk/PzEpLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiBwTXQodGhpcykucmdiKCl9fSkpO2NvbnN0IFRVPWk9PigpPT5pO2Z1bmN0aW9uIGJNdChpLGEpe3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaStmKmF9fWZ1bmN0aW9uIHBrZShpLGEsZil7cmV0dXJuIGk9TWF0aC5wb3coaSxmKSxhPU1hdGgucG93KGEsZiktaSxmPTEvZixmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5wb3coaStwKmEsZil9fWZ1bmN0aW9uIGJrZShpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9iTXQoaSxmPjE4MHx8ZjwtMTgwP2YtMzYwKk1hdGgucm91bmQoZi8zNjApOmYpOlRVKGlzTmFOKGkpP2E6aSl9ZnVuY3Rpb24gdmtlKGkpe3JldHVybihpPStpKT09MT9UTjpmdW5jdGlvbihhLGYpe3JldHVybiBmLWE/cGtlKGEsZixpKTpUVShpc05hTihhKT9mOmEpfX1mdW5jdGlvbiBUTihpLGEpe3ZhciBmPWEtaTtyZXR1cm4gZj9iTXQoaSxmKTpUVShpc05hTihpKT9hOmkpfWNvbnN0IENVPWZ1bmN0aW9uIGkoYSl7dmFyIGY9dmtlKGEpO2Z1bmN0aW9uIHAodixtKXt2YXIgYj1mKCh2PVpmdCh2KSkuciwobT1aZnQobSkpLnIpLEU9Zih2LmcsbS5nKSxfPWYodi5iLG0uYiksTD1UTih2Lm9wYWNpdHksbS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oTil7cmV0dXJuIHYucj1iKE4pLHYuZz1FKE4pLHYuYj1fKE4pLHYub3BhY2l0eT1MKE4pLHYrIiJ9fXJldHVybiBwLmdhbW1hPWkscH0oMSk7ZnVuY3Rpb24gd2tlKGksYSl7YXx8KGE9W10pO3ZhciBmPWk/TWF0aC5taW4oYS5sZW5ndGgsaS5sZW5ndGgpOjAscD1hLnNsaWNlKCksdjtyZXR1cm4gZnVuY3Rpb24obSl7Zm9yKHY9MDt2PGY7Kyt2KXBbdl09aVt2XSooMS1tKSthW3ZdKm07cmV0dXJuIHB9fWZ1bmN0aW9uIG1rZShpKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGkpJiYhKGkgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24geWtlKGksYSl7dmFyIGY9YT9hLmxlbmd0aDowLHA9aT9NYXRoLm1pbihmLGkubGVuZ3RoKTowLHY9bmV3IEFycmF5KHApLG09bmV3IEFycmF5KGYpLGI7Zm9yKGI9MDtiPHA7KytiKXZbYl09bzF0KGlbYl0sYVtiXSk7Zm9yKDtiPGY7KytiKW1bYl09YVtiXTtyZXR1cm4gZnVuY3Rpb24oRSl7Zm9yKGI9MDtiPHA7KytiKW1bYl09dltiXShFKTtyZXR1cm4gbX19ZnVuY3Rpb24geGtlKGksYSl7dmFyIGY9bmV3IERhdGU7cmV0dXJuIGk9K2ksYT0rYSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zZXRUaW1lKGkqKDEtcCkrYSpwKSxmfX1mdW5jdGlvbiBLdyhpLGEpe3JldHVybiBpPStpLGE9K2EsZnVuY3Rpb24oZil7cmV0dXJuIGkqKDEtZikrYSpmfX1mdW5jdGlvbiBra2UoaSxhKXt2YXIgZj17fSxwPXt9LHY7KGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCIpJiYoaT17fSksKGE9PT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpJiYoYT17fSk7Zm9yKHYgaW4gYSl2IGluIGk/Zlt2XT1vMXQoaVt2XSxhW3ZdKTpwW3ZdPWFbdl07cmV0dXJuIGZ1bmN0aW9uKG0pe2Zvcih2IGluIGYpcFt2XT1mW3ZdKG0pO3JldHVybiBwfX12YXIgczF0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhMXQ9bmV3IFJlZ0V4cChzMXQuc291cmNlLCJnIik7ZnVuY3Rpb24gRWtlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBUa2UoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBpKGEpKyIifX1mdW5jdGlvbiB2TXQoaSxhKXt2YXIgZj1zMXQubGFzdEluZGV4PWExdC5sYXN0SW5kZXg9MCxwLHYsbSxiPS0xLEU9W10sXz1bXTtmb3IoaT1pKyIiLGE9YSsiIjsocD1zMXQuZXhlYyhpKSkmJih2PWExdC5leGVjKGEpKTspKG09di5pbmRleCk+ZiYmKG09YS5zbGljZShmLG0pLEVbYl0/RVtiXSs9bTpFWysrYl09bSksKHA9cFswXSk9PT0odj12WzBdKT9FW2JdP0VbYl0rPXY6RVsrK2JdPXY6KEVbKytiXT1udWxsLF8ucHVzaCh7aTpiLHg6S3cocCx2KX0pKSxmPWExdC5sYXN0SW5kZXg7cmV0dXJuIGY8YS5sZW5ndGgmJihtPWEuc2xpY2UoZiksRVtiXT9FW2JdKz1tOkVbKytiXT1tKSxFLmxlbmd0aDwyP19bMF0/VGtlKF9bMF0ueCk6RWtlKGEpOihhPV8ubGVuZ3RoLGZ1bmN0aW9uKEwpe2Zvcih2YXIgTj0wLEI7TjxhOysrTilFWyhCPV9bTl0pLmldPUIueChMKTtyZXR1cm4gRS5qb2luKCIiKX0pfWZ1bmN0aW9uIG8xdChpLGEpe3ZhciBmPXR5cGVvZiBhLHA7cmV0dXJuIGE9PW51bGx8fGY9PT0iYm9vbGVhbiI/VFUoYSk6KGY9PT0ibnVtYmVyIj9LdzpmPT09InN0cmluZyI/KHA9ajcoYSkpPyhhPXAsQ1UpOnZNdDphIGluc3RhbmNlb2Ygajc/Q1U6YSBpbnN0YW5jZW9mIERhdGU/eGtlOm1rZShhKT93a2U6QXJyYXkuaXNBcnJheShhKT95a2U6dHlwZW9mIGEudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIGEudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKGEpP2trZTpLdykoaSxhKX1mdW5jdGlvbiBDa2UoaSxhKXtyZXR1cm4gaT0raSxhPSthLGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLnJvdW5kKGkqKDEtZikrYSpmKX19dmFyIHdNdD0xODAvTWF0aC5QSSxjMXQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gbU10KGksYSxmLHAsdixtKXt2YXIgYixFLF87cmV0dXJuKGI9TWF0aC5zcXJ0KGkqaSthKmEpKSYmKGkvPWIsYS89YiksKF89aSpmK2EqcCkmJihmLT1pKl8scC09YSpfKSwoRT1NYXRoLnNxcnQoZipmK3AqcCkpJiYoZi89RSxwLz1FLF8vPUUpLGkqcDxhKmYmJihpPS1pLGE9LWEsXz0tXyxiPS1iKSx7dHJhbnNsYXRlWDp2LHRyYW5zbGF0ZVk6bSxyb3RhdGU6TWF0aC5hdGFuMihhLGkpKndNdCxza2V3WDpNYXRoLmF0YW4oXykqd010LHNjYWxlWDpiLHNjYWxlWTpFfX12YXIgX1U7ZnVuY3Rpb24gX2tlKGkpe2NvbnN0IGE9bmV3KHR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiI/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoaSsiIik7cmV0dXJuIGEuaXNJZGVudGl0eT9jMXQ6bU10KGEuYSxhLmIsYS5jLGEuZCxhLmUsYS5mKX1mdW5jdGlvbiBTa2UoaSl7cmV0dXJuIGk9PW51bGx8fChfVXx8KF9VPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLF9VLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixpKSwhKGk9X1UudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpP2MxdDooaT1pLm1hdHJpeCxtTXQoaS5hLGkuYixpLmMsaS5kLGkuZSxpLmYpKX1mdW5jdGlvbiB5TXQoaSxhLGYscCl7ZnVuY3Rpb24gdihMKXtyZXR1cm4gTC5sZW5ndGg/TC5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbShMLE4sQixqLFIseil7aWYoTCE9PUJ8fE4hPT1qKXt2YXIgSz1SLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsYSxudWxsLGYpO3oucHVzaCh7aTpLLTQseDpLdyhMLEIpfSx7aTpLLTIseDpLdyhOLGopfSl9ZWxzZShCfHxqKSYmUi5wdXNoKCJ0cmFuc2xhdGUoIitCK2EraitmKX1mdW5jdGlvbiBiKEwsTixCLGope0whPT1OPyhMLU4+MTgwP04rPTM2MDpOLUw+MTgwJiYoTCs9MzYwKSxqLnB1c2goe2k6Qi5wdXNoKHYoQikrInJvdGF0ZSgiLG51bGwscCktMix4Okt3KEwsTil9KSk6TiYmQi5wdXNoKHYoQikrInJvdGF0ZSgiK04rcCl9ZnVuY3Rpb24gRShMLE4sQixqKXtMIT09Tj9qLnB1c2goe2k6Qi5wdXNoKHYoQikrInNrZXdYKCIsbnVsbCxwKS0yLHg6S3coTCxOKX0pOk4mJkIucHVzaCh2KEIpKyJza2V3WCgiK04rcCl9ZnVuY3Rpb24gXyhMLE4sQixqLFIseil7aWYoTCE9PUJ8fE4hPT1qKXt2YXIgSz1SLnB1c2godihSKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ei5wdXNoKHtpOkstNCx4Okt3KEwsQil9LHtpOkstMix4Okt3KE4sail9KX1lbHNlKEIhPT0xfHxqIT09MSkmJlIucHVzaCh2KFIpKyJzY2FsZSgiK0IrIiwiK2orIikiKX1yZXR1cm4gZnVuY3Rpb24oTCxOKXt2YXIgQj1bXSxqPVtdO3JldHVybiBMPWkoTCksTj1pKE4pLG0oTC50cmFuc2xhdGVYLEwudHJhbnNsYXRlWSxOLnRyYW5zbGF0ZVgsTi50cmFuc2xhdGVZLEIsaiksYihMLnJvdGF0ZSxOLnJvdGF0ZSxCLGopLEUoTC5za2V3WCxOLnNrZXdYLEIsaiksXyhMLnNjYWxlWCxMLnNjYWxlWSxOLnNjYWxlWCxOLnNjYWxlWSxCLGopLEw9Tj1udWxsLGZ1bmN0aW9uKFIpe2Zvcih2YXIgej0tMSxLPWoubGVuZ3RoLGl0OysrejxLOylCWyhpdD1qW3pdKS5pXT1pdC54KFIpO3JldHVybiBCLmpvaW4oIiIpfX19dmFyIEFrZT15TXQoX2tlLCJweCwgIiwicHgpIiwiZGVnKSIpLExrZT15TXQoU2tlLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gTWtlKGkpe3JldHVybiBmdW5jdGlvbihhLGYpe3ZhciBwPWkoKGE9aTF0KGEpKS5oLChmPWkxdChmKSkuaCksdj1UTihhLmMsZi5jKSxtPVROKGEubCxmLmwpLGI9VE4oYS5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBhLmg9cChFKSxhLmM9dihFKSxhLmw9bShFKSxhLm9wYWNpdHk9YihFKSxhKyIifX19Y29uc3QgSWtlPU1rZShia2UpO3ZhciBrQT0wLENOPTAsX049MCx4TXQ9MWUzLFNVLFNOLEFVPTAscTc9MCxMVT0wLEFOPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGtNdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihpKXtzZXRUaW1lb3V0KGksMTcpfTtmdW5jdGlvbiB1MXQoKXtyZXR1cm4gcTd8fChrTXQoRGtlKSxxNz1BTi5ub3coKStMVSl9ZnVuY3Rpb24gRGtlKCl7cTc9MH1mdW5jdGlvbiBNVSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9TVUucHJvdG90eXBlPUVNdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1VLHJlc3RhcnQ6ZnVuY3Rpb24oaSxhLGYpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zj0oZj09bnVsbD91MXQoKTorZikrKGE9PW51bGw/MDorYSksIXRoaXMuX25leHQmJlNOIT09dGhpcyYmKFNOP1NOLl9uZXh0PXRoaXM6U1U9dGhpcyxTTj10aGlzKSx0aGlzLl9jYWxsPWksdGhpcy5fdGltZT1mLGwxdCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxsMXQoKSl9fTtmdW5jdGlvbiBFTXQoaSxhLGYpe3ZhciBwPW5ldyBNVTtyZXR1cm4gcC5yZXN0YXJ0KGksYSxmKSxwfWZ1bmN0aW9uIE9rZSgpe3UxdCgpLCsra0E7Zm9yKHZhciBpPVNVLGE7aTspKGE9cTctaS5fdGltZSk+PTAmJmkuX2NhbGwuY2FsbCh2b2lkIDAsYSksaT1pLl9uZXh0Oy0ta0F9ZnVuY3Rpb24gVE10KCl7cTc9KEFVPUFOLm5vdygpKStMVSxrQT1DTj0wO3RyeXtPa2UoKX1maW5hbGx5e2tBPTAsUGtlKCkscTc9MH19ZnVuY3Rpb24gTmtlKCl7dmFyIGk9QU4ubm93KCksYT1pLUFVO2E+eE10JiYoTFUtPWEsQVU9aSl9ZnVuY3Rpb24gUGtlKCl7Zm9yKHZhciBpLGE9U1UsZixwPTEvMDthOylhLl9jYWxsPyhwPmEuX3RpbWUmJihwPWEuX3RpbWUpLGk9YSxhPWEuX25leHQpOihmPWEuX25leHQsYS5fbmV4dD1udWxsLGE9aT9pLl9uZXh0PWY6U1U9Zik7U049aSxsMXQocCl9ZnVuY3Rpb24gbDF0KGkpe2lmKCFrQSl7Q04mJihDTj1jbGVhclRpbWVvdXQoQ04pKTt2YXIgYT1pLXE3O2E+MjQ/KGk8MS8wJiYoQ049c2V0VGltZW91dChUTXQsaS1BTi5ub3coKS1MVSkpLF9OJiYoX049Y2xlYXJJbnRlcnZhbChfTikpKTooX058fChBVT1BTi5ub3coKSxfTj1zZXRJbnRlcnZhbChOa2UseE10KSksa0E9MSxrTXQoVE10KSl9fWZ1bmN0aW9uIENNdChpLGEsZil7dmFyIHA9bmV3IE1VO3JldHVybiBhPWE9PW51bGw/MDorYSxwLnJlc3RhcnQodj0+e3Auc3RvcCgpLGkodithKX0sYSxmKSxwfXZhciBGa2U9Qkx0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLEJrZT1bXSxfTXQ9MCxTTXQ9MSxoMXQ9MixJVT0zLEFNdD00LGYxdD01LERVPTY7ZnVuY3Rpb24gT1UoaSxhLGYscCx2LG0pe3ZhciBiPWkuX190cmFuc2l0aW9uO2lmKCFiKWkuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZiBpbiBiKXJldHVybjtSa2UoaSxmLHtuYW1lOmEsaW5kZXg6cCxncm91cDp2LG9uOkZrZSx0d2VlbjpCa2UsdGltZTptLnRpbWUsZGVsYXk6bS5kZWxheSxkdXJhdGlvbjptLmR1cmF0aW9uLGVhc2U6bS5lYXNlLHRpbWVyOm51bGwsc3RhdGU6X010fSl9ZnVuY3Rpb24gZDF0KGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPl9NdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBmfWZ1bmN0aW9uIG8zKGksYSl7dmFyIGY9WXcoaSxhKTtpZihmLnN0YXRlPklVKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBmfWZ1bmN0aW9uIFl3KGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb247aWYoIWZ8fCEoZj1mW2FdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGZ9ZnVuY3Rpb24gUmtlKGksYSxmKXt2YXIgcD1pLl9fdHJhbnNpdGlvbix2O3BbYV09ZixmLnRpbWVyPUVNdChtLDAsZi50aW1lKTtmdW5jdGlvbiBtKEwpe2Yuc3RhdGU9U010LGYudGltZXIucmVzdGFydChiLGYuZGVsYXksZi50aW1lKSxmLmRlbGF5PD1MJiZiKEwtZi5kZWxheSl9ZnVuY3Rpb24gYihMKXt2YXIgTixCLGosUjtpZihmLnN0YXRlIT09U010KXJldHVybiBfKCk7Zm9yKE4gaW4gcClpZihSPXBbTl0sUi5uYW1lPT09Zi5uYW1lKXtpZihSLnN0YXRlPT09SVUpcmV0dXJuIENNdChiKTtSLnN0YXRlPT09QU10PyhSLnN0YXRlPURVLFIudGltZXIuc3RvcCgpLFIub24uY2FsbCgiaW50ZXJydXB0IixpLGkuX19kYXRhX18sUi5pbmRleCxSLmdyb3VwKSxkZWxldGUgcFtOXSk6K048YSYmKFIuc3RhdGU9RFUsUi50aW1lci5zdG9wKCksUi5vbi5jYWxsKCJjYW5jZWwiLGksaS5fX2RhdGFfXyxSLmluZGV4LFIuZ3JvdXApLGRlbGV0ZSBwW05dKX1pZihDTXQoZnVuY3Rpb24oKXtmLnN0YXRlPT09SVUmJihmLnN0YXRlPUFNdCxmLnRpbWVyLnJlc3RhcnQoRSxmLmRlbGF5LGYudGltZSksRShMKSl9KSxmLnN0YXRlPWgxdCxmLm9uLmNhbGwoInN0YXJ0IixpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxmLnN0YXRlPT09aDF0KXtmb3IoZi5zdGF0ZT1JVSx2PW5ldyBBcnJheShqPWYudHdlZW4ubGVuZ3RoKSxOPTAsQj0tMTtOPGo7KytOKShSPWYudHdlZW5bTl0udmFsdWUuY2FsbChpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSkmJih2WysrQl09Uik7di5sZW5ndGg9QisxfX1mdW5jdGlvbiBFKEwpe2Zvcih2YXIgTj1MPGYuZHVyYXRpb24/Zi5lYXNlLmNhbGwobnVsbCxML2YuZHVyYXRpb24pOihmLnRpbWVyLnJlc3RhcnQoXyksZi5zdGF0ZT1mMXQsMSksQj0tMSxqPXYubGVuZ3RoOysrQjxqOyl2W0JdLmNhbGwoaSxOKTtmLnN0YXRlPT09ZjF0JiYoZi5vbi5jYWxsKCJlbmQiLGksaS5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLF8oKSl9ZnVuY3Rpb24gXygpe2Yuc3RhdGU9RFUsZi50aW1lci5zdG9wKCksZGVsZXRlIHBbYV07Zm9yKHZhciBMIGluIHApcmV0dXJuO2RlbGV0ZSBpLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gamtlKGksYSl7dmFyIGY9aS5fX3RyYW5zaXRpb24scCx2LG09ITAsYjtpZihmKXthPWE9PW51bGw/bnVsbDphKyIiO2ZvcihiIGluIGYpe2lmKChwPWZbYl0pLm5hbWUhPT1hKXttPSExO2NvbnRpbnVlfXY9cC5zdGF0ZT5oMXQmJnAuc3RhdGU8ZjF0LHAuc3RhdGU9RFUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKHY/ImludGVycnVwdCI6ImNhbmNlbCIsaSxpLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIGZbYl19bSYmZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiAka2UoaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2prZSh0aGlzLGkpfSl9ZnVuY3Rpb24gemtlKGksYSl7dmFyIGYscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1vMyh0aGlzLGkpLG09di50d2VlbjtpZihtIT09Zil7cD1mPW07Zm9yKHZhciBiPTAsRT1wLmxlbmd0aDtiPEU7KytiKWlmKHBbYl0ubmFtZT09PWEpe3A9cC5zbGljZSgpLHAuc3BsaWNlKGIsMSk7YnJlYWt9fXYudHdlZW49cH19ZnVuY3Rpb24gcWtlKGksYSxmKXt2YXIgcCx2O2lmKHR5cGVvZiBmIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbT1vMyh0aGlzLGkpLGI9bS50d2VlbjtpZihiIT09cCl7dj0ocD1iKS5zbGljZSgpO2Zvcih2YXIgRT17bmFtZTphLHZhbHVlOmZ9LF89MCxMPXYubGVuZ3RoO188TDsrK18paWYodltfXS5uYW1lPT09YSl7dltfXT1FO2JyZWFrfV89PT1MJiZ2LnB1c2goRSl9bS50d2Vlbj12fX1mdW5jdGlvbiBIa2UoaSxhKXt2YXIgZj10aGlzLl9pZDtpZihpKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcD1Zdyh0aGlzLm5vZGUoKSxmKS50d2Vlbix2PTAsbT1wLmxlbmd0aCxiO3Y8bTsrK3YpaWYoKGI9cFt2XSkubmFtZT09PWkpcmV0dXJuIGIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgoYT09bnVsbD96a2U6cWtlKShmLGksYSkpfWZ1bmN0aW9uIGcxdChpLGEsZil7dmFyIHA9aS5faWQ7cmV0dXJuIGkuZWFjaChmdW5jdGlvbigpe3ZhciB2PW8zKHRoaXMscCk7KHYudmFsdWV8fCh2LnZhbHVlPXt9KSlbYV09Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih2KXtyZXR1cm4gWXcodixwKS52YWx1ZVthXX19ZnVuY3Rpb24gTE10KGksYSl7dmFyIGY7cmV0dXJuKHR5cGVvZiBhPT0ibnVtYmVyIj9LdzphIGluc3RhbmNlb2Ygajc/Q1U6KGY9ajcoYSkpPyhhPWYsQ1UpOnZNdCkoaSxhKX1mdW5jdGlvbiBHa2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSl9fWZ1bmN0aW9uIFZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIFVrZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIGI9PT12P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBXa2UoaSxhLGYpe3ZhciBwLHY9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIEtrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxfO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6KGI9dGhpcy5nZXRBdHRyaWJ1dGUoaSksXz1FKyIiLGI9PT1fP251bGw6Yj09PXAmJl89PT12P206KHY9XyxtPWEocD1iLEUpKSl9fWZ1bmN0aW9uIFlrZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiLEU9Zih0aGlzKSxfO3JldHVybiBFPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpOihiPXRoaXMuZ2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKSxfPUUrIiIsYj09PV8/bnVsbDpiPT09cCYmXz09PXY/bToodj1fLG09YShwPWIsRSkpKX19ZnVuY3Rpb24gWGtlKGksYSl7dmFyIGY9YlUoaSkscD1mPT09InRyYW5zZm9ybSI/TGtlOkxNdDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oaSx0eXBlb2YgYT09ImZ1bmN0aW9uIj8oZi5sb2NhbD9Za2U6S2tlKShmLHAsZzF0KHRoaXMsImF0dHIuIitpLGEpKTphPT1udWxsPyhmLmxvY2FsP1ZrZTpHa2UpKGYpOihmLmxvY2FsP1drZTpVa2UpKGYscCxhKSl9ZnVuY3Rpb24gUWtlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuc2V0QXR0cmlidXRlKGksYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBaa2UoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsYS5jYWxsKHRoaXMsZikpfX1mdW5jdGlvbiBKa2UoaSxhKXt2YXIgZixwO2Z1bmN0aW9uIHYoKXt2YXIgbT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PXAmJihmPShwPW0pJiZaa2UoaSxtKSksZn1yZXR1cm4gdi5fdmFsdWU9YSx2fWZ1bmN0aW9uIHQ4ZShpLGEpe3ZhciBmLHA7ZnVuY3Rpb24gdigpe3ZhciBtPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBtIT09cCYmKGY9KHA9bSkmJlFrZShpLG0pKSxmfXJldHVybiB2Ll92YWx1ZT1hLHZ9ZnVuY3Rpb24gZThlKGksYSl7dmFyIGY9ImF0dHIuIitpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZj10aGlzLnR3ZWVuKGYpKSYmZi5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihmLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgcD1iVShpKTtyZXR1cm4gdGhpcy50d2VlbihmLChwLmxvY2FsP0prZTp0OGUpKHAsYSkpfWZ1bmN0aW9uIG44ZShpLGEpe3JldHVybiBmdW5jdGlvbigpe2QxdCh0aGlzLGkpLmRlbGF5PSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcjhlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtkMXQodGhpcyxpKS5kZWxheT1hfX1mdW5jdGlvbiBpOGUoaSl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgaT09ImZ1bmN0aW9uIj9uOGU6cjhlKShhLGkpKTpZdyh0aGlzLm5vZGUoKSxhKS5kZWxheX1mdW5jdGlvbiBzOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPSthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gYThlKGksYSl7cmV0dXJuIGE9K2EsZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmR1cmF0aW9uPWF9fWZ1bmN0aW9uIG84ZShpKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3M4ZTphOGUpKGEsaSkpOll3KHRoaXMubm9kZSgpLGEpLmR1cmF0aW9ufWZ1bmN0aW9uIGM4ZShpLGEpe2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtvMyh0aGlzLGkpLmVhc2U9YX19ZnVuY3Rpb24gdThlKGkpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChjOGUoYSxpKSk6WXcodGhpcy5ub2RlKCksYSkuZWFzZX1mdW5jdGlvbiBsOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0eXBlb2YgZiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7bzModGhpcyxpKS5lYXNlPWZ9fWZ1bmN0aW9uIGg4ZShpKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChsOGUodGhpcy5faWQsaSkpfWZ1bmN0aW9uIGY4ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9SEx0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdj0wO3Y8ZjsrK3YpZm9yKHZhciBtPWFbdl0sYj1tLmxlbmd0aCxFPXBbdl09W10sXyxMPTA7TDxiOysrTCkoXz1tW0xdKSYmaS5jYWxsKF8sXy5fX2RhdGFfXyxMLG0pJiZFLnB1c2goXyk7cmV0dXJuIG5ldyBwNShwLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gZDhlKGkpe2lmKGkuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1pLl9ncm91cHMscD1hLmxlbmd0aCx2PWYubGVuZ3RoLG09TWF0aC5taW4ocCx2KSxiPW5ldyBBcnJheShwKSxFPTA7RTxtOysrRSlmb3IodmFyIF89YVtFXSxMPWZbRV0sTj1fLmxlbmd0aCxCPWJbRV09bmV3IEFycmF5KE4pLGosUj0wO1I8TjsrK1IpKGo9X1tSXXx8TFtSXSkmJihCW1JdPWopO2Zvcig7RTxwOysrRSliW0VdPWFbRV07cmV0dXJuIG5ldyBwNShiLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gZzhlKGkpe3JldHVybihpKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oYSl7dmFyIGY9YS5pbmRleE9mKCIuIik7cmV0dXJuIGY+PTAmJihhPWEuc2xpY2UoMCxmKSksIWF8fGE9PT0ic3RhcnQifSl9ZnVuY3Rpb24gcDhlKGksYSxmKXt2YXIgcCx2LG09ZzhlKGEpP2QxdDpvMztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1tKHRoaXMsaSksRT1iLm9uO0UhPT1wJiYodj0ocD1FKS5jb3B5KCkpLm9uKGEsZiksYi5vbj12fX1mdW5jdGlvbiBiOGUoaSxhKXt2YXIgZj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1l3KHRoaXMubm9kZSgpLGYpLm9uLm9uKGkpOnRoaXMuZWFjaChwOGUoZixpLGEpKX1mdW5jdGlvbiB2OGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZiE9PWkpcmV0dXJuO2EmJmEucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIHc4ZSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIix2OGUodGhpcy5faWQpKX1mdW5jdGlvbiBtOGUoaSl7dmFyIGE9dGhpcy5fbmFtZSxmPXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1ZZnQoaSkpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPW5ldyBBcnJheSh2KSxiPTA7Yjx2OysrYilmb3IodmFyIEU9cFtiXSxfPUUubGVuZ3RoLEw9bVtiXT1uZXcgQXJyYXkoXyksTixCLGo9MDtqPF87KytqKShOPUVbal0pJiYoQj1pLmNhbGwoTixOLl9fZGF0YV9fLGosRSkpJiYoIl9fZGF0YV9fImluIE4mJihCLl9fZGF0YV9fPU4uX19kYXRhX18pLExbal09QixPVShMW2pdLGEsZixqLEwsWXcoTixmKSkpO3JldHVybiBuZXcgcDUobSx0aGlzLl9wYXJlbnRzLGEsZil9ZnVuY3Rpb24geThlKGkpe3ZhciBhPXRoaXMuX25hbWUsZj10aGlzLl9pZDt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9cUx0KGkpKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT1bXSxiPVtdLEU9MDtFPHY7KytFKWZvcih2YXIgXz1wW0VdLEw9Xy5sZW5ndGgsTixCPTA7QjxMOysrQilpZihOPV9bQl0pe2Zvcih2YXIgaj1pLmNhbGwoTixOLl9fZGF0YV9fLEIsXyksUix6PVl3KE4sZiksSz0wLGl0PWoubGVuZ3RoO0s8aXQ7KytLKShSPWpbS10pJiZPVShSLGEsZixLLGoseik7bS5wdXNoKGopLGIucHVzaChOKX1yZXR1cm4gbmV3IHA1KG0sYixhLGYpfXZhciB4OGU9eU4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGs4ZSgpe3JldHVybiBuZXcgeDhlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBFOGUoaSxhKXt2YXIgZixwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09bUEodGhpcyxpKSxiPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLG1BKHRoaXMsaSkpO3JldHVybiBtPT09Yj9udWxsOm09PT1mJiZiPT09cD92OnY9YShmPW0scD1iKX19ZnVuY3Rpb24gTU10KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIFQ4ZShpLGEsZil7dmFyIHAsdj1mKyIiLG07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bUEodGhpcyxpKTtyZXR1cm4gYj09PXY/bnVsbDpiPT09cD9tOm09YShwPWIsZil9fWZ1bmN0aW9uIEM4ZShpLGEsZil7dmFyIHAsdixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPW1BKHRoaXMsaSksRT1mKHRoaXMpLF89RSsiIjtyZXR1cm4gRT09bnVsbCYmKF89RT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKSxtQSh0aGlzLGkpKSksYj09PV8/bnVsbDpiPT09cCYmXz09PXY/bToodj1fLG09YShwPWIsRSkpfX1mdW5jdGlvbiBfOGUoaSxhKXt2YXIgZixwLHYsbT0ic3R5bGUuIithLGI9ImVuZC4iK20sRTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1vMyh0aGlzLGkpLEw9Xy5vbixOPV8udmFsdWVbbV09PW51bGw/RXx8KEU9TU10KGEpKTp2b2lkIDA7KEwhPT1mfHx2IT09TikmJihwPShmPUwpLmNvcHkoKSkub24oYix2PU4pLF8ub249cH19ZnVuY3Rpb24gUzhlKGksYSxmKXt2YXIgcD0oaSs9IiIpPT0idHJhbnNmb3JtIj9Ba2U6TE10O3JldHVybiBhPT1udWxsP3RoaXMuc3R5bGVUd2VlbihpLEU4ZShpLHApKS5vbigiZW5kLnN0eWxlLiIraSxNTXQoaSkpOnR5cGVvZiBhPT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2VlbihpLEM4ZShpLHAsZzF0KHRoaXMsInN0eWxlLiIraSxhKSkpLmVhY2goXzhlKHRoaXMuX2lkLGkpKTp0aGlzLnN0eWxlVHdlZW4oaSxUOGUoaSxwLGEpLGYpLm9uKCJlbmQuc3R5bGUuIitpLG51bGwpfWZ1bmN0aW9uIEE4ZShpLGEsZil7cmV0dXJuIGZ1bmN0aW9uKHApe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxhLmNhbGwodGhpcyxwKSxmKX19ZnVuY3Rpb24gTDhlKGksYSxmKXt2YXIgcCx2O2Z1bmN0aW9uIG0oKXt2YXIgYj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYiE9PXYmJihwPSh2PWIpJiZBOGUoaSxiLGYpKSxwfXJldHVybiBtLl92YWx1ZT1hLG19ZnVuY3Rpb24gTThlKGksYSxmKXt2YXIgcD0ic3R5bGUuIisoaSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocD10aGlzLnR3ZWVuKHApKSYmcC5fdmFsdWU7aWYoYT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihwLG51bGwpO2lmKHR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihwLEw4ZShpLGEsZj8/IiIpKX1mdW5jdGlvbiBJOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1pfX1mdW5jdGlvbiBEOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aSh0aGlzKTt0aGlzLnRleHRDb250ZW50PWE/PyIifX1mdW5jdGlvbiBPOGUoaSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBpPT0iZnVuY3Rpb24iP0Q4ZShnMXQodGhpcywidGV4dCIsaSkpOkk4ZShpPT1udWxsPyIiOmkrIiIpKX1mdW5jdGlvbiBOOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMudGV4dENvbnRlbnQ9aS5jYWxsKHRoaXMsYSl9fWZ1bmN0aW9uIFA4ZShpKXt2YXIgYSxmO2Z1bmN0aW9uIHAoKXt2YXIgdj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdiE9PWYmJihhPShmPXYpJiZOOGUodikpLGF9cmV0dXJuIHAuX3ZhbHVlPWkscH1mdW5jdGlvbiBGOGUoaSl7dmFyIGE9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYoaT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihhLFA4ZShpKSl9ZnVuY3Rpb24gQjhlKCl7Zm9yKHZhciBpPXRoaXMuX25hbWUsYT10aGlzLl9pZCxmPUlNdCgpLHA9dGhpcy5fZ3JvdXBzLHY9cC5sZW5ndGgsbT0wO208djsrK20pZm9yKHZhciBiPXBbbV0sRT1iLmxlbmd0aCxfLEw9MDtMPEU7KytMKWlmKF89YltMXSl7dmFyIE49WXcoXyxhKTtPVShfLGksZixMLGIse3RpbWU6Ti50aW1lK04uZGVsYXkrTi5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOk4uZHVyYXRpb24sZWFzZTpOLmVhc2V9KX1yZXR1cm4gbmV3IHA1KHAsdGhpcy5fcGFyZW50cyxpLGYpfWZ1bmN0aW9uIFI4ZSgpe3ZhciBpLGEsZj10aGlzLHA9Zi5faWQsdj1mLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obSxiKXt2YXIgRT17dmFsdWU6Yn0sXz17dmFsdWU6ZnVuY3Rpb24oKXstLXY9PT0wJiZtKCl9fTtmLmVhY2goZnVuY3Rpb24oKXt2YXIgTD1vMyh0aGlzLHApLE49TC5vbjtOIT09aSYmKGE9KGk9TikuY29weSgpLGEuXy5jYW5jZWwucHVzaChFKSxhLl8uaW50ZXJydXB0LnB1c2goRSksYS5fLmVuZC5wdXNoKF8pKSxMLm9uPWF9KSx2PT09MCYmbSgpfSl9dmFyIGo4ZT0wO2Z1bmN0aW9uIHA1KGksYSxmLHApe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9YSx0aGlzLl9uYW1lPWYsdGhpcy5faWQ9cH1mdW5jdGlvbiBJTXQoKXtyZXR1cm4rK2o4ZX12YXIgYjU9eU4ucHJvdG90eXBlO3A1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cDUsc2VsZWN0Om04ZSxzZWxlY3RBbGw6eThlLHNlbGVjdENoaWxkOmI1LnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOmI1LnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmOGUsbWVyZ2U6ZDhlLHNlbGVjdGlvbjprOGUsdHJhbnNpdGlvbjpCOGUsY2FsbDpiNS5jYWxsLG5vZGVzOmI1Lm5vZGVzLG5vZGU6YjUubm9kZSxzaXplOmI1LnNpemUsZW1wdHk6YjUuZW1wdHksZWFjaDpiNS5lYWNoLG9uOmI4ZSxhdHRyOlhrZSxhdHRyVHdlZW46ZThlLHN0eWxlOlM4ZSxzdHlsZVR3ZWVuOk04ZSx0ZXh0Ok84ZSx0ZXh0VHdlZW46RjhlLHJlbW92ZTp3OGUsdHdlZW46SGtlLGRlbGF5Omk4ZSxkdXJhdGlvbjpvOGUsZWFzZTp1OGUsZWFzZVZhcnlpbmc6aDhlLGVuZDpSOGUsW1N5bWJvbC5pdGVyYXRvcl06YjVbU3ltYm9sLml0ZXJhdG9yXX07ZnVuY3Rpb24gJDhlKGkpe3JldHVybigoaSo9Mik8PTE/aSppKmk6KGktPTIpKmkqaSsyKS8yfXZhciB6OGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOiQ4ZX07ZnVuY3Rpb24gcThlKGksYSl7Zm9yKHZhciBmOyEoZj1pLl9fdHJhbnNpdGlvbil8fCEoZj1mW2FdKTspaWYoIShpPWkucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7YX0gbm90IGZvdW5kYCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSDhlKGkpe3ZhciBhLGY7aSBpbnN0YW5jZW9mIHA1PyhhPWkuX2lkLGk9aS5fbmFtZSk6KGE9SU10KCksKGY9ejhlKS50aW1lPXUxdCgpLGk9aT09bnVsbD9udWxsOmkrIiIpO2Zvcih2YXIgcD10aGlzLl9ncm91cHMsdj1wLmxlbmd0aCxtPTA7bTx2OysrbSlmb3IodmFyIGI9cFttXSxFPWIubGVuZ3RoLF8sTD0wO0w8RTsrK0wpKF89YltMXSkmJk9VKF8saSxhLEwsYixmfHxxOGUoXyxhKSk7cmV0dXJuIG5ldyBwNShwLHRoaXMuX3BhcmVudHMsaSxhKX15Ti5wcm90b3R5cGUuaW50ZXJydXB0PSRrZSx5Ti5wcm90b3R5cGUudHJhbnNpdGlvbj1IOGU7Y29uc3QgcDF0PU1hdGguUEksYjF0PTIqcDF0LEg3PTFlLTYsRzhlPWIxdC1INztmdW5jdGlvbiB2MXQoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB3MXQoKXtyZXR1cm4gbmV3IHYxdH12MXQucHJvdG90eXBlPXcxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYxdCxtb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK2ErIiwiKyh0aGlzLl94MT0rZikrIiwiKyh0aGlzLl95MT0rcCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuXys9IkMiKyAraSsiLCIrICthKyIsIisgK2YrIiwiKyArcCsiLCIrKHRoaXMuX3gxPSt2KSsiLCIrKHRoaXMuX3kxPSttKX0sYXJjVG86ZnVuY3Rpb24oaSxhLGYscCx2KXtpPStpLGE9K2EsZj0rZixwPStwLHY9K3Y7dmFyIG09dGhpcy5feDEsYj10aGlzLl95MSxFPWYtaSxfPXAtYSxMPW0taSxOPWItYSxCPUwqTCtOKk47aWYodjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3YpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNlIGlmKEI+SDcpaWYoIShNYXRoLmFicyhOKkUtXypMKT5INyl8fCF2KXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2V7dmFyIGo9Zi1tLFI9cC1iLHo9RSpFK18qXyxLPWoqaitSKlIsaXQ9TWF0aC5zcXJ0KHopLHN0PU1hdGguc3FydChCKSx1dD12Kk1hdGgudGFuKChwMXQtTWF0aC5hY29zKCh6K0ItSykvKDIqaXQqc3QpKSkvMiksYnQ9dXQvc3QsbXQ9dXQvaXQ7TWF0aC5hYnMoYnQtMSk+SDcmJih0aGlzLl8rPSJMIisoaStidCpMKSsiLCIrKGErYnQqTikpLHRoaXMuXys9IkEiK3YrIiwiK3YrIiwwLDAsIisgKyhOKmo+TCpSKSsiLCIrKHRoaXMuX3gxPWkrbXQqRSkrIiwiKyh0aGlzLl95MT1hK210Kl8pfX0sYXJjOmZ1bmN0aW9uKGksYSxmLHAsdixtKXtpPStpLGE9K2EsZj0rZixtPSEhbTt2YXIgYj1mKk1hdGguY29zKHApLEU9ZipNYXRoLnNpbihwKSxfPWkrYixMPWErRSxOPTFebSxCPW0/cC12OnYtcDtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK18rIiwiK0w6KE1hdGguYWJzKHRoaXMuX3gxLV8pPkg3fHxNYXRoLmFicyh0aGlzLl95MS1MKT5INykmJih0aGlzLl8rPSJMIitfKyIsIitMKSxmJiYoQjwwJiYoQj1CJWIxdCtiMXQpLEI+RzhlP3RoaXMuXys9IkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisoaS1iKSsiLCIrKGEtRSkrIkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisodGhpcy5feDE9XykrIiwiKyh0aGlzLl95MT1MKTpCPkg3JiYodGhpcy5fKz0iQSIrZisiLCIrZisiLDAsIisgKyhCPj1wMXQpKyIsIitOKyIsIisodGhpcy5feDE9aStmKk1hdGguY29zKHYpKSsiLCIrKHRoaXMuX3kxPWErZipNYXRoLnNpbih2KSkpKX0scmVjdDpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpKyJoIisgK2YrInYiKyArcCsiaCIrLWYrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBWOGUoaSl7aWYoIWkub2spdGhyb3cgbmV3IEVycm9yKGkuc3RhdHVzKyIgIitpLnN0YXR1c1RleHQpO3JldHVybiBpLnRleHQoKX1mdW5jdGlvbiBVOGUoaSxhKXtyZXR1cm4gZmV0Y2goaSxhKS50aGVuKFY4ZSl9ZnVuY3Rpb24gVzhlKGkpe3JldHVybihhLGYpPT5VOGUoYSxmKS50aGVuKHA9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocCxpKSl9dmFyIEs4ZT1XOGUoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBZOGUoaSl7cmV0dXJuIE1hdGguYWJzKGk9TWF0aC5yb3VuZChpKSk+PTFlMjE/aS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmkudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE5VKGksYSl7aWYoKGY9KGk9YT9pLnRvRXhwb25lbnRpYWwoYS0xKTppLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBmLHA9aS5zbGljZSgwLGYpO3JldHVybltwLmxlbmd0aD4xP3BbMF0rcC5zbGljZSgyKTpwLCtpLnNsaWNlKGYrMSldfWZ1bmN0aW9uIEVBKGkpe3JldHVybiBpPU5VKE1hdGguYWJzKGkpKSxpP2lbMV06TmFOfWZ1bmN0aW9uIFg4ZShpLGEpe3JldHVybiBmdW5jdGlvbihmLHApe2Zvcih2YXIgdj1mLmxlbmd0aCxtPVtdLGI9MCxFPWlbMF0sXz0wO3Y+MCYmRT4wJiYoXytFKzE+cCYmKEU9TWF0aC5tYXgoMSxwLV8pKSxtLnB1c2goZi5zdWJzdHJpbmcodi09RSx2K0UpKSwhKChfKz1FKzEpPnApKTspRT1pW2I9KGIrMSklaS5sZW5ndGhdO3JldHVybiBtLnJldmVyc2UoKS5qb2luKGEpfX1mdW5jdGlvbiBROGUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZil7cmV0dXJuIGlbK2ZdfSl9fXZhciBaOGU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUFUoaSl7aWYoIShhPVo4ZS5leGVjKGkpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2kpO3ZhciBhO3JldHVybiBuZXcgbTF0KHtmaWxsOmFbMV0sYWxpZ246YVsyXSxzaWduOmFbM10sc3ltYm9sOmFbNF0semVybzphWzVdLHdpZHRoOmFbNl0sY29tbWE6YVs3XSxwcmVjaXNpb246YVs4XSYmYVs4XS5zbGljZSgxKSx0cmltOmFbOV0sdHlwZTphWzEwXX0pfVBVLnByb3RvdHlwZT1tMXQucHJvdG90eXBlO2Z1bmN0aW9uIG0xdChpKXt0aGlzLmZpbGw9aS5maWxsPT09dm9pZCAwPyIgIjppLmZpbGwrIiIsdGhpcy5hbGlnbj1pLmFsaWduPT09dm9pZCAwPyI+IjppLmFsaWduKyIiLHRoaXMuc2lnbj1pLnNpZ249PT12b2lkIDA/Ii0iOmkuc2lnbisiIix0aGlzLnN5bWJvbD1pLnN5bWJvbD09PXZvaWQgMD8iIjppLnN5bWJvbCsiIix0aGlzLnplcm89ISFpLnplcm8sdGhpcy53aWR0aD1pLndpZHRoPT09dm9pZCAwP3ZvaWQgMDoraS53aWR0aCx0aGlzLmNvbW1hPSEhaS5jb21tYSx0aGlzLnByZWNpc2lvbj1pLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2kucHJlY2lzaW9uLHRoaXMudHJpbT0hIWkudHJpbSx0aGlzLnR5cGU9aS50eXBlPT09dm9pZCAwPyIiOmkudHlwZSsiIn1tMXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07ZnVuY3Rpb24gSjhlKGkpe3Q6Zm9yKHZhciBhPWkubGVuZ3RoLGY9MSxwPS0xLHY7ZjxhOysrZilzd2l0Y2goaVtmXSl7Y2FzZSIuIjpwPXY9ZjticmVhaztjYXNlIjAiOnA9PT0wJiYocD1mKSx2PWY7YnJlYWs7ZGVmYXVsdDppZighK2lbZl0pYnJlYWsgdDtwPjAmJihwPTApO2JyZWFrfXJldHVybiBwPjA/aS5zbGljZSgwLHApK2kuc2xpY2UodisxKTppfXZhciBETXQ7ZnVuY3Rpb24gdEVlKGksYSl7dmFyIGY9TlUoaSxhKTtpZighZilyZXR1cm4gaSsiIjt2YXIgcD1mWzBdLHY9ZlsxXSxtPXYtKERNdD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iodi8zKSkpKjMpKzEsYj1wLmxlbmd0aDtyZXR1cm4gbT09PWI/cDptPmI/cCtuZXcgQXJyYXkobS1iKzEpLmpvaW4oIjAiKTptPjA/cC5zbGljZSgwLG0pKyIuIitwLnNsaWNlKG0pOiIwLiIrbmV3IEFycmF5KDEtbSkuam9pbigiMCIpK05VKGksTWF0aC5tYXgoMCxhK20tMSkpWzBdfWZ1bmN0aW9uIE9NdChpLGEpe3ZhciBmPU5VKGksYSk7aWYoIWYpcmV0dXJuIGkrIiI7dmFyIHA9ZlswXSx2PWZbMV07cmV0dXJuIHY8MD8iMC4iK25ldyBBcnJheSgtdikuam9pbigiMCIpK3A6cC5sZW5ndGg+disxP3Auc2xpY2UoMCx2KzEpKyIuIitwLnNsaWNlKHYrMSk6cCtuZXcgQXJyYXkodi1wLmxlbmd0aCsyKS5qb2luKCIwIil9Y29uc3QgTk10PXsiJSI6KGksYSk9PihpKjEwMCkudG9GaXhlZChhKSxiOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMiksYzppPT5pKyIiLGQ6WThlLGU6KGksYSk9PmkudG9FeHBvbmVudGlhbChhKSxmOihpLGEpPT5pLnRvRml4ZWQoYSksZzooaSxhKT0+aS50b1ByZWNpc2lvbihhKSxvOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoOCkscDooaSxhKT0+T010KGkqMTAwLGEpLHI6T010LHM6dEVlLFg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4Omk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBQTXQoaSl7cmV0dXJuIGl9dmFyIEZNdD1BcnJheS5wcm90b3R5cGUubWFwLEJNdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gZUVlKGkpe3ZhciBhPWkuZ3JvdXBpbmc9PT12b2lkIDB8fGkudGhvdXNhbmRzPT09dm9pZCAwP1BNdDpYOGUoRk10LmNhbGwoaS5ncm91cGluZyxOdW1iZXIpLGkudGhvdXNhbmRzKyIiKSxmPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVswXSsiIixwPWkuY3VycmVuY3k9PT12b2lkIDA/IiI6aS5jdXJyZW5jeVsxXSsiIix2PWkuZGVjaW1hbD09PXZvaWQgMD8iLiI6aS5kZWNpbWFsKyIiLG09aS5udW1lcmFscz09PXZvaWQgMD9QTXQ6UThlKEZNdC5jYWxsKGkubnVtZXJhbHMsU3RyaW5nKSksYj1pLnBlcmNlbnQ9PT12b2lkIDA/IiUiOmkucGVyY2VudCsiIixFPWkubWludXM9PT12b2lkIDA/IuKIkiI6aS5taW51cysiIixfPWkubmFuPT09dm9pZCAwPyJOYU4iOmkubmFuKyIiO2Z1bmN0aW9uIEwoQil7Qj1QVShCKTt2YXIgaj1CLmZpbGwsUj1CLmFsaWduLHo9Qi5zaWduLEs9Qi5zeW1ib2wsaXQ9Qi56ZXJvLHN0PUIud2lkdGgsdXQ9Qi5jb21tYSxidD1CLnByZWNpc2lvbixtdD1CLnRyaW0seXQ9Qi50eXBlO3l0PT09Im4iPyh1dD0hMCx5dD0iZyIpOk5NdFt5dF18fChidD09PXZvaWQgMCYmKGJ0PTEyKSxtdD0hMCx5dD0iZyIpLChpdHx8aj09PSIwIiYmUj09PSI9IikmJihpdD0hMCxqPSIwIixSPSI9Iik7dmFyIGR0PUs9PT0iJCI/ZjpLPT09IiMiJiYvW2JveFhdLy50ZXN0KHl0KT8iMCIreXQudG9Mb3dlckNhc2UoKToiIixodD1LPT09IiQiP3A6L1slcF0vLnRlc3QoeXQpP2I6IiIsd3Q9Tk10W3l0XSxYPS9bZGVmZ3BycyVdLy50ZXN0KHl0KTtidD1idD09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoeXQpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGJ0KSk7ZnVuY3Rpb24gcHQoVSl7dmFyIHh0PWR0LG50PWh0LE90LE50LHF0O2lmKHl0PT09ImMiKW50PXd0KFUpK250LFU9IiI7ZWxzZXtVPStVO3ZhciBDdD1VPDB8fDEvVTwwO2lmKFU9aXNOYU4oVSk/Xzp3dChNYXRoLmFicyhVKSxidCksbXQmJihVPUo4ZShVKSksQ3QmJitVPT0wJiZ6IT09IisiJiYoQ3Q9ITEpLHh0PShDdD96PT09IigiP3o6RTp6PT09Ii0ifHx6PT09IigiPyIiOnopK3h0LG50PSh5dD09PSJzIj9CTXRbOCtETXQvM106IiIpK250KyhDdCYmej09PSIoIj8iKSI6IiIpLFgpe2ZvcihPdD0tMSxOdD1VLmxlbmd0aDsrK090PE50OylpZihxdD1VLmNoYXJDb2RlQXQoT3QpLDQ4PnF0fHxxdD41Nyl7bnQ9KHF0PT09NDY/ditVLnNsaWNlKE90KzEpOlUuc2xpY2UoT3QpKStudCxVPVUuc2xpY2UoMCxPdCk7YnJlYWt9fX11dCYmIWl0JiYoVT1hKFUsMS8wKSk7dmFyIFo9eHQubGVuZ3RoK1UubGVuZ3RoK250Lmxlbmd0aCxUdD1aPHN0P25ldyBBcnJheShzdC1aKzEpLmpvaW4oaik6IiI7c3dpdGNoKHV0JiZpdCYmKFU9YShUdCtVLFR0Lmxlbmd0aD9zdC1udC5sZW5ndGg6MS8wKSxUdD0iIiksUil7Y2FzZSI8IjpVPXh0K1UrbnQrVHQ7YnJlYWs7Y2FzZSI9IjpVPXh0K1R0K1UrbnQ7YnJlYWs7Y2FzZSJeIjpVPVR0LnNsaWNlKDAsWj1UdC5sZW5ndGg+PjEpK3h0K1UrbnQrVHQuc2xpY2UoWik7YnJlYWs7ZGVmYXVsdDpVPVR0K3h0K1UrbnQ7YnJlYWt9cmV0dXJuIG0oVSl9cmV0dXJuIHB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIrIiJ9LHB0fWZ1bmN0aW9uIE4oQixqKXt2YXIgUj1MKChCPVBVKEIpLEIudHlwZT0iZiIsQikpLHo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEVBKGopLzMpKSkqMyxLPU1hdGgucG93KDEwLC16KSxpdD1CTXRbOCt6LzNdO3JldHVybiBmdW5jdGlvbihzdCl7cmV0dXJuIFIoSypzdCkraXR9fXJldHVybntmb3JtYXQ6TCxmb3JtYXRQcmVmaXg6Tn19dmFyIEZVLFJNdCxqTXQ7bkVlKHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2Z1bmN0aW9uIG5FZShpKXtyZXR1cm4gRlU9ZUVlKGkpLFJNdD1GVS5mb3JtYXQsak10PUZVLmZvcm1hdFByZWZpeCxGVX1mdW5jdGlvbiByRWUoaSl7cmV0dXJuIE1hdGgubWF4KDAsLUVBKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gaUVlKGksYSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEVBKGEpLzMpKSkqMy1FQShNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIHNFZShpLGEpe3JldHVybiBpPU1hdGguYWJzKGkpLGE9TWF0aC5hYnMoYSktaSxNYXRoLm1heCgwLEVBKGEpLUVBKGkpKSsxfWZ1bmN0aW9uIHkxdChpLGEpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGEpLmRvbWFpbihpKTticmVha31yZXR1cm4gdGhpc31jb25zdCAkTXQ9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIHgxdCgpe3ZhciBpPW5ldyBETHQsYT1bXSxmPVtdLHA9JE10O2Z1bmN0aW9uIHYobSl7bGV0IGI9aS5nZXQobSk7aWYoYj09PXZvaWQgMCl7aWYocCE9PSRNdClyZXR1cm4gcDtpLnNldChtLGI9YS5wdXNoKG0pLTEpfXJldHVybiBmW2IlZi5sZW5ndGhdfXJldHVybiB2LmRvbWFpbj1mdW5jdGlvbihtKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS5zbGljZSgpO2E9W10saT1uZXcgREx0O2Zvcihjb25zdCBiIG9mIG0paS5oYXMoYil8fGkuc2V0KGIsYS5wdXNoKGIpLTEpO3JldHVybiB2fSx2LnJhbmdlPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUFycmF5LmZyb20obSksdik6Zi5zbGljZSgpfSx2LnVua25vd249ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bSx2KTpwfSx2LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4geDF0KGEsZikudW5rbm93bihwKX0seTF0LmFwcGx5KHYsYXJndW1lbnRzKSx2fWZ1bmN0aW9uIGFFZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gb0VlKGkpe3JldHVybitpfXZhciB6TXQ9WzAsMV07ZnVuY3Rpb24gVEEoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gazF0KGksYSl7cmV0dXJuKGEtPWk9K2kpP2Z1bmN0aW9uKGYpe3JldHVybihmLWkpL2F9OmFFZShpc05hTihhKT9OYU46LjUpfWZ1bmN0aW9uIGNFZShpLGEpe3ZhciBmO3JldHVybiBpPmEmJihmPWksaT1hLGE9ZiksZnVuY3Rpb24ocCl7cmV0dXJuIE1hdGgubWF4KGksTWF0aC5taW4oYSxwKSl9fWZ1bmN0aW9uIHVFZShpLGEsZil7dmFyIHA9aVswXSx2PWlbMV0sbT1hWzBdLGI9YVsxXTtyZXR1cm4gdjxwPyhwPWsxdCh2LHApLG09ZihiLG0pKToocD1rMXQocCx2KSxtPWYobSxiKSksZnVuY3Rpb24oRSl7cmV0dXJuIG0ocChFKSl9fWZ1bmN0aW9uIGxFZShpLGEsZil7dmFyIHA9TWF0aC5taW4oaS5sZW5ndGgsYS5sZW5ndGgpLTEsdj1uZXcgQXJyYXkocCksbT1uZXcgQXJyYXkocCksYj0tMTtmb3IoaVtwXTxpWzBdJiYoaT1pLnNsaWNlKCkucmV2ZXJzZSgpLGE9YS5zbGljZSgpLnJldmVyc2UoKSk7KytiPHA7KXZbYl09azF0KGlbYl0saVtiKzFdKSxtW2JdPWYoYVtiXSxhW2IrMV0pO3JldHVybiBmdW5jdGlvbihFKXt2YXIgXz1peGUoaSxFLDEscCktMTtyZXR1cm4gbVtfXSh2W19dKEUpKX19ZnVuY3Rpb24gcU10KGksYSl7cmV0dXJuIGEuZG9tYWluKGkuZG9tYWluKCkpLnJhbmdlKGkucmFuZ2UoKSkuaW50ZXJwb2xhdGUoaS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChpLmNsYW1wKCkpLnVua25vd24oaS51bmtub3duKCkpfWZ1bmN0aW9uIGhFZSgpe3ZhciBpPXpNdCxhPXpNdCxmPW8xdCxwLHYsbSxiPVRBLEUsXyxMO2Z1bmN0aW9uIE4oKXt2YXIgaj1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCk7cmV0dXJuIGIhPT1UQSYmKGI9Y0VlKGlbMF0saVtqLTFdKSksRT1qPjI/bEVlOnVFZSxfPUw9bnVsbCxCfWZ1bmN0aW9uIEIoail7cmV0dXJuIGo9PW51bGx8fGlzTmFOKGo9K2opP206KF98fChfPUUoaS5tYXAocCksYSxmKSkpKHAoYihqKSkpfXJldHVybiBCLmludmVydD1mdW5jdGlvbihqKXtyZXR1cm4gYih2KChMfHwoTD1FKGEsaS5tYXAocCksS3cpKSkoaikpKX0sQi5kb21haW49ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9QXJyYXkuZnJvbShqLG9FZSksTigpKTppLnNsaWNlKCl9LEIucmFuZ2U9ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9QXJyYXkuZnJvbShqKSxOKCkpOmEuc2xpY2UoKX0sQi5yYW5nZVJvdW5kPWZ1bmN0aW9uKGope3JldHVybiBhPUFycmF5LmZyb20oaiksZj1Da2UsTigpfSxCLmNsYW1wPWZ1bmN0aW9uKGope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWo/ITA6VEEsTigpKTpiIT09VEF9LEIuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oail7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9aixOKCkpOmZ9LEIudW5rbm93bj1mdW5jdGlvbihqKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1qLEIpOm19LGZ1bmN0aW9uKGosUil7cmV0dXJuIHA9aix2PVIsTigpfX1mdW5jdGlvbiBITXQoKXtyZXR1cm4gaEVlKCkoVEEsVEEpfWZ1bmN0aW9uIGZFZShpLGEsZixwKXt2YXIgdj1WZnQoaSxhLGYpLG07c3dpdGNoKHA9UFUocD8/IixmIikscC50eXBlKXtjYXNlInMiOnt2YXIgYj1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhhKSk7cmV0dXJuIHAucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obT1pRWUodixiKSkmJihwLnByZWNpc2lvbj1tKSxqTXQocCxiKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7cC5wcmVjaXNpb249PW51bGwmJiFpc05hTihtPXNFZSh2LE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKGEpKSkpJiYocC5wcmVjaXNpb249bS0ocC50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntwLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG09ckVlKHYpKSYmKHAucHJlY2lzaW9uPW0tKHAudHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBSTXQocCl9ZnVuY3Rpb24gZEVlKGkpe3ZhciBhPWkuZG9tYWluO3JldHVybiBpLnRpY2tzPWZ1bmN0aW9uKGYpe3ZhciBwPWEoKTtyZXR1cm4gY3hlKHBbMF0scFtwLmxlbmd0aC0xXSxmPz8xMCl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbihmLHApe3ZhciB2PWEoKTtyZXR1cm4gZkVlKHZbMF0sdlt2Lmxlbmd0aC0xXSxmPz8xMCxwKX0saS5uaWNlPWZ1bmN0aW9uKGYpe2Y9PW51bGwmJihmPTEwKTt2YXIgcD1hKCksdj0wLG09cC5sZW5ndGgtMSxiPXBbdl0sRT1wW21dLF8sTCxOPTEwO2ZvcihFPGImJihMPWIsYj1FLEU9TCxMPXYsdj1tLG09TCk7Ti0tID4wOyl7aWYoTD1OTHQoYixFLGYpLEw9PT1fKXJldHVybiBwW3ZdPWIscFttXT1FLGEocCk7aWYoTD4wKWI9TWF0aC5mbG9vcihiL0wpKkwsRT1NYXRoLmNlaWwoRS9MKSpMO2Vsc2UgaWYoTDwwKWI9TWF0aC5jZWlsKGIqTCkvTCxFPU1hdGguZmxvb3IoRSpMKS9MO2Vsc2UgYnJlYWs7Xz1MfXJldHVybiBpfSxpfWZ1bmN0aW9uIEJVKCl7dmFyIGk9SE10KCk7cmV0dXJuIGkuY29weT1mdW5jdGlvbigpe3JldHVybiBxTXQoaSxCVSgpKX0seTF0LmFwcGx5KGksYXJndW1lbnRzKSxkRWUoaSl9ZnVuY3Rpb24gZ0VlKGksYSl7aT1pLnNsaWNlKCk7dmFyIGY9MCxwPWkubGVuZ3RoLTEsdj1pW2ZdLG09aVtwXSxiO3JldHVybiBtPHYmJihiPWYsZj1wLHA9YixiPXYsdj1tLG09YiksaVtmXT1hLmZsb29yKHYpLGlbcF09YS5jZWlsKG0pLGl9dmFyIEUxdD1uZXcgRGF0ZSxUMXQ9bmV3IERhdGU7ZnVuY3Rpb24gcmcoaSxhLGYscCl7ZnVuY3Rpb24gdihtKXtyZXR1cm4gaShtPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCttKSksbX1yZXR1cm4gdi5mbG9vcj1mdW5jdGlvbihtKXtyZXR1cm4gaShtPW5ldyBEYXRlKCttKSksbX0sdi5jZWlsPWZ1bmN0aW9uKG0pe3JldHVybiBpKG09bmV3IERhdGUobS0xKSksYShtLDEpLGkobSksbX0sdi5yb3VuZD1mdW5jdGlvbihtKXt2YXIgYj12KG0pLEU9di5jZWlsKG0pO3JldHVybiBtLWI8RS1tP2I6RX0sdi5vZmZzZXQ9ZnVuY3Rpb24obSxiKXtyZXR1cm4gYShtPW5ldyBEYXRlKCttKSxiPT1udWxsPzE6TWF0aC5mbG9vcihiKSksbX0sdi5yYW5nZT1mdW5jdGlvbihtLGIsRSl7dmFyIF89W10sTDtpZihtPXYuY2VpbChtKSxFPUU9PW51bGw/MTpNYXRoLmZsb29yKEUpLCEobTxiKXx8IShFPjApKXJldHVybiBfO2RvIF8ucHVzaChMPW5ldyBEYXRlKCttKSksYShtLEUpLGkobSk7d2hpbGUoTDxtJiZtPGIpO3JldHVybiBffSx2LmZpbHRlcj1mdW5jdGlvbihtKXtyZXR1cm4gcmcoZnVuY3Rpb24oYil7aWYoYj49Yilmb3IoO2koYiksIW0oYik7KWIuc2V0VGltZShiLTEpfSxmdW5jdGlvbihiLEUpe2lmKGI+PWIpaWYoRTwwKWZvcig7KytFPD0wOylmb3IoO2EoYiwtMSksIW0oYik7KTtlbHNlIGZvcig7LS1FPj0wOylmb3IoO2EoYiwxKSwhbShiKTspO30pfSxmJiYodi5jb3VudD1mdW5jdGlvbihtLGIpe3JldHVybiBFMXQuc2V0VGltZSgrbSksVDF0LnNldFRpbWUoK2IpLGkoRTF0KSxpKFQxdCksTWF0aC5mbG9vcihmKEUxdCxUMXQpKX0sdi5ldmVyeT1mdW5jdGlvbihtKXtyZXR1cm4gbT1NYXRoLmZsb29yKG0pLCFpc0Zpbml0ZShtKXx8IShtPjApP251bGw6bT4xP3YuZmlsdGVyKHA/ZnVuY3Rpb24oYil7cmV0dXJuIHAoYiklbT09PTB9OmZ1bmN0aW9uKGIpe3JldHVybiB2LmNvdW50KDAsYiklbT09PTB9KTp2fSksdn12YXIgUlU9cmcoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybiBhLWl9KTtSVS5ldmVyeT1mdW5jdGlvbihpKXtyZXR1cm4gaT1NYXRoLmZsb29yKGkpLCFpc0Zpbml0ZShpKXx8IShpPjApP251bGw6aT4xP3JnKGZ1bmN0aW9uKGEpe2Euc2V0VGltZShNYXRoLmZsb29yKGEvaSkqaSl9LGZ1bmN0aW9uKGEsZil7YS5zZXRUaW1lKCthK2YqaSl9LGZ1bmN0aW9uKGEsZil7cmV0dXJuKGYtYSkvaX0pOlJVfTtjb25zdCBDMXQ9UlU7UlUucmFuZ2U7Y29uc3QgdjU9MWUzLGMzPXY1KjYwLEc3PWMzKjYwLFY3PUc3KjI0LF8xdD1WNyo3LEdNdD1WNyozMCxTMXQ9VjcqMzY1O3ZhciBWTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqdjUpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL3Y1fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRVVENTZWNvbmRzKCl9KTtjb25zdCBVNz1WTXQ7Vk10LnJhbmdlO3ZhciBVTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2NSl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqYzMpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL2MzfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRNaW51dGVzKCl9KTtjb25zdCBqVT1VTXQ7VU10LnJhbmdlO3ZhciBXTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2NS1pLmdldE1pbnV0ZXMoKSpjMyl9LGZ1bmN0aW9uKGksYSl7aS5zZXRUaW1lKCtpK2EqRzcpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL0c3fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRIb3VycygpfSk7Y29uc3QgJFU9V010O1dNdC5yYW5nZTt2YXIgS010PXJnKGk9Pmkuc2V0SG91cnMoMCwwLDAsMCksKGksYSk9Pmkuc2V0RGF0ZShpLmdldERhdGUoKSthKSwoaSxhKT0+KGEtaS0oYS5nZXRUaW1lem9uZU9mZnNldCgpLWkuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYzMpL1Y3LGk9PmkuZ2V0RGF0ZSgpLTEpO2NvbnN0IENBPUtNdDtLTXQucmFuZ2U7ZnVuY3Rpb24gVzcoaSl7cmV0dXJuIHJnKGZ1bmN0aW9uKGEpe2Euc2V0RGF0ZShhLmdldERhdGUoKS0oYS5nZXREYXkoKSs3LWkpJTcpLGEuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsZil7YS5zZXREYXRlKGEuZ2V0RGF0ZSgpK2YqNyl9LGZ1bmN0aW9uKGEsZil7cmV0dXJuKGYtYS0oZi5nZXRUaW1lem9uZU9mZnNldCgpLWEuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYzMpL18xdH0pfXZhciBMTj1XNygwKSxNTj1XNygxKSxZTXQ9VzcoMiksWE10PVc3KDMpLEs3PVc3KDQpLFFNdD1XNyg1KSxaTXQ9VzcoNik7TE4ucmFuZ2UsTU4ucmFuZ2UsWU10LnJhbmdlLFhNdC5yYW5nZSxLNy5yYW5nZSxRTXQucmFuZ2UsWk10LnJhbmdlO3ZhciBKTXQ9cmcoZnVuY3Rpb24oaSl7aS5zZXREYXRlKDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGksYSl7aS5zZXRNb250aChpLmdldE1vbnRoKCkrYSl9LGZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZ2V0TW9udGgoKS1pLmdldE1vbnRoKCkrKGEuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRNb250aCgpfSk7Y29uc3QgelU9Sk10O0pNdC5yYW5nZTt2YXIgQTF0PXJnKGZ1bmN0aW9uKGkpe2kuc2V0TW9udGgoMCwxKSxpLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihpLGEpe2kuc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRGdWxsWWVhcigpfSk7QTF0LmV2ZXJ5PWZ1bmN0aW9uKGkpe3JldHVybiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpyZyhmdW5jdGlvbihhKXthLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoYS5nZXRGdWxsWWVhcigpL2kpKmkpLGEuc2V0TW9udGgoMCwxKSxhLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGYpe2Euc2V0RnVsbFllYXIoYS5nZXRGdWxsWWVhcigpK2YqaSl9KX07Y29uc3QgWTc9QTF0O0ExdC5yYW5nZTt2YXIgdEl0PXJnKGZ1bmN0aW9uKGkpe2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGksYSl7aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK2EpfSxmdW5jdGlvbihpLGEpe3JldHVybihhLWkpL1Y3fSxmdW5jdGlvbihpKXtyZXR1cm4gaS5nZXRVVENEYXRlKCktMX0pO2NvbnN0IGVJdD10SXQ7dEl0LnJhbmdlO2Z1bmN0aW9uIFg3KGkpe3JldHVybiByZyhmdW5jdGlvbihhKXthLnNldFVUQ0RhdGUoYS5nZXRVVENEYXRlKCktKGEuZ2V0VVRDRGF5KCkrNy1pKSU3KSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGYpe2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKStmKjcpfSxmdW5jdGlvbihhLGYpe3JldHVybihmLWEpL18xdH0pfXZhciBuSXQ9WDcoMCkscVU9WDcoMSkscEVlPVg3KDIpLGJFZT1YNygzKSxfQT1YNyg0KSx2RWU9WDcoNSksd0VlPVg3KDYpO25JdC5yYW5nZSxxVS5yYW5nZSxwRWUucmFuZ2UsYkVlLnJhbmdlLF9BLnJhbmdlLHZFZS5yYW5nZSx3RWUucmFuZ2U7dmFyIEwxdD1yZyhmdW5jdGlvbihpKXtpLnNldFVUQ01vbnRoKDAsMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oaSxhKXtpLnNldFVUQ0Z1bGxZZWFyKGkuZ2V0VVRDRnVsbFllYXIoKSthKX0sZnVuY3Rpb24oaSxhKXtyZXR1cm4gYS5nZXRVVENGdWxsWWVhcigpLWkuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oaSl7cmV0dXJuIGkuZ2V0VVRDRnVsbFllYXIoKX0pO0wxdC5ldmVyeT1mdW5jdGlvbihpKXtyZXR1cm4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6cmcoZnVuY3Rpb24oYSl7YS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGEuZ2V0VVRDRnVsbFllYXIoKS9pKSppKSxhLnNldFVUQ01vbnRoKDAsMSksYS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxmKXthLnNldFVUQ0Z1bGxZZWFyKGEuZ2V0VVRDRnVsbFllYXIoKStmKmkpfSl9O2NvbnN0IElOPUwxdDtMMXQucmFuZ2U7ZnVuY3Rpb24gbUVlKGksYSxmLHAsdixtKXtjb25zdCBiPVtbVTcsMSx2NV0sW1U3LDUsNSp2NV0sW1U3LDE1LDE1KnY1XSxbVTcsMzAsMzAqdjVdLFttLDEsYzNdLFttLDUsNSpjM10sW20sMTUsMTUqYzNdLFttLDMwLDMwKmMzXSxbdiwxLEc3XSxbdiwzLDMqRzddLFt2LDYsNipHN10sW3YsMTIsMTIqRzddLFtwLDEsVjddLFtwLDIsMipWN10sW2YsMSxfMXRdLFthLDEsR010XSxbYSwzLDMqR010XSxbaSwxLFMxdF1dO2Z1bmN0aW9uIEUoTCxOLEIpe2NvbnN0IGo9TjxMO2omJihbTCxOXT1bTixMXSk7Y29uc3QgUj1CJiZ0eXBlb2YgQi5yYW5nZT09ImZ1bmN0aW9uIj9COl8oTCxOLEIpLHo9Uj9SLnJhbmdlKEwsK04rMSk6W107cmV0dXJuIGo/ei5yZXZlcnNlKCk6en1mdW5jdGlvbiBfKEwsTixCKXtjb25zdCBqPU1hdGguYWJzKE4tTCkvQixSPXpmdCgoWywsaXRdKT0+aXQpLnJpZ2h0KGIsaik7aWYoUj09PWIubGVuZ3RoKXJldHVybiBpLmV2ZXJ5KFZmdChML1MxdCxOL1MxdCxCKSk7aWYoUj09PTApcmV0dXJuIEMxdC5ldmVyeShNYXRoLm1heChWZnQoTCxOLEIpLDEpKTtjb25zdFt6LEtdPWJbai9iW1ItMV1bMl08YltSXVsyXS9qP1ItMTpSXTtyZXR1cm4gei5ldmVyeShLKX1yZXR1cm5bRSxfXX1jb25zdFt5RWUseEVlXT1tRWUoWTcselUsTE4sQ0EsJFUsalUpO2Z1bmN0aW9uIE0xdChpKXtpZigwPD1pLnkmJmkueTwxMDApe3ZhciBhPW5ldyBEYXRlKC0xLGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCl9ZnVuY3Rpb24gSTF0KGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIGE9bmV3IERhdGUoRGF0ZS5VVEMoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpKTtyZXR1cm4gYS5zZXRVVENGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpfWZ1bmN0aW9uIEROKGksYSxmKXtyZXR1cm57eTppLG06YSxkOmYsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBrRWUoaSl7dmFyIGE9aS5kYXRlVGltZSxmPWkuZGF0ZSxwPWkudGltZSx2PWkucGVyaW9kcyxtPWkuZGF5cyxiPWkuc2hvcnREYXlzLEU9aS5tb250aHMsXz1pLnNob3J0TW9udGhzLEw9T04odiksTj1OTih2KSxCPU9OKG0pLGo9Tk4obSksUj1PTihiKSx6PU5OKGIpLEs9T04oRSksaXQ9Tk4oRSksc3Q9T04oXyksdXQ9Tk4oXyksYnQ9e2E6Q3QsQTpaLGI6VHQsQjpIdCxjOm51bGwsZDpjSXQsZTpjSXQsZjpWRWUsZzplN2UsRzpyN2UsSDpxRWUsSTpIRWUsajpHRWUsTDp1SXQsbTpVRWUsTTpXRWUscDpJdCxxOkZ0LFE6cEl0LHM6Ykl0LFM6S0VlLHU6WUVlLFU6WEVlLFY6UUVlLHc6WkVlLFc6SkVlLHg6bnVsbCxYOm51bGwseTp0N2UsWTpuN2UsWjppN2UsIiUiOmdJdH0sbXQ9e2E6a2UsQTpwbixiOk1lLEI6dmUsYzpudWxsLGQ6aEl0LGU6aEl0LGY6YzdlLGc6dzdlLEc6eTdlLEg6czdlLEk6YTdlLGo6bzdlLEw6Zkl0LG06dTdlLE06bDdlLHA6R2UscTpLZSxROnBJdCxzOmJJdCxTOmg3ZSx1OmY3ZSxVOmQ3ZSxWOmc3ZSx3OnA3ZSxXOmI3ZSx4Om51bGwsWDpudWxsLHk6djdlLFk6bTdlLFo6eDdlLCIlIjpnSXR9LHl0PXthOnB0LEE6VSxiOnh0LEI6bnQsYzpPdCxkOmFJdCxlOmFJdCxmOlJFZSxnOnNJdCxHOmlJdCxIOm9JdCxJOm9JdCxqOk5FZSxMOkJFZSxtOk9FZSxNOlBFZSxwOlgscTpERWUsUTokRWUsczp6RWUsUzpGRWUsdTpTRWUsVTpBRWUsVjpMRWUsdzpfRWUsVzpNRWUseDpOdCxYOnF0LHk6c0l0LFk6aUl0LFo6SUVlLCIlIjpqRWV9O2J0Lng9ZHQoZixidCksYnQuWD1kdChwLGJ0KSxidC5jPWR0KGEsYnQpLG10Lng9ZHQoZixtdCksbXQuWD1kdChwLG10KSxtdC5jPWR0KGEsbXQpO2Z1bmN0aW9uIGR0KHdlLF9lKXtyZXR1cm4gZnVuY3Rpb24oJHQpe3ZhciByZT1bXSxpZT0tMSxPZT0wLG9lPXdlLmxlbmd0aCxOZSxtZSxjbjtmb3IoJHQgaW5zdGFuY2VvZiBEYXRlfHwoJHQ9bmV3IERhdGUoKyR0KSk7KytpZTxvZTspd2UuY2hhckNvZGVBdChpZSk9PT0zNyYmKHJlLnB1c2god2Uuc2xpY2UoT2UsaWUpKSwobWU9ckl0W05lPXdlLmNoYXJBdCgrK2llKV0pIT1udWxsP05lPXdlLmNoYXJBdCgrK2llKTptZT1OZT09PSJlIj8iICI6IjAiLChjbj1fZVtOZV0pJiYoTmU9Y24oJHQsbWUpKSxyZS5wdXNoKE5lKSxPZT1pZSsxKTtyZXR1cm4gcmUucHVzaCh3ZS5zbGljZShPZSxpZSkpLHJlLmpvaW4oIiIpfX1mdW5jdGlvbiBodCh3ZSxfZSl7cmV0dXJuIGZ1bmN0aW9uKCR0KXt2YXIgcmU9RE4oMTkwMCx2b2lkIDAsMSksaWU9d3QocmUsd2UsJHQrPSIiLDApLE9lLG9lO2lmKGllIT0kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcmUpcmV0dXJuIG5ldyBEYXRlKHJlLlEpO2lmKCJzImluIHJlKXJldHVybiBuZXcgRGF0ZShyZS5zKjFlMysoIkwiaW4gcmU/cmUuTDowKSk7aWYoX2UmJiEoIloiaW4gcmUpJiYocmUuWj0wKSwicCJpbiByZSYmKHJlLkg9cmUuSCUxMityZS5wKjEyKSxyZS5tPT09dm9pZCAwJiYocmUubT0icSJpbiByZT9yZS5xOjApLCJWImluIHJlKXtpZihyZS5WPDF8fHJlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gcmV8fChyZS53PTEpLCJaImluIHJlPyhPZT1JMXQoRE4ocmUueSwwLDEpKSxvZT1PZS5nZXRVVENEYXkoKSxPZT1vZT40fHxvZT09PTA/cVUuY2VpbChPZSk6cVUoT2UpLE9lPWVJdC5vZmZzZXQoT2UsKHJlLlYtMSkqNykscmUueT1PZS5nZXRVVENGdWxsWWVhcigpLHJlLm09T2UuZ2V0VVRDTW9udGgoKSxyZS5kPU9lLmdldFVUQ0RhdGUoKSsocmUudys2KSU3KTooT2U9TTF0KEROKHJlLnksMCwxKSksb2U9T2UuZ2V0RGF5KCksT2U9b2U+NHx8b2U9PT0wP01OLmNlaWwoT2UpOk1OKE9lKSxPZT1DQS5vZmZzZXQoT2UsKHJlLlYtMSkqNykscmUueT1PZS5nZXRGdWxsWWVhcigpLHJlLm09T2UuZ2V0TW9udGgoKSxyZS5kPU9lLmdldERhdGUoKSsocmUudys2KSU3KX1lbHNlKCJXImluIHJlfHwiVSJpbiByZSkmJigidyJpbiByZXx8KHJlLnc9InUiaW4gcmU/cmUudSU3OiJXImluIHJlPzE6MCksb2U9IloiaW4gcmU/STF0KEROKHJlLnksMCwxKSkuZ2V0VVRDRGF5KCk6TTF0KEROKHJlLnksMCwxKSkuZ2V0RGF5KCkscmUubT0wLHJlLmQ9IlciaW4gcmU/KHJlLncrNiklNytyZS5XKjctKG9lKzUpJTc6cmUudytyZS5VKjctKG9lKzYpJTcpO3JldHVybiJaImluIHJlPyhyZS5IKz1yZS5aLzEwMHwwLHJlLk0rPXJlLlolMTAwLEkxdChyZSkpOk0xdChyZSl9fWZ1bmN0aW9uIHd0KHdlLF9lLCR0LHJlKXtmb3IodmFyIGllPTAsT2U9X2UubGVuZ3RoLG9lPSR0Lmxlbmd0aCxOZSxtZTtpZTxPZTspe2lmKHJlPj1vZSlyZXR1cm4tMTtpZihOZT1fZS5jaGFyQ29kZUF0KGllKyspLE5lPT09Mzcpe2lmKE5lPV9lLmNoYXJBdChpZSsrKSxtZT15dFtOZSBpbiBySXQ/X2UuY2hhckF0KGllKyspOk5lXSwhbWV8fChyZT1tZSh3ZSwkdCxyZSkpPDApcmV0dXJuLTF9ZWxzZSBpZihOZSE9JHQuY2hhckNvZGVBdChyZSsrKSlyZXR1cm4tMX1yZXR1cm4gcmV9ZnVuY3Rpb24gWCh3ZSxfZSwkdCl7dmFyIHJlPUwuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UucD1OLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSwkdCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHB0KHdlLF9lLCR0KXt2YXIgcmU9Ui5leGVjKF9lLnNsaWNlKCR0KSk7cmV0dXJuIHJlPyh3ZS53PXouZ2V0KHJlWzBdLnRvTG93ZXJDYXNlKCkpLCR0K3JlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVSh3ZSxfZSwkdCl7dmFyIHJlPUIuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2Uudz1qLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSwkdCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHh0KHdlLF9lLCR0KXt2YXIgcmU9c3QuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UubT11dC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksJHQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBudCh3ZSxfZSwkdCl7dmFyIHJlPUsuZXhlYyhfZS5zbGljZSgkdCkpO3JldHVybiByZT8od2UubT1pdC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksJHQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPdCh3ZSxfZSwkdCl7cmV0dXJuIHd0KHdlLGEsX2UsJHQpfWZ1bmN0aW9uIE50KHdlLF9lLCR0KXtyZXR1cm4gd3Qod2UsZixfZSwkdCl9ZnVuY3Rpb24gcXQod2UsX2UsJHQpe3JldHVybiB3dCh3ZSxwLF9lLCR0KX1mdW5jdGlvbiBDdCh3ZSl7cmV0dXJuIGJbd2UuZ2V0RGF5KCldfWZ1bmN0aW9uIFood2Upe3JldHVybiBtW3dlLmdldERheSgpXX1mdW5jdGlvbiBUdCh3ZSl7cmV0dXJuIF9bd2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24gSHQod2Upe3JldHVybiBFW3dlLmdldE1vbnRoKCldfWZ1bmN0aW9uIEl0KHdlKXtyZXR1cm4gdlsrKHdlLmdldEhvdXJzKCk+PTEyKV19ZnVuY3Rpb24gRnQod2Upe3JldHVybiAxK35+KHdlLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24ga2Uod2Upe3JldHVybiBiW3dlLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBwbih3ZSl7cmV0dXJuIG1bd2UuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIE1lKHdlKXtyZXR1cm4gX1t3ZS5nZXRVVENNb250aCgpXX1mdW5jdGlvbiB2ZSh3ZSl7cmV0dXJuIEVbd2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gR2Uod2Upe3JldHVybiB2Wysod2UuZ2V0VVRDSG91cnMoKT49MTIpXX1mdW5jdGlvbiBLZSh3ZSl7cmV0dXJuIDErfn4od2UuZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKHdlKXt2YXIgX2U9ZHQod2UrPSIiLGJ0KTtyZXR1cm4gX2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2V9LF9lfSxwYXJzZTpmdW5jdGlvbih3ZSl7dmFyIF9lPWh0KHdlKz0iIiwhMSk7cmV0dXJuIF9lLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHdlfSxfZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHdlKXt2YXIgX2U9ZHQod2UrPSIiLG10KTtyZXR1cm4gX2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2V9LF9lfSx1dGNQYXJzZTpmdW5jdGlvbih3ZSl7dmFyIF9lPWh0KHdlKz0iIiwhMCk7cmV0dXJuIF9lLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHdlfSxfZX19fXZhciBySXQ9eyItIjoiIixfOiIgIiwwOiIwIn0sSzE9L15ccypcZCsvLEVFZT0vXiUvLFRFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gRGMoaSxhLGYpe3ZhciBwPWk8MD8iLSI6IiIsdj0ocD8taTppKSsiIixtPXYubGVuZ3RoO3JldHVybiBwKyhtPGY/bmV3IEFycmF5KGYtbSsxKS5qb2luKGEpK3Y6dil9ZnVuY3Rpb24gQ0VlKGkpe3JldHVybiBpLnJlcGxhY2UoVEVlLCJcXCQmIil9ZnVuY3Rpb24gT04oaSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2kubWFwKENFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE5OKGkpe3JldHVybiBuZXcgTWFwKGkubWFwKChhLGYpPT5bYS50b0xvd2VyQ2FzZSgpLGZdKSl9ZnVuY3Rpb24gX0VlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS53PStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFNFZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkudT0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRWUoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlU9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5WPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuVz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpSXQoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrNCkpO3JldHVybiBwPyhpLnk9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc0l0KGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS55PStwWzBdKygrcFswXT42OD8xOTAwOjJlMyksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSUVlKGksYSxmKXt2YXIgcD0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhhLnNsaWNlKGYsZis2KSk7cmV0dXJuIHA/KGkuWj1wWzFdPzA6LShwWzJdKyhwWzNdfHwiMDAiKSksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gREVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS5xPXBbMF0qMy0zLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkubT1wWzBdLTEsZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYUl0KGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5kPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5FZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZiszKSk7cmV0dXJuIHA/KGkubT0wLGkuZD0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvSXQoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLkg9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5NPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZFZShpLGEsZil7dmFyIHA9SzEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuUz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCRWUoaSxhLGYpe3ZhciBwPUsxLmV4ZWMoYS5zbGljZShmLGYrMykpO3JldHVybiBwPyhpLkw9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUkVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZixmKzYpKTtyZXR1cm4gcD8oaS5MPU1hdGguZmxvb3IocFswXS8xZTMpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpFZShpLGEsZil7dmFyIHA9RUVlLmV4ZWMoYS5zbGljZShmLGYrMSkpO3JldHVybiBwP2YrcFswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gJEVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLlE9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekVlKGksYSxmKXt2YXIgcD1LMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLnM9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY0l0KGksYSl7cmV0dXJuIERjKGkuZ2V0RGF0ZSgpLGEsMil9ZnVuY3Rpb24gcUVlKGksYSl7cmV0dXJuIERjKGkuZ2V0SG91cnMoKSxhLDIpfWZ1bmN0aW9uIEhFZShpLGEpe3JldHVybiBEYyhpLmdldEhvdXJzKCklMTJ8fDEyLGEsMil9ZnVuY3Rpb24gR0VlKGksYSl7cmV0dXJuIERjKDErQ0EuY291bnQoWTcoaSksaSksYSwzKX1mdW5jdGlvbiB1SXQoaSxhKXtyZXR1cm4gRGMoaS5nZXRNaWxsaXNlY29uZHMoKSxhLDMpfWZ1bmN0aW9uIFZFZShpLGEpe3JldHVybiB1SXQoaSxhKSsiMDAwIn1mdW5jdGlvbiBVRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRNb250aCgpKzEsYSwyKX1mdW5jdGlvbiBXRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRNaW51dGVzKCksYSwyKX1mdW5jdGlvbiBLRWUoaSxhKXtyZXR1cm4gRGMoaS5nZXRTZWNvbmRzKCksYSwyKX1mdW5jdGlvbiBZRWUoaSl7dmFyIGE9aS5nZXREYXkoKTtyZXR1cm4gYT09PTA/NzphfWZ1bmN0aW9uIFhFZShpLGEpe3JldHVybiBEYyhMTi5jb3VudChZNyhpKS0xLGkpLGEsMil9ZnVuY3Rpb24gbEl0KGkpe3ZhciBhPWkuZ2V0RGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP0s3KGkpOks3LmNlaWwoaSl9ZnVuY3Rpb24gUUVlKGksYSl7cmV0dXJuIGk9bEl0KGkpLERjKEs3LmNvdW50KFk3KGkpLGkpKyhZNyhpKS5nZXREYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gWkVlKGkpe3JldHVybiBpLmdldERheSgpfWZ1bmN0aW9uIEpFZShpLGEpe3JldHVybiBEYyhNTi5jb3VudChZNyhpKS0xLGkpLGEsMil9ZnVuY3Rpb24gdDdlKGksYSl7cmV0dXJuIERjKGkuZ2V0RnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiBlN2UoaSxhKXtyZXR1cm4gaT1sSXQoaSksRGMoaS5nZXRGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIG43ZShpLGEpe3JldHVybiBEYyhpLmdldEZ1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gcjdlKGksYSl7dmFyIGY9aS5nZXREYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9LNyhpKTpLNy5jZWlsKGkpLERjKGkuZ2V0RnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBpN2UoaSl7dmFyIGE9aS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihhPjA/Ii0iOihhKj0tMSwiKyIpKStEYyhhLzYwfDAsIjAiLDIpK0RjKGElNjAsIjAiLDIpfWZ1bmN0aW9uIGhJdChpLGEpe3JldHVybiBEYyhpLmdldFVUQ0RhdGUoKSxhLDIpfWZ1bmN0aW9uIHM3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ0hvdXJzKCksYSwyKX1mdW5jdGlvbiBhN2UoaSxhKXtyZXR1cm4gRGMoaS5nZXRVVENIb3VycygpJTEyfHwxMixhLDIpfWZ1bmN0aW9uIG83ZShpLGEpe3JldHVybiBEYygxK2VJdC5jb3VudChJTihpKSxpKSxhLDMpfWZ1bmN0aW9uIGZJdChpLGEpe3JldHVybiBEYyhpLmdldFVUQ01pbGxpc2Vjb25kcygpLGEsMyl9ZnVuY3Rpb24gYzdlKGksYSl7cmV0dXJuIGZJdChpLGEpKyIwMDAifWZ1bmN0aW9uIHU3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ01vbnRoKCkrMSxhLDIpfWZ1bmN0aW9uIGw3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ01pbnV0ZXMoKSxhLDIpfWZ1bmN0aW9uIGg3ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ1NlY29uZHMoKSxhLDIpfWZ1bmN0aW9uIGY3ZShpKXt2YXIgYT1pLmdldFVUQ0RheSgpO3JldHVybiBhPT09MD83OmF9ZnVuY3Rpb24gZDdlKGksYSl7cmV0dXJuIERjKG5JdC5jb3VudChJTihpKS0xLGkpLGEsMil9ZnVuY3Rpb24gZEl0KGkpe3ZhciBhPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP19BKGkpOl9BLmNlaWwoaSl9ZnVuY3Rpb24gZzdlKGksYSl7cmV0dXJuIGk9ZEl0KGkpLERjKF9BLmNvdW50KElOKGkpLGkpKyhJTihpKS5nZXRVVENEYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gcDdlKGkpe3JldHVybiBpLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGI3ZShpLGEpe3JldHVybiBEYyhxVS5jb3VudChJTihpKS0xLGkpLGEsMil9ZnVuY3Rpb24gdjdlKGksYSl7cmV0dXJuIERjKGkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiB3N2UoaSxhKXtyZXR1cm4gaT1kSXQoaSksRGMoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIG03ZShpLGEpe3JldHVybiBEYyhpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24geTdlKGksYSl7dmFyIGY9aS5nZXRVVENEYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9fQShpKTpfQS5jZWlsKGkpLERjKGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiB4N2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGdJdCgpe3JldHVybiIlIn1mdW5jdGlvbiBwSXQoaSl7cmV0dXJuK2l9ZnVuY3Rpb24gYkl0KGkpe3JldHVybiBNYXRoLmZsb29yKCtpLzFlMyl9dmFyIFNBLEhVO2s3ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGs3ZShpKXtyZXR1cm4gU0E9a0VlKGkpLEhVPVNBLmZvcm1hdCxTQS5wYXJzZSxTQS51dGNGb3JtYXQsU0EudXRjUGFyc2UsU0F9ZnVuY3Rpb24gRTdlKGkpe3JldHVybiBuZXcgRGF0ZShpKX1mdW5jdGlvbiBUN2UoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBEYXRlPytpOituZXcgRGF0ZSgraSl9ZnVuY3Rpb24gdkl0KGksYSxmLHAsdixtLGIsRSxfLEwpe3ZhciBOPUhNdCgpLEI9Ti5pbnZlcnQsaj1OLmRvbWFpbixSPUwoIi4lTCIpLHo9TCgiOiVTIiksSz1MKCIlSTolTSIpLGl0PUwoIiVJICVwIiksc3Q9TCgiJWEgJWQiKSx1dD1MKCIlYiAlZCIpLGJ0PUwoIiVCIiksbXQ9TCgiJVkiKTtmdW5jdGlvbiB5dChkdCl7cmV0dXJuKF8oZHQpPGR0P1I6RShkdCk8ZHQ/ejpiKGR0KTxkdD9LOm0oZHQpPGR0P2l0OnAoZHQpPGR0P3YoZHQpPGR0P3N0OnV0OmYoZHQpPGR0P2J0Om10KShkdCl9cmV0dXJuIE4uaW52ZXJ0PWZ1bmN0aW9uKGR0KXtyZXR1cm4gbmV3IERhdGUoQihkdCkpfSxOLmRvbWFpbj1mdW5jdGlvbihkdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aihBcnJheS5mcm9tKGR0LFQ3ZSkpOmooKS5tYXAoRTdlKX0sTi50aWNrcz1mdW5jdGlvbihkdCl7dmFyIGh0PWooKTtyZXR1cm4gaShodFswXSxodFtodC5sZW5ndGgtMV0sZHQ/PzEwKX0sTi50aWNrRm9ybWF0PWZ1bmN0aW9uKGR0LGh0KXtyZXR1cm4gaHQ9PW51bGw/eXQ6TChodCl9LE4ubmljZT1mdW5jdGlvbihkdCl7dmFyIGh0PWooKTtyZXR1cm4oIWR0fHx0eXBlb2YgZHQucmFuZ2UhPSJmdW5jdGlvbiIpJiYoZHQ9YShodFswXSxodFtodC5sZW5ndGgtMV0sZHQ/PzEwKSksZHQ/aihnRWUoaHQsZHQpKTpOfSxOLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcU10KE4sdkl0KGksYSxmLHAsdixtLGIsRSxfLEwpKX0sTn1mdW5jdGlvbiBDN2UoKXtyZXR1cm4geTF0LmFwcGx5KHZJdCh5RWUseEVlLFk3LHpVLExOLENBLCRVLGpVLFU3LEhVKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBfN2UoaSl7Zm9yKHZhciBhPWkubGVuZ3RoLzZ8MCxmPW5ldyBBcnJheShhKSxwPTA7cDxhOylmW3BdPSIjIitpLnNsaWNlKHAqNiwrK3AqNik7cmV0dXJuIGZ9Y29uc3QgUzdlPV83ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gWWgoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWNvbnN0IHdJdD1NYXRoLmFicyxiMD1NYXRoLmF0YW4yLFE3PU1hdGguY29zLEE3ZT1NYXRoLm1heCxEMXQ9TWF0aC5taW4sdTM9TWF0aC5zaW4sQUE9TWF0aC5zcXJ0LHYwPTFlLTEyLFBOPU1hdGguUEksR1U9UE4vMixWVT0yKlBOO2Z1bmN0aW9uIEw3ZShpKXtyZXR1cm4gaT4xPzA6aTwtMT9QTjpNYXRoLmFjb3MoaSl9ZnVuY3Rpb24gbUl0KGkpe3JldHVybiBpPj0xP0dVOmk8PS0xPy1HVTpNYXRoLmFzaW4oaSl9ZnVuY3Rpb24gTTdlKGkpe3JldHVybiBpLmlubmVyUmFkaXVzfWZ1bmN0aW9uIEk3ZShpKXtyZXR1cm4gaS5vdXRlclJhZGl1c31mdW5jdGlvbiBEN2UoaSl7cmV0dXJuIGkuc3RhcnRBbmdsZX1mdW5jdGlvbiBPN2UoaSl7cmV0dXJuIGkuZW5kQW5nbGV9ZnVuY3Rpb24gTjdlKGkpe3JldHVybiBpJiZpLnBhZEFuZ2xlfWZ1bmN0aW9uIFA3ZShpLGEsZixwLHYsbSxiLEUpe3ZhciBfPWYtaSxMPXAtYSxOPWItdixCPUUtbSxqPUIqXy1OKkw7aWYoIShqKmo8djApKXJldHVybiBqPShOKihhLW0pLUIqKGktdikpL2osW2kraipfLGEraipMXX1mdW5jdGlvbiBVVShpLGEsZixwLHYsbSxiKXt2YXIgRT1pLWYsXz1hLXAsTD0oYj9tOi1tKS9BQShFKkUrXypfKSxOPUwqXyxCPS1MKkUsaj1pK04sUj1hK0Isej1mK04sSz1wK0IsaXQ9KGoreikvMixzdD0oUitLKS8yLHV0PXotaixidD1LLVIsbXQ9dXQqdXQrYnQqYnQseXQ9di1tLGR0PWoqSy16KlIsaHQ9KGJ0PDA/LTE6MSkqQUEoQTdlKDAseXQqeXQqbXQtZHQqZHQpKSx3dD0oZHQqYnQtdXQqaHQpL210LFg9KC1kdCp1dC1idCpodCkvbXQscHQ9KGR0KmJ0K3V0Kmh0KS9tdCxVPSgtZHQqdXQrYnQqaHQpL210LHh0PXd0LWl0LG50PVgtc3QsT3Q9cHQtaXQsTnQ9VS1zdDtyZXR1cm4geHQqeHQrbnQqbnQ+T3QqT3QrTnQqTnQmJih3dD1wdCxYPVUpLHtjeDp3dCxjeTpYLHgwMTotTix5MDE6LUIseDExOnd0Kih2L3l0LTEpLHkxMTpYKih2L3l0LTEpfX1mdW5jdGlvbiBMQSgpe3ZhciBpPU03ZSxhPUk3ZSxmPVloKDApLHA9bnVsbCx2PUQ3ZSxtPU83ZSxiPU43ZSxFPW51bGw7ZnVuY3Rpb24gXygpe3ZhciBMLE4sQj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaj0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksUj12LmFwcGx5KHRoaXMsYXJndW1lbnRzKS1HVSx6PW0uYXBwbHkodGhpcyxhcmd1bWVudHMpLUdVLEs9d0l0KHotUiksaXQ9ej5SO2lmKEV8fChFPUw9dzF0KCkpLGo8QiYmKE49aixqPUIsQj1OKSwhKGo+djApKUUubW92ZVRvKDAsMCk7ZWxzZSBpZihLPlZVLXYwKUUubW92ZVRvKGoqUTcoUiksaip1MyhSKSksRS5hcmMoMCwwLGosUix6LCFpdCksQj52MCYmKEUubW92ZVRvKEIqUTcoeiksQip1Myh6KSksRS5hcmMoMCwwLEIseixSLGl0KSk7ZWxzZXt2YXIgc3Q9Uix1dD16LGJ0PVIsbXQ9eix5dD1LLGR0PUssaHQ9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cykvMix3dD1odD52MCYmKHA/K3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOkFBKEIqQitqKmopKSxYPUQxdCh3SXQoai1CKS8yLCtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscHQ9WCxVPVgseHQsbnQ7aWYod3Q+djApe3ZhciBPdD1tSXQod3QvQip1MyhodCkpLE50PW1JdCh3dC9qKnUzKGh0KSk7KHl0LT1PdCoyKT52MD8oT3QqPWl0PzE6LTEsYnQrPU90LG10LT1PdCk6KHl0PTAsYnQ9bXQ9KFIreikvMiksKGR0LT1OdCoyKT52MD8oTnQqPWl0PzE6LTEsc3QrPU50LHV0LT1OdCk6KGR0PTAsc3Q9dXQ9KFIreikvMil9dmFyIHF0PWoqUTcoc3QpLEN0PWoqdTMoc3QpLFo9QipRNyhtdCksVHQ9Qip1MyhtdCk7aWYoWD52MCl7dmFyIEh0PWoqUTcodXQpLEl0PWoqdTModXQpLEZ0PUIqUTcoYnQpLGtlPUIqdTMoYnQpLHBuO2lmKEs8UE4mJihwbj1QN2UocXQsQ3QsRnQsa2UsSHQsSXQsWixUdCkpKXt2YXIgTWU9cXQtcG5bMF0sdmU9Q3QtcG5bMV0sR2U9SHQtcG5bMF0sS2U9SXQtcG5bMV0sd2U9MS91MyhMN2UoKE1lKkdlK3ZlKktlKS8oQUEoTWUqTWUrdmUqdmUpKkFBKEdlKkdlK0tlKktlKSkpLzIpLF9lPUFBKHBuWzBdKnBuWzBdK3BuWzFdKnBuWzFdKTtwdD1EMXQoWCwoQi1fZSkvKHdlLTEpKSxVPUQxdChYLChqLV9lKS8od2UrMSkpfX1kdD52MD9VPnYwPyh4dD1VVShGdCxrZSxxdCxDdCxqLFUsaXQpLG50PVVVKEh0LEl0LFosVHQsaixVLGl0KSxFLm1vdmVUbyh4dC5jeCt4dC54MDEseHQuY3kreHQueTAxKSxVPFg/RS5hcmMoeHQuY3gseHQuY3ksVSxiMCh4dC55MDEseHQueDAxKSxiMChudC55MDEsbnQueDAxKSwhaXQpOihFLmFyYyh4dC5jeCx4dC5jeSxVLGIwKHh0LnkwMSx4dC54MDEpLGIwKHh0LnkxMSx4dC54MTEpLCFpdCksRS5hcmMoMCwwLGosYjAoeHQuY3kreHQueTExLHh0LmN4K3h0LngxMSksYjAobnQuY3krbnQueTExLG50LmN4K250LngxMSksIWl0KSxFLmFyYyhudC5jeCxudC5jeSxVLGIwKG50LnkxMSxudC54MTEpLGIwKG50LnkwMSxudC54MDEpLCFpdCkpKTooRS5tb3ZlVG8ocXQsQ3QpLEUuYXJjKDAsMCxqLHN0LHV0LCFpdCkpOkUubW92ZVRvKHF0LEN0KSwhKEI+djApfHwhKHl0PnYwKT9FLmxpbmVUbyhaLFR0KTpwdD52MD8oeHQ9VVUoWixUdCxIdCxJdCxCLC1wdCxpdCksbnQ9VVUocXQsQ3QsRnQsa2UsQiwtcHQsaXQpLEUubGluZVRvKHh0LmN4K3h0LngwMSx4dC5jeSt4dC55MDEpLHB0PFg/RS5hcmMoeHQuY3gseHQuY3kscHQsYjAoeHQueTAxLHh0LngwMSksYjAobnQueTAxLG50LngwMSksIWl0KTooRS5hcmMoeHQuY3gseHQuY3kscHQsYjAoeHQueTAxLHh0LngwMSksYjAoeHQueTExLHh0LngxMSksIWl0KSxFLmFyYygwLDAsQixiMCh4dC5jeSt4dC55MTEseHQuY3greHQueDExKSxiMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxpdCksRS5hcmMobnQuY3gsbnQuY3kscHQsYjAobnQueTExLG50LngxMSksYjAobnQueTAxLG50LngwMSksIWl0KSkpOkUuYXJjKDAsMCxCLG10LGJ0LGl0KX1pZihFLmNsb3NlUGF0aCgpLEwpcmV0dXJuIEU9bnVsbCxMKyIifHxudWxsfXJldHVybiBfLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIEw9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLE49KCt2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK20uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVBOLzI7cmV0dXJuW1E3KE4pKkwsdTMoTikqTF19LF8uaW5uZXJSYWRpdXM9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6aX0sXy5vdXRlclJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTphfSxfLmNvcm5lclJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTpmfSxfLnBhZFJhZGl1cz1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1MPT1udWxsP251bGw6dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6cH0sXy5zdGFydEFuZ2xlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6WWgoK0wpLF8pOnZ9LF8uZW5kQW5nbGU9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpZaCgrTCksXyk6bX0sXy5wYWRBbmdsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOlloKCtMKSxfKTpifSxfLmNvbnRleHQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9TD8/bnVsbCxfKTpFfSxffWZ1bmN0aW9uIHlJdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiYibGVuZ3RoImluIGk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIHhJdChpKXt0aGlzLl9jb250ZXh0PWl9eEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2JyZWFrfX19O2Z1bmN0aW9uIGlnKGkpe3JldHVybiBuZXcgeEl0KGkpfWZ1bmN0aW9uIEY3ZShpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBCN2UoaSl7cmV0dXJuIGlbMV19ZnVuY3Rpb24gWjcoaSxhKXt2YXIgZj1ZaCghMCkscD1udWxsLHY9aWcsbT1udWxsO2k9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT09dm9pZCAwP0Y3ZTpZaChpKSxhPXR5cGVvZiBhPT0iZnVuY3Rpb24iP2E6YT09PXZvaWQgMD9CN2U6WWgoYSk7ZnVuY3Rpb24gYihFKXt2YXIgXyxMPShFPXlJdChFKSkubGVuZ3RoLE4sQj0hMSxqO2ZvcihwPT1udWxsJiYobT12KGo9dzF0KCkpKSxfPTA7Xzw9TDsrK18pIShfPEwmJmYoTj1FW19dLF8sRSkpPT09QiYmKChCPSFCKT9tLmxpbmVTdGFydCgpOm0ubGluZUVuZCgpKSxCJiZtLnBvaW50KCtpKE4sXyxFKSwrYShOLF8sRSkpO2lmKGopcmV0dXJuIG09bnVsbCxqKyIifHxudWxsfXJldHVybiBiLng9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpZaCgrRSksYik6aX0sYi55PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOmF9LGIuZGVmaW5lZD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlloKCEhRSksYik6Zn0sYi5jdXJ2ZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1FLHAhPW51bGwmJihtPXYocCkpLGIpOnZ9LGIuY29udGV4dD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT09bnVsbD9wPW09bnVsbDptPXYocD1FKSxiKTpwfSxifWZ1bmN0aW9uIFI3ZShpLGEpe3JldHVybiBhPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBqN2UoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gJDdlKCl7dmFyIGk9ajdlLGE9UjdlLGY9bnVsbCxwPVloKDApLHY9WWgoVlUpLG09WWgoMCk7ZnVuY3Rpb24gYihFKXt2YXIgXyxMPShFPXlJdChFKSkubGVuZ3RoLE4sQixqPTAsUj1uZXcgQXJyYXkoTCksej1uZXcgQXJyYXkoTCksSz0rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaXQ9TWF0aC5taW4oVlUsTWF0aC5tYXgoLVZVLHYuYXBwbHkodGhpcyxhcmd1bWVudHMpLUspKSxzdCx1dD1NYXRoLm1pbihNYXRoLmFicyhpdCkvTCxtLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYnQ9dXQqKGl0PDA/LTE6MSksbXQ7Zm9yKF89MDtfPEw7KytfKShtdD16W1JbX109X109K2koRVtfXSxfLEUpKT4wJiYoais9bXQpO2ZvcihhIT1udWxsP1Iuc29ydChmdW5jdGlvbih5dCxkdCl7cmV0dXJuIGEoelt5dF0seltkdF0pfSk6ZiE9bnVsbCYmUi5zb3J0KGZ1bmN0aW9uKHl0LGR0KXtyZXR1cm4gZihFW3l0XSxFW2R0XSl9KSxfPTAsQj1qPyhpdC1MKmJ0KS9qOjA7XzxMOysrXyxLPXN0KU49UltfXSxtdD16W05dLHN0PUsrKG10PjA/bXQqQjowKStidCx6W05dPXtkYXRhOkVbTl0saW5kZXg6Xyx2YWx1ZTptdCxzdGFydEFuZ2xlOkssZW5kQW5nbGU6c3QscGFkQW5nbGU6dXR9O3JldHVybiB6fXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGY9bnVsbCxiKTphfSxiLnNvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9RSxhPW51bGwsYik6Zn0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6WWgoK0UpLGIpOnB9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpZaCgrRSksYik6dn0sYi5wYWRBbmdsZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlloKCtFKSxiKTptfSxifWNsYXNzIGtJdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX2NvbnRleHQ9YSx0aGlzLl94PWZ9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQoYSxmKXtzd2l0Y2goYT0rYSxmPStmLHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhhLGYpOnRoaXMuX2NvbnRleHQubW92ZVRvKGEsZik7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK2EpLzIsdGhpcy5feTAsdGhpcy5feDAsZixhLGYpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArZikvMixhLHRoaXMuX3kwLGEsZik7YnJlYWt9fXRoaXMuX3gwPWEsdGhpcy5feTA9Zn19ZnVuY3Rpb24gejdlKGkpe3JldHVybiBuZXcga0l0KGksITApfWZ1bmN0aW9uIHE3ZShpKXtyZXR1cm4gbmV3IGtJdChpLCExKX1mdW5jdGlvbiBaNigpe31mdW5jdGlvbiBXVShpLGEsZil7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK2EpLzYsKGkuX3kwKzQqaS5feTErZikvNil9ZnVuY3Rpb24gS1UoaSl7dGhpcy5fY29udGV4dD1pfUtVLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6V1UodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6V1UodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YX19O2Z1bmN0aW9uIEZOKGkpe3JldHVybiBuZXcgS1UoaSl9ZnVuY3Rpb24gRUl0KGkpe3RoaXMuX2NvbnRleHQ9aX1FSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6WjYsYXJlYUVuZDpaNixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PWEsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MSthKS82KTticmVhaztkZWZhdWx0OldVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWF9fTtmdW5jdGlvbiBIN2UoaSl7cmV0dXJuIG5ldyBFSXQoaSl9ZnVuY3Rpb24gVEl0KGkpe3RoaXMuX2NvbnRleHQ9aX1USXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGY9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixwPSh0aGlzLl95MCs0KnRoaXMuX3kxK2EpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhmLHApOnRoaXMuX2NvbnRleHQubW92ZVRvKGYscCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpXVSh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hfX07ZnVuY3Rpb24gRzdlKGkpe3JldHVybiBuZXcgVEl0KGkpfWZ1bmN0aW9uIENJdChpLGEpe3RoaXMuX2Jhc2lzPW5ldyBLVShpKSx0aGlzLl9iZXRhPWF9Q0l0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxhPXRoaXMuX3ksZj1pLmxlbmd0aC0xO2lmKGY+MClmb3IodmFyIHA9aVswXSx2PWFbMF0sbT1pW2ZdLXAsYj1hW2ZdLXYsRT0tMSxfOysrRTw9ZjspXz1FL2YsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW0VdKygxLXRoaXMuX2JldGEpKihwK18qbSksdGhpcy5fYmV0YSphW0VdKygxLXRoaXMuX2JldGEpKih2K18qYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrYSl9fTtjb25zdCBWN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhPT09MT9uZXcgS1UocCk6bmV3IENJdChwLGEpfXJldHVybiBmLmJldGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguODUpO2Z1bmN0aW9uIFlVKGksYSxmKXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1hKSxpLl95MitpLl9rKihpLl95MS1mKSxpLl94MixpLl95Mil9ZnVuY3Rpb24gTzF0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtYSkvNn1PMXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOllVKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPWE7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpZVSh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgVTdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gbmV3IE8xdChwLGEpfXJldHVybiBmLnRlbnNpb249ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSgwKTtmdW5jdGlvbiBOMXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1hKS82fU4xdC5wcm90b3R5cGU9e2FyZWFTdGFydDpaNixhcmVhRW5kOlo2LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PWEpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9YTticmVhaztkZWZhdWx0OllVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBXN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgTjF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIFAxdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLWEpLzZ9UDF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OllVKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBLN2U9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgUDF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIEYxdChpLGEsZil7dmFyIHA9aS5feDEsdj1pLl95MSxtPWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+djApe3ZhciBFPTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLF89MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO3A9KHAqRS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9fLHY9KHYqRS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9ffWlmKGkuX2wyM19hPnYwKXt2YXIgTD0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxOPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTttPShtKkwraS5feDEqaS5fbDIzXzJhLWEqaS5fbDEyXzJhKS9OLGI9KGIqTCtpLl95MSppLl9sMjNfMmEtZippLl9sMTJfMmEpL059aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAsdixtLGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIF9JdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfV9JdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkYxdCh0aGlzLGksYSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IFk3ZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIGE/bmV3IF9JdChwLGEpOm5ldyBPMXQocCwwKX1yZXR1cm4gZi5hbHBoYT1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KC41KTtmdW5jdGlvbiBTSXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9YX1TSXQucHJvdG90eXBlPXthcmVhU3RhcnQ6WjYsYXJlYUVuZDpaNixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9YSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1hO2JyZWFrO2RlZmF1bHQ6RjF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgWDdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgU0l0KHAsYSk6bmV3IE4xdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIEFJdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfUFJdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6RjF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgUTdlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgQUl0KHAsYSk6bmV3IFAxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIExJdChpKXt0aGlzLl9jb250ZXh0PWl9TEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0Olo2LGFyZWFFbmQ6WjYsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLGEpe2k9K2ksYT0rYSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGksYSkpfX07ZnVuY3Rpb24gWjdlKGkpe3JldHVybiBuZXcgTEl0KGkpfWZ1bmN0aW9uIE1JdChpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gSUl0KGksYSxmKXt2YXIgcD1pLl94MS1pLl94MCx2PWEtaS5feDEsbT0oaS5feTEtaS5feTApLyhwfHx2PDAmJi0wKSxiPShmLWkuX3kxKS8odnx8cDwwJiYtMCksRT0obSp2K2IqcCkvKHArdik7cmV0dXJuKE1JdChtKStNSXQoYikpKk1hdGgubWluKE1hdGguYWJzKG0pLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKEUpKXx8MH1mdW5jdGlvbiBESXQoaSxhKXt2YXIgZj1pLl94MS1pLl94MDtyZXR1cm4gZj8oMyooaS5feTEtaS5feTApL2YtYSkvMjphfWZ1bmN0aW9uIEIxdChpLGEsZil7dmFyIHA9aS5feDAsdj1pLl95MCxtPWkuX3gxLGI9aS5feTEsRT0obS1wKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwK0UsditFKmEsbS1FLGItRSpmLG0sYil9ZnVuY3Rpb24gWFUoaSl7dGhpcy5fY29udGV4dD1pfVhVLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpCMXQodGhpcyx0aGlzLl90MCxESXQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt2YXIgZj1OYU47aWYoaT0raSxhPSthLCEoaT09PXRoaXMuX3gxJiZhPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLEIxdCh0aGlzLERJdCh0aGlzLGY9SUl0KHRoaXMsaSxhKSksZik7YnJlYWs7ZGVmYXVsdDpCMXQodGhpcyx0aGlzLl90MCxmPUlJdCh0aGlzLGksYSkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YSx0aGlzLl90MD1mfX19O2Z1bmN0aW9uIE9JdChpKXt0aGlzLl9jb250ZXh0PW5ldyBOSXQoaSl9KE9JdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShYVS5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLGEpe1hVLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsYSxpKX07ZnVuY3Rpb24gTkl0KGkpe3RoaXMuX2NvbnRleHQ9aX1OSXQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhhLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhhLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdixtKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oYSxpLHAsZixtLHYpfX07ZnVuY3Rpb24gSjdlKGkpe3JldHVybiBuZXcgWFUoaSl9ZnVuY3Rpb24gdFRlKGkpe3JldHVybiBuZXcgT0l0KGkpfWZ1bmN0aW9uIFBJdChpKXt0aGlzLl9jb250ZXh0PWl9UEl0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gsYT10aGlzLl95LGY9aS5sZW5ndGg7aWYoZilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sYVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxhWzBdKSxmPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLGFbMV0pO2Vsc2UgZm9yKHZhciBwPUZJdChpKSx2PUZJdChhKSxtPTAsYj0xO2I8ZjsrK20sKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwWzBdW21dLHZbMF1bbV0scFsxXVttXSx2WzFdW21dLGlbYl0sYVtiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZmPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK2EpfX07ZnVuY3Rpb24gRkl0KGkpe3ZhciBhLGY9aS5sZW5ndGgtMSxwLHY9bmV3IEFycmF5KGYpLG09bmV3IEFycmF5KGYpLGI9bmV3IEFycmF5KGYpO2Zvcih2WzBdPTAsbVswXT0yLGJbMF09aVswXSsyKmlbMV0sYT0xO2E8Zi0xOysrYSl2W2FdPTEsbVthXT00LGJbYV09NCppW2FdKzIqaVthKzFdO2Zvcih2W2YtMV09MixtW2YtMV09NyxiW2YtMV09OCppW2YtMV0raVtmXSxhPTE7YTxmOysrYSlwPXZbYV0vbVthLTFdLG1bYV0tPXAsYlthXS09cCpiW2EtMV07Zm9yKHZbZi0xXT1iW2YtMV0vbVtmLTFdLGE9Zi0yO2E+PTA7LS1hKXZbYV09KGJbYV0tdlthKzFdKS9tW2FdO2ZvcihtW2YtMV09KGlbZl0rdltmLTFdKS8yLGE9MDthPGYtMTsrK2EpbVthXT0yKmlbYSsxXS12W2ErMV07cmV0dXJuW3YsbV19ZnVuY3Rpb24gZVRlKGkpe3JldHVybiBuZXcgUEl0KGkpfWZ1bmN0aW9uIFFVKGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9YX1RVS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxhKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2Vsc2V7dmFyIGY9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhmLGEpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1hfX07ZnVuY3Rpb24gblRlKGkpe3JldHVybiBuZXcgUVUoaSwuNSl9ZnVuY3Rpb24gclRlKGkpe3JldHVybiBuZXcgUVUoaSwwKX1mdW5jdGlvbiBpVGUoaSl7cmV0dXJuIG5ldyBRVShpLDEpfWZ1bmN0aW9uIEJOKGksYSxmKXt0aGlzLms9aSx0aGlzLng9YSx0aGlzLnk9Zn1CTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkJOLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBCTih0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PT0wJmE9PT0wP3RoaXM6bmV3IEJOKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuayphKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sQk4ucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjUgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC41L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOkJJdCxzZXRQcm90b3R5cGVPZjpSSXQsaXNGcm96ZW46c1RlLGdldFByb3RvdHlwZU9mOmFUZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6b1RlfT1PYmplY3Q7bGV0e2ZyZWV6ZTpzZyxzZWFsOlh3LGNyZWF0ZTpjVGV9PU9iamVjdCx7YXBwbHk6UjF0LGNvbnN0cnVjdDpqMXR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtSMXR8fChSMXQ9ZnVuY3Rpb24oYSxmLHApe3JldHVybiBhLmFwcGx5KGYscCl9KSxzZ3x8KHNnPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksWHd8fChYdz1mdW5jdGlvbihhKXtyZXR1cm4gYX0pLGoxdHx8KGoxdD1mdW5jdGlvbihhLGYpe3JldHVybiBuZXcgYSguLi5mKX0pO2NvbnN0IHVUZT1LMihBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksakl0PUsyKEFycmF5LnByb3RvdHlwZS5wb3ApLFJOPUsyKEFycmF5LnByb3RvdHlwZS5wdXNoKSxaVT1LMihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSwkMXQ9SzIoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksbFRlPUsyKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLFF3PUsyKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksaFRlPUsyKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksZlRlPUsyKFN0cmluZy5wcm90b3R5cGUudHJpbSksTWI9SzIoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxqTj1kVGUoVHlwZUVycm9yKTtmdW5jdGlvbiBLMihpKXtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgscD1uZXcgQXJyYXkoZj4xP2YtMTowKSx2PTE7djxmO3YrKylwW3YtMV09YXJndW1lbnRzW3ZdO3JldHVybiBSMXQoaSxhLHApfX1mdW5jdGlvbiBkVGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoYSkscD0wO3A8YTtwKyspZltwXT1hcmd1bWVudHNbcF07cmV0dXJuIGoxdChpLGYpfX1mdW5jdGlvbiB3byhpLGEsZil7dmFyIHA7Zj0ocD1mKSE9PW51bGwmJnAhPT12b2lkIDA/cDpaVSxSSXQmJlJJdChpLG51bGwpO2xldCB2PWEubGVuZ3RoO2Zvcig7di0tOyl7bGV0IG09YVt2XTtpZih0eXBlb2YgbT09InN0cmluZyIpe2NvbnN0IGI9ZihtKTtiIT09bSYmKHNUZShhKXx8KGFbdl09YiksbT1iKX1pW21dPSEwfXJldHVybiBpfWZ1bmN0aW9uIE1BKGkpe2NvbnN0IGE9Y1RlKG51bGwpO2Zvcihjb25zdFtmLHBdb2YgQkl0KGkpKWFbZl09cDtyZXR1cm4gYX1mdW5jdGlvbiBKVShpLGEpe2Zvcig7aSE9PW51bGw7KXtjb25zdCBwPW9UZShpLGEpO2lmKHApe2lmKHAuZ2V0KXJldHVybiBLMihwLmdldCk7aWYodHlwZW9mIHAudmFsdWU9PSJmdW5jdGlvbiIpcmV0dXJuIEsyKHAudmFsdWUpfWk9YVRlKGkpfWZ1bmN0aW9uIGYocCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIixwKSxudWxsfXJldHVybiBmfWNvbnN0ICRJdD1zZyhbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksejF0PXNnKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxxMXQ9c2coWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksZ1RlPXNnKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxIMXQ9c2coWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLHBUZT1zZyhbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksekl0PXNnKFsiI3RleHQiXSkscUl0PXNnKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxHMXQ9c2coWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxISXQ9c2coWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksdFc9c2coWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxiVGU9WHcoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSx2VGU9WHcoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHdUZT1YdygvXCR7W1x3XFddKn0vZ20pLG1UZT1YdygvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSx5VGU9WHcoL15hcmlhLVtcLVx3XSskLyksR0l0PVh3KC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLHhUZT1YdygvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksa1RlPVh3KC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFZJdD1YdygvXmh0bWwkL2kpO3ZhciBVSXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTVVTVEFDSEVfRVhQUjpiVGUsRVJCX0VYUFI6dlRlLFRNUExJVF9FWFBSOndUZSxEQVRBX0FUVFI6bVRlLEFSSUFfQVRUUjp5VGUsSVNfQUxMT1dFRF9VUkk6R0l0LElTX1NDUklQVF9PUl9EQVRBOnhUZSxBVFRSX1dISVRFU1BBQ0U6a1RlLERPQ1RZUEVfTkFNRTpWSXR9KTtjb25zdCBFVGU9KCk9PnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LFRUZT1mdW5jdGlvbihhLGYpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIGEuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBwPW51bGw7Y29uc3Qgdj0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjtmJiZmLmhhc0F0dHJpYnV0ZSh2KSYmKHA9Zi5nZXRBdHRyaWJ1dGUodikpO2NvbnN0IG09ImRvbXB1cmlmeSIrKHA/IiMiK3A6IiIpO3RyeXtyZXR1cm4gYS5jcmVhdGVQb2xpY3kobSx7Y3JlYXRlSFRNTChiKXtyZXR1cm4gYn0sY3JlYXRlU2NyaXB0VVJMKGIpe3JldHVybiBifX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIittKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O2Z1bmN0aW9uIFdJdCgpe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpFVGUoKTtjb25zdCBhPUJpPT5XSXQoQmkpO2lmKGEudmVyc2lvbj0iMy4wLjUiLGEucmVtb3ZlZD1bXSwhaXx8IWkuZG9jdW1lbnR8fGkuZG9jdW1lbnQubm9kZVR5cGUhPT05KXJldHVybiBhLmlzU3VwcG9ydGVkPSExLGE7Y29uc3QgZj1pLmRvY3VtZW50LHA9Zi5jdXJyZW50U2NyaXB0O2xldHtkb2N1bWVudDp2fT1pO2NvbnN0e0RvY3VtZW50RnJhZ21lbnQ6bSxIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTpFLEVsZW1lbnQ6XyxOb2RlRmlsdGVyOkwsTmFtZWROb2RlTWFwOk49aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpCLERPTVBhcnNlcjpqLHRydXN0ZWRUeXBlczpSfT1pLHo9Xy5wcm90b3R5cGUsSz1KVSh6LCJjbG9uZU5vZGUiKSxpdD1KVSh6LCJuZXh0U2libGluZyIpLHN0PUpVKHosImNoaWxkTm9kZXMiKSx1dD1KVSh6LCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IEJpPXYuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtCaS5jb250ZW50JiZCaS5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih2PUJpLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IGJ0LG10PSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOnl0LGNyZWF0ZU5vZGVJdGVyYXRvcjpkdCxjcmVhdGVEb2N1bWVudEZyYWdtZW50Omh0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnd0fT12LHtpbXBvcnROb2RlOlh9PWY7bGV0IHB0PXt9O2EuaXNTdXBwb3J0ZWQ9dHlwZW9mIEJJdD09ImZ1bmN0aW9uIiYmdHlwZW9mIHV0PT0iZnVuY3Rpb24iJiZ5dCYmeXQuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VSxFUkJfRVhQUjp4dCxUTVBMSVRfRVhQUjpudCxEQVRBX0FUVFI6T3QsQVJJQV9BVFRSOk50LElTX1NDUklQVF9PUl9EQVRBOnF0LEFUVFJfV0hJVEVTUEFDRTpDdH09VUl0O2xldHtJU19BTExPV0VEX1VSSTpafT1VSXQsVHQ9bnVsbDtjb25zdCBIdD13byh7fSxbLi4uJEl0LC4uLnoxdCwuLi5xMXQsLi4uSDF0LC4uLnpJdF0pO2xldCBJdD1udWxsO2NvbnN0IEZ0PXdvKHt9LFsuLi5xSXQsLi4uRzF0LC4uLkhJdCwuLi50V10pO2xldCBrZT1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxwbj1udWxsLE1lPW51bGwsdmU9ITAsR2U9ITAsS2U9ITEsd2U9ITAsX2U9ITEsJHQ9ITEscmU9ITEsaWU9ITEsT2U9ITEsb2U9ITEsTmU9ITEsbWU9ITAsY249ITE7Y29uc3QgbGk9InVzZXItY29udGVudC0iO2xldCB5YT0hMCxkYT0hMSxPbz17fSxkcz1udWxsO2NvbnN0IERyPXdvKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IG5yPW51bGw7Y29uc3QgZGk9d28oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgRWU9bnVsbDtjb25zdCBZbj13byh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLEhlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixUaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGduPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQga3M9Z24scWE9ITEsTGE9bnVsbDtjb25zdCBHcz13byh7fSxbSGUsVGksZ25dLCQxdCk7bGV0IE5vO2NvbnN0IHZzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sbnU9InRleHQvaHRtbCI7bGV0ICRzLEx1PW51bGw7Y29uc3QgZm09di5jcmVhdGVFbGVtZW50KCJmb3JtIiksYXY9ZnVuY3Rpb24ob24pe3JldHVybiBvbiBpbnN0YW5jZW9mIFJlZ0V4cHx8b24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sVXU9ZnVuY3Rpb24ob24pe2lmKCEoTHUmJkx1PT09b24pKXtpZigoIW9ufHx0eXBlb2Ygb24hPSJvYmplY3QiKSYmKG9uPXt9KSxvbj1NQShvbiksTm89dnMuaW5kZXhPZihvbi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9Obz1udTpObz1vbi5QQVJTRVJfTUVESUFfVFlQRSwkcz1Obz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPyQxdDpaVSxUdD0iQUxMT1dFRF9UQUdTImluIG9uP3dvKHt9LG9uLkFMTE9XRURfVEFHUywkcyk6SHQsSXQ9IkFMTE9XRURfQVRUUiJpbiBvbj93byh7fSxvbi5BTExPV0VEX0FUVFIsJHMpOkZ0LExhPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gb24/d28oe30sb24uQUxMT1dFRF9OQU1FU1BBQ0VTLCQxdCk6R3MsRWU9IkFERF9VUklfU0FGRV9BVFRSImluIG9uP3dvKE1BKFluKSxvbi5BRERfVVJJX1NBRkVfQVRUUiwkcyk6WW4sbnI9IkFERF9EQVRBX1VSSV9UQUdTImluIG9uP3dvKE1BKGRpKSxvbi5BRERfREFUQV9VUklfVEFHUywkcyk6ZGksZHM9IkZPUkJJRF9DT05URU5UUyJpbiBvbj93byh7fSxvbi5GT1JCSURfQ09OVEVOVFMsJHMpOkRyLHBuPSJGT1JCSURfVEFHUyJpbiBvbj93byh7fSxvbi5GT1JCSURfVEFHUywkcyk6e30sTWU9IkZPUkJJRF9BVFRSImluIG9uP3dvKHt9LG9uLkZPUkJJRF9BVFRSLCRzKTp7fSxPbz0iVVNFX1BST0ZJTEVTImluIG9uP29uLlVTRV9QUk9GSUxFUzohMSx2ZT1vbi5BTExPV19BUklBX0FUVFIhPT0hMSxHZT1vbi5BTExPV19EQVRBX0FUVFIhPT0hMSxLZT1vbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsd2U9b24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsX2U9b24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSwkdD1vbi5XSE9MRV9ET0NVTUVOVHx8ITEsT2U9b24uUkVUVVJOX0RPTXx8ITEsb2U9b24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTmU9b24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsaWU9b24uRk9SQ0VfQk9EWXx8ITEsbWU9b24uU0FOSVRJWkVfRE9NIT09ITEsY249b24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLHlhPW9uLktFRVBfQ09OVEVOVCE9PSExLGRhPW9uLklOX1BMQUNFfHwhMSxaPW9uLkFMTE9XRURfVVJJX1JFR0VYUHx8R0l0LGtzPW9uLk5BTUVTUEFDRXx8Z24sa2U9b24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZhdihvbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoa2UudGFnTmFtZUNoZWNrPW9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksb24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmF2KG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihrZS5hdHRyaWJ1dGVOYW1lQ2hlY2s9b24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxvbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIG9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoa2UuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPW9uLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksX2UmJihHZT0hMSksb2UmJihPZT0hMCksT28mJihUdD13byh7fSxbLi4uekl0XSksSXQ9W10sT28uaHRtbD09PSEwJiYod28oVHQsJEl0KSx3byhJdCxxSXQpKSxPby5zdmc9PT0hMCYmKHdvKFR0LHoxdCksd28oSXQsRzF0KSx3byhJdCx0VykpLE9vLnN2Z0ZpbHRlcnM9PT0hMCYmKHdvKFR0LHExdCksd28oSXQsRzF0KSx3byhJdCx0VykpLE9vLm1hdGhNbD09PSEwJiYod28oVHQsSDF0KSx3byhJdCxISXQpLHdvKEl0LHRXKSkpLG9uLkFERF9UQUdTJiYoVHQ9PT1IdCYmKFR0PU1BKFR0KSksd28oVHQsb24uQUREX1RBR1MsJHMpKSxvbi5BRERfQVRUUiYmKEl0PT09RnQmJihJdD1NQShJdCkpLHdvKEl0LG9uLkFERF9BVFRSLCRzKSksb24uQUREX1VSSV9TQUZFX0FUVFImJndvKEVlLG9uLkFERF9VUklfU0FGRV9BVFRSLCRzKSxvbi5GT1JCSURfQ09OVEVOVFMmJihkcz09PURyJiYoZHM9TUEoZHMpKSx3byhkcyxvbi5GT1JCSURfQ09OVEVOVFMsJHMpKSx5YSYmKFR0WyIjdGV4dCJdPSEwKSwkdCYmd28oVHQsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksVHQudGFibGUmJih3byhUdCxbInRib2R5Il0pLGRlbGV0ZSBwbi50Ym9keSksb24uVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBvbi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2Ygb24uVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IGpOKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO2J0PW9uLlRSVVNURURfVFlQRVNfUE9MSUNZLG10PWJ0LmNyZWF0ZUhUTUwoIiIpfWVsc2UgYnQ9PT12b2lkIDAmJihidD1UVGUoUixwKSksYnQhPT1udWxsJiZ0eXBlb2YgbXQ9PSJzdHJpbmciJiYobXQ9YnQuY3JlYXRlSFRNTCgiIikpO3NnJiZzZyhvbiksTHU9b259fSxabD13byh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksUGE9d28oe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksQWw9d28oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksdWE9d28oe30sejF0KTt3byh1YSxxMXQpLHdvKHVhLGdUZSk7Y29uc3QgYmM9d28oe30sSDF0KTt3byhiYyxwVGUpO2NvbnN0IENjPWZ1bmN0aW9uKG9uKXtsZXQga3I9dXQob24pOygha3J8fCFrci50YWdOYW1lKSYmKGtyPXtuYW1lc3BhY2VVUkk6a3MsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgRWk9WlUob24udGFnTmFtZSksSm89WlUoa3IudGFnTmFtZSk7cmV0dXJuIExhW29uLm5hbWVzcGFjZVVSSV0/b24ubmFtZXNwYWNlVVJJPT09VGk/a3IubmFtZXNwYWNlVVJJPT09Z24/RWk9PT0ic3ZnIjprci5uYW1lc3BhY2VVUkk9PT1IZT9FaT09PSJzdmciJiYoSm89PT0iYW5ub3RhdGlvbi14bWwifHxabFtKb10pOiEhdWFbRWldOm9uLm5hbWVzcGFjZVVSST09PUhlP2tyLm5hbWVzcGFjZVVSST09PWduP0VpPT09Im1hdGgiOmtyLm5hbWVzcGFjZVVSST09PVRpP0VpPT09Im1hdGgiJiZQYVtKb106ISFiY1tFaV06b24ubmFtZXNwYWNlVVJJPT09Z24/a3IubmFtZXNwYWNlVVJJPT09VGkmJiFQYVtKb118fGtyLm5hbWVzcGFjZVVSST09PUhlJiYhWmxbSm9dPyExOiFiY1tFaV0mJihBbFtFaV18fCF1YVtFaV0pOiEhKE5vPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJkxhW29uLm5hbWVzcGFjZVVSSV0pOiExfSxnYT1mdW5jdGlvbihvbil7Uk4oYS5yZW1vdmVkLHtlbGVtZW50Om9ufSk7dHJ5e29uLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob24pfWNhdGNoe29uLnJlbW92ZSgpfX0sTWE9ZnVuY3Rpb24ob24sa3Ipe3RyeXtSTihhLnJlbW92ZWQse2F0dHJpYnV0ZTprci5nZXRBdHRyaWJ1dGVOb2RlKG9uKSxmcm9tOmtyfSl9Y2F0Y2h7Uk4oYS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmtyfSl9aWYoa3IucmVtb3ZlQXR0cmlidXRlKG9uKSxvbj09PSJpcyImJiFJdFtvbl0paWYoT2V8fG9lKXRyeXtnYShrcil9Y2F0Y2h7fWVsc2UgdHJ5e2tyLnNldEF0dHJpYnV0ZShvbiwiIil9Y2F0Y2h7fX0sSGE9ZnVuY3Rpb24ob24pe2xldCBrcixFaTtpZihpZSlvbj0iPHJlbW92ZT48L3JlbW92ZT4iK29uO2Vsc2V7Y29uc3QgdGY9bFRlKG9uLC9eW1xyXG5cdCBdKy8pO0VpPXRmJiZ0ZlswXX1Obz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZrcz09PWduJiYob249JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytvbisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBKbz1idD9idC5jcmVhdGVIVE1MKG9uKTpvbjtpZihrcz09PWduKXRyeXtrcj1uZXcgaigpLnBhcnNlRnJvbVN0cmluZyhKbyxObyl9Y2F0Y2h7fWlmKCFrcnx8IWtyLmRvY3VtZW50RWxlbWVudCl7a3I9eXQuY3JlYXRlRG9jdW1lbnQoa3MsInRlbXBsYXRlIixudWxsKTt0cnl7a3IuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1xYT9tdDpKb31jYXRjaHt9fWNvbnN0IHZjPWtyLmJvZHl8fGtyLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gb24mJkVpJiZ2Yy5pbnNlcnRCZWZvcmUodi5jcmVhdGVUZXh0Tm9kZShFaSksdmMuY2hpbGROb2Rlc1swXXx8bnVsbCksa3M9PT1nbj93dC5jYWxsKGtyLCR0PyJodG1sIjoiYm9keSIpWzBdOiR0P2tyLmRvY3VtZW50RWxlbWVudDp2Y30sTGw9ZnVuY3Rpb24ob24pe3JldHVybiBkdC5jYWxsKG9uLm93bmVyRG9jdW1lbnR8fG9uLG9uLEwuU0hPV19FTEVNRU5UfEwuU0hPV19DT01NRU5UfEwuU0hPV19URVhULG51bGwsITEpfSxfYz1mdW5jdGlvbihvbil7cmV0dXJuIG9uIGluc3RhbmNlb2YgQiYmKHR5cGVvZiBvbi5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBvbi50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBvbi5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShvbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTil8fHR5cGVvZiBvbi5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBvbi5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBvbi5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2Ygb24uaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygb24uaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LG92PWZ1bmN0aW9uKG9uKXtyZXR1cm4gdHlwZW9mIEU9PSJvYmplY3QiP29uIGluc3RhbmNlb2YgRTpvbiYmdHlwZW9mIG9uPT0ib2JqZWN0IiYmdHlwZW9mIG9uLm5vZGVUeXBlPT0ibnVtYmVyIiYmdHlwZW9mIG9uLm5vZGVOYW1lPT0ic3RyaW5nIn0sSmw9ZnVuY3Rpb24ob24sa3IsRWkpe3B0W29uXSYmdVRlKHB0W29uXSxKbz0+e0pvLmNhbGwoYSxrcixFaSxMdSl9KX0sWjE9ZnVuY3Rpb24ob24pe2xldCBrcjtpZihKbCgiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsb24sbnVsbCksX2Mob24pKXJldHVybiBnYShvbiksITA7Y29uc3QgRWk9JHMob24ubm9kZU5hbWUpO2lmKEpsKCJ1cG9uU2FuaXRpemVFbGVtZW50Iixvbix7dGFnTmFtZTpFaSxhbGxvd2VkVGFnczpUdH0pLG9uLmhhc0NoaWxkTm9kZXMoKSYmIW92KG9uLmZpcnN0RWxlbWVudENoaWxkKSYmKCFvdihvbi5jb250ZW50KXx8IW92KG9uLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmTWIoLzxbL1x3XS9nLG9uLmlubmVySFRNTCkmJk1iKC88Wy9cd10vZyxvbi50ZXh0Q29udGVudCkpcmV0dXJuIGdhKG9uKSwhMDtpZighVHRbRWldfHxwbltFaV0pe2lmKCFwbltFaV0mJkoxKEVpKSYmKGtlLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmTWIoa2UudGFnTmFtZUNoZWNrLEVpKXx8a2UudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJmtlLnRhZ05hbWVDaGVjayhFaSkpKXJldHVybiExO2lmKHlhJiYhZHNbRWldKXtjb25zdCBKbz11dChvbil8fG9uLnBhcmVudE5vZGUsdmM9c3Qob24pfHxvbi5jaGlsZE5vZGVzO2lmKHZjJiZKbyl7Y29uc3QgdGY9dmMubGVuZ3RoO2ZvcihsZXQgT2M9dGYtMTtPYz49MDstLU9jKUpvLmluc2VydEJlZm9yZShLKHZjW09jXSwhMCksaXQob24pKX19cmV0dXJuIGdhKG9uKSwhMH1yZXR1cm4gb24gaW5zdGFuY2VvZiBfJiYhQ2Mob24pfHwoRWk9PT0ibm9zY3JpcHQifHxFaT09PSJub2VtYmVkInx8RWk9PT0ibm9mcmFtZXMiKSYmTWIoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksb24uaW5uZXJIVE1MKT8oZ2Eob24pLCEwKTooX2UmJm9uLm5vZGVUeXBlPT09MyYmKGtyPW9uLnRleHRDb250ZW50LGtyPVF3KGtyLFUsIiAiKSxrcj1Rdyhrcix4dCwiICIpLGtyPVF3KGtyLG50LCIgIiksb24udGV4dENvbnRlbnQhPT1rciYmKFJOKGEucmVtb3ZlZCx7ZWxlbWVudDpvbi5jbG9uZU5vZGUoKX0pLG9uLnRleHRDb250ZW50PWtyKSksSmwoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsb24sbnVsbCksITEpfSxGZD1mdW5jdGlvbihvbixrcixFaSl7aWYobWUmJihrcj09PSJpZCJ8fGtyPT09Im5hbWUiKSYmKEVpIGluIHZ8fEVpIGluIGZtKSlyZXR1cm4hMTtpZighKEdlJiYhTWVba3JdJiZNYihPdCxrcikpKXtpZighKHZlJiZNYihOdCxrcikpKXtpZighSXRba3JdfHxNZVtrcl0pe2lmKCEoSjEob24pJiYoa2UudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZNYihrZS50YWdOYW1lQ2hlY2ssb24pfHxrZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYma2UudGFnTmFtZUNoZWNrKG9uKSkmJihrZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJk1iKGtlLmF0dHJpYnV0ZU5hbWVDaGVjayxrcil8fGtlLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZrZS5hdHRyaWJ1dGVOYW1lQ2hlY2soa3IpKXx8a3I9PT0iaXMiJiZrZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihrZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJk1iKGtlLnRhZ05hbWVDaGVjayxFaSl8fGtlLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZrZS50YWdOYW1lQ2hlY2soRWkpKSkpcmV0dXJuITF9ZWxzZSBpZighRWVba3JdKXtpZighTWIoWixRdyhFaSxDdCwiIikpKXtpZighKChrcj09PSJzcmMifHxrcj09PSJ4bGluazpocmVmInx8a3I9PT0iaHJlZiIpJiZvbiE9PSJzY3JpcHQiJiZoVGUoRWksImRhdGE6Iik9PT0wJiZucltvbl0pKXtpZighKEtlJiYhTWIocXQsUXcoRWksQ3QsIiIpKSkpe2lmKEVpKXJldHVybiExfX19fX19cmV0dXJuITB9LEoxPWZ1bmN0aW9uKG9uKXtyZXR1cm4gb24uaW5kZXhPZigiLSIpPjB9LEJkPWZ1bmN0aW9uKG9uKXtsZXQga3IsRWksSm8sdmM7SmwoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsb24sbnVsbCk7Y29uc3R7YXR0cmlidXRlczp0Zn09b247aWYoIXRmKXJldHVybjtjb25zdCBPYz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkl0fTtmb3IodmM9dGYubGVuZ3RoO3ZjLS07KXtrcj10Zlt2Y107Y29uc3R7bmFtZTplZixuYW1lc3BhY2VVUkk6bmZ9PWtyO2lmKEVpPWVmPT09InZhbHVlIj9rci52YWx1ZTpmVGUoa3IudmFsdWUpLEpvPSRzKGVmKSxPYy5hdHRyTmFtZT1KbyxPYy5hdHRyVmFsdWU9RWksT2Mua2VlcEF0dHI9ITAsT2MuZm9yY2VLZWVwQXR0cj12b2lkIDAsSmwoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsb24sT2MpLEVpPU9jLmF0dHJWYWx1ZSxPYy5mb3JjZUtlZXBBdHRyfHwoTWEoZWYsb24pLCFPYy5rZWVwQXR0cikpY29udGludWU7aWYoIXdlJiZNYigvXC8+L2ksRWkpKXtNYShlZixvbik7Y29udGludWV9X2UmJihFaT1RdyhFaSxVLCIgIiksRWk9UXcoRWkseHQsIiAiKSxFaT1RdyhFaSxudCwiICIpKTtjb25zdCBYaT0kcyhvbi5ub2RlTmFtZSk7aWYoRmQoWGksSm8sRWkpKXtpZihjbiYmKEpvPT09ImlkInx8Sm89PT0ibmFtZSIpJiYoTWEoZWYsb24pLEVpPWxpK0VpKSxidCYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUi5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhbmYpc3dpdGNoKFIuZ2V0QXR0cmlidXRlVHlwZShYaSxKbykpe2Nhc2UiVHJ1c3RlZEhUTUwiOntFaT1idC5jcmVhdGVIVE1MKEVpKTticmVha31jYXNlIlRydXN0ZWRTY3JpcHRVUkwiOntFaT1idC5jcmVhdGVTY3JpcHRVUkwoRWkpO2JyZWFrfX10cnl7bmY/b24uc2V0QXR0cmlidXRlTlMobmYsZWYsRWkpOm9uLnNldEF0dHJpYnV0ZShlZixFaSksakl0KGEucmVtb3ZlZCl9Y2F0Y2h7fX19SmwoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixvbixudWxsKX0sRTA9ZnVuY3Rpb24gQmkob24pe2xldCBrcjtjb25zdCBFaT1MbChvbik7Zm9yKEpsKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsb24sbnVsbCk7a3I9RWkubmV4dE5vZGUoKTspSmwoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLGtyLG51bGwpLCFaMShrcikmJihrci5jb250ZW50IGluc3RhbmNlb2YgbSYmQmkoa3IuY29udGVudCksQmQoa3IpKTtKbCgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsb24sbnVsbCl9O3JldHVybiBhLnNhbml0aXplPWZ1bmN0aW9uKEJpKXtsZXQgb249YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGtyLEVpLEpvLHZjO2lmKHFhPSFCaSxxYSYmKEJpPSI8IS0tPiIpLHR5cGVvZiBCaSE9InN0cmluZyImJiFvdihCaSkpaWYodHlwZW9mIEJpLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihCaT1CaS50b1N0cmluZygpLHR5cGVvZiBCaSE9InN0cmluZyIpdGhyb3cgak4oImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IGpOKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFhLmlzU3VwcG9ydGVkKXJldHVybiBCaTtpZihyZXx8VXUob24pLGEucmVtb3ZlZD1bXSx0eXBlb2YgQmk9PSJzdHJpbmciJiYoZGE9ITEpLGRhKXtpZihCaS5ub2RlTmFtZSl7Y29uc3QgZWY9JHMoQmkubm9kZU5hbWUpO2lmKCFUdFtlZl18fHBuW2VmXSl0aHJvdyBqTigicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEJpIGluc3RhbmNlb2YgRSlrcj1IYSgiPCEtLS0tPiIpLEVpPWtyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShCaSwhMCksRWkubm9kZVR5cGU9PT0xJiZFaS5ub2RlTmFtZT09PSJCT0RZInx8RWkubm9kZU5hbWU9PT0iSFRNTCI/a3I9RWk6a3IuYXBwZW5kQ2hpbGQoRWkpO2Vsc2V7aWYoIU9lJiYhX2UmJiEkdCYmQmkuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIGJ0JiZOZT9idC5jcmVhdGVIVE1MKEJpKTpCaTtpZihrcj1IYShCaSksIWtyKXJldHVybiBPZT9udWxsOk5lP210OiIifWtyJiZpZSYmZ2Eoa3IuZmlyc3RDaGlsZCk7Y29uc3QgdGY9TGwoZGE/Qmk6a3IpO2Zvcig7Sm89dGYubmV4dE5vZGUoKTspWjEoSm8pfHwoSm8uY29udGVudCBpbnN0YW5jZW9mIG0mJkUwKEpvLmNvbnRlbnQpLEJkKEpvKSk7aWYoZGEpcmV0dXJuIEJpO2lmKE9lKXtpZihvZSlmb3IodmM9aHQuY2FsbChrci5vd25lckRvY3VtZW50KTtrci5maXJzdENoaWxkOyl2Yy5hcHBlbmRDaGlsZChrci5maXJzdENoaWxkKTtlbHNlIHZjPWtyO3JldHVybihJdC5zaGFkb3dyb290fHxJdC5zaGFkb3dyb290bW9kZSkmJih2Yz1YLmNhbGwoZix2YywhMCkpLHZjfWxldCBPYz0kdD9rci5vdXRlckhUTUw6a3IuaW5uZXJIVE1MO3JldHVybiAkdCYmVHRbIiFkb2N0eXBlIl0mJmtyLm93bmVyRG9jdW1lbnQmJmtyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYma3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJk1iKFZJdCxrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihPYz0iPCFET0NUWVBFICIra3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtPYyksX2UmJihPYz1RdyhPYyxVLCIgIiksT2M9UXcoT2MseHQsIiAiKSxPYz1RdyhPYyxudCwiICIpKSxidCYmTmU/YnQuY3JlYXRlSFRNTChPYyk6T2N9LGEuc2V0Q29uZmlnPWZ1bmN0aW9uKEJpKXtVdShCaSkscmU9ITB9LGEuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtMdT1udWxsLHJlPSExfSxhLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oQmksb24sa3Ipe0x1fHxVdSh7fSk7Y29uc3QgRWk9JHMoQmkpLEpvPSRzKG9uKTtyZXR1cm4gRmQoRWksSm8sa3IpfSxhLmFkZEhvb2s9ZnVuY3Rpb24oQmksb24pe3R5cGVvZiBvbj09ImZ1bmN0aW9uIiYmKHB0W0JpXT1wdFtCaV18fFtdLFJOKHB0W0JpXSxvbikpfSxhLnJlbW92ZUhvb2s9ZnVuY3Rpb24oQmkpe2lmKHB0W0JpXSlyZXR1cm4gakl0KHB0W0JpXSl9LGEucmVtb3ZlSG9va3M9ZnVuY3Rpb24oQmkpe3B0W0JpXSYmKHB0W0JpXT1bXSl9LGEucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtwdD17fX0sYX12YXIgZVc9V0l0KCk7Y29uc3QgJE49LzxiclxzKlwvPz4vZ2ksQ1RlPWk9Pmk/WEl0KGkpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLEtJdD1pPT5lVy5zYW5pdGl6ZShpKSxZSXQ9KGksYSk9Pnt2YXIgZjtpZigoKGY9YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmh0bWxMYWJlbHMpIT09ITEpe2NvbnN0IHA9YS5zZWN1cml0eUxldmVsO3A9PT0iYW50aXNjcmlwdCJ8fHA9PT0ic3RyaWN0Ij9pPUtJdChpKTpwIT09Imxvb3NlIiYmKGk9WEl0KGkpLGk9aS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxpPWkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLGk9TFRlKGkpKX1yZXR1cm4gaX0sRGQ9KGksYSk9PmkmJihhLmRvbXB1cmlmeUNvbmZpZz9pPWVXLnNhbml0aXplKFlJdChpLGEpLGEuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOmk9ZVcuc2FuaXRpemUoWUl0KGksYSkse0ZPUkJJRF9UQUdTOlsic3R5bGUiXX0pLnRvU3RyaW5nKCksaSksX1RlPShpLGEpPT50eXBlb2YgaT09InN0cmluZyI/RGQoaSxhKTppLmZsYXQoKS5tYXAoZj0+RGQoZixhKSksU1RlPWk9PiROLnRlc3QoaSksQVRlPWk9Pmkuc3BsaXQoJE4pLExUZT1pPT5pLnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKSxYSXQ9aT0+aS5yZXBsYWNlKCROLCIjYnIjIiksTVRlPWk9PntsZXQgYT0iIjtyZXR1cm4gaSYmKGE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYT1hLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGE9YS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksYX0sczE9aT0+IShpPT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyhpKS50cmltKCkudG9Mb3dlckNhc2UoKSkpLElUZT1mdW5jdGlvbiguLi5pKXtjb25zdCBhPWkuZmlsdGVyKGY9PiFpc05hTihmKSk7cmV0dXJuIE1hdGgubWF4KC4uLmEpfSxEVGU9ZnVuY3Rpb24oLi4uaSl7Y29uc3QgYT1pLmZpbHRlcihmPT4haXNOYU4oZikpO3JldHVybiBNYXRoLm1pbiguLi5hKX0sek49ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnNwbGl0KC8oLCkvKSxmPVtdO2ZvcihsZXQgcD0wO3A8YS5sZW5ndGg7cCsrKXtsZXQgdj1hW3BdO2lmKHY9PT0iLCImJnA+MCYmcCsxPGEubGVuZ3RoKXtjb25zdCBtPWFbcC0xXSxiPWFbcCsxXTtPVGUobSxiKSYmKHY9bSsiLCIrYixwKyssZi5wb3AoKSl9Zi5wdXNoKE5UZSh2KSl9cmV0dXJuIGYuam9pbigiIil9LFYxdD0oaSxhKT0+TWF0aC5tYXgoMCxpLnNwbGl0KGEpLmxlbmd0aC0xKSxPVGU9KGksYSk9Pntjb25zdCBmPVYxdChpLCJ+IikscD1WMXQoYSwifiIpO3JldHVybiBmPT09MSYmcD09PTF9LE5UZT1pPT57Y29uc3QgYT1WMXQoaSwifiIpO2xldCBmPSExO2lmKGE8PTEpcmV0dXJuIGk7YSUyIT09MCYmaS5zdGFydHNXaXRoKCJ+IikmJihpPWkuc3Vic3RyaW5nKDEpLGY9ITApO2NvbnN0IHA9Wy4uLmldO2xldCB2PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO2Zvcig7diE9PS0xJiZtIT09LTEmJnYhPT1tOylwW3ZdPSI8IixwW21dPSI+Iix2PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO3JldHVybiBmJiZwLnVuc2hpZnQoIn4iKSxwLmpvaW4oIiIpfSxZcj17Z2V0Um93czpDVGUsc2FuaXRpemVUZXh0OkRkLHNhbml0aXplVGV4dE9yQXJyYXk6X1RlLGhhc0JyZWFrczpTVGUsc3BsaXRCcmVha3M6QVRlLGxpbmVCcmVha1JlZ2V4OiROLHJlbW92ZVNjcmlwdDpLSXQsZ2V0VXJsOk1UZSxldmFsdWF0ZTpzMSxnZXRNYXg6SVRlLGdldE1pbjpEVGV9LG5XPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6aT0+aT49MjU1PzI1NTppPDA/MDppLGc6aT0+aT49MjU1PzI1NTppPDA/MDppLGI6aT0+aT49MjU1PzI1NTppPDA/MDppLGg6aT0+aSUzNjAsczppPT5pPj0xMDA/MTAwOmk8MD8wOmksbDppPT5pPj0xMDA/MTAwOmk8MD8wOmksYTppPT5pPj0xPzE6aTwwPzA6aX0sdG9MaW5lYXI6aT0+e2NvbnN0IGE9aS8yNTU7cmV0dXJuIGk+LjAzOTI4P01hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCk6YS8xMi45Mn0saHVlMnJnYjooaSxhLGYpPT4oZjwwJiYoZis9MSksZj4xJiYoZi09MSksZjwxLzY/aSsoYS1pKSo2KmY6ZjwxLzI/YTpmPDIvMz9pKyhhLWkpKigyLzMtZikqNjppKSxoc2wycmdiOih7aDppLHM6YSxsOmZ9LHApPT57aWYoIWEpcmV0dXJuIGYqMi41NTtpLz0zNjAsYS89MTAwLGYvPTEwMDtjb25zdCB2PWY8LjU/ZiooMSthKTpmK2EtZiphLG09MipmLXY7c3dpdGNoKHApe2Nhc2UiciI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gblcuaHVlMnJnYihtLHYsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIG5XLmh1ZTJyZ2IobSx2LGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6YSxiOmZ9LHApPT57aS89MjU1LGEvPTI1NSxmLz0yNTU7Y29uc3Qgdj1NYXRoLm1heChpLGEsZiksbT1NYXRoLm1pbihpLGEsZiksYj0odittKS8yO2lmKHA9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHY9PT1tKXJldHVybiAwO2NvbnN0IEU9di1tLF89Yj4uNT9FLygyLXYtbSk6RS8odittKTtpZihwPT09InMiKXJldHVybiBfKjEwMDtzd2l0Y2godil7Y2FzZSBpOnJldHVybigoYS1mKS9FKyhhPGY/NjowKSkqNjA7Y2FzZSBhOnJldHVybigoZi1pKS9FKzIpKjYwO2Nhc2UgZjpyZXR1cm4oKGktYSkvRSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LGZhPXtjaGFubmVsOm5XLGxhbmc6e2NsYW1wOihpLGEsZik9PmE+Zj9NYXRoLm1pbihhLE1hdGgubWF4KGYsaSkpOk1hdGgubWluKGYsTWF0aC5tYXgoYSxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IGE9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIGEubGVuZ3RoPjE/YTpgMCR7YX1gfX19LEo2PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspSjZbaV09ZmEudW5pdC5kZWMyaGV4KGkpO2NvbnN0IHcwPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3MgUFRle2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPXcwLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChhKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1hfXJlc2V0KCl7dGhpcy50eXBlPXcwLkFMTH1pcyhhKXtyZXR1cm4gdGhpcy50eXBlPT09YX19Y29uc3QgRlRlPVBUZTtjbGFzcyBCVGV7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZT1uZXcgRlRlfXNldChhLGYpe3JldHVybiB0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZS50eXBlPXcwLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBhPXRoaXMuZGF0YSx7aDpmLHM6cCxsOnZ9PWE7Zj09PXZvaWQgMCYmKGEuaD1mYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKSxwPT09dm9pZCAwJiYoYS5zPWZhLmNoYW5uZWwucmdiMmhzbChhLCJzIikpLHY9PT12b2lkIDAmJihhLmw9ZmEuY2hhbm5lbC5yZ2IyaHNsKGEsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IGE9dGhpcy5kYXRhLHtyOmYsZzpwLGI6dn09YTtmPT09dm9pZCAwJiYoYS5yPWZhLmNoYW5uZWwuaHNsMnJnYihhLCJyIikpLHA9PT12b2lkIDAmJihhLmc9ZmEuY2hhbm5lbC5oc2wycmdiKGEsImciKSksdj09PXZvaWQgMCYmKGEuYj1mYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgcigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5yO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiciIpKX1nZXQgZygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5nO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiZyIpKX1nZXQgYigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5iO3JldHVybiF0aGlzLnR5cGUuaXModzAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxmYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgaCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5oO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKX1nZXQgcygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5zO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwicyIpKX1nZXQgbCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5sO3JldHVybiF0aGlzLnR5cGUuaXModzAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxmYS5jaGFubmVsLnJnYjJoc2woYSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihhKXt0aGlzLnR5cGUuc2V0KHcwLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWF9c2V0IGcoYSl7dGhpcy50eXBlLnNldCh3MC5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1hfXNldCBiKGEpe3RoaXMudHlwZS5zZXQodzAuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9YX1zZXQgaChhKXt0aGlzLnR5cGUuc2V0KHcwLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWF9c2V0IHMoYSl7dGhpcy50eXBlLnNldCh3MC5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1hfXNldCBsKGEpe3RoaXMudHlwZS5zZXQodzAuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9YX1zZXQgYShhKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9YX19Y29uc3QgUlRlPUJUZSxyVz1uZXcgUlRlKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLFFJdD17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IGE9aS5tYXRjaChRSXQucmUpO2lmKCFhKXJldHVybjtjb25zdCBmPWFbMV0scD1wYXJzZUludChmLDE2KSx2PWYubGVuZ3RoLG09diU0PT09MCxiPXY+NCxFPWI/MToxNyxfPWI/ODo0LEw9bT8wOi0xLE49Yj8yNTU6MTU7cmV0dXJuIHJXLnNldCh7cjoocD4+XyooTCszKSZOKSpFLGc6KHA+Pl8qKEwrMikmTikqRSxiOihwPj5fKihMKzEpJk4pKkUsYTptPyhwJk4pKkUvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2AjJHtKNltNYXRoLnJvdW5kKGEpXX0ke0o2W01hdGgucm91bmQoZildfSR7SjZbTWF0aC5yb3VuZChwKV19JHtKNltNYXRoLnJvdW5kKHYqMjU1KV19YDpgIyR7SjZbTWF0aC5yb3VuZChhKV19JHtKNltNYXRoLnJvdW5kKGYpXX0ke0o2W01hdGgucm91bmQocCldfWB9fSxxTj1RSXQsaVc9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IGE9aS5tYXRjaChpVy5odWVSZSk7aWYoYSl7Y29uc3RbLGYscF09YTtzd2l0Y2gocCl7Y2FzZSJncmFkIjpyZXR1cm4gZmEuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqLjkpO2Nhc2UicmFkIjpyZXR1cm4gZmEuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGZhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KGYpKjM2MCl9fXJldHVybiBmYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBhPWkuY2hhckNvZGVBdCgwKTtpZihhIT09MTA0JiZhIT09NzIpcmV0dXJuO2NvbnN0IGY9aS5tYXRjaChpVy5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEVdPWY7cmV0dXJuIHJXLnNldCh7aDppVy5faHVlMmRlZyhwKSxzOmZhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHYpKSxsOmZhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KG0pKSxhOmI/ZmEuY2hhbm5lbC5jbGFtcC5hKEU/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDphLHM6ZixsOnAsYTp2fT1pO3JldHVybiB2PDE/YGhzbGEoJHtmYS5sYW5nLnJvdW5kKGEpfSwgJHtmYS5sYW5nLnJvdW5kKGYpfSUsICR7ZmEubGFuZy5yb3VuZChwKX0lLCAke3Z9KWA6YGhzbCgke2ZhLmxhbmcucm91bmQoYSl9LCAke2ZhLmxhbmcucm91bmQoZil9JSwgJHtmYS5sYW5nLnJvdW5kKHApfSUpYH19LHNXPWlXLGFXPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IGE9YVcuY29sb3JzW2ldO2lmKGEpcmV0dXJuIHFOLnBhcnNlKGEpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IGE9cU4uc3RyaW5naWZ5KGkpO2Zvcihjb25zdCBmIGluIGFXLmNvbG9ycylpZihhVy5jb2xvcnNbZl09PT1hKXJldHVybiBmfX0sWkl0PWFXLEpJdD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IGE9aS5jaGFyQ29kZUF0KDApO2lmKGEhPT0xMTQmJmEhPT04MilyZXR1cm47Y29uc3QgZj1pLm1hdGNoKEpJdC5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHYsbSxiLEUsXyxMLE5dPWY7cmV0dXJuIHJXLnNldCh7cjpmYS5jaGFubmVsLmNsYW1wLnIodj9wYXJzZUZsb2F0KHApKjIuNTU6cGFyc2VGbG9hdChwKSksZzpmYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KG0pKjIuNTU6cGFyc2VGbG9hdChtKSksYjpmYS5jaGFubmVsLmNsYW1wLmIoXz9wYXJzZUZsb2F0KEUpKjIuNTU6cGFyc2VGbG9hdChFKSksYTpMP2ZhLmNoYW5uZWwuY2xhbXAuYShOP3BhcnNlRmxvYXQoTCkvMTAwOnBhcnNlRmxvYXQoTCkpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6dn09aTtyZXR1cm4gdjwxP2ByZ2JhKCR7ZmEubGFuZy5yb3VuZChhKX0sICR7ZmEubGFuZy5yb3VuZChmKX0sICR7ZmEubGFuZy5yb3VuZChwKX0sICR7ZmEubGFuZy5yb3VuZCh2KX0pYDpgcmdiKCR7ZmEubGFuZy5yb3VuZChhKX0sICR7ZmEubGFuZy5yb3VuZChmKX0sICR7ZmEubGFuZy5yb3VuZChwKX0pYH19LG9XPUpJdCxadz17Zm9ybWF0OntrZXl3b3JkOlpJdCxoZXg6cU4scmdiOm9XLHJnYmE6b1csaHNsOnNXLGhzbGE6c1d9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3QgYT1xTi5wYXJzZShpKXx8b1cucGFyc2UoaSl8fHNXLnBhcnNlKGkpfHxaSXQucGFyc2UoaSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKHcwLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3NXLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9vVy5zdHJpbmdpZnkoaSk6cU4uc3RyaW5naWZ5KGkpfSx0RHQ9KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpO2Zvcihjb25zdCBwIGluIGEpZltwXT1mYS5jaGFubmVsLmNsYW1wW3BdKGFbcF0pO3JldHVybiBady5zdHJpbmdpZnkoZil9LElBPShpLGEsZj0wLHA9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIHREdChpLHthfSk7Y29uc3Qgdj1yVy5zZXQoe3I6ZmEuY2hhbm5lbC5jbGFtcC5yKGkpLGc6ZmEuY2hhbm5lbC5jbGFtcC5nKGEpLGI6ZmEuY2hhbm5lbC5jbGFtcC5iKGYpLGE6ZmEuY2hhbm5lbC5jbGFtcC5hKHApfSk7cmV0dXJuIFp3LnN0cmluZ2lmeSh2KX0salRlPShpLGEpPT5mYS5sYW5nLnJvdW5kKFp3LnBhcnNlKGkpW2FdKSwkVGU9aT0+e2NvbnN0e3I6YSxnOmYsYjpwfT1ady5wYXJzZShpKSx2PS4yMTI2KmZhLmNoYW5uZWwudG9MaW5lYXIoYSkrLjcxNTIqZmEuY2hhbm5lbC50b0xpbmVhcihmKSsuMDcyMipmYS5jaGFubmVsLnRvTGluZWFyKHApO3JldHVybiBmYS5sYW5nLnJvdW5kKHYpfSx6VGU9aT0+JFRlKGkpPj0uNSxKNz1pPT4helRlKGkpLGVEdD0oaSxhLGYpPT57Y29uc3QgcD1ady5wYXJzZShpKSx2PXBbYV0sbT1mYS5jaGFubmVsLmNsYW1wW2FdKHYrZik7cmV0dXJuIHYhPT1tJiYocFthXT1tKSxady5zdHJpbmdpZnkocCl9LGJzPShpLGEpPT5lRHQoaSwibCIsYSksanM9KGksYSk9PmVEdChpLCJsIiwtYSkseG49KGksYSk9Pntjb25zdCBmPVp3LnBhcnNlKGkpLHA9e307Zm9yKGNvbnN0IHYgaW4gYSlhW3ZdJiYocFt2XT1mW3ZdK2Fbdl0pO3JldHVybiB0RHQoaSxwKX0scVRlPShpLGEsZj01MCk9Pntjb25zdHtyOnAsZzp2LGI6bSxhOmJ9PVp3LnBhcnNlKGkpLHtyOkUsZzpfLGI6TCxhOk59PVp3LnBhcnNlKGEpLEI9Zi8xMDAsaj1CKjItMSxSPWItTixLPSgoaipSPT09LTE/ajooaitSKS8oMStqKlIpKSsxKS8yLGl0PTEtSyxzdD1wKksrRSppdCx1dD12KksrXyppdCxidD1tKksrTCppdCxtdD1iKkIrTiooMS1CKTtyZXR1cm4gSUEoc3QsdXQsYnQsbXQpfSxJaT0oaSxhPTEwMCk9Pntjb25zdCBmPVp3LnBhcnNlKGkpO3JldHVybiBmLnI9MjU1LWYucixmLmc9MjU1LWYuZyxmLmI9MjU1LWYuYixxVGUoZixpLGEpfSxhZz0oaSxhKT0+YT94bihpLHtzOi00MCxsOjEwfSk6eG4oaSx7czotNDAsbDotMTB9KSxjVz0iI2ZmZmZmZiIsdVc9IiNmMmYyZjIiO2xldCBIVGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In11cGRhdGVDb2xvcnMoKXtpZih0aGlzLnByaW1hcnlUZXh0Q29sb3I9dGhpcy5wcmltYXJ5VGV4dENvbG9yfHwodGhpcy5kYXJrTW9kZT8iI2VlZSI6IiMzMzMiKSx0aGlzLnNlY29uZGFyeUNvbG9yPXRoaXMuc2Vjb25kYXJ5Q29sb3J8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fGFnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8YWcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yfHxhZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fGFnKHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMubm90ZUJrZ0NvbG9yfHwiI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubm90ZVRleHRDb2xvcnx8IiMzMzMiLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHxJaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXRoaXMudGVydGlhcnlUZXh0Q29sb3J8fElpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fElpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLmFycm93aGVhZENvbG9yfHxJaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXRoaXMudGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5ib3JkZXIyPXRoaXMuYm9yZGVyMnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMTApLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj10aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3J8fElpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fGJzKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucGVyc29uQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLnBlcnNvbkJrZ3x8dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwLGw6MTUwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXMuZGFya01vZGUpZm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzWyJjU2NhbGUiK2ZdPWpzKHRoaXNbImNTY2FsZSIrZl0sNzUpO2Vsc2UgZm9yKGxldCBmPTA7Zjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2YrKyl0aGlzWyJjU2NhbGUiK2ZdPWpzKHRoaXNbImNTY2FsZSIrZl0sMjUpO2ZvcihsZXQgZj0wO2Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtmKyspdGhpc1siY1NjYWxlSW52IitmXT10aGlzWyJjU2NhbGVJbnYiK2ZdfHxJaSh0aGlzWyJjU2NhbGUiK2ZdKTtmb3IobGV0IGY9MDtmPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrZl09dGhpc1siY1NjYWxlUGVlciIrZl18fGJzKHRoaXNbImNTY2FsZSIrZl0sMTApOnRoaXNbImNTY2FsZVBlZXIiK2ZdPXRoaXNbImNTY2FsZVBlZXIiK2ZdfHxqcyh0aGlzWyJjU2NhbGUiK2ZdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IGY9MDtmPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXRoaXNbImNTY2FsZUxhYmVsIitmXT10aGlzWyJjU2NhbGVMYWJlbCIrZl18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2NvbnN0IGE9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IGY9MDtmPDU7ZisrKXRoaXNbInN1cmZhY2UiK2ZdPXRoaXNbInN1cmZhY2UiK2ZdfHx4bih0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6YSooNStmKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK2ZdPXRoaXNbInN1cmZhY2VQZWVyIitmXXx8eG4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmEqKDgrZiozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHx4bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxKNyh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6anModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1icyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1icyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1icyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1icyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1icyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1icyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1icyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1icyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPWpzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWpzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWpzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWpzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWpzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWpzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWpzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWpzKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fElpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8SWkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxJaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fElpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8SWkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxJaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fElpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8SWkodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGNXLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHVXfWNhbGN1bGF0ZShhKXtpZih0eXBlb2YgYSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWNvbnN0IGY9T2JqZWN0LmtleXMoYSk7Zi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLGYuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSl9fTtjb25zdCBHVGU9aT0+e2NvbnN0IGE9bmV3IEhUZTtyZXR1cm4gYS5jYWxjdWxhdGUoaSksYX07bGV0IFZUZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9YnModGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjMWYyMDIwIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5tYWluQ29udHJhc3RDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRhcmtUZXh0Q29sb3I9YnMoSWkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPUlBKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjRjlGRkZFIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9ImJsYWNrIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1qcygiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPWpzKHRoaXMuc2VjdGlvbkJrZ0NvbG9yLDEwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj1JQSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9SUEoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjYTQ0MTQxIix0aGlzLmVycm9yVGV4dENvbG9yPSIjZGRkIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1icyh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPWJzKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPWJzKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHxJaSh0aGlzWyJjU2NhbGUiK2FdKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxicyh0aGlzWyJjU2NhbGUiK2FdLDEwKTtmb3IobGV0IGE9MDthPDU7YSsrKXRoaXNbInN1cmZhY2UiK2FdPXRoaXNbInN1cmZhY2UiK2FdfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCthKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNythKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGVMYWJlbCIrYV09dGhpc1siY1NjYWxlTGFiZWwiK2FdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbInBpZSIrYV09dGhpc1siY1NjYWxlIithXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9qcyh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9YnModGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPWJzKHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPWJzKHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9YnModGhpcy5waWU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PWJzKHRoaXMucGllNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1icyh0aGlzLnBpZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9YnModGhpcy5waWU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9YnModGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8SWkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxJaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fElpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8SWkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxJaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fElpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8SWkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxJaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxJaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxicyh0aGlzLmJhY2tncm91bmQsMTIpLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGJzKHRoaXMuYmFja2dyb3VuZCwyKX1jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX07Y29uc3QgVVRlPWk9Pntjb25zdCBhPW5ldyBWVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9O2xldCBXVGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9YWcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPUlpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1JaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPUlpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9SUEoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8anModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZSIrYV09anModGhpc1siY1NjYWxlIithXSwxMCksdGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGpzKHRoaXNbImNTY2FsZSIrYV0sMjUpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHx4bih0aGlzWyJjU2NhbGUiK2FdLHtoOjE4MH0pO2ZvcihsZXQgYT0wO2E8NTthKyspdGhpc1sic3VyZmFjZSIrYV09dGhpc1sic3VyZmFjZSIrYV18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNSthKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2FdPXRoaXNbInN1cmZhY2VQZWVyIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2EqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fElpKHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTQwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwLGw6LTQwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9anModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9anModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9anModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9anModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9anModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9anModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9anModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9anModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8anMoSWkodGhpcy5naXQwKSwyNSksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8SWkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxJaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fElpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8SWkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxJaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fElpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8SWkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fElpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8Y1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dVd9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IG5EdD1pPT57Y29uc3QgYT1uZXcgV1RlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgS1RlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9YnMoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9SWkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3RoaXMuYWN0b3JCb3JkZXI9anModGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fGpzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8anModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbImNTY2FsZSIrYV09anModGhpc1siY1NjYWxlIithXSwxMCksdGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGpzKHRoaXNbImNTY2FsZSIrYV0sMjUpO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHx4bih0aGlzWyJjU2NhbGUiK2FdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlTGFiZWwiK2FdPXRoaXNbImNTY2FsZUxhYmVsIithXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBhPTA7YTw1O2ErKyl0aGlzWyJzdXJmYWNlIithXT10aGlzWyJzdXJmYWNlIithXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2EqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrYV09dGhpc1sic3VyZmFjZVBlZXIiK2FdfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrYSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU1PXRoaXMucGllNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHx4bih0aGlzLnRlcnRpYXJ5Q29sb3Ise2g6NDAsbDotNDB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTUwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNTB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi01MH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8eG4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8SjcodGhpcy5xdWFkcmFudDFGaWxsKT9icyh0aGlzLnF1YWRyYW50MUZpbGwpOmpzKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9anModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9anModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9anModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9anModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9anModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9anModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9anModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9anModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8SWkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxJaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fElpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8SWkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxJaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fElpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8SWkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxJaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxJaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8SWkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxjVyx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHx1V31jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX07Y29uc3QgWVRlPWk9Pntjb25zdCBhPW5ldyBLVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9O2NsYXNzIFhUZXtjb25zdHJ1Y3Rvcigpe3RoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPWJzKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1hZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWFnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWFnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9SWkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPUlpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9SWkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1JaSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPUlpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1icyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPWJzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8IiM1NTUiLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjRjRGNEY0Iix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzU1NSIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiNCQkIiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNzc3Iix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzk5OSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiNEREQiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjRkZGIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiI0RERCIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiNCQkIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiM5OTkiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiM3NzciO2ZvcihsZXQgYT0wO2E8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDthKyspdGhpc1siY1NjYWxlSW52IithXT10aGlzWyJjU2NhbGVJbnYiK2FdfHxJaSh0aGlzWyJjU2NhbGUiK2FdKTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrYV09dGhpc1siY1NjYWxlUGVlciIrYV18fGJzKHRoaXNbImNTY2FsZSIrYV0sMTApOnRoaXNbImNTY2FsZVBlZXIiK2FdPXRoaXNbImNTY2FsZVBlZXIiK2FdfHxqcyh0aGlzWyJjU2NhbGUiK2FdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8dGhpcy5jU2NhbGUxLHRoaXMuY1NjYWxlTGFiZWwyPXRoaXMuY1NjYWxlTGFiZWwyfHx0aGlzLmNTY2FsZTE7Zm9yKGxldCBhPTA7YTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2ErKyl0aGlzWyJjU2NhbGVMYWJlbCIrYV09dGhpc1siY1NjYWxlTGFiZWwiK2FdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGE9MDthPDU7YSsrKXRoaXNbInN1cmZhY2UiK2FdPXRoaXNbInN1cmZhY2UiK2FdfHx4bih0aGlzLm1haW5Ca2cse2w6LSg1K2EqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrYV09dGhpc1sic3VyZmFjZVBlZXIiK2FdfHx4bih0aGlzLm1haW5Ca2cse2w6LSg4K2EqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHQsdGhpcy5zZWN0aW9uQmtnQ29sb3I9YnModGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPWJzKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPWpzKHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9YnModGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPWpzKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGE9MDthPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7YSsrKXRoaXNbInBpZSIrYV09dGhpc1siY1NjYWxlIithXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fEo3KHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTpqcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9anModGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxJaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fElpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8SWkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxJaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fElpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8SWkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxJaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fElpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxjVyx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHx1V31jYWxjdWxhdGUoYSl7aWYodHlwZW9mIGEhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCBmPU9iamVjdC5rZXlzKGEpO2YuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSksdGhpcy51cGRhdGVDb2xvcnMoKSxmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pfX1jb25zdCB3NT17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6R1RlfSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpVVGV9LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOm5EdH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpZVGV9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmk9Pntjb25zdCBhPW5ldyBYVGU7cmV0dXJuIGEuY2FsY3VsYXRlKGkpLGF9fX0sdGs9e2Zsb3djaGFydDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJiYXNpcyIscGFkZGluZzoxNSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLHdyYXBwaW5nV2lkdGg6MjAwfSxzZXF1ZW5jZTp7dXNlTWF4V2lkdGg6ITAsaGlkZVVudXNlZFBhcnRpY2lwYW50czohMSxhY3RpdmF0aW9uV2lkdGg6MTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsbWlycm9yQWN0b3JzOiEwLGZvcmNlTWVudXM6ITEsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsc2hvd1NlcXVlbmNlTnVtYmVyczohMSxhY3RvckZvbnRTaXplOjE0LGFjdG9yRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjB9LGdhbnR0Ont1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxyaWdodFBhZGRpbmc6NzUsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsc2VjdGlvbkZvbnRTaXplOjExLG51bWJlclNlY3Rpb25TdHlsZXM6NCxheGlzRm9ybWF0OiIlWS0lbS0lZCIsdG9wQXhpczohMSxkaXNwbGF5TW9kZToiIix3ZWVrZGF5OiJzdW5kYXkifSxqb3VybmV5Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxjbGFzczp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsaHRtbExhYmVsczohMX0sc3RhdGU6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxlcjp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyfSxwaWU6e3VzZU1heFdpZHRoOiEwLHRleHRQb3NpdGlvbjouNzV9LHF1YWRyYW50Q2hhcnQ6e3VzZU1heFdpZHRoOiEwLGNoYXJ0V2lkdGg6NTAwLGNoYXJ0SGVpZ2h0OjUwMCx0aXRsZUZvbnRTaXplOjIwLHRpdGxlUGFkZGluZzoxMCxxdWFkcmFudFBhZGRpbmc6NSx4QXhpc0xhYmVsUGFkZGluZzo1LHlBeGlzTGFiZWxQYWRkaW5nOjUseEF4aXNMYWJlbEZvbnRTaXplOjE2LHlBeGlzTGFiZWxGb250U2l6ZToxNixxdWFkcmFudExhYmVsRm9udFNpemU6MTYscXVhZHJhbnRUZXh0VG9wUGFkZGluZzo1LHBvaW50VGV4dFBhZGRpbmc6NSxwb2ludExhYmVsRm9udFNpemU6MTIscG9pbnRSYWRpdXM6NSx4QXhpc1Bvc2l0aW9uOiJ0b3AiLHlBeGlzUG9zaXRpb246ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDoxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDoyfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sdGhlbWU6ImRlZmF1bHQiLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTZ9LHJEdD17Li4udGssZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsdGhlbWVDU1M6dm9pZCAwLHRoZW1lVmFyaWFibGVzOnc1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSxzZXF1ZW5jZTp7Li4udGsuc2VxdWVuY2UsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7Li4udGsuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi50ay5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfcGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0fX0sc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0fX0sY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sYm91bmRhcnlGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ib3VuZGFyeUZvbnRXZWlnaHR9fSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX19LHBpZTp7Li4udGsucGllLHVzZVdpZHRoOjk4NH0scmVxdWlyZW1lbnQ6ey4uLnRrLnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0sZ2l0R3JhcGg6ey4uLnRrLmdpdEdyYXBoLHVzZU1heFdpZHRoOiExfSxzYW5rZXk6ey4uLnRrLnNhbmtleSx1c2VNYXhXaWR0aDohMX19LGlEdD0oaSxhPSIiKT0+T2JqZWN0LmtleXMoaSkucmVkdWNlKChmLHApPT5BcnJheS5pc0FycmF5KGlbcF0pP2Y6dHlwZW9mIGlbcF09PSJvYmplY3QiJiZpW3BdIT09bnVsbD9bLi4uZixhK3AsLi4uaUR0KGlbcF0sIiIpXTpbLi4uZixhK3BdLFtdKSxRVGU9bmV3IFNldChpRHQockR0LCIiKSksTGY9ckR0LGxXPWk9PntpZihVdC5kZWJ1Zygic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGgiLGkpLCEodHlwZW9mIGkhPSJvYmplY3QifHxpPT1udWxsKSl7aWYoQXJyYXkuaXNBcnJheShpKSl7aS5mb3JFYWNoKGE9PmxXKGEpKTtyZXR1cm59Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoaSkpe2lmKFV0LmRlYnVnKCJDaGVja2luZyBrZXkiLGEpLGEuc3RhcnRzV2l0aCgiX18iKXx8YS5pbmNsdWRlcygicHJvdG8iKXx8YS5pbmNsdWRlcygiY29uc3RyIil8fCFRVGUuaGFzKGEpfHxpW2FdPT1udWxsKXtVdC5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGEpLGRlbGV0ZSBpW2FdO2NvbnRpbnVlfWlmKHR5cGVvZiBpW2FdPT0ib2JqZWN0Iil7VXQuZGVidWcoInNhbml0aXppbmcgb2JqZWN0IixhKSxsVyhpW2FdKTtjb250aW51ZX1jb25zdCBmPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2Zvcihjb25zdCBwIG9mIGYpYS5pbmNsdWRlcyhwKSYmKFV0LmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGEpLGlbYV09WlRlKGlbYV0pKX1pZihpLnRoZW1lVmFyaWFibGVzKWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGkudGhlbWVWYXJpYWJsZXMpKXtjb25zdCBmPWkudGhlbWVWYXJpYWJsZXNbYV07ZiE9bnVsbCYmZi5tYXRjaCYmIWYubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKGkudGhlbWVWYXJpYWJsZXNbYV09IiIpfVV0LmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGkpfX0sWlRlPWk9PntsZXQgYT0wLGY9MDtmb3IoY29uc3QgcCBvZiBpKXtpZihhPGYpcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iO3A9PT0ieyI/YSsrOnA9PT0ifSImJmYrK31yZXR1cm4gYSE9PWY/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOml9LHNEdD0vXi17M31ccypbXG5ccl0oLio/KVtcblxyXS17M31ccypbXG5ccl0rL3MsSE49LyV7Mn17XHMqKD86KFx3Kylccyo6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLEpUZT0vXHMqJSUuKlxuL2dtO2NsYXNzIGFEdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fWNvbnN0IERBPXt9LGhXPWZ1bmN0aW9uKGksYSl7aT1pLnJlcGxhY2Uoc0R0LCIiKS5yZXBsYWNlKEhOLCIiKS5yZXBsYWNlKEpUZSxgCmApO2Zvcihjb25zdFtmLHtkZXRlY3RvcjpwfV1vZiBPYmplY3QuZW50cmllcyhEQSkpaWYocChpLGEpKXJldHVybiBmO3Rocm93IG5ldyBhRHQoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke2l9YCl9LG9EdD0oLi4uaSk9Pntmb3IoY29uc3R7aWQ6YSxkZXRlY3RvcjpmLGxvYWRlcjpwfW9mIGkpY0R0KGEsZixwKX0sY0R0PShpLGEsZik9PntEQVtpXT9VdC5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhbHJlYWR5IGV4aXN0c2ApOkRBW2ldPXtkZXRlY3RvcjphLGxvYWRlcjpmfSxVdC5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhZGRlZCR7Zj8iIHdpdGggbG9hZGVyIjoiIn1gKX0sdDllPWk9PkRBW2ldLmxvYWRlcixVMXQ9KGksYSx7ZGVwdGg6Zj0yLGNsb2JiZXI6cD0hMX09e30pPT57Y29uc3Qgdj17ZGVwdGg6ZixjbG9iYmVyOnB9O3JldHVybiBBcnJheS5pc0FycmF5KGEpJiYhQXJyYXkuaXNBcnJheShpKT8oYS5mb3JFYWNoKG09PlUxdChpLG0sdikpLGkpOkFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoaSk/KGEuZm9yRWFjaChtPT57aS5pbmNsdWRlcyhtKXx8aS5wdXNoKG0pfSksaSk6aT09PXZvaWQgMHx8Zjw9MD9pIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBhPT0ib2JqZWN0Ij9PYmplY3QuYXNzaWduKGksYSk6YTooYSE9PXZvaWQgMCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgYT09Im9iamVjdCImJk9iamVjdC5rZXlzKGEpLmZvckVhY2gobT0+e3R5cGVvZiBhW21dPT0ib2JqZWN0IiYmKGlbbV09PT12b2lkIDB8fHR5cGVvZiBpW21dPT0ib2JqZWN0Iik/KGlbbV09PT12b2lkIDAmJihpW21dPUFycmF5LmlzQXJyYXkoYVttXSk/W106e30pLGlbbV09VTF0KGlbbV0sYVttXSx7ZGVwdGg6Zi0xLGNsb2JiZXI6cH0pKToocHx8dHlwZW9mIGlbbV0hPSJvYmplY3QiJiZ0eXBlb2YgYVttXSE9Im9iamVjdCIpJiYoaVttXT1hW21dKX0pLGkpfSxZMT1VMXQ7dmFyIGU5ZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7Y29uc3QgdUR0PWU5ZTt2YXIgbjllPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscjllPXVEdHx8bjllfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2NvbnN0IEp3PXI5ZTt2YXIgaTllPUp3LlN5bWJvbDtjb25zdCBZMj1pOWU7dmFyIGxEdD1PYmplY3QucHJvdG90eXBlLHM5ZT1sRHQuaGFzT3duUHJvcGVydHksYTllPWxEdC50b1N0cmluZyxHTj1ZMj9ZMi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gbzllKGkpe3ZhciBhPXM5ZS5jYWxsKGksR04pLGY9aVtHTl07dHJ5e2lbR05dPXZvaWQgMDt2YXIgcD0hMH1jYXRjaHt9dmFyIHY9YTllLmNhbGwoaSk7cmV0dXJuIHAmJihhP2lbR05dPWY6ZGVsZXRlIGlbR05dKSx2fXZhciBjOWU9T2JqZWN0LnByb3RvdHlwZSx1OWU9YzllLnRvU3RyaW5nO2Z1bmN0aW9uIGw5ZShpKXtyZXR1cm4gdTllLmNhbGwoaSl9dmFyIGg5ZT0iW29iamVjdCBOdWxsXSIsZjllPSJbb2JqZWN0IFVuZGVmaW5lZF0iLGhEdD1ZMj9ZMi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gdFQoaSl7cmV0dXJuIGk9PW51bGw/aT09PXZvaWQgMD9mOWU6aDllOmhEdCYmaER0IGluIE9iamVjdChpKT9vOWUoaSk6bDllKGkpfWZ1bmN0aW9uIEliKGkpe3ZhciBhPXR5cGVvZiBpO3JldHVybiBpIT1udWxsJiYoYT09Im9iamVjdCJ8fGE9PSJmdW5jdGlvbiIpfXZhciBkOWU9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGc5ZT0iW29iamVjdCBGdW5jdGlvbl0iLHA5ZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLGI5ZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIE9BKGkpe2lmKCFJYihpKSlyZXR1cm4hMTt2YXIgYT10VChpKTtyZXR1cm4gYT09ZzllfHxhPT1wOWV8fGE9PWQ5ZXx8YT09YjllfXZhciB2OWU9SndbIl9fY29yZS1qc19zaGFyZWRfXyJdO2NvbnN0IFcxdD12OWU7dmFyIGZEdD1mdW5jdGlvbigpe3ZhciBpPS9bXi5dKyQvLmV4ZWMoVzF0JiZXMXQua2V5cyYmVzF0LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gaT8iU3ltYm9sKHNyYylfMS4iK2k6IiJ9KCk7ZnVuY3Rpb24gdzllKGkpe3JldHVybiEhZkR0JiZmRHQgaW4gaX12YXIgbTllPUZ1bmN0aW9uLnByb3RvdHlwZSx5OWU9bTllLnRvU3RyaW5nO2Z1bmN0aW9uIGVUKGkpe2lmKGkhPW51bGwpe3RyeXtyZXR1cm4geTllLmNhbGwoaSl9Y2F0Y2h7fXRyeXtyZXR1cm4gaSsiIn1jYXRjaHt9fXJldHVybiIifXZhciB4OWU9L1tcXF4kLiorPygpW1xde318XS9nLGs5ZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxFOWU9RnVuY3Rpb24ucHJvdG90eXBlLFQ5ZT1PYmplY3QucHJvdG90eXBlLEM5ZT1FOWUudG9TdHJpbmcsXzllPVQ5ZS5oYXNPd25Qcm9wZXJ0eSxTOWU9UmVnRXhwKCJeIitDOWUuY2FsbChfOWUpLnJlcGxhY2UoeDllLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIEE5ZShpKXtpZighSWIoaSl8fHc5ZShpKSlyZXR1cm4hMTt2YXIgYT1PQShpKT9TOWU6azllO3JldHVybiBhLnRlc3QoZVQoaSkpfWZ1bmN0aW9uIEw5ZShpLGEpe3JldHVybiBpPT1udWxsP3ZvaWQgMDppW2FdfWZ1bmN0aW9uIG5UKGksYSl7dmFyIGY9TDllKGksYSk7cmV0dXJuIEE5ZShmKT9mOnZvaWQgMH12YXIgTTllPW5UKE9iamVjdCwiY3JlYXRlIik7Y29uc3QgVk49TTllO2Z1bmN0aW9uIEk5ZSgpe3RoaXMuX19kYXRhX189Vk4/Vk4obnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gRDllKGkpe3ZhciBhPXRoaXMuaGFzKGkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tpXTtyZXR1cm4gdGhpcy5zaXplLT1hPzE6MCxhfXZhciBPOWU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLE45ZT1PYmplY3QucHJvdG90eXBlLFA5ZT1OOWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRjllKGkpe3ZhciBhPXRoaXMuX19kYXRhX187aWYoVk4pe3ZhciBmPWFbaV07cmV0dXJuIGY9PT1POWU/dm9pZCAwOmZ9cmV0dXJuIFA5ZS5jYWxsKGEsaSk/YVtpXTp2b2lkIDB9dmFyIEI5ZT1PYmplY3QucHJvdG90eXBlLFI5ZT1COWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gajllKGkpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIFZOP2FbaV0hPT12b2lkIDA6UjllLmNhbGwoYSxpKX12YXIgJDllPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiB6OWUoaSxhKXt2YXIgZj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGkpPzA6MSxmW2ldPVZOJiZhPT09dm9pZCAwPyQ5ZTphLHRoaXN9ZnVuY3Rpb24gclQoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2E8Zjspe3ZhciBwPWlbYV07dGhpcy5zZXQocFswXSxwWzFdKX19clQucHJvdG90eXBlLmNsZWFyPUk5ZSxyVC5wcm90b3R5cGUuZGVsZXRlPUQ5ZSxyVC5wcm90b3R5cGUuZ2V0PUY5ZSxyVC5wcm90b3R5cGUuaGFzPWo5ZSxyVC5wcm90b3R5cGUuc2V0PXo5ZTtmdW5jdGlvbiBxOWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE5BKGksYSl7cmV0dXJuIGk9PT1hfHxpIT09aSYmYSE9PWF9ZnVuY3Rpb24gZlcoaSxhKXtmb3IodmFyIGY9aS5sZW5ndGg7Zi0tOylpZihOQShpW2ZdWzBdLGEpKXJldHVybiBmO3JldHVybi0xfXZhciBIOWU9QXJyYXkucHJvdG90eXBlLEc5ZT1IOWUuc3BsaWNlO2Z1bmN0aW9uIFY5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fLGY9ZlcoYSxpKTtpZihmPDApcmV0dXJuITE7dmFyIHA9YS5sZW5ndGgtMTtyZXR1cm4gZj09cD9hLnBvcCgpOkc5ZS5jYWxsKGEsZiwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiBVOWUoaSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxmPWZXKGEsaSk7cmV0dXJuIGY8MD92b2lkIDA6YVtmXVsxXX1mdW5jdGlvbiBXOWUoaSl7cmV0dXJuIGZXKHRoaXMuX19kYXRhX18saSk+LTF9ZnVuY3Rpb24gSzllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXyxwPWZXKGYsaSk7cmV0dXJuIHA8MD8oKyt0aGlzLnNpemUsZi5wdXNoKFtpLGFdKSk6ZltwXVsxXT1hLHRoaXN9ZnVuY3Rpb24gbTUoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2E8Zjspe3ZhciBwPWlbYV07dGhpcy5zZXQocFswXSxwWzFdKX19bTUucHJvdG90eXBlLmNsZWFyPXE5ZSxtNS5wcm90b3R5cGUuZGVsZXRlPVY5ZSxtNS5wcm90b3R5cGUuZ2V0PVU5ZSxtNS5wcm90b3R5cGUuaGFzPVc5ZSxtNS5wcm90b3R5cGUuc2V0PUs5ZTt2YXIgWTllPW5UKEp3LCJNYXAiKTtjb25zdCBVTj1ZOWU7ZnVuY3Rpb24gWDllKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgclQsbWFwOm5ldyhVTnx8bTUpLHN0cmluZzpuZXcgclR9fWZ1bmN0aW9uIFE5ZShpKXt2YXIgYT10eXBlb2YgaTtyZXR1cm4gYT09InN0cmluZyJ8fGE9PSJudW1iZXIifHxhPT0ic3ltYm9sInx8YT09ImJvb2xlYW4iP2khPT0iX19wcm90b19fIjppPT09bnVsbH1mdW5jdGlvbiBkVyhpLGEpe3ZhciBmPWkuX19kYXRhX187cmV0dXJuIFE5ZShhKT9mW3R5cGVvZiBhPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOmYubWFwfWZ1bmN0aW9uIFo5ZShpKXt2YXIgYT1kVyh0aGlzLGkpLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplLT1hPzE6MCxhfWZ1bmN0aW9uIEo5ZShpKXtyZXR1cm4gZFcodGhpcyxpKS5nZXQoaSl9ZnVuY3Rpb24gdENlKGkpe3JldHVybiBkVyh0aGlzLGkpLmhhcyhpKX1mdW5jdGlvbiBlQ2UoaSxhKXt2YXIgZj1kVyh0aGlzLGkpLHA9Zi5zaXplO3JldHVybiBmLnNldChpLGEpLHRoaXMuc2l6ZSs9Zi5zaXplPT1wPzA6MSx0aGlzfWZ1bmN0aW9uIHk1KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fXk1LnByb3RvdHlwZS5jbGVhcj1YOWUseTUucHJvdG90eXBlLmRlbGV0ZT1aOWUseTUucHJvdG90eXBlLmdldD1KOWUseTUucHJvdG90eXBlLmhhcz10Q2UseTUucHJvdG90eXBlLnNldD1lQ2U7dmFyIG5DZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gUEEoaSxhKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uInx8YSE9bnVsbCYmdHlwZW9mIGEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihuQ2UpO3ZhciBmPWZ1bmN0aW9uKCl7dmFyIHA9YXJndW1lbnRzLHY9YT9hLmFwcGx5KHRoaXMscCk6cFswXSxtPWYuY2FjaGU7aWYobS5oYXModikpcmV0dXJuIG0uZ2V0KHYpO3ZhciBiPWkuYXBwbHkodGhpcyxwKTtyZXR1cm4gZi5jYWNoZT1tLnNldCh2LGIpfHxtLGJ9O3JldHVybiBmLmNhY2hlPW5ldyhQQS5DYWNoZXx8eTUpLGZ9UEEuQ2FjaGU9eTU7ZnVuY3Rpb24gckNlKCl7dGhpcy5fX2RhdGFfXz1uZXcgbTUsdGhpcy5zaXplPTB9ZnVuY3Rpb24gaUNlKGkpe3ZhciBhPXRoaXMuX19kYXRhX18sZj1hLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplPWEuc2l6ZSxmfWZ1bmN0aW9uIHNDZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoaSl9ZnVuY3Rpb24gYUNlKGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX12YXIgb0NlPTIwMDtmdW5jdGlvbiBjQ2UoaSxhKXt2YXIgZj10aGlzLl9fZGF0YV9fO2lmKGYgaW5zdGFuY2VvZiBtNSl7dmFyIHA9Zi5fX2RhdGFfXztpZighVU58fHAubGVuZ3RoPG9DZS0xKXJldHVybiBwLnB1c2goW2ksYV0pLHRoaXMuc2l6ZT0rK2Yuc2l6ZSx0aGlzO2Y9dGhpcy5fX2RhdGFfXz1uZXcgeTUocCl9cmV0dXJuIGYuc2V0KGksYSksdGhpcy5zaXplPWYuc2l6ZSx0aGlzfWZ1bmN0aW9uIHRtKGkpe3ZhciBhPXRoaXMuX19kYXRhX189bmV3IG01KGkpO3RoaXMuc2l6ZT1hLnNpemV9dG0ucHJvdG90eXBlLmNsZWFyPXJDZSx0bS5wcm90b3R5cGUuZGVsZXRlPWlDZSx0bS5wcm90b3R5cGUuZ2V0PXNDZSx0bS5wcm90b3R5cGUuaGFzPWFDZSx0bS5wcm90b3R5cGUuc2V0PWNDZTt2YXIgdUNlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPW5UKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gaSh7fSwiIix7fSksaX1jYXRjaHt9fSgpO2NvbnN0IGdXPXVDZTtmdW5jdGlvbiBwVyhpLGEsZil7YT09Il9fcHJvdG9fXyImJmdXP2dXKGksYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6Zix3cml0YWJsZTohMH0pOmlbYV09Zn1mdW5jdGlvbiBLMXQoaSxhLGYpeyhmIT09dm9pZCAwJiYhTkEoaVthXSxmKXx8Zj09PXZvaWQgMCYmIShhIGluIGkpKSYmcFcoaSxhLGYpfWZ1bmN0aW9uIGxDZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe2Zvcih2YXIgdj0tMSxtPU9iamVjdChhKSxiPXAoYSksRT1iLmxlbmd0aDtFLS07KXt2YXIgXz1iW2k/RTorK3ZdO2lmKGYobVtfXSxfLG0pPT09ITEpYnJlYWt9cmV0dXJuIGF9fXZhciBoQ2U9bENlKCk7Y29uc3QgWTF0PWhDZTt2YXIgZER0PXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZ0R0PWREdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGZDZT1nRHQmJmdEdC5leHBvcnRzPT09ZER0LHBEdD1mQ2U/SncuQnVmZmVyOnZvaWQgMCxiRHQ9cER0P3BEdC5hbGxvY1Vuc2FmZTp2b2lkIDA7ZnVuY3Rpb24gdkR0KGksYSl7aWYoYSlyZXR1cm4gaS5zbGljZSgpO3ZhciBmPWkubGVuZ3RoLHA9YkR0P2JEdChmKTpuZXcgaS5jb25zdHJ1Y3RvcihmKTtyZXR1cm4gaS5jb3B5KHApLHB9dmFyIGRDZT1Kdy5VaW50OEFycmF5O2NvbnN0IGJXPWRDZTtmdW5jdGlvbiBYMXQoaSl7dmFyIGE9bmV3IGkuY29uc3RydWN0b3IoaS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IGJXKGEpLnNldChuZXcgYlcoaSkpLGF9ZnVuY3Rpb24gd0R0KGksYSl7dmFyIGY9YT9YMXQoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3RvcihmLGkuYnl0ZU9mZnNldCxpLmxlbmd0aCl9ZnVuY3Rpb24gbUR0KGksYSl7dmFyIGY9LTEscD1pLmxlbmd0aDtmb3IoYXx8KGE9QXJyYXkocCkpOysrZjxwOylhW2ZdPWlbZl07cmV0dXJuIGF9dmFyIHlEdD1PYmplY3QuY3JlYXRlLGdDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt9cmV0dXJuIGZ1bmN0aW9uKGEpe2lmKCFJYihhKSlyZXR1cm57fTtpZih5RHQpcmV0dXJuIHlEdChhKTtpLnByb3RvdHlwZT1hO3ZhciBmPW5ldyBpO3JldHVybiBpLnByb3RvdHlwZT12b2lkIDAsZn19KCk7Y29uc3QgcENlPWdDZTtmdW5jdGlvbiB4RHQoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGkoYShmKSl9fXZhciBiQ2U9eER0KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO2NvbnN0IFExdD1iQ2U7dmFyIHZDZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIHZXKGkpe3ZhciBhPWkmJmkuY29uc3RydWN0b3IsZj10eXBlb2YgYT09ImZ1bmN0aW9uIiYmYS5wcm90b3R5cGV8fHZDZTtyZXR1cm4gaT09PWZ9ZnVuY3Rpb24ga0R0KGkpe3JldHVybiB0eXBlb2YgaS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIXZXKGkpP3BDZShRMXQoaSkpOnt9fWZ1bmN0aW9uIGwzKGkpe3JldHVybiBpIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCJ9dmFyIHdDZT0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBFRHQoaSl7cmV0dXJuIGwzKGkpJiZ0VChpKT09d0NlfXZhciBURHQ9T2JqZWN0LnByb3RvdHlwZSxtQ2U9VER0Lmhhc093blByb3BlcnR5LHlDZT1URHQucHJvcGVydHlJc0VudW1lcmFibGUseENlPUVEdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0VEdDpmdW5jdGlvbihpKXtyZXR1cm4gbDMoaSkmJm1DZS5jYWxsKGksImNhbGxlZSIpJiYheUNlLmNhbGwoaSwiY2FsbGVlIil9O2NvbnN0IEZBPXhDZTt2YXIga0NlPUFycmF5LmlzQXJyYXk7Y29uc3QgTWY9a0NlO3ZhciBFQ2U9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBaMXQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ibnVtYmVyIiYmaT4tMSYmaSUxPT0wJiZpPD1FQ2V9ZnVuY3Rpb24gZWsoaSl7cmV0dXJuIGkhPW51bGwmJloxdChpLmxlbmd0aCkmJiFPQShpKX1mdW5jdGlvbiBDRHQoaSl7cmV0dXJuIGwzKGkpJiZlayhpKX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hMX12YXIgX0R0PXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsU0R0PV9EdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLENDZT1TRHQmJlNEdC5leHBvcnRzPT09X0R0LEFEdD1DQ2U/SncuQnVmZmVyOnZvaWQgMCxfQ2U9QUR0P0FEdC5pc0J1ZmZlcjp2b2lkIDAsU0NlPV9DZXx8VENlO2NvbnN0IEJBPVNDZTt2YXIgQUNlPSJbb2JqZWN0IE9iamVjdF0iLExDZT1GdW5jdGlvbi5wcm90b3R5cGUsTUNlPU9iamVjdC5wcm90b3R5cGUsTER0PUxDZS50b1N0cmluZyxJQ2U9TUNlLmhhc093blByb3BlcnR5LERDZT1MRHQuY2FsbChPYmplY3QpO2Z1bmN0aW9uIE1EdChpKXtpZighbDMoaSl8fHRUKGkpIT1BQ2UpcmV0dXJuITE7dmFyIGE9UTF0KGkpO2lmKGE9PT1udWxsKXJldHVybiEwO3ZhciBmPUlDZS5jYWxsKGEsImNvbnN0cnVjdG9yIikmJmEuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiBmPT0iZnVuY3Rpb24iJiZmIGluc3RhbmNlb2YgZiYmTER0LmNhbGwoZik9PURDZX12YXIgT0NlPSJbb2JqZWN0IEFyZ3VtZW50c10iLE5DZT0iW29iamVjdCBBcnJheV0iLFBDZT0iW29iamVjdCBCb29sZWFuXSIsRkNlPSJbb2JqZWN0IERhdGVdIixCQ2U9IltvYmplY3QgRXJyb3JdIixSQ2U9IltvYmplY3QgRnVuY3Rpb25dIixqQ2U9IltvYmplY3QgTWFwXSIsJENlPSJbb2JqZWN0IE51bWJlcl0iLHpDZT0iW29iamVjdCBPYmplY3RdIixxQ2U9IltvYmplY3QgUmVnRXhwXSIsSENlPSJbb2JqZWN0IFNldF0iLEdDZT0iW29iamVjdCBTdHJpbmddIixWQ2U9IltvYmplY3QgV2Vha01hcF0iLFVDZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFdDZT0iW29iamVjdCBEYXRhVmlld10iLEtDZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZQ2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWENlPSJbb2JqZWN0IEludDhBcnJheV0iLFFDZT0iW29iamVjdCBJbnQxNkFycmF5XSIsWkNlPSJbb2JqZWN0IEludDMyQXJyYXldIixKQ2U9IltvYmplY3QgVWludDhBcnJheV0iLHRfZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGVfZT0iW29iamVjdCBVaW50MTZBcnJheV0iLG5fZT0iW29iamVjdCBVaW50MzJBcnJheV0iLGdsPXt9O2dsW0tDZV09Z2xbWUNlXT1nbFtYQ2VdPWdsW1FDZV09Z2xbWkNlXT1nbFtKQ2VdPWdsW3RfZV09Z2xbZV9lXT1nbFtuX2VdPSEwLGdsW09DZV09Z2xbTkNlXT1nbFtVQ2VdPWdsW1BDZV09Z2xbV0NlXT1nbFtGQ2VdPWdsW0JDZV09Z2xbUkNlXT1nbFtqQ2VdPWdsWyRDZV09Z2xbekNlXT1nbFtxQ2VdPWdsW0hDZV09Z2xbR0NlXT1nbFtWQ2VdPSExO2Z1bmN0aW9uIHJfZShpKXtyZXR1cm4gbDMoaSkmJloxdChpLmxlbmd0aCkmJiEhZ2xbdFQoaSldfWZ1bmN0aW9uIHdXKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gaShhKX19dmFyIElEdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFdOPUlEdCYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGlfZT1XTiYmV04uZXhwb3J0cz09PUlEdCxKMXQ9aV9lJiZ1RHQucHJvY2VzcyxzX2U9ZnVuY3Rpb24oKXt0cnl7dmFyIGk9V04mJldOLnJlcXVpcmUmJldOLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gaXx8SjF0JiZKMXQuYmluZGluZyYmSjF0LmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO2NvbnN0IFJBPXNfZTt2YXIgRER0PVJBJiZSQS5pc1R5cGVkQXJyYXksYV9lPUREdD93VyhERHQpOnJfZTtjb25zdCBtVz1hX2U7ZnVuY3Rpb24gdGR0KGksYSl7aWYoIShhPT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIGlbYV09PSJmdW5jdGlvbiIpJiZhIT0iX19wcm90b19fIilyZXR1cm4gaVthXX12YXIgb19lPU9iamVjdC5wcm90b3R5cGUsY19lPW9fZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5VyhpLGEsZil7dmFyIHA9aVthXTsoIShjX2UuY2FsbChpLGEpJiZOQShwLGYpKXx8Zj09PXZvaWQgMCYmIShhIGluIGkpKSYmcFcoaSxhLGYpfWZ1bmN0aW9uIEtOKGksYSxmLHApe3ZhciB2PSFmO2Z8fChmPXt9KTtmb3IodmFyIG09LTEsYj1hLmxlbmd0aDsrK208Yjspe3ZhciBFPWFbbV0sXz1wP3AoZltFXSxpW0VdLEUsZixpKTp2b2lkIDA7Xz09PXZvaWQgMCYmKF89aVtFXSksdj9wVyhmLEUsXyk6eVcoZixFLF8pfXJldHVybiBmfWZ1bmN0aW9uIHVfZShpLGEpe2Zvcih2YXIgZj0tMSxwPUFycmF5KGkpOysrZjxpOylwW2ZdPWEoZik7cmV0dXJuIHB9dmFyIGxfZT05MDA3MTk5MjU0NzQwOTkxLGhfZT0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24geFcoaSxhKXt2YXIgZj10eXBlb2YgaTtyZXR1cm4gYT1hPz9sX2UsISFhJiYoZj09Im51bWJlciJ8fGYhPSJzeW1ib2wiJiZoX2UudGVzdChpKSkmJmk+LTEmJmklMT09MCYmaTxhfXZhciBmX2U9T2JqZWN0LnByb3RvdHlwZSxkX2U9Zl9lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIE9EdChpLGEpe3ZhciBmPU1mKGkpLHA9IWYmJkZBKGkpLHY9IWYmJiFwJiZCQShpKSxtPSFmJiYhcCYmIXYmJm1XKGkpLGI9Znx8cHx8dnx8bSxFPWI/dV9lKGkubGVuZ3RoLFN0cmluZyk6W10sXz1FLmxlbmd0aDtmb3IodmFyIEwgaW4gaSkoYXx8ZF9lLmNhbGwoaSxMKSkmJiEoYiYmKEw9PSJsZW5ndGgifHx2JiYoTD09Im9mZnNldCJ8fEw9PSJwYXJlbnQiKXx8bSYmKEw9PSJidWZmZXIifHxMPT0iYnl0ZUxlbmd0aCJ8fEw9PSJieXRlT2Zmc2V0Iil8fHhXKEwsXykpKSYmRS5wdXNoKEwpO3JldHVybiBFfWZ1bmN0aW9uIGdfZShpKXt2YXIgYT1bXTtpZihpIT1udWxsKWZvcih2YXIgZiBpbiBPYmplY3QoaSkpYS5wdXNoKGYpO3JldHVybiBhfXZhciBwX2U9T2JqZWN0LnByb3RvdHlwZSxiX2U9cF9lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHZfZShpKXtpZighSWIoaSkpcmV0dXJuIGdfZShpKTt2YXIgYT12VyhpKSxmPVtdO2Zvcih2YXIgcCBpbiBpKXA9PSJjb25zdHJ1Y3RvciImJihhfHwhYl9lLmNhbGwoaSxwKSl8fGYucHVzaChwKTtyZXR1cm4gZn1mdW5jdGlvbiBpVChpKXtyZXR1cm4gZWsoaSk/T0R0KGksITApOnZfZShpKX1mdW5jdGlvbiB3X2UoaSl7cmV0dXJuIEtOKGksaVQoaSkpfWZ1bmN0aW9uIG1fZShpLGEsZixwLHYsbSxiKXt2YXIgRT10ZHQoaSxmKSxfPXRkdChhLGYpLEw9Yi5nZXQoXyk7aWYoTCl7SzF0KGksZixMKTtyZXR1cm59dmFyIE49bT9tKEUsXyxmKyIiLGksYSxiKTp2b2lkIDAsQj1OPT09dm9pZCAwO2lmKEIpe3ZhciBqPU1mKF8pLFI9IWomJkJBKF8pLHo9IWomJiFSJiZtVyhfKTtOPV8sanx8Unx8ej9NZihFKT9OPUU6Q0R0KEUpP049bUR0KEUpOlI/KEI9ITEsTj12RHQoXywhMCkpOno/KEI9ITEsTj13RHQoXywhMCkpOk49W106TUR0KF8pfHxGQShfKT8oTj1FLEZBKEUpP049d19lKEUpOighSWIoRSl8fE9BKEUpKSYmKE49a0R0KF8pKSk6Qj0hMX1CJiYoYi5zZXQoXyxOKSx2KE4sXyxwLG0sYiksYi5kZWxldGUoXykpLEsxdChpLGYsTil9ZnVuY3Rpb24gTkR0KGksYSxmLHAsdil7aSE9PWEmJlkxdChhLGZ1bmN0aW9uKG0sYil7aWYodnx8KHY9bmV3IHRtKSxJYihtKSltX2UoaSxhLGIsZixORHQscCx2KTtlbHNle3ZhciBFPXA/cCh0ZHQoaSxiKSxtLGIrIiIsaSxhLHYpOnZvaWQgMDtFPT09dm9pZCAwJiYoRT1tKSxLMXQoaSxiLEUpfX0saVQpfWZ1bmN0aW9uIHNUKGkpe3JldHVybiBpfWZ1bmN0aW9uIHlfZShpLGEsZil7c3dpdGNoKGYubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGkuY2FsbChhKTtjYXNlIDE6cmV0dXJuIGkuY2FsbChhLGZbMF0pO2Nhc2UgMjpyZXR1cm4gaS5jYWxsKGEsZlswXSxmWzFdKTtjYXNlIDM6cmV0dXJuIGkuY2FsbChhLGZbMF0sZlsxXSxmWzJdKX1yZXR1cm4gaS5hcHBseShhLGYpfXZhciBQRHQ9TWF0aC5tYXg7ZnVuY3Rpb24gRkR0KGksYSxmKXtyZXR1cm4gYT1QRHQoYT09PXZvaWQgMD9pLmxlbmd0aC0xOmEsMCksZnVuY3Rpb24oKXtmb3IodmFyIHA9YXJndW1lbnRzLHY9LTEsbT1QRHQocC5sZW5ndGgtYSwwKSxiPUFycmF5KG0pOysrdjxtOyliW3ZdPXBbYSt2XTt2PS0xO2Zvcih2YXIgRT1BcnJheShhKzEpOysrdjxhOylFW3ZdPXBbdl07cmV0dXJuIEVbYV09ZihiKSx5X2UoaSx0aGlzLEUpfX1mdW5jdGlvbiBqQShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19dmFyIHhfZT1nVz9mdW5jdGlvbihpLGEpe3JldHVybiBnVyhpLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmpBKGEpLHdyaXRhYmxlOiEwfSl9OnNUO2NvbnN0IGtfZT14X2U7dmFyIEVfZT04MDAsVF9lPTE2LENfZT1EYXRlLm5vdztmdW5jdGlvbiBfX2UoaSl7dmFyIGE9MCxmPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHA9Q19lKCksdj1UX2UtKHAtZik7aWYoZj1wLHY+MCl7aWYoKythPj1FX2UpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIGE9MDtyZXR1cm4gaS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIFNfZT1fX2Uoa19lKTtjb25zdCBCRHQ9U19lO2Z1bmN0aW9uIGtXKGksYSl7cmV0dXJuIEJEdChGRHQoaSxhLHNUKSxpKyIiKX1mdW5jdGlvbiBZTihpLGEsZil7aWYoIUliKGYpKXJldHVybiExO3ZhciBwPXR5cGVvZiBhO3JldHVybihwPT0ibnVtYmVyIj9layhmKSYmeFcoYSxmLmxlbmd0aCk6cD09InN0cmluZyImJmEgaW4gZik/TkEoZlthXSxpKTohMX1mdW5jdGlvbiBBX2UoaSl7cmV0dXJuIGtXKGZ1bmN0aW9uKGEsZil7dmFyIHA9LTEsdj1mLmxlbmd0aCxtPXY+MT9mW3YtMV06dm9pZCAwLGI9dj4yP2ZbMl06dm9pZCAwO2ZvcihtPWkubGVuZ3RoPjMmJnR5cGVvZiBtPT0iZnVuY3Rpb24iPyh2LS0sbSk6dm9pZCAwLGImJllOKGZbMF0sZlsxXSxiKSYmKG09djwzP3ZvaWQgMDptLHY9MSksYT1PYmplY3QoYSk7KytwPHY7KXt2YXIgRT1mW3BdO0UmJmkoYSxFLHAsbSl9cmV0dXJuIGF9KX12YXIgTF9lPUFfZShmdW5jdGlvbihpLGEsZil7TkR0KGksYSxmKX0pO2NvbnN0IEVXPUxfZSxSRHQ9IuKAiyIsTV9lPXtjdXJ2ZUJhc2lzOkZOLGN1cnZlQmFzaXNDbG9zZWQ6SDdlLGN1cnZlQmFzaXNPcGVuOkc3ZSxjdXJ2ZUJ1bXBYOno3ZSxjdXJ2ZUJ1bXBZOnE3ZSxjdXJ2ZUJ1bmRsZTpWN2UsY3VydmVDYXJkaW5hbENsb3NlZDpXN2UsY3VydmVDYXJkaW5hbE9wZW46SzdlLGN1cnZlQ2FyZGluYWw6VTdlLGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpYN2UsY3VydmVDYXRtdWxsUm9tT3BlbjpRN2UsY3VydmVDYXRtdWxsUm9tOlk3ZSxjdXJ2ZUxpbmVhcjppZyxjdXJ2ZUxpbmVhckNsb3NlZDpaN2UsY3VydmVNb25vdG9uZVg6SjdlLGN1cnZlTW9ub3RvbmVZOnRUZSxjdXJ2ZU5hdHVyYWw6ZVRlLGN1cnZlU3RlcDpuVGUsY3VydmVTdGVwQWZ0ZXI6aVRlLGN1cnZlU3RlcEJlZm9yZTpyVGV9LElfZT0vXHMqKD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksRF9lPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1qRHQoaSwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyk7bGV0IHA9e307aWYoQXJyYXkuaXNBcnJheShmKSl7Y29uc3QgYj1mLm1hcChFPT5FLmFyZ3MpO2xXKGIpLHA9WTEocCxbLi4uYl0pfWVsc2UgcD1mLmFyZ3M7aWYoIXApcmV0dXJuO2xldCB2PWhXKGksYSk7Y29uc3QgbT0iY29uZmlnIjtyZXR1cm4gcFttXSE9PXZvaWQgMCYmKHY9PT0iZmxvd2NoYXJ0LXYyIiYmKHY9ImZsb3djaGFydCIpLHBbdl09cFttXSxkZWxldGUgcFttXSkscH0sakR0PWZ1bmN0aW9uKGksYT1udWxsKXt0cnl7Y29uc3QgZj1uZXcgUmVnRXhwKGBbJV17Mn0oPyFbe10ke0lfZS5zb3VyY2V9KSg/PVt9XVslXXsyfSkuKgpgLCJpZyIpO2k9aS50cmltKCkucmVwbGFjZShmLCIiKS5yZXBsYWNlKC8nL2dtLCciJyksVXQuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7YSE9PW51bGw/IiB0eXBlOiIrYToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHtpfWApO2xldCBwO2NvbnN0IHY9W107Zm9yKDsocD1ITi5leGVjKGkpKSE9PW51bGw7KWlmKHAuaW5kZXg9PT1ITi5sYXN0SW5kZXgmJkhOLmxhc3RJbmRleCsrLHAmJiFhfHxhJiZwWzFdJiZwWzFdLm1hdGNoKGEpfHxhJiZwWzJdJiZwWzJdLm1hdGNoKGEpKXtjb25zdCBtPXBbMV0/cFsxXTpwWzJdLGI9cFszXT9wWzNdLnRyaW0oKTpwWzRdP0pTT04ucGFyc2UocFs0XS50cmltKCkpOm51bGw7di5wdXNoKHt0eXBlOm0sYXJnczpifSl9cmV0dXJuIHYubGVuZ3RoPT09MD97dHlwZTppLGFyZ3M6bnVsbH06di5sZW5ndGg9PT0xP3ZbMF06dn1jYXRjaChmKXtyZXR1cm4gVXQuZXJyb3IoYEVSUk9SOiAke2YubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke2F9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7aX0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSxPX2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGkucmVwbGFjZShITiwiIil9LE5fZT1mdW5jdGlvbihpLGEpe2Zvcihjb25zdFtmLHBdb2YgYS5lbnRyaWVzKCkpaWYocC5tYXRjaChpKSlyZXR1cm4gZjtyZXR1cm4tMX07ZnVuY3Rpb24gWDIoaSxhKXtpZighaSlyZXR1cm4gYTtjb25zdCBmPWBjdXJ2ZSR7aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpfWA7cmV0dXJuIE1fZVtmXT8/YX1mdW5jdGlvbiBQX2UoaSxhKXtjb25zdCBmPWkudHJpbSgpO2lmKGYpcmV0dXJuIGEuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSI/UTYoZik6Zn1jb25zdCBGX2U9KGksLi4uYSk9Pntjb25zdCBmPWkuc3BsaXQoIi4iKSxwPWYubGVuZ3RoLTEsdj1mW3BdO2xldCBtPXdpbmRvdztmb3IobGV0IGI9MDtiPHA7YisrKWlmKG09bVtmW2JdXSwhbSl7VXQuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7aX0gbm90IGZvdW5kIGluIHdpbmRvd2ApO3JldHVybn1tW3ZdKC4uLmEpfTtmdW5jdGlvbiAkRHQoaSxhKXtyZXR1cm4haXx8IWE/MDpNYXRoLnNxcnQoTWF0aC5wb3coYS54LWkueCwyKStNYXRoLnBvdyhhLnktaS55LDIpKX1mdW5jdGlvbiBCX2UoaSl7bGV0IGEsZj0wO2kuZm9yRWFjaCh2PT57Zis9JER0KHYsYSksYT12fSk7Y29uc3QgcD1mLzI7cmV0dXJuIGVkdChpLHApfWZ1bmN0aW9uIFJfZShpKXtyZXR1cm4gaS5sZW5ndGg9PT0xP2lbMF06Ql9lKGkpfWNvbnN0IHpEdD0oaSxhPTIpPT57Y29uc3QgZj1NYXRoLnBvdygxMCxhKTtyZXR1cm4gTWF0aC5yb3VuZChpKmYpL2Z9LGVkdD0oaSxhKT0+e2xldCBmLHA9YTtmb3IoY29uc3QgdiBvZiBpKXtpZihmKXtjb25zdCBtPSREdCh2LGYpO2lmKG08cClwLT1tO2Vsc2V7Y29uc3QgYj1wL207aWYoYjw9MClyZXR1cm4gZjtpZihiPj0xKXJldHVybnt4OnYueCx5OnYueX07aWYoYj4wJiZiPDEpcmV0dXJue3g6ekR0KCgxLWIpKmYueCtiKnYueCw1KSx5OnpEdCgoMS1iKSpmLnkrYip2LnksNSl9fX1mPXZ9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciB0aGUgZ2l2ZW4gZGlzdGFuY2UiKX0sal9lPShpLGEsZik9PntVdC5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkoYSl9YCksYVswXSE9PWYmJihhPWEucmV2ZXJzZSgpKTtjb25zdCB2PWVkdChhLDI1KSxtPWk/MTA6NSxiPU1hdGguYXRhbjIoYVswXS55LXYueSxhWzBdLngtdi54KSxFPXt4OjAseTowfTtyZXR1cm4gRS54PU1hdGguc2luKGIpKm0rKGFbMF0ueCt2LngpLzIsRS55PS1NYXRoLmNvcyhiKSptKyhhWzBdLnkrdi55KS8yLEV9O2Z1bmN0aW9uICRfZShpLGEsZil7Y29uc3QgcD1zdHJ1Y3R1cmVkQ2xvbmUoZik7VXQuaW5mbygib3VyIHBvaW50cyIscCksYSE9PSJzdGFydF9sZWZ0IiYmYSE9PSJzdGFydF9yaWdodCImJnAucmV2ZXJzZSgpO2NvbnN0IHY9MjUraSxtPWVkdChwLHYpLGI9MTAraSouNSxFPU1hdGguYXRhbjIocFswXS55LW0ueSxwWzBdLngtbS54KSxfPXt4OjAseTowfTtyZXR1cm4gYT09PSJzdGFydF9sZWZ0Ij8oXy54PU1hdGguc2luKEUrTWF0aC5QSSkqYisocFswXS54K20ueCkvMixfLnk9LU1hdGguY29zKEUrTWF0aC5QSSkqYisocFswXS55K20ueSkvMik6YT09PSJlbmRfcmlnaHQiPyhfLng9TWF0aC5zaW4oRS1NYXRoLlBJKSpiKyhwWzBdLngrbS54KS8yLTUsXy55PS1NYXRoLmNvcyhFLU1hdGguUEkpKmIrKHBbMF0ueSttLnkpLzItNSk6YT09PSJlbmRfbGVmdCI/KF8ueD1NYXRoLnNpbihFKSpiKyhwWzBdLngrbS54KS8yLTUsXy55PS1NYXRoLmNvcyhFKSpiKyhwWzBdLnkrbS55KS8yLTUpOihfLng9TWF0aC5zaW4oRSkqYisocFswXS54K20ueCkvMixfLnk9LU1hdGguY29zKEUpKmIrKHBbMF0ueSttLnkpLzIpLF99ZnVuY3Rpb24gZW0oaSl7bGV0IGE9IiIsZj0iIjtmb3IoY29uc3QgcCBvZiBpKXAhPT12b2lkIDAmJihwLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxwLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/Zj1mK3ArIjsiOmE9YStwKyI7Iik7cmV0dXJue3N0eWxlOmEsbGFiZWxTdHlsZTpmfX1sZXQgcUR0PTA7Y29uc3QgSER0PSgpPT4ocUR0KyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitxRHQpO2Z1bmN0aW9uIHpfZShpKXtsZXQgYT0iIjtjb25zdCBmPSIwMTIzNDU2Nzg5YWJjZGVmIixwPWYubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8aTt2KyspYSs9Zi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnApKTtyZXR1cm4gYX1jb25zdCBHRHQ9aT0+el9lKGkubGVuZ3RoKSxxX2U9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwLHRleHQ6IiJ9fSxIX2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEudGV4dC5yZXBsYWNlKFlyLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxwXT0kQShhLmZvbnRTaXplKSx2PWkuYXBwZW5kKCJ0ZXh0Iik7di5hdHRyKCJ4IixhLngpLHYuYXR0cigieSIsYS55KSx2LnN0eWxlKCJ0ZXh0LWFuY2hvciIsYS5hbmNob3IpLHYuc3R5bGUoImZvbnQtZmFtaWx5IixhLmZvbnRGYW1pbHkpLHYuc3R5bGUoImZvbnQtc2l6ZSIscCksdi5zdHlsZSgiZm9udC13ZWlnaHQiLGEuZm9udFdlaWdodCksdi5hdHRyKCJmaWxsIixhLmZpbGwpLGEuY2xhc3MhPT12b2lkIDAmJnYuYXR0cigiY2xhc3MiLGEuY2xhc3MpO2NvbnN0IG09di5hcHBlbmQoInRzcGFuIik7cmV0dXJuIG0uYXR0cigieCIsYS54K2EudGV4dE1hcmdpbioyKSxtLmF0dHIoImZpbGwiLGEuZmlsbCksbS50ZXh0KGYpLHZ9LFZEdD1QQSgoaSxhLGYpPT57aWYoIWl8fChmPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxmKSxZci5saW5lQnJlYWtSZWdleC50ZXN0KGkpKSlyZXR1cm4gaTtjb25zdCBwPWkuc3BsaXQoIiAiKSx2PVtdO2xldCBtPSIiO3JldHVybiBwLmZvckVhY2goKGIsRSk9Pntjb25zdCBfPWgzKGAke2J9IGAsZiksTD1oMyhtLGYpO2lmKF8+YSl7Y29uc3R7aHlwaGVuYXRlZFN0cmluZ3M6aixyZW1haW5pbmdXb3JkOlJ9PUdfZShiLGEsIi0iLGYpO3YucHVzaChtLC4uLmopLG09Un1lbHNlIEwrXz49YT8odi5wdXNoKG0pLG09Yik6bT1bbSxiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO0UrMT09PXAubGVuZ3RoJiZ2LnB1c2gobSl9KSx2LmZpbHRlcihiPT5iIT09IiIpLmpvaW4oZi5qb2luV2l0aCl9LChpLGEsZik9PmAke2l9JHthfSR7Zi5mb250U2l6ZX0ke2YuZm9udFdlaWdodH0ke2YuZm9udEZhbWlseX0ke2Yuam9pbldpdGh9YCksR19lPVBBKChpLGEsZj0iLSIscCk9PntwPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scCk7Y29uc3Qgdj1bLi4uaV0sbT1bXTtsZXQgYj0iIjtyZXR1cm4gdi5mb3JFYWNoKChFLF8pPT57Y29uc3QgTD1gJHtifSR7RX1gO2lmKGgzKEwscCk+PWEpe2NvbnN0IEI9XysxLGo9di5sZW5ndGg9PT1CLFI9YCR7TH0ke2Z9YDttLnB1c2goaj9MOlIpLGI9IiJ9ZWxzZSBiPUx9KSx7aHlwaGVuYXRlZFN0cmluZ3M6bSxyZW1haW5pbmdXb3JkOmJ9fSwoaSxhLGY9Ii0iLHApPT5gJHtpfSR7YX0ke2Z9JHtwLmZvbnRTaXplfSR7cC5mb250V2VpZ2h0fSR7cC5mb250RmFtaWx5fWApO2Z1bmN0aW9uIG5kdChpLGEpe3JldHVybiByZHQoaSxhKS5oZWlnaHR9ZnVuY3Rpb24gaDMoaSxhKXtyZXR1cm4gcmR0KGksYSkud2lkdGh9Y29uc3QgcmR0PVBBKChpLGEpPT57Y29uc3R7Zm9udFNpemU6Zj0xMixmb250RmFtaWx5OnA9IkFyaWFsIixmb250V2VpZ2h0OnY9NDAwfT1hO2lmKCFpKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtjb25zdFssbV09JEEoZiksYj1bInNhbnMtc2VyaWYiLHBdLEU9aS5zcGxpdChZci5saW5lQnJlYWtSZWdleCksXz1bXSxMPXlyKCJib2R5Iik7aWYoIUwucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Y29uc3QgTj1MLmFwcGVuZCgic3ZnIik7Zm9yKGNvbnN0IGogb2YgYil7bGV0IFI9MDtjb25zdCB6PXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKGNvbnN0IEsgb2YgRSl7Y29uc3QgaXQ9cV9lKCk7aXQudGV4dD1LfHxSRHQ7Y29uc3Qgc3Q9SF9lKE4saXQpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LXdlaWdodCIsdikuc3R5bGUoImZvbnQtZmFtaWx5IixqKSx1dD0oc3QuX2dyb3Vwc3x8c3QpWzBdWzBdLmdldEJCb3goKTtpZih1dC53aWR0aD09PTAmJnV0LmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTt6LndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoei53aWR0aCx1dC53aWR0aCkpLFI9TWF0aC5yb3VuZCh1dC5oZWlnaHQpLHouaGVpZ2h0Kz1SLHoubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KHoubGluZUhlaWdodCxSKSl9Xy5wdXNoKHopfU4ucmVtb3ZlKCk7Y29uc3QgQj1pc05hTihfWzFdLmhlaWdodCl8fGlzTmFOKF9bMV0ud2lkdGgpfHxpc05hTihfWzFdLmxpbmVIZWlnaHQpfHxfWzBdLmhlaWdodD5fWzFdLmhlaWdodCYmX1swXS53aWR0aD5fWzFdLndpZHRoJiZfWzBdLmxpbmVIZWlnaHQ+X1sxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gX1tCXX0sKGksYSk9PmAke2l9JHthLmZvbnRTaXplfSR7YS5mb250V2VpZ2h0fSR7YS5mb250RmFtaWx5fWApO2NsYXNzIFZfZXtjb25zdHJ1Y3RvcihhPSExLGYpe3RoaXMuY291bnQ9MCx0aGlzLmNvdW50PWY/Zi5sZW5ndGg6MCx0aGlzLm5leHQ9YT8oKT0+dGhpcy5jb3VudCsrOigpPT5EYXRlLm5vdygpfX1sZXQgVFc7Y29uc3QgVV9lPWZ1bmN0aW9uKGkpe3JldHVybiBUVz1UV3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksVFcuaW5uZXJIVE1MPWksdW5lc2NhcGUoVFcudGV4dENvbnRlbnQpfTtmdW5jdGlvbiBVRHQoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IFdfZT0oaSxhLGYscCk9Pnt2YXIgbTtpZighcClyZXR1cm47Y29uc3Qgdj0obT1pLm5vZGUoKSk9PW51bGw/dm9pZCAwOm0uZ2V0QkJveCgpO3YmJmkuYXBwZW5kKCJ0ZXh0IikudGV4dChwKS5hdHRyKCJ4Iix2Lngrdi53aWR0aC8yKS5hdHRyKCJ5IiwtZikuYXR0cigiY2xhc3MiLGEpfSwkQT1pPT57aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybltpLGkrInB4Il07Y29uc3QgYT1wYXJzZUludChpPz8iIiwxMCk7cmV0dXJuIE51bWJlci5pc05hTihhKT9bdm9pZCAwLHZvaWQgMF06aT09PVN0cmluZyhhKT9bYSxpKyJweCJdOlthLGldfTtmdW5jdGlvbiBpZHQoaSxhKXtyZXR1cm4gRVcoe30saSxhKX1jb25zdCAkYT17YXNzaWduV2l0aERlcHRoOlkxLHdyYXBMYWJlbDpWRHQsY2FsY3VsYXRlVGV4dEhlaWdodDpuZHQsY2FsY3VsYXRlVGV4dFdpZHRoOmgzLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOnJkdCxjbGVhbkFuZE1lcmdlOmlkdCxkZXRlY3RJbml0OkRfZSxkZXRlY3REaXJlY3RpdmU6akR0LGlzU3Vic3RyaW5nSW5BcnJheTpOX2UsaW50ZXJwb2xhdGVUb0N1cnZlOlgyLGNhbGNMYWJlbFBvc2l0aW9uOlJfZSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpqX2UsY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbjokX2UsZm9ybWF0VXJsOlBfZSxnZXRTdHlsZXNGcm9tQXJyYXk6ZW0sZ2VuZXJhdGVJZDpIRHQscmFuZG9tOkdEdCxydW5GdW5jOkZfZSxlbnRpdHlEZWNvZGU6VV9lLGluc2VydFRpdGxlOldfZSxwYXJzZUZvbnRTaXplOiRBLEluaXRJREdlbmVyYXRvcjpWX2V9O3ZhciBXRHQ9ImNvbW0iLEtEdD0icnVsZSIsWUR0PSJkZWNsIixLX2U9IkBpbXBvcnQiLFlfZT0iQGtleWZyYW1lcyIsWF9lPU1hdGguYWJzLHNkdD1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFhEdChpKXtyZXR1cm4gaS50cmltKCl9ZnVuY3Rpb24gYWR0KGksYSxmKXtyZXR1cm4gaS5yZXBsYWNlKGEsZil9ZnVuY3Rpb24gUV9lKGksYSl7cmV0dXJuIGkuaW5kZXhPZihhKX1mdW5jdGlvbiBYTihpLGEpe3JldHVybiBpLmNoYXJDb2RlQXQoYSl8MH1mdW5jdGlvbiBRTihpLGEsZil7cmV0dXJuIGkuc2xpY2UoYSxmKX1mdW5jdGlvbiBuayhpKXtyZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gUUR0KGkpe3JldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBDVyhpLGEpe3JldHVybiBhLnB1c2goaSksaX12YXIgX1c9MSx6QT0xLFpEdD0wLFEyPTAsSWY9MCxxQT0iIjtmdW5jdGlvbiBvZHQoaSxhLGYscCx2LG0sYil7cmV0dXJue3ZhbHVlOmkscm9vdDphLHBhcmVudDpmLHR5cGU6cCxwcm9wczp2LGNoaWxkcmVuOm0sbGluZTpfVyxjb2x1bW46ekEsbGVuZ3RoOmIscmV0dXJuOiIifX1mdW5jdGlvbiBaX2UoKXtyZXR1cm4gSWZ9ZnVuY3Rpb24gSl9lKCl7cmV0dXJuIElmPVEyPjA/WE4ocUEsLS1RMik6MCx6QS0tLElmPT09MTAmJih6QT0xLF9XLS0pLElmfWZ1bmN0aW9uIG5tKCl7cmV0dXJuIElmPVEyPFpEdD9YTihxQSxRMisrKTowLHpBKyssSWY9PT0xMCYmKHpBPTEsX1crKyksSWZ9ZnVuY3Rpb24gYVQoKXtyZXR1cm4gWE4ocUEsUTIpfWZ1bmN0aW9uIFNXKCl7cmV0dXJuIFEyfWZ1bmN0aW9uIEFXKGksYSl7cmV0dXJuIFFOKHFBLGksYSl9ZnVuY3Rpb24gY2R0KGkpe3N3aXRjaChpKXtjYXNlIDA6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiA1O2Nhc2UgMzM6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDc6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6cmV0dXJuIDQ7Y2FzZSA1ODpyZXR1cm4gMztjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDkxOnJldHVybiAyO2Nhc2UgNDE6Y2FzZSA5MzpyZXR1cm4gMX1yZXR1cm4gMH1mdW5jdGlvbiB0U2UoaSl7cmV0dXJuIF9XPXpBPTEsWkR0PW5rKHFBPWkpLFEyPTAsW119ZnVuY3Rpb24gZVNlKGkpe3JldHVybiBxQT0iIixpfWZ1bmN0aW9uIHVkdChpKXtyZXR1cm4gWER0KEFXKFEyLTEsbGR0KGk9PT05MT9pKzI6aT09PTQwP2krMTppKSkpfWZ1bmN0aW9uIG5TZShpKXtmb3IoOyhJZj1hVCgpKSYmSWY8MzM7KW5tKCk7cmV0dXJuIGNkdChpKT4yfHxjZHQoSWYpPjM/IiI6IiAifWZ1bmN0aW9uIHJTZShpLGEpe2Zvcig7LS1hJiZubSgpJiYhKElmPDQ4fHxJZj4xMDJ8fElmPjU3JiZJZjw2NXx8SWY+NzAmJklmPDk3KTspO3JldHVybiBBVyhpLFNXKCkrKGE8NiYmYVQoKT09MzImJm5tKCk9PTMyKSl9ZnVuY3Rpb24gbGR0KGkpe2Zvcig7bm0oKTspc3dpdGNoKElmKXtjYXNlIGk6cmV0dXJuIFEyO2Nhc2UgMzQ6Y2FzZSAzOTppIT09MzQmJmkhPT0zOSYmbGR0KElmKTticmVhaztjYXNlIDQwOmk9PT00MSYmbGR0KGkpO2JyZWFrO2Nhc2UgOTI6bm0oKTticmVha31yZXR1cm4gUTJ9ZnVuY3Rpb24gaVNlKGksYSl7Zm9yKDtubSgpJiZpK0lmIT09NDcrMTA7KWlmKGkrSWY9PT00Mis0MiYmYVQoKT09PTQ3KWJyZWFrO3JldHVybiIvKiIrQVcoYSxRMi0xKSsiKiIrc2R0KGk9PT00Nz9pOm5tKCkpfWZ1bmN0aW9uIHNTZShpKXtmb3IoOyFjZHQoYVQoKSk7KW5tKCk7cmV0dXJuIEFXKGksUTIpfWZ1bmN0aW9uIGFTZShpKXtyZXR1cm4gZVNlKExXKCIiLG51bGwsbnVsbCxudWxsLFsiIl0saT10U2UoaSksMCxbMF0saSkpfWZ1bmN0aW9uIExXKGksYSxmLHAsdixtLGIsRSxfKXtmb3IodmFyIEw9MCxOPTAsQj1iLGo9MCxSPTAsej0wLEs9MSxpdD0xLHN0PTEsdXQ9MCxidD0iIixtdD12LHl0PW0sZHQ9cCxodD1idDtpdDspc3dpdGNoKHo9dXQsdXQ9bm0oKSl7Y2FzZSA0MDppZih6IT0xMDgmJlhOKGh0LEItMSk9PTU4KXtRX2UoaHQrPWFkdCh1ZHQodXQpLCImIiwiJlxmIiksIiZcZiIpIT0tMSYmKHN0PS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpodCs9dWR0KHV0KTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6aHQrPW5TZSh6KTticmVhaztjYXNlIDkyOmh0Kz1yU2UoU1coKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKGFUKCkpe2Nhc2UgNDI6Y2FzZSA0NzpDVyhvU2UoaVNlKG5tKCksU1coKSksYSxmKSxfKTticmVhaztkZWZhdWx0Omh0Kz0iLyJ9YnJlYWs7Y2FzZSAxMjMqSzpFW0wrK109bmsoaHQpKnN0O2Nhc2UgMTI1Kks6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHV0KXtjYXNlIDA6Y2FzZSAxMjU6aXQ9MDtjYXNlIDU5K046Uj4wJiZuayhodCktQiYmQ1coUj4zMj90T3QoaHQrIjsiLHAsZixCLTEpOnRPdChhZHQoaHQsIiAiLCIiKSsiOyIscCxmLEItMiksXyk7YnJlYWs7Y2FzZSA1OTpodCs9IjsiO2RlZmF1bHQ6aWYoQ1coZHQ9SkR0KGh0LGEsZixMLE4sdixFLGJ0LG10PVtdLHl0PVtdLEIpLG0pLHV0PT09MTIzKWlmKE49PT0wKUxXKGh0LGEsZHQsZHQsbXQsbSxCLEUseXQpO2Vsc2Ugc3dpdGNoKGo9PT05OSYmWE4oaHQsMyk9PT0xMTA/MTAwOmope2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1OkxXKGksZHQsZHQscCYmQ1coSkR0KGksZHQsZHQsMCwwLHYsRSxidCx2LG10PVtdLEIpLHl0KSx2LHl0LEIsRSxwP210Onl0KTticmVhaztkZWZhdWx0OkxXKGh0LGR0LGR0LGR0LFsiIl0seXQsMCxFLHl0KX19TD1OPVI9MCxLPXN0PTEsYnQ9aHQ9IiIsQj1iO2JyZWFrO2Nhc2UgNTg6Qj0xK25rKGh0KSxSPXo7ZGVmYXVsdDppZihLPDEpe2lmKHV0PT0xMjMpLS1LO2Vsc2UgaWYodXQ9PTEyNSYmSysrPT0wJiZKX2UoKT09MTI1KWNvbnRpbnVlfXN3aXRjaChodCs9c2R0KHV0KSx1dCpLKXtjYXNlIDM4OnN0PU4+MD8xOihodCs9IlxmIiwtMSk7YnJlYWs7Y2FzZSA0NDpFW0wrK109KG5rKGh0KS0xKSpzdCxzdD0xO2JyZWFrO2Nhc2UgNjQ6YVQoKT09PTQ1JiYoaHQrPXVkdChubSgpKSksaj1hVCgpLE49Qj1uayhidD1odCs9c1NlKFNXKCkpKSx1dCsrO2JyZWFrO2Nhc2UgNDU6ej09PTQ1JiZuayhodCk9PTImJihLPTApfX1yZXR1cm4gbX1mdW5jdGlvbiBKRHQoaSxhLGYscCx2LG0sYixFLF8sTCxOKXtmb3IodmFyIEI9di0xLGo9dj09PTA/bTpbIiJdLFI9UUR0KGopLHo9MCxLPTAsaXQ9MDt6PHA7Kyt6KWZvcih2YXIgc3Q9MCx1dD1RTihpLEIrMSxCPVhfZShLPWJbel0pKSxidD1pO3N0PFI7KytzdCkoYnQ9WER0KEs+MD9qW3N0XSsiICIrdXQ6YWR0KHV0LC8mXGYvZyxqW3N0XSkpKSYmKF9baXQrK109YnQpO3JldHVybiBvZHQoaSxhLGYsdj09PTA/S0R0OkUsXyxMLE4pfWZ1bmN0aW9uIG9TZShpLGEsZil7cmV0dXJuIG9kdChpLGEsZixXRHQsc2R0KFpfZSgpKSxRTihpLDIsLTIpLDApfWZ1bmN0aW9uIHRPdChpLGEsZixwKXtyZXR1cm4gb2R0KGksYSxmLFlEdCxRTihpLDAscCksUU4oaSxwKzEsLTEpLHApfWZ1bmN0aW9uIGhkdChpLGEpe2Zvcih2YXIgZj0iIixwPVFEdChpKSx2PTA7djxwO3YrKylmKz1hKGlbdl0sdixpLGEpfHwiIjtyZXR1cm4gZn1mdW5jdGlvbiBjU2UoaSxhLGYscCl7c3dpdGNoKGkudHlwZSl7Y2FzZSBLX2U6Y2FzZSBZRHQ6cmV0dXJuIGkucmV0dXJuPWkucmV0dXJufHxpLnZhbHVlO2Nhc2UgV0R0OnJldHVybiIiO2Nhc2UgWV9lOnJldHVybiBpLnJldHVybj1pLnZhbHVlKyJ7IitoZHQoaS5jaGlsZHJlbixwKSsifSI7Y2FzZSBLRHQ6aS52YWx1ZT1pLnByb3BzLmpvaW4oIiwiKX1yZXR1cm4gbmsoZj1oZHQoaS5jaGlsZHJlbixwKSk/aS5yZXR1cm49aS52YWx1ZSsieyIrZisifSI6IiJ9Y29uc3QgZU90PSIxMC41LjEiLG9UPU9iamVjdC5mcmVlemUoTGYpO2xldCBzcD1ZMSh7fSxvVCksbk90LEhBPVtdLFpOPVkxKHt9LG9UKTtjb25zdCBNVz0oaSxhKT0+e2xldCBmPVkxKHt9LGkpLHA9e307Zm9yKGNvbnN0IHYgb2YgYSlzT3QodikscD1ZMShwLHYpO2lmKGY9WTEoZixwKSxwLnRoZW1lJiZwLnRoZW1lIGluIHc1KXtjb25zdCB2PVkxKHt9LG5PdCksbT1ZMSh2LnRoZW1lVmFyaWFibGVzfHx7fSxwLnRoZW1lVmFyaWFibGVzKTtmLnRoZW1lJiZmLnRoZW1lIGluIHc1JiYoZi50aGVtZVZhcmlhYmxlcz13NVtmLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhtKSl9cmV0dXJuIFpOPWYsb090KFpOKSxaTn0sdVNlPWk9PihzcD1ZMSh7fSxvVCksc3A9WTEoc3AsaSksaS50aGVtZSYmdzVbaS50aGVtZV0mJihzcC50aGVtZVZhcmlhYmxlcz13NVtpLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKSksTVcoc3AsSEEpLHNwKSxsU2U9aT0+e25PdD1ZMSh7fSxpKX0saFNlPWk9PihzcD1ZMShzcCxpKSxNVyhzcCxIQSksc3ApLHJPdD0oKT0+WTEoe30sc3ApLGlPdD1pPT4ob090KGkpLFkxKFpOLGkpLExlKCkpLExlPSgpPT5ZMSh7fSxaTiksc090PWk9PntpJiYoWyJzZWN1cmUiLC4uLnNwLnNlY3VyZT8/W11dLmZvckVhY2goYT0+e09iamVjdC5oYXNPd24oaSxhKSYmKFV0LmRlYnVnKGBEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICR7YX1gLGlbYV0pLGRlbGV0ZSBpW2FdKX0pLE9iamVjdC5rZXlzKGkpLmZvckVhY2goYT0+e2Euc3RhcnRzV2l0aCgiX18iKSYmZGVsZXRlIGlbYV19KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9Pnt0eXBlb2YgaVthXT09InN0cmluZyImJihpW2FdLmluY2x1ZGVzKCI8Iil8fGlbYV0uaW5jbHVkZXMoIj4iKXx8aVthXS5pbmNsdWRlcygidXJsKGRhdGE6IikpJiZkZWxldGUgaVthXSx0eXBlb2YgaVthXT09Im9iamVjdCImJnNPdChpW2FdKX0pKX0sZlNlPWk9PntsVyhpKSxpLmZvbnRGYW1pbHkmJighaS50aGVtZVZhcmlhYmxlc3x8IWkudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseSkmJihpLnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OmkuZm9udEZhbWlseX0pLEhBLnB1c2goaSksTVcoc3AsSEEpfSxJVz0oaT1zcCk9PntIQT1bXSxNVyhpLEhBKX0sZFNlPXtMQVpZX0xPQURfREVQUkVDQVRFRDoiVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsYXp5TG9hZGVkRGlhZ3JhbXMgYW5kIGxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwIGFyZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyBpbnN0ZWFkLiJ9LGFPdD17fSxnU2U9aT0+e2FPdFtpXXx8KFV0Lndhcm4oZFNlW2ldKSxhT3RbaV09ITApfSxvT3Q9aT0+e2kmJihpLmxhenlMb2FkZWREaWFncmFtc3x8aS5sb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCkmJmdTZSgiTEFaWV9MT0FEX0RFUFJFQ0FURUQiKX0sY090PSJjNCIscFNlPXtpZDpjT3QsZGV0ZWN0b3I6aT0+L15ccypDNENvbnRleHR8QzRDb250YWluZXJ8QzRDb21wb25lbnR8QzREeW5hbWljfEM0RGVwbG95bWVudC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SUllKTtyZXR1cm57aWQ6Y090LGRpYWdyYW06aX19fSx1T3Q9ImZsb3djaGFydCIsYlNlPXtpZDp1T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZixwO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyInx8KChwPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5kZWZhdWx0UmVuZGVyZXIpPT09ImVsayI/ITE6L15ccypncmFwaC8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk8kZSk7cmV0dXJue2lkOnVPdCxkaWFncmFtOml9fX0sbE90PSJmbG93Y2hhcnQtdjIiLHZTZT17aWQ6bE90LGRldGVjdG9yOihpLGEpPT57dmFyIGYscCx2O3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS1kMyJ8fCgocD1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnAuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSkmJigodj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmZsb3djaGFydC8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk4kZSk7cmV0dXJue2lkOmxPdCxkaWFncmFtOml9fX0saE90PSJlciIsd1NlPXtpZDpoT3QsZGV0ZWN0b3I6aT0+L15ccyplckRpYWdyYW0vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmF6ZSk7cmV0dXJue2lkOmhPdCxkaWFncmFtOml9fX0sZk90PSJnaXRHcmFwaCIsbVNlPXtpZDpmT3QsZGV0ZWN0b3I6aT0+L15ccypnaXRHcmFwaC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+SXplKTtyZXR1cm57aWQ6Zk90LGRpYWdyYW06aX19fSxkT3Q9ImdhbnR0Iix5U2U9e2lkOmRPdCxkZXRlY3RvcjppPT4vXlxzKmdhbnR0Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT55cWUpO3JldHVybntpZDpkT3QsZGlhZ3JhbTppfX19LGdPdD0iaW5mbyIseFNlPXtpZDpnT3QsZGV0ZWN0b3I6aT0+L15ccyppbmZvLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rcWUpO3JldHVybntpZDpnT3QsZGlhZ3JhbTppfX19LHBPdD0icGllIixrU2U9e2lkOnBPdCxkZXRlY3RvcjppPT4vXlxzKnBpZS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QXFlKTtyZXR1cm57aWQ6cE90LGRpYWdyYW06aX19fSxiT3Q9InF1YWRyYW50Q2hhcnQiLEVTZT17aWQ6Yk90LGRldGVjdG9yOmk9Pi9eXHMqcXVhZHJhbnRDaGFydC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R3FlKTtyZXR1cm57aWQ6Yk90LGRpYWdyYW06aX19fSx2T3Q9InJlcXVpcmVtZW50IixUU2U9e2lkOnZPdCxkZXRlY3RvcjppPT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dEhlKTtyZXR1cm57aWQ6dk90LGRpYWdyYW06aX19fSx3T3Q9InNlcXVlbmNlIixDU2U9e2lkOndPdCxkZXRlY3RvcjppPT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+c0dlKTtyZXR1cm57aWQ6d090LGRpYWdyYW06aX19fSxtT3Q9ImNsYXNzIixfU2U9e2lkOm1PdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLmNsYXNzKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+TEdlKTtyZXR1cm57aWQ6bU90LGRpYWdyYW06aX19fSx5T3Q9ImNsYXNzRGlhZ3JhbSIsU1NlPXtpZDp5T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKSYmKChmPWE9PW51bGw/dm9pZCAwOmEuY2xhc3MpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5QR2UpO3JldHVybntpZDp5T3QsZGlhZ3JhbTppfX19LHhPdD0ic3RhdGUiLEFTZT17aWQ6eE90LGRldGVjdG9yOihpLGEpPT57dmFyIGY7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuc3RhdGUpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5rVmUpO3JldHVybntpZDp4T3QsZGlhZ3JhbTppfX19LGtPdD0ic3RhdGVEaWFncmFtIixMU2U9e2lkOmtPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KGkpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdChpKSYmKChmPWE9PW51bGw/dm9pZCAwOmEuc3RhdGUpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciIpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+elZlKTtyZXR1cm57aWQ6a090LGRpYWdyYW06aX19fSxFT3Q9ImpvdXJuZXkiLE1TZT17aWQ6RU90LGRldGVjdG9yOmk9Pi9eXHMqam91cm5leS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+YVVlKTtyZXR1cm57aWQ6RU90LGRpYWdyYW06aX19fSxmZHQ9aT0+e3ZhciB2O2NvbnN0e3NlY3VyaXR5TGV2ZWw6YX09TGUoKTtsZXQgZj15cigiYm9keSIpO2lmKGE9PT0ic2FuZGJveCIpe2NvbnN0IGI9KCh2PXlyKGAjaSR7aX1gKS5ub2RlKCkpPT1udWxsP3ZvaWQgMDp2LmNvbnRlbnREb2N1bWVudCk/P2RvY3VtZW50O2Y9eXIoYi5ib2R5KX1yZXR1cm4gZi5zZWxlY3QoYCMke2l9YCl9LElTZT1mdW5jdGlvbihpLGEpe2ZvcihsZXQgZiBvZiBhKWkuYXR0cihmWzBdLGZbMV0pfSxEU2U9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPW5ldyBNYXA7cmV0dXJuIGY/KHAuc2V0KCJ3aWR0aCIsIjEwMCUiKSxwLnNldCgic3R5bGUiLGBtYXgtd2lkdGg6ICR7YX1weDtgKSk6KHAuc2V0KCJoZWlnaHQiLGkpLHAuc2V0KCJ3aWR0aCIsYSkpLHB9LG9nPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9RFNlKGEsZixwKTtJU2UoaSx2KX0sY1Q9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1hLm5vZGUoKS5nZXRCQm94KCksbT12LndpZHRoLGI9di5oZWlnaHQ7VXQuaW5mbyhgU1ZHIGJvdW5kczogJHttfXgke2J9YCx2KTtsZXQgRT0wLF89MDtVdC5pbmZvKGBHcmFwaCBib3VuZHM6ICR7RX14JHtffWAsaSksRT1tK2YqMixfPWIrZioyLFV0LmluZm8oYENhbGN1bGF0ZWQgYm91bmRzOiAke0V9eCR7X31gKSxvZyhhLF8sRSxwKTtjb25zdCBMPWAke3YueC1mfSAke3YueS1mfSAke3Yud2lkdGgrMipmfSAke3YuaGVpZ2h0KzIqZn1gO2EuYXR0cigidmlld0JveCIsTCl9LFRPdD17ZHJhdzooaSxhLGYpPT57VXQuZGVidWcoYHJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yCmApO2NvbnN0IHA9ZmR0KGEpO3AuYXR0cigidmlld0JveCIsIjAgMCAyNDEyIDUxMiIpLG9nKHAsMTAwLDUxMiwhMCk7Y29uc3Qgdj1wLmFwcGVuZCgiZyIpO3YuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MTEuMzEzLDEyMy4zMTNjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzItOS4zNzUsOS4zNzUtMjAuNjg4LTIwLjY4OGMtMTIuNDg0LTEyLjUtMzIuNzY2LTEyLjUtNDUuMjUsMGwtMTYsMTZjLTEuMjYxLDEuMjYxLTIuMzA0LDIuNjQ4LTMuMzEsNC4wNTEtMjEuNzM5LTguNTYxLTQ1LjMyNC0xMy40MjYtNzAuMDY1LTEzLjQyNi0xMDUuODY3LDAtMTkyLDg2LjEzMy0xOTIsMTkyczg2LjEzMywxOTIgMTkyLDE5MiAxOTItODYuMTMzIDE5Mi0xOTJjMC0yNC43NDEtNC44NjQtNDguMzI3LTEzLjQyNi03MC4wNjUgMS40MDItMS4wMDcgMi43OS0yLjA0OSA0LjA1MS0zLjMxbDE2LTE2YzEyLjUtMTIuNDkyIDEyLjUtMzIuNzU4IDAtNDUuMjVsLTIwLjY4OC0yMC42ODggOS4zNzUtOS4zNzUgMzIuMDAxLTMxLjk5OXptLTIxOS4zMTMsMTAwLjY4N2MtNTIuOTM4LDAtOTYsNDMuMDYzLTk2LDk2IDAsOC44MzYtNy4xNjQsMTYtMTYsMTZzLTE2LTcuMTY0LTE2LTE2YzAtNzAuNTc4IDU3LjQyMi0xMjggMTI4LTEyOCA4LjgzNiwwIDE2LDcuMTY0IDE2LDE2cy03LjE2NCwxNi0xNiwxNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6Iiksdi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTM0MC4zOTUsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LTE2Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE1Ljk5OSwxNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDAwLDY0YzguODQ0LDAgMTYtNy4xNjQgMTYtMTZ2LTMyYzAtOC44MzYtNy4xNTYtMTYtMTYtMTYtOC44NDQsMC0xNiw3LjE2NC0xNiwxNnYzMmMwLDguODM2IDcuMTU2LDE2IDE2LDE2eiIpLHYuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnoiKSx2LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDM2Ljk4LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODhsMzItMzJjNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1cy0xNi4zNzUtNi4yNS0yMi42MjUsMGwtMzIsMzJjLTYuMjUxLDYuMjUtNi4yNTEsMTYuMzc1LTAuMDAxLDIyLjYyNXoiKSx2LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDE0NDApLmF0dHIoInkiLDI1MCkuYXR0cigiZm9udC1zaXplIiwiMTUwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KCJTeW50YXggZXJyb3IgaW4gdGV4dCIpLHYuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYG1lcm1haWQgdmVyc2lvbiAke2Z9YCl9fSxPU2U9VE90LE5TZT17ZGI6e30scmVuZGVyZXI6VE90LHBhcnNlcjp7cGFyc2VyOnt5eTp7fX0scGFyc2U6KCk9Pnt9fX0sQ090PSJmbG93Y2hhcnQtZWxrIixQU2U9e2lkOkNPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybiEhKC9eXHMqZmxvd2NoYXJ0LWVsay8udGVzdChpKXx8L15ccypmbG93Y2hhcnR8Z3JhcGgvLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmtVZSk7cmV0dXJue2lkOkNPdCxkaWFncmFtOml9fX0sX090PSJ0aW1lbGluZSIsRlNlPXtpZDpfT3QsZGV0ZWN0b3I6aT0+L15ccyp0aW1lbGluZS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+elVlKTtyZXR1cm57aWQ6X090LGRpYWdyYW06aX19fSxTT3Q9Im1pbmRtYXAiLEJTZT17aWQ6U090LGRldGVjdG9yOmk9Pi9eXHMqbWluZG1hcC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dldlKTtyZXR1cm57aWQ6U090LGRpYWdyYW06aX19fSxBT3Q9InNhbmtleSIsUlNlPXtpZDpBT3QsZGV0ZWN0b3I6aT0+L15ccypzYW5rZXktYmV0YS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+V1dlKTtyZXR1cm57aWQ6QU90LGRpYWdyYW06aX19fSxEVz17fSxqU2U9KGksYSxmKT0+e2xldCBwPSIiO3JldHVybiBpIGluIERXJiZEV1tpXT9wPURXW2ldKGYpOlV0Lndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke2l9YCksYCAmIHsKICAgIGZvbnQtZmFtaWx5OiAke2YuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7Zi5mb250U2l6ZX07CiAgICBmaWxsOiAke2YudGV4dENvbG9yfQogIH0KCiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHtmLmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7Zi5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7Zi5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQoKICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke2YubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHtmLmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7Zi5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7Zi5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtmLmZvbnRTaXplfTsKICB9CgogICR7cH0KCiAgJHthfQpgfSwkU2U9KGksYSk9PnthIT09dm9pZCAwJiYoRFdbaV09YSl9LHpTZT1qU2U7bGV0IGRkdD0iIixnZHQ9IiIscGR0PSIiO2NvbnN0IGJkdD1pPT5EZChpLExlKCkpLGFwPSgpPT57ZGR0PSIiLHBkdD0iIixnZHQ9IiJ9LGNnPWk9PntkZHQ9YmR0KGkpLnJlcGxhY2UoL15ccysvZywiIil9LG9wPSgpPT5kZHQsY3A9aT0+e3BkdD1iZHQoaSkucmVwbGFjZSgvXG5ccysvZyxgCmApfSx1cD0oKT0+cGR0LFoyPWk9PntnZHQ9YmR0KGkpfSxEYj0oKT0+Z2R0LExPdD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xlYXI6YXAsZ2V0QWNjRGVzY3JpcHRpb246dXAsZ2V0QWNjVGl0bGU6b3AsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldEFjY0Rlc2NyaXB0aW9uOmNwLHNldEFjY1RpdGxlOmNnLHNldERpYWdyYW1UaXRsZTpaMn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxxU2U9VXQsSFNlPWpmdCxKTj1MZSxHU2U9aT0+RGQoaSxKTigpKSxNT3Q9Y1QsVlNlPSgpPT5MT3QsT1c9e30sTlc9KGksYSxmKT0+e3ZhciBwO2lmKE9XW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtPV1tpXT1hLGYmJmNEdChpLGYpLCRTZShpLGEuc3R5bGVzKSwocD1hLmluamVjdFV0aWxzKT09bnVsbHx8cC5jYWxsKGEscVNlLEhTZSxKTixHU2UsTU90LFZTZSgpLCgpPT57fSl9LHZkdD1pPT57aWYoaSBpbiBPVylyZXR1cm4gT1dbaV07dGhyb3cgbmV3IFVTZShpKX07Y2xhc3MgVVNlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYSl7c3VwZXIoYERpYWdyYW0gJHthfSBub3QgZm91bmQuYCl9fWxldCBJT3Q9ITE7Y29uc3Qgd2R0PSgpPT57SU90fHwoSU90PSEwLE5XKCJlcnJvciIsTlNlLGk9PmkudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxOVygiLS0tIix7ZGI6e2NsZWFyOigpPT57fX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3OigpPT57fX0scGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTooKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9fSxpbml0OigpPT5udWxsfSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLG9EdChwU2UsU1NlLF9TZSx3U2UseVNlLHhTZSxrU2UsVFNlLENTZSxQU2UsdlNlLGJTZSxCU2UsRlNlLG1TZSxMU2UsQVNlLE1TZSxFU2UsUlNlKSl9O2NsYXNzIERPdHtjb25zdHJ1Y3RvcihhLGY9e30pe3RoaXMudGV4dD1hLHRoaXMubWV0YWRhdGE9Zix0aGlzLnR5cGU9ImdyYXBoIix0aGlzLnRleHQrPWAKYDtjb25zdCBwPUxlKCk7dHJ5e3RoaXMudHlwZT1oVyhhLHApfWNhdGNoKG0pe3RoaXMudHlwZT0iZXJyb3IiLHRoaXMuZGV0ZWN0RXJyb3I9bX1jb25zdCB2PXZkdCh0aGlzLnR5cGUpO1V0LmRlYnVnKCJUeXBlICIrdGhpcy50eXBlKSx0aGlzLmRiPXYuZGIsdGhpcy5yZW5kZXJlcj12LnJlbmRlcmVyLHRoaXMucGFyc2VyPXYucGFyc2VyLHRoaXMucGFyc2VyLnBhcnNlci55eT10aGlzLmRiLHRoaXMuaW5pdD12LmluaXQsdGhpcy5wYXJzZSgpfXBhcnNlKCl7dmFyIGYscCx2LG0sYjtpZih0aGlzLmRldGVjdEVycm9yKXRocm93IHRoaXMuZGV0ZWN0RXJyb3I7KHA9KGY9dGhpcy5kYikuY2xlYXIpPT1udWxsfHxwLmNhbGwoZik7Y29uc3QgYT1MZSgpOyh2PXRoaXMuaW5pdCk9PW51bGx8fHYuY2FsbCh0aGlzLGEpLHRoaXMubWV0YWRhdGEudGl0bGUmJigoYj0obT10aGlzLmRiKS5zZXREaWFncmFtVGl0bGUpPT1udWxsfHxiLmNhbGwobSx0aGlzLm1ldGFkYXRhLnRpdGxlKSksdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KX1hc3luYyByZW5kZXIoYSxmKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGEsZix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fWNvbnN0IG1kdD1hc3luYyhpLGE9e30pPT57Y29uc3QgZj1oVyhpLExlKCkpO3RyeXt2ZHQoZil9Y2F0Y2h7Y29uc3Qgdj10OWUoZik7aWYoIXYpdGhyb3cgbmV3IGFEdChgRGlhZ3JhbSAke2Z9IG5vdCBmb3VuZC5gKTtjb25zdHtpZDptLGRpYWdyYW06Yn09YXdhaXQgdigpO05XKG0sYil9cmV0dXJuIG5ldyBET3QoaSxhKX07bGV0IHlkdD1bXTtjb25zdCBXU2U9aT0+e3lkdC5wdXNoKGkpfSxLU2U9KCk9Pnt5ZHQuZm9yRWFjaChpPT57aSgpfSkseWR0PVtdfTt2YXIgWVNlPXhEdChPYmplY3Qua2V5cyxPYmplY3QpO2NvbnN0IFhTZT1ZU2U7dmFyIFFTZT1PYmplY3QucHJvdG90eXBlLFpTZT1RU2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gT090KGkpe2lmKCF2VyhpKSlyZXR1cm4gWFNlKGkpO3ZhciBhPVtdO2Zvcih2YXIgZiBpbiBPYmplY3QoaSkpWlNlLmNhbGwoaSxmKSYmZiE9ImNvbnN0cnVjdG9yIiYmYS5wdXNoKGYpO3JldHVybiBhfXZhciBKU2U9blQoSncsIkRhdGFWaWV3Iik7Y29uc3QgeGR0PUpTZTt2YXIgdEFlPW5UKEp3LCJQcm9taXNlIik7Y29uc3Qga2R0PXRBZTt2YXIgZUFlPW5UKEp3LCJTZXQiKTtjb25zdCBHQT1lQWU7dmFyIG5BZT1uVChKdywiV2Vha01hcCIpO2NvbnN0IEVkdD1uQWU7dmFyIE5PdD0iW29iamVjdCBNYXBdIixyQWU9IltvYmplY3QgT2JqZWN0XSIsUE90PSJbb2JqZWN0IFByb21pc2VdIixGT3Q9IltvYmplY3QgU2V0XSIsQk90PSJbb2JqZWN0IFdlYWtNYXBdIixST3Q9IltvYmplY3QgRGF0YVZpZXddIixpQWU9ZVQoeGR0KSxzQWU9ZVQoVU4pLGFBZT1lVChrZHQpLG9BZT1lVChHQSksY0FlPWVUKEVkdCksdVQ9dFQ7KHhkdCYmdVQobmV3IHhkdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Uk90fHxVTiYmdVQobmV3IFVOKSE9Tk90fHxrZHQmJnVUKGtkdC5yZXNvbHZlKCkpIT1QT3R8fEdBJiZ1VChuZXcgR0EpIT1GT3R8fEVkdCYmdVQobmV3IEVkdCkhPUJPdCkmJih1VD1mdW5jdGlvbihpKXt2YXIgYT10VChpKSxmPWE9PXJBZT9pLmNvbnN0cnVjdG9yOnZvaWQgMCxwPWY/ZVQoZik6IiI7aWYocClzd2l0Y2gocCl7Y2FzZSBpQWU6cmV0dXJuIFJPdDtjYXNlIHNBZTpyZXR1cm4gTk90O2Nhc2UgYUFlOnJldHVybiBQT3Q7Y2FzZSBvQWU6cmV0dXJuIEZPdDtjYXNlIGNBZTpyZXR1cm4gQk90fXJldHVybiBhfSk7Y29uc3QgVkE9dVQ7dmFyIHVBZT0iW29iamVjdCBNYXBdIixsQWU9IltvYmplY3QgU2V0XSIsaEFlPU9iamVjdC5wcm90b3R5cGUsZkFlPWhBZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB0UChpKXtpZihpPT1udWxsKXJldHVybiEwO2lmKGVrKGkpJiYoTWYoaSl8fHR5cGVvZiBpPT0ic3RyaW5nInx8dHlwZW9mIGkuc3BsaWNlPT0iZnVuY3Rpb24ifHxCQShpKXx8bVcoaSl8fEZBKGkpKSlyZXR1cm4haS5sZW5ndGg7dmFyIGE9VkEoaSk7aWYoYT09dUFlfHxhPT1sQWUpcmV0dXJuIWkuc2l6ZTtpZih2VyhpKSlyZXR1cm4hT090KGkpLmxlbmd0aDtmb3IodmFyIGYgaW4gaSlpZihmQWUuY2FsbChpLGYpKXJldHVybiExO3JldHVybiEwfWNvbnN0IGRBZT0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIGdBZShpLGEpe2kuYXR0cigicm9sZSIsZEFlKSxhIT09IiImJmkuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGEpfWZ1bmN0aW9uIHBBZShpLGEsZixwKXtpZihpLmluc2VydCE9PXZvaWQgMCl7aWYoZil7Y29uc3Qgdj1gY2hhcnQtZGVzYy0ke3B9YDtpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHYpLGkuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLHYpLnRleHQoZil9aWYoYSl7Y29uc3Qgdj1gY2hhcnQtdGl0bGUtJHtwfWA7aS5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHYpLGkuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIix2KS50ZXh0KGEpfX19Y29uc3QgYkFlPWk9PmkucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpLnRyaW1TdGFydCgpOy8qISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKi9mdW5jdGlvbiBqT3QoaSl7cmV0dXJuIHR5cGVvZiBpPiJ1Inx8aT09PW51bGx9ZnVuY3Rpb24gdkFlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsfWZ1bmN0aW9uIHdBZShpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9pOmpPdChpKT9bXTpbaV19ZnVuY3Rpb24gbUFlKGksYSl7dmFyIGYscCx2LG07aWYoYSlmb3IobT1PYmplY3Qua2V5cyhhKSxmPTAscD1tLmxlbmd0aDtmPHA7Zis9MSl2PW1bZl0saVt2XT1hW3ZdO3JldHVybiBpfWZ1bmN0aW9uIHlBZShpLGEpe3ZhciBmPSIiLHA7Zm9yKHA9MDtwPGE7cCs9MSlmKz1pO3JldHVybiBmfWZ1bmN0aW9uIHhBZShpKXtyZXR1cm4gaT09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvaX12YXIga0FlPWpPdCxFQWU9dkFlLFRBZT13QWUsQ0FlPXlBZSxfQWU9eEFlLFNBZT1tQWUsdWc9e2lzTm90aGluZzprQWUsaXNPYmplY3Q6RUFlLHRvQXJyYXk6VEFlLHJlcGVhdDpDQWUsaXNOZWdhdGl2ZVplcm86X0FlLGV4dGVuZDpTQWV9O2Z1bmN0aW9uICRPdChpLGEpe3ZhciBmPSIiLHA9aS5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gaS5tYXJrPyhpLm1hcmsubmFtZSYmKGYrPSdpbiAiJytpLm1hcmsubmFtZSsnIiAnKSxmKz0iKCIrKGkubWFyay5saW5lKzEpKyI6IisoaS5tYXJrLmNvbHVtbisxKSsiKSIsIWEmJmkubWFyay5zbmlwcGV0JiYoZis9YAoKYCtpLm1hcmsuc25pcHBldCkscCsiICIrZik6cH1mdW5jdGlvbiBlUChpLGEpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1pLHRoaXMubWFyaz1hLHRoaXMubWVzc2FnZT0kT3QodGhpcywhMSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1lUC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGVQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lUCxlUC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiKyRPdCh0aGlzLGEpfTt2YXIgeDU9ZVA7ZnVuY3Rpb24gVGR0KGksYSxmLHAsdil7dmFyIG09IiIsYj0iIixFPU1hdGguZmxvb3Iodi8yKS0xO3JldHVybiBwLWE+RSYmKG09IiAuLi4gIixhPXAtRSttLmxlbmd0aCksZi1wPkUmJihiPSIgLi4uIixmPXArRS1iLmxlbmd0aCkse3N0cjptK2kuc2xpY2UoYSxmKS5yZXBsYWNlKC9cdC9nLCLihpIiKStiLHBvczpwLWErbS5sZW5ndGh9fWZ1bmN0aW9uIENkdChpLGEpe3JldHVybiB1Zy5yZXBlYXQoIiAiLGEtaS5sZW5ndGgpK2l9ZnVuY3Rpb24gQUFlKGksYSl7aWYoYT1PYmplY3QuY3JlYXRlKGF8fG51bGwpLCFpLmJ1ZmZlcilyZXR1cm4gbnVsbDthLm1heExlbmd0aHx8KGEubWF4TGVuZ3RoPTc5KSx0eXBlb2YgYS5pbmRlbnQhPSJudW1iZXIiJiYoYS5pbmRlbnQ9MSksdHlwZW9mIGEubGluZXNCZWZvcmUhPSJudW1iZXIiJiYoYS5saW5lc0JlZm9yZT0zKSx0eXBlb2YgYS5saW5lc0FmdGVyIT0ibnVtYmVyIiYmKGEubGluZXNBZnRlcj0yKTtmb3IodmFyIGY9L1xyP1xufFxyfFwwL2cscD1bMF0sdj1bXSxtLGI9LTE7bT1mLmV4ZWMoaS5idWZmZXIpOyl2LnB1c2gobS5pbmRleCkscC5wdXNoKG0uaW5kZXgrbVswXS5sZW5ndGgpLGkucG9zaXRpb248PW0uaW5kZXgmJmI8MCYmKGI9cC5sZW5ndGgtMik7YjwwJiYoYj1wLmxlbmd0aC0xKTt2YXIgRT0iIixfLEwsTj1NYXRoLm1pbihpLmxpbmUrYS5saW5lc0FmdGVyLHYubGVuZ3RoKS50b1N0cmluZygpLmxlbmd0aCxCPWEubWF4TGVuZ3RoLShhLmluZGVudCtOKzMpO2ZvcihfPTE7Xzw9YS5saW5lc0JlZm9yZSYmIShiLV88MCk7XysrKUw9VGR0KGkuYnVmZmVyLHBbYi1fXSx2W2ItX10saS5wb3NpdGlvbi0ocFtiXS1wW2ItX10pLEIpLEU9dWcucmVwZWF0KCIgIixhLmluZGVudCkrQ2R0KChpLmxpbmUtXysxKS50b1N0cmluZygpLE4pKyIgfCAiK0wuc3RyK2AKYCtFO2ZvcihMPVRkdChpLmJ1ZmZlcixwW2JdLHZbYl0saS5wb3NpdGlvbixCKSxFKz11Zy5yZXBlYXQoIiAiLGEuaW5kZW50KStDZHQoKGkubGluZSsxKS50b1N0cmluZygpLE4pKyIgfCAiK0wuc3RyK2AKYCxFKz11Zy5yZXBlYXQoIi0iLGEuaW5kZW50K04rMytMLnBvcykrYF4KYCxfPTE7Xzw9YS5saW5lc0FmdGVyJiYhKGIrXz49di5sZW5ndGgpO18rKylMPVRkdChpLmJ1ZmZlcixwW2IrX10sdltiK19dLGkucG9zaXRpb24tKHBbYl0tcFtiK19dKSxCKSxFKz11Zy5yZXBlYXQoIiAiLGEuaW5kZW50KStDZHQoKGkubGluZStfKzEpLnRvU3RyaW5nKCksTikrIiB8ICIrTC5zdHIrYApgO3JldHVybiBFLnJlcGxhY2UoL1xuJC8sIiIpfXZhciBMQWU9QUFlLE1BZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLElBZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2Z1bmN0aW9uIERBZShpKXt2YXIgYT17fTtyZXR1cm4gaSE9PW51bGwmJk9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZil7aVtmXS5mb3JFYWNoKGZ1bmN0aW9uKHApe2FbU3RyaW5nKHApXT1mfSl9KSxhfWZ1bmN0aW9uIE9BZShpLGEpe2lmKGE9YXx8e30sT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihmKXtpZihNQWUuaW5kZXhPZihmKT09PS0xKXRocm93IG5ldyB4NSgnVW5rbm93biBvcHRpb24gIicrZisnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytpKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMub3B0aW9ucz1hLHRoaXMudGFnPWksdGhpcy5raW5kPWEua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9YS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1hLmNvbnN0cnVjdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGZ9LHRoaXMuaW5zdGFuY2VPZj1hLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9YS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9YS5yZXByZXNlbnR8fG51bGwsdGhpcy5yZXByZXNlbnROYW1lPWEucmVwcmVzZW50TmFtZXx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT1hLmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLm11bHRpPWEubXVsdGl8fCExLHRoaXMuc3R5bGVBbGlhc2VzPURBZShhLnN0eWxlQWxpYXNlc3x8bnVsbCksSUFlLmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyB4NSgnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2krJyIgWUFNTCB0eXBlLicpfXZhciBtMD1PQWU7ZnVuY3Rpb24gek90KGksYSl7dmFyIGY9W107cmV0dXJuIGlbYV0uZm9yRWFjaChmdW5jdGlvbihwKXt2YXIgdj1mLmxlbmd0aDtmLmZvckVhY2goZnVuY3Rpb24obSxiKXttLnRhZz09PXAudGFnJiZtLmtpbmQ9PT1wLmtpbmQmJm0ubXVsdGk9PT1wLm11bHRpJiYodj1iKX0pLGZbdl09cH0pLGZ9ZnVuY3Rpb24gTkFlKCl7dmFyIGk9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9LG11bHRpOntzY2FsYXI6W10sc2VxdWVuY2U6W10sbWFwcGluZzpbXSxmYWxsYmFjazpbXX19LGEsZjtmdW5jdGlvbiBwKHYpe3YubXVsdGk/KGkubXVsdGlbdi5raW5kXS5wdXNoKHYpLGkubXVsdGkuZmFsbGJhY2sucHVzaCh2KSk6aVt2LmtpbmRdW3YudGFnXT1pLmZhbGxiYWNrW3YudGFnXT12fWZvcihhPTAsZj1hcmd1bWVudHMubGVuZ3RoO2E8ZjthKz0xKWFyZ3VtZW50c1thXS5mb3JFYWNoKHApO3JldHVybiBpfWZ1bmN0aW9uIF9kdChpKXtyZXR1cm4gdGhpcy5leHRlbmQoaSl9X2R0LnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGY9W10scD1bXTtpZihhIGluc3RhbmNlb2YgbTApcC5wdXNoKGEpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSlwPXAuY29uY2F0KGEpO2Vsc2UgaWYoYSYmKEFycmF5LmlzQXJyYXkoYS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoYS5leHBsaWNpdCkpKWEuaW1wbGljaXQmJihmPWYuY29uY2F0KGEuaW1wbGljaXQpKSxhLmV4cGxpY2l0JiYocD1wLmNvbmNhdChhLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgeDUoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtmLmZvckVhY2goZnVuY3Rpb24obSl7aWYoIShtIGluc3RhbmNlb2YgbTApKXRocm93IG5ldyB4NSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKG0ubG9hZEtpbmQmJm0ubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgeDUoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKG0ubXVsdGkpdGhyb3cgbmV3IHg1KCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSkscC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKCEobSBpbnN0YW5jZW9mIG0wKSl0aHJvdyBuZXcgeDUoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciB2PU9iamVjdC5jcmVhdGUoX2R0LnByb3RvdHlwZSk7cmV0dXJuIHYuaW1wbGljaXQ9KHRoaXMuaW1wbGljaXR8fFtdKS5jb25jYXQoZiksdi5leHBsaWNpdD0odGhpcy5leHBsaWNpdHx8W10pLmNvbmNhdChwKSx2LmNvbXBpbGVkSW1wbGljaXQ9ek90KHYsImltcGxpY2l0Iiksdi5jb21waWxlZEV4cGxpY2l0PXpPdCh2LCJleHBsaWNpdCIpLHYuY29tcGlsZWRUeXBlTWFwPU5BZSh2LmNvbXBpbGVkSW1wbGljaXQsdi5jb21waWxlZEV4cGxpY2l0KSx2fTt2YXIgUEFlPV9kdCxGQWU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aToiIn19KSxCQWU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOltdfX0pLFJBZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX19KSxqQWU9bmV3IFBBZSh7ZXhwbGljaXQ6W0ZBZSxCQWUsUkFlXX0pO2Z1bmN0aW9uICRBZShpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgYT1pLmxlbmd0aDtyZXR1cm4gYT09PTEmJmk9PT0ifiJ8fGE9PT00JiYoaT09PSJudWxsInx8aT09PSJOdWxsInx8aT09PSJOVUxMIil9ZnVuY3Rpb24gekFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcUFlKGkpe3JldHVybiBpPT09bnVsbH12YXIgSEFlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTokQWUsY29uc3RydWN0OnpBZSxwcmVkaWNhdGU6cUFlLHJlcHJlc2VudDp7Y2Fub25pY2FsOmZ1bmN0aW9uKCl7cmV0dXJuIn4ifSxsb3dlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LHVwcGVyY2FzZTpmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiIifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7ZnVuY3Rpb24gR0FlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoO3JldHVybiBhPT09NCYmKGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSIpfHxhPT09NSYmKGk9PT0iZmFsc2UifHxpPT09IkZhbHNlInx8aT09PSJGQUxTRSIpfWZ1bmN0aW9uIFZBZShpKXtyZXR1cm4gaT09PSJ0cnVlInx8aT09PSJUcnVlInx8aT09PSJUUlVFIn1mdW5jdGlvbiBVQWUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IEJvb2xlYW5dIn12YXIgV0FlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpHQWUsY29uc3RydWN0OlZBZSxwcmVkaWNhdGU6VUFlLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIEtBZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fHw2NTw9aSYmaTw9NzB8fDk3PD1pJiZpPD0xMDJ9ZnVuY3Rpb24gWUFlKGkpe3JldHVybiA0ODw9aSYmaTw9NTV9ZnVuY3Rpb24gWEFlKGkpe3JldHVybiA0ODw9aSYmaTw9NTd9ZnVuY3Rpb24gUUFlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoLGY9MCxwPSExLHY7aWYoIWEpcmV0dXJuITE7aWYodj1pW2ZdLCh2PT09Ii0ifHx2PT09IisiKSYmKHY9aVsrK2ZdKSx2PT09IjAiKXtpZihmKzE9PT1hKXJldHVybiEwO2lmKHY9aVsrK2ZdLHY9PT0iYiIpe2ZvcihmKys7ZjxhO2YrKylpZih2PWlbZl0sdiE9PSJfIil7aWYodiE9PSIwIiYmdiE9PSIxIilyZXR1cm4hMTtwPSEwfXJldHVybiBwJiZ2IT09Il8ifWlmKHY9PT0ieCIpe2ZvcihmKys7ZjxhO2YrKylpZih2PWlbZl0sdiE9PSJfIil7aWYoIUtBZShpLmNoYXJDb2RlQXQoZikpKXJldHVybiExO3A9ITB9cmV0dXJuIHAmJnYhPT0iXyJ9aWYodj09PSJvIil7Zm9yKGYrKztmPGE7ZisrKWlmKHY9aVtmXSx2IT09Il8iKXtpZighWUFlKGkuY2hhckNvZGVBdChmKSkpcmV0dXJuITE7cD0hMH1yZXR1cm4gcCYmdiE9PSJfIn19aWYodj09PSJfIilyZXR1cm4hMTtmb3IoO2Y8YTtmKyspaWYodj1pW2ZdLHYhPT0iXyIpe2lmKCFYQWUoaS5jaGFyQ29kZUF0KGYpKSlyZXR1cm4hMTtwPSEwfXJldHVybiEoIXB8fHY9PT0iXyIpfWZ1bmN0aW9uIFpBZShpKXt2YXIgYT1pLGY9MSxwO2lmKGEuaW5kZXhPZigiXyIpIT09LTEmJihhPWEucmVwbGFjZSgvXy9nLCIiKSkscD1hWzBdLChwPT09Ii0ifHxwPT09IisiKSYmKHA9PT0iLSImJihmPS0xKSxhPWEuc2xpY2UoMSkscD1hWzBdKSxhPT09IjAiKXJldHVybiAwO2lmKHA9PT0iMCIpe2lmKGFbMV09PT0iYiIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSwyKTtpZihhWzFdPT09IngiKXJldHVybiBmKnBhcnNlSW50KGEuc2xpY2UoMiksMTYpO2lmKGFbMV09PT0ibyIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSw4KX1yZXR1cm4gZipwYXJzZUludChhLDEwKX1mdW5jdGlvbiBKQWUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiZpJTE9PT0wJiYhdWcuaXNOZWdhdGl2ZVplcm8oaSl9dmFyIHRMZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpRQWUsY29uc3RydWN0OlpBZSxwcmVkaWNhdGU6SkFlLHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIwYiIraS50b1N0cmluZygyKToiLTBiIitpLnRvU3RyaW5nKDIpLnNsaWNlKDEpfSxvY3RhbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMG8iK2kudG9TdHJpbmcoOCk6Ii0wbyIraS50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIweCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4IitpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLGVMZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7ZnVuY3Rpb24gbkxlKGkpe3JldHVybiEoaT09PW51bGx8fCFlTGUudGVzdChpKXx8aVtpLmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gckxlKGkpe3ZhciBhLGY7cmV0dXJuIGE9aS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksZj1hWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGFbMF0pPj0wJiYoYT1hLnNsaWNlKDEpKSxhPT09Ii5pbmYiP2Y9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6YT09PSIubmFuIj9OYU46ZipwYXJzZUZsb2F0KGEsMTApfXZhciBpTGU9L15bLStdP1swLTldK2UvO2Z1bmN0aW9uIHNMZShpLGEpe3ZhciBmO2lmKGlzTmFOKGkpKXN3aXRjaChhKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKGEpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09aSlzd2l0Y2goYSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZih1Zy5pc05lZ2F0aXZlWmVybyhpKSlyZXR1cm4iLTAuMCI7cmV0dXJuIGY9aS50b1N0cmluZygxMCksaUxlLnRlc3QoZik/Zi5yZXBsYWNlKCJlIiwiLmUiKTpmfWZ1bmN0aW9uIGFMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgTnVtYmVyXSImJihpJTEhPT0wfHx1Zy5pc05lZ2F0aXZlWmVybyhpKSl9dmFyIG9MZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOm5MZSxjb25zdHJ1Y3Q6ckxlLHByZWRpY2F0ZTphTGUscmVwcmVzZW50OnNMZSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KSxxT3Q9akFlLmV4dGVuZCh7aW1wbGljaXQ6W0hBZSxXQWUsdExlLG9MZV19KSxjTGU9cU90LEhPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLEdPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO2Z1bmN0aW9uIHVMZShpKXtyZXR1cm4gaT09PW51bGw/ITE6SE90LmV4ZWMoaSkhPT1udWxsfHxHT3QuZXhlYyhpKSE9PW51bGx9ZnVuY3Rpb24gbExlKGkpe3ZhciBhLGYscCx2LG0sYixFLF89MCxMPW51bGwsTixCLGo7aWYoYT1IT3QuZXhlYyhpKSxhPT09bnVsbCYmKGE9R090LmV4ZWMoaSkpLGE9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYoZj0rYVsxXSxwPSthWzJdLTEsdj0rYVszXSwhYVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZixwLHYpKTtpZihtPSthWzRdLGI9K2FbNV0sRT0rYVs2XSxhWzddKXtmb3IoXz1hWzddLnNsaWNlKDAsMyk7Xy5sZW5ndGg8MzspXys9IjAiO189K199cmV0dXJuIGFbOV0mJihOPSthWzEwXSxCPSsoYVsxMV18fDApLEw9KE4qNjArQikqNmU0LGFbOV09PT0iLSImJihMPS1MKSksaj1uZXcgRGF0ZShEYXRlLlVUQyhmLHAsdixtLGIsRSxfKSksTCYmai5zZXRUaW1lKGouZ2V0VGltZSgpLUwpLGp9ZnVuY3Rpb24gaExlKGkpe3JldHVybiBpLnRvSVNPU3RyaW5nKCl9dmFyIGZMZT1uZXcgbTAoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTp1TGUsY29uc3RydWN0OmxMZSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50OmhMZX0pO2Z1bmN0aW9uIGRMZShpKXtyZXR1cm4gaT09PSI8PCJ8fGk9PT1udWxsfXZhciBnTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpkTGV9KSxTZHQ9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtmdW5jdGlvbiBwTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGEsZixwPTAsdj1pLmxlbmd0aCxtPVNkdDtmb3IoZj0wO2Y8djtmKyspaWYoYT1tLmluZGV4T2YoaS5jaGFyQXQoZikpLCEoYT42NCkpe2lmKGE8MClyZXR1cm4hMTtwKz02fXJldHVybiBwJTg9PT0wfWZ1bmN0aW9uIGJMZShpKXt2YXIgYSxmLHA9aS5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLHY9cC5sZW5ndGgsbT1TZHQsYj0wLEU9W107Zm9yKGE9MDthPHY7YSsrKWElND09PTAmJmEmJihFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpLGI9Yjw8NnxtLmluZGV4T2YocC5jaGFyQXQoYSkpO3JldHVybiBmPXYlNCo2LGY9PT0wPyhFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpOmY9PT0xOD8oRS5wdXNoKGI+PjEwJjI1NSksRS5wdXNoKGI+PjImMjU1KSk6Zj09PTEyJiZFLnB1c2goYj4+NCYyNTUpLG5ldyBVaW50OEFycmF5KEUpfWZ1bmN0aW9uIHZMZShpKXt2YXIgYT0iIixmPTAscCx2LG09aS5sZW5ndGgsYj1TZHQ7Zm9yKHA9MDtwPG07cCsrKXAlMz09PTAmJnAmJihhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pLGY9KGY8PDgpK2lbcF07cmV0dXJuIHY9bSUzLHY9PT0wPyhhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pOnY9PT0yPyhhKz1iW2Y+PjEwJjYzXSxhKz1iW2Y+PjQmNjNdLGErPWJbZjw8MiY2M10sYSs9Yls2NF0pOnY9PT0xJiYoYSs9YltmPj4yJjYzXSxhKz1iW2Y8PDQmNjNdLGErPWJbNjRdLGErPWJbNjRdKSxhfWZ1bmN0aW9uIHdMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgVWludDhBcnJheV0ifXZhciBtTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cExlLGNvbnN0cnVjdDpiTGUscHJlZGljYXRlOndMZSxyZXByZXNlbnQ6dkxlfSkseUxlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkseExlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24ga0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhPVtdLGYscCx2LG0sYixFPWk7Zm9yKGY9MCxwPUUubGVuZ3RoO2Y8cDtmKz0xKXtpZih2PUVbZl0sYj0hMSx4TGUuY2FsbCh2KSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihtIGluIHYpaWYoeUxlLmNhbGwodixtKSlpZighYiliPSEwO2Vsc2UgcmV0dXJuITE7aWYoIWIpcmV0dXJuITE7aWYoYS5pbmRleE9mKG0pPT09LTEpYS5wdXNoKG0pO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gRUxlKGkpe3JldHVybiBpIT09bnVsbD9pOltdfXZhciBUTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6a0xlLGNvbnN0cnVjdDpFTGV9KSxDTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBfTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGEsZixwLHYsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSl7aWYocD1iW2FdLENMZS5jYWxsKHApIT09IltvYmplY3QgT2JqZWN0XSJ8fCh2PU9iamVjdC5rZXlzKHApLHYubGVuZ3RoIT09MSkpcmV0dXJuITE7bVthXT1bdlswXSxwW3ZbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBTTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuW107dmFyIGEsZixwLHYsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSlwPWJbYV0sdj1PYmplY3Qua2V5cyhwKSxtW2FdPVt2WzBdLHBbdlswXV1dO3JldHVybiBtfXZhciBBTGU9bmV3IG0wKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOl9MZSxjb25zdHJ1Y3Q6U0xlfSksTExlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTUxlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhLGY9aTtmb3IoYSBpbiBmKWlmKExMZS5jYWxsKGYsYSkmJmZbYV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIElMZShpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX12YXIgRExlPW5ldyBtMCgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTpNTGUsY29uc3RydWN0OklMZX0pLE9MZT1jTGUuZXh0ZW5kKHtpbXBsaWNpdDpbZkxlLGdMZV0sZXhwbGljaXQ6W21MZSxUTGUsQUxlLERMZV19KSxyaz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFBXPTEsVk90PTIsVU90PTMsRlc9NCxBZHQ9MSxOTGU9MixXT3Q9MyxQTGU9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxGTGU9L1tceDg1XHUyMDI4XHUyMDI5XS8sQkxlPS9bLFxbXF1ce1x9XS8sS090PS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxZT3Q9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtmdW5jdGlvbiBYT3QoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKX1mdW5jdGlvbiBmMyhpKXtyZXR1cm4gaT09PTEwfHxpPT09MTN9ZnVuY3Rpb24gbFQoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ9ZnVuY3Rpb24gbHAoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ8fGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIFVBKGkpe3JldHVybiBpPT09NDR8fGk9PT05MXx8aT09PTkzfHxpPT09MTIzfHxpPT09MTI1fWZ1bmN0aW9uIFJMZShpKXt2YXIgYTtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6KGE9aXwzMiw5Nzw9YSYmYTw9MTAyP2EtOTcrMTA6LTEpfWZ1bmN0aW9uIGpMZShpKXtyZXR1cm4gaT09PTEyMD8yOmk9PT0xMTc/NDppPT09ODU/ODowfWZ1bmN0aW9uICRMZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6LTF9ZnVuY3Rpb24gUU90KGkpe3JldHVybiBpPT09NDg/IlwwIjppPT09OTc/Ilx4MDciOmk9PT05OD8iXGIiOmk9PT0xMTZ8fGk9PT05PyIJIjppPT09MTEwP2AKYDppPT09MTE4PyJcdiI6aT09PTEwMj8iXGYiOmk9PT0xMTQ/IlxyIjppPT09MTAxPyJceDFCIjppPT09MzI/IiAiOmk9PT0zND8nIic6aT09PTQ3PyIvIjppPT09OTI/IlxcIjppPT09Nzg/IsKFIjppPT09OTU/IsKgIjppPT09NzY/Ilx1MjAyOCI6aT09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIHpMZShpKXtyZXR1cm4gaTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKChpLTY1NTM2Pj4xMCkrNTUyOTYsKGktNjU1MzYmMTAyMykrNTYzMjApfWZvcih2YXIgWk90PW5ldyBBcnJheSgyNTYpLEpPdD1uZXcgQXJyYXkoMjU2KSxXQT0wO1dBPDI1NjtXQSsrKVpPdFtXQV09UU90KFdBKT8xOjAsSk90W1dBXT1RT3QoV0EpO2Z1bmN0aW9uIHFMZShpLGEpe3RoaXMuaW5wdXQ9aSx0aGlzLmZpbGVuYW1lPWEuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9YS5zY2hlbWF8fE9MZSx0aGlzLm9uV2FybmluZz1hLm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT1hLmxlZ2FjeXx8ITEsdGhpcy5qc29uPWEuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj1hLmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9aS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5maXJzdFRhYkluTGluZT0tMSx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiB0TnQoaSxhKXt2YXIgZj17bmFtZTppLmZpbGVuYW1lLGJ1ZmZlcjppLmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOmkucG9zaXRpb24sbGluZTppLmxpbmUsY29sdW1uOmkucG9zaXRpb24taS5saW5lU3RhcnR9O3JldHVybiBmLnNuaXBwZXQ9TEFlKGYpLG5ldyB4NShhLGYpfWZ1bmN0aW9uIF9zKGksYSl7dGhyb3cgdE50KGksYSl9ZnVuY3Rpb24gQlcoaSxhKXtpLm9uV2FybmluZyYmaS5vbldhcm5pbmcuY2FsbChudWxsLHROdChpLGEpKX12YXIgZU50PXtZQU1MOmZ1bmN0aW9uKGEsZixwKXt2YXIgdixtLGI7YS52ZXJzaW9uIT09bnVsbCYmX3MoYSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIikscC5sZW5ndGghPT0xJiZfcyhhLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iiksdj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMocFswXSksdj09PW51bGwmJl9zKGEsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksbT1wYXJzZUludCh2WzFdLDEwKSxiPXBhcnNlSW50KHZbMl0sMTApLG0hPT0xJiZfcyhhLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGEudmVyc2lvbj1wWzBdLGEuY2hlY2tMaW5lQnJlYWtzPWI8MixiIT09MSYmYiE9PTImJkJXKGEsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGEsZixwKXt2YXIgdixtO3AubGVuZ3RoIT09MiYmX3MoYSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHY9cFswXSxtPXBbMV0sS090LnRlc3Qodil8fF9zKGEsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIikscmsuY2FsbChhLnRhZ01hcCx2KSYmX3MoYSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicrdisnIiB0YWcgaGFuZGxlJyksWU90LnRlc3QobSl8fF9zKGEsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpO3RyeXttPWRlY29kZVVSSUNvbXBvbmVudChtKX1jYXRjaHtfcyhhLCJ0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogIittKX1hLnRhZ01hcFt2XT1tfX07ZnVuY3Rpb24gaWsoaSxhLGYscCl7dmFyIHYsbSxiLEU7aWYoYTxmKXtpZihFPWkuaW5wdXQuc2xpY2UoYSxmKSxwKWZvcih2PTAsbT1FLmxlbmd0aDt2PG07dis9MSliPUUuY2hhckNvZGVBdCh2KSxiPT09OXx8MzI8PWImJmI8PTExMTQxMTF8fF9zKGksImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBQTGUudGVzdChFKSYmX3MoaSwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTtpLnJlc3VsdCs9RX19ZnVuY3Rpb24gbk50KGksYSxmLHApe3ZhciB2LG0sYixFO2Zvcih1Zy5pc09iamVjdChmKXx8X3MoaSwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSx2PU9iamVjdC5rZXlzKGYpLGI9MCxFPXYubGVuZ3RoO2I8RTtiKz0xKW09dltiXSxyay5jYWxsKGEsbSl8fChhW21dPWZbbV0scFttXT0hMCl9ZnVuY3Rpb24gS0EoaSxhLGYscCx2LG0sYixFLF8pe3ZhciBMLE47aWYoQXJyYXkuaXNBcnJheSh2KSlmb3Iodj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2KSxMPTAsTj12Lmxlbmd0aDtMPE47TCs9MSlBcnJheS5pc0FycmF5KHZbTF0pJiZfcyhpLCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIHY9PSJvYmplY3QiJiZYT3QodltMXSk9PT0iW29iamVjdCBPYmplY3RdIiYmKHZbTF09IltvYmplY3QgT2JqZWN0XSIpO2lmKHR5cGVvZiB2PT0ib2JqZWN0IiYmWE90KHYpPT09IltvYmplY3QgT2JqZWN0XSImJih2PSJbb2JqZWN0IE9iamVjdF0iKSx2PVN0cmluZyh2KSxhPT09bnVsbCYmKGE9e30pLHA9PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkobSkpZm9yKEw9MCxOPW0ubGVuZ3RoO0w8TjtMKz0xKW5OdChpLGEsbVtMXSxmKTtlbHNlIG5OdChpLGEsbSxmKTtlbHNlIWkuanNvbiYmIXJrLmNhbGwoZix2KSYmcmsuY2FsbChhLHYpJiYoaS5saW5lPWJ8fGkubGluZSxpLmxpbmVTdGFydD1FfHxpLmxpbmVTdGFydCxpLnBvc2l0aW9uPV98fGkucG9zaXRpb24sX3MoaSwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSx2PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pOmFbdl09bSxkZWxldGUgZlt2XTtyZXR1cm4gYX1mdW5jdGlvbiBMZHQoaSl7dmFyIGE7YT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYT09PTEwP2kucG9zaXRpb24rKzphPT09MTM/KGkucG9zaXRpb24rKyxpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT0xMCYmaS5wb3NpdGlvbisrKTpfcyhpLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxpLmxpbmUrPTEsaS5saW5lU3RhcnQ9aS5wb3NpdGlvbixpLmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIERmKGksYSxmKXtmb3IodmFyIHA9MCx2PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt2IT09MDspe2Zvcig7bFQodik7KXY9PT05JiZpLmZpcnN0VGFiSW5MaW5lPT09LTEmJihpLmZpcnN0VGFiSW5MaW5lPWkucG9zaXRpb24pLHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYSYmdj09PTM1KWRvIHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUodiE9PTEwJiZ2IT09MTMmJnYhPT0wKTtpZihmMyh2KSlmb3IoTGR0KGkpLHY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHArKyxpLmxpbmVJbmRlbnQ9MDt2PT09MzI7KWkubGluZUluZGVudCsrLHY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gZiE9PS0xJiZwIT09MCYmaS5saW5lSW5kZW50PGYmJkJXKGksImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHB9ZnVuY3Rpb24gUlcoaSl7dmFyIGE9aS5wb3NpdGlvbixmO3JldHVybiBmPWkuaW5wdXQuY2hhckNvZGVBdChhKSwhISgoZj09PTQ1fHxmPT09NDYpJiZmPT09aS5pbnB1dC5jaGFyQ29kZUF0KGErMSkmJmY9PT1pLmlucHV0LmNoYXJDb2RlQXQoYSsyKSYmKGErPTMsZj1pLmlucHV0LmNoYXJDb2RlQXQoYSksZj09PTB8fGxwKGYpKSl9ZnVuY3Rpb24gTWR0KGksYSl7YT09PTE/aS5yZXN1bHQrPSIgIjphPjEmJihpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxhLTEpKX1mdW5jdGlvbiBITGUoaSxhLGYpe3ZhciBwLHYsbSxiLEUsXyxMLE4sQj1pLmtpbmQsaj1pLnJlc3VsdCxSO2lmKFI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGxwKFIpfHxVQShSKXx8Uj09PTM1fHxSPT09Mzh8fFI9PT00Mnx8Uj09PTMzfHxSPT09MTI0fHxSPT09NjJ8fFI9PT0zOXx8Uj09PTM0fHxSPT09Mzd8fFI9PT02NHx8Uj09PTk2fHwoUj09PTYzfHxSPT09NDUpJiYodj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxscCh2KXx8ZiYmVUEodikpKXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsbT1iPWkucG9zaXRpb24sRT0hMTtSIT09MDspe2lmKFI9PT01OCl7aWYodj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxscCh2KXx8ZiYmVUEodikpYnJlYWt9ZWxzZSBpZihSPT09MzUpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24tMSksbHAocCkpYnJlYWt9ZWxzZXtpZihpLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJlJXKGkpfHxmJiZVQShSKSlicmVhaztpZihmMyhSKSlpZihfPWkubGluZSxMPWkubGluZVN0YXJ0LE49aS5saW5lSW5kZW50LERmKGksITEsLTEpLGkubGluZUluZGVudD49YSl7RT0hMCxSPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1lbHNle2kucG9zaXRpb249YixpLmxpbmU9XyxpLmxpbmVTdGFydD1MLGkubGluZUluZGVudD1OO2JyZWFrfX1FJiYoaWsoaSxtLGIsITEpLE1kdChpLGkubGluZS1fKSxtPWI9aS5wb3NpdGlvbixFPSExKSxsVChSKXx8KGI9aS5wb3NpdGlvbisxKSxSPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pfXJldHVybiBpayhpLG0sYiwhMSksaS5yZXN1bHQ/ITA6KGkua2luZD1CLGkucmVzdWx0PWosITEpfWZ1bmN0aW9uIEdMZShpLGEpe3ZhciBmLHAsdjtpZihmPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxmIT09MzkpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixpLnBvc2l0aW9uKysscD12PWkucG9zaXRpb247KGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTA7KWlmKGY9PT0zOSlpZihpayhpLHAsaS5wb3NpdGlvbiwhMCksZj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxmPT09MzkpcD1pLnBvc2l0aW9uLGkucG9zaXRpb24rKyx2PWkucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIGYzKGYpPyhpayhpLHAsdiwhMCksTWR0KGksRGYoaSwhMSxhKSkscD12PWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmUlcoaSk/X3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyx2PWkucG9zaXRpb24pO19zKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBWTGUoaSxhKXt2YXIgZixwLHYsbSxiLEU7aWYoRT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksRSE9PTM0KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGY9cD1pLnBvc2l0aW9uOyhFPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOyl7aWYoRT09PTM0KXJldHVybiBpayhpLGYsaS5wb3NpdGlvbiwhMCksaS5wb3NpdGlvbisrLCEwO2lmKEU9PT05Mil7aWYoaWsoaSxmLGkucG9zaXRpb24sITApLEU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZjMoRSkpRGYoaSwhMSxhKTtlbHNlIGlmKEU8MjU2JiZaT3RbRV0paS5yZXN1bHQrPUpPdFtFXSxpLnBvc2l0aW9uKys7ZWxzZSBpZigoYj1qTGUoRSkpPjApe2Zvcih2PWIsbT0wO3Y+MDt2LS0pRT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSwoYj1STGUoRSkpPj0wP209KG08PDQpK2I6X3MoaSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7aS5yZXN1bHQrPXpMZShtKSxpLnBvc2l0aW9uKyt9ZWxzZSBfcyhpLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO2Y9cD1pLnBvc2l0aW9ufWVsc2UgZjMoRSk/KGlrKGksZixwLCEwKSxNZHQoaSxEZihpLCExLGEpKSxmPXA9aS5wb3NpdGlvbik6aS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZSVyhpKT9fcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTooaS5wb3NpdGlvbisrLHA9aS5wb3NpdGlvbil9X3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIFVMZShpLGEpe3ZhciBmPSEwLHAsdixtLGI9aS50YWcsRSxfPWkuYW5jaG9yLEwsTixCLGosUix6PU9iamVjdC5jcmVhdGUobnVsbCksSyxpdCxzdCx1dDtpZih1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT05MSlOPTkzLFI9ITEsRT1bXTtlbHNlIGlmKHV0PT09MTIzKU49MTI1LFI9ITAsRT17fTtlbHNlIHJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09RSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7dXQhPT0wOyl7aWYoRGYoaSwhMCxhKSx1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT1OKXJldHVybiBpLnBvc2l0aW9uKyssaS50YWc9YixpLmFuY2hvcj1fLGkua2luZD1SPyJtYXBwaW5nIjoic2VxdWVuY2UiLGkucmVzdWx0PUUsITA7Zj91dD09PTQ0JiZfcyhpLCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6X3MoaSwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSxpdD1LPXN0PW51bGwsQj1qPSExLHV0PT09NjMmJihMPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGxwKEwpJiYoQj1qPSEwLGkucG9zaXRpb24rKyxEZihpLCEwLGEpKSkscD1pLmxpbmUsdj1pLmxpbmVTdGFydCxtPWkucG9zaXRpb24sWUEoaSxhLFBXLCExLCEwKSxpdD1pLnRhZyxLPWkucmVzdWx0LERmKGksITAsYSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChqfHxpLmxpbmU9PT1wKSYmdXQ9PT01OCYmKEI9ITAsdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksRGYoaSwhMCxhKSxZQShpLGEsUFcsITEsITApLHN0PWkucmVzdWx0KSxSP0tBKGksRSx6LGl0LEssc3QscCx2LG0pOkI/RS5wdXNoKEtBKGksbnVsbCx6LGl0LEssc3QscCx2LG0pKTpFLnB1c2goSyksRGYoaSwhMCxhKSx1dD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdXQ9PT00ND8oZj0hMCx1dD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Zj0hMX1fcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIFdMZShpLGEpe3ZhciBmLHAsdj1BZHQsbT0hMSxiPSExLEU9YSxfPTAsTD0hMSxOLEI7aWYoQj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksQj09PTEyNClwPSExO2Vsc2UgaWYoQj09PTYyKXA9ITA7ZWxzZSByZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiO0IhPT0wOylpZihCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLEI9PT00M3x8Qj09PTQ1KUFkdD09PXY/dj1CPT09NDM/V090Ok5MZTpfcyhpLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChOPSRMZShCKSk+PTApTj09PTA/X3MoaSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmI/X3MoaSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooRT1hK04tMSxiPSEwKTtlbHNlIGJyZWFrO2lmKGxUKEIpKXtkbyBCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGxUKEIpKTtpZihCPT09MzUpZG8gQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSghZjMoQikmJkIhPT0wKX1mb3IoO0IhPT0wOyl7Zm9yKExkdChpKSxpLmxpbmVJbmRlbnQ9MCxCPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTsoIWJ8fGkubGluZUluZGVudDxFKSYmQj09PTMyOylpLmxpbmVJbmRlbnQrKyxCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKCFiJiZpLmxpbmVJbmRlbnQ+RSYmKEU9aS5saW5lSW5kZW50KSxmMyhCKSl7XysrO2NvbnRpbnVlfWlmKGkubGluZUluZGVudDxFKXt2PT09V090P2kucmVzdWx0Kz11Zy5yZXBlYXQoYApgLG0/MStfOl8pOnY9PT1BZHQmJm0mJihpLnJlc3VsdCs9YApgKTticmVha31mb3IocD9sVChCKT8oTD0hMCxpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxtPzErXzpfKSk6TD8oTD0hMSxpLnJlc3VsdCs9dWcucmVwZWF0KGAKYCxfKzEpKTpfPT09MD9tJiYoaS5yZXN1bHQrPSIgIik6aS5yZXN1bHQrPXVnLnJlcGVhdChgCmAsXyk6aS5yZXN1bHQrPXVnLnJlcGVhdChgCmAsbT8xK186XyksbT0hMCxiPSEwLF89MCxmPWkucG9zaXRpb247IWYzKEIpJiZCIT09MDspQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpayhpLGYsaS5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gck50KGksYSl7dmFyIGYscD1pLnRhZyx2PWkuYW5jaG9yLG09W10sYixFPSExLF87aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09bSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7XyE9PTAmJihpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsX3MoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKF8hPT00NXx8KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksIWxwKGIpKSkpOyl7aWYoRT0hMCxpLnBvc2l0aW9uKyssRGYoaSwhMCwtMSkmJmkubGluZUluZGVudDw9YSl7bS5wdXNoKG51bGwpLF89aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWlmKGY9aS5saW5lLFlBKGksYSxVT3QsITEsITApLG0ucHVzaChpLnJlc3VsdCksRGYoaSwhMCwtMSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksKGkubGluZT09PWZ8fGkubGluZUluZGVudD5hKSYmXyE9PTApX3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBFPyhpLnRhZz1wLGkuYW5jaG9yPXYsaS5raW5kPSJzZXF1ZW5jZSIsaS5yZXN1bHQ9bSwhMCk6ITF9ZnVuY3Rpb24gS0xlKGksYSxmKXt2YXIgcCx2LG0sYixFLF8sTD1pLnRhZyxOPWkuYW5jaG9yLEI9e30saj1PYmplY3QuY3JlYXRlKG51bGwpLFI9bnVsbCx6PW51bGwsSz1udWxsLGl0PSExLHN0PSExLHV0O2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPUIpLHV0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt1dCE9PTA7KXtpZighaXQmJmkuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKGkucG9zaXRpb249aS5maXJzdFRhYkluTGluZSxfcyhpLCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksbT1pLmxpbmUsKHV0PT09NjN8fHV0PT09NTgpJiZscChwKSl1dD09PTYzPyhpdCYmKEtBKGksQixqLFIseixudWxsLGIsRSxfKSxSPXo9Sz1udWxsKSxzdD0hMCxpdD0hMCx2PSEwKTppdD8oaXQ9ITEsdj0hMCk6X3MoaSwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLGkucG9zaXRpb24rPTEsdXQ9cDtlbHNle2lmKGI9aS5saW5lLEU9aS5saW5lU3RhcnQsXz1pLnBvc2l0aW9uLCFZQShpLGYsVk90LCExLCEwKSlicmVhaztpZihpLmxpbmU9PT1tKXtmb3IodXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2xUKHV0KTspdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYodXQ9PT01OCl1dD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxscCh1dCl8fF9zKGksImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLGl0JiYoS0EoaSxCLGosUix6LG51bGwsYixFLF8pLFI9ej1LPW51bGwpLHN0PSEwLGl0PSExLHY9ITEsUj1pLnRhZyx6PWkucmVzdWx0O2Vsc2UgaWYoc3QpX3MoaSwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiBpLnRhZz1MLGkuYW5jaG9yPU4sITB9ZWxzZSBpZihzdClfcyhpLCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTtlbHNlIHJldHVybiBpLnRhZz1MLGkuYW5jaG9yPU4sITB9aWYoKGkubGluZT09PW18fGkubGluZUluZGVudD5hKSYmKGl0JiYoYj1pLmxpbmUsRT1pLmxpbmVTdGFydCxfPWkucG9zaXRpb24pLFlBKGksYSxGVywhMCx2KSYmKGl0P3o9aS5yZXN1bHQ6Sz1pLnJlc3VsdCksaXR8fChLQShpLEIsaixSLHosSyxiLEUsXyksUj16PUs9bnVsbCksRGYoaSwhMCwtMSksdXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSwoaS5saW5lPT09bXx8aS5saW5lSW5kZW50PmEpJiZ1dCE9PTApX3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoaS5saW5lSW5kZW50PGEpYnJlYWt9cmV0dXJuIGl0JiZLQShpLEIsaixSLHosbnVsbCxiLEUsXyksc3QmJihpLnRhZz1MLGkuYW5jaG9yPU4saS5raW5kPSJtYXBwaW5nIixpLnJlc3VsdD1CKSxzdH1mdW5jdGlvbiBZTGUoaSl7dmFyIGEsZj0hMSxwPSExLHYsbSxiO2lmKGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGIhPT0zMylyZXR1cm4hMTtpZihpLnRhZyE9PW51bGwmJl9zKGksImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxiPT09NjA/KGY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Yj09PTMzPyhwPSEwLHY9IiEhIixiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTp2PSIhIixhPWkucG9zaXRpb24sZil7ZG8gYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShiIT09MCYmYiE9PTYyKTtpLnBvc2l0aW9uPGkubGVuZ3RoPyhtPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTpfcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtiIT09MCYmIWxwKGIpOyliPT09MzMmJihwP19zKGksInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToodj1pLmlucHV0LnNsaWNlKGEtMSxpLnBvc2l0aW9uKzEpLEtPdC50ZXN0KHYpfHxfcyhpLCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLHA9ITAsYT1pLnBvc2l0aW9uKzEpKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO209aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLEJMZS50ZXN0KG0pJiZfcyhpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1tJiYhWU90LnRlc3QobSkmJl9zKGksInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIittKTt0cnl7bT1kZWNvZGVVUklDb21wb25lbnQobSl9Y2F0Y2h7X3MoaSwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK20pfXJldHVybiBmP2kudGFnPW06cmsuY2FsbChpLnRhZ01hcCx2KT9pLnRhZz1pLnRhZ01hcFt2XSttOnY9PT0iISI/aS50YWc9IiEiK206dj09PSIhISI/aS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrbTpfcyhpLCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicrdisnIicpLCEwfWZ1bmN0aW9uIFhMZShpKXt2YXIgYSxmO2lmKGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGYhPT0zOClyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiZfcyhpLCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxmPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtmIT09MCYmIWxwKGYpJiYhVUEoZik7KWY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZfcyhpLCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksaS5hbmNob3I9aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLCEwfWZ1bmN0aW9uIFFMZShpKXt2YXIgYSxmLHA7aWYocD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikscCE9PTQyKXJldHVybiExO2ZvcihwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtwIT09MCYmIWxwKHApJiYhVUEocCk7KXA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZfcyhpLCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxmPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxyay5jYWxsKGkuYW5jaG9yTWFwLGYpfHxfcyhpLCd1bmlkZW50aWZpZWQgYWxpYXMgIicrZisnIicpLGkucmVzdWx0PWkuYW5jaG9yTWFwW2ZdLERmKGksITAsLTEpLCEwfWZ1bmN0aW9uIFlBKGksYSxmLHAsdil7dmFyIG0sYixFLF89MSxMPSExLE49ITEsQixqLFIseixLLGl0O2lmKGkubGlzdGVuZXIhPT1udWxsJiZpLmxpc3RlbmVyKCJvcGVuIixpKSxpLnRhZz1udWxsLGkuYW5jaG9yPW51bGwsaS5raW5kPW51bGwsaS5yZXN1bHQ9bnVsbCxtPWI9RT1GVz09PWZ8fFVPdD09PWYscCYmRGYoaSwhMCwtMSkmJihMPSEwLGkubGluZUluZGVudD5hP189MTppLmxpbmVJbmRlbnQ9PT1hP189MDppLmxpbmVJbmRlbnQ8YSYmKF89LTEpKSxfPT09MSlmb3IoO1lMZShpKXx8WExlKGkpOylEZihpLCEwLC0xKT8oTD0hMCxFPW0saS5saW5lSW5kZW50PmE/Xz0xOmkubGluZUluZGVudD09PWE/Xz0wOmkubGluZUluZGVudDxhJiYoXz0tMSkpOkU9ITE7aWYoRSYmKEU9THx8diksKF89PT0xfHxGVz09PWYpJiYoUFc9PT1mfHxWT3Q9PT1mP0s9YTpLPWErMSxpdD1pLnBvc2l0aW9uLWkubGluZVN0YXJ0LF89PT0xP0UmJihyTnQoaSxpdCl8fEtMZShpLGl0LEspKXx8VUxlKGksSyk/Tj0hMDooYiYmV0xlKGksSyl8fEdMZShpLEspfHxWTGUoaSxLKT9OPSEwOlFMZShpKT8oTj0hMCwoaS50YWchPT1udWxsfHxpLmFuY2hvciE9PW51bGwpJiZfcyhpLCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpITGUoaSxLLFBXPT09ZikmJihOPSEwLGkudGFnPT09bnVsbCYmKGkudGFnPSI/IikpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOl89PT0wJiYoTj1FJiZyTnQoaSxpdCkpKSxpLnRhZz09PW51bGwpaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KTtlbHNlIGlmKGkudGFnPT09Ij8iKXtmb3IoaS5yZXN1bHQhPT1udWxsJiZpLmtpbmQhPT0ic2NhbGFyIiYmX3MoaSwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK2kua2luZCsnIicpLEI9MCxqPWkuaW1wbGljaXRUeXBlcy5sZW5ndGg7QjxqO0IrPTEpaWYoej1pLmltcGxpY2l0VHlwZXNbQl0sei5yZXNvbHZlKGkucmVzdWx0KSl7aS5yZXN1bHQ9ei5jb25zdHJ1Y3QoaS5yZXN1bHQpLGkudGFnPXoudGFnLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYoaS50YWchPT0iISIpe2lmKHJrLmNhbGwoaS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl0saS50YWcpKXo9aS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl1baS50YWddO2Vsc2UgZm9yKHo9bnVsbCxSPWkudHlwZU1hcC5tdWx0aVtpLmtpbmR8fCJmYWxsYmFjayJdLEI9MCxqPVIubGVuZ3RoO0I8ajtCKz0xKWlmKGkudGFnLnNsaWNlKDAsUltCXS50YWcubGVuZ3RoKT09PVJbQl0udGFnKXt6PVJbQl07YnJlYWt9enx8X3MoaSwidW5rbm93biB0YWcgITwiK2kudGFnKyI+IiksaS5yZXN1bHQhPT1udWxsJiZ6LmtpbmQhPT1pLmtpbmQmJl9zKGksInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IitpLnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyt6LmtpbmQrJyIsIG5vdCAiJytpLmtpbmQrJyInKSx6LnJlc29sdmUoaS5yZXN1bHQsaS50YWcpPyhpLnJlc3VsdD16LmNvbnN0cnVjdChpLnJlc3VsdCxpLnRhZyksaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KSk6X3MoaSwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK2kudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiBpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigiY2xvc2UiLGkpLGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsfHxOfWZ1bmN0aW9uIFpMZShpKXt2YXIgYT1pLnBvc2l0aW9uLGYscCx2LG09ITEsYjtmb3IoaS52ZXJzaW9uPW51bGwsaS5jaGVja0xpbmVCcmVha3M9aS5sZWdhY3ksaS50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSxpLmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wJiYoRGYoaSwhMCwtMSksYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksIShpLmxpbmVJbmRlbnQ+MHx8YiE9PTM3KSk7KXtmb3IobT0hMCxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGY9aS5wb3NpdGlvbjtiIT09MCYmIWxwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2ZvcihwPWkuaW5wdXQuc2xpY2UoZixpLnBvc2l0aW9uKSx2PVtdLHAubGVuZ3RoPDEmJl9zKGksImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO2IhPT0wOyl7Zm9yKDtsVChiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZihiPT09MzUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJiFmMyhiKSk7YnJlYWt9aWYoZjMoYikpYnJlYWs7Zm9yKGY9aS5wb3NpdGlvbjtiIT09MCYmIWxwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3YucHVzaChpLmlucHV0LnNsaWNlKGYsaS5wb3NpdGlvbikpfWIhPT0wJiZMZHQoaSkscmsuY2FsbChlTnQscCk/ZU50W3BdKGkscCx2KTpCVyhpLCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytwKyciJyl9aWYoRGYoaSwhMCwtMSksaS5saW5lSW5kZW50PT09MCYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzIpPT09NDU/KGkucG9zaXRpb24rPTMsRGYoaSwhMCwtMSkpOm0mJl9zKGksImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxZQShpLGkubGluZUluZGVudC0xLEZXLCExLCEwKSxEZihpLCEwLC0xKSxpLmNoZWNrTGluZUJyZWFrcyYmRkxlLnRlc3QoaS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pKSYmQlcoaSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksaS5kb2N1bWVudHMucHVzaChpLnJlc3VsdCksaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZSVyhpKSl7aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDYmJihpLnBvc2l0aW9uKz0zLERmKGksITAsLTEpKTtyZXR1cm59aWYoaS5wb3NpdGlvbjxpLmxlbmd0aC0xKV9zKGksImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gaU50KGksYSl7aT1TdHJpbmcoaSksYT1hfHx7fSxpLmxlbmd0aCE9PTAmJihpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMCYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTMmJihpKz1gCmApLGkuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoaT1pLnNsaWNlKDEpKSk7dmFyIGY9bmV3IHFMZShpLGEpLHA9aS5pbmRleE9mKCJcMCIpO2ZvcihwIT09LTEmJihmLnBvc2l0aW9uPXAsX3MoZiwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLGYuaW5wdXQrPSJcMCI7Zi5pbnB1dC5jaGFyQ29kZUF0KGYucG9zaXRpb24pPT09MzI7KWYubGluZUluZGVudCs9MSxmLnBvc2l0aW9uKz0xO2Zvcig7Zi5wb3NpdGlvbjxmLmxlbmd0aC0xOylaTGUoZik7cmV0dXJuIGYuZG9jdW1lbnRzfWZ1bmN0aW9uIEpMZShpLGEsZil7YSE9PW51bGwmJnR5cGVvZiBhPT0ib2JqZWN0IiYmdHlwZW9mIGY+InUiJiYoZj1hLGE9bnVsbCk7dmFyIHA9aU50KGksZik7aWYodHlwZW9mIGEhPSJmdW5jdGlvbiIpcmV0dXJuIHA7Zm9yKHZhciB2PTAsbT1wLmxlbmd0aDt2PG07dis9MSlhKHBbdl0pfWZ1bmN0aW9uIHRNZShpLGEpe3ZhciBmPWlOdChpLGEpO2lmKGYubGVuZ3RoIT09MCl7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdO3Rocm93IG5ldyB4NSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19dmFyIGVNZT1KTGUsbk1lPXRNZSxyTWU9e2xvYWRBbGw6ZU1lLGxvYWQ6bk1lfSxpTWU9cU90LHNNZT1yTWUubG9hZDtmdW5jdGlvbiBhTWUoaSl7Y29uc3QgYT1pLm1hdGNoKHNEdCk7aWYoIWEpcmV0dXJue3RleHQ6aSxtZXRhZGF0YTp7fX07bGV0IGY9c01lKGFbMV0se3NjaGVtYTppTWV9KT8/e307Zj10eXBlb2YgZj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGYpP2Y6e307Y29uc3QgcD17fTtyZXR1cm4gZi5kaXNwbGF5TW9kZSYmKHAuZGlzcGxheU1vZGU9Zi5kaXNwbGF5TW9kZS50b1N0cmluZygpKSxmLnRpdGxlJiYocC50aXRsZT1mLnRpdGxlLnRvU3RyaW5nKCkpLGYuY29uZmlnJiYocC5jb25maWc9Zi5jb25maWcpLHt0ZXh0Omkuc2xpY2UoYVswXS5sZW5ndGgpLG1ldGFkYXRhOnB9fWNvbnN0IG9NZT1pPT5pLnJlcGxhY2UoL1xyXG4/L2csYApgKS5yZXBsYWNlKC88KFx3KykoW14+XSopPi9nLChhLGYscCk9PiI8IitmK3AucmVwbGFjZSgvPSIoW14iXSopIi9nLCI9JyQxJyIpKyI+IiksY01lPWk9Pntjb25zdHt0ZXh0OmEsbWV0YWRhdGE6Zn09YU1lKGkpLHtkaXNwbGF5TW9kZTpwLHRpdGxlOnYsY29uZmlnOm09e319PWY7cmV0dXJuIHAmJihtLmdhbnR0fHwobS5nYW50dD17fSksbS5nYW50dC5kaXNwbGF5TW9kZT1wKSx7dGl0bGU6dixjb25maWc6bSx0ZXh0OmF9fSx1TWU9aT0+e2NvbnN0IGE9JGEuZGV0ZWN0SW5pdChpKT8/e30sZj0kYS5kZXRlY3REaXJlY3RpdmUoaSwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2Eud3JhcD1mLnNvbWUoKHt0eXBlOnB9KT0+e30pOihmPT1udWxsP3ZvaWQgMDpmLnR5cGUpPT09IndyYXAiJiYoYS53cmFwPSEwKSx7dGV4dDpPX2UoaSksZGlyZWN0aXZlOmF9fTtmdW5jdGlvbiBsTWUoaSl7Y29uc3QgYT1vTWUoaSksZj1jTWUoYSkscD11TWUoZi50ZXh0KSx2PWlkdChmLmNvbmZpZyxwLmRpcmVjdGl2ZSk7cmV0dXJuIGk9YkFlKHAudGV4dCkse2NvZGU6aSx0aXRsZTpmLnRpdGxlLGNvbmZpZzp2fX1jb25zdCBoTWU9NWU0LGZNZT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIsZE1lPSJzYW5kYm94IixnTWU9Imxvb3NlIixwTWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixiTWU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHZNZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsd01lPSIxMDAlIixtTWU9IjEwMCUiLHlNZT0iYm9yZGVyOjA7bWFyZ2luOjA7Iix4TWU9Im1hcmdpbjowIixrTWU9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLEVNZT0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLFRNZT1bImZvcmVpZ25vYmplY3QiXSxDTWU9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIHNOdChpKXtjb25zdCBhPWxNZShpKTtyZXR1cm4gSVcoKSxmU2UoYS5jb25maWc/P3t9KSxhfWFzeW5jIGZ1bmN0aW9uIF9NZShpLGEpe3dkdCgpLGk9c050KGkpLmNvZGU7dHJ5e2F3YWl0IG1kdChpKX1jYXRjaChmKXtpZihhIT1udWxsJiZhLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IGZ9cmV0dXJuITB9Y29uc3QgU01lPWZ1bmN0aW9uKGkpe2xldCBhPWk7cmV0dXJuIGE9YS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZyxmdW5jdGlvbihmKXtyZXR1cm4gZi5zdWJzdHJpbmcoMCxmLmxlbmd0aC0xKX0pLGE9YS5yZXBsYWNlKC8jXHcrOy9nLGZ1bmN0aW9uKGYpe2NvbnN0IHA9Zi5zdWJzdHJpbmcoMSxmLmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QocCk/Iu+sgsKwwrAiK3ArIsK2w58iOiLvrILCsCIrcCsiwrbDnyJ9KSxhfSxuUD1mdW5jdGlvbihpKXtyZXR1cm4gaS5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSxhTnQ9KGksYSxmPVtdKT0+YAouJHtpfSAke2F9IHsgJHtmLmpvaW4oIiAhaW1wb3J0YW50OyAiKX0gIWltcG9ydGFudDsgfWAsQU1lPShpLGE9e30pPT57dmFyIHA7bGV0IGY9IiI7aWYoaS50aGVtZUNTUyE9PXZvaWQgMCYmKGYrPWAKJHtpLnRoZW1lQ1NTfWApLGkuZm9udEZhbWlseSE9PXZvaWQgMCYmKGYrPWAKOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fX1gKSxpLmFsdEZvbnRGYW1pbHkhPT12b2lkIDAmJihmKz1gCjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHtpLmFsdEZvbnRGYW1pbHl9fWApLCF0UChhKSl7Y29uc3QgRT1pLmh0bWxMYWJlbHN8fCgocD1pLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnAuaHRtbExhYmVscyk/WyI+ICoiLCJzcGFuIl06WyJyZWN0IiwicG9seWdvbiIsImVsbGlwc2UiLCJjaXJjbGUiLCJwYXRoIl07Zm9yKGNvbnN0IF8gaW4gYSl7Y29uc3QgTD1hW19dO3RQKEwuc3R5bGVzKXx8RS5mb3JFYWNoKE49PntmKz1hTnQoTC5pZCxOLEwuc3R5bGVzKX0pLHRQKEwudGV4dFN0eWxlcyl8fChmKz1hTnQoTC5pZCwidHNwYW4iLEwudGV4dFN0eWxlcykpfX1yZXR1cm4gZn0sTE1lPShpLGEsZixwKT0+e2NvbnN0IHY9QU1lKGksZiksbT16U2UoYSx2LGkudGhlbWVWYXJpYWJsZXMpO3JldHVybiBoZHQoYVNlKGAke3B9eyR7bX19YCksY1NlKX0sTU1lPShpPSIiLGEsZik9PntsZXQgcD1pO3JldHVybiFmJiYhYSYmKHA9cC5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKFtcZCsuLzo9P0EtWmEtei1dKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJykpLHA9blAocCkscD1wLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSxwfSxJTWU9KGk9IiIsYSk9Pnt2YXIgdixtO2NvbnN0IGY9KG09KHY9YT09bnVsbD92b2lkIDA6YS52aWV3Qm94KT09bnVsbD92b2lkIDA6di5iYXNlVmFsKSE9bnVsbCYmbS5oZWlnaHQ/YS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6bU1lLHA9YnRvYSgnPGJvZHkgc3R5bGU9IicreE1lKyciPicraSsiPC9ib2R5PiIpO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke3dNZX07aGVpZ2h0OiR7Zn07JHt5TWV9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2Jhc2U2NCwke3B9IiBzYW5kYm94PSIke2tNZX0iPgogICR7RU1lfQo8L2lmcmFtZT5gfSxvTnQ9KGksYSxmLHAsdik9Pntjb25zdCBtPWkuYXBwZW5kKCJkaXYiKTttLmF0dHIoImlkIixmKSxwJiZtLmF0dHIoInN0eWxlIixwKTtjb25zdCBiPW0uYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsYSkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLHBNZSk7cmV0dXJuIHYmJmIuYXR0cigieG1sbnM6eGxpbmsiLHYpLGIuYXBwZW5kKCJnIiksaX07ZnVuY3Rpb24gY050KGksYSl7cmV0dXJuIGkuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsYSkuYXR0cigic3R5bGUiLCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyIpLmF0dHIoInNhbmRib3giLCIiKX1jb25zdCBETWU9KGksYSxmLHApPT57dmFyIHYsbSxiOyh2PWkuZ2V0RWxlbWVudEJ5SWQoYSkpPT1udWxsfHx2LnJlbW92ZSgpLChtPWkuZ2V0RWxlbWVudEJ5SWQoZikpPT1udWxsfHxtLnJlbW92ZSgpLChiPWkuZ2V0RWxlbWVudEJ5SWQocCkpPT1udWxsfHxiLnJlbW92ZSgpfSxPTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe3ZhciBudCxPdCxOdCxxdCxDdCxaO3dkdCgpO2NvbnN0IHA9c050KGEpO2E9cC5jb2RlO2NvbnN0IHY9TGUoKTtVdC5kZWJ1Zyh2KSxhLmxlbmd0aD4oKHY9PW51bGw/dm9pZCAwOnYubWF4VGV4dFNpemUpPz9oTWUpJiYoYT1mTWUpO2NvbnN0IG09IiMiK2ksYj0iaSIraSxFPSIjIitiLF89ImQiK2ksTD0iIyIrXztsZXQgTj15cigiYm9keSIpO2NvbnN0IEI9di5zZWN1cml0eUxldmVsPT09ZE1lLGo9di5zZWN1cml0eUxldmVsPT09Z01lLFI9di5mb250RmFtaWx5O2lmKGYhPT12b2lkIDApe2lmKGYmJihmLmlubmVySFRNTD0iIiksQil7Y29uc3QgVHQ9Y050KHlyKGYpLGIpO049eXIoVHQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksTi5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBOPXlyKGYpO29OdChOLGksXyxgZm9udC1mYW1pbHk6ICR7Un1gLGJNZSl9ZWxzZXtpZihETWUoZG9jdW1lbnQsaSxfLGIpLEIpe2NvbnN0IFR0PWNOdCh5cigiYm9keSIpLGIpO049eXIoVHQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksTi5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBOPXlyKCJib2R5Iik7b050KE4saSxfKX1hPVNNZShhKTtsZXQgeixLO3RyeXt6PWF3YWl0IG1kdChhLHt0aXRsZTpwLnRpdGxlfSl9Y2F0Y2goVHQpe3o9bmV3IERPdCgiZXJyb3IiKSxLPVR0fWNvbnN0IGl0PU4uc2VsZWN0KEwpLm5vZGUoKSxzdD16LnR5cGUsdXQ9aXQuZmlyc3RDaGlsZCxidD11dC5maXJzdENoaWxkLG10PShPdD0obnQ9ei5yZW5kZXJlcikuZ2V0Q2xhc3Nlcyk9PW51bGw/dm9pZCAwOk90LmNhbGwobnQsYSx6KSx5dD1MTWUodixzdCxtdCxtKSxkdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2R0LmlubmVySFRNTD15dCx1dC5pbnNlcnRCZWZvcmUoZHQsYnQpO3RyeXthd2FpdCB6LnJlbmRlcmVyLmRyYXcoYSxpLGVPdCx6KX1jYXRjaChUdCl7dGhyb3cgT1NlLmRyYXcoYSxpLGVPdCksVHR9Y29uc3QgaHQ9Ti5zZWxlY3QoYCR7TH0gc3ZnYCksd3Q9KHF0PShOdD16LmRiKS5nZXRBY2NUaXRsZSk9PW51bGw/dm9pZCAwOnF0LmNhbGwoTnQpLFg9KFo9KEN0PXouZGIpLmdldEFjY0Rlc2NyaXB0aW9uKT09bnVsbD92b2lkIDA6Wi5jYWxsKEN0KTtQTWUoc3QsaHQsd3QsWCksTi5zZWxlY3QoYFtpZD0iJHtpfSJdYCkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIix2TWUpO2xldCBwdD1OLnNlbGVjdChMKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFV0LmRlYnVnKCJjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZSIsdi5hcnJvd01hcmtlckFic29sdXRlKSxwdD1NTWUocHQsQixzMSh2LmFycm93TWFya2VyQWJzb2x1dGUpKSxCKXtjb25zdCBUdD1OLnNlbGVjdChMKyIgc3ZnIikubm9kZSgpO3B0PUlNZShwdCxUdCl9ZWxzZSBqfHwocHQ9ZVcuc2FuaXRpemUocHQse0FERF9UQUdTOlRNZSxBRERfQVRUUjpDTWV9KSk7aWYoS1NlKCksSyl0aHJvdyBLO2NvbnN0IHh0PXlyKEI/RTpMKS5ub2RlKCk7cmV0dXJuIHh0JiYicmVtb3ZlImluIHh0JiZ4dC5yZW1vdmUoKSx7c3ZnOnB0LGJpbmRGdW5jdGlvbnM6ei5kYi5iaW5kRnVuY3Rpb25zfX07ZnVuY3Rpb24gTk1lKGk9e30pe3ZhciBmO2khPW51bGwmJmkuZm9udEZhbWlseSYmISgoZj1pLnRoZW1lVmFyaWFibGVzKSE9bnVsbCYmZi5mb250RmFtaWx5KSYmKGkudGhlbWVWYXJpYWJsZXN8fChpLnRoZW1lVmFyaWFibGVzPXt9KSxpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxsU2UoaSksaSE9bnVsbCYmaS50aGVtZSYmaS50aGVtZSBpbiB3NT9pLnRoZW1lVmFyaWFibGVzPXc1W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpOmkmJihpLnRoZW1lVmFyaWFibGVzPXc1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpO2NvbnN0IGE9dHlwZW9mIGk9PSJvYmplY3QiP3VTZShpKTpyT3QoKTtqZnQoYS5sb2dMZXZlbCksd2R0KCl9ZnVuY3Rpb24gUE1lKGksYSxmLHApe2dBZShhLGkpLHBBZShhLGYscCxhLmF0dHIoImlkIikpfWNvbnN0IGhUPU9iamVjdC5mcmVlemUoe3JlbmRlcjpPTWUscGFyc2U6X01lLGdldERpYWdyYW1Gcm9tVGV4dDptZHQsaW5pdGlhbGl6ZTpOTWUsZ2V0Q29uZmlnOkxlLHNldENvbmZpZzppT3QsZ2V0U2l0ZUNvbmZpZzpyT3QsdXBkYXRlU2l0ZUNvbmZpZzpoU2UscmVzZXQ6KCk9PntJVygpfSxnbG9iYWxSZXNldDooKT0+e0lXKG9UKX0sZGVmYXVsdENvbmZpZzpvVH0pO2pmdChMZSgpLmxvZ0xldmVsKSxJVyhMZSgpKTtjb25zdCBGTWU9YXN5bmMoKT0+e1V0LmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBhPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoREEpLm1hcChhc3luYyhbZix7ZGV0ZWN0b3I6cCxsb2FkZXI6dn1dKT0+e2lmKHYpdHJ5e3ZkdChmKX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOkV9PWF3YWl0IHYoKTtOVyhFLGIscCl9Y2F0Y2goYil7dGhyb3cgVXQuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtmfS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIERBW2ZdLGJ9fX0pKSkuZmlsdGVyKGY9PmYuc3RhdHVzPT09InJlamVjdGVkIik7aWYoYS5sZW5ndGg+MCl7VXQuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IGYgb2YgYSlVdC5lcnJvcihmKTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7YS5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxCTWU9KGksYSxmKT0+e1V0Lndhcm4oaSksVUR0KGkpPyhmJiZmKGkuc3RyLGkuaGFzaCksYS5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKTooZiYmZihpKSxpIGluc3RhbmNlb2YgRXJyb3ImJmEucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSx1TnQ9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFJNZShpKX1jYXRjaChhKXtpZihVRHQoYSkmJlV0LmVycm9yKGEuc3RyKSxPYi5wYXJzZUVycm9yJiZPYi5wYXJzZUVycm9yKGEpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFV0LmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxhfX0sUk1lPWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOmEsbm9kZXM6Zn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IHA9aFQuZ2V0Q29uZmlnKCk7VXQuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCB2O2lmKGYpdj1mO2Vsc2UgaWYoYSl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1V0LmRlYnVnKGBGb3VuZCAke3YubGVuZ3RofSBkaWFncmFtc2ApLChwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkKSksaFQudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6cD09bnVsbD92b2lkIDA6cC5zdGFydE9uTG9hZH0pKTtjb25zdCBtPW5ldyAkYS5Jbml0SURHZW5lcmF0b3IocC5kZXRlcm1pbmlzdGljSWRzLHAuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgRT1bXTtmb3IoY29uc3QgXyBvZiBBcnJheS5mcm9tKHYpKXtVdC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitfLmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihfLmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtfLnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgTD1gbWVybWFpZC0ke20ubmV4dCgpfWA7Yj1fLmlubmVySFRNTCxiPXdBKCRhLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgTj0kYS5kZXRlY3RJbml0KGIpO04mJlV0LmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsTik7dHJ5e2NvbnN0e3N2ZzpCLGJpbmRGdW5jdGlvbnM6an09YXdhaXQgZE50KEwsYixfKTtfLmlubmVySFRNTD1CLGkmJmF3YWl0IGkoTCksaiYmaihfKX1jYXRjaChCKXtCTWUoQixFLE9iLnBhcnNlRXJyb3IpfX1pZihFLmxlbmd0aD4wKXRocm93IEVbMF19LGxOdD1mdW5jdGlvbihpKXtoVC5pbml0aWFsaXplKGkpfSxqTWU9YXN5bmMgZnVuY3Rpb24oaSxhLGYpe1V0Lndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJmxOdChpKTtjb25zdCBwPXtwb3N0UmVuZGVyQ2FsbGJhY2s6ZixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBhPT0ic3RyaW5nIj9wLnF1ZXJ5U2VsZWN0b3I9YTphJiYoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3Aubm9kZXM9W2FdOnAubm9kZXM9YSksYXdhaXQgdU50KHApfSwkTWU9YXN5bmMoaSx7bGF6eUxvYWQ6YT0hMH09e30pPT57b0R0KC4uLmkpLGE9PT0hMSYmYXdhaXQgRk1lKCl9LGhOdD1mdW5jdGlvbigpe2lmKE9iLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1oVC5nZXRDb25maWcoKTtpJiZPYi5ydW4oKS5jYXRjaChhPT5VdC5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsYSkpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaE50LCExKX1jb25zdCB6TWU9ZnVuY3Rpb24oaSl7T2IucGFyc2VFcnJvcj1pfSxqVz1bXTtsZXQgSWR0PSExO2NvbnN0IGZOdD1hc3luYygpPT57aWYoIUlkdCl7Zm9yKElkdD0hMDtqVy5sZW5ndGg+MDspe2NvbnN0IGk9alcuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2goYSl7VXQuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsYSl9fUlkdD0hMX19LHFNZT1hc3luYyhpLGEpPT5uZXcgUHJvbWlzZSgoZixwKT0+e2NvbnN0IHY9KCk9Pm5ldyBQcm9taXNlKChtLGIpPT57aFQucGFyc2UoaSxhKS50aGVuKEU9PnttKEUpLGYoRSl9LEU9Pnt2YXIgXztVdC5lcnJvcigiRXJyb3IgcGFyc2luZyIsRSksKF89T2IucGFyc2VFcnJvcik9PW51bGx8fF8uY2FsbChPYixFKSxiKEUpLHAoRSl9KX0pO2pXLnB1c2godiksZk50KCkuY2F0Y2gocCl9KSxkTnQ9KGksYSxmKT0+bmV3IFByb21pc2UoKHAsdik9Pntjb25zdCBtPSgpPT5uZXcgUHJvbWlzZSgoYixFKT0+e2hULnJlbmRlcihpLGEsZikudGhlbihfPT57YihfKSxwKF8pfSxfPT57dmFyIEw7VXQuZXJyb3IoIkVycm9yIHBhcnNpbmciLF8pLChMPU9iLnBhcnNlRXJyb3IpPT1udWxsfHxMLmNhbGwoT2IsXyksRShfKSx2KF8pfSl9KTtqVy5wdXNoKG0pLGZOdCgpLmNhdGNoKHYpfSksT2I9e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6aFQscGFyc2U6cU1lLHJlbmRlcjpkTnQsaW5pdDpqTWUscnVuOnVOdCxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6JE1lLGluaXRpYWxpemU6bE50LHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6aE50LHNldFBhcnNlRXJyb3JIYW5kbGVyOnpNZSxkZXRlY3RUeXBlOmhXfTt2YXIgJFc9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihkcyxEcixucixkaSl7Zm9yKG5yPW5yfHx7fSxkaT1kcy5sZW5ndGg7ZGktLTtucltkc1tkaV1dPURyKTtyZXR1cm4gbnJ9LGE9WzEsMjRdLGY9WzEsMjVdLHA9WzEsMjZdLHY9WzEsMjddLG09WzEsMjhdLGI9WzEsNjNdLEU9WzEsNjRdLF89WzEsNjVdLEw9WzEsNjZdLE49WzEsNjddLEI9WzEsNjhdLGo9WzEsNjldLFI9WzEsMjldLHo9WzEsMzBdLEs9WzEsMzFdLGl0PVsxLDMyXSxzdD1bMSwzM10sdXQ9WzEsMzRdLGJ0PVsxLDM1XSxtdD1bMSwzNl0seXQ9WzEsMzddLGR0PVsxLDM4XSxodD1bMSwzOV0sd3Q9WzEsNDBdLFg9WzEsNDFdLHB0PVsxLDQyXSxVPVsxLDQzXSx4dD1bMSw0NF0sbnQ9WzEsNDVdLE90PVsxLDQ2XSxOdD1bMSw0N10scXQ9WzEsNDhdLEN0PVsxLDUwXSxaPVsxLDUxXSxUdD1bMSw1Ml0sSHQ9WzEsNTNdLEl0PVsxLDU0XSxGdD1bMSw1NV0sa2U9WzEsNTZdLHBuPVsxLDU3XSxNZT1bMSw1OF0sdmU9WzEsNTldLEdlPVsxLDYwXSxLZT1bMTQsNDJdLHdlPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sX2U9WzEyLDE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSwkdD1bMSw4Ml0scmU9WzEsODNdLGllPVsxLDg0XSxPZT1bMSw4NV0sb2U9WzEyLDE0LDQyXSxOZT1bMTIsMTQsMzMsNDJdLG1lPVsxMiwxNCwzMyw0Miw3Niw3Nyw3OSw4MF0sY249WzEyLDMzXSxsaT1bMzQsMzYsMzcsMzgsMzksNDAsNDEsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLHlhPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihEcixucixkaSxFZSxZbixIZSxUaSl7dmFyIGduPUhlLmxlbmd0aC0xO3N3aXRjaChZbil7Y2FzZSAzOkVlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDQ6RWUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTpFZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OkVlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOkVlLnNldEM0VHlwZShIZVtnbi0zXSk7YnJlYWs7Y2FzZSAxOTpFZS5zZXRUaXRsZShIZVtnbl0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9SGVbZ25dLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOkVlLnNldEFjY0Rlc2NyaXB0aW9uKEhlW2duXS5zdWJzdHJpbmcoMTUpKSx0aGlzLiQ9SGVbZ25dLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9SGVbZ25dLnRyaW0oKSxFZS5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp0aGlzLiQ9SGVbZ25dLnRyaW0oKSxFZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpIZVtnbl0uc3BsaWNlKDIsMCwiRU5URVJQUklTRSIpLEVlLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzA6RWUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSAzMTpIZVtnbl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksRWUuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzI6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDMzOkVlLmFkZERlcGxveW1lbnROb2RlKCJub2RlTCIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgMzQ6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSAzNTpFZS5wb3BCb3VuZGFyeVBhcnNlU3RhY2soKTticmVhaztjYXNlIDM5OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJwZXJzb24iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQwOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9wZXJzb24iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQxOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQyOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fZGIiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQzOkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW1fcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ0OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ1OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fZGIiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ2OkVlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW1fcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDQ3OkVlLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA0ODpFZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNDk6RWUuYWRkQ29udGFpbmVyKCJjb250YWluZXJfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDUwOkVlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1MTpFZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTI6RWUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDUzOkVlLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1NDpFZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTU6RWUuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDU2OkVlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA1NzpFZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9kYiIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNTg6RWUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDYwOkVlLmFkZFJlbCgicmVsIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MTpFZS5hZGRSZWwoImJpcmVsIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MjpFZS5hZGRSZWwoInJlbF91IiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2MzpFZS5hZGRSZWwoInJlbF9kIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NDpFZS5hZGRSZWwoInJlbF9sIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NTpFZS5hZGRSZWwoInJlbF9yIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NjpFZS5hZGRSZWwoInJlbF9iIiwuLi5IZVtnbl0pLHRoaXMuJD1IZVtnbl07YnJlYWs7Y2FzZSA2NzpIZVtnbl0uc3BsaWNlKDAsMSksRWUuYWRkUmVsKCJyZWwiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDY4OkVlLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uSGVbZ25dKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNjk6RWUudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDcwOkVlLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLkhlW2duXSksdGhpcy4kPUhlW2duXTticmVhaztjYXNlIDcxOnRoaXMuJD1bSGVbZ25dXTticmVhaztjYXNlIDcyOkhlW2duXS51bnNoaWZ0KEhlW2duLTFdKSx0aGlzLiQ9SGVbZ25dO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9SGVbZ25dLnRyaW0oKTticmVhaztjYXNlIDc0OmxldCBrcz17fTtrc1tIZVtnbi0xXS50cmltKCldPUhlW2duXS50cmltKCksdGhpcy4kPWtzO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDc6WzEsNl0sODpbMSw3XSw5OlsxLDhdLDEwOjQsMTE6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDExXSwxNzpbMSwxMl0sMTg6WzEsMTNdfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsN119LHsxOlsyLDNdfSx7MTpbMiw0XX0sezE6WzIsNV19LHsxOlsyLDZdfSx7MTI6WzEsMTRdfSx7MTI6WzEsMTVdfSx7MTI6WzEsMTZdfSx7MTI6WzEsMTddfSx7MTI6WzEsMThdfSx7MTM6MTksMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDM6MjMsNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9LHsxMzo3MCwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp2LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6TCwzOTpOLDQwOkIsNDE6aiw0MzoyMyw0NDpSLDQ1OnosNDY6Syw0NzppdCw0ODpzdCw0OTp1dCw1MDpidCw1MTptdCw1Mjp5dCw1MzpkdCw1NDpodCw1NTp3dCw1NjpYLDU3OnB0LDU4OlUsNTk6eHQsNjA6bnQsNjE6T3QsNjI6TnQsNjM6cXQsNjQ6Q3QsNjU6Wiw2NjpUdCw2NzpIdCw2ODpJdCw2OTpGdCw3MDprZSw3MTpwbiw3MjpNZSw3Mzp2ZSw3NDpHZX0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OnYsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpMLDM5Ok4sNDA6Qiw0MTpqLDQzOjIzLDQ0OlIsNDU6eiw0NjpLLDQ3Oml0LDQ4OnN0LDQ5OnV0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmR0LDU0Omh0LDU1Ond0LDU2OlgsNTc6cHQsNTg6VSw1OTp4dCw2MDpudCw2MTpPdCw2MjpOdCw2MzpxdCw2NDpDdCw2NTpaLDY2OlR0LDY3Okh0LDY4Okl0LDY5OkZ0LDcwOmtlLDcxOnBuLDcyOk1lLDczOnZlLDc0OkdlfSx7MTM6NzIsMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDM6MjMsNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9LHsxMzo3MywxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp2LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6TCwzOTpOLDQwOkIsNDE6aiw0MzoyMyw0NDpSLDQ1OnosNDY6Syw0NzppdCw0ODpzdCw0OTp1dCw1MDpidCw1MTptdCw1Mjp5dCw1MzpkdCw1NDpodCw1NTp3dCw1NjpYLDU3OnB0LDU4OlUsNTk6eHQsNjA6bnQsNjE6T3QsNjI6TnQsNjM6cXQsNjQ6Q3QsNjU6Wiw2NjpUdCw2NzpIdCw2ODpJdCw2OTpGdCw3MDprZSw3MTpwbiw3MjpNZSw3Mzp2ZSw3NDpHZX0sezE0OlsxLDc0XX0saShLZSxbMiwxM10sezQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDIwOjc1LDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9KSxpKEtlLFsyLDE0XSksaSh3ZSxbMiwxNl0sezEyOlsxLDc2XX0pLGkoS2UsWzIsMzZdLHsxMjpbMSw3N119KSxpKF9lLFsyLDE5XSksaShfZSxbMiwyMF0pLHsyNTpbMSw3OF19LHsyNzpbMSw3OV19LGkoX2UsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo4Niw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojg3LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6ODgsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo4OSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjkwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTEsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5Miw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjkzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTQsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5NSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojk2LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6OTcsNzU6ODEsNzY6JHQsNzc6cmUsNzk6aWUsODA6T2V9LHszNTo5OCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1Ojk5LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAxLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAyLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTAzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTA0LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSxpKG9lLFsyLDU5XSksezM1OjEwNSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwNiw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwNyw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwOCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjEwOSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMiw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExMyw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExNCw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezM1OjExNSw3NTo4MSw3NjokdCw3NzpyZSw3OTppZSw4MDpPZX0sezIwOjExNiwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpMLDM5Ok4sNDA6Qiw0MTpqLDQzOjIzLDQ0OlIsNDU6eiw0NjpLLDQ3Oml0LDQ4OnN0LDQ5OnV0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmR0LDU0Omh0LDU1Ond0LDU2OlgsNTc6cHQsNTg6VSw1OTp4dCw2MDpudCw2MTpPdCw2MjpOdCw2MzpxdCw2NDpDdCw2NTpaLDY2OlR0LDY3Okh0LDY4Okl0LDY5OkZ0LDcwOmtlLDcxOnBuLDcyOk1lLDczOnZlLDc0OkdlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIwLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIxLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIyLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTIzLDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTI0LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MzU6MTI1LDc1OjgxLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSx7MTQ6WzEsMTI2XX0sezE0OlsxLDEyN119LHsxNDpbMSwxMjhdfSx7MTQ6WzEsMTI5XX0sezE6WzIsOF19LGkoS2UsWzIsMTVdKSxpKHdlLFsyLDE3XSx7MjE6MjIsMTk6MTMwLDIyOmEsMjM6ZiwyNDpwLDI2OnYsMjg6bX0pLGkoS2UsWzIsMzddLHsxOToyMCwyMDoyMSwyMToyMiw0MzoyMywyOTo0OSwzMDo2MSwzMjo2MiwxMzoxMzEsMjI6YSwyMzpmLDI0OnAsMjY6diwyODptLDM0OmIsMzY6RSwzNzpfLDM4OkwsMzk6Tiw0MDpCLDQxOmosNDQ6Uiw0NTp6LDQ2OkssNDc6aXQsNDg6c3QsNDk6dXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZHQsNTQ6aHQsNTU6d3QsNTY6WCw1NzpwdCw1ODpVLDU5Onh0LDYwOm50LDYxOk90LDYyOk50LDYzOnF0LDY0OkN0LDY1OlosNjY6VHQsNjc6SHQsNjg6SXQsNjk6RnQsNzA6a2UsNzE6cG4sNzI6TWUsNzM6dmUsNzQ6R2V9KSxpKF9lLFsyLDIxXSksaShfZSxbMiwyMl0pLGkob2UsWzIsMzldKSxpKE5lLFsyLDcxXSx7NzU6ODEsMzU6MTMyLDc2OiR0LDc3OnJlLDc5OmllLDgwOk9lfSksaShtZSxbMiw3M10pLHs3ODpbMSwxMzNdfSxpKG1lLFsyLDc1XSksaShtZSxbMiw3Nl0pLGkob2UsWzIsNDBdKSxpKG9lLFsyLDQxXSksaShvZSxbMiw0Ml0pLGkob2UsWzIsNDNdKSxpKG9lLFsyLDQ0XSksaShvZSxbMiw0NV0pLGkob2UsWzIsNDZdKSxpKG9lLFsyLDQ3XSksaShvZSxbMiw0OF0pLGkob2UsWzIsNDldKSxpKG9lLFsyLDUwXSksaShvZSxbMiw1MV0pLGkob2UsWzIsNTJdKSxpKG9lLFsyLDUzXSksaShvZSxbMiw1NF0pLGkob2UsWzIsNTVdKSxpKG9lLFsyLDU2XSksaShvZSxbMiw1N10pLGkob2UsWzIsNThdKSxpKG9lLFsyLDYwXSksaShvZSxbMiw2MV0pLGkob2UsWzIsNjJdKSxpKG9lLFsyLDYzXSksaShvZSxbMiw2NF0pLGkob2UsWzIsNjVdKSxpKG9lLFsyLDY2XSksaShvZSxbMiw2N10pLGkob2UsWzIsNjhdKSxpKG9lLFsyLDY5XSksaShvZSxbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSxpKGNuLFsyLDI4XSksaShjbixbMiwyOV0pLGkoY24sWzIsMzBdKSxpKGNuLFsyLDMxXSksaShjbixbMiwzMl0pLGkoY24sWzIsMzNdKSxpKGNuLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LGkod2UsWzIsMThdKSxpKEtlLFsyLDM4XSksaShOZSxbMiw3Ml0pLGkobWUsWzIsNzRdKSxpKG9lLFsyLDI0XSksaShvZSxbMiwzNV0pLGkobGksWzIsMjVdKSxpKGxpLFsyLDI2XSx7MTI6WzEsMTM4XX0pLGkobGksWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDddLDU6WzIsM10sNjpbMiw0XSw3OlsyLDVdLDg6WzIsNl0sNzQ6WzIsOF0sMTI2OlsyLDldLDEyNzpbMiwxMF0sMTI4OlsyLDExXSwxMjk6WzIsMTJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKERyLG5yKXtpZihuci5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKERyKTtlbHNle3ZhciBkaT1uZXcgRXJyb3IoRHIpO3Rocm93IGRpLmhhc2g9bnIsZGl9fSxwYXJzZTpmdW5jdGlvbihEcil7dmFyIG5yPXRoaXMsZGk9WzBdLEVlPVtdLFluPVtudWxsXSxIZT1bXSxUaT10aGlzLnRhYmxlLGduPSIiLGtzPTAscWE9MCxMYT0yLEdzPTEsTm89SGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksdnM9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxudT17eXk6e319O2Zvcih2YXIgJHMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwkcykmJihudS55eVskc109dGhpcy55eVskc10pO3ZzLnNldElucHV0KERyLG51Lnl5KSxudS55eS5sZXhlcj12cyxudS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgdnMueXlsbG9jPiJ1IiYmKHZzLnl5bGxvYz17fSk7dmFyIEx1PXZzLnl5bGxvYztIZS5wdXNoKEx1KTt2YXIgZm09dnMub3B0aW9ucyYmdnMub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG51Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW51Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGF2KCl7dmFyIExsO3JldHVybiBMbD1FZS5wb3AoKXx8dnMubGV4KCl8fEdzLHR5cGVvZiBMbCE9Im51bWJlciImJihMbCBpbnN0YW5jZW9mIEFycmF5JiYoRWU9TGwsTGw9RWUucG9wKCkpLExsPW5yLnN5bWJvbHNfW0xsXXx8TGwpLExsfWZvcih2YXIgVXUsWmwsUGEsQWwsdWE9e30sYmMsQ2MsZ2EsTWE7Oyl7aWYoWmw9ZGlbZGkubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWmxdP1BhPXRoaXMuZGVmYXVsdEFjdGlvbnNbWmxdOigoVXU9PT1udWxsfHx0eXBlb2YgVXU+InUiKSYmKFV1PWF2KCkpLFBhPVRpW1psXSYmVGlbWmxdW1V1XSksdHlwZW9mIFBhPiJ1Inx8IVBhLmxlbmd0aHx8IVBhWzBdKXt2YXIgSGE9IiI7TWE9W107Zm9yKGJjIGluIFRpW1psXSl0aGlzLnRlcm1pbmFsc19bYmNdJiZiYz5MYSYmTWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2JjXSsiJyIpO3ZzLnNob3dQb3NpdGlvbj9IYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrcysxKStgOgpgK3ZzLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArTWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVdV18fFV1KSsiJyI6SGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa3MrMSkrIjogVW5leHBlY3RlZCAiKyhVdT09R3M/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVXVdfHxVdSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoSGEse3RleHQ6dnMubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1V1XXx8VXUsbGluZTp2cy55eWxpbmVubyxsb2M6THUsZXhwZWN0ZWQ6TWF9KX1pZihQYVswXWluc3RhbmNlb2YgQXJyYXkmJlBhLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWmwrIiwgdG9rZW46ICIrVXUpO3N3aXRjaChQYVswXSl7Y2FzZSAxOmRpLnB1c2goVXUpLFluLnB1c2godnMueXl0ZXh0KSxIZS5wdXNoKHZzLnl5bGxvYyksZGkucHVzaChQYVsxXSksVXU9bnVsbCxxYT12cy55eWxlbmcsZ249dnMueXl0ZXh0LGtzPXZzLnl5bGluZW5vLEx1PXZzLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQ2M9dGhpcy5wcm9kdWN0aW9uc19bUGFbMV1dWzFdLHVhLiQ9WW5bWW4ubGVuZ3RoLUNjXSx1YS5fJD17Zmlyc3RfbGluZTpIZVtIZS5sZW5ndGgtKENjfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SGVbSGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46SGVbSGUubGVuZ3RoLShDY3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpIZVtIZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGZtJiYodWEuXyQucmFuZ2U9W0hlW0hlLmxlbmd0aC0oQ2N8fDEpXS5yYW5nZVswXSxIZVtIZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxBbD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodWEsW2duLHFhLGtzLG51Lnl5LFBhWzFdLFluLEhlXS5jb25jYXQoTm8pKSx0eXBlb2YgQWw8InUiKXJldHVybiBBbDtDYyYmKGRpPWRpLnNsaWNlKDAsLTEqQ2MqMiksWW49WW4uc2xpY2UoMCwtMSpDYyksSGU9SGUuc2xpY2UoMCwtMSpDYykpLGRpLnB1c2godGhpcy5wcm9kdWN0aW9uc19bUGFbMV1dWzBdKSxZbi5wdXNoKHVhLiQpLEhlLnB1c2godWEuXyQpLGdhPVRpW2RpW2RpLmxlbmd0aC0yXV1bZGlbZGkubGVuZ3RoLTFdXSxkaS5wdXNoKGdhKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sZGE9ZnVuY3Rpb24oKXt2YXIgZHM9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24obnIsZGkpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IobnIsZGkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG5yKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRHIsbnIpe3JldHVybiB0aGlzLnl5PW5yfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1Ecix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRHI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPURyLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1Ecix0aGlzLm1hdGNoZWQrPURyO3ZhciBucj1Eci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIG5yPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxEcn0sdW5wdXQ6ZnVuY3Rpb24oRHIpe3ZhciBucj1Eci5sZW5ndGgsZGk9RHIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1Ecit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtbnIpLHRoaXMub2Zmc2V0LT1ucjt2YXIgRWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kaS5sZW5ndGgtMSk7dmFyIFluPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkaT8oZGkubGVuZ3RoPT09RWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStFZVtFZS5sZW5ndGgtZGkubGVuZ3RoXS5sZW5ndGgtZGlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1ucn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtZblswXSxZblswXSt0aGlzLnl5bGVuZy1ucl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKERyKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRHIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIERyPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRHIubGVuZ3RoPjIwPyIuLi4iOiIiKStEci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBEcj10aGlzLm1hdGNoO3JldHVybiBEci5sZW5ndGg8MjAmJihEcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRHIubGVuZ3RoKSksKERyLnN1YnN0cigwLDIwKSsoRHIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBEcj10aGlzLnBhc3RJbnB1dCgpLG5yPW5ldyBBcnJheShEci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBEcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbnIrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKERyLG5yKXt2YXIgZGksRWUsWW47aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFluPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFluLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEVlPURyWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxFZSYmKHRoaXMueXlsaW5lbm8rPUVlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkVlP0VlW0VlLmxlbmd0aC0xXS5sZW5ndGgtRWVbRWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRHJbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RHJbMF0sdGhpcy5tYXRjaCs9RHJbMF0sdGhpcy5tYXRjaGVzPURyLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKERyWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1EclswXSxkaT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxucix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkaSlyZXR1cm4gZGk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEhlIGluIFluKXRoaXNbSGVdPVluW0hlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBEcixucixkaSxFZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBZbj10aGlzLl9jdXJyZW50UnVsZXMoKSxIZT0wO0hlPFluLmxlbmd0aDtIZSsrKWlmKGRpPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbWW5bSGVdXSksZGkmJighbnJ8fGRpWzBdLmxlbmd0aD5uclswXS5sZW5ndGgpKXtpZihucj1kaSxFZT1IZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihEcj10aGlzLnRlc3RfbWF0Y2goZGksWW5bSGVdKSxEciE9PSExKXJldHVybiBEcjtpZih0aGlzLl9iYWNrdHJhY2spe25yPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG5yPyhEcj10aGlzLnRlc3RfbWF0Y2gobnIsWW5bRWVdKSxEciE9PSExP0RyOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgbnI9dGhpcy5uZXh0KCk7cmV0dXJuIG5yfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihucil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG5yKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgbnI9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbnI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihucil7cmV0dXJuIG5yPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobnJ8fDApLG5yPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbbnJdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKG5yKXt0aGlzLmJlZ2luKG5yKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihucixkaSxFZSxZbil7c3dpdGNoKEVlKXtjYXNlIDA6cmV0dXJuIDY7Y2FzZSAxOnJldHVybiA3O2Nhc2UgMjpyZXR1cm4gODtjYXNlIDM6cmV0dXJuIDk7Y2FzZSA0OnJldHVybiAyMjtjYXNlIDU6cmV0dXJuIDIzO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjQ7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNjtjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6YzticmVhaztjYXNlIDE1OnJldHVybiAxMjtjYXNlIDE2OmJyZWFrO2Nhc2UgMTc6cmV0dXJuIDExO2Nhc2UgMTg6cmV0dXJuIDE1O2Nhc2UgMTk6cmV0dXJuIDE2O2Nhc2UgMjA6cmV0dXJuIDE3O2Nhc2UgMjE6cmV0dXJuIDE4O2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbl9leHQiKSw0NTtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb24iKSw0NDtjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X3F1ZXVlIiksNTE7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9kYiIpLDUwO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHQiKSw0OTtjYXNlIDI3OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fcXVldWUiKSw0ODtjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZGIiKSw0NztjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW0iKSw0NjtjYXNlIDMwOnJldHVybiB0aGlzLmJlZ2luKCJib3VuZGFyeSIpLDM3O2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oImVudGVycHJpc2VfYm91bmRhcnkiKSwzNDtjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fYm91bmRhcnkiKSwzNjtjYXNlIDMzOnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X3F1ZXVlIiksNTc7Y2FzZSAzNDpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9kYiIpLDU2O2Nhc2UgMzU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHQiKSw1NTtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfcXVldWUiKSw1NDtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZGIiKSw1MztjYXNlIDM4OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXIiKSw1MjtjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfYm91bmRhcnkiKSwzODtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X3F1ZXVlIiksNjM7Y2FzZSA0MTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9kYiIpLDYyO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHQiKSw2MTtjYXNlIDQzOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfcXVldWUiKSw2MDtjYXNlIDQ0OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZGIiKSw1OTtjYXNlIDQ1OnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnQiKSw1ODtjYXNlIDQ2OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0NzpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2Nhc2UgNDg6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfbCIpLDQwO2Nhc2UgNDk6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGVfciIpLDQxO2Nhc2UgNTA6cmV0dXJuIHRoaXMuYmVnaW4oInJlbCIpLDY0O2Nhc2UgNTE6cmV0dXJuIHRoaXMuYmVnaW4oImJpcmVsIiksNjU7Y2FzZSA1MjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjtjYXNlIDUzOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTQ6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7Y2FzZSA1NTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU2OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2Nhc2UgNTc6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1ODpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTtjYXNlIDU5OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9iIiksNzA7Y2FzZSA2MTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2luZGV4IiksNzE7Y2FzZSA2MjpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2VsX3N0eWxlIiksNzI7Y2FzZSA2MzpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX3JlbF9zdHlsZSIpLDczO2Nhc2UgNjQ6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9sYXlvdXRfY29uZmlnIiksNzQ7Y2FzZSA2NTpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA2NjpyZXR1cm4gdGhpcy5iZWdpbigiYXR0cmlidXRlIiksIkFUVFJJQlVURV9FTVBUWSI7Y2FzZSA2Nzp0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKTticmVhaztjYXNlIDY4OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gODA7Y2FzZSA3MDpicmVhaztjYXNlIDcxOnJldHVybiA4MDtjYXNlIDcyOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgNzM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIlNUUiI7Y2FzZSA3NTp0aGlzLmJlZ2luKCJzdHJpbmdfa3YiKTticmVhaztjYXNlIDc2OnJldHVybiB0aGlzLmJlZ2luKCJzdHJpbmdfa3Zfa2V5IiksIlNUUl9LRVkiO2Nhc2UgNzc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInN0cmluZ19rdl92YWx1ZSIpO2JyZWFrO2Nhc2UgNzg6cmV0dXJuIlNUUl9WQUxVRSI7Y2FzZSA3OTp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODA6cmV0dXJuIlNUUiI7Y2FzZSA4MTpyZXR1cm4iTEJSQUNFIjtjYXNlIDgyOnJldHVybiJSQlJBQ0UiO2Nhc2UgODM6cmV0dXJuIlNQQUNFIjtjYXNlIDg0OnJldHVybiJFT0wiO2Nhc2UgODU6cmV0dXJuIDE0fX0scnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86dGl0bGVcc1teI1xuO10rKS8sL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OkM0Q29udGV4dFxiKS8sL14oPzpDNENvbnRhaW5lclxiKS8sL14oPzpDNENvbXBvbmVudFxiKS8sL14oPzpDNER5bmFtaWNcYikvLC9eKD86QzREZXBsb3ltZW50XGIpLywvXig/OlBlcnNvbl9FeHRcYikvLC9eKD86UGVyc29uXGIpLywvXig/OlN5c3RlbVF1ZXVlX0V4dFxiKS8sL14oPzpTeXN0ZW1EYl9FeHRcYikvLC9eKD86U3lzdGVtX0V4dFxiKS8sL14oPzpTeXN0ZW1RdWV1ZVxiKS8sL14oPzpTeXN0ZW1EYlxiKS8sL14oPzpTeXN0ZW1cYikvLC9eKD86Qm91bmRhcnlcYikvLC9eKD86RW50ZXJwcmlzZV9Cb3VuZGFyeVxiKS8sL14oPzpTeXN0ZW1fQm91bmRhcnlcYikvLC9eKD86Q29udGFpbmVyUXVldWVfRXh0XGIpLywvXig/OkNvbnRhaW5lckRiX0V4dFxiKS8sL14oPzpDb250YWluZXJfRXh0XGIpLywvXig/OkNvbnRhaW5lclF1ZXVlXGIpLywvXig/OkNvbnRhaW5lckRiXGIpLywvXig/OkNvbnRhaW5lclxiKS8sL14oPzpDb250YWluZXJfQm91bmRhcnlcYikvLC9eKD86Q29tcG9uZW50UXVldWVfRXh0XGIpLywvXig/OkNvbXBvbmVudERiX0V4dFxiKS8sL14oPzpDb21wb25lbnRfRXh0XGIpLywvXig/OkNvbXBvbmVudFF1ZXVlXGIpLywvXig/OkNvbXBvbmVudERiXGIpLywvXig/OkNvbXBvbmVudFxiKS8sL14oPzpEZXBsb3ltZW50X05vZGVcYikvLC9eKD86Tm9kZVxiKS8sL14oPzpOb2RlX0xcYikvLC9eKD86Tm9kZV9SXGIpLywvXig/OlJlbFxiKS8sL14oPzpCaVJlbFxiKS8sL14oPzpSZWxfVXBcYikvLC9eKD86UmVsX1VcYikvLC9eKD86UmVsX0Rvd25cYikvLC9eKD86UmVsX0RcYikvLC9eKD86UmVsX0xlZnRcYikvLC9eKD86UmVsX0xcYikvLC9eKD86UmVsX1JpZ2h0XGIpLywvXig/OlJlbF9SXGIpLywvXig/OlJlbF9CYWNrXGIpLywvXig/OlJlbEluZGV4XGIpLywvXig/OlVwZGF0ZUVsZW1lbnRTdHlsZVxiKS8sL14oPzpVcGRhdGVSZWxTdHlsZVxiKS8sL14oPzpVcGRhdGVMYXlvdXRDb25maWdcYikvLC9eKD86JCkvLC9eKD86WyhdWyBdKlssXSkvLC9eKD86WyhdKS8sL14oPzpbKV0pLywvXig/OiwsKS8sL14oPzosKS8sL14oPzpbIF0qWyJdWyJdKS8sL14oPzpbIF0qWyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIF0qW1wkXSkvLC9eKD86W149XSopLywvXig/Ols9XVsgXSpbIl0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlteLF0rKS8sL14oPzpceykvLC9eKD86XH0pLywvXig/Oltcc10rKS8sL14oPzpbXG5ccl0rKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X3ZhbHVlOntydWxlczpbNzgsNzldLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X2tleTp7cnVsZXM6Wzc3XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdjp7cnVsZXM6Wzc2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzczLDc0XSxpbmNsdXNpdmU6ITF9LGF0dHJpYnV0ZTp7cnVsZXM6WzY4LDY5LDcwLDcxLDcyLDc1LDgwXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9sYXlvdXRfY29uZmlnOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX3JlbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9lbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9kOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3U6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfYmk6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9yOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGluZGV4OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbF9pbmRleDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfcXVldWU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxiaXJlbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGVudGVycHJpc2VfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxwZXJzb246e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgxLDgyLDgzLDg0LDg1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGRzfSgpO3lhLmxleGVyPWRhO2Z1bmN0aW9uIE9vKCl7dGhpcy55eT17fX1yZXR1cm4gT28ucHJvdG90eXBlPXlhLHlhLlBhcnNlcj1PbyxuZXcgT299KCk7JFcucGFyc2VyPSRXO2NvbnN0IEhNZT0kVztsZXQgcm09W10sc2s9WyIiXSxsZz0iZ2xvYmFsIixpbT0iIixkMz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sclA9W10sRGR0PSIiLE9kdD0hMSx6Vz00LHFXPTI7dmFyIGdOdDtjb25zdCBHTWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ050fSxWTWU9ZnVuY3Rpb24oaSl7Z050PURkKGksTGUoKSl9LFVNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiLEUsXyl7aWYoaT09bnVsbHx8YT09PXZvaWQgMHx8YT09PW51bGx8fGY9PT12b2lkIDB8fGY9PT1udWxsfHxwPT09dm9pZCAwfHxwPT09bnVsbClyZXR1cm47bGV0IEw9e307Y29uc3QgTj1yUC5maW5kKEI9PkIuZnJvbT09PWEmJkIudG89PT1mKTtpZihOP0w9TjpyUC5wdXNoKEwpLEwudHlwZT1pLEwuZnJvbT1hLEwudG89ZixMLmxhYmVsPXt0ZXh0OnB9LHY9PW51bGwpTC50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKHYpWzBdO0xbQl09e3RleHQ6an19ZWxzZSBMLnRlY2huPXt0ZXh0OnZ9O2lmKG09PW51bGwpTC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0xbQl09e3RleHQ6an19ZWxzZSBMLmRlc2NyPXt0ZXh0Om19O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0Isal09T2JqZWN0LmVudHJpZXMoYilbMF07TFtCXT1qfWVsc2UgTC5zcHJpdGU9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtCLGpdPU9iamVjdC5lbnRyaWVzKEUpWzBdO0xbQl09an1lbHNlIEwudGFncz1FO2lmKHR5cGVvZiBfPT0ib2JqZWN0Iil7bGV0W0Isal09T2JqZWN0LmVudHJpZXMoXylbMF07TFtCXT1qfWVsc2UgTC5saW5rPV87TC53cmFwPWFrKCl9LFdNZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBFPXt9O2NvbnN0IF89cm0uZmluZChMPT5MLmFsaWFzPT09YSk7aWYoXyYmYT09PV8uYWxpYXM/RT1fOihFLmFsaWFzPWEscm0ucHVzaChFKSksZj09bnVsbD9FLmxhYmVsPXt0ZXh0OiIifTpFLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpRS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtMLE5dPU9iamVjdC5lbnRyaWVzKHApWzBdO0VbTF09e3RleHQ6Tn19ZWxzZSBFLmRlc2NyPXt0ZXh0OnB9O2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0wsTl09T2JqZWN0LmVudHJpZXModilbMF07RVtMXT1OfWVsc2UgRS5zcHJpdGU9djtpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtMLE5dPU9iamVjdC5lbnRyaWVzKG0pWzBdO0VbTF09Tn1lbHNlIEUudGFncz1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0wsTl09T2JqZWN0LmVudHJpZXMoYilbMF07RVtMXT1OfWVsc2UgRS5saW5rPWI7RS50eXBlQzRTaGFwZT17dGV4dDppfSxFLnBhcmVudEJvdW5kYXJ5PWxnLEUud3JhcD1haygpfSxLTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9cm0uZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEscm0ucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpXy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHYpWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMobSlbMF07X1tOXT1CfWVsc2UgXy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bTl09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tOXT1CfWVsc2UgXy5saW5rPUU7Xy53cmFwPWFrKCksXy50eXBlQzRTaGFwZT17dGV4dDppfSxfLnBhcmVudEJvdW5kYXJ5PWxnfSxZTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9cm0uZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEscm0ucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnRlY2huPXt0ZXh0OnB9O2lmKHY9PW51bGwpXy5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHYpWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLmRlc2NyPXt0ZXh0OnZ9O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMobSlbMF07X1tOXT1CfWVsc2UgXy5zcHJpdGU9bTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bTl09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tOXT1CfWVsc2UgXy5saW5rPUU7Xy53cmFwPWFrKCksXy50eXBlQzRTaGFwZT17dGV4dDppfSxfLnBhcmVudEJvdW5kYXJ5PWxnfSxYTWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJzeXN0ZW0ifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpffX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09X31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1ffWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1sZyxtLndyYXA9YWsoKSxpbT1sZyxsZz1pLHNrLnB1c2goaW0pfSxRTWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtpZihpPT09bnVsbHx8YT09PW51bGwpcmV0dXJuO2xldCBtPXt9O2NvbnN0IGI9ZDMuZmluZChFPT5FLmFsaWFzPT09aSk7aWYoYiYmaT09PWIuYWxpYXM/bT1iOihtLmFsaWFzPWksZDMucHVzaChtKSksYT09bnVsbD9tLmxhYmVsPXt0ZXh0OiIifTptLmxhYmVsPXt0ZXh0OmF9LGY9PW51bGwpbS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMoZilbMF07bVtFXT17dGV4dDpffX1lbHNlIG0udHlwZT17dGV4dDpmfTtpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtFLF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO21bRV09X31lbHNlIG0udGFncz1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXModilbMF07bVtFXT1ffWVsc2UgbS5saW5rPXY7bS5wYXJlbnRCb3VuZGFyeT1sZyxtLndyYXA9YWsoKSxpbT1sZyxsZz1pLHNrLnB1c2goaW0pfSxaTWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFKXtpZihhPT09bnVsbHx8Zj09PW51bGwpcmV0dXJuO2xldCBfPXt9O2NvbnN0IEw9ZDMuZmluZChOPT5OLmFsaWFzPT09YSk7aWYoTCYmYT09PUwuYWxpYXM/Xz1MOihfLmFsaWFzPWEsZDMucHVzaChfKSksZj09bnVsbD9fLmxhYmVsPXt0ZXh0OiIifTpfLmxhYmVsPXt0ZXh0OmZ9LHA9PW51bGwpXy50eXBlPXt0ZXh0OiJub2RlIn07ZWxzZSBpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKHApWzBdO19bTl09e3RleHQ6Qn19ZWxzZSBfLnR5cGU9e3RleHQ6cH07aWYodj09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W04sQl09T2JqZWN0LmVudHJpZXModilbMF07X1tOXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbTixCXT1PYmplY3QuZW50cmllcyhiKVswXTtfW05dPUJ9ZWxzZSBfLnRhZ3M9YjtpZih0eXBlb2YgRT09Im9iamVjdCIpe2xldFtOLEJdPU9iamVjdC5lbnRyaWVzKEUpWzBdO19bTl09Qn1lbHNlIF8ubGluaz1FO18ubm9kZVR5cGU9aSxfLnBhcmVudEJvdW5kYXJ5PWxnLF8ud3JhcD1haygpLGltPWxnLGxnPWEsc2sucHVzaChpbSl9LEpNZT1mdW5jdGlvbigpe2xnPWltLHNrLnBvcCgpLGltPXNrLnBvcCgpLHNrLnB1c2goaW0pfSx0SWU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFLF8sTCxOKXtsZXQgQj1ybS5maW5kKGo9PmouYWxpYXM9PT1hKTtpZighKEI9PT12b2lkIDAmJihCPWQzLmZpbmQoaj0+ai5hbGlhcz09PWEpLEI9PT12b2lkIDApKSl7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGYpWzBdO0Jbal09Un1lbHNlIEIuYmdDb2xvcj1mO2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhwKVswXTtCW2pdPVJ9ZWxzZSBCLmZvbnRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyh2KVswXTtCW2pdPVJ9ZWxzZSBCLmJvcmRlckNvbG9yPXY7aWYobSE9bnVsbClpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0Jbal09Un1lbHNlIEIuc2hhZG93aW5nPW07aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtqLFJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0Jbal09Un1lbHNlIEIuc2hhcGU9YjtpZihFIT1udWxsKWlmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoRSlbMF07QltqXT1SfWVsc2UgQi5zcHJpdGU9RTtpZihfIT1udWxsKWlmKHR5cGVvZiBfPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoXylbMF07QltqXT1SfWVsc2UgQi50ZWNobj1fO2lmKEwhPW51bGwpaWYodHlwZW9mIEw9PSJvYmplY3QiKXtsZXRbaixSXT1PYmplY3QuZW50cmllcyhMKVswXTtCW2pdPVJ9ZWxzZSBCLmxlZ2VuZFRleHQ9TDtpZihOIT1udWxsKWlmKHR5cGVvZiBOPT0ib2JqZWN0Iil7bGV0W2osUl09T2JqZWN0LmVudHJpZXMoTilbMF07QltqXT1SfWVsc2UgQi5sZWdlbmRTcHJpdGU9Tn19LGVJZT1mdW5jdGlvbihpLGEsZixwLHYsbSxiKXtjb25zdCBFPXJQLmZpbmQoXz0+Xy5mcm9tPT09YSYmXy50bz09PWYpO2lmKEUhPT12b2lkIDApe2lmKHAhPW51bGwpaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhwKVswXTtFW19dPUx9ZWxzZSBFLnRleHRDb2xvcj1wO2lmKHYhPW51bGwpaWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyh2KVswXTtFW19dPUx9ZWxzZSBFLmxpbmVDb2xvcj12O2lmKG0hPW51bGwpaWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhtKVswXTtFW19dPXBhcnNlSW50KEwpfWVsc2UgRS5vZmZzZXRYPXBhcnNlSW50KG0pO2lmKGIhPW51bGwpaWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbXyxMXT1PYmplY3QuZW50cmllcyhiKVswXTtFW19dPXBhcnNlSW50KEwpfWVsc2UgRS5vZmZzZXRZPXBhcnNlSW50KGIpfX0sbkllPWZ1bmN0aW9uKGksYSxmKXtsZXQgcD16Vyx2PXFXO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGEpWzBdO3A9cGFyc2VJbnQobSl9ZWxzZSBwPXBhcnNlSW50KGEpO2lmKHR5cGVvZiBmPT0ib2JqZWN0Iil7Y29uc3QgbT1PYmplY3QudmFsdWVzKGYpWzBdO3Y9cGFyc2VJbnQobSl9ZWxzZSB2PXBhcnNlSW50KGYpO3A+PTEmJih6Vz1wKSx2Pj0xJiYocVc9dil9LHJJZT1mdW5jdGlvbigpe3JldHVybiB6V30saUllPWZ1bmN0aW9uKCl7cmV0dXJuIHFXfSxzSWU9ZnVuY3Rpb24oKXtyZXR1cm4gbGd9LGFJZT1mdW5jdGlvbigpe3JldHVybiBpbX0scE50PWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP3JtOnJtLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LG9JZT1mdW5jdGlvbihpKXtyZXR1cm4gcm0uZmluZChhPT5hLmFsaWFzPT09aSl9LGNJZT1mdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmtleXMocE50KGkpKX0sdUllPWZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP2QzOmQzLmZpbHRlcihhPT5hLnBhcmVudEJvdW5kYXJ5PT09aSl9LGxJZT1mdW5jdGlvbigpe3JldHVybiByUH0saEllPWZ1bmN0aW9uKCl7cmV0dXJuIERkdH0sZkllPWZ1bmN0aW9uKGkpe09kdD1pfSxhaz1mdW5jdGlvbigpe3JldHVybiBPZHR9LE5kdD17YWRkUGVyc29uT3JTeXN0ZW06V01lLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6WE1lLGFkZENvbnRhaW5lcjpLTWUsYWRkQ29udGFpbmVyQm91bmRhcnk6UU1lLGFkZENvbXBvbmVudDpZTWUsYWRkRGVwbG95bWVudE5vZGU6Wk1lLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpKTWUsYWRkUmVsOlVNZSx1cGRhdGVFbFN0eWxlOnRJZSx1cGRhdGVSZWxTdHlsZTplSWUsdXBkYXRlTGF5b3V0Q29uZmlnOm5JZSxhdXRvV3JhcDphayxzZXRXcmFwOmZJZSxnZXRDNFNoYXBlQXJyYXk6cE50LGdldEM0U2hhcGU6b0llLGdldEM0U2hhcGVLZXlzOmNJZSxnZXRCb3VuZGFyeXM6dUllLGdldEN1cnJlbnRCb3VuZGFyeVBhcnNlOnNJZSxnZXRQYXJlbnRCb3VuZGFyeVBhcnNlOmFJZSxnZXRSZWxzOmxJZSxnZXRUaXRsZTpoSWUsZ2V0QzRUeXBlOkdNZSxnZXRDNFNoYXBlSW5Sb3c6ckllLGdldEM0Qm91bmRhcnlJblJvdzppSWUsc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0Q29uZmlnOigpPT5MZSgpLmM0LGNsZWFyOmZ1bmN0aW9uKCl7cm09W10sZDM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLGltPSIiLGxnPSJnbG9iYWwiLHNrPVsiIl0sclA9W10sc2s9WyIiXSxEZHQ9IiIsT2R0PSExLHpXPTQscVc9Mn0sTElORVRZUEU6e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxBUlJPV1RZUEU6e0ZJTExFRDowLE9QRU46MX0sUExBQ0VNRU5UOntMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxzZXRUaXRsZTpmdW5jdGlvbihpKXtEZHQ9RGQoaSxMZSgpKX0sc2V0QzRUeXBlOlZNZX0sSFc9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJyZWN0Iik7aWYoZi5hdHRyKCJ4IixhLngpLGYuYXR0cigieSIsYS55KSxmLmF0dHIoImZpbGwiLGEuZmlsbCksZi5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKSxmLmF0dHIoIndpZHRoIixhLndpZHRoKSxmLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLGEucnghPT12b2lkIDAmJmYuYXR0cigicngiLGEucngpLGEucnkhPT12b2lkIDAmJmYuYXR0cigicnkiLGEucnkpLGEuYXR0cnMhPT12b2lkIDApZm9yKGNvbnN0IHAgaW4gYS5hdHRycylmLmF0dHIocCxhLmF0dHJzW3BdKTtyZXR1cm4gYS5jbGFzcyE9PXZvaWQgMCYmZi5hdHRyKCJjbGFzcyIsYS5jbGFzcyksZn0sYk50PShpLGEpPT57Y29uc3QgZj17eDphLnN0YXJ0eCx5OmEuc3RhcnR5LHdpZHRoOmEuc3RvcHgtYS5zdGFydHgsaGVpZ2h0OmEuc3RvcHktYS5zdGFydHksZmlsbDphLmZpbGwsc3Ryb2tlOmEuc3Ryb2tlLGNsYXNzOiJyZWN0In07SFcoaSxmKS5sb3dlcigpfSxkSWU9KGksYSk9Pntjb25zdCBmPWEudGV4dC5yZXBsYWNlKCROLCIgIikscD1pLmFwcGVuZCgidGV4dCIpO3AuYXR0cigieCIsYS54KSxwLmF0dHIoInkiLGEueSkscC5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHAuc3R5bGUoInRleHQtYW5jaG9yIixhLmFuY2hvciksYS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsYS5jbGFzcyk7Y29uc3Qgdj1wLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gdi5hdHRyKCJ4IixhLngrYS50ZXh0TWFyZ2luKjIpLHYudGV4dChmKSxwfSxnSWU9KGksYSxmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgiaW1hZ2UiKTt2LmF0dHIoIngiLGEpLHYuYXR0cigieSIsZik7Y29uc3QgbT1RNihwKTt2LmF0dHIoInhsaW5rOmhyZWYiLG0pfSxwSWU9KGksYSxmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgidXNlIik7di5hdHRyKCJ4IixhKSx2LmF0dHIoInkiLGYpO2NvbnN0IG09UTYocCk7di5hdHRyKCJ4bGluazpocmVmIixgIyR7bX1gKX0sZlQ9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLGFuY2hvcjoic3RhcnQiLHJ4OjAscnk6MH0pLFBkdD0oKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLEZkdD1mdW5jdGlvbihpLGEpe3JldHVybiBIVyhpLGEpfSx2TnQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2NvbnN0IGI9aS5hcHBlbmQoImltYWdlIik7Yi5hdHRyKCJ3aWR0aCIsYSksYi5hdHRyKCJoZWlnaHQiLGYpLGIuYXR0cigieCIscCksYi5hdHRyKCJ5Iix2KTtsZXQgRT1tLnN0YXJ0c1dpdGgoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCIpP206UTYobSk7Yi5hdHRyKCJ4bGluazpocmVmIixFKX0sYkllPShpLGEsZik9Pntjb25zdCBwPWkuYXBwZW5kKCJnIik7bGV0IHY9MDtmb3IobGV0IG0gb2YgYSl7bGV0IGI9bS50ZXh0Q29sb3I/bS50ZXh0Q29sb3I6IiM0NDQ0NDQiLEU9bS5saW5lQ29sb3I/bS5saW5lQ29sb3I6IiM0NDQ0NDQiLF89bS5vZmZzZXRYP3BhcnNlSW50KG0ub2Zmc2V0WCk6MCxMPW0ub2Zmc2V0WT9wYXJzZUludChtLm9mZnNldFkpOjAsTj0iIjtpZih2PT09MCl7bGV0IGo9cC5hcHBlbmQoImxpbmUiKTtqLmF0dHIoIngxIixtLnN0YXJ0UG9pbnQueCksai5hdHRyKCJ5MSIsbS5zdGFydFBvaW50LnkpLGouYXR0cigieDIiLG0uZW5kUG9pbnQueCksai5hdHRyKCJ5MiIsbS5lbmRQb2ludC55KSxqLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKSxqLmF0dHIoInN0cm9rZSIsRSksai5zdHlsZSgiZmlsbCIsIm5vbmUiKSxtLnR5cGUhPT0icmVsX2IiJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitOKyIjYXJyb3doZWFkKSIpLChtLnR5cGU9PT0iYmlyZWwifHxtLnR5cGU9PT0icmVsX2IiKSYmai5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitOKyIjYXJyb3dlbmQpIiksdj0tMX1lbHNle2xldCBqPXAuYXBwZW5kKCJwYXRoIik7ai5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKS5hdHRyKCJzdHJva2UiLEUpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eSBRY29udHJvbHgsY29udHJvbHkgc3RvcHgsc3RvcHkgIi5yZXBsYWNlQWxsKCJzdGFydHgiLG0uc3RhcnRQb2ludC54KS5yZXBsYWNlQWxsKCJzdGFydHkiLG0uc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKCJjb250cm9seCIsbS5zdGFydFBvaW50LngrKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvMi0obS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS80KS5yZXBsYWNlQWxsKCJjb250cm9seSIsbS5zdGFydFBvaW50LnkrKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMikucmVwbGFjZUFsbCgic3RvcHgiLG0uZW5kUG9pbnQueCkucmVwbGFjZUFsbCgic3RvcHkiLG0uZW5kUG9pbnQueSkpLG0udHlwZSE9PSJyZWxfYiImJmouYXR0cigibWFya2VyLWVuZCIsInVybCgiK04rIiNhcnJvd2hlYWQpIiksKG0udHlwZT09PSJiaXJlbCJ8fG0udHlwZT09PSJyZWxfYiIpJiZqLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK04rIiNhcnJvd2VuZCkiKX1sZXQgQj1mLm1lc3NhZ2VGb250KCk7azUoZikobS5sYWJlbC50ZXh0LHAsTWF0aC5taW4obS5zdGFydFBvaW50LngsbS5lbmRQb2ludC54KStNYXRoLmFicyhtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzIrXyxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueSxtLmVuZFBvaW50LnkpK01hdGguYWJzKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMitMLG0ubGFiZWwud2lkdGgsbS5sYWJlbC5oZWlnaHQse2ZpbGw6Yn0sQiksbS50ZWNobiYmbS50ZWNobi50ZXh0IT09IiImJihCPWYubWVzc2FnZUZvbnQoKSxrNShmKSgiWyIrbS50ZWNobi50ZXh0KyJdIixwLE1hdGgubWluKG0uc3RhcnRQb2ludC54LG0uZW5kUG9pbnQueCkrTWF0aC5hYnMobS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS8yK18sTWF0aC5taW4obS5zdGFydFBvaW50LnksbS5lbmRQb2ludC55KStNYXRoLmFicyhtLmVuZFBvaW50LnktbS5zdGFydFBvaW50LnkpLzIrZi5tZXNzYWdlRm9udFNpemUrNStMLE1hdGgubWF4KG0ubGFiZWwud2lkdGgsbS50ZWNobi53aWR0aCksbS50ZWNobi5oZWlnaHQse2ZpbGw6YiwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEIpKX19LHZJZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpO2xldCB2PWEuYmdDb2xvcj9hLmJnQ29sb3I6Im5vbmUiLG09YS5ib3JkZXJDb2xvcj9hLmJvcmRlckNvbG9yOiIjNDQ0NDQ0IixiPWEuZm9udENvbG9yP2EuZm9udENvbG9yOiJibGFjayIsRT17InN0cm9rZS13aWR0aCI6MSwic3Ryb2tlLWRhc2hhcnJheSI6IjcuMCw3LjAifTthLm5vZGVUeXBlJiYoRT17InN0cm9rZS13aWR0aCI6MX0pO2xldCBfPXt4OmEueCx5OmEueSxmaWxsOnYsc3Ryb2tlOm0sd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQscng6Mi41LHJ5OjIuNSxhdHRyczpFfTtGZHQocCxfKTtsZXQgTD1mLmJvdW5kYXJ5Rm9udCgpO0wuZm9udFdlaWdodD0iYm9sZCIsTC5mb250U2l6ZT1MLmZvbnRTaXplKzIsTC5mb250Q29sb3I9YixrNShmKShhLmxhYmVsLnRleHQscCxhLngsYS55K2EubGFiZWwuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sTCksYS50eXBlJiZhLnR5cGUudGV4dCE9PSIiJiYoTD1mLmJvdW5kYXJ5Rm9udCgpLEwuZm9udENvbG9yPWIsazUoZikoYS50eXBlLnRleHQscCxhLngsYS55K2EudHlwZS5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxMKSksYS5kZXNjciYmYS5kZXNjci50ZXh0IT09IiImJihMPWYuYm91bmRhcnlGb250KCksTC5mb250U2l6ZT1MLmZvbnRTaXplLTIsTC5mb250Q29sb3I9YixrNShmKShhLmRlc2NyLnRleHQscCxhLngsYS55K2EuZGVzY3IuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sTCkpfSx3SWU9ZnVuY3Rpb24oaSxhLGYpe3ZhciBCO2xldCBwPWEuYmdDb2xvcj9hLmJnQ29sb3I6ZlthLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLHY9YS5ib3JkZXJDb2xvcj9hLmJvcmRlckNvbG9yOmZbYS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sbT1hLmZvbnRDb2xvcj9hLmZvbnRDb2xvcjoiI0ZGRkZGRiIsYj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGEudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWNvbnN0IEU9aS5hcHBlbmQoImciKTtFLmF0dHIoImNsYXNzIiwicGVyc29uLW1hbiIpO2NvbnN0IF89ZlQoKTtzd2l0Y2goYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmNhc2Uic3lzdGVtIjpjYXNlImV4dGVybmFsX3N5c3RlbSI6Y2FzZSJjb250YWluZXIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyIjpjYXNlImNvbXBvbmVudCI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnQiOl8ueD1hLngsXy55PWEueSxfLmZpbGw9cCxfLndpZHRoPWEud2lkdGgsXy5oZWlnaHQ9YS5oZWlnaHQsXy5zdHJva2U9dixfLnJ4PTIuNSxfLnJ5PTIuNSxfLmF0dHJzPXsic3Ryb2tlLXdpZHRoIjouNX0sRmR0KEUsXyk7YnJlYWs7Y2FzZSJzeXN0ZW1fZGIiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX2RiIjpjYXNlImNvbnRhaW5lcl9kYiI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfZGIiOmNhc2UiY29tcG9uZW50X2RiIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9kYiI6RS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixwKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHYpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLC0xMCBoYWxmLC0xMCBoYWxmLC0xMGMwLDAgaGFsZiwwIGhhbGYsMTBsMCxoZWlnaHRjMCwxMCAtaGFsZiwxMCAtaGFsZiwxMGMwLDAgLWhhbGYsMCAtaGFsZiwtMTBsMCwtaGVpZ2h0Ii5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoImhhbGYiLGEud2lkdGgvMikucmVwbGFjZUFsbCgiaGVpZ2h0IixhLmhlaWdodCkpLEUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHYpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMwLDEwIGhhbGYsMTAgaGFsZiwxMGMwLDAgaGFsZiwwIGhhbGYsLTEwIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoImhhbGYiLGEud2lkdGgvMikpO2JyZWFrO2Nhc2Uic3lzdGVtX3F1ZXVlIjpjYXNlImV4dGVybmFsX3N5c3RlbV9xdWV1ZSI6Y2FzZSJjb250YWluZXJfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIjpjYXNlImNvbXBvbmVudF9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfcXVldWUiOkUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIscCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix2KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHlsd2lkdGgsMGM1LDAgNSxoYWxmIDUsaGFsZmMwLDAgMCxoYWxmIC01LGhhbGZsLXdpZHRoLDBjLTUsMCAtNSwtaGFsZiAtNSwtaGFsZmMwLDAgMCwtaGFsZiA1LC1oYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCkucmVwbGFjZUFsbCgic3RhcnR5IixhLnkpLnJlcGxhY2VBbGwoIndpZHRoIixhLndpZHRoKS5yZXBsYWNlQWxsKCJoYWxmIixhLmhlaWdodC8yKSksRS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdikuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5Yy01LDAgLTUsaGFsZiAtNSxoYWxmYzAsaGFsZiA1LGhhbGYgNSxoYWxmIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEueCthLndpZHRoKS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS5oZWlnaHQvMikpO2JyZWFrfWxldCBMPVNJZShmLGEudHlwZUM0U2hhcGUudGV4dCk7c3dpdGNoKEUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsbSkuYXR0cigiZm9udC1mYW1pbHkiLEwuZm9udEZhbWlseSkuYXR0cigiZm9udC1zaXplIixMLmZvbnRTaXplLTIpLmF0dHIoImZvbnQtc3R5bGUiLCJpdGFsaWMiKS5hdHRyKCJsZW5ndGhBZGp1c3QiLCJzcGFjaW5nIikuYXR0cigidGV4dExlbmd0aCIsYS50eXBlQzRTaGFwZS53aWR0aCkuYXR0cigieCIsYS54K2Eud2lkdGgvMi1hLnR5cGVDNFNoYXBlLndpZHRoLzIpLmF0dHIoInkiLGEueSthLnR5cGVDNFNoYXBlLlkpLnRleHQoIjw8IithLnR5cGVDNFNoYXBlLnRleHQrIj4+IiksYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnZOdChFLDQ4LDQ4LGEueCthLndpZHRoLzItMjQsYS55K2EuaW1hZ2UuWSxiKTticmVha31sZXQgTj1mW2EudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIE4uZm9udFdlaWdodD0iYm9sZCIsTi5mb250U2l6ZT1OLmZvbnRTaXplKzIsTi5mb250Q29sb3I9bSxrNShmKShhLmxhYmVsLnRleHQsRSxhLngsYS55K2EubGFiZWwuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm19LE4pLE49ZlthLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLE4uZm9udENvbG9yPW0sYS50ZWNobiYmKChCPWEudGVjaG4pPT1udWxsP3ZvaWQgMDpCLnRleHQpIT09IiI/azUoZikoYS50ZWNobi50ZXh0LEUsYS54LGEueSthLnRlY2huLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptLCJmb250LXN0eWxlIjoiaXRhbGljIn0sTik6YS50eXBlJiZhLnR5cGUudGV4dCE9PSIiJiZrNShmKShhLnR5cGUudGV4dCxFLGEueCxhLnkrYS50eXBlLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptLCJmb250LXN0eWxlIjoiaXRhbGljIn0sTiksYS5kZXNjciYmYS5kZXNjci50ZXh0IT09IiImJihOPWYucGVyc29uRm9udCgpLE4uZm9udENvbG9yPW0sazUoZikoYS5kZXNjci50ZXh0LEUsYS54LGEueSthLmRlc2NyLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDptfSxOKSksYS5oZWlnaHR9LG1JZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0seUllPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LHhJZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSxrSWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sRUllPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LFRJZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxDSWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSxfSWU9ZnVuY3Rpb24oaSl7Y29uc3QgZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjcm9zc2hlYWQiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTUpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmF0dHIoInJlZlgiLDE2KS5hdHRyKCJyZWZZIiw0KTtmLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSA5LDIgViA2IEwxNiw0IFoiKSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDAsMSBMIDYsNyBNIDYsMSBMIDAsNyIpfSxTSWU9KGksYSk9Pih7Zm9udEZhbWlseTppW2ErIkZvbnRGYW1pbHkiXSxmb250U2l6ZTppW2ErIkZvbnRTaXplIl0sZm9udFdlaWdodDppW2ErIkZvbnRXZWlnaHQiXX0pLGs1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh2LG0sYixFLF8sTCxOKXtjb25zdCBCPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrTC8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodik7cChCLE4pfWZ1bmN0aW9uIGEodixtLGIsRSxfLEwsTixCKXtjb25zdHtmb250U2l6ZTpqLGZvbnRGYW1pbHk6Uixmb250V2VpZ2h0Onp9PUIsSz12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IGl0PTA7aXQ8Sy5sZW5ndGg7aXQrKyl7Y29uc3Qgc3Q9aXQqai1qKihLLmxlbmd0aC0xKS8yLHV0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsaikuc3R5bGUoImZvbnQtd2VpZ2h0Iix6KS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO3V0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJkeSIsc3QpLnRleHQoS1tpdF0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1hdGhlbWF0aWNhbCIpLHAodXQsTil9fWZ1bmN0aW9uIGYodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSx6PWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsTCkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsXyxMLE4sQikscCh6LE4pfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJnYuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gdi50ZXh0UGxhY2VtZW50PT09ImZvIj9mOnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksZzM9e2RyYXdSZWN0OkZkdCxkcmF3Qm91bmRhcnk6dkllLGRyYXdDNFNoYXBlOndJZSxkcmF3UmVsczpiSWUsZHJhd0ltYWdlOnZOdCxpbnNlcnRBcnJvd0hlYWQ6a0llLGluc2VydEFycm93RW5kOkVJZSxpbnNlcnRBcnJvd0ZpbGxlZEhlYWQ6VEllLGluc2VydER5bmFtaWNOdW1iZXI6Q0llLGluc2VydEFycm93Q3Jvc3NIZWFkOl9JZSxpbnNlcnREYXRhYmFzZUljb246bUllLGluc2VydENvbXB1dGVySWNvbjp5SWUsaW5zZXJ0Q2xvY2tJY29uOnhJZX07bGV0IEdXPTAsVlc9MCx3TnQ9NCxCZHQ9MjskVy55eT1OZHQ7bGV0IGZzPXt9O2NsYXNzIG1OdHtjb25zdHJ1Y3RvcihhKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsUmR0KGEuZGIuZ2V0Q29uZmlnKCkpfXNldERhdGEoYSxmLHAsdil7dGhpcy5uZXh0RGF0YS5zdGFydHg9dGhpcy5kYXRhLnN0YXJ0eD1hLHRoaXMubmV4dERhdGEuc3RvcHg9dGhpcy5kYXRhLnN0b3B4PWYsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5kYXRhLnN0YXJ0eT1wLHRoaXMubmV4dERhdGEuc3RvcHk9dGhpcy5kYXRhLnN0b3B5PXZ9dXBkYXRlVmFsKGEsZixwLHYpe2FbZl09PT12b2lkIDA/YVtmXT1wOmFbZl09dihwLGFbZl0pfWluc2VydChhKXt0aGlzLm5leHREYXRhLmNudD10aGlzLm5leHREYXRhLmNudCsxO2xldCBmPXRoaXMubmV4dERhdGEuc3RhcnR4PT09dGhpcy5uZXh0RGF0YS5zdG9weD90aGlzLm5leHREYXRhLnN0b3B4K2EubWFyZ2luOnRoaXMubmV4dERhdGEuc3RvcHgrYS5tYXJnaW4qMixwPWYrYS53aWR0aCx2PXRoaXMubmV4dERhdGEuc3RhcnR5K2EubWFyZ2luKjIsbT12K2EuaGVpZ2h0OyhmPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8cD49dGhpcy5kYXRhLndpZHRoTGltaXR8fHRoaXMubmV4dERhdGEuY250PndOdCkmJihmPXRoaXMubmV4dERhdGEuc3RhcnR4K2EubWFyZ2luK2ZzLm5leHRMaW5lUGFkZGluZ1gsdj10aGlzLm5leHREYXRhLnN0b3B5K2EubWFyZ2luKjIsdGhpcy5uZXh0RGF0YS5zdG9weD1wPWYrYS53aWR0aCx0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLm5leHREYXRhLnN0b3B5LHRoaXMubmV4dERhdGEuc3RvcHk9bT12K2EuaGVpZ2h0LHRoaXMubmV4dERhdGEuY250PTEpLGEueD1mLGEueT12LHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR4IixmLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eSIsdixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdG9weCIscCxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdG9weSIsbSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR4IixmLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHkiLHYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B4IixwLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weSIsbSxNYXRoLm1heCl9aW5pdChhKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCx3aWR0aExpbWl0OnZvaWQgMH0sdGhpcy5uZXh0RGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsY250OjB9LFJkdChhLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihhKXt0aGlzLmRhdGEuc3RvcHgrPWEsdGhpcy5kYXRhLnN0b3B5Kz1hfX1jb25zdCBSZHQ9ZnVuY3Rpb24oaSl7WTEoZnMsaSksaS5mb250RmFtaWx5JiYoZnMucGVyc29uRm9udEZhbWlseT1mcy5zeXN0ZW1Gb250RmFtaWx5PWZzLm1lc3NhZ2VGb250RmFtaWx5PWkuZm9udEZhbWlseSksaS5mb250U2l6ZSYmKGZzLnBlcnNvbkZvbnRTaXplPWZzLnN5c3RlbUZvbnRTaXplPWZzLm1lc3NhZ2VGb250U2l6ZT1pLmZvbnRTaXplKSxpLmZvbnRXZWlnaHQmJihmcy5wZXJzb25Gb250V2VpZ2h0PWZzLnN5c3RlbUZvbnRXZWlnaHQ9ZnMubWVzc2FnZUZvbnRXZWlnaHQ9aS5mb250V2VpZ2h0KX0saVA9KGksYSk9Pih7Zm9udEZhbWlseTppW2ErIkZvbnRGYW1pbHkiXSxmb250U2l6ZTppW2ErIkZvbnRTaXplIl0sZm9udFdlaWdodDppW2ErIkZvbnRXZWlnaHQiXX0pLFVXPWk9Pih7Zm9udEZhbWlseTppLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTppLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDppLmJvdW5kYXJ5Rm9udFdlaWdodH0pLEFJZT1pPT4oe2ZvbnRGYW1pbHk6aS5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTppLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OmkubWVzc2FnZUZvbnRXZWlnaHR9KTtmdW5jdGlvbiBzbShpLGEsZixwLHYpe2lmKCFhW2ldLndpZHRoKWlmKGYpYVtpXS50ZXh0PVZEdChhW2ldLnRleHQsdixwKSxhW2ldLnRleHRMaW5lcz1hW2ldLnRleHQuc3BsaXQoWXIubGluZUJyZWFrUmVnZXgpLmxlbmd0aCxhW2ldLndpZHRoPXYsYVtpXS5oZWlnaHQ9bmR0KGFbaV0udGV4dCxwKTtlbHNle2xldCBtPWFbaV0udGV4dC5zcGxpdChZci5saW5lQnJlYWtSZWdleCk7YVtpXS50ZXh0TGluZXM9bS5sZW5ndGg7bGV0IGI9MDthW2ldLmhlaWdodD0wLGFbaV0ud2lkdGg9MDtmb3IoY29uc3QgRSBvZiBtKWFbaV0ud2lkdGg9TWF0aC5tYXgoaDMoRSxwKSxhW2ldLndpZHRoKSxiPW5kdChFLHApLGFbaV0uaGVpZ2h0PWFbaV0uaGVpZ2h0K2J9fWNvbnN0IHlOdD1mdW5jdGlvbihpLGEsZil7YS54PWYuZGF0YS5zdGFydHgsYS55PWYuZGF0YS5zdGFydHksYS53aWR0aD1mLmRhdGEuc3RvcHgtZi5kYXRhLnN0YXJ0eCxhLmhlaWdodD1mLmRhdGEuc3RvcHktZi5kYXRhLnN0YXJ0eSxhLmxhYmVsLnk9ZnMuYzRTaGFwZU1hcmdpbi0zNTtsZXQgcD1hLndyYXAmJmZzLndyYXAsdj1VVyhmcyk7di5mb250U2l6ZT12LmZvbnRTaXplKzIsdi5mb250V2VpZ2h0PSJib2xkIjtsZXQgbT1oMyhhLmxhYmVsLnRleHQsdik7c20oImxhYmVsIixhLHAsdixtKSxnMy5kcmF3Qm91bmRhcnkoaSxhLGZzKX0seE50PWZ1bmN0aW9uKGksYSxmLHApe2xldCB2PTA7Zm9yKGNvbnN0IG0gb2YgcCl7dj0wO2NvbnN0IGI9ZlttXTtsZXQgRT1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChFLmZvbnRTaXplPUUuZm9udFNpemUtMixiLnR5cGVDNFNoYXBlLndpZHRoPWgzKCLCqyIrYi50eXBlQzRTaGFwZS50ZXh0KyLCuyIsRSksYi50eXBlQzRTaGFwZS5oZWlnaHQ9RS5mb250U2l6ZSsyLGIudHlwZUM0U2hhcGUuWT1mcy5jNFNoYXBlUGFkZGluZyx2PWIudHlwZUM0U2hhcGUuWStiLnR5cGVDNFNoYXBlLmhlaWdodC00LGIuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxiLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Yi5pbWFnZS53aWR0aD00OCxiLmltYWdlLmhlaWdodD00OCxiLmltYWdlLlk9dix2PWIuaW1hZ2UuWStiLmltYWdlLmhlaWdodDticmVha31iLnNwcml0ZSYmKGIuaW1hZ2Uud2lkdGg9NDgsYi5pbWFnZS5oZWlnaHQ9NDgsYi5pbWFnZS5ZPXYsdj1iLmltYWdlLlkrYi5pbWFnZS5oZWlnaHQpO2xldCBfPWIud3JhcCYmZnMud3JhcCxMPWZzLndpZHRoLWZzLmM0U2hhcGVQYWRkaW5nKjIsTj1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO2lmKE4uZm9udFNpemU9Ti5mb250U2l6ZSsyLE4uZm9udFdlaWdodD0iYm9sZCIsc20oImxhYmVsIixiLF8sTixMKSxiLmxhYmVsLlk9dis4LHY9Yi5sYWJlbC5ZK2IubGFiZWwuaGVpZ2h0LGIudHlwZSYmYi50eXBlLnRleHQhPT0iIil7Yi50eXBlLnRleHQ9IlsiK2IudHlwZS50ZXh0KyJdIjtsZXQgUj1pUChmcyxiLnR5cGVDNFNoYXBlLnRleHQpO3NtKCJ0eXBlIixiLF8sUixMKSxiLnR5cGUuWT12KzUsdj1iLnR5cGUuWStiLnR5cGUuaGVpZ2h0fWVsc2UgaWYoYi50ZWNobiYmYi50ZWNobi50ZXh0IT09IiIpe2IudGVjaG4udGV4dD0iWyIrYi50ZWNobi50ZXh0KyJdIjtsZXQgUj1pUChmcyxiLnRlY2huLnRleHQpO3NtKCJ0ZWNobiIsYixfLFIsTCksYi50ZWNobi5ZPXYrNSx2PWIudGVjaG4uWStiLnRlY2huLmhlaWdodH1sZXQgQj12LGo9Yi5sYWJlbC53aWR0aDtpZihiLmRlc2NyJiZiLmRlc2NyLnRleHQhPT0iIil7bGV0IFI9aVAoZnMsYi50eXBlQzRTaGFwZS50ZXh0KTtzbSgiZGVzY3IiLGIsXyxSLEwpLGIuZGVzY3IuWT12KzIwLHY9Yi5kZXNjci5ZK2IuZGVzY3IuaGVpZ2h0LGo9TWF0aC5tYXgoYi5sYWJlbC53aWR0aCxiLmRlc2NyLndpZHRoKSxCPXYtYi5kZXNjci50ZXh0TGluZXMqNX1qPWorZnMuYzRTaGFwZVBhZGRpbmcsYi53aWR0aD1NYXRoLm1heChiLndpZHRofHxmcy53aWR0aCxqLGZzLndpZHRoKSxiLmhlaWdodD1NYXRoLm1heChiLmhlaWdodHx8ZnMuaGVpZ2h0LEIsZnMuaGVpZ2h0KSxiLm1hcmdpbj1iLm1hcmdpbnx8ZnMuYzRTaGFwZU1hcmdpbixpLmluc2VydChiKSxnMy5kcmF3QzRTaGFwZShhLGIsZnMpfWkuYnVtcExhc3RNYXJnaW4oZnMuYzRTaGFwZU1hcmdpbil9O2xldCBKMj1jbGFzc3tjb25zdHJ1Y3RvcihhLGYpe3RoaXMueD1hLHRoaXMueT1mfX0sa050PWZ1bmN0aW9uKGksYSl7bGV0IGY9aS54LHA9aS55LHY9YS54LG09YS55LGI9ZitpLndpZHRoLzIsRT1wK2kuaGVpZ2h0LzIsXz1NYXRoLmFicyhmLXYpLEw9TWF0aC5hYnMocC1tKSxOPUwvXyxCPWkuaGVpZ2h0L2kud2lkdGgsaj1udWxsO3JldHVybiBwPT1tJiZmPHY/aj1uZXcgSjIoZitpLndpZHRoLEUpOnA9PW0mJmY+dj9qPW5ldyBKMihmLEUpOmY9PXYmJnA8bT9qPW5ldyBKMihiLHAraS5oZWlnaHQpOmY9PXYmJnA+bSYmKGo9bmV3IEoyKGIscCkpLGY+diYmcDxtP0I+PU4/aj1uZXcgSjIoZixFK04qaS53aWR0aC8yKTpqPW5ldyBKMihiLV8vTCppLmhlaWdodC8yLHAraS5oZWlnaHQpOmY8diYmcDxtP0I+PU4/aj1uZXcgSjIoZitpLndpZHRoLEUrTippLndpZHRoLzIpOmo9bmV3IEoyKGIrXy9MKmkuaGVpZ2h0LzIscCtpLmhlaWdodCk6Zjx2JiZwPm0/Qj49Tj9qPW5ldyBKMihmK2kud2lkdGgsRS1OKmkud2lkdGgvMik6aj1uZXcgSjIoYitpLmhlaWdodC8yKl8vTCxwKTpmPnYmJnA+bSYmKEI+PU4/aj1uZXcgSjIoZixFLWkud2lkdGgvMipOKTpqPW5ldyBKMihiLWkuaGVpZ2h0LzIqXy9MLHApKSxqfSxMSWU9ZnVuY3Rpb24oaSxhKXtsZXQgZj17eDowLHk6MH07Zi54PWEueCthLndpZHRoLzIsZi55PWEueSthLmhlaWdodC8yO2xldCBwPWtOdChpLGYpO2YueD1pLngraS53aWR0aC8yLGYueT1pLnkraS5oZWlnaHQvMjtsZXQgdj1rTnQoYSxmKTtyZXR1cm57c3RhcnRQb2ludDpwLGVuZFBvaW50OnZ9fTtjb25zdCBNSWU9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9MDtmb3IobGV0IG0gb2YgYSl7dj12KzE7bGV0IGI9bS53cmFwJiZmcy53cmFwLEU9QUllKGZzKTtwLmRiLmdldEM0VHlwZSgpPT09IkM0RHluYW1pYyImJihtLmxhYmVsLnRleHQ9disiOiAiK20ubGFiZWwudGV4dCk7bGV0IEw9aDMobS5sYWJlbC50ZXh0LEUpO3NtKCJsYWJlbCIsbSxiLEUsTCksbS50ZWNobiYmbS50ZWNobi50ZXh0IT09IiImJihMPWgzKG0udGVjaG4udGV4dCxFKSxzbSgidGVjaG4iLG0sYixFLEwpKSxtLmRlc2NyJiZtLmRlc2NyLnRleHQhPT0iIiYmKEw9aDMobS5kZXNjci50ZXh0LEUpLHNtKCJkZXNjciIsbSxiLEUsTCkpO2xldCBOPWYobS5mcm9tKSxCPWYobS50byksaj1MSWUoTixCKTttLnN0YXJ0UG9pbnQ9ai5zdGFydFBvaW50LG0uZW5kUG9pbnQ9ai5lbmRQb2ludH1nMy5kcmF3UmVscyhpLGEsZnMpfTtmdW5jdGlvbiBFTnQoaSxhLGYscCx2KXtsZXQgbT1uZXcgbU50KHYpO20uZGF0YS53aWR0aExpbWl0PWYuZGF0YS53aWR0aExpbWl0L01hdGgubWluKEJkdCxwLmxlbmd0aCk7Zm9yKGxldFtiLEVdb2YgcC5lbnRyaWVzKCkpe2xldCBfPTA7RS5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LEUuc3ByaXRlJiYoRS5pbWFnZS53aWR0aD00OCxFLmltYWdlLmhlaWdodD00OCxFLmltYWdlLlk9XyxfPUUuaW1hZ2UuWStFLmltYWdlLmhlaWdodCk7bGV0IEw9RS53cmFwJiZmcy53cmFwLE49VVcoZnMpO2lmKE4uZm9udFNpemU9Ti5mb250U2l6ZSsyLE4uZm9udFdlaWdodD0iYm9sZCIsc20oImxhYmVsIixFLEwsTixtLmRhdGEud2lkdGhMaW1pdCksRS5sYWJlbC5ZPV8rOCxfPUUubGFiZWwuWStFLmxhYmVsLmhlaWdodCxFLnR5cGUmJkUudHlwZS50ZXh0IT09IiIpe0UudHlwZS50ZXh0PSJbIitFLnR5cGUudGV4dCsiXSI7bGV0IHo9VVcoZnMpO3NtKCJ0eXBlIixFLEwseixtLmRhdGEud2lkdGhMaW1pdCksRS50eXBlLlk9Xys1LF89RS50eXBlLlkrRS50eXBlLmhlaWdodH1pZihFLmRlc2NyJiZFLmRlc2NyLnRleHQhPT0iIil7bGV0IHo9VVcoZnMpO3ouZm9udFNpemU9ei5mb250U2l6ZS0yLHNtKCJkZXNjciIsRSxMLHosbS5kYXRhLndpZHRoTGltaXQpLEUuZGVzY3IuWT1fKzIwLF89RS5kZXNjci5ZK0UuZGVzY3IuaGVpZ2h0fWlmKGI9PTB8fGIlQmR0PT09MCl7bGV0IHo9Zi5kYXRhLnN0YXJ0eCtmcy5kaWFncmFtTWFyZ2luWCxLPWYuZGF0YS5zdG9weStmcy5kaWFncmFtTWFyZ2luWStfO20uc2V0RGF0YSh6LHosSyxLKX1lbHNle2xldCB6PW0uZGF0YS5zdG9weCE9PW0uZGF0YS5zdGFydHg/bS5kYXRhLnN0b3B4K2ZzLmRpYWdyYW1NYXJnaW5YOm0uZGF0YS5zdGFydHgsSz1tLmRhdGEuc3RhcnR5O20uc2V0RGF0YSh6LHosSyxLKX1tLm5hbWU9RS5hbGlhcztsZXQgQj12LmRiLmdldEM0U2hhcGVBcnJheShFLmFsaWFzKSxqPXYuZGIuZ2V0QzRTaGFwZUtleXMoRS5hbGlhcyk7ai5sZW5ndGg+MCYmeE50KG0saSxCLGopLGE9RS5hbGlhcztsZXQgUj12LmRiLmdldEJvdW5kYXJ5cyhhKTtSLmxlbmd0aD4wJiZFTnQoaSxhLG0sUix2KSxFLmFsaWFzIT09Imdsb2JhbCImJnlOdChpLEUsbSksZi5kYXRhLnN0b3B5PU1hdGgubWF4KG0uZGF0YS5zdG9weStmcy5jNFNoYXBlTWFyZ2luLGYuZGF0YS5zdG9weSksZi5kYXRhLnN0b3B4PU1hdGgubWF4KG0uZGF0YS5zdG9weCtmcy5jNFNoYXBlTWFyZ2luLGYuZGF0YS5zdG9weCksR1c9TWF0aC5tYXgoR1csZi5kYXRhLnN0b3B4KSxWVz1NYXRoLm1heChWVyxmLmRhdGEuc3RvcHkpfX1jb25zdCBUTnQ9e2RyYXdQZXJzb25PclN5c3RlbUFycmF5OnhOdCxkcmF3Qm91bmRhcnk6eU50LHNldENvbmY6UmR0LGRyYXc6ZnVuY3Rpb24oaSxhLGYscCl7ZnM9TGUoKS5jNDtjb25zdCB2PUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt2PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBiPXlyKHY9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iik7bGV0IEU9cC5kYjtwLmRiLnNldFdyYXAoZnMud3JhcCksd050PUUuZ2V0QzRTaGFwZUluUm93KCksQmR0PUUuZ2V0QzRCb3VuZGFyeUluUm93KCksVXQuZGVidWcoYEM6JHtKU09OLnN0cmluZ2lmeShmcyxudWxsLDIpfWApO2NvbnN0IF89dj09PSJzYW5kYm94Ij9iLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKTtnMy5pbnNlcnRDb21wdXRlckljb24oXyksZzMuaW5zZXJ0RGF0YWJhc2VJY29uKF8pLGczLmluc2VydENsb2NrSWNvbihfKTtsZXQgTD1uZXcgbU50KHApO0wuc2V0RGF0YShmcy5kaWFncmFtTWFyZ2luWCxmcy5kaWFncmFtTWFyZ2luWCxmcy5kaWFncmFtTWFyZ2luWSxmcy5kaWFncmFtTWFyZ2luWSksTC5kYXRhLndpZHRoTGltaXQ9c2NyZWVuLmF2YWlsV2lkdGgsR1c9ZnMuZGlhZ3JhbU1hcmdpblgsVlc9ZnMuZGlhZ3JhbU1hcmdpblk7Y29uc3QgTj1wLmRiLmdldFRpdGxlKCk7bGV0IEI9cC5kYi5nZXRCb3VuZGFyeXMoIiIpO0VOdChfLCIiLEwsQixwKSxnMy5pbnNlcnRBcnJvd0hlYWQoXyksZzMuaW5zZXJ0QXJyb3dFbmQoXyksZzMuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoXyksZzMuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKF8pLE1JZShfLHAuZGIuZ2V0UmVscygpLHAuZGIuZ2V0QzRTaGFwZSxwKSxMLmRhdGEuc3RvcHg9R1csTC5kYXRhLnN0b3B5PVZXO2NvbnN0IGo9TC5kYXRhO2xldCB6PWouc3RvcHktai5zdGFydHkrMipmcy5kaWFncmFtTWFyZ2luWTtjb25zdCBpdD1qLnN0b3B4LWouc3RhcnR4KzIqZnMuZGlhZ3JhbU1hcmdpblg7TiYmXy5hcHBlbmQoInRleHQiKS50ZXh0KE4pLmF0dHIoIngiLChqLnN0b3B4LWouc3RhcnR4KS8yLTQqZnMuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLGouc3RhcnR5K2ZzLmRpYWdyYW1NYXJnaW5ZKSxvZyhfLHosaXQsZnMudXNlTWF4V2lkdGgpO2NvbnN0IHN0PU4/NjA6MDtfLmF0dHIoInZpZXdCb3giLGouc3RhcnR4LWZzLmRpYWdyYW1NYXJnaW5YKyIgLSIrKGZzLmRpYWdyYW1NYXJnaW5ZK3N0KSsiICIraXQrIiAiKyh6K3N0KSksVXQuZGVidWcoIm1vZGVsczoiLGopfX0sSUllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6SE1lLGRiOk5kdCxyZW5kZXJlcjpUTnQsc3R5bGVzOmk9PmAucGVyc29uIHsKICAgIHN0cm9rZTogJHtpLnBlcnNvbkJvcmRlcn07CiAgICBmaWxsOiAke2kucGVyc29uQmtnfTsKICB9CmAsaW5pdDooe2M0Omksd3JhcDphfSk9PntUTnQuc2V0Q29uZihpKSxOZHQuc2V0V3JhcChhKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqZHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihuZixYaSxFcyx4YSl7Zm9yKEVzPUVzfHx7fSx4YT1uZi5sZW5ndGg7eGEtLTtFc1tuZlt4YV1dPVhpKTtyZXR1cm4gRXN9LGE9WzEsNF0sZj1bMSwzXSxwPVsxLDVdLHY9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLG09WzIsMl0sYj1bMSwxM10sRT1bMSwxNF0sXz1bMSwxNV0sTD1bMSwxNl0sTj1bMSwyM10sQj1bMSwyNV0saj1bMSwyNl0sUj1bMSwyN10sej1bMSw0OV0sSz1bMSw0OF0saXQ9WzEsMjldLHN0PVsxLDMwXSx1dD1bMSwzMV0sYnQ9WzEsMzJdLG10PVsxLDMzXSx5dD1bMSw0NF0sZHQ9WzEsNDZdLGh0PVsxLDQyXSx3dD1bMSw0N10sWD1bMSw0M10scHQ9WzEsNTBdLFU9WzEsNDVdLHh0PVsxLDUxXSxudD1bMSw1Ml0sT3Q9WzEsMzRdLE50PVsxLDM1XSxxdD1bMSwzNl0sQ3Q9WzEsMzddLFo9WzEsNTddLFR0PVsxLDgsOSwxMCwxMSwyNywzMiwzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSxIdD1bMSw2MV0sSXQ9WzEsNjBdLEZ0PVsxLDYyXSxrZT1bOCw5LDExLDczLDc1XSxwbj1bMSw4OF0sTWU9WzEsOTNdLHZlPVsxLDkyXSxHZT1bMSw4OV0sS2U9WzEsODVdLHdlPVsxLDkxXSxfZT1bMSw4N10sJHQ9WzEsOTRdLHJlPVsxLDkwXSxpZT1bMSw5NV0sT2U9WzEsODZdLG9lPVs4LDksMTAsMTEsNzMsNzVdLE5lPVs4LDksMTAsMTEsNDQsNzMsNzVdLG1lPVs4LDksMTAsMTEsMjksNDIsNDQsNDYsNDgsNTAsNTIsNTQsNTYsNTgsNjEsNjMsNjUsNjYsNjgsNzMsNzUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxjbj1bOCw5LDExLDQyLDU4LDczLDc1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sbGk9WzQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10seWE9WzEsMTIxXSxkYT1bMSwxMjBdLE9vPVsxLDEyOF0sZHM9WzEsMTQyXSxEcj1bMSwxNDNdLG5yPVsxLDE0NF0sZGk9WzEsMTQ1XSxFZT1bMSwxMzBdLFluPVsxLDEzMl0sSGU9WzEsMTM2XSxUaT1bMSwxMzddLGduPVsxLDEzOF0sa3M9WzEsMTM5XSxxYT1bMSwxNDBdLExhPVsxLDE0MV0sR3M9WzEsMTQ2XSxObz1bMSwxNDddLHZzPVsxLDEyNl0sbnU9WzEsMTI3XSwkcz1bMSwxMzRdLEx1PVsxLDEyOV0sZm09WzEsMTMzXSxhdj1bMSwxMzFdLFV1PVs4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sWmw9WzEsMTQ5XSxQYT1bOCw5LDExXSxBbD1bOCw5LDEwLDExLDE0LDQyLDU4LDg2LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sdWE9WzEsMTY5XSxiYz1bMSwxNjVdLENjPVsxLDE2Nl0sZ2E9WzEsMTcwXSxNYT1bMSwxNjddLEhhPVsxLDE2OF0sTGw9Wzc1LDExMywxMTZdLF9jPVs4LDksMTAsMTEsMTIsMTQsMjcsMjksMzIsNDIsNTgsNzMsODEsODIsODMsODQsODUsODYsODcsMTAyLDEwNiwxMDgsMTExLDExMiwxMTNdLG92PVsxMCwxMDNdLEpsPVszMSw0Nyw0OSw1MSw1Myw1NSw2MCw2Miw2NCw2NSw2Nyw2OSwxMTMsMTE0LDExNV0sWjE9WzEsMjM1XSxGZD1bMSwyMzNdLEoxPVsxLDIzN10sQmQ9WzEsMjMxXSxFMD1bMSwyMzJdLEJpPVsxLDIzNF0sb249WzEsMjM2XSxrcj1bMSwyMzhdLEVpPVsxLDI1NV0sSm89WzgsOSwxMSwxMDNdLHZjPVs4LDksMTAsMTEsNTgsODEsMTAyLDEwMywxMDYsMTA3LDEwOCwxMDldLHRmPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxncmFwaENvbmZpZzo0LGRvY3VtZW50OjUsbGluZTo2LHN0YXRlbWVudDo3LFNFTUk6OCxORVdMSU5FOjksU1BBQ0U6MTAsRU9GOjExLEdSQVBIOjEyLE5PRElSOjEzLERJUjoxNCxGaXJzdFN0bXRTZXBlcmF0b3I6MTUsZW5kaW5nOjE2LGVuZFRva2VuOjE3LHNwYWNlTGlzdDoxOCxzcGFjZUxpc3ROZXdsaW5lOjE5LHZlcnRpY2VTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGxpbms6Mzksbm9kZTo0MCxzdHlsZWRWZXJ0ZXg6NDEsQU1QOjQyLHZlcnRleDo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsaWRTdHJpbmc6NDUsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDYsRE9VQkxFQ0lSQ0xFRU5EOjQ3LFBTOjQ4LFBFOjQ5LCIoLSI6NTAsIi0pIjo1MSxTVEFESVVNU1RBUlQ6NTIsU1RBRElVTUVORDo1MyxTVUJST1VUSU5FU1RBUlQ6NTQsU1VCUk9VVElORUVORDo1NSxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1NiwiTk9ERV9TVFJJTkdbZmllbGRdIjo1NyxDT0xPTjo1OCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo1OSxQSVBFOjYwLENZTElOREVSU1RBUlQ6NjEsQ1lMSU5ERVJFTkQ6NjIsRElBTU9ORF9TVEFSVDo2MyxESUFNT05EX1NUT1A6NjQsVEFHRU5EOjY1LFRSQVBTVEFSVDo2NixUUkFQRU5EOjY3LElOVlRSQVBTVEFSVDo2OCxJTlZUUkFQRU5EOjY5LGxpbmtTdGF0ZW1lbnQ6NzAsYXJyb3dUZXh0OjcxLFRFU1RTVFI6NzIsU1RBUlRfTElOSzo3MyxlZGdlVGV4dDo3NCxMSU5LOjc1LGVkZ2VUZXh0VG9rZW46NzYsU1RSOjc3LE1EX1NUUjo3OCx0ZXh0VG9rZW46Nzksa2V5d29yZHM6ODAsU1RZTEU6ODEsTElOS1NUWUxFOjgyLENMQVNTREVGOjgzLENMQVNTOjg0LENMSUNLOjg1LERPV046ODYsVVA6ODcsdGV4dE5vVGFnc1Rva2VuOjg4LHN0eWxlc09wdDo4OSwiaWRTdHJpbmdbdmVydGV4XSI6OTAsImlkU3RyaW5nW2NsYXNzXSI6OTEsQ0FMTEJBQ0tOQU1FOjkyLENBTExCQUNLQVJHUzo5MyxIUkVGOjk0LExJTktfVEFSR0VUOjk1LCJTVFJbbGlua10iOjk2LCJTVFJbdG9vbHRpcF0iOjk3LGFscGhhTnVtOjk4LERFRkFVTFQ6OTksbnVtTGlzdDoxMDAsSU5URVJQT0xBVEU6MTAxLE5VTToxMDIsQ09NTUE6MTAzLHN0eWxlOjEwNCxzdHlsZUNvbXBvbmVudDoxMDUsTk9ERV9TVFJJTkc6MTA2LFVOSVQ6MTA3LEJSS1Q6MTA4LFBDVDoxMDksaWRTdHJpbmdUb2tlbjoxMTAsTUlOVVM6MTExLE1VTFQ6MTEyLFVOSUNPREVfVEVYVDoxMTMsVEVYVDoxMTQsVEFHU1RBUlQ6MTE1LEVER0VfVEVYVDoxMTYsYWxwaGFOdW1Ub2tlbjoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6IkFNUCIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkRPVUJMRUNJUkNMRVNUQVJUIiw0NzoiRE9VQkxFQ0lSQ0xFRU5EIiw0ODoiUFMiLDQ5OiJQRSIsNTA6IigtIiw1MToiLSkiLDUyOiJTVEFESVVNU1RBUlQiLDUzOiJTVEFESVVNRU5EIiw1NDoiU1VCUk9VVElORVNUQVJUIiw1NToiU1VCUk9VVElORUVORCIsNTY6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1NzoiTk9ERV9TVFJJTkdbZmllbGRdIiw1ODoiQ09MT04iLDU5OiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYwOiJQSVBFIiw2MToiQ1lMSU5ERVJTVEFSVCIsNjI6IkNZTElOREVSRU5EIiw2MzoiRElBTU9ORF9TVEFSVCIsNjQ6IkRJQU1PTkRfU1RPUCIsNjU6IlRBR0VORCIsNjY6IlRSQVBTVEFSVCIsNjc6IlRSQVBFTkQiLDY4OiJJTlZUUkFQU1RBUlQiLDY5OiJJTlZUUkFQRU5EIiw3MjoiVEVTVFNUUiIsNzM6IlNUQVJUX0xJTksiLDc1OiJMSU5LIiw3NzoiU1RSIiw3ODoiTURfU1RSIiw4MToiU1RZTEUiLDgyOiJMSU5LU1RZTEUiLDgzOiJDTEFTU0RFRiIsODQ6IkNMQVNTIiw4NToiQ0xJQ0siLDg2OiJET1dOIiw4NzoiVVAiLDkwOiJpZFN0cmluZ1t2ZXJ0ZXhdIiw5MToiaWRTdHJpbmdbY2xhc3NdIiw5MjoiQ0FMTEJBQ0tOQU1FIiw5MzoiQ0FMTEJBQ0tBUkdTIiw5NDoiSFJFRiIsOTU6IkxJTktfVEFSR0VUIiw5NjoiU1RSW2xpbmtdIiw5NzoiU1RSW3Rvb2x0aXBdIiw5OToiREVGQVVMVCIsMTAxOiJJTlRFUlBPTEFURSIsMTAyOiJOVU0iLDEwMzoiQ09NTUEiLDEwNjoiTk9ERV9TVFJJTkciLDEwNzoiVU5JVCIsMTA4OiJCUktUIiwxMDk6IlBDVCIsMTExOiJNSU5VUyIsMTEyOiJNVUxUIiwxMTM6IlVOSUNPREVfVEVYVCIsMTE0OiJURVhUIiwxMTU6IlRBR1NUQVJUIiwxMTY6IkVER0VfVEVYVCIsMTE4OiJkaXJlY3Rpb25fdGIiLDExOToiZGlyZWN0aW9uX2J0IiwxMjA6ImRpcmVjdGlvbl9ybCIsMTIxOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMV0sWzQwLDFdLFs0MCw1XSxbNDEsMV0sWzQxLDNdLFs0Myw0XSxbNDMsNF0sWzQzLDZdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw4XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsMV0sWzM5LDJdLFszOSwzXSxbMzksM10sWzM5LDFdLFszOSwzXSxbNzQsMV0sWzc0LDJdLFs3NCwxXSxbNzQsMV0sWzcwLDFdLFs3MSwzXSxbMzAsMV0sWzMwLDJdLFszMCwxXSxbMzAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwxXSxbMjgsMV0sWzI0LDVdLFsyNSw1XSxbMjYsMl0sWzI2LDRdLFsyNiwzXSxbMjYsNV0sWzI2LDNdLFsyNiw1XSxbMjYsNV0sWzI2LDddLFsyNiwyXSxbMjYsNF0sWzI2LDJdLFsyNiw0XSxbMjYsNF0sWzI2LDZdLFsyMiw1XSxbMjMsNV0sWzIzLDVdLFsyMyw5XSxbMjMsOV0sWzIzLDddLFsyMyw3XSxbMTAwLDFdLFsxMDAsM10sWzg5LDFdLFs4OSwzXSxbMTA0LDFdLFsxMDQsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbNzYsMV0sWzc2LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbNDUsMV0sWzQ1LDJdLFs5OCwxXSxbOTgsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFhpLEVzLHhhLHhpLFdjLENlLGdwKXt2YXIgQmU9Q2UubGVuZ3RoLTE7c3dpdGNoKFdjKXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoQ2VbQmVdKXx8Q2VbQmVdLmxlbmd0aD4wKSYmQ2VbQmUtMV0ucHVzaChDZVtCZV0pLHRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxNzY6dGhpcy4kPUNlW0JlXTticmVhaztjYXNlIDExOnhpLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOnhpLnNldERpcmVjdGlvbihDZVtCZS0xXSksdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPUNlW0JlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9eGkuYWRkU3ViR3JhcGgoQ2VbQmUtNl0sQ2VbQmUtMV0sQ2VbQmUtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXhpLmFkZFN1YkdyYXBoKENlW0JlLTNdLENlW0JlLTFdLENlW0JlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD14aS5hZGRTdWJHcmFwaCh2b2lkIDAsQ2VbQmUtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1DZVtCZV0udHJpbSgpLHhpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1DZVtCZV0udHJpbSgpLHhpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp4aS5hZGRMaW5rKENlW0JlLTJdLnN0bXQsQ2VbQmVdLENlW0JlLTFdKSx0aGlzLiQ9e3N0bXQ6Q2VbQmVdLG5vZGVzOkNlW0JlXS5jb25jYXQoQ2VbQmUtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ0OnhpLmFkZExpbmsoQ2VbQmUtM10uc3RtdCxDZVtCZS0xXSxDZVtCZS0yXSksdGhpcy4kPXtzdG10OkNlW0JlLTFdLG5vZGVzOkNlW0JlLTFdLmNvbmNhdChDZVtCZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10OkNlW0JlLTFdLG5vZGVzOkNlW0JlLTFdfTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDpDZVtCZV0sbm9kZXM6Q2VbQmVdfTticmVhaztjYXNlIDQ3OnRoaXMuJD1bQ2VbQmVdXTticmVhaztjYXNlIDQ4OnRoaXMuJD1DZVtCZS00XS5jb25jYXQoQ2VbQmVdKTticmVhaztjYXNlIDQ5OnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9Q2VbQmUtMl0seGkuc2V0Q2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDUxOnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9Q2VbQmUtNV0seGkuYWRkVmVydGV4KENlW0JlLTVdLENlW0JlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU0OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU1OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU2OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1DZVtCZS03XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtN10sQ2VbQmUtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW0NlW0JlLTVdLENlW0JlLTNdXV0pKTticmVhaztjYXNlIDU4OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPUNlW0JlLTVdLHhpLmFkZFZlcnRleChDZVtCZS01XSxDZVtCZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPUNlW0JlXSx4aS5hZGRWZXJ0ZXgoQ2VbQmVdKTticmVhaztjYXNlIDY4OkNlW0JlLTFdLnRleHQ9Q2VbQmVdLHRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDY5OmNhc2UgNzA6Q2VbQmUtMl0udGV4dD1DZVtCZS0xXSx0aGlzLiQ9Q2VbQmUtMl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgNzI6dmFyIEZmPXhpLmRlc3RydWN0TGluayhDZVtCZV0sQ2VbQmUtMl0pO3RoaXMuJD17dHlwZTpGZi50eXBlLHN0cm9rZTpGZi5zdHJva2UsbGVuZ3RoOkZmLmxlbmd0aCx0ZXh0OkNlW0JlLTFdfTticmVhaztjYXNlIDczOnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXt0ZXh0OkNlW0JlLTFdLnRleHQrIiIrQ2VbQmVdLHR5cGU6Q2VbQmUtMV0udHlwZX07YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNzc6dmFyIEZmPXhpLmRlc3RydWN0TGluayhDZVtCZV0pO3RoaXMuJD17dHlwZTpGZi50eXBlLHN0cm9rZTpGZi5zdHJva2UsbGVuZ3RoOkZmLmxlbmd0aH07YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9Q2VbQmUtMV07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpDZVtCZS0xXS50ZXh0KyIiK0NlW0JlXSx0eXBlOkNlW0JlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOmNhc2UgOTc6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9e3RleHQ6Q2VbQmUtMV0udGV4dCsiIitDZVtCZV0sdHlwZTpDZVtCZS0xXS50eXBlfTticmVhaztjYXNlIDk2OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgOTg6dGhpcy4kPUNlW0JlLTRdLHhpLmFkZENsYXNzKENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0Q2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDEwMDpjYXNlIDEwODp0aGlzLiQ9Q2VbQmUtMV0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA5OnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTNdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDI6dGhpcy4kPUNlW0JlLTJdLHhpLnNldENsaWNrRXZlbnQoQ2VbQmUtMl0sQ2VbQmUtMV0sQ2VbQmVdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS00XSxDZVtCZS0zXSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS00XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1DZVtCZS0yXSx4aS5zZXRMaW5rKENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDU6dGhpcy4kPUNlW0JlLTRdLHhpLnNldExpbmsoQ2VbQmUtNF0sQ2VbQmUtMl0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtNF0sQ2VbQmVdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0TGluayhDZVtCZS00XSxDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1DZVtCZS02XSx4aS5zZXRMaW5rKENlW0JlLTZdLENlW0JlLTRdLENlW0JlXSkseGkuc2V0VG9vbHRpcChDZVtCZS02XSxDZVtCZS0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPUNlW0JlLTFdLHhpLnNldExpbmsoQ2VbQmUtMV0sQ2VbQmVdKTticmVhaztjYXNlIDExMTp0aGlzLiQ9Q2VbQmUtM10seGkuc2V0TGluayhDZVtCZS0zXSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS0zXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTEyOnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRMaW5rKENlW0JlLTNdLENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPUNlW0JlLTVdLHhpLnNldExpbmsoQ2VbQmUtNV0sQ2VbQmUtNF0sQ2VbQmVdKSx4aS5zZXRUb29sdGlwKENlW0JlLTVdLENlW0JlLTJdKTticmVhaztjYXNlIDExNDp0aGlzLiQ9Q2VbQmUtNF0seGkuYWRkVmVydGV4KENlW0JlLTJdLHZvaWQgMCx2b2lkIDAsQ2VbQmVdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9Q2VbQmUtNF0seGkudXBkYXRlTGluayhbQ2VbQmUtMl1dLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPUNlW0JlLTRdLHhpLnVwZGF0ZUxpbmsoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9Q2VbQmUtOF0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKFtDZVtCZS02XV0sQ2VbQmUtMl0pLHhpLnVwZGF0ZUxpbmsoW0NlW0JlLTZdXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1DZVtCZS04XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoQ2VbQmUtNl0sQ2VbQmUtMl0pLHhpLnVwZGF0ZUxpbmsoQ2VbQmUtNl0sQ2VbQmVdKTticmVhaztjYXNlIDExOTp0aGlzLiQ9Q2VbQmUtNl0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKFtDZVtCZS00XV0sQ2VbQmVdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9Q2VbQmUtNl0seGkudXBkYXRlTGlua0ludGVycG9sYXRlKENlW0JlLTRdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMjE6Y2FzZSAxMjM6dGhpcy4kPVtDZVtCZV1dO2JyZWFrO2Nhc2UgMTIyOmNhc2UgMTI0OkNlW0JlLTJdLnB1c2goQ2VbQmVdKSx0aGlzLiQ9Q2VbQmUtMl07YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPUNlW0JlLTFdK0NlW0JlXTticmVhaztjYXNlIDE3NDp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgMTc1OnRoaXMuJD1DZVtCZS0xXSsiIitDZVtCZV07YnJlYWs7Y2FzZSAxNzc6dGhpcy4kPUNlW0JlLTFdKyIiK0NlW0JlXTticmVhaztjYXNlIDE3ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4MTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsOTphLDEwOmYsMTI6cH0sezE6WzNdfSxpKHYsbSx7NTo2fSksezQ6Nyw5OmEsMTA6ZiwxMjpwfSx7NDo4LDk6YSwxMDpmLDEyOnB9LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6TCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpOLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LGkodixbMiw5XSksaSh2LFsyLDEwXSksaSh2LFsyLDExXSksezg6WzEsNTRdLDk6WzEsNTVdLDEwOlosMTU6NTMsMTg6NTZ9LGkoVHQsWzIsM10pLGkoVHQsWzIsNF0pLGkoVHQsWzIsNV0pLGkoVHQsWzIsNl0pLGkoVHQsWzIsN10pLGkoVHQsWzIsOF0pLHs4Okh0LDk6SXQsMTE6RnQsMjE6NTgsMzk6NTksNzA6NjMsNzM6WzEsNjRdLDc1OlsxLDY1XX0sezg6SHQsOTpJdCwxMTpGdCwyMTo2Nn0sezg6SHQsOTpJdCwxMTpGdCwyMTo2N30sezg6SHQsOTpJdCwxMTpGdCwyMTo2OH0sezg6SHQsOTpJdCwxMTpGdCwyMTo2OX0sezg6SHQsOTpJdCwxMTpGdCwyMTo3MH0sezg6SHQsOTpJdCwxMDpbMSw3MV0sMTE6RnQsMjE6NzJ9LGkoVHQsWzIsMzZdKSx7MzU6WzEsNzNdfSx7Mzc6WzEsNzRdfSxpKFR0LFsyLDM5XSksaShrZSxbMiw0Nl0sezE4Ojc1LDEwOlp9KSx7MTA6WzEsNzZdfSx7MTA6WzEsNzddfSx7MTA6WzEsNzhdfSx7MTA6WzEsNzldfSx7MTQ6cG4sNDI6TWUsNTg6dmUsNzc6WzEsODNdLDg2OkdlLDkyOlsxLDgwXSw5NDpbMSw4MV0sOTg6ODIsMTAyOktlLDEwMzp3ZSwxMDY6X2UsMTA4OiR0LDExMTpyZSwxMTI6aWUsMTEzOk9lLDExNzo4NH0saShUdCxbMiwxNzhdKSxpKFR0LFsyLDE3OV0pLGkoVHQsWzIsMTgwXSksaShUdCxbMiwxODFdKSxpKG9lLFsyLDQ3XSksaShvZSxbMiw0OV0sezQ0OlsxLDk2XX0pLGkoTmUsWzIsNjddLHsxMTA6MTA5LDI5OlsxLDk3XSw0Mjp6LDQ2OlsxLDk4XSw0ODpbMSw5OV0sNTA6WzEsMTAwXSw1MjpbMSwxMDFdLDU0OlsxLDEwMl0sNTY6WzEsMTAzXSw1ODpLLDYxOlsxLDEwNF0sNjM6WzEsMTA1XSw2NTpbMSwxMDZdLDY2OlsxLDEwN10sNjg6WzEsMTA4XSw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTE6VSwxMTI6eHQsMTEzOm50fSksaShtZSxbMiwxNzRdKSxpKG1lLFsyLDEzNV0pLGkobWUsWzIsMTM2XSksaShtZSxbMiwxMzddKSxpKG1lLFsyLDEzOF0pLGkobWUsWzIsMTM5XSksaShtZSxbMiwxNDBdKSxpKG1lLFsyLDE0MV0pLGkobWUsWzIsMTQyXSksaShtZSxbMiwxNDNdKSxpKG1lLFsyLDE0NF0pLGkobWUsWzIsMTQ1XSksaSh2LFsyLDEyXSksaSh2LFsyLDE4XSksaSh2LFsyLDE5XSksezk6WzEsMTEwXX0saShjbixbMiwyNl0sezE4OjExMSwxMDpafSksaShUdCxbMiwyN10pLHs0MDoxMTIsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50fSxpKFR0LFsyLDQwXSksaShUdCxbMiw0MV0pLGkoVHQsWzIsNDJdKSxpKGxpLFsyLDcxXSx7NzE6MTEzLDYwOlsxLDExNV0sNzI6WzEsMTE0XX0pLHs3NDoxMTYsNzY6MTE3LDc3OlsxLDExOF0sNzg6WzEsMTE5XSwxMTM6eWEsMTE2OmRhfSxpKFs0Miw1OCw2MCw3Miw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFsyLDc3XSksaShUdCxbMiwyOF0pLGkoVHQsWzIsMjldKSxpKFR0LFsyLDMwXSksaShUdCxbMiwzMV0pLGkoVHQsWzIsMzJdKSx7MTA6T28sMTI6ZHMsMTQ6RHIsMjc6bnIsMjg6MTIyLDMyOmRpLDQyOkVlLDU4OlluLDczOkhlLDc3OlsxLDEyNF0sNzg6WzEsMTI1XSw4MDoxMzUsODE6VGksODI6Z24sODM6a3MsODQ6cWEsODU6TGEsODY6R3MsODc6Tm8sODg6MTIzLDEwMjp2cywxMDY6bnUsMTA4OiRzLDExMTpMdSwxMTI6Zm0sMTEzOmF2fSxpKFV1LG0sezU6MTQ4fSksaShUdCxbMiwzN10pLGkoVHQsWzIsMzhdKSxpKGtlLFsyLDQ1XSx7NDI6Wmx9KSx7NDI6eiw0NToxNTAsNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudH0sezk5OlsxLDE1MV0sMTAwOjE1MiwxMDI6WzEsMTUzXX0sezQyOnosNDU6MTU0LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LHs0Mjp6LDQ1OjE1NSw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50fSxpKFBhLFsyLDEwMF0sezEwOlsxLDE1Nl0sOTM6WzEsMTU3XX0pLHs3NzpbMSwxNThdfSxpKFBhLFsyLDEwOF0sezExNzoxNjAsMTA6WzEsMTU5XSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDExMF0sezEwOlsxLDE2MV19KSxpKEFsLFsyLDE3Nl0pLGkoQWwsWzIsMTYzXSksaShBbCxbMiwxNjRdKSxpKEFsLFsyLDE2NV0pLGkoQWwsWzIsMTY2XSksaShBbCxbMiwxNjddKSxpKEFsLFsyLDE2OF0pLGkoQWwsWzIsMTY5XSksaShBbCxbMiwxNzBdKSxpKEFsLFsyLDE3MV0pLGkoQWwsWzIsMTcyXSksaShBbCxbMiwxNzNdKSx7NDI6eiw0NToxNjIsNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudH0sezMwOjE2Myw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxNzEsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTczLDQ4OlsxLDE3Ml0sNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTc0LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjE3NSw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxNzYsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MTA2OlsxLDE3N119LHszMDoxNzgsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTc5LDYzOlsxLDE4MF0sNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7MzA6MTgxLDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjE4Miw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoxODMsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKG1lLFsyLDE3NV0pLGkodixbMiwyMF0pLGkoY24sWzIsMjVdKSxpKGtlLFsyLDQzXSx7MTg6MTg0LDEwOlp9KSxpKGxpLFsyLDY4XSx7MTA6WzEsMTg1XX0pLHsxMDpbMSwxODZdfSx7MzA6MTg3LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezc1OlsxLDE4OF0sNzY6MTg5LDExMzp5YSwxMTY6ZGF9LGkoTGwsWzIsNzNdKSxpKExsLFsyLDc1XSksaShMbCxbMiw3Nl0pLGkoTGwsWzIsMTYxXSksaShMbCxbMiwxNjJdKSx7ODpIdCw5Okl0LDEwOk9vLDExOkZ0LDEyOmRzLDE0OkRyLDIxOjE5MSwyNzpuciwyOTpbMSwxOTBdLDMyOmRpLDQyOkVlLDU4OlluLDczOkhlLDgwOjEzNSw4MTpUaSw4Mjpnbiw4Mzprcyw4NDpxYSw4NTpMYSw4NjpHcyw4NzpObyw4ODoxOTIsMTAyOnZzLDEwNjpudSwxMDg6JHMsMTExOkx1LDExMjpmbSwxMTM6YXZ9LGkoX2MsWzIsOTRdKSxpKF9jLFsyLDk2XSksaShfYyxbMiw5N10pLGkoX2MsWzIsMTUwXSksaShfYyxbMiwxNTFdKSxpKF9jLFsyLDE1Ml0pLGkoX2MsWzIsMTUzXSksaShfYyxbMiwxNTRdKSxpKF9jLFsyLDE1NV0pLGkoX2MsWzIsMTU2XSksaShfYyxbMiwxNTddKSxpKF9jLFsyLDE1OF0pLGkoX2MsWzIsMTU5XSksaShfYyxbMiwxNjBdKSxpKF9jLFsyLDgzXSksaShfYyxbMiw4NF0pLGkoX2MsWzIsODVdKSxpKF9jLFsyLDg2XSksaShfYyxbMiw4N10pLGkoX2MsWzIsODhdKSxpKF9jLFsyLDg5XSksaShfYyxbMiw5MF0pLGkoX2MsWzIsOTFdKSxpKF9jLFsyLDkyXSksaShfYyxbMiw5M10pLHs2OjExLDc6MTIsODpiLDk6RSwxMDpfLDExOkwsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6TiwzMjpbMSwxOTNdLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LHsxMDpaLDE4OjE5NH0sezEwOlsxLDE5NV0sNDI6eiw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOnh0LDExMzpudH0sezEwOlsxLDE5Nl19LHsxMDpbMSwxOTddLDEwMzpbMSwxOThdfSxpKG92LFsyLDEyMV0pLHsxMDpbMSwxOTldLDQyOnosNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6MTA5LDExMTpVLDExMjp4dCwxMTM6bnR9LHsxMDpbMSwyMDBdLDQyOnosNTg6Syw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6MTA5LDExMTpVLDExMjp4dCwxMTM6bnR9LHs3NzpbMSwyMDFdfSxpKFBhLFsyLDEwMl0sezEwOlsxLDIwMl19KSxpKFBhLFsyLDEwNF0sezEwOlsxLDIwM119KSx7Nzc6WzEsMjA0XX0saShBbCxbMiwxNzddKSx7Nzc6WzEsMjA1XSw5NTpbMSwyMDZdfSxpKG9lLFsyLDUwXSx7MTEwOjEwOSw0Mjp6LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTExOlUsMTEyOnh0LDExMzpudH0pLHszMTpbMSwyMDddLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShKbCxbMiw3OV0pLGkoSmwsWzIsODFdKSxpKEpsLFsyLDgyXSksaShKbCxbMiwxNDZdKSxpKEpsLFsyLDE0N10pLGkoSmwsWzIsMTQ4XSksaShKbCxbMiwxNDldKSx7NDc6WzEsMjA5XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMDoyMTAsNjU6dWEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7NDk6WzEsMjExXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs1MTpbMSwyMTJdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezUzOlsxLDIxM10sNjU6dWEsNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSx7NTU6WzEsMjE0XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs1ODpbMSwyMTVdfSx7NjI6WzEsMjE2XSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2NDpbMSwyMTddLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezMwOjIxOCw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHszMTpbMSwyMTldLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezY1OnVhLDY3OlsxLDIyMF0sNjk6WzEsMjIxXSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2NTp1YSw2NzpbMSwyMjNdLDY5OlsxLDIyMl0sNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKGtlLFsyLDQ0XSx7NDI6Wmx9KSxpKGxpLFsyLDcwXSksaShsaSxbMiw2OV0pLHs2MDpbMSwyMjRdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShsaSxbMiw3Ml0pLGkoTGwsWzIsNzRdKSx7MzA6MjI1LDY1OnVhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0saShVdSxtLHs1OjIyNn0pLGkoX2MsWzIsOTVdKSxpKFR0LFsyLDM1XSksezQxOjIyNyw0Mjp6LDQzOjM5LDQ1OjQwLDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyMjgsMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyMzksMTAxOlsxLDI0MF0sMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDpaMSw1ODpGZCw4MTpKMSw4OToyNDEsMTAxOlsxLDI0Ml0sMTAyOkJkLDEwNDoyMjksMTA1OjIzMCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9LHsxMDI6WzEsMjQzXX0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI0NCwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0sezQyOnosNDU6MjQ1LDU4OkssODY6eXQsOTk6ZHQsMTAyOmh0LDEwMzp3dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjp4dCwxMTM6bnR9LGkoUGEsWzIsMTAxXSksezc3OlsxLDI0Nl19LHs3NzpbMSwyNDddLDk1OlsxLDI0OF19LGkoUGEsWzIsMTA5XSksaShQYSxbMiwxMTFdLHsxMDpbMSwyNDldfSksaShQYSxbMiwxMTJdKSxpKE5lLFsyLDUxXSksaShKbCxbMiw4MF0pLGkoTmUsWzIsNTJdKSx7NDk6WzEsMjUwXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LGkoTmUsWzIsNTldKSxpKE5lLFsyLDU0XSksaShOZSxbMiw1NV0pLGkoTmUsWzIsNTZdKSx7MTA2OlsxLDI1MV19LGkoTmUsWzIsNThdKSxpKE5lLFsyLDYwXSksezY0OlsxLDI1Ml0sNjU6dWEsNzk6MjA4LDExMzpnYSwxMTQ6TWEsMTE1OkhhfSxpKE5lLFsyLDYyXSksaShOZSxbMiw2M10pLGkoTmUsWzIsNjVdKSxpKE5lLFsyLDY0XSksaShOZSxbMiw2Nl0pLGkoWzEwLDQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzhdKSx7MzE6WzEsMjUzXSw2NTp1YSw3OToyMDgsMTEzOmdhLDExNDpNYSwxMTU6SGF9LHs2OjExLDc6MTIsODpiLDk6RSwxMDpfLDExOkwsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6TiwzMjpbMSwyNTRdLDMzOjI0LDM0OkIsMzY6aiwzODpSLDQwOjI4LDQxOjM4LDQyOnosNDM6MzksNDU6NDAsNTg6Syw4MTppdCw4MjpzdCw4Mzp1dCw4NDpidCw4NTptdCw4Njp5dCw5OTpkdCwxMDI6aHQsMTAzOnd0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOnh0LDExMzpudCwxMTg6T3QsMTE5Ok50LDEyMDpxdCwxMjE6Q3R9LGkob2UsWzIsNDhdKSxpKFBhLFsyLDExNF0sezEwMzpFaX0pLGkoSm8sWzIsMTIzXSx7MTA1OjI1NiwxMDpaMSw1ODpGZCw4MTpKMSwxMDI6QmQsMTA2OkUwLDEwNzpCaSwxMDg6b24sMTA5OmtyfSksaSh2YyxbMiwxMjVdKSxpKHZjLFsyLDEyN10pLGkodmMsWzIsMTI4XSksaSh2YyxbMiwxMjldKSxpKHZjLFsyLDEzMF0pLGkodmMsWzIsMTMxXSksaSh2YyxbMiwxMzJdKSxpKHZjLFsyLDEzM10pLGkodmMsWzIsMTM0XSksaShQYSxbMiwxMTVdLHsxMDM6RWl9KSx7MTA6WzEsMjU3XX0saShQYSxbMiwxMTZdLHsxMDM6RWl9KSx7MTA6WzEsMjU4XX0saShvdixbMiwxMjJdKSxpKFBhLFsyLDk4XSx7MTAzOkVpfSksaShQYSxbMiw5OV0sezExMDoxMDksNDI6eiw1ODpLLDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMTpVLDExMjp4dCwxMTM6bnR9KSxpKFBhLFsyLDEwM10pLGkoUGEsWzIsMTA1XSx7MTA6WzEsMjU5XX0pLGkoUGEsWzIsMTA2XSksezk1OlsxLDI2MF19LHs0OTpbMSwyNjFdfSx7NjA6WzEsMjYyXX0sezY0OlsxLDI2M119LHs4Okh0LDk6SXQsMTE6RnQsMjE6MjY0fSxpKFR0LFsyLDM0XSksezEwOloxLDU4OkZkLDgxOkoxLDEwMjpCZCwxMDQ6MjY1LDEwNToyMzAsMTA2OkUwLDEwNzpCaSwxMDg6b24sMTA5OmtyfSxpKHZjLFsyLDEyNl0pLHsxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSw5ODoyNjYsMTAyOktlLDEwMzp3ZSwxMDY6X2UsMTA4OiR0LDExMTpyZSwxMTI6aWUsMTEzOk9lLDExNzo4NH0sezE0OnBuLDQyOk1lLDU4OnZlLDg2OkdlLDk4OjI2NywxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2UsMTE3Ojg0fSx7OTU6WzEsMjY4XX0saShQYSxbMiwxMTNdKSxpKE5lLFsyLDUzXSksezMwOjI2OSw2NTp1YSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOmdhLDExNDpNYSwxMTU6SGF9LGkoTmUsWzIsNjFdKSxpKFV1LG0sezU6MjcwfSksaShKbyxbMiwxMjRdLHsxMDU6MjU2LDEwOloxLDU4OkZkLDgxOkoxLDEwMjpCZCwxMDY6RTAsMTA3OkJpLDEwODpvbiwxMDk6a3J9KSxpKFBhLFsyLDExOV0sezExNzoxNjAsMTA6WzEsMjcxXSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDEyMF0sezExNzoxNjAsMTA6WzEsMjcyXSwxNDpwbiw0MjpNZSw1ODp2ZSw4NjpHZSwxMDI6S2UsMTAzOndlLDEwNjpfZSwxMDg6JHQsMTExOnJlLDExMjppZSwxMTM6T2V9KSxpKFBhLFsyLDEwN10pLHszMTpbMSwyNzNdLDY1OnVhLDc5OjIwOCwxMTM6Z2EsMTE0Ok1hLDExNTpIYX0sezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6TCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpOLDMyOlsxLDI3NF0sMzM6MjQsMzQ6QiwzNjpqLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpLLDgxOml0LDgyOnN0LDgzOnV0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmR0LDEwMjpodCwxMDM6d3QsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6eHQsMTEzOm50LDExODpPdCwxMTk6TnQsMTIwOnF0LDEyMTpDdH0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI3NSwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0sezEwOloxLDU4OkZkLDgxOkoxLDg5OjI3NiwxMDI6QmQsMTA0OjIyOSwxMDU6MjMwLDEwNjpFMCwxMDc6QmksMTA4Om9uLDEwOTprcn0saShOZSxbMiw1N10pLGkoVHQsWzIsMzNdKSxpKFBhLFsyLDExN10sezEwMzpFaX0pLGkoUGEsWzIsMTE4XSx7MTAzOkVpfSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWGksRXMpe2lmKEVzLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoWGkpO2Vsc2V7dmFyIHhhPW5ldyBFcnJvcihYaSk7dGhyb3cgeGEuaGFzaD1Fcyx4YX19LHBhcnNlOmZ1bmN0aW9uKFhpKXt2YXIgRXM9dGhpcyx4YT1bMF0seGk9W10sV2M9W251bGxdLENlPVtdLGdwPXRoaXMudGFibGUsQmU9IiIsRmY9MCxkZz0wLGRtPTIscGs9MSx4Mz1DZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxNbD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFQwPXt5eTp7fX07Zm9yKHZhciBjdiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGN2KSYmKFQwLnl5W2N2XT10aGlzLnl5W2N2XSk7TWwuc2V0SW5wdXQoWGksVDAueXkpLFQwLnl5LmxleGVyPU1sLFQwLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBNbC55eWxsb2M+InUiJiYoTWwueXlsbG9jPXt9KTt2YXIgRjU9TWwueXlsbG9jO0NlLnB1c2goRjUpO3ZhciBqYj1NbC5vcHRpb25zJiZNbC5vcHRpb25zLnJhbmdlczt0eXBlb2YgVDAueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VDAueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gQjUoKXt2YXIgZ2c7cmV0dXJuIGdnPXhpLnBvcCgpfHxNbC5sZXgoKXx8cGssdHlwZW9mIGdnIT0ibnVtYmVyIiYmKGdnIGluc3RhbmNlb2YgQXJyYXkmJih4aT1nZyxnZz14aS5wb3AoKSksZ2c9RXMuc3ltYm9sc19bZ2ddfHxnZyksZ2d9Zm9yKHZhciBsMSx0ZCxlZCxSNSx1dj17fSxqNSxwcCwkNSxrMzs7KXtpZih0ZD14YVt4YS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t0ZF0/ZWQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t0ZF06KChsMT09PW51bGx8fHR5cGVvZiBsMT4idSIpJiYobDE9QjUoKSksZWQ9Z3BbdGRdJiZncFt0ZF1bbDFdKSx0eXBlb2YgZWQ+InUifHwhZWQubGVuZ3RofHwhZWRbMF0pe3ZhciBnbT0iIjtrMz1bXTtmb3IoajUgaW4gZ3BbdGRdKXRoaXMudGVybWluYWxzX1tqNV0mJmo1PmRtJiZrMy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bajVdKyInIik7TWwuc2hvd1Bvc2l0aW9uP2dtPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZmKzEpK2A6CmArTWwuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrMy5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2wxXXx8bDEpKyInIjpnbT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhGZisxKSsiOiBVbmV4cGVjdGVkICIrKGwxPT1waz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tsMV18fGwxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnbSx7dGV4dDpNbC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bbDFdfHxsMSxsaW5lOk1sLnl5bGluZW5vLGxvYzpGNSxleHBlY3RlZDprM30pfWlmKGVkWzBdaW5zdGFuY2VvZiBBcnJheSYmZWQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit0ZCsiLCB0b2tlbjogIitsMSk7c3dpdGNoKGVkWzBdKXtjYXNlIDE6eGEucHVzaChsMSksV2MucHVzaChNbC55eXRleHQpLENlLnB1c2goTWwueXlsbG9jKSx4YS5wdXNoKGVkWzFdKSxsMT1udWxsLGRnPU1sLnl5bGVuZyxCZT1NbC55eXRleHQsRmY9TWwueXlsaW5lbm8sRjU9TWwueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihwcD10aGlzLnByb2R1Y3Rpb25zX1tlZFsxXV1bMV0sdXYuJD1XY1tXYy5sZW5ndGgtcHBdLHV2Ll8kPXtmaXJzdF9saW5lOkNlW0NlLmxlbmd0aC0ocHB8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpDZVtDZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpDZVtDZS5sZW5ndGgtKHBwfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkNlW0NlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0samImJih1di5fJC5yYW5nZT1bQ2VbQ2UubGVuZ3RoLShwcHx8MSldLnJhbmdlWzBdLENlW0NlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFI1PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh1dixbQmUsZGcsRmYsVDAueXksZWRbMV0sV2MsQ2VdLmNvbmNhdCh4MykpLHR5cGVvZiBSNTwidSIpcmV0dXJuIFI1O3BwJiYoeGE9eGEuc2xpY2UoMCwtMSpwcCoyKSxXYz1XYy5zbGljZSgwLC0xKnBwKSxDZT1DZS5zbGljZSgwLC0xKnBwKSkseGEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tlZFsxXV1bMF0pLFdjLnB1c2godXYuJCksQ2UucHVzaCh1di5fJCksJDU9Z3BbeGFbeGEubGVuZ3RoLTJdXVt4YVt4YS5sZW5ndGgtMV1dLHhhLnB1c2goJDUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxPYz1mdW5jdGlvbigpe3ZhciBuZj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFcyx4YSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFcyx4YSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRXMpfSxzZXRJbnB1dDpmdW5jdGlvbihYaSxFcyl7cmV0dXJuIHRoaXMueXk9RXN8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVhpLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBYaT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WGksdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVhpLHRoaXMubWF0Y2hlZCs9WGk7dmFyIEVzPVhpLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRXM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFhpfSx1bnB1dDpmdW5jdGlvbihYaSl7dmFyIEVzPVhpLmxlbmd0aCx4YT1YaS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVhpK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FcyksdGhpcy5vZmZzZXQtPUVzO3ZhciB4aT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4YS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXhhLmxlbmd0aC0xKTt2YXIgV2M9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhhPyh4YS5sZW5ndGg9PT14aS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3hpW3hpLmxlbmd0aC14YS5sZW5ndGhdLmxlbmd0aC14YVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUVzfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1djWzBdLFdjWzBdK3RoaXMueXlsZW5nLUVzXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oWGkpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShYaSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWGk9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihYaS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1hpLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFhpPXRoaXMubWF0Y2g7cmV0dXJuIFhpLmxlbmd0aDwyMCYmKFhpKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YaS5sZW5ndGgpKSwoWGkuc3Vic3RyKDAsMjApKyhYaS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFhpPXRoaXMucGFzdElucHV0KCksRXM9bmV3IEFycmF5KFhpLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFhpK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFcysiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWGksRXMpe3ZhciB4YSx4aSxXYztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoV2M9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoV2MueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseGk9WGlbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHhpJiYodGhpcy55eWxpbmVubys9eGkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eGk/eGlbeGkubGVuZ3RoLTFdLmxlbmd0aC14aVt4aS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYaVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1YaVswXSx0aGlzLm1hdGNoKz1YaVswXSx0aGlzLm1hdGNoZXM9WGksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoWGlbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhpWzBdLHhhPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEVzLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHhhKXJldHVybiB4YTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgQ2UgaW4gV2MpdGhpc1tDZV09V2NbQ2VdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFhpLEVzLHhhLHhpO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFdjPXRoaXMuX2N1cnJlbnRSdWxlcygpLENlPTA7Q2U8V2MubGVuZ3RoO0NlKyspaWYoeGE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tXY1tDZV1dKSx4YSYmKCFFc3x8eGFbMF0ubGVuZ3RoPkVzWzBdLmxlbmd0aCkpe2lmKEVzPXhhLHhpPUNlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFhpPXRoaXMudGVzdF9tYXRjaCh4YSxXY1tDZV0pLFhpIT09ITEpcmV0dXJuIFhpO2lmKHRoaXMuX2JhY2t0cmFjayl7RXM9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRXM/KFhpPXRoaXMudGVzdF9tYXRjaChFcyxXY1t4aV0pLFhpIT09ITE/WGk6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBFcz10aGlzLm5leHQoKTtyZXR1cm4gRXN8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEVzKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRXMpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBFcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBFcz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEVzKXtyZXR1cm4gRXM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhFc3x8MCksRXM+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFc106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oRXMpe3RoaXMuYmVnaW4oRXMpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEVzLHhhLHhpLFdjKXtzd2l0Y2goeGkpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDkyO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIDkzO2Nhc2UgMTM6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDE2OnJldHVybiJTVFIiO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDgxO2Nhc2UgMjA6cmV0dXJuIDk5O2Nhc2UgMjE6cmV0dXJuIDgyO2Nhc2UgMjI6cmV0dXJuIDEwMTtjYXNlIDIzOnJldHVybiA4MztjYXNlIDI0OnJldHVybiA4NDtjYXNlIDI1OnJldHVybiA5NDtjYXNlIDI2OnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODU7Y2FzZSAyOTpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMDpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMTpyZXR1cm4gRXMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMjpyZXR1cm4gMjc7Y2FzZSAzMzpyZXR1cm4gMzI7Y2FzZSAzNDpyZXR1cm4gOTU7Y2FzZSAzNTpyZXR1cm4gOTU7Y2FzZSAzNjpyZXR1cm4gOTU7Y2FzZSAzNzpyZXR1cm4gOTU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDEzO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ5OnJldHVybiAxMTg7Y2FzZSA1MDpyZXR1cm4gMTE5O2Nhc2UgNTE6cmV0dXJuIDEyMDtjYXNlIDUyOnJldHVybiAxMjE7Y2FzZSA1MzpyZXR1cm4gMTAyO2Nhc2UgNTQ6cmV0dXJuIDEwODtjYXNlIDU1OnJldHVybiA0NDtjYXNlIDU2OnJldHVybiA1ODtjYXNlIDU3OnJldHVybiA0MjtjYXNlIDU4OnJldHVybiA4O2Nhc2UgNTk6cmV0dXJuIDEwMztjYXNlIDYwOnJldHVybiAxMTI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDczO2Nhc2UgNjM6cmV0dXJuIDExNjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw3MztjYXNlIDY2OnJldHVybiAxMTY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDczO2Nhc2UgNjk6cmV0dXJuIDExNjtjYXNlIDcwOnJldHVybiA3NTtjYXNlIDcxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7Y2FzZSA3MjpyZXR1cm4iVEVYVCI7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNTA7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTI7Y2FzZSA3NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDU1O2Nhc2UgNzc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTQ7Y2FzZSA3ODpyZXR1cm4gNTY7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTtjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MTtjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0NjtjYXNlIDg0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjc7Y2FzZSA4NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2Nhc2UgODY6cmV0dXJuIDExNDtjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2NjtjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2ODtjYXNlIDg5OnJldHVybiAxMTU7Y2FzZSA5MDpyZXR1cm4gNjU7Y2FzZSA5MTpyZXR1cm4gODc7Y2FzZSA5MjpyZXR1cm4iU0VQIjtjYXNlIDkzOnJldHVybiA4NjtjYXNlIDk0OnJldHVybiAxMTI7Y2FzZSA5NTpyZXR1cm4gMTA4O2Nhc2UgOTY6cmV0dXJuIDQyO2Nhc2UgOTc6cmV0dXJuIDEwNjtjYXNlIDk4OnJldHVybiAxMTE7Y2FzZSA5OTpyZXR1cm4gMTEzO2Nhc2UgMTAwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjA7Y2FzZSAxMDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjA7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTtjYXNlIDEwMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0ODtjYXNlIDEwNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2Nhc2UgMTA1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2Nhc2UgMTA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjQ7Y2FzZSAxMDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSAxMDg6cmV0dXJuIlRFWFQiO2Nhc2UgMTA5OnJldHVybiJRVU9URSI7Y2FzZSAxMTA6cmV0dXJuIDk7Y2FzZSAxMTE6cmV0dXJuIDEwO2Nhc2UgMTEyOnJldHVybiAxMX19LHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18KD8hXCkrKSkvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2FsbGJhY2thcmdzOntydWxlczpbMTEsMTIsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzgsOSwxMCwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzE1LDE4LDI3LDI4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzE1LDE4LDY3LDY5LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMTUsMTgsNjQsNjYsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjEsNjMsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODQsODUsODYsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMTUsMTgsNzAsNzEsNzIsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4Nyw4OCwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMTUsMTgsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEzLDE0LDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNiwxNywxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTUsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjQsNjUsNjcsNjgsNzAsNzMsNzUsNzcsNzgsNzksODEsODMsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAxLDEwMywxMDUsMTA3LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O3JldHVybiBuZn0oKTt0Zi5sZXhlcj1PYztmdW5jdGlvbiBlZigpe3RoaXMueXk9e319cmV0dXJuIGVmLnByb3RvdHlwZT10Zix0Zi5QYXJzZXI9ZWYsbmV3IGVmfSgpO2pkdC5wYXJzZXI9amR0O2NvbnN0ICRkdD1qZHQsREllPSJmbG93Y2hhcnQtIjtsZXQgQ050PTAsemR0PUxlKCkscGw9e30sZFQ9W10sWEE9e30sRTU9W10sV1c9e30sS1c9e30sWVc9MCxxZHQ9ITAsdHYsWFcsUVc9W107Y29uc3QgWlc9aT0+WXIuc2FuaXRpemVUZXh0KGksemR0KSxzUD1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5rZXlzKHBsKTtmb3IoY29uc3QgZiBvZiBhKWlmKHBsW2ZdLmlkPT09aSlyZXR1cm4gcGxbZl0uZG9tSWQ7cmV0dXJuIGl9LF9OdD1mdW5jdGlvbihpLGEsZixwLHYsbSxiPXt9KXtsZXQgRSxfPWk7XyE9PXZvaWQgMCYmXy50cmltKCkubGVuZ3RoIT09MCYmKHBsW19dPT09dm9pZCAwJiYocGxbX109e2lkOl8sbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpESWUrXysiLSIrQ050LHN0eWxlczpbXSxjbGFzc2VzOltdfSksQ050KyssYSE9PXZvaWQgMD8oemR0PUxlKCksRT1aVyhhLnRleHQudHJpbSgpKSxwbFtfXS5sYWJlbFR5cGU9YS50eXBlLEVbMF09PT0nIicmJkVbRS5sZW5ndGgtMV09PT0nIicmJihFPUUuc3Vic3RyaW5nKDEsRS5sZW5ndGgtMSkpLHBsW19dLnRleHQ9RSk6cGxbX10udGV4dD09PXZvaWQgMCYmKHBsW19dLnRleHQ9aSksZiE9PXZvaWQgMCYmKHBsW19dLnR5cGU9ZikscCE9bnVsbCYmcC5mb3JFYWNoKGZ1bmN0aW9uKEwpe3BsW19dLnN0eWxlcy5wdXNoKEwpfSksdiE9bnVsbCYmdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe3BsW19dLmNsYXNzZXMucHVzaChMKX0pLG0hPT12b2lkIDAmJihwbFtfXS5kaXI9bSkscGxbX10ucHJvcHM9PT12b2lkIDA/cGxbX10ucHJvcHM9YjpiIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKHBsW19dLnByb3BzLGIpKX0sU050PWZ1bmN0aW9uKGksYSxmKXtjb25zdCBtPXtzdGFydDppLGVuZDphLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0In07VXQuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLG0pO2NvbnN0IGI9Zi50ZXh0O2IhPT12b2lkIDAmJihtLnRleHQ9WlcoYi50ZXh0LnRyaW0oKSksbS50ZXh0WzBdPT09JyInJiZtLnRleHRbbS50ZXh0Lmxlbmd0aC0xXT09PSciJyYmKG0udGV4dD1tLnRleHQuc3Vic3RyaW5nKDEsbS50ZXh0Lmxlbmd0aC0xKSksbS5sYWJlbFR5cGU9Yi50eXBlKSxmIT09dm9pZCAwJiYobS50eXBlPWYudHlwZSxtLnN0cm9rZT1mLnN0cm9rZSxtLmxlbmd0aD1mLmxlbmd0aCksZFQucHVzaChtKX0sQU50PWZ1bmN0aW9uKGksYSxmKXtVdC5pbmZvKCJhZGRMaW5rIChhYmM3OCkiLGksYSxmKTtsZXQgcCx2O2ZvcihwPTA7cDxpLmxlbmd0aDtwKyspZm9yKHY9MDt2PGEubGVuZ3RoO3YrKylTTnQoaVtwXSxhW3ZdLGYpfSxMTnQ9ZnVuY3Rpb24oaSxhKXtpLmZvckVhY2goZnVuY3Rpb24oZil7Zj09PSJkZWZhdWx0Ij9kVC5kZWZhdWx0SW50ZXJwb2xhdGU9YTpkVFtmXS5pbnRlcnBvbGF0ZT1hfSl9LE1OdD1mdW5jdGlvbihpLGEpe2kuZm9yRWFjaChmdW5jdGlvbihmKXtmPT09ImRlZmF1bHQiP2RULmRlZmF1bHRTdHlsZT1hOigkYS5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGEpPT09LTEmJmEucHVzaCgiZmlsbDpub25lIiksZFRbZl0uc3R5bGU9YSl9KX0sSU50PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7WEFbZl09PT12b2lkIDAmJihYQVtmXT17aWQ6ZixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLGEhPW51bGwmJmEuZm9yRWFjaChmdW5jdGlvbihwKXtpZihwLm1hdGNoKCJjb2xvciIpKXtjb25zdCB2PXAucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO1hBW2ZdLnRleHRTdHlsZXMucHVzaCh2KX1YQVtmXS5zdHlsZXMucHVzaChwKX0pfSl9LEROdD1mdW5jdGlvbihpKXt0dj1pLHR2Lm1hdGNoKC8uKjwvKSYmKHR2PSJSTCIpLHR2Lm1hdGNoKC8uKlxeLykmJih0dj0iQlQiKSx0di5tYXRjaCgvLio+LykmJih0dj0iTFIiKSx0di5tYXRjaCgvLip2LykmJih0dj0iVEIiKSx0dj09PSJURCImJih0dj0iVEIiKX0sSlc9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO3BsW3BdIT09dm9pZCAwJiZwbFtwXS5jbGFzc2VzLnB1c2goYSksV1dbcF0hPT12b2lkIDAmJldXW3BdLmNsYXNzZXMucHVzaChhKX0pfSxPSWU9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXthIT09dm9pZCAwJiYoS1dbWFc9PT0iZ2VuLTEiP3NQKGYpOmZdPVpXKGEpKX0pfSxOSWU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPXNQKGkpO2lmKExlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGE9PT12b2lkIDApcmV0dXJuO2xldCB2PVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7dj1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgbT0wO208di5sZW5ndGg7bSsrKXtsZXQgYj12W21dLnRyaW0oKTtiLmNoYXJBdCgwKT09PSciJyYmYi5jaGFyQXQoYi5sZW5ndGgtMSk9PT0nIicmJihiPWIuc3Vic3RyKDEsYi5sZW5ndGgtMikpLHZbbV09Yn19di5sZW5ndGg9PT0wJiZ2LnB1c2goaSkscGxbaV0hPT12b2lkIDAmJihwbFtpXS5oYXZlQ2FsbGJhY2s9ITAsUVcucHVzaChmdW5jdGlvbigpe2NvbnN0IG09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3B9Il1gKTttIT09bnVsbCYmbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4udil9LCExKX0pKX0sT050PWZ1bmN0aW9uKGksYSxmKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtwbFtwXSE9PXZvaWQgMCYmKHBsW3BdLmxpbms9JGEuZm9ybWF0VXJsKGEsemR0KSxwbFtwXS5saW5rVGFyZ2V0PWYpfSksSlcoaSwiY2xpY2thYmxlIil9LE5OdD1mdW5jdGlvbihpKXtpZihLVy5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gS1dbaV19LFBOdD1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7TkllKHAsYSxmKX0pLEpXKGksImNsaWNrYWJsZSIpfSxGTnQ9ZnVuY3Rpb24oaSl7UVcuZm9yRWFjaChmdW5jdGlvbihhKXthKGkpfSl9LEJOdD1mdW5jdGlvbigpe3JldHVybiB0di50cmltKCl9LFJOdD1mdW5jdGlvbigpe3JldHVybiBwbH0sak50PWZ1bmN0aW9uKCl7cmV0dXJuIGRUfSwkTnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWEF9LHpOdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdj15cih0aGlzKTtpZih2LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHYuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx2LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtRVy5wdXNoKHpOdCk7Y29uc3QgcU50PWZ1bmN0aW9uKGk9Imdlbi0xIil7cGw9e30sWEE9e30sZFQ9W10sUVc9W3pOdF0sRTU9W10sV1c9e30sWVc9MCxLVz17fSxxZHQ9ITAsWFc9aSxhcCgpfSxITnQ9aT0+e1hXPWl8fCJnZW4tMiJ9LEdOdD1mdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LFZOdD1mdW5jdGlvbihpLGEsZil7bGV0IHA9aS50ZXh0LnRyaW0oKSx2PWYudGV4dDtpPT09ZiYmZi50ZXh0Lm1hdGNoKC9ccy8pJiYocD12b2lkIDApO2Z1bmN0aW9uIG0oTil7Y29uc3QgQj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxqPVtdO2xldCBSO3JldHVybntub2RlTGlzdDpOLmZpbHRlcihmdW5jdGlvbihLKXtjb25zdCBpdD10eXBlb2YgSztyZXR1cm4gSy5zdG10JiZLLnN0bXQ9PT0iZGlyIj8oUj1LLnZhbHVlLCExKTpLLnRyaW0oKT09PSIiPyExOml0IGluIEI/QltpdF0uaGFzT3duUHJvcGVydHkoSyk/ITE6QltpdF1bS109ITA6ai5pbmNsdWRlcyhLKT8hMTpqLnB1c2goSyl9KSxkaXI6Un19bGV0IGI9W107Y29uc3R7bm9kZUxpc3Q6RSxkaXI6X309bShiLmNvbmNhdC5hcHBseShiLGEpKTtpZihiPUUsWFc9PT0iZ2VuLTEiKWZvcihsZXQgTj0wO048Yi5sZW5ndGg7TisrKWJbTl09c1AoYltOXSk7cD1wfHwic3ViR3JhcGgiK1lXLHY9dnx8IiIsdj1aVyh2KSxZVz1ZVysxO2NvbnN0IEw9e2lkOnAsbm9kZXM6Yix0aXRsZTp2LnRyaW0oKSxjbGFzc2VzOltdLGRpcjpfLGxhYmVsVHlwZTpmLnR5cGV9O3JldHVybiBVdC5pbmZvKCJBZGRpbmciLEwuaWQsTC5ub2RlcyxMLmRpciksTC5ub2Rlcz10UHQoTCxFNSkubm9kZXMsRTUucHVzaChMKSxXV1twXT1MLHB9LFBJZT1mdW5jdGlvbihpKXtmb3IoY29uc3RbYSxmXW9mIEU1LmVudHJpZXMoKSlpZihmLmlkPT09aSlyZXR1cm4gYTtyZXR1cm4tMX07bGV0IGFQPS0xO2NvbnN0IFVOdD1bXSxXTnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUU1W2FdLm5vZGVzO2lmKGFQPWFQKzEsYVA+MmUzKXJldHVybjtpZihVTnRbYVBdPWEsRTVbYV0uaWQ9PT1pKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IHA9MCx2PTE7Zm9yKDtwPGYubGVuZ3RoOyl7Y29uc3QgbT1QSWUoZltwXSk7aWYobT49MCl7Y29uc3QgYj1XTnQoaSxtKTtpZihiLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OnYrYi5jb3VudH07dj12K2IuY291bnR9cD1wKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDp2fX0sS050PWZ1bmN0aW9uKGkpe3JldHVybiBVTnRbaV19LFlOdD1mdW5jdGlvbigpe2FQPS0xLEU1Lmxlbmd0aD4wJiZXTnQoIm5vbmUiLEU1Lmxlbmd0aC0xKX0sWE50PWZ1bmN0aW9uKCl7cmV0dXJuIEU1fSxRTnQ9KCk9PnFkdD8ocWR0PSExLCEwKTohMSxGSWU9aT0+e2xldCBhPWkudHJpbSgpLGY9ImFycm93X29wZW4iO3N3aXRjaChhWzBdKXtjYXNlIjwiOmY9ImFycm93X3BvaW50IixhPWEuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpmPSJhcnJvd19jcm9zcyIsYT1hLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6Zj0iYXJyb3dfY2lyY2xlIixhPWEuc2xpY2UoMSk7YnJlYWt9bGV0IHA9Im5vcm1hbCI7cmV0dXJuIGEuaW5jbHVkZXMoIj0iKSYmKHA9InRoaWNrIiksYS5pbmNsdWRlcygiLiIpJiYocD0iZG90dGVkIikse3R5cGU6ZixzdHJva2U6cH19LEJJZT0oaSxhKT0+e2NvbnN0IGY9YS5sZW5ndGg7bGV0IHA9MDtmb3IobGV0IHY9MDt2PGY7Kyt2KWFbdl09PT1pJiYrK3A7cmV0dXJuIHB9LFJJZT1pPT57Y29uc3QgYT1pLnRyaW0oKTtsZXQgZj1hLnNsaWNlKDAsLTEpLHA9ImFycm93X29wZW4iO3N3aXRjaChhLnNsaWNlKC0xKSl7Y2FzZSJ4IjpwPSJhcnJvd19jcm9zcyIsYVswXT09PSJ4IiYmKHA9ImRvdWJsZV8iK3AsZj1mLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnA9ImFycm93X3BvaW50IixhWzBdPT09IjwiJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cD0iYXJyb3dfY2lyY2xlIixhWzBdPT09Im8iJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrfWxldCB2PSJub3JtYWwiLG09Zi5sZW5ndGgtMTtmWzBdPT09Ij0iJiYodj0idGhpY2siKSxmWzBdPT09In4iJiYodj0iaW52aXNpYmxlIik7bGV0IGI9QkllKCIuIixmKTtyZXR1cm4gYiYmKHY9ImRvdHRlZCIsbT1iKSx7dHlwZTpwLHN0cm9rZTp2LGxlbmd0aDptfX0sWk50PShpLGEpPT57Y29uc3QgZj1SSWUoaSk7bGV0IHA7aWYoYSl7aWYocD1GSWUoYSkscC5zdHJva2UhPT1mLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYocC50eXBlPT09ImFycm93X29wZW4iKXAudHlwZT1mLnR5cGU7ZWxzZXtpZihwLnR5cGUhPT1mLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O3AudHlwZT0iZG91YmxlXyIrcC50eXBlfXJldHVybiBwLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKHAudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IikscC5sZW5ndGg9Zi5sZW5ndGgscH1yZXR1cm4gZn0sSk50PShpLGEpPT57bGV0IGY9ITE7cmV0dXJuIGkuZm9yRWFjaChwPT57cC5ub2Rlcy5pbmRleE9mKGEpPj0wJiYoZj0hMCl9KSxmfSx0UHQ9KGksYSk9Pntjb25zdCBmPVtdO3JldHVybiBpLm5vZGVzLmZvckVhY2goKHAsdik9PntKTnQoYSxwKXx8Zi5wdXNoKGkubm9kZXNbdl0pfSkse25vZGVzOmZ9fSxlUHQ9e2ZpcnN0R3JhcGg6UU50fSxnVD17ZGVmYXVsdENvbmZpZzooKT0+b1QuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLGdldEFjY0Rlc2NyaXB0aW9uOnVwLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGFkZFZlcnRleDpfTnQsbG9va1VwRG9tSWQ6c1AsYWRkTGluazpBTnQsdXBkYXRlTGlua0ludGVycG9sYXRlOkxOdCx1cGRhdGVMaW5rOk1OdCxhZGRDbGFzczpJTnQsc2V0RGlyZWN0aW9uOkROdCxzZXRDbGFzczpKVyxzZXRUb29sdGlwOk9JZSxnZXRUb29sdGlwOk5OdCxzZXRDbGlja0V2ZW50OlBOdCxzZXRMaW5rOk9OdCxiaW5kRnVuY3Rpb25zOkZOdCxnZXREaXJlY3Rpb246Qk50LGdldFZlcnRpY2VzOlJOdCxnZXRFZGdlczpqTnQsZ2V0Q2xhc3NlczokTnQsY2xlYXI6cU50LHNldEdlbjpITnQsZGVmYXVsdFN0eWxlOkdOdCxhZGRTdWJHcmFwaDpWTnQsZ2V0RGVwdGhGaXJzdFBvczpLTnQsaW5kZXhOb2RlczpZTnQsZ2V0U3ViR3JhcGhzOlhOdCxkZXN0cnVjdExpbms6Wk50LGxleDplUHQsZXhpc3RzOkpOdCxtYWtlVW5pcTp0UHQsc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYn0sakllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpJTnQsYWRkTGluazpBTnQsYWRkU2luZ2xlTGluazpTTnQsYWRkU3ViR3JhcGg6Vk50LGFkZFZlcnRleDpfTnQsYmluZEZ1bmN0aW9uczpGTnQsY2xlYXI6cU50LGRlZmF1bHQ6Z1QsZGVmYXVsdFN0eWxlOkdOdCxkZXN0cnVjdExpbms6Wk50LGZpcnN0R3JhcGg6UU50LGdldENsYXNzZXM6JE50LGdldERlcHRoRmlyc3RQb3M6S050LGdldERpcmVjdGlvbjpCTnQsZ2V0RWRnZXM6ak50LGdldFN1YkdyYXBoczpYTnQsZ2V0VG9vbHRpcDpOTnQsZ2V0VmVydGljZXM6Uk50LGluZGV4Tm9kZXM6WU50LGxleDplUHQsbG9va1VwRG9tSWQ6c1Asc2V0Q2xhc3M6Slcsc2V0Q2xpY2tFdmVudDpQTnQsc2V0RGlyZWN0aW9uOkROdCxzZXRHZW46SE50LHNldExpbms6T050LHVwZGF0ZUxpbms6TU50LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpMTnR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyICRJZT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBwVChpKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wifHxsMyhpKSYmdFQoaSk9PSRJZX1mdW5jdGlvbiBRQShpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aCx2PUFycmF5KHApOysrZjxwOyl2W2ZdPWEoaVtmXSxmLGkpO3JldHVybiB2fXZhciB6SWU9MS8wLG5QdD1ZMj9ZMi5wcm90b3R5cGU6dm9pZCAwLHJQdD1uUHQ/blB0LnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBpUHQoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmciKXJldHVybiBpO2lmKE1mKGkpKXJldHVybiBRQShpLGlQdCkrIiI7aWYocFQoaSkpcmV0dXJuIHJQdD9yUHQuY2FsbChpKToiIjt2YXIgYT1pKyIiO3JldHVybiBhPT0iMCImJjEvaT09LXpJZT8iLTAiOmF9dmFyIHFJZT0vXHMvO2Z1bmN0aW9uIEhJZShpKXtmb3IodmFyIGE9aS5sZW5ndGg7YS0tJiZxSWUudGVzdChpLmNoYXJBdChhKSk7KTtyZXR1cm4gYX12YXIgR0llPS9eXHMrLztmdW5jdGlvbiBWSWUoaSl7cmV0dXJuIGkmJmkuc2xpY2UoMCxISWUoaSkrMSkucmVwbGFjZShHSWUsIiIpfXZhciBzUHQ9MC8wLFVJZT0vXlstK10weFswLTlhLWZdKyQvaSxXSWU9L14wYlswMV0rJC9pLEtJZT0vXjBvWzAtN10rJC9pLFlJZT1wYXJzZUludDtmdW5jdGlvbiBYSWUoaSl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKHBUKGkpKXJldHVybiBzUHQ7aWYoSWIoaSkpe3ZhciBhPXR5cGVvZiBpLnZhbHVlT2Y9PSJmdW5jdGlvbiI/aS52YWx1ZU9mKCk6aTtpPUliKGEpP2ErIiI6YX1pZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk9PT0wP2k6K2k7aT1WSWUoaSk7dmFyIGY9V0llLnRlc3QoaSk7cmV0dXJuIGZ8fEtJZS50ZXN0KGkpP1lJZShpLnNsaWNlKDIpLGY/Mjo4KTpVSWUudGVzdChpKT9zUHQ6K2l9dmFyIGFQdD0xLzAsUUllPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiB0SyhpKXtpZighaSlyZXR1cm4gaT09PTA/aTowO2lmKGk9WEllKGkpLGk9PT1hUHR8fGk9PT0tYVB0KXt2YXIgYT1pPDA/LTE6MTtyZXR1cm4gYSpRSWV9cmV0dXJuIGk9PT1pP2k6MH1mdW5jdGlvbiBaSWUoaSl7dmFyIGE9dEsoaSksZj1hJTE7cmV0dXJuIGE9PT1hP2Y/YS1mOmE6MH1mdW5jdGlvbiBKSWUoKXt9ZnVuY3Rpb24gb1B0KGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoOysrZjxwJiZhKGlbZl0sZixpKSE9PSExOyk7cmV0dXJuIGl9ZnVuY3Rpb24gY1B0KGksYSxmLHApe2Zvcih2YXIgdj1pLmxlbmd0aCxtPWYrKHA/MTotMSk7cD9tLS06KyttPHY7KWlmKGEoaVttXSxtLGkpKXJldHVybiBtO3JldHVybi0xfWZ1bmN0aW9uIHREZShpKXtyZXR1cm4gaSE9PWl9ZnVuY3Rpb24gZURlKGksYSxmKXtmb3IodmFyIHA9Zi0xLHY9aS5sZW5ndGg7KytwPHY7KWlmKGlbcF09PT1hKXJldHVybiBwO3JldHVybi0xfWZ1bmN0aW9uIG5EZShpLGEsZil7cmV0dXJuIGE9PT1hP2VEZShpLGEsZik6Y1B0KGksdERlLGYpfWZ1bmN0aW9uIHJEZShpLGEpe3ZhciBmPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4hIWYmJm5EZShpLGEsMCk+LTF9ZnVuY3Rpb24gTmIoaSl7cmV0dXJuIGVrKGkpP09EdChpKTpPT3QoaSl9dmFyIGlEZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxzRGU9L15cdyokLztmdW5jdGlvbiBIZHQoaSxhKXtpZihNZihpKSlyZXR1cm4hMTt2YXIgZj10eXBlb2YgaTtyZXR1cm4gZj09Im51bWJlciJ8fGY9PSJzeW1ib2wifHxmPT0iYm9vbGVhbiJ8fGk9PW51bGx8fHBUKGkpPyEwOnNEZS50ZXN0KGkpfHwhaURlLnRlc3QoaSl8fGEhPW51bGwmJmkgaW4gT2JqZWN0KGEpfXZhciBhRGU9NTAwO2Z1bmN0aW9uIG9EZShpKXt2YXIgYT1QQShpLGZ1bmN0aW9uKHApe3JldHVybiBmLnNpemU9PT1hRGUmJmYuY2xlYXIoKSxwfSksZj1hLmNhY2hlO3JldHVybiBhfXZhciBjRGU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csdURlPS9cXChcXCk/L2csbERlPW9EZShmdW5jdGlvbihpKXt2YXIgYT1bXTtyZXR1cm4gaS5jaGFyQ29kZUF0KDApPT09NDYmJmEucHVzaCgiIiksaS5yZXBsYWNlKGNEZSxmdW5jdGlvbihmLHAsdixtKXthLnB1c2godj9tLnJlcGxhY2UodURlLCIkMSIpOnB8fGYpfSksYX0pO2NvbnN0IGhEZT1sRGU7ZnVuY3Rpb24gdVB0KGkpe3JldHVybiBpPT1udWxsPyIiOmlQdChpKX1mdW5jdGlvbiBlSyhpLGEpe3JldHVybiBNZihpKT9pOkhkdChpLGEpP1tpXTpoRGUodVB0KGkpKX12YXIgZkRlPTEvMDtmdW5jdGlvbiBvUChpKXtpZih0eXBlb2YgaT09InN0cmluZyJ8fHBUKGkpKXJldHVybiBpO3ZhciBhPWkrIiI7cmV0dXJuIGE9PSIwIiYmMS9pPT0tZkRlPyItMCI6YX1mdW5jdGlvbiBuSyhpLGEpe2E9ZUsoYSxpKTtmb3IodmFyIGY9MCxwPWEubGVuZ3RoO2khPW51bGwmJmY8cDspaT1pW29QKGFbZisrXSldO3JldHVybiBmJiZmPT1wP2k6dm9pZCAwfWZ1bmN0aW9uIGREZShpLGEsZil7dmFyIHA9aT09bnVsbD92b2lkIDA6bksoaSxhKTtyZXR1cm4gcD09PXZvaWQgMD9mOnB9ZnVuY3Rpb24gR2R0KGksYSl7Zm9yKHZhciBmPS0xLHA9YS5sZW5ndGgsdj1pLmxlbmd0aDsrK2Y8cDspaVt2K2ZdPWFbZl07cmV0dXJuIGl9dmFyIGxQdD1ZMj9ZMi5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIGdEZShpKXtyZXR1cm4gTWYoaSl8fEZBKGkpfHwhIShsUHQmJmkmJmlbbFB0XSl9ZnVuY3Rpb24gcksoaSxhLGYscCx2KXt2YXIgbT0tMSxiPWkubGVuZ3RoO2ZvcihmfHwoZj1nRGUpLHZ8fCh2PVtdKTsrK208Yjspe3ZhciBFPWlbbV07YT4wJiZmKEUpP2E+MT9ySyhFLGEtMSxmLHAsdik6R2R0KHYsRSk6cHx8KHZbdi5sZW5ndGhdPUUpfXJldHVybiB2fWZ1bmN0aW9uIFpBKGkpe3ZhciBhPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4gYT9ySyhpLDEpOltdfWZ1bmN0aW9uIHBEZShpKXtyZXR1cm4gQkR0KEZEdChpLHZvaWQgMCxaQSksaSsiIil9ZnVuY3Rpb24gYkRlKGksYSxmLHApe3ZhciB2PS0xLG09aT09bnVsbD8wOmkubGVuZ3RoO2ZvcihwJiZtJiYoZj1pWysrdl0pOysrdjxtOylmPWEoZixpW3ZdLHYsaSk7cmV0dXJuIGZ9ZnVuY3Rpb24gdkRlKGksYSl7cmV0dXJuIGkmJktOKGEsTmIoYSksaSl9ZnVuY3Rpb24gd0RlKGksYSl7cmV0dXJuIGkmJktOKGEsaVQoYSksaSl9ZnVuY3Rpb24gaFB0KGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoLHY9MCxtPVtdOysrZjxwOyl7dmFyIGI9aVtmXTthKGIsZixpKSYmKG1bdisrXT1iKX1yZXR1cm4gbX1mdW5jdGlvbiBmUHQoKXtyZXR1cm5bXX12YXIgbURlPU9iamVjdC5wcm90b3R5cGUseURlPW1EZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxkUHQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx4RGU9ZFB0P2Z1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP1tdOihpPU9iamVjdChpKSxoUHQoZFB0KGkpLGZ1bmN0aW9uKGEpe3JldHVybiB5RGUuY2FsbChpLGEpfSkpfTpmUHQ7Y29uc3QgVmR0PXhEZTtmdW5jdGlvbiBrRGUoaSxhKXtyZXR1cm4gS04oaSxWZHQoaSksYSl9dmFyIEVEZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFREZT1FRGU/ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdO2k7KUdkdChhLFZkdChpKSksaT1RMXQoaSk7cmV0dXJuIGF9OmZQdDtjb25zdCBnUHQ9VERlO2Z1bmN0aW9uIENEZShpLGEpe3JldHVybiBLTihpLGdQdChpKSxhKX1mdW5jdGlvbiBwUHQoaSxhLGYpe3ZhciBwPWEoaSk7cmV0dXJuIE1mKGkpP3A6R2R0KHAsZihpKSl9ZnVuY3Rpb24gVWR0KGkpe3JldHVybiBwUHQoaSxOYixWZHQpfWZ1bmN0aW9uIF9EZShpKXtyZXR1cm4gcFB0KGksaVQsZ1B0KX12YXIgU0RlPU9iamVjdC5wcm90b3R5cGUsQURlPVNEZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBMRGUoaSl7dmFyIGE9aS5sZW5ndGgsZj1uZXcgaS5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYSYmdHlwZW9mIGlbMF09PSJzdHJpbmciJiZBRGUuY2FsbChpLCJpbmRleCIpJiYoZi5pbmRleD1pLmluZGV4LGYuaW5wdXQ9aS5pbnB1dCksZn1mdW5jdGlvbiBNRGUoaSxhKXt2YXIgZj1hP1gxdChpLmJ1ZmZlcik6aS5idWZmZXI7cmV0dXJuIG5ldyBpLmNvbnN0cnVjdG9yKGYsaS5ieXRlT2Zmc2V0LGkuYnl0ZUxlbmd0aCl9dmFyIElEZT0vXHcqJC87ZnVuY3Rpb24gRERlKGkpe3ZhciBhPW5ldyBpLmNvbnN0cnVjdG9yKGkuc291cmNlLElEZS5leGVjKGkpKTtyZXR1cm4gYS5sYXN0SW5kZXg9aS5sYXN0SW5kZXgsYX12YXIgYlB0PVkyP1kyLnByb3RvdHlwZTp2b2lkIDAsdlB0PWJQdD9iUHQudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gT0RlKGkpe3JldHVybiB2UHQ/T2JqZWN0KHZQdC5jYWxsKGkpKTp7fX12YXIgTkRlPSJbb2JqZWN0IEJvb2xlYW5dIixQRGU9IltvYmplY3QgRGF0ZV0iLEZEZT0iW29iamVjdCBNYXBdIixCRGU9IltvYmplY3QgTnVtYmVyXSIsUkRlPSJbb2JqZWN0IFJlZ0V4cF0iLGpEZT0iW29iamVjdCBTZXRdIiwkRGU9IltvYmplY3QgU3RyaW5nXSIsekRlPSJbb2JqZWN0IFN5bWJvbF0iLHFEZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEhEZT0iW29iamVjdCBEYXRhVmlld10iLEdEZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixWRGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsVURlPSJbb2JqZWN0IEludDhBcnJheV0iLFdEZT0iW29iamVjdCBJbnQxNkFycmF5XSIsS0RlPSJbb2JqZWN0IEludDMyQXJyYXldIixZRGU9IltvYmplY3QgVWludDhBcnJheV0iLFhEZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFFEZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFpEZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEpEZShpLGEsZil7dmFyIHA9aS5jb25zdHJ1Y3Rvcjtzd2l0Y2goYSl7Y2FzZSBxRGU6cmV0dXJuIFgxdChpKTtjYXNlIE5EZTpjYXNlIFBEZTpyZXR1cm4gbmV3IHAoK2kpO2Nhc2UgSERlOnJldHVybiBNRGUoaSxmKTtjYXNlIEdEZTpjYXNlIFZEZTpjYXNlIFVEZTpjYXNlIFdEZTpjYXNlIEtEZTpjYXNlIFlEZTpjYXNlIFhEZTpjYXNlIFFEZTpjYXNlIFpEZTpyZXR1cm4gd0R0KGksZik7Y2FzZSBGRGU6cmV0dXJuIG5ldyBwO2Nhc2UgQkRlOmNhc2UgJERlOnJldHVybiBuZXcgcChpKTtjYXNlIFJEZTpyZXR1cm4gRERlKGkpO2Nhc2UgakRlOnJldHVybiBuZXcgcDtjYXNlIHpEZTpyZXR1cm4gT0RlKGkpfX12YXIgdE9lPSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uIGVPZShpKXtyZXR1cm4gbDMoaSkmJlZBKGkpPT10T2V9dmFyIHdQdD1SQSYmUkEuaXNNYXAsbk9lPXdQdD93Vyh3UHQpOmVPZTtjb25zdCByT2U9bk9lO3ZhciBpT2U9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gc09lKGkpe3JldHVybiBsMyhpKSYmVkEoaSk9PWlPZX12YXIgbVB0PVJBJiZSQS5pc1NldCxhT2U9bVB0P3dXKG1QdCk6c09lO2NvbnN0IG9PZT1hT2U7dmFyIGNPZT0xLHVPZT0yLGxPZT00LHlQdD0iW29iamVjdCBBcmd1bWVudHNdIixoT2U9IltvYmplY3QgQXJyYXldIixmT2U9IltvYmplY3QgQm9vbGVhbl0iLGRPZT0iW29iamVjdCBEYXRlXSIsZ09lPSJbb2JqZWN0IEVycm9yXSIseFB0PSJbb2JqZWN0IEZ1bmN0aW9uXSIscE9lPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsYk9lPSJbb2JqZWN0IE1hcF0iLHZPZT0iW29iamVjdCBOdW1iZXJdIixrUHQ9IltvYmplY3QgT2JqZWN0XSIsd09lPSJbb2JqZWN0IFJlZ0V4cF0iLG1PZT0iW29iamVjdCBTZXRdIix5T2U9IltvYmplY3QgU3RyaW5nXSIseE9lPSJbb2JqZWN0IFN5bWJvbF0iLGtPZT0iW29iamVjdCBXZWFrTWFwXSIsRU9lPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVE9lPSJbb2JqZWN0IERhdGFWaWV3XSIsQ09lPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLF9PZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixTT2U9IltvYmplY3QgSW50OEFycmF5XSIsQU9lPSJbb2JqZWN0IEludDE2QXJyYXldIixMT2U9IltvYmplY3QgSW50MzJBcnJheV0iLE1PZT0iW29iamVjdCBVaW50OEFycmF5XSIsSU9lPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsRE9lPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsT09lPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsbmw9e307bmxbeVB0XT1ubFtoT2VdPW5sW0VPZV09bmxbVE9lXT1ubFtmT2VdPW5sW2RPZV09bmxbQ09lXT1ubFtfT2VdPW5sW1NPZV09bmxbQU9lXT1ubFtMT2VdPW5sW2JPZV09bmxbdk9lXT1ubFtrUHRdPW5sW3dPZV09bmxbbU9lXT1ubFt5T2VdPW5sW3hPZV09bmxbTU9lXT1ubFtJT2VdPW5sW0RPZV09bmxbT09lXT0hMCxubFtnT2VdPW5sW3hQdF09bmxba09lXT0hMTtmdW5jdGlvbiBjUChpLGEsZixwLHYsbSl7dmFyIGIsRT1hJmNPZSxfPWEmdU9lLEw9YSZsT2U7aWYoZiYmKGI9dj9mKGkscCx2LG0pOmYoaSkpLGIhPT12b2lkIDApcmV0dXJuIGI7aWYoIUliKGkpKXJldHVybiBpO3ZhciBOPU1mKGkpO2lmKE4pe2lmKGI9TERlKGkpLCFFKXJldHVybiBtRHQoaSxiKX1lbHNle3ZhciBCPVZBKGkpLGo9Qj09eFB0fHxCPT1wT2U7aWYoQkEoaSkpcmV0dXJuIHZEdChpLEUpO2lmKEI9PWtQdHx8Qj09eVB0fHxqJiYhdil7aWYoYj1ffHxqP3t9OmtEdChpKSwhRSlyZXR1cm4gXz9DRGUoaSx3RGUoYixpKSk6a0RlKGksdkRlKGIsaSkpfWVsc2V7aWYoIW5sW0JdKXJldHVybiB2P2k6e307Yj1KRGUoaSxCLEUpfX1tfHwobT1uZXcgdG0pO3ZhciBSPW0uZ2V0KGkpO2lmKFIpcmV0dXJuIFI7bS5zZXQoaSxiKSxvT2UoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtiLmFkZChjUChpdCxhLGYsaXQsaSxtKSl9KTpyT2UoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihpdCxzdCl7Yi5zZXQoc3QsY1AoaXQsYSxmLHN0LGksbSkpfSk7dmFyIHo9TD9fP19EZTpVZHQ6Xz9pVDpOYixLPU4/dm9pZCAwOnooaSk7cmV0dXJuIG9QdChLfHxpLGZ1bmN0aW9uKGl0LHN0KXtLJiYoc3Q9aXQsaXQ9aVtzdF0pLHlXKGIsc3QsY1AoaXQsYSxmLHN0LGksbSkpfSksYn12YXIgTk9lPTQ7ZnVuY3Rpb24gUE9lKGkpe3JldHVybiBjUChpLE5PZSl9dmFyIEZPZT0xLEJPZT00O2Z1bmN0aW9uIFJPZShpKXtyZXR1cm4gY1AoaSxGT2V8Qk9lKX12YXIgak9lPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiAkT2UoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGksak9lKSx0aGlzfWZ1bmN0aW9uIHpPZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9ZnVuY3Rpb24gdVAoaSl7dmFyIGE9LTEsZj1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IHk1OysrYTxmOyl0aGlzLmFkZChpW2FdKX11UC5wcm90b3R5cGUuYWRkPXVQLnByb3RvdHlwZS5wdXNoPSRPZSx1UC5wcm90b3R5cGUuaGFzPXpPZTtmdW5jdGlvbiBxT2UoaSxhKXtmb3IodmFyIGY9LTEscD1pPT1udWxsPzA6aS5sZW5ndGg7KytmPHA7KWlmKGEoaVtmXSxmLGkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEVQdChpLGEpe3JldHVybiBpLmhhcyhhKX12YXIgSE9lPTEsR09lPTI7ZnVuY3Rpb24gVFB0KGksYSxmLHAsdixtKXt2YXIgYj1mJkhPZSxFPWkubGVuZ3RoLF89YS5sZW5ndGg7aWYoRSE9XyYmIShiJiZfPkUpKXJldHVybiExO3ZhciBMPW0uZ2V0KGkpLE49bS5nZXQoYSk7aWYoTCYmTilyZXR1cm4gTD09YSYmTj09aTt2YXIgQj0tMSxqPSEwLFI9ZiZHT2U/bmV3IHVQOnZvaWQgMDtmb3IobS5zZXQoaSxhKSxtLnNldChhLGkpOysrQjxFOyl7dmFyIHo9aVtCXSxLPWFbQl07aWYocCl2YXIgaXQ9Yj9wKEsseixCLGEsaSxtKTpwKHosSyxCLGksYSxtKTtpZihpdCE9PXZvaWQgMCl7aWYoaXQpY29udGludWU7aj0hMTticmVha31pZihSKXtpZighcU9lKGEsZnVuY3Rpb24oc3QsdXQpe2lmKCFFUHQoUix1dCkmJih6PT09c3R8fHYoeixzdCxmLHAsbSkpKXJldHVybiBSLnB1c2godXQpfSkpe2o9ITE7YnJlYWt9fWVsc2UgaWYoISh6PT09S3x8dih6LEssZixwLG0pKSl7aj0hMTticmVha319cmV0dXJuIG0uZGVsZXRlKGkpLG0uZGVsZXRlKGEpLGp9ZnVuY3Rpb24gVk9lKGkpe3ZhciBhPS0xLGY9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHAsdil7ZlsrK2FdPVt2LHBdfSksZn1mdW5jdGlvbiBXZHQoaSl7dmFyIGE9LTEsZj1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24ocCl7ZlsrK2FdPXB9KSxmfXZhciBVT2U9MSxXT2U9MixLT2U9IltvYmplY3QgQm9vbGVhbl0iLFlPZT0iW29iamVjdCBEYXRlXSIsWE9lPSJbb2JqZWN0IEVycm9yXSIsUU9lPSJbb2JqZWN0IE1hcF0iLFpPZT0iW29iamVjdCBOdW1iZXJdIixKT2U9IltvYmplY3QgUmVnRXhwXSIsdE5lPSJbb2JqZWN0IFNldF0iLGVOZT0iW29iamVjdCBTdHJpbmddIixuTmU9IltvYmplY3QgU3ltYm9sXSIsck5lPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaU5lPSJbb2JqZWN0IERhdGFWaWV3XSIsQ1B0PVkyP1kyLnByb3RvdHlwZTp2b2lkIDAsS2R0PUNQdD9DUHQudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gc05lKGksYSxmLHAsdixtLGIpe3N3aXRjaChmKXtjYXNlIGlOZTppZihpLmJ5dGVMZW5ndGghPWEuYnl0ZUxlbmd0aHx8aS5ieXRlT2Zmc2V0IT1hLmJ5dGVPZmZzZXQpcmV0dXJuITE7aT1pLmJ1ZmZlcixhPWEuYnVmZmVyO2Nhc2Ugck5lOnJldHVybiEoaS5ieXRlTGVuZ3RoIT1hLmJ5dGVMZW5ndGh8fCFtKG5ldyBiVyhpKSxuZXcgYlcoYSkpKTtjYXNlIEtPZTpjYXNlIFlPZTpjYXNlIFpPZTpyZXR1cm4gTkEoK2ksK2EpO2Nhc2UgWE9lOnJldHVybiBpLm5hbWU9PWEubmFtZSYmaS5tZXNzYWdlPT1hLm1lc3NhZ2U7Y2FzZSBKT2U6Y2FzZSBlTmU6cmV0dXJuIGk9PWErIiI7Y2FzZSBRT2U6dmFyIEU9Vk9lO2Nhc2UgdE5lOnZhciBfPXAmVU9lO2lmKEV8fChFPVdkdCksaS5zaXplIT1hLnNpemUmJiFfKXJldHVybiExO3ZhciBMPWIuZ2V0KGkpO2lmKEwpcmV0dXJuIEw9PWE7cHw9V09lLGIuc2V0KGksYSk7dmFyIE49VFB0KEUoaSksRShhKSxwLHYsbSxiKTtyZXR1cm4gYi5kZWxldGUoaSksTjtjYXNlIG5OZTppZihLZHQpcmV0dXJuIEtkdC5jYWxsKGkpPT1LZHQuY2FsbChhKX1yZXR1cm4hMX12YXIgYU5lPTEsb05lPU9iamVjdC5wcm90b3R5cGUsY05lPW9OZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB1TmUoaSxhLGYscCx2LG0pe3ZhciBiPWYmYU5lLEU9VWR0KGkpLF89RS5sZW5ndGgsTD1VZHQoYSksTj1MLmxlbmd0aDtpZihfIT1OJiYhYilyZXR1cm4hMTtmb3IodmFyIEI9XztCLS07KXt2YXIgaj1FW0JdO2lmKCEoYj9qIGluIGE6Y05lLmNhbGwoYSxqKSkpcmV0dXJuITF9dmFyIFI9bS5nZXQoaSksej1tLmdldChhKTtpZihSJiZ6KXJldHVybiBSPT1hJiZ6PT1pO3ZhciBLPSEwO20uc2V0KGksYSksbS5zZXQoYSxpKTtmb3IodmFyIGl0PWI7KytCPF87KXtqPUVbQl07dmFyIHN0PWlbal0sdXQ9YVtqXTtpZihwKXZhciBidD1iP3AodXQsc3QsaixhLGksbSk6cChzdCx1dCxqLGksYSxtKTtpZighKGJ0PT09dm9pZCAwP3N0PT09dXR8fHYoc3QsdXQsZixwLG0pOmJ0KSl7Sz0hMTticmVha31pdHx8KGl0PWo9PSJjb25zdHJ1Y3RvciIpfWlmKEsmJiFpdCl7dmFyIG10PWkuY29uc3RydWN0b3IseXQ9YS5jb25zdHJ1Y3RvcjttdCE9eXQmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gYSYmISh0eXBlb2YgbXQ9PSJmdW5jdGlvbiImJm10IGluc3RhbmNlb2YgbXQmJnR5cGVvZiB5dD09ImZ1bmN0aW9uIiYmeXQgaW5zdGFuY2VvZiB5dCkmJihLPSExKX1yZXR1cm4gbS5kZWxldGUoaSksbS5kZWxldGUoYSksS312YXIgbE5lPTEsX1B0PSJbb2JqZWN0IEFyZ3VtZW50c10iLFNQdD0iW29iamVjdCBBcnJheV0iLGlLPSJbb2JqZWN0IE9iamVjdF0iLGhOZT1PYmplY3QucHJvdG90eXBlLEFQdD1oTmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZk5lKGksYSxmLHAsdixtKXt2YXIgYj1NZihpKSxFPU1mKGEpLF89Yj9TUHQ6VkEoaSksTD1FP1NQdDpWQShhKTtfPV89PV9QdD9pSzpfLEw9TD09X1B0P2lLOkw7dmFyIE49Xz09aUssQj1MPT1pSyxqPV89PUw7aWYoaiYmQkEoaSkpe2lmKCFCQShhKSlyZXR1cm4hMTtiPSEwLE49ITF9aWYoaiYmIU4pcmV0dXJuIG18fChtPW5ldyB0bSksYnx8bVcoaSk/VFB0KGksYSxmLHAsdixtKTpzTmUoaSxhLF8sZixwLHYsbSk7aWYoIShmJmxOZSkpe3ZhciBSPU4mJkFQdC5jYWxsKGksIl9fd3JhcHBlZF9fIiksej1CJiZBUHQuY2FsbChhLCJfX3dyYXBwZWRfXyIpO2lmKFJ8fHope3ZhciBLPVI/aS52YWx1ZSgpOmksaXQ9ej9hLnZhbHVlKCk6YTtyZXR1cm4gbXx8KG09bmV3IHRtKSx2KEssaXQsZixwLG0pfX1yZXR1cm4gaj8obXx8KG09bmV3IHRtKSx1TmUoaSxhLGYscCx2LG0pKTohMX1mdW5jdGlvbiBZZHQoaSxhLGYscCx2KXtyZXR1cm4gaT09PWE/ITA6aT09bnVsbHx8YT09bnVsbHx8IWwzKGkpJiYhbDMoYSk/aSE9PWkmJmEhPT1hOmZOZShpLGEsZixwLFlkdCx2KX12YXIgZE5lPTEsZ05lPTI7ZnVuY3Rpb24gcE5lKGksYSxmLHApe3ZhciB2PWYubGVuZ3RoLG09dixiPSFwO2lmKGk9PW51bGwpcmV0dXJuIW07Zm9yKGk9T2JqZWN0KGkpO3YtLTspe3ZhciBFPWZbdl07aWYoYiYmRVsyXT9FWzFdIT09aVtFWzBdXTohKEVbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrdjxtOyl7RT1mW3ZdO3ZhciBfPUVbMF0sTD1pW19dLE49RVsxXTtpZihiJiZFWzJdKXtpZihMPT09dm9pZCAwJiYhKF8gaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgQj1uZXcgdG07aWYocCl2YXIgaj1wKEwsTixfLGksYSxCKTtpZighKGo9PT12b2lkIDA/WWR0KE4sTCxkTmV8Z05lLHAsQik6aikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIExQdChpKXtyZXR1cm4gaT09PWkmJiFJYihpKX1mdW5jdGlvbiBiTmUoaSl7Zm9yKHZhciBhPU5iKGkpLGY9YS5sZW5ndGg7Zi0tOyl7dmFyIHA9YVtmXSx2PWlbcF07YVtmXT1bcCx2LExQdCh2KV19cmV0dXJuIGF9ZnVuY3Rpb24gTVB0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmPT1udWxsPyExOmZbaV09PT1hJiYoYSE9PXZvaWQgMHx8aSBpbiBPYmplY3QoZikpfX1mdW5jdGlvbiB2TmUoaSl7dmFyIGE9Yk5lKGkpO3JldHVybiBhLmxlbmd0aD09MSYmYVswXVsyXT9NUHQoYVswXVswXSxhWzBdWzFdKTpmdW5jdGlvbihmKXtyZXR1cm4gZj09PWl8fHBOZShmLGksYSl9fWZ1bmN0aW9uIHdOZShpLGEpe3JldHVybiBpIT1udWxsJiZhIGluIE9iamVjdChpKX1mdW5jdGlvbiBJUHQoaSxhLGYpe2E9ZUsoYSxpKTtmb3IodmFyIHA9LTEsdj1hLmxlbmd0aCxtPSExOysrcDx2Oyl7dmFyIGI9b1AoYVtwXSk7aWYoIShtPWkhPW51bGwmJmYoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiBtfHwrK3AhPXY/bToodj1pPT1udWxsPzA6aS5sZW5ndGgsISF2JiZaMXQodikmJnhXKGIsdikmJihNZihpKXx8RkEoaSkpKX1mdW5jdGlvbiBEUHQoaSxhKXtyZXR1cm4gaSE9bnVsbCYmSVB0KGksYSx3TmUpfXZhciBtTmU9MSx5TmU9MjtmdW5jdGlvbiB4TmUoaSxhKXtyZXR1cm4gSGR0KGkpJiZMUHQoYSk/TVB0KG9QKGkpLGEpOmZ1bmN0aW9uKGYpe3ZhciBwPWREZShmLGkpO3JldHVybiBwPT09dm9pZCAwJiZwPT09YT9EUHQoZixpKTpZZHQoYSxwLG1OZXx5TmUpfX1mdW5jdGlvbiBrTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3ZvaWQgMDphW2ldfX1mdW5jdGlvbiBFTmUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBuSyhhLGkpfX1mdW5jdGlvbiBUTmUoaSl7cmV0dXJuIEhkdChpKT9rTmUob1AoaSkpOkVOZShpKX1mdW5jdGlvbiBvayhpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP3NUOnR5cGVvZiBpPT0ib2JqZWN0Ij9NZihpKT94TmUoaVswXSxpWzFdKTp2TmUoaSk6VE5lKGkpfWZ1bmN0aW9uIFhkdChpLGEpe3JldHVybiBpJiZZMXQoaSxhLE5iKX1mdW5jdGlvbiBDTmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZixwKXtpZihmPT1udWxsKXJldHVybiBmO2lmKCFlayhmKSlyZXR1cm4gaShmLHApO2Zvcih2YXIgdj1mLmxlbmd0aCxtPWE/djotMSxiPU9iamVjdChmKTsoYT9tLS06KyttPHYpJiZwKGJbbV0sbSxiKSE9PSExOyk7cmV0dXJuIGZ9fXZhciBfTmU9Q05lKFhkdCk7Y29uc3Qgc0s9X05lO3ZhciBTTmU9ZnVuY3Rpb24oKXtyZXR1cm4gSncuRGF0ZS5ub3coKX07Y29uc3QgT1B0PVNOZTt2YXIgTlB0PU9iamVjdC5wcm90b3R5cGUsQU5lPU5QdC5oYXNPd25Qcm9wZXJ0eSxMTmU9a1coZnVuY3Rpb24oaSxhKXtpPU9iamVjdChpKTt2YXIgZj0tMSxwPWEubGVuZ3RoLHY9cD4yP2FbMl06dm9pZCAwO2Zvcih2JiZZTihhWzBdLGFbMV0sdikmJihwPTEpOysrZjxwOylmb3IodmFyIG09YVtmXSxiPWlUKG0pLEU9LTEsXz1iLmxlbmd0aDsrK0U8Xzspe3ZhciBMPWJbRV0sTj1pW0xdOyhOPT09dm9pZCAwfHxOQShOLE5QdFtMXSkmJiFBTmUuY2FsbChpLEwpKSYmKGlbTF09bVtMXSl9cmV0dXJuIGl9KTtjb25zdCBKQT1MTmU7ZnVuY3Rpb24gTU5lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pPT1udWxsPzA6aS5sZW5ndGg7KytwPHY7KWlmKGYoYSxpW3BdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBhSyhpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/aVthLTFdOnZvaWQgMH1mdW5jdGlvbiBRZHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6c1R9ZnVuY3Rpb24gY3IoaSxhKXt2YXIgZj1NZihpKT9vUHQ6c0s7cmV0dXJuIGYoaSxRZHQoYSkpfWZ1bmN0aW9uIElOZShpLGEpe3ZhciBmPVtdO3JldHVybiBzSyhpLGZ1bmN0aW9uKHAsdixtKXthKHAsdixtKSYmZi5wdXNoKHApfSksZn1mdW5jdGlvbiBUNShpLGEpe3ZhciBmPU1mKGkpP2hQdDpJTmU7cmV0dXJuIGYoaSxvayhhKSl9ZnVuY3Rpb24gRE5lKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7dmFyIHY9T2JqZWN0KGEpO2lmKCFlayhhKSl7dmFyIG09b2soZik7YT1OYihhKSxmPWZ1bmN0aW9uKEUpe3JldHVybiBtKHZbRV0sRSx2KX19dmFyIGI9aShhLGYscCk7cmV0dXJuIGI+LTE/dlttP2FbYl06Yl06dm9pZCAwfX12YXIgT05lPU1hdGgubWF4O2Z1bmN0aW9uIE5OZShpLGEsZil7dmFyIHA9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFwKXJldHVybi0xO3ZhciB2PWY9PW51bGw/MDpaSWUoZik7cmV0dXJuIHY8MCYmKHY9T05lKHArdiwwKSksY1B0KGksb2soYSksdil9dmFyIFBOZT1ETmUoTk5lKTtjb25zdCBaZHQ9UE5lO2Z1bmN0aW9uIFBQdChpLGEpe3ZhciBmPS0xLHA9ZWsoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiBzSyhpLGZ1bmN0aW9uKHYsbSxiKXtwWysrZl09YSh2LG0sYil9KSxwfWZ1bmN0aW9uIE9mKGksYSl7dmFyIGY9TWYoaSk/UUE6UFB0O3JldHVybiBmKGksb2soYSkpfWZ1bmN0aW9uIEZOZShpLGEpe3JldHVybiBpPT1udWxsP2k6WTF0KGksUWR0KGEpLGlUKX1mdW5jdGlvbiBCTmUoaSxhKXtyZXR1cm4gaSYmWGR0KGksUWR0KGEpKX1mdW5jdGlvbiBSTmUoaSxhKXtyZXR1cm4gaT5hfXZhciBqTmU9T2JqZWN0LnByb3RvdHlwZSwkTmU9ak5lLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHpOZShpLGEpe3JldHVybiBpIT1udWxsJiYkTmUuY2FsbChpLGEpfWZ1bmN0aW9uIHphKGksYSl7cmV0dXJuIGkhPW51bGwmJklQdChpLGEsek5lKX1mdW5jdGlvbiBxTmUoaSxhKXtyZXR1cm4gUUEoYSxmdW5jdGlvbihmKXtyZXR1cm4gaVtmXX0pfWZ1bmN0aW9uIEM1KGkpe3JldHVybiBpPT1udWxsP1tdOnFOZShpLE5iKGkpKX1mdW5jdGlvbiBYaChpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBGUHQoaSxhKXtyZXR1cm4gaTxhfWZ1bmN0aW9uIG9LKGksYSl7dmFyIGY9e307cmV0dXJuIGE9b2soYSksWGR0KGksZnVuY3Rpb24ocCx2LG0pe3BXKGYsdixhKHAsdixtKSl9KSxmfWZ1bmN0aW9uIEpkdChpLGEsZil7Zm9yKHZhciBwPS0xLHY9aS5sZW5ndGg7KytwPHY7KXt2YXIgbT1pW3BdLGI9YShtKTtpZihiIT1udWxsJiYoRT09PXZvaWQgMD9iPT09YiYmIXBUKGIpOmYoYixFKSkpdmFyIEU9YixfPW19cmV0dXJuIF99ZnVuY3Rpb24gYlQoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP0pkdChpLHNULFJOZSk6dm9pZCAwfWZ1bmN0aW9uIGxQKGkpe3JldHVybiBpJiZpLmxlbmd0aD9KZHQoaSxzVCxGUHQpOnZvaWQgMH1mdW5jdGlvbiB0MHQoaSxhKXtyZXR1cm4gaSYmaS5sZW5ndGg/SmR0KGksb2soYSksRlB0KTp2b2lkIDB9ZnVuY3Rpb24gSE5lKGksYSxmLHApe2lmKCFJYihpKSlyZXR1cm4gaTthPWVLKGEsaSk7Zm9yKHZhciB2PS0xLG09YS5sZW5ndGgsYj1tLTEsRT1pO0UhPW51bGwmJisrdjxtOyl7dmFyIF89b1AoYVt2XSksTD1mO2lmKF89PT0iX19wcm90b19fInx8Xz09PSJjb25zdHJ1Y3RvciJ8fF89PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZih2IT1iKXt2YXIgTj1FW19dO0w9cD9wKE4sXyxFKTp2b2lkIDAsTD09PXZvaWQgMCYmKEw9SWIoTik/Tjp4VyhhW3YrMV0pP1tdOnt9KX15VyhFLF8sTCksRT1FW19dfXJldHVybiBpfWZ1bmN0aW9uIEdOZShpLGEsZil7Zm9yKHZhciBwPS0xLHY9YS5sZW5ndGgsbT17fTsrK3A8djspe3ZhciBiPWFbcF0sRT1uSyhpLGIpO2YoRSxiKSYmSE5lKG0sZUsoYixpKSxFKX1yZXR1cm4gbX1mdW5jdGlvbiBWTmUoaSxhKXt2YXIgZj1pLmxlbmd0aDtmb3IoaS5zb3J0KGEpO2YtLTspaVtmXT1pW2ZdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIFVOZShpLGEpe2lmKGkhPT1hKXt2YXIgZj1pIT09dm9pZCAwLHA9aT09PW51bGwsdj1pPT09aSxtPXBUKGkpLGI9YSE9PXZvaWQgMCxFPWE9PT1udWxsLF89YT09PWEsTD1wVChhKTtpZighRSYmIUwmJiFtJiZpPmF8fG0mJmImJl8mJiFFJiYhTHx8cCYmYiYmX3x8IWYmJl98fCF2KXJldHVybiAxO2lmKCFwJiYhbSYmIUwmJmk8YXx8TCYmZiYmdiYmIXAmJiFtfHxFJiZmJiZ2fHwhYiYmdnx8IV8pcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gV05lKGksYSxmKXtmb3IodmFyIHA9LTEsdj1pLmNyaXRlcmlhLG09YS5jcml0ZXJpYSxiPXYubGVuZ3RoLEU9Zi5sZW5ndGg7KytwPGI7KXt2YXIgXz1VTmUodltwXSxtW3BdKTtpZihfKXtpZihwPj1FKXJldHVybiBfO3ZhciBMPWZbcF07cmV0dXJuIF8qKEw9PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiBLTmUoaSxhLGYpe2EubGVuZ3RoP2E9UUEoYSxmdW5jdGlvbihtKXtyZXR1cm4gTWYobSk/ZnVuY3Rpb24oYil7cmV0dXJuIG5LKGIsbS5sZW5ndGg9PT0xP21bMF06bSl9Om19KTphPVtzVF07dmFyIHA9LTE7YT1RQShhLHdXKG9rKSk7dmFyIHY9UFB0KGksZnVuY3Rpb24obSxiLEUpe3ZhciBfPVFBKGEsZnVuY3Rpb24oTCl7cmV0dXJuIEwobSl9KTtyZXR1cm57Y3JpdGVyaWE6XyxpbmRleDorK3AsdmFsdWU6bX19KTtyZXR1cm4gVk5lKHYsZnVuY3Rpb24obSxiKXtyZXR1cm4gV05lKG0sYixmKX0pfWZ1bmN0aW9uIFlOZShpLGEpe3JldHVybiBHTmUoaSxhLGZ1bmN0aW9uKGYscCl7cmV0dXJuIERQdChpLHApfSl9dmFyIFhOZT1wRGUoZnVuY3Rpb24oaSxhKXtyZXR1cm4gaT09bnVsbD97fTpZTmUoaSxhKX0pO2NvbnN0IGhQPVhOZTt2YXIgUU5lPU1hdGguY2VpbCxaTmU9TWF0aC5tYXg7ZnVuY3Rpb24gSk5lKGksYSxmLHApe2Zvcih2YXIgdj0tMSxtPVpOZShRTmUoKGEtaSkvKGZ8fDEpKSwwKSxiPUFycmF5KG0pO20tLTspYltwP206Kyt2XT1pLGkrPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gdFBlKGkpe3JldHVybiBmdW5jdGlvbihhLGYscCl7cmV0dXJuIHAmJnR5cGVvZiBwIT0ibnVtYmVyIiYmWU4oYSxmLHApJiYoZj1wPXZvaWQgMCksYT10SyhhKSxmPT09dm9pZCAwPyhmPWEsYT0wKTpmPXRLKGYpLHA9cD09PXZvaWQgMD9hPGY/MTotMTp0SyhwKSxKTmUoYSxmLHAsaSl9fXZhciBlUGU9dFBlKCk7Y29uc3QgdlQ9ZVBlO2Z1bmN0aW9uIG5QZShpLGEsZixwLHYpe3JldHVybiB2KGksZnVuY3Rpb24obSxiLEUpe2Y9cD8ocD0hMSxtKTphKGYsbSxiLEUpfSksZn1mdW5jdGlvbiBmUChpLGEsZil7dmFyIHA9TWYoaSk/YkRlOm5QZSx2PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gcChpLG9rKGEpLGYsdixzSyl9dmFyIHJQZT1rVyhmdW5jdGlvbihpLGEpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIGY9YS5sZW5ndGg7cmV0dXJuIGY+MSYmWU4oaSxhWzBdLGFbMV0pP2E9W106Zj4yJiZZTihhWzBdLGFbMV0sYVsyXSkmJihhPVthWzBdXSksS05lKGkscksoYSwxKSxbXSl9KTtjb25zdCBkUD1yUGU7dmFyIGlQZT0xLzAsc1BlPUdBJiYxL1dkdChuZXcgR0EoWywtMF0pKVsxXT09aVBlP2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgR0EoaSl9OkpJZTtjb25zdCBhUGU9c1BlO3ZhciBvUGU9MjAwO2Z1bmN0aW9uIGNQZShpLGEsZil7dmFyIHA9LTEsdj1yRGUsbT1pLmxlbmd0aCxiPSEwLEU9W10sXz1FO2lmKGYpYj0hMSx2PU1OZTtlbHNlIGlmKG0+PW9QZSl7dmFyIEw9YT9udWxsOmFQZShpKTtpZihMKXJldHVybiBXZHQoTCk7Yj0hMSx2PUVQdCxfPW5ldyB1UH1lbHNlIF89YT9bXTpFO3Q6Zm9yKDsrK3A8bTspe3ZhciBOPWlbcF0sQj1hP2EoTik6TjtpZihOPWZ8fE4hPT0wP046MCxiJiZCPT09Qil7Zm9yKHZhciBqPV8ubGVuZ3RoO2otLTspaWYoX1tqXT09PUIpY29udGludWUgdDthJiZfLnB1c2goQiksRS5wdXNoKE4pfWVsc2UgdihfLEIsZil8fChfIT09RSYmXy5wdXNoKEIpLEUucHVzaChOKSl9cmV0dXJuIEV9dmFyIHVQZT1rVyhmdW5jdGlvbihpKXtyZXR1cm4gY1BlKHJLKGksMSxDRHQsITApKX0pO2NvbnN0IGxQZT11UGU7dmFyIGhQZT0wO2Z1bmN0aW9uIGNLKGkpe3ZhciBhPSsraFBlO3JldHVybiB1UHQoaSkrYX1mdW5jdGlvbiBmUGUoaSxhLGYpe2Zvcih2YXIgcD0tMSx2PWkubGVuZ3RoLG09YS5sZW5ndGgsYj17fTsrK3A8djspe3ZhciBFPXA8bT9hW3BdOnZvaWQgMDtmKGIsaVtwXSxFKX1yZXR1cm4gYn1mdW5jdGlvbiBkUGUoaSxhKXtyZXR1cm4gZlBlKGl8fFtdLGF8fFtdLHlXKX12YXIgZ1BlPSJcMCIsd1Q9IlwwIixCUHQ9IgEiO2NsYXNzIGExe2NvbnN0cnVjdG9yKGE9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9emEoYSwiZGlyZWN0ZWQiKT9hLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD16YShhLCJtdWx0aWdyYXBoIik/YS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9emEoYSwiY29tcG91bmQiKT9hLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49akEodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49akEodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW3dUXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgoYSl7cmV0dXJuIHRoaXMuX2xhYmVsPWEsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKGEpe3JldHVybiBPQShhKXx8KGE9akEoYSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1hLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBOYih0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBhPXRoaXM7cmV0dXJuIFQ1KHRoaXMubm9kZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdFAoYS5faW5bZl0pfSl9c2lua3MoKXt2YXIgYT10aGlzO3JldHVybiBUNSh0aGlzLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIHRQKGEuX291dFtmXSl9KX1zZXROb2RlcyhhLGYpe3ZhciBwPWFyZ3VtZW50cyx2PXRoaXM7cmV0dXJuIGNyKGEsZnVuY3Rpb24obSl7cC5sZW5ndGg+MT92LnNldE5vZGUobSxmKTp2LnNldE5vZGUobSl9KSx0aGlzfXNldE5vZGUoYSxmKXtyZXR1cm4gemEodGhpcy5fbm9kZXMsYSk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW2FdPWYpLHRoaXMpOih0aGlzLl9ub2Rlc1thXT1hcmd1bWVudHMubGVuZ3RoPjE/Zjp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4oYSksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFthXT13VCx0aGlzLl9jaGlsZHJlblthXT17fSx0aGlzLl9jaGlsZHJlblt3VF1bYV09ITApLHRoaXMuX2luW2FdPXt9LHRoaXMuX3ByZWRzW2FdPXt9LHRoaXMuX291dFthXT17fSx0aGlzLl9zdWNzW2FdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUoYSl7cmV0dXJuIHRoaXMuX25vZGVzW2FdfWhhc05vZGUoYSl7cmV0dXJuIHphKHRoaXMuX25vZGVzLGEpfXJlbW92ZU5vZGUoYSl7dmFyIGY9dGhpcztpZih6YSh0aGlzLl9ub2RlcyxhKSl7dmFyIHA9ZnVuY3Rpb24odil7Zi5yZW1vdmVFZGdlKGYuX2VkZ2VPYmpzW3ZdKX07ZGVsZXRlIHRoaXMuX25vZGVzW2FdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSxkZWxldGUgdGhpcy5fcGFyZW50W2FdLGNyKHRoaXMuY2hpbGRyZW4oYSksZnVuY3Rpb24odil7Zi5zZXRQYXJlbnQodil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bYV0pLGNyKE5iKHRoaXMuX2luW2FdKSxwKSxkZWxldGUgdGhpcy5faW5bYV0sZGVsZXRlIHRoaXMuX3ByZWRzW2FdLGNyKE5iKHRoaXMuX291dFthXSkscCksZGVsZXRlIHRoaXMuX291dFthXSxkZWxldGUgdGhpcy5fc3Vjc1thXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoYSxmKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoWGgoZikpZj13VDtlbHNle2YrPSIiO2Zvcih2YXIgcD1mOyFYaChwKTtwPXRoaXMucGFyZW50KHApKWlmKHA9PT1hKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2YrIiBhcyBwYXJlbnQgb2YgIithKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZil9cmV0dXJuIHRoaXMuc2V0Tm9kZShhKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKSx0aGlzLl9wYXJlbnRbYV09Zix0aGlzLl9jaGlsZHJlbltmXVthXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChhKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2FdXVthXX1wYXJlbnQoYSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGY9dGhpcy5fcGFyZW50W2FdO2lmKGYhPT13VClyZXR1cm4gZn19Y2hpbGRyZW4oYSl7aWYoWGgoYSkmJihhPXdUKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZj10aGlzLl9jaGlsZHJlblthXTtpZihmKXJldHVybiBOYihmKX1lbHNle2lmKGE9PT13VClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShhKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGEpe3ZhciBmPXRoaXMuX3ByZWRzW2FdO2lmKGYpcmV0dXJuIE5iKGYpfXN1Y2Nlc3NvcnMoYSl7dmFyIGY9dGhpcy5fc3Vjc1thXTtpZihmKXJldHVybiBOYihmKX1uZWlnaGJvcnMoYSl7dmFyIGY9dGhpcy5wcmVkZWNlc3NvcnMoYSk7aWYoZilyZXR1cm4gbFBlKGYsdGhpcy5zdWNjZXNzb3JzKGEpKX1pc0xlYWYoYSl7dmFyIGY7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP2Y9dGhpcy5zdWNjZXNzb3JzKGEpOmY9dGhpcy5uZWlnaGJvcnMoYSksZi5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKGEpe3ZhciBmPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtmLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHA9dGhpcztjcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLEUpe2EoRSkmJmYuc2V0Tm9kZShFLGIpfSksY3IodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7Zi5oYXNOb2RlKGIudikmJmYuaGFzTm9kZShiLncpJiZmLnNldEVkZ2UoYixwLmVkZ2UoYikpfSk7dmFyIHY9e307ZnVuY3Rpb24gbShiKXt2YXIgRT1wLnBhcmVudChiKTtyZXR1cm4gRT09PXZvaWQgMHx8Zi5oYXNOb2RlKEUpPyh2W2JdPUUsRSk6RSBpbiB2P3ZbRV06bShFKX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmY3IoZi5ub2RlcygpLGZ1bmN0aW9uKGIpe2Yuc2V0UGFyZW50KGIsbShiKSl9KSxmfXNldERlZmF1bHRFZGdlTGFiZWwoYSl7cmV0dXJuIE9BKGEpfHwoYT1qQShhKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPWEsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuIEM1KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKGEsZil7dmFyIHA9dGhpcyx2PWFyZ3VtZW50cztyZXR1cm4gZlAoYSxmdW5jdGlvbihtLGIpe3JldHVybiB2Lmxlbmd0aD4xP3Auc2V0RWRnZShtLGIsZik6cC5zZXRFZGdlKG0sYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBhLGYscCx2LG09ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8oYT1iLnYsZj1iLncscD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJih2PWFyZ3VtZW50c1sxXSxtPSEwKSk6KGE9YixmPWFyZ3VtZW50c1sxXSxwPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJih2PWFyZ3VtZW50c1syXSxtPSEwKSksYT0iIithLGY9IiIrZixYaChwKXx8KHA9IiIrcCk7dmFyIEU9Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7aWYoemEodGhpcy5fZWRnZUxhYmVscyxFKSlyZXR1cm4gbSYmKHRoaXMuX2VkZ2VMYWJlbHNbRV09diksdGhpcztpZighWGgocCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGEpLHRoaXMuc2V0Tm9kZShmKSx0aGlzLl9lZGdlTGFiZWxzW0VdPW0/djp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oYSxmLHApO3ZhciBfPXBQZSh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gYT1fLnYsZj1fLncsT2JqZWN0LmZyZWV6ZShfKSx0aGlzLl9lZGdlT2Jqc1tFXT1fLFJQdCh0aGlzLl9wcmVkc1tmXSxhKSxSUHQodGhpcy5fc3Vjc1thXSxmKSx0aGlzLl9pbltmXVtFXT1fLHRoaXMuX291dFthXVtFXT1fLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShhLGYscCl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD09PTE/ZTB0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpnUCh0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1t2XX1oYXNFZGdlKGEsZixwKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPT09MT9lMHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmdQKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApO3JldHVybiB6YSh0aGlzLl9lZGdlTGFiZWxzLHYpfXJlbW92ZUVkZ2UoYSxmLHApe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg9PT0xP2UwdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6Z1AodGhpcy5faXNEaXJlY3RlZCxhLGYscCksbT10aGlzLl9lZGdlT2Jqc1t2XTtyZXR1cm4gbSYmKGE9bS52LGY9bS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3ZdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1t2XSxqUHQodGhpcy5fcHJlZHNbZl0sYSksalB0KHRoaXMuX3N1Y3NbYV0sZiksZGVsZXRlIHRoaXMuX2luW2ZdW3ZdLGRlbGV0ZSB0aGlzLl9vdXRbYV1bdl0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhhLGYpe3ZhciBwPXRoaXMuX2luW2FdO2lmKHApe3ZhciB2PUM1KHApO3JldHVybiBmP1Q1KHYsZnVuY3Rpb24obSl7cmV0dXJuIG0udj09PWZ9KTp2fX1vdXRFZGdlcyhhLGYpe3ZhciBwPXRoaXMuX291dFthXTtpZihwKXt2YXIgdj1DNShwKTtyZXR1cm4gZj9UNSh2LGZ1bmN0aW9uKG0pe3JldHVybiBtLnc9PT1mfSk6dn19bm9kZUVkZ2VzKGEsZil7dmFyIHA9dGhpcy5pbkVkZ2VzKGEsZik7aWYocClyZXR1cm4gcC5jb25jYXQodGhpcy5vdXRFZGdlcyhhLGYpKX19YTEucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxhMS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIFJQdChpLGEpe2lbYV0/aVthXSsrOmlbYV09MX1mdW5jdGlvbiBqUHQoaSxhKXstLWlbYV18fGRlbGV0ZSBpW2FdfWZ1bmN0aW9uIGdQKGksYSxmLHApe3ZhciB2PSIiK2EsbT0iIitmO2lmKCFpJiZ2Pm0pe3ZhciBiPXY7dj1tLG09Yn1yZXR1cm4gditCUHQrbStCUHQrKFhoKHApP2dQZTpwKX1mdW5jdGlvbiBwUGUoaSxhLGYscCl7dmFyIHY9IiIrYSxtPSIiK2Y7aWYoIWkmJnY+bSl7dmFyIGI9djt2PW0sbT1ifXZhciBFPXt2LHc6bX07cmV0dXJuIHAmJihFLm5hbWU9cCksRX1mdW5jdGlvbiBlMHQoaSxhKXtyZXR1cm4gZ1AoaSxhLnYsYS53LGEubmFtZSl9Y2xhc3MgYlBle2NvbnN0cnVjdG9yKCl7dmFyIGE9e307YS5fbmV4dD1hLl9wcmV2PWEsdGhpcy5fc2VudGluZWw9YX1kZXF1ZXVlKCl7dmFyIGE9dGhpcy5fc2VudGluZWwsZj1hLl9wcmV2O2lmKGYhPT1hKXJldHVybiAkUHQoZiksZn1lbnF1ZXVlKGEpe3ZhciBmPXRoaXMuX3NlbnRpbmVsO2EuX3ByZXYmJmEuX25leHQmJiRQdChhKSxhLl9uZXh0PWYuX25leHQsZi5fbmV4dC5fcHJldj1hLGYuX25leHQ9YSxhLl9wcmV2PWZ9dG9TdHJpbmcoKXtmb3IodmFyIGE9W10sZj10aGlzLl9zZW50aW5lbCxwPWYuX3ByZXY7cCE9PWY7KWEucHVzaChKU09OLnN0cmluZ2lmeShwLHZQZSkpLHA9cC5fcHJldjtyZXR1cm4iWyIrYS5qb2luKCIsICIpKyJdIn19ZnVuY3Rpb24gJFB0KGkpe2kuX3ByZXYuX25leHQ9aS5fbmV4dCxpLl9uZXh0Ll9wcmV2PWkuX3ByZXYsZGVsZXRlIGkuX25leHQsZGVsZXRlIGkuX3ByZXZ9ZnVuY3Rpb24gdlBlKGksYSl7aWYoaSE9PSJfbmV4dCImJmkhPT0iX3ByZXYiKXJldHVybiBhfXZhciB3UGU9akEoMSk7ZnVuY3Rpb24gbVBlKGksYSl7aWYoaS5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgZj14UGUoaSxhfHx3UGUpLHA9eVBlKGYuZ3JhcGgsZi5idWNrZXRzLGYuemVyb0lkeCk7cmV0dXJuIFpBKE9mKHAsZnVuY3Rpb24odil7cmV0dXJuIGkub3V0RWRnZXModi52LHYudyl9KSl9ZnVuY3Rpb24geVBlKGksYSxmKXtmb3IodmFyIHA9W10sdj1hW2EubGVuZ3RoLTFdLG09YVswXSxiO2kubm9kZUNvdW50KCk7KXtmb3IoO2I9bS5kZXF1ZXVlKCk7KW4wdChpLGEsZixiKTtmb3IoO2I9di5kZXF1ZXVlKCk7KW4wdChpLGEsZixiKTtpZihpLm5vZGVDb3VudCgpKXtmb3IodmFyIEU9YS5sZW5ndGgtMjtFPjA7LS1FKWlmKGI9YVtFXS5kZXF1ZXVlKCksYil7cD1wLmNvbmNhdChuMHQoaSxhLGYsYiwhMCkpO2JyZWFrfX19cmV0dXJuIHB9ZnVuY3Rpb24gbjB0KGksYSxmLHAsdil7dmFyIG09dj9bXTp2b2lkIDA7cmV0dXJuIGNyKGkuaW5FZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWkubm9kZShiLnYpO3YmJm0ucHVzaCh7djpiLnYsdzpiLnd9KSxfLm91dC09RSxyMHQoYSxmLF8pfSksY3IoaS5vdXRFZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWIudyxMPWkubm9kZShfKTtMLmluLT1FLHIwdChhLGYsTCl9KSxpLnJlbW92ZU5vZGUocC52KSxtfWZ1bmN0aW9uIHhQZShpLGEpe3ZhciBmPW5ldyBhMSxwPTAsdj0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihFKXtmLnNldE5vZGUoRSx7djpFLGluOjAsb3V0OjB9KX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihFKXt2YXIgXz1mLmVkZ2UoRS52LEUudyl8fDAsTD1hKEUpLE49XytMO2Yuc2V0RWRnZShFLnYsRS53LE4pLHY9TWF0aC5tYXgodixmLm5vZGUoRS52KS5vdXQrPUwpLHA9TWF0aC5tYXgocCxmLm5vZGUoRS53KS5pbis9TCl9KTt2YXIgbT12VCh2K3ArMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiUGV9KSxiPXArMTtyZXR1cm4gY3IoZi5ub2RlcygpLGZ1bmN0aW9uKEUpe3IwdChtLGIsZi5ub2RlKEUpKX0pLHtncmFwaDpmLGJ1Y2tldHM6bSx6ZXJvSWR4OmJ9fWZ1bmN0aW9uIHIwdChpLGEsZil7Zi5vdXQ/Zi5pbj9pW2Yub3V0LWYuaW4rYV0uZW5xdWV1ZShmKTppW2kubGVuZ3RoLTFdLmVucXVldWUoZik6aVswXS5lbnF1ZXVlKGYpfWZ1bmN0aW9uIGtQZShpKXt2YXIgYT1pLmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/bVBlKGksZihpKSk6RVBlKGkpO2NyKGEsZnVuY3Rpb24ocCl7dmFyIHY9aS5lZGdlKHApO2kucmVtb3ZlRWRnZShwKSx2LmZvcndhcmROYW1lPXAubmFtZSx2LnJldmVyc2VkPSEwLGkuc2V0RWRnZShwLncscC52LHYsY0soInJldiIpKX0pO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBwLmVkZ2Uodikud2VpZ2h0fX19ZnVuY3Rpb24gRVBlKGkpe3ZhciBhPVtdLGY9e30scD17fTtmdW5jdGlvbiB2KG0pe3phKHAsbSl8fChwW21dPSEwLGZbbV09ITAsY3IoaS5vdXRFZGdlcyhtKSxmdW5jdGlvbihiKXt6YShmLGIudyk/YS5wdXNoKGIpOnYoYi53KX0pLGRlbGV0ZSBmW21dKX1yZXR1cm4gY3IoaS5ub2RlcygpLHYpLGF9ZnVuY3Rpb24gVFBlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoZi5yZXZlcnNlZCl7aS5yZW1vdmVFZGdlKGEpO3ZhciBwPWYuZm9yd2FyZE5hbWU7ZGVsZXRlIGYucmV2ZXJzZWQsZGVsZXRlIGYuZm9yd2FyZE5hbWUsaS5zZXRFZGdlKGEudyxhLnYsZixwKX19KX1mdW5jdGlvbiB0TChpLGEsZixwKXt2YXIgdjtkbyB2PWNLKHApO3doaWxlKGkuaGFzTm9kZSh2KSk7cmV0dXJuIGYuZHVtbXk9YSxpLnNldE5vZGUodixmKSx2fWZ1bmN0aW9uIENQZShpKXt2YXIgYT1uZXcgYTEoKS5zZXRHcmFwaChpLmdyYXBoKCkpO3JldHVybiBjcihpLm5vZGVzKCksZnVuY3Rpb24oZil7YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1hLmVkZ2UoZi52LGYudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sdj1pLmVkZ2UoZik7YS5zZXRFZGdlKGYudixmLncse3dlaWdodDpwLndlaWdodCt2LndlaWdodCxtaW5sZW46TWF0aC5tYXgocC5taW5sZW4sdi5taW5sZW4pfSl9KSxhfWZ1bmN0aW9uIHpQdChpKXt2YXIgYT1uZXcgYTEoe211bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aHx8YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXthLnNldEVkZ2UoZixpLmVkZ2UoZikpfSksYX1mdW5jdGlvbiBxUHQoaSxhKXt2YXIgZj1pLngscD1pLnksdj1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtpZighdiYmIW0pdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTt2YXIgXyxMO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHYpKkU/KG08MCYmKEU9LUUpLF89RSp2L20sTD1FKToodjwwJiYoYj0tYiksXz1iLEw9YiptL3YpLHt4OmYrXyx5OnArTH19ZnVuY3Rpb24gdUsoaSl7dmFyIGE9T2YodlQoR1B0KGkpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gY3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PXAucmFuaztYaCh2KXx8KGFbdl1bcC5vcmRlcl09Zil9KSxhfWZ1bmN0aW9uIF9QZShpKXt2YXIgYT1sUChPZihpLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGkubm9kZShmKS5yYW5rfSkpO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7emEocCwicmFuayIpJiYocC5yYW5rLT1hKX0pfWZ1bmN0aW9uIFNQZShpKXt2YXIgYT1sUChPZihpLm5vZGVzKCksZnVuY3Rpb24obSl7cmV0dXJuIGkubm9kZShtKS5yYW5rfSkpLGY9W107Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKG0pe3ZhciBiPWkubm9kZShtKS5yYW5rLWE7ZltiXXx8KGZbYl09W10pLGZbYl0ucHVzaChtKX0pO3ZhciBwPTAsdj1pLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Y3IoZixmdW5jdGlvbihtLGIpe1hoKG0pJiZiJXYhPT0wPy0tcDpwJiZjcihtLGZ1bmN0aW9uKEUpe2kubm9kZShFKS5yYW5rKz1wfSl9KX1mdW5jdGlvbiBIUHQoaSxhLGYscCl7dmFyIHY9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYodi5yYW5rPWYsdi5vcmRlcj1wKSx0TChpLCJib3JkZXIiLHYsYSl9ZnVuY3Rpb24gR1B0KGkpe3JldHVybiBiVChPZihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpLnJhbms7aWYoIVhoKGYpKXJldHVybiBmfSkpfWZ1bmN0aW9uIEFQZShpLGEpe3ZhciBmPXtsaHM6W10scmhzOltdfTtyZXR1cm4gY3IoaSxmdW5jdGlvbihwKXthKHApP2YubGhzLnB1c2gocCk6Zi5yaHMucHVzaChwKX0pLGZ9ZnVuY3Rpb24gTFBlKGksYSl7dmFyIGY9T1B0KCk7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtjb25zb2xlLmxvZyhpKyIgdGltZTogIisoT1B0KCktZikrIm1zIil9fWZ1bmN0aW9uIE1QZShpLGEpe3JldHVybiBhKCl9ZnVuY3Rpb24gSVBlKGkpe2Z1bmN0aW9uIGEoZil7dmFyIHA9aS5jaGlsZHJlbihmKSx2PWkubm9kZShmKTtpZihwLmxlbmd0aCYmY3IocCxhKSx6YSh2LCJtaW5SYW5rIikpe3YuYm9yZGVyTGVmdD1bXSx2LmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbT12Lm1pblJhbmssYj12Lm1heFJhbmsrMTttPGI7KyttKVZQdChpLCJib3JkZXJMZWZ0IiwiX2JsIixmLHYsbSksVlB0KGksImJvcmRlclJpZ2h0IiwiX2JyIixmLHYsbSl9fWNyKGkuY2hpbGRyZW4oKSxhKX1mdW5jdGlvbiBWUHQoaSxhLGYscCx2LG0pe3ZhciBiPXt3aWR0aDowLGhlaWdodDowLHJhbms6bSxib3JkZXJUeXBlOmF9LEU9dlthXVttLTFdLF89dEwoaSwiYm9yZGVyIixiLGYpO3ZbYV1bbV09XyxpLnNldFBhcmVudChfLHApLEUmJmkuc2V0RWRnZShFLF8se3dlaWdodDoxfSl9ZnVuY3Rpb24gRFBlKGkpe3ZhciBhPWkuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGE9PT0ibHIifHxhPT09InJsIikmJlVQdChpKX1mdW5jdGlvbiBPUGUoaSl7dmFyIGE9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoYT09PSJidCJ8fGE9PT0icmwiKSYmTlBlKGkpLChhPT09ImxyInx8YT09PSJybCIpJiYoUFBlKGkpLFVQdChpKSl9ZnVuY3Rpb24gVVB0KGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5ub2RlKGEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXtXUHQoaS5lZGdlKGEpKX0pfWZ1bmN0aW9uIFdQdChpKXt2YXIgYT1pLndpZHRoO2kud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9YX1mdW5jdGlvbiBOUGUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe2kwdChpLm5vZGUoYSkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtjcihmLnBvaW50cyxpMHQpLHphKGYsInkiKSYmaTB0KGYpfSl9ZnVuY3Rpb24gaTB0KGkpe2kueT0taS55fWZ1bmN0aW9uIFBQZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7czB0KGkubm9kZShhKSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2NyKGYucG9pbnRzLHMwdCksemEoZiwieCIpJiZzMHQoZil9KX1mdW5jdGlvbiBzMHQoaSl7dmFyIGE9aS54O2kueD1pLnksaS55PWF9ZnVuY3Rpb24gRlBlKGkpe2kuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7QlBlKGksYSl9KX1mdW5jdGlvbiBCUGUoaSxhKXt2YXIgZj1hLnYscD1pLm5vZGUoZikucmFuayx2PWEudyxtPWkubm9kZSh2KS5yYW5rLGI9YS5uYW1lLEU9aS5lZGdlKGEpLF89RS5sYWJlbFJhbms7aWYobSE9PXArMSl7aS5yZW1vdmVFZGdlKGEpO3ZhciBMLE4sQjtmb3IoQj0wLCsrcDtwPG07KytCLCsrcClFLnBvaW50cz1bXSxOPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpFLGVkZ2VPYmo6YSxyYW5rOnB9LEw9dEwoaSwiZWRnZSIsTiwiX2QiKSxwPT09XyYmKE4ud2lkdGg9RS53aWR0aCxOLmhlaWdodD1FLmhlaWdodCxOLmR1bW15PSJlZGdlLWxhYmVsIixOLmxhYmVscG9zPUUubGFiZWxwb3MpLGkuc2V0RWRnZShmLEwse3dlaWdodDpFLndlaWdodH0sYiksQj09PTAmJmkuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKEwpLGY9TDtpLnNldEVkZ2UoZix2LHt3ZWlnaHQ6RS53ZWlnaHR9LGIpfX1mdW5jdGlvbiBSUGUoaSl7Y3IoaS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWYuZWRnZUxhYmVsLHY7Zm9yKGkuc2V0RWRnZShmLmVkZ2VPYmoscCk7Zi5kdW1teTspdj1pLnN1Y2Nlc3NvcnMoYSlbMF0saS5yZW1vdmVOb2RlKGEpLHAucG9pbnRzLnB1c2goe3g6Zi54LHk6Zi55fSksZi5kdW1teT09PSJlZGdlLWxhYmVsIiYmKHAueD1mLngscC55PWYueSxwLndpZHRoPWYud2lkdGgscC5oZWlnaHQ9Zi5oZWlnaHQpLGE9dixmPWkubm9kZShhKX0pfWZ1bmN0aW9uIGEwdChpKXt2YXIgYT17fTtmdW5jdGlvbiBmKHApe3ZhciB2PWkubm9kZShwKTtpZih6YShhLHApKXJldHVybiB2LnJhbms7YVtwXT0hMDt2YXIgbT1sUChPZihpLm91dEVkZ2VzKHApLGZ1bmN0aW9uKGIpe3JldHVybiBmKGIudyktaS5lZGdlKGIpLm1pbmxlbn0pKTtyZXR1cm4obT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8bT09PXZvaWQgMHx8bT09PW51bGwpJiYobT0wKSx2LnJhbms9bX1jcihpLnNvdXJjZXMoKSxmKX1mdW5jdGlvbiBwUChpLGEpe3JldHVybiBpLm5vZGUoYS53KS5yYW5rLWkubm9kZShhLnYpLnJhbmstaS5lZGdlKGEpLm1pbmxlbn1mdW5jdGlvbiBLUHQoaSl7dmFyIGE9bmV3IGExKHtkaXJlY3RlZDohMX0pLGY9aS5ub2RlcygpWzBdLHA9aS5ub2RlQ291bnQoKTthLnNldE5vZGUoZix7fSk7Zm9yKHZhciB2LG07alBlKGEsaSk8cDspdj0kUGUoYSxpKSxtPWEuaGFzTm9kZSh2LnYpP3BQKGksdik6LXBQKGksdikselBlKGEsaSxtKTtyZXR1cm4gYX1mdW5jdGlvbiBqUGUoaSxhKXtmdW5jdGlvbiBmKHApe2NyKGEubm9kZUVkZ2VzKHApLGZ1bmN0aW9uKHYpe3ZhciBtPXYudixiPXA9PT1tP3YudzptOyFpLmhhc05vZGUoYikmJiFwUChhLHYpJiYoaS5zZXROb2RlKGIse30pLGkuc2V0RWRnZShwLGIse30pLGYoYikpfSl9cmV0dXJuIGNyKGkubm9kZXMoKSxmKSxpLm5vZGVDb3VudCgpfWZ1bmN0aW9uICRQZShpLGEpe3JldHVybiB0MHQoYS5lZGdlcygpLGZ1bmN0aW9uKGYpe2lmKGkuaGFzTm9kZShmLnYpIT09aS5oYXNOb2RlKGYudykpcmV0dXJuIHBQKGEsZil9KX1mdW5jdGlvbiB6UGUoaSxhLGYpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihwKXthLm5vZGUocCkucmFuays9Zn0pfWZ1bmN0aW9uIHFQZSgpe31xUGUucHJvdG90eXBlPW5ldyBFcnJvcjtmdW5jdGlvbiBZUHQoaSxhLGYpe01mKGEpfHwoYT1bYV0pO3ZhciBwPShpLmlzRGlyZWN0ZWQoKT9pLnN1Y2Nlc3NvcnM6aS5uZWlnaGJvcnMpLmJpbmQoaSksdj1bXSxtPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKGIpe2lmKCFpLmhhc05vZGUoYikpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYik7WFB0KGksYixmPT09InBvc3QiLG0scCx2KX0pLHZ9ZnVuY3Rpb24gWFB0KGksYSxmLHAsdixtKXt6YShwLGEpfHwocFthXT0hMCxmfHxtLnB1c2goYSksY3IodihhKSxmdW5jdGlvbihiKXtYUHQoaSxiLGYscCx2LG0pfSksZiYmbS5wdXNoKGEpKX1mdW5jdGlvbiBIUGUoaSxhKXtyZXR1cm4gWVB0KGksYSwicG9zdCIpfWZ1bmN0aW9uIEdQZShpLGEpe3JldHVybiBZUHQoaSxhLCJwcmUiKX1tVC5pbml0TG93TGltVmFsdWVzPWMwdCxtVC5pbml0Q3V0VmFsdWVzPW8wdCxtVC5jYWxjQ3V0VmFsdWU9UVB0LG1ULmxlYXZlRWRnZT1KUHQsbVQuZW50ZXJFZGdlPXRGdCxtVC5leGNoYW5nZUVkZ2VzPWVGdDtmdW5jdGlvbiBtVChpKXtpPUNQZShpKSxhMHQoaSk7dmFyIGE9S1B0KGkpO2MwdChhKSxvMHQoYSxpKTtmb3IodmFyIGYscDtmPUpQdChhKTspcD10RnQoYSxpLGYpLGVGdChhLGksZixwKX1mdW5jdGlvbiBvMHQoaSxhKXt2YXIgZj1IUGUoaSxpLm5vZGVzKCkpO2Y9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGNyKGYsZnVuY3Rpb24ocCl7VlBlKGksYSxwKX0pfWZ1bmN0aW9uIFZQZShpLGEsZil7dmFyIHA9aS5ub2RlKGYpLHY9cC5wYXJlbnQ7aS5lZGdlKGYsdikuY3V0dmFsdWU9UVB0KGksYSxmKX1mdW5jdGlvbiBRUHQoaSxhLGYpe3ZhciBwPWkubm9kZShmKSx2PXAucGFyZW50LG09ITAsYj1hLmVkZ2UoZix2KSxFPTA7cmV0dXJuIGJ8fChtPSExLGI9YS5lZGdlKHYsZikpLEU9Yi53ZWlnaHQsY3IoYS5ub2RlRWRnZXMoZiksZnVuY3Rpb24oXyl7dmFyIEw9Xy52PT09ZixOPUw/Xy53Ol8udjtpZihOIT09dil7dmFyIEI9TD09PW0saj1hLmVkZ2UoXykud2VpZ2h0O2lmKEUrPUI/ajotaixXUGUoaSxmLE4pKXt2YXIgUj1pLmVkZ2UoZixOKS5jdXR2YWx1ZTtFKz1CPy1SOlJ9fX0pLEV9ZnVuY3Rpb24gYzB0KGksYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT1pLm5vZGVzKClbMF0pLFpQdChpLHt9LDEsYSl9ZnVuY3Rpb24gWlB0KGksYSxmLHAsdil7dmFyIG09ZixiPWkubm9kZShwKTtyZXR1cm4gYVtwXT0hMCxjcihpLm5laWdoYm9ycyhwKSxmdW5jdGlvbihFKXt6YShhLEUpfHwoZj1aUHQoaSxhLGYsRSxwKSl9KSxiLmxvdz1tLGIubGltPWYrKyx2P2IucGFyZW50PXY6ZGVsZXRlIGIucGFyZW50LGZ9ZnVuY3Rpb24gSlB0KGkpe3JldHVybiBaZHQoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3JldHVybiBpLmVkZ2UoYSkuY3V0dmFsdWU8MH0pfWZ1bmN0aW9uIHRGdChpLGEsZil7dmFyIHA9Zi52LHY9Zi53O2EuaGFzRWRnZShwLHYpfHwocD1mLncsdj1mLnYpO3ZhciBtPWkubm9kZShwKSxiPWkubm9kZSh2KSxFPW0sXz0hMTttLmxpbT5iLmxpbSYmKEU9YixfPSEwKTt2YXIgTD1UNShhLmVkZ2VzKCksZnVuY3Rpb24oTil7cmV0dXJuIF89PT1uRnQoaSxpLm5vZGUoTi52KSxFKSYmXyE9PW5GdChpLGkubm9kZShOLncpLEUpfSk7cmV0dXJuIHQwdChMLGZ1bmN0aW9uKE4pe3JldHVybiBwUChhLE4pfSl9ZnVuY3Rpb24gZUZ0KGksYSxmLHApe3ZhciB2PWYudixtPWYudztpLnJlbW92ZUVkZ2UodixtKSxpLnNldEVkZ2UocC52LHAudyx7fSksYzB0KGkpLG8wdChpLGEpLFVQZShpLGEpfWZ1bmN0aW9uIFVQZShpLGEpe3ZhciBmPVpkdChpLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWEubm9kZSh2KS5wYXJlbnR9KSxwPUdQZShpLGYpO3A9cC5zbGljZSgxKSxjcihwLGZ1bmN0aW9uKHYpe3ZhciBtPWkubm9kZSh2KS5wYXJlbnQsYj1hLmVkZ2UodixtKSxFPSExO2J8fChiPWEuZWRnZShtLHYpLEU9ITApLGEubm9kZSh2KS5yYW5rPWEubm9kZShtKS5yYW5rKyhFP2IubWlubGVuOi1iLm1pbmxlbil9KX1mdW5jdGlvbiBXUGUoaSxhLGYpe3JldHVybiBpLmhhc0VkZ2UoYSxmKX1mdW5jdGlvbiBuRnQoaSxhLGYpe3JldHVybiBmLmxvdzw9YS5saW0mJmEubGltPD1mLmxpbX1mdW5jdGlvbiBLUGUoaSl7c3dpdGNoKGkuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpyRnQoaSk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpYUGUoaSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOllQZShpKTticmVhaztkZWZhdWx0OnJGdChpKX19dmFyIFlQZT1hMHQ7ZnVuY3Rpb24gWFBlKGkpe2EwdChpKSxLUHQoaSl9ZnVuY3Rpb24gckZ0KGkpe21UKGkpfWZ1bmN0aW9uIFFQZShpKXt2YXIgYT10TChpLCJyb290Iix7fSwiX3Jvb3QiKSxmPVpQZShpKSxwPWJUKEM1KGYpKS0xLHY9MipwKzE7aS5ncmFwaCgpLm5lc3RpbmdSb290PWEsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGIpe2kuZWRnZShiKS5taW5sZW4qPXZ9KTt2YXIgbT1KUGUoaSkrMTtjcihpLmNoaWxkcmVuKCksZnVuY3Rpb24oYil7aUZ0KGksYSx2LG0scCxmLGIpfSksaS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPXZ9ZnVuY3Rpb24gaUZ0KGksYSxmLHAsdixtLGIpe3ZhciBFPWkuY2hpbGRyZW4oYik7aWYoIUUubGVuZ3RoKXtiIT09YSYmaS5zZXRFZGdlKGEsYix7d2VpZ2h0OjAsbWlubGVuOmZ9KTtyZXR1cm59dmFyIF89SFB0KGksIl9idCIpLEw9SFB0KGksIl9iYiIpLE49aS5ub2RlKGIpO2kuc2V0UGFyZW50KF8sYiksTi5ib3JkZXJUb3A9XyxpLnNldFBhcmVudChMLGIpLE4uYm9yZGVyQm90dG9tPUwsY3IoRSxmdW5jdGlvbihCKXtpRnQoaSxhLGYscCx2LG0sQik7dmFyIGo9aS5ub2RlKEIpLFI9ai5ib3JkZXJUb3A/ai5ib3JkZXJUb3A6Qix6PWouYm9yZGVyQm90dG9tP2ouYm9yZGVyQm90dG9tOkIsSz1qLmJvcmRlclRvcD9wOjIqcCxpdD1SIT09ej8xOnYtbVtiXSsxO2kuc2V0RWRnZShfLFIse3dlaWdodDpLLG1pbmxlbjppdCxuZXN0aW5nRWRnZTohMH0pLGkuc2V0RWRnZSh6LEwse3dlaWdodDpLLG1pbmxlbjppdCxuZXN0aW5nRWRnZTohMH0pfSksaS5wYXJlbnQoYil8fGkuc2V0RWRnZShhLF8se3dlaWdodDowLG1pbmxlbjp2K21bYl19KX1mdW5jdGlvbiBaUGUoaSl7dmFyIGE9e307ZnVuY3Rpb24gZihwLHYpe3ZhciBtPWkuY2hpbGRyZW4ocCk7bSYmbS5sZW5ndGgmJmNyKG0sZnVuY3Rpb24oYil7ZihiLHYrMSl9KSxhW3BdPXZ9cmV0dXJuIGNyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihwKXtmKHAsMSl9KSxhfWZ1bmN0aW9uIEpQZShpKXtyZXR1cm4gZlAoaS5lZGdlcygpLGZ1bmN0aW9uKGEsZil7cmV0dXJuIGEraS5lZGdlKGYpLndlaWdodH0sMCl9ZnVuY3Rpb24gdEZlKGkpe3ZhciBhPWkuZ3JhcGgoKTtpLnJlbW92ZU5vZGUoYS5uZXN0aW5nUm9vdCksZGVsZXRlIGEubmVzdGluZ1Jvb3QsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkuZWRnZShmKTtwLm5lc3RpbmdFZGdlJiZpLnJlbW92ZUVkZ2UoZil9KX1mdW5jdGlvbiBlRmUoaSxhLGYpe3ZhciBwPXt9LHY7Y3IoZixmdW5jdGlvbihtKXtmb3IodmFyIGI9aS5wYXJlbnQobSksRSxfO2I7KXtpZihFPWkucGFyZW50KGIpLEU/KF89cFtFXSxwW0VdPWIpOihfPXYsdj1iKSxfJiZfIT09Yil7YS5zZXRFZGdlKF8sYik7cmV0dXJufWI9RX19KX1mdW5jdGlvbiBuRmUoaSxhLGYpe3ZhciBwPXJGZShpKSx2PW5ldyBhMSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpwfSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihtKXtyZXR1cm4gaS5ub2RlKG0pfSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihtKXt2YXIgYj1pLm5vZGUobSksRT1pLnBhcmVudChtKTsoYi5yYW5rPT09YXx8Yi5taW5SYW5rPD1hJiZhPD1iLm1heFJhbmspJiYodi5zZXROb2RlKG0pLHYuc2V0UGFyZW50KG0sRXx8cCksY3IoaVtmXShtKSxmdW5jdGlvbihfKXt2YXIgTD1fLnY9PT1tP18udzpfLnYsTj12LmVkZ2UoTCxtKSxCPVhoKE4pPzA6Ti53ZWlnaHQ7di5zZXRFZGdlKEwsbSx7d2VpZ2h0OmkuZWRnZShfKS53ZWlnaHQrQn0pfSksemEoYiwibWluUmFuayIpJiZ2LnNldE5vZGUobSx7Ym9yZGVyTGVmdDpiLmJvcmRlckxlZnRbYV0sYm9yZGVyUmlnaHQ6Yi5ib3JkZXJSaWdodFthXX0pKX0pLHZ9ZnVuY3Rpb24gckZlKGkpe2Zvcih2YXIgYTtpLmhhc05vZGUoYT1jSygiX3Jvb3QiKSk7KTtyZXR1cm4gYX1mdW5jdGlvbiBpRmUoaSxhKXtmb3IodmFyIGY9MCxwPTE7cDxhLmxlbmd0aDsrK3ApZis9c0ZlKGksYVtwLTFdLGFbcF0pO3JldHVybiBmfWZ1bmN0aW9uIHNGZShpLGEsZil7Zm9yKHZhciBwPWRQZShmLE9mKGYsZnVuY3Rpb24oTCxOKXtyZXR1cm4gTn0pKSx2PVpBKE9mKGEsZnVuY3Rpb24oTCl7cmV0dXJuIGRQKE9mKGkub3V0RWRnZXMoTCksZnVuY3Rpb24oTil7cmV0dXJue3BvczpwW04ud10sd2VpZ2h0OmkuZWRnZShOKS53ZWlnaHR9fSksInBvcyIpfSkpLG09MTttPGYubGVuZ3RoOyltPDw9MTt2YXIgYj0yKm0tMTttLT0xO3ZhciBFPU9mKG5ldyBBcnJheShiKSxmdW5jdGlvbigpe3JldHVybiAwfSksXz0wO3JldHVybiBjcih2LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIE49TC5wb3MrbTtFW05dKz1MLndlaWdodDtmb3IodmFyIEI9MDtOPjA7KU4lMiYmKEIrPUVbTisxXSksTj1OLTE+PjEsRVtOXSs9TC53ZWlnaHQ7Xys9TC53ZWlnaHQqQn0pKSxffWZ1bmN0aW9uIGFGZShpKXt2YXIgYT17fSxmPVQ1KGkubm9kZXMoKSxmdW5jdGlvbihFKXtyZXR1cm4haS5jaGlsZHJlbihFKS5sZW5ndGh9KSxwPWJUKE9mKGYsZnVuY3Rpb24oRSl7cmV0dXJuIGkubm9kZShFKS5yYW5rfSkpLHY9T2YodlQocCsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gbShFKXtpZighemEoYSxFKSl7YVtFXT0hMDt2YXIgXz1pLm5vZGUoRSk7dltfLnJhbmtdLnB1c2goRSksY3IoaS5zdWNjZXNzb3JzKEUpLG0pfX12YXIgYj1kUChmLGZ1bmN0aW9uKEUpe3JldHVybiBpLm5vZGUoRSkucmFua30pO3JldHVybiBjcihiLG0pLHZ9ZnVuY3Rpb24gb0ZlKGksYSl7cmV0dXJuIE9mKGEsZnVuY3Rpb24oZil7dmFyIHA9aS5pbkVkZ2VzKGYpO2lmKHAubGVuZ3RoKXt2YXIgdj1mUChwLGZ1bmN0aW9uKG0sYil7dmFyIEU9aS5lZGdlKGIpLF89aS5ub2RlKGIudik7cmV0dXJue3N1bTptLnN1bStFLndlaWdodCpfLm9yZGVyLHdlaWdodDptLndlaWdodCtFLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmYsYmFyeWNlbnRlcjp2LnN1bS92LndlaWdodCx3ZWlnaHQ6di53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6Zn19KX1mdW5jdGlvbiBjRmUoaSxhKXt2YXIgZj17fTtjcihpLGZ1bmN0aW9uKHYsbSl7dmFyIGI9Zlt2LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdi52XSxpOm19O1hoKHYuYmFyeWNlbnRlcil8fChiLmJhcnljZW50ZXI9di5iYXJ5Y2VudGVyLGIud2VpZ2h0PXYud2VpZ2h0KX0pLGNyKGEuZWRnZXMoKSxmdW5jdGlvbih2KXt2YXIgbT1mW3Yudl0sYj1mW3Yud107IVhoKG0pJiYhWGgoYikmJihiLmluZGVncmVlKyssbS5vdXQucHVzaChmW3Yud10pKX0pO3ZhciBwPVQ1KGYsZnVuY3Rpb24odil7cmV0dXJuIXYuaW5kZWdyZWV9KTtyZXR1cm4gdUZlKHApfWZ1bmN0aW9uIHVGZShpKXt2YXIgYT1bXTtmdW5jdGlvbiBmKG0pe3JldHVybiBmdW5jdGlvbihiKXtiLm1lcmdlZHx8KFhoKGIuYmFyeWNlbnRlcil8fFhoKG0uYmFyeWNlbnRlcil8fGIuYmFyeWNlbnRlcj49bS5iYXJ5Y2VudGVyKSYmbEZlKG0sYil9fWZ1bmN0aW9uIHAobSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2IuaW4ucHVzaChtKSwtLWIuaW5kZWdyZWU9PT0wJiZpLnB1c2goYil9fWZvcig7aS5sZW5ndGg7KXt2YXIgdj1pLnBvcCgpO2EucHVzaCh2KSxjcih2LmluLnJldmVyc2UoKSxmKHYpKSxjcih2Lm91dCxwKHYpKX1yZXR1cm4gT2YoVDUoYSxmdW5jdGlvbihtKXtyZXR1cm4hbS5tZXJnZWR9KSxmdW5jdGlvbihtKXtyZXR1cm4gaFAobSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBsRmUoaSxhKXt2YXIgZj0wLHA9MDtpLndlaWdodCYmKGYrPWkuYmFyeWNlbnRlcippLndlaWdodCxwKz1pLndlaWdodCksYS53ZWlnaHQmJihmKz1hLmJhcnljZW50ZXIqYS53ZWlnaHQscCs9YS53ZWlnaHQpLGkudnM9YS52cy5jb25jYXQoaS52cyksaS5iYXJ5Y2VudGVyPWYvcCxpLndlaWdodD1wLGkuaT1NYXRoLm1pbihhLmksaS5pKSxhLm1lcmdlZD0hMH1mdW5jdGlvbiBoRmUoaSxhKXt2YXIgZj1BUGUoaSxmdW5jdGlvbihOKXtyZXR1cm4gemEoTiwiYmFyeWNlbnRlciIpfSkscD1mLmxocyx2PWRQKGYucmhzLGZ1bmN0aW9uKE4pe3JldHVybi1OLml9KSxtPVtdLGI9MCxFPTAsXz0wO3Auc29ydChmRmUoISFhKSksXz1zRnQobSx2LF8pLGNyKHAsZnVuY3Rpb24oTil7Xys9Ti52cy5sZW5ndGgsbS5wdXNoKE4udnMpLGIrPU4uYmFyeWNlbnRlcipOLndlaWdodCxFKz1OLndlaWdodCxfPXNGdChtLHYsXyl9KTt2YXIgTD17dnM6WkEobSl9O3JldHVybiBFJiYoTC5iYXJ5Y2VudGVyPWIvRSxMLndlaWdodD1FKSxMfWZ1bmN0aW9uIHNGdChpLGEsZil7Zm9yKHZhciBwO2EubGVuZ3RoJiYocD1hSyhhKSkuaTw9ZjspYS5wb3AoKSxpLnB1c2gocC52cyksZisrO3JldHVybiBmfWZ1bmN0aW9uIGZGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5iYXJ5Y2VudGVyPGYuYmFyeWNlbnRlcj8tMTphLmJhcnljZW50ZXI+Zi5iYXJ5Y2VudGVyPzE6aT9mLmktYS5pOmEuaS1mLml9fWZ1bmN0aW9uIGFGdChpLGEsZixwKXt2YXIgdj1pLmNoaWxkcmVuKGEpLG09aS5ub2RlKGEpLGI9bT9tLmJvcmRlckxlZnQ6dm9pZCAwLEU9bT9tLmJvcmRlclJpZ2h0OnZvaWQgMCxfPXt9O2ImJih2PVQ1KHYsZnVuY3Rpb24oeil7cmV0dXJuIHohPT1iJiZ6IT09RX0pKTt2YXIgTD1vRmUoaSx2KTtjcihMLGZ1bmN0aW9uKHope2lmKGkuY2hpbGRyZW4oei52KS5sZW5ndGgpe3ZhciBLPWFGdChpLHoudixmLHApO19bei52XT1LLHphKEssImJhcnljZW50ZXIiKSYmZ0ZlKHosSyl9fSk7dmFyIE49Y0ZlKEwsZik7ZEZlKE4sXyk7dmFyIEI9aEZlKE4scCk7aWYoYiYmKEIudnM9WkEoW2IsQi52cyxFXSksaS5wcmVkZWNlc3NvcnMoYikubGVuZ3RoKSl7dmFyIGo9aS5ub2RlKGkucHJlZGVjZXNzb3JzKGIpWzBdKSxSPWkubm9kZShpLnByZWRlY2Vzc29ycyhFKVswXSk7emEoQiwiYmFyeWNlbnRlciIpfHwoQi5iYXJ5Y2VudGVyPTAsQi53ZWlnaHQ9MCksQi5iYXJ5Y2VudGVyPShCLmJhcnljZW50ZXIqQi53ZWlnaHQrai5vcmRlcitSLm9yZGVyKS8oQi53ZWlnaHQrMiksQi53ZWlnaHQrPTJ9cmV0dXJuIEJ9ZnVuY3Rpb24gZEZlKGksYSl7Y3IoaSxmdW5jdGlvbihmKXtmLnZzPVpBKGYudnMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBhW3BdP2FbcF0udnM6cH0pKX0pfWZ1bmN0aW9uIGdGZShpLGEpe1hoKGkuYmFyeWNlbnRlcik/KGkuYmFyeWNlbnRlcj1hLmJhcnljZW50ZXIsaS53ZWlnaHQ9YS53ZWlnaHQpOihpLmJhcnljZW50ZXI9KGkuYmFyeWNlbnRlcippLndlaWdodCthLmJhcnljZW50ZXIqYS53ZWlnaHQpLyhpLndlaWdodCthLndlaWdodCksaS53ZWlnaHQrPWEud2VpZ2h0KX1mdW5jdGlvbiBwRmUoaSl7dmFyIGE9R1B0KGkpLGY9b0Z0KGksdlQoMSxhKzEpLCJpbkVkZ2VzIikscD1vRnQoaSx2VChhLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHY9YUZlKGkpO2NGdChpLHYpO2Zvcih2YXIgbT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYixFPTAsXz0wO188NDsrK0UsKytfKXtiRmUoRSUyP2Y6cCxFJTQ+PTIpLHY9dUsoaSk7dmFyIEw9aUZlKGksdik7TDxtJiYoXz0wLGI9Uk9lKHYpLG09TCl9Y0Z0KGksYil9ZnVuY3Rpb24gb0Z0KGksYSxmKXtyZXR1cm4gT2YoYSxmdW5jdGlvbihwKXtyZXR1cm4gbkZlKGkscCxmKX0pfWZ1bmN0aW9uIGJGZShpLGEpe3ZhciBmPW5ldyBhMTtjcihpLGZ1bmN0aW9uKHApe3ZhciB2PXAuZ3JhcGgoKS5yb290LG09YUZ0KHAsdixmLGEpO2NyKG0udnMsZnVuY3Rpb24oYixFKXtwLm5vZGUoYikub3JkZXI9RX0pLGVGZShwLGYsbS52cyl9KX1mdW5jdGlvbiBjRnQoaSxhKXtjcihhLGZ1bmN0aW9uKGYpe2NyKGYsZnVuY3Rpb24ocCx2KXtpLm5vZGUocCkub3JkZXI9dn0pfSl9ZnVuY3Rpb24gdkZlKGkpe3ZhciBhPW1GZShpKTtjcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZil7Zm9yKHZhciBwPWkubm9kZShmKSx2PXAuZWRnZU9iaixtPXdGZShpLGEsdi52LHYudyksYj1tLnBhdGgsRT1tLmxjYSxfPTAsTD1iW19dLE49ITA7ZiE9PXYudzspe2lmKHA9aS5ub2RlKGYpLE4pe2Zvcig7KEw9YltfXSkhPT1FJiZpLm5vZGUoTCkubWF4UmFuazxwLnJhbms7KV8rKztMPT09RSYmKE49ITEpfWlmKCFOKXtmb3IoO188Yi5sZW5ndGgtMSYmaS5ub2RlKEw9YltfKzFdKS5taW5SYW5rPD1wLnJhbms7KV8rKztMPWJbX119aS5zZXRQYXJlbnQoZixMKSxmPWkuc3VjY2Vzc29ycyhmKVswXX19KX1mdW5jdGlvbiB3RmUoaSxhLGYscCl7dmFyIHY9W10sbT1bXSxiPU1hdGgubWluKGFbZl0ubG93LGFbcF0ubG93KSxFPU1hdGgubWF4KGFbZl0ubGltLGFbcF0ubGltKSxfLEw7Xz1mO2RvIF89aS5wYXJlbnQoXyksdi5wdXNoKF8pO3doaWxlKF8mJihhW19dLmxvdz5ifHxFPmFbX10ubGltKSk7Zm9yKEw9XyxfPXA7KF89aS5wYXJlbnQoXykpIT09TDspbS5wdXNoKF8pO3JldHVybntwYXRoOnYuY29uY2F0KG0ucmV2ZXJzZSgpKSxsY2E6TH19ZnVuY3Rpb24gbUZlKGkpe3ZhciBhPXt9LGY9MDtmdW5jdGlvbiBwKHYpe3ZhciBtPWY7Y3IoaS5jaGlsZHJlbih2KSxwKSxhW3ZdPXtsb3c6bSxsaW06ZisrfX1yZXR1cm4gY3IoaS5jaGlsZHJlbigpLHApLGF9ZnVuY3Rpb24geUZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcCh2LG0pe3ZhciBiPTAsRT0wLF89di5sZW5ndGgsTD1hSyhtKTtyZXR1cm4gY3IobSxmdW5jdGlvbihOLEIpe3ZhciBqPWtGZShpLE4pLFI9aj9pLm5vZGUoaikub3JkZXI6Xzsoanx8Tj09PUwpJiYoY3IobS5zbGljZShFLEIrMSksZnVuY3Rpb24oeil7Y3IoaS5wcmVkZWNlc3NvcnMoeiksZnVuY3Rpb24oSyl7dmFyIGl0PWkubm9kZShLKSxzdD1pdC5vcmRlcjsoc3Q8Ynx8UjxzdCkmJiEoaXQuZHVtbXkmJmkubm9kZSh6KS5kdW1teSkmJnVGdChmLEsseil9KX0pLEU9QisxLGI9Uil9KSxtfXJldHVybiBmUChhLHApLGZ9ZnVuY3Rpb24geEZlKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcChtLGIsRSxfLEwpe3ZhciBOO2NyKHZUKGIsRSksZnVuY3Rpb24oQil7Tj1tW0JdLGkubm9kZShOKS5kdW1teSYmY3IoaS5wcmVkZWNlc3NvcnMoTiksZnVuY3Rpb24oail7dmFyIFI9aS5ub2RlKGopO1IuZHVtbXkmJihSLm9yZGVyPF98fFIub3JkZXI+TCkmJnVGdChmLGosTil9KX0pfWZ1bmN0aW9uIHYobSxiKXt2YXIgRT0tMSxfLEw9MDtyZXR1cm4gY3IoYixmdW5jdGlvbihOLEIpe2lmKGkubm9kZShOKS5kdW1teT09PSJib3JkZXIiKXt2YXIgaj1pLnByZWRlY2Vzc29ycyhOKTtqLmxlbmd0aCYmKF89aS5ub2RlKGpbMF0pLm9yZGVyLHAoYixMLEIsRSxfKSxMPUIsRT1fKX1wKGIsTCxiLmxlbmd0aCxfLG0ubGVuZ3RoKX0pLGJ9cmV0dXJuIGZQKGEsdiksZn1mdW5jdGlvbiBrRmUoaSxhKXtpZihpLm5vZGUoYSkuZHVtbXkpcmV0dXJuIFpkdChpLnByZWRlY2Vzc29ycyhhKSxmdW5jdGlvbihmKXtyZXR1cm4gaS5ub2RlKGYpLmR1bW15fSl9ZnVuY3Rpb24gdUZ0KGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH12YXIgdj1pW2FdO3Z8fChpW2FdPXY9e30pLHZbZl09ITB9ZnVuY3Rpb24gRUZlKGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH1yZXR1cm4gemEoaVthXSxmKX1mdW5jdGlvbiBURmUoaSxhLGYscCl7dmFyIHY9e30sbT17fSxiPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKEUpe2NyKEUsZnVuY3Rpb24oXyxMKXt2W19dPV8sbVtfXT1fLGJbX109TH0pfSksY3IoYSxmdW5jdGlvbihFKXt2YXIgXz0tMTtjcihFLGZ1bmN0aW9uKEwpe3ZhciBOPXAoTCk7aWYoTi5sZW5ndGgpe049ZFAoTixmdW5jdGlvbihLKXtyZXR1cm4gYltLXX0pO2Zvcih2YXIgQj0oTi5sZW5ndGgtMSkvMixqPU1hdGguZmxvb3IoQiksUj1NYXRoLmNlaWwoQik7ajw9UjsrK2ope3ZhciB6PU5bal07bVtMXT09PUwmJl88Ylt6XSYmIUVGZShmLEwseikmJihtW3pdPUwsbVtMXT12W0xdPXZbel0sXz1iW3pdKX19fSl9KSx7cm9vdDp2LGFsaWduOm19fWZ1bmN0aW9uIENGZShpLGEsZixwLHYpe3ZhciBtPXt9LGI9X0ZlKGksYSxmLHYpLEU9dj8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBfKEIsail7Zm9yKHZhciBSPWIubm9kZXMoKSx6PVIucG9wKCksSz17fTt6OylLW3pdP0Ioeik6KEtbel09ITAsUi5wdXNoKHopLFI9Ui5jb25jYXQoaih6KSkpLHo9Ui5wb3AoKX1mdW5jdGlvbiBMKEIpe21bQl09Yi5pbkVkZ2VzKEIpLnJlZHVjZShmdW5jdGlvbihqLFIpe3JldHVybiBNYXRoLm1heChqLG1bUi52XStiLmVkZ2UoUikpfSwwKX1mdW5jdGlvbiBOKEIpe3ZhciBqPWIub3V0RWRnZXMoQikucmVkdWNlKGZ1bmN0aW9uKHosSyl7cmV0dXJuIE1hdGgubWluKHosbVtLLnddLWIuZWRnZShLKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksUj1pLm5vZGUoQik7aiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmUi5ib3JkZXJUeXBlIT09RSYmKG1bQl09TWF0aC5tYXgobVtCXSxqKSl9cmV0dXJuIF8oTCxiLnByZWRlY2Vzc29ycy5iaW5kKGIpKSxfKE4sYi5zdWNjZXNzb3JzLmJpbmQoYikpLGNyKHAsZnVuY3Rpb24oQil7bVtCXT1tW2ZbQl1dfSksbX1mdW5jdGlvbiBfRmUoaSxhLGYscCl7dmFyIHY9bmV3IGExLG09aS5ncmFwaCgpLGI9SUZlKG0ubm9kZXNlcCxtLmVkZ2VzZXAscCk7cmV0dXJuIGNyKGEsZnVuY3Rpb24oRSl7dmFyIF87Y3IoRSxmdW5jdGlvbihMKXt2YXIgTj1mW0xdO2lmKHYuc2V0Tm9kZShOKSxfKXt2YXIgQj1mW19dLGo9di5lZGdlKEIsTik7di5zZXRFZGdlKEIsTixNYXRoLm1heChiKGksTCxfKSxqfHwwKSl9Xz1MfSl9KSx2fWZ1bmN0aW9uIFNGZShpLGEpe3JldHVybiB0MHQoQzUoYSksZnVuY3Rpb24oZil7dmFyIHA9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBGTmUoZixmdW5jdGlvbihtLGIpe3ZhciBFPURGZShpLGIpLzI7cD1NYXRoLm1heChtK0UscCksdj1NYXRoLm1pbihtLUUsdil9KSxwLXZ9KX1mdW5jdGlvbiBBRmUoaSxhKXt2YXIgZj1DNShhKSxwPWxQKGYpLHY9YlQoZik7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKG0pe2NyKFsibCIsInIiXSxmdW5jdGlvbihiKXt2YXIgRT1tK2IsXz1pW0VdLEw7aWYoXyE9PWEpe3ZhciBOPUM1KF8pO0w9Yj09PSJsIj9wLWxQKE4pOnYtYlQoTiksTCYmKGlbRV09b0soXyxmdW5jdGlvbihCKXtyZXR1cm4gQitMfSkpfX0pfSl9ZnVuY3Rpb24gTEZlKGksYSl7cmV0dXJuIG9LKGkudWwsZnVuY3Rpb24oZixwKXtpZihhKXJldHVybiBpW2EudG9Mb3dlckNhc2UoKV1bcF07dmFyIHY9ZFAoT2YoaSxwKSk7cmV0dXJuKHZbMV0rdlsyXSkvMn0pfWZ1bmN0aW9uIE1GZShpKXt2YXIgYT11SyhpKSxmPUVXKHlGZShpLGEpLHhGZShpLGEpKSxwPXt9LHY7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKGIpe3Y9Yj09PSJ1Ij9hOkM1KGEpLnJldmVyc2UoKSxjcihbImwiLCJyIl0sZnVuY3Rpb24oRSl7RT09PSJyIiYmKHY9T2YodixmdW5jdGlvbihCKXtyZXR1cm4gQzUoQikucmV2ZXJzZSgpfSkpO3ZhciBfPShiPT09InUiP2kucHJlZGVjZXNzb3JzOmkuc3VjY2Vzc29ycykuYmluZChpKSxMPVRGZShpLHYsZixfKSxOPUNGZShpLHYsTC5yb290LEwuYWxpZ24sRT09PSJyIik7RT09PSJyIiYmKE49b0soTixmdW5jdGlvbihCKXtyZXR1cm4tQn0pKSxwW2IrRV09Tn0pfSk7dmFyIG09U0ZlKGkscCk7cmV0dXJuIEFGZShwLG0pLExGZShwLGkuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gSUZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24ocCx2LG0pe3ZhciBiPXAubm9kZSh2KSxFPXAubm9kZShtKSxfPTAsTDtpZihfKz1iLndpZHRoLzIsemEoYiwibGFiZWxwb3MiKSlzd2l0Y2goYi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOkw9LWIud2lkdGgvMjticmVhaztjYXNlInIiOkw9Yi53aWR0aC8yO2JyZWFrfWlmKEwmJihfKz1mP0w6LUwpLEw9MCxfKz0oYi5kdW1teT9hOmkpLzIsXys9KEUuZHVtbXk/YTppKS8yLF8rPUUud2lkdGgvMix6YShFLCJsYWJlbHBvcyIpKXN3aXRjaChFLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6TD1FLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpMPS1FLndpZHRoLzI7YnJlYWt9cmV0dXJuIEwmJihfKz1mP0w6LUwpLEw9MCxffX1mdW5jdGlvbiBERmUoaSxhKXtyZXR1cm4gaS5ub2RlKGEpLndpZHRofWZ1bmN0aW9uIE9GZShpKXtpPXpQdChpKSxORmUoaSksQk5lKE1GZShpKSxmdW5jdGlvbihhLGYpe2kubm9kZShmKS54PWF9KX1mdW5jdGlvbiBORmUoaSl7dmFyIGE9dUsoaSksZj1pLmdyYXBoKCkucmFua3NlcCxwPTA7Y3IoYSxmdW5jdGlvbih2KXt2YXIgbT1iVChPZih2LGZ1bmN0aW9uKGIpe3JldHVybiBpLm5vZGUoYikuaGVpZ2h0fSkpO2NyKHYsZnVuY3Rpb24oYil7aS5ub2RlKGIpLnk9cCttLzJ9KSxwKz1tK2Z9KX1mdW5jdGlvbiBlTChpLGEpe3ZhciBmPWEmJmEuZGVidWdUaW1pbmc/TFBlOk1QZTtmKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIHA9ZigiICBidWlsZExheW91dEdyYXBoIixmdW5jdGlvbigpe3JldHVybiBWRmUoaSl9KTtmKCIgIHJ1bkxheW91dCIsZnVuY3Rpb24oKXtQRmUocCxmKX0pLGYoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXtGRmUoaSxwKX0pfSl9ZnVuY3Rpb24gUEZlKGksYSl7YSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLGZ1bmN0aW9uKCl7VUZlKGkpfSksYSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtlQmUoaSl9KSxhKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXtrUGUoaSl9KSxhKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtRUGUoaSl9KSxhKCIgICAgcmFuayIsZnVuY3Rpb24oKXtLUGUoelB0KGkpKX0pLGEoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe1dGZShpKX0pLGEoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe1NQZShpKX0pLGEoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXt0RmUoaSl9KSxhKCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7X1BlKGkpfSksYSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7S0ZlKGkpfSksYSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7WUZlKGkpfSksYSgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7RlBlKGkpfSksYSgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe3ZGZShpKX0pLGEoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtJUGUoaSl9KSxhKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7cEZlKGkpfSksYSgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtuQmUoaSl9KSxhKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtEUGUoaSl9KSxhKCIgICAgcG9zaXRpb24iLGZ1bmN0aW9uKCl7T0ZlKGkpfSksYSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe3JCZShpKX0pLGEoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsZnVuY3Rpb24oKXt0QmUoaSl9KSxhKCIgICAgbm9ybWFsaXplLnVuZG8iLGZ1bmN0aW9uKCl7UlBlKGkpfSksYSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1pGZShpKX0pLGEoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPUGUoaSl9KSxhKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7WEZlKGkpfSksYSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe1FGZShpKX0pLGEoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe0pGZShpKX0pLGEoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7VFBlKGkpfSl9ZnVuY3Rpb24gRkZlKGksYSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx2PWEubm9kZShmKTtwJiYocC54PXYueCxwLnk9di55LGEuY2hpbGRyZW4oZikubGVuZ3RoJiYocC53aWR0aD12LndpZHRoLHAuaGVpZ2h0PXYuaGVpZ2h0KSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpLHY9YS5lZGdlKGYpO3AucG9pbnRzPXYucG9pbnRzLHphKHYsIngiKSYmKHAueD12LngscC55PXYueSl9KSxpLmdyYXBoKCkud2lkdGg9YS5ncmFwaCgpLndpZHRoLGkuZ3JhcGgoKS5oZWlnaHQ9YS5ncmFwaCgpLmhlaWdodH12YXIgQkZlPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxSRmU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sakZlPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sJEZlPVsid2lkdGgiLCJoZWlnaHQiXSx6RmU9e3dpZHRoOjAsaGVpZ2h0OjB9LHFGZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxIRmU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxHRmU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIFZGZShpKXt2YXIgYT1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxmPWwwdChpLmdyYXBoKCkpO3JldHVybiBhLnNldEdyYXBoKEVXKHt9LFJGZSx1MHQoZixCRmUpLGhQKGYsakZlKSkpLGNyKGkubm9kZXMoKSxmdW5jdGlvbihwKXt2YXIgdj1sMHQoaS5ub2RlKHApKTthLnNldE5vZGUocCxKQSh1MHQodiwkRmUpLHpGZSkpLGEuc2V0UGFyZW50KHAsaS5wYXJlbnQocCkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PWwwdChpLmVkZ2UocCkpO2Euc2V0RWRnZShwLEVXKHt9LEhGZSx1MHQodixxRmUpLGhQKHYsR0ZlKSkpfSksYX1mdW5jdGlvbiBVRmUoaSl7dmFyIGE9aS5ncmFwaCgpO2EucmFua3NlcC89MixjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpO3AubWlubGVuKj0yLHAubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKGEucmFua2Rpcj09PSJUQiJ8fGEucmFua2Rpcj09PSJCVCI/cC53aWR0aCs9cC5sYWJlbG9mZnNldDpwLmhlaWdodCs9cC5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiBXRmUoaSl7Y3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtpZihmLndpZHRoJiZmLmhlaWdodCl7dmFyIHA9aS5ub2RlKGEudiksdj1pLm5vZGUoYS53KSxtPXtyYW5rOih2LnJhbmstcC5yYW5rKS8yK3AucmFuayxlOmF9O3RMKGksImVkZ2UtcHJveHkiLG0sIl9lcCIpfX0pfWZ1bmN0aW9uIEtGZShpKXt2YXIgYT0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7cC5ib3JkZXJUb3AmJihwLm1pblJhbms9aS5ub2RlKHAuYm9yZGVyVG9wKS5yYW5rLHAubWF4UmFuaz1pLm5vZGUocC5ib3JkZXJCb3R0b20pLnJhbmssYT1iVChhLHAubWF4UmFuaykpfSksaS5ncmFwaCgpLm1heFJhbms9YX1mdW5jdGlvbiBZRmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKTtmLmR1bW15PT09ImVkZ2UtcHJveHkiJiYoaS5lZGdlKGYuZSkubGFiZWxSYW5rPWYucmFuayxpLnJlbW92ZU5vZGUoYSkpfSl9ZnVuY3Rpb24gWEZlKGkpe3ZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTAscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdj0wLG09aS5ncmFwaCgpLGI9bS5tYXJnaW54fHwwLEU9bS5tYXJnaW55fHwwO2Z1bmN0aW9uIF8oTCl7dmFyIE49TC54LEI9TC55LGo9TC53aWR0aCxSPUwuaGVpZ2h0O2E9TWF0aC5taW4oYSxOLWovMiksZj1NYXRoLm1heChmLE4rai8yKSxwPU1hdGgubWluKHAsQi1SLzIpLHY9TWF0aC5tYXgodixCK1IvMil9Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKEwpe18oaS5ub2RlKEwpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLmVkZ2UoTCk7emEoTiwieCIpJiZfKE4pfSksYS09YixwLT1FLGNyKGkubm9kZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLm5vZGUoTCk7Ti54LT1hLE4ueS09cH0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihMKXt2YXIgTj1pLmVkZ2UoTCk7Y3IoTi5wb2ludHMsZnVuY3Rpb24oQil7Qi54LT1hLEIueS09cH0pLHphKE4sIngiKSYmKE4ueC09YSksemEoTiwieSIpJiYoTi55LT1wKX0pLG0ud2lkdGg9Zi1hK2IsbS5oZWlnaHQ9di1wK0V9ZnVuY3Rpb24gUUZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD1pLm5vZGUoYS52KSx2PWkubm9kZShhLncpLG0sYjtmLnBvaW50cz8obT1mLnBvaW50c1swXSxiPWYucG9pbnRzW2YucG9pbnRzLmxlbmd0aC0xXSk6KGYucG9pbnRzPVtdLG09dixiPXApLGYucG9pbnRzLnVuc2hpZnQocVB0KHAsbSkpLGYucG9pbnRzLnB1c2gocVB0KHYsYikpfSl9ZnVuY3Rpb24gWkZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoemEoZiwieCIpKXN3aXRjaCgoZi5sYWJlbHBvcz09PSJsInx8Zi5sYWJlbHBvcz09PSJyIikmJihmLndpZHRoLT1mLmxhYmVsb2Zmc2V0KSxmLmxhYmVscG9zKXtjYXNlImwiOmYueC09Zi53aWR0aC8yK2YubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpmLngrPWYud2lkdGgvMitmLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIEpGZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2YucmV2ZXJzZWQmJmYucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIHRCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aWYoaS5jaGlsZHJlbihhKS5sZW5ndGgpe3ZhciBmPWkubm9kZShhKSxwPWkubm9kZShmLmJvcmRlclRvcCksdj1pLm5vZGUoZi5ib3JkZXJCb3R0b20pLG09aS5ub2RlKGFLKGYuYm9yZGVyTGVmdCkpLGI9aS5ub2RlKGFLKGYuYm9yZGVyUmlnaHQpKTtmLndpZHRoPU1hdGguYWJzKGIueC1tLngpLGYuaGVpZ2h0PU1hdGguYWJzKHYueS1wLnkpLGYueD1tLngrZi53aWR0aC8yLGYueT1wLnkrZi5oZWlnaHQvMn19KSxjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aS5ub2RlKGEpLmR1bW15PT09ImJvcmRlciImJmkucmVtb3ZlTm9kZShhKX0pfWZ1bmN0aW9uIGVCZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7aWYoYS52PT09YS53KXt2YXIgZj1pLm5vZGUoYS52KTtmLnNlbGZFZGdlc3x8KGYuc2VsZkVkZ2VzPVtdKSxmLnNlbGZFZGdlcy5wdXNoKHtlOmEsbGFiZWw6aS5lZGdlKGEpfSksaS5yZW1vdmVFZGdlKGEpfX0pfWZ1bmN0aW9uIG5CZShpKXt2YXIgYT11SyhpKTtjcihhLGZ1bmN0aW9uKGYpe3ZhciBwPTA7Y3IoZixmdW5jdGlvbih2LG0pe3ZhciBiPWkubm9kZSh2KTtiLm9yZGVyPW0rcCxjcihiLnNlbGZFZGdlcyxmdW5jdGlvbihFKXt0TChpLCJzZWxmZWRnZSIse3dpZHRoOkUubGFiZWwud2lkdGgsaGVpZ2h0OkUubGFiZWwuaGVpZ2h0LHJhbms6Yi5yYW5rLG9yZGVyOm0rICsrcCxlOkUuZSxsYWJlbDpFLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYi5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIHJCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpO2lmKGYuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgcD1pLm5vZGUoZi5lLnYpLHY9cC54K3Aud2lkdGgvMixtPXAueSxiPWYueC12LEU9cC5oZWlnaHQvMjtpLnNldEVkZ2UoZi5lLGYubGFiZWwpLGkucmVtb3ZlTm9kZShhKSxmLmxhYmVsLnBvaW50cz1be3g6disyKmIvMyx5Om0tRX0se3g6dis1KmIvNix5Om0tRX0se3g6ditiLHk6bX0se3g6dis1KmIvNix5Om0rRX0se3g6disyKmIvMyx5Om0rRX1dLGYubGFiZWwueD1mLngsZi5sYWJlbC55PWYueX19KX1mdW5jdGlvbiB1MHQoaSxhKXtyZXR1cm4gb0soaFAoaSxhKSxOdW1iZXIpfWZ1bmN0aW9uIGwwdChpKXt2YXIgYT17fTtyZXR1cm4gY3IoaSxmdW5jdGlvbihmLHApe2FbcC50b0xvd2VyQ2FzZSgpXT1mfSksYX1mdW5jdGlvbiBsRnQoaSxhKXtyZXR1cm4hIWkuY2hpbGRyZW4oYSkubGVuZ3RofWZ1bmN0aW9uIGhGdChpKXtyZXR1cm4gaDB0KGkudikrIjoiK2gwdChpLncpKyI6IitoMHQoaS5uYW1lKX12YXIgaUJlPS86L2c7ZnVuY3Rpb24gaDB0KGkpe3JldHVybiBpP1N0cmluZyhpKS5yZXBsYWNlKGlCZSwiXFw6Iik6IiJ9ZnVuY3Rpb24gcDMoaSxhKXthJiZpLmF0dHIoInN0eWxlIixhKX1mdW5jdGlvbiBmRnQoaSxhLGYpe2EmJmkuYXR0cigiY2xhc3MiLGEpLmF0dHIoImNsYXNzIixmKyIgIitpLmF0dHIoImNsYXNzIikpfWZ1bmN0aW9uIGFtKGksYSl7dmFyIGY9YS5ncmFwaCgpO2lmKE1EdChmKSl7dmFyIHA9Zi50cmFuc2l0aW9uO2lmKE9BKHApKXJldHVybiBwKGkpfXJldHVybiBpfXZhciBmMHQ9e25vcm1hbDphQmUsdmVlOm9CZSx1bmRpcmVjdGVkOmNCZX07ZnVuY3Rpb24gc0JlKGkpe2YwdD1pfWZ1bmN0aW9uIGFCZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIG9CZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGNCZShpLGEsZixwKXt2YXIgdj1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09di5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtwMyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGQwdChpLGEpe3ZhciBmPWkuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxwPWYuYXBwZW5kKCJ4aHRtbDpkaXYiKTtwLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB2PWEubGFiZWw7c3dpdGNoKHR5cGVvZiB2KXtjYXNlImZ1bmN0aW9uIjpwLmluc2VydCh2KTticmVhaztjYXNlIm9iamVjdCI6cC5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gdn0pO2JyZWFrO2RlZmF1bHQ6cC5odG1sKHYpfXAzKHAsYS5sYWJlbFN0eWxlKSxwLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIikscC5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCksZn1mdW5jdGlvbiB1QmUoaSxhKXt2YXIgZj1pO3JldHVybiBmLm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsKSxwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBsQmUoaSxhKXtmb3IodmFyIGY9aS5hcHBlbmQoInRleHQiKSxwPWhCZShhLmxhYmVsKS5zcGxpdChgCmApLHY9MDt2PHAubGVuZ3RoO3YrKylmLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KHBbdl0pO3JldHVybiBwMyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBoQmUoaSl7Zm9yKHZhciBhPSIiLGY9ITEscCx2PTA7djxpLmxlbmd0aDsrK3YpaWYocD1pW3ZdLGYpe3N3aXRjaChwKXtjYXNlIm4iOmErPWAKYDticmVhaztkZWZhdWx0OmErPXB9Zj0hMX1lbHNlIHA9PT0iXFwiP2Y9ITA6YSs9cDtyZXR1cm4gYX1mdW5jdGlvbiBnMHQoaSxhLGYpe3ZhciBwPWEubGFiZWwsdj1pLmFwcGVuZCgiZyIpO2EubGFiZWxUeXBlPT09InN2ZyI/dUJlKHYsYSk6dHlwZW9mIHAhPSJzdHJpbmcifHxhLmxhYmVsVHlwZT09PSJodG1sIj9kMHQodixhKTpsQmUodixhKTt2YXIgbT12Lm5vZGUoKS5nZXRCQm94KCksYjtzd2l0Y2goZil7Y2FzZSJ0b3AiOmI9LWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmI9YS5oZWlnaHQvMi1tLmhlaWdodDticmVhaztkZWZhdWx0OmI9LW0uaGVpZ2h0LzJ9cmV0dXJuIHYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLW0ud2lkdGgvMisiLCIrYisiKSIpLHZ9dmFyIHAwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIGxGdChhLG0pfSkscD1pLnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShmLGZ1bmN0aW9uKG0pe3JldHVybiBtfSk7YW0ocC5leGl0KCksYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB2PXAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pO3JldHVybiBiLmlkfSkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pLEU9eXIodGhpcyk7eXIodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIF89RS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7ZzB0KF8sYixiLmNsdXN0ZXJMYWJlbFBvcyl9KTtyZXR1cm4gcD1wLm1lcmdlKHYpLHA9YW0ocCxhKS5zdHlsZSgib3BhY2l0eSIsMSkscC5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBiPWEubm9kZShtKSxFPXlyKHRoaXMpO3AzKEUsYi5zdHlsZSl9KSxwfTtmdW5jdGlvbiBmQmUoaSl7cDB0PWl9bGV0IGIwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWkuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoYS5lZGdlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBoRnQodil9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtmLmV4aXQoKS5yZW1vdmUoKSxmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLGY9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIiksZi5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBtPXlyKHRoaXMpO20uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYj1hLmVkZ2UodiksRT1nMHQobSxhLmVkZ2UodiksMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxfPUUubm9kZSgpLmdldEJCb3goKTtiLmxhYmVsSWQmJkUuYXR0cigiaWQiLGIubGFiZWxJZCksemEoYiwid2lkdGgiKXx8KGIud2lkdGg9Xy53aWR0aCksemEoYiwiaGVpZ2h0Iil8fChiLmhlaWdodD1fLmhlaWdodCl9KTt2YXIgcDtyZXR1cm4gZi5leGl0P3A9Zi5leGl0KCk6cD1mLnNlbGVjdEFsbChudWxsKSxhbShwLGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmfTtmdW5jdGlvbiBkQmUoaSl7YjB0PWl9ZnVuY3Rpb24gZEZ0KGksYSl7cmV0dXJuIGkuaW50ZXJzZWN0KGEpfXZhciB2MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWkuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShhLmVkZ2VzKCksZnVuY3Rpb24oYil7cmV0dXJuIGhGdChiKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApLHY9d0JlKHAsYSk7bUJlKHAsYSk7dmFyIG09cC5tZXJnZSE9PXZvaWQgMD9wLm1lcmdlKHYpOnA7cmV0dXJuIGFtKG0sYSkuc3R5bGUoIm9wYWNpdHkiLDEpLG0uZWFjaChmdW5jdGlvbihiKXt2YXIgRT15cih0aGlzKSxfPWEuZWRnZShiKTtfLmVsZW09dGhpcyxfLmlkJiZFLmF0dHIoImlkIixfLmlkKSxmRnQoRSxfLmNsYXNzLChFLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSxtLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYik7RS5hcnJvd2hlYWRJZD1jSygiYXJyb3doZWFkIik7dmFyIF89eXIodGhpcykuYXR0cigibWFya2VyLWVuZCIsZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrcEJlKGxvY2F0aW9uLmhyZWYsRS5hcnJvd2hlYWRJZCkrIikifSkuc3R5bGUoImZpbGwiLCJub25lIik7YW0oXyxhKS5hdHRyKCJkIixmdW5jdGlvbihMKXtyZXR1cm4gYkJlKGEsTCl9KSxwMyhfLEUuc3R5bGUpfSksbS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLG0uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYiksXz1mW0UuYXJyb3doZWFkXTtfKHlyKHRoaXMpLEUuYXJyb3doZWFkSWQsRSwiYXJyb3doZWFkIil9KSxtfTtmdW5jdGlvbiBnQmUoaSl7djB0PWl9ZnVuY3Rpb24gcEJlKGksYSl7dmFyIGY9aS5zcGxpdCgiIyIpWzBdO3JldHVybiBmKyIjIithfWZ1bmN0aW9uIGJCZShpLGEpe3ZhciBmPWkuZWRnZShhKSxwPWkubm9kZShhLnYpLHY9aS5ub2RlKGEudyksbT1mLnBvaW50cy5zbGljZSgxLGYucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbS51bnNoaWZ0KGRGdChwLG1bMF0pKSxtLnB1c2goZEZ0KHYsbVttLmxlbmd0aC0xXSkpLGdGdChmLG0pfWZ1bmN0aW9uIGdGdChpLGEpe3ZhciBmPShaN3x8SzhlLmxpbmUpKCkueChmdW5jdGlvbihwKXtyZXR1cm4gcC54fSkueShmdW5jdGlvbihwKXtyZXR1cm4gcC55fSk7cmV0dXJuKGYuY3VydmV8fGYuaW50ZXJwb2xhdGUpKGkuY3VydmUpLGYoYSl9ZnVuY3Rpb24gdkJlKGkpe3ZhciBhPWkuZ2V0QkJveCgpLGY9aS5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KGkuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShhLndpZHRoLzIsYS5oZWlnaHQvMik7cmV0dXJue3g6Zi5lLHk6Zi5mfX1mdW5jdGlvbiB3QmUoaSxhKXt2YXIgZj1pLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihwKXt2YXIgdj1hLmVkZ2UocCksbT1hLm5vZGUocC52KS5lbGVtLGI9dlQodi5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdkJlKG0pfSk7cmV0dXJuIGdGdCh2LGIpfSksZi5hcHBlbmQoImRlZnMiKSxmfWZ1bmN0aW9uIG1CZShpLGEpe3ZhciBmPWkuZXhpdCgpO2FtKGYsYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXZhciB3MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIWxGdChhLGIpfSksdj1pLnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShwLGZ1bmN0aW9uKGIpe3JldHVybiBifSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSx2PWkuc2VsZWN0QWxsKCJnLm5vZGUiKSx2LmVhY2goZnVuY3Rpb24oYil7dmFyIEU9YS5ub2RlKGIpLF89eXIodGhpcyk7ZkZ0KF8sRS5jbGFzcywoXy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksXy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgTD1fLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxOPWcwdChMLEUpLEI9ZltFLnNoYXBlXSxqPWhQKE4ubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtFLmVsZW09dGhpcyxFLmlkJiZfLmF0dHIoImlkIixFLmlkKSxFLmxhYmVsSWQmJkwuYXR0cigiaWQiLEUubGFiZWxJZCksemEoRSwid2lkdGgiKSYmKGoud2lkdGg9RS53aWR0aCksemEoRSwiaGVpZ2h0IikmJihqLmhlaWdodD1FLmhlaWdodCksai53aWR0aCs9RS5wYWRkaW5nTGVmdCtFLnBhZGRpbmdSaWdodCxqLmhlaWdodCs9RS5wYWRkaW5nVG9wK0UucGFkZGluZ0JvdHRvbSxMLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLnBhZGRpbmdMZWZ0LUUucGFkZGluZ1JpZ2h0KS8yKyIsIisoRS5wYWRkaW5nVG9wLUUucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBSPXlyKHRoaXMpO1Iuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHo9QihSLGosRSkuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7cDMoeixFLnN0eWxlKTt2YXIgSz16Lm5vZGUoKS5nZXRCQm94KCk7RS53aWR0aD1LLndpZHRoLEUuaGVpZ2h0PUsuaGVpZ2h0fSk7dmFyIG07cmV0dXJuIHYuZXhpdD9tPXYuZXhpdCgpOm09di5zZWxlY3RBbGwobnVsbCksYW0obSxhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdn07ZnVuY3Rpb24geUJlKGkpe3cwdD1pfWZ1bmN0aW9uIHhCZShpLGEpe3ZhciBmPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXlyKHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSk7ZnVuY3Rpb24gcCh2KXt2YXIgbT1hLm5vZGUodik7cmV0dXJuInRyYW5zbGF0ZSgiK20ueCsiLCIrbS55KyIpIn1mLmF0dHIoInRyYW5zZm9ybSIscCksYW0oaSxhKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixwKSxhbShmLnNlbGVjdEFsbCgicmVjdCIpLGEpLmF0dHIoIndpZHRoIixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih2KXtyZXR1cm4gYS5ub2RlKHYpLmhlaWdodH0pLmF0dHIoIngiLGZ1bmN0aW9uKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4tbS53aWR0aC8yfSkuYXR0cigieSIsZnVuY3Rpb24odil7dmFyIG09YS5ub2RlKHYpO3JldHVybi1tLmhlaWdodC8yfSl9ZnVuY3Rpb24ga0JlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEuZWRnZSh2KTtyZXR1cm4gemEobSwieCIpPyJ0cmFuc2xhdGUoIittLngrIiwiK20ueSsiKSI6IiJ9Zi5hdHRyKCJ0cmFuc2Zvcm0iLHApLGFtKGksYSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIscCl9ZnVuY3Rpb24gRUJlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHYpe3ZhciBtPWEubm9kZSh2KTtyZXR1cm4idHJhbnNsYXRlKCIrbS54KyIsIittLnkrIikifWYuYXR0cigidHJhbnNmb3JtIixwKSxhbShpLGEpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLHApfWZ1bmN0aW9uIHBGdChpLGEsZixwKXt2YXIgdj1pLngsbT1pLnksYj12LXAueCxFPW0tcC55LF89TWF0aC5zcXJ0KGEqYSpFKkUrZipmKmIqYiksTD1NYXRoLmFicyhhKmYqYi9fKTtwLng8diYmKEw9LUwpO3ZhciBOPU1hdGguYWJzKGEqZipFL18pO3JldHVybiBwLnk8bSYmKE49LU4pLHt4OnYrTCx5Om0rTn19ZnVuY3Rpb24gVEJlKGksYSxmKXtyZXR1cm4gcEZ0KGksYSxhLGYpfWZ1bmN0aW9uIENCZShpLGEsZixwKXt2YXIgdixtLGIsRSxfLEwsTixCLGosUix6LEssaXQsc3QsdXQ7aWYodj1hLnktaS55LGI9aS54LWEueCxfPWEueCppLnktaS54KmEueSxqPXYqZi54K2IqZi55K18sUj12KnAueCtiKnAueStfLCEoaiE9PTAmJlIhPT0wJiZiRnQoaixSKSkmJihtPXAueS1mLnksRT1mLngtcC54LEw9cC54KmYueS1mLngqcC55LE49bSppLngrRSppLnkrTCxCPW0qYS54K0UqYS55K0wsIShOIT09MCYmQiE9PTAmJmJGdChOLEIpKSYmKHo9dipFLW0qYix6IT09MCkpKXJldHVybiBLPU1hdGguYWJzKHovMiksaXQ9YipMLUUqXyxzdD1pdDwwPyhpdC1LKS96OihpdCtLKS96LGl0PW0qXy12KkwsdXQ9aXQ8MD8oaXQtSykvejooaXQrSykveix7eDpzdCx5OnV0fX1mdW5jdGlvbiBiRnQoaSxhKXtyZXR1cm4gaSphPjB9ZnVuY3Rpb24gYjMoaSxhLGYpe3ZhciBwPWkueCx2PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2EuZm9yRWFjaChmdW5jdGlvbih6KXtiPU1hdGgubWluKGIsei54KSxFPU1hdGgubWluKEUsei55KX0pO2Zvcih2YXIgXz1wLWkud2lkdGgvMi1iLEw9di1pLmhlaWdodC8yLUUsTj0wO048YS5sZW5ndGg7TisrKXt2YXIgQj1hW05dLGo9YVtOPGEubGVuZ3RoLTE/TisxOjBdLFI9Q0JlKGksZix7eDpfK0IueCx5OkwrQi55fSx7eDpfK2oueCx5Okwrai55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKHosSyl7dmFyIGl0PXoueC1mLngsc3Q9ei55LWYueSx1dD1NYXRoLnNxcnQoaXQqaXQrc3Qqc3QpLGJ0PUsueC1mLngsbXQ9Sy55LWYueSx5dD1NYXRoLnNxcnQoYnQqYnQrbXQqbXQpO3JldHVybiB1dDx5dD8tMTp1dD09PXl0PzA6MX0pLG1bMF0pOihjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLGkpLGkpfWZ1bmN0aW9uIG0wdChpLGEpe3ZhciBmPWkueCxwPWkueSx2PWEueC1mLG09YS55LXAsYj1pLndpZHRoLzIsRT1pLmhlaWdodC8yLF8sTDtyZXR1cm4gTWF0aC5hYnMobSkqYj5NYXRoLmFicyh2KSpFPyhtPDAmJihFPS1FKSxfPW09PT0wPzA6RSp2L20sTD1FKToodjwwJiYoYj0tYiksXz1iLEw9dj09PTA/MDpiKm0vdikse3g6ZitfLHk6cCtMfX12YXIgeTB0PXtyZWN0OlNCZSxlbGxpcHNlOkFCZSxjaXJjbGU6TEJlLGRpYW1vbmQ6TUJlfTtmdW5jdGlvbiBfQmUoaSl7eTB0PWl9ZnVuY3Rpb24gU0JlKGksYSxmKXt2YXIgcD1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixmLnJ4KS5hdHRyKCJyeSIsZi5yeSkuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIG0wdChmLHYpfSxwfWZ1bmN0aW9uIEFCZShpLGEsZil7dmFyIHA9YS53aWR0aC8yLHY9YS5oZWlnaHQvMixtPWkuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoInJ4IixwKS5hdHRyKCJyeSIsdik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBwRnQoZixwLHYsYil9LG19ZnVuY3Rpb24gTEJlKGksYSxmKXt2YXIgcD1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KS8yLHY9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1hLndpZHRoLzIpLmF0dHIoInkiLC1hLmhlaWdodC8yKS5hdHRyKCJyIixwKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFRCZShmLHAsbSl9LHZ9ZnVuY3Rpb24gTUJlKGksYSxmKXt2YXIgcD1hLndpZHRoKk1hdGguU1FSVDIvMix2PWEuaGVpZ2h0Kk1hdGguU1FSVDIvMixtPVt7eDowLHk6LXZ9LHt4Oi1wLHk6MH0se3g6MCx5OnZ9LHt4OnAseTowfV0sYj1pLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUueCsiLCIrRS55fSkuam9pbigiICIpKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBJQmUoKXt2YXIgaT1mdW5jdGlvbihhLGYpe05CZShmKTt2YXIgcD1iUChhLCJvdXRwdXQiKSx2PWJQKHAsImNsdXN0ZXJzIiksbT1iUChwLCJlZGdlUGF0aHMiKSxiPWIwdChiUChwLCJlZGdlTGFiZWxzIiksZiksRT13MHQoYlAocCwibm9kZXMiKSxmLHkwdCk7ZUwoZiksRUJlKEUsZiksa0JlKGIsZiksdjB0KG0sZixmMHQpO3ZhciBfPXAwdCh2LGYpO3hCZShfLGYpLFBCZShmKX07cmV0dXJuIGkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHlCZShhKSxpKTp3MHR9LGkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZCZShhKSxpKTpwMHR9LGkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZEJlKGEpLGkpOmIwdH0saS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGdCZShhKSxpKTp2MHR9LGkuc2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfQmUoYSksaSk6eTB0fSxpLmFycm93cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oc0JlKGEpLGkpOmYwdH0saX12YXIgREJlPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LE9CZT17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmlnfTtmdW5jdGlvbiBOQmUoaSl7aS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpOyF6YShmLCJsYWJlbCIpJiYhaS5jaGlsZHJlbihhKS5sZW5ndGgmJihmLmxhYmVsPWEpLHphKGYsInBhZGRpbmdYIikmJkpBKGYse3BhZGRpbmdMZWZ0OmYucGFkZGluZ1gscGFkZGluZ1JpZ2h0OmYucGFkZGluZ1h9KSx6YShmLCJwYWRkaW5nWSIpJiZKQShmLHtwYWRkaW5nVG9wOmYucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpmLnBhZGRpbmdZfSksemEoZiwicGFkZGluZyIpJiZKQShmLHtwYWRkaW5nTGVmdDpmLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmYucGFkZGluZyxwYWRkaW5nVG9wOmYucGFkZGluZyxwYWRkaW5nQm90dG9tOmYucGFkZGluZ30pLEpBKGYsREJlKSxjcihbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmdW5jdGlvbihwKXtmW3BdPU51bWJlcihmW3BdKX0pLHphKGYsIndpZHRoIikmJihmLl9wcmV2V2lkdGg9Zi53aWR0aCksemEoZiwiaGVpZ2h0IikmJihmLl9wcmV2SGVpZ2h0PWYuaGVpZ2h0KX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTt6YShmLCJsYWJlbCIpfHwoZi5sYWJlbD0iIiksSkEoZixPQmUpfSl9ZnVuY3Rpb24gUEJlKGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSk7emEoZiwiX3ByZXZXaWR0aCIpP2Yud2lkdGg9Zi5fcHJldldpZHRoOmRlbGV0ZSBmLndpZHRoLHphKGYsIl9wcmV2SGVpZ2h0Iik/Zi5oZWlnaHQ9Zi5fcHJldkhlaWdodDpkZWxldGUgZi5oZWlnaHQsZGVsZXRlIGYuX3ByZXZXaWR0aCxkZWxldGUgZi5fcHJldkhlaWdodH0pfWZ1bmN0aW9uIGJQKGksYSl7dmFyIGY9aS5zZWxlY3QoImcuIithKTtyZXR1cm4gZi5lbXB0eSgpJiYoZj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKSksZn1mdW5jdGlvbiB2RnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09KHArdikqLjksYj1be3g6bS8yLHk6MH0se3g6bSx5Oi1tLzJ9LHt4Om0vMix5Oi1tfSx7eDowLHk6LW0vMn1dLEU9XzUoaSxtLG0sYik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBiMyhmLGIsXyl9LEV9ZnVuY3Rpb24gd0Z0KGksYSxmKXtjb25zdCB2PWEuaGVpZ2h0LG09di80LGI9YS53aWR0aCsyKm0sRT1be3g6bSx5OjB9LHt4OmItbSx5OjB9LHt4OmIseTotdi8yfSx7eDpiLW0seTotdn0se3g6bSx5Oi12fSx7eDowLHk6LXYvMn1dLF89XzUoaSxiLHYsRSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBiMyhmLEUsTCl9LF99ZnVuY3Rpb24gbUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotdi8yLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6LXYvMix5Oi12fSx7eDowLHk6LXYvMn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24geUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDotMip2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6di82LHk6LXZ9XSxiPV81KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIHhGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0sYj1fNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBrRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PWEuaGVpZ2h0LG09W3t4Oi0yKnYvNix5OjB9LHt4OnArMip2LzYseTowfSx7eDpwLXYvNix5Oi12fSx7eDp2LzYseTotdn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gRUZ0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDp2LzYseTowfSx7eDpwLXYvNix5OjB9LHt4OnArMip2LzYseTotdn0se3g6LTIqdi82LHk6LXZ9XSxiPV81KGkscCx2LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gYjMoZixtLEUpfSxifWZ1bmN0aW9uIFRGdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHY9YS5oZWlnaHQsbT1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLGI9XzUoaSxwLHYsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBiMyhmLG0sRSl9LGJ9ZnVuY3Rpb24gQ0Z0KGksYSxmKXtjb25zdCBwPWEuaGVpZ2h0LHY9YS53aWR0aCtwLzQsbT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixwLzIpLmF0dHIoInJ5IixwLzIpLmF0dHIoIngiLC12LzIpLmF0dHIoInkiLC1wLzIpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHApO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gbTB0KGYsYil9LG19ZnVuY3Rpb24gX0Z0KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdj1hLmhlaWdodCxtPVt7eDowLHk6MH0se3g6cCx5OjB9LHt4OnAseTotdn0se3g6MCx5Oi12fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpwKzgseTowfSx7eDpwKzgseTotdn0se3g6LTgseTotdn0se3g6LTgseTowfV0sYj1fNShpLHAsdixtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGIzKGYsbSxFKX0sYn1mdW5jdGlvbiBTRnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx2PXAvMixtPXYvKDIuNStwLzUwKSxiPWEuaGVpZ2h0K20sRT0iTSAwLCIrbSsiIGEgIit2KyIsIittKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrbSsiIDAsMCwwICIrLXArIiAwIGwgMCwiK2IrIiBhICIrdisiLCIrbSsiIDAsMCwwICIrcCsiIDAgbCAwLCIrLWIsXz1pLmF0dHIoImxhYmVsLW9mZnNldC15IixtKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixFKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC8yKyIsIistKGIvMittKSsiKSIpO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihMKXtjb25zdCBOPW0wdChmLEwpLEI9Ti54LWYueDtpZih2IT0wJiYoTWF0aC5hYnMoQik8Zi53aWR0aC8yfHxNYXRoLmFicyhCKT09Zi53aWR0aC8yJiZNYXRoLmFicyhOLnktZi55KT5mLmhlaWdodC8yLW0pKXtsZXQgaj1tKm0qKDEtQipCLyh2KnYpKTtqIT0wJiYoaj1NYXRoLnNxcnQoaikpLGo9bS1qLEwueS1mLnk+MCYmKGo9LWopLE4ueSs9an1yZXR1cm4gTn0sX31mdW5jdGlvbiBGQmUoaSl7aS5zaGFwZXMoKS5xdWVzdGlvbj12RnQsaS5zaGFwZXMoKS5oZXhhZ29uPXdGdCxpLnNoYXBlcygpLnN0YWRpdW09Q0Z0LGkuc2hhcGVzKCkuc3Vicm91dGluZT1fRnQsaS5zaGFwZXMoKS5jeWxpbmRlcj1TRnQsaS5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PW1GdCxpLnNoYXBlcygpLmxlYW5fcmlnaHQ9eUZ0LGkuc2hhcGVzKCkubGVhbl9sZWZ0PXhGdCxpLnNoYXBlcygpLnRyYXBlem9pZD1rRnQsaS5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPUVGdCxpLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PVRGdH1mdW5jdGlvbiBCQmUoaSl7aSh7cXVlc3Rpb246dkZ0fSksaSh7aGV4YWdvbjp3RnR9KSxpKHtzdGFkaXVtOkNGdH0pLGkoe3N1YnJvdXRpbmU6X0Z0fSksaSh7Y3lsaW5kZXI6U0Z0fSksaSh7cmVjdF9sZWZ0X2ludl9hcnJvdzptRnR9KSxpKHtsZWFuX3JpZ2h0OnlGdH0pLGkoe2xlYW5fbGVmdDp4RnR9KSxpKHt0cmFwZXpvaWQ6a0Z0fSksaSh7aW52X3RyYXBlem9pZDpFRnR9KSxpKHtyZWN0X3JpZ2h0X2ludl9hcnJvdzpURnR9KX1mdW5jdGlvbiBfNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LngrIiwiK3YueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrZi8yKyIpIil9Y29uc3QgUkJlPXthZGRUb1JlbmRlcjpGQmUsYWRkVG9SZW5kZXJWMjpCQmV9LEFGdD17fSxqQmU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgZiBvZiBhKUFGdFtmXT1pW2ZdfSxMRnQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0pe2NvbnN0IGI9cD9wLnNlbGVjdChgW2lkPSIke2Z9Il1gKTp5cihgW2lkPSIke2Z9Il1gKSxFPXZ8fGRvY3VtZW50O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oTCl7Y29uc3QgTj1pW0xdO2xldCBCPSJkZWZhdWx0IjtOLmNsYXNzZXMubGVuZ3RoPjAmJihCPU4uY2xhc3Nlcy5qb2luKCIgIikpO2NvbnN0IGo9ZW0oTi5zdHlsZXMpO2xldCBSPU4udGV4dCE9PXZvaWQgMD9OLnRleHQ6Ti5pZCx6O2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD17bGFiZWw6Ui5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csdXQ9PmA8aSBjbGFzcz0nJHt1dC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTt6PWQwdChiLHN0KS5ub2RlKCksei5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHopfWVsc2V7Y29uc3Qgc3Q9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO3N0LnNldEF0dHJpYnV0ZSgic3R5bGUiLGoubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCB1dD1SLnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYnQgb2YgdXQpe2NvbnN0IG10PUUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7bXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbXQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLG10LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxtdC50ZXh0Q29udGVudD1idCxzdC5hcHBlbmRDaGlsZChtdCl9ej1zdH1sZXQgSz0wLGl0PSIiO3N3aXRjaChOLnR5cGUpe2Nhc2Uicm91bmQiOks9NSxpdD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOml0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOml0PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjppdD0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOml0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOml0PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6aXQ9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOml0PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6aXQ9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjppdD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOml0PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6aXQ9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6aXQ9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6aXQ9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOml0PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6aXQ9InJlY3QiO2JyZWFrO2RlZmF1bHQ6aXQ9InJlY3QifVV0Lndhcm4oIkFkZGluZyBub2RlIixOLmlkLE4uZG9tSWQpLGEuc2V0Tm9kZShtLmRiLmxvb2tVcERvbUlkKE4uaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpqLmxhYmVsU3R5bGUsc2hhcGU6aXQsbGFiZWw6eixyeDpLLHJ5OkssY2xhc3M6QixzdHlsZTpqLnN0eWxlLGlkOm0uZGIubG9va1VwRG9tSWQoTi5pZCl9KX0pfSxNRnQ9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPTAsdixtO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBiPWVtKGkuZGVmYXVsdFN0eWxlKTt2PWIuc3R5bGUsbT1iLmxhYmVsU3R5bGV9aS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ArKztjb25zdCBFPSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsXz0iTFMtIitiLnN0YXJ0LEw9IkxFLSIrYi5lbmQsTj17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/Ti5hcnJvd2hlYWQ9Im5vbmUiOk4uYXJyb3doZWFkPSJub3JtYWwiO2xldCBCPSIiLGo9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgUj1lbShiLnN0eWxlKTtCPVIuc3R5bGUsaj1SLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpCPSJmaWxsOm5vbmUiLHYhPT12b2lkIDAmJihCPXYpLG0hPT12b2lkIDAmJihqPW0pO2JyZWFrO2Nhc2UiZG90dGVkIjpCPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpCPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfU4uc3R5bGU9QixOLmxhYmVsU3R5bGU9aixiLmludGVycG9sYXRlIT09dm9pZCAwP04uY3VydmU9WDIoYi5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/Ti5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6Ti5jdXJ2ZT1YMihBRnQuY3VydmUsaWcpLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoTi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihOLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixOLmxhYmVscG9zPSJjIixzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oTi5sYWJlbFR5cGU9Imh0bWwiLE4ubGFiZWw9YDxzcGFuIGlkPSJMLSR7RX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke199JyBMLSR7TH0iIHN0eWxlPSIke04ubGFiZWxTdHlsZX0iPiR7Yi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxSPT5gPGkgY2xhc3M9JyR7Ui5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTwvc3Bhbj5gKTooTi5sYWJlbFR5cGU9InRleHQiLE4ubGFiZWw9Yi50ZXh0LnJlcGxhY2UoWXIubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoTi5zdHlsZT1OLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLE4ubGFiZWxTdHlsZT1OLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLE4uaWQ9RSxOLmNsYXNzPV8rIiAiK0wsTi5taW5sZW49Yi5sZW5ndGh8fDEsYS5zZXRFZGdlKGYuZGIubG9va1VwRG9tSWQoYi5zdGFydCksZi5kYi5sb29rVXBEb21JZChiLmVuZCksTixwKX0pfSwkQmU9e3NldENvbmY6akJlLGFkZFZlcnRpY2VzOkxGdCxhZGRFZGdlczpNRnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBVdC5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxhLmRiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixmbG93Y2hhcnQ6bX09TGUoKTtsZXQgYjt2PT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bGV0IEw9cC5kYi5nZXREaXJlY3Rpb24oKTtMPT09dm9pZCAwJiYoTD0iVEQiKTtjb25zdCBOPW0ubm9kZVNwYWNpbmd8fDUwLEI9bS5yYW5rU3BhY2luZ3x8NTAsaj1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpMLG5vZGVzZXA6TixyYW5rc2VwOkIsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtmb3IobGV0IGR0PXoubGVuZ3RoLTE7ZHQ+PTA7ZHQtLSlSPXpbZHRdLHAuZGIuYWRkVmVydGV4KFIuaWQsUi50aXRsZSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMpO2NvbnN0IEs9cC5kYi5nZXRWZXJ0aWNlcygpO1V0Lndhcm4oIkdldCB2ZXJ0aWNlcyIsSyk7Y29uc3QgaXQ9cC5kYi5nZXRFZGdlcygpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sWkx0KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBkdD0wO2R0PFIubm9kZXMubGVuZ3RoO2R0KyspVXQud2FybigiU2V0dGluZyBzdWJncmFwaCIsUi5ub2Rlc1tkdF0scC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2R0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSksai5zZXRQYXJlbnQocC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2R0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSl9TEZ0KEssaixhLEUsXyxwKSxNRnQoaXQsaixwKTtjb25zdCB1dD1uZXcgSUJlO1JCZS5hZGRUb1JlbmRlcih1dCksdXQuYXJyb3dzKCkubm9uZT1mdW5jdGlvbihodCx3dCxYLHB0KXtjb25zdCB4dD1odC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtwMyh4dCxYW3B0KyJTdHlsZSJdKX0sdXQuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKGh0LHd0KXtodC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O2NvbnN0IGJ0PUUuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLG10PUUuc2VsZWN0KCIjIithKyIgZyIpO2Zvcih1dChtdCxqKSxtdC5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIixmdW5jdGlvbigpe3JldHVybiBwLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSxwLmRiLmluZGV4Tm9kZXMoInN1YkdyYXBoIitzdCksc3Q9MDtzdDx6Lmxlbmd0aDtzdCsrKWlmKFI9eltzdF0sUi50aXRsZSE9PSJ1bmRlZmluZWQiKXtjb25zdCBkdD1fLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErJyBbaWQ9IicrcC5kYi5sb29rVXBEb21JZChSLmlkKSsnIl0gcmVjdCcpLGh0PV8ucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKFIuaWQpKyciXScpLHd0PWR0WzBdLnguYmFzZVZhbC52YWx1ZSxYPWR0WzBdLnkuYmFzZVZhbC52YWx1ZSxwdD1kdFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLHh0PXlyKGh0WzBdKS5zZWxlY3QoIi5sYWJlbCIpO3h0LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3d0K3B0LzJ9LCAke1grMTR9KWApLHh0LmF0dHIoImlkIixhKyJUZXh0Iik7Zm9yKGxldCBudD0wO250PFIuY2xhc3Nlcy5sZW5ndGg7bnQrKylodFswXS5jbGFzc0xpc3QuYWRkKFIuY2xhc3Nlc1tudF0pfWlmKCFtLmh0bWxMYWJlbHMpe2NvbnN0IGR0PV8ucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGh0IG9mIGR0KXtjb25zdCB3dD1odC5nZXRCQm94KCksWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7WC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxYLnNldEF0dHJpYnV0ZSgicnkiLDApLFguc2V0QXR0cmlidXRlKCJ3aWR0aCIsd3Qud2lkdGgpLFguc2V0QXR0cmlidXRlKCJoZWlnaHQiLHd0LmhlaWdodCksaHQuaW5zZXJ0QmVmb3JlKFgsaHQuZmlyc3RDaGlsZCl9fWNUKGosYnQsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoKSxPYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtjb25zdCBodD1LW2R0XTtpZihodC5saW5rKXtjb25zdCB3dD1FLnNlbGVjdCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKGR0KSsnIl0nKTtpZih3dCl7Y29uc3QgWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsaHQuY2xhc3Nlcy5qb2luKCIgIikpLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsaHQubGluayksWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLHY9PT0ic2FuZGJveCI/WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6aHQubGlua1RhcmdldCYmWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGh0LmxpbmtUYXJnZXQpO2NvbnN0IHB0PXd0Lmluc2VydChmdW5jdGlvbigpe3JldHVybiBYfSwiOmZpcnN0LWNoaWxkIiksVT13dC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtVJiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVS5ub2RlKCl9KTtjb25zdCB4dD13dC5zZWxlY3QoIi5sYWJlbCIpO3h0JiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4geHQubm9kZSgpfSl9fX0pfX07ZnVuY3Rpb24gUzUoaSl7dmFyIGE9e29wdGlvbnM6e2RpcmVjdGVkOmkuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDppLmlzQ29tcG91bmQoKX0sbm9kZXM6ekJlKGkpLGVkZ2VzOnFCZShpKX07cmV0dXJuIFhoKGkuZ3JhcGgoKSl8fChhLnZhbHVlPVBPZShpLmdyYXBoKCkpKSxhfWZ1bmN0aW9uIHpCZShpKXtyZXR1cm4gT2YoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWkucGFyZW50KGEpLHY9e3Y6YX07cmV0dXJuIFhoKGYpfHwodi52YWx1ZT1mKSxYaChwKXx8KHYucGFyZW50PXApLHZ9KX1mdW5jdGlvbiBxQmUoaSl7cmV0dXJuIE9mKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD17djphLnYsdzphLnd9O3JldHVybiBYaChhLm5hbWUpfHwocC5uYW1lPWEubmFtZSksWGgoZil8fChwLnZhbHVlPWYpLHB9KX1jb25zdCBIQmU9KGksYSxmLHApPT57YS5mb3JFYWNoKHY9PntHQmVbdl0oaSxmLHApfSl9LEdCZT17ZXh0ZW5zaW9uOihpLGEsZik9PntVdC50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsZiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrYSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOihpLGEsZik9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2EpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2EpLmF0dHIoInJlZlgiLDYpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIithKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sbG9sbGlwb3A6KGksYSxmKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2EpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSxwb2ludDooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LElGdD1IQmU7ZnVuY3Rpb24gVkJlKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gVUJlKGkpe2NvbnN0IGE9eXIoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksZj1hLmFwcGVuZCgieGh0bWw6ZGl2IikscD1pLmxhYmVsLHY9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIGYuaHRtbCgnPHNwYW4gY2xhc3M9IicrdisnIiAnKyhpLmxhYmVsU3R5bGU/J3N0eWxlPSInK2kubGFiZWxTdHlsZSsnIic6IiIpKyI+IitwKyI8L3NwYW4+IiksVkJlKGYsaS5sYWJlbFN0eWxlKSxmLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksZi5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxmLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGEubm9kZSgpfWNvbnN0IGhwPShpLGEsZixwKT0+e2xldCB2PWl8fCIiO2lmKHR5cGVvZiB2PT0ib2JqZWN0IiYmKHY9dlswXSksczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3Y9di5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksVXQuaW5mbygidmVydGV4VGV4dCIrdik7Y29uc3QgbT17aXNOb2RlOnAsbGFiZWw6blAodikucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLEU9PmA8aSBjbGFzcz0nJHtFLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTphLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBVQmUobSl9ZWxzZXtjb25zdCBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bS5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBiPVtdO3R5cGVvZiB2PT0ic3RyaW5nIj9iPXYuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KHYpP2I9djpiPVtdO2Zvcihjb25zdCBFIG9mIGIpe2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Xy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxfLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxfLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxmP18uc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOl8uc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLF8udGV4dENvbnRlbnQ9RS50cmltKCksbS5hcHBlbmRDaGlsZChfKX1yZXR1cm4gbX19O2Z1bmN0aW9uIFdCZShpLGEpe3ZhcntpbmNsdWRlSW1hZ2VBbHQ6Zj0hMH09YXx8e307cmV0dXJuIERGdChpLGYpfWZ1bmN0aW9uIERGdChpLGEpe3JldHVybiBpJiZ0eXBlb2YgaT09Im9iamVjdCImJihpLnZhbHVlfHwoYT9pLmFsdDoiIil8fCJjaGlsZHJlbiJpbiBpJiZPRnQoaS5jaGlsZHJlbixhKXx8QXJyYXkuaXNBcnJheShpKSYmT0Z0KGksYSkpfHwiIn1mdW5jdGlvbiBPRnQoaSxhKXtmb3IodmFyIGY9W10scD0tMTsrK3A8aS5sZW5ndGg7KWZbcF09REZ0KGlbcF0sYSk7cmV0dXJuIGYuam9pbigiIil9ZnVuY3Rpb24gdjMoaSxhLGYscCl7Y29uc3Qgdj1pLmxlbmd0aDtsZXQgbT0wLGI7aWYoYTwwP2E9LWE+dj8wOnYrYTphPWE+dj92OmEsZj1mPjA/ZjowLHAubGVuZ3RoPDFlNCliPUFycmF5LmZyb20ocCksYi51bnNoaWZ0KGEsZiksW10uc3BsaWNlLmFwcGx5KGksYik7ZWxzZSBmb3IoZiYmW10uc3BsaWNlLmFwcGx5KGksW2EsZl0pO208cC5sZW5ndGg7KWI9cC5zbGljZShtLG0rMWU0KSxiLnVuc2hpZnQoYSwwKSxbXS5zcGxpY2UuYXBwbHkoaSxiKSxtKz0xZTQsYSs9MWU0fWZ1bmN0aW9uIGV2KGksYSl7cmV0dXJuIGkubGVuZ3RoPjA/KHYzKGksaS5sZW5ndGgsMCxhKSxpKTphfWNvbnN0IE5GdD17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBLQmUoaSl7Y29uc3QgYT17fTtsZXQgZj0tMTtmb3IoOysrZjxpLmxlbmd0aDspWUJlKGEsaVtmXSk7cmV0dXJuIGF9ZnVuY3Rpb24gWUJlKGksYSl7bGV0IGY7Zm9yKGYgaW4gYSl7Y29uc3Qgdj0oTkZ0LmNhbGwoaSxmKT9pW2ZdOnZvaWQgMCl8fChpW2ZdPXt9KSxtPWFbZl07bGV0IGI7Zm9yKGIgaW4gbSl7TkZ0LmNhbGwodixiKXx8KHZbYl09W10pO2NvbnN0IEU9bVtiXTtYQmUodltiXSxBcnJheS5pc0FycmF5KEUpP0U6RT9bRV06W10pfX19ZnVuY3Rpb24gWEJlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtmb3IoOysrZjxhLmxlbmd0aDspKGFbZl0uYWRkPT09ImFmdGVyIj9pOnApLnB1c2goYVtmXSk7djMoaSwwLDAscCl9Y29uc3QgUUJlPS9bIS0vOi1AWy1gey1+XHUwMEExXHUwMEE3XHUwMEFCXHUwMEI2XHUwMEI3XHUwMEJCXHUwMEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRVx1MDYxRlx1MDY2QS1cdTA2NkRcdTA2RDRcdTA3MDAtXHUwNzBEXHUwN0Y3LVx1MDdGOVx1MDgzMC1cdTA4M0VcdTA4NUVcdTA5NjRcdTA5NjVcdTA5NzBcdTA5RkRcdTBBNzZcdTBBRjBcdTBDNzdcdTBDODRcdTBERjRcdTBFNEZcdTBFNUFcdTBFNUJcdTBGMDQtXHUwRjEyXHUwRjE0XHUwRjNBLVx1MEYzRFx1MEY4NVx1MEZEMC1cdTBGRDRcdTBGRDlcdTBGREFcdTEwNEEtXHUxMDRGXHUxMEZCXHUxMzYwLVx1MTM2OFx1MTQwMFx1MTY2RVx1MTY5Qlx1MTY5Q1x1MTZFQi1cdTE2RURcdTE3MzVcdTE3MzZcdTE3RDQtXHUxN0Q2XHUxN0Q4LVx1MTdEQVx1MTgwMC1cdTE4MEFcdTE5NDRcdTE5NDVcdTFBMUVcdTFBMUZcdTFBQTAtXHUxQUE2XHUxQUE4LVx1MUFBRFx1MUI1QS1cdTFCNjBcdTFCRkMtXHUxQkZGXHUxQzNCLVx1MUMzRlx1MUM3RVx1MUM3Rlx1MUNDMC1cdTFDQzdcdTFDRDNcdTIwMTAtXHUyMDI3XHUyMDMwLVx1MjA0M1x1MjA0NS1cdTIwNTFcdTIwNTMtXHUyMDVFXHUyMDdEXHUyMDdFXHUyMDhEXHUyMDhFXHUyMzA4LVx1MjMwQlx1MjMyOVx1MjMyQVx1Mjc2OC1cdTI3NzVcdTI3QzVcdTI3QzZcdTI3RTYtXHUyN0VGXHUyOTgzLVx1Mjk5OFx1MjlEOC1cdTI5REJcdTI5RkNcdTI5RkRcdTJDRjktXHUyQ0ZDXHUyQ0ZFXHUyQ0ZGXHUyRDcwXHUyRTAwLVx1MkUyRVx1MkUzMC1cdTJFNEZcdTJFNTJcdTMwMDEtXHUzMDAzXHUzMDA4LVx1MzAxMVx1MzAxNC1cdTMwMUZcdTMwMzBcdTMwM0RcdTMwQTBcdTMwRkJcdUE0RkVcdUE0RkZcdUE2MEQtXHVBNjBGXHVBNjczXHVBNjdFXHVBNkYyLVx1QTZGN1x1QTg3NC1cdUE4NzdcdUE4Q0VcdUE4Q0ZcdUE4RjgtXHVBOEZBXHVBOEZDXHVBOTJFXHVBOTJGXHVBOTVGXHVBOUMxLVx1QTlDRFx1QTlERVx1QTlERlx1QUE1Qy1cdUFBNUZcdUFBREVcdUFBREZcdUFBRjBcdUFBRjFcdUFCRUJcdUZEM0VcdUZEM0ZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjFcdUZFNjNcdUZFNjhcdUZFNkFcdUZFNkJcdUZGMDEtXHVGRjAzXHVGRjA1LVx1RkYwQVx1RkYwQy1cdUZGMEZcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMjBcdUZGM0ItXHVGRjNEXHVGRjNGXHVGRjVCXHVGRjVEXHVGRjVGLVx1RkY2NV0vLHczPWNrKC9bQS1aYS16XS8pLHgwdD1jaygvXGQvKSxaQmU9Y2soL1tcZEEtRmEtZl0vKSxvbT1jaygvW1xkQS1aYS16XS8pLEpCZT1jaygvWyEtLzotQFstYHstfl0vKSxQRnQ9Y2soL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtmdW5jdGlvbiBrMHQoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwzMnx8aT09PTEyNyl9ZnVuY3Rpb24gbnYoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwwfHxpPT09MzIpfWZ1bmN0aW9uIE5hKGkpe3JldHVybiBpIT09bnVsbCYmaTwtMn1mdW5jdGlvbiBOZihpKXtyZXR1cm4gaT09PS0yfHxpPT09LTF8fGk9PT0zMn1jb25zdCB0UmU9Y2soL1xzLyksZVJlPWNrKFFCZSk7ZnVuY3Rpb24gY2soaSl7cmV0dXJuIGE7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZiE9PW51bGwmJmkudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGYpKX19ZnVuY3Rpb24gR3UoaSxhLGYscCl7Y29uc3Qgdj1wP3AtMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IG09MDtyZXR1cm4gYjtmdW5jdGlvbiBiKF8pe3JldHVybiBOZihfKT8oaS5lbnRlcihmKSxFKF8pKTphKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIE5mKF8pJiZtKys8dj8oaS5jb25zdW1lKF8pLEUpOihpLmV4aXQoZiksYShfKSl9fWNvbnN0IG5SZT17dG9rZW5pemU6clJlfTtmdW5jdGlvbiByUmUoaSl7Y29uc3QgYT1pLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCxwLHYpO2xldCBmO3JldHVybiBhO2Z1bmN0aW9uIHAoRSl7aWYoRT09PW51bGwpe2kuY29uc3VtZShFKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxhLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdihFKXtyZXR1cm4gaS5lbnRlcigicGFyYWdyYXBoIiksbShFKX1mdW5jdGlvbiBtKEUpe2NvbnN0IF89aS5lbnRlcigiY2h1bmtUZXh0Iix7Y29udGVudFR5cGU6InRleHQiLHByZXZpb3VzOmZ9KTtyZXR1cm4gZiYmKGYubmV4dD1fKSxmPV8sYihFKX1mdW5jdGlvbiBiKEUpe2lmKEU9PT1udWxsKXtpLmV4aXQoImNodW5rVGV4dCIpLGkuZXhpdCgicGFyYWdyYXBoIiksaS5jb25zdW1lKEUpO3JldHVybn1yZXR1cm4gTmEoRSk/KGkuY29uc3VtZShFKSxpLmV4aXQoImNodW5rVGV4dCIpLG0pOihpLmNvbnN1bWUoRSksYil9fWNvbnN0IGlSZT17dG9rZW5pemU6c1JlfSxGRnQ9e3Rva2VuaXplOmFSZX07ZnVuY3Rpb24gc1JlKGkpe2NvbnN0IGE9dGhpcyxmPVtdO2xldCBwPTAsdixtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShidCl7aWYocDxmLmxlbmd0aCl7Y29uc3QgbXQ9ZltwXTtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT1tdFsxXSxpLmF0dGVtcHQobXRbMF0uY29udGludWF0aW9uLF8sTCkoYnQpfXJldHVybiBMKGJ0KX1mdW5jdGlvbiBfKGJ0KXtpZihwKyssYS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KXthLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwLHYmJnV0KCk7Y29uc3QgbXQ9YS5ldmVudHMubGVuZ3RoO2xldCB5dD1tdCxkdDtmb3IoO3l0LS07KWlmKGEuZXZlbnRzW3l0XVswXT09PSJleGl0IiYmYS5ldmVudHNbeXRdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7ZHQ9YS5ldmVudHNbeXRdWzFdLmVuZDticmVha31zdChwKTtsZXQgaHQ9bXQ7Zm9yKDtodDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW2h0XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxkdCksaHQrKztyZXR1cm4gdjMoYS5ldmVudHMseXQrMSwwLGEuZXZlbnRzLnNsaWNlKG10KSksYS5ldmVudHMubGVuZ3RoPWh0LEwoYnQpfXJldHVybiBFKGJ0KX1mdW5jdGlvbiBMKGJ0KXtpZihwPT09Zi5sZW5ndGgpe2lmKCF2KXJldHVybiBqKGJ0KTtpZih2LmN1cnJlbnRDb25zdHJ1Y3QmJnYuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4geihidCk7YS5pbnRlcnJ1cHQ9ISEodi5jdXJyZW50Q29uc3RydWN0JiYhdi5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9e30saS5jaGVjayhGRnQsTixCKShidCl9ZnVuY3Rpb24gTihidCl7cmV0dXJuIHYmJnV0KCksc3QocCksaihidCl9ZnVuY3Rpb24gQihidCl7cmV0dXJuIGEucGFyc2VyLmxhenlbYS5ub3coKS5saW5lXT1wIT09Zi5sZW5ndGgsYj1hLm5vdygpLm9mZnNldCx6KGJ0KX1mdW5jdGlvbiBqKGJ0KXtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT17fSxpLmF0dGVtcHQoRkZ0LFIseikoYnQpfWZ1bmN0aW9uIFIoYnQpe3JldHVybiBwKyssZi5wdXNoKFthLmN1cnJlbnRDb25zdHJ1Y3QsYS5jb250YWluZXJTdGF0ZV0pLGooYnQpfWZ1bmN0aW9uIHooYnQpe2lmKGJ0PT09bnVsbCl7diYmdXQoKSxzdCgwKSxpLmNvbnN1bWUoYnQpO3JldHVybn1yZXR1cm4gdj12fHxhLnBhcnNlci5mbG93KGEubm93KCkpLGkuZW50ZXIoImNodW5rRmxvdyIse2NvbnRlbnRUeXBlOiJmbG93IixwcmV2aW91czptLF90b2tlbml6ZXI6dn0pLEsoYnQpfWZ1bmN0aW9uIEsoYnQpe2lmKGJ0PT09bnVsbCl7aXQoaS5leGl0KCJjaHVua0Zsb3ciKSwhMCksc3QoMCksaS5jb25zdW1lKGJ0KTtyZXR1cm59cmV0dXJuIE5hKGJ0KT8oaS5jb25zdW1lKGJ0KSxpdChpLmV4aXQoImNodW5rRmxvdyIpKSxwPTAsYS5pbnRlcnJ1cHQ9dm9pZCAwLEUpOihpLmNvbnN1bWUoYnQpLEspfWZ1bmN0aW9uIGl0KGJ0LG10KXtjb25zdCB5dD1hLnNsaWNlU3RyZWFtKGJ0KTtpZihtdCYmeXQucHVzaChudWxsKSxidC5wcmV2aW91cz1tLG0mJihtLm5leHQ9YnQpLG09YnQsdi5kZWZpbmVTa2lwKGJ0LnN0YXJ0KSx2LndyaXRlKHl0KSxhLnBhcnNlci5sYXp5W2J0LnN0YXJ0LmxpbmVdKXtsZXQgZHQ9di5ldmVudHMubGVuZ3RoO2Zvcig7ZHQtLTspaWYodi5ldmVudHNbZHRdWzFdLnN0YXJ0Lm9mZnNldDxiJiYoIXYuZXZlbnRzW2R0XVsxXS5lbmR8fHYuZXZlbnRzW2R0XVsxXS5lbmQub2Zmc2V0PmIpKXJldHVybjtjb25zdCBodD1hLmV2ZW50cy5sZW5ndGg7bGV0IHd0PWh0LFgscHQ7Zm9yKDt3dC0tOylpZihhLmV2ZW50c1t3dF1bMF09PT0iZXhpdCImJmEuZXZlbnRzW3d0XVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKFgpe3B0PWEuZXZlbnRzW3d0XVsxXS5lbmQ7YnJlYWt9WD0hMH1mb3Ioc3QocCksZHQ9aHQ7ZHQ8YS5ldmVudHMubGVuZ3RoOylhLmV2ZW50c1tkdF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30scHQpLGR0Kys7djMoYS5ldmVudHMsd3QrMSwwLGEuZXZlbnRzLnNsaWNlKGh0KSksYS5ldmVudHMubGVuZ3RoPWR0fX1mdW5jdGlvbiBzdChidCl7bGV0IG10PWYubGVuZ3RoO2Zvcig7bXQtLSA+YnQ7KXtjb25zdCB5dD1mW210XTthLmNvbnRhaW5lclN0YXRlPXl0WzFdLHl0WzBdLmV4aXQuY2FsbChhLGkpfWYubGVuZ3RoPWJ0fWZ1bmN0aW9uIHV0KCl7di53cml0ZShbbnVsbF0pLG09dm9pZCAwLHY9dm9pZCAwLGEuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDB9fWZ1bmN0aW9uIGFSZShpLGEsZil7cmV0dXJuIEd1KGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsYSxmKSwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBCRnQoaSl7aWYoaT09PW51bGx8fG52KGkpfHx0UmUoaSkpcmV0dXJuIDE7aWYoZVJlKGkpKXJldHVybiAyfWZ1bmN0aW9uIEUwdChpLGEsZil7Y29uc3QgcD1bXTtsZXQgdj0tMTtmb3IoOysrdjxpLmxlbmd0aDspe2NvbnN0IG09aVt2XS5yZXNvbHZlQWxsO20mJiFwLmluY2x1ZGVzKG0pJiYoYT1tKGEsZikscC5wdXNoKG0pKX1yZXR1cm4gYX1jb25zdCBUMHQ9e25hbWU6ImF0dGVudGlvbiIsdG9rZW5pemU6Y1JlLHJlc29sdmVBbGw6b1JlfTtmdW5jdGlvbiBvUmUoaSxhKXtsZXQgZj0tMSxwLHYsbSxiLEUsXyxMLE47Zm9yKDsrK2Y8aS5sZW5ndGg7KWlmKGlbZl1bMF09PT0iZW50ZXIiJiZpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZpW2ZdWzFdLl9jbG9zZSl7Zm9yKHA9ZjtwLS07KWlmKGlbcF1bMF09PT0iZXhpdCImJmlbcF1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbcF1bMV0uX29wZW4mJmEuc2xpY2VTZXJpYWxpemUoaVtwXVsxXSkuY2hhckNvZGVBdCgwKT09PWEuc2xpY2VTZXJpYWxpemUoaVtmXVsxXSkuY2hhckNvZGVBdCgwKSl7aWYoKGlbcF1bMV0uX2Nsb3NlfHxpW2ZdWzFdLl9vcGVuKSYmKGlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMyYmISgoaVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0K2lbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMykpY29udGludWU7Xz1pW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQ+MSYmaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PjE/MjoxO2NvbnN0IEI9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLmVuZCksaj1PYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpO1JGdChCLC1fKSxSRnQoaixfKSxiPXt0eXBlOl8+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpCLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbcF1bMV0uZW5kKX0sRT17dHlwZTpfPjE/InN0cm9uZ1NlcXVlbmNlIjoiZW1waGFzaXNTZXF1ZW5jZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KSxlbmQ6an0sbT17dHlwZTpfPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpfSx2PXt0eXBlOl8+MT8ic3Ryb25nIjoiZW1waGFzaXMiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sRS5lbmQpfSxpW3BdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGlbZl1bMV0uc3RhcnQ9T2JqZWN0LmFzc2lnbih7fSxFLmVuZCksTD1bXSxpW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQmJihMPWV2KEwsW1siZW50ZXIiLGlbcF1bMV0sYV0sWyJleGl0IixpW3BdWzFdLGFdXSkpLEw9ZXYoTCxbWyJlbnRlciIsdixhXSxbImVudGVyIixiLGFdLFsiZXhpdCIsYixhXSxbImVudGVyIixtLGFdXSksTD1ldihMLEUwdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKHArMSxmKSxhKSksTD1ldihMLFtbImV4aXQiLG0sYV0sWyJlbnRlciIsRSxhXSxbImV4aXQiLEUsYV0sWyJleGl0Iix2LGFdXSksaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PyhOPTIsTD1ldihMLFtbImVudGVyIixpW2ZdWzFdLGFdLFsiZXhpdCIsaVtmXVsxXSxhXV0pKTpOPTAsdjMoaSxwLTEsZi1wKzMsTCksZj1wK0wubGVuZ3RoLU4tMjticmVha319Zm9yKGY9LTE7KytmPGkubGVuZ3RoOylpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiYoaVtmXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIGl9ZnVuY3Rpb24gY1JlKGksYSl7Y29uc3QgZj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxwPXRoaXMucHJldmlvdXMsdj1CRnQocCk7bGV0IG07cmV0dXJuIGI7ZnVuY3Rpb24gYihfKXtyZXR1cm4gaS5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSxtPV8sRShfKX1mdW5jdGlvbiBFKF8pe2lmKF89PT1tKXJldHVybiBpLmNvbnN1bWUoXyksRTtjb25zdCBMPWkuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKSxOPUJGdChfKSxCPSFOfHxOPT09MiYmdnx8Zi5pbmNsdWRlcyhfKSxqPSF2fHx2PT09MiYmTnx8Zi5pbmNsdWRlcyhwKTtyZXR1cm4gTC5fb3Blbj0hIShtPT09NDI/QjpCJiYodnx8IWopKSxMLl9jbG9zZT0hIShtPT09NDI/ajpqJiYoTnx8IUIpKSxhKF8pfX1mdW5jdGlvbiBSRnQoaSxhKXtpLmNvbHVtbis9YSxpLm9mZnNldCs9YSxpLl9idWZmZXJJbmRleCs9YX1jb25zdCB1UmU9e25hbWU6ImF1dG9saW5rIix0b2tlbml6ZTpsUmV9O2Z1bmN0aW9uIGxSZShpLGEsZil7bGV0IHA9MTtyZXR1cm4gdjtmdW5jdGlvbiB2KHope3JldHVybiBpLmVudGVyKCJhdXRvbGluayIpLGkuZW50ZXIoImF1dG9saW5rTWFya2VyIiksaS5jb25zdW1lKHopLGkuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSxpLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksbX1mdW5jdGlvbiBtKHope3JldHVybiB3Myh6KT8oaS5jb25zdW1lKHopLGIpOlBGdCh6KT9MKHopOmYoeil9ZnVuY3Rpb24gYih6KXtyZXR1cm4gej09PTQzfHx6PT09NDV8fHo9PT00Nnx8b20oeik/RSh6KTpMKHopfWZ1bmN0aW9uIEUoeil7cmV0dXJuIHo9PT01OD8oaS5jb25zdW1lKHopLF8pOih6PT09NDN8fHo9PT00NXx8ej09PTQ2fHxvbSh6KSkmJnArKzwzMj8oaS5jb25zdW1lKHopLEUpOkwoeil9ZnVuY3Rpb24gXyh6KXtyZXR1cm4gej09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKSxSKHopKTp6PT09bnVsbHx8ej09PTMyfHx6PT09NjB8fGswdCh6KT9mKHopOihpLmNvbnN1bWUoeiksXyl9ZnVuY3Rpb24gTCh6KXtyZXR1cm4gej09PTY0PyhpLmNvbnN1bWUoeikscD0wLE4pOlBGdCh6KT8oaS5jb25zdW1lKHopLEwpOmYoeil9ZnVuY3Rpb24gTih6KXtyZXR1cm4gb20oeik/Qih6KTpmKHopfWZ1bmN0aW9uIEIoeil7cmV0dXJuIHo9PT00Nj8oaS5jb25zdW1lKHopLHA9MCxOKTp6PT09NjI/KGkuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLnR5cGU9ImF1dG9saW5rRW1haWwiLFIoeikpOmooeil9ZnVuY3Rpb24gaih6KXtyZXR1cm4oej09PTQ1fHxvbSh6KSkmJnArKzw2Mz8oaS5jb25zdW1lKHopLHo9PT00NT9qOkIpOmYoeil9ZnVuY3Rpb24gUih6KXtyZXR1cm4gaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoeiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhfX1jb25zdCBsSz17dG9rZW5pemU6aFJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIGhSZShpLGEsZil7cmV0dXJuIEd1KGkscCwibGluZVByZWZpeCIpO2Z1bmN0aW9uIHAodil7cmV0dXJuIHY9PT1udWxsfHxOYSh2KT9hKHYpOmYodil9fWNvbnN0IGpGdD17bmFtZToiYmxvY2tRdW90ZSIsdG9rZW5pemU6ZlJlLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6ZFJlfSxleGl0OmdSZX07ZnVuY3Rpb24gZlJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtpZihiPT09NjIpe2NvbnN0IEU9cC5jb250YWluZXJTdGF0ZTtyZXR1cm4gRS5vcGVufHwoaS5lbnRlcigiYmxvY2tRdW90ZSIse19jb250YWluZXI6ITB9KSxFLm9wZW49ITApLGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKSxpLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpLG19cmV0dXJuIGYoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gTmYoYik/KGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxhKTooaS5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksYShiKSl9fWZ1bmN0aW9uIGRSZShpLGEsZil7cmV0dXJuIEd1KGksaS5hdHRlbXB0KGpGdCxhLGYpLCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIGdSZShpKXtpLmV4aXQoImJsb2NrUXVvdGUiKX1jb25zdCAkRnQ9e25hbWU6ImNoYXJhY3RlckVzY2FwZSIsdG9rZW5pemU6cFJlfTtmdW5jdGlvbiBwUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAobSl7cmV0dXJuIGkuZW50ZXIoImNoYXJhY3RlckVzY2FwZSIpLGkuZW50ZXIoImVzY2FwZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoImVzY2FwZU1hcmtlciIpLHZ9ZnVuY3Rpb24gdihtKXtyZXR1cm4gSkJlKG0pPyhpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuY29uc3VtZShtKSxpLmV4aXQoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGUiKSxhKTpmKG0pfX1jb25zdCB6RnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaSIpO2Z1bmN0aW9uIEMwdChpKXtjb25zdCBhPSImIitpKyI7Ijt6RnQuaW5uZXJIVE1MPWE7Y29uc3QgZj16RnQudGV4dENvbnRlbnQ7cmV0dXJuIGYuY2hhckNvZGVBdChmLmxlbmd0aC0xKT09PTU5JiZpIT09InNlbWkifHxmPT09YT8hMTpmfWNvbnN0IHFGdD17bmFtZToiY2hhcmFjdGVyUmVmZXJlbmNlIix0b2tlbml6ZTpiUmV9O2Z1bmN0aW9uIGJSZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2PTAsbSxiO3JldHVybiBFO2Z1bmN0aW9uIEUoQil7cmV0dXJuIGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZSIpLGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShCKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLF99ZnVuY3Rpb24gXyhCKXtyZXR1cm4gQj09PTM1PyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLEwpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09MzEsYj1vbSxOKEIpKX1mdW5jdGlvbiBMKEIpe3JldHVybiBCPT09ODh8fEI9PT0xMjA/KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09NixiPVpCZSxOKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxtPTcsYj14MHQsTihCKSl9ZnVuY3Rpb24gTihCKXtsZXQgajtyZXR1cm4gQj09PTU5JiZ2PyhqPWkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxiPT09b20mJiFDMHQocC5zbGljZVNlcmlhbGl6ZShqKSk/ZihCKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxhKSk6YihCKSYmdisrPG0/KGkuY29uc3VtZShCKSxOKTpmKEIpfX1jb25zdCBIRnQ9e25hbWU6ImNvZGVGZW5jZWQiLHRva2VuaXplOnZSZSxjb25jcmV0ZTohMH07ZnVuY3Rpb24gdlJlKGksYSxmKXtjb25zdCBwPXRoaXMsdj17dG9rZW5pemU6eXQscGFydGlhbDohMH0sbT17dG9rZW5pemU6bXQscGFydGlhbDohMH0sYj10aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV0sRT1iJiZiWzFdLnR5cGU9PT0ibGluZVByZWZpeCI/YlsyXS5zbGljZVNlcmlhbGl6ZShiWzFdLCEwKS5sZW5ndGg6MDtsZXQgXz0wLEw7cmV0dXJuIE47ZnVuY3Rpb24gTihkdCl7cmV0dXJuIGkuZW50ZXIoImNvZGVGZW5jZWQiKSxpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLEw9ZHQsQihkdCl9ZnVuY3Rpb24gQihkdCl7cmV0dXJuIGR0PT09TD8oaS5jb25zdW1lKGR0KSxfKyssQik6KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxfPDM/ZihkdCk6R3UoaSxqLCJ3aGl0ZXNwYWNlIikoZHQpKX1mdW5jdGlvbiBqKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/aXQoZHQpOihpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLFIoZHQpKX1mdW5jdGlvbiBSKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxudihkdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxHdShpLHosIndoaXRlc3BhY2UiKShkdCkpOmR0PT09OTYmJmR0PT09TD9mKGR0KTooaS5jb25zdW1lKGR0KSxSKX1mdW5jdGlvbiB6KGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/aXQoZHQpOihpLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEsoZHQpKX1mdW5jdGlvbiBLKGR0KXtyZXR1cm4gZHQ9PT1udWxsfHxOYShkdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSxpdChkdCkpOmR0PT09OTYmJmR0PT09TD9mKGR0KTooaS5jb25zdW1lKGR0KSxLKX1mdW5jdGlvbiBpdChkdCl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlIikscC5pbnRlcnJ1cHQ/YShkdCk6c3QoZHQpfWZ1bmN0aW9uIHN0KGR0KXtyZXR1cm4gZHQ9PT1udWxsP2J0KGR0KTpOYShkdCk/aS5hdHRlbXB0KG0saS5hdHRlbXB0KHYsYnQsRT9HdShpLHN0LCJsaW5lUHJlZml4IixFKzEpOnN0KSxidCkoZHQpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksdXQoZHQpKX1mdW5jdGlvbiB1dChkdCl7cmV0dXJuIGR0PT09bnVsbHx8TmEoZHQpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxzdChkdCkpOihpLmNvbnN1bWUoZHQpLHV0KX1mdW5jdGlvbiBidChkdCl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZCIpLGEoZHQpfWZ1bmN0aW9uIG10KGR0LGh0LHd0KXtjb25zdCBYPXRoaXM7cmV0dXJuIHB0O2Z1bmN0aW9uIHB0KHh0KXtyZXR1cm4gZHQuZW50ZXIoImxpbmVFbmRpbmciKSxkdC5jb25zdW1lKHh0KSxkdC5leGl0KCJsaW5lRW5kaW5nIiksVX1mdW5jdGlvbiBVKHh0KXtyZXR1cm4gWC5wYXJzZXIubGF6eVtYLm5vdygpLmxpbmVdP3d0KHh0KTpodCh4dCl9fWZ1bmN0aW9uIHl0KGR0LGh0LHd0KXtsZXQgWD0wO3JldHVybiBHdShkdCxwdCwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KTtmdW5jdGlvbiBwdChudCl7cmV0dXJuIGR0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxkdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxVKG50KX1mdW5jdGlvbiBVKG50KXtyZXR1cm4gbnQ9PT1MPyhkdC5jb25zdW1lKG50KSxYKyssVSk6WDxfP3d0KG50KTooZHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxHdShkdCx4dCwid2hpdGVzcGFjZSIpKG50KSl9ZnVuY3Rpb24geHQobnQpe3JldHVybiBudD09PW51bGx8fE5hKG50KT8oZHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksaHQobnQpKTp3dChudCl9fX1jb25zdCBfMHQ9e25hbWU6ImNvZGVJbmRlbnRlZCIsdG9rZW5pemU6bVJlfSx3UmU9e3Rva2VuaXplOnlSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBtUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KEwpe3JldHVybiBpLmVudGVyKCJjb2RlSW5kZW50ZWQiKSxHdShpLG0sImxpbmVQcmVmaXgiLDQrMSkoTCl9ZnVuY3Rpb24gbShMKXtjb25zdCBOPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gTiYmTlsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZOWzJdLnNsaWNlU2VyaWFsaXplKE5bMV0sITApLmxlbmd0aD49ND9iKEwpOmYoTCl9ZnVuY3Rpb24gYihMKXtyZXR1cm4gTD09PW51bGw/XyhMKTpOYShMKT9pLmF0dGVtcHQod1JlLGIsXykoTCk6KGkuZW50ZXIoImNvZGVGbG93VmFsdWUiKSxFKEwpKX1mdW5jdGlvbiBFKEwpe3JldHVybiBMPT09bnVsbHx8TmEoTCk/KGkuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGIoTCkpOihpLmNvbnN1bWUoTCksRSl9ZnVuY3Rpb24gXyhMKXtyZXR1cm4gaS5leGl0KCJjb2RlSW5kZW50ZWQiKSxhKEwpfX1mdW5jdGlvbiB5UmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTpOYShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSx2KTpHdShpLG0sImxpbmVQcmVmaXgiLDQrMSkoYil9ZnVuY3Rpb24gbShiKXtjb25zdCBFPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gRSYmRVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZFWzJdLnNsaWNlU2VyaWFsaXplKEVbMV0sITApLmxlbmd0aD49ND9hKGIpOk5hKGIpP3YoYik6ZihiKX19Y29uc3QgeFJlPXtuYW1lOiJjb2RlVGV4dCIsdG9rZW5pemU6VFJlLHJlc29sdmU6a1JlLHByZXZpb3VzOkVSZX07ZnVuY3Rpb24ga1JlKGkpe2xldCBhPWkubGVuZ3RoLTQsZj0zLHAsdjtpZigoaVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW2ZdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKGlbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8aVthXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihwPWY7KytwPGE7KWlmKGlbcF1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXtpW2ZdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsaVthXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGYrPTIsYS09MjticmVha319Zm9yKHA9Zi0xLGErKzsrK3A8PWE7KXY9PT12b2lkIDA/cCE9PWEmJmlbcF1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKHY9cCk6KHA9PT1hfHxpW3BdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYoaVt2XVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLHAhPT12KzImJihpW3ZdWzFdLmVuZD1pW3AtMV1bMV0uZW5kLGkuc3BsaWNlKHYrMixwLXYtMiksYS09cC12LTIscD12KzIpLHY9dm9pZCAwKTtyZXR1cm4gaX1mdW5jdGlvbiBFUmUoaSl7cmV0dXJuIGkhPT05Nnx8dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdWzFdLnR5cGU9PT0iY2hhcmFjdGVyRXNjYXBlIn1mdW5jdGlvbiBUUmUoaSxhLGYpe2xldCBwPTAsdixtO3JldHVybiBiO2Z1bmN0aW9uIGIoQil7cmV0dXJuIGkuZW50ZXIoImNvZGVUZXh0IiksaS5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLEUoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQikscCsrLEUpOihpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxfKEIpKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09bnVsbD9mKEIpOkI9PT05Nj8obT1pLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIiksdj0wLE4oQikpOkI9PT0zMj8oaS5lbnRlcigic3BhY2UiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJzcGFjZSIpLF8pOk5hKEIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKEIpLGkuZXhpdCgibGluZUVuZGluZyIpLF8pOihpLmVudGVyKCJjb2RlVGV4dERhdGEiKSxMKEIpKX1mdW5jdGlvbiBMKEIpe3JldHVybiBCPT09bnVsbHx8Qj09PTMyfHxCPT09OTZ8fE5hKEIpPyhpLmV4aXQoImNvZGVUZXh0RGF0YSIpLF8oQikpOihpLmNvbnN1bWUoQiksTCl9ZnVuY3Rpb24gTihCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQiksdisrLE4pOnY9PT1wPyhpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxpLmV4aXQoImNvZGVUZXh0IiksYShCKSk6KG0udHlwZT0iY29kZVRleHREYXRhIixMKEIpKX19ZnVuY3Rpb24gR0Z0KGkpe2NvbnN0IGE9e307bGV0IGY9LTEscCx2LG0sYixFLF8sTDtmb3IoOysrZjxpLmxlbmd0aDspe2Zvcig7ZiBpbiBhOylmPWFbZl07aWYocD1pW2ZdLGYmJnBbMV0udHlwZT09PSJjaHVua0Zsb3ciJiZpW2YtMV1bMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihfPXBbMV0uX3Rva2VuaXplci5ldmVudHMsbT0wLG08Xy5sZW5ndGgmJl9bbV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYobSs9MiksbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlIT09ImNvbnRlbnQiOylfW21dWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKF9bbV1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLG0rKyk7aWYocFswXT09PSJlbnRlciIpcFsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oYSxDUmUoaSxmKSksZj1hW2ZdLEw9ITApO2Vsc2UgaWYocFsxXS5fY29udGFpbmVyKXtmb3IobT1mLHY9dm9pZCAwO20tLSYmKGI9aVttXSxiWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGJbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKTspYlswXT09PSJlbnRlciImJih2JiYoaVt2XVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiKSxiWzFdLnR5cGU9ImxpbmVFbmRpbmciLHY9bSk7diYmKHBbMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksRT1pLnNsaWNlKHYsZiksRS51bnNoaWZ0KHApLHYzKGksdixmLXYrMSxFKSl9fXJldHVybiFMfWZ1bmN0aW9uIENSZShpLGEpe2NvbnN0IGY9aVthXVsxXSxwPWlbYV1bMl07bGV0IHY9YS0xO2NvbnN0IG09W10sYj1mLl90b2tlbml6ZXJ8fHAucGFyc2VyW2YuY29udGVudFR5cGVdKGYuc3RhcnQpLEU9Yi5ldmVudHMsXz1bXSxMPXt9O2xldCBOLEIsaj0tMSxSPWYsej0wLEs9MDtjb25zdCBpdD1bS107Zm9yKDtSOyl7Zm9yKDtpWysrdl1bMV0hPT1SOyk7bS5wdXNoKHYpLFIuX3Rva2VuaXplcnx8KE49cC5zbGljZVN0cmVhbShSKSxSLm5leHR8fE4ucHVzaChudWxsKSxCJiZiLmRlZmluZVNraXAoUi5zdGFydCksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITApLGIud3JpdGUoTiksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09dm9pZCAwKSksQj1SLFI9Ui5uZXh0fWZvcihSPWY7KytqPEUubGVuZ3RoOylFW2pdWzBdPT09ImV4aXQiJiZFW2otMV1bMF09PT0iZW50ZXIiJiZFW2pdWzFdLnR5cGU9PT1FW2otMV1bMV0udHlwZSYmRVtqXVsxXS5zdGFydC5saW5lIT09RVtqXVsxXS5lbmQubGluZSYmKEs9aisxLGl0LnB1c2goSyksUi5fdG9rZW5pemVyPXZvaWQgMCxSLnByZXZpb3VzPXZvaWQgMCxSPVIubmV4dCk7Zm9yKGIuZXZlbnRzPVtdLFI/KFIuX3Rva2VuaXplcj12b2lkIDAsUi5wcmV2aW91cz12b2lkIDApOml0LnBvcCgpLGo9aXQubGVuZ3RoO2otLTspe2NvbnN0IHN0PUUuc2xpY2UoaXRbal0saXRbaisxXSksdXQ9bS5wb3AoKTtfLnVuc2hpZnQoW3V0LHV0K3N0Lmxlbmd0aC0xXSksdjMoaSx1dCwyLHN0KX1mb3Ioaj0tMTsrK2o8Xy5sZW5ndGg7KUxbeitfW2pdWzBdXT16K19bal1bMV0seis9X1tqXVsxXS1fW2pdWzBdLTE7cmV0dXJuIEx9Y29uc3QgX1JlPXt0b2tlbml6ZTpMUmUscmVzb2x2ZTpBUmV9LFNSZT17dG9rZW5pemU6TVJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIEFSZShpKXtyZXR1cm4gR0Z0KGkpLGl9ZnVuY3Rpb24gTFJlKGksYSl7bGV0IGY7cmV0dXJuIHA7ZnVuY3Rpb24gcChFKXtyZXR1cm4gaS5lbnRlcigiY29udGVudCIpLGY9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksdihFKX1mdW5jdGlvbiB2KEUpe3JldHVybiBFPT09bnVsbD9tKEUpOk5hKEUpP2kuY2hlY2soU1JlLGIsbSkoRSk6KGkuY29uc3VtZShFKSx2KX1mdW5jdGlvbiBtKEUpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZXhpdCgiY29udGVudCIpLGEoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaS5jb25zdW1lKEUpLGkuZXhpdCgiY2h1bmtDb250ZW50IiksZi5uZXh0PWkuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50IixwcmV2aW91czpmfSksZj1mLm5leHQsdn19ZnVuY3Rpb24gTVJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5leGl0KCJjaHVua0NvbnRlbnQiKSxpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLEd1KGksbSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIG0oYil7aWYoYj09PW51bGx8fE5hKGIpKXJldHVybiBmKGIpO2NvbnN0IEU9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikmJkUmJkVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmRVsyXS5zbGljZVNlcmlhbGl6ZShFWzFdLCEwKS5sZW5ndGg+PTQ/YShiKTppLmludGVycnVwdChwLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csZixhKShiKX19ZnVuY3Rpb24gVkZ0KGksYSxmLHAsdixtLGIsRSxfKXtjb25zdCBMPV98fE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgTj0wO3JldHVybiBCO2Z1bmN0aW9uIEIoc3Qpe3JldHVybiBzdD09PTYwPyhpLmVudGVyKHApLGkuZW50ZXIodiksaS5lbnRlcihtKSxpLmNvbnN1bWUoc3QpLGkuZXhpdChtKSxqKTpzdD09PW51bGx8fHN0PT09NDF8fGswdChzdCk/ZihzdCk6KGkuZW50ZXIocCksaS5lbnRlcihiKSxpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxLKHN0KSl9ZnVuY3Rpb24gaihzdCl7cmV0dXJuIHN0PT09NjI/KGkuZW50ZXIobSksaS5jb25zdW1lKHN0KSxpLmV4aXQobSksaS5leGl0KHYpLGkuZXhpdChwKSxhKTooaS5lbnRlcihFKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksUihzdCkpfWZ1bmN0aW9uIFIoc3Qpe3JldHVybiBzdD09PTYyPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KEUpLGooc3QpKTpzdD09PW51bGx8fHN0PT09NjB8fE5hKHN0KT9mKHN0KTooaS5jb25zdW1lKHN0KSxzdD09PTkyP3o6Uil9ZnVuY3Rpb24geihzdCl7cmV0dXJuIHN0PT09NjB8fHN0PT09NjJ8fHN0PT09OTI/KGkuY29uc3VtZShzdCksUik6UihzdCl9ZnVuY3Rpb24gSyhzdCl7cmV0dXJuIHN0PT09NDA/KytOPkw/ZihzdCk6KGkuY29uc3VtZShzdCksSyk6c3Q9PT00MT9OLS0/KGkuY29uc3VtZShzdCksSyk6KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoRSksaS5leGl0KGIpLGkuZXhpdChwKSxhKHN0KSk6c3Q9PT1udWxsfHxudihzdCk/Tj9mKHN0KTooaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdChFKSxpLmV4aXQoYiksaS5leGl0KHApLGEoc3QpKTprMHQoc3QpP2Yoc3QpOihpLmNvbnN1bWUoc3QpLHN0PT09OTI/aXQ6Syl9ZnVuY3Rpb24gaXQoc3Qpe3JldHVybiBzdD09PTQwfHxzdD09PTQxfHxzdD09PTkyPyhpLmNvbnN1bWUoc3QpLEspOksoc3QpfX1mdW5jdGlvbiBVRnQoaSxhLGYscCx2LG0pe2NvbnN0IGI9dGhpcztsZXQgRT0wLF87cmV0dXJuIEw7ZnVuY3Rpb24gTChSKXtyZXR1cm4gaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShSKSxpLmV4aXQodiksaS5lbnRlcihtKSxOfWZ1bmN0aW9uIE4oUil7cmV0dXJuIFI9PT1udWxsfHxSPT09OTF8fFI9PT05MyYmIV98fFI9PT05NCYmIUUmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGIucGFyc2VyLmNvbnN0cnVjdHN8fEU+OTk5P2YoUik6Uj09PTkzPyhpLmV4aXQobSksaS5lbnRlcih2KSxpLmNvbnN1bWUoUiksaS5leGl0KHYpLGkuZXhpdChwKSxhKTpOYShSKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpbmVFbmRpbmciKSxOKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEIoUikpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFI9PT1udWxsfHxSPT09OTF8fFI9PT05M3x8TmEoUil8fEUrKz45OTk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxOKFIpKTooaS5jb25zdW1lKFIpLF89X3x8IU5mKFIpLFI9PT05Mj9qOkIpfWZ1bmN0aW9uIGooUil7cmV0dXJuIFI9PT05MXx8Uj09PTkyfHxSPT09OTM/KGkuY29uc3VtZShSKSxFKyssQik6QihSKX19ZnVuY3Rpb24gV0Z0KGksYSxmLHAsdixtKXtsZXQgYjtyZXR1cm4gRTtmdW5jdGlvbiBFKGope3JldHVybiBpLmVudGVyKHApLGkuZW50ZXIodiksaS5jb25zdW1lKGopLGkuZXhpdCh2KSxiPWo9PT00MD80MTpqLF99ZnVuY3Rpb24gXyhqKXtyZXR1cm4gaj09PWI/KGkuZW50ZXIodiksaS5jb25zdW1lKGopLGkuZXhpdCh2KSxpLmV4aXQocCksYSk6KGkuZW50ZXIobSksTChqKSl9ZnVuY3Rpb24gTChqKXtyZXR1cm4gaj09PWI/KGkuZXhpdChtKSxfKGIpKTpqPT09bnVsbD9mKGopOk5hKGopPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGopLGkuZXhpdCgibGluZUVuZGluZyIpLEd1KGksTCwibGluZVByZWZpeCIpKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLE4oaikpfWZ1bmN0aW9uIE4oail7cmV0dXJuIGo9PT1ifHxqPT09bnVsbHx8TmEoaik/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxMKGopKTooaS5jb25zdW1lKGopLGo9PT05Mj9COk4pfWZ1bmN0aW9uIEIoail7cmV0dXJuIGo9PT1ifHxqPT09OTI/KGkuY29uc3VtZShqKSxOKTpOKGopfX1mdW5jdGlvbiB2UChpLGEpe2xldCBmO3JldHVybiBwO2Z1bmN0aW9uIHAodil7cmV0dXJuIE5hKHYpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHYpLGkuZXhpdCgibGluZUVuZGluZyIpLGY9ITAscCk6TmYodik/R3UoaSxwLGY/ImxpbmVQcmVmaXgiOiJsaW5lU3VmZml4Iikodik6YSh2KX19ZnVuY3Rpb24gbkwoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfWNvbnN0IElSZT17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6T1JlfSxEUmU9e3Rva2VuaXplOk5SZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBPUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdjtyZXR1cm4gbTtmdW5jdGlvbiBtKF8pe3JldHVybiBpLmVudGVyKCJkZWZpbml0aW9uIiksVUZ0LmNhbGwocCxpLGIsZiwiZGVmaW5pdGlvbkxhYmVsIiwiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIikoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gdj1uTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpLF89PT01OD8oaS5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLGkuY29uc3VtZShfKSxpLmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSx2UChpLFZGdChpLGkuYXR0ZW1wdChEUmUsR3UoaSxFLCJ3aGl0ZXNwYWNlIiksR3UoaSxFLCJ3aGl0ZXNwYWNlIikpLGYsImRlZmluaXRpb25EZXN0aW5hdGlvbiIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIikpKTpmKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIF89PT1udWxsfHxOYShfKT8oaS5leGl0KCJkZWZpbml0aW9uIikscC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyh2KXx8cC5wYXJzZXIuZGVmaW5lZC5wdXNoKHYpLGEoXykpOmYoXyl9fWZ1bmN0aW9uIE5SZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gbnYoYik/dlAoaSx2KShiKTpmKGIpfWZ1bmN0aW9uIHYoYil7cmV0dXJuIGI9PT0zNHx8Yj09PTM5fHxiPT09NDA/V0Z0KGksR3UoaSxtLCJ3aGl0ZXNwYWNlIiksZiwiZGVmaW5pdGlvblRpdGxlIiwiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwiZGVmaW5pdGlvblRpdGxlU3RyaW5nIikoYik6ZihiKX1mdW5jdGlvbiBtKGIpe3JldHVybiBiPT09bnVsbHx8TmEoYik/YShiKTpmKGIpfX1jb25zdCBQUmU9e25hbWU6ImhhcmRCcmVha0VzY2FwZSIsdG9rZW5pemU6RlJlfTtmdW5jdGlvbiBGUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAobSl7cmV0dXJuIGkuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpLGkuZW50ZXIoImVzY2FwZU1hcmtlciIpLGkuY29uc3VtZShtKSx2fWZ1bmN0aW9uIHYobSl7cmV0dXJuIE5hKG0pPyhpLmV4aXQoImVzY2FwZU1hcmtlciIpLGkuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksYShtKSk6ZihtKX19Y29uc3QgQlJlPXtuYW1lOiJoZWFkaW5nQXR4Iix0b2tlbml6ZTpqUmUscmVzb2x2ZTpSUmV9O2Z1bmN0aW9uIFJSZShpLGEpe2xldCBmPWkubGVuZ3RoLTIscD0zLHYsbTtyZXR1cm4gaVtwXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYocCs9MiksZi0yPnAmJmlbZl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKGYtPTIpLGlbZl1bMV0udHlwZT09PSJhdHhIZWFkaW5nU2VxdWVuY2UiJiYocD09PWYtMXx8Zi00PnAmJmlbZi0yXVsxXS50eXBlPT09IndoaXRlc3BhY2UiKSYmKGYtPXArMT09PWY/Mjo0KSxmPnAmJih2PXt0eXBlOiJhdHhIZWFkaW5nVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmR9LG09e3R5cGU6ImNodW5rVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmQsY29udGVudFR5cGU6InRleHQifSx2MyhpLHAsZi1wKzEsW1siZW50ZXIiLHYsYV0sWyJlbnRlciIsbSxhXSxbImV4aXQiLG0sYV0sWyJleGl0Iix2LGFdXSkpLGl9ZnVuY3Rpb24galJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY9MDtyZXR1cm4gbTtmdW5jdGlvbiBtKE4pe3JldHVybiBpLmVudGVyKCJhdHhIZWFkaW5nIiksaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYihOKX1mdW5jdGlvbiBiKE4pe3JldHVybiBOPT09MzUmJnYrKzw2PyhpLmNvbnN1bWUoTiksYik6Tj09PW51bGx8fG52KE4pPyhpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHAuaW50ZXJydXB0P2EoTik6RShOKSk6ZihOKX1mdW5jdGlvbiBFKE4pe3JldHVybiBOPT09MzU/KGkuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLF8oTikpOk49PT1udWxsfHxOYShOKT8oaS5leGl0KCJhdHhIZWFkaW5nIiksYShOKSk6TmYoTik/R3UoaSxFLCJ3aGl0ZXNwYWNlIikoTik6KGkuZW50ZXIoImF0eEhlYWRpbmdUZXh0IiksTChOKSl9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PTM1PyhpLmNvbnN1bWUoTiksXyk6KGkuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIiksRShOKSl9ZnVuY3Rpb24gTChOKXtyZXR1cm4gTj09PW51bGx8fE49PT0zNXx8bnYoTik/KGkuZXhpdCgiYXR4SGVhZGluZ1RleHQiKSxFKE4pKTooaS5jb25zdW1lKE4pLEwpfX1jb25zdCAkUmU9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmFzZSIsImJhc2Vmb250IiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYXB0aW9uIiwiY2VudGVyIiwiY29sIiwiY29sZ3JvdXAiLCJkZCIsImRldGFpbHMiLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImZyYW1lIiwiZnJhbWVzZXQiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaHIiLCJodG1sIiwiaWZyYW1lIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1lbnUiLCJtZW51aXRlbSIsIm5hdiIsIm5vZnJhbWVzIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsInAiLCJwYXJhbSIsInNlY3Rpb24iLCJzdW1tYXJ5IiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidWwiXSxLRnQ9WyJwcmUiLCJzY3JpcHQiLCJzdHlsZSIsInRleHRhcmVhIl0selJlPXtuYW1lOiJodG1sRmxvdyIsdG9rZW5pemU6R1JlLHJlc29sdmVUbzpIUmUsY29uY3JldGU6ITB9LHFSZT17dG9rZW5pemU6VlJlLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIEhSZShpKXtsZXQgYT1pLmxlbmd0aDtmb3IoO2EtLSYmIShpW2FdWzBdPT09ImVudGVyIiYmaVthXVsxXS50eXBlPT09Imh0bWxGbG93Iik7KTtyZXR1cm4gYT4xJiZpW2EtMl1bMV0udHlwZT09PSJsaW5lUHJlZml4IiYmKGlbYV1bMV0uc3RhcnQ9aVthLTJdWzFdLnN0YXJ0LGlbYSsxXVsxXS5zdGFydD1pW2EtMl1bMV0uc3RhcnQsaS5zcGxpY2UoYS0yLDIpKSxpfWZ1bmN0aW9uIEdSZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2LG0sYixFLF87cmV0dXJuIEw7ZnVuY3Rpb24gTChGdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxGbG93IiksaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksaS5jb25zdW1lKEZ0KSxOfWZ1bmN0aW9uIE4oRnQpe3JldHVybiBGdD09PTMzPyhpLmNvbnN1bWUoRnQpLEIpOkZ0PT09NDc/KGkuY29uc3VtZShGdCkseik6RnQ9PT02Mz8oaS5jb25zdW1lKEZ0KSx2PTMscC5pbnRlcnJ1cHQ/YTpUdCk6dzMoRnQpPyhpLmNvbnN1bWUoRnQpLGI9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksbT0hMCxLKTpmKEZ0KX1mdW5jdGlvbiBCKEZ0KXtyZXR1cm4gRnQ9PT00NT8oaS5jb25zdW1lKEZ0KSx2PTIsaik6RnQ9PT05MT8oaS5jb25zdW1lKEZ0KSx2PTUsYj0iQ0RBVEFbIixFPTAsUik6dzMoRnQpPyhpLmNvbnN1bWUoRnQpLHY9NCxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBqKEZ0KXtyZXR1cm4gRnQ9PT00NT8oaS5jb25zdW1lKEZ0KSxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBSKEZ0KXtyZXR1cm4gRnQ9PT1iLmNoYXJDb2RlQXQoRSsrKT8oaS5jb25zdW1lKEZ0KSxFPT09Yi5sZW5ndGg/cC5pbnRlcnJ1cHQ/YTpVOlIpOmYoRnQpfWZ1bmN0aW9uIHooRnQpe3JldHVybiB3MyhGdCk/KGkuY29uc3VtZShGdCksYj1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxLKTpmKEZ0KX1mdW5jdGlvbiBLKEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTQ3fHxGdD09PTYyfHxudihGdCk/RnQhPT00NyYmbSYmS0Z0LmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHY9MSxwLmludGVycnVwdD9hKEZ0KTpVKEZ0KSk6JFJlLmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHY9NixGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLGl0KTpwLmludGVycnVwdD9hKEZ0KTpVKEZ0KSk6KHY9NyxwLmludGVycnVwdCYmIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKEZ0KTptP3V0KEZ0KTpzdChGdCkpOkZ0PT09NDV8fG9tKEZ0KT8oaS5jb25zdW1lKEZ0KSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxLKTpmKEZ0KX1mdW5jdGlvbiBpdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCkscC5pbnRlcnJ1cHQ/YTpVKTpmKEZ0KX1mdW5jdGlvbiBzdChGdCl7cmV0dXJuIE5mKEZ0KT8oaS5jb25zdW1lKEZ0KSxzdCk6WChGdCl9ZnVuY3Rpb24gdXQoRnQpe3JldHVybiBGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLFgpOkZ0PT09NTh8fEZ0PT09OTV8fHczKEZ0KT8oaS5jb25zdW1lKEZ0KSxidCk6TmYoRnQpPyhpLmNvbnN1bWUoRnQpLHV0KTpYKEZ0KX1mdW5jdGlvbiBidChGdCl7cmV0dXJuIEZ0PT09NDV8fEZ0PT09NDZ8fEZ0PT09NTh8fEZ0PT09OTV8fG9tKEZ0KT8oaS5jb25zdW1lKEZ0KSxidCk6bXQoRnQpfWZ1bmN0aW9uIG10KEZ0KXtyZXR1cm4gRnQ9PT02MT8oaS5jb25zdW1lKEZ0KSx5dCk6TmYoRnQpPyhpLmNvbnN1bWUoRnQpLG10KTp1dChGdCl9ZnVuY3Rpb24geXQoRnQpe3JldHVybiBGdD09PW51bGx8fEZ0PT09NjB8fEZ0PT09NjF8fEZ0PT09NjJ8fEZ0PT09OTY/ZihGdCk6RnQ9PT0zNHx8RnQ9PT0zOT8oaS5jb25zdW1lKEZ0KSxfPUZ0LGR0KTpOZihGdCk/KGkuY29uc3VtZShGdCkseXQpOihfPW51bGwsaHQoRnQpKX1mdW5jdGlvbiBkdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8TmEoRnQpP2YoRnQpOkZ0PT09Xz8oaS5jb25zdW1lKEZ0KSx3dCk6KGkuY29uc3VtZShGdCksZHQpfWZ1bmN0aW9uIGh0KEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTM0fHxGdD09PTM5fHxGdD09PTYwfHxGdD09PTYxfHxGdD09PTYyfHxGdD09PTk2fHxudihGdCk/bXQoRnQpOihpLmNvbnN1bWUoRnQpLGh0KX1mdW5jdGlvbiB3dChGdCl7cmV0dXJuIEZ0PT09NDd8fEZ0PT09NjJ8fE5mKEZ0KT91dChGdCk6ZihGdCl9ZnVuY3Rpb24gWChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCkscHQpOmYoRnQpfWZ1bmN0aW9uIHB0KEZ0KXtyZXR1cm4gTmYoRnQpPyhpLmNvbnN1bWUoRnQpLHB0KTpGdD09PW51bGx8fE5hKEZ0KT9VKEZ0KTpmKEZ0KX1mdW5jdGlvbiBVKEZ0KXtyZXR1cm4gRnQ9PT00NSYmdj09PTI/KGkuY29uc3VtZShGdCksTnQpOkZ0PT09NjAmJnY9PT0xPyhpLmNvbnN1bWUoRnQpLHF0KTpGdD09PTYyJiZ2PT09ND8oaS5jb25zdW1lKEZ0KSxIdCk6RnQ9PT02MyYmdj09PTM/KGkuY29uc3VtZShGdCksVHQpOkZ0PT09OTMmJnY9PT01PyhpLmNvbnN1bWUoRnQpLFopOk5hKEZ0KSYmKHY9PT02fHx2PT09Nyk/aS5jaGVjayhxUmUsSHQseHQpKEZ0KTpGdD09PW51bGx8fE5hKEZ0KT94dChGdCk6KGkuY29uc3VtZShGdCksVSl9ZnVuY3Rpb24geHQoRnQpe3JldHVybiBpLmV4aXQoImh0bWxGbG93RGF0YSIpLG50KEZ0KX1mdW5jdGlvbiBudChGdCl7cmV0dXJuIEZ0PT09bnVsbD9JdChGdCk6TmEoRnQpP2kuYXR0ZW1wdCh7dG9rZW5pemU6T3QscGFydGlhbDohMH0sbnQsSXQpKEZ0KTooaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksVShGdCkpfWZ1bmN0aW9uIE90KEZ0LGtlLHBuKXtyZXR1cm4gTWU7ZnVuY3Rpb24gTWUoR2Upe3JldHVybiBGdC5lbnRlcigibGluZUVuZGluZyIpLEZ0LmNvbnN1bWUoR2UpLEZ0LmV4aXQoImxpbmVFbmRpbmciKSx2ZX1mdW5jdGlvbiB2ZShHZSl7cmV0dXJuIHAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9wbihHZSk6a2UoR2UpfX1mdW5jdGlvbiBOdChGdCl7cmV0dXJuIEZ0PT09NDU/KGkuY29uc3VtZShGdCksVHQpOlUoRnQpfWZ1bmN0aW9uIHF0KEZ0KXtyZXR1cm4gRnQ9PT00Nz8oaS5jb25zdW1lKEZ0KSxiPSIiLEN0KTpVKEZ0KX1mdW5jdGlvbiBDdChGdCl7cmV0dXJuIEZ0PT09NjImJktGdC5pbmNsdWRlcyhiLnRvTG93ZXJDYXNlKCkpPyhpLmNvbnN1bWUoRnQpLEh0KTp3MyhGdCkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksQ3QpOlUoRnQpfWZ1bmN0aW9uIFooRnQpe3JldHVybiBGdD09PTkzPyhpLmNvbnN1bWUoRnQpLFR0KTpVKEZ0KX1mdW5jdGlvbiBUdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCksSHQpOkZ0PT09NDUmJnY9PT0yPyhpLmNvbnN1bWUoRnQpLFR0KTpVKEZ0KX1mdW5jdGlvbiBIdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8TmEoRnQpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLEl0KEZ0KSk6KGkuY29uc3VtZShGdCksSHQpfWZ1bmN0aW9uIEl0KEZ0KXtyZXR1cm4gaS5leGl0KCJodG1sRmxvdyIpLGEoRnQpfX1mdW5jdGlvbiBWUmUoaSxhLGYpe3JldHVybiBwO2Z1bmN0aW9uIHAodil7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKHYpLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksaS5hdHRlbXB0KGxLLGEsZil9fWNvbnN0IFVSZT17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOldSZX07ZnVuY3Rpb24gV1JlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHYsbSxiLEU7cmV0dXJuIF87ZnVuY3Rpb24gXyhJdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0IiksaS5lbnRlcigiaHRtbFRleHREYXRhIiksaS5jb25zdW1lKEl0KSxMfWZ1bmN0aW9uIEwoSXQpe3JldHVybiBJdD09PTMzPyhpLmNvbnN1bWUoSXQpLE4pOkl0PT09NDc/KGkuY29uc3VtZShJdCksaHQpOkl0PT09NjM/KGkuY29uc3VtZShJdCkseXQpOnczKEl0KT8oaS5jb25zdW1lKEl0KSxwdCk6ZihJdCl9ZnVuY3Rpb24gTihJdCl7cmV0dXJuIEl0PT09NDU/KGkuY29uc3VtZShJdCksQik6SXQ9PT05MT8oaS5jb25zdW1lKEl0KSxtPSJDREFUQVsiLGI9MCxpdCk6dzMoSXQpPyhpLmNvbnN1bWUoSXQpLG10KTpmKEl0KX1mdW5jdGlvbiBCKEl0KXtyZXR1cm4gSXQ9PT00NT8oaS5jb25zdW1lKEl0KSxqKTpmKEl0KX1mdW5jdGlvbiBqKEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTYyP2YoSXQpOkl0PT09NDU/KGkuY29uc3VtZShJdCksUik6eihJdCl9ZnVuY3Rpb24gUihJdCl7cmV0dXJuIEl0PT09bnVsbHx8SXQ9PT02Mj9mKEl0KTp6KEl0KX1mdW5jdGlvbiB6KEl0KXtyZXR1cm4gSXQ9PT1udWxsP2YoSXQpOkl0PT09NDU/KGkuY29uc3VtZShJdCksSyk6TmEoSXQpPyhFPXosWihJdCkpOihpLmNvbnN1bWUoSXQpLHopfWZ1bmN0aW9uIEsoSXQpe3JldHVybiBJdD09PTQ1PyhpLmNvbnN1bWUoSXQpLEh0KTp6KEl0KX1mdW5jdGlvbiBpdChJdCl7cmV0dXJuIEl0PT09bS5jaGFyQ29kZUF0KGIrKyk/KGkuY29uc3VtZShJdCksYj09PW0ubGVuZ3RoP3N0Oml0KTpmKEl0KX1mdW5jdGlvbiBzdChJdCl7cmV0dXJuIEl0PT09bnVsbD9mKEl0KTpJdD09PTkzPyhpLmNvbnN1bWUoSXQpLHV0KTpOYShJdCk/KEU9c3QsWihJdCkpOihpLmNvbnN1bWUoSXQpLHN0KX1mdW5jdGlvbiB1dChJdCl7cmV0dXJuIEl0PT09OTM/KGkuY29uc3VtZShJdCksYnQpOnN0KEl0KX1mdW5jdGlvbiBidChJdCl7cmV0dXJuIEl0PT09NjI/SHQoSXQpOkl0PT09OTM/KGkuY29uc3VtZShJdCksYnQpOnN0KEl0KX1mdW5jdGlvbiBtdChJdCl7cmV0dXJuIEl0PT09bnVsbHx8SXQ9PT02Mj9IdChJdCk6TmEoSXQpPyhFPW10LFooSXQpKTooaS5jb25zdW1lKEl0KSxtdCl9ZnVuY3Rpb24geXQoSXQpe3JldHVybiBJdD09PW51bGw/ZihJdCk6SXQ9PT02Mz8oaS5jb25zdW1lKEl0KSxkdCk6TmEoSXQpPyhFPXl0LFooSXQpKTooaS5jb25zdW1lKEl0KSx5dCl9ZnVuY3Rpb24gZHQoSXQpe3JldHVybiBJdD09PTYyP0h0KEl0KTp5dChJdCl9ZnVuY3Rpb24gaHQoSXQpe3JldHVybiB3MyhJdCk/KGkuY29uc3VtZShJdCksd3QpOmYoSXQpfWZ1bmN0aW9uIHd0KEl0KXtyZXR1cm4gSXQ9PT00NXx8b20oSXQpPyhpLmNvbnN1bWUoSXQpLHd0KTpYKEl0KX1mdW5jdGlvbiBYKEl0KXtyZXR1cm4gTmEoSXQpPyhFPVgsWihJdCkpOk5mKEl0KT8oaS5jb25zdW1lKEl0KSxYKTpIdChJdCl9ZnVuY3Rpb24gcHQoSXQpe3JldHVybiBJdD09PTQ1fHxvbShJdCk/KGkuY29uc3VtZShJdCkscHQpOkl0PT09NDd8fEl0PT09NjJ8fG52KEl0KT9VKEl0KTpmKEl0KX1mdW5jdGlvbiBVKEl0KXtyZXR1cm4gSXQ9PT00Nz8oaS5jb25zdW1lKEl0KSxIdCk6SXQ9PT01OHx8SXQ9PT05NXx8dzMoSXQpPyhpLmNvbnN1bWUoSXQpLHh0KTpOYShJdCk/KEU9VSxaKEl0KSk6TmYoSXQpPyhpLmNvbnN1bWUoSXQpLFUpOkh0KEl0KX1mdW5jdGlvbiB4dChJdCl7cmV0dXJuIEl0PT09NDV8fEl0PT09NDZ8fEl0PT09NTh8fEl0PT09OTV8fG9tKEl0KT8oaS5jb25zdW1lKEl0KSx4dCk6bnQoSXQpfWZ1bmN0aW9uIG50KEl0KXtyZXR1cm4gSXQ9PT02MT8oaS5jb25zdW1lKEl0KSxPdCk6TmEoSXQpPyhFPW50LFooSXQpKTpOZihJdCk/KGkuY29uc3VtZShJdCksbnQpOlUoSXQpfWZ1bmN0aW9uIE90KEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTYwfHxJdD09PTYxfHxJdD09PTYyfHxJdD09PTk2P2YoSXQpOkl0PT09MzR8fEl0PT09Mzk/KGkuY29uc3VtZShJdCksdj1JdCxOdCk6TmEoSXQpPyhFPU90LFooSXQpKTpOZihJdCk/KGkuY29uc3VtZShJdCksT3QpOihpLmNvbnN1bWUoSXQpLHY9dm9pZCAwLEN0KX1mdW5jdGlvbiBOdChJdCl7cmV0dXJuIEl0PT09dj8oaS5jb25zdW1lKEl0KSxxdCk6SXQ9PT1udWxsP2YoSXQpOk5hKEl0KT8oRT1OdCxaKEl0KSk6KGkuY29uc3VtZShJdCksTnQpfWZ1bmN0aW9uIHF0KEl0KXtyZXR1cm4gSXQ9PT02Mnx8SXQ9PT00N3x8bnYoSXQpP1UoSXQpOmYoSXQpfWZ1bmN0aW9uIEN0KEl0KXtyZXR1cm4gSXQ9PT1udWxsfHxJdD09PTM0fHxJdD09PTM5fHxJdD09PTYwfHxJdD09PTYxfHxJdD09PTk2P2YoSXQpOkl0PT09NjJ8fG52KEl0KT9VKEl0KTooaS5jb25zdW1lKEl0KSxDdCl9ZnVuY3Rpb24gWihJdCl7cmV0dXJuIGkuZXhpdCgiaHRtbFRleHREYXRhIiksaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShJdCksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxUdCwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBUdChJdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLEUoSXQpfWZ1bmN0aW9uIEh0KEl0KXtyZXR1cm4gSXQ9PT02Mj8oaS5jb25zdW1lKEl0KSxpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZXhpdCgiaHRtbFRleHQiKSxhKTpmKEl0KX19Y29uc3QgUzB0PXtuYW1lOiJsYWJlbEVuZCIsdG9rZW5pemU6SlJlLHJlc29sdmVUbzpaUmUscmVzb2x2ZUFsbDpRUmV9LEtSZT17dG9rZW5pemU6dGplfSxZUmU9e3Rva2VuaXplOmVqZX0sWFJlPXt0b2tlbml6ZTpuamV9O2Z1bmN0aW9uIFFSZShpKXtsZXQgYT0tMSxmO2Zvcig7KythPGkubGVuZ3RoOylmPWlbYV1bMV0sKGYudHlwZT09PSJsYWJlbEltYWdlInx8Zi50eXBlPT09ImxhYmVsTGluayJ8fGYudHlwZT09PSJsYWJlbEVuZCIpJiYoaS5zcGxpY2UoYSsxLGYudHlwZT09PSJsYWJlbEltYWdlIj80OjIpLGYudHlwZT0iZGF0YSIsYSsrKTtyZXR1cm4gaX1mdW5jdGlvbiBaUmUoaSxhKXtsZXQgZj1pLmxlbmd0aCxwPTAsdixtLGIsRTtmb3IoO2YtLTspaWYodj1pW2ZdWzFdLG0pe2lmKHYudHlwZT09PSJsaW5rInx8di50eXBlPT09ImxhYmVsTGluayImJnYuX2luYWN0aXZlKWJyZWFrO2lbZl1bMF09PT0iZW50ZXIiJiZ2LnR5cGU9PT0ibGFiZWxMaW5rIiYmKHYuX2luYWN0aXZlPSEwKX1lbHNlIGlmKGIpe2lmKGlbZl1bMF09PT0iZW50ZXIiJiYodi50eXBlPT09ImxhYmVsSW1hZ2UifHx2LnR5cGU9PT0ibGFiZWxMaW5rIikmJiF2Ll9iYWxhbmNlZCYmKG09Zix2LnR5cGUhPT0ibGFiZWxMaW5rIikpe3A9MjticmVha319ZWxzZSB2LnR5cGU9PT0ibGFiZWxFbmQiJiYoYj1mKTtjb25zdCBfPXt0eXBlOmlbbV1bMV0udHlwZT09PSJsYWJlbExpbmsiPyJsaW5rIjoiaW1hZ2UiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVttXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfSxMPXt0eXBlOiJsYWJlbCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2JdWzFdLmVuZCl9LE49e3R5cGU6ImxhYmVsVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW20rcCsyXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbYi0yXVsxXS5zdGFydCl9O3JldHVybiBFPVtbImVudGVyIixfLGFdLFsiZW50ZXIiLEwsYV1dLEU9ZXYoRSxpLnNsaWNlKG0rMSxtK3ArMykpLEU9ZXYoRSxbWyJlbnRlciIsTixhXV0pLEU9ZXYoRSxFMHQoYS5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsaS5zbGljZShtK3ArNCxiLTMpLGEpKSxFPWV2KEUsW1siZXhpdCIsTixhXSxpW2ItMl0saVtiLTFdLFsiZXhpdCIsTCxhXV0pLEU9ZXYoRSxpLnNsaWNlKGIrMSkpLEU9ZXYoRSxbWyJleGl0IixfLGFdXSksdjMoaSxtLGkubGVuZ3RoLEUpLGl9ZnVuY3Rpb24gSlJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHY9cC5ldmVudHMubGVuZ3RoLG0sYjtmb3IoO3YtLTspaWYoKHAuZXZlbnRzW3ZdWzFdLnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHAuZXZlbnRzW3ZdWzFdLnR5cGU9PT0ibGFiZWxMaW5rIikmJiFwLmV2ZW50c1t2XVsxXS5fYmFsYW5jZWQpe209cC5ldmVudHNbdl1bMV07YnJlYWt9cmV0dXJuIEU7ZnVuY3Rpb24gRShOKXtyZXR1cm4gbT9tLl9pbmFjdGl2ZT9MKE4pOihiPXAucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobkwocC5zbGljZVNlcmlhbGl6ZSh7c3RhcnQ6bS5lbmQsZW5kOnAubm93KCl9KSkpLGkuZW50ZXIoImxhYmVsRW5kIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoTiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxFbmQiKSxfKTpmKE4pfWZ1bmN0aW9uIF8oTil7cmV0dXJuIE49PT00MD9pLmF0dGVtcHQoS1JlLGEsYj9hOkwpKE4pOk49PT05MT9pLmF0dGVtcHQoWVJlLGEsYj9pLmF0dGVtcHQoWFJlLGEsTCk6TCkoTik6Yj9hKE4pOkwoTil9ZnVuY3Rpb24gTChOKXtyZXR1cm4gbS5fYmFsYW5jZWQ9ITAsZihOKX19ZnVuY3Rpb24gdGplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKF8pe3JldHVybiBpLmVudGVyKCJyZXNvdXJjZSIpLGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKF8pLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSx2UChpLHYpfWZ1bmN0aW9uIHYoXyl7cmV0dXJuIF89PT00MT9FKF8pOlZGdChpLG0sZiwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKF8pfWZ1bmN0aW9uIG0oXyl7cmV0dXJuIG52KF8pP3ZQKGksYikoXyk6RShfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09MzR8fF89PT0zOXx8Xz09PTQwP1dGdChpLHZQKGksRSksZiwicmVzb3VyY2VUaXRsZSIsInJlc291cmNlVGl0bGVNYXJrZXIiLCJyZXNvdXJjZVRpdGxlU3RyaW5nIikoXyk6RShfKX1mdW5jdGlvbiBFKF8pe3JldHVybiBfPT09NDE/KGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKF8pLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpLmV4aXQoInJlc291cmNlIiksYSk6ZihfKX19ZnVuY3Rpb24gZWplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHY7ZnVuY3Rpb24gdihiKXtyZXR1cm4gVUZ0LmNhbGwocCxpLG0sZiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWFya2VyIiwicmVmZXJlbmNlU3RyaW5nIikoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gcC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhuTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpKT9hKGIpOmYoYil9fWZ1bmN0aW9uIG5qZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigicmVmZXJlbmNlIiksaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksdn1mdW5jdGlvbiB2KG0pe3JldHVybiBtPT09OTM/KGkuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgicmVmZXJlbmNlIiksYSk6ZihtKX19Y29uc3QgcmplPXtuYW1lOiJsYWJlbFN0YXJ0SW1hZ2UiLHRva2VuaXplOmlqZSxyZXNvbHZlQWxsOlMwdC5yZXNvbHZlQWxsfTtmdW5jdGlvbiBpamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdjtmdW5jdGlvbiB2KEUpe3JldHVybiBpLmVudGVyKCJsYWJlbEltYWdlIiksaS5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpLGkuY29uc3VtZShFKSxpLmV4aXQoImxhYmVsSW1hZ2VNYXJrZXIiKSxtfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIEU9PT05MT8oaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxJbWFnZSIpLGIpOmYoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gRT09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoRSk6YShFKX19Y29uc3Qgc2plPXtuYW1lOiJsYWJlbFN0YXJ0TGluayIsdG9rZW5pemU6YWplLHJlc29sdmVBbGw6UzB0LnJlc29sdmVBbGx9O2Z1bmN0aW9uIGFqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoYil7cmV0dXJuIGkuZW50ZXIoImxhYmVsTGluayIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsTGluayIpLG19ZnVuY3Rpb24gbShiKXtyZXR1cm4gYj09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoYik6YShiKX19Y29uc3QgQTB0PXtuYW1lOiJsaW5lRW5kaW5nIix0b2tlbml6ZTpvamV9O2Z1bmN0aW9uIG9qZShpLGEpe3JldHVybiBmO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksR3UoaSxhLCJsaW5lUHJlZml4Iil9fWNvbnN0IGhLPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTpjamV9O2Z1bmN0aW9uIGNqZShpLGEsZil7bGV0IHA9MCx2O3JldHVybiBtO2Z1bmN0aW9uIG0oXyl7cmV0dXJuIGkuZW50ZXIoInRoZW1hdGljQnJlYWsiKSx2PV8sYihfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09dj8oaS5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksRShfKSk6TmYoXyk/R3UoaSxiLCJ3aGl0ZXNwYWNlIikoXyk6cDwzfHxfIT09bnVsbCYmIU5hKF8pP2YoXyk6KGkuZXhpdCgidGhlbWF0aWNCcmVhayIpLGEoXykpfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIF89PT12PyhpLmNvbnN1bWUoXykscCsrLEUpOihpLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLGIoXykpfX1jb25zdCBmcD17bmFtZToibGlzdCIsdG9rZW5pemU6aGplLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6ZmplfSxleGl0OmdqZX0sdWplPXt0b2tlbml6ZTpwamUscGFydGlhbDohMH0sbGplPXt0b2tlbml6ZTpkamUscGFydGlhbDohMH07ZnVuY3Rpb24gaGplKGksYSxmKXtjb25zdCBwPXRoaXMsdj1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07bGV0IG09diYmdlsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3ZbMl0uc2xpY2VTZXJpYWxpemUodlsxXSwhMCkubGVuZ3RoOjAsYj0wO3JldHVybiBFO2Z1bmN0aW9uIEUoUil7Y29uc3Qgej1wLmNvbnRhaW5lclN0YXRlLnR5cGV8fChSPT09NDJ8fFI9PT00M3x8Uj09PTQ1PyJsaXN0VW5vcmRlcmVkIjoibGlzdE9yZGVyZWQiKTtpZih6PT09Imxpc3RVbm9yZGVyZWQiPyFwLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Uj09PXAuY29udGFpbmVyU3RhdGUubWFya2VyOngwdChSKSl7aWYocC5jb250YWluZXJTdGF0ZS50eXBlfHwocC5jb250YWluZXJTdGF0ZS50eXBlPXosaS5lbnRlcih6LHtfY29udGFpbmVyOiEwfSkpLHo9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksUj09PTQyfHxSPT09NDU/aS5jaGVjayhoSyxmLEwpKFIpOkwoUik7aWYoIXAuaW50ZXJydXB0fHxSPT09NDkpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksaS5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLF8oUil9cmV0dXJuIGYoUil9ZnVuY3Rpb24gXyhSKXtyZXR1cm4geDB0KFIpJiYrK2I8MTA/KGkuY29uc3VtZShSKSxfKTooIXAuaW50ZXJydXB0fHxiPDIpJiYocC5jb250YWluZXJTdGF0ZS5tYXJrZXI/Uj09PXAuY29udGFpbmVyU3RhdGUubWFya2VyOlI9PT00MXx8Uj09PTQ2KT8oaS5leGl0KCJsaXN0SXRlbVZhbHVlIiksTChSKSk6ZihSKX1mdW5jdGlvbiBMKFIpe3JldHVybiBpLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpc3RJdGVtTWFya2VyIikscC5jb250YWluZXJTdGF0ZS5tYXJrZXI9cC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fFIsaS5jaGVjayhsSyxwLmludGVycnVwdD9mOk4saS5hdHRlbXB0KHVqZSxqLEIpKX1mdW5jdGlvbiBOKFIpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsbSsrLGooUil9ZnVuY3Rpb24gQihSKXtyZXR1cm4gTmYoUik/KGkuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShSKSxpLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGopOmYoUil9ZnVuY3Rpb24gaihSKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5zaXplPW0rcC5zbGljZVNlcmlhbGl6ZShpLmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxhKFIpfX1mdW5jdGlvbiBmamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpLmNoZWNrKGxLLHYsbSk7ZnVuY3Rpb24gdihFKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1wLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxwLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsR3UoaSxhLCJsaXN0SXRlbUluZGVudCIscC5jb250YWluZXJTdGF0ZS5zaXplKzEpKEUpfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFOZihFKT8ocC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAscC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxiKEUpKToocC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAscC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxpLmF0dGVtcHQobGplLGEsYikoRSkpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxwLmludGVycnVwdD12b2lkIDAsR3UoaSxpLmF0dGVtcHQoZnAsYSxmKSwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShFKX19ZnVuY3Rpb24gZGplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIEd1KGksdiwibGlzdEl0ZW1JbmRlbnQiLHAuY29udGFpbmVyU3RhdGUuc2l6ZSsxKTtmdW5jdGlvbiB2KG0pe2NvbnN0IGI9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZiWzJdLnNsaWNlU2VyaWFsaXplKGJbMV0sITApLmxlbmd0aD09PXAuY29udGFpbmVyU3RhdGUuc2l6ZT9hKG0pOmYobSl9fWZ1bmN0aW9uIGdqZShpKXtpLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBwamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gR3UoaSx2LCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLHAucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCsxKTtmdW5jdGlvbiB2KG0pe2NvbnN0IGI9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFOZihtKSYmYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/YShtKTpmKG0pfX1jb25zdCBZRnQ9e25hbWU6InNldGV4dFVuZGVybGluZSIsdG9rZW5pemU6dmplLHJlc29sdmVUbzpiamV9O2Z1bmN0aW9uIGJqZShpLGEpe2xldCBmPWkubGVuZ3RoLHAsdixtO2Zvcig7Zi0tOylpZihpW2ZdWzBdPT09ImVudGVyIil7aWYoaVtmXVsxXS50eXBlPT09ImNvbnRlbnQiKXtwPWY7YnJlYWt9aVtmXVsxXS50eXBlPT09InBhcmFncmFwaCImJih2PWYpfWVsc2UgaVtmXVsxXS50eXBlPT09ImNvbnRlbnQiJiZpLnNwbGljZShmLDEpLCFtJiZpW2ZdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJihtPWYpO2NvbnN0IGI9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfTtyZXR1cm4gaVt2XVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIsbT8oaS5zcGxpY2UodiwwLFsiZW50ZXIiLGIsYV0pLGkuc3BsaWNlKG0rMSwwLFsiZXhpdCIsaVtwXVsxXSxhXSksaVtwXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLmVuZCkpOmlbcF1bMV09YixpLnB1c2goWyJleGl0IixiLGFdKSxpfWZ1bmN0aW9uIHZqZShpLGEsZil7Y29uc3QgcD10aGlzO2xldCB2PXAuZXZlbnRzLmxlbmd0aCxtLGI7Zm9yKDt2LS07KWlmKHAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJnAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJnAuZXZlbnRzW3ZdWzFdLnR5cGUhPT0iY29udGVudCIpe2I9cC5ldmVudHNbdl1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiBFO2Z1bmN0aW9uIEUoTil7cmV0dXJuIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXSYmKHAuaW50ZXJydXB0fHxiKT8oaS5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmUiKSxpLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksbT1OLF8oTikpOmYoTil9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PW0/KGkuY29uc3VtZShOKSxfKTooaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksR3UoaSxMLCJsaW5lU3VmZml4IikoTikpfWZ1bmN0aW9uIEwoTil7cmV0dXJuIE49PT1udWxsfHxOYShOKT8oaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpLGEoTikpOmYoTil9fWNvbnN0IHdqZT17dG9rZW5pemU6bWplfTtmdW5jdGlvbiBtamUoaSl7Y29uc3QgYT10aGlzLGY9aS5hdHRlbXB0KGxLLHAsaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsdixHdShpLGkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csdixpLmF0dGVtcHQoX1JlLHYpKSwibGluZVByZWZpeCIpKSk7cmV0dXJuIGY7ZnVuY3Rpb24gcChtKXtpZihtPT09bnVsbCl7aS5jb25zdW1lKG0pO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKG0pLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfWZ1bmN0aW9uIHYobSl7aWYobT09PW51bGwpe2kuY29uc3VtZShtKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobSksaS5leGl0KCJsaW5lRW5kaW5nIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfX1jb25zdCB5amU9e3Jlc29sdmVBbGw6UUZ0KCl9LHhqZT1YRnQoInN0cmluZyIpLGtqZT1YRnQoInRleHQiKTtmdW5jdGlvbiBYRnQoaSl7cmV0dXJue3Rva2VuaXplOmEscmVzb2x2ZUFsbDpRRnQoaT09PSJ0ZXh0Ij9FamU6dm9pZCAwKX07ZnVuY3Rpb24gYShmKXtjb25zdCBwPXRoaXMsdj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW2ldLG09Zi5hdHRlbXB0KHYsYixFKTtyZXR1cm4gYjtmdW5jdGlvbiBiKE4pe3JldHVybiBMKE4pP20oTik6RShOKX1mdW5jdGlvbiBFKE4pe2lmKE49PT1udWxsKXtmLmNvbnN1bWUoTik7cmV0dXJufXJldHVybiBmLmVudGVyKCJkYXRhIiksZi5jb25zdW1lKE4pLF99ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTChOKT8oZi5leGl0KCJkYXRhIiksbShOKSk6KGYuY29uc3VtZShOKSxfKX1mdW5jdGlvbiBMKE4pe2lmKE49PT1udWxsKXJldHVybiEwO2NvbnN0IEI9dltOXTtsZXQgaj0tMTtpZihCKWZvcig7KytqPEIubGVuZ3RoOyl7Y29uc3QgUj1CW2pdO2lmKCFSLnByZXZpb3VzfHxSLnByZXZpb3VzLmNhbGwocCxwLnByZXZpb3VzKSlyZXR1cm4hMH1yZXR1cm4hMX19fWZ1bmN0aW9uIFFGdChpKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGYscCl7bGV0IHY9LTEsbTtmb3IoOysrdjw9Zi5sZW5ndGg7KW09PT12b2lkIDA/Zlt2XSYmZlt2XVsxXS50eXBlPT09ImRhdGEiJiYobT12LHYrKyk6KCFmW3ZdfHxmW3ZdWzFdLnR5cGUhPT0iZGF0YSIpJiYodiE9PW0rMiYmKGZbbV1bMV0uZW5kPWZbdi0xXVsxXS5lbmQsZi5zcGxpY2UobSsyLHYtbS0yKSx2PW0rMiksbT12b2lkIDApO3JldHVybiBpP2koZixwKTpmfX1mdW5jdGlvbiBFamUoaSxhKXtsZXQgZj0wO2Zvcig7KytmPD1pLmxlbmd0aDspaWYoKGY9PT1pLmxlbmd0aHx8aVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmaVtmLTFdWzFdLnR5cGU9PT0iZGF0YSIpe2NvbnN0IHA9aVtmLTFdWzFdLHY9YS5zbGljZVN0cmVhbShwKTtsZXQgbT12Lmxlbmd0aCxiPS0xLEU9MCxfO2Zvcig7bS0tOyl7Y29uc3QgTD12W21dO2lmKHR5cGVvZiBMPT0ic3RyaW5nIil7Zm9yKGI9TC5sZW5ndGg7TC5jaGFyQ29kZUF0KGItMSk9PT0zMjspRSsrLGItLTtpZihiKWJyZWFrO2I9LTF9ZWxzZSBpZihMPT09LTIpXz0hMCxFKys7ZWxzZSBpZihMIT09LTEpe20rKzticmVha319aWYoRSl7Y29uc3QgTD17dHlwZTpmPT09aS5sZW5ndGh8fF98fEU8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7bGluZTpwLmVuZC5saW5lLGNvbHVtbjpwLmVuZC5jb2x1bW4tRSxvZmZzZXQ6cC5lbmQub2Zmc2V0LUUsX2luZGV4OnAuc3RhcnQuX2luZGV4K20sX2J1ZmZlckluZGV4Om0/YjpwLnN0YXJ0Ll9idWZmZXJJbmRleCtifSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxwLmVuZCl9O3AuZW5kPU9iamVjdC5hc3NpZ24oe30sTC5zdGFydCkscC5zdGFydC5vZmZzZXQ9PT1wLmVuZC5vZmZzZXQ/T2JqZWN0LmFzc2lnbihwLEwpOihpLnNwbGljZShmLDAsWyJlbnRlciIsTCxhXSxbImV4aXQiLEwsYV0pLGYrPTIpfWYrK31yZXR1cm4gaX1mdW5jdGlvbiBUamUoaSxhLGYpe2xldCBwPU9iamVjdC5hc3NpZ24oZj9PYmplY3QuYXNzaWduKHt9LGYpOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9LHtfaW5kZXg6MCxfYnVmZmVySW5kZXg6LTF9KTtjb25zdCB2PXt9LG09W107bGV0IGI9W10sRT1bXTtjb25zdCBfPXtjb25zdW1lOnV0LGVudGVyOmJ0LGV4aXQ6bXQsYXR0ZW1wdDpodCh5dCksY2hlY2s6aHQoZHQpLGludGVycnVwdDpodChkdCx7aW50ZXJydXB0OiEwfSl9LEw9e3ByZXZpb3VzOm51bGwsY29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGV2ZW50czpbXSxwYXJzZXI6aSxzbGljZVN0cmVhbTpSLHNsaWNlU2VyaWFsaXplOmosbm93OnosZGVmaW5lU2tpcDpLLHdyaXRlOkJ9O2xldCBOPWEudG9rZW5pemUuY2FsbChMLF8pO3JldHVybiBhLnJlc29sdmVBbGwmJm0ucHVzaChhKSxMO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIGI9ZXYoYixVKSxpdCgpLGJbYi5sZW5ndGgtMV0hPT1udWxsP1tdOih3dChhLDApLEwuZXZlbnRzPUUwdChtLEwuZXZlbnRzLEwpLEwuZXZlbnRzKX1mdW5jdGlvbiBqKFUseHQpe3JldHVybiBfamUoUihVKSx4dCl9ZnVuY3Rpb24gUihVKXtyZXR1cm4gQ2plKGIsVSl9ZnVuY3Rpb24geigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHApfWZ1bmN0aW9uIEsoVSl7dltVLmxpbmVdPVUuY29sdW1uLHB0KCl9ZnVuY3Rpb24gaXQoKXtsZXQgVTtmb3IoO3AuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgeHQ9YltwLl9pbmRleF07aWYodHlwZW9mIHh0PT0ic3RyaW5nIilmb3IoVT1wLl9pbmRleCxwLl9idWZmZXJJbmRleDwwJiYocC5fYnVmZmVySW5kZXg9MCk7cC5faW5kZXg9PT1VJiZwLl9idWZmZXJJbmRleDx4dC5sZW5ndGg7KXN0KHh0LmNoYXJDb2RlQXQocC5fYnVmZmVySW5kZXgpKTtlbHNlIHN0KHh0KX19ZnVuY3Rpb24gc3QoVSl7Tj1OKFUpfWZ1bmN0aW9uIHV0KFUpe05hKFUpPyhwLmxpbmUrKyxwLmNvbHVtbj0xLHAub2Zmc2V0Kz1VPT09LTM/MjoxLHB0KCkpOlUhPT0tMSYmKHAuY29sdW1uKysscC5vZmZzZXQrKykscC5fYnVmZmVySW5kZXg8MD9wLl9pbmRleCsrOihwLl9idWZmZXJJbmRleCsrLHAuX2J1ZmZlckluZGV4PT09YltwLl9pbmRleF0ubGVuZ3RoJiYocC5fYnVmZmVySW5kZXg9LTEscC5faW5kZXgrKykpLEwucHJldmlvdXM9VX1mdW5jdGlvbiBidChVLHh0KXtjb25zdCBudD14dHx8e307cmV0dXJuIG50LnR5cGU9VSxudC5zdGFydD16KCksTC5ldmVudHMucHVzaChbImVudGVyIixudCxMXSksRS5wdXNoKG50KSxudH1mdW5jdGlvbiBtdChVKXtjb25zdCB4dD1FLnBvcCgpO3JldHVybiB4dC5lbmQ9eigpLEwuZXZlbnRzLnB1c2goWyJleGl0Iix4dCxMXSkseHR9ZnVuY3Rpb24geXQoVSx4dCl7d3QoVSx4dC5mcm9tKX1mdW5jdGlvbiBkdChVLHh0KXt4dC5yZXN0b3JlKCl9ZnVuY3Rpb24gaHQoVSx4dCl7cmV0dXJuIG50O2Z1bmN0aW9uIG50KE90LE50LHF0KXtsZXQgQ3QsWixUdCxIdDtyZXR1cm4gQXJyYXkuaXNBcnJheShPdCk/RnQoT3QpOiJ0b2tlbml6ZSJpbiBPdD9GdChbT3RdKTpJdChPdCk7ZnVuY3Rpb24gSXQodmUpe3JldHVybiBHZTtmdW5jdGlvbiBHZShLZSl7Y29uc3Qgd2U9S2UhPT1udWxsJiZ2ZVtLZV0sX2U9S2UhPT1udWxsJiZ2ZS5udWxsLCR0PVsuLi5BcnJheS5pc0FycmF5KHdlKT93ZTp3ZT9bd2VdOltdLC4uLkFycmF5LmlzQXJyYXkoX2UpP19lOl9lP1tfZV06W11dO3JldHVybiBGdCgkdCkoS2UpfX1mdW5jdGlvbiBGdCh2ZSl7cmV0dXJuIEN0PXZlLFo9MCx2ZS5sZW5ndGg9PT0wP3F0OmtlKHZlW1pdKX1mdW5jdGlvbiBrZSh2ZSl7cmV0dXJuIEdlO2Z1bmN0aW9uIEdlKEtlKXtyZXR1cm4gSHQ9WCgpLFR0PXZlLHZlLnBhcnRpYWx8fChMLmN1cnJlbnRDb25zdHJ1Y3Q9dmUpLHZlLm5hbWUmJkwucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKHZlLm5hbWUpP01lKCk6dmUudG9rZW5pemUuY2FsbCh4dD9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoTCkseHQpOkwsXyxwbixNZSkoS2UpfX1mdW5jdGlvbiBwbih2ZSl7cmV0dXJuIFUoVHQsSHQpLE50fWZ1bmN0aW9uIE1lKHZlKXtyZXR1cm4gSHQucmVzdG9yZSgpLCsrWjxDdC5sZW5ndGg/a2UoQ3RbWl0pOnF0fX19ZnVuY3Rpb24gd3QoVSx4dCl7VS5yZXNvbHZlQWxsJiYhbS5pbmNsdWRlcyhVKSYmbS5wdXNoKFUpLFUucmVzb2x2ZSYmdjMoTC5ldmVudHMseHQsTC5ldmVudHMubGVuZ3RoLXh0LFUucmVzb2x2ZShMLmV2ZW50cy5zbGljZSh4dCksTCkpLFUucmVzb2x2ZVRvJiYoTC5ldmVudHM9VS5yZXNvbHZlVG8oTC5ldmVudHMsTCkpfWZ1bmN0aW9uIFgoKXtjb25zdCBVPXooKSx4dD1MLnByZXZpb3VzLG50PUwuY3VycmVudENvbnN0cnVjdCxPdD1MLmV2ZW50cy5sZW5ndGgsTnQ9QXJyYXkuZnJvbShFKTtyZXR1cm57cmVzdG9yZTpxdCxmcm9tOk90fTtmdW5jdGlvbiBxdCgpe3A9VSxMLnByZXZpb3VzPXh0LEwuY3VycmVudENvbnN0cnVjdD1udCxMLmV2ZW50cy5sZW5ndGg9T3QsRT1OdCxwdCgpfX1mdW5jdGlvbiBwdCgpe3AubGluZSBpbiB2JiZwLmNvbHVtbjwyJiYocC5jb2x1bW49dltwLmxpbmVdLHAub2Zmc2V0Kz12W3AubGluZV0tMSl9fWZ1bmN0aW9uIENqZShpLGEpe2NvbnN0IGY9YS5zdGFydC5faW5kZXgscD1hLnN0YXJ0Ll9idWZmZXJJbmRleCx2PWEuZW5kLl9pbmRleCxtPWEuZW5kLl9idWZmZXJJbmRleDtsZXQgYjtyZXR1cm4gZj09PXY/Yj1baVtmXS5zbGljZShwLG0pXTooYj1pLnNsaWNlKGYsdikscD4tMSYmKGJbMF09YlswXS5zbGljZShwKSksbT4wJiZiLnB1c2goaVt2XS5zbGljZSgwLG0pKSksYn1mdW5jdGlvbiBfamUoaSxhKXtsZXQgZj0tMTtjb25zdCBwPVtdO2xldCB2O2Zvcig7KytmPGkubGVuZ3RoOyl7Y29uc3QgbT1pW2ZdO2xldCBiO2lmKHR5cGVvZiBtPT0ic3RyaW5nIiliPW07ZWxzZSBzd2l0Y2gobSl7Y2FzZS01OntiPSJcciI7YnJlYWt9Y2FzZS00OntiPWAKYDticmVha31jYXNlLTM6e2I9YFxyCmA7YnJlYWt9Y2FzZS0yOntiPWE/IiAiOiIJIjticmVha31jYXNlLTE6e2lmKCFhJiZ2KWNvbnRpbnVlO2I9IiAiO2JyZWFrfWRlZmF1bHQ6Yj1TdHJpbmcuZnJvbUNoYXJDb2RlKG0pfXY9bT09PS0yLHAucHVzaChiKX1yZXR1cm4gcC5qb2luKCIiKX1jb25zdCBTamU9e1s0Ml06ZnAsWzQzXTpmcCxbNDVdOmZwLFs0OF06ZnAsWzQ5XTpmcCxbNTBdOmZwLFs1MV06ZnAsWzUyXTpmcCxbNTNdOmZwLFs1NF06ZnAsWzU1XTpmcCxbNTZdOmZwLFs1N106ZnAsWzYyXTpqRnR9LEFqZT17WzkxXTpJUmV9LExqZT17Wy0yXTpfMHQsWy0xXTpfMHQsWzMyXTpfMHR9LE1qZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbNDIsOTVdfSxjb250ZW50SW5pdGlhbDpBamUsZGlzYWJsZTp7bnVsbDpbXX0sZG9jdW1lbnQ6U2plLGZsb3c6e1szNV06QlJlLFs0Ml06aEssWzQ1XTpbWUZ0LGhLXSxbNjBdOnpSZSxbNjFdOllGdCxbOTVdOmhLLFs5Nl06SEZ0LFsxMjZdOkhGdH0sZmxvd0luaXRpYWw6TGplLGluc2lkZVNwYW46e251bGw6W1QwdCx5amVdfSxzdHJpbmc6e1szOF06cUZ0LFs5Ml06JEZ0fSx0ZXh0OntbLTVdOkEwdCxbLTRdOkEwdCxbLTNdOkEwdCxbMzNdOnJqZSxbMzhdOnFGdCxbNDJdOlQwdCxbNjBdOlt1UmUsVVJlXSxbOTFdOnNqZSxbOTJdOltQUmUsJEZ0XSxbOTNdOlMwdCxbOTVdOlQwdCxbOTZdOnhSZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7ZnVuY3Rpb24gSWplKGk9e30pe2NvbnN0IGE9S0JlKFtNamVdLmNvbmNhdChpLmV4dGVuc2lvbnN8fFtdKSksZj17ZGVmaW5lZDpbXSxsYXp5Ont9LGNvbnN0cnVjdHM6YSxjb250ZW50OnAoblJlKSxkb2N1bWVudDpwKGlSZSksZmxvdzpwKHdqZSksc3RyaW5nOnAoeGplKSx0ZXh0OnAoa2plKX07cmV0dXJuIGY7ZnVuY3Rpb24gcCh2KXtyZXR1cm4gbTtmdW5jdGlvbiBtKGIpe3JldHVybiBUamUoZix2LGIpfX19Y29uc3QgWkZ0PS9bXDBcdFxuXHJdL2c7ZnVuY3Rpb24gRGplKCl7bGV0IGk9MSxhPSIiLGY9ITAscDtyZXR1cm4gdjtmdW5jdGlvbiB2KG0sYixFKXtjb25zdCBfPVtdO2xldCBMLE4sQixqLFI7Zm9yKG09YSttLnRvU3RyaW5nKGIpLEI9MCxhPSIiLGYmJihtLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmQisrLGY9dm9pZCAwKTtCPG0ubGVuZ3RoOyl7aWYoWkZ0Lmxhc3RJbmRleD1CLEw9WkZ0LmV4ZWMobSksaj1MJiZMLmluZGV4IT09dm9pZCAwP0wuaW5kZXg6bS5sZW5ndGgsUj1tLmNoYXJDb2RlQXQoaiksIUwpe2E9bS5zbGljZShCKTticmVha31pZihSPT09MTAmJkI9PT1qJiZwKV8ucHVzaCgtMykscD12b2lkIDA7ZWxzZSBzd2l0Y2gocCYmKF8ucHVzaCgtNSkscD12b2lkIDApLEI8aiYmKF8ucHVzaChtLnNsaWNlKEIsaikpLGkrPWotQiksUil7Y2FzZSAwOntfLnB1c2goNjU1MzMpLGkrKzticmVha31jYXNlIDk6e2ZvcihOPU1hdGguY2VpbChpLzQpKjQsXy5wdXNoKC0yKTtpKys8TjspXy5wdXNoKC0xKTticmVha31jYXNlIDEwOntfLnB1c2goLTQpLGk9MTticmVha31kZWZhdWx0OnA9ITAsaT0xfUI9aisxfXJldHVybiBFJiYocCYmXy5wdXNoKC01KSxhJiZfLnB1c2goYSksXy5wdXNoKG51bGwpKSxffX1mdW5jdGlvbiBPamUoaSl7Zm9yKDshR0Z0KGkpOyk7cmV0dXJuIGl9ZnVuY3Rpb24gSkZ0KGksYSl7Y29uc3QgZj1OdW1iZXIucGFyc2VJbnQoaSxhKTtyZXR1cm4gZjw5fHxmPT09MTF8fGY+MTMmJmY8MzJ8fGY+MTI2JiZmPDE2MHx8Zj41NTI5NSYmZjw1NzM0NHx8Zj42NDk3NSYmZjw2NTAwOHx8KGYmNjU1MzUpPT09NjU1MzV8fChmJjY1NTM1KT09PTY1NTM0fHxmPjExMTQxMTE/Iu+/vSI6U3RyaW5nLmZyb21DaGFyQ29kZShmKX1jb25zdCBOamU9L1xcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcZHsxLDd9fHhbXGRhLWZdezEsNn0pfFtcZGEtel17MSwzMX0pOy9naTtmdW5jdGlvbiBQamUoaSl7cmV0dXJuIGkucmVwbGFjZShOamUsRmplKX1mdW5jdGlvbiBGamUoaSxhLGYpe2lmKGEpcmV0dXJuIGE7aWYoZi5jaGFyQ29kZUF0KDApPT09MzUpe2NvbnN0IHY9Zi5jaGFyQ29kZUF0KDEpLG09dj09PTEyMHx8dj09PTg4O3JldHVybiBKRnQoZi5zbGljZShtPzI6MSksbT8xNjoxMCl9cmV0dXJuIEMwdChmKXx8aX1mdW5jdGlvbiBmSyhpKXtyZXR1cm4haXx8dHlwZW9mIGkhPSJvYmplY3QiPyIiOiJwb3NpdGlvbiJpbiBpfHwidHlwZSJpbiBpP3RCdChpLnBvc2l0aW9uKToic3RhcnQiaW4gaXx8ImVuZCJpbiBpP3RCdChpKToibGluZSJpbiBpfHwiY29sdW1uImluIGk/TDB0KGkpOiIifWZ1bmN0aW9uIEwwdChpKXtyZXR1cm4gZUJ0KGkmJmkubGluZSkrIjoiK2VCdChpJiZpLmNvbHVtbil9ZnVuY3Rpb24gdEJ0KGkpe3JldHVybiBMMHQoaSYmaS5zdGFydCkrIi0iK0wwdChpJiZpLmVuZCl9ZnVuY3Rpb24gZUJ0KGkpe3JldHVybiBpJiZ0eXBlb2YgaT09Im51bWJlciI/aToxfWNvbnN0IG5CdD17fS5oYXNPd25Qcm9wZXJ0eSxyQnQ9ZnVuY3Rpb24oaSxhLGYpe3JldHVybiB0eXBlb2YgYSE9InN0cmluZyImJihmPWEsYT12b2lkIDApLEJqZShmKShPamUoSWplKGYpLmRvY3VtZW50KCkud3JpdGUoRGplKCkoaSxhLCEwKSkpKX07ZnVuY3Rpb24gQmplKGkpe2NvbnN0IGE9e3RyYW5zZm9ybXM6W10sY2FuQ29udGFpbkVvbHM6WyJlbXBoYXNpcyIsImZyYWdtZW50IiwiaGVhZGluZyIsInBhcmFncmFwaCIsInN0cm9uZyJdLGVudGVyOnthdXRvbGluazpFKHlhKSxhdXRvbGlua1Byb3RvY29sOlUsYXV0b2xpbmtFbWFpbDpVLGF0eEhlYWRpbmc6RShOZSksYmxvY2tRdW90ZTpFKCR0KSxjaGFyYWN0ZXJFc2NhcGU6VSxjaGFyYWN0ZXJSZWZlcmVuY2U6VSxjb2RlRmVuY2VkOkUocmUpLGNvZGVGZW5jZWRGZW5jZUluZm86Xyxjb2RlRmVuY2VkRmVuY2VNZXRhOl8sY29kZUluZGVudGVkOkUocmUsXyksY29kZVRleHQ6RShpZSxfKSxjb2RlVGV4dERhdGE6VSxkYXRhOlUsY29kZUZsb3dWYWx1ZTpVLGRlZmluaXRpb246RShPZSksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOl8sZGVmaW5pdGlvbkxhYmVsU3RyaW5nOl8sZGVmaW5pdGlvblRpdGxlU3RyaW5nOl8sZW1waGFzaXM6RShvZSksaGFyZEJyZWFrRXNjYXBlOkUobWUpLGhhcmRCcmVha1RyYWlsaW5nOkUobWUpLGh0bWxGbG93OkUoY24sXyksaHRtbEZsb3dEYXRhOlUsaHRtbFRleHQ6RShjbixfKSxodG1sVGV4dERhdGE6VSxpbWFnZTpFKGxpKSxsYWJlbDpfLGxpbms6RSh5YSksbGlzdEl0ZW06RShPbyksbGlzdEl0ZW1WYWx1ZTp6LGxpc3RPcmRlcmVkOkUoZGEsUiksbGlzdFVub3JkZXJlZDpFKGRhKSxwYXJhZ3JhcGg6RShkcykscmVmZXJlbmNlOk1lLHJlZmVyZW5jZVN0cmluZzpfLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6XyxyZXNvdXJjZVRpdGxlU3RyaW5nOl8sc2V0ZXh0SGVhZGluZzpFKE5lKSxzdHJvbmc6RShEciksdGhlbWF0aWNCcmVhazpFKGRpKX0sZXhpdDp7YXR4SGVhZGluZzpOKCksYXR4SGVhZGluZ1NlcXVlbmNlOmh0LGF1dG9saW5rOk4oKSxhdXRvbGlua0VtYWlsOl9lLGF1dG9saW5rUHJvdG9jb2w6d2UsYmxvY2tRdW90ZTpOKCksY2hhcmFjdGVyRXNjYXBlVmFsdWU6eHQsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6R2UsY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzpHZSxjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTpLZSxjb2RlRmVuY2VkOk4odXQpLGNvZGVGZW5jZWRGZW5jZTpzdCxjb2RlRmVuY2VkRmVuY2VJbmZvOkssY29kZUZlbmNlZEZlbmNlTWV0YTppdCxjb2RlRmxvd1ZhbHVlOnh0LGNvZGVJbmRlbnRlZDpOKGJ0KSxjb2RlVGV4dDpOKEN0KSxjb2RlVGV4dERhdGE6eHQsZGF0YTp4dCxkZWZpbml0aW9uOk4oKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6ZHQsZGVmaW5pdGlvbkxhYmVsU3RyaW5nOm10LGRlZmluaXRpb25UaXRsZVN0cmluZzp5dCxlbXBoYXNpczpOKCksaGFyZEJyZWFrRXNjYXBlOk4oT3QpLGhhcmRCcmVha1RyYWlsaW5nOk4oT3QpLGh0bWxGbG93Ok4oTnQpLGh0bWxGbG93RGF0YTp4dCxodG1sVGV4dDpOKHF0KSxodG1sVGV4dERhdGE6eHQsaW1hZ2U6TihUdCksbGFiZWw6SXQsbGFiZWxUZXh0Okh0LGxpbmVFbmRpbmc6bnQsbGluazpOKFopLGxpc3RJdGVtOk4oKSxsaXN0T3JkZXJlZDpOKCksbGlzdFVub3JkZXJlZDpOKCkscGFyYWdyYXBoOk4oKSxyZWZlcmVuY2VTdHJpbmc6dmUscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpGdCxyZXNvdXJjZVRpdGxlU3RyaW5nOmtlLHJlc291cmNlOnBuLHNldGV4dEhlYWRpbmc6TihwdCksc2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZTpYLHNldGV4dEhlYWRpbmdUZXh0Ond0LHN0cm9uZzpOKCksdGhlbWF0aWNCcmVhazpOKCl9fTtpQnQoYSwoaXx8e30pLm1kYXN0RXh0ZW5zaW9uc3x8W10pO2NvbnN0IGY9e307cmV0dXJuIHA7ZnVuY3Rpb24gcChFZSl7bGV0IFluPXt0eXBlOiJyb290IixjaGlsZHJlbjpbXX07Y29uc3QgSGU9e3N0YWNrOltZbl0sdG9rZW5TdGFjazpbXSxjb25maWc6YSxlbnRlcjpMLGV4aXQ6QixidWZmZXI6XyxyZXN1bWU6aixzZXREYXRhOm0sZ2V0RGF0YTpifSxUaT1bXTtsZXQgZ249LTE7Zm9yKDsrK2duPEVlLmxlbmd0aDspaWYoRWVbZ25dWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxFZVtnbl1bMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkIilpZihFZVtnbl1bMF09PT0iZW50ZXIiKVRpLnB1c2goZ24pO2Vsc2V7Y29uc3Qga3M9VGkucG9wKCk7Z249dihFZSxrcyxnbil9Zm9yKGduPS0xOysrZ248RWUubGVuZ3RoOyl7Y29uc3Qga3M9YVtFZVtnbl1bMF1dO25CdC5jYWxsKGtzLEVlW2duXVsxXS50eXBlKSYma3NbRWVbZ25dWzFdLnR5cGVdLmNhbGwoT2JqZWN0LmFzc2lnbih7c2xpY2VTZXJpYWxpemU6RWVbZ25dWzJdLnNsaWNlU2VyaWFsaXplfSxIZSksRWVbZ25dWzFdKX1pZihIZS50b2tlblN0YWNrLmxlbmd0aD4wKXtjb25zdCBrcz1IZS50b2tlblN0YWNrW0hlLnRva2VuU3RhY2subGVuZ3RoLTFdOyhrc1sxXXx8c0J0KS5jYWxsKEhlLHZvaWQgMCxrc1swXSl9Zm9yKFluLnBvc2l0aW9uPXtzdGFydDp1ayhFZS5sZW5ndGg+MD9FZVswXVsxXS5zdGFydDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSksZW5kOnVrKEVlLmxlbmd0aD4wP0VlW0VlLmxlbmd0aC0yXVsxXS5lbmQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pfSxnbj0tMTsrK2duPGEudHJhbnNmb3Jtcy5sZW5ndGg7KVluPWEudHJhbnNmb3Jtc1tnbl0oWW4pfHxZbjtyZXR1cm4gWW59ZnVuY3Rpb24gdihFZSxZbixIZSl7bGV0IFRpPVluLTEsZ249LTEsa3M9ITEscWEsTGEsR3MsTm87Zm9yKDsrK1RpPD1IZTspe2NvbnN0IHZzPUVlW1RpXTtpZih2c1sxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHx2c1sxXS50eXBlPT09Imxpc3RPcmRlcmVkInx8dnNbMV0udHlwZT09PSJibG9ja1F1b3RlIj8odnNbMF09PT0iZW50ZXIiP2duKys6Z24tLSxObz12b2lkIDApOnZzWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIj92c1swXT09PSJlbnRlciImJihxYSYmIU5vJiYhZ24mJiFHcyYmKEdzPVRpKSxObz12b2lkIDApOnZzWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1WYWx1ZSJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1NYXJrZXIifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UifHwoTm89dm9pZCAwKSwhZ24mJnZzWzBdPT09ImVudGVyIiYmdnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCJ8fGduPT09LTEmJnZzWzBdPT09ImV4aXQiJiYodnNbMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkInx8dnNbMV0udHlwZT09PSJsaXN0T3JkZXJlZCIpKXtpZihxYSl7bGV0IG51PVRpO2ZvcihMYT12b2lkIDA7bnUtLTspe2NvbnN0ICRzPUVlW251XTtpZigkc1sxXS50eXBlPT09ImxpbmVFbmRpbmcifHwkc1sxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpe2lmKCRzWzBdPT09ImV4aXQiKWNvbnRpbnVlO0xhJiYoRWVbTGFdWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIsa3M9ITApLCRzWzFdLnR5cGU9ImxpbmVFbmRpbmciLExhPW51fWVsc2UgaWYoISgkc1sxXS50eXBlPT09ImxpbmVQcmVmaXgifHwkc1sxXS50eXBlPT09ImJsb2NrUXVvdGVQcmVmaXgifHwkc1sxXS50eXBlPT09ImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlInx8JHNbMV0udHlwZT09PSJibG9ja1F1b3RlTWFya2VyInx8JHNbMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCIpKWJyZWFrfUdzJiYoIUxhfHxHczxMYSkmJihxYS5fc3ByZWFkPSEwKSxxYS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxMYT9FZVtMYV1bMV0uc3RhcnQ6dnNbMV0uZW5kKSxFZS5zcGxpY2UoTGF8fFRpLDAsWyJleGl0IixxYSx2c1syXV0pLFRpKyssSGUrK312c1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKHFhPXt0eXBlOiJsaXN0SXRlbSIsX3NwcmVhZDohMSxzdGFydDpPYmplY3QuYXNzaWduKHt9LHZzWzFdLnN0YXJ0KX0sRWUuc3BsaWNlKFRpLDAsWyJlbnRlciIscWEsdnNbMl1dKSxUaSsrLEhlKyssR3M9dm9pZCAwLE5vPSEwKX19cmV0dXJuIEVlW1luXVsxXS5fc3ByZWFkPWtzLEhlfWZ1bmN0aW9uIG0oRWUsWW4pe2ZbRWVdPVlufWZ1bmN0aW9uIGIoRWUpe3JldHVybiBmW0VlXX1mdW5jdGlvbiBFKEVlLFluKXtyZXR1cm4gSGU7ZnVuY3Rpb24gSGUoVGkpe0wuY2FsbCh0aGlzLEVlKFRpKSxUaSksWW4mJlluLmNhbGwodGhpcyxUaSl9fWZ1bmN0aW9uIF8oKXt0aGlzLnN0YWNrLnB1c2goe3R5cGU6ImZyYWdtZW50IixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIEwoRWUsWW4sSGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLmNoaWxkcmVuLnB1c2goRWUpLHRoaXMuc3RhY2sucHVzaChFZSksdGhpcy50b2tlblN0YWNrLnB1c2goW1luLEhlXSksRWUucG9zaXRpb249e3N0YXJ0OnVrKFluLnN0YXJ0KX0sRWV9ZnVuY3Rpb24gTihFZSl7cmV0dXJuIFluO2Z1bmN0aW9uIFluKEhlKXtFZSYmRWUuY2FsbCh0aGlzLEhlKSxCLmNhbGwodGhpcyxIZSl9fWZ1bmN0aW9uIEIoRWUsWW4pe2NvbnN0IEhlPXRoaXMuc3RhY2sucG9wKCksVGk9dGhpcy50b2tlblN0YWNrLnBvcCgpO2lmKFRpKVRpWzBdLnR5cGUhPT1FZS50eXBlJiYoWW4/WW4uY2FsbCh0aGlzLEVlLFRpWzBdKTooVGlbMV18fHNCdCkuY2FsbCh0aGlzLEVlLFRpWzBdKSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitFZS50eXBlKyJgICgiK2ZLKHtzdGFydDpFZS5zdGFydCxlbmQ6RWUuZW5kfSkrIik6IGl04oCZcyBub3Qgb3BlbiIpO3JldHVybiBIZS5wb3NpdGlvbi5lbmQ9dWsoRWUuZW5kKSxIZX1mdW5jdGlvbiBqKCl7cmV0dXJuIFdCZSh0aGlzLnN0YWNrLnBvcCgpKX1mdW5jdGlvbiBSKCl7bSgiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIiwhMCl9ZnVuY3Rpb24geihFZSl7aWYoYigiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIikpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07WW4uc3RhcnQ9TnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLDEwKSxtKCJleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUiKX19ZnVuY3Rpb24gSygpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi5sYW5nPUVlfWZ1bmN0aW9uIGl0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1luLm1ldGE9RWV9ZnVuY3Rpb24gc3QoKXtiKCJmbG93Q29kZUluc2lkZSIpfHwodGhpcy5idWZmZXIoKSxtKCJmbG93Q29kZUluc2lkZSIsITApKX1mdW5jdGlvbiB1dCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi52YWx1ZT1FZS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKSxtKCJmbG93Q29kZUluc2lkZSIpfWZ1bmN0aW9uIGJ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO1luLnZhbHVlPUVlLnJlcGxhY2UoLyhccj9cbnxccikkL2csIiIpfWZ1bmN0aW9uIG10KEVlKXtjb25zdCBZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07SGUubGFiZWw9WW4sSGUuaWRlbnRpZmllcj1uTCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB5dCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi50aXRsZT1FZX1mdW5jdGlvbiBkdCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9RWV9ZnVuY3Rpb24gaHQoRWUpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoIVluLmRlcHRoKXtjb25zdCBIZT10aGlzLnNsaWNlU2VyaWFsaXplKEVlKS5sZW5ndGg7WW4uZGVwdGg9SGV9fWZ1bmN0aW9uIHd0KCl7bSgic2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyIsITApfWZ1bmN0aW9uIFgoRWUpe2NvbnN0IFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4uZGVwdGg9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSkuY2hhckNvZGVBdCgwKT09PTYxPzE6Mn1mdW5jdGlvbiBwdCgpe20oInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKX1mdW5jdGlvbiBVKEVlKXtjb25zdCBZbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2xldCBIZT1Zbi5jaGlsZHJlbltZbi5jaGlsZHJlbi5sZW5ndGgtMV07KCFIZXx8SGUudHlwZSE9PSJ0ZXh0IikmJihIZT1ucigpLEhlLnBvc2l0aW9uPXtzdGFydDp1ayhFZS5zdGFydCl9LFluLmNoaWxkcmVuLnB1c2goSGUpKSx0aGlzLnN0YWNrLnB1c2goSGUpfWZ1bmN0aW9uIHh0KEVlKXtjb25zdCBZbj10aGlzLnN0YWNrLnBvcCgpO1luLnZhbHVlKz10aGlzLnNsaWNlU2VyaWFsaXplKEVlKSxZbi5wb3NpdGlvbi5lbmQ9dWsoRWUuZW5kKX1mdW5jdGlvbiBudChFZSl7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBIZT1Zbi5jaGlsZHJlbltZbi5jaGlsZHJlbi5sZW5ndGgtMV07SGUucG9zaXRpb24uZW5kPXVrKEVlLmVuZCksbSgiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmYS5jYW5Db250YWluRW9scy5pbmNsdWRlcyhZbi50eXBlKSYmKFUuY2FsbCh0aGlzLEVlKSx4dC5jYWxsKHRoaXMsRWUpKX1mdW5jdGlvbiBPdCgpe20oImF0SGFyZEJyZWFrIiwhMCl9ZnVuY3Rpb24gTnQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gcXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gQ3QoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udmFsdWU9RWV9ZnVuY3Rpb24gWigpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3QgWW49YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0VlLnR5cGUrPSJSZWZlcmVuY2UiLEVlLnJlZmVyZW5jZVR5cGU9WW4sZGVsZXRlIEVlLnVybCxkZWxldGUgRWUudGl0bGV9ZWxzZSBkZWxldGUgRWUuaWRlbnRpZmllcixkZWxldGUgRWUubGFiZWw7bSgicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIFR0KCl7Y29uc3QgRWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJpblJlZmVyZW5jZSIpKXtjb25zdCBZbj1iKCJyZWZlcmVuY2VUeXBlIil8fCJzaG9ydGN1dCI7RWUudHlwZSs9IlJlZmVyZW5jZSIsRWUucmVmZXJlbmNlVHlwZT1ZbixkZWxldGUgRWUudXJsLGRlbGV0ZSBFZS50aXRsZX1lbHNlIGRlbGV0ZSBFZS5pZGVudGlmaWVyLGRlbGV0ZSBFZS5sYWJlbDttKCJyZWZlcmVuY2VUeXBlIil9ZnVuY3Rpb24gSHQoRWUpe2NvbnN0IFluPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMl07SGUubGFiZWw9UGplKFluKSxIZS5pZGVudGlmaWVyPW5MKFluKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEl0KCl7Y29uc3QgRWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXSxZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYobSgiaW5SZWZlcmVuY2UiLCEwKSxIZS50eXBlPT09ImxpbmsiKXtjb25zdCBUaT1FZS5jaGlsZHJlbjtIZS5jaGlsZHJlbj1UaX1lbHNlIEhlLmFsdD1Zbn1mdW5jdGlvbiBGdCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9RWV9ZnVuY3Rpb24ga2UoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLFluPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07WW4udGl0bGU9RWV9ZnVuY3Rpb24gcG4oKXttKCJpblJlZmVyZW5jZSIpfWZ1bmN0aW9uIE1lKCl7bSgicmVmZXJlbmNlVHlwZSIsImNvbGxhcHNlZCIpfWZ1bmN0aW9uIHZlKEVlKXtjb25zdCBZbj10aGlzLnJlc3VtZSgpLEhlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07SGUubGFiZWw9WW4sSGUuaWRlbnRpZmllcj1uTCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSkudG9Mb3dlckNhc2UoKSxtKCJyZWZlcmVuY2VUeXBlIiwiZnVsbCIpfWZ1bmN0aW9uIEdlKEVlKXttKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIixFZS50eXBlKX1mdW5jdGlvbiBLZShFZSl7Y29uc3QgWW49dGhpcy5zbGljZVNlcmlhbGl6ZShFZSksSGU9YigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpO2xldCBUaTtIZT8oVGk9SkZ0KFluLEhlPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KSxtKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIikpOlRpPUMwdChZbik7Y29uc3QgZ249dGhpcy5zdGFjay5wb3AoKTtnbi52YWx1ZSs9VGksZ24ucG9zaXRpb24uZW5kPXVrKEVlLmVuZCl9ZnVuY3Rpb24gd2UoRWUpe3h0LmNhbGwodGhpcyxFZSk7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSl9ZnVuY3Rpb24gX2UoRWUpe3h0LmNhbGwodGhpcyxFZSk7Y29uc3QgWW49dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtZbi51cmw9Im1haWx0bzoiK3RoaXMuc2xpY2VTZXJpYWxpemUoRWUpfWZ1bmN0aW9uICR0KCl7cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiByZSgpe3JldHVybnt0eXBlOiJjb2RlIixsYW5nOm51bGwsbWV0YTpudWxsLHZhbHVlOiIifX1mdW5jdGlvbiBpZSgpe3JldHVybnt0eXBlOiJpbmxpbmVDb2RlIix2YWx1ZToiIn19ZnVuY3Rpb24gT2UoKXtyZXR1cm57dHlwZToiZGVmaW5pdGlvbiIsaWRlbnRpZmllcjoiIixsYWJlbDpudWxsLHRpdGxlOm51bGwsdXJsOiIifX1mdW5jdGlvbiBvZSgpe3JldHVybnt0eXBlOiJlbXBoYXNpcyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIE5lKCl7cmV0dXJue3R5cGU6ImhlYWRpbmciLGRlcHRoOnZvaWQgMCxjaGlsZHJlbjpbXX19ZnVuY3Rpb24gbWUoKXtyZXR1cm57dHlwZToiYnJlYWsifX1mdW5jdGlvbiBjbigpe3JldHVybnt0eXBlOiJodG1sIix2YWx1ZToiIn19ZnVuY3Rpb24gbGkoKXtyZXR1cm57dHlwZToiaW1hZ2UiLHRpdGxlOm51bGwsdXJsOiIiLGFsdDpudWxsfX1mdW5jdGlvbiB5YSgpe3JldHVybnt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoiIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gZGEoRWUpe3JldHVybnt0eXBlOiJsaXN0IixvcmRlcmVkOkVlLnR5cGU9PT0ibGlzdE9yZGVyZWQiLHN0YXJ0Om51bGwsc3ByZWFkOkVlLl9zcHJlYWQsY2hpbGRyZW46W119fWZ1bmN0aW9uIE9vKEVlKXtyZXR1cm57dHlwZToibGlzdEl0ZW0iLHNwcmVhZDpFZS5fc3ByZWFkLGNoZWNrZWQ6bnVsbCxjaGlsZHJlbjpbXX19ZnVuY3Rpb24gZHMoKXtyZXR1cm57dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRHIoKXtyZXR1cm57dHlwZToic3Ryb25nIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gbnIoKXtyZXR1cm57dHlwZToidGV4dCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIGRpKCl7cmV0dXJue3R5cGU6InRoZW1hdGljQnJlYWsifX19ZnVuY3Rpb24gdWsoaSl7cmV0dXJue2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbixvZmZzZXQ6aS5vZmZzZXR9fWZ1bmN0aW9uIGlCdChpLGEpe2xldCBmPS0xO2Zvcig7KytmPGEubGVuZ3RoOyl7Y29uc3QgcD1hW2ZdO0FycmF5LmlzQXJyYXkocCk/aUJ0KGkscCk6UmplKGkscCl9fWZ1bmN0aW9uIFJqZShpLGEpe2xldCBmO2ZvcihmIGluIGEpaWYobkJ0LmNhbGwoYSxmKSl7aWYoZj09PSJjYW5Db250YWluRW9scyIpe2NvbnN0IHA9YVtmXTtwJiZpW2ZdLnB1c2goLi4ucCl9ZWxzZSBpZihmPT09InRyYW5zZm9ybXMiKXtjb25zdCBwPWFbZl07cCYmaVtmXS5wdXNoKC4uLnApfWVsc2UgaWYoZj09PSJlbnRlciJ8fGY9PT0iZXhpdCIpe2NvbnN0IHA9YVtmXTtwJiZPYmplY3QuYXNzaWduKGlbZl0scCl9fX1mdW5jdGlvbiBzQnQoaSxhKXt0aHJvdyBpP25ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK2kudHlwZSsiYCAoIitmSyh7c3RhcnQ6aS5zdGFydCxlbmQ6aS5lbmR9KSsiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiK2EudHlwZSsiYCwgIitmSyh7c3RhcnQ6YS5zdGFydCxlbmQ6YS5lbmR9KSsiKSBpcyBvcGVuIik6bmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiK2EudHlwZSsiYCwgIitmSyh7c3RhcnQ6YS5zdGFydCxlbmQ6YS5lbmR9KSsiKSBpcyBzdGlsbCBvcGVuIil9ZnVuY3Rpb24gamplKGkpe2NvbnN0IGE9aS5yZXBsYWNlKC9cbnsyLH0vZyxgCmApO3JldHVybiB3QShhKX1mdW5jdGlvbiAkamUoaSl7Y29uc3QgYT1qamUoaSkse2NoaWxkcmVuOmZ9PXJCdChhKSxwPVtbXV07bGV0IHY9MDtmdW5jdGlvbiBtKGIsRT0ibm9ybWFsIil7Yi50eXBlPT09InRleHQiP2IudmFsdWUuc3BsaXQoYApgKS5mb3JFYWNoKChMLE4pPT57TiE9PTAmJih2KysscC5wdXNoKFtdKSksTC5zcGxpdCgiICIpLmZvckVhY2goQj0+e0ImJnBbdl0ucHVzaCh7Y29udGVudDpCLHR5cGU6RX0pfSl9KTooYi50eXBlPT09InN0cm9uZyJ8fGIudHlwZT09PSJlbXBoYXNpcyIpJiZiLmNoaWxkcmVuLmZvckVhY2goXz0+e20oXyxiLnR5cGUpfSl9cmV0dXJuIGYuZm9yRWFjaChiPT57Yi50eXBlPT09InBhcmFncmFwaCImJmIuY2hpbGRyZW4uZm9yRWFjaChFPT57bShFKX0pfSkscH1mdW5jdGlvbiB6amUoaSl7Y29uc3R7Y2hpbGRyZW46YX09ckJ0KGkpO2Z1bmN0aW9uIGYocCl7cmV0dXJuIHAudHlwZT09PSJ0ZXh0Ij9wLnZhbHVlLnJlcGxhY2UoL1xuL2csIjxici8+Iik6cC50eXBlPT09InN0cm9uZyI/YDxzdHJvbmc+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L3N0cm9uZz5gOnAudHlwZT09PSJlbXBoYXNpcyI/YDxlbT4ke3AuY2hpbGRyZW4ubWFwKGYpLmpvaW4oIiIpfTwvZW0+YDpwLnR5cGU9PT0icGFyYWdyYXBoIj9gPHA+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L3A+YDpgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7cC50eXBlfWB9cmV0dXJuIGEubWFwKGYpLmpvaW4oIiIpfWZ1bmN0aW9uIHFqZShpKXtyZXR1cm4gSW50bC5TZWdtZW50ZXI/Wy4uLm5ldyBJbnRsLlNlZ21lbnRlcigpLnNlZ21lbnQoaSldLm1hcChhPT5hLnNlZ21lbnQpOlsuLi5pXX1mdW5jdGlvbiBIamUoaSxhKXtjb25zdCBmPXFqZShhLmNvbnRlbnQpO3JldHVybiBhQnQoaSxbXSxmLGEudHlwZSl9ZnVuY3Rpb24gYUJ0KGksYSxmLHApe2lmKGYubGVuZ3RoPT09MClyZXR1cm5be2NvbnRlbnQ6YS5qb2luKCIiKSx0eXBlOnB9LHtjb250ZW50OiIiLHR5cGU6cH1dO2NvbnN0W3YsLi4ubV09ZixiPVsuLi5hLHZdO3JldHVybiBpKFt7Y29udGVudDpiLmpvaW4oIiIpLHR5cGU6cH1dKT9hQnQoaSxiLG0scCk6KGEubGVuZ3RoPT09MCYmdiYmKGEucHVzaCh2KSxmLnNoaWZ0KCkpLFt7Y29udGVudDphLmpvaW4oIiIpLHR5cGU6cH0se2NvbnRlbnQ6Zi5qb2luKCIiKSx0eXBlOnB9XSl9ZnVuY3Rpb24gR2plKGksYSl7aWYoaS5zb21lKCh7Y29udGVudDpmfSk9PmYuaW5jbHVkZXMoYApgKSkpdGhyb3cgbmV3IEVycm9yKCJzcGxpdExpbmVUb0ZpdFdpZHRoIGRvZXMgbm90IHN1cHBvcnQgbmV3bGluZXMgaW4gdGhlIGxpbmUiKTtyZXR1cm4gTTB0KGksYSl9ZnVuY3Rpb24gTTB0KGksYSxmPVtdLHA9W10pe2lmKGkubGVuZ3RoPT09MClyZXR1cm4gcC5sZW5ndGg+MCYmZi5wdXNoKHApLGYubGVuZ3RoPjA/ZjpbXTtsZXQgdj0iIjtpWzBdLmNvbnRlbnQ9PT0iICImJih2PSIgIixpLnNoaWZ0KCkpO2NvbnN0IG09aS5zaGlmdCgpPz97Y29udGVudDoiICIsdHlwZToibm9ybWFsIn0sYj1bLi4ucF07aWYodiE9PSIiJiZiLnB1c2goe2NvbnRlbnQ6dix0eXBlOiJub3JtYWwifSksYi5wdXNoKG0pLGEoYikpcmV0dXJuIE0wdChpLGEsZixiKTtpZihwLmxlbmd0aD4wKWYucHVzaChwKSxpLnVuc2hpZnQobSk7ZWxzZSBpZihtLmNvbnRlbnQpe2NvbnN0W0UsX109SGplKGEsbSk7Zi5wdXNoKFtFXSksXy5jb250ZW50JiZpLnVuc2hpZnQoXyl9cmV0dXJuIE0wdChpLGEsZil9ZnVuY3Rpb24gVmplKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gVWplKGksYSxmLHAsdj0hMSl7Y29uc3QgbT1pLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLGI9bS5hcHBlbmQoInhodG1sOmRpdiIpLEU9YS5sYWJlbCxfPWEuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO2IuaHRtbChgCiAgICA8c3BhbiBjbGFzcz0iJHtffSAke3B9IiBgKyhhLmxhYmVsU3R5bGU/J3N0eWxlPSInK2EubGFiZWxTdHlsZSsnIic6IiIpKyI+IitFKyI8L3NwYW4+IiksVmplKGIsYS5sYWJlbFN0eWxlKSxiLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksYi5zdHlsZSgibWF4LXdpZHRoIixmKyJweCIpLGIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksdiYmYi5hdHRyKCJjbGFzcyIsImxhYmVsQmtnIik7bGV0IEw9Yi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIEwud2lkdGg9PT1mJiYoYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlIiksYi5zdHlsZSgid2hpdGUtc3BhY2UiLCJicmVhay1zcGFjZXMiKSxiLnN0eWxlKCJ3aWR0aCIsZisicHgiKSxMPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxtLnN0eWxlKCJ3aWR0aCIsTC53aWR0aCksbS5zdHlsZSgiaGVpZ2h0IixMLmhlaWdodCksbS5ub2RlKCl9ZnVuY3Rpb24gb0J0KGksYSxmKXtyZXR1cm4gaS5hcHBlbmQoInRzcGFuIikuYXR0cigiY2xhc3MiLCJ0ZXh0LW91dGVyLXRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsYSpmLS4xKyJlbSIpLmF0dHIoImR5IixmKyJlbSIpfWZ1bmN0aW9uIFdqZShpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgidGV4dCIpLHY9b0J0KHAsMSxhKTtjQnQodixmKTtjb25zdCBtPXYubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO3JldHVybiBwLnJlbW92ZSgpLG19ZnVuY3Rpb24gS2plKGksYSxmLHA9ITEpe2NvbnN0IG09YS5hcHBlbmQoImciKSxiPW0uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIiksRT1tLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBfPTA7Zm9yKGNvbnN0IEwgb2YgZil7Y29uc3QgTj1qPT5XamUobSwxLjEsaik8PWksQj1OKEwpP1tMXTpHamUoTCxOKTtmb3IoY29uc3QgaiBvZiBCKXtjb25zdCBSPW9CdChFLF8sMS4xKTtjQnQoUixqKSxfKyt9fWlmKHApe2NvbnN0IEw9RS5ub2RlKCkuZ2V0QkJveCgpLE49MjtyZXR1cm4gYi5hdHRyKCJ4IiwtTikuYXR0cigieSIsLU4pLmF0dHIoIndpZHRoIixMLndpZHRoKzIqTikuYXR0cigiaGVpZ2h0IixMLmhlaWdodCsyKk4pLG0ubm9kZSgpfWVsc2UgcmV0dXJuIEUubm9kZSgpfWZ1bmN0aW9uIGNCdChpLGEpe2kudGV4dCgiIiksYS5mb3JFYWNoKChmLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixmLnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsZi50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtwPT09MD92LnRleHQoZi5jb250ZW50KTp2LnRleHQoIiAiK2YuY29udGVudCl9KX1jb25zdCBkSz0oaSxhPSIiLHtzdHlsZTpmPSIiLGlzVGl0bGU6cD0hMSxjbGFzc2VzOnY9IiIsdXNlSHRtbExhYmVsczptPSEwLGlzTm9kZTpiPSEwLHdpZHRoOkU9MjAwLGFkZFN2Z0JhY2tncm91bmQ6Xz0hMX09e30pPT57aWYoVXQuaW5mbygiY3JlYXRlVGV4dCIsYSxmLHAsdixtLGIsXyksbSl7Y29uc3QgTD16amUoYSksTj17aXNOb2RlOmIsbGFiZWw6blAoTCkucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLGo9PmA8aSBjbGFzcz0nJHtqLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTpmLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBVamUoaSxOLEUsdixfKX1lbHNle2NvbnN0IEw9JGplKGEpO3JldHVybiBLamUoRSxpLEwsXyl9fSxPZD1hc3luYyhpLGEsZixwKT0+e2xldCB2O2NvbnN0IG09YS51c2VIdG1sTGFiZWxzfHxzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKTtmP3Y9Zjp2PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLEU9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGEubGFiZWxTdHlsZSk7bGV0IF87YS5sYWJlbFRleHQ9PT12b2lkIDA/Xz0iIjpfPXR5cGVvZiBhLmxhYmVsVGV4dD09InN0cmluZyI/YS5sYWJlbFRleHQ6YS5sYWJlbFRleHRbMF07Y29uc3QgTD1FLm5vZGUoKTtsZXQgTjthLmxhYmVsVHlwZT09PSJtYXJrZG93biI/Tj1kSyhFLERkKG5QKF8pLExlKCkpLHt1c2VIdG1sTGFiZWxzOm0sd2lkdGg6YS53aWR0aHx8TGUoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOk49TC5hcHBlbmRDaGlsZChocChEZChuUChfKSxMZSgpKSxhLmxhYmVsU3R5bGUsITEscCkpO2xldCBCPU4uZ2V0QkJveCgpO2NvbnN0IGo9YS5wYWRkaW5nLzI7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFI9Ti5jaGlsZHJlblswXSx6PXlyKE4pLEs9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoSyl7Y29uc3QgaXQ9Xy5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5LXS5tYXAoc3Q9Pm5ldyBQcm9taXNlKHV0PT57ZnVuY3Rpb24gYnQoKXtpZihzdC5zdHlsZS5kaXNwbGF5PSJmbGV4IixzdC5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGl0KXtjb25zdCBtdD1MZSgpLmZvbnRTaXplP0xlKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUseXQ9NTtzdC5zdHlsZS53aWR0aD1wYXJzZUludChtdCwxMCkqeXQrInB4In1lbHNlIHN0LnN0eWxlLndpZHRoPSIxMDAlIjt1dChzdCl9c2V0VGltZW91dCgoKT0+e3N0LmNvbXBsZXRlJiZidCgpfSksc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGJ0KSxzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixidCl9KSkpfUI9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx6LmF0dHIoIndpZHRoIixCLndpZHRoKSx6LmF0dHIoImhlaWdodCIsQi5oZWlnaHQpfXJldHVybiBtP0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIik6RS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistQi5oZWlnaHQvMisiKSIpLGEuY2VudGVyTGFiZWwmJkUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIiksRS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OkIsaGFsZlBhZGRpbmc6aixsYWJlbDpFfX0sUWg9KGksYSk9Pntjb25zdCBmPWEubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPWYud2lkdGgsaS5oZWlnaHQ9Zi5oZWlnaHR9O2Z1bmN0aW9uIEE1KGksYSxmLHApe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYueCsiLCIrdi55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiK2YvMisiKSIpfWxldCBIbz17fSxjbT17fSx1QnQ9e307Y29uc3QgWWplPSgpPT57Y209e30sdUJ0PXt9LEhvPXt9fSxnSz0oaSxhKT0+KFV0LnRyYWNlKCJJbiBpc0RlY2VuZGFudCIsYSwiICIsaSwiID0gIixjbVthXS5pbmNsdWRlcyhpKSksISFjbVthXS5pbmNsdWRlcyhpKSksWGplPShpLGEpPT4oVXQuaW5mbygiRGVjZW5kYW50cyBvZiAiLGEsIiBpcyAiLGNtW2FdKSxVdC5pbmZvKCJFZGdlIGlzICIsaSksaS52PT09YXx8aS53PT09YT8hMTpjbVthXT9jbVthXS5pbmNsdWRlcyhpLnYpfHxnSyhpLnYsYSl8fGdLKGkudyxhKXx8Y21bYV0uaW5jbHVkZXMoaS53KTooVXQuZGVidWcoIlRpbHQsICIsYSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSxsQnQ9KGksYSxmLHApPT57VXQud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLHAsImRhdGEiLGEubm9kZShpKSxwKTtjb25zdCB2PWEuY2hpbGRyZW4oaSl8fFtdO2khPT1wJiZ2LnB1c2goaSksVXQud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHYpLHYuZm9yRWFjaChtPT57aWYoYS5jaGlsZHJlbihtKS5sZW5ndGg+MClsQnQobSxhLGYscCk7ZWxzZXtjb25zdCBiPWEubm9kZShtKTtVdC5pbmZvKCJjcCAiLG0sIiB0byAiLHAsIiB3aXRoIHBhcmVudCAiLGkpLGYuc2V0Tm9kZShtLGIpLHAhPT1hLnBhcmVudChtKSYmKFV0Lndhcm4oIlNldHRpbmcgcGFyZW50IixtLGEucGFyZW50KG0pKSxmLnNldFBhcmVudChtLGEucGFyZW50KG0pKSksaSE9PXAmJm0hPT1pPyhVdC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLG0saSksZi5zZXRQYXJlbnQobSxpKSk6KFV0LmluZm8oIkluIGNvcHkgIixpLCJyb290IixwLCJkYXRhIixhLm5vZGUoaSkscCksVXQuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLG0sImNsdXN0ZXIhPT1yb290SWQiLGkhPT1wLCJub2RlIT09Y2x1c3RlcklkIixtIT09aSkpO2NvbnN0IEU9YS5lZGdlcyhtKTtVdC5kZWJ1ZygiQ29weWluZyBFZGdlcyIsRSksRS5mb3JFYWNoKF89PntVdC5pbmZvKCJFZGdlIixfKTtjb25zdCBMPWEuZWRnZShfLnYsXy53LF8ubmFtZSk7VXQuaW5mbygiRWRnZSBkYXRhIixMLHApO3RyeXtYamUoXyxwKT8oVXQuaW5mbygiQ29weWluZyBhcyAiLF8udixfLncsTCxfLm5hbWUpLGYuc2V0RWRnZShfLnYsXy53LEwsXy5uYW1lKSxVdC5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLGYuZWRnZXMoKSxmLmVkZ2UoZi5lZGdlcygpWzBdKSkpOlV0LmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLF8udiwiLS0+IixfLncsIiByb290SWQ6ICIscCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKE4pe1V0LmVycm9yKE4pfX0pfVV0LmRlYnVnKCJSZW1vdmluZyBub2RlIixtKSxhLnJlbW92ZU5vZGUobSl9KX0saEJ0PShpLGEpPT57Y29uc3QgZj1hLmNoaWxkcmVuKGkpO2xldCBwPVsuLi5mXTtmb3IoY29uc3QgdiBvZiBmKXVCdFt2XT1pLHA9Wy4uLnAsLi4uaEJ0KHYsYSldO3JldHVybiBwfSx3UD0oaSxhKT0+e1V0LnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IGY9YS5jaGlsZHJlbihpKTtpZihVdC50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSxmKSxmLmxlbmd0aDwxKXJldHVybiBVdC50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdj13UChwLGEpO2lmKHYpcmV0dXJuIFV0LnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHYpLHZ9fSxwSz1pPT4hSG9baV18fCFIb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6SG9baV0/SG9baV0uaWQ6aSxRamU9KGksYSk9PntpZighaXx8YT4xMCl7VXQuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFV0LmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2kuY2hpbGRyZW4oZikubGVuZ3RoPjAmJihVdC53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLGYsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIix3UChmLGkpKSxjbVtmXT1oQnQoZixpKSxIb1tmXT17aWQ6d1AoZixpKSxjbHVzdGVyRGF0YTppLm5vZGUoZil9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NvbnN0IHA9aS5jaGlsZHJlbihmKSx2PWkuZWRnZXMoKTtwLmxlbmd0aD4wPyhVdC5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixmLGNtKSx2LmZvckVhY2gobT0+e2lmKG0udiE9PWYmJm0udyE9PWYpe2NvbnN0IGI9Z0sobS52LGYpLEU9Z0sobS53LGYpO2JeRSYmKFV0Lndhcm4oIkVkZ2U6ICIsbSwiIGxlYXZlcyBjbHVzdGVyICIsZiksVXQud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixmLCI6ICIsY21bZl0pLEhvW2ZdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfX0pKTpVdC5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGYsY20pfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZil7Y29uc3QgcD1pLmVkZ2UoZik7VXQud2FybigiRWRnZSAiK2YudisiIC0+ICIrZi53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZikpLFV0Lndhcm4oIkVkZ2UgIitmLnYrIiAtPiAiK2YudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZShmKSkpO2xldCB2PWYudixtPWYudztpZihVdC53YXJuKCJGaXggWFhYIixIbywiaWRzOiIsZi52LGYudywiVHJhbnNsYXRpbmc6ICIsSG9bZi52XSwiIC0tLSAiLEhvW2Yud10pLEhvW2Yudl0mJkhvW2Yud10mJkhvW2Yudl09PT1Ib1tmLnddKXtVdC53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksVXQud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksdj1wSyhmLnYpLG09cEsoZi53KSxpLnJlbW92ZUVkZ2UoZi52LGYudyxmLm5hbWUpO2NvbnN0IGI9Zi53KyItLS0iK2YudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OnAubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgRT1zdHJ1Y3R1cmVkQ2xvbmUocCksXz1zdHJ1Y3R1cmVkQ2xvbmUocCk7RS5sYWJlbD0iIixFLmFycm93VHlwZUVuZD0ibm9uZSIsXy5sYWJlbD0iIixFLmZyb21DbHVzdGVyPWYudixfLnRvQ2x1c3Rlcj1mLnYsaS5zZXRFZGdlKHYsYixFLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsbSxfLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZShIb1tmLnZdfHxIb1tmLnddKSYmKFV0Lndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLHY9cEsoZi52KSxtPXBLKGYudyksaS5yZW1vdmVFZGdlKGYudixmLncsZi5uYW1lKSx2IT09Zi52JiYocC5mcm9tQ2x1c3Rlcj1mLnYpLG0hPT1mLncmJihwLnRvQ2x1c3Rlcj1mLncpLFV0Lndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHYsbSxmLm5hbWUpLGkuc2V0RWRnZSh2LG0scCxmLm5hbWUpKX0pLFV0Lndhcm4oIkFkanVzdGVkIEdyYXBoIixTNShpKSksZkJ0KGksMCksVXQudHJhY2UoSG8pfSxmQnQ9KGksYSk9PntpZihVdC53YXJuKCJleHRyYWN0b3IgLSAiLGEsUzUoaSksaS5jaGlsZHJlbigiRCIpKSxhPjEwKXtVdC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IGY9aS5ub2RlcygpLHA9ITE7Zm9yKGNvbnN0IHYgb2YgZil7Y29uc3QgbT1pLmNoaWxkcmVuKHYpO3A9cHx8bS5sZW5ndGg+MH1pZighcCl7VXQuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixpLm5vZGVzKCkpO3JldHVybn1VdC5kZWJ1ZygiTm9kZXMgPSAiLGYsYSk7Zm9yKGNvbnN0IHYgb2YgZilpZihVdC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIix2LEhvLEhvW3ZdJiYhSG9bdl0uZXh0ZXJuYWxDb25uZWN0aW9ucywhaS5wYXJlbnQodiksaS5ub2RlKHYpLGkuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsYSksIUhvW3ZdKVV0LmRlYnVnKCJOb3QgYSBjbHVzdGVyIix2LGEpO2Vsc2UgaWYoIUhvW3ZdLmV4dGVybmFsQ29ubmVjdGlvbnMmJmkuY2hpbGRyZW4odikmJmkuY2hpbGRyZW4odikubGVuZ3RoPjApe1V0Lndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdixhKTtsZXQgYj1pLmdyYXBoKCkucmFua2Rpcj09PSJUQiI/IkxSIjoiVEIiO0hvW3ZdJiZIb1t2XS5jbHVzdGVyRGF0YSYmSG9bdl0uY2x1c3RlckRhdGEuZGlyJiYoYj1Ib1t2XS5jbHVzdGVyRGF0YS5kaXIsVXQud2FybigiRml4aW5nIGRpciIsSG9bdl0uY2x1c3RlckRhdGEuZGlyLGIpKTtjb25zdCBFPW5ldyBhMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmIsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtVdC53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLFM1KGkpKSxsQnQodixpLEUsdiksaS5zZXROb2RlKHYse2NsdXN0ZXJOb2RlOiEwLGlkOnYsY2x1c3RlckRhdGE6SG9bdl0uY2x1c3RlckRhdGEsbGFiZWxUZXh0OkhvW3ZdLmxhYmVsVGV4dCxncmFwaDpFfSksVXQud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsdiwiKSIsUzUoRSkpLFV0LmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsUzUoaSkpfWVsc2UgVXQud2FybigiQ2x1c3RlciAqKiAiLHYsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFIb1t2XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFpLnBhcmVudCh2KSwiIGNoaWxkcmVuICIsaS5jaGlsZHJlbih2KSYmaS5jaGlsZHJlbih2KS5sZW5ndGg+MCxpLmNoaWxkcmVuKCJEIiksYSksVXQuZGVidWcoSG8pO2Y9aS5ub2RlcygpLFV0Lndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixmKTtmb3IoY29uc3QgdiBvZiBmKXtjb25zdCBtPWkubm9kZSh2KTtVdC53YXJuKCIgTm93IG5leHQgbGV2ZWwiLHYsbSksbS5jbHVzdGVyTm9kZSYmZkJ0KG0uZ3JhcGgsYSsxKX19LGRCdD0oaSxhKT0+e2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZj1PYmplY3QuYXNzaWduKGEpO3JldHVybiBhLmZvckVhY2gocD0+e2NvbnN0IHY9aS5jaGlsZHJlbihwKSxtPWRCdChpLHYpO2Y9Wy4uLmYsLi4ubV19KSxmfSxaamU9aT0+ZEJ0KGksaS5jaGlsZHJlbigpKTtmdW5jdGlvbiBKamUoaSxhKXtyZXR1cm4gaS5pbnRlcnNlY3QoYSl9ZnVuY3Rpb24gZ0J0KGksYSxmLHApe3ZhciB2PWkueCxtPWkueSxiPXYtcC54LEU9bS1wLnksXz1NYXRoLnNxcnQoYSphKkUqRStmKmYqYipiKSxMPU1hdGguYWJzKGEqZipiL18pO3AueDx2JiYoTD0tTCk7dmFyIE49TWF0aC5hYnMoYSpmKkUvXyk7cmV0dXJuIHAueTxtJiYoTj0tTikse3g6ditMLHk6bStOfX1mdW5jdGlvbiB0JGUoaSxhLGYpe3JldHVybiBnQnQoaSxhLGEsZil9ZnVuY3Rpb24gZSRlKGksYSxmLHApe3ZhciB2LG0sYixFLF8sTCxOLEIsaixSLHosSyxpdCxzdCx1dDtpZih2PWEueS1pLnksYj1pLngtYS54LF89YS54KmkueS1pLngqYS55LGo9dipmLngrYipmLnkrXyxSPXYqcC54K2IqcC55K18sIShqIT09MCYmUiE9PTAmJnBCdChqLFIpKSYmKG09cC55LWYueSxFPWYueC1wLngsTD1wLngqZi55LWYueCpwLnksTj1tKmkueCtFKmkueStMLEI9bSphLngrRSphLnkrTCwhKE4hPT0wJiZCIT09MCYmcEJ0KE4sQikpJiYoej12KkUtbSpiLHohPT0wKSkpcmV0dXJuIEs9TWF0aC5hYnMoei8yKSxpdD1iKkwtRSpfLHN0PWl0PDA/KGl0LUspL3o6KGl0K0spL3osaXQ9bSpfLXYqTCx1dD1pdDwwPyhpdC1LKS96OihpdCtLKS96LHt4OnN0LHk6dXR9fWZ1bmN0aW9uIHBCdChpLGEpe3JldHVybiBpKmE+MH1mdW5jdGlvbiBuJGUoaSxhLGYpe3ZhciBwPWkueCx2PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBhLmZvckVhY2g9PSJmdW5jdGlvbiI/YS5mb3JFYWNoKGZ1bmN0aW9uKHope2I9TWF0aC5taW4oYix6LngpLEU9TWF0aC5taW4oRSx6LnkpfSk6KGI9TWF0aC5taW4oYixhLngpLEU9TWF0aC5taW4oRSxhLnkpKTtmb3IodmFyIF89cC1pLndpZHRoLzItYixMPXYtaS5oZWlnaHQvMi1FLE49MDtOPGEubGVuZ3RoO04rKyl7dmFyIEI9YVtOXSxqPWFbTjxhLmxlbmd0aC0xP04rMTowXSxSPWUkZShpLGYse3g6XytCLngseTpMK0IueX0se3g6XytqLngseTpMK2oueX0pO1ImJm0ucHVzaChSKX1yZXR1cm4gbS5sZW5ndGg/KG0ubGVuZ3RoPjEmJm0uc29ydChmdW5jdGlvbih6LEspe3ZhciBpdD16LngtZi54LHN0PXoueS1mLnksdXQ9TWF0aC5zcXJ0KGl0Kml0K3N0KnN0KSxidD1LLngtZi54LG10PUsueS1mLnkseXQ9TWF0aC5zcXJ0KGJ0KmJ0K210Km10KTtyZXR1cm4gdXQ8eXQ/LTE6dXQ9PT15dD8wOjF9KSxtWzBdKTppfWNvbnN0IG1QPShpLGEpPT57dmFyIGY9aS54LHA9aS55LHY9YS54LWYsbT1hLnktcCxiPWkud2lkdGgvMixFPWkuaGVpZ2h0LzIsXyxMO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHYpKkU/KG08MCYmKEU9LUUpLF89bT09PTA/MDpFKnYvbSxMPUUpOih2PDAmJihiPS1iKSxfPWIsTD12PT09MD8wOmIqbS92KSx7eDpmK18seTpwK0x9fSx5aD17bm9kZTpKamUsY2lyY2xlOnQkZSxlbGxpcHNlOmdCdCxwb2x5Z29uOm4kZSxyZWN0Om1QfSxyJGU9YXN5bmMoaSxhKT0+e2EudXNlSHRtbExhYmVsc3x8TGUoKS5mbG93Y2hhcnQuaHRtbExhYmVsc3x8KGEuY2VudGVyTGFiZWw9ITApO2NvbnN0e3NoYXBlU3ZnOnAsYmJveDp2LGhhbGZQYWRkaW5nOm19PWF3YWl0IE9kKGksYSwibm9kZSAiK2EuY2xhc3NlcywhMCk7VXQuaW5mbygiQ2xhc3NlcyA9ICIsYS5jbGFzc2VzKTtjb25zdCBiPXAuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJ4Iiwtdi53aWR0aC8yLW0pLmF0dHIoInkiLC12LmhlaWdodC8yLW0pLmF0dHIoIndpZHRoIix2LndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCthLnBhZGRpbmcpLFFoKGEsYiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHloLnJlY3QoYSxFKX0scH0sYkJ0PWk9Pmk/IiAiK2k6IiIsUGI9KGksYSk9PmAke2F8fCJub2RlIGRlZmF1bHQifSR7YkJ0KGkuY2xhc3Nlcyl9ICR7YkJ0KGkuY2xhc3MpfWAsdkJ0PWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPXYrbSxFPVt7eDpiLzIseTowfSx7eDpiLHk6LWIvMn0se3g6Yi8yLHk6LWJ9LHt4OjAseTotYi8yfV07VXQuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2NvbnN0IF89QTUoZixiLGIsRSk7cmV0dXJuIF8uYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsXyksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTCl7cmV0dXJuIFV0Lndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSx5aC5wb2x5Z29uKGEsRSxMKX0sZn0saSRlPShpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Mjgsdj1be3g6MCx5OnAvMn0se3g6cC8yLHk6MH0se3g6MCx5Oi1wLzJ9LHt4Oi1wLzIseTowfV07cmV0dXJuIGYuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix2Lm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi54KyIsIitiLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGEud2lkdGg9MjgsYS5oZWlnaHQ9MjgsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIHloLmNpcmNsZShhLDE0LGIpfSxmfSxzJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PTQsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1tL3YsRT1wLndpZHRoKzIqYithLnBhZGRpbmcsXz1be3g6Yix5OjB9LHt4OkUtYix5OjB9LHt4OkUseTotbS8yfSx7eDpFLWIseTotbX0se3g6Yix5Oi1tfSx7eDowLHk6LW0vMn1dLEw9QTUoZixFLG0sXyk7cmV0dXJuIEwuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsTCksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7cmV0dXJuIHloLnBvbHlnb24oYSxfLE4pfSxmfSxhJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi1tLzIseTowfSx7eDp2LHk6MH0se3g6dix5Oi1tfSx7eDotbS8yLHk6LW19LHt4OjAseTotbS8yfV07cmV0dXJuIEE1KGYsdixtLGIpLmF0dHIoInN0eWxlIixhLnN0eWxlKSxhLndpZHRoPXYrbSxhLmhlaWdodD1tLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB5aC5wb2x5Z29uKGEsYixfKX0sZn0sbyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEpLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnYtbS82LHk6MH0se3g6disyKm0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxjJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjIqbS82LHk6MH0se3g6dittLzYseTowfSx7eDp2LTIqbS82LHk6LW19LHt4Oi1tLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSx1JGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnYrMiptLzYseTowfSx7eDp2LW0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxsJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Om0vNix5OjB9LHt4OnYtbS82LHk6MH0se3g6disyKm0vNix5Oi1tfSx7eDotMiptLzYseTotbX1dLEU9QTUoZix2LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLFFoKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHloLnBvbHlnb24oYSxiLF8pfSxmfSxoJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDp2K20vMix5OjB9LHt4OnYseTotbS8yfSx7eDp2K20vMix5Oi1tfSx7eDowLHk6LW19XSxFPUE1KGYsdixtLGIpO3JldHVybiBFLmF0dHIoInN0eWxlIixhLnN0eWxlKSxRaChhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB5aC5wb2x5Z29uKGEsYixfKX0sZn0sZiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXYvMixiPW0vKDIuNSt2LzUwKSxFPXAuaGVpZ2h0K2IrYS5wYWRkaW5nLF89Ik0gMCwiK2IrIiBhICIrbSsiLCIrYisiIDAsMCwwICIrdisiIDAgYSAiK20rIiwiK2IrIiAwLDAsMCAiKy12KyIgMCBsIDAsIitFKyIgYSAiK20rIiwiK2IrIiAwLDAsMCAiK3YrIiAwIGwgMCwiKy1FLEw9Zi5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYikuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoImQiLF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy12LzIrIiwiKy0oRS8yK2IpKyIpIik7cmV0dXJuIFFoKGEsTCksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7Y29uc3QgQj15aC5yZWN0KGEsTiksaj1CLngtYS54O2lmKG0hPTAmJihNYXRoLmFicyhqKTxhLndpZHRoLzJ8fE1hdGguYWJzKGopPT1hLndpZHRoLzImJk1hdGguYWJzKEIueS1hLnkpPmEuaGVpZ2h0LzItYikpe2xldCBSPWIqYiooMS1qKmovKG0qbSkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj1iLVIsTi55LWEueT4wJiYoUj0tUiksQi55Kz1SfXJldHVybiBCfSxmfSxkJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwLGhhbGZQYWRkaW5nOnZ9PWF3YWl0IE9kKGksYSwibm9kZSAiK2EuY2xhc3NlcysiICIrYS5jbGFzcywhMCksbT1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGI9cC53aWR0aCthLnBhZGRpbmcsRT1wLmhlaWdodCthLnBhZGRpbmc7aWYobS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdikuYXR0cigieSIsLXAuaGVpZ2h0LzItdikuYXR0cigid2lkdGgiLGIpLmF0dHIoImhlaWdodCIsRSksYS5wcm9wcyl7Y29uc3QgXz1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJih3QnQobSxhLnByb3BzLmJvcmRlcnMsYixFKSxfLmRlbGV0ZSgiYm9yZGVycyIpKSxfLmZvckVhY2goTD0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0x9YCl9KX1yZXR1cm4gUWgoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4geWgucmVjdChhLF8pfSxmfSxnJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmZ9PWF3YWl0IE9kKGksYSwibGFiZWwiLCEwKTtVdC50cmFjZSgiQ2xhc3NlcyA9ICIsYS5jbGFzcyk7Y29uc3QgcD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9MCxtPTA7aWYocC5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0IixtKSxmLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksYS5wcm9wcyl7Y29uc3QgYj1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJih3QnQocCxhLnByb3BzLmJvcmRlcnMsdixtKSxiLmRlbGV0ZSgiYm9yZGVycyIpKSxiLmZvckVhY2goRT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0V9YCl9KX1yZXR1cm4gUWgoYSxwKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4geWgucmVjdChhLGIpfSxmfTtmdW5jdGlvbiB3QnQoaSxhLGYscCl7Y29uc3Qgdj1bXSxtPUU9Pnt2LnB1c2goRSwwKX0sYj1FPT57di5wdXNoKDAsRSl9O2EuaW5jbHVkZXMoInQiKT8oVXQuZGVidWcoImFkZCB0b3AgYm9yZGVyIiksbShmKSk6YihmKSxhLmluY2x1ZGVzKCJyIik/KFV0LmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksbShwKSk6YihwKSxhLmluY2x1ZGVzKCJiIik/KFV0LmRlYnVnKCJhZGQgYm90dG9tIGJvcmRlciIpLG0oZikpOmIoZiksYS5pbmNsdWRlcygibCIpPyhVdC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksbShwKSk6YihwKSxpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLHYuam9pbigiICIpKX1jb25zdCBwJGU9KGksYSk9PntsZXQgZjthLmNsYXNzZXM/Zj0ibm9kZSAiK2EuY2xhc3NlczpmPSJub2RlIGRlZmF1bHQiO2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHY9cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxtPXAuaW5zZXJ0KCJsaW5lIiksYj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxFPWEubGFiZWxUZXh0LmZsYXQ/YS5sYWJlbFRleHQuZmxhdCgpOmEubGFiZWxUZXh0O2xldCBfPSIiO3R5cGVvZiBFPT0ib2JqZWN0Ij9fPUVbMF06Xz1FLFV0LmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLF8sRSx0eXBlb2YgRT09Im9iamVjdCIpO2NvbnN0IEw9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoXyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgTj17d2lkdGg6MCxoZWlnaHQ6MH07aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEs9TC5jaGlsZHJlblswXSxpdD15cihMKTtOPUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaXQuYXR0cigid2lkdGgiLE4ud2lkdGgpLGl0LmF0dHIoImhlaWdodCIsTi5oZWlnaHQpfVV0LmluZm8oIlRleHQgMiIsRSk7Y29uc3QgQj1FLnNsaWNlKDEsRS5sZW5ndGgpO2xldCBqPUwuZ2V0QkJveCgpO2NvbnN0IFI9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoQi5qb2luP0Iuam9pbigiPGJyLz4iKTpCLGEubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBLPVIuY2hpbGRyZW5bMF0saXQ9eXIoUik7Tj1LLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGl0LmF0dHIoIndpZHRoIixOLndpZHRoKSxpdC5hdHRyKCJoZWlnaHQiLE4uaGVpZ2h0KX1jb25zdCB6PWEucGFkZGluZy8yO3JldHVybiB5cihSKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKE4ud2lkdGg+ai53aWR0aD8wOihqLndpZHRoLU4ud2lkdGgpLzIpKyIsICIrKGouaGVpZ2h0K3orNSkrIikiKSx5cihMKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKE4ud2lkdGg8ai53aWR0aD8wOi0oai53aWR0aC1OLndpZHRoKS8yKSsiLCAwKSIpLE49Yi5ub2RlKCkuZ2V0QkJveCgpLGIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLU4ud2lkdGgvMisiLCAiKygtTi5oZWlnaHQvMi16KzMpKyIpIiksdi5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLU4ud2lkdGgvMi16KS5hdHRyKCJ5IiwtTi5oZWlnaHQvMi16KS5hdHRyKCJ3aWR0aCIsTi53aWR0aCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsTi5oZWlnaHQrYS5wYWRkaW5nKSxtLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtTi53aWR0aC8yLXopLmF0dHIoIngyIixOLndpZHRoLzIreikuYXR0cigieTEiLC1OLmhlaWdodC8yLXorai5oZWlnaHQreikuYXR0cigieTIiLC1OLmhlaWdodC8yLXorai5oZWlnaHQreiksUWgoYSx2KSxhLmludGVyc2VjdD1mdW5jdGlvbihLKXtyZXR1cm4geWgucmVjdChhLEspfSxwfSxiJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSx2PXAuaGVpZ2h0K2EucGFkZGluZyxtPXAud2lkdGgrdi80K2EucGFkZGluZyxiPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4Iix2LzIpLmF0dHIoInJ5Iix2LzIpLmF0dHIoIngiLC1tLzIpLmF0dHIoInkiLC12LzIpLmF0dHIoIndpZHRoIixtKS5hdHRyKCJoZWlnaHQiLHYpO3JldHVybiBRaChhLGIpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB5aC5yZWN0KGEsRSl9LGZ9LHYkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksbT1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG0uYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigiciIscC53aWR0aC8yK3YpLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCthLnBhZGRpbmcpLFV0LmluZm8oIkNpcmNsZSBtYWluIiksUWgoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gVXQuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsYSxwLndpZHRoLzIrdixiKSx5aC5jaXJjbGUoYSxwLndpZHRoLzIrdixiKX0sZn0sdyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cCxoYWxmUGFkZGluZzp2fT1hd2FpdCBPZChpLGEsUGIoYSx2b2lkIDApLCEwKSxtPTUsYj1mLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLEU9Yi5pbnNlcnQoImNpcmNsZSIpLF89Yi5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBiLmF0dHIoImNsYXNzIixhLmNsYXNzKSxFLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoInIiLHAud2lkdGgvMit2K20pLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZyttKjIpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrYS5wYWRkaW5nK20qMiksXy5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJyIixwLndpZHRoLzIrdikuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K2EucGFkZGluZyksVXQuaW5mbygiRG91YmxlQ2lyY2xlIG1haW4iKSxRaChhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBVdC5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixhLHAud2lkdGgvMit2K20sTCkseWguY2lyY2xlKGEscC53aWR0aC8yK3YrbSxMKX0sZn0sbSRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgT2QoaSxhLFBiKGEsdm9pZCAwKSwhMCksdj1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPVt7eDowLHk6MH0se3g6dix5OjB9LHt4OnYseTotbX0se3g6MCx5Oi1tfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDp2KzgseTowfSx7eDp2KzgseTotbX0se3g6LTgseTotbX0se3g6LTgseTowfV0sRT1BNShmLHYsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksUWgoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4geWgucG9seWdvbihhLGIsXyl9LGZ9LHkkZT0oaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxRaChhLHApLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiB5aC5jaXJjbGUoYSw3LHYpfSxmfSxtQnQ9KGksYSxmKT0+e2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKTtsZXQgdj03MCxtPTEwO2Y9PT0iTFIiJiYodj0xMCxtPTcwKTtjb25zdCBiPXAuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqdi8yKS5hdHRyKCJ5IiwtMSptLzIpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIFFoKGEsYiksYS5oZWlnaHQ9YS5oZWlnaHQrYS5wYWRkaW5nLzIsYS53aWR0aD1hLndpZHRoK2EucGFkZGluZy8yLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB5aC5yZWN0KGEsRSl9LHB9LHlCdD17cmhvbWJ1czp2QnQscXVlc3Rpb246dkJ0LHJlY3Q6ZCRlLGxhYmVsUmVjdDpnJGUscmVjdFdpdGhUaXRsZTpwJGUsY2hvaWNlOmkkZSxjaXJjbGU6diRlLGRvdWJsZWNpcmNsZTp3JGUsc3RhZGl1bTpiJGUsaGV4YWdvbjpzJGUscmVjdF9sZWZ0X2ludl9hcnJvdzphJGUsbGVhbl9yaWdodDpvJGUsbGVhbl9sZWZ0OmMkZSx0cmFwZXpvaWQ6dSRlLGludl90cmFwZXpvaWQ6bCRlLHJlY3RfcmlnaHRfaW52X2Fycm93OmgkZSxjeWxpbmRlcjpmJGUsc3RhcnQ6eSRlLGVuZDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSx2PWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxwLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxRaChhLHYpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiB5aC5jaXJjbGUoYSw3LG0pfSxmfSxub3RlOnIkZSxzdWJyb3V0aW5lOm0kZSxmb3JrOm1CdCxqb2luOm1CdCxjbGFzc19ib3g6KGksYSk9Pntjb25zdCBmPWEucGFkZGluZy8yLHA9NCx2PTg7bGV0IG07YS5jbGFzc2VzP209Im5vZGUgIithLmNsYXNzZXM6bT0ibm9kZSBkZWZhdWx0Ijtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG0pLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxFPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXz1iLmluc2VydCgibGluZSIpLEw9Yi5pbnNlcnQoImxpbmUiKTtsZXQgTj0wLEI9cDtjb25zdCBqPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2xldCBSPTA7Y29uc3Qgej1hLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmYS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sSz1hLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2EuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIsaXQ9ai5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAoSyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgc3Q9aXQuZ2V0QkJveCgpO2lmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCB3dD1pdC5jaGlsZHJlblswXSxYPXlyKGl0KTtzdD13dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixzdC53aWR0aCksWC5hdHRyKCJoZWlnaHQiLHN0LmhlaWdodCl9YS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihCKz1zdC5oZWlnaHQrcCxOKz1zdC53aWR0aCk7bGV0IHV0PWEuY2xhc3NEYXRhLmxhYmVsO2EuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmEuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/dXQrPSImbHQ7IithLmNsYXNzRGF0YS50eXBlKyImZ3Q7Ijp1dCs9IjwiK2EuY2xhc3NEYXRhLnR5cGUrIj4iKTtjb25zdCBidD1qLm5vZGUoKS5hcHBlbmRDaGlsZChocCh1dCxhLmxhYmVsU3R5bGUsITAsITApKTt5cihidCkuYXR0cigiY2xhc3MiLCJjbGFzc1RpdGxlIik7bGV0IG10PWJ0LmdldEJCb3goKTtpZihzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3Qgd3Q9YnQuY2hpbGRyZW5bMF0sWD15cihidCk7bXQ9d3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWC5hdHRyKCJ3aWR0aCIsbXQud2lkdGgpLFguYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQpfUIrPW10LmhlaWdodCtwLG10LndpZHRoPk4mJihOPW10LndpZHRoKTtjb25zdCB5dD1bXTthLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2god3Q9Pntjb25zdCBYPXd0LmdldERpc3BsYXlEZXRhaWxzKCk7bGV0IHB0PVguZGlzcGxheVRleHQ7TGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHB0PXB0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtjb25zdCBVPWoubm9kZSgpLmFwcGVuZENoaWxkKGhwKHB0LFguY3NzU3R5bGU/WC5jc3NTdHlsZTphLmxhYmVsU3R5bGUsITAsITApKTtsZXQgeHQ9VS5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IG50PVUuY2hpbGRyZW5bMF0sT3Q9eXIoVSk7eHQ9bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksT3QuYXR0cigid2lkdGgiLHh0LndpZHRoKSxPdC5hdHRyKCJoZWlnaHQiLHh0LmhlaWdodCl9eHQud2lkdGg+TiYmKE49eHQud2lkdGgpLEIrPXh0LmhlaWdodCtwLHl0LnB1c2goVSl9KSxCKz12O2NvbnN0IGR0PVtdO2lmKGEuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaCh3dD0+e2NvbnN0IFg9d3QuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgcHQ9WC5kaXNwbGF5VGV4dDtMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYocHQ9cHQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFU9ai5ub2RlKCkuYXBwZW5kQ2hpbGQoaHAocHQsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOmEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4dD1VLmdldEJCb3goKTtpZihzMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgbnQ9VS5jaGlsZHJlblswXSxPdD15cihVKTt4dD1udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPdC5hdHRyKCJ3aWR0aCIseHQud2lkdGgpLE90LmF0dHIoImhlaWdodCIseHQuaGVpZ2h0KX14dC53aWR0aD5OJiYoTj14dC53aWR0aCksQis9eHQuaGVpZ2h0K3AsZHQucHVzaChVKX0pLEIrPXYseil7bGV0IHd0PShOLXN0LndpZHRoKS8yO3lyKGl0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKk4vMit3dCkrIiwgIistMSpCLzIrIikiKSxSPXN0LmhlaWdodCtwfWxldCBodD0oTi1tdC53aWR0aCkvMjtyZXR1cm4geXIoYnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqTi8yK2h0KSsiLCAiKygtMSpCLzIrUikrIikiKSxSKz1tdC5oZWlnaHQrcCxfLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtTi8yLWYpLmF0dHIoIngyIixOLzIrZikuYXR0cigieTEiLC1CLzItZit2K1IpLmF0dHIoInkyIiwtQi8yLWYrditSKSxSKz12LHl0LmZvckVhY2god3Q9Pnt5cih3dCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1OLzIrIiwgIisoLTEqQi8yK1Irdi8yKSsiKSIpO2NvbnN0IFg9d3Q9PW51bGw/dm9pZCAwOnd0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLFIrPXYsTC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLU4vMi1mKS5hdHRyKCJ4MiIsTi8yK2YpLmF0dHIoInkxIiwtQi8yLWYrditSKS5hdHRyKCJ5MiIsLUIvMi1mK3YrUiksUis9dixkdC5mb3JFYWNoKHd0PT57eXIod3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistTi8yKyIsICIrKC0xKkIvMitSKSsiKSIpO2NvbnN0IFg9d3Q9PW51bGw/dm9pZCAwOnd0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLEUuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1OLzItZikuYXR0cigieSIsLShCLzIpLWYpLmF0dHIoIndpZHRoIixOK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixCK2EucGFkZGluZyksUWgoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbih3dCl7cmV0dXJuIHloLnJlY3QoYSx3dCl9LGJ9fTtsZXQgckw9e307Y29uc3QgeEJ0PWFzeW5jKGksYSxmKT0+e2xldCBwLHY7aWYoYS5saW5rKXtsZXQgbTtMZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bT0iX3RvcCI6YS5saW5rVGFyZ2V0JiYobT1hLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxwPWkuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixtKSx2PWF3YWl0IHlCdFthLnNoYXBlXShwLGEsZil9ZWxzZSB2PWF3YWl0IHlCdFthLnNoYXBlXShpLGEsZikscD12O3JldHVybiBhLnRvb2x0aXAmJnYuYXR0cigidGl0bGUiLGEudG9vbHRpcCksYS5jbGFzcyYmdi5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2EuY2xhc3MpLHJMW2EuaWRdPXAsYS5oYXZlQ2FsbGJhY2smJnJMW2EuaWRdLmF0dHIoImNsYXNzIixyTFthLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIikscH0seCRlPShpLGEpPT57ckxbYS5pZF09aX0sayRlPSgpPT57ckw9e319LGtCdD1pPT57Y29uc3QgYT1yTFtpLmlkXTtVdC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IGY9OCxwPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrcC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLWYpKyIpIik6YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxwfSxFJGU9e3JlY3Q6KGksYSk9PntVdC5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGEuaWQsYSk7Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGEuY2xhc3M/IiAiK2EuY2xhc3M6IiIpKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9czEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGI9YS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP2RLKG0sYS5sYWJlbFRleHQse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnZ9KTptLm5vZGUoKS5hcHBlbmRDaGlsZChocChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGo9Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9ai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfWNvbnN0IF89MCphLnBhZGRpbmcsTD1fLzIsTj1hLndpZHRoPD1FLndpZHRoK18/RS53aWR0aCtfOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCtfP2EuZGlmZj0oRS53aWR0aC1hLndpZHRoKS8yLWEucGFkZGluZy8yOmEuZGlmZj0tYS5wYWRkaW5nLzIsVXQudHJhY2UoIkRhdGEgIixhLEpTT04uc3RyaW5naWZ5KGEpKSxwLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLGEueC1OLzIpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUwpLmF0dHIoIndpZHRoIixOKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K18pLHY/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS54LUUud2lkdGgvMikrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLngrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik7Y29uc3QgQj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Qi53aWR0aCxhLmhlaWdodD1CLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gbVAoYSxqKX0sZn0scm91bmRlZFdpdGhUaXRsZTooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxtPWYuYXBwZW5kKCJyZWN0IiksYj12Lm5vZGUoKS5hcHBlbmRDaGlsZChocChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGo9Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9ai5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfUU9Yi5nZXRCQm94KCk7Y29uc3QgXz0wKmEucGFkZGluZyxMPV8vMixOPWEud2lkdGg8PUUud2lkdGgrYS5wYWRkaW5nP0Uud2lkdGgrYS5wYWRkaW5nOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCthLnBhZGRpbmc/YS5kaWZmPShFLndpZHRoK2EucGFkZGluZyowLWEud2lkdGgpLzI6YS5kaWZmPS1hLnBhZGRpbmcvMixwLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixhLngtTi8yLUwpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUwpLmF0dHIoIndpZHRoIixOK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXyksbS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsYS54LU4vMi1MKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1MK0UuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixOK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXy1FLmhlaWdodC0zKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLngtRS53aWR0aC8yKSsiLCAiKyhhLnktYS5oZWlnaHQvMi1hLnBhZGRpbmcvMysoczEoTGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTtjb25zdCBCPXAubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Qi5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oail7cmV0dXJuIG1QKGEsail9LGZ9LG5vdGVHcm91cDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixhLmlkKSxwPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdj0wKmEucGFkZGluZyxtPXYvMjtwLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigieCIsYS54LWEud2lkdGgvMi1tKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1tKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt2KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3YpLmF0dHIoImZpbGwiLCJub25lIik7Y29uc3QgYj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Yi53aWR0aCxhLmhlaWdodD1iLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gbVAoYSxFKX0sZn0sZGl2aWRlcjooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9MCphLnBhZGRpbmcsbT12LzI7cC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixhLngtYS53aWR0aC8yLW0pLmF0dHIoInkiLGEueS1hLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt2KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3YpO2NvbnN0IGI9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPWIud2lkdGgsYS5oZWlnaHQ9Yi5oZWlnaHQsYS5kaWZmPS1hLnBhZGRpbmcvMixhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gbVAoYSxFKX0sZn19O2xldCBFQnQ9e307Y29uc3QgVCRlPShpLGEpPT57VXQudHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7Y29uc3QgZj1hLnNoYXBlfHwicmVjdCI7RUJ0W2EuaWRdPUUkZVtmXShpLGEpfSxDJGU9KCk9PntFQnQ9e319LGxrPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NS4zfTtmdW5jdGlvbiBiSyhpLGEpe2k9dksoaSksYT12SyhhKTtjb25zdFtmLHBdPVtpLngsaS55XSxbdixtXT1bYS54LGEueV0sYj12LWYsRT1tLXA7cmV0dXJue2FuZ2xlOk1hdGguYXRhbihFL2IpLGRlbHRhWDpiLGRlbHRhWTpFfX1jb25zdCB2Sz1pPT5BcnJheS5pc0FycmF5KGkpP3t4OmlbMF0seTppWzFdfTppLFRCdD1pPT4oe3g6ZnVuY3Rpb24oYSxmLHApe2xldCB2PTA7aWYoZj09PTAmJk9iamVjdC5oYXNPd24obGssaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOm0sZGVsdGFYOmJ9PWJLKHBbMF0scFsxXSk7dj1sa1tpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1lbHNlIGlmKGY9PT1wLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKGxrLGkuYXJyb3dUeXBlRW5kKSl7Y29uc3R7YW5nbGU6bSxkZWx0YVg6Yn09YksocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdKTt2PWxrW2kuYXJyb3dUeXBlRW5kXSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1yZXR1cm4gdksoYSkueCt2fSx5OmZ1bmN0aW9uKGEsZixwKXtsZXQgdj0wO2lmKGY9PT0wJiZPYmplY3QuaGFzT3duKGxrLGkuYXJyb3dUeXBlU3RhcnQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1iSyhwWzBdLHBbMV0pO3Y9bGtbaS5hcnJvd1R5cGVTdGFydF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihiPj0wPzE6LTEpfWVsc2UgaWYoZj09PXAubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24obGssaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1iSyhwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0pO3Y9bGtbaS5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooYj49MD8xOi0xKX1yZXR1cm4gdksoYSkueSt2fX0pO2xldCB3Sz17fSxOZD17fTtjb25zdCBfJGU9KCk9Pnt3Sz17fSxOZD17fX0sQ0J0PShpLGEpPT57Y29uc3QgZj1zMShMZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxwPWEubGFiZWxUeXBlPT09Im1hcmtkb3duIj9kSyhpLGEubGFiZWwse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOmYsYWRkU3ZnQmFja2dyb3VuZDohMH0pOmhwKGEubGFiZWwsYS5sYWJlbFN0eWxlKTtVdC5pbmZvKCJhYmM4MiIsYSxhLmxhYmVsVHlwZSk7Y29uc3Qgdj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksbT12Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTttLm5vZGUoKS5hcHBlbmRDaGlsZChwKTtsZXQgYj1wLmdldEJCb3goKTtpZihmKXtjb25zdCBfPXAuY2hpbGRyZW5bMF0sTD15cihwKTtiPV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTC5hdHRyKCJ3aWR0aCIsYi53aWR0aCksTC5hdHRyKCJoZWlnaHQiLGIuaGVpZ2h0KX1tLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1iLndpZHRoLzIrIiwgIistYi5oZWlnaHQvMisiKSIpLHdLW2EuaWRdPXYsYS53aWR0aD1iLndpZHRoLGEuaGVpZ2h0PWIuaGVpZ2h0O2xldCBFO2lmKGEuc3RhcnRMYWJlbExlZnQpe2NvbnN0IF89aHAoYS5zdGFydExhYmVsTGVmdCxhLmxhYmVsU3R5bGUpLEw9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxOPUwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLE5kW2EuaWRdfHwoTmRbYS5pZF09e30pLE5kW2EuaWRdLnN0YXJ0TGVmdD1MLG1LKEUsYS5zdGFydExhYmVsTGVmdCl9aWYoYS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IF89aHAoYS5zdGFydExhYmVsUmlnaHQsYS5sYWJlbFN0eWxlKSxMPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksTj1MLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUwubm9kZSgpLmFwcGVuZENoaWxkKF8pLE4ubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5zdGFydFJpZ2h0PUwsbUsoRSxhLnN0YXJ0TGFiZWxSaWdodCl9aWYoYS5lbmRMYWJlbExlZnQpe2NvbnN0IF89aHAoYS5lbmRMYWJlbExlZnQsYS5sYWJlbFN0eWxlKSxMPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksTj1MLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPU4ubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxMLm5vZGUoKS5hcHBlbmRDaGlsZChfKSxOZFthLmlkXXx8KE5kW2EuaWRdPXt9KSxOZFthLmlkXS5lbmRMZWZ0PUwsbUsoRSxhLmVuZExhYmVsTGVmdCl9aWYoYS5lbmRMYWJlbFJpZ2h0KXtjb25zdCBfPWhwKGEuZW5kTGFiZWxSaWdodCxhLmxhYmVsU3R5bGUpLEw9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxOPUwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEwubm9kZSgpLmFwcGVuZENoaWxkKF8pLE5kW2EuaWRdfHwoTmRbYS5pZF09e30pLE5kW2EuaWRdLmVuZFJpZ2h0PUwsbUsoRSxhLmVuZExhYmVsUmlnaHQpfXJldHVybiBwfTtmdW5jdGlvbiBtSyhpLGEpe0xlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJmkmJihpLnN0eWxlLndpZHRoPWEubGVuZ3RoKjkrInB4IixpLnN0eWxlLmhlaWdodD0iMTJweCIpfWNvbnN0IFMkZT0oaSxhKT0+e1V0LmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLGkuaWQsaS5sYWJlbCx3S1tpLmlkXSk7bGV0IGY9YS51cGRhdGVkUGF0aD9hLnVwZGF0ZWRQYXRoOmEub3JpZ2luYWxQYXRoO2lmKGkubGFiZWwpe2NvbnN0IHA9d0tbaS5pZF07bGV0IHY9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY0xhYmVsUG9zaXRpb24oZik7VXQuaW5mbygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsdiwiLCIsbSwiKSB0byAoIixiLngsIiwiLGIueSwiKSBhYmM3OCIpLGEudXBkYXRlZFBhdGgmJih2PWIueCxtPWIueSl9cC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrbSsiKSIpfWlmKGkuc3RhcnRMYWJlbExlZnQpe2NvbnN0IHA9TmRbaS5pZF0uc3RhcnRMZWZ0O2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9sZWZ0IixmKTt2PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwgIittKyIpIil9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHA9TmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgdj1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj0kYS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZihpLmVuZExhYmVsTGVmdCl7Y29uc3QgcD1OZFtpLmlkXS5lbmRMZWZ0O2xldCB2PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZihpLmVuZExhYmVsUmlnaHQpe2NvbnN0IHA9TmRbaS5pZF0uZW5kUmlnaHQ7bGV0IHY9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZUVuZD8xMDowLCJlbmRfcmlnaHQiLGYpO3Y9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX19LEEkZT0oaSxhKT0+e2NvbnN0IGY9aS54LHA9aS55LHY9TWF0aC5hYnMoYS54LWYpLG09TWF0aC5hYnMoYS55LXApLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtyZXR1cm4gdj49Ynx8bT49RX0sTCRlPShpLGEsZik9PntVdC53YXJuKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OToKICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkoYSl9CiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGYpfQogIG5vZGUgICAgICAgIDogeDoke2kueH0geToke2kueX0gdzoke2kud2lkdGh9IGg6JHtpLmhlaWdodH1gKTtjb25zdCBwPWkueCx2PWkueSxtPU1hdGguYWJzKHAtZi54KSxiPWkud2lkdGgvMjtsZXQgRT1mLng8YS54P2ItbTpiK207Y29uc3QgXz1pLmhlaWdodC8yLEw9TWF0aC5hYnMoYS55LWYueSksTj1NYXRoLmFicyhhLngtZi54KTtpZihNYXRoLmFicyh2LWEueSkqYj5NYXRoLmFicyhwLWEueCkqXyl7bGV0IEI9Zi55PGEueT9hLnktXy12OnYtXy1hLnk7RT1OKkIvTDtjb25zdCBqPXt4OmYueDxhLng/Zi54K0U6Zi54LU4rRSx5OmYueTxhLnk/Zi55K0wtQjpmLnktTCtCfTtyZXR1cm4gRT09PTAmJihqLng9YS54LGoueT1hLnkpLE49PT0wJiYoai54PWEueCksTD09PTAmJihqLnk9YS55KSxVdC53YXJuKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke0x9LCBxICR7Qn0sIFIgJHtOfSwgciAke0V9YCxqKSxqfWVsc2V7Zi54PGEueD9FPWEueC1iLXA6RT1wLWItYS54O2xldCBCPUwqRS9OLGo9Zi54PGEueD9mLngrTi1FOmYueC1OK0UsUj1mLnk8YS55P2YueStCOmYueS1CO3JldHVybiBVdC53YXJuKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7TH0sIHEgJHtCfSwgUiAke059LCByICR7RX1gLHtfeDpqLF95OlJ9KSxFPT09MCYmKGo9YS54LFI9YS55KSxOPT09MCYmKGo9YS54KSxMPT09MCYmKFI9YS55KSx7eDpqLHk6Un19fSxfQnQ9KGksYSk9PntVdC53YXJuKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLGksYSk7bGV0IGY9W10scD1pWzBdLHY9ITE7cmV0dXJuIGkuZm9yRWFjaChtPT57aWYoVXQuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLG0sYSksIUEkZShhLG0pJiYhdil7Y29uc3QgYj1MJGUoYSxwLG0pO1V0Lndhcm4oImFiYzg4IGluc2lkZSIsbSxwLGIpLFV0Lndhcm4oImFiYzg4IGludGVyc2VjdGlvbiIsYik7bGV0IEU9ITE7Zi5mb3JFYWNoKF89PntFPUV8fF8ueD09PWIueCYmXy55PT09Yi55fSksZi5zb21lKF89Pl8ueD09PWIueCYmXy55PT09Yi55KT9VdC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGIsZik6Zi5wdXNoKGIpLHY9ITB9ZWxzZSBVdC53YXJuKCJhYmM4OCBvdXRzaWRlIixtLHApLHA9bSx2fHxmLnB1c2gobSl9KSxVdC53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixmKSxmfSxNJGU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYil7bGV0IEU9Zi5wb2ludHMsXz0hMTtjb25zdCBMPW0ubm9kZShhLnYpO3ZhciBOPW0ubm9kZShhLncpO1V0LmluZm8oImFiYzg4IEluc2VydEVkZ2U6ICIsZiksTi5pbnRlcnNlY3QmJkwuaW50ZXJzZWN0JiYoRT1FLnNsaWNlKDEsZi5wb2ludHMubGVuZ3RoLTEpLEUudW5zaGlmdChMLmludGVyc2VjdChFWzBdKSksVXQuaW5mbygiTGFzdCBwb2ludCIsRVtFLmxlbmd0aC0xXSxOLE4uaW50ZXJzZWN0KEVbRS5sZW5ndGgtMV0pKSxFLnB1c2goTi5pbnRlcnNlY3QoRVtFLmxlbmd0aC0xXSkpKSxmLnRvQ2x1c3RlciYmKFV0LmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHBbZi50b0NsdXN0ZXJdKSxFPV9CdChmLnBvaW50cyxwW2YudG9DbHVzdGVyXS5ub2RlKSxfPSEwKSxmLmZyb21DbHVzdGVyJiYoVXQuaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixwW2YuZnJvbUNsdXN0ZXJdKSxFPV9CdChFLnJldmVyc2UoKSxwW2YuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxfPSEwKTtjb25zdCBCPUUuZmlsdGVyKG10PT4hTnVtYmVyLmlzTmFOKG10LnkpKTtsZXQgaj1GTjtmLmN1cnZlJiYodj09PSJncmFwaCJ8fHY9PT0iZmxvd2NoYXJ0IikmJihqPWYuY3VydmUpO2NvbnN0e3g6Uix5Onp9PVRCdChmKSxLPVo3KCkueChSKS55KHopLmN1cnZlKGopO2xldCBpdDtzd2l0Y2goZi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjppdD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjppdD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjppdD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6aXQ9IiJ9c3dpdGNoKGYucGF0dGVybil7Y2FzZSJzb2xpZCI6aXQrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6aXQrPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOml0Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWNvbnN0IHN0PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsSyhCKSkuYXR0cigiaWQiLGYuaWQpLmF0dHIoImNsYXNzIiwiICIraXQrKGYuY2xhc3Nlcz8iICIrZi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLGYuc3R5bGUpO2xldCB1dD0iIjtzd2l0Y2goKExlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fExlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJih1dD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx1dD11dC5yZXBsYWNlKC9cKC9nLCJcXCgiKSx1dD11dC5yZXBsYWNlKC9cKS9nLCJcXCkiKSksVXQuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGYuYXJyb3dUeXBlU3RhcnQpLFV0LmluZm8oImFycm93VHlwZUVuZCIsZi5hcnJvd1R5cGVFbmQpLGYuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChmLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdXQrIiMiK2IrIl8iK3YrIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit1dCsiIyIrYisiXyIrdisiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3V0KyIjIitiKyJfIit2KyItbG9sbGlwb3BFbmQpIik7YnJlYWt9bGV0IGJ0PXt9O3JldHVybiBfJiYoYnQudXBkYXRlZFBhdGg9RSksYnQub3JpZ2luYWxQYXRoPWYucG9pbnRzLGJ0fSxTQnQ9YXN5bmMoaSxhLGYscCx2KT0+e1V0LmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsUzUoYSksdik7Y29uc3QgbT1hLmdyYXBoKCkucmFua2RpcjtVdC50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixtKTtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7YS5ub2RlcygpP1V0LmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixhLm5vZGVzKCkpOlV0LmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsYSksYS5lZGdlcygpLmxlbmd0aD4wJiZVdC50cmFjZSgiUmVjdXJzaXZlIGVkZ2VzIixhLmVkZ2UoYS5lZGdlcygpWzBdKSk7Y29uc3QgRT1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxfPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxMPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksTj1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChhLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKGope2NvbnN0IFI9YS5ub2RlKGopO2lmKHYhPT12b2lkIDApe2NvbnN0IHo9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2LmNsdXN0ZXJEYXRhKSk7VXQuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixqLCIpICIseix2KSxhLnNldE5vZGUodi5pZCx6KSxhLnBhcmVudChqKXx8KFV0LnRyYWNlKCJTZXR0aW5nIHBhcmVudCIsaix2LmlkKSxhLnNldFBhcmVudChqLHYuaWQseikpfWlmKFV0LmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitqKyI6ICIrSlNPTi5zdHJpbmdpZnkoYS5ub2RlKGopKSksUiYmUi5jbHVzdGVyTm9kZSl7VXQuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixqLFIud2lkdGgsYS5ub2RlKGopKTtjb25zdCB6PWF3YWl0IFNCdChOLFIuZ3JhcGgsZixwLGEubm9kZShqKSksSz16LmVsZW07UWgoUixLKSxSLmRpZmY9ei5kaWZmfHwwLFV0LmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixqLFIsUi53aWR0aCxSLngsUi55KSx4JGUoSyxSKSxVdC53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsSyxSKX1lbHNlIGEuY2hpbGRyZW4oaikubGVuZ3RoPjA/KFV0LmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsaixSLmlkLFIsYSksVXQuaW5mbyh3UChSLmlkLGEpKSxIb1tSLmlkXT17aWQ6d1AoUi5pZCxhKSxub2RlOlJ9KTooVXQuaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLGosUi5pZCxSKSxhd2FpdCB4QnQoTixhLm5vZGUoaiksbSkpfSkpLGEuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGope2NvbnN0IFI9YS5lZGdlKGoudixqLncsai5uYW1lKTtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSksVXQuaW5mbygiRWRnZSAiK2oudisiIC0+ICIrai53KyI6ICIsaiwiICIsSlNPTi5zdHJpbmdpZnkoYS5lZGdlKGopKSksVXQuaW5mbygiRml4IixIbywiaWRzOiIsai52LGoudywiVHJhbnNsYXRlaW5nOiAiLEhvW2oudl0sSG9bai53XSksQ0J0KEwsUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSl9KSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKGEpLGVMKGEpLFV0LmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFM1KGEpKTtsZXQgQj0wO3JldHVybiBaamUoYSkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEubm9kZShqKTtVdC5pbmZvKCJQb3NpdGlvbiAiK2orIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoaikpKSxVdC5pbmZvKCJQb3NpdGlvbiAiK2orIjogKCIrUi54LCIsIitSLnksIikgd2lkdGg6ICIsUi53aWR0aCwiIGhlaWdodDogIixSLmhlaWdodCksUiYmUi5jbHVzdGVyTm9kZT9rQnQoUik6YS5jaGlsZHJlbihqKS5sZW5ndGg+MD8oVCRlKEUsUiksSG9bUi5pZF0ubm9kZT1SKTprQnQoUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEuZWRnZShqKTtVdC5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShSKSxSKTtjb25zdCB6PU0kZShfLGosUixIbyxmLGEscCk7UyRlKFIseil9KSxhLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBSPWEubm9kZShqKTtVdC5pbmZvKGosUi50eXBlLFIuZGlmZiksUi50eXBlPT09Imdyb3VwIiYmKEI9Ui5kaWZmKX0pLHtlbGVtOmIsZGlmZjpCfX0sSTB0PWFzeW5jKGksYSxmLHAsdik9PntJRnQoaSxmLHAsdiksayRlKCksXyRlKCksQyRlKCksWWplKCksVXQud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShTNShhKSkpLFFqZShhKSxVdC53YXJuKCJHcmFwaCBhZnRlcjoiLEpTT04uc3RyaW5naWZ5KFM1KGEpKSksYXdhaXQgU0J0KGksYSxwLHYpfSxBQnQ9e30sSSRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlBQnRbZl09aVtmXX0sTEJ0PWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPXAuc2VsZWN0KGBbaWQ9IiR7Zn0iXWApO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgTD1pW19dO2xldCBOPSJkZWZhdWx0IjtMLmNsYXNzZXMubGVuZ3RoPjAmJihOPUwuY2xhc3Nlcy5qb2luKCIgIikpLE49TisiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgQj1lbShMLnN0eWxlcyk7bGV0IGo9TC50ZXh0IT09dm9pZCAwP0wudGV4dDpMLmlkLFI7aWYoVXQuaW5mbygidmVydGV4IixMLEwubGFiZWxUeXBlKSxMLmxhYmVsVHlwZT09PSJtYXJrZG93biIpVXQuaW5mbygidmVydGV4IixMLEwubGFiZWxUeXBlKTtlbHNlIGlmKHMxKExlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBpdD17bGFiZWw6ai5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csc3Q9PmA8aSBjbGFzcz0nJHtzdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTtSPWQwdChiLGl0KS5ub2RlKCksUi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFIpfWVsc2V7Y29uc3QgaXQ9di5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2l0LnNldEF0dHJpYnV0ZSgic3R5bGUiLEIubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBzdD1qLnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgdXQgb2Ygc3Qpe2NvbnN0IGJ0PXYuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7YnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksYnQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGJ0LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxidC50ZXh0Q29udGVudD11dCxpdC5hcHBlbmRDaGlsZChidCl9Uj1pdH1sZXQgej0wLEs9IiI7c3dpdGNoKEwudHlwZSl7Y2FzZSJyb3VuZCI6ej01LEs9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpLPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOks9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOks9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpLPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOks9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpLPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpLPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Sz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOks9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpLPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Sz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpLPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOks9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOks9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpLPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6Sz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Oks9InJlY3QifWEuc2V0Tm9kZShMLmlkLHtsYWJlbFN0eWxlOkIubGFiZWxTdHlsZSxzaGFwZTpLLGxhYmVsVGV4dDpqLGxhYmVsVHlwZTpMLmxhYmVsVHlwZSxyeDp6LHJ5OnosY2xhc3M6TixzdHlsZTpCLnN0eWxlLGlkOkwuaWQsbGluazpMLmxpbmssbGlua1RhcmdldDpMLmxpbmtUYXJnZXQsdG9vbHRpcDptLmRiLmdldFRvb2x0aXAoTC5pZCl8fCIiLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoTC5pZCksaGF2ZUNhbGxiYWNrOkwuaGF2ZUNhbGxiYWNrLHdpZHRoOkwudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6TC5kaXIsdHlwZTpMLnR5cGUscHJvcHM6TC5wcm9wcyxwYWRkaW5nOkxlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxVdC5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpCLmxhYmVsU3R5bGUsbGFiZWxUeXBlOkwubGFiZWxUeXBlLHNoYXBlOkssbGFiZWxUZXh0Omoscng6eixyeTp6LGNsYXNzOk4sc3R5bGU6Qi5zdHlsZSxpZDpMLmlkLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoTC5pZCksd2lkdGg6TC50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6TC50eXBlLGRpcjpMLmRpcixwcm9wczpMLnByb3BzLHBhZGRpbmc6TGUoKS5mbG93Y2hhcnQucGFkZGluZ30pfSl9LE1CdD1mdW5jdGlvbihpLGEsZil7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2xldCBwPTAsdj17fSxtLGI7aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEU9ZW0oaS5kZWZhdWx0U3R5bGUpO209RS5zdHlsZSxiPUUubGFiZWxTdHlsZX1pLmZvckVhY2goZnVuY3Rpb24oRSl7cCsrO2NvbnN0IF89IkwtIitFLnN0YXJ0KyItIitFLmVuZDt2W19dPT09dm9pZCAwPyh2W19dPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixfLHZbX10pKToodltfXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsXyx2W19dKSk7bGV0IEw9XysiLSIrdltfXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixfLEwsdltfXSk7Y29uc3QgTj0iTFMtIitFLnN0YXJ0LEI9IkxFLSIrRS5lbmQsaj17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKGoubWlubGVuPUUubGVuZ3RofHwxLEUudHlwZT09PSJhcnJvd19vcGVuIj9qLmFycm93aGVhZD0ibm9uZSI6ai5hcnJvd2hlYWQ9Im5vcm1hbCIsai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsai5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEUudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpqLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBSPSIiLHo9IiI7c3dpdGNoKEUuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Uj0iZmlsbDpub25lOyIsbSE9PXZvaWQgMCYmKFI9bSksYiE9PXZvaWQgMCYmKHo9Yiksai50aGlja25lc3M9Im5vcm1hbCIsai5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmoudGhpY2tuZXNzPSJub3JtYWwiLGoucGF0dGVybj0iZG90dGVkIixqLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpqLnRoaWNrbmVzcz0idGhpY2siLGoucGF0dGVybj0ic29saWQiLGouc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOmoudGhpY2tuZXNzPSJpbnZpc2libGUiLGoucGF0dGVybj0ic29saWQiLGouc3R5bGU9InN0cm9rZS13aWR0aDogMDtmaWxsOm5vbmU7IjticmVha31pZihFLnN0eWxlIT09dm9pZCAwKXtjb25zdCBLPWVtKEUuc3R5bGUpO1I9Sy5zdHlsZSx6PUsubGFiZWxTdHlsZX1qLnN0eWxlPWouc3R5bGUrPVIsai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZSs9eixFLmludGVycG9sYXRlIT09dm9pZCAwP2ouY3VydmU9WDIoRS5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/ai5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6ai5jdXJ2ZT1YMihBQnQuY3VydmUsaWcpLEUudGV4dD09PXZvaWQgMD9FLnN0eWxlIT09dm9pZCAwJiYoai5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihqLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixqLmxhYmVscG9zPSJjIiksai5sYWJlbFR5cGU9RS5sYWJlbFR5cGUsai5sYWJlbD1FLnRleHQucmVwbGFjZShZci5saW5lQnJlYWtSZWdleCxgCmApLEUuc3R5bGU9PT12b2lkIDAmJihqLnN0eWxlPWouc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLGoubGFiZWxTdHlsZT1qLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSxqLmlkPUwsai5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK04rIiAiK0IsYS5zZXRFZGdlKEUuc3RhcnQsRS5lbmQsaixwKX0pfSxEMHQ9e3NldENvbmY6SSRlLGFkZFZlcnRpY2VzOkxCdCxhZGRFZGdlczpNQnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBhLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCB2PXAuZGIuZ2V0RGlyZWN0aW9uKCk7dj09PXZvaWQgMCYmKHY9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDptLGZsb3djaGFydDpifT1MZSgpLEU9Yi5ub2RlU3BhY2luZ3x8NTAsXz1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgTDttPT09InNhbmRib3giJiYoTD15cigiI2kiK2EpKTtjb25zdCBOPXlyKG09PT0ic2FuZGJveCI/TC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1tPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsaj1uZXcgYTEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp2LG5vZGVzZXA6RSxyYW5rc2VwOl8sbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLHopO2ZvcihsZXQgeXQ9ei5sZW5ndGgtMTt5dD49MDt5dC0tKVI9elt5dF0sVXQuaW5mbygiU3ViZ3JhcGggLSAiLFIpLHAuZGIuYWRkVmVydGV4KFIuaWQse3RleHQ6Ui50aXRsZSx0eXBlOlIubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMsUi5kaXIpO2NvbnN0IEs9cC5kYi5nZXRWZXJ0aWNlcygpLGl0PXAuZGIuZ2V0RWRnZXMoKTtVdC5pbmZvKCJFZGdlcyIsaXQpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sWkx0KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCB5dD0wO3l0PFIubm9kZXMubGVuZ3RoO3l0KyspVXQuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLFIubm9kZXNbeXRdLFIuaWQpLGouc2V0UGFyZW50KFIubm9kZXNbeXRdLFIuaWQpfUxCdChLLGosYSxOLEIscCksTUJ0KGl0LGopO2NvbnN0IHV0PU4uc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGJ0PU4uc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IEkwdChidCxqLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGEpLCRhLmluc2VydFRpdGxlKHV0LCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4scC5kYi5nZXREaWFncmFtVGl0bGUoKSksY1Qoaix1dCxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLHAuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK3N0KSwhYi5odG1sTGFiZWxzKXtjb25zdCB5dD1CLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBkdCBvZiB5dCl7Y29uc3QgaHQ9ZHQuZ2V0QkJveCgpLHd0PUIuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt3dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx3dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx3dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixodC53aWR0aCksd3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLGh0LmhlaWdodCksZHQuaW5zZXJ0QmVmb3JlKHd0LGR0LmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKHl0KXtjb25zdCBkdD1LW3l0XTtpZihkdC5saW5rKXtjb25zdCBodD15cigiIyIrYSsnIFtpZD0iJyt5dCsnIl0nKTtpZihodCl7Y29uc3Qgd3Q9Qi5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3d0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixkdC5jbGFzc2VzLmpvaW4oIiAiKSksd3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsZHQubGluayksd3Quc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxtPT09InNhbmRib3giP3d0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpkdC5saW5rVGFyZ2V0JiZ3dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGR0LmxpbmtUYXJnZXQpO2NvbnN0IFg9aHQuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHd0fSwiOmZpcnN0LWNoaWxkIikscHQ9aHQuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7cHQmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHB0Lm5vZGUoKX0pO2NvbnN0IFU9aHQuc2VsZWN0KCIubGFiZWwiKTtVJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBVLm5vZGUoKX0pfX19KX19LEQkZT0oaSxhKT0+e2NvbnN0IGY9alRlLHA9ZihpLCJyIiksdj1mKGksImciKSxtPWYoaSwiYiIpO3JldHVybiBJQShwLHYsbSxhKX0sSUJ0PWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke0QkZShpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxPJGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokZHQsZGI6Z1QscmVuZGVyZXI6RDB0LHN0eWxlczpJQnQsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsJEJlLnNldENvbmYoaS5mbG93Y2hhcnQpLGdULmNsZWFyKCksZ1Quc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksTiRlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6JGR0LGRiOmdULHJlbmRlcmVyOkQwdCxzdHlsZXM6SUJ0LGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLGlPdCh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxEMHQuc2V0Q29uZihpLmZsb3djaGFydCksZ1QuY2xlYXIoKSxnVC5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTzB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24od3QsWCxwdCxVKXtmb3IocHQ9cHR8fHt9LFU9d3QubGVuZ3RoO1UtLTtwdFt3dFtVXV09WCk7cmV0dXJuIHB0fSxhPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLGY9WzEsMTBdLHA9WzEsMTFdLHY9WzEsMTJdLG09WzEsMTNdLGI9WzEsMTRdLEU9WzEsMTVdLF89WzEsMjFdLEw9WzEsMjJdLE49WzEsMjNdLEI9WzEsMjRdLGo9WzEsMjVdLFI9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sej1bMSwzNF0sSz1bMjcsMjgsNDYsNDddLGl0PVs0MSw0Miw0Myw0NCw0NV0sc3Q9WzE3LDM0XSx1dD1bMSw1NF0sYnQ9WzEsNTNdLG10PVsxNywzNCwzNiwzOF0seXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxwdCxVLHh0LG50LE90LE50KXt2YXIgcXQ9T3QubGVuZ3RoLTE7c3dpdGNoKG50KXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6T3RbcXQtMV0ucHVzaChPdFtxdF0pLHRoaXMuJD1PdFtxdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1PdFtxdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onh0LmFkZEVudGl0eShPdFtxdC00XSkseHQuYWRkRW50aXR5KE90W3F0LTJdKSx4dC5hZGRSZWxhdGlvbnNoaXAoT3RbcXQtNF0sT3RbcXRdLE90W3F0LTJdLE90W3F0LTNdKTticmVhaztjYXNlIDk6eHQuYWRkRW50aXR5KE90W3F0LTNdKSx4dC5hZGRBdHRyaWJ1dGVzKE90W3F0LTNdLE90W3F0LTFdKTticmVhaztjYXNlIDEwOnh0LmFkZEVudGl0eShPdFtxdC0yXSk7YnJlYWs7Y2FzZSAxMTp4dC5hZGRFbnRpdHkoT3RbcXRdKTticmVhaztjYXNlIDEyOnh0LmFkZEVudGl0eShPdFtxdC02XSxPdFtxdC00XSkseHQuYWRkQXR0cmlidXRlcyhPdFtxdC02XSxPdFtxdC0xXSk7YnJlYWs7Y2FzZSAxMzp4dC5hZGRFbnRpdHkoT3RbcXQtNV0sT3RbcXQtM10pO2JyZWFrO2Nhc2UgMTQ6eHQuYWRkRW50aXR5KE90W3F0LTNdLE90W3F0LTFdKTticmVhaztjYXNlIDE1OmNhc2UgMTY6dGhpcy4kPU90W3F0XS50cmltKCkseHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPU90W3F0XS50cmltKCkseHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OmNhc2UgNDM6dGhpcy4kPU90W3F0XTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9T3RbcXRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMTpjYXNlIDI5OnRoaXMuJD1bT3RbcXRdXTticmVhaztjYXNlIDIyOk90W3F0XS5wdXNoKE90W3F0LTFdKSx0aGlzLiQ9T3RbcXRdO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOk90W3F0LTFdLGF0dHJpYnV0ZU5hbWU6T3RbcXRdfTticmVhaztjYXNlIDI0OnRoaXMuJD17YXR0cmlidXRlVHlwZTpPdFtxdC0yXSxhdHRyaWJ1dGVOYW1lOk90W3F0LTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0Ok90W3F0XX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6T3RbcXQtMl0sYXR0cmlidXRlTmFtZTpPdFtxdC0xXSxhdHRyaWJ1dGVDb21tZW50Ok90W3F0XX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6T3RbcXQtM10sYXR0cmlidXRlTmFtZTpPdFtxdC0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpPdFtxdC0xXSxhdHRyaWJ1dGVDb21tZW50Ok90W3F0XX07YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OmNhc2UgMzE6dGhpcy4kPU90W3F0XTticmVhaztjYXNlIDMwOk90W3F0LTJdLnB1c2goT3RbcXRdKSx0aGlzLiQ9T3RbcXQtMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9T3RbcXRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e2NhcmRBOk90W3F0XSxyZWxUeXBlOk90W3F0LTFdLGNhcmRCOk90W3F0LTJdfTticmVhaztjYXNlIDM0OnRoaXMuJD14dC5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD14dC5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9eHQuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXh0LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQwOnRoaXMuJD14dC5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6OSwyMDpmLDIyOnAsMjQ6diwyNjptLDI3OmIsMjg6RX0saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxNiwxMTo5LDIwOmYsMjI6cCwyNDp2LDI2Om0sMjc6YiwyODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDExXSx7MTI6MTcsMzk6MjAsMTU6WzEsMThdLDE4OlsxLDE5XSw0MTpfLDQyOkwsNDM6Tiw0NDpCLDQ1Omp9KSx7MjE6WzEsMjZdfSx7MjM6WzEsMjddfSx7MjU6WzEsMjhdfSxpKGEsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKGEsWzIsNF0pLHsxMToyOSwyNzpiLDI4OkV9LHsxNjozMCwxNzpbMSwzMV0sMjk6MzIsMzA6MzMsMzQ6en0sezExOjM1LDI3OmIsMjg6RX0sezQwOjM2LDQ2OlsxLDM3XSw0NzpbMSwzOF19LGkoSyxbMiwzNF0pLGkoSyxbMiwzNV0pLGkoSyxbMiwzNl0pLGkoSyxbMiwzN10pLGkoSyxbMiwzOF0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLHsxMzpbMSwzOV19LHsxNzpbMSw0MF19LGkoYSxbMiwxMF0pLHsxNjo0MSwxNzpbMiwyMV0sMjk6MzIsMzA6MzMsMzQ6en0sezMxOjQyLDM0OlsxLDQzXX0sezM0OlsyLDI3XX0sezE5OlsxLDQ0XX0sezM5OjQ1LDQxOl8sNDI6TCw0MzpOLDQ0OkIsNDU6an0saShpdCxbMiwzOV0pLGkoaXQsWzIsNDBdKSx7MTQ6NDYsMjc6WzEsNDldLDI4OlsxLDQ4XSw0ODpbMSw0N119LGkoYSxbMiw5XSksezE3OlsyLDIyXX0saShzdCxbMiwyM10sezMyOjUwLDMzOjUxLDM1OjUyLDM3OnV0LDM4OmJ0fSksaShbMTcsMzQsMzcsMzhdLFsyLDI4XSksaShhLFsyLDE0XSx7MTU6WzEsNTVdfSksaShbMjcsMjhdLFsyLDMzXSksaShhLFsyLDhdKSxpKGEsWzIsNDFdKSxpKGEsWzIsNDJdKSxpKGEsWzIsNDNdKSxpKHN0LFsyLDI0XSx7MzM6NTYsMzY6WzEsNTddLDM4OmJ0fSksaShzdCxbMiwyNV0pLGkobXQsWzIsMjldKSxpKHN0LFsyLDMyXSksaShtdCxbMiwzMV0pLHsxNjo1OCwxNzpbMSw1OV0sMjk6MzIsMzA6MzMsMzQ6en0saShzdCxbMiwyNl0pLHszNTo2MCwzNzp1dH0sezE3OlsxLDYxXX0saShhLFsyLDEzXSksaShtdCxbMiwzMF0pLGkoYSxbMiwxMl0pXSxkZWZhdWx0QWN0aW9uczp7MzQ6WzIsMjddLDQxOlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihYLHB0KXtpZihwdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFgpO2Vsc2V7dmFyIFU9bmV3IEVycm9yKFgpO3Rocm93IFUuaGFzaD1wdCxVfX0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIHB0PXRoaXMsVT1bMF0seHQ9W10sbnQ9W251bGxdLE90PVtdLE50PXRoaXMudGFibGUscXQ9IiIsQ3Q9MCxaPTAsVHQ9MixIdD0xLEl0PU90LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEZ0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksa2U9e3l5Ont9fTtmb3IodmFyIHBuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscG4pJiYoa2UueXlbcG5dPXRoaXMueXlbcG5dKTtGdC5zZXRJbnB1dChYLGtlLnl5KSxrZS55eS5sZXhlcj1GdCxrZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRnQueXlsbG9jPiJ1IiYmKEZ0Lnl5bGxvYz17fSk7dmFyIE1lPUZ0Lnl5bGxvYztPdC5wdXNoKE1lKTt2YXIgdmU9RnQub3B0aW9ucyYmRnQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGtlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWtlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEdlKCl7dmFyIGNuO3JldHVybiBjbj14dC5wb3AoKXx8RnQubGV4KCl8fEh0LHR5cGVvZiBjbiE9Im51bWJlciImJihjbiBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9Y24sY249eHQucG9wKCkpLGNuPXB0LnN5bWJvbHNfW2NuXXx8Y24pLGNufWZvcih2YXIgS2Usd2UsX2UsJHQscmU9e30saWUsT2Usb2UsTmU7Oyl7aWYod2U9VVtVLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3dlXT9fZT10aGlzLmRlZmF1bHRBY3Rpb25zW3dlXTooKEtlPT09bnVsbHx8dHlwZW9mIEtlPiJ1IikmJihLZT1HZSgpKSxfZT1OdFt3ZV0mJk50W3dlXVtLZV0pLHR5cGVvZiBfZT4idSJ8fCFfZS5sZW5ndGh8fCFfZVswXSl7dmFyIG1lPSIiO05lPVtdO2ZvcihpZSBpbiBOdFt3ZV0pdGhpcy50ZXJtaW5hbHNfW2llXSYmaWU+VHQmJk5lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tpZV0rIiciKTtGdC5zaG93UG9zaXRpb24/bWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQ3QrMSkrYDoKYCtGdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK05lLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bS2VdfHxLZSkrIiciOm1lPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEN0KzEpKyI6IFVuZXhwZWN0ZWQgIisoS2U9PUh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0tlXXx8S2UpKyInIiksdGhpcy5wYXJzZUVycm9yKG1lLHt0ZXh0OkZ0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tLZV18fEtlLGxpbmU6RnQueXlsaW5lbm8sbG9jOk1lLGV4cGVjdGVkOk5lfSl9aWYoX2VbMF1pbnN0YW5jZW9mIEFycmF5JiZfZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3dlKyIsIHRva2VuOiAiK0tlKTtzd2l0Y2goX2VbMF0pe2Nhc2UgMTpVLnB1c2goS2UpLG50LnB1c2goRnQueXl0ZXh0KSxPdC5wdXNoKEZ0Lnl5bGxvYyksVS5wdXNoKF9lWzFdKSxLZT1udWxsLFo9RnQueXlsZW5nLHF0PUZ0Lnl5dGV4dCxDdD1GdC55eWxpbmVubyxNZT1GdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKE9lPXRoaXMucHJvZHVjdGlvbnNfW19lWzFdXVsxXSxyZS4kPW50W250Lmxlbmd0aC1PZV0scmUuXyQ9e2ZpcnN0X2xpbmU6T3RbT3QubGVuZ3RoLShPZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOk90W090Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk90W090Lmxlbmd0aC0oT2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46T3RbT3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2ZSYmKHJlLl8kLnJhbmdlPVtPdFtPdC5sZW5ndGgtKE9lfHwxKV0ucmFuZ2VbMF0sT3RbT3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksJHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHJlLFtxdCxaLEN0LGtlLnl5LF9lWzFdLG50LE90XS5jb25jYXQoSXQpKSx0eXBlb2YgJHQ8InUiKXJldHVybiAkdDtPZSYmKFU9VS5zbGljZSgwLC0xKk9lKjIpLG50PW50LnNsaWNlKDAsLTEqT2UpLE90PU90LnNsaWNlKDAsLTEqT2UpKSxVLnB1c2godGhpcy5wcm9kdWN0aW9uc19bX2VbMV1dWzBdKSxudC5wdXNoKHJlLiQpLE90LnB1c2gocmUuXyQpLG9lPU50W1VbVS5sZW5ndGgtMl1dW1VbVS5sZW5ndGgtMV1dLFUucHVzaChvZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGR0PWZ1bmN0aW9uKCl7dmFyIHd0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHB0LFUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocHQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocHQpfSxzZXRJbnB1dDpmdW5jdGlvbihYLHB0KXtyZXR1cm4gdGhpcy55eT1wdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9WCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9WCx0aGlzLm1hdGNoZWQrPVg7dmFyIHB0PVgubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBwdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWH0sdW5wdXQ6ZnVuY3Rpb24oWCl7dmFyIHB0PVgubGVuZ3RoLFU9WC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVgrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXB0KSx0aGlzLm9mZnNldC09cHQ7dmFyIHh0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1VLmxlbmd0aC0xKTt2YXIgbnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlU/KFUubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtVS5sZW5ndGhdLmxlbmd0aC1VWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bbnRbMF0sbnRbMF0rdGhpcy55eWxlbmctcHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihYKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoWCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFgubGVuZ3RoPjIwPyIuLi4iOiIiKStYLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5tYXRjaDtyZXR1cm4gWC5sZW5ndGg8MjAmJihYKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YLmxlbmd0aCkpLChYLnN1YnN0cigwLDIwKSsoWC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5wYXN0SW5wdXQoKSxwdD1uZXcgQXJyYXkoWC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBYK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWCxwdCl7dmFyIFUseHQsbnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKG50PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKG50Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PVhbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHh0JiYodGhpcy55eWxpbmVubys9eHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eHQ/eHRbeHQubGVuZ3RoLTFdLmxlbmd0aC14dFt4dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVhbMF0sdGhpcy5tYXRjaCs9WFswXSx0aGlzLm1hdGNoZXM9WCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShYWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1YWzBdLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVSlyZXR1cm4gVTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgT3QgaW4gbnQpdGhpc1tPdF09bnRbT3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgscHQsVSx4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBudD10aGlzLl9jdXJyZW50UnVsZXMoKSxPdD0wO090PG50Lmxlbmd0aDtPdCsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tudFtPdF1dKSxVJiYoIXB0fHxVWzBdLmxlbmd0aD5wdFswXS5sZW5ndGgpKXtpZihwdD1VLHh0PU90LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFUsbnRbT3RdKSxYIT09ITEpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXtwdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBwdD8oWD10aGlzLnRlc3RfbWF0Y2gocHQsbnRbeHRdKSxYIT09ITE/WDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMubmV4dCgpO3JldHVybiBwdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24ocHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24ocHQpe3JldHVybiBwdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHB0fHwwKSxwdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3B0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihwdCl7dGhpcy5iZWdpbihwdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocHQsVSx4dCxudCl7c3dpdGNoKHh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHd0fSgpO3l0LmxleGVyPWR0O2Z1bmN0aW9uIGh0KCl7dGhpcy55eT17fX1yZXR1cm4gaHQucHJvdG90eXBlPXl0LHl0LlBhcnNlcj1odCxuZXcgaHR9KCk7TzB0LnBhcnNlcj1PMHQ7Y29uc3QgUCRlPU8wdDtsZXQgaGs9e30sTjB0PVtdO2NvbnN0IEYkZT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sQiRlPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sREJ0PWZ1bmN0aW9uKGksYT12b2lkIDApe3JldHVybiBoa1tpXT09PXZvaWQgMD8oaGtbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6YX0sVXQuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6aGtbaV0mJiFoa1tpXS5hbGlhcyYmYSYmKGhrW2ldLmFsaWFzPWEsVXQuaW5mbyhgQWRkIGFsaWFzICcke2F9JyB0byBlbnRpdHkgJyR7aX0nYCkpLGhrW2ldfSxSJGU9e0NhcmRpbmFsaXR5OkYkZSxJZGVudGlmaWNhdGlvbjpCJGUsZ2V0Q29uZmlnOigpPT5MZSgpLmVyLGFkZEVudGl0eTpEQnQsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLGEpe2xldCBmPURCdChpKSxwO2ZvcihwPWEubGVuZ3RoLTE7cD49MDtwLS0pZi5hdHRyaWJ1dGVzLnB1c2goYVtwXSksVXQuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGFbcF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5oayxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9e2VudGl0eUE6aSxyb2xlQTphLGVudGl0eUI6ZixyZWxTcGVjOnB9O04wdC5wdXNoKHYpLFV0LmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHYpfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5OMHQsY2xlYXI6ZnVuY3Rpb24oKXtoaz17fSxOMHQ9W10sYXAoKX0sc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYn0sdW09e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LGxtPXtFUk1hcmtlcnM6dW0saW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLGEpe2xldCBmO2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksZi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1bS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHVtLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSxmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdW0uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxqJGU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uICQkZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZqJGUudGVzdChpKX1jb25zdCBQZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpUGQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24geiRlKGksYT0wKXtyZXR1cm4oUGRbaVthKzBdXStQZFtpW2ErMV1dK1BkW2lbYSsyXV0rUGRbaVthKzNdXSsiLSIrUGRbaVthKzRdXStQZFtpW2ErNV1dKyItIitQZFtpW2ErNl1dK1BkW2lbYSs3XV0rIi0iK1BkW2lbYSs4XV0rUGRbaVthKzldXSsiLSIrUGRbaVthKzEwXV0rUGRbaVthKzExXV0rUGRbaVthKzEyXV0rUGRbaVthKzEzXV0rUGRbaVthKzE0XV0rUGRbaVthKzE1XV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcSRlKGkpe2lmKCEkJGUoaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgYTtjb25zdCBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZlswXT0oYT1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LGZbMV09YT4+PjE2JjI1NSxmWzJdPWE+Pj44JjI1NSxmWzNdPWEmMjU1LGZbNF09KGE9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCxmWzVdPWEmMjU1LGZbNl09KGE9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsZls3XT1hJjI1NSxmWzhdPShhPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGZbOV09YSYyNTUsZlsxMF09KGE9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxmWzExXT1hLzQyOTQ5NjcyOTYmMjU1LGZbMTJdPWE+Pj4yNCYyNTUsZlsxM109YT4+PjE2JjI1NSxmWzE0XT1hPj4+OCYyNTUsZlsxNV09YSYyNTUsZn1mdW5jdGlvbiBIJGUoaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IGE9W107Zm9yKGxldCBmPTA7ZjxpLmxlbmd0aDsrK2YpYS5wdXNoKGkuY2hhckNvZGVBdChmKSk7cmV0dXJuIGF9Y29uc3QgRyRlPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLFYkZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiBVJGUoaSxhLGYpe2Z1bmN0aW9uIHAodixtLGIsRSl7dmFyIF87aWYodHlwZW9mIHY9PSJzdHJpbmciJiYodj1IJGUodikpLHR5cGVvZiBtPT0ic3RyaW5nIiYmKG09cSRlKG0pKSwoKF89bSk9PT1udWxsfHxfPT09dm9pZCAwP3ZvaWQgMDpfLmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgTD1uZXcgVWludDhBcnJheSgxNit2Lmxlbmd0aCk7aWYoTC5zZXQobSksTC5zZXQodixtLmxlbmd0aCksTD1mKEwpLExbNl09TFs2XSYxNXxhLExbOF09TFs4XSY2M3wxMjgsYil7RT1FfHwwO2ZvcihsZXQgTj0wO048MTY7KytOKWJbRStOXT1MW05dO3JldHVybiBifXJldHVybiB6JGUoTCl9dHJ5e3AubmFtZT1pfWNhdGNoe31yZXR1cm4gcC5ETlM9RyRlLHAuVVJMPVYkZSxwfWZ1bmN0aW9uIFckZShpLGEsZixwKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhJmZefmEmcDtjYXNlIDE6cmV0dXJuIGFeZl5wO2Nhc2UgMjpyZXR1cm4gYSZmXmEmcF5mJnA7Y2FzZSAzOnJldHVybiBhXmZecH19ZnVuY3Rpb24gUDB0KGksYSl7cmV0dXJuIGk8PGF8aT4+PjMyLWF9ZnVuY3Rpb24gSyRlKGkpe2NvbnN0IGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLGY9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgRT0wO0U8Yi5sZW5ndGg7KytFKWkucHVzaChiLmNoYXJDb2RlQXQoRSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IHA9aS5sZW5ndGgvNCsyLHY9TWF0aC5jZWlsKHAvMTYpLG09bmV3IEFycmF5KHYpO2ZvcihsZXQgYj0wO2I8djsrK2Ipe2NvbnN0IEU9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IF89MDtfPDE2OysrXylFW19dPWlbYio2NCtfKjRdPDwyNHxpW2IqNjQrXyo0KzFdPDwxNnxpW2IqNjQrXyo0KzJdPDw4fGlbYio2NCtfKjQrM107bVtiXT1FfW1bdi0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksbVt2LTFdWzE0XT1NYXRoLmZsb29yKG1bdi0xXVsxNF0pLG1bdi0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHY7KytiKXtjb25zdCBFPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBSPTA7UjwxNjsrK1IpRVtSXT1tW2JdW1JdO2ZvcihsZXQgUj0xNjtSPDgwOysrUilFW1JdPVAwdChFW1ItM11eRVtSLThdXkVbUi0xNF1eRVtSLTE2XSwxKTtsZXQgXz1mWzBdLEw9ZlsxXSxOPWZbMl0sQj1mWzNdLGo9Zls0XTtmb3IobGV0IFI9MDtSPDgwOysrUil7Y29uc3Qgej1NYXRoLmZsb29yKFIvMjApLEs9UDB0KF8sNSkrVyRlKHosTCxOLEIpK2orYVt6XStFW1JdPj4+MDtqPUIsQj1OLE49UDB0KEwsMzApPj4+MCxMPV8sXz1LfWZbMF09ZlswXStfPj4+MCxmWzFdPWZbMV0rTD4+PjAsZlsyXT1mWzJdK04+Pj4wLGZbM109ZlszXStCPj4+MCxmWzRdPWZbNF0raj4+PjB9cmV0dXJuW2ZbMF0+PjI0JjI1NSxmWzBdPj4xNiYyNTUsZlswXT4+OCYyNTUsZlswXSYyNTUsZlsxXT4+MjQmMjU1LGZbMV0+PjE2JjI1NSxmWzFdPj44JjI1NSxmWzFdJjI1NSxmWzJdPj4yNCYyNTUsZlsyXT4+MTYmMjU1LGZbMl0+PjgmMjU1LGZbMl0mMjU1LGZbM10+PjI0JjI1NSxmWzNdPj4xNiYyNTUsZlszXT4+OCYyNTUsZlszXSYyNTUsZls0XT4+MjQmMjU1LGZbNF0+PjE2JjI1NSxmWzRdPj44JjI1NSxmWzRdJjI1NV19Y29uc3QgWSRlPVUkZSgidjUiLDgwLEskZSksWCRlPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IG8xPXt9LHlQPW5ldyBNYXA7Y29uc3QgUSRlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlvMVtmXT1pW2ZdfSxaJGU9KGksYSxmKT0+e2NvbnN0IHA9bzEuZW50aXR5UGFkZGluZy8zLHY9bzEuZW50aXR5UGFkZGluZy8zLG09bzEuZm9udFNpemUqLjg1LGI9YS5ub2RlKCkuZ2V0QkJveCgpLEU9W107bGV0IF89ITEsTD0hMSxOPTAsQj0wLGo9MCxSPTAsej1iLmhlaWdodCtwKjIsSz0xO2YuZm9yRWFjaChidD0+e2J0LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZidC5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKF89ITApLGJ0LmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihMPSEwKX0pLGYuZm9yRWFjaChidD0+e2NvbnN0IG10PWAke2Eubm9kZSgpLmlkfS1hdHRyLSR7S31gO2xldCB5dD0wO2NvbnN0IGR0PXpOKGJ0LmF0dHJpYnV0ZVR5cGUpLGh0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChkdCksd3Q9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHttdH0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGJ0LmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj1odCxYLm5uPXd0O2NvbnN0IHB0PWh0Lm5vZGUoKS5nZXRCQm94KCksVT13dC5ub2RlKCkuZ2V0QkJveCgpO2lmKE49TWF0aC5tYXgoTixwdC53aWR0aCksQj1NYXRoLm1heChCLFUud2lkdGgpLHl0PU1hdGgubWF4KHB0LmhlaWdodCxVLmhlaWdodCksXyl7Y29uc3QgeHQ9YnQuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/YnQuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLG50PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KHh0KTtYLmtuPW50O2NvbnN0IE90PW50Lm5vZGUoKS5nZXRCQm94KCk7aj1NYXRoLm1heChqLE90LndpZHRoKSx5dD1NYXRoLm1heCh5dCxPdC5oZWlnaHQpfWlmKEwpe2NvbnN0IHh0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChidC5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj14dDtjb25zdCBudD14dC5ub2RlKCkuZ2V0QkJveCgpO1I9TWF0aC5tYXgoUixudC53aWR0aCkseXQ9TWF0aC5tYXgoeXQsbnQuaGVpZ2h0KX1YLmhlaWdodD15dCxFLnB1c2goWCkseis9eXQrcCoyLEsrPTF9KTtsZXQgaXQ9NDtfJiYoaXQrPTIpLEwmJihpdCs9Mik7Y29uc3Qgc3Q9TitCK2orUix1dD17d2lkdGg6TWF0aC5tYXgobzEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtvMS5lbnRpdHlQYWRkaW5nKjIsc3QrdippdCkpLGhlaWdodDpmLmxlbmd0aD4wP3o6TWF0aC5tYXgobzEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K28xLmVudGl0eVBhZGRpbmcqMil9O2lmKGYubGVuZ3RoPjApe2NvbnN0IGJ0PU1hdGgubWF4KDAsKHV0LndpZHRoLXN0LXYqaXQpLyhpdC8yKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1dC53aWR0aC8yKyIsIisocCtiLmhlaWdodC8yKSsiKSIpO2xldCBtdD1iLmhlaWdodCtwKjIseXQ9ImF0dHJpYnV0ZUJveE9kZCI7RS5mb3JFYWNoKGR0PT57Y29uc3QgaHQ9bXQrcCtkdC5oZWlnaHQvMjtkdC50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsIitodCsiKSIpO2NvbnN0IHd0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZHQudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsTit2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMiksWD1wYXJzZUZsb2F0KHd0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh3dC5hdHRyKCJ3aWR0aCIpKTtkdC5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCt2KSsiLCIraHQrIikiKTtjb25zdCBwdD1pLmluc2VydCgicmVjdCIsIiMiK2R0Lm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHt5dH1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixtdCkuYXR0cigid2lkdGgiLEIrdioyK2J0KS5hdHRyKCJoZWlnaHQiLGR0LmhlaWdodCtwKjIpO2xldCBVPXBhcnNlRmxvYXQocHQuYXR0cigieCIpKStwYXJzZUZsb2F0KHB0LmF0dHIoIndpZHRoIikpO2lmKF8pe2R0LmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhVK3YpKyIsIitodCsiKSIpO2NvbnN0IHh0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZHQua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsait2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMik7VT1wYXJzZUZsb2F0KHh0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh4dC5hdHRyKCJ3aWR0aCIpKX1MJiYoZHQuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFUrdikrIiwiK2h0KyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIitkdC5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7eXR9YCwidHJ1ZSIpLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsUit2KjIrYnQpLmF0dHIoImhlaWdodCIsZHQuaGVpZ2h0K3AqMikpLG10Kz1kdC5oZWlnaHQrcCoyLHl0PXl0PT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSB1dC5oZWlnaHQ9TWF0aC5tYXgobzEubWluRW50aXR5SGVpZ2h0LHopLGEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdXQud2lkdGgvMisiLCIrdXQuaGVpZ2h0LzIrIikiKTtyZXR1cm4gdXR9LEokZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1PYmplY3Qua2V5cyhhKTtsZXQgdjtyZXR1cm4gcC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2NvbnN0IGI9c3plKG0sImVudGl0eSIpO3lQLnNldChtLGIpO2NvbnN0IEU9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7dj12PT09dm9pZCAwP2I6djtjb25zdCBfPSJ0ZXh0LSIrYixMPUUuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsXykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixMZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG8xLmZvbnRTaXplKyJweCIpLnRleHQoYVttXS5hbGlhcz8/bSkse3dpZHRoOk4saGVpZ2h0OkJ9PVokZShFLEwsYVttXS5hdHRyaWJ1dGVzKSxSPUUuaW5zZXJ0KCJyZWN0IiwiIyIrXykuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLE4pLmF0dHIoImhlaWdodCIsQikubm9kZSgpLmdldEJCb3goKTtmLnNldE5vZGUoYix7d2lkdGg6Ui53aWR0aCxoZWlnaHQ6Ui5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHZ9LHR6ZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpfSl9LE9CdD1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sZXplPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihmKXthLnNldEVkZ2UoeVAuZ2V0KGYuZW50aXR5QSkseVAuZ2V0KGYuZW50aXR5Qikse3JlbGF0aW9uc2hpcDpmfSxPQnQoZikpfSksaX07bGV0IE5CdD0wO2NvbnN0IG56ZT1mdW5jdGlvbihpLGEsZixwLHYpe05CdCsrO2NvbnN0IG09Zi5lZGdlKHlQLmdldChhLmVudGl0eUEpLHlQLmdldChhLmVudGl0eUIpLE9CdChhKSksYj1aNygpLngoZnVuY3Rpb24oeil7cmV0dXJuIHoueH0pLnkoZnVuY3Rpb24oeil7cmV0dXJuIHoueX0pLmN1cnZlKEZOKSxFPWkuaW5zZXJ0KCJwYXRoIiwiIyIrcCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIobS5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIixvMS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EucmVsU3BlYy5yZWxUeXBlPT09di5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJkUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBfPSIiO3N3aXRjaChvMS5hcnJvd01hcmtlckFic29sdXRlJiYoXz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxfPV8ucmVwbGFjZSgvXCgvZywiXFwoIiksXz1fLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLnJlbFNwZWMuY2FyZEEpe2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdi5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKGEucmVsU3BlYy5jYXJkQil7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrbG0uRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB2LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK18rIiMiK2xtLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitsbS5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHYuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrbG0uRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IEw9RS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxOPUUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoTCouNSksQj0icmVsIitOQnQsUj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLEIpLmF0dHIoIngiLE4ueCkuYXR0cigieSIsTi55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLExlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbzEuZm9udFNpemUrInB4IikudGV4dChhLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrQikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixOLngtUi53aWR0aC8yKS5hdHRyKCJ5IixOLnktUi5oZWlnaHQvMikuYXR0cigid2lkdGgiLFIud2lkdGgpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQpfSxyemU9ZnVuY3Rpb24oaSxhLGYscCl7bzE9TGUoKS5lcixVdC5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCB2PUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt2PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBFPXlyKHY9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO2xtLmluc2VydE1hcmtlcnMoRSxvMSk7bGV0IF87Xz1uZXcgYTEoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpvMS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgTD1KJGUoRSxwLmRiLmdldEVudGl0aWVzKCksXyksTj1lemUocC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksXyk7ZUwoXyksdHplKEUsXyksTi5mb3JFYWNoKGZ1bmN0aW9uKEspe256ZShFLEssXyxMLHApfSk7Y29uc3QgQj1vMS5kaWFncmFtUGFkZGluZzskYS5pbnNlcnRUaXRsZShFLCJlbnRpdHlUaXRsZVRleHQiLG8xLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IGo9RS5ub2RlKCkuZ2V0QkJveCgpLFI9ai53aWR0aCtCKjIsej1qLmhlaWdodCtCKjI7b2coRSx6LFIsbzEudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7ai54LUJ9ICR7ai55LUJ9ICR7Un0gJHt6fWApfSxpemU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gc3plKGk9IiIsYT0iIil7Y29uc3QgZj1pLnJlcGxhY2UoWCRlLCIiKTtyZXR1cm5gJHtQQnQoYSl9JHtQQnQoZil9JHtZJGUoaSxpemUpfWB9ZnVuY3Rpb24gUEJ0KGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgYXplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6UCRlLGRiOlIkZSxyZW5kZXJlcjp7c2V0Q29uZjpRJGUsZHJhdzpyemV9LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBGMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5dCxkdCxodCx3dCl7Zm9yKGh0PWh0fHx7fSx3dD15dC5sZW5ndGg7d3QtLTtodFt5dFt3dF1dPWR0KTtyZXR1cm4gaHR9LGE9WzEsM10sZj1bMSw2XSxwPVsxLDRdLHY9WzEsNV0sbT1bMiw1XSxiPVsxLDEyXSxFPVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzksNDZdLF89WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEw9WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLE49WzcsMTMsNDZdLEI9WzEsNDJdLGo9WzEsNDFdLFI9WzcsMTMsMjksMzIsMzQsMzcsNDZdLHo9WzEsNTVdLEs9WzEsNTZdLGl0PVsxLDU3XSxzdD1bNywxMywzMiwzNCw0MSw0Nl0sdXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsQ09NTUlUX1RBRzozNCxFTVBUWVNUUjozNSxNRVJHRTozNixDT01NSVRfVFlQRTozNyxjb21taXRUeXBlOjM4LENPTU1JVDozOSxjb21taXRfYXJnOjQwLENPTU1JVF9NU0c6NDEsTk9STUFMOjQyLFJFVkVSU0U6NDMsSElHSExJR0hUOjQ0LElEOjQ1LCI7Ijo0NiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiR0ciLDc6IkVPRiIsODoiOiIsOToiRElSIiwxMjoiT1BUIiwxMzoiTkwiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoic2VjdGlvbiIsMjY6IkNIRUNLT1VUIiwyODoiQlJBTkNIIiwyOToiT1JERVIiLDMwOiJOVU0iLDMxOiJDSEVSUllfUElDSyIsMzI6IkNPTU1JVF9JRCIsMzM6IlNUUiIsMzQ6IkNPTU1JVF9UQUciLDM1OiJFTVBUWVNUUiIsMzY6Ik1FUkdFIiwzNzoiQ09NTUlUX1RZUEUiLDM5OiJDT01NSVQiLDQxOiJDT01NSVRfTVNHIiw0MjoiTk9STUFMIiw0MzoiUkVWRVJTRSIsNDQ6IkhJR0hMSUdIVCIsNDU6IklEIiw0NjoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE3LDJdLFsxNyw0XSxbMTcsNF0sWzE3LDRdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNiwyXSxbMTYsM10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsM10sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzQwLDBdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMjcsMV0sWzI3LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGR0LGh0LHd0LFgscHQsVSx4dCl7dmFyIG50PVUubGVuZ3RoLTE7c3dpdGNoKHB0KXtjYXNlIDI6cmV0dXJuIFVbbnRdO2Nhc2UgMzpyZXR1cm4gVVtudC0xXTtjYXNlIDQ6cmV0dXJuIFguc2V0RGlyZWN0aW9uKFVbbnQtM10pLFVbbnQtMV07Y2FzZSA2Olguc2V0T3B0aW9ucyhVW250LTFdKSx0aGlzLiQ9VVtudF07YnJlYWs7Y2FzZSA3OlVbbnQtMV0rPVVbbnRdLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpVW250LTFdLnB1c2goVVtudF0pLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVVbbnQtMV07YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9VVtudF0udHJpbSgpLFguc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPVVbbnRdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oVVtudF0uc3Vic3RyKDgpKSx0aGlzLiQ9VVtudF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjE6WC5jaGVja291dChVW250XSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChVW250XSk7YnJlYWs7Y2FzZSAyMzpYLmJyYW5jaChVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhVW250XSwiIix2b2lkIDApO2JyZWFrO2Nhc2UgMjU6WC5jaGVycnlQaWNrKFVbbnQtMl0sIiIsVVtudF0pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyODpYLmNoZXJyeVBpY2soVVtudC0yXSwiIiwiIik7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soVVtudF0sIiIsVVtudC0yXSk7YnJlYWs7Y2FzZSAyOTpYLm1lcmdlKFVbbnRdLCIiLCIiLCIiKTticmVhaztjYXNlIDMwOlgubWVyZ2UoVVtudC0yXSxVW250XSwiIiwiIik7YnJlYWs7Y2FzZSAzMTpYLm1lcmdlKFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgMzI6WC5tZXJnZShVW250LTJdLCIiLCIiLFVbbnRdKTticmVhaztjYXNlIDMzOlgubWVyZ2UoVVtudC00XSxVW250XSwiIixVW250LTJdKTticmVhaztjYXNlIDM0OlgubWVyZ2UoVVtudC00XSwiIixVW250XSxVW250LTJdKTticmVhaztjYXNlIDM1OlgubWVyZ2UoVVtudC00XSwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoVVtudC00XSxVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDM3OlgubWVyZ2UoVVtudC00XSxVW250LTJdLCIiLFVbbnRdKTticmVhaztjYXNlIDM4OlgubWVyZ2UoVVtudC00XSxVW250XSxVW250LTJdLCIiKTticmVhaztjYXNlIDM5OlgubWVyZ2UoVVtudC02XSxVW250LTRdLFVbbnQtMl0sVVtudF0pO2JyZWFrO2Nhc2UgNDA6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDQyOlgubWVyZ2UoVVtudC02XSxVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNDM6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDQ1OlguY29tbWl0KFVbbnRdKTticmVhaztjYXNlIDQ2OlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudF0pO2JyZWFrO2Nhc2UgNDc6WC5jb21taXQoIiIsIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNDg6WC5jb21taXQoIiIsIiIsVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0OTpYLmNvbW1pdCgiIiwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDUwOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNTE6WC5jb21taXQoIiIsVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDUyOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudC0yXSk7YnJlYWs7Y2FzZSA1MzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDU0OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNTU6WC5jb21taXQoIiIsVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLFVbbnQtNF0sVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA1NzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNTg6WC5jb21taXQoIiIsVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA2MDpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoVVtudF0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2MjpYLmNvbW1pdChVW250XSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNjM6WC5jb21taXQoVVtudC0yXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDY0OlguY29tbWl0KFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoVVtudF0sIiIsVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA2NjpYLmNvbW1pdChVW250XSxVW250LTJdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNjc6WC5jb21taXQoVVtudC0yXSxVW250XSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY4OlguY29tbWl0KFVbbnQtNF0sIiIsVVtudC0yXSxVW250XSk7YnJlYWs7Y2FzZSA2OTpYLmNvbW1pdChVW250LTRdLCIiLFVbbnRdLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoVVtudC0yXSwiIixVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDcxOlguY29tbWl0KFVbbnRdLCIiLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChVW250XSwiIixVW250LTJdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNzM6WC5jb21taXQoVVtudC0yXSwiIixVW250XSxVW250LTRdKTticmVhaztjYXNlIDc0OlguY29tbWl0KFVbbnQtNF0sVVtudF0sVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA3NTpYLmNvbW1pdChVW250LTRdLFVbbnQtMl0sVVtudF0sIiIpO2JyZWFrO2Nhc2UgNzY6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLCIiKTticmVhaztjYXNlIDc3OlguY29tbWl0KFVbbnRdLFVbbnQtMl0sVVtudC00XSwiIik7YnJlYWs7Y2FzZSA3ODpYLmNvbW1pdChVW250XSxVW250LTRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNzk6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnRdLCIiKTticmVhaztjYXNlIDgwOlguY29tbWl0KFVbbnQtNF0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDgxOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDgyOlguY29tbWl0KFVbbnQtMl0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDgzOlguY29tbWl0KFVbbnRdLFVbbnQtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDg0OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDg1OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDg2OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDg3OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDg4OlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDg5OlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDkwOlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDkxOlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDkyOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDkzOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDk0OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDk2OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDk3OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC0yXSxVW250LTZdKTticmVhaztjYXNlIDk5OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMDpYLmNvbW1pdChVW250XSxVW250LTJdLFVbbnQtNF0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLFVbbnQtNl0pO2JyZWFrO2Nhc2UgMTAyOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMzpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtMl0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnQtNl0sVVtudF0pO2JyZWFrO2Nhc2UgMTA1OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC02XSxVW250LTJdKTticmVhaztjYXNlIDEwNjpYLmNvbW1pdChVW250LTJdLFVbbnRdLFVbbnQtNl0sVVtudC00XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoVVtudF0sVVtudC0yXSxVW250LTZdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgMTA4OlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250LTZdLFVbbnRdKTticmVhaztjYXNlIDEwOTpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtNl0sVVtudC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1VW250XTticmVhaztjYXNlIDExMjp0aGlzLiQ9WC5jb21taXRUeXBlLk5PUk1BTDticmVhaztjYXNlIDExMzp0aGlzLiQ9WC5jb21taXRUeXBlLlJFVkVSU0U7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPVguY29tbWl0VHlwZS5ISUdITElHSFQ7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDc6ZiwxMzpwLDQ2OnZ9LHsxOlszXX0sezM6Nyw0OjIsNTphLDc6ZiwxMzpwLDQ2OnZ9LHs2OjgsNzptLDg6WzEsOV0sOTpbMSwxMF0sMTA6MTEsMTM6Yn0saShFLFsyLDExN10pLGkoRSxbMiwxMThdKSxpKEUsWzIsMTE5XSksezE6WzIsMV19LHs3OlsxLDEzXX0sezY6MTQsNzptLDEwOjExLDEzOmJ9LHs4OlsxLDE1XX0saShfLFsyLDldLHsxMToxNiwxMjpbMSwxN119KSxpKEwsWzIsOF0pLHsxOlsyLDJdfSx7NzpbMSwxOF19LHs2OjE5LDc6bSwxMDoxMSwxMzpifSx7NzpbMiw2XSwxMzpbMSwyMl0sMTQ6MjAsMTU6MjEsMTY6MjMsMTc6MjQsMTg6MjUsMTk6WzEsMjZdLDIxOlsxLDI3XSwyMzpbMSwyOF0sMjQ6WzEsMjldLDI1OjMwLDI2OlsxLDMxXSwyODpbMSwzNV0sMzE6WzEsMzRdLDM2OlsxLDMzXSwzOTpbMSwzMl19LGkoTCxbMiw3XSksezE6WzIsM119LHs3OlsxLDM2XX0saShfLFsyLDEwXSksezQ6MzcsNzpmLDEzOnAsNDY6dn0saShfLFsyLDEyXSksaShOLFsyLDEzXSksaShOLFsyLDE0XSksaShOLFsyLDE1XSksezIwOlsxLDM4XX0sezIyOlsxLDM5XX0saShOLFsyLDE4XSksaShOLFsyLDE5XSksaShOLFsyLDIwXSksezI3OjQwLDMzOkIsNDU6an0saShOLFsyLDExMF0sezQwOjQzLDMyOlsxLDQ2XSwzMzpbMSw0OF0sMzQ6WzEsNDRdLDM3OlsxLDQ1XSw0MTpbMSw0N119KSx7Mjc6NDksMzM6Qiw0NTpqfSx7MzI6WzEsNTBdLDM0OlsxLDUxXX0sezI3OjUyLDMzOkIsNDU6an0sezE6WzIsNF19LGkoXyxbMiwxMV0pLGkoTixbMiwxNl0pLGkoTixbMiwxN10pLGkoTixbMiwyMV0pLGkoUixbMiwxMTVdKSxpKFIsWzIsMTE2XSksaShOLFsyLDQ1XSksezMzOlsxLDUzXX0sezM4OjU0LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDU4XX0sezMzOlsxLDU5XX0saShOLFsyLDExMV0pLGkoTixbMiwyOV0sezMyOlsxLDYwXSwzNDpbMSw2Ml0sMzc6WzEsNjFdfSksezMzOlsxLDYzXX0sezMzOlsxLDY0XSwzNTpbMSw2NV19LGkoTixbMiwyMl0sezI5OlsxLDY2XX0pLGkoTixbMiw0Nl0sezMyOlsxLDY4XSwzNzpbMSw2N10sNDE6WzEsNjldfSksaShOLFsyLDQ3XSx7MzI6WzEsNzFdLDM0OlsxLDcwXSw0MTpbMSw3Ml19KSxpKHN0LFsyLDExMl0pLGkoc3QsWzIsMTEzXSksaShzdCxbMiwxMTRdKSxpKE4sWzIsNTBdLHszNDpbMSw3M10sMzc6WzEsNzRdLDQxOlsxLDc1XX0pLGkoTixbMiw2MV0sezMyOlsxLDc4XSwzNDpbMSw3Nl0sMzc6WzEsNzddfSksezMzOlsxLDc5XX0sezM4OjgwLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDgxXX0saShOLFsyLDI0XSx7MzQ6WzEsODJdfSksezMyOlsxLDgzXX0sezMyOlsxLDg0XX0sezMwOlsxLDg1XX0sezM4Ojg2LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDg3XX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezM4OjkzLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDk0XX0sezMzOlsxLDk1XX0sezM4Ojk2LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDk3XX0saShOLFsyLDMwXSx7MzQ6WzEsOTldLDM3OlsxLDk4XX0pLGkoTixbMiwzMV0sezMyOlsxLDEwMV0sMzQ6WzEsMTAwXX0pLGkoTixbMiwzMl0sezMyOlsxLDEwMl0sMzc6WzEsMTAzXX0pLHszMzpbMSwxMDRdLDM1OlsxLDEwNV19LHszMzpbMSwxMDZdfSx7MzM6WzEsMTA3XX0saShOLFsyLDIzXSksaShOLFsyLDQ4XSx7MzI6WzEsMTA4XSw0MTpbMSwxMDldfSksaShOLFsyLDUyXSx7Mzc6WzEsMTEwXSw0MTpbMSwxMTFdfSksaShOLFsyLDYyXSx7MzI6WzEsMTEzXSwzNzpbMSwxMTJdfSksaShOLFsyLDQ5XSx7MzI6WzEsMTE0XSw0MTpbMSwxMTVdfSksaShOLFsyLDU0XSx7MzQ6WzEsMTE2XSw0MTpbMSwxMTddfSksaShOLFsyLDY1XSx7MzI6WzEsMTE5XSwzNDpbMSwxMThdfSksaShOLFsyLDUxXSx7Mzc6WzEsMTIwXSw0MTpbMSwxMjFdfSksaShOLFsyLDUzXSx7MzQ6WzEsMTIyXSw0MTpbMSwxMjNdfSksaShOLFsyLDY2XSx7MzQ6WzEsMTI1XSwzNzpbMSwxMjRdfSksaShOLFsyLDYzXSx7MzI6WzEsMTI3XSwzNzpbMSwxMjZdfSksaShOLFsyLDY0XSx7MzI6WzEsMTI5XSwzNDpbMSwxMjhdfSksaShOLFsyLDY3XSx7MzQ6WzEsMTMxXSwzNzpbMSwxMzBdfSksezM4OjEzMiw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxMzNdfSx7MzM6WzEsMTM0XX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7Mzg6MTM3LDQyOnosNDM6Syw0NDppdH0saShOLFsyLDI1XSksaShOLFsyLDI2XSksaShOLFsyLDI3XSksaShOLFsyLDI4XSksezMzOlsxLDEzOF19LHszMzpbMSwxMzldfSx7Mzg6MTQwLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDE0MV19LHszODoxNDIsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTQzXX0sezMzOlsxLDE0NF19LHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezMzOlsxLDE0N119LHszMzpbMSwxNDhdfSx7MzM6WzEsMTQ5XX0sezM4OjE1MCw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszODoxNTQsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTU1XX0sezM4OjE1Niw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwxNTddfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszODoxNjAsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTYxXX0saShOLFsyLDM2XSx7MzQ6WzEsMTYyXX0pLGkoTixbMiwzN10sezM3OlsxLDE2M119KSxpKE4sWzIsMzVdLHszMjpbMSwxNjRdfSksaShOLFsyLDM4XSx7MzQ6WzEsMTY1XX0pLGkoTixbMiwzM10sezM3OlsxLDE2Nl19KSxpKE4sWzIsMzRdLHszMjpbMSwxNjddfSksaShOLFsyLDU5XSx7NDE6WzEsMTY4XX0pLGkoTixbMiw3Ml0sezMyOlsxLDE2OV19KSxpKE4sWzIsNjBdLHs0MTpbMSwxNzBdfSksaShOLFsyLDgzXSx7Mzc6WzEsMTcxXX0pLGkoTixbMiw3M10sezMyOlsxLDE3Ml19KSxpKE4sWzIsODJdLHszNzpbMSwxNzNdfSksaShOLFsyLDU4XSx7NDE6WzEsMTc0XX0pLGkoTixbMiw3MV0sezMyOlsxLDE3NV19KSxpKE4sWzIsNTddLHs0MTpbMSwxNzZdfSksaShOLFsyLDc3XSx7MzQ6WzEsMTc3XX0pLGkoTixbMiw3MF0sezMyOlsxLDE3OF19KSxpKE4sWzIsNzZdLHszNDpbMSwxNzldfSksaShOLFsyLDU2XSx7NDE6WzEsMTgwXX0pLGkoTixbMiw4NF0sezM3OlsxLDE4MV19KSxpKE4sWzIsNTVdLHs0MTpbMSwxODJdfSksaShOLFsyLDc4XSx7MzQ6WzEsMTgzXX0pLGkoTixbMiw3OV0sezM0OlsxLDE4NF19KSxpKE4sWzIsODVdLHszNzpbMSwxODVdfSksaShOLFsyLDY5XSx7MzI6WzEsMTg2XX0pLGkoTixbMiw4MF0sezM3OlsxLDE4N119KSxpKE4sWzIsNjhdLHszMjpbMSwxODhdfSksaShOLFsyLDc0XSx7MzQ6WzEsMTg5XX0pLGkoTixbMiw3NV0sezM0OlsxLDE5MF19KSxpKE4sWzIsODFdLHszNzpbMSwxOTFdfSksezMzOlsxLDE5Ml19LHszODoxOTMsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTk0XX0sezMzOlsxLDE5NV19LHszODoxOTYsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMTk3XX0sezMzOlsxLDE5OF19LHszMzpbMSwxOTldfSx7MzM6WzEsMjAwXX0sezM4OjIwMSw0Mjp6LDQzOkssNDQ6aXR9LHszMzpbMSwyMDJdfSx7Mzg6MjAzLDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDIwNF19LHszMzpbMSwyMDVdfSx7MzM6WzEsMjA2XX0sezMzOlsxLDIwN119LHszMzpbMSwyMDhdfSx7MzM6WzEsMjA5XX0sezMzOlsxLDIxMF19LHszODoyMTEsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMjEyXX0sezMzOlsxLDIxM119LHszMzpbMSwyMTRdfSx7Mzg6MjE1LDQyOnosNDM6Syw0NDppdH0sezMzOlsxLDIxNl19LHszODoyMTcsNDI6eiw0MzpLLDQ0Oml0fSx7MzM6WzEsMjE4XX0sezMzOlsxLDIxOV19LHszMzpbMSwyMjBdfSx7Mzg6MjIxLDQyOnosNDM6Syw0NDppdH0saShOLFsyLDM5XSksaShOLFsyLDQxXSksaShOLFsyLDQwXSksaShOLFsyLDQyXSksaShOLFsyLDQ0XSksaShOLFsyLDQzXSksaShOLFsyLDEwMF0pLGkoTixbMiwxMDFdKSxpKE4sWzIsOThdKSxpKE4sWzIsOTldKSxpKE4sWzIsMTAzXSksaShOLFsyLDEwMl0pLGkoTixbMiwxMDddKSxpKE4sWzIsMTA2XSksaShOLFsyLDEwNV0pLGkoTixbMiwxMDRdKSxpKE4sWzIsMTA5XSksaShOLFsyLDEwOF0pLGkoTixbMiw5N10pLGkoTixbMiw5Nl0pLGkoTixbMiw5NV0pLGkoTixbMiw5NF0pLGkoTixbMiw5Ml0pLGkoTixbMiw5M10pLGkoTixbMiw5MV0pLGkoTixbMiw5MF0pLGkoTixbMiw4OV0pLGkoTixbMiw4OF0pLGkoTixbMiw4Nl0pLGkoTixbMiw4N10pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihkdCxodCl7aWYoaHQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShkdCk7ZWxzZXt2YXIgd3Q9bmV3IEVycm9yKGR0KTt0aHJvdyB3dC5oYXNoPWh0LHd0fX0scGFyc2U6ZnVuY3Rpb24oZHQpe3ZhciBodD10aGlzLHd0PVswXSxYPVtdLHB0PVtudWxsXSxVPVtdLHh0PXRoaXMudGFibGUsbnQ9IiIsT3Q9MCxOdD0wLHF0PTIsQ3Q9MSxaPVUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksVHQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxIdD17eXk6e319O2Zvcih2YXIgSXQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxJdCkmJihIdC55eVtJdF09dGhpcy55eVtJdF0pO1R0LnNldElucHV0KGR0LEh0Lnl5KSxIdC55eS5sZXhlcj1UdCxIdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgVHQueXlsbG9jPiJ1IiYmKFR0Lnl5bGxvYz17fSk7dmFyIEZ0PVR0Lnl5bGxvYztVLnB1c2goRnQpO3ZhciBrZT1UdC5vcHRpb25zJiZUdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgSHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9SHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gcG4oKXt2YXIgb2U7cmV0dXJuIG9lPVgucG9wKCl8fFR0LmxleCgpfHxDdCx0eXBlb2Ygb2UhPSJudW1iZXIiJiYob2UgaW5zdGFuY2VvZiBBcnJheSYmKFg9b2Usb2U9WC5wb3AoKSksb2U9aHQuc3ltYm9sc19bb2VdfHxvZSksb2V9Zm9yKHZhciBNZSx2ZSxHZSxLZSx3ZT17fSxfZSwkdCxyZSxpZTs7KXtpZih2ZT13dFt3dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t2ZV0/R2U9dGhpcy5kZWZhdWx0QWN0aW9uc1t2ZV06KChNZT09PW51bGx8fHR5cGVvZiBNZT4idSIpJiYoTWU9cG4oKSksR2U9eHRbdmVdJiZ4dFt2ZV1bTWVdKSx0eXBlb2YgR2U+InUifHwhR2UubGVuZ3RofHwhR2VbMF0pe3ZhciBPZT0iIjtpZT1bXTtmb3IoX2UgaW4geHRbdmVdKXRoaXMudGVybWluYWxzX1tfZV0mJl9lPnF0JiZpZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bX2VdKyInIik7VHQuc2hvd1Bvc2l0aW9uP09lPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE90KzEpK2A6CmArVHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtpZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW01lXXx8TWUpKyInIjpPZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPdCsxKSsiOiBVbmV4cGVjdGVkICIrKE1lPT1DdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tNZV18fE1lKSsiJyIpLHRoaXMucGFyc2VFcnJvcihPZSx7dGV4dDpUdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTWVdfHxNZSxsaW5lOlR0Lnl5bGluZW5vLGxvYzpGdCxleHBlY3RlZDppZX0pfWlmKEdlWzBdaW5zdGFuY2VvZiBBcnJheSYmR2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit2ZSsiLCB0b2tlbjogIitNZSk7c3dpdGNoKEdlWzBdKXtjYXNlIDE6d3QucHVzaChNZSkscHQucHVzaChUdC55eXRleHQpLFUucHVzaChUdC55eWxsb2MpLHd0LnB1c2goR2VbMV0pLE1lPW51bGwsTnQ9VHQueXlsZW5nLG50PVR0Lnl5dGV4dCxPdD1UdC55eWxpbmVubyxGdD1UdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKCR0PXRoaXMucHJvZHVjdGlvbnNfW0dlWzFdXVsxXSx3ZS4kPXB0W3B0Lmxlbmd0aC0kdF0sd2UuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oJHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oJHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa2UmJih3ZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oJHR8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksS2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHdlLFtudCxOdCxPdCxIdC55eSxHZVsxXSxwdCxVXS5jb25jYXQoWikpLHR5cGVvZiBLZTwidSIpcmV0dXJuIEtlOyR0JiYod3Q9d3Quc2xpY2UoMCwtMSokdCoyKSxwdD1wdC5zbGljZSgwLC0xKiR0KSxVPVUuc2xpY2UoMCwtMSokdCkpLHd0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bR2VbMV1dWzBdKSxwdC5wdXNoKHdlLiQpLFUucHVzaCh3ZS5fJCkscmU9eHRbd3Rbd3QubGVuZ3RoLTJdXVt3dFt3dC5sZW5ndGgtMV1dLHd0LnB1c2gocmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxidD1mdW5jdGlvbigpe3ZhciB5dD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihodCx3dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihodCx3dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaHQpfSxzZXRJbnB1dDpmdW5jdGlvbihkdCxodCl7cmV0dXJuIHRoaXMueXk9aHR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWR0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZHQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWR0LHRoaXMubWF0Y2hlZCs9ZHQ7dmFyIGh0PWR0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gaHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGR0fSx1bnB1dDpmdW5jdGlvbihkdCl7dmFyIGh0PWR0Lmxlbmd0aCx3dD1kdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWR0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1odCksdGhpcy5vZmZzZXQtPWh0O3ZhciBYPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHd0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09d3QubGVuZ3RoLTEpO3ZhciBwdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46d3Q/KHd0Lmxlbmd0aD09PVgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStYW1gubGVuZ3RoLXd0Lmxlbmd0aF0ubGVuZ3RoLXd0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4taHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcHRbMF0scHRbMF0rdGhpcy55eWxlbmctaHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihkdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGR0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGR0Lmxlbmd0aD4yMD8iLi4uIjoiIikrZHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgZHQ9dGhpcy5tYXRjaDtyZXR1cm4gZHQubGVuZ3RoPDIwJiYoZHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWR0Lmxlbmd0aCkpLChkdC5zdWJzdHIoMCwyMCkrKGR0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZHQ9dGhpcy5wYXN0SW5wdXQoKSxodD1uZXcgQXJyYXkoZHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gZHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2h0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihkdCxodCl7dmFyIHd0LFgscHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFg9ZHRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFgmJih0aGlzLnl5bGluZW5vKz1YLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlg/WFtYLmxlbmd0aC0xXS5sZW5ndGgtWFtYLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2R0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWR0WzBdLHRoaXMubWF0Y2grPWR0WzBdLHRoaXMubWF0Y2hlcz1kdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShkdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9ZHRbMF0sd3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsaHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksd3QpcmV0dXJuIHd0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBVIGluIHB0KXRoaXNbVV09cHRbVV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZHQsaHQsd3QsWDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwdD10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKWlmKHd0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcHRbVV1dKSx3dCYmKCFodHx8d3RbMF0ubGVuZ3RoPmh0WzBdLmxlbmd0aCkpe2lmKGh0PXd0LFg9VSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihkdD10aGlzLnRlc3RfbWF0Y2god3QscHRbVV0pLGR0IT09ITEpcmV0dXJuIGR0O2lmKHRoaXMuX2JhY2t0cmFjayl7aHQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaHQ/KGR0PXRoaXMudGVzdF9tYXRjaChodCxwdFtYXSksZHQhPT0hMT9kdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGh0PXRoaXMubmV4dCgpO3JldHVybiBodHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oaHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChodCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGh0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGh0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oaHQpe3JldHVybiBodD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGh0fHwwKSxodD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2h0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihodCl7dGhpcy5iZWdpbihodCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oaHQsd3QsWCxwdCl7c3dpdGNoKFgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTk7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEzO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOnJldHVybiAzOTtjYXNlIDEyOnJldHVybiAzMjtjYXNlIDEzOnJldHVybiAzNztjYXNlIDE0OnJldHVybiA0MTtjYXNlIDE1OnJldHVybiA0MjtjYXNlIDE2OnJldHVybiA0MztjYXNlIDE3OnJldHVybiA0NDtjYXNlIDE4OnJldHVybiAzNDtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzNjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAyNjtjYXNlIDI0OnJldHVybiA5O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gODtjYXNlIDI3OnJldHVybiJDQVJFVCI7Y2FzZSAyODp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gMTI7Y2FzZSAzMTpyZXR1cm4gMzU7Y2FzZSAzMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiAzMztjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA0NTtjYXNlIDM3OnJldHVybiA3fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdCg/PVxzfCQpKS9pLC9eKD86aWQ6KS9pLC9eKD86dHlwZTopL2ksL14oPzptc2c6KS9pLC9eKD86Tk9STUFMXGIpL2ksL14oPzpSRVZFUlNFXGIpL2ksL14oPzpISUdITElHSFRcYikvaSwvXig/OnRhZzopL2ksL14oPzpicmFuY2goPz1cc3wkKSkvaSwvXig/Om9yZGVyOikvaSwvXig/Om1lcmdlKD89XHN8JCkpL2ksL14oPzpjaGVycnktcGljayg/PVxzfCQpKS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMxLDMyLDM1LDM2LDM3LDM4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHl0fSgpO3V0LmxleGVyPWJ0O2Z1bmN0aW9uIG10KCl7dGhpcy55eT17fX1yZXR1cm4gbXQucHJvdG90eXBlPXV0LHV0LlBhcnNlcj1tdCxuZXcgbXR9KCk7RjB0LnBhcnNlcj1GMHQ7Y29uc3Qgb3plPUYwdDtsZXQgeUs9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxjemU9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsYzE9e30saGc9bnVsbCx4UD17fTt4UFt5S109e25hbWU6eUssb3JkZXI6Y3plfTtsZXQgUGY9e307UGZbeUtdPWhnO2xldCBYMT15SyxGQnQ9IkxSIix5VD0wO2Z1bmN0aW9uIEIwdCgpe3JldHVybiBHRHQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gdXplKGksYSl7Y29uc3QgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgocCx2KT0+e2NvbnN0IG09YSh2KTtyZXR1cm4gZlttXXx8KGZbbV09ITAscC5wdXNoKHYpKSxwfSxbXSl9Y29uc3QgbHplPWZ1bmN0aW9uKGkpe0ZCdD1pfTtsZXQgQkJ0PXt9O2NvbnN0IGh6ZT1mdW5jdGlvbihpKXtVdC5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtCQnQ9SlNPTi5wYXJzZShpKX1jYXRjaChhKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixhLm1lc3NhZ2UpfX0sZnplPWZ1bmN0aW9uKCl7cmV0dXJuIEJCdH0sZHplPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLGEsZixwKSxhPVlyLnNhbml0aXplVGV4dChhLExlKCkpLGk9WXIuc2FuaXRpemVUZXh0KGksTGUoKSkscD1Zci5zYW5pdGl6ZVRleHQocCxMZSgpKTtjb25zdCB2PXtpZDphfHx5VCsiLSIrQjB0KCksbWVzc2FnZTppLHNlcTp5VCsrLHR5cGU6Znx8a1AuTk9STUFMLHRhZzpwfHwiIixwYXJlbnRzOmhnPT1udWxsP1tdOltoZy5pZF0sYnJhbmNoOlgxfTtoZz12LGMxW3YuaWRdPXYsUGZbWDFdPXYuaWQsVXQuZGVidWcoImluIHB1c2hDb21taXQgIit2LmlkKX0sZ3plPWZ1bmN0aW9uKGksYSl7aWYoaT1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxQZltpXT09PXZvaWQgMClQZltpXT1oZyE9bnVsbD9oZy5pZDpudWxsLHhQW2ldPXtuYW1lOmksb3JkZXI6YT9wYXJzZUludChhLDEwKTpudWxsfSxSQnQoaSksVXQuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IGY9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IGYuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sZn19LHB6ZT1mdW5jdGlvbihpLGEsZixwKXtpPVlyLnNhbml0aXplVGV4dChpLExlKCkpLGE9WXIuc2FuaXRpemVUZXh0KGEsTGUoKSk7Y29uc3Qgdj1jMVtQZltYMV1dLG09YzFbUGZbaV1dO2lmKFgxPT09aSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZih2PT09dm9pZCAwfHwhdil7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrWDErIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0sRX1lbHNlIGlmKFBmW2ldPT09dm9pZCAwKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LEV9ZWxzZSBpZihtPT09dm9pZCAwfHwhbSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LEV9ZWxzZSBpZih2PT09bSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZihhJiZjMVthXSE9PXZvaWQgMCl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JythKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krYStmK3AsdG9rZW46Im1lcmdlICIraSthK2YrcCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrYSsiX1VOSVFVRSAiK2YrIiAiK3BdfSxFfWNvbnN0IGI9e2lkOmF8fHlUKyItIitCMHQoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitYMSxzZXE6eVQrKyxwYXJlbnRzOltoZz09bnVsbD9udWxsOmhnLmlkLFBmW2ldXSxicmFuY2g6WDEsdHlwZTprUC5NRVJHRSxjdXN0b21UeXBlOmYsY3VzdG9tSWQ6ISFhLHRhZzpwfHwiIn07aGc9YixjMVtiLmlkXT1iLFBmW1gxXT1iLmlkLFV0LmRlYnVnKFBmKSxVdC5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sYnplPWZ1bmN0aW9uKGksYSxmKXtpZihVdC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGksYSxmKSxpPVlyLnNhbml0aXplVGV4dChpLExlKCkpLGE9WXIuc2FuaXRpemVUZXh0KGEsTGUoKSksZj1Zci5zYW5pdGl6ZVRleHQoZixMZSgpKSwhaXx8YzFbaV09PT12b2lkIDApe2xldCBtPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgbS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sbX1sZXQgcD1jMVtpXSx2PXAuYnJhbmNoO2lmKHAudHlwZT09PWtQLk1FUkdFKXtsZXQgbT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgc2hvdWxkIG5vdCBiZSBhIG1lcmdlIGNvbW1pdCcpO3Rocm93IG0uaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK2EsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIithLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LG19aWYoIWF8fGMxW2FdPT09dm9pZCAwKXtpZih2PT09WDEpe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpcyBhbHJlYWR5IG9uIGN1cnJlbnQgYnJhbmNoJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sRX1jb25zdCBtPWMxW1BmW1gxXV07aWYobT09PXZvaWQgMHx8IW0pe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgnK1gxKyIpaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxFfWNvbnN0IGI9e2lkOnlUKyItIitCMHQoKSxtZXNzYWdlOiJjaGVycnktcGlja2VkICIrcCsiIGludG8gIitYMSxzZXE6eVQrKyxwYXJlbnRzOltoZz09bnVsbD9udWxsOmhnLmlkLHAuaWRdLGJyYW5jaDpYMSx0eXBlOmtQLkNIRVJSWV9QSUNLLHRhZzpmPz8iY2hlcnJ5LXBpY2s6IitwLmlkfTtoZz1iLGMxW2IuaWRdPWIsUGZbWDFdPWIuaWQsVXQuZGVidWcoUGYpLFV0LmRlYnVnKCJpbiBjaGVycnlQaWNrIil9fSxSQnQ9ZnVuY3Rpb24oaSl7aWYoaT1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxQZltpXT09PXZvaWQgMCl7bGV0IGE9bmV3IEVycm9yKCdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJytpKyciKScpO3Rocm93IGEuaGFzaD17dGV4dDoiY2hlY2tvdXQgIitpLHRva2VuOiJjaGVja291dCAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciYnJhbmNoICcraSsnIiddfSxhfWVsc2V7WDE9aTtjb25zdCBhPVBmW1gxXTtoZz1jMVthXX19O2Z1bmN0aW9uIGpCdChpLGEsZil7Y29uc3QgcD1pLmluZGV4T2YoYSk7cD09PS0xP2kucHVzaChmKTppLnNwbGljZShwLDEsZil9ZnVuY3Rpb24gJEJ0KGkpe2NvbnN0IGE9aS5yZWR1Y2UoKHYsbSk9PnYuc2VxPm0uc2VxP3Y6bSxpWzBdKTtsZXQgZj0iIjtpLmZvckVhY2goZnVuY3Rpb24odil7dj09PWE/Zis9IgkqIjpmKz0iCXwifSk7Y29uc3QgcD1bZixhLmlkLGEuc2VxXTtmb3IobGV0IHYgaW4gUGYpUGZbdl09PT1hLmlkJiZwLnB1c2godik7aWYoVXQuZGVidWcocC5qb2luKCIgIikpLGEucGFyZW50cyYmYS5wYXJlbnRzLmxlbmd0aD09Mil7Y29uc3Qgdj1jMVthLnBhcmVudHNbMF1dO2pCdChpLGEsdiksaS5wdXNoKGMxW2EucGFyZW50c1sxXV0pfWVsc2V7aWYoYS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47e2NvbnN0IHY9YzFbYS5wYXJlbnRzXTtqQnQoaSxhLHYpfX1pPXV6ZShpLHY9PnYuaWQpLCRCdChpKX1jb25zdCB2emU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZyhjMSk7Y29uc3QgaT16QnQoKVswXTskQnQoW2ldKX0sd3plPWZ1bmN0aW9uKCl7YzE9e30saGc9bnVsbDtsZXQgaT1MZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lLGE9TGUoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXI7UGY9e30sUGZbaV09bnVsbCx4UD17fSx4UFtpXT17bmFtZTppLG9yZGVyOmF9LFgxPWkseVQ9MCxhcCgpfSxtemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh4UCkubWFwKChhLGYpPT5hLm9yZGVyIT09bnVsbD9hOnsuLi5hLG9yZGVyOnBhcnNlRmxvYXQoYDAuJHtmfWAsMTApfSkuc29ydCgoYSxmKT0+YS5vcmRlci1mLm9yZGVyKS5tYXAoKHtuYW1lOmF9KT0+KHtuYW1lOmF9KSl9LHl6ZT1mdW5jdGlvbigpe3JldHVybiBQZn0seHplPWZ1bmN0aW9uKCl7cmV0dXJuIGMxfSx6QnQ9ZnVuY3Rpb24oKXtjb25zdCBpPU9iamVjdC5rZXlzKGMxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGMxW2FdfSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihhKXtVdC5kZWJ1ZyhhLmlkKX0pLGkuc29ydCgoYSxmKT0+YS5zZXEtZi5zZXEpLGl9LGt6ZT1mdW5jdGlvbigpe3JldHVybiBYMX0sRXplPWZ1bmN0aW9uKCl7cmV0dXJuIEZCdH0sVHplPWZ1bmN0aW9uKCl7cmV0dXJuIGhnfSxrUD17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sQ3plPXtnZXRDb25maWc6KCk9PkxlKCkuZ2l0R3JhcGgsc2V0RGlyZWN0aW9uOmx6ZSxzZXRPcHRpb25zOmh6ZSxnZXRPcHRpb25zOmZ6ZSxjb21taXQ6ZHplLGJyYW5jaDpnemUsbWVyZ2U6cHplLGNoZXJyeVBpY2s6YnplLGNoZWNrb3V0OlJCdCxwcmV0dHlQcmludDp2emUsY2xlYXI6d3plLGdldEJyYW5jaGVzQXNPYmpBcnJheTptemUsZ2V0QnJhbmNoZXM6eXplLGdldENvbW1pdHM6eHplLGdldENvbW1pdHNBcnJheTp6QnQsZ2V0Q3VycmVudEJyYW5jaDpremUsZ2V0RGlyZWN0aW9uOkV6ZSxnZXRIZWFkOlR6ZSxzZXRBY2NUaXRsZTpjZyxnZXRBY2NUaXRsZTpvcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxzZXREaWFncmFtVGl0bGU6WjIsZ2V0RGlhZ3JhbVRpdGxlOkRiLGNvbW1pdFR5cGU6a1B9O2xldCBFUD17fTtjb25zdCBGYj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0seFQ9ODtsZXQgUTE9e30sVFA9e30seEs9W10sQ1A9MCx5MD0iTFIiO2NvbnN0IF96ZT0oKT0+e1ExPXt9LFRQPXt9LEVQPXt9LENQPTAseEs9W10seTA9IkxSIn0scUJ0PWk9Pntjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bGV0IGY9W107dHlwZW9mIGk9PSJzdHJpbmciP2Y9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/Zj1pOmY9W107Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt2LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHYuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHYuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHYuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHYudGV4dENvbnRlbnQ9cC50cmltKCksYS5hcHBlbmRDaGlsZCh2KX1yZXR1cm4gYX0sSEJ0PShpLGEsZik9Pntjb25zdCBwPUpOKCkuZ2l0R3JhcGgsdj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxtPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIik7bGV0IGI9MDt5MD09PSJUQiImJihiPTMwKSxPYmplY3Qua2V5cyhhKS5zb3J0KChMLE4pPT5hW0xdLnNlcS1hW05dLnNlcSkuZm9yRWFjaChMPT57Y29uc3QgTj1hW0xdLEI9eTA9PT0iVEIiP2IrMTA6UTFbTi5icmFuY2hdLnBvcyxqPXkwPT09IlRCIj9RMVtOLmJyYW5jaF0ucG9zOmIrMTA7aWYoZil7bGV0IFIsej1OLmN1c3RvbVR5cGUhPT12b2lkIDAmJk4uY3VzdG9tVHlwZSE9PSIiP04uY3VzdG9tVHlwZTpOLnR5cGU7c3dpdGNoKHope2Nhc2UgRmIuTk9STUFMOlI9ImNvbW1pdC1ub3JtYWwiO2JyZWFrO2Nhc2UgRmIuUkVWRVJTRTpSPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBGYi5ISUdITElHSFQ6Uj0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSBGYi5NRVJHRTpSPSJjb21taXQtbWVyZ2UiO2JyZWFrO2Nhc2UgRmIuQ0hFUlJZX1BJQ0s6Uj0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OlI9ImNvbW1pdC1ub3JtYWwifWlmKHo9PT1GYi5ISUdITElHSFQpe2NvbnN0IEs9di5hcHBlbmQoInJlY3QiKTtLLmF0dHIoIngiLGotMTApLEsuYXR0cigieSIsQi0xMCksSy5hdHRyKCJoZWlnaHQiLDIwKSxLLmF0dHIoIndpZHRoIiwyMCksSy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9IGNvbW1pdC1oaWdobGlnaHQke1ExW04uYnJhbmNoXS5pbmRleCV4VH0gJHtSfS1vdXRlcmApLHYuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsai02KS5hdHRyKCJ5IixCLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtOLmlkfSBjb21taXQke1ExW04uYnJhbmNoXS5pbmRleCV4VH0gJHtSfS1pbm5lcmApfWVsc2UgaWYoej09PUZiLkNIRVJSWV9QSUNLKXYuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsaikuYXR0cigiY3kiLEIpLmF0dHIoInIiLDEwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGotMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGorMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke04uaWR9ICR7Un1gKSx2LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixqKzMpLmF0dHIoInkxIixCKzEpLmF0dHIoIngyIixqKS5hdHRyKCJ5MiIsQi01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtOLmlkfSAke1J9YCksdi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsai0zKS5hdHRyKCJ5MSIsQisxKS5hdHRyKCJ4MiIsaikuYXR0cigieTIiLEItNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ti5pZH0gJHtSfWApO2Vsc2V7Y29uc3QgSz12LmFwcGVuZCgiY2lyY2xlIik7aWYoSy5hdHRyKCJjeCIsaiksSy5hdHRyKCJjeSIsQiksSy5hdHRyKCJyIixOLnR5cGU9PT1GYi5NRVJHRT85OjEwKSxLLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ti5pZH0gY29tbWl0JHtRMVtOLmJyYW5jaF0uaW5kZXgleFR9YCksej09PUZiLk1FUkdFKXtjb25zdCBpdD12LmFwcGVuZCgiY2lyY2xlIik7aXQuYXR0cigiY3giLGopLGl0LmF0dHIoImN5IixCKSxpdC5hdHRyKCJyIiw2KSxpdC5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1J9ICR7Ti5pZH0gY29tbWl0JHtRMVtOLmJyYW5jaF0uaW5kZXgleFR9YCl9ej09PUZiLlJFVkVSU0UmJnYuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtqLTV9LCR7Qi01fUwke2orNX0sJHtCKzV9TSR7ai01fSwke0IrNX1MJHtqKzV9LCR7Qi01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Un0gJHtOLmlkfSBjb21taXQke1ExW04uYnJhbmNoXS5pbmRleCV4VH1gKX19aWYoeTA9PT0iVEIiP1RQW04uaWRdPXt4OmoseTpiKzEwfTpUUFtOLmlkXT17eDpiKzEwLHk6Qn0sZil7aWYoTi50eXBlIT09RmIuQ0hFUlJZX1BJQ0smJihOLmN1c3RvbUlkJiZOLnR5cGU9PT1GYi5NRVJHRXx8Ti50eXBlIT09RmIuTUVSR0UpJiZwLnNob3dDb21taXRMYWJlbCl7Y29uc3QgSz1tLmFwcGVuZCgiZyIpLGl0PUsuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksc3Q9Sy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixCKzI1KS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbCIpLnRleHQoTi5pZCk7bGV0IHV0PXN0Lm5vZGUoKS5nZXRCQm94KCk7aWYoaXQuYXR0cigieCIsYisxMC11dC53aWR0aC8yLTIpLmF0dHIoInkiLEIrMTMuNSkuYXR0cigid2lkdGgiLHV0LndpZHRoKzIqMikuYXR0cigiaGVpZ2h0Iix1dC5oZWlnaHQrMioyKSx5MD09PSJUQiImJihpdC5hdHRyKCJ4IixqLSh1dC53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEItMTIpLHN0LmF0dHIoIngiLGotKHV0LndpZHRoKzQqNCkpLmF0dHIoInkiLEIrdXQuaGVpZ2h0LTEyKSkseTAhPT0iVEIiJiZzdC5hdHRyKCJ4IixiKzEwLXV0LndpZHRoLzIpLHAucm90YXRlQ29tbWl0TGFiZWwpaWYoeTA9PT0iVEIiKXN0LmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIraisiLCAiK0IrIikiKSxpdC5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2orIiwgIitCKyIpIik7ZWxzZXtsZXQgYnQ9LTcuNS0odXQud2lkdGgrMTApLzI1KjkuNSxtdD0xMCt1dC53aWR0aC8yNSo4LjU7Sy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitidCsiLCAiK210KyIpIHJvdGF0ZSgtNDUsICIrYisiLCAiK0IrIikiKX19aWYoTi50YWcpe2NvbnN0IEs9bS5pbnNlcnQoInBvbHlnb24iKSxpdD1tLmFwcGVuZCgiY2lyY2xlIiksc3Q9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixCLTE2KS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQoTi50YWcpO2xldCB1dD1zdC5ub2RlKCkuZ2V0QkJveCgpO3N0LmF0dHIoIngiLGIrMTAtdXQud2lkdGgvMik7Y29uc3QgYnQ9dXQuaGVpZ2h0LzIsbXQ9Qi0xOS4yO0suYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItdXQud2lkdGgvMi00LzJ9LCR7bXQrMn0KICAgICAgICAgICR7Yi11dC53aWR0aC8yLTQvMn0sJHttdC0yfQogICAgICAgICAgJHtiKzEwLXV0LndpZHRoLzItNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK3V0LndpZHRoLzIrNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK3V0LndpZHRoLzIrNH0sJHttdCtidCsyfQogICAgICAgICAgJHtiKzEwLXV0LndpZHRoLzItNH0sJHttdCtidCsyfWApLGl0LmF0dHIoImN4IixiLXV0LndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsbXQpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLHkwPT09IlRCIiYmKEsuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAgICR7an0sJHtiKzJ9CiAgICAgICAgICAgICR7an0sJHtiLTJ9CiAgICAgICAgICAgICR7aisxMH0sJHtiLWJ0LTJ9CiAgICAgICAgICAgICR7aisxMCt1dC53aWR0aCs0fSwke2ItYnQtMn0KICAgICAgICAgICAgJHtqKzEwK3V0LndpZHRoKzR9LCR7YitidCsyfQogICAgICAgICAgICAke2orMTB9LCR7YitidCsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2orIiwiK2IrIikiKSxpdC5hdHRyKCJjeCIsais0LzIpLmF0dHIoImN5IixiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIitqKyIsIitiKyIpIiksc3QuYXR0cigieCIsais1KS5hdHRyKCJ5IixiKzMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNCwxNCkgcm90YXRlKDQ1LCAiK2orIiwiK2IrIikiKSl9fWIrPTUwLGI+Q1AmJihDUD1iKX0pfSxTemU9KGksYSxmKT0+T2JqZWN0LmtleXMoZikuZmlsdGVyKG09PmZbbV0uYnJhbmNoPT09YS5icmFuY2gmJmZbbV0uc2VxPmkuc2VxJiZmW21dLnNlcTxhLnNlcSkubGVuZ3RoPjAsX1A9KGksYSxmPTApPT57Y29uc3QgcD1pK01hdGguYWJzKGktYSkvMjtpZihmPjUpcmV0dXJuIHA7aWYoeEsuZXZlcnkoYj0+TWF0aC5hYnMoYi1wKT49MTApKXJldHVybiB4Sy5wdXNoKHApLHA7Y29uc3QgbT1NYXRoLmFicyhpLWEpO3JldHVybiBfUChpLGEtbS81LGYrMSl9LEF6ZT0oaSxhLGYscCk9Pntjb25zdCB2PVRQW2EuaWRdLG09VFBbZi5pZF0sYj1TemUoYSxmLHApO2xldCBFPSIiLF89IiIsTD0wLE49MCxCPVExW2YuYnJhbmNoXS5pbmRleCxqO2lmKGIpe0U9IkEgMTAgMTAsIDAsIDAsIDAsIixfPSJBIDEwIDEwLCAwLCAwLCAxLCIsTD0xMCxOPTEwLEI9UTFbZi5icmFuY2hdLmluZGV4O2NvbnN0IFI9di55PG0ueT9fUCh2LnksbS55KTpfUChtLnksdi55KSx6PXYueDxtLng/X1Aodi54LG0ueCk6X1AobS54LHYueCk7eTA9PT0iVEIiP3YueDxtLng/aj1gTSAke3YueH0gJHt2Lnl9IEwgJHt6LUx9ICR7di55fSAke199ICR7en0gJHt2LnkrTn0gTCAke3p9ICR7bS55LUx9ICR7RX0gJHt6K059ICR7bS55fSBMICR7bS54fSAke20ueX1gOmo9YE0gJHt2Lnh9ICR7di55fSBMICR7eitMfSAke3YueX0gJHtFfSAke3p9ICR7di55K059IEwgJHt6fSAke20ueS1MfSAke199ICR7ei1OfSAke20ueX0gTCAke20ueH0gJHttLnl9YDp2Lnk8bS55P2o9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke1ItTH0gJHtFfSAke3YueCtOfSAke1J9IEwgJHttLngtTH0gJHtSfSAke199ICR7bS54fSAke1IrTn0gTCAke20ueH0gJHttLnl9YDpqPWBNICR7di54fSAke3YueX0gTCAke3YueH0gJHtSK0x9ICR7X30gJHt2LngrTn0gJHtSfSBMICR7bS54LUx9ICR7Un0gJHtFfSAke20ueH0gJHtSLU59IEwgJHttLnh9ICR7bS55fWB9ZWxzZSB5MD09PSJUQiI/KHYueDxtLngmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsXz0iQSAyMCAyMCwgMCwgMCwgMSwiLEw9MjAsTj0yMCxCPVExW2YuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1MfSAke3YueX0gJHtffSAke20ueH0gJHt2LnkrTn0gTCAke20ueH0gJHttLnl9YCksdi54Pm0ueCYmKEU9IkEgMjAgMjAsIDAsIDAsIDAsIixfPSJBIDIwIDIwLCAwLCAwLCAxLCIsTD0yMCxOPTIwLEI9UTFbYS5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1MfSAke199ICR7di54LU59ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lng9PT1tLngmJihCPVExW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke3YueCtMfSAke3YueX0gJHtFfSAke3YueCtOfSAke20ueStMfSBMICR7bS54fSAke20ueX1gKSk6KHYueTxtLnkmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsTD0yMCxOPTIwLEI9UTFbZi5icmFuY2hdLmluZGV4LGo9YE0gJHt2Lnh9ICR7di55fSBMICR7di54fSAke20ueS1MfSAke0V9ICR7di54K059ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx2Lnk+bS55JiYoRT0iQSAyMCAyMCwgMCwgMCwgMCwiLEw9MjAsTj0yMCxCPVExW2EuYnJhbmNoXS5pbmRleCxqPWBNICR7di54fSAke3YueX0gTCAke20ueC1MfSAke3YueX0gJHtFfSAke20ueH0gJHt2LnktTn0gTCAke20ueH0gJHttLnl9YCksdi55PT09bS55JiYoQj1RMVthLmJyYW5jaF0uaW5kZXgsaj1gTSAke3YueH0gJHt2Lnl9IEwgJHt2Lnh9ICR7bS55LUx9ICR7RX0gJHt2LngrTn0gJHttLnl9IEwgJHttLnh9ICR7bS55fWApKTtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGopLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK0IleFQpfSxMemU9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChwPT57Y29uc3Qgdj1hW3BdO3YucGFyZW50cyYmdi5wYXJlbnRzLmxlbmd0aD4wJiZ2LnBhcmVudHMuZm9yRWFjaChtPT57QXplKGYsYVttXSx2LGEpfSl9KX0sTXplPShpLGEpPT57Y29uc3QgZj1KTigpLmdpdEdyYXBoLHA9aS5hcHBlbmQoImciKTthLmZvckVhY2goKHYsbSk9Pntjb25zdCBiPW0leFQsRT1RMVt2Lm5hbWVdLnBvcyxfPXAuYXBwZW5kKCJsaW5lIik7Xy5hdHRyKCJ4MSIsMCksXy5hdHRyKCJ5MSIsRSksXy5hdHRyKCJ4MiIsQ1ApLF8uYXR0cigieTIiLEUpLF8uYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIitiKSx5MD09PSJUQiImJihfLmF0dHIoInkxIiwzMCksXy5hdHRyKCJ4MSIsRSksXy5hdHRyKCJ5MiIsQ1ApLF8uYXR0cigieDIiLEUpKSx4Sy5wdXNoKEUpO2xldCBMPXYubmFtZTtjb25zdCBOPXFCdChMKSxCPXAuaW5zZXJ0KCJyZWN0IiksUj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYik7Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoTik7bGV0IHo9Ti5nZXRCQm94KCk7Qi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIitiKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC16LndpZHRoLTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkuYXR0cigieSIsLXouaGVpZ2h0LzIrOCkuYXR0cigid2lkdGgiLHoud2lkdGgrMTgpLmF0dHIoImhlaWdodCIsei5oZWlnaHQrNCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoLXoud2lkdGgtMTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisoRS16LmhlaWdodC8yLTEpKyIpIikseTA9PT0iVEIiJiYoQi5hdHRyKCJ4IixFLXoud2lkdGgvMi0xMCkuYXR0cigieSIsMCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRS16LndpZHRoLzItNSkrIiwgMCkiKSkseTAhPT0iVEIiJiZCLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKEUtei5oZWlnaHQvMikrIikiKX0pfSxJemU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvemUsZGI6Q3plLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe196ZSgpO2NvbnN0IHY9Sk4oKSxtPXYuZ2l0R3JhcGg7VXQuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIixpK2AKYCwiaWQ6IixhLGYpLEVQPXAuZGIuZ2V0Q29tbWl0cygpO2NvbnN0IGI9cC5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTt5MD1wLmRiLmdldERpcmVjdGlvbigpO2NvbnN0IEU9eXIoYFtpZD0iJHthfSJdYCk7bGV0IF89MDtiLmZvckVhY2goKEwsTik9Pntjb25zdCBCPXFCdChMLm5hbWUpLGo9RS5hcHBlbmQoImciKSxSPWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLHo9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIpO3oubm9kZSgpLmFwcGVuZENoaWxkKEIpO2xldCBLPUIuZ2V0QkJveCgpO1ExW0wubmFtZV09e3BvczpfLGluZGV4Ok59LF8rPTUwKyhtLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApKyh5MD09PSJUQiI/Sy53aWR0aC8yOjApLHoucmVtb3ZlKCksUi5yZW1vdmUoKSxqLnJlbW92ZSgpfSksSEJ0KEUsRVAsITEpLG0uc2hvd0JyYW5jaGVzJiZNemUoRSxiKSxMemUoRSxFUCksSEJ0KEUsRVAsITApLCRhLmluc2VydFRpdGxlKEUsImdpdFRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxNT3Qodm9pZCAwLEUsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoPz92LnVzZU1heFdpZHRoKX19LHN0eWxlczppPT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChhPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7YX0geyBmaWxsOiAke2lbImdpdEJyYW5jaExhYmVsIithXX07IH0KICAgICAgICAuY29tbWl0JHthfSB7IHN0cm9rZTogJHtpWyJnaXQiK2FdfTsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHthfSB7IHN0cm9rZTogJHtpWyJnaXRJbnYiK2FdfTsgZmlsbDogJHtpWyJnaXRJbnYiK2FdfTsgfQogICAgICAgIC5sYWJlbCR7YX0gIHsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5hcnJvdyR7YX0geyBzdHJva2U6ICR7aVsiZ2l0IithXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7aS5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtpLmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke2kudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHtpLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtpLnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7aS50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHtpLnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke2kucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFIwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFUseHQsbnQsT3Qpe2ZvcihudD1udHx8e30sT3Q9VS5sZW5ndGg7T3QtLTtudFtVW090XV09eHQpO3JldHVybiBudH0sYT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSxmPVsxLDI1XSxwPVsxLDI2XSx2PVsxLDI3XSxtPVsxLDI4XSxiPVsxLDI5XSxFPVsxLDMwXSxfPVsxLDMxXSxMPVsxLDldLE49WzEsMTBdLEI9WzEsMTFdLGo9WzEsMTJdLFI9WzEsMTNdLHo9WzEsMTRdLEs9WzEsMTVdLGl0PVsxLDE2XSxzdD1bMSwxOF0sdXQ9WzEsMTldLGJ0PVsxLDIwXSxtdD1bMSwyMV0seXQ9WzEsMjJdLGR0PVsxLDI0XSxodD1bMSwzMl0sd3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeHQsbnQsT3QsTnQscXQsQ3QsWil7dmFyIFR0PUN0Lmxlbmd0aC0xO3N3aXRjaChxdCl7Y2FzZSAxOnJldHVybiBDdFtUdC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpDdFtUdC0xXS5wdXNoKEN0W1R0XSksdGhpcy4kPUN0W1R0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUN0W1R0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6TnQuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5Ok50LnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOk50LnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6TnQuc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOk50LnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6TnQuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0Ok50LnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6TnQuc2V0RGF0ZUZvcm1hdChDdFtUdF0uc3Vic3RyKDExKSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6TnQuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9Q3RbVHRdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpOdC5Ub3BBeGlzKCksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpOdC5zZXRBeGlzRm9ybWF0KEN0W1R0XS5zdWJzdHIoMTEpKSx0aGlzLiQ9Q3RbVHRdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpOdC5zZXRUaWNrSW50ZXJ2YWwoQ3RbVHRdLnN1YnN0cigxMykpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOk50LnNldEV4Y2x1ZGVzKEN0W1R0XS5zdWJzdHIoOSkpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6TnQuc2V0SW5jbHVkZXMoQ3RbVHRdLnN1YnN0cig5KSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpOdC5zZXRUb2RheU1hcmtlcihDdFtUdF0uc3Vic3RyKDEyKSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6TnQuc2V0RGlhZ3JhbVRpdGxlKEN0W1R0XS5zdWJzdHIoNikpLHRoaXMuJD1DdFtUdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUN0W1R0XS50cmltKCksTnQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUN0W1R0XS50cmltKCksTnQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4Ok50LmFkZFNlY3Rpb24oQ3RbVHRdLnN1YnN0cig4KSksdGhpcy4kPUN0W1R0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpOdC5hZGRUYXNrKEN0W1R0LTFdLEN0W1R0XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1DdFtUdC0xXSxOdC5zZXRDbGlja0V2ZW50KEN0W1R0LTFdLEN0W1R0XSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1DdFtUdC0yXSxOdC5zZXRDbGlja0V2ZW50KEN0W1R0LTJdLEN0W1R0LTFdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9Q3RbVHQtMl0sTnQuc2V0Q2xpY2tFdmVudChDdFtUdC0yXSxDdFtUdC0xXSxudWxsKSxOdC5zZXRMaW5rKEN0W1R0LTJdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9Q3RbVHQtM10sTnQuc2V0Q2xpY2tFdmVudChDdFtUdC0zXSxDdFtUdC0yXSxDdFtUdC0xXSksTnQuc2V0TGluayhDdFtUdC0zXSxDdFtUdF0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUN0W1R0LTJdLE50LnNldENsaWNrRXZlbnQoQ3RbVHQtMl0sQ3RbVHRdLG51bGwpLE50LnNldExpbmsoQ3RbVHQtMl0sQ3RbVHQtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUN0W1R0LTNdLE50LnNldENsaWNrRXZlbnQoQ3RbVHQtM10sQ3RbVHQtMV0sQ3RbVHRdKSxOdC5zZXRMaW5rKEN0W1R0LTNdLEN0W1R0LTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1DdFtUdC0xXSxOdC5zZXRMaW5rKEN0W1R0LTFdLEN0W1R0XSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1DdFtUdC0xXSsiICIrQ3RbVHRdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1DdFtUdC0yXSsiICIrQ3RbVHQtMV0rIiAiK0N0W1R0XTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUN0W1R0LTNdKyIgIitDdFtUdC0yXSsiICIrQ3RbVHQtMV0rIiAiK0N0W1R0XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6ZiwxMzpwLDE0OnYsMTU6bSwxNjpiLDE3OkUsMTg6XywxOTpMLDIwOk4sMjE6QiwyMjpqLDIzOlIsMjQ6eiwyNTpLLDI2Oml0LDI3OnN0LDI4OnV0LDMwOmJ0LDMyOm10LDMzOnl0LDM0OjIzLDM1OmR0LDM3Omh0fSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjMzLDExOjE3LDEyOmYsMTM6cCwxNDp2LDE1Om0sMTY6YiwxNzpFLDE4Ol8sMTk6TCwyMDpOLDIxOkIsMjI6aiwyMzpSLDI0OnosMjU6SywyNjppdCwyNzpzdCwyODp1dCwzMDpidCwzMjptdCwzMzp5dCwzNDoyMywzNTpkdCwzNzpodH0saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLGkoYSxbMiwxOF0pLGkoYSxbMiwxOV0pLGkoYSxbMiwyMF0pLGkoYSxbMiwyMV0pLGkoYSxbMiwyMl0pLGkoYSxbMiwyM10pLGkoYSxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkoYSxbMiwyN10pLGkoYSxbMiwyOF0pLGkoYSxbMiwyOV0pLHszNjpbMSwzNl19LGkoYSxbMiw4XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShhLFsyLDRdKSxpKGEsWzIsMjVdKSxpKGEsWzIsMjZdKSxpKGEsWzIsMzBdKSxpKGEsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShhLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShhLFsyLDMyXSx7NDA6WzEsNDJdfSksaShhLFsyLDMzXSksaShhLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShhLFsyLDM0XSksaShhLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeHQsbnQpe2lmKG50LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoeHQpO2Vsc2V7dmFyIE90PW5ldyBFcnJvcih4dCk7dGhyb3cgT3QuaGFzaD1udCxPdH19LHBhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgbnQ9dGhpcyxPdD1bMF0sTnQ9W10scXQ9W251bGxdLEN0PVtdLFo9dGhpcy50YWJsZSxUdD0iIixIdD0wLEl0PTAsRnQ9MixrZT0xLHBuPUN0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE1lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksdmU9e3l5Ont9fTtmb3IodmFyIEdlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR2UpJiYodmUueXlbR2VdPXRoaXMueXlbR2VdKTtNZS5zZXRJbnB1dCh4dCx2ZS55eSksdmUueXkubGV4ZXI9TWUsdmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIE1lLnl5bGxvYz4idSImJihNZS55eWxsb2M9e30pO3ZhciBLZT1NZS55eWxsb2M7Q3QucHVzaChLZSk7dmFyIHdlPU1lLm9wdGlvbnMmJk1lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB2ZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj12ZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBfZSgpe3ZhciBkYTtyZXR1cm4gZGE9TnQucG9wKCl8fE1lLmxleCgpfHxrZSx0eXBlb2YgZGEhPSJudW1iZXIiJiYoZGEgaW5zdGFuY2VvZiBBcnJheSYmKE50PWRhLGRhPU50LnBvcCgpKSxkYT1udC5zeW1ib2xzX1tkYV18fGRhKSxkYX1mb3IodmFyICR0LHJlLGllLE9lLG9lPXt9LE5lLG1lLGNuLGxpOzspe2lmKHJlPU90W090Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JlXT9pZT10aGlzLmRlZmF1bHRBY3Rpb25zW3JlXTooKCR0PT09bnVsbHx8dHlwZW9mICR0PiJ1IikmJigkdD1fZSgpKSxpZT1aW3JlXSYmWltyZV1bJHRdKSx0eXBlb2YgaWU+InUifHwhaWUubGVuZ3RofHwhaWVbMF0pe3ZhciB5YT0iIjtsaT1bXTtmb3IoTmUgaW4gWltyZV0pdGhpcy50ZXJtaW5hbHNfW05lXSYmTmU+RnQmJmxpLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tOZV0rIiciKTtNZS5zaG93UG9zaXRpb24/eWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoSHQrMSkrYDoKYCtNZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2xpLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bJHRdfHwkdCkrIiciOnlhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoJHQ9PWtlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfWyR0XXx8JHQpKyInIiksdGhpcy5wYXJzZUVycm9yKHlhLHt0ZXh0Ok1lLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1skdF18fCR0LGxpbmU6TWUueXlsaW5lbm8sbG9jOktlLGV4cGVjdGVkOmxpfSl9aWYoaWVbMF1pbnN0YW5jZW9mIEFycmF5JiZpZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JlKyIsIHRva2VuOiAiKyR0KTtzd2l0Y2goaWVbMF0pe2Nhc2UgMTpPdC5wdXNoKCR0KSxxdC5wdXNoKE1lLnl5dGV4dCksQ3QucHVzaChNZS55eWxsb2MpLE90LnB1c2goaWVbMV0pLCR0PW51bGwsSXQ9TWUueXlsZW5nLFR0PU1lLnl5dGV4dCxIdD1NZS55eWxpbmVubyxLZT1NZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKG1lPXRoaXMucHJvZHVjdGlvbnNfW2llWzFdXVsxXSxvZS4kPXF0W3F0Lmxlbmd0aC1tZV0sb2UuXyQ9e2ZpcnN0X2xpbmU6Q3RbQ3QubGVuZ3RoLShtZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkN0W0N0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkN0W0N0Lmxlbmd0aC0obWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Q3RbQ3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx3ZSYmKG9lLl8kLnJhbmdlPVtDdFtDdC5sZW5ndGgtKG1lfHwxKV0ucmFuZ2VbMF0sQ3RbQ3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksT2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG9lLFtUdCxJdCxIdCx2ZS55eSxpZVsxXSxxdCxDdF0uY29uY2F0KHBuKSksdHlwZW9mIE9lPCJ1IilyZXR1cm4gT2U7bWUmJihPdD1PdC5zbGljZSgwLC0xKm1lKjIpLHF0PXF0LnNsaWNlKDAsLTEqbWUpLEN0PUN0LnNsaWNlKDAsLTEqbWUpKSxPdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2llWzFdXVswXSkscXQucHVzaChvZS4kKSxDdC5wdXNoKG9lLl8kKSxjbj1aW090W090Lmxlbmd0aC0yXV1bT3RbT3QubGVuZ3RoLTFdXSxPdC5wdXNoKGNuKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBVPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKG50LE90KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG50LE90KTtlbHNlIHRocm93IG5ldyBFcnJvcihudCl9LHNldElucHV0OmZ1bmN0aW9uKHh0LG50KXtyZXR1cm4gdGhpcy55eT1udHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9eHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHh0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz14dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eHQsdGhpcy5tYXRjaGVkKz14dDt2YXIgbnQ9eHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBudD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSkseHR9LHVucHV0OmZ1bmN0aW9uKHh0KXt2YXIgbnQ9eHQubGVuZ3RoLE90PXh0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW50KSx0aGlzLm9mZnNldC09bnQ7dmFyIE50PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE90Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09T3QubGVuZ3RoLTEpO3ZhciBxdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46T3Q/KE90Lmxlbmd0aD09PU50Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrTnRbTnQubGVuZ3RoLU90Lmxlbmd0aF0ubGVuZ3RoLU90WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcXRbMF0scXRbMF0rdGhpcy55eWxlbmctbnRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbih4dCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB4dD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHh0Lmxlbmd0aD4yMD8iLi4uIjoiIikreHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeHQ9dGhpcy5tYXRjaDtyZXR1cm4geHQubGVuZ3RoPDIwJiYoeHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXh0Lmxlbmd0aCkpLCh4dC5zdWJzdHIoMCwyMCkrKHh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgeHQ9dGhpcy5wYXN0SW5wdXQoKSxudD1uZXcgQXJyYXkoeHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK250KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih4dCxudCl7dmFyIE90LE50LHF0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihxdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihxdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxOdD14dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksTnQmJih0aGlzLnl5bGluZW5vKz1OdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpOdD9OdFtOdC5sZW5ndGgtMV0ubGVuZ3RoLU50W050Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3h0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXh0WzBdLHRoaXMubWF0Y2grPXh0WzBdLHRoaXMubWF0Y2hlcz14dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4dFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eHRbMF0sT3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbnQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksT3QpcmV0dXJuIE90O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDdCBpbiBxdCl0aGlzW0N0XT1xdFtDdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeHQsbnQsT3QsTnQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcXQ9dGhpcy5fY3VycmVudFJ1bGVzKCksQ3Q9MDtDdDxxdC5sZW5ndGg7Q3QrKylpZihPdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3F0W0N0XV0pLE90JiYoIW50fHxPdFswXS5sZW5ndGg+bnRbMF0ubGVuZ3RoKSl7aWYobnQ9T3QsTnQ9Q3QsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeHQ9dGhpcy50ZXN0X21hdGNoKE90LHF0W0N0XSkseHQhPT0hMSlyZXR1cm4geHQ7aWYodGhpcy5fYmFja3RyYWNrKXtudD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBudD8oeHQ9dGhpcy50ZXN0X21hdGNoKG50LHF0W050XSkseHQhPT0hMT94dDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubmV4dCgpO3JldHVybiBudHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChudCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG50PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obnQpe3JldHVybiBudD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG50fHwwKSxudD49MD90aGlzLmNvbmRpdGlvblN0YWNrW250XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihudCl7dGhpcy5iZWdpbihudCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obnQsT3QsTnQscXQpe3N3aXRjaChOdCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMwO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiA0MDtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDM5O2Nhc2UgMjQ6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiAzNztjYXNlIDI3OnJldHVybiA0O2Nhc2UgMjg6cmV0dXJuIDE5O2Nhc2UgMjk6cmV0dXJuIDIwO2Nhc2UgMzA6cmV0dXJuIDIxO2Nhc2UgMzE6cmV0dXJuIDIyO2Nhc2UgMzI6cmV0dXJuIDIzO2Nhc2UgMzM6cmV0dXJuIDI1O2Nhc2UgMzQ6cmV0dXJuIDI0O2Nhc2UgMzU6cmV0dXJuIDI2O2Nhc2UgMzY6cmV0dXJuIDEyO2Nhc2UgMzc6cmV0dXJuIDEzO2Nhc2UgMzg6cmV0dXJuIDE0O2Nhc2UgMzk6cmV0dXJuIDE1O2Nhc2UgNDA6cmV0dXJuIDE2O2Nhc2UgNDE6cmV0dXJuIDE3O2Nhc2UgNDI6cmV0dXJuIDE4O2Nhc2UgNDM6cmV0dXJuImRhdGUiO2Nhc2UgNDQ6cmV0dXJuIDI3O2Nhc2UgNDU6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiAzNTtjYXNlIDQ4OnJldHVybiAzNjtjYXNlIDQ5OnJldHVybiI6IjtjYXNlIDUwOnJldHVybiA2O2Nhc2UgNTE6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpocmVmW1xzXStbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OmNhbGxbXHNdKykvaSwvXig/OlwoW1xzXSpcKSkvaSwvXig/OlwoKS9pLC9eKD86W14oXSopL2ksL14oPzpcKSkvaSwvXig/OlteKV0qKS9pLC9eKD86Y2xpY2tbXHNdKykvaSwvXig/Oltcc1xuXSkvaSwvXig/OlteXHNcbl0qKS9pLC9eKD86Z2FudHRcYikvaSwvXig/OmRhdGVGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86aW5jbHVzaXZlRW5kRGF0ZXNcYikvaSwvXig/OnRvcEF4aXNcYikvaSwvXig/OmF4aXNGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86dGlja0ludGVydmFsXHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86d2Vla2RheVxzK21vbmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3R1ZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt3ZWRuZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt0aHVyc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK2ZyaWRheVxiKS9pLC9eKD86d2Vla2RheVxzK3NhdHVyZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc3VuZGF5XGIpL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTksMjAsMjFdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE2LDE3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4LDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFV9KCk7d3QubGV4ZXI9WDtmdW5jdGlvbiBwdCgpe3RoaXMueXk9e319cmV0dXJuIHB0LnByb3RvdHlwZT13dCx3dC5QYXJzZXI9cHQsbmV3IHB0fSgpO1IwdC5wYXJzZXI9UjB0O2NvbnN0IER6ZT1SMHQ7dmFyIEdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7dmFyIGY9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1mdW5jdGlvbihMKXtyZXR1cm4gTC5hZGQoNC1MLmlzb1dlZWtkYXkoKSxmKX0sRT12LnByb3RvdHlwZTtFLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcykueWVhcigpfSxFLmlzb1dlZWs9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuJHV0aWxzKCkudShMKSlyZXR1cm4gdGhpcy5hZGQoNyooTC10aGlzLmlzb1dlZWsoKSksZik7dmFyIE4sQixqLFIsej1iKHRoaXMpLEs9KE49dGhpcy5pc29XZWVrWWVhcigpLEI9dGhpcy4kdSxqPShCP20udXRjOm0pKCkueWVhcihOKS5zdGFydE9mKCJ5ZWFyIiksUj00LWouaXNvV2Vla2RheSgpLGouaXNvV2Vla2RheSgpPjQmJihSKz03KSxqLmFkZChSLGYpKTtyZXR1cm4gei5kaWZmKEssIndlZWsiKSsxfSxFLmlzb1dlZWtkYXk9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShMKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9MOkwtNyl9O3ZhciBfPUUuc3RhcnRPZjtFLnN0YXJ0T2Y9ZnVuY3Rpb24oTCxOKXt2YXIgQj10aGlzLiR1dGlscygpLGo9ISFCLnUoTil8fE47cmV0dXJuIEIucChMKT09PSJpc293ZWVrIj9qP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6Xy5iaW5kKHRoaXMpKEwsTil9fX0pfSkoR0J0KTt2YXIgT3plPUdCdC5leHBvcnRzO2NvbnN0IE56ZT1CNyhPemUpO3ZhciBWQnQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihmLHApe2kuZXhwb3J0cz1wKCl9KShkMCxmdW5jdGlvbigpe3ZhciBmPXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0scD0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyx2PS9cZFxkLyxtPS9cZFxkPy8sYj0vXGQqW14tXzovLCgpXHNcZF0rLyxFPXt9LF89ZnVuY3Rpb24oSyl7cmV0dXJuKEs9K0spKyhLPjY4PzE5MDA6MmUzKX0sTD1mdW5jdGlvbihLKXtyZXR1cm4gZnVuY3Rpb24oaXQpe3RoaXNbS109K2l0fX0sTj1bL1srLV1cZFxkOj8oXGRcZCk/fFovLGZ1bmN0aW9uKEspeyh0aGlzLnpvbmV8fCh0aGlzLnpvbmU9e30pKS5vZmZzZXQ9ZnVuY3Rpb24oaXQpe2lmKCFpdHx8aXQ9PT0iWiIpcmV0dXJuIDA7dmFyIHN0PWl0Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx1dD02MCpzdFsxXSsoK3N0WzJdfHwwKTtyZXR1cm4gdXQ9PT0wPzA6c3RbMF09PT0iKyI/LXV0OnV0fShLKX1dLEI9ZnVuY3Rpb24oSyl7dmFyIGl0PUVbS107cmV0dXJuIGl0JiYoaXQuaW5kZXhPZj9pdDppdC5zLmNvbmNhdChpdC5mKSl9LGo9ZnVuY3Rpb24oSyxpdCl7dmFyIHN0LHV0PUUubWVyaWRpZW07aWYodXQpe2Zvcih2YXIgYnQ9MTtidDw9MjQ7YnQrPTEpaWYoSy5pbmRleE9mKHV0KGJ0LDAsaXQpKT4tMSl7c3Q9YnQ+MTI7YnJlYWt9fWVsc2Ugc3Q9Sz09PShpdD8icG0iOiJQTSIpO3JldHVybiBzdH0sUj17QTpbYixmdW5jdGlvbihLKXt0aGlzLmFmdGVybm9vbj1qKEssITEpfV0sYTpbYixmdW5jdGlvbihLKXt0aGlzLmFmdGVybm9vbj1qKEssITApfV0sUzpbL1xkLyxmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK0t9XSxTUzpbdixmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorS31dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihLKXt0aGlzLm1pbGxpc2Vjb25kcz0rS31dLHM6W20sTCgic2Vjb25kcyIpXSxzczpbbSxMKCJzZWNvbmRzIildLG06W20sTCgibWludXRlcyIpXSxtbTpbbSxMKCJtaW51dGVzIildLEg6W20sTCgiaG91cnMiKV0saDpbbSxMKCJob3VycyIpXSxISDpbbSxMKCJob3VycyIpXSxoaDpbbSxMKCJob3VycyIpXSxEOlttLEwoImRheSIpXSxERDpbdixMKCJkYXkiKV0sRG86W2IsZnVuY3Rpb24oSyl7dmFyIGl0PUUub3JkaW5hbCxzdD1LLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT1zdFswXSxpdClmb3IodmFyIHV0PTE7dXQ8PTMxO3V0Kz0xKWl0KHV0KS5yZXBsYWNlKC9cW3xcXS9nLCIiKT09PUsmJih0aGlzLmRheT11dCl9XSxNOlttLEwoIm1vbnRoIildLE1NOlt2LEwoIm1vbnRoIildLE1NTTpbYixmdW5jdGlvbihLKXt2YXIgaXQ9QigibW9udGhzIiksc3Q9KEIoIm1vbnRoc1Nob3J0Iil8fGl0Lm1hcChmdW5jdGlvbih1dCl7cmV0dXJuIHV0LnNsaWNlKDAsMyl9KSkuaW5kZXhPZihLKSsxO2lmKHN0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9c3QlMTJ8fHN0fV0sTU1NTTpbYixmdW5jdGlvbihLKXt2YXIgaXQ9QigibW9udGhzIikuaW5kZXhPZihLKSsxO2lmKGl0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9aXQlMTJ8fGl0fV0sWTpbL1srLV0/XGQrLyxMKCJ5ZWFyIildLFlZOlt2LGZ1bmN0aW9uKEspe3RoaXMueWVhcj1fKEspfV0sWVlZWTpbL1xkezR9LyxMKCJ5ZWFyIildLFo6TixaWjpOfTtmdW5jdGlvbiB6KEspe3ZhciBpdCxzdDtpdD1LLHN0PUUmJkUuZm9ybWF0cztmb3IodmFyIHV0PShLPWl0LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oWCxwdCxVKXt2YXIgeHQ9VSYmVS50b1VwcGVyQ2FzZSgpO3JldHVybiBwdHx8c3RbVV18fGZbVV18fHN0W3h0XS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKG50LE90LE50KXtyZXR1cm4gT3R8fE50LnNsaWNlKDEpfSl9KSkubWF0Y2gocCksYnQ9dXQubGVuZ3RoLG10PTA7bXQ8YnQ7bXQrPTEpe3ZhciB5dD11dFttdF0sZHQ9Ult5dF0saHQ9ZHQmJmR0WzBdLHd0PWR0JiZkdFsxXTt1dFttdF09d3Q/e3JlZ2V4Omh0LHBhcnNlcjp3dH06eXQucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBwdD17fSxVPTAseHQ9MDtVPGJ0O1UrPTEpe3ZhciBudD11dFtVXTtpZih0eXBlb2YgbnQ9PSJzdHJpbmciKXh0Kz1udC5sZW5ndGg7ZWxzZXt2YXIgT3Q9bnQucmVnZXgsTnQ9bnQucGFyc2VyLHF0PVguc2xpY2UoeHQpLEN0PU90LmV4ZWMocXQpWzBdO050LmNhbGwocHQsQ3QpLFg9WC5yZXBsYWNlKEN0LCIiKX19cmV0dXJuIGZ1bmN0aW9uKFope3ZhciBUdD1aLmFmdGVybm9vbjtpZihUdCE9PXZvaWQgMCl7dmFyIEh0PVouaG91cnM7VHQ/SHQ8MTImJihaLmhvdXJzKz0xMik6SHQ9PT0xMiYmKFouaG91cnM9MCksZGVsZXRlIFouYWZ0ZXJub29ufX0ocHQpLHB0fX1yZXR1cm4gZnVuY3Rpb24oSyxpdCxzdCl7c3QucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxLJiZLLnBhcnNlVHdvRGlnaXRZZWFyJiYoXz1LLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgdXQ9aXQucHJvdG90eXBlLGJ0PXV0LnBhcnNlO3V0LnBhcnNlPWZ1bmN0aW9uKG10KXt2YXIgeXQ9bXQuZGF0ZSxkdD1tdC51dGMsaHQ9bXQuYXJnczt0aGlzLiR1PWR0O3ZhciB3dD1odFsxXTtpZih0eXBlb2Ygd3Q9PSJzdHJpbmciKXt2YXIgWD1odFsyXT09PSEwLHB0PWh0WzNdPT09ITAsVT1YfHxwdCx4dD1odFsyXTtwdCYmKHh0PWh0WzJdKSxFPXRoaXMuJGxvY2FsZSgpLCFYJiZ4dCYmKEU9c3QuTHNbeHRdKSx0aGlzLiRkPWZ1bmN0aW9uKHF0LEN0LFope3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihDdCk+LTEpcmV0dXJuIG5ldyBEYXRlKChDdD09PSJYIj8xZTM6MSkqcXQpO3ZhciBUdD16KEN0KShxdCksSHQ9VHQueWVhcixJdD1UdC5tb250aCxGdD1UdC5kYXksa2U9VHQuaG91cnMscG49VHQubWludXRlcyxNZT1UdC5zZWNvbmRzLHZlPVR0Lm1pbGxpc2Vjb25kcyxHZT1UdC56b25lLEtlPW5ldyBEYXRlLHdlPUZ0fHwoSHR8fEl0PzE6S2UuZ2V0RGF0ZSgpKSxfZT1IdHx8S2UuZ2V0RnVsbFllYXIoKSwkdD0wO0h0JiYhSXR8fCgkdD1JdD4wP0l0LTE6S2UuZ2V0TW9udGgoKSk7dmFyIHJlPWtlfHwwLGllPXBufHwwLE9lPU1lfHwwLG9lPXZlfHwwO3JldHVybiBHZT9uZXcgRGF0ZShEYXRlLlVUQyhfZSwkdCx3ZSxyZSxpZSxPZSxvZSs2MCpHZS5vZmZzZXQqMWUzKSk6Wj9uZXcgRGF0ZShEYXRlLlVUQyhfZSwkdCx3ZSxyZSxpZSxPZSxvZSkpOm5ldyBEYXRlKF9lLCR0LHdlLHJlLGllLE9lLG9lKX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oeXQsd3QsZHQpLHRoaXMuaW5pdCgpLHh0JiZ4dCE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh4dCkuJEwpLFUmJnl0IT10aGlzLmZvcm1hdCh3dCkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksRT17fX1lbHNlIGlmKHd0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBudD13dC5sZW5ndGgsT3Q9MTtPdDw9bnQ7T3QrPTEpe2h0WzFdPXd0W090LTFdO3ZhciBOdD1zdC5hcHBseSh0aGlzLGh0KTtpZihOdC5pc1ZhbGlkKCkpe3RoaXMuJGQ9TnQuJGQsdGhpcy4kTD1OdC4kTCx0aGlzLmluaXQoKTticmVha31PdD09PW50JiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgYnQuY2FsbCh0aGlzLG10KX19fSl9KShWQnQpO3ZhciBQemU9VkJ0LmV4cG9ydHM7Y29uc3QgRnplPUI3KFB6ZSk7dmFyIFVCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7dmFyIHY9cC5wcm90b3R5cGUsbT12LmZvcm1hdDt2LmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgRT10aGlzLF89dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBtLmJpbmQodGhpcykoYik7dmFyIEw9dGhpcy4kdXRpbHMoKSxOPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oQil7c3dpdGNoKEIpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoRS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gXy5vcmRpbmFsKEUuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIEUud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBFLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIF8ub3JkaW5hbChFLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIEwucyhFLndlZWsoKSxCPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIEwucyhFLmlzb1dlZWsoKSxCPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIEwucyhTdHJpbmcoRS4kSD09PTA/MjQ6RS4kSCksQj09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKEUuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gRS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIEJ9fSk7cmV0dXJuIG0uYmluZCh0aGlzKShOKX19fSl9KShVQnQpO3ZhciBCemU9VUJ0LmV4cG9ydHM7Y29uc3QgUnplPUI3KEJ6ZSk7ZzAuZXh0ZW5kKE56ZSksZzAuZXh0ZW5kKEZ6ZSksZzAuZXh0ZW5kKFJ6ZSk7bGV0IG0zPSIiLGowdD0iIiwkMHQsejB0PSIiLFNQPVtdLEFQPVtdLHEwdD17fSxIMHQ9W10sa0s9W10saUw9IiIsRzB0PSIiO2NvbnN0IFdCdD1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IFYwdD1bXSxMUD0hMSxVMHQ9ITEsVzB0PSJzdW5kYXkiLEswdD0wO2NvbnN0IGp6ZT1mdW5jdGlvbigpe0gwdD1bXSxrSz1bXSxpTD0iIixWMHQ9W10sRUs9MCxYMHQ9dm9pZCAwLFRLPXZvaWQgMCx1MT1bXSxtMz0iIixqMHQ9IiIsRzB0PSIiLCQwdD12b2lkIDAsejB0PSIiLFNQPVtdLEFQPVtdLExQPSExLFUwdD0hMSxLMHQ9MCxxMHQ9e30sYXAoKSxXMHQ9InN1bmRheSJ9LCR6ZT1mdW5jdGlvbihpKXtqMHQ9aX0senplPWZ1bmN0aW9uKCl7cmV0dXJuIGowdH0scXplPWZ1bmN0aW9uKGkpeyQwdD1pfSxIemU9ZnVuY3Rpb24oKXtyZXR1cm4gJDB0fSxHemU9ZnVuY3Rpb24oaSl7ejB0PWl9LFZ6ZT1mdW5jdGlvbigpe3JldHVybiB6MHR9LFV6ZT1mdW5jdGlvbihpKXttMz1pfSxXemU9ZnVuY3Rpb24oKXtMUD0hMH0sS3plPWZ1bmN0aW9uKCl7cmV0dXJuIExQfSxZemU9ZnVuY3Rpb24oKXtVMHQ9ITB9LFh6ZT1mdW5jdGlvbigpe3JldHVybiBVMHR9LFF6ZT1mdW5jdGlvbihpKXtHMHQ9aX0sWnplPWZ1bmN0aW9uKCl7cmV0dXJuIEcwdH0sSnplPWZ1bmN0aW9uKCl7cmV0dXJuIG0zfSx0cWU9ZnVuY3Rpb24oaSl7U1A9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZXFlPWZ1bmN0aW9uKCl7cmV0dXJuIFNQfSxucWU9ZnVuY3Rpb24oaSl7QVA9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0scnFlPWZ1bmN0aW9uKCl7cmV0dXJuIEFQfSxpcWU9ZnVuY3Rpb24oKXtyZXR1cm4gcTB0fSxzcWU9ZnVuY3Rpb24oaSl7aUw9aSxIMHQucHVzaChpKX0sYXFlPWZ1bmN0aW9uKCl7cmV0dXJuIEgwdH0sb3FlPWZ1bmN0aW9uKCl7bGV0IGk9SkJ0KCk7Y29uc3QgYT0xMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1KQnQoKSxmKys7cmV0dXJuIGtLPXUxLGtLfSxLQnQ9ZnVuY3Rpb24oaSxhLGYscCl7cmV0dXJuIHAuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmZi5pbmNsdWRlcygid2Vla2VuZHMiKXx8Zi5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOmYuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKX0sY3FlPWZ1bmN0aW9uKGkpe1cwdD1pfSx1cWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzB0fSxZQnQ9ZnVuY3Rpb24oaSxhLGYscCl7aWYoIWYubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCB2O2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT92PWcwKGkuc3RhcnRUaW1lKTp2PWcwKGkuc3RhcnRUaW1lLGEsITApLHY9di5hZGQoMSwiZCIpO2xldCBtO2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/bT1nMChpLmVuZFRpbWUpOm09ZzAoaS5lbmRUaW1lLGEsITApO2NvbnN0W2IsRV09bHFlKHYsbSxhLGYscCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPUV9LGxxZT1mdW5jdGlvbihpLGEsZixwLHYpe2xldCBtPSExLGI9bnVsbDtmb3IoO2k8PWE7KW18fChiPWEudG9EYXRlKCkpLG09S0J0KGksZixwLHYpLG0mJihhPWEuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW2EsYl19LFkwdD1mdW5jdGlvbihpLGEsZil7Zj1mLnRyaW0oKTtjb25zdCB2PS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhmLnRyaW0oKSk7aWYodiE9PW51bGwpe2xldCBiPW51bGw7aWYodlsxXS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oRSl7bGV0IF89YUwoRSk7XyE9PXZvaWQgMCYmKGI/Xy5lbmRUaW1lPmIuZW5kVGltZSYmKGI9Xyk6Yj1fKX0pLGIpcmV0dXJuIGIuZW5kVGltZTt7Y29uc3QgRT1uZXcgRGF0ZTtyZXR1cm4gRS5zZXRIb3VycygwLDAsMCwwKSxFfX1sZXQgbT1nMChmLGEudHJpbSgpLCEwKTtpZihtLmlzVmFsaWQoKSlyZXR1cm4gbS50b0RhdGUoKTt7VXQuZGVidWcoIkludmFsaWQgZGF0ZToiK2YpLFV0LmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrYS50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUoZik7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK2YpO3JldHVybiBifX0sWEJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBhIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoYVsxXSksYVsyXV06W05hTiwibXMiXX0sUUJ0PWZ1bmN0aW9uKGksYSxmLHA9ITEpe2Y9Zi50cmltKCk7bGV0IHY9ZzAoZixhLnRyaW0oKSwhMCk7aWYodi5pc1ZhbGlkKCkpcmV0dXJuIHAmJih2PXYuYWRkKDEsImQiKSksdi50b0RhdGUoKTtsZXQgbT1nMChpKTtjb25zdFtiLEVdPVhCdChmKTtpZighTnVtYmVyLmlzTmFOKGIpKXtjb25zdCBfPW0uYWRkKGIsRSk7Xy5pc1ZhbGlkKCkmJihtPV8pfXJldHVybiBtLnRvRGF0ZSgpfTtsZXQgRUs9MDtjb25zdCBzTD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8oRUs9RUsrMSwidGFzayIrRUspOml9LGhxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdj17fTtuUnQocCx2LFdCdCk7Zm9yKGxldCBiPTA7YjxwLmxlbmd0aDtiKyspcFtiXT1wW2JdLnRyaW0oKTtsZXQgbT0iIjtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp2LmlkPXNMKCksdi5zdGFydFRpbWU9aS5lbmRUaW1lLG09cFswXTticmVhaztjYXNlIDI6di5pZD1zTCgpLHYuc3RhcnRUaW1lPVkwdCh2b2lkIDAsbTMscFswXSksbT1wWzFdO2JyZWFrO2Nhc2UgMzp2LmlkPXNMKHBbMF0pLHYuc3RhcnRUaW1lPVkwdCh2b2lkIDAsbTMscFsxXSksbT1wWzJdO2JyZWFrfXJldHVybiBtJiYodi5lbmRUaW1lPVFCdCh2LnN0YXJ0VGltZSxtMyxtLExQKSx2Lm1hbnVhbEVuZFRpbWU9ZzAobSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxZQnQodixtMyxBUCxTUCkpLHZ9LGZxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdj17fTtuUnQocCx2LFdCdCk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspcFttXT1wW21dLnRyaW0oKTtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp2LmlkPXNMKCksdi5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSx2LmVuZFRpbWU9e2RhdGE6cFswXX07YnJlYWs7Y2FzZSAyOnYuaWQ9c0woKSx2LnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6cFswXX0sdi5lbmRUaW1lPXtkYXRhOnBbMV19O2JyZWFrO2Nhc2UgMzp2LmlkPXNMKHBbMF0pLHYuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpwWzFdfSx2LmVuZFRpbWU9e2RhdGE6cFsyXX07YnJlYWt9cmV0dXJuIHZ9O2xldCBYMHQsVEssdTE9W107Y29uc3QgWkJ0PXt9LGRxZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e3NlY3Rpb246aUwsdHlwZTppTCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmF9LHRhc2s6aSxjbGFzc2VzOltdfSxwPWZxZShUSyxhKTtmLnJhdy5zdGFydFRpbWU9cC5zdGFydFRpbWUsZi5yYXcuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYucHJldlRhc2tJZD1USyxmLmFjdGl2ZT1wLmFjdGl2ZSxmLmRvbmU9cC5kb25lLGYuY3JpdD1wLmNyaXQsZi5taWxlc3RvbmU9cC5taWxlc3RvbmUsZi5vcmRlcj1LMHQsSzB0Kys7Y29uc3Qgdj11MS5wdXNoKGYpO1RLPWYuaWQsWkJ0W2YuaWRdPXYtMX0sYUw9ZnVuY3Rpb24oaSl7Y29uc3QgYT1aQnRbaV07cmV0dXJuIHUxW2FdfSxncWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPXtzZWN0aW9uOmlMLHR5cGU6aUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0scD1ocWUoWDB0LGEpO2Yuc3RhcnRUaW1lPXAuc3RhcnRUaW1lLGYuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYuYWN0aXZlPXAuYWN0aXZlLGYuZG9uZT1wLmRvbmUsZi5jcml0PXAuY3JpdCxmLm1pbGVzdG9uZT1wLm1pbGVzdG9uZSxYMHQ9ZixrSy5wdXNoKGYpfSxKQnQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe2NvbnN0IHA9dTFbZl07bGV0IHY9IiI7c3dpdGNoKHUxW2ZdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IG09YUwocC5wcmV2VGFza0lkKTtwLnN0YXJ0VGltZT1tLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnY9WTB0KHZvaWQgMCxtMyx1MVtmXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksdiYmKHUxW2ZdLnN0YXJ0VGltZT12KTticmVha31yZXR1cm4gdTFbZl0uc3RhcnRUaW1lJiYodTFbZl0uZW5kVGltZT1RQnQodTFbZl0uc3RhcnRUaW1lLG0zLHUxW2ZdLnJhdy5lbmRUaW1lLmRhdGEsTFApLHUxW2ZdLmVuZFRpbWUmJih1MVtmXS5wcm9jZXNzZWQ9ITAsdTFbZl0ubWFudWFsRW5kVGltZT1nMCh1MVtmXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFlCdCh1MVtmXSxtMyxBUCxTUCkpKSx1MVtmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgdTEuZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0scHFlPWZ1bmN0aW9uKGksYSl7bGV0IGY9YTtMZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYoZj1RNihhKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7YUwocCkhPT12b2lkIDAmJihlUnQocCwoKT0+e3dpbmRvdy5vcGVuKGYsIl9zZWxmIil9KSxxMHRbcF09Zil9KSx0UnQoaSwiY2xpY2thYmxlIil9LHRSdD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPWFMKGYpO3AhPT12b2lkIDAmJnAuY2xhc3Nlcy5wdXNoKGEpfSl9LGJxZT1mdW5jdGlvbihpLGEsZil7aWYoTGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47bGV0IHA9W107aWYodHlwZW9mIGY9PSJzdHJpbmciKXtwPWYuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspe2xldCBiPXBbbV0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSkscFttXT1ifX1wLmxlbmd0aD09PTAmJnAucHVzaChpKSxhTChpKSE9PXZvaWQgMCYmZVJ0KGksKCk9PnskYS5ydW5GdW5jKGEsLi4ucCl9KX0sZVJ0PWZ1bmN0aW9uKGksYSl7VjB0LnB1c2goZnVuY3Rpb24oKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9KX0sdnFlPXtnZXRDb25maWc6KCk9PkxlKCkuZ2FudHQsY2xlYXI6anplLHNldERhdGVGb3JtYXQ6VXplLGdldERhdGVGb3JtYXQ6SnplLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOld6ZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpLemUsZW5hYmxlVG9wQXhpczpZemUsdG9wQXhpc0VuYWJsZWQ6WHplLHNldEF4aXNGb3JtYXQ6JHplLGdldEF4aXNGb3JtYXQ6enplLHNldFRpY2tJbnRlcnZhbDpxemUsZ2V0VGlja0ludGVydmFsOkh6ZSxzZXRUb2RheU1hcmtlcjpHemUsZ2V0VG9kYXlNYXJrZXI6VnplLHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGIsc2V0RGlzcGxheU1vZGU6UXplLGdldERpc3BsYXlNb2RlOlp6ZSxzZXRBY2NEZXNjcmlwdGlvbjpjcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxhZGRTZWN0aW9uOnNxZSxnZXRTZWN0aW9uczphcWUsZ2V0VGFza3M6b3FlLGFkZFRhc2s6ZHFlLGZpbmRUYXNrQnlJZDphTCxhZGRUYXNrT3JnOmdxZSxzZXRJbmNsdWRlczp0cWUsZ2V0SW5jbHVkZXM6ZXFlLHNldEV4Y2x1ZGVzOm5xZSxnZXRFeGNsdWRlczpycWUsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7YnFlKHAsYSxmKX0pLHRSdChpLCJjbGlja2FibGUiKX0sc2V0TGluazpwcWUsZ2V0TGlua3M6aXFlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7VjB0LmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxwYXJzZUR1cmF0aW9uOlhCdCxpc0ludmFsaWREYXRlOktCdCxzZXRXZWVrZGF5OmNxZSxnZXRXZWVrZGF5OnVxZX07ZnVuY3Rpb24gblJ0KGksYSxmKXtsZXQgcD0hMDtmb3IoO3A7KXA9ITEsZi5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IG09Il5cXHMqIit2KyJcXHMqJCIsYj1uZXcgUmVnRXhwKG0pO2lbMF0ubWF0Y2goYikmJihhW3ZdPSEwLGkuc2hpZnQoMSkscD0hMCl9KX1jb25zdCB3cWU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxyUnQ9e21vbmRheTpNTix0dWVzZGF5OllNdCx3ZWRuZXNkYXk6WE10LHRodXJzZGF5Oks3LGZyaWRheTpRTXQsc2F0dXJkYXk6Wk10LHN1bmRheTpMTn0sbXFlPShpLGEpPT57bGV0IGY9Wy4uLmldLm1hcCgoKT0+LTEvMCkscD1bLi4uaV0uc29ydCgobSxiKT0+bS5zdGFydFRpbWUtYi5zdGFydFRpbWV8fG0ub3JkZXItYi5vcmRlciksdj0wO2Zvcihjb25zdCBtIG9mIHApZm9yKGxldCBiPTA7YjxmLmxlbmd0aDtiKyspaWYobS5zdGFydFRpbWU+PWZbYl0pe2ZbYl09bS5lbmRUaW1lLG0ub3JkZXI9YithLGI+diYmKHY9Yik7YnJlYWt9cmV0dXJuIHZ9O2xldCBMNTtjb25zdCB5cWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpEemUsZGI6dnFlLHJlbmRlcmVyOntzZXRDb25mOndxZSxkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5nYW50dCxtPUxlKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1tPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTD1fLmdldEVsZW1lbnRCeUlkKGEpO0w1PUwucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxMNT09PXZvaWQgMCYmKEw1PTEyMDApLHYudXNlV2lkdGghPT12b2lkIDAmJihMNT12LnVzZVdpZHRoKTtjb25zdCBOPXAuZGIuZ2V0VGFza3MoKTtsZXQgQj1bXTtmb3IoY29uc3Qgd3Qgb2YgTilCLnB1c2god3QudHlwZSk7Qj1odChCKTtjb25zdCBqPXt9O2xldCBSPTIqdi50b3BQYWRkaW5nO2lmKHAuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8di5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3Qgd3Q9e307Zm9yKGNvbnN0IHB0IG9mIE4pd3RbcHQuc2VjdGlvbl09PT12b2lkIDA/d3RbcHQuc2VjdGlvbl09W3B0XTp3dFtwdC5zZWN0aW9uXS5wdXNoKHB0KTtsZXQgWD0wO2Zvcihjb25zdCBwdCBvZiBPYmplY3Qua2V5cyh3dCkpe2NvbnN0IFU9bXFlKHd0W3B0XSxYKSsxO1grPVUsUis9VSoodi5iYXJIZWlnaHQrdi5iYXJHYXApLGpbcHRdPVV9fWVsc2V7Uis9Ti5sZW5ndGgqKHYuYmFySGVpZ2h0K3YuYmFyR2FwKTtmb3IoY29uc3Qgd3Qgb2YgQilqW3d0XT1OLmZpbHRlcihYPT5YLnR5cGU9PT13dCkubGVuZ3RofUwuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrTDUrIiAiK1IpO2NvbnN0IHo9RS5zZWxlY3QoYFtpZD0iJHthfSJdYCksSz1DN2UoKS5kb21haW4oW2x4ZShOLGZ1bmN0aW9uKHd0KXtyZXR1cm4gd3Quc3RhcnRUaW1lfSksdXhlKE4sZnVuY3Rpb24od3Qpe3JldHVybiB3dC5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLEw1LXYubGVmdFBhZGRpbmctdi5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBpdCh3dCxYKXtjb25zdCBwdD13dC5zdGFydFRpbWUsVT1YLnN0YXJ0VGltZTtsZXQgeHQ9MDtyZXR1cm4gcHQ+VT94dD0xOnB0PFUmJih4dD0tMSkseHR9Ti5zb3J0KGl0KSxzdChOLEw1LFIpLG9nKHosUixMNSx2LnVzZU1heFdpZHRoKSx6LmFwcGVuZCgidGV4dCIpLnRleHQocC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsTDUvMikuYXR0cigieSIsdi50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBzdCh3dCxYLHB0KXtjb25zdCBVPXYuYmFySGVpZ2h0LHh0PVUrdi5iYXJHYXAsbnQ9di50b3BQYWRkaW5nLE90PXYubGVmdFBhZGRpbmcsTnQ9QlUoKS5kb21haW4oWzAsQi5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKElrZSk7YnQoeHQsbnQsT3QsWCxwdCx3dCxwLmRiLmdldEV4Y2x1ZGVzKCkscC5kYi5nZXRJbmNsdWRlcygpKSxtdChPdCxudCxYLHB0KSx1dCh3dCx4dCxudCxPdCxVLE50LFgpLHl0KHh0LG50KSxkdChPdCxudCxYLHB0KX1mdW5jdGlvbiB1dCh3dCxYLHB0LFUseHQsbnQsT3Qpe2NvbnN0IHF0PVsuLi5uZXcgU2V0KHd0Lm1hcChIdD0+SHQub3JkZXIpKV0ubWFwKEh0PT53dC5maW5kKEl0PT5JdC5vcmRlcj09PUh0KSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHF0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKEh0LEl0KXtyZXR1cm4gSXQ9SHQub3JkZXIsSXQqWCtwdC0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIE90LXYucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLFgpLmF0dHIoImNsYXNzIixmdW5jdGlvbihIdCl7Zm9yKGNvbnN0W0l0LEZ0XW9mIEIuZW50cmllcygpKWlmKEh0LnR5cGU9PT1GdClyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIitJdCV2Lm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSk7Y29uc3QgQ3Q9ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHd0KS5lbnRlcigpLFo9cC5kYi5nZXRMaW5rcygpO2lmKEN0LmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihIdCl7cmV0dXJuIEh0LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihIdCl7cmV0dXJuIEh0Lm1pbGVzdG9uZT9LKEh0LnN0YXJ0VGltZSkrVSsuNSooSyhIdC5lbmRUaW1lKS1LKEh0LnN0YXJ0VGltZSkpLS41Knh0OksoSHQuc3RhcnRUaW1lKStVfSkuYXR0cigieSIsZnVuY3Rpb24oSHQsSXQpe3JldHVybiBJdD1IdC5vcmRlcixJdCpYK3B0fSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKEh0KXtyZXR1cm4gSHQubWlsZXN0b25lP3h0OksoSHQucmVuZGVyRW5kVGltZXx8SHQuZW5kVGltZSktSyhIdC5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0Iix4dCkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oSHQsSXQpe3JldHVybiBJdD1IdC5vcmRlciwoSyhIdC5zdGFydFRpbWUpK1UrLjUqKEsoSHQuZW5kVGltZSktSyhIdC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoSXQqWCtwdCsuNSp4dCkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKEh0KXtjb25zdCBJdD0idGFzayI7bGV0IEZ0PSIiO0h0LmNsYXNzZXMubGVuZ3RoPjAmJihGdD1IdC5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IGtlPTA7Zm9yKGNvbnN0W01lLHZlXW9mIEIuZW50cmllcygpKUh0LnR5cGU9PT12ZSYmKGtlPU1lJXYubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IHBuPSIiO3JldHVybiBIdC5hY3RpdmU/SHQuY3JpdD9wbis9IiBhY3RpdmVDcml0Ijpwbj0iIGFjdGl2ZSI6SHQuZG9uZT9IdC5jcml0P3BuPSIgZG9uZUNyaXQiOnBuPSIgZG9uZSI6SHQuY3JpdCYmKHBuKz0iIGNyaXQiKSxwbi5sZW5ndGg9PT0wJiYocG49IiB0YXNrIiksSHQubWlsZXN0b25lJiYocG49IiBtaWxlc3RvbmUgIitwbikscG4rPWtlLHBuKz0iICIrRnQsSXQrcG59KSxDdC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oSHQpe3JldHVybiBIdC5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbihIdCl7cmV0dXJuIEh0LnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHYuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKEh0KXtsZXQgSXQ9SyhIdC5zdGFydFRpbWUpLEZ0PUsoSHQucmVuZGVyRW5kVGltZXx8SHQuZW5kVGltZSk7SHQubWlsZXN0b25lJiYoSXQrPS41KihLKEh0LmVuZFRpbWUpLUsoSHQuc3RhcnRUaW1lKSktLjUqeHQpLEh0Lm1pbGVzdG9uZSYmKEZ0PUl0K3h0KTtjb25zdCBrZT10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4ga2U+RnQtSXQ/RnQra2UrMS41KnYubGVmdFBhZGRpbmc+T3Q/SXQrVS01OkZ0K1UrNTooRnQtSXQpLzIrSXQrVX0pLmF0dHIoInkiLGZ1bmN0aW9uKEh0LEl0KXtyZXR1cm4gSXQ9SHQub3JkZXIsSXQqWCt2LmJhckhlaWdodC8yKyh2LmZvbnRTaXplLzItMikrcHR9KS5hdHRyKCJ0ZXh0LWhlaWdodCIseHQpLmF0dHIoImNsYXNzIixmdW5jdGlvbihIdCl7Y29uc3QgSXQ9SyhIdC5zdGFydFRpbWUpO2xldCBGdD1LKEh0LmVuZFRpbWUpO0h0Lm1pbGVzdG9uZSYmKEZ0PUl0K3h0KTtjb25zdCBrZT10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgcG49IiI7SHQuY2xhc3Nlcy5sZW5ndGg+MCYmKHBuPUh0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgTWU9MDtmb3IoY29uc3RbR2UsS2Vdb2YgQi5lbnRyaWVzKCkpSHQudHlwZT09PUtlJiYoTWU9R2Uldi5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgdmU9IiI7cmV0dXJuIEh0LmFjdGl2ZSYmKEh0LmNyaXQ/dmU9ImFjdGl2ZUNyaXRUZXh0IitNZTp2ZT0iYWN0aXZlVGV4dCIrTWUpLEh0LmRvbmU/SHQuY3JpdD92ZT12ZSsiIGRvbmVDcml0VGV4dCIrTWU6dmU9dmUrIiBkb25lVGV4dCIrTWU6SHQuY3JpdCYmKHZlPXZlKyIgY3JpdFRleHQiK01lKSxIdC5taWxlc3RvbmUmJih2ZSs9IiBtaWxlc3RvbmVUZXh0Iiksa2U+RnQtSXQ/RnQra2UrMS41KnYubGVmdFBhZGRpbmc+T3Q/cG4rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrTWUrIiAiK3ZlOnBuKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitNZSsiICIrdmUrIiB3aWR0aC0iK2tlOnBuKyIgdGFza1RleHQgdGFza1RleHQiK01lKyIgIit2ZSsiIHdpZHRoLSIra2V9KSxMZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBIdDtIdD15cigiI2kiK2EpO2NvbnN0IEl0PUh0Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0N0LmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuIFpbRnQuaWRdIT09dm9pZCAwfSkuZWFjaChmdW5jdGlvbihGdCl7dmFyIGtlPUl0LnF1ZXJ5U2VsZWN0b3IoIiMiK0Z0LmlkKSxwbj1JdC5xdWVyeVNlbGVjdG9yKCIjIitGdC5pZCsiLXRleHQiKTtjb25zdCBNZT1rZS5wYXJlbnROb2RlO3ZhciB2ZT1JdC5jcmVhdGVFbGVtZW50KCJhIik7dmUuc2V0QXR0cmlidXRlKCJ4bGluazpocmVmIixaW0Z0LmlkXSksdmUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksTWUuYXBwZW5kQ2hpbGQodmUpLHZlLmFwcGVuZENoaWxkKGtlKSx2ZS5hcHBlbmRDaGlsZChwbil9KX19ZnVuY3Rpb24gYnQod3QsWCxwdCxVLHh0LG50LE90LE50KXtpZihPdC5sZW5ndGg9PT0wJiZOdC5sZW5ndGg9PT0wKXJldHVybjtsZXQgcXQsQ3Q7Zm9yKGNvbnN0e3N0YXJ0VGltZTprZSxlbmRUaW1lOnBufW9mIG50KShxdD09PXZvaWQgMHx8a2U8cXQpJiYocXQ9a2UpLChDdD09PXZvaWQgMHx8cG4+Q3QpJiYoQ3Q9cG4pO2lmKCFxdHx8IUN0KXJldHVybjtpZihnMChDdCkuZGlmZihnMChxdCksInllYXIiKT41KXtVdC53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgWj1wLmRiLmdldERhdGVGb3JtYXQoKSxUdD1bXTtsZXQgSHQ9bnVsbCxJdD1nMChxdCk7Zm9yKDtJdC52YWx1ZU9mKCk8PUN0OylwLmRiLmlzSW52YWxpZERhdGUoSXQsWixPdCxOdCk/SHQ/SHQuZW5kPUl0Okh0PXtzdGFydDpJdCxlbmQ6SXR9Okh0JiYoVHQucHVzaChIdCksSHQ9bnVsbCksSXQ9SXQuYWRkKDEsImQiKTt6LmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoVHQpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKGtlKXtyZXR1cm4iZXhjbHVkZS0iK2tlLnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oa2Upe3JldHVybiBLKGtlLnN0YXJ0KStwdH0pLmF0dHIoInkiLHYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihrZSl7Y29uc3QgcG49a2UuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4gSyhwbiktSyhrZS5zdGFydCl9KS5hdHRyKCJoZWlnaHQiLHh0LVgtdi5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oa2UscG4pe3JldHVybihLKGtlLnN0YXJ0KStwdCsuNSooSyhrZS5lbmQpLUsoa2Uuc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisocG4qd3QrLjUqeHQpLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfWZ1bmN0aW9uIG10KHd0LFgscHQsVSl7bGV0IHh0PXd4ZShLKS50aWNrU2l6ZSgtVStYK3YuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoSFUocC5kYi5nZXRBeGlzRm9ybWF0KCl8fHYuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2NvbnN0IE90PS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhwLmRiLmdldFRpY2tJbnRlcnZhbCgpfHx2LnRpY2tJbnRlcnZhbCk7aWYoT3QhPT1udWxsKXtjb25zdCBOdD1PdFsxXSxxdD1PdFsyXSxDdD1wLmRiLmdldFdlZWtkYXkoKXx8di53ZWVrZGF5O3N3aXRjaChxdCl7Y2FzZSJtaWxsaXNlY29uZCI6eHQudGlja3MoQzF0LmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJzZWNvbmQiOnh0LnRpY2tzKFU3LmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJtaW51dGUiOnh0LnRpY2tzKGpVLmV2ZXJ5KE50KSk7YnJlYWs7Y2FzZSJob3VyIjp4dC50aWNrcygkVS5ldmVyeShOdCkpO2JyZWFrO2Nhc2UiZGF5Ijp4dC50aWNrcyhDQS5ldmVyeShOdCkpO2JyZWFrO2Nhc2Uid2VlayI6eHQudGlja3MoclJ0W0N0XS5ldmVyeShOdCkpO2JyZWFrO2Nhc2UibW9udGgiOnh0LnRpY2tzKHpVLmV2ZXJ5KE50KSk7YnJlYWt9fWlmKHouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrd3QrIiwgIisoVS01MCkrIikiKS5jYWxsKHh0KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHAuZGIudG9wQXhpc0VuYWJsZWQoKXx8di50b3BBeGlzKXtsZXQgTnQ9dnhlKEspLnRpY2tTaXplKC1VK1grdi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChIVShwLmRiLmdldEF4aXNGb3JtYXQoKXx8di5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoT3QhPT1udWxsKXtjb25zdCBxdD1PdFsxXSxDdD1PdFsyXSxaPXAuZGIuZ2V0V2Vla2RheSgpfHx2LndlZWtkYXk7c3dpdGNoKEN0KXtjYXNlIm1pbGxpc2Vjb25kIjpOdC50aWNrcyhDMXQuZXZlcnkocXQpKTticmVhaztjYXNlInNlY29uZCI6TnQudGlja3MoVTcuZXZlcnkocXQpKTticmVhaztjYXNlIm1pbnV0ZSI6TnQudGlja3MoalUuZXZlcnkocXQpKTticmVhaztjYXNlImhvdXIiOk50LnRpY2tzKCRVLmV2ZXJ5KHF0KSk7YnJlYWs7Y2FzZSJkYXkiOk50LnRpY2tzKENBLmV2ZXJ5KHF0KSk7YnJlYWs7Y2FzZSJ3ZWVrIjpOdC50aWNrcyhyUnRbWl0uZXZlcnkocXQpKTticmVhaztjYXNlIm1vbnRoIjpOdC50aWNrcyh6VS5ldmVyeShxdCkpO2JyZWFrfX16LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3d0KyIsICIrWCsiKSIpLmNhbGwoTnQpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX1mdW5jdGlvbiB5dCh3dCxYKXtsZXQgcHQ9MDtjb25zdCBVPU9iamVjdC5rZXlzKGopLm1hcCh4dD0+W3h0LGpbeHRdXSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFUpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHh0KXtjb25zdCBudD14dFswXS5zcGxpdChZci5saW5lQnJlYWtSZWdleCksT3Q9LShudC5sZW5ndGgtMSkvMixOdD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7TnQuc2V0QXR0cmlidXRlKCJkeSIsT3QrImVtIik7Zm9yKGNvbnN0W3F0LEN0XW9mIG50LmVudHJpZXMoKSl7Y29uc3QgWj1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1ouc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksWi5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLHF0PjAmJlouc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFoudGV4dENvbnRlbnQ9Q3QsTnQuYXBwZW5kQ2hpbGQoWil9cmV0dXJuIE50fSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKHh0LG50KXtpZihudD4wKWZvcihsZXQgT3Q9MDtPdDxudDtPdCsrKXJldHVybiBwdCs9VVtudC0xXVsxXSx4dFsxXSp3dC8yK3B0Knd0K1g7ZWxzZSByZXR1cm4geHRbMV0qd3QvMitYfSkuYXR0cigiZm9udC1zaXplIix2LnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHh0KXtmb3IoY29uc3RbbnQsT3Rdb2YgQi5lbnRyaWVzKCkpaWYoeHRbMF09PT1PdClyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrbnQldi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSl9ZnVuY3Rpb24gZHQod3QsWCxwdCxVKXtjb25zdCB4dD1wLmRiLmdldFRvZGF5TWFya2VyKCk7aWYoeHQ9PT0ib2ZmIilyZXR1cm47Y29uc3QgbnQ9ei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksT3Q9bmV3IERhdGUsTnQ9bnQuYXBwZW5kKCJsaW5lIik7TnQuYXR0cigieDEiLEsoT3QpK3d0KS5hdHRyKCJ4MiIsSyhPdCkrd3QpLmF0dHIoInkxIix2LnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsVS12LnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IikseHQhPT0iIiYmTnQuYXR0cigic3R5bGUiLHh0LnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBodCh3dCl7Y29uc3QgWD17fSxwdD1bXTtmb3IobGV0IFU9MCx4dD13dC5sZW5ndGg7VTx4dDsrK1UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsd3RbVV0pfHwoWFt3dFtVXV09ITAscHQucHVzaCh3dFtVXSkpO3JldHVybiBwdH19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke2kuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke2kuc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7aS5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7aS5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogICAgdGV4dCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogICAgfQogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KCiAgLy8gLnRhc2tUZXh0Om5vdChbZm9udC1zaXplXSkgewogIC8vICAgZm9udC1zaXplOiAke2kuZ2FudHRGb250U2l6ZX07CiAgLy8gfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKCiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICAgIC8vIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogIH0KCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQogIC50YXNrVGV4dC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke2kudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHtpLnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke2kuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7aS5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn0gICAgOwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBRMHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihtLGIsRSxfKXtmb3IoRT1FfHx7fSxfPW0ubGVuZ3RoO18tLTtFW21bX11dPWIpO3JldHVybiBFfSxhPVs2LDksMTBdLGY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYixFLF8sTCxOLEIsail7c3dpdGNoKEIubGVuZ3RoLTEsTil7Y2FzZSAxOnJldHVybiBMO2Nhc2UgNDpicmVhaztjYXNlIDY6TC5zZXRJbmZvKCEwKTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODo2LDk6WzEsN10sMTA6WzEsOF19LHsxOlsyLDFdfSxpKGEsWzIsM10pLGkoYSxbMiw0XSksaShhLFsyLDVdKSxpKGEsWzIsNl0pXSxkZWZhdWx0QWN0aW9uczp7NDpbMiwxXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiLEUpe2lmKEUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiKTtlbHNle3ZhciBfPW5ldyBFcnJvcihiKTt0aHJvdyBfLmhhc2g9RSxffX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIEU9dGhpcyxfPVswXSxMPVtdLE49W251bGxdLEI9W10saj10aGlzLnRhYmxlLFI9IiIsej0wLEs9MCxpdD0yLHN0PTEsdXQ9Qi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxidD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLG10PXt5eTp7fX07Zm9yKHZhciB5dCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHl0KSYmKG10Lnl5W3l0XT10aGlzLnl5W3l0XSk7YnQuc2V0SW5wdXQoYixtdC55eSksbXQueXkubGV4ZXI9YnQsbXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIGJ0Lnl5bGxvYz4idSImJihidC55eWxsb2M9e30pO3ZhciBkdD1idC55eWxsb2M7Qi5wdXNoKGR0KTt2YXIgaHQ9YnQub3B0aW9ucyYmYnQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG10Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW10Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHd0KCl7dmFyIFR0O3JldHVybiBUdD1MLnBvcCgpfHxidC5sZXgoKXx8c3QsdHlwZW9mIFR0IT0ibnVtYmVyIiYmKFR0IGluc3RhbmNlb2YgQXJyYXkmJihMPVR0LFR0PUwucG9wKCkpLFR0PUUuc3ltYm9sc19bVHRdfHxUdCksVHR9Zm9yKHZhciBYLHB0LFUseHQsbnQ9e30sT3QsTnQscXQsQ3Q7Oyl7aWYocHQ9X1tfLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3B0XT9VPXRoaXMuZGVmYXVsdEFjdGlvbnNbcHRdOigoWD09PW51bGx8fHR5cGVvZiBYPiJ1IikmJihYPXd0KCkpLFU9altwdF0mJmpbcHRdW1hdKSx0eXBlb2YgVT4idSJ8fCFVLmxlbmd0aHx8IVVbMF0pe3ZhciBaPSIiO0N0PVtdO2ZvcihPdCBpbiBqW3B0XSl0aGlzLnRlcm1pbmFsc19bT3RdJiZPdD5pdCYmQ3QucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW090XSsiJyIpO2J0LnNob3dQb3NpdGlvbj9aPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHorMSkrYDoKYCtidC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWF18fFgpKyInIjpaPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHorMSkrIjogVW5leHBlY3RlZCAiKyhYPT1zdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoWix7dGV4dDpidC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWF18fFgsbGluZTpidC55eWxpbmVubyxsb2M6ZHQsZXhwZWN0ZWQ6Q3R9KX1pZihVWzBdaW5zdGFuY2VvZiBBcnJheSYmVS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3B0KyIsIHRva2VuOiAiK1gpO3N3aXRjaChVWzBdKXtjYXNlIDE6Xy5wdXNoKFgpLE4ucHVzaChidC55eXRleHQpLEIucHVzaChidC55eWxsb2MpLF8ucHVzaChVWzFdKSxYPW51bGwsSz1idC55eWxlbmcsUj1idC55eXRleHQsej1idC55eWxpbmVubyxkdD1idC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKE50PXRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzFdLG50LiQ9TltOLmxlbmd0aC1OdF0sbnQuXyQ9e2ZpcnN0X2xpbmU6QltCLmxlbmd0aC0oTnR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpCW0IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QltCLmxlbmd0aC0oTnR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QltCLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0saHQmJihudC5fJC5yYW5nZT1bQltCLmxlbmd0aC0oTnR8fDEpXS5yYW5nZVswXSxCW0IubGVuZ3RoLTFdLnJhbmdlWzFdXSkseHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG50LFtSLEsseixtdC55eSxVWzFdLE4sQl0uY29uY2F0KHV0KSksdHlwZW9mIHh0PCJ1IilyZXR1cm4geHQ7TnQmJihfPV8uc2xpY2UoMCwtMSpOdCoyKSxOPU4uc2xpY2UoMCwtMSpOdCksQj1CLnNsaWNlKDAsLTEqTnQpKSxfLnB1c2godGhpcy5wcm9kdWN0aW9uc19bVVsxXV1bMF0pLE4ucHVzaChudC4kKSxCLnB1c2gobnQuXyQpLHF0PWpbX1tfLmxlbmd0aC0yXV1bX1tfLmxlbmd0aC0xXV0sXy5wdXNoKHF0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scD1mdW5jdGlvbigpe3ZhciBtPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEUsXyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFLF8pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEUpfSxzZXRJbnB1dDpmdW5jdGlvbihiLEUpe3JldHVybiB0aGlzLnl5PUV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWIsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPWIsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWIsdGhpcy5tYXRjaGVkKz1iO3ZhciBFPWIubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBFPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxifSx1bnB1dDpmdW5jdGlvbihiKXt2YXIgRT1iLmxlbmd0aCxfPWIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1iK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgTD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxfLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Xy5sZW5ndGgtMSk7dmFyIE49dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOl8/KF8ubGVuZ3RoPT09TC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0xbTC5sZW5ndGgtXy5sZW5ndGhdLmxlbmd0aC1fWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtOWzBdLE5bMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKGIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShiKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oYi5sZW5ndGg+MjA/Ii4uLiI6IiIpK2Iuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoO3JldHVybiBiLmxlbmd0aDwyMCYmKGIrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWIubGVuZ3RoKSksKGIuc3Vic3RyKDAsMjApKyhiLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBhc3RJbnB1dCgpLEU9bmV3IEFycmF5KGIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gYit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYixFKXt2YXIgXyxMLE47aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKE49e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxMPWJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEwmJih0aGlzLnl5bGluZW5vKz1MLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkw/TFtMLmxlbmd0aC0xXS5sZW5ndGgtTFtMLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9YlswXSx0aGlzLm1hdGNoKz1iWzBdLHRoaXMubWF0Y2hlcz1iLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWJbMF0sXz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLF8pcmV0dXJuIF87aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEIgaW4gTil0aGlzW0JdPU5bQl07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgYixFLF8sTDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBOPXRoaXMuX2N1cnJlbnRSdWxlcygpLEI9MDtCPE4ubGVuZ3RoO0IrKylpZihfPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbTltCXV0pLF8mJighRXx8X1swXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPV8sTD1CLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGI9dGhpcy50ZXN0X21hdGNoKF8sTltCXSksYiE9PSExKXJldHVybiBiO2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyhiPXRoaXMudGVzdF9tYXRjaChFLE5bTF0pLGIhPT0hMT9iOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLm5leHQoKTtyZXR1cm4gRXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oRSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihFKXt0aGlzLmJlZ2luKEUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEUsXyxMLE4pe3N3aXRjaChMKXtjYXNlIDA6cmV0dXJuIDQ7Y2FzZSAxOnJldHVybiA5O2Nhc2UgMjpyZXR1cm4ic3BhY2UiO2Nhc2UgMzpyZXR1cm4gMTA7Y2FzZSA0OnJldHVybiA2O2Nhc2UgNTpyZXR1cm4iVFhUIn19LHJ1bGVzOlsvXig/OmluZm9cYikvaSwvXig/Oltcc1xuXHJdKykvaSwvXig/Oltcc10rKS9pLC9eKD86c2hvd0luZm9cYikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gbX0oKTtmLmxleGVyPXA7ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHYucHJvdG90eXBlPWYsZi5QYXJzZXI9dixuZXcgdn0oKTtRMHQucGFyc2VyPVEwdDtjb25zdCB4cWU9UTB0LGlSdD17aW5mbzohMX07bGV0IFowdD1pUnQuaW5mbztjb25zdCBrcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp4cWUsZGI6e2NsZWFyOigpPT57WjB0PWlSdC5pbmZvfSxzZXRJbmZvOmk9PntaMHQ9aX0sZ2V0SW5mbzooKT0+WjB0fSxyZW5kZXJlcjp7ZHJhdzooaSxhLGYpPT57VXQuZGVidWcoYHJlbmRlcmluZyBpbmZvIGRpYWdyYW0KYCtpKTtjb25zdCBwPWZkdChhKTtvZyhwLDEwMCw0MDAsITApLHAuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7Zn1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgSjB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYnQsbXQseXQsZHQpe2Zvcih5dD15dHx8e30sZHQ9YnQubGVuZ3RoO2R0LS07eXRbYnRbZHRdXT1tdCk7cmV0dXJuIHl0fSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0sRT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxfPVsyMCwyMSwyMl0sTD1bMiw3XSxOPVsxLDEyXSxCPVsxLDEzXSxqPVsxLDE0XSxSPVsxLDE1XSx6PVsxLDE2XSxLPVsxLDE3XSxpdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG10LHl0LGR0LGh0LHd0LFgscHQpe3ZhciBVPVgubGVuZ3RoLTE7c3dpdGNoKHd0KXtjYXNlIDM6aHQuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtVLTFdO2JyZWFrO2Nhc2UgODpodC5hZGRTZWN0aW9uKFhbVS0xXSxodC5jbGVhbnVwVmFsdWUoWFtVXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtVXS50cmltKCksaHQuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtVXS50cmltKCksaHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbVV0udHJpbSgpLGh0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzpodC5hZGRTZWN0aW9uKFhbVV0uc3Vic3RyKDgpKSx0aGlzLiQ9WFtVXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDIwOmYsMjE6cCwyMjp2fSx7MTpbM119LHszOjcsNDoyLDU6YSwyMDpmLDIxOnAsMjI6dn0saShtLGIsezY6OCw3OlsxLDldfSksaShFLFsyLDE0XSksaShFLFsyLDE1XSksaShFLFsyLDE2XSksezE6WzIsMV19LGkoXyxMLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpOLDEyOkIsMTQ6aiwxNjpSLDE4OnosMTk6S30pLGkobSxiLHs2OjE4fSksaShtLFsyLDVdKSx7NDoxOSwyMDpmLDIxOnAsMjI6dn0sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShfLFsyLDEyXSksaShfLFsyLDEzXSksaShfLEwsezg6MTAsOToxMSwxOlsyLDNdLDEwOk4sMTI6QiwxNDpqLDE2OlIsMTg6eiwxOTpLfSksaShtLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiw5XSksaShfLFsyLDEwXSksaShfLFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG10LHl0KXtpZih5dC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG10KTtlbHNle3ZhciBkdD1uZXcgRXJyb3IobXQpO3Rocm93IGR0Lmhhc2g9eXQsZHR9fSxwYXJzZTpmdW5jdGlvbihtdCl7dmFyIHl0PXRoaXMsZHQ9WzBdLGh0PVtdLHd0PVtudWxsXSxYPVtdLHB0PXRoaXMudGFibGUsVT0iIix4dD0wLG50PTAsT3Q9MixOdD0xLHF0PVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ3Q9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxaPXt5eTp7fX07Zm9yKHZhciBUdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFR0KSYmKFoueXlbVHRdPXRoaXMueXlbVHRdKTtDdC5zZXRJbnB1dChtdCxaLnl5KSxaLnl5LmxleGVyPUN0LFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEN0Lnl5bGxvYz4idSImJihDdC55eWxsb2M9e30pO3ZhciBIdD1DdC55eWxsb2M7WC5wdXNoKEh0KTt2YXIgSXQ9Q3Qub3B0aW9ucyYmQ3Qub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBGdCgpe3ZhciBpZTtyZXR1cm4gaWU9aHQucG9wKCl8fEN0LmxleCgpfHxOdCx0eXBlb2YgaWUhPSJudW1iZXIiJiYoaWUgaW5zdGFuY2VvZiBBcnJheSYmKGh0PWllLGllPWh0LnBvcCgpKSxpZT15dC5zeW1ib2xzX1tpZV18fGllKSxpZX1mb3IodmFyIGtlLHBuLE1lLHZlLEdlPXt9LEtlLHdlLF9lLCR0Ozspe2lmKHBuPWR0W2R0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3BuXT9NZT10aGlzLmRlZmF1bHRBY3Rpb25zW3BuXTooKGtlPT09bnVsbHx8dHlwZW9mIGtlPiJ1IikmJihrZT1GdCgpKSxNZT1wdFtwbl0mJnB0W3BuXVtrZV0pLHR5cGVvZiBNZT4idSJ8fCFNZS5sZW5ndGh8fCFNZVswXSl7dmFyIHJlPSIiOyR0PVtdO2ZvcihLZSBpbiBwdFtwbl0pdGhpcy50ZXJtaW5hbHNfW0tlXSYmS2U+T3QmJiR0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tLZV0rIiciKTtDdC5zaG93UG9zaXRpb24/cmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeHQrMSkrYDoKYCtDdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgKyR0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19ba2VdfHxrZSkrIiciOnJlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoa2U9PU50PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2tlXXx8a2UpKyInIiksdGhpcy5wYXJzZUVycm9yKHJlLHt0ZXh0OkN0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1trZV18fGtlLGxpbmU6Q3QueXlsaW5lbm8sbG9jOkh0LGV4cGVjdGVkOiR0fSl9aWYoTWVbMF1pbnN0YW5jZW9mIEFycmF5JiZNZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3BuKyIsIHRva2VuOiAiK2tlKTtzd2l0Y2goTWVbMF0pe2Nhc2UgMTpkdC5wdXNoKGtlKSx3dC5wdXNoKEN0Lnl5dGV4dCksWC5wdXNoKEN0Lnl5bGxvYyksZHQucHVzaChNZVsxXSksa2U9bnVsbCxudD1DdC55eWxlbmcsVT1DdC55eXRleHQseHQ9Q3QueXlsaW5lbm8sSHQ9Q3QueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih3ZT10aGlzLnByb2R1Y3Rpb25zX1tNZVsxXV1bMV0sR2UuJD13dFt3dC5sZW5ndGgtd2VdLEdlLl8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKHdlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKHdlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEl0JiYoR2UuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKHdlfHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShHZSxbVSxudCx4dCxaLnl5LE1lWzFdLHd0LFhdLmNvbmNhdChxdCkpLHR5cGVvZiB2ZTwidSIpcmV0dXJuIHZlO3dlJiYoZHQ9ZHQuc2xpY2UoMCwtMSp3ZSoyKSx3dD13dC5zbGljZSgwLC0xKndlKSxYPVguc2xpY2UoMCwtMSp3ZSkpLGR0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bTWVbMV1dWzBdKSx3dC5wdXNoKEdlLiQpLFgucHVzaChHZS5fJCksX2U9cHRbZHRbZHQubGVuZ3RoLTJdXVtkdFtkdC5sZW5ndGgtMV1dLGR0LnB1c2goX2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxzdD1mdW5jdGlvbigpe3ZhciBidD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5dCxkdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5dCxkdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeXQpfSxzZXRJbnB1dDpmdW5jdGlvbihtdCx5dCl7cmV0dXJuIHRoaXMueXk9eXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBtdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW10LHRoaXMubWF0Y2hlZCs9bXQ7dmFyIHl0PW10Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG10fSx1bnB1dDpmdW5jdGlvbihtdCl7dmFyIHl0PW10Lmxlbmd0aCxkdD1tdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15dCksdGhpcy5vZmZzZXQtPXl0O3ZhciBodD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxkdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWR0Lmxlbmd0aC0xKTt2YXIgd3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmR0PyhkdC5sZW5ndGg9PT1odC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2h0W2h0Lmxlbmd0aC1kdC5sZW5ndGhdLmxlbmd0aC1kdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3d0WzBdLHd0WzBdK3RoaXMueXlsZW5nLXl0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24obXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShtdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK210LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMubWF0Y2g7cmV0dXJuIG10Lmxlbmd0aDwyMCYmKG10Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1tdC5sZW5ndGgpKSwobXQuc3Vic3RyKDAsMjApKyhtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMucGFzdElucHV0KCkseXQ9bmV3IEFycmF5KG10Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG10K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24obXQseXQpe3ZhciBkdCxodCx3dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYod3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYod3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaHQ9bXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGh0JiYodGhpcy55eWxpbmVubys9aHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46aHQ/aHRbaHQubGVuZ3RoLTFdLmxlbmd0aC1odFtodC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1tdFswXSx0aGlzLm1hdGNoKz1tdFswXSx0aGlzLm1hdGNoZXM9bXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UobXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW10WzBdLGR0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHl0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGR0KXJldHVybiBkdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiB3dCl0aGlzW1hdPXd0W1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG10LHl0LGR0LGh0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHd0PXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPHd0Lmxlbmd0aDtYKyspaWYoZHQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t3dFtYXV0pLGR0JiYoIXl0fHxkdFswXS5sZW5ndGg+eXRbMF0ubGVuZ3RoKSl7aWYoeXQ9ZHQsaHQ9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtdD10aGlzLnRlc3RfbWF0Y2goZHQsd3RbWF0pLG10IT09ITEpcmV0dXJuIG10O2lmKHRoaXMuX2JhY2t0cmFjayl7eXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geXQ/KG10PXRoaXMudGVzdF9tYXRjaCh5dCx3dFtodF0pLG10IT09ITE/bXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm5leHQoKTtyZXR1cm4geXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5dHx8MCkseXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeXQpe3RoaXMuYmVnaW4oeXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGR0LGh0LHd0KXtzd2l0Y2goaHQpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAyMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTQ7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNjtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiJ0eHQiO2Nhc2UgMTc6cmV0dXJuIDU7Y2FzZSAxODpyZXR1cm4gNztjYXNlIDE5OnJldHVybiJ2YWx1ZSI7Y2FzZSAyMDpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDcsOSwxMSwxNCwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBidH0oKTtpdC5sZXhlcj1zdDtmdW5jdGlvbiB1dCgpe3RoaXMueXk9e319cmV0dXJuIHV0LnByb3RvdHlwZT1pdCxpdC5QYXJzZXI9dXQsbmV3IHV0fSgpO0owdC5wYXJzZXI9SjB0O2NvbnN0IEVxZT1KMHQsc1J0PUxmLnBpZSxDSz17c2VjdGlvbnM6e30sc2hvd0RhdGE6ITEsY29uZmlnOnNSdH07bGV0IF9LPUNLLnNlY3Rpb25zLHRndD1DSy5zaG93RGF0YTtjb25zdCBUcWU9c3RydWN0dXJlZENsb25lKHNSdCksQ3FlPXtnZXRDb25maWc6KCk9PnN0cnVjdHVyZWRDbG9uZShUcWUpLGNsZWFyOigpPT57X0s9c3RydWN0dXJlZENsb25lKENLLnNlY3Rpb25zKSx0Z3Q9Q0suc2hvd0RhdGEsYXAoKX0sc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYixzZXRBY2NUaXRsZTpjZyxnZXRBY2NUaXRsZTpvcCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxnZXRBY2NEZXNjcmlwdGlvbjp1cCxhZGRTZWN0aW9uOihpLGEpPT57aT1EZChpLExlKCkpLF9LW2ldPT09dm9pZCAwJiYoX0tbaV09YSxVdC5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7aX0sIHdpdGggdmFsdWU6ICR7YX1gKSl9LGdldFNlY3Rpb25zOigpPT5fSyxjbGVhbnVwVmFsdWU6aT0+KGkuc3Vic3RyaW5nKDAsMSk9PT0iOiImJihpPWkuc3Vic3RyaW5nKDEpLnRyaW0oKSksTnVtYmVyKGkudHJpbSgpKSksc2V0U2hvd0RhdGE6aT0+e3RndD1pfSxnZXRTaG93RGF0YTooKT0+dGd0fSxfcWU9aT0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke2kucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7aS5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke2kucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHtpLnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHtpLnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7aS5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke2kucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7aS5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLFNxZT1pPT57Y29uc3QgYT1PYmplY3QuZW50cmllcyhpKS5tYXAocD0+KHtsYWJlbDpwWzBdLHZhbHVlOnBbMV19KSkuc29ydCgocCx2KT0+di52YWx1ZS1wLnZhbHVlKTtyZXR1cm4gJDdlKCkudmFsdWUocD0+cC52YWx1ZSkoYSl9LEFxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkVxZSxkYjpDcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHB0LFU7VXQuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCtpKTtjb25zdCB2PXAuZGIsbT1MZSgpLGI9aWR0KHYuZ2V0Q29uZmlnKCksbS5waWUpLEU9NDUwLF89KChVPShwdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk9PW51bGw/dm9pZCAwOnB0LnBhcmVudEVsZW1lbnQpPT1udWxsP3ZvaWQgMDpVLm9mZnNldFdpZHRoKT8/Yi51c2VXaWR0aCxMPWZkdChhKTtMLmF0dHIoInZpZXdCb3giLGAwIDAgJHtffSAke0V9YCksb2coTCxFLF8sYi51c2VNYXhXaWR0aCk7Y29uc3QgTj00MCxCPTE4LGo9NCxSPUwuYXBwZW5kKCJnIik7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfLzIrIiwiK0UvMisiKSIpO2NvbnN0e3RoZW1lVmFyaWFibGVzOnp9PW07bGV0W0tdPSRBKHoucGllT3V0ZXJTdHJva2VXaWR0aCk7Sz8/KEs9Mik7Y29uc3QgaXQ9Yi50ZXh0UG9zaXRpb24sc3Q9TWF0aC5taW4oXyxFKS8yLU4sdXQ9TEEoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyhzdCksYnQ9TEEoKS5pbm5lclJhZGl1cyhzdCppdCkub3V0ZXJSYWRpdXMoc3QqaXQpO1IuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLmF0dHIoInIiLHN0K0svMikuYXR0cigiY2xhc3MiLCJwaWVPdXRlckNpcmNsZSIpO2NvbnN0IG10PXYuZ2V0U2VjdGlvbnMoKSx5dD1TcWUobXQpLGR0PVt6LnBpZTEsei5waWUyLHoucGllMyx6LnBpZTQsei5waWU1LHoucGllNix6LnBpZTcsei5waWU4LHoucGllOSx6LnBpZTEwLHoucGllMTEsei5waWUxMl0saHQ9eDF0KGR0KTtSLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHl0KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHV0KS5hdHRyKCJmaWxsIix4dD0+aHQoeHQuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IHd0PTA7T2JqZWN0LmtleXMobXQpLmZvckVhY2goeHQ9Pnt3dCs9bXRbeHRdfSksUi5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh5dCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KHh0PT4oeHQuZGF0YS52YWx1ZS93dCoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLHh0PT4idHJhbnNsYXRlKCIrYnQuY2VudHJvaWQoeHQpKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLFIuYXBwZW5kKCJ0ZXh0IikudGV4dCh2LmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKEUtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7Y29uc3QgWD1SLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoaHQuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCh4dCxudCk9Pntjb25zdCBPdD1CK2osTnQ9T3QqaHQuZG9tYWluKCkubGVuZ3RoLzIscXQ9MTIqQixDdD1udCpPdC1OdDtyZXR1cm4idHJhbnNsYXRlKCIrcXQrIiwiK0N0KyIpIn0pO1guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsQikuc3R5bGUoImZpbGwiLGh0KS5zdHlsZSgic3Ryb2tlIixodCksWC5kYXRhKHl0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixCK2opLmF0dHIoInkiLEItaikudGV4dCh4dD0+e2NvbnN0e2xhYmVsOm50LHZhbHVlOk90fT14dC5kYXRhO3JldHVybiB2LmdldFNob3dEYXRhKCk/YCR7bnR9IFske090fV1gOm50fSl9fSxzdHlsZXM6X3FlfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oTWUsdmUsR2UsS2Upe2ZvcihHZT1HZXx8e30sS2U9TWUubGVuZ3RoO0tlLS07R2VbTWVbS2VdXT12ZSk7cmV0dXJuIEdlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxFPVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sXz1bMzIsMzMsMzRdLEw9WzIsN10sTj1bMSwxM10sQj1bMSwxN10saj1bMSwxOF0sUj1bMSwxOV0sej1bMSwyMF0sSz1bMSwyMV0saXQ9WzEsMjJdLHN0PVsxLDIzXSx1dD1bMSwyNF0sYnQ9WzEsMjVdLG10PVsxLDI2XSx5dD1bMSwyN10sZHQ9WzEsMzBdLGh0PVsxLDMxXSx3dD1bMSwzMl0sWD1bMSwzM10scHQ9WzEsMzRdLFU9WzEsMzVdLHh0PVsxLDM2XSxudD1bMSwzN10sT3Q9WzEsMzhdLE50PVsxLDM5XSxxdD1bMSw0MF0sQ3Q9WzEsNDFdLFo9WzEsNDJdLFR0PVsxLDU3XSxIdD1bMSw1OF0sSXQ9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHZlLEdlLEtlLHdlLF9lLCR0LHJlKXt2YXIgaWU9JHQubGVuZ3RoLTE7c3dpdGNoKF9lKXtjYXNlIDEyOnRoaXMuJD0kdFtpZV0udHJpbSgpLHdlLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2OndlLmFkZFNlY3Rpb24oJHRbaWVdLnN1YnN0cig4KSksdGhpcy4kPSR0W2llXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzp3ZS5hZGRQb2ludCgkdFtpZS0zXSwkdFtpZS0xXSwkdFtpZV0pO2JyZWFrO2Nhc2UgMTg6d2Uuc2V0WEF4aXNMZWZ0VGV4dCgkdFtpZS0yXSksd2Uuc2V0WEF4aXNSaWdodFRleHQoJHRbaWVdKTticmVhaztjYXNlIDE5OiR0W2llLTFdLnRleHQrPSIg4p+2ICIsd2Uuc2V0WEF4aXNMZWZ0VGV4dCgkdFtpZS0xXSk7YnJlYWs7Y2FzZSAyMDp3ZS5zZXRYQXhpc0xlZnRUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyMTp3ZS5zZXRZQXhpc0JvdHRvbVRleHQoJHRbaWUtMl0pLHdlLnNldFlBeGlzVG9wVGV4dCgkdFtpZV0pO2JyZWFrO2Nhc2UgMjI6JHRbaWUtMV0udGV4dCs9IiDin7YgIix3ZS5zZXRZQXhpc0JvdHRvbVRleHQoJHRbaWUtMV0pO2JyZWFrO2Nhc2UgMjM6d2Uuc2V0WUF4aXNCb3R0b21UZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNDp3ZS5zZXRRdWFkcmFudDFUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNTp3ZS5zZXRRdWFkcmFudDJUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNjp3ZS5zZXRRdWFkcmFudDNUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAyNzp3ZS5zZXRRdWFkcmFudDRUZXh0KCR0W2llXSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6JHRbaWVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDokdFtpZS0xXS50ZXh0KyIiKyR0W2llXSx0eXBlOiR0W2llLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0OiR0W2llXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6JHRbaWVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9JHRbaWVdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPSR0W2llLTFdKyIiKyR0W2llXTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OmEsNjpmLDMyOnAsMzM6diwzNDptfSx7MTpbM119LHszOjgsNDoyLDU6YSw2OmYsMzI6cCwzMzp2LDM0Om19LHszOjksNDoyLDU6YSw2OmYsMzI6cCwzMzp2LDM0Om19LGkoYixbMiw0XSx7NzoxMH0pLGkoRSxbMiwyOF0pLGkoRSxbMiwyOV0pLGkoRSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShfLEwsezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6TiwxMzpCLDE1OmosMTc6UiwxOTp6LDIwOkssMjU6aXQsMjc6c3QsMjg6dXQsMjk6YnQsMzA6bXQsMzE6eXQsMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOnAsMzM6diwzNDptfSxpKF8sTCx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1Ok4sMTM6QiwxNTpqLDE3OlIsMTk6eiwyMDpLLDI1Oml0LDI3OnN0LDI4OnV0LDI5OmJ0LDMwOm10LDMxOnl0LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSksaShfLFsyLDldKSxpKF8sWzIsMTBdKSxpKF8sWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKF8sWzIsMTVdKSxpKF8sWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9LHsyMTo0OSwzNToyOSwzNzpkdCwzODpodCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wn0sezIxOjUwLDM1OjI5LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSx7MjE6NTEsMzU6MjksMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9LHsyMTo1MiwzNToyOSwzNzpkdCwzODpodCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wn0sezIxOjUzLDM1OjI5LDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSx7NTpUdCwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9LGkoSXQsWzIsMzFdKSxpKEl0LFsyLDMzXSksaShJdCxbMiwzNF0pLGkoSXQsWzIsMzddKSxpKEl0LFsyLDM4XSksaShJdCxbMiwzOV0pLGkoSXQsWzIsNDBdKSxpKEl0LFsyLDQxXSksaShJdCxbMiw0Ml0pLGkoSXQsWzIsNDNdKSxpKEl0LFsyLDQ0XSksaShJdCxbMiw0NV0pLGkoSXQsWzIsNDZdKSxpKEl0LFsyLDQ3XSksaShiLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiwxMl0pLGkoXyxbMiwxM10pLGkoXyxbMiwxNF0pLGkoXyxbMiwyMF0sezM2OjU1LDM1OjU2LDU6VHQsMjY6WzEsNTldLDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpUdCwyNjpbMSw2MF0sNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9KSxpKF8sWzIsMjRdLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpUdCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wiw1MTpIdH0pLGkoXyxbMiwyNl0sezM2OjU1LDM1OjU2LDU6VHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlosNTE6SHR9KSxpKF8sWzIsMjddLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksezIzOlsxLDYxXX0saShJdCxbMiwzMl0pLGkoSXQsWzIsNDhdKSxpKEl0LFsyLDQ5XSksaShJdCxbMiw1MF0pLGkoXyxbMiwxOV0sezM1OjI5LDIxOjYyLDM3OmR0LDM4Omh0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpafSksaShfLFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6ZHQsMzg6aHQsNDA6d3QsNDE6WCw0MjpwdCw0MzpVLDQ0Onh0LDQ1Om50LDQ2Ok90LDQ3Ok50LDQ4OnF0LDQ5OkN0LDUwOlp9KSx7MjQ6WzEsNjRdfSxpKF8sWzIsMThdLHszNjo1NSwzNTo1Niw1OlR0LDQwOnd0LDQxOlgsNDI6cHQsNDM6VSw0NDp4dCw0NTpudCw0NjpPdCw0NzpOdCw0ODpxdCw0OTpDdCw1MDpaLDUxOkh0fSksaShfLFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpUdCw0MDp3dCw0MTpYLDQyOnB0LDQzOlUsNDQ6eHQsNDU6bnQsNDY6T3QsNDc6TnQsNDg6cXQsNDk6Q3QsNTA6Wiw1MTpIdH0pLGkoXyxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHZlLEdlKXtpZihHZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHZlKTtlbHNle3ZhciBLZT1uZXcgRXJyb3IodmUpO3Rocm93IEtlLmhhc2g9R2UsS2V9fSxwYXJzZTpmdW5jdGlvbih2ZSl7dmFyIEdlPXRoaXMsS2U9WzBdLHdlPVtdLF9lPVtudWxsXSwkdD1bXSxyZT10aGlzLnRhYmxlLGllPSIiLE9lPTAsb2U9MCxOZT0yLG1lPTEsY249JHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5YT17eXk6e319O2Zvcih2YXIgZGEgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkYSkmJih5YS55eVtkYV09dGhpcy55eVtkYV0pO2xpLnNldElucHV0KHZlLHlhLnl5KSx5YS55eS5sZXhlcj1saSx5YS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGkueXlsbG9jPiJ1IiYmKGxpLnl5bGxvYz17fSk7dmFyIE9vPWxpLnl5bGxvYzskdC5wdXNoKE9vKTt2YXIgZHM9bGkub3B0aW9ucyYmbGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHlhLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXlhLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIERyKCl7dmFyIEdzO3JldHVybiBHcz13ZS5wb3AoKXx8bGkubGV4KCl8fG1lLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYod2U9R3MsR3M9d2UucG9wKCkpLEdzPUdlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgbnIsZGksRWUsWW4sSGU9e30sVGksZ24sa3MscWE7Oyl7aWYoZGk9S2VbS2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigobnI9PT1udWxsfHx0eXBlb2YgbnI+InUiKSYmKG5yPURyKCkpLEVlPXJlW2RpXSYmcmVbZGldW25yXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTGE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5OZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO2xpLnNob3dQb3NpdGlvbj9MYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPZSsxKStgOgpgK2xpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tucl18fG5yKSsiJyI6TGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT2UrMSkrIjogVW5leHBlY3RlZCAiKyhucj09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbnJdfHxucikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTGEse3RleHQ6bGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW25yXXx8bnIsbGluZTpsaS55eWxpbmVubyxsb2M6T28sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrbnIpO3N3aXRjaChFZVswXSl7Y2FzZSAxOktlLnB1c2gobnIpLF9lLnB1c2gobGkueXl0ZXh0KSwkdC5wdXNoKGxpLnl5bGxvYyksS2UucHVzaChFZVsxXSksbnI9bnVsbCxvZT1saS55eWxlbmcsaWU9bGkueXl0ZXh0LE9lPWxpLnl5bGluZW5vLE9vPWxpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoZ249dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9X2VbX2UubGVuZ3RoLWduXSxIZS5fJD17Zmlyc3RfbGluZTokdFskdC5sZW5ndGgtKGdufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6JHRbJHQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JHRbJHQubGVuZ3RoLShnbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjokdFskdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRzJiYoSGUuXyQucmFuZ2U9WyR0WyR0Lmxlbmd0aC0oZ258fDEpXS5yYW5nZVswXSwkdFskdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxZbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW2llLG9lLE9lLHlhLnl5LEVlWzFdLF9lLCR0XS5jb25jYXQoY24pKSx0eXBlb2YgWW48InUiKXJldHVybiBZbjtnbiYmKEtlPUtlLnNsaWNlKDAsLTEqZ24qMiksX2U9X2Uuc2xpY2UoMCwtMSpnbiksJHQ9JHQuc2xpY2UoMCwtMSpnbikpLEtlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxfZS5wdXNoKEhlLiQpLCR0LnB1c2goSGUuXyQpLGtzPXJlW0tlW0tlLmxlbmd0aC0yXV1bS2VbS2UubGVuZ3RoLTFdXSxLZS5wdXNoKGtzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sa2U9ZnVuY3Rpb24oKXt2YXIgTWU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR2UsS2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR2UsS2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEdlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odmUsR2Upe3JldHVybiB0aGlzLnl5PUdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD12ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXZlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz12ZSx0aGlzLm1hdGNoZWQrPXZlO3ZhciBHZT12ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx2ZX0sdW5wdXQ6ZnVuY3Rpb24odmUpe3ZhciBHZT12ZS5sZW5ndGgsS2U9dmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD12ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR2UpLHRoaXMub2Zmc2V0LT1HZTt2YXIgd2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksS2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1LZS5sZW5ndGgtMSk7dmFyIF9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT8oS2UubGVuZ3RoPT09d2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt3ZVt3ZS5sZW5ndGgtS2UubGVuZ3RoXS5sZW5ndGgtS2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtfZVswXSxfZVswXSt0aGlzLnl5bGVuZy1HZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odmUubGVuZ3RoPjIwPyIuLi4iOiIiKSt2ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLm1hdGNoO3JldHVybiB2ZS5sZW5ndGg8MjAmJih2ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdmUubGVuZ3RoKSksKHZlLnN1YnN0cigwLDIwKSsodmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLnBhc3RJbnB1dCgpLEdlPW5ldyBBcnJheSh2ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB2ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHZlLEdlKXt2YXIgS2Usd2UsX2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKF9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKF9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHdlPXZlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3ZSYmKHRoaXMueXlsaW5lbm8rPXdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOndlP3dlW3dlLmxlbmd0aC0xXS5sZW5ndGgtd2Vbd2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dmVbMF0sdGhpcy5tYXRjaCs9dmVbMF0sdGhpcy5tYXRjaGVzPXZlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHZlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz12ZVswXSxLZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLZSlyZXR1cm4gS2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyICR0IGluIF9lKXRoaXNbJHRdPV9lWyR0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB2ZSxHZSxLZSx3ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSwkdD0wOyR0PF9lLmxlbmd0aDskdCsrKWlmKEtlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbJHRdXSksS2UmJighR2V8fEtlWzBdLmxlbmd0aD5HZVswXS5sZW5ndGgpKXtpZihHZT1LZSx3ZT0kdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih2ZT10aGlzLnRlc3RfbWF0Y2goS2UsX2VbJHRdKSx2ZSE9PSExKXJldHVybiB2ZTtpZih0aGlzLl9iYWNrdHJhY2spe0dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEdlPyh2ZT10aGlzLnRlc3RfbWF0Y2goR2UsX2Vbd2VdKSx2ZSE9PSExP3ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5uZXh0KCk7cmV0dXJuIEdlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEdlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHZSl7cmV0dXJuIEdlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR2V8fDApLEdlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEdlKXt0aGlzLmJlZ2luKEdlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHZSxLZSx3ZSxfZSl7c3dpdGNoKHdlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE1lfSgpO0Z0LmxleGVyPWtlO2Z1bmN0aW9uIHBuKCl7dGhpcy55eT17fX1yZXR1cm4gcG4ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1wbixuZXcgcG59KCk7ZWd0LnBhcnNlcj1lZ3Q7Y29uc3QgTHFlPWVndCxmZz1uRHQoKTtjbGFzcyBNcWV7Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIGEsZixwLHYsbSxiLEUsXyxMLE4sQixqLFIseixLLGl0LHN0LHV0O3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKGE9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOmEuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigoZj1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Zi5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChwPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KCh2PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KChtPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKEU9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKF89TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOl8ueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoTD1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6TC55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChOPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpOLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChCPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpCLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChqPUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKFI9TGYucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlIucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KCh6PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoSz1MZi5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Sy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGl0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDppdC55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHN0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpzdC5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHV0PUxmLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp1dC5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpmZy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6ZmcucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOmZnLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpmZy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmZnLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOmZnLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmZnLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmZnLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOmZnLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpmZy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmZnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6ZmcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOmZnLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmZnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmZnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFV0LmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEoYSl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uYX19YWRkUG9pbnRzKGEpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLmEsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKGEpe1V0LnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsYSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmF9fXNldFRoZW1lQ29uZmlnKGEpe1V0LnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixhKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmF9fWNhbGN1bGF0ZVNwYWNlKGEsZixwLHYpe2NvbnN0IG09dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOmE9PT0idG9wIiYmZj9tOjAsYm90dG9tOmE9PT0iYm90dG9tIiYmZj9tOjB9LEU9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXz17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZwP0U6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmcD9FOjB9LEw9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixOPXt0b3A6dj9MOjB9LEI9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK18ubGVmdCxqPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtOLnRvcCxSPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItXy5sZWZ0LV8ucmlnaHQsej10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1OLnRvcCxLPVIvMixpdD16LzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOl8sdGl0bGVTcGFjZTpOLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpCLHF1YWRyYW50VG9wOmoscXVhZHJhbnRXaWR0aDpSLHF1YWRyYW50SGFsZldpZHRoOksscXVhZHJhbnRIZWlnaHQ6eixxdWFkcmFudEhhbGZIZWlnaHQ6aXR9fX1nZXRBeGlzTGFiZWxzKGEsZixwLHYpe2NvbnN0e3F1YWRyYW50U3BhY2U6bSx0aXRsZVNwYWNlOmJ9PXYse3F1YWRyYW50SGFsZkhlaWdodDpFLHF1YWRyYW50SGVpZ2h0Ol8scXVhZHJhbnRMZWZ0OkwscXVhZHJhbnRIYWxmV2lkdGg6TixxdWFkcmFudFRvcDpCLHF1YWRyYW50V2lkdGg6an09bSxSPXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MCx6PVtdO3JldHVybiB0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCYmZiYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc0xlZnRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpMKyhSP04vMjowKSx5OmE9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytCK18rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQmJmYmJnoucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNSaWdodFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OkwrTisoUj9OLzI6MCkseTphPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrYi50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrQitfK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Uj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCYmcCYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCx4OnRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb249PT0ibGVmdCI/dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmc6dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcrTCtqK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyx5OkIrXy0oUj9FLzI6MCksZm9udFNpemU6dGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246LTkwfSksdGhpcy5kYXRhLnlBeGlzVG9wVGV4dCYmcCYmei5wdXNoKHt0ZXh0OnRoaXMuZGF0YS55QXhpc1RvcFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCx4OnRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb249PT0ibGVmdCI/dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmc6dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcrTCtqK3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyx5OkIrRS0oUj9FLzI6MCksZm9udFNpemU6dGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246LTkwfSksen1nZXRRdWFkcmFudHMoYSl7Y29uc3R7cXVhZHJhbnRTcGFjZTpmfT1hLHtxdWFkcmFudEhhbGZIZWlnaHQ6cCxxdWFkcmFudExlZnQ6dixxdWFkcmFudEhhbGZXaWR0aDptLHF1YWRyYW50VG9wOmJ9PWYsRT1be3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp2K20seTpiLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDJUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dix5OmIsd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50M1RleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M1RleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp2LHk6YitwLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6dittLHk6YitwLHdpZHRoOm0saGVpZ2h0OnAsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGx9XTtmb3IoY29uc3QgXyBvZiBFKV8udGV4dC54PV8ueCtfLndpZHRoLzIsdGhpcy5kYXRhLnBvaW50cy5sZW5ndGg9PT0wPyhfLnRleHQueT1fLnkrXy5oZWlnaHQvMixfLnRleHQuaG9yaXpvbnRhbFBvcz0ibWlkZGxlIik6KF8udGV4dC55PV8ueSt0aGlzLmNvbmZpZy5xdWFkcmFudFRleHRUb3BQYWRkaW5nLF8udGV4dC5ob3Jpem9udGFsUG9zPSJ0b3AiKTtyZXR1cm4gRX1nZXRRdWFkcmFudFBvaW50cyhhKXtjb25zdHtxdWFkcmFudFNwYWNlOmZ9PWEse3F1YWRyYW50SGVpZ2h0OnAscXVhZHJhbnRMZWZ0OnYscXVhZHJhbnRUb3A6bSxxdWFkcmFudFdpZHRoOmJ9PWYsRT1CVSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoW3YsYit2XSksXz1CVSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoW3ArbSxtXSk7cmV0dXJuIHRoaXMuZGF0YS5wb2ludHMubWFwKE49Pih7eDpFKE4ueCkseTpfKE4ueSksZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHJhZGl1czp0aGlzLmNvbmZpZy5wb2ludFJhZGl1cyx0ZXh0Ont0ZXh0Ok4udGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludFRleHRGaWxsLHg6RShOLngpLHk6XyhOLnkpK3RoaXMuY29uZmlnLnBvaW50VGV4dFBhZGRpbmcsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoidG9wIixmb250U2l6ZTp0aGlzLmNvbmZpZy5wb2ludExhYmVsRm9udFNpemUscm90YXRpb246MH19KSl9Z2V0Qm9yZGVycyhhKXtjb25zdCBmPXRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aC8yLHtxdWFkcmFudFNwYWNlOnB9PWEse3F1YWRyYW50SGFsZkhlaWdodDp2LHF1YWRyYW50SGVpZ2h0Om0scXVhZHJhbnRMZWZ0OmIscXVhZHJhbnRIYWxmV2lkdGg6RSxxdWFkcmFudFRvcDpfLHF1YWRyYW50V2lkdGg6TH09cDtyZXR1cm5be3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi1mLHkxOl8seDI6YitMK2YseTI6X30se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6YitMLHkxOl8rZix4MjpiK0wseTI6XyttLWZ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmItZix5MTpfK20seDI6YitMK2YseTI6XyttfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLHkxOl8rZix4MjpiLHkyOl8rbS1mfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK0UseTE6XytmLHgyOmIrRSx5MjpfK20tZn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6YitmLHkxOl8rdix4MjpiK0wtZix5MjpfK3Z9XX1nZXRUaXRsZShhKXtpZihhKXJldHVybnt0ZXh0OnRoaXMuZGF0YS50aXRsZVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50VGl0bGVGaWxsLGZvbnRTaXplOnRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUsaG9yaXpvbnRhbFBvczoidG9wIix2ZXJ0aWNhbFBvczoiY2VudGVyIixyb3RhdGlvbjowLHk6dGhpcy5jb25maWcudGl0bGVQYWRkaW5nLHg6dGhpcy5jb25maWcuY2hhcnRXaWR0aC8yfX1idWlsZCgpe2NvbnN0IGE9dGhpcy5jb25maWcuc2hvd1hBeGlzJiYhISh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dHx8dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KSxmPXRoaXMuY29uZmlnLnNob3dZQXhpcyYmISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dHx8dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCkscD10aGlzLmNvbmZpZy5zaG93VGl0bGUmJiEhdGhpcy5kYXRhLnRpdGxlVGV4dCx2PXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPjA/ImJvdHRvbSI6dGhpcy5jb25maWcueEF4aXNQb3NpdGlvbixtPXRoaXMuY2FsY3VsYXRlU3BhY2UodixhLGYscCk7cmV0dXJue3BvaW50czp0aGlzLmdldFF1YWRyYW50UG9pbnRzKG0pLHF1YWRyYW50czp0aGlzLmdldFF1YWRyYW50cyhtKSxheGlzTGFiZWxzOnRoaXMuZ2V0QXhpc0xhYmVscyh2LGEsZixtKSxib3JkZXJMaW5lczp0aGlzLmdldEJvcmRlcnMobSksdGl0bGU6dGhpcy5nZXRUaXRsZShwKX19fWNvbnN0IElxZT1MZSgpO2Z1bmN0aW9uIE01KGkpe3JldHVybiBEZChpLnRyaW0oKSxJcWUpfWNvbnN0IHgwPW5ldyBNcWU7ZnVuY3Rpb24gRHFlKGkpe3gwLnNldERhdGEoe3F1YWRyYW50MVRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIE9xZShpKXt4MC5zZXREYXRhKHtxdWFkcmFudDJUZXh0Ok01KGkudGV4dCl9KX1mdW5jdGlvbiBOcWUoaSl7eDAuc2V0RGF0YSh7cXVhZHJhbnQzVGV4dDpNNShpLnRleHQpfSl9ZnVuY3Rpb24gUHFlKGkpe3gwLnNldERhdGEoe3F1YWRyYW50NFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIEZxZShpKXt4MC5zZXREYXRhKHt4QXhpc0xlZnRUZXh0Ok01KGkudGV4dCl9KX1mdW5jdGlvbiBCcWUoaSl7eDAuc2V0RGF0YSh7eEF4aXNSaWdodFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIFJxZShpKXt4MC5zZXREYXRhKHt5QXhpc1RvcFRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uIGpxZShpKXt4MC5zZXREYXRhKHt5QXhpc0JvdHRvbVRleHQ6TTUoaS50ZXh0KX0pfWZ1bmN0aW9uICRxZShpLGEsZil7eDAuYWRkUG9pbnRzKFt7eDphLHk6Zix0ZXh0Ok01KGkudGV4dCl9XSl9ZnVuY3Rpb24genFlKGkpe3gwLnNldENvbmZpZyh7Y2hhcnRXaWR0aDppfSl9ZnVuY3Rpb24gcXFlKGkpe3gwLnNldENvbmZpZyh7Y2hhcnRIZWlnaHQ6aX0pfWZ1bmN0aW9uIEhxZSgpe2NvbnN0IGk9TGUoKSx7dGhlbWVWYXJpYWJsZXM6YSxxdWFkcmFudENoYXJ0OmZ9PWk7cmV0dXJuIGYmJngwLnNldENvbmZpZyhmKSx4MC5zZXRUaGVtZUNvbmZpZyh7cXVhZHJhbnQxRmlsbDphLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDphLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDphLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDphLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6YS5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDphLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmEucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6YS5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDphLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDphLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6YS5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOmEucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmEucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6YS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudFRpdGxlRmlsbDphLnF1YWRyYW50VGl0bGVGaWxsfSkseDAuc2V0RGF0YSh7dGl0bGVUZXh0OkRiKCl9KSx4MC5idWlsZCgpfWNvbnN0IEdxZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkxxZSxkYjp7c2V0V2lkdGg6enFlLHNldEhlaWdodDpxcWUsc2V0UXVhZHJhbnQxVGV4dDpEcWUsc2V0UXVhZHJhbnQyVGV4dDpPcWUsc2V0UXVhZHJhbnQzVGV4dDpOcWUsc2V0UXVhZHJhbnQ0VGV4dDpQcWUsc2V0WEF4aXNMZWZ0VGV4dDpGcWUsc2V0WEF4aXNSaWdodFRleHQ6QnFlLHNldFlBeGlzVG9wVGV4dDpScWUsc2V0WUF4aXNCb3R0b21UZXh0OmpxZSxhZGRQb2ludDokcWUsZ2V0UXVhZHJhbnREYXRhOkhxZSxjbGVhcjpmdW5jdGlvbigpe3gwLmNsZWFyKCksYXAoKX0sc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0RGlhZ3JhbVRpdGxlOloyLGdldERpYWdyYW1UaXRsZTpEYixnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcH0scmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHd0LFgscHQ7ZnVuY3Rpb24gdihVKXtyZXR1cm4gVT09PSJ0b3AiPyJoYW5naW5nIjoibWlkZGxlIn1mdW5jdGlvbiBtKFUpe3JldHVybiBVPT09ImxlZnQiPyJzdGFydCI6Im1pZGRsZSJ9ZnVuY3Rpb24gYihVKXtyZXR1cm5gdHJhbnNsYXRlKCR7VS54fSwgJHtVLnl9KSByb3RhdGUoJHtVLnJvdGF0aW9ufHwwfSlgfWNvbnN0IEU9TGUoKTtVdC5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmAraSk7Y29uc3QgXz1FLnNlY3VyaXR5TGV2ZWw7bGV0IEw7Xz09PSJzYW5kYm94IiYmKEw9eXIoIiNpIithKSk7Y29uc3QgQj15cihfPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPSIke2F9Il1gKSxqPUIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksUj0oKHd0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnd0LmNoYXJ0V2lkdGgpfHw1MDAsej0oKFg9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6WC5jaGFydEhlaWdodCl8fDUwMDtvZyhCLHosUiwoKHB0PUUucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnB0LnVzZU1heFdpZHRoKXx8ITApLEIuYXR0cigidmlld0JveCIsIjAgMCAiK1IrIiAiK3opLHAuZGIuc2V0SGVpZ2h0KHopLHAuZGIuc2V0V2lkdGgoUik7Y29uc3QgSz1wLmRiLmdldFF1YWRyYW50RGF0YSgpLGl0PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudHMiKSxzdD1qLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYm9yZGVyIiksdXQ9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnRzIiksYnQ9ai5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpLG10PWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aXRsZSIpO0sudGl0bGUmJm10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLEsudGl0bGUuZmlsbCkuYXR0cigiZm9udC1zaXplIixLLnRpdGxlLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsdihLLnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsbShLLnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixiKEsudGl0bGUpKS50ZXh0KEsudGl0bGUudGV4dCksSy5ib3JkZXJMaW5lcyYmc3Quc2VsZWN0QWxsKCJsaW5lIikuZGF0YShLLmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixVPT5VLngxKS5hdHRyKCJ5MSIsVT0+VS55MSkuYXR0cigieDIiLFU9PlUueDIpLmF0dHIoInkyIixVPT5VLnkyKS5zdHlsZSgic3Ryb2tlIixVPT5VLnN0cm9rZUZpbGwpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFU9PlUuc3Ryb2tlV2lkdGgpO2NvbnN0IHl0PWl0LnNlbGVjdEFsbCgiZy5xdWFkcmFudCIpLmRhdGEoSy5xdWFkcmFudHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudCIpO3l0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLFU9PlUueCkuYXR0cigieSIsVT0+VS55KS5hdHRyKCJ3aWR0aCIsVT0+VS53aWR0aCkuYXR0cigiaGVpZ2h0IixVPT5VLmhlaWdodCkuYXR0cigiZmlsbCIsVT0+VS5maWxsKSx5dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixVPT5VLnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixVPT5VLnRleHQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixVPT52KFUudGV4dC5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFU9Pm0oVS50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixVPT5iKFUudGV4dCkpLnRleHQoVT0+VS50ZXh0LnRleHQpLGJ0LnNlbGVjdEFsbCgiZy5sYWJlbCIpLmRhdGEoSy5heGlzTGFiZWxzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS50ZXh0KFU9PlUudGV4dCkuYXR0cigiZmlsbCIsVT0+VS5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixVPT52KFUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixVPT5tKFUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVSkpO2NvbnN0IGh0PXV0LnNlbGVjdEFsbCgiZy5kYXRhLXBvaW50IikuZGF0YShLLnBvaW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnQiKTtodC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixVPT5VLngpLmF0dHIoImN5IixVPT5VLnkpLmF0dHIoInIiLFU9PlUucmFkaXVzKS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLGh0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVT0+VS50ZXh0LnRleHQpLmF0dHIoImZpbGwiLFU9PlUudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PnYoVS50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVT0+bShVLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVS50ZXh0KSl9fSxzdHlsZXM6KCk9PiIifX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbmd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oTWUsdmUsR2UsS2Upe2ZvcihHZT1HZXx8e30sS2U9TWUubGVuZ3RoO0tlLS07R2VbTWVbS2VdXT12ZSk7cmV0dXJuIEdlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx2PVsxLDZdLG09WzUsNiw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLGI9WzEsMThdLEU9WzIsN10sXz1bMSwyMl0sTD1bMSwyM10sTj1bMSwyNF0sQj1bMSwyNV0saj1bMSwyNl0sUj1bMSwyN10sej1bMSwyMF0sSz1bMSwyOF0saXQ9WzEsMjldLHN0PVs2Miw2M10sdXQ9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDUxLDUzLDYyLDYzXSxidD1bMSw0N10sbXQ9WzEsNDhdLHl0PVsxLDQ5XSxkdD1bMSw1MF0saHQ9WzEsNTFdLHd0PVsxLDUyXSxYPVsxLDUzXSxwdD1bNTMsNTRdLFU9WzEsNjRdLHh0PVsxLDYwXSxudD1bMSw2MV0sT3Q9WzEsNjJdLE50PVsxLDYzXSxxdD1bMSw2NV0sQ3Q9WzEsNjldLFo9WzEsNzBdLFR0PVsxLDY3XSxIdD1bMSw2OF0sSXQ9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxGdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LGFjY190aXRsZTo5LGFjY190aXRsZV92YWx1ZToxMCxhY2NfZGVzY3I6MTEsYWNjX2Rlc2NyX3ZhbHVlOjEyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTMscmVxdWlyZW1lbnREZWY6MTQsZWxlbWVudERlZjoxNSxyZWxhdGlvbnNoaXBEZWY6MTYscmVxdWlyZW1lbnRUeXBlOjE3LHJlcXVpcmVtZW50TmFtZToxOCxTVFJVQ1RfU1RBUlQ6MTkscmVxdWlyZW1lbnRCb2R5OjIwLElEOjIxLENPTE9OU0VQOjIyLGlkOjIzLFRFWFQ6MjQsdGV4dDoyNSxSSVNLOjI2LHJpc2tMZXZlbDoyNyxWRVJJRllNVEhEOjI4LHZlcmlmeVR5cGU6MjksU1RSVUNUX1NUT1A6MzAsUkVRVUlSRU1FTlQ6MzEsRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDozMixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6MzMsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6MzQsUEhZU0lDQUxfUkVRVUlSRU1FTlQ6MzUsREVTSUdOX0NPTlNUUkFJTlQ6MzYsTE9XX1JJU0s6MzcsTUVEX1JJU0s6MzgsSElHSF9SSVNLOjM5LFZFUklGWV9BTkFMWVNJUzo0MCxWRVJJRllfREVNT05TVFJBVElPTjo0MSxWRVJJRllfSU5TUEVDVElPTjo0MixWRVJJRllfVEVTVDo0MyxFTEVNRU5UOjQ0LGVsZW1lbnROYW1lOjQ1LGVsZW1lbnRCb2R5OjQ2LFRZUEU6NDcsdHlwZTo0OCxET0NSRUY6NDkscmVmOjUwLEVORF9BUlJPV19MOjUxLHJlbGF0aW9uc2hpcDo1MixMSU5FOjUzLEVORF9BUlJPV19SOjU0LENPTlRBSU5TOjU1LENPUElFUzo1NixERVJJVkVTOjU3LFNBVElTRklFUzo1OCxWRVJJRklFUzo1OSxSRUZJTkVTOjYwLFRSQUNFUzo2MSx1bnFTdHJpbmc6NjIscVN0cmluZzo2MywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsOToiYWNjX3RpdGxlIiwxMDoiYWNjX3RpdGxlX3ZhbHVlIiwxMToiYWNjX2Rlc2NyIiwxMjoiYWNjX2Rlc2NyX3ZhbHVlIiwxMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTk6IlNUUlVDVF9TVEFSVCIsMjE6IklEIiwyMjoiQ09MT05TRVAiLDI0OiJURVhUIiwyNjoiUklTSyIsMjg6IlZFUklGWU1USEQiLDMwOiJTVFJVQ1RfU1RPUCIsMzE6IlJFUVVJUkVNRU5UIiwzMjoiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVCIsMzM6IklOVEVSRkFDRV9SRVFVSVJFTUVOVCIsMzQ6IlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UIiwzNToiUEhZU0lDQUxfUkVRVUlSRU1FTlQiLDM2OiJERVNJR05fQ09OU1RSQUlOVCIsMzc6IkxPV19SSVNLIiwzODoiTUVEX1JJU0siLDM5OiJISUdIX1JJU0siLDQwOiJWRVJJRllfQU5BTFlTSVMiLDQxOiJWRVJJRllfREVNT05TVFJBVElPTiIsNDI6IlZFUklGWV9JTlNQRUNUSU9OIiw0MzoiVkVSSUZZX1RFU1QiLDQ0OiJFTEVNRU5UIiw0NzoiVFlQRSIsNDk6IkRPQ1JFRiIsNTE6IkVORF9BUlJPV19MIiw1MzoiTElORSIsNTQ6IkVORF9BUlJPV19SIiw1NToiQ09OVEFJTlMiLDU2OiJDT1BJRVMiLDU3OiJERVJJVkVTIiw1ODoiU0FUSVNGSUVTIiw1OToiVkVSSUZJRVMiLDYwOiJSRUZJTkVTIiw2MToiVFJBQ0VTIiw2MjoidW5xU3RyaW5nIiw2MzoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwyXSxbNCwyXSxbNCwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTQsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCwyXSxbMjAsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsxNSw1XSxbNDYsNV0sWzQ2LDVdLFs0NiwyXSxbNDYsMV0sWzE2LDVdLFsxNiw1XSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzE4LDFdLFsxOCwxXSxbMjMsMV0sWzIzLDFdLFsyNSwxXSxbMjUsMV0sWzQ1LDFdLFs0NSwxXSxbNDgsMV0sWzQ4LDFdLFs1MCwxXSxbNTAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odmUsR2UsS2Usd2UsX2UsJHQscmUpe3ZhciBpZT0kdC5sZW5ndGgtMTtzd2l0Y2goX2Upe2Nhc2UgNDp0aGlzLiQ9JHRbaWVdLnRyaW0oKSx3ZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPSR0W2llXS50cmltKCksd2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTM6d2UuYWRkUmVxdWlyZW1lbnQoJHRbaWUtM10sJHRbaWUtNF0pO2JyZWFrO2Nhc2UgMTQ6d2Uuc2V0TmV3UmVxSWQoJHRbaWUtMl0pO2JyZWFrO2Nhc2UgMTU6d2Uuc2V0TmV3UmVxVGV4dCgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAxNjp3ZS5zZXROZXdSZXFSaXNrKCR0W2llLTJdKTticmVhaztjYXNlIDE3OndlLnNldE5ld1JlcVZlcmlmeU1ldGhvZCgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9d2UuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9d2UuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXdlLlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI1OnRoaXMuJD13ZS5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9d2UuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXdlLlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDI4OnRoaXMuJD13ZS5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXdlLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXdlLlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9d2UuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDMyOnRoaXMuJD13ZS5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzM6d2UuYWRkRWxlbWVudCgkdFtpZS0zXSk7YnJlYWs7Y2FzZSAzNDp3ZS5zZXROZXdFbGVtZW50VHlwZSgkdFtpZS0yXSk7YnJlYWs7Y2FzZSAzNTp3ZS5zZXROZXdFbGVtZW50RG9jUmVmKCR0W2llLTJdKTticmVhaztjYXNlIDM4OndlLmFkZFJlbGF0aW9uc2hpcCgkdFtpZS0yXSwkdFtpZV0sJHRbaWUtNF0pO2JyZWFrO2Nhc2UgMzk6d2UuYWRkUmVsYXRpb25zaGlwKCR0W2llLTJdLCR0W2llLTRdLCR0W2llXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQxOnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQyOnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ1OnRoaXMuJD13ZS5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9d2UuUmVsYXRpb25zaGlwcy5UUkFDRVM7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNjphLDk6ZiwxMTpwLDEzOnZ9LHsxOlszXX0sezM6OCw0OjIsNTpbMSw3XSw2OmEsOTpmLDExOnAsMTM6dn0sezU6WzEsOV19LHsxMDpbMSwxMF19LHsxMjpbMSwxMV19LGkobSxbMiw2XSksezM6MTIsNDoyLDY6YSw5OmYsMTE6cCwxMzp2fSx7MTpbMiwyXX0sezQ6MTcsNTpiLDc6MTMsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSxpKG0sWzIsNF0pLGkobSxbMiw1XSksezE6WzIsMV19LHs4OlsxLDMwXX0sezQ6MTcsNTpiLDc6MzEsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSx7NDoxNyw1OmIsNzozMiw4OkUsOTpmLDExOnAsMTM6diwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkwsMzM6TiwzNDpCLDM1OmosMzY6Uiw0NDp6LDYyOkssNjM6aXR9LHs0OjE3LDU6Yiw3OjMzLDg6RSw5OmYsMTE6cCwxMzp2LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6TCwzMzpOLDM0OkIsMzU6aiwzNjpSLDQ0OnosNjI6Syw2MzppdH0sezQ6MTcsNTpiLDc6MzQsODpFLDk6ZiwxMTpwLDEzOnYsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpMLDMzOk4sMzQ6QiwzNTpqLDM2OlIsNDQ6eiw2MjpLLDYzOml0fSx7NDoxNyw1OmIsNzozNSw4OkUsOTpmLDExOnAsMTM6diwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkwsMzM6TiwzNDpCLDM1OmosMzY6Uiw0NDp6LDYyOkssNjM6aXR9LHsxODozNiw2MjpbMSwzN10sNjM6WzEsMzhdfSx7NDU6MzksNjI6WzEsNDBdLDYzOlsxLDQxXX0sezUxOlsxLDQyXSw1MzpbMSw0M119LGkoc3QsWzIsMjBdKSxpKHN0LFsyLDIxXSksaShzdCxbMiwyMl0pLGkoc3QsWzIsMjNdKSxpKHN0LFsyLDI0XSksaShzdCxbMiwyNV0pLGkodXQsWzIsNDldKSxpKHV0LFsyLDUwXSksezE6WzIsM119LHs4OlsyLDhdfSx7ODpbMiw5XX0sezg6WzIsMTBdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezE5OlsxLDQ0XX0sezE5OlsyLDQ3XX0sezE5OlsyLDQ4XX0sezE5OlsxLDQ1XX0sezE5OlsyLDUzXX0sezE5OlsyLDU0XX0sezUyOjQ2LDU1OmJ0LDU2Om10LDU3Onl0LDU4OmR0LDU5Omh0LDYwOnd0LDYxOlh9LHs1Mjo1NCw1NTpidCw1NjptdCw1Nzp5dCw1ODpkdCw1OTpodCw2MDp3dCw2MTpYfSx7NTpbMSw1NV19LHs1OlsxLDU2XX0sezUzOlsxLDU3XX0saShwdCxbMiw0MF0pLGkocHQsWzIsNDFdKSxpKHB0LFsyLDQyXSksaShwdCxbMiw0M10pLGkocHQsWzIsNDRdKSxpKHB0LFsyLDQ1XSksaShwdCxbMiw0Nl0pLHs1NDpbMSw1OF19LHs1OlUsMjA6NTksMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LHs1OkN0LDMwOlosNDY6NjYsNDc6VHQsNDk6SHR9LHsyMzo3MSw2MjpLLDYzOml0fSx7MjM6NzIsNjI6Syw2MzppdH0saShJdCxbMiwxM10pLHsyMjpbMSw3M119LHsyMjpbMSw3NF19LHsyMjpbMSw3NV19LHsyMjpbMSw3Nl19LHs1OlUsMjA6NzcsMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LGkoSXQsWzIsMTldKSxpKEl0LFsyLDMzXSksezIyOlsxLDc4XX0sezIyOlsxLDc5XX0sezU6Q3QsMzA6Wiw0Njo4MCw0NzpUdCw0OTpIdH0saShJdCxbMiwzN10pLGkoSXQsWzIsMzhdKSxpKEl0LFsyLDM5XSksezIzOjgxLDYyOkssNjM6aXR9LHsyNTo4Miw2MjpbMSw4M10sNjM6WzEsODRdfSx7Mjc6ODUsMzc6WzEsODZdLDM4OlsxLDg3XSwzOTpbMSw4OF19LHsyOTo4OSw0MDpbMSw5MF0sNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LGkoSXQsWzIsMThdKSx7NDg6OTQsNjI6WzEsOTVdLDYzOlsxLDk2XX0sezUwOjk3LDYyOlsxLDk4XSw2MzpbMSw5OV19LGkoSXQsWzIsMzZdKSx7NTpbMSwxMDBdfSx7NTpbMSwxMDFdfSx7NTpbMiw1MV19LHs1OlsyLDUyXX0sezU6WzEsMTAyXX0sezU6WzIsMjZdfSx7NTpbMiwyN119LHs1OlsyLDI4XX0sezU6WzEsMTAzXX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzIsMzJdfSx7NTpbMSwxMDRdfSx7NTpbMiw1NV19LHs1OlsyLDU2XX0sezU6WzEsMTA1XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHs1OlUsMjA6MTA2LDIxOnh0LDI0Om50LDI2Ok90LDI4Ok50LDMwOnF0fSx7NTpVLDIwOjEwNywyMTp4dCwyNDpudCwyNjpPdCwyODpOdCwzMDpxdH0sezU6VSwyMDoxMDgsMjE6eHQsMjQ6bnQsMjY6T3QsMjg6TnQsMzA6cXR9LHs1OlUsMjA6MTA5LDIxOnh0LDI0Om50LDI2Ok90LDI4Ok50LDMwOnF0fSx7NTpDdCwzMDpaLDQ2OjExMCw0NzpUdCw0OTpIdH0sezU6Q3QsMzA6Wiw0NjoxMTEsNDc6VHQsNDk6SHR9LGkoSXQsWzIsMTRdKSxpKEl0LFsyLDE1XSksaShJdCxbMiwxNl0pLGkoSXQsWzIsMTddKSxpKEl0LFsyLDM0XSksaShJdCxbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHZlLEdlKXtpZihHZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHZlKTtlbHNle3ZhciBLZT1uZXcgRXJyb3IodmUpO3Rocm93IEtlLmhhc2g9R2UsS2V9fSxwYXJzZTpmdW5jdGlvbih2ZSl7dmFyIEdlPXRoaXMsS2U9WzBdLHdlPVtdLF9lPVtudWxsXSwkdD1bXSxyZT10aGlzLnRhYmxlLGllPSIiLE9lPTAsb2U9MCxOZT0yLG1lPTEsY249JHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5YT17eXk6e319O2Zvcih2YXIgZGEgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkYSkmJih5YS55eVtkYV09dGhpcy55eVtkYV0pO2xpLnNldElucHV0KHZlLHlhLnl5KSx5YS55eS5sZXhlcj1saSx5YS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGkueXlsbG9jPiJ1IiYmKGxpLnl5bGxvYz17fSk7dmFyIE9vPWxpLnl5bGxvYzskdC5wdXNoKE9vKTt2YXIgZHM9bGkub3B0aW9ucyYmbGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHlhLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXlhLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIERyKCl7dmFyIEdzO3JldHVybiBHcz13ZS5wb3AoKXx8bGkubGV4KCl8fG1lLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYod2U9R3MsR3M9d2UucG9wKCkpLEdzPUdlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgbnIsZGksRWUsWW4sSGU9e30sVGksZ24sa3MscWE7Oyl7aWYoZGk9S2VbS2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigobnI9PT1udWxsfHx0eXBlb2YgbnI+InUiKSYmKG5yPURyKCkpLEVlPXJlW2RpXSYmcmVbZGldW25yXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTGE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5OZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO2xpLnNob3dQb3NpdGlvbj9MYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPZSsxKStgOgpgK2xpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tucl18fG5yKSsiJyI6TGE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT2UrMSkrIjogVW5leHBlY3RlZCAiKyhucj09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbnJdfHxucikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTGEse3RleHQ6bGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW25yXXx8bnIsbGluZTpsaS55eWxpbmVubyxsb2M6T28sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrbnIpO3N3aXRjaChFZVswXSl7Y2FzZSAxOktlLnB1c2gobnIpLF9lLnB1c2gobGkueXl0ZXh0KSwkdC5wdXNoKGxpLnl5bGxvYyksS2UucHVzaChFZVsxXSksbnI9bnVsbCxvZT1saS55eWxlbmcsaWU9bGkueXl0ZXh0LE9lPWxpLnl5bGluZW5vLE9vPWxpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoZ249dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9X2VbX2UubGVuZ3RoLWduXSxIZS5fJD17Zmlyc3RfbGluZTokdFskdC5sZW5ndGgtKGdufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6JHRbJHQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JHRbJHQubGVuZ3RoLShnbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjokdFskdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRzJiYoSGUuXyQucmFuZ2U9WyR0WyR0Lmxlbmd0aC0oZ258fDEpXS5yYW5nZVswXSwkdFskdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxZbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW2llLG9lLE9lLHlhLnl5LEVlWzFdLF9lLCR0XS5jb25jYXQoY24pKSx0eXBlb2YgWW48InUiKXJldHVybiBZbjtnbiYmKEtlPUtlLnNsaWNlKDAsLTEqZ24qMiksX2U9X2Uuc2xpY2UoMCwtMSpnbiksJHQ9JHQuc2xpY2UoMCwtMSpnbikpLEtlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxfZS5wdXNoKEhlLiQpLCR0LnB1c2goSGUuXyQpLGtzPXJlW0tlW0tlLmxlbmd0aC0yXV1bS2VbS2UubGVuZ3RoLTFdXSxLZS5wdXNoKGtzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sa2U9ZnVuY3Rpb24oKXt2YXIgTWU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR2UsS2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR2UsS2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEdlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odmUsR2Upe3JldHVybiB0aGlzLnl5PUdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD12ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXZlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz12ZSx0aGlzLm1hdGNoZWQrPXZlO3ZhciBHZT12ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx2ZX0sdW5wdXQ6ZnVuY3Rpb24odmUpe3ZhciBHZT12ZS5sZW5ndGgsS2U9dmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD12ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR2UpLHRoaXMub2Zmc2V0LT1HZTt2YXIgd2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksS2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1LZS5sZW5ndGgtMSk7dmFyIF9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT8oS2UubGVuZ3RoPT09d2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt3ZVt3ZS5sZW5ndGgtS2UubGVuZ3RoXS5sZW5ndGgtS2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtfZVswXSxfZVswXSt0aGlzLnl5bGVuZy1HZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odmUubGVuZ3RoPjIwPyIuLi4iOiIiKSt2ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLm1hdGNoO3JldHVybiB2ZS5sZW5ndGg8MjAmJih2ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdmUubGVuZ3RoKSksKHZlLnN1YnN0cigwLDIwKSsodmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB2ZT10aGlzLnBhc3RJbnB1dCgpLEdlPW5ldyBBcnJheSh2ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB2ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHZlLEdlKXt2YXIgS2Usd2UsX2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKF9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKF9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHdlPXZlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3ZSYmKHRoaXMueXlsaW5lbm8rPXdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOndlP3dlW3dlLmxlbmd0aC0xXS5sZW5ndGgtd2Vbd2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dmVbMF0sdGhpcy5tYXRjaCs9dmVbMF0sdGhpcy5tYXRjaGVzPXZlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHZlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz12ZVswXSxLZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLZSlyZXR1cm4gS2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyICR0IGluIF9lKXRoaXNbJHRdPV9lWyR0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB2ZSxHZSxLZSx3ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSwkdD0wOyR0PF9lLmxlbmd0aDskdCsrKWlmKEtlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbJHRdXSksS2UmJighR2V8fEtlWzBdLmxlbmd0aD5HZVswXS5sZW5ndGgpKXtpZihHZT1LZSx3ZT0kdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih2ZT10aGlzLnRlc3RfbWF0Y2goS2UsX2VbJHRdKSx2ZSE9PSExKXJldHVybiB2ZTtpZih0aGlzLl9iYWNrdHJhY2spe0dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEdlPyh2ZT10aGlzLnRlc3RfbWF0Y2goR2UsX2Vbd2VdKSx2ZSE9PSExP3ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5uZXh0KCk7cmV0dXJuIEdlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEdlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHZSl7cmV0dXJuIEdlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR2V8fDApLEdlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEdlKXt0aGlzLmJlZ2luKEdlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHZSxLZSx3ZSxfZSl7c3dpdGNoKHdlKXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBLZS55eXRleHQ9S2UueXl0ZXh0LnRyaW0oKSw2Mn19LHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE1lfSgpO0Z0LmxleGVyPWtlO2Z1bmN0aW9uIHBuKCl7dGhpcy55eT17fX1yZXR1cm4gcG4ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1wbixuZXcgcG59KCk7bmd0LnBhcnNlcj1uZ3Q7Y29uc3QgVnFlPW5ndDtsZXQgcmd0PVtdLGRwPXt9LE1QPXt9LGZrPXt9LElQPXt9O2NvbnN0IFVxZT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxnZXRDb25maWc6KCk9PkxlKCkucmVxLGFkZFJlcXVpcmVtZW50OihpLGEpPT4oTVBbaV09PT12b2lkIDAmJihNUFtpXT17bmFtZTppLHR5cGU6YSxpZDpkcC5pZCx0ZXh0OmRwLnRleHQscmlzazpkcC5yaXNrLHZlcmlmeU1ldGhvZDpkcC52ZXJpZnlNZXRob2R9KSxkcD17fSxNUFtpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5NUCxzZXROZXdSZXFJZDppPT57ZHAhPT12b2lkIDAmJihkcC5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57ZHAhPT12b2lkIDAmJihkcC50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntkcCE9PXZvaWQgMCYmKGRwLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57ZHAhPT12b2lkIDAmJihkcC52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGdldEFjY0Rlc2NyaXB0aW9uOnVwLGFkZEVsZW1lbnQ6aT0+KElQW2ldPT09dm9pZCAwJiYoSVBbaV09e25hbWU6aSx0eXBlOmZrLnR5cGUsZG9jUmVmOmZrLmRvY1JlZn0sVXQuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSxmaz17fSxJUFtpXSksZ2V0RWxlbWVudHM6KCk9PklQLHNldE5ld0VsZW1lbnRUeXBlOmk9PntmayE9PXZvaWQgMCYmKGZrLnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e2ZrIT09dm9pZCAwJiYoZmsuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGksYSxmKT0+e3JndC5wdXNoKHt0eXBlOmksc3JjOmEsZHN0OmZ9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+cmd0LGNsZWFyOigpPT57cmd0PVtdLGRwPXt9LE1QPXt9LGZrPXt9LElQPXt9LGFwKCl9fSxXcWU9aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLGlndD17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxhUnQ9e1JlcU1hcmtlcnM6aWd0LGluc2VydExpbmVFbmRpbmdzOihpLGEpPT57bGV0IGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixpZ3QuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGEubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsYS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO2YuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGEubGluZV9oZWlnaHQpLmF0dHIoInkxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksZi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGEubGluZV9oZWlnaHQpLmF0dHIoIngxIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixpZ3QuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLGEubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KmEubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGEubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHthLmxpbmVfaGVpZ2h0fSwke2EubGluZV9oZWlnaHQvMn0KICAgICAgTSR7YS5saW5lX2hlaWdodH0sJHthLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7YS5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IHhoPXt9LG9SdD0wO2NvbnN0IGNSdD0oaSxhKT0+aS5pbnNlcnQoInJlY3QiLCIjIithKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIseGgucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0Iix4aC5yZWN0X21pbl9oZWlnaHQrInB4IiksdVJ0PShpLGEsZik9PntsZXQgcD14aC5yZWN0X21pbl93aWR0aC8yLHY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixhKS5hdHRyKCJ4IixwKS5hdHRyKCJ5Iix4aC5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLG09MDtmLmZvckVhY2goTD0+e209PTA/di5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4Iix4aC5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChMKTp2LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHhoLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5Iix4aC5saW5lX2hlaWdodCouNzUpLnRleHQoTCksbSsrfSk7bGV0IGI9MS41KnhoLnJlY3RfcGFkZGluZyxFPW0qeGgubGluZV9oZWlnaHQqLjc1LF89YitFO3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIseGgucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixfKS5hdHRyKCJ5MiIsXykse3RpdGxlTm9kZTp2LHk6X319LGxSdD0oaSxhLGYscCk9PntsZXQgdj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLGEpLmF0dHIoIngiLHhoLnJlY3RfcGFkZGluZykuYXR0cigieSIscCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksbT0wO2NvbnN0IGI9MzA7bGV0IEU9W107cmV0dXJuIGYuZm9yRWFjaChfPT57bGV0IEw9Xy5sZW5ndGg7Zm9yKDtMPmImJm08Mzspe2xldCBOPV8uc3Vic3RyaW5nKDAsYik7Xz1fLnN1YnN0cmluZyhiLF8ubGVuZ3RoKSxMPV8ubGVuZ3RoLEVbRS5sZW5ndGhdPU4sbSsrfWlmKG09PTMpe2xldCBOPUVbRS5sZW5ndGgtMV07RVtFLmxlbmd0aC0xXT1OLnN1YnN0cmluZygwLE4ubGVuZ3RoLTQpKyIuLi4ifWVsc2UgRVtFLmxlbmd0aF09XzttPTB9KSxFLmZvckVhY2goXz0+e3YuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHhoLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLHhoLmxpbmVfaGVpZ2h0KS50ZXh0KF8pfSksdn0sS3FlPShpLGEsZixwKT0+e2NvbnN0IHY9YS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxtPWEubm9kZSgpLmdldFBvaW50QXRMZW5ndGgodiouNSksYj0icmVsIitvUnQ7b1J0Kys7Y29uc3QgXz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLG0ueCkuYXR0cigieSIsbS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChwKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixtLngtXy53aWR0aC8yKS5hdHRyKCJ5IixtLnktXy5oZWlnaHQvMikuYXR0cigid2lkdGgiLF8ud2lkdGgpLmF0dHIoImhlaWdodCIsXy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxZcWU9ZnVuY3Rpb24oaSxhLGYscCx2KXtjb25zdCBtPWYuZWRnZShvTChhLnNyYyksb0woYS5kc3QpKSxiPVo3KCkueChmdW5jdGlvbihfKXtyZXR1cm4gXy54fSkueShmdW5jdGlvbihfKXtyZXR1cm4gXy55fSksRT1pLmluc2VydCgicGF0aCIsIiMiK3ApLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIobS5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2EudHlwZT09di5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP0UuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrWXIuZ2V0VXJsKHhoLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIithLnR5cGUrIl9saW5lX2VuZGluZykiKTooRS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLEUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1lyLmdldFVybCh4aC5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrYVJ0LlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksS3FlKGksRSx4aCxgPDwke2EudHlwZX0+PmApfSxYcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07cD1vTChwKSxVdC5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIscCk7Y29uc3QgbT1mLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKSxiPSJyZXEtIitwLEU9Y1J0KG0sYik7bGV0IF89dVJ0KG0scCsiX3RpdGxlIixbYDw8JHt2LnR5cGV9Pj5gLGAke3YubmFtZX1gXSk7bFJ0KG0scCsiX2JvZHkiLFtgSWQ6ICR7di5pZH1gLGBUZXh0OiAke3YudGV4dH1gLGBSaXNrOiAke3Yucmlza31gLGBWZXJpZmljYXRpb246ICR7di52ZXJpZnlNZXRob2R9YF0sXy55KTtjb25zdCBMPUUubm9kZSgpLmdldEJCb3goKTthLnNldE5vZGUocCx7d2lkdGg6TC53aWR0aCxoZWlnaHQ6TC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnB9KX0pfSxRcWU9KGksYSxmKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocD0+e2xldCB2PWlbcF07Y29uc3QgbT1vTChwKSxiPWYuYXBwZW5kKCJnIikuYXR0cigiaWQiLG0pLEU9ImVsZW1lbnQtIittLF89Y1J0KGIsRSk7bGV0IEw9dVJ0KGIsRSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtwfWBdKTtsUnQoYixFKyJfYm9keSIsW2BUeXBlOiAke3YudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7di5kb2NSZWZ8fCJOb25lIn1gXSxMLnkpO2NvbnN0IE49Xy5ub2RlKCkuZ2V0QkJveCgpO2Euc2V0Tm9kZShtLHt3aWR0aDpOLndpZHRoLGhlaWdodDpOLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6bX0pfSl9LFpxZT0oaSxhKT0+KGkuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1vTChmLnNyYyksdj1vTChmLmRzdCk7YS5zZXRFZGdlKHAsdix7cmVsYXRpb25zaGlwOmZ9KX0pLGkpLEpxZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIitmKSxpLnNlbGVjdCgiIyIrZikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGEubm9kZShmKS54LWEubm9kZShmKS53aWR0aC8yKSsiLCIrKGEubm9kZShmKS55LWEubm9kZShmKS5oZWlnaHQvMikrIiApIikpfSl9LG9MPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLHRIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlZxZSxkYjpVcWUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57eGg9TGUoKS5yZXF1aXJlbWVudDtjb25zdCB2PXhoLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eXIoIiNpIithKSk7Y29uc3QgRT15cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke2F9J11gKTthUnQuaW5zZXJ0TGluZUVuZGluZ3MoRSx4aCk7Y29uc3QgXz1uZXcgYTEoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp4aC5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEw9cC5kYi5nZXRSZXF1aXJlbWVudHMoKSxOPXAuZGIuZ2V0RWxlbWVudHMoKSxCPXAuZGIuZ2V0UmVsYXRpb25zaGlwcygpO1hxZShMLF8sRSksUXFlKE4sXyxFKSxacWUoQixfKSxlTChfKSxKcWUoRSxfKSxCLmZvckVhY2goZnVuY3Rpb24oaXQpe1lxZShFLGl0LF8sYSxwKX0pO2NvbnN0IGo9eGgucmVjdF9wYWRkaW5nLFI9RS5ub2RlKCkuZ2V0QkJveCgpLHo9Ui53aWR0aCtqKjIsSz1SLmhlaWdodCtqKjI7b2coRSxLLHoseGgudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7Ui54LWp9ICR7Ui55LWp9ICR7en0gJHtLfWApfX0sc3R5bGVzOldxZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHNndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHdlLF9lLCR0LHJlKXtmb3IoJHQ9JHR8fHt9LHJlPXdlLmxlbmd0aDtyZS0tOyR0W3dlW3JlXV09X2UpO3JldHVybiAkdH0sYT1bMSwyXSxmPVsxLDNdLHA9WzEsNF0sdj1bMiw0XSxtPVsxLDldLGI9WzEsMTFdLEU9WzEsMTNdLF89WzEsMTRdLEw9WzEsMTZdLE49WzEsMTddLEI9WzEsMThdLGo9WzEsMjRdLFI9WzEsMjVdLHo9WzEsMjZdLEs9WzEsMjddLGl0PVsxLDI4XSxzdD1bMSwyOV0sdXQ9WzEsMzBdLGJ0PVsxLDMxXSxtdD1bMSwzMl0seXQ9WzEsMzNdLGR0PVsxLDM0XSxodD1bMSwzNV0sd3Q9WzEsMzZdLFg9WzEsMzddLHB0PVsxLDM4XSxVPVsxLDM5XSx4dD1bMSw0MV0sbnQ9WzEsNDJdLE90PVsxLDQzXSxOdD1bMSw0NF0scXQ9WzEsNDVdLEN0PVsxLDQ2XSxaPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sVHQ9WzQsNSwxNiw1MCw1Miw1M10sSHQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSXQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sRnQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sa2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0scG49WzY4LDY5LDcwXSxNZT1bMSwxMjBdLHZlPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxET1RURURfQVJST1c6NzQsU09MSURfQ1JPU1M6NzUsRE9UVEVEX0NST1NTOjc2LFNPTElEX1BPSU5UOjc3LERPVFRFRF9QT0lOVDo3OCxUWFQ6NzksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiRE9UVEVEX0FSUk9XIiw3NToiU09MSURfQ1JPU1MiLDc2OiJET1RURURfQ1JPU1MiLDc3OiJTT0xJRF9QT0lOVCIsNzg6IkRPVFRFRF9QT0lOVCIsNzk6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKF9lLCR0LHJlLGllLE9lLG9lLE5lKXt2YXIgbWU9b2UubGVuZ3RoLTE7c3dpdGNoKE9lKXtjYXNlIDM6cmV0dXJuIGllLmFwcGx5KG9lW21lXSksb2VbbWVdO2Nhc2UgNDpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpjYXNlIDEwOm9lW21lLTFdLnB1c2gob2VbbWVdKSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPW9lW21lXTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpvZVttZV0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1vZVttZV07YnJlYWs7Y2FzZSAxNjpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTppZS5wYXJzZUJveERhdGEob2VbbWUtMl0pfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Om9lW21lLTJdfSksdGhpcy4kPW9lW21lLTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihvZVttZS0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKG9lW21lLTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIob2VbbWUtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOm9lW21lLTFdfTticmVhaztjYXNlIDIzOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6b2VbbWUtMV19O2JyZWFrO2Nhc2UgMjk6aWUuc2V0RGlhZ3JhbVRpdGxlKG9lW21lXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1vZVttZV0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzA6aWUuc2V0RGlhZ3JhbVRpdGxlKG9lW21lXS5zdWJzdHJpbmcoNykpLHRoaXMuJD1vZVttZV0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPW9lW21lXS50cmltKCksaWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPW9lW21lXS50cmltKCksaWUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Om9lW21lLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpvZVttZS0yXSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPW9lW21lLTFdO2JyZWFrO2Nhc2UgMzU6b2VbbWUtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUkVDVF9TVEFSVH0pLG9lW21lLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOmllLnBhcnNlTWVzc2FnZShvZVttZS0yXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDM2Om9lW21lLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0yXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5PUFRfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzNzpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUxUX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzODpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmllLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSAzOTpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDQwOm9lW21lLTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDppZS5wYXJzZU1lc3NhZ2Uob2VbbWUtMl0pLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxvZVttZS0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA0MTpvZVttZS0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksb2VbbWUtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTJdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1vZVttZS0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6aWUucGFyc2VNZXNzYWdlKG9lW21lLTFdKSxzaWduYWxUeXBlOmllLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0sb2VbbWVdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9b2VbbWUtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5QQVJfQU5EfSxvZVttZV1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1vZVttZS0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0OmllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksc2lnbmFsVHlwZTppZS5MSU5FVFlQRS5BTFRfRUxTRX0sb2VbbWVdXSk7YnJlYWs7Y2FzZSA0ODpvZVttZS0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsb2VbbWUtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLG9lW21lLTNdLmRlc2NyaXB0aW9uPWllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksdGhpcy4kPW9lW21lLTNdO2JyZWFrO2Nhc2UgNDk6b2VbbWUtMV0uZHJhdz0icGFydGljaXBhbnQiLG9lW21lLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA1MDpvZVttZS0zXS5kcmF3PSJhY3RvciIsb2VbbWUtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLG9lW21lLTNdLmRlc2NyaXB0aW9uPWllLnBhcnNlTWVzc2FnZShvZVttZS0xXSksdGhpcy4kPW9lW21lLTNdO2JyZWFrO2Nhc2UgNTE6b2VbbWUtMV0uZHJhdz0iYWN0b3IiLG9lW21lLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9b2VbbWUtMV07YnJlYWs7Y2FzZSA1MjpvZVttZS0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1vZVttZS0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpvZVttZS0yXSxhY3RvcjpvZVttZS0xXS5hY3Rvcix0ZXh0Om9lW21lXX1dO2JyZWFrO2Nhc2UgNTQ6b2VbbWUtMl09W10uY29uY2F0KG9lW21lLTFdLG9lW21lLTFdKS5zbGljZSgwLDIpLG9lW21lLTJdWzBdPW9lW21lLTJdWzBdLmFjdG9yLG9lW21lLTJdWzFdPW9lW21lLTJdWzFdLmFjdG9yLHRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDppZS5QTEFDRU1FTlQuT1ZFUixhY3RvcjpvZVttZS0yXS5zbGljZSgwLDIpLHRleHQ6b2VbbWVdfV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9W29lW21lLTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6b2VbbWUtMV0uYWN0b3IsdGV4dDpvZVttZV19XTticmVhaztjYXNlIDU2OnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpvZVttZS0xXS5hY3Rvcix0ZXh0Om9lW21lXX1dO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVtvZVttZS0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6b2VbbWUtMV0uYWN0b3IsdGV4dDpvZVttZV19XTticmVhaztjYXNlIDU4OnRoaXMuJD1bb2VbbWUtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOm9lW21lLTFdLmFjdG9yLHRleHQ6b2VbbWVdfV07YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9W29lW21lLTJdLG9lW21lXV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9b2VbbWVdO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWllLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9aWUuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W29lW21lLTRdLG9lW21lLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOm9lW21lLTRdLmFjdG9yLHRvOm9lW21lLTFdLmFjdG9yLHNpZ25hbFR5cGU6b2VbbWUtM10sbXNnOm9lW21lXSxhY3RpdmF0ZTohMH0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOmllLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpvZVttZS0xXX1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtvZVttZS00XSxvZVttZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpvZVttZS00XS5hY3Rvcix0bzpvZVttZS0xXS5hY3RvcixzaWduYWxUeXBlOm9lW21lLTNdLG1zZzpvZVttZV19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6aWUuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpvZVttZS00XX1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtvZVttZS0zXSxvZVttZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpvZVttZS0zXS5hY3Rvcix0bzpvZVttZS0xXS5hY3RvcixzaWduYWxUeXBlOm9lW21lLTJdLG1zZzpvZVttZV19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOm9lW21lXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9aWUuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDcwOnRoaXMuJD1pZS5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDcxOnRoaXMuJD1pZS5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDcyOnRoaXMuJD1pZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9aWUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9aWUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWllLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPWllLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc3OnRoaXMuJD1pZS5wYXJzZU1lc3NhZ2Uob2VbbWVdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sdGFibGU6W3szOjEsNDphLDU6Ziw2OnB9LHsxOlszXX0sezM6NSw0OmEsNTpmLDY6cH0sezM6Niw0OmEsNTpmLDY6cH0saShbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHYsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LGkoWixbMiw1XSksezk6NDcsMTI6MTIsMTM6RSwxNDpfLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSxpKFosWzIsN10pLGkoWixbMiw4XSksaShaLFsyLDE0XSksezEyOjQ4LDUwOlgsNTI6cHQsNTM6VX0sezE1OlsxLDQ5XX0sezU6WzEsNTBdfSx7NTpbMSw1M10sMTk6WzEsNTFdLDIwOlsxLDUyXX0sezIyOjU0LDcwOkN0fSx7MjI6NTUsNzA6Q3R9LHs1OlsxLDU2XX0sezU6WzEsNTddfSx7NTpbMSw1OF19LHs1OlsxLDU5XX0sezU6WzEsNjBdfSxpKFosWzIsMjldKSxpKFosWzIsMzBdKSx7MzI6WzEsNjFdfSx7MzQ6WzEsNjJdfSxpKFosWzIsMzNdKSx7MTU6WzEsNjNdfSx7MTU6WzEsNjRdfSx7MTU6WzEsNjVdfSx7MTU6WzEsNjZdfSx7MTU6WzEsNjddfSx7MTU6WzEsNjhdfSx7MTU6WzEsNjldfSx7MTU6WzEsNzBdfSx7MjI6NzEsNzA6Q3R9LHsyMjo3Miw3MDpDdH0sezIyOjczLDcwOkN0fSx7Njc6NzQsNzE6WzEsNzVdLDcyOlsxLDc2XSw3MzpbMSw3N10sNzQ6WzEsNzhdLDc1OlsxLDc5XSw3NjpbMSw4MF0sNzc6WzEsODFdLDc4OlsxLDgyXX0sezU1OjgzLDU3OlsxLDg0XSw2NTpbMSw4NV0sNjY6WzEsODZdfSx7MjI6ODcsNzA6Q3R9LHsyMjo4OCw3MDpDdH0sezIyOjg5LDcwOkN0fSx7MjI6OTAsNzA6Q3R9LGkoWzUsNTEsNjQsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzldLFsyLDY4XSksaShaLFsyLDZdKSxpKFosWzIsMTVdKSxpKFR0LFsyLDldLHsxMDo5MX0pLGkoWixbMiwxN10pLHs1OlsxLDkzXSwxOTpbMSw5Ml19LHs1OlsxLDk0XX0saShaLFsyLDIxXSksezU6WzEsOTVdfSx7NTpbMSw5Nl19LGkoWixbMiwyNF0pLGkoWixbMiwyNV0pLGkoWixbMiwyNl0pLGkoWixbMiwyN10pLGkoWixbMiwyOF0pLGkoWixbMiwzMV0pLGkoWixbMiwzMl0pLGkoSHQsdix7Nzo5N30pLGkoSHQsdix7Nzo5OH0pLGkoSHQsdix7Nzo5OX0pLGkoSXQsdix7NDA6MTAwLDc6MTAxfSksaShGdCx2LHs0MjoxMDIsNzoxMDN9KSxpKEZ0LHYsezc6MTAzLDQyOjEwNH0pLGkoa2Usdix7NDU6MTA1LDc6MTA2fSksaShIdCx2LHs3OjEwN30pLHs1OlsxLDEwOV0sNTE6WzEsMTA4XX0sezU6WzEsMTExXSw1MTpbMSwxMTBdfSx7NTpbMSwxMTJdfSx7MjI6MTE1LDY4OlsxLDExM10sNjk6WzEsMTE0XSw3MDpDdH0saShwbixbMiw2OV0pLGkocG4sWzIsNzBdKSxpKHBuLFsyLDcxXSksaShwbixbMiw3Ml0pLGkocG4sWzIsNzNdKSxpKHBuLFsyLDc0XSksaShwbixbMiw3NV0pLGkocG4sWzIsNzZdKSx7MjI6MTE2LDcwOkN0fSx7MjI6MTE4LDU4OjExNyw3MDpDdH0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjExOSw3OTpNZX0sezU2OjEyMSw3OTpNZX0sezU2OjEyMiw3OTpNZX0sezU2OjEyMyw3OTpNZX0sezQ6WzEsMTI2XSw1OlsxLDEyOF0sMTE6MTI1LDEyOjEyNywxNjpbMSwxMjRdLDUwOlgsNTI6cHQsNTM6VX0sezU6WzEsMTI5XX0saShaLFsyLDE5XSksaShaLFsyLDIwXSksaShaLFsyLDIyXSksaShaLFsyLDIzXSksezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsxLDEzMF0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxMzFdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTMyXSwxNzoxNSwxODpMLDIxOk4sMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpqLDMwOlIsMzE6eiwzMzpLLDM1Oml0LDM2OnN0LDM3OnV0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmR0LDQ0Omh0LDQ2Ond0LDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzM119LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMiw0Nl0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw0OTpbMSwxMzRdLDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzNV19LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMiw0NF0sMTc6MTUsMTg6TCwyMTpOLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6aiwzMDpSLDMxOnosMzM6SywzNTppdCwzNjpzdCwzNzp1dCwzODpidCwzOTptdCw0MTp5dCw0MzpkdCw0NDpodCw0Njp3dCw0ODpbMSwxMzZdLDUwOlgsNTI6cHQsNTM6VSw1NDp4dCw1OTpudCw2MDpPdCw2MTpOdCw2MjpxdCw3MDpDdH0sezE2OlsxLDEzN119LHsxNjpbMSwxMzhdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDJdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNDc6WzEsMTM5XSw1MDpYLDUyOnB0LDUzOlUsNTQ6eHQsNTk6bnQsNjA6T3QsNjE6TnQsNjI6cXQsNzA6Q3R9LHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxNDBdLDE3OjE1LDE4OkwsMjE6TiwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OmosMzA6UiwzMTp6LDMzOkssMzU6aXQsMzY6c3QsMzc6dXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZHQsNDQ6aHQsNDY6d3QsNTA6WCw1MjpwdCw1MzpVLDU0Onh0LDU5Om50LDYwOk90LDYxOk50LDYyOnF0LDcwOkN0fSx7MTU6WzEsMTQxXX0saShaLFsyLDQ5XSksezE1OlsxLDE0Ml19LGkoWixbMiw1MV0pLGkoWixbMiw1Ml0pLHsyMjoxNDMsNzA6Q3R9LHsyMjoxNDQsNzA6Q3R9LHs1NjoxNDUsNzk6TWV9LHs1NjoxNDYsNzk6TWV9LHs1NjoxNDcsNzk6TWV9LHs2NDpbMSwxNDhdLDc5OlsyLDYyXX0sezU6WzIsNTVdfSx7NTpbMiw3N119LHs1OlsyLDU2XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LGkoWixbMiwxNl0pLGkoVHQsWzIsMTBdKSx7MTI6MTQ5LDUwOlgsNTI6cHQsNTM6VX0saShUdCxbMiwxMl0pLGkoVHQsWzIsMTNdKSxpKFosWzIsMThdKSxpKFosWzIsMzRdKSxpKFosWzIsMzVdKSxpKFosWzIsMzZdKSxpKFosWzIsMzddKSx7MTU6WzEsMTUwXX0saShaLFsyLDM4XSksezE1OlsxLDE1MV19LGkoWixbMiwzOV0pLGkoWixbMiw0MF0pLHsxNTpbMSwxNTJdfSxpKFosWzIsNDFdKSx7NTpbMSwxNTNdfSx7NTpbMSwxNTRdfSx7NTY6MTU1LDc5Ok1lfSx7NTY6MTU2LDc5Ok1lfSx7NTpbMiw2N119LHs1OlsyLDUzXX0sezU6WzIsNTRdfSx7MjI6MTU3LDcwOkN0fSxpKFR0LFsyLDExXSksaShJdCx2LHs3OjEwMSw0MDoxNTh9KSxpKEZ0LHYsezc6MTAzLDQyOjE1OX0pLGkoa2Usdix7NzoxMDYsNDU6MTYwfSksaShaLFsyLDQ4XSksaShaLFsyLDUwXSksezU6WzIsNjVdfSx7NTpbMiw2Nl19LHs3OTpbMiw2MV19LHsxNjpbMiw0N119LHsxNjpbMiw0NV19LHsxNjpbMiw0M119XSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDg1OlsyLDYzXSw4NjpbMiw2NF0sMTE5OlsyLDU1XSwxMjA6WzIsNzddLDEyMTpbMiw1Nl0sMTIyOlsyLDU3XSwxMjM6WzIsNThdLDE0NTpbMiw2N10sMTQ2OlsyLDUzXSwxNDc6WzIsNTRdLDE1NTpbMiw2NV0sMTU2OlsyLDY2XSwxNTc6WzIsNjFdLDE1ODpbMiw0N10sMTU5OlsyLDQ1XSwxNjA6WzIsNDNdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKF9lLCR0KXtpZigkdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF9lKTtlbHNle3ZhciByZT1uZXcgRXJyb3IoX2UpO3Rocm93IHJlLmhhc2g9JHQscmV9fSxwYXJzZTpmdW5jdGlvbihfZSl7dmFyICR0PXRoaXMscmU9WzBdLGllPVtdLE9lPVtudWxsXSxvZT1bXSxOZT10aGlzLnRhYmxlLG1lPSIiLGNuPTAsbGk9MCx5YT0yLGRhPTEsT289b2Uuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksZHM9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxEcj17eXk6e319O2Zvcih2YXIgbnIgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxucikmJihEci55eVtucl09dGhpcy55eVtucl0pO2RzLnNldElucHV0KF9lLERyLnl5KSxEci55eS5sZXhlcj1kcyxEci55eS5wYXJzZXI9dGhpcyx0eXBlb2YgZHMueXlsbG9jPiJ1IiYmKGRzLnl5bGxvYz17fSk7dmFyIGRpPWRzLnl5bGxvYztvZS5wdXNoKGRpKTt2YXIgRWU9ZHMub3B0aW9ucyYmZHMub3B0aW9ucy5yYW5nZXM7dHlwZW9mIERyLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPURyLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFluKCl7dmFyICRzO3JldHVybiAkcz1pZS5wb3AoKXx8ZHMubGV4KCl8fGRhLHR5cGVvZiAkcyE9Im51bWJlciImJigkcyBpbnN0YW5jZW9mIEFycmF5JiYoaWU9JHMsJHM9aWUucG9wKCkpLCRzPSR0LnN5bWJvbHNfWyRzXXx8JHMpLCRzfWZvcih2YXIgSGUsVGksZ24sa3MscWE9e30sTGEsR3MsTm8sdnM7Oyl7aWYoVGk9cmVbcmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVGldP2duPXRoaXMuZGVmYXVsdEFjdGlvbnNbVGldOigoSGU9PT1udWxsfHx0eXBlb2YgSGU+InUiKSYmKEhlPVluKCkpLGduPU5lW1RpXSYmTmVbVGldW0hlXSksdHlwZW9mIGduPiJ1Inx8IWduLmxlbmd0aHx8IWduWzBdKXt2YXIgbnU9IiI7dnM9W107Zm9yKExhIGluIE5lW1RpXSl0aGlzLnRlcm1pbmFsc19bTGFdJiZMYT55YSYmdnMucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0xhXSsiJyIpO2RzLnNob3dQb3NpdGlvbj9udT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjbisxKStgOgpgK2RzLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArdnMuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tIZV18fEhlKSsiJyI6bnU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoY24rMSkrIjogVW5leHBlY3RlZCAiKyhIZT09ZGE/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bSGVdfHxIZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IobnUse3RleHQ6ZHMubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0hlXXx8SGUsbGluZTpkcy55eWxpbmVubyxsb2M6ZGksZXhwZWN0ZWQ6dnN9KX1pZihnblswXWluc3RhbmNlb2YgQXJyYXkmJmduLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVGkrIiwgdG9rZW46ICIrSGUpO3N3aXRjaChnblswXSl7Y2FzZSAxOnJlLnB1c2goSGUpLE9lLnB1c2goZHMueXl0ZXh0KSxvZS5wdXNoKGRzLnl5bGxvYykscmUucHVzaChnblsxXSksSGU9bnVsbCxsaT1kcy55eWxlbmcsbWU9ZHMueXl0ZXh0LGNuPWRzLnl5bGluZW5vLGRpPWRzLnl5bGxvYzticmVhaztjYXNlIDI6aWYoR3M9dGhpcy5wcm9kdWN0aW9uc19bZ25bMV1dWzFdLHFhLiQ9T2VbT2UubGVuZ3RoLUdzXSxxYS5fJD17Zmlyc3RfbGluZTpvZVtvZS5sZW5ndGgtKEdzfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6b2Vbb2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46b2Vbb2UubGVuZ3RoLShHc3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpvZVtvZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEVlJiYocWEuXyQucmFuZ2U9W29lW29lLmxlbmd0aC0oR3N8fDEpXS5yYW5nZVswXSxvZVtvZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxrcz10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocWEsW21lLGxpLGNuLERyLnl5LGduWzFdLE9lLG9lXS5jb25jYXQoT28pKSx0eXBlb2Yga3M8InUiKXJldHVybiBrcztHcyYmKHJlPXJlLnNsaWNlKDAsLTEqR3MqMiksT2U9T2Uuc2xpY2UoMCwtMSpHcyksb2U9b2Uuc2xpY2UoMCwtMSpHcykpLHJlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bZ25bMV1dWzBdKSxPZS5wdXNoKHFhLiQpLG9lLnB1c2gocWEuXyQpLE5vPU5lW3JlW3JlLmxlbmd0aC0yXV1bcmVbcmUubGVuZ3RoLTFdXSxyZS5wdXNoKE5vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sR2U9ZnVuY3Rpb24oKXt2YXIgd2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oJHQscmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoJHQscmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oX2UsJHQpe3JldHVybiB0aGlzLnl5PSR0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgX2U9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPV9lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fZSx0aGlzLm1hdGNoZWQrPV9lO3ZhciAkdD1fZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuICR0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxfZX0sdW5wdXQ6ZnVuY3Rpb24oX2Upe3ZhciAkdD1fZS5sZW5ndGgscmU9X2Uuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtJHQpLHRoaXMub2Zmc2V0LT0kdDt2YXIgaWU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkscmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1yZS5sZW5ndGgtMSk7dmFyIE9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpyZT8ocmUubGVuZ3RoPT09aWUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStpZVtpZS5sZW5ndGgtcmUubGVuZ3RoXS5sZW5ndGgtcmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi0kdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtPZVswXSxPZVswXSt0aGlzLnl5bGVuZy0kdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKF9lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoX2UpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIF9lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oX2UubGVuZ3RoPjIwPyIuLi4iOiIiKStfZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBfZT10aGlzLm1hdGNoO3JldHVybiBfZS5sZW5ndGg8MjAmJihfZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtX2UubGVuZ3RoKSksKF9lLnN1YnN0cigwLDIwKSsoX2UubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBfZT10aGlzLnBhc3RJbnB1dCgpLCR0PW5ldyBBcnJheShfZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArJHQrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKF9lLCR0KXt2YXIgcmUsaWUsT2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKE9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKE9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGllPV9lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxpZSYmKHRoaXMueXlsaW5lbm8rPWllLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmllP2llW2llLmxlbmd0aC0xXS5sZW5ndGgtaWVbaWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX2VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9X2VbMF0sdGhpcy5tYXRjaCs9X2VbMF0sdGhpcy5tYXRjaGVzPV9lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKF9lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fZVswXSxyZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcywkdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxyZSlyZXR1cm4gcmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG9lIGluIE9lKXRoaXNbb2VdPU9lW29lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfZSwkdCxyZSxpZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBPZT10aGlzLl9jdXJyZW50UnVsZXMoKSxvZT0wO29lPE9lLmxlbmd0aDtvZSsrKWlmKHJlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbT2Vbb2VdXSkscmUmJighJHR8fHJlWzBdLmxlbmd0aD4kdFswXS5sZW5ndGgpKXtpZigkdD1yZSxpZT1vZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfZT10aGlzLnRlc3RfbWF0Y2gocmUsT2Vbb2VdKSxfZSE9PSExKXJldHVybiBfZTtpZih0aGlzLl9iYWNrdHJhY2speyR0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuICR0PyhfZT10aGlzLnRlc3RfbWF0Y2goJHQsT2VbaWVdKSxfZSE9PSExP19lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5uZXh0KCk7cmV0dXJuICR0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbigkdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKCR0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gJHQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbigkdCl7cmV0dXJuICR0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoJHR8fDApLCR0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbJHRdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKCR0KXt0aGlzLmJlZ2luKCR0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbigkdCxyZSxpZSxPZSl7c3dpdGNoKGllKXtjYXNlIDA6cmV0dXJuIDU7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpicmVhaztjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDE5O2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDE0O2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MDtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTI7Y2FzZSAxMDpyZXR1cm4gMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MztjYXNlIDEyOnJldHVybiByZS55eXRleHQ9cmUueXl0ZXh0LnRyaW0oKSx0aGlzLmJlZ2luKCJBTElBUyIpLDcwO2Nhc2UgMTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiTElORSIpLDUxO2Nhc2UgMTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNTtjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM3O2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzODtjYXNlIDE4OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzk7Y2FzZSAxOTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ5O2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MTtjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDM7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ4O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NDtjYXNlIDI0OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDc7Y2FzZSAyNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ2O2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNTtjYXNlIDI3OnJldHVybiAxNjtjYXNlIDI4OnJldHVybiA2NTtjYXNlIDI5OnJldHVybiA2NjtjYXNlIDMwOnJldHVybiA1OTtjYXNlIDMxOnJldHVybiA2MDtjYXNlIDMyOnJldHVybiA2MTtjYXNlIDMzOnJldHVybiA2MjtjYXNlIDM0OnJldHVybiA1NztjYXNlIDM1OnJldHVybiA1NDtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIxO2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzODpyZXR1cm4gMjk7Y2FzZSAzOTpyZXR1cm4gMzA7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDQ1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDQ3OnJldHVybiA2O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDIwO2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDU7Y2FzZSA1MjpyZXR1cm4gcmUueXl0ZXh0PXJlLnl5dGV4dC50cmltKCksNzA7Y2FzZSA1MzpyZXR1cm4gNzM7Y2FzZSA1NDpyZXR1cm4gNzQ7Y2FzZSA1NTpyZXR1cm4gNzE7Y2FzZSA1NjpyZXR1cm4gNzI7Y2FzZSA1NzpyZXR1cm4gNzU7Y2FzZSA1ODpyZXR1cm4gNzY7Y2FzZSA1OTpyZXR1cm4gNzc7Y2FzZSA2MDpyZXR1cm4gNzg7Y2FzZSA2MTpyZXR1cm4gNzk7Y2FzZSA2MjpyZXR1cm4gNjg7Y2FzZSA2MzpyZXR1cm4gNjk7Y2FzZSA2NDpyZXR1cm4gNTtjYXNlIDY1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbMC05XSsoPz1bIFxuXSspKS9pLC9eKD86Ym94XGIpL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OmNyZWF0ZVxiKS9pLC9eKD86ZGVzdHJveVxiKS9pLC9eKD86W15cLT46XG4sO10rPyhbXC1dKlteXC0+OlxuLDtdKz8pKj8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzpwYXJfb3ZlclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzpjcml0aWNhbFxiKS9pLC9eKD86b3B0aW9uXGIpL2ksL14oPzpicmVha1xiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OmxpbmtzXGIpL2ksL14oPzpsaW5rXGIpL2ksL14oPzpwcm9wZXJ0aWVzXGIpL2ksL14oPzpkZXRhaWxzXGIpL2ksL14oPzpvdmVyXGIpL2ksL14oPzpub3RlXGIpL2ksL14oPzphY3RpdmF0ZVxiKS9pLC9eKD86ZGVhY3RpdmF0ZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86dGl0bGU6XHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzpvZmZcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls0NSw0Nl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0M10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls0MV0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzIsMywxMl0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6WzIsMywxMywxNF0saW5jbHVzaXZlOiExfSxMSU5FOntydWxlczpbMiwzLDI2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw0LDUsNiw3LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0Miw0NCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiB3ZX0oKTt2ZS5sZXhlcj1HZTtmdW5jdGlvbiBLZSgpe3RoaXMueXk9e319cmV0dXJuIEtlLnByb3RvdHlwZT12ZSx2ZS5QYXJzZXI9S2UsbmV3IEtlfSgpO3NndC5wYXJzZXI9c2d0O2NvbnN0IGVIZT1zZ3Q7bGV0IERQLEk1PXt9LGFndD17fSxvZ3Q9e30sY0w9W10sQmI9W10sU0s9ITEsY2d0LEQ1LE9QLHVMO2NvbnN0IG5IZT1mdW5jdGlvbihpKXtjTC5wdXNoKHtuYW1lOmkudGV4dCx3cmFwOmkud3JhcD09PXZvaWQgMCYma1QoKXx8ISFpLndyYXAsZmlsbDppLmNvbG9yLGFjdG9yS2V5czpbXX0pLEQ1PWNMLnNsaWNlKC0xKVswXX0sdWd0PWZ1bmN0aW9uKGksYSxmLHApe2xldCB2PUQ1O2NvbnN0IG09STVbaV07aWYobSl7aWYoRDUmJm0uYm94JiZENSE9PW0uYm94KXRocm93IG5ldyBFcnJvcigiQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogIittLm5hbWUrIiBjYW4ndCBiZSBpbiAnIittLmJveC5uYW1lKyInIGFuZCBpbiAnIitENS5uYW1lKyInIGF0IHRoZSBzYW1lIHRpbWUuIik7aWYodj1tLmJveD9tLmJveDpENSxtLmJveD12LG0mJmE9PT1tLm5hbWUmJmY9PW51bGwpcmV0dXJufShmPT1udWxsfHxmLnRleHQ9PW51bGwpJiYoZj17dGV4dDphLHdyYXA6bnVsbCx0eXBlOnB9KSwocD09bnVsbHx8Zi50ZXh0PT1udWxsKSYmKGY9e3RleHQ6YSx3cmFwOm51bGwsdHlwZTpwfSksSTVbaV09e2JveDp2LG5hbWU6YSxkZXNjcmlwdGlvbjpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLHByZXZBY3RvcjpEUCxsaW5rczp7fSxwcm9wZXJ0aWVzOnt9LGFjdG9yQ250Om51bGwscmVjdERhdGE6bnVsbCx0eXBlOnB8fCJwYXJ0aWNpcGFudCJ9LERQJiZJNVtEUF0mJihJNVtEUF0ubmV4dEFjdG9yPWkpLEQ1JiZENS5hY3RvcktleXMucHVzaChpKSxEUD1pfSxySGU9aT0+e2xldCBhLGY9MDtmb3IoYT0wO2E8QmIubGVuZ3RoO2ErKylCYlthXS50eXBlPT09UFAuQUNUSVZFX1NUQVJUJiZCYlthXS5mcm9tLmFjdG9yPT09aSYmZisrLEJiW2FdLnR5cGU9PT1QUC5BQ1RJVkVfRU5EJiZCYlthXS5mcm9tLmFjdG9yPT09aSYmZi0tO3JldHVybiBmfSxpSGU9ZnVuY3Rpb24oaSxhLGYscCl7QmIucHVzaCh7ZnJvbTppLHRvOmEsbWVzc2FnZTpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLGFuc3dlcjpwfSl9LFpoPWZ1bmN0aW9uKGksYSxmPXt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scCx2PSExKXtpZihwPT09UFAuQUNUSVZFX0VORCYmckhlKGkuYWN0b3IpPDEpe2xldCBiPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IGIuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYn1yZXR1cm4gQmIucHVzaCh7ZnJvbTppLHRvOmEsbWVzc2FnZTpmLnRleHQsd3JhcDpmLndyYXA9PT12b2lkIDAmJmtUKCl8fCEhZi53cmFwLHR5cGU6cCxhY3RpdmF0ZTp2fSksITB9LHNIZT1mdW5jdGlvbigpe3JldHVybiBjTC5sZW5ndGg+MH0sYUhlPWZ1bmN0aW9uKCl7cmV0dXJuIGNMLnNvbWUoaT0+aS5uYW1lKX0sb0hlPWZ1bmN0aW9uKCl7cmV0dXJuIEJifSxjSGU9ZnVuY3Rpb24oKXtyZXR1cm4gY0x9LHVIZT1mdW5jdGlvbigpe3JldHVybiBJNX0sbEhlPWZ1bmN0aW9uKCl7cmV0dXJuIGFndH0saEhlPWZ1bmN0aW9uKCl7cmV0dXJuIG9ndH0sTlA9ZnVuY3Rpb24oaSl7cmV0dXJuIEk1W2ldfSxmSGU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSTUpfSxkSGU9ZnVuY3Rpb24oKXtTSz0hMH0sZ0hlPWZ1bmN0aW9uKCl7U0s9ITF9LHBIZT0oKT0+U0ssYkhlPWZ1bmN0aW9uKGkpe2NndD1pfSxrVD0oKT0+Y2d0IT09dm9pZCAwP2NndDpMZSgpLnNlcXVlbmNlLndyYXAsdkhlPWZ1bmN0aW9uKCl7STU9e30sYWd0PXt9LG9ndD17fSxjTD1bXSxCYj1bXSxTSz0hMSxhcCgpfSx3SGU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnRyaW0oKSxmPXt0ZXh0OmEucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6YS5tYXRjaCgvXjo/d3JhcDovKSE9PW51bGw/ITA6YS5tYXRjaCgvXjo/bm93cmFwOi8pIT09bnVsbD8hMTp2b2lkIDB9O3JldHVybiBVdC5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsZiksZn0sbUhlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9aS5tYXRjaCgvXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLyk7bGV0IGY9YSE9bnVsbCYmYVsxXT9hWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLHA9YSE9bnVsbCYmYVsyXT9hWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93JiZ3aW5kb3cuQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixmKXx8KGY9InRyYW5zcGFyZW50IixwPWkudHJpbSgpKTtlbHNle2NvbnN0IG09bmV3IE9wdGlvbigpLnN0eWxlO20uY29sb3I9ZixtLmNvbG9yIT09ZiYmKGY9InRyYW5zcGFyZW50IixwPWkudHJpbSgpKX1yZXR1cm57Y29sb3I6Zix0ZXh0OnAhPT12b2lkIDA/RGQocC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSxMZSgpKTp2b2lkIDAsd3JhcDpwIT09dm9pZCAwP3AubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOnAubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwOnZvaWQgMH19LFBQPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyfSx5SGU9e0ZJTExFRDowLE9QRU46MX0seEhlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxoUnQ9ZnVuY3Rpb24oaSxhLGYpe2YudGV4dCxmLndyYXA9PT12b2lkIDAmJmtUKCl8fGYud3JhcDtjb25zdCBwPVtdLmNvbmNhdChpLGkpO0JiLnB1c2goe2Zyb206cFswXSx0bzpwWzFdLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZrVCgpfHwhIWYud3JhcCx0eXBlOlBQLk5PVEUscGxhY2VtZW50OmF9KX0sZlJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1OUChpKTt0cnl7bGV0IHA9RGQoYS50ZXh0LExlKCkpO3A9cC5yZXBsYWNlKC8mYW1wOy9nLCImIikscD1wLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtjb25zdCB2PUpTT04ucGFyc2UocCk7bGd0KGYsdil9Y2F0Y2gocCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixwKX19LGtIZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9TlAoaSk7dHJ5e2NvbnN0IGI9e307bGV0IEU9RGQoYS50ZXh0LExlKCkpO3ZhciBwPUUuaW5kZXhPZigiQCIpO0U9RS5yZXBsYWNlKC8mYW1wOy9nLCImIiksRT1FLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTt2YXIgdj1FLnNsaWNlKDAscC0xKS50cmltKCksbT1FLnNsaWNlKHArMSkudHJpbSgpO2Jbdl09bSxsZ3QoZixiKX1jYXRjaChiKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGIpfX07ZnVuY3Rpb24gbGd0KGksYSl7aWYoaS5saW5rcz09bnVsbClpLmxpbmtzPWE7ZWxzZSBmb3IobGV0IGYgaW4gYSlpLmxpbmtzW2ZdPWFbZl19Y29uc3QgZFJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1OUChpKTt0cnl7bGV0IHA9RGQoYS50ZXh0LExlKCkpO2NvbnN0IHY9SlNPTi5wYXJzZShwKTtnUnQoZix2KX1jYXRjaChwKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLHApfX07ZnVuY3Rpb24gZ1J0KGksYSl7aWYoaS5wcm9wZXJ0aWVzPT1udWxsKWkucHJvcGVydGllcz1hO2Vsc2UgZm9yKGxldCBmIGluIGEpaS5wcm9wZXJ0aWVzW2ZdPWFbZl19ZnVuY3Rpb24gRUhlKCl7RDU9dm9pZCAwfWNvbnN0IHBSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9TlAoaSkscD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLnRleHQpO3RyeXtjb25zdCB2PXAuaW5uZXJIVE1MLG09SlNPTi5wYXJzZSh2KTttLnByb3BlcnRpZXMmJmdSdChmLG0ucHJvcGVydGllcyksbS5saW5rcyYmbGd0KGYsbS5saW5rcyl9Y2F0Y2godil7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0Iix2KX19LFRIZT1mdW5jdGlvbihpLGEpe2lmKGkhPT12b2lkIDAmJmkucHJvcGVydGllcyE9PXZvaWQgMClyZXR1cm4gaS5wcm9wZXJ0aWVzW2FdfSxiUnQ9ZnVuY3Rpb24oaSl7aWYoQXJyYXkuaXNBcnJheShpKSlpLmZvckVhY2goZnVuY3Rpb24oYSl7YlJ0KGEpfSk7ZWxzZSBzd2l0Y2goaS50eXBlKXtjYXNlInNlcXVlbmNlSW5kZXgiOkJiLnB1c2goe2Zyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDppLnNlcXVlbmNlSW5kZXgsc3RlcDppLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6aS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTppLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp1Z3QoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZihJNVtpLmFjdG9yXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGFjdG9ycyB3aXRoIHRoZSBzYW1lIGlkLCBldmVuIGlmIG9uZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIGNyZWF0ZWQuIFVzZSAnQVMnIGFsaWFzZXMgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIik7T1A9aS5hY3Rvcix1Z3QoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KSxhZ3RbaS5hY3Rvcl09QmIubGVuZ3RoO2JyZWFrO2Nhc2UiZGVzdHJveVBhcnRpY2lwYW50Ijp1TD1pLmFjdG9yLG9ndFtpLmFjdG9yXT1CYi5sZW5ndGg7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6WmgoaS5hY3Rvcix2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOlpoKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6aFJ0KGkuYWN0b3IsaS5wbGFjZW1lbnQsaS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpmUnQoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOmtIZShpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpkUnQoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6cFJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKE9QKXtpZihpLnRvIT09T1ApdGhyb3cgbmV3IEVycm9yKCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCAiK09QKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7T1A9dm9pZCAwfWVsc2UgaWYodUwpe2lmKGkudG8hPT11TCYmaS5mcm9tIT09dUwpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50ICIrdUwrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO3VMPXZvaWQgMH1aaChpLmZyb20saS50byxpLm1zZyxpLnNpZ25hbFR5cGUsaS5hY3RpdmF0ZSk7YnJlYWs7Y2FzZSJib3hTdGFydCI6bkhlKGkuYm94RGF0YSk7YnJlYWs7Y2FzZSJib3hFbmQiOkVIZSgpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0IjpaaCh2b2lkIDAsdm9pZCAwLGkubG9vcFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOlpoKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0U3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5jb2xvcixpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdEVuZCI6Wmgodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdFN0YXJ0IjpaaCh2b2lkIDAsdm9pZCAwLGkub3B0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0RW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0U3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5hbHRUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJlbHNlIjpaaCh2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0QWNjVGl0bGUiOmNnKGkudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6Wmgodm9pZCAwLHZvaWQgMCxpLnBhclRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFuZCI6Wmgodm9pZCAwLHZvaWQgMCxpLnBhclRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6Wmgodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsU3RhcnQiOlpoKHZvaWQgMCx2b2lkIDAsaS5jcml0aWNhbFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdGlvbiI6Wmgodm9pZCAwLHZvaWQgMCxpLm9wdGlvblRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsRW5kIjpaaCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtTdGFydCI6Wmgodm9pZCAwLHZvaWQgMCxpLmJyZWFrVGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtFbmQiOlpoKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWt9fSx2UnQ9e2FkZEFjdG9yOnVndCxhZGRNZXNzYWdlOmlIZSxhZGRTaWduYWw6WmgsYWRkTGlua3M6ZlJ0LGFkZERldGFpbHM6cFJ0LGFkZFByb3BlcnRpZXM6ZFJ0LGF1dG9XcmFwOmtULHNldFdyYXA6YkhlLGVuYWJsZVNlcXVlbmNlTnVtYmVyczpkSGUsZGlzYWJsZVNlcXVlbmNlTnVtYmVyczpnSGUsc2hvd1NlcXVlbmNlTnVtYmVyczpwSGUsZ2V0TWVzc2FnZXM6b0hlLGdldEFjdG9yczp1SGUsZ2V0Q3JlYXRlZEFjdG9yczpsSGUsZ2V0RGVzdHJveWVkQWN0b3JzOmhIZSxnZXRBY3RvcjpOUCxnZXRBY3RvcktleXM6ZkhlLGdldEFjdG9yUHJvcGVydHk6VEhlLGdldEFjY1RpdGxlOm9wLGdldEJveGVzOmNIZSxnZXREaWFncmFtVGl0bGU6RGIsc2V0RGlhZ3JhbVRpdGxlOloyLGdldENvbmZpZzooKT0+TGUoKS5zZXF1ZW5jZSxjbGVhcjp2SGUscGFyc2VNZXNzYWdlOndIZSxwYXJzZUJveERhdGE6bUhlLExJTkVUWVBFOlBQLEFSUk9XVFlQRTp5SGUsUExBQ0VNRU5UOnhIZSxhZGROb3RlOmhSdCxzZXRBY2NUaXRsZTpjZyxhcHBseTpiUnQsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsaGFzQXRMZWFzdE9uZUJveDpzSGUsaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZTphSGV9LENIZT1pPT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHtpLmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHtpLmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke2kuc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke2kuc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7aS5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHtpLmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLEVUPTE4KjIsaGd0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIEhXKGksYSl9LHdSdD0oaSxhKT0+e1dTZSgoKT0+e2NvbnN0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKTtmLmxlbmd0aCE9PTAmJihmWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtMSGUoImFjdG9yIithKyJfcG9wdXAiKX0pLGZbMF0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7TUhlKCJhY3RvciIrYSsiX3BvcHVwIil9KSl9KX0sX0hlPWZ1bmN0aW9uKGksYSxmLHAsdil7aWYoYS5saW5rcz09PXZvaWQgMHx8YS5saW5rcz09PW51bGx8fE9iamVjdC5rZXlzKGEubGlua3MpLmxlbmd0aD09PTApcmV0dXJue2hlaWdodDowLHdpZHRoOjB9O2NvbnN0IG09YS5saW5rcyxiPWEuYWN0b3JDbnQsRT1hLnJlY3REYXRhO3ZhciBfPSJub25lIjt2JiYoXz0iYmxvY2sgIWltcG9ydGFudCIpO2NvbnN0IEw9aS5hcHBlbmQoImciKTtMLmF0dHIoImlkIiwiYWN0b3IiK2IrIl9wb3B1cCIpLEwuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLEwuYXR0cigiZGlzcGxheSIsXyksd1J0KCIjYWN0b3IiK2IrIl9wb3B1cCIsYik7dmFyIE49IiI7RS5jbGFzcyE9PXZvaWQgMCYmKE49IiAiK0UuY2xhc3MpO2xldCBCPUUud2lkdGg+Zj9FLndpZHRoOmY7Y29uc3Qgaj1MLmFwcGVuZCgicmVjdCIpO2lmKGouYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitOKSxqLmF0dHIoIngiLEUueCksai5hdHRyKCJ5IixFLmhlaWdodCksai5hdHRyKCJmaWxsIixFLmZpbGwpLGouYXR0cigic3Ryb2tlIixFLnN0cm9rZSksai5hdHRyKCJ3aWR0aCIsQiksai5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KSxqLmF0dHIoInJ4IixFLnJ4KSxqLmF0dHIoInJ5IixFLnJ5KSxtIT1udWxsKXt2YXIgUj0yMDtmb3IobGV0IGl0IGluIG0pe3ZhciB6PUwuYXBwZW5kKCJhIiksSz1RNihtW2l0XSk7ei5hdHRyKCJ4bGluazpocmVmIixLKSx6LmF0dHIoInRhcmdldCIsIl9ibGFuayIpLFVIZShwKShpdCx6LEUueCsxMCxFLmhlaWdodCtSLEIsMjAse2NsYXNzOiJhY3RvciJ9LHApLFIrPTMwfX1yZXR1cm4gai5hdHRyKCJoZWlnaHQiLFIpLHtoZWlnaHQ6RS5oZWlnaHQrUix3aWR0aDpCfX0sU0hlPWZ1bmN0aW9uKGkpe3JldHVybiJ2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIitpKyInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0ifSxBSGU9ZnVuY3Rpb24oaSl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK2krIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9In0sTEhlPWZ1bmN0aW9uKGkpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGkpO2EhPW51bGwmJihhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9LE1IZT1mdW5jdGlvbihpKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTthIT1udWxsJiYoYS5zdHlsZS5kaXNwbGF5PSJub25lIil9LGxMPWZ1bmN0aW9uKGksYSl7bGV0IGY9MCxwPTA7Y29uc3Qgdj1hLnRleHQuc3BsaXQoWXIubGluZUJyZWFrUmVnZXgpLFttLGJdPSRBKGEuZm9udFNpemUpO2xldCBFPVtdLF89MCxMPSgpPT5hLnk7aWYoYS52YWxpZ24hPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luPjApc3dpdGNoKGEudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6TD0oKT0+TWF0aC5yb3VuZChhLnkrYS50ZXh0TWFyZ2luKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOkw9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArYS50ZXh0TWFyZ2luKS8yKTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOkw9KCk9Pk1hdGgucm91bmQoYS55KyhmK3ArMiphLnRleHRNYXJnaW4pLWEudGV4dE1hcmdpbik7YnJlYWt9aWYoYS5hbmNob3IhPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS53aWR0aCE9PXZvaWQgMClzd2l0Y2goYS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6YS54PU1hdGgucm91bmQoYS54K2EudGV4dE1hcmdpbiksYS5hbmNob3I9InN0YXJ0IixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmEueD1NYXRoLnJvdW5kKGEueCthLndpZHRoLzIpLGEuYW5jaG9yPSJtaWRkbGUiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjphLng9TWF0aC5yb3VuZChhLngrYS53aWR0aC1hLnRleHRNYXJnaW4pLGEuYW5jaG9yPSJlbmQiLGEuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixhLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbTixCXW9mIHYuZW50cmllcygpKXthLnRleHRNYXJnaW4hPT12b2lkIDAmJmEudGV4dE1hcmdpbj09PTAmJm0hPT12b2lkIDAmJihfPU4qbSk7Y29uc3Qgaj1pLmFwcGVuZCgidGV4dCIpO2ouYXR0cigieCIsYS54KSxqLmF0dHIoInkiLEwoKSksYS5hbmNob3IhPT12b2lkIDAmJmouYXR0cigidGV4dC1hbmNob3IiLGEuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsYS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGEuYWxpZ25tZW50QmFzZWxpbmUpLGEuZm9udEZhbWlseSE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1mYW1pbHkiLGEuZm9udEZhbWlseSksYiE9PXZvaWQgMCYmai5zdHlsZSgiZm9udC1zaXplIixiKSxhLmZvbnRXZWlnaHQhPT12b2lkIDAmJmouc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLGEuZmlsbCE9PXZvaWQgMCYmai5hdHRyKCJmaWxsIixhLmZpbGwpLGEuY2xhc3MhPT12b2lkIDAmJmouYXR0cigiY2xhc3MiLGEuY2xhc3MpLGEuZHkhPT12b2lkIDA/ai5hdHRyKCJkeSIsYS5keSk6XyE9PTAmJmouYXR0cigiZHkiLF8pO2NvbnN0IFI9Qnx8UkR0O2lmKGEudHNwYW4pe2NvbnN0IHo9ai5hcHBlbmQoInRzcGFuIik7ei5hdHRyKCJ4IixhLngpLGEuZmlsbCE9PXZvaWQgMCYmei5hdHRyKCJmaWxsIixhLmZpbGwpLHoudGV4dChSKX1lbHNlIGoudGV4dChSKTthLnZhbGlnbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luIT09dm9pZCAwJiZhLnRleHRNYXJnaW4+MCYmKHArPShqLl9ncm91cHN8fGopWzBdWzBdLmdldEJCb3goKS5oZWlnaHQsZj1wKSxFLnB1c2goail9cmV0dXJuIEV9LG1SdD1mdW5jdGlvbihpLGEpe2Z1bmN0aW9uIGYodixtLGIsRSxfKXtyZXR1cm4gdisiLCIrbSsiICIrKHYrYikrIiwiK20rIiAiKyh2K2IpKyIsIisobStFLV8pKyIgIisoditiLV8qMS4yKSsiLCIrKG0rRSkrIiAiK3YrIiwiKyhtK0UpfWNvbnN0IHA9aS5hcHBlbmQoInBvbHlnb24iKTtyZXR1cm4gcC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0LDcpKSxwLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxhLnk9YS55K2EuaGVpZ2h0LzIsbEwoaSxhKSxwfTtsZXQgaG09LTE7Y29uc3QgeVJ0PShpLGEsZixwKT0+e2kuc2VsZWN0JiZmLmZvckVhY2godj0+e2NvbnN0IG09YVt2XSxiPWkuc2VsZWN0KCIjYWN0b3IiK20uYWN0b3JDbnQpOyFwLm1pcnJvckFjdG9ycyYmbS5zdG9weT9iLmF0dHIoInkyIixtLnN0b3B5K20uaGVpZ2h0LzIpOnAubWlycm9yQWN0b3JzJiZiLmF0dHIoInkyIixtLnN0b3B5KX0pfSxJSGU9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1wP2Euc3RvcHk6YS5zdGFydHksbT1hLngrYS53aWR0aC8yLGI9dis1LEU9aS5hcHBlbmQoImciKS5sb3dlcigpO3ZhciBfPUU7cHx8KGhtKyssXy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxfPUUuYXBwZW5kKCJnIiksYS5hY3RvckNudD1obSxhLmxpbmtzIT1udWxsJiYoXy5hdHRyKCJpZCIsInJvb3QtIitobSksd1J0KCIjcm9vdC0iK2htLGhtKSkpO2NvbnN0IEw9ZlQoKTt2YXIgTj0iYWN0b3IiO2EucHJvcGVydGllcyE9bnVsbCYmYS5wcm9wZXJ0aWVzLmNsYXNzP049YS5wcm9wZXJ0aWVzLmNsYXNzOkwuZmlsbD0iI2VhZWFlYSIsTC54PWEueCxMLnk9dixMLndpZHRoPWEud2lkdGgsTC5oZWlnaHQ9YS5oZWlnaHQsTC5jbGFzcz1OLEwucng9MyxMLnJ5PTM7Y29uc3QgQj1oZ3QoXyxMKTtpZihhLnJlY3REYXRhPUwsYS5wcm9wZXJ0aWVzIT1udWxsJiZhLnByb3BlcnRpZXMuaWNvbil7Y29uc3QgUj1hLnByb3BlcnRpZXMuaWNvbi50cmltKCk7Ui5jaGFyQXQoMCk9PT0iQCI/cEllKF8sTC54K0wud2lkdGgtMjAsTC55KzEwLFIuc3Vic3RyKDEpKTpnSWUoXyxMLngrTC53aWR0aC0yMCxMLnkrMTAsUil9Zmd0KGYpKGEuZGVzY3JpcHRpb24sXyxMLngsTC55LEwud2lkdGgsTC5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpO2xldCBqPWEuaGVpZ2h0O2lmKEIubm9kZSl7Y29uc3QgUj1CLm5vZGUoKS5nZXRCQm94KCk7YS5oZWlnaHQ9Ui5oZWlnaHQsaj1SLmhlaWdodH1yZXR1cm4gan0sREhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9cD9hLnN0b3B5OmEuc3RhcnR5LG09YS54K2Eud2lkdGgvMixiPXYrODA7aS5sb3dlcigpLHB8fChobSsrLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIraG0pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsYikuYXR0cigieDIiLG0pLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoImNsYXNzIiwiMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksYS5hY3RvckNudD1obSk7Y29uc3QgRT1pLmFwcGVuZCgiZyIpO0UuYXR0cigiY2xhc3MiLCJhY3Rvci1tYW4iKTtjb25zdCBfPWZUKCk7Xy54PWEueCxfLnk9dixfLmZpbGw9IiNlYWVhZWEiLF8ud2lkdGg9YS53aWR0aCxfLmhlaWdodD1hLmhlaWdodCxfLmNsYXNzPSJhY3RvciIsXy5yeD0zLF8ucnk9MyxFLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitobSkuYXR0cigieDEiLG0pLmF0dHIoInkxIix2KzI1KS5hdHRyKCJ4MiIsbSkuYXR0cigieTIiLHYrNDUpLEUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIraG0pLmF0dHIoIngxIixtLUVULzIpLmF0dHIoInkxIix2KzMzKS5hdHRyKCJ4MiIsbStFVC8yKS5hdHRyKCJ5MiIsdiszMyksRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbS1FVC8yKS5hdHRyKCJ5MSIsdis2MCkuYXR0cigieDIiLG0pLmF0dHIoInkyIix2KzQ1KSxFLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsdis0NSkuYXR0cigieDIiLG0rRVQvMi0yKS5hdHRyKCJ5MiIsdis2MCk7Y29uc3QgTD1FLmFwcGVuZCgiY2lyY2xlIik7TC5hdHRyKCJjeCIsYS54K2Eud2lkdGgvMiksTC5hdHRyKCJjeSIsdisxMCksTC5hdHRyKCJyIiwxNSksTC5hdHRyKCJ3aWR0aCIsYS53aWR0aCksTC5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtjb25zdCBOPUUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Ti5oZWlnaHQsZmd0KGYpKGEuZGVzY3JpcHRpb24sRSxfLngsXy55KzM1LF8ud2lkdGgsXy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LGYpLGEuaGVpZ2h0fSxPSGU9ZnVuY3Rpb24oaSxhLGYscCl7c3dpdGNoKGEudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIERIZShpLGEsZixwKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gSUhlKGksYSxmLHApfX0sTkhlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCB2PWkuYXBwZW5kKCJnIik7eFJ0KHYsYSksYS5uYW1lJiZmZ3QoZikoYS5uYW1lLHYsYS54LGEueSsoYS50ZXh0TWF4SGVpZ2h0fHwwKS8yLGEud2lkdGgsMCx7Y2xhc3M6InRleHQifSxmKSx2Lmxvd2VyKCl9LFBIZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sRkhlPWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT1mVCgpLGI9YS5hbmNob3JlZDttLng9YS5zdGFydHgsbS55PWEuc3RhcnR5LG0uY2xhc3M9ImFjdGl2YXRpb24iK3YlMyxtLndpZHRoPWEuc3RvcHgtYS5zdGFydHgsbS5oZWlnaHQ9Zi1hLnN0YXJ0eSxoZ3QoYixtKX0sQkhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e2JveE1hcmdpbjp2LGJveFRleHRNYXJnaW46bSxsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6RSxtZXNzYWdlRm9udEZhbWlseTpfLG1lc3NhZ2VGb250U2l6ZTpMLG1lc3NhZ2VGb250V2VpZ2h0Ok59PXAsQj1pLmFwcGVuZCgiZyIpLGo9ZnVuY3Rpb24oSyxpdCxzdCx1dCl7cmV0dXJuIEIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEspLmF0dHIoInkxIixpdCkuYXR0cigieDIiLHN0KS5hdHRyKCJ5MiIsdXQpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07aihhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RhcnR5KSxqKGEuc3RvcHgsYS5zdGFydHksYS5zdG9weCxhLnN0b3B5KSxqKGEuc3RhcnR4LGEuc3RvcHksYS5zdG9weCxhLnN0b3B5KSxqKGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RhcnR4LGEuc3RvcHkpLGEuc2VjdGlvbnMhPT12b2lkIDAmJmEuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihLKXtqKGEuc3RhcnR4LEsueSxhLnN0b3B4LEsueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgUj1QZHQoKTtSLnRleHQ9ZixSLng9YS5zdGFydHgsUi55PWEuc3RhcnR5LFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9TCxSLmZvbnRXZWlnaHQ9TixSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRzcGFuPSExLFIud2lkdGg9RXx8NTAsUi5oZWlnaHQ9Ynx8MjAsUi50ZXh0TWFyZ2luPW0sUi5jbGFzcz0ibGFiZWxUZXh0IixtUnQoQixSKSxSPWtSdCgpLFIudGV4dD1hLnRpdGxlLFIueD1hLnN0YXJ0eCtFLzIrKGEuc3RvcHgtYS5zdGFydHgpLzIsUi55PWEuc3RhcnR5K3YrbSxSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRleHRNYXJnaW49bSxSLmNsYXNzPSJsb29wVGV4dCIsUi5mb250RmFtaWx5PV8sUi5mb250U2l6ZT1MLFIuZm9udFdlaWdodD1OLFIud3JhcD0hMDtsZXQgej1sTChCLFIpO3JldHVybiBhLnNlY3Rpb25UaXRsZXMhPT12b2lkIDAmJmEuc2VjdGlvblRpdGxlcy5mb3JFYWNoKGZ1bmN0aW9uKEssaXQpe2lmKEsubWVzc2FnZSl7Ui50ZXh0PUsubWVzc2FnZSxSLng9YS5zdGFydHgrKGEuc3RvcHgtYS5zdGFydHgpLzIsUi55PWEuc2VjdGlvbnNbaXRdLnkrdittLFIuY2xhc3M9Imxvb3BUZXh0IixSLmFuY2hvcj0ibWlkZGxlIixSLnZhbGlnbj0ibWlkZGxlIixSLnRzcGFuPSExLFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9TCxSLmZvbnRXZWlnaHQ9TixSLndyYXA9YS53cmFwLHo9bEwoQixSKTtsZXQgc3Q9TWF0aC5yb3VuZCh6Lm1hcCh1dD0+KHV0Ll9ncm91cHN8fHV0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKHV0LGJ0KT0+dXQrYnQpKTthLnNlY3Rpb25zW2l0XS5oZWlnaHQrPXN0LSh2K20pfX0pLGEuaGVpZ2h0PU1hdGgucm91bmQoYS5zdG9weS1hLnN0YXJ0eSksQn0seFJ0PWZ1bmN0aW9uKGksYSl7Yk50KGksYSl9LFJIZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sakhlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCRIZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSx6SGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNy45KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxxSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxNS41KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxISGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSxHSGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiw0KS5hdHRyKCJyZWZZIiw0LjUpLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFwdCIpLmF0dHIoImQiLCJNIDEsMiBMIDYsNyBNIDYsMiBMIDEsNyIpfSxrUnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSxWSGU9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LGZndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodixtLGIsRSxfLEwsTil7Y29uc3QgQj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFK0wvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHYpO3AoQixOKX1mdW5jdGlvbiBhKHYsbSxiLEUsXyxMLE4sQil7Y29uc3R7YWN0b3JGb250U2l6ZTpqLGFjdG9yRm9udEZhbWlseTpSLGFjdG9yRm9udFdlaWdodDp6fT1CLFtLLGl0XT0kQShqKSxzdD12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IHV0PTA7dXQ8c3QubGVuZ3RoO3V0Kyspe2NvbnN0IGJ0PXV0KkstSyooc3QubGVuZ3RoLTEpLzIsbXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsaXQpLnN0eWxlKCJmb250LXdlaWdodCIseikuc3R5bGUoImZvbnQtZmFtaWx5IixSKTttdC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsYitfLzIpLmF0dHIoImR5IixidCkudGV4dChzdFt1dF0pLG10LmF0dHIoInkiLEUrTC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChtdCxOKX19ZnVuY3Rpb24gZih2LG0sYixFLF8sTCxOLEIpe2NvbnN0IGo9bS5hcHBlbmQoInN3aXRjaCIpLHo9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixMKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHYpLGEodixqLGIsRSxfLEwsTixCKSxwKHosTil9ZnVuY3Rpb24gcCh2LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdi5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB2LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6di50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxVSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsXyxMLE4pe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnRleHQodik7cChCLE4pfWZ1bmN0aW9uIGEodixtLGIsRSxfLEwsTixCKXtjb25zdHthY3RvckZvbnRTaXplOmosYWN0b3JGb250RmFtaWx5OlIsYWN0b3JGb250V2VpZ2h0Onp9PUIsSz12LnNwbGl0KFlyLmxpbmVCcmVha1JlZ2V4KTtmb3IobGV0IGl0PTA7aXQ8Sy5sZW5ndGg7aXQrKyl7Y29uc3Qgc3Q9aXQqai1qKihLLmxlbmd0aC0xKS8yLHV0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS5zdHlsZSgiZm9udC1zaXplIixqKS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7dXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIpLmF0dHIoImR5IixzdCkudGV4dChLW2l0XSksdXQuYXR0cigieSIsRStMLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxwKHV0LE4pfX1mdW5jdGlvbiBmKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgic3dpdGNoIiksej1qLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLmF0dHIoIndpZHRoIixfKS5hdHRyKCJoZWlnaHQiLEwpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodiksYSh2LGosYixFLF8sTCxOLEIpLHAoeixOKX1mdW5jdGlvbiBwKHYsbSl7Zm9yKGNvbnN0IGIgaW4gbSltLmhhc093blByb3BlcnR5KGIpJiZ2LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIHYudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp2LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLEpoPXtkcmF3UmVjdDpoZ3QsZHJhd1RleHQ6bEwsZHJhd0xhYmVsOm1SdCxkcmF3QWN0b3I6T0hlLGRyYXdCb3g6TkhlLGRyYXdQb3B1cDpfSGUsYW5jaG9yRWxlbWVudDpQSGUsZHJhd0FjdGl2YXRpb246RkhlLGRyYXdMb29wOkJIZSxkcmF3QmFja2dyb3VuZFJlY3Q6eFJ0LGluc2VydEFycm93SGVhZDp6SGUsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOnFIZSxpbnNlcnRTZXF1ZW5jZU51bWJlcjpISGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6R0hlLGluc2VydERhdGFiYXNlSWNvbjpSSGUsaW5zZXJ0Q29tcHV0ZXJJY29uOmpIZSxpbnNlcnRDbG9ja0ljb246JEhlLGdldFRleHRPYmo6a1J0LGdldE5vdGVSZWN0OlZIZSxwb3B1cE1lbnU6U0hlLHBvcGRvd25NZW51OkFIZSxmaXhMaWZlTGluZUhlaWdodHM6eVJ0LHNhbml0aXplVXJsOlE2fTtsZXQgZm49e307Y29uc3QgUHI9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLmFjdG9ycy5sZW5ndGg9PT0wP1swXTp0aGlzLmFjdG9ycy5tYXAoaT0+aS5oZWlnaHR8fDApKSsodGhpcy5sb29wcy5sZW5ndGg9PT0wPzA6dGhpcy5sb29wcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxhKT0+aSthKSkrKHRoaXMubWVzc2FnZXMubGVuZ3RoPT09MD8wOnRoaXMubWVzc2FnZXMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGksYSk9PmkrYSkpKyh0aGlzLm5vdGVzLmxlbmd0aD09PTA/MDp0aGlzLm5vdGVzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLGEpPT5pK2EpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmJveGVzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSxhZGRCb3g6ZnVuY3Rpb24oaSl7dGhpcy5ib3hlcy5wdXNoKGkpfSxhZGRBY3RvcjpmdW5jdGlvbihpKXt0aGlzLmFjdG9ycy5wdXNoKGkpfSxhZGRMb29wOmZ1bmN0aW9uKGkpe3RoaXMubG9vcHMucHVzaChpKX0sYWRkTWVzc2FnZTpmdW5jdGlvbihpKXt0aGlzLm1lc3NhZ2VzLnB1c2goaSl9LGFkZE5vdGU6ZnVuY3Rpb24oaSl7dGhpcy5ub3Rlcy5wdXNoKGkpfSxsYXN0QWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSxsYXN0TG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSxsYXN0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSxsYXN0Tm90ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoLTFdfSxhY3RvcnM6W10sYm94ZXM6W10sbG9vcHM6W10sbWVzc2FnZXM6W10sbm90ZXM6W119LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxUUnQoTGUoKSl9LHVwZGF0ZVZhbDpmdW5jdGlvbihpLGEsZixwKXtpW2FdPT09dm9pZCAwP2lbYV09ZjppW2FdPXAoZixpW2FdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9dGhpcztsZXQgbT0wO2Z1bmN0aW9uIGIoRSl7cmV0dXJuIGZ1bmN0aW9uKEwpe20rKztjb25zdCBOPXYuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbSsxO3YudXBkYXRlVmFsKEwsInN0YXJ0eSIsYS1OKmZuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoTCwic3RvcHkiLHArTipmbi5ib3hNYXJnaW4sTWF0aC5tYXgpLHYudXBkYXRlVmFsKFByLmRhdGEsInN0YXJ0eCIsaS1OKmZuLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoUHIuZGF0YSwic3RvcHgiLGYrTipmbi5ib3hNYXJnaW4sTWF0aC5tYXgpLEUhPT0iYWN0aXZhdGlvbiImJih2LnVwZGF0ZVZhbChMLCJzdGFydHgiLGktTipmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKEwsInN0b3B4IixmK04qZm4uYm94TWFyZ2luLE1hdGgubWF4KSx2LnVwZGF0ZVZhbChQci5kYXRhLCJzdGFydHkiLGEtTipmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKFByLmRhdGEsInN0b3B5IixwK04qZm4uYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGIoKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKGIoImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PVlyLmdldE1pbihpLGYpLG09WXIuZ2V0TWF4KGksZiksYj1Zci5nZXRNaW4oYSxwKSxFPVlyLmdldE1heChhLHApO3RoaXMudXBkYXRlVmFsKFByLmRhdGEsInN0YXJ0eCIsdixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoUHIuZGF0YSwic3RhcnR5IixiLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChQci5kYXRhLCJzdG9weCIsbSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoUHIuZGF0YSwic3RvcHkiLEUsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKHYsYixtLEUpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWZbaS5mcm9tLmFjdG9yXSx2PUFLKGkuZnJvbS5hY3RvcikubGVuZ3RofHwwLG09cC54K3Aud2lkdGgvMisodi0xKSpmbi5hY3RpdmF0aW9uV2lkdGgvMjt0aGlzLmFjdGl2YXRpb25zLnB1c2goe3N0YXJ0eDptLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zKzIsc3RvcHg6bStmbi5hY3RpdmF0aW9uV2lkdGgsc3RvcHk6dm9pZCAwLGFjdG9yOmkuZnJvbS5hY3RvcixhbmNob3JlZDpKaC5hbmNob3JFbGVtZW50KGEpfSl9LGVuZEFjdGl2YXRpb246ZnVuY3Rpb24oaSl7Y29uc3QgYT10aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5hY3Rvcn0pLmxhc3RJbmRleE9mKGkuZnJvbS5hY3Rvcik7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGEsMSlbMF19LGNyZWF0ZUxvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGEpe3JldHVybntzdGFydHg6dm9pZCAwLHN0YXJ0eTp0aGlzLnZlcnRpY2FsUG9zLHN0b3B4OnZvaWQgMCxzdG9weTp2b2lkIDAsdGl0bGU6aS5tZXNzYWdlLHdyYXA6aS53cmFwLHdpZHRoOmkud2lkdGgsaGVpZ2h0OjAsZmlsbDphfX0sbmV3TG9vcDpmdW5jdGlvbihpPXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sYSl7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKGksYSkpfSxlbmRMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0saXNMb29wT3ZlcmxhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoP3RoaXMuc2VxdWVuY2VJdGVtc1t0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoLTFdLm92ZXJsYXA6ITF9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24oaSl7Y29uc3QgYT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7YS5zZWN0aW9ucz1hLnNlY3Rpb25zfHxbXSxhLnNlY3Rpb25UaXRsZXM9YS5zZWN0aW9uVGl0bGVzfHxbXSxhLnNlY3Rpb25zLnB1c2goe3k6UHIuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGEuc2VjdGlvblRpdGxlcy5wdXNoKGkpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGEpfSxzYXZlVmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMuc2F2ZWRWZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zKX0scmVzZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy52ZXJ0aWNhbFBvcz10aGlzLnNhdmVkVmVydGljYWxQb3MpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24oaSl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK2ksdGhpcy5kYXRhLnN0b3B5PVlyLmdldE1heCh0aGlzLmRhdGEuc3RvcHksdGhpcy52ZXJ0aWNhbFBvcyl9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybntib3VuZHM6dGhpcy5kYXRhLG1vZGVsczp0aGlzLm1vZGVsc319fSxXSGU9ZnVuY3Rpb24oaSxhKXtQci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKSxhLmhlaWdodD1mbi5ib3hNYXJnaW4sYS5zdGFydHk9UHIuZ2V0VmVydGljYWxQb3MoKTtjb25zdCBmPWZUKCk7Zi54PWEuc3RhcnR4LGYueT1hLnN0YXJ0eSxmLndpZHRoPWEud2lkdGh8fGZuLndpZHRoLGYuY2xhc3M9Im5vdGUiO2NvbnN0IHA9aS5hcHBlbmQoImciKSx2PUpoLmRyYXdSZWN0KHAsZiksbT1QZHQoKTttLng9YS5zdGFydHgsbS55PWEuc3RhcnR5LG0ud2lkdGg9Zi53aWR0aCxtLmR5PSIxZW0iLG0udGV4dD1hLm1lc3NhZ2UsbS5jbGFzcz0ibm90ZVRleHQiLG0uZm9udEZhbWlseT1mbi5ub3RlRm9udEZhbWlseSxtLmZvbnRTaXplPWZuLm5vdGVGb250U2l6ZSxtLmZvbnRXZWlnaHQ9Zm4ubm90ZUZvbnRXZWlnaHQsbS5hbmNob3I9Zm4ubm90ZUFsaWduLG0udGV4dE1hcmdpbj1mbi5ub3RlTWFyZ2luLG0udmFsaWduPSJjZW50ZXIiO2NvbnN0IGI9bEwocCxtKSxFPU1hdGgucm91bmQoYi5tYXAoXz0+KF8uX2dyb3Vwc3x8XylbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChfLEwpPT5fK0wpKTt2LmF0dHIoImhlaWdodCIsRSsyKmZuLm5vdGVNYXJnaW4pLGEuaGVpZ2h0Kz1FKzIqZm4ubm90ZU1hcmdpbixQci5idW1wVmVydGljYWxQb3MoRSsyKmZuLm5vdGVNYXJnaW4pLGEuc3RvcHk9YS5zdGFydHkrRSsyKmZuLm5vdGVNYXJnaW4sYS5zdG9weD1hLnN0YXJ0eCtmLndpZHRoLFByLmluc2VydChhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RvcHkpLFByLm1vZGVscy5hZGROb3RlKGEpfSxUVD1pPT4oe2ZvbnRGYW1pbHk6aS5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTppLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OmkubWVzc2FnZUZvbnRXZWlnaHR9KSxoTD1pPT4oe2ZvbnRGYW1pbHk6aS5ub3RlRm9udEZhbWlseSxmb250U2l6ZTppLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0Omkubm90ZUZvbnRXZWlnaHR9KSxkZ3Q9aT0+KHtmb250RmFtaWx5OmkuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOmkuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OmkuYWN0b3JGb250V2VpZ2h0fSk7ZnVuY3Rpb24gS0hlKGksYSl7UHIuYnVtcFZlcnRpY2FsUG9zKDEwKTtjb25zdHtzdGFydHg6ZixzdG9weDpwLG1lc3NhZ2U6dn09YSxtPVlyLnNwbGl0QnJlYWtzKHYpLmxlbmd0aCxiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHYsVFQoZm4pKSxFPWIuaGVpZ2h0L207YS5oZWlnaHQrPUUsUHIuYnVtcFZlcnRpY2FsUG9zKEUpO2xldCBfLEw9Yi5oZWlnaHQtMTA7Y29uc3QgTj1iLndpZHRoO2lmKGY9PT1wKXtfPVByLmdldFZlcnRpY2FsUG9zKCkrTCxmbi5yaWdodEFuZ2xlc3x8KEwrPWZuLmJveE1hcmdpbixfPVByLmdldFZlcnRpY2FsUG9zKCkrTCksTCs9MzA7Y29uc3QgQj1Zci5nZXRNYXgoTi8yLGZuLndpZHRoLzIpO1ByLmluc2VydChmLUIsUHIuZ2V0VmVydGljYWxQb3MoKS0xMCtMLHArQixQci5nZXRWZXJ0aWNhbFBvcygpKzMwK0wpfWVsc2UgTCs9Zm4uYm94TWFyZ2luLF89UHIuZ2V0VmVydGljYWxQb3MoKStMLFByLmluc2VydChmLF8tMTAscCxfKTtyZXR1cm4gUHIuYnVtcFZlcnRpY2FsUG9zKEwpLGEuaGVpZ2h0Kz1MLGEuc3RvcHk9YS5zdGFydHkrYS5oZWlnaHQsUHIuaW5zZXJ0KGEuZnJvbUJvdW5kcyxhLnN0YXJ0eSxhLnRvQm91bmRzLGEuc3RvcHkpLF99Y29uc3QgWUhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3N0YXJ0eDp2LHN0b3B4Om0sc3RhcnR5OmIsbWVzc2FnZTpFLHR5cGU6XyxzZXF1ZW5jZUluZGV4Okwsc2VxdWVuY2VWaXNpYmxlOk59PWEsQj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhFLFRUKGZuKSksaj1QZHQoKTtqLng9dixqLnk9YisxMCxqLndpZHRoPW0tdixqLmNsYXNzPSJtZXNzYWdlVGV4dCIsai5keT0iMWVtIixqLnRleHQ9RSxqLmZvbnRGYW1pbHk9Zm4ubWVzc2FnZUZvbnRGYW1pbHksai5mb250U2l6ZT1mbi5tZXNzYWdlRm9udFNpemUsai5mb250V2VpZ2h0PWZuLm1lc3NhZ2VGb250V2VpZ2h0LGouYW5jaG9yPWZuLm1lc3NhZ2VBbGlnbixqLnZhbGlnbj0iY2VudGVyIixqLnRleHRNYXJnaW49Zm4ud3JhcFBhZGRpbmcsai50c3Bhbj0hMSxsTChpLGopO2NvbnN0IFI9Qi53aWR0aDtsZXQgejt2PT09bT9mbi5yaWdodEFuZ2xlcz96PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gICR7dn0sJHtmfSBIICR7ditZci5nZXRNYXgoZm4ud2lkdGgvMixSLzIpfSBWICR7ZisyNX0gSCAke3Z9YCk6ej1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrdisiLCIrZisiIEMgIisodis2MCkrIiwiKyhmLTEwKSsiICIrKHYrNjApKyIsIisoZiszMCkrIiAiK3YrIiwiKyhmKzIwKSk6KHo9aS5hcHBlbmQoImxpbmUiKSx6LmF0dHIoIngxIix2KSx6LmF0dHIoInkxIixmKSx6LmF0dHIoIngyIixtKSx6LmF0dHIoInkyIixmKSksXz09PXAuZGIuTElORVRZUEUuRE9UVEVEfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX09QRU4/KHouc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIiksei5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMSIpKTp6LmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUwIik7bGV0IEs9IiI7Zm4uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEs9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsSz1LLnJlcGxhY2UoL1woL2csIlxcKCIpLEs9Sy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksei5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLHouYXR0cigic3Ryb2tlIiwibm9uZSIpLHouc3R5bGUoImZpbGwiLCJub25lIiksKF89PT1wLmRiLkxJTkVUWVBFLlNPTElEfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURUQpJiZ6LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjYXJyb3doZWFkKSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSysiI2ZpbGxlZC1oZWFkKSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TU3x8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSysiI2Nyb3NzaGVhZCkiKSwoTnx8Zm4uc2hvd1NlcXVlbmNlTnVtYmVycykmJih6LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0srIiNzZXF1ZW5jZW51bWJlcikiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHYpLmF0dHIoInkiLGYrNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQoTCkpfSxYSGU9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYil7bGV0IEU9MCxfPTAsTCxOPTA7Zm9yKGNvbnN0IEIgb2YgcCl7Y29uc3Qgaj1hW0JdLFI9ai5ib3g7TCYmTCE9UiYmKGJ8fFByLm1vZGVscy5hZGRCb3goTCksXys9Zm4uYm94TWFyZ2luK0wubWFyZ2luKSxSJiZSIT1MJiYoYnx8KFIueD1FK18sUi55PXYpLF8rPVIubWFyZ2luKSxqLndpZHRoPWoud2lkdGh8fGZuLndpZHRoLGouaGVpZ2h0PVlyLmdldE1heChqLmhlaWdodHx8Zm4uaGVpZ2h0LGZuLmhlaWdodCksai5tYXJnaW49ai5tYXJnaW58fGZuLmFjdG9yTWFyZ2luLE49WXIuZ2V0TWF4KE4sai5oZWlnaHQpLGZbai5uYW1lXSYmKF8rPWoud2lkdGgvMiksai54PUUrXyxqLnN0YXJ0eT1Qci5nZXRWZXJ0aWNhbFBvcygpLFByLmluc2VydChqLngsdixqLngrai53aWR0aCxqLmhlaWdodCksRSs9ai53aWR0aCtfLGouYm94JiYoai5ib3gud2lkdGg9RStSLm1hcmdpbi1qLmJveC54KSxfPWoubWFyZ2luLEw9ai5ib3gsUHIubW9kZWxzLmFkZEFjdG9yKGopfUwmJiFiJiZQci5tb2RlbHMuYWRkQm94KEwpLFByLmJ1bXBWZXJ0aWNhbFBvcyhOKX0sZ2d0PWZ1bmN0aW9uKGksYSxmLHApe2lmKHApe2xldCB2PTA7UHIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbioyKTtmb3IoY29uc3QgbSBvZiBmKXtjb25zdCBiPWFbbV07Yi5zdG9weXx8KGIuc3RvcHk9UHIuZ2V0VmVydGljYWxQb3MoKSk7Y29uc3QgRT1KaC5kcmF3QWN0b3IoaSxiLGZuLCEwKTt2PVlyLmdldE1heCh2LEUpfVByLmJ1bXBWZXJ0aWNhbFBvcyh2K2ZuLmJveE1hcmdpbil9ZWxzZSBmb3IoY29uc3QgdiBvZiBmKXtjb25zdCBtPWFbdl07SmguZHJhd0FjdG9yKGksbSxmbiwhMSl9fSxFUnQ9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHY9MCxtPTA7Zm9yKGNvbnN0IGIgb2YgZil7Y29uc3QgRT1hW2JdLF89dEdlKEUpLEw9SmguZHJhd1BvcHVwKGksRSxfLGZuLGZuLmZvcmNlTWVudXMscCk7TC5oZWlnaHQ+diYmKHY9TC5oZWlnaHQpLEwud2lkdGgrRS54Pm0mJihtPUwud2lkdGgrRS54KX1yZXR1cm57bWF4SGVpZ2h0OnYsbWF4V2lkdGg6bX19LFRSdD1mdW5jdGlvbihpKXtZMShmbixpKSxpLmZvbnRGYW1pbHkmJihmbi5hY3RvckZvbnRGYW1pbHk9Zm4ubm90ZUZvbnRGYW1pbHk9Zm4ubWVzc2FnZUZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxpLmZvbnRTaXplJiYoZm4uYWN0b3JGb250U2l6ZT1mbi5ub3RlRm9udFNpemU9Zm4ubWVzc2FnZUZvbnRTaXplPWkuZm9udFNpemUpLGkuZm9udFdlaWdodCYmKGZuLmFjdG9yRm9udFdlaWdodD1mbi5ub3RlRm9udFdlaWdodD1mbi5tZXNzYWdlRm9udFdlaWdodD1pLmZvbnRXZWlnaHQpfSxBSz1mdW5jdGlvbihpKXtyZXR1cm4gUHIuYWN0aXZhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFjdG9yPT09aX0pfSxDUnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWFbaV0scD1BSyhpKSx2PXAucmVkdWNlKGZ1bmN0aW9uKGIsRSl7cmV0dXJuIFlyLmdldE1pbihiLEUuc3RhcnR4KX0sZi54K2Yud2lkdGgvMi0xKSxtPXAucmVkdWNlKGZ1bmN0aW9uKGIsRSl7cmV0dXJuIFlyLmdldE1heChiLEUuc3RvcHgpfSxmLngrZi53aWR0aC8yKzEpO3JldHVyblt2LG1dfTtmdW5jdGlvbiB5MyhpLGEsZixwLHYpe1ByLmJ1bXBWZXJ0aWNhbFBvcyhmKTtsZXQgbT1wO2lmKGEuaWQmJmEubWVzc2FnZSYmaVthLmlkXSl7Y29uc3QgYj1pW2EuaWRdLndpZHRoLEU9VFQoZm4pO2EubWVzc2FnZT0kYS53cmFwTGFiZWwoYFske2EubWVzc2FnZX1dYCxiLTIqZm4ud3JhcFBhZGRpbmcsRSksYS53aWR0aD1iLGEud3JhcD0hMDtjb25zdCBfPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubWVzc2FnZSxFKSxMPVlyLmdldE1heChfLmhlaWdodCxmbi5sYWJlbEJveEhlaWdodCk7bT1wK0wsVXQuZGVidWcoYCR7TH0gLSAke2EubWVzc2FnZX1gKX12KGEpLFByLmJ1bXBWZXJ0aWNhbFBvcyhtKX1mdW5jdGlvbiBRSGUoaSxhLGYscCx2LG0sYil7ZnVuY3Rpb24gRShMLE4pe0wueDx2W2kuZnJvbV0ueD8oUHIuaW5zZXJ0KGEuc3RvcHgtTixhLnN0YXJ0eSxhLnN0YXJ0eCxhLnN0b3B5K0wuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdG9weD1hLnN0b3B4K04pOihQci5pbnNlcnQoYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCtOLGEuc3RvcHkrTC5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0b3B4PWEuc3RvcHgtTil9ZnVuY3Rpb24gXyhMLE4pe0wueDx2W2kudG9dLng/KFByLmluc2VydChhLnN0YXJ0eC1OLGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weStMLmhlaWdodC8yK2ZuLm5vdGVNYXJnaW4pLGEuc3RhcnR4PWEuc3RhcnR4K04pOihQci5pbnNlcnQoYS5zdG9weCxhLnN0YXJ0eSxhLnN0YXJ0eCtOLGEuc3RvcHkrTC5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0YXJ0eD1hLnN0YXJ0eC1OKX1pZihtW2kudG9dPT1wKXtjb25zdCBMPXZbaS50b10sTj1MLnR5cGU9PSJhY3RvciI/RVQvMiszOkwud2lkdGgvMiszO0UoTCxOKSxMLnN0YXJ0eT1mLUwuaGVpZ2h0LzIsUHIuYnVtcFZlcnRpY2FsUG9zKEwuaGVpZ2h0LzIpfWVsc2UgaWYoYltpLmZyb21dPT1wKXtjb25zdCBMPXZbaS5mcm9tXTtpZihmbi5taXJyb3JBY3RvcnMpe2NvbnN0IE49TC50eXBlPT0iYWN0b3IiP0VULzI6TC53aWR0aC8yO18oTCxOKX1MLnN0b3B5PWYtTC5oZWlnaHQvMixQci5idW1wVmVydGljYWxQb3MoTC5oZWlnaHQvMil9ZWxzZSBpZihiW2kudG9dPT1wKXtjb25zdCBMPXZbaS50b107aWYoZm4ubWlycm9yQWN0b3JzKXtjb25zdCBOPUwudHlwZT09ImFjdG9yIj9FVC8yKzM6TC53aWR0aC8yKzM7RShMLE4pfUwuc3RvcHk9Zi1MLmhlaWdodC8yLFByLmJ1bXBWZXJ0aWNhbFBvcyhMLmhlaWdodC8yKX19Y29uc3QgWkhlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3NlY3VyaXR5TGV2ZWw6dixzZXF1ZW5jZTptfT1MZSgpO2ZuPW07bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89dj09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1ByLmluaXQoKSxVdC5kZWJ1ZyhwLmRiKTtjb25zdCBMPXY9PT0ic2FuZGJveCI/RS5zZWxlY3QoYFtpZD0iJHthfSJdYCk6eXIoYFtpZD0iJHthfSJdYCksTj1wLmRiLmdldEFjdG9ycygpLEI9cC5kYi5nZXRDcmVhdGVkQWN0b3JzKCksaj1wLmRiLmdldERlc3Ryb3llZEFjdG9ycygpLFI9cC5kYi5nZXRCb3hlcygpO2xldCB6PXAuZGIuZ2V0QWN0b3JLZXlzKCk7Y29uc3QgSz1wLmRiLmdldE1lc3NhZ2VzKCksaXQ9cC5kYi5nZXREaWFncmFtVGl0bGUoKSxzdD1wLmRiLmhhc0F0TGVhc3RPbmVCb3goKSx1dD1wLmRiLmhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKSxidD1KSGUoTixLLHApO2lmKGZuLmhlaWdodD1lR2UoTixidCxSKSxKaC5pbnNlcnRDb21wdXRlckljb24oTCksSmguaW5zZXJ0RGF0YWJhc2VJY29uKEwpLEpoLmluc2VydENsb2NrSWNvbihMKSxzdCYmKFByLmJ1bXBWZXJ0aWNhbFBvcyhmbi5ib3hNYXJnaW4pLHV0JiZQci5idW1wVmVydGljYWxQb3MoUlswXS50ZXh0TWF4SGVpZ2h0KSksZm4uaGlkZVVudXNlZFBhcnRpY2lwYW50cz09PSEwKXtjb25zdCBDdD1uZXcgU2V0O0suZm9yRWFjaChaPT57Q3QuYWRkKFouZnJvbSksQ3QuYWRkKFoudG8pfSksej16LmZpbHRlcihaPT5DdC5oYXMoWikpfVhIZShMLE4sQix6LDAsSywhMSk7Y29uc3QgbXQ9aUdlKEssTixidCxwKTtKaC5pbnNlcnRBcnJvd0hlYWQoTCksSmguaW5zZXJ0QXJyb3dDcm9zc0hlYWQoTCksSmguaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKEwpLEpoLmluc2VydFNlcXVlbmNlTnVtYmVyKEwpO2Z1bmN0aW9uIHl0KEN0LFope2NvbnN0IFR0PVByLmVuZEFjdGl2YXRpb24oQ3QpO1R0LnN0YXJ0eSsxOD5aJiYoVHQuc3RhcnR5PVotNixaKz0xMiksSmguZHJhd0FjdGl2YXRpb24oTCxUdCxaLGZuLEFLKEN0LmZyb20uYWN0b3IpLmxlbmd0aCksUHIuaW5zZXJ0KFR0LnN0YXJ0eCxaLTEwLFR0LnN0b3B4LFopfWxldCBkdD0xLGh0PTE7Y29uc3Qgd3Q9W10sWD1bXTtLLmZvckVhY2goZnVuY3Rpb24oQ3QsWil7bGV0IFR0LEh0LEl0O3N3aXRjaChDdC50eXBlKXtjYXNlIHAuZGIuTElORVRZUEUuTk9URTpQci5yZXNldFZlcnRpY2FsUG9zKCksSHQ9Q3Qubm90ZU1vZGVsLFdIZShMLEh0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOlByLm5ld0FjdGl2YXRpb24oQ3QsTCxOKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUNUSVZFX0VORDp5dChDdCxQci5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9TVEFSVDp5MyhtdCxDdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sRnQ9PlByLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9FTkQ6VHQ9UHIuZW5kTG9vcCgpLEpoLmRyYXdMb29wKEwsVHQsImxvb3AiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5SRUNUX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4sRnQ9PlByLm5ld0xvb3Aodm9pZCAwLEZ0Lm1lc3NhZ2UpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUkVDVF9FTkQ6VHQ9UHIuZW5kTG9vcCgpLFgucHVzaChUdCksUHIubW9kZWxzLmFkZExvb3AoVHQpLFByLmJ1bXBWZXJ0aWNhbFBvcyhUdC5zdG9weS1Qci5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuT1BUX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5PUFRfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJvcHQiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6eTMobXQsQ3QsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLEZ0PT5Qci5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTFNFOnkzKG10LEN0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixGdD0+UHIuYWRkU2VjdGlvblRvTG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJhbHQiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpLFByLnNhdmVWZXJ0aWNhbFBvcygpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfQU5EOnkzKG10LEN0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixGdD0+UHIuYWRkU2VjdGlvblRvTG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5QQVJfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJwYXIiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BVVRPTlVNQkVSOmR0PUN0Lm1lc3NhZ2Uuc3RhcnR8fGR0LGh0PUN0Lm1lc3NhZ2Uuc3RlcHx8aHQsQ3QubWVzc2FnZS52aXNpYmxlP3AuZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk6cC5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUOnkzKG10LEN0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixGdD0+UHIubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046eTMobXQsQ3QsZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sZm4uYm94TWFyZ2luLEZ0PT5Qci5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpUdD1Qci5lbmRMb29wKCksSmguZHJhd0xvb3AoTCxUdCwiY3JpdGljYWwiLGZuKSxQci5idW1wVmVydGljYWxQb3MoVHQuc3RvcHktUHIuZ2V0VmVydGljYWxQb3MoKSksUHIubW9kZWxzLmFkZExvb3AoVHQpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDp5MyhtdCxDdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sRnQ9PlByLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfRU5EOlR0PVByLmVuZExvb3AoKSxKaC5kcmF3TG9vcChMLFR0LCJicmVhayIsZm4pLFByLmJ1bXBWZXJ0aWNhbFBvcyhUdC5zdG9weS1Qci5nZXRWZXJ0aWNhbFBvcygpKSxQci5tb2RlbHMuYWRkTG9vcChUdCk7YnJlYWs7ZGVmYXVsdDp0cnl7SXQ9Q3QubXNnTW9kZWwsSXQuc3RhcnR5PVByLmdldFZlcnRpY2FsUG9zKCksSXQuc2VxdWVuY2VJbmRleD1kdCxJdC5zZXF1ZW5jZVZpc2libGU9cC5kYi5zaG93U2VxdWVuY2VOdW1iZXJzKCk7Y29uc3QgRnQ9S0hlKEwsSXQpO1FIZShDdCxJdCxGdCxaLE4sQixqKSx3dC5wdXNoKHttZXNzYWdlTW9kZWw6SXQsbGluZVN0YXJ0WTpGdH0pLFByLm1vZGVscy5hZGRNZXNzYWdlKEl0KX1jYXRjaChGdCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsRnQpfX1bcC5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHAuZGIuTElORVRZUEUuRE9UVEVEX09QRU4scC5kYi5MSU5FVFlQRS5TT0xJRCxwLmRiLkxJTkVUWVBFLkRPVFRFRCxwLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLHAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLHAuZGIuTElORVRZUEUuU09MSURfUE9JTlQscC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKEN0LnR5cGUpJiYoZHQ9ZHQraHQpfSksVXQuZGVidWcoImNyZWF0ZWRBY3RvcnMiLEIpLFV0LmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLGopLGdndChMLE4seiwhMSksd3QuZm9yRWFjaChDdD0+WUhlKEwsQ3QubWVzc2FnZU1vZGVsLEN0LmxpbmVTdGFydFkscCkpLGZuLm1pcnJvckFjdG9ycyYmZ2d0KEwsTix6LCEwKSxYLmZvckVhY2goQ3Q9PkpoLmRyYXdCYWNrZ3JvdW5kUmVjdChMLEN0KSkseVJ0KEwsTix6LGZuKSxQci5tb2RlbHMuYm94ZXMuZm9yRWFjaChmdW5jdGlvbihDdCl7Q3QuaGVpZ2h0PVByLmdldFZlcnRpY2FsUG9zKCktQ3QueSxQci5pbnNlcnQoQ3QueCxDdC55LEN0LngrQ3Qud2lkdGgsQ3QuaGVpZ2h0KSxDdC5zdGFydHg9Q3QueCxDdC5zdGFydHk9Q3QueSxDdC5zdG9weD1DdC5zdGFydHgrQ3Qud2lkdGgsQ3Quc3RvcHk9Q3Quc3RhcnR5K0N0LmhlaWdodCxDdC5zdHJva2U9InJnYigwLDAsMCwgMC41KSIsSmguZHJhd0JveChMLEN0LGZuKX0pLHN0JiZQci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKTtjb25zdCBwdD1FUnQoTCxOLHosXykse2JvdW5kczpVfT1Qci5nZXRCb3VuZHMoKTtsZXQgeHQ9VS5zdG9weS1VLnN0YXJ0eTt4dDxwdC5tYXhIZWlnaHQmJih4dD1wdC5tYXhIZWlnaHQpO2xldCBudD14dCsyKmZuLmRpYWdyYW1NYXJnaW5ZO2ZuLm1pcnJvckFjdG9ycyYmKG50PW50LWZuLmJveE1hcmdpbitmbi5ib3R0b21NYXJnaW5BZGopO2xldCBPdD1VLnN0b3B4LVUuc3RhcnR4O090PHB0Lm1heFdpZHRoJiYoT3Q9cHQubWF4V2lkdGgpO2NvbnN0IE50PU90KzIqZm4uZGlhZ3JhbU1hcmdpblg7aXQmJkwuYXBwZW5kKCJ0ZXh0IikudGV4dChpdCkuYXR0cigieCIsKFUuc3RvcHgtVS5zdGFydHgpLzItMipmbi5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxvZyhMLG50LE50LGZuLnVzZU1heFdpZHRoKTtjb25zdCBxdD1pdD80MDowO0wuYXR0cigidmlld0JveCIsVS5zdGFydHgtZm4uZGlhZ3JhbU1hcmdpblgrIiAtIisoZm4uZGlhZ3JhbU1hcmdpblkrcXQpKyIgIitOdCsiICIrKG50K3F0KSksVXQuZGVidWcoIm1vZGVsczoiLFByLm1vZGVscyl9O2Z1bmN0aW9uIEpIZShpLGEsZil7Y29uc3QgcD17fTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKGlbdi50b10mJmlbdi5mcm9tXSl7Y29uc3QgbT1pW3YudG9dO2lmKHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhbS5wcmV2QWN0b3J8fHYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIW0ubmV4dEFjdG9yKXJldHVybjtjb25zdCBiPXYucGxhY2VtZW50IT09dm9pZCAwLEU9IWIsXz1iP2hMKGZuKTpUVChmbiksTD12LndyYXA/JGEud3JhcExhYmVsKHYubWVzc2FnZSxmbi53aWR0aC0yKmZuLndyYXBQYWRkaW5nLF8pOnYubWVzc2FnZSxCPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKEwsXykud2lkdGgrMipmbi53cmFwUGFkZGluZztFJiZ2LmZyb209PT1tLm5leHRBY3Rvcj9wW3YudG9dPVlyLmdldE1heChwW3YudG9dfHwwLEIpOkUmJnYuZnJvbT09PW0ucHJldkFjdG9yP3Bbdi5mcm9tXT1Zci5nZXRNYXgocFt2LmZyb21dfHwwLEIpOkUmJnYuZnJvbT09PXYudG8/KHBbdi5mcm9tXT1Zci5nZXRNYXgocFt2LmZyb21dfHwwLEIvMikscFt2LnRvXT1Zci5nZXRNYXgocFt2LnRvXXx8MCxCLzIpKTp2LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/cFt2LmZyb21dPVlyLmdldE1heChwW3YuZnJvbV18fDAsQik6di5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5MRUZUT0Y/cFttLnByZXZBY3Rvcl09WXIuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEIpOnYucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuT1ZFUiYmKG0ucHJldkFjdG9yJiYocFttLnByZXZBY3Rvcl09WXIuZ2V0TWF4KHBbbS5wcmV2QWN0b3JdfHwwLEIvMikpLG0ubmV4dEFjdG9yJiYocFt2LmZyb21dPVlyLmdldE1heChwW3YuZnJvbV18fDAsQi8yKSkpfX0pLFV0LmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLHApLHB9Y29uc3QgdEdlPWZ1bmN0aW9uKGkpe2xldCBhPTA7Y29uc3QgZj1kZ3QoZm4pO2Zvcihjb25zdCBwIGluIGkubGlua3Mpe2NvbnN0IG09JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxmKS53aWR0aCsyKmZuLndyYXBQYWRkaW5nKzIqZm4uYm94TWFyZ2luO2E8bSYmKGE9bSl9cmV0dXJuIGF9O2Z1bmN0aW9uIGVHZShpLGEsZil7bGV0IHA9MDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG09Pntjb25zdCBiPWlbbV07Yi53cmFwJiYoYi5kZXNjcmlwdGlvbj0kYS53cmFwTGFiZWwoYi5kZXNjcmlwdGlvbixmbi53aWR0aC0yKmZuLndyYXBQYWRkaW5nLGRndChmbikpKTtjb25zdCBFPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGIuZGVzY3JpcHRpb24sZGd0KGZuKSk7Yi53aWR0aD1iLndyYXA/Zm4ud2lkdGg6WXIuZ2V0TWF4KGZuLndpZHRoLEUud2lkdGgrMipmbi53cmFwUGFkZGluZyksYi5oZWlnaHQ9Yi53cmFwP1lyLmdldE1heChFLmhlaWdodCxmbi5oZWlnaHQpOmZuLmhlaWdodCxwPVlyLmdldE1heChwLGIuaGVpZ2h0KX0pO2Zvcihjb25zdCBtIGluIGEpe2NvbnN0IGI9aVttXTtpZighYiljb250aW51ZTtjb25zdCBFPWlbYi5uZXh0QWN0b3JdO2lmKCFFKXtjb25zdCBCPWFbbV0rZm4uYWN0b3JNYXJnaW4tYi53aWR0aC8yO2IubWFyZ2luPVlyLmdldE1heChCLGZuLmFjdG9yTWFyZ2luKTtjb250aW51ZX1jb25zdCBMPWFbbV0rZm4uYWN0b3JNYXJnaW4tYi53aWR0aC8yLUUud2lkdGgvMjtiLm1hcmdpbj1Zci5nZXRNYXgoTCxmbi5hY3Rvck1hcmdpbil9bGV0IHY9MDtyZXR1cm4gZi5mb3JFYWNoKG09Pntjb25zdCBiPVRUKGZuKTtsZXQgRT1tLmFjdG9yS2V5cy5yZWR1Y2UoKE4sQik9Pk4rPWlbQl0ud2lkdGgrKGlbQl0ubWFyZ2lufHwwKSwwKTtFLT0yKmZuLmJveFRleHRNYXJnaW4sbS53cmFwJiYobS5uYW1lPSRhLndyYXBMYWJlbChtLm5hbWUsRS0yKmZuLndyYXBQYWRkaW5nLGIpKTtjb25zdCBfPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0ubmFtZSxiKTt2PVlyLmdldE1heChfLmhlaWdodCx2KTtjb25zdCBMPVlyLmdldE1heChFLF8ud2lkdGgrMipmbi53cmFwUGFkZGluZyk7aWYobS5tYXJnaW49Zm4uYm94VGV4dE1hcmdpbixFPEwpe2NvbnN0IE49KEwtRSkvMjttLm1hcmdpbis9Tn19KSxmLmZvckVhY2gobT0+bS50ZXh0TWF4SGVpZ2h0PXYpLFlyLmdldE1heChwLGZuLmhlaWdodCl9Y29uc3QgbkdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWFbaS5mcm9tXS54LHY9YVtpLnRvXS54LG09aS53cmFwJiZpLm1lc3NhZ2U7bGV0IGI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT8kYS53cmFwTGFiZWwoaS5tZXNzYWdlLGZuLndpZHRoLGhMKGZuKSk6aS5tZXNzYWdlLGhMKGZuKSk7Y29uc3QgRT17d2lkdGg6bT9mbi53aWR0aDpZci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLGhlaWdodDowLHN0YXJ0eDphW2kuZnJvbV0ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2V9O3JldHVybiBpLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KEUud2lkdGg9bT9Zci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCk6WXIuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqZm4ubm90ZU1hcmdpbiksRS5zdGFydHg9cCsoYVtpLmZyb21dLndpZHRoK2ZuLmFjdG9yTWFyZ2luKS8yKTppLnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULkxFRlRPRj8oRS53aWR0aD1tP1lyLmdldE1heChmbi53aWR0aCxiLndpZHRoKzIqZm4ubm90ZU1hcmdpbik6WXIuZ2V0TWF4KGFbaS5mcm9tXS53aWR0aC8yK2FbaS50b10ud2lkdGgvMixiLndpZHRoKzIqZm4ubm90ZU1hcmdpbiksRS5zdGFydHg9cC1FLndpZHRoKyhhW2kuZnJvbV0ud2lkdGgtZm4uYWN0b3JNYXJnaW4pLzIpOmkudG89PT1pLmZyb20/KGI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobT8kYS53cmFwTGFiZWwoaS5tZXNzYWdlLFlyLmdldE1heChmbi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpLGhMKGZuKSk6aS5tZXNzYWdlLGhMKGZuKSksRS53aWR0aD1tP1lyLmdldE1heChmbi53aWR0aCxhW2kuZnJvbV0ud2lkdGgpOllyLmdldE1heChhW2kuZnJvbV0ud2lkdGgsZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXArKGFbaS5mcm9tXS53aWR0aC1FLndpZHRoKS8yKTooRS53aWR0aD1NYXRoLmFicyhwK2FbaS5mcm9tXS53aWR0aC8yLSh2K2FbaS50b10ud2lkdGgvMikpK2ZuLmFjdG9yTWFyZ2luLEUuc3RhcnR4PXA8dj9wK2FbaS5mcm9tXS53aWR0aC8yLWZuLmFjdG9yTWFyZ2luLzI6dithW2kudG9dLndpZHRoLzItZm4uYWN0b3JNYXJnaW4vMiksbSYmKEUubWVzc2FnZT0kYS53cmFwTGFiZWwoaS5tZXNzYWdlLEUud2lkdGgtMipmbi53cmFwUGFkZGluZyxoTChmbikpKSxVdC5kZWJ1ZyhgTk06WyR7RS5zdGFydHh9LCR7RS5zdG9weH0sJHtFLnN0YXJ0eX0sJHtFLnN0b3B5fToke0Uud2lkdGh9LCR7RS5oZWlnaHR9PSR7aS5tZXNzYWdlfV1gKSxFfSxyR2U9ZnVuY3Rpb24oaSxhLGYpe2lmKCFbZi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGYuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sZi5kYi5MSU5FVFlQRS5TT0xJRCxmLmRiLkxJTkVUWVBFLkRPVFRFRCxmLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLGYuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLGYuZGIuTElORVRZUEUuU09MSURfUE9JTlQsZi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKGkudHlwZSkpcmV0dXJue307Y29uc3RbcCx2XT1DUnQoaS5mcm9tLGEpLFttLGJdPUNSdChpLnRvLGEpLEU9cDw9bSxfPUU/djpwO2xldCBMPUU/bTpiO2NvbnN0IE49TWF0aC5hYnMobS1iKT4yLEI9Sz0+RT8tSzpLO2kuZnJvbT09PWkudG8/TD1fOihpLmFjdGl2YXRlJiYhTiYmKEwrPUIoZm4uYWN0aXZhdGlvbldpZHRoLzItMSkpLFtmLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sZi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTl0uaW5jbHVkZXMoaS50eXBlKXx8KEwrPUIoMykpKTtjb25zdCBqPVtwLHYsbSxiXSxSPU1hdGguYWJzKF8tTCk7aS53cmFwJiZpLm1lc3NhZ2UmJihpLm1lc3NhZ2U9JGEud3JhcExhYmVsKGkubWVzc2FnZSxZci5nZXRNYXgoUisyKmZuLndyYXBQYWRkaW5nLGZuLndpZHRoKSxUVChmbikpKTtjb25zdCB6PSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGkubWVzc2FnZSxUVChmbikpO3JldHVybnt3aWR0aDpZci5nZXRNYXgoaS53cmFwPzA6ei53aWR0aCsyKmZuLndyYXBQYWRkaW5nLFIrMipmbi53cmFwUGFkZGluZyxmbi53aWR0aCksaGVpZ2h0OjAsc3RhcnR4Ol8sc3RvcHg6TCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6aS5tZXNzYWdlLHR5cGU6aS50eXBlLHdyYXA6aS53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxqKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLGopfX0saUdlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9e30sbT1bXTtsZXQgYixFLF87cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihMKXtzd2l0Y2goTC5pZD0kYS5yYW5kb20oe2xlbmd0aDoxMH0pLEwudHlwZSl7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6bS5wdXNoKHtpZDpMLmlkLG1zZzpMLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046TC5tZXNzYWdlJiYoYj1tLnBvcCgpLHZbYi5pZF09Yix2W0wuaWRdPWIsbS5wdXNoKGIpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfRU5EOmI9bS5wb3AoKSx2W2IuaWRdPWI7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7Y29uc3QgQj1hW0wuZnJvbT9MLmZyb20uYWN0b3I6TC50by5hY3Rvcl0saj1BSyhMLmZyb20/TC5mcm9tLmFjdG9yOkwudG8uYWN0b3IpLmxlbmd0aCxSPUIueCtCLndpZHRoLzIrKGotMSkqZm4uYWN0aXZhdGlvbldpZHRoLzIsej17c3RhcnR4OlIsc3RvcHg6Uitmbi5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6TC5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O1ByLmFjdGl2YXRpb25zLnB1c2goeil9YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2NvbnN0IEI9UHIuYWN0aXZhdGlvbnMubWFwKGo9PmouYWN0b3IpLmxhc3RJbmRleE9mKEwuZnJvbS5hY3Rvcik7ZGVsZXRlIFByLmFjdGl2YXRpb25zLnNwbGljZShCLDEpWzBdfWJyZWFrfUwucGxhY2VtZW50IT09dm9pZCAwPyhFPW5HZShMLGEscCksTC5ub3RlTW9kZWw9RSxtLmZvckVhY2goQj0+e2I9QixiLmZyb209WXIuZ2V0TWluKGIuZnJvbSxFLnN0YXJ0eCksYi50bz1Zci5nZXRNYXgoYi50byxFLnN0YXJ0eCtFLndpZHRoKSxiLndpZHRoPVlyLmdldE1heChiLndpZHRoLE1hdGguYWJzKGIuZnJvbS1iLnRvKSktZm4ubGFiZWxCb3hXaWR0aH0pKTooXz1yR2UoTCxhLHApLEwubXNnTW9kZWw9XyxfLnN0YXJ0eCYmXy5zdG9weCYmbS5sZW5ndGg+MCYmbS5mb3JFYWNoKEI9PntpZihiPUIsXy5zdGFydHg9PT1fLnN0b3B4KXtjb25zdCBqPWFbTC5mcm9tXSxSPWFbTC50b107Yi5mcm9tPVlyLmdldE1pbihqLngtXy53aWR0aC8yLGoueC1qLndpZHRoLzIsYi5mcm9tKSxiLnRvPVlyLmdldE1heChSLngrXy53aWR0aC8yLFIueCtqLndpZHRoLzIsYi50byksYi53aWR0aD1Zci5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLnRvLWIuZnJvbSkpLWZuLmxhYmVsQm94V2lkdGh9ZWxzZSBiLmZyb209WXIuZ2V0TWluKF8uc3RhcnR4LGIuZnJvbSksYi50bz1Zci5nZXRNYXgoXy5zdG9weCxiLnRvKSxiLndpZHRoPVlyLmdldE1heChiLndpZHRoLF8ud2lkdGgpLWZuLmxhYmVsQm94V2lkdGh9KSl9KSxQci5hY3RpdmF0aW9ucz1bXSxVdC5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLHYpLHZ9LHNHZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVIZSxkYjp2UnQscmVuZGVyZXI6e2JvdW5kczpQcixkcmF3QWN0b3JzOmdndCxkcmF3QWN0b3JzUG9wdXA6RVJ0LHNldENvbmY6VFJ0LGRyYXc6WkhlfSxzdHlsZXM6Q0hlLGluaXQ6KHt3cmFwOml9KT0+e3ZSdC5zZXRXcmFwKGkpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHBndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKF9lLCR0LHJlLGllKXtmb3IocmU9cmV8fHt9LGllPV9lLmxlbmd0aDtpZS0tO3JlW19lW2llXV09JHQpO3JldHVybiByZX0sYT1bMSwxNl0sZj1bMSwxN10scD1bMSwxOF0sdj1bMSwzN10sbT1bMSwzOF0sYj1bMSwyNF0sRT1bMSwyMl0sXz1bMSwyM10sTD1bMSwyOV0sTj1bMSwzMF0sQj1bMSwzMV0saj1bMSwzMl0sUj1bMSwzM10sej1bMSwzNF0sSz1bMSwyNV0saXQ9WzEsMjZdLHN0PVsxLDI3XSx1dD1bMSwyOF0sYnQ9WzEsNDJdLG10PVsxLDM5XSx5dD1bMSw0MF0sZHQ9WzEsNDFdLGh0PVsxLDQzXSx3dD1bMSw5XSxYPVsxLDgsOV0scHQ9WzEsNTRdLFU9WzEsNTVdLHh0PVsxLDU2XSxudD1bMSw1N10sT3Q9WzEsNThdLE50PVsxLDU5XSxxdD1bMSw2MF0sQ3Q9WzEsOCw5LDM4XSxaPVsxLDcxXSxUdD1bMSw4LDksMTIsMTMsMjEsMzYsMzgsNDEsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjksNzFdLEh0PVsxLDgsOSwxMiwxMywxOSwyMSwzNiwzOCw0MSw0NSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2OSw3MSw4NCw4Niw4Nyw4OCw4OV0sSXQ9WzEzLDg0LDg2LDg3LDg4LDg5XSxGdD1bMTMsNjMsNjQsODQsODYsODcsODgsODldLGtlPVsxMyw1OCw1OSw2MCw2MSw2Miw4NCw4Niw4Nyw4OCw4OV0scG49WzEsOTBdLE1lPVsxLDgsOSwzNiwzOCw0MV0sdmU9WzEsOCw5LDIxXSxHZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LHN0YXRlbWVudHM6NSxncmFwaENvbmZpZzo2LENMQVNTX0RJQUdSQU06NyxORVdMSU5FOjgsRU9GOjksc3RhdGVtZW50OjEwLGNsYXNzTGFiZWw6MTEsU1FTOjEyLFNUUjoxMyxTUUU6MTQsbmFtZXNwYWNlTmFtZToxNSxhbHBoYU51bVRva2VuOjE2LGNsYXNzTmFtZToxNyxjbGFzc0xpdGVyYWxOYW1lOjE4LEdFTkVSSUNUWVBFOjE5LHJlbGF0aW9uU3RhdGVtZW50OjIwLExBQkVMOjIxLG5hbWVzcGFjZVN0YXRlbWVudDoyMixjbGFzc1N0YXRlbWVudDoyMyxtZW1iZXJTdGF0ZW1lbnQ6MjQsYW5ub3RhdGlvblN0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixjc3NDbGFzc1N0YXRlbWVudDoyNyxub3RlU3RhdGVtZW50OjI4LGRpcmVjdGlvbjoyOSxhY2NfdGl0bGU6MzAsYWNjX3RpdGxlX3ZhbHVlOjMxLGFjY19kZXNjcjozMixhY2NfZGVzY3JfdmFsdWU6MzMsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNCxuYW1lc3BhY2VJZGVudGlmaWVyOjM1LFNUUlVDVF9TVEFSVDozNixjbGFzc1N0YXRlbWVudHM6MzcsU1RSVUNUX1NUT1A6MzgsTkFNRVNQQUNFOjM5LGNsYXNzSWRlbnRpZmllcjo0MCxTVFlMRV9TRVBBUkFUT1I6NDEsbWVtYmVyczo0MixDTEFTUzo0MyxBTk5PVEFUSU9OX1NUQVJUOjQ0LEFOTk9UQVRJT05fRU5EOjQ1LE1FTUJFUjo0NixTRVBBUkFUT1I6NDcscmVsYXRpb246NDgsTk9URV9GT1I6NDksbm90ZVRleHQ6NTAsTk9URTo1MSxkaXJlY3Rpb25fdGI6NTIsZGlyZWN0aW9uX2J0OjUzLGRpcmVjdGlvbl9ybDo1NCxkaXJlY3Rpb25fbHI6NTUscmVsYXRpb25UeXBlOjU2LGxpbmVUeXBlOjU3LEFHR1JFR0FUSU9OOjU4LEVYVEVOU0lPTjo1OSxDT01QT1NJVElPTjo2MCxERVBFTkRFTkNZOjYxLExPTExJUE9QOjYyLExJTkU6NjMsRE9UVEVEX0xJTkU6NjQsQ0FMTEJBQ0s6NjUsTElOSzo2NixMSU5LX1RBUkdFVDo2NyxDTElDSzo2OCxDQUxMQkFDS19OQU1FOjY5LENBTExCQUNLX0FSR1M6NzAsSFJFRjo3MSxDU1NDTEFTUzo3Mixjb21tZW50VG9rZW46NzMsdGV4dFRva2VuOjc0LGdyYXBoQ29kZVRva2Vuczo3NSx0ZXh0Tm9UYWdzVG9rZW46NzYsVEFHU1RBUlQ6NzcsVEFHRU5EOjc4LCI9PSI6NzksIi0tIjo4MCxQQ1Q6ODEsREVGQVVMVDo4MixTUEFDRTo4MyxNSU5VUzo4NCxrZXl3b3Jkczo4NSxVTklDT0RFX1RFWFQ6ODYsTlVNOjg3LEFMUEhBOjg4LEJRVU9URV9TVFI6ODksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTk6IkdFTkVSSUNUWVBFIiwyMToiTEFCRUwiLDMwOiJhY2NfdGl0bGUiLDMxOiJhY2NfdGl0bGVfdmFsdWUiLDMyOiJhY2NfZGVzY3IiLDMzOiJhY2NfZGVzY3JfdmFsdWUiLDM0OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoiU1RSVUNUX1NUQVJUIiwzODoiU1RSVUNUX1NUT1AiLDM5OiJOQU1FU1BBQ0UiLDQxOiJTVFlMRV9TRVBBUkFUT1IiLDQzOiJDTEFTUyIsNDQ6IkFOTk9UQVRJT05fU1RBUlQiLDQ1OiJBTk5PVEFUSU9OX0VORCIsNDY6Ik1FTUJFUiIsNDc6IlNFUEFSQVRPUiIsNDk6Ik5PVEVfRk9SIiw1MToiTk9URSIsNTI6ImRpcmVjdGlvbl90YiIsNTM6ImRpcmVjdGlvbl9idCIsNTQ6ImRpcmVjdGlvbl9ybCIsNTU6ImRpcmVjdGlvbl9sciIsNTg6IkFHR1JFR0FUSU9OIiw1OToiRVhURU5TSU9OIiw2MDoiQ09NUE9TSVRJT04iLDYxOiJERVBFTkRFTkNZIiw2MjoiTE9MTElQT1AiLDYzOiJMSU5FIiw2NDoiRE9UVEVEX0xJTkUiLDY1OiJDQUxMQkFDSyIsNjY6IkxJTksiLDY3OiJMSU5LX1RBUkdFVCIsNjg6IkNMSUNLIiw2OToiQ0FMTEJBQ0tfTkFNRSIsNzA6IkNBTExCQUNLX0FSR1MiLDcxOiJIUkVGIiw3MjoiQ1NTQ0xBU1MiLDc1OiJncmFwaENvZGVUb2tlbnMiLDc3OiJUQUdTVEFSVCIsNzg6IlRBR0VORCIsNzk6Ij09Iiw4MDoiLS0iLDgxOiJQQ1QiLDgyOiJERUZBVUxUIiw4MzoiU1BBQ0UiLDg0OiJNSU5VUyIsODU6ImtleXdvcmRzIiw4NjoiVU5JQ09ERV9URVhUIiw4NzoiTlVNIiw4ODoiQUxQSEEiLDg5OiJCUVVPVEVfU1RSIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs0LDFdLFs2LDRdLFs1LDFdLFs1LDJdLFs1LDNdLFsxMSwzXSxbMTUsMV0sWzE1LDJdLFsxNywxXSxbMTcsMV0sWzE3LDJdLFsxNywyXSxbMTcsMl0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMiw0XSxbMjIsNV0sWzM1LDJdLFszNywxXSxbMzcsMl0sWzM3LDNdLFsyMywxXSxbMjMsM10sWzIzLDRdLFsyMyw2XSxbNDAsMl0sWzQwLDNdLFsyNSw0XSxbNDIsMV0sWzQyLDJdLFsyNCwxXSxbMjQsMl0sWzI0LDFdLFsyNCwxXSxbMjAsM10sWzIwLDRdLFsyMCw0XSxbMjAsNV0sWzI4LDNdLFsyOCwyXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzQ4LDNdLFs0OCwyXSxbNDgsMl0sWzQ4LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU3LDFdLFs1NywxXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDRdLFsyNiw1XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDRdLFsyNiw1XSxbMjYsNV0sWzI2LDZdLFsyNywzXSxbNzMsMV0sWzczLDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzYsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxOCwxXSxbNTAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oJHQscmUsaWUsT2Usb2UsTmUsbWUpe3ZhciBjbj1OZS5sZW5ndGgtMTtzd2l0Y2gob2Upe2Nhc2UgODp0aGlzLiQ9TmVbY24tMV07YnJlYWs7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjp0aGlzLiQ9TmVbY25dO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzp0aGlzLiQ9TmVbY24tMV0rTmVbY25dO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTp0aGlzLiQ9TmVbY24tMV0rIn4iK05lW2NuXSsifiI7YnJlYWs7Y2FzZSAxNjpPZS5hZGRSZWxhdGlvbihOZVtjbl0pO2JyZWFrO2Nhc2UgMTc6TmVbY24tMV0udGl0bGU9T2UuY2xlYW51cExhYmVsKE5lW2NuXSksT2UuYWRkUmVsYXRpb24oTmVbY24tMV0pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPU5lW2NuXS50cmltKCksT2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI3OmNhc2UgMjg6dGhpcy4kPU5lW2NuXS50cmltKCksT2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI5Ok9lLmFkZENsYXNzZXNUb05hbWVzcGFjZShOZVtjbi0zXSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzMDpPZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoTmVbY24tNF0sTmVbY24tMV0pO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPU5lW2NuXSxPZS5hZGROYW1lc3BhY2UoTmVbY25dKTticmVhaztjYXNlIDMyOnRoaXMuJD1bTmVbY25dXTticmVhaztjYXNlIDMzOnRoaXMuJD1bTmVbY24tMV1dO2JyZWFrO2Nhc2UgMzQ6TmVbY25dLnVuc2hpZnQoTmVbY24tMl0pLHRoaXMuJD1OZVtjbl07YnJlYWs7Y2FzZSAzNjpPZS5zZXRDc3NDbGFzcyhOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgMzc6T2UuYWRkTWVtYmVycyhOZVtjbi0zXSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzODpPZS5zZXRDc3NDbGFzcyhOZVtjbi01XSxOZVtjbi0zXSksT2UuYWRkTWVtYmVycyhOZVtjbi01XSxOZVtjbi0xXSk7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9TmVbY25dLE9lLmFkZENsYXNzKE5lW2NuXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9TmVbY24tMV0sT2UuYWRkQ2xhc3MoTmVbY24tMV0pLE9lLnNldENsYXNzTGFiZWwoTmVbY24tMV0sTmVbY25dKTticmVhaztjYXNlIDQxOk9lLmFkZEFubm90YXRpb24oTmVbY25dLE5lW2NuLTJdKTticmVhaztjYXNlIDQyOnRoaXMuJD1bTmVbY25dXTticmVhaztjYXNlIDQzOk5lW2NuXS5wdXNoKE5lW2NuLTFdKSx0aGlzLiQ9TmVbY25dO2JyZWFrO2Nhc2UgNDQ6YnJlYWs7Y2FzZSA0NTpPZS5hZGRNZW1iZXIoTmVbY24tMV0sT2UuY2xlYW51cExhYmVsKE5lW2NuXSkpO2JyZWFrO2Nhc2UgNDY6YnJlYWs7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OnRoaXMuJD17aWQxOk5lW2NuLTJdLGlkMjpOZVtjbl0scmVsYXRpb246TmVbY24tMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9e2lkMTpOZVtjbi0zXSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTFdLHJlbGF0aW9uVGl0bGUxOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e2lkMTpOZVtjbi0zXSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjpOZVtjbi0xXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9e2lkMTpOZVtjbi00XSxpZDI6TmVbY25dLHJlbGF0aW9uOk5lW2NuLTJdLHJlbGF0aW9uVGl0bGUxOk5lW2NuLTNdLHJlbGF0aW9uVGl0bGUyOk5lW2NuLTFdfTticmVhaztjYXNlIDUyOk9lLmFkZE5vdGUoTmVbY25dLE5lW2NuLTFdKTticmVhaztjYXNlIDUzOk9lLmFkZE5vdGUoTmVbY25dKTticmVhaztjYXNlIDU0Ok9lLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDU1Ok9lLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDU2Ok9lLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDU3Ok9lLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDU4OnRoaXMuJD17dHlwZTE6TmVbY24tMl0sdHlwZTI6TmVbY25dLGxpbmVUeXBlOk5lW2NuLTFdfTticmVhaztjYXNlIDU5OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOk5lW2NuXSxsaW5lVHlwZTpOZVtjbi0xXX07YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9e3R5cGUxOk5lW2NuLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTpOZVtjbl19O2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOk5lW2NuXX07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9T2UucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9T2UucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPU9lLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDY3OnRoaXMuJD1PZS5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPU9lLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNjk6Y2FzZSA3NTp0aGlzLiQ9TmVbY24tMl0sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0xXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzA6Y2FzZSA3Njp0aGlzLiQ9TmVbY24tM10sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPU5lW2NuLTJdLE9lLnNldExpbmsoTmVbY24tMV0sTmVbY25dKTticmVhaztjYXNlIDcyOnRoaXMuJD1OZVtjbi0zXSxPZS5zZXRMaW5rKE5lW2NuLTJdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9TmVbY24tM10sT2Uuc2V0TGluayhOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0yXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPU5lW2NuLTRdLE9lLnNldExpbmsoTmVbY24tM10sTmVbY24tMl0sTmVbY25dKSxPZS5zZXRUb29sdGlwKE5lW2NuLTNdLE5lW2NuLTFdKTticmVhaztjYXNlIDc3OnRoaXMuJD1OZVtjbi0zXSxPZS5zZXRDbGlja0V2ZW50KE5lW2NuLTJdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9TmVbY24tNF0sT2Uuc2V0Q2xpY2tFdmVudChOZVtjbi0zXSxOZVtjbi0yXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0zXSxOZVtjbl0pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPU5lW2NuLTNdLE9lLnNldExpbmsoTmVbY24tMl0sTmVbY25dKTticmVhaztjYXNlIDgwOnRoaXMuJD1OZVtjbi00XSxPZS5zZXRMaW5rKE5lW2NuLTNdLE5lW2NuLTFdLE5lW2NuXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9TmVbY24tNF0sT2Uuc2V0TGluayhOZVtjbi0zXSxOZVtjbi0xXSksT2Uuc2V0VG9vbHRpcChOZVtjbi0zXSxOZVtjbl0pO2JyZWFrO2Nhc2UgODI6dGhpcy4kPU5lW2NuLTVdLE9lLnNldExpbmsoTmVbY24tNF0sTmVbY24tMl0sTmVbY25dKSxPZS5zZXRUb29sdGlwKE5lW2NuLTRdLE5lW2NuLTFdKTticmVhaztjYXNlIDgzOk9lLnNldENzc0NsYXNzKE5lW2NuLTFdLE5lW2NuXSk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzUsMTc6MTksMTg6MzYsMjA6NywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjc6MTMsMjg6MTQsMjk6MTUsMzA6YSwzMjpmLDM0OnAsMzU6MjAsMzk6diw0MDoyMSw0MzptLDQ0OmIsNDY6RSw0NzpfLDQ5OkwsNTE6Tiw1MjpCLDUzOmosNTQ6Uiw1NTp6LDY1OkssNjY6aXQsNjg6c3QsNzI6dXQsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0saSh3dCxbMiw1XSx7ODpbMSw0NF19KSx7ODpbMSw0NV19LGkoWCxbMiwxNl0sezIxOlsxLDQ2XX0pLGkoWCxbMiwxOF0pLGkoWCxbMiwxOV0pLGkoWCxbMiwyMF0pLGkoWCxbMiwyMV0pLGkoWCxbMiwyMl0pLGkoWCxbMiwyM10pLGkoWCxbMiwyNF0pLGkoWCxbMiwyNV0pLHszMTpbMSw0N119LHszMzpbMSw0OF19LGkoWCxbMiwyOF0pLGkoWCxbMiw0NF0sezQ4OjQ5LDU2OjUyLDU3OjUzLDEzOlsxLDUwXSwyMTpbMSw1MV0sNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdCw2MzpOdCw2NDpxdH0pLHszNjpbMSw2MV19LGkoQ3QsWzIsMzVdLHszNjpbMSw2M10sNDE6WzEsNjJdfSksaShYLFsyLDQ2XSksaShYLFsyLDQ3XSksezE2OjY0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSx7MTY6MzUsMTc6NjUsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxNjozNSwxNzo2NiwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpkdCw4OTpodH0sezE2OjM1LDE3OjY3LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7MTM6WzEsNjhdfSx7MTY6MzUsMTc6NjksMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LHsxMzpaLDUwOjcwfSxpKFgsWzIsNTRdKSxpKFgsWzIsNTVdKSxpKFgsWzIsNTZdKSxpKFgsWzIsNTddKSxpKFR0LFsyLDExXSx7MTY6MzUsMTg6MzYsMTc6NzIsMTk6WzEsNzNdLDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSksaShUdCxbMiwxMl0sezE5OlsxLDc0XX0pLHsxNTo3NSwxNjo3Niw4NDpidCw4NjptdCw4Nzp5dCw4ODpkdH0sezE2OjM1LDE3Ojc3LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKEh0LFsyLDk3XSksaShIdCxbMiw5OF0pLGkoSHQsWzIsOTldKSxpKEh0LFsyLDEwMF0pLGkoWzEsOCw5LDEyLDEzLDE5LDIxLDM2LDM4LDQxLDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY5LDcxXSxbMiwxMDFdKSxpKHd0LFsyLDZdLHsxMDo1LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDE3OjE5LDM1OjIwLDQwOjIxLDE2OjM1LDE4OjM2LDU6NzgsMzA6YSwzMjpmLDM0OnAsMzk6diw0MzptLDQ0OmIsNDY6RSw0NzpfLDQ5OkwsNTE6Tiw1MjpCLDUzOmosNTQ6Uiw1NTp6LDY1OkssNjY6aXQsNjg6c3QsNzI6dXQsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9KSx7NTo3OSwxMDo1LDE2OjM1LDE3OjE5LDE4OjM2LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDMwOmEsMzI6ZiwzNDpwLDM1OjIwLDM5OnYsNDA6MjEsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpMLDUxOk4sNTI6Qiw1MzpqLDU0OlIsNTU6eiw2NTpLLDY2Oml0LDY4OnN0LDcyOnV0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKFgsWzIsMTddKSxpKFgsWzIsMjZdKSxpKFgsWzIsMjddKSx7MTM6WzEsODFdLDE2OjM1LDE3OjgwLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7NDg6ODIsNTY6NTIsNTc6NTMsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdCw2MzpOdCw2NDpxdH0saShYLFsyLDQ1XSksezU3OjgzLDYzOk50LDY0OnF0fSxpKEl0LFsyLDYxXSx7NTY6ODQsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdH0pLGkoRnQsWzIsNjJdKSxpKEZ0LFsyLDYzXSksaShGdCxbMiw2NF0pLGkoRnQsWzIsNjVdKSxpKEZ0LFsyLDY2XSksaShrZSxbMiw2N10pLGkoa2UsWzIsNjhdKSx7ODpbMSw4Nl0sMjM6ODcsMzc6ODUsNDA6MjEsNDM6bX0sezE2Ojg4LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSx7NDI6ODksNDY6cG59LHs0NTpbMSw5MV19LHsxMzpbMSw5Ml19LHsxMzpbMSw5M119LHs2OTpbMSw5NF0sNzE6WzEsOTVdfSx7MTY6OTYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHR9LHsxMzpaLDUwOjk3fSxpKFgsWzIsNTNdKSxpKFgsWzIsMTAyXSksaShUdCxbMiwxM10pLGkoVHQsWzIsMTRdKSxpKFR0LFsyLDE1XSksezM2OlsyLDMxXX0sezE1Ojk4LDE2Ojc2LDM2OlsyLDldLDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0fSxpKE1lLFsyLDM5XSx7MTE6OTksMTI6WzEsMTAwXX0pLGkod3QsWzIsN10pLHs5OlsxLDEwMV19LGkodmUsWzIsNDhdKSx7MTY6MzUsMTc6MTAyLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSx7MTM6WzEsMTA0XSwxNjozNSwxNzoxMDMsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LGkoSXQsWzIsNjBdLHs1NjoxMDUsNTg6cHQsNTk6VSw2MDp4dCw2MTpudCw2MjpPdH0pLGkoSXQsWzIsNTldKSx7Mzg6WzEsMTA2XX0sezIzOjg3LDM3OjEwNyw0MDoyMSw0MzptfSx7ODpbMSwxMDhdLDM4OlsyLDMyXX0saShDdCxbMiwzNl0sezM2OlsxLDEwOV19KSx7Mzg6WzEsMTEwXX0sezM4OlsyLDQyXSw0MjoxMTEsNDY6cG59LHsxNjozNSwxNzoxMTIsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZHQsODk6aHR9LGkoWCxbMiw2OV0sezEzOlsxLDExM119KSxpKFgsWzIsNzFdLHsxMzpbMSwxMTVdLDY3OlsxLDExNF19KSxpKFgsWzIsNzVdLHsxMzpbMSwxMTZdLDcwOlsxLDExN119KSx7MTM6WzEsMTE4XX0saShYLFsyLDgzXSksaShYLFsyLDUyXSksezM2OlsyLDEwXX0saShNZSxbMiw0MF0pLHsxMzpbMSwxMTldfSx7MTpbMiw0XX0saSh2ZSxbMiw1MF0pLGkodmUsWzIsNDldKSx7MTY6MzUsMTc6MTIwLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmR0LDg5Omh0fSxpKEl0LFsyLDU4XSksaShYLFsyLDI5XSksezM4OlsxLDEyMV19LHsyMzo4NywzNzoxMjIsMzg6WzIsMzNdLDQwOjIxLDQzOm19LHs0MjoxMjMsNDY6cG59LGkoQ3QsWzIsMzddKSx7Mzg6WzIsNDNdfSxpKFgsWzIsNDFdKSxpKFgsWzIsNzBdKSxpKFgsWzIsNzJdKSxpKFgsWzIsNzNdLHs2NzpbMSwxMjRdfSksaShYLFsyLDc2XSksaShYLFsyLDc3XSx7MTM6WzEsMTI1XX0pLGkoWCxbMiw3OV0sezEzOlsxLDEyN10sNjc6WzEsMTI2XX0pLHsxNDpbMSwxMjhdfSxpKHZlLFsyLDUxXSksaShYLFsyLDMwXSksezM4OlsyLDM0XX0sezM4OlsxLDEyOV19LGkoWCxbMiw3NF0pLGkoWCxbMiw3OF0pLGkoWCxbMiw4MF0pLGkoWCxbMiw4MV0sezY3OlsxLDEzMF19KSxpKE1lLFsyLDhdKSxpKEN0LFsyLDM4XSksaShYLFsyLDgyXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw3NTpbMiwzMV0sOTg6WzIsMTBdLDEwMTpbMiw0XSwxMTE6WzIsNDNdLDEyMjpbMiwzNF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oJHQscmUpe2lmKHJlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoJHQpO2Vsc2V7dmFyIGllPW5ldyBFcnJvcigkdCk7dGhyb3cgaWUuaGFzaD1yZSxpZX19LHBhcnNlOmZ1bmN0aW9uKCR0KXt2YXIgcmU9dGhpcyxpZT1bMF0sT2U9W10sb2U9W251bGxdLE5lPVtdLG1lPXRoaXMudGFibGUsY249IiIsbGk9MCx5YT0wLGRhPTIsT289MSxkcz1OZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEcj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLG5yPXt5eTp7fX07Zm9yKHZhciBkaSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGRpKSYmKG5yLnl5W2RpXT10aGlzLnl5W2RpXSk7RHIuc2V0SW5wdXQoJHQsbnIueXkpLG5yLnl5LmxleGVyPURyLG5yLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBEci55eWxsb2M+InUiJiYoRHIueXlsbG9jPXt9KTt2YXIgRWU9RHIueXlsbG9jO05lLnB1c2goRWUpO3ZhciBZbj1Eci5vcHRpb25zJiZEci5vcHRpb25zLnJhbmdlczt0eXBlb2YgbnIueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9bnIueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gSGUoKXt2YXIgTHU7cmV0dXJuIEx1PU9lLnBvcCgpfHxEci5sZXgoKXx8T28sdHlwZW9mIEx1IT0ibnVtYmVyIiYmKEx1IGluc3RhbmNlb2YgQXJyYXkmJihPZT1MdSxMdT1PZS5wb3AoKSksTHU9cmUuc3ltYm9sc19bTHVdfHxMdSksTHV9Zm9yKHZhciBUaSxnbixrcyxxYSxMYT17fSxHcyxObyx2cyxudTs7KXtpZihnbj1pZVtpZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tnbl0/a3M9dGhpcy5kZWZhdWx0QWN0aW9uc1tnbl06KChUaT09PW51bGx8fHR5cGVvZiBUaT4idSIpJiYoVGk9SGUoKSksa3M9bWVbZ25dJiZtZVtnbl1bVGldKSx0eXBlb2Yga3M+InUifHwha3MubGVuZ3RofHwha3NbMF0pe3ZhciAkcz0iIjtudT1bXTtmb3IoR3MgaW4gbWVbZ25dKXRoaXMudGVybWluYWxzX1tHc10mJkdzPmRhJiZudS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bR3NdKyInIik7RHIuc2hvd1Bvc2l0aW9uPyRzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGxpKzEpK2A6CmArRHIuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtudS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1RpXXx8VGkpKyInIjokcz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhsaSsxKSsiOiBVbmV4cGVjdGVkICIrKFRpPT1Pbz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tUaV18fFRpKSsiJyIpLHRoaXMucGFyc2VFcnJvcigkcyx7dGV4dDpEci5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVGldfHxUaSxsaW5lOkRyLnl5bGluZW5vLGxvYzpFZSxleHBlY3RlZDpudX0pfWlmKGtzWzBdaW5zdGFuY2VvZiBBcnJheSYma3MubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnbisiLCB0b2tlbjogIitUaSk7c3dpdGNoKGtzWzBdKXtjYXNlIDE6aWUucHVzaChUaSksb2UucHVzaChEci55eXRleHQpLE5lLnB1c2goRHIueXlsbG9jKSxpZS5wdXNoKGtzWzFdKSxUaT1udWxsLHlhPURyLnl5bGVuZyxjbj1Eci55eXRleHQsbGk9RHIueXlsaW5lbm8sRWU9RHIueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihObz10aGlzLnByb2R1Y3Rpb25zX1trc1sxXV1bMV0sTGEuJD1vZVtvZS5sZW5ndGgtTm9dLExhLl8kPXtmaXJzdF9saW5lOk5lW05lLmxlbmd0aC0oTm98fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpOZVtOZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpOZVtOZS5sZW5ndGgtKE5vfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk5lW05lLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWW4mJihMYS5fJC5yYW5nZT1bTmVbTmUubGVuZ3RoLShOb3x8MSldLnJhbmdlWzBdLE5lW05lLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHFhPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShMYSxbY24seWEsbGksbnIueXksa3NbMV0sb2UsTmVdLmNvbmNhdChkcykpLHR5cGVvZiBxYTwidSIpcmV0dXJuIHFhO05vJiYoaWU9aWUuc2xpY2UoMCwtMSpObyoyKSxvZT1vZS5zbGljZSgwLC0xKk5vKSxOZT1OZS5zbGljZSgwLC0xKk5vKSksaWUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1trc1sxXV1bMF0pLG9lLnB1c2goTGEuJCksTmUucHVzaChMYS5fJCksdnM9bWVbaWVbaWUubGVuZ3RoLTJdXVtpZVtpZS5sZW5ndGgtMV1dLGllLnB1c2godnMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxLZT1mdW5jdGlvbigpe3ZhciBfZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihyZSxpZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihyZSxpZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocmUpfSxzZXRJbnB1dDpmdW5jdGlvbigkdCxyZSl7cmV0dXJuIHRoaXMueXk9cmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PSR0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciAkdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9JHQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPSR0LHRoaXMubWF0Y2hlZCs9JHQ7dmFyIHJlPSR0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLCR0fSx1bnB1dDpmdW5jdGlvbigkdCl7dmFyIHJlPSR0Lmxlbmd0aCxpZT0kdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PSR0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1yZSksdGhpcy5vZmZzZXQtPXJlO3ZhciBPZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxpZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWllLmxlbmd0aC0xKTt2YXIgb2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmllPyhpZS5sZW5ndGg9PT1PZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK09lW09lLmxlbmd0aC1pZS5sZW5ndGhdLmxlbmd0aC1pZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXJlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W29lWzBdLG9lWzBdK3RoaXMueXlsZW5nLXJlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oJHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSgkdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgJHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybigkdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKyR0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyICR0PXRoaXMubWF0Y2g7cmV0dXJuICR0Lmxlbmd0aDwyMCYmKCR0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC0kdC5sZW5ndGgpKSwoJHQuc3Vic3RyKDAsMjApKygkdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyICR0PXRoaXMucGFzdElucHV0KCkscmU9bmV3IEFycmF5KCR0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuICR0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtyZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oJHQscmUpe3ZhciBpZSxPZSxvZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYob2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYob2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksT2U9JHRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLE9lJiYodGhpcy55eWxpbmVubys9T2UubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46T2U/T2VbT2UubGVuZ3RoLTFdLmxlbmd0aC1PZVtPZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiskdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz0kdFswXSx0aGlzLm1hdGNoKz0kdFswXSx0aGlzLm1hdGNoZXM9JHQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoJHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPSR0WzBdLGllPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHJlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGllKXJldHVybiBpZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgTmUgaW4gb2UpdGhpc1tOZV09b2VbTmVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyICR0LHJlLGllLE9lO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIG9lPXRoaXMuX2N1cnJlbnRSdWxlcygpLE5lPTA7TmU8b2UubGVuZ3RoO05lKyspaWYoaWU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tvZVtOZV1dKSxpZSYmKCFyZXx8aWVbMF0ubGVuZ3RoPnJlWzBdLmxlbmd0aCkpe2lmKHJlPWllLE9lPU5lLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCR0PXRoaXMudGVzdF9tYXRjaChpZSxvZVtOZV0pLCR0IT09ITEpcmV0dXJuICR0O2lmKHRoaXMuX2JhY2t0cmFjayl7cmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcmU/KCR0PXRoaXMudGVzdF9tYXRjaChyZSxvZVtPZV0pLCR0IT09ITE/JHQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciByZT10aGlzLm5leHQoKTtyZXR1cm4gcmV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHJlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocmUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciByZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiByZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHJlKXtyZXR1cm4gcmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhyZXx8MCkscmU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tyZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24ocmUpe3RoaXMuYmVnaW4ocmUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHJlLGllLE9lLG9lKXtzd2l0Y2goT2Upe2Nhc2UgMDpyZXR1cm4gNTI7Y2FzZSAxOnJldHVybiA1MztjYXNlIDI6cmV0dXJuIDU0O2Nhc2UgMzpyZXR1cm4gNTU7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzI7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpyZXR1cm4gODtjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDc7Y2FzZSAxNjpyZXR1cm4gNztjYXNlIDE3OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gNjk7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gNzA7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4iU1RSIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZSIpLDM5O2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMjk6YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlLWJvZHkiKSwzNjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzg7Y2FzZSAzMjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAzMzpyZXR1cm4gODtjYXNlIDM0OmJyZWFrO2Nhc2UgMzU6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzIiksNDM7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7Y2FzZSAzODpicmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzLWJvZHkiKSwzNjtjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzg7Y2FzZSA0MjpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA0MzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0NDpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgNDU6YnJlYWs7Y2FzZSA0NjpyZXR1cm4iTUVNQkVSIjtjYXNlIDQ3OnJldHVybiA3MjtjYXNlIDQ4OnJldHVybiA2NTtjYXNlIDQ5OnJldHVybiA2NjtjYXNlIDUwOnJldHVybiA2ODtjYXNlIDUxOnJldHVybiA0OTtjYXNlIDUyOnJldHVybiA1MTtjYXNlIDUzOnJldHVybiA0NDtjYXNlIDU0OnJldHVybiA0NTtjYXNlIDU1OnJldHVybiA3MTtjYXNlIDU2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU3OnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSA1ODp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSA1OTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSA2MTp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIDY3O2Nhc2UgNjM6cmV0dXJuIDY3O2Nhc2UgNjQ6cmV0dXJuIDY3O2Nhc2UgNjU6cmV0dXJuIDY3O2Nhc2UgNjY6cmV0dXJuIDU5O2Nhc2UgNjc6cmV0dXJuIDU5O2Nhc2UgNjg6cmV0dXJuIDYxO2Nhc2UgNjk6cmV0dXJuIDYxO2Nhc2UgNzA6cmV0dXJuIDYwO2Nhc2UgNzE6cmV0dXJuIDU4O2Nhc2UgNzI6cmV0dXJuIDYyO2Nhc2UgNzM6cmV0dXJuIDYzO2Nhc2UgNzQ6cmV0dXJuIDY0O2Nhc2UgNzU6cmV0dXJuIDIxO2Nhc2UgNzY6cmV0dXJuIDQxO2Nhc2UgNzc6cmV0dXJuIDg0O2Nhc2UgNzg6cmV0dXJuIkRPVCI7Y2FzZSA3OTpyZXR1cm4iUExVUyI7Y2FzZSA4MDpyZXR1cm4gODE7Y2FzZSA4MTpyZXR1cm4iRVFVQUxTIjtjYXNlIDgyOnJldHVybiJFUVVBTFMiO2Nhc2UgODM6cmV0dXJuIDg4O2Nhc2UgODQ6cmV0dXJuIDEyO2Nhc2UgODU6cmV0dXJuIDE0O2Nhc2UgODY6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDg3OnJldHVybiA4NztjYXNlIDg4OnJldHVybiA4NjtjYXNlIDg5OnJldHVybiA4MztjYXNlIDkwOnJldHVybiA5fX0scnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpcW1wqXF0pLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyJdKS8sL14oPzpuYW1lc3BhY2VcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OlxbXCpcXSkvLC9eKD86Y2xhc3NcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W31dKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XFtcKlxdKS8sL14oPzpbe10pLywvXig/Oltcbl0pLywvXig/Oltee31cbl0qKS8sL14oPzpjc3NDbGFzc1xiKS8sL14oPzpjYWxsYmFja1xiKS8sL14oPzpsaW5rXGIpLywvXig/OmNsaWNrXGIpLywvXig/Om5vdGUgZm9yXGIpLywvXig/Om5vdGVcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpocmVmXGIpLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/On4pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OltgXSkvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86XHMqXChcKSkvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6eyJuYW1lc3BhY2UtYm9keSI6e3J1bGVzOlsyNiwzMSwzMiwzMywzNCwzNSwzNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxuYW1lc3BhY2U6e3J1bGVzOlsyNiwyNywyOCwyOSwzMCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSwiY2xhc3MtYm9keSI6e3J1bGVzOlsyNiw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxjbGFzczp7cnVsZXM6WzI2LDM3LDM4LDM5LDQwLDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMiwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzcsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzIyLDIzLDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOlsxOSwyMCwyMSwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjQsMjUsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwyNiwyNywzNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBfZX0oKTtHZS5sZXhlcj1LZTtmdW5jdGlvbiB3ZSgpe3RoaXMueXk9e319cmV0dXJuIHdlLnByb3RvdHlwZT1HZSxHZS5QYXJzZXI9d2UsbmV3IHdlfSgpO3BndC5wYXJzZXI9cGd0O2NvbnN0IF9SdD1wZ3QsU1J0PVsiIyIsIisiLCJ+IiwiLSIsIiJdO2NsYXNzIEFSdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMubWVtYmVyVHlwZT1mLHRoaXMudmlzaWJpbGl0eT0iIix0aGlzLmNsYXNzaWZpZXI9IiI7Y29uc3QgcD1EZChhLExlKCkpO3RoaXMucGFyc2VNZW1iZXIocCl9Z2V0RGlzcGxheURldGFpbHMoKXtsZXQgYT10aGlzLnZpc2liaWxpdHkrek4odGhpcy5pZCk7dGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCImJihhKz1gKCR7ek4odGhpcy5wYXJhbWV0ZXJzLnRyaW0oKSl9KWAsdGhpcy5yZXR1cm5UeXBlJiYoYSs9IiA6ICIrek4odGhpcy5yZXR1cm5UeXBlKSkpLGE9YS50cmltKCk7Y29uc3QgZj10aGlzLnBhcnNlQ2xhc3NpZmllcigpO3JldHVybntkaXNwbGF5VGV4dDphLGNzc1N0eWxlOmZ9fXBhcnNlTWVtYmVyKGEpe2xldCBmPSIiO2lmKHRoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiKXtjb25zdCBwPS8oWyMrfi1dKT8oLispXCgoLiopXCkoW1xzJCpdKT8oLiopKFskKl0pPy8sdj1hLm1hdGNoKHApO2lmKHYpe2NvbnN0IG09dlsxXT92WzFdLnRyaW0oKToiIjtpZihTUnQuaW5jbHVkZXMobSkmJih0aGlzLnZpc2liaWxpdHk9bSksdGhpcy5pZD12WzJdLnRyaW0oKSx0aGlzLnBhcmFtZXRlcnM9dlszXT92WzNdLnRyaW0oKToiIixmPXZbNF0/dls0XS50cmltKCk6IiIsdGhpcy5yZXR1cm5UeXBlPXZbNV0/dls1XS50cmltKCk6IiIsZj09PSIiKXtjb25zdCBiPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKTtiLm1hdGNoKC9bJCpdLykmJihmPWIsdGhpcy5yZXR1cm5UeXBlPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCx0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpKX19fWVsc2V7Y29uc3QgcD1hLmxlbmd0aCx2PWEuc3Vic3RyaW5nKDAsMSksbT1hLnN1YnN0cmluZyhwLTEpO1NSdC5pbmNsdWRlcyh2KSYmKHRoaXMudmlzaWJpbGl0eT12KSxtLm1hdGNoKC9bKj9dLykmJihmPW0pLHRoaXMuaWQ9YS5zdWJzdHJpbmcodGhpcy52aXNpYmlsaXR5PT09IiI/MDoxLGY9PT0iIj9wOnAtMSl9dGhpcy5jbGFzc2lmaWVyPWZ9cGFyc2VDbGFzc2lmaWVyKCl7c3dpdGNoKHRoaXMuY2xhc3NpZmllcil7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19fWNvbnN0IExLPSJjbGFzc0lkLSI7bGV0IGJndD1bXSxRbD17fSxNSz1bXSxMUnQ9MCxkaz17fSx2Z3Q9MCxGUD1bXTtjb25zdCBDVD1pPT5Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKSxmTD1mdW5jdGlvbihpKXtjb25zdCBhPVlyLnNhbml0aXplVGV4dChpLExlKCkpO2xldCBmPSIiLHA9YTtpZihhLmluZGV4T2YoIn4iKT4wKXtjb25zdCB2PWEuc3BsaXQoIn4iKTtwPUNUKHZbMF0pLGY9Q1QodlsxXSl9cmV0dXJue2NsYXNzTmFtZTpwLHR5cGU6Zn19LGFHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7YSYmKGE9Q1QoYSkpO2NvbnN0e2NsYXNzTmFtZTpwfT1mTChmKTtRbFtwXS5sYWJlbD1hfSxJSz1mdW5jdGlvbihpKXtjb25zdCBhPVlyLnNhbml0aXplVGV4dChpLExlKCkpLHtjbGFzc05hbWU6Zix0eXBlOnB9PWZMKGEpO2lmKE9iamVjdC5oYXNPd24oUWwsZikpcmV0dXJuO2NvbnN0IHY9WXIuc2FuaXRpemVUZXh0KGYsTGUoKSk7UWxbdl09e2lkOnYsdHlwZTpwLGxhYmVsOnYsY3NzQ2xhc3NlczpbXSxtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sZG9tSWQ6TEsrdisiLSIrTFJ0fSxMUnQrK30sTVJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7aWYoYSBpbiBRbClyZXR1cm4gUWxbYV0uZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrYSl9LG9HZT1mdW5jdGlvbigpe2JndD1bXSxRbD17fSxNSz1bXSxGUD1bXSxGUC5wdXNoKERSdCksZGs9e30sdmd0PTAsYXAoKX0sY0dlPWZ1bmN0aW9uKGkpe3JldHVybiBRbFtpXX0sdUdlPWZ1bmN0aW9uKCl7cmV0dXJuIFFsfSxsR2U9ZnVuY3Rpb24oKXtyZXR1cm4gYmd0fSxoR2U9ZnVuY3Rpb24oKXtyZXR1cm4gTUt9LGZHZT1mdW5jdGlvbihpKXtVdC5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGkpKSxJSyhpLmlkMSksSUsoaS5pZDIpLGkuaWQxPWZMKGkuaWQxKS5jbGFzc05hbWUsaS5pZDI9ZkwoaS5pZDIpLmNsYXNzTmFtZSxpLnJlbGF0aW9uVGl0bGUxPVlyLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxMZSgpKSxpLnJlbGF0aW9uVGl0bGUyPVlyLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxMZSgpKSxiZ3QucHVzaChpKX0sZEdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1mTChpKS5jbGFzc05hbWU7UWxbZl0uYW5ub3RhdGlvbnMucHVzaChhKX0sSVJ0PWZ1bmN0aW9uKGksYSl7SUsoaSk7Y29uc3QgZj1mTChpKS5jbGFzc05hbWUscD1RbFtmXTtpZih0eXBlb2YgYT09InN0cmluZyIpe2NvbnN0IHY9YS50cmltKCk7di5zdGFydHNXaXRoKCI8PCIpJiZ2LmVuZHNXaXRoKCI+PiIpP3AuYW5ub3RhdGlvbnMucHVzaChDVCh2LnN1YnN0cmluZygyLHYubGVuZ3RoLTIpKSk6di5pbmRleE9mKCIpIik+MD9wLm1ldGhvZHMucHVzaChuZXcgQVJ0KHYsIm1ldGhvZCIpKTp2JiZwLm1lbWJlcnMucHVzaChuZXcgQVJ0KHYsImF0dHJpYnV0ZSIpKX19LGdHZT1mdW5jdGlvbihpLGEpe0FycmF5LmlzQXJyYXkoYSkmJihhLnJldmVyc2UoKSxhLmZvckVhY2goZj0+SVJ0KGksZikpKX0scEdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj17aWQ6YG5vdGUke01LLmxlbmd0aH1gLGNsYXNzOmEsdGV4dDppfTtNSy5wdXNoKGYpfSxiR2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksQ1QoaS50cmltKCkpfSx3Z3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO2ZbMF0ubWF0Y2goL1xkLykmJihwPUxLK3ApLFFsW3BdIT09dm9pZCAwJiZRbFtwXS5jc3NDbGFzc2VzLnB1c2goYSl9KX0sdkdlPWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7YSE9PXZvaWQgMCYmKFFsW2ZdLnRvb2x0aXA9Q1QoYSkpfSl9LHdHZT1mdW5jdGlvbihpLGEpe3JldHVybiBhP2RrW2FdLmNsYXNzZXNbaV0udG9vbHRpcDpRbFtpXS50b29sdGlwfSxtR2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9TGUoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih2KXtsZXQgbT12O3ZbMF0ubWF0Y2goL1xkLykmJihtPUxLK20pLFFsW21dIT09dm9pZCAwJiYoUWxbbV0ubGluaz0kYS5mb3JtYXRVcmwoYSxwKSxwLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/UWxbbV0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIGY9PSJzdHJpbmciP1FsW21dLmxpbmtUYXJnZXQ9Q1QoZik6UWxbbV0ubGlua1RhcmdldD0iX2JsYW5rIil9KSx3Z3QoaSwiY2xpY2thYmxlIil9LHlHZT1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7eEdlKHAsYSxmKSxRbFtwXS5oYXZlQ2FsbGJhY2s9ITB9KSx3Z3QoaSwiY2xpY2thYmxlIil9LHhHZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1Zci5zYW5pdGl6ZVRleHQoaSxMZSgpKTtpZihMZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxhPT09dm9pZCAwKXJldHVybjtjb25zdCBtPXA7aWYoUWxbbV0hPT12b2lkIDApe2NvbnN0IGI9TVJ0KG0pO2xldCBFPVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7RT1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgXz0wO188RS5sZW5ndGg7XysrKXtsZXQgTD1FW19dLnRyaW0oKTtMLmNoYXJBdCgwKT09PSciJyYmTC5jaGFyQXQoTC5sZW5ndGgtMSk9PT0nIicmJihMPUwuc3Vic3RyKDEsTC5sZW5ndGgtMikpLEVbX109TH19RS5sZW5ndGg9PT0wJiZFLnB1c2goYiksRlAucHVzaChmdW5jdGlvbigpe2NvbnN0IF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2J9Il1gKTtfIT09bnVsbCYmXy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4uRSl9LCExKX0pfX0sa0dlPWZ1bmN0aW9uKGkpe0ZQLmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxFR2U9e0xJTkU6MCxET1RURURfTElORToxfSxUR2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sRFJ0PWZ1bmN0aW9uKGkpe2xldCBhPXlyKCIubWVybWFpZFRvb2x0aXAiKTsoYS5fZ3JvdXBzfHxhKVswXVswXT09PW51bGwmJihhPXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSx5cihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCB2PXlyKHRoaXMpO2lmKHYuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxhLnRleHQodi5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxhLmh0bWwoYS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHYuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSx5cih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O0ZQLnB1c2goRFJ0KTtsZXQgT1J0PSJUQiI7Y29uc3QgREs9e3NldEFjY1RpdGxlOmNnLGdldEFjY1RpdGxlOm9wLGdldEFjY0Rlc2NyaXB0aW9uOnVwLHNldEFjY0Rlc2NyaXB0aW9uOmNwLGdldENvbmZpZzooKT0+TGUoKS5jbGFzcyxhZGRDbGFzczpJSyxiaW5kRnVuY3Rpb25zOmtHZSxjbGVhcjpvR2UsZ2V0Q2xhc3M6Y0dlLGdldENsYXNzZXM6dUdlLGdldE5vdGVzOmhHZSxhZGRBbm5vdGF0aW9uOmRHZSxhZGROb3RlOnBHZSxnZXRSZWxhdGlvbnM6bEdlLGFkZFJlbGF0aW9uOmZHZSxnZXREaXJlY3Rpb246KCk9Pk9SdCxzZXREaXJlY3Rpb246aT0+e09SdD1pfSxhZGRNZW1iZXI6SVJ0LGFkZE1lbWJlcnM6Z0dlLGNsZWFudXBMYWJlbDpiR2UsbGluZVR5cGU6RUdlLHJlbGF0aW9uVHlwZTpUR2Usc2V0Q2xpY2tFdmVudDp5R2Usc2V0Q3NzQ2xhc3M6d2d0LHNldExpbms6bUdlLGdldFRvb2x0aXA6d0dlLHNldFRvb2x0aXA6dkdlLGxvb2tVcERvbUlkOk1SdCxzZXREaWFncmFtVGl0bGU6WjIsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldENsYXNzTGFiZWw6YUdlLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtka1tpXT09PXZvaWQgMCYmKGRrW2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6TEsraSsiLSIrdmd0fSx2Z3QrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLGEpe2RrW2ldIT09dm9pZCAwJiZhLm1hcChmPT57UWxbZl0ucGFyZW50PWksZGtbaV0uY2xhc3Nlc1tmXT1RbFtmXX0pfSxnZXROYW1lc3BhY2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGRrW2ldfSxnZXROYW1lc3BhY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGRrfX0sTlJ0PWk9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZpbGw6ICR7aS5jbGFzc1RleHR9OwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogIGZvbnQtc2l6ZTogMTBweDsKCiAgLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgfQoKfQoKLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7aS5jbGFzc1RleHR9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKfQoubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7CiAgYmFja2dyb3VuZDogJHtpLm1haW5Ca2d9Owp9CgouY2xhc3NUaXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQoubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCgouZGl2aWRlciB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgpnLmNsaWNrYWJsZSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpnLmNsYXNzR3JvdXAgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9Owp9CgpnLmNsYXNzR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouY2xhc3NMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5jbGFzc0xhYmVsIC5sYWJlbCB7CiAgZmlsbDogJHtpLm5vZGVCb3JkZXJ9OwogIGZvbnQtc2l6ZTogMTBweDsKfQoKLnJlbGF0aW9uIHsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9CgouZGFzaGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMzsKfQoKLmRvdHRlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDEgMjsKfQoKI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcFN0YXJ0LCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNsb2xsaXBvcEVuZCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke2kubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgouZWRnZVRlcm1pbmFscyB7CiAgZm9udC1zaXplOiAxMXB4Owp9CgouY2xhc3NUaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7aS50ZXh0Q29sb3J9Owp9CmA7bGV0IFBSdD0wO2NvbnN0IENHZT1mdW5jdGlvbihpLGEsZixwLHYpe2NvbnN0IG09ZnVuY3Rpb24odXQpe3N3aXRjaCh1dCl7Y2FzZSB2LmRiLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIHYuZGIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kiO2Nhc2Ugdi5kYi5yZWxhdGlvblR5cGUuTE9MTElQT1A6cmV0dXJuImxvbGxpcG9wIn19O2EucG9pbnRzPWEucG9pbnRzLmZpbHRlcih1dD0+IU51bWJlci5pc05hTih1dC55KSk7Y29uc3QgYj1hLnBvaW50cyxFPVo3KCkueChmdW5jdGlvbih1dCl7cmV0dXJuIHV0Lnh9KS55KGZ1bmN0aW9uKHV0KXtyZXR1cm4gdXQueX0pLmN1cnZlKEZOKSxfPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsRShiKSkuYXR0cigiaWQiLCJlZGdlIitQUnQpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKTtsZXQgTD0iIjtwLmFycm93TWFya2VyQWJzb2x1dGUmJihMPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLEw9TC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxMPUwucmVwbGFjZSgvXCkvZywiXFwpIikpLGYucmVsYXRpb24ubGluZVR5cGU9PTEmJl8uYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkYXNoZWQtbGluZSIpLGYucmVsYXRpb24ubGluZVR5cGU9PTEwJiZfLmF0dHIoImNsYXNzIiwicmVsYXRpb24gZG90dGVkLWxpbmUiKSxmLnJlbGF0aW9uLnR5cGUxIT09Im5vbmUiJiZfLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0wrIiMiK20oZi5yZWxhdGlvbi50eXBlMSkrIlN0YXJ0KSIpLGYucmVsYXRpb24udHlwZTIhPT0ibm9uZSImJl8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK0wrIiMiK20oZi5yZWxhdGlvbi50eXBlMikrIkVuZCkiKTtsZXQgTixCO2NvbnN0IGo9YS5wb2ludHMubGVuZ3RoO2xldCBSPSRhLmNhbGNMYWJlbFBvc2l0aW9uKGEucG9pbnRzKTtOPVIueCxCPVIueTtsZXQgeixLLGl0LHN0O2lmKGolMiE9PTAmJmo+MSl7bGV0IHV0PSRhLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKGYucmVsYXRpb24udHlwZTEhPT0ibm9uZSIsYS5wb2ludHMsYS5wb2ludHNbMF0pLGJ0PSRhLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKGYucmVsYXRpb24udHlwZTIhPT0ibm9uZSIsYS5wb2ludHMsYS5wb2ludHNbai0xXSk7VXQuZGVidWcoImNhcmRpbmFsaXR5XzFfcG9pbnQgIitKU09OLnN0cmluZ2lmeSh1dCkpLFV0LmRlYnVnKCJjYXJkaW5hbGl0eV8yX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoYnQpKSx6PXV0LngsSz11dC55LGl0PWJ0Lngsc3Q9YnQueX1pZihmLnRpdGxlIT09dm9pZCAwKXtjb25zdCB1dD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGJ0PXV0LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJ4IixOKS5hdHRyKCJ5IixCKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGYudGl0bGUpO3dpbmRvdy5sYWJlbD1idDtjb25zdCBtdD1idC5ub2RlKCkuZ2V0QkJveCgpO3V0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsbXQueC1wLnBhZGRpbmcvMikuYXR0cigieSIsbXQueS1wLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLG10LndpZHRoK3AucGFkZGluZykuYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQrcC5wYWRkaW5nKX1VdC5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShmKSksZi5yZWxhdGlvblRpdGxlMSE9PXZvaWQgMCYmZi5yZWxhdGlvblRpdGxlMSE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLHopLmF0dHIoInkiLEspLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KGYucmVsYXRpb25UaXRsZTEpLGYucmVsYXRpb25UaXRsZTIhPT12b2lkIDAmJmYucmVsYXRpb25UaXRsZTIhPT0ibm9uZSImJmkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixpdCkuYXR0cigieSIsc3QpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KGYucmVsYXRpb25UaXRsZTIpLFBSdCsrfSxfR2U9ZnVuY3Rpb24oaSxhLGYscCl7VXQuZGVidWcoIlJlbmRlcmluZyBjbGFzcyAiLGEsZik7Y29uc3Qgdj1hLmlkLG09e2lkOnYsbGFiZWw6YS5pZCx3aWR0aDowLGhlaWdodDowfSxiPWkuYXBwZW5kKCJnIikuYXR0cigiaWQiLHAuZGIubG9va1VwRG9tSWQodikpLmF0dHIoImNsYXNzIiwiY2xhc3NHcm91cCIpO2xldCBFO2EubGluaz9FPWIuYXBwZW5kKCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixhLmxpbmtUYXJnZXQpLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApOkU9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixmLnRleHRIZWlnaHQrZi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTtsZXQgXz0hMDthLmFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24oYnQpe2NvbnN0IG10PUUuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIitidCsiwrsiKTtffHxtdC5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KSxfPSExfSk7bGV0IEw9RlJ0KGEpO2NvbnN0IE49RS5hcHBlbmQoInRzcGFuIikudGV4dChMKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7X3x8Ti5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KTtjb25zdCBCPUUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7bGV0IGosUix6O2lmKGEubWVtYmVycy5sZW5ndGg+MCl7aj1iLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4vMik7Y29uc3QgYnQ9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixmLnBhZGRpbmcpLmF0dHIoInkiLEIrZi5kaXZpZGVyTWFyZ2luK2YudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtfPSEwLGEubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKG10KXtCUnQoYnQsbXQsXyxmKSxfPSExfSksUj1idC5ub2RlKCkuZ2V0QkJveCgpfWlmKGEubWV0aG9kcy5sZW5ndGg+MCl7ej1iLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0KS5hdHRyKCJ5MiIsZi5wYWRkaW5nK0IrZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0KTtjb25zdCBidD1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGYucGFkZGluZykuYXR0cigieSIsQisyKmYuZGl2aWRlck1hcmdpbitSLmhlaWdodCtmLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Xz0hMCxhLm1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtdCl7QlJ0KGJ0LG10LF8sZiksXz0hMX0pfWNvbnN0IEs9Yi5ub2RlKCkuZ2V0QkJveCgpO3ZhciBpdD0iICI7YS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaXQ9aXQrYS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgdXQ9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsSy53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixLLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsaXQpLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIEUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihidCl7YnQuc2V0QXR0cmlidXRlKCJ4IiwodXQtYnQuZ2V0QkJveCgpLndpZHRoKS8yKX0pLGEudG9vbHRpcCYmRS5pbnNlcnQoInRpdGxlIikudGV4dChhLnRvb2x0aXApLGomJmouYXR0cigieDIiLHV0KSx6JiZ6LmF0dHIoIngyIix1dCksbS53aWR0aD11dCxtLmhlaWdodD1LLmhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luLG19LEZSdD1mdW5jdGlvbihpKXtsZXQgYT1pLmlkO3JldHVybiBpLnR5cGUmJihhKz0iPCIrek4oaS50eXBlKSsiPiIpLGF9LFNHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5kZWJ1ZygiUmVuZGVyaW5nIG5vdGUgIixhLGYpO2NvbnN0IHY9YS5pZCxtPXtpZDp2LHRleHQ6YS50ZXh0LHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsdikuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IEU9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixmLnRleHRIZWlnaHQrZi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTtjb25zdCBfPUpTT04ucGFyc2UoYCIke2EudGV4dH0iYCkuc3BsaXQoYApgKTtfLmZvckVhY2goZnVuY3Rpb24oail7VXQuZGVidWcoYEFkZGluZyBsaW5lOiAke2p9YCksRS5hcHBlbmQoInRzcGFuIikudGV4dChqKS5hdHRyKCJjbGFzcyIsInRpdGxlIikuYXR0cigiZHkiLGYudGV4dEhlaWdodCl9KTtjb25zdCBMPWIubm9kZSgpLmdldEJCb3goKSxCPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEwud2lkdGgrMipmLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsTC5oZWlnaHQrXy5sZW5ndGgqZi50ZXh0SGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4pLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIEUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihqKXtqLnNldEF0dHJpYnV0ZSgieCIsKEItai5nZXRCQm94KCkud2lkdGgpLzIpfSksbS53aWR0aD1CLG0uaGVpZ2h0PUwuaGVpZ2h0K18ubGVuZ3RoKmYudGV4dEhlaWdodCtmLnBhZGRpbmcrLjUqZi5kaXZpZGVyTWFyZ2luLG19LEJSdD1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtkaXNwbGF5VGV4dDp2LGNzc1N0eWxlOm19PWEuZ2V0RGlzcGxheURldGFpbHMoKSxiPWkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHAucGFkZGluZykudGV4dCh2KTttIT09IiImJmIuYXR0cigic3R5bGUiLGEuY3NzU3R5bGUpLGZ8fGIuYXR0cigiZHkiLHAudGV4dEhlaWdodCl9LG1ndD17Z2V0Q2xhc3NUaXRsZVN0cmluZzpGUnQsZHJhd0NsYXNzOl9HZSxkcmF3RWRnZTpDR2UsZHJhd05vdGU6U0dlfTtsZXQgT0s9e307Y29uc3QgTks9MjAsQlA9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3QuZW50cmllcyhPSykuZmluZChmPT5mWzFdLmxhYmVsPT09aSk7aWYoYSlyZXR1cm4gYVswXX0sQUdlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sTEdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6X1J0LGRiOkRLLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5jbGFzcztPSz17fSxVdC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IG09TGUoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxfPUUuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO0FHZShfKTtjb25zdCBMPW5ldyBhMSh7bXVsdGlncmFwaDohMH0pO0wuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLEwuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgTj1wLmRiLmdldENsYXNzZXMoKSxCPU9iamVjdC5rZXlzKE4pO2Zvcihjb25zdCB1dCBvZiBCKXtjb25zdCBidD1OW3V0XSxtdD1tZ3QuZHJhd0NsYXNzKF8sYnQsdixwKTtPS1ttdC5pZF09bXQsTC5zZXROb2RlKG10LmlkLG10KSxVdC5pbmZvKCJPcmcgaGVpZ2h0OiAiK210LmhlaWdodCl9cC5kYi5nZXRSZWxhdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtVdC5pbmZvKCJ0am9obyIrQlAodXQuaWQxKStCUCh1dC5pZDIpK0pTT04uc3RyaW5naWZ5KHV0KSksTC5zZXRFZGdlKEJQKHV0LmlkMSksQlAodXQuaWQyKSx7cmVsYXRpb246dXR9LHV0LnRpdGxlfHwiREVGQVVMVCIpfSkscC5kYi5nZXROb3RlcygpLmZvckVhY2goZnVuY3Rpb24odXQpe1V0LmRlYnVnKGBBZGRpbmcgbm90ZTogJHtKU09OLnN0cmluZ2lmeSh1dCl9YCk7Y29uc3QgYnQ9bWd0LmRyYXdOb3RlKF8sdXQsdixwKTtPS1tidC5pZF09YnQsTC5zZXROb2RlKGJ0LmlkLGJ0KSx1dC5jbGFzcyYmdXQuY2xhc3MgaW4gTiYmTC5zZXRFZGdlKHV0LmlkLEJQKHV0LmNsYXNzKSx7cmVsYXRpb246e2lkMTp1dC5pZCxpZDI6dXQuY2xhc3MscmVsYXRpb246e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6MTB9fX0sIkRFRkFVTFQiKX0pLGVMKEwpLEwubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXt1dCE9PXZvaWQgMCYmTC5ub2RlKHV0KSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJOb2RlICIrdXQrIjogIitKU09OLnN0cmluZ2lmeShMLm5vZGUodXQpKSksRS5zZWxlY3QoIiMiKyhwLmRiLmxvb2tVcERvbUlkKHV0KXx8dXQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoTC5ub2RlKHV0KS54LUwubm9kZSh1dCkud2lkdGgvMikrIiwiKyhMLm5vZGUodXQpLnktTC5ub2RlKHV0KS5oZWlnaHQvMikrIiApIikpfSksTC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24odXQpe3V0IT09dm9pZCAwJiZMLmVkZ2UodXQpIT09dm9pZCAwJiYoVXQuZGVidWcoIkVkZ2UgIit1dC52KyIgLT4gIit1dC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoTC5lZGdlKHV0KSkpLG1ndC5kcmF3RWRnZShfLEwuZWRnZSh1dCksTC5lZGdlKHV0KS5yZWxhdGlvbix2LHApKX0pO2NvbnN0IHo9Xy5ub2RlKCkuZ2V0QkJveCgpLEs9ei53aWR0aCtOSyoyLGl0PXouaGVpZ2h0K05LKjI7b2coXyxpdCxLLHYudXNlTWF4V2lkdGgpO2NvbnN0IHN0PWAke3oueC1OS30gJHt6LnktTkt9ICR7S30gJHtpdH1gO1V0LmRlYnVnKGB2aWV3Qm94ICR7c3R9YCksXy5hdHRyKCJ2aWV3Qm94IixzdCl9fSxzdHlsZXM6TlJ0LGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLERLLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx5Z3Q9aT0+WXIuc2FuaXRpemVUZXh0KGksTGUoKSk7bGV0IHhndD17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxjdXJ2ZTp2b2lkIDB9O2NvbnN0IE1HZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PU9iamVjdC5rZXlzKGkpO1V0LmluZm8oImtleXM6Iix2KSxVdC5pbmZvKGkpLHYuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgTCxOO2NvbnN0IGI9aVttXSxfPXtzaGFwZToicmVjdCIsaWQ6Yi5pZCxkb21JZDpiLmRvbUlkLGxhYmVsVGV4dDp5Z3QoYi5pZCksbGFiZWxTdHlsZToiIixzdHlsZToiZmlsbDogbm9uZTsgc3Ryb2tlOiBibGFjayIscGFkZGluZzooKEw9TGUoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpMLnBhZGRpbmcpPz8oKE49TGUoKS5jbGFzcyk9PW51bGw/dm9pZCAwOk4ucGFkZGluZyl9O2Euc2V0Tm9kZShiLmlkLF8pLFJSdChiLmNsYXNzZXMsYSxmLHAsYi5pZCksVXQuaW5mbygic2V0Tm9kZSIsXyl9KX0sUlJ0PWZ1bmN0aW9uKGksYSxmLHAsdil7Y29uc3QgbT1PYmplY3Qua2V5cyhpKTtVdC5pbmZvKCJrZXlzOiIsbSksVXQuaW5mbyhpKSxtLmZpbHRlcihiPT5pW2JdLnBhcmVudD09dikuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgeixLO2NvbnN0IEU9aVtiXSxfPUUuY3NzQ2xhc3Nlcy5qb2luKCIgIiksTD17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sTj1FLmxhYmVsPz9FLmlkLEI9MCxqPSJjbGFzc19ib3giLFI9e2xhYmVsU3R5bGU6TC5sYWJlbFN0eWxlLHNoYXBlOmosbGFiZWxUZXh0OnlndChOKSxjbGFzc0RhdGE6RSxyeDpCLHJ5OkIsY2xhc3M6XyxzdHlsZTpMLnN0eWxlLGlkOkUuaWQsZG9tSWQ6RS5kb21JZCx0b29sdGlwOnAuZGIuZ2V0VG9vbHRpcChFLmlkLHYpfHwiIixoYXZlQ2FsbGJhY2s6RS5oYXZlQ2FsbGJhY2ssbGluazpFLmxpbmssd2lkdGg6RS50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6RS50eXBlLHBhZGRpbmc6KCh6PUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6ei5wYWRkaW5nKT8/KChLPUxlKCkuY2xhc3MpPT1udWxsP3ZvaWQgMDpLLnBhZGRpbmcpfTthLnNldE5vZGUoRS5pZCxSKSx2JiZhLnNldFBhcmVudChFLmlkLHYpLFV0LmluZm8oInNldE5vZGUiLFIpfSl9LElHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKGkpLGkuZm9yRWFjaChmdW5jdGlvbih2LG0pe3ZhciBLLGl0O2NvbnN0IGI9dixFPSIiLF89e2xhYmVsU3R5bGU6IiIsc3R5bGU6IiJ9LEw9Yi50ZXh0LE49MCxCPSJub3RlIixqPXtsYWJlbFN0eWxlOl8ubGFiZWxTdHlsZSxzaGFwZTpCLGxhYmVsVGV4dDp5Z3QoTCksbm90ZURhdGE6YixyeDpOLHJ5Ok4sY2xhc3M6RSxzdHlsZTpfLnN0eWxlLGlkOmIuaWQsZG9tSWQ6Yi5pZCx0b29sdGlwOiIiLHR5cGU6Im5vdGUiLHBhZGRpbmc6KChLPUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Sy5wYWRkaW5nKT8/KChpdD1MZSgpLmNsYXNzKT09bnVsbD92b2lkIDA6aXQucGFkZGluZyl9O2lmKGEuc2V0Tm9kZShiLmlkLGopLFV0LmluZm8oInNldE5vZGUiLGopLCFiLmNsYXNzfHwhKGIuY2xhc3MgaW4gcCkpcmV0dXJuO2NvbnN0IFI9ZittLHo9e2lkOmBlZGdlTm90ZSR7Un1gLGNsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOiJkb3R0ZWQiLGFycm93aGVhZDoibm9uZSIsc3RhcnRMYWJlbFJpZ2h0OiIiLGVuZExhYmVsTGVmdDoiIixhcnJvd1R5cGVTdGFydDoibm9uZSIsYXJyb3dUeXBlRW5kOiJub25lIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGN1cnZlOlgyKHhndC5jdXJ2ZSxpZyl9O2Euc2V0RWRnZShiLmlkLGIuY2xhc3MseixSKX0pfSxER2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUxlKCkuZmxvd2NoYXJ0O2xldCBwPTA7aS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBiO3ArKztjb25zdCBtPXtjbGFzc2VzOiJyZWxhdGlvbiIscGF0dGVybjp2LnJlbGF0aW9uLmxpbmVUeXBlPT0xPyJkYXNoZWQiOiJzb2xpZCIsaWQ6ImlkIitwLGFycm93aGVhZDp2LnR5cGU9PT0iYXJyb3dfb3BlbiI/Im5vbmUiOiJub3JtYWwiLHN0YXJ0TGFiZWxSaWdodDp2LnJlbGF0aW9uVGl0bGUxPT09Im5vbmUiPyIiOnYucmVsYXRpb25UaXRsZTEsZW5kTGFiZWxMZWZ0OnYucmVsYXRpb25UaXRsZTI9PT0ibm9uZSI/IiI6di5yZWxhdGlvblRpdGxlMixhcnJvd1R5cGVTdGFydDpqUnQodi5yZWxhdGlvbi50eXBlMSksYXJyb3dUeXBlRW5kOmpSdCh2LnJlbGF0aW9uLnR5cGUyKSxzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGN1cnZlOlgyKGY9PW51bGw/dm9pZCAwOmYuY3VydmUsaWcpfTtpZihVdC5pbmZvKG0sdiksdi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgRT1lbSh2LnN0eWxlKTttLnN0eWxlPUUuc3R5bGUsbS5sYWJlbFN0eWxlPUUubGFiZWxTdHlsZX12LnRleHQ9di50aXRsZSx2LnRleHQ9PT12b2lkIDA/di5zdHlsZSE9PXZvaWQgMCYmKG0uYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToobS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsbS5sYWJlbHBvcz0iYyIsKChiPUxlKCkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Yi5odG1sTGFiZWxzKT8/TGUoKS5odG1sTGFiZWxzPyhtLmxhYmVsVHlwZT0iaHRtbCIsbS5sYWJlbD0nPHNwYW4gY2xhc3M9ImVkZ2VMYWJlbCI+Jyt2LnRleHQrIjwvc3Bhbj4iKToobS5sYWJlbFR5cGU9InRleHQiLG0ubGFiZWw9di50ZXh0LnJlcGxhY2UoWXIubGluZUJyZWFrUmVnZXgsYApgKSx2LnN0eWxlPT09dm9pZCAwJiYobS5zdHlsZT1tLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLG0ubGFiZWxTdHlsZT1tLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLGEuc2V0RWRnZSh2LmlkMSx2LmlkMixtLHApfSl9LE9HZT1mdW5jdGlvbihpKXt4Z3Q9ey4uLnhndCwuLi5pfX0sTkdlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe1V0LmluZm8oIkRyYXdpbmcgY2xhc3MgLSAiLGEpO2NvbnN0IHY9TGUoKS5mbG93Y2hhcnQ/P0xlKCkuY2xhc3MsbT1MZSgpLnNlY3VyaXR5TGV2ZWw7VXQuaW5mbygiY29uZmlnOiIsdik7Y29uc3QgYj0odj09bnVsbD92b2lkIDA6di5ub2RlU3BhY2luZyk/PzUwLEU9KHY9PW51bGw/dm9pZCAwOnYucmFua1NwYWNpbmcpPz81MCxfPW5ldyBhMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnAuZGIuZ2V0RGlyZWN0aW9uKCksbm9kZXNlcDpiLHJhbmtzZXA6RSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSksTD1wLmRiLmdldE5hbWVzcGFjZXMoKSxOPXAuZGIuZ2V0Q2xhc3NlcygpLEI9cC5kYi5nZXRSZWxhdGlvbnMoKSxqPXAuZGIuZ2V0Tm90ZXMoKTtVdC5pbmZvKEIpLE1HZShMLF8sYSxwKSxSUnQoTixfLGEscCksREdlKEIsXyksSUdlKGosXyxCLmxlbmd0aCsxLE4pO2xldCBSO209PT0ic2FuZGJveCImJihSPXlyKCIjaSIrYSkpO2NvbnN0IHo9eXIobT09PSJzYW5kYm94Ij9SLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxLPXouc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGl0PXouc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IEkwdChpdCxfLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiLCJsb2xsaXBvcCJdLCJjbGFzc0RpYWdyYW0iLGEpLCRhLmluc2VydFRpdGxlKEssImNsYXNzVGl0bGVUZXh0Iiwodj09bnVsbD92b2lkIDA6di50aXRsZVRvcE1hcmdpbik/PzUscC5kYi5nZXREaWFncmFtVGl0bGUoKSksY1QoXyxLLHY9PW51bGw/dm9pZCAwOnYuZGlhZ3JhbVBhZGRpbmcsdj09bnVsbD92b2lkIDA6di51c2VNYXhXaWR0aCksISh2IT1udWxsJiZ2Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD1tPT09InNhbmRib3giP1Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsdXQ9c3QucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IGJ0IG9mIHV0KXtjb25zdCBtdD1idC5nZXRCQm94KCkseXQ9c3QuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt5dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx5dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx5dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixtdC53aWR0aCkseXQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG10LmhlaWdodCksYnQuaW5zZXJ0QmVmb3JlKHl0LGJ0LmZpcnN0Q2hpbGQpfX19O2Z1bmN0aW9uIGpSdChpKXtsZXQgYTtzd2l0Y2goaSl7Y2FzZSAwOmE9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6YT0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6YT0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzphPSJkZXBlbmRlbmN5IjticmVhaztjYXNlIDQ6YT0ibG9sbGlwb3AiO2JyZWFrO2RlZmF1bHQ6YT0ibm9uZSJ9cmV0dXJuIGF9Y29uc3QgUEdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6X1J0LGRiOkRLLHJlbmRlcmVyOntzZXRDb25mOk9HZSxkcmF3Ok5HZX0sc3R5bGVzOk5SdCxpbml0Omk9PntpLmNsYXNzfHwoaS5jbGFzcz17fSksaS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPWkuYXJyb3dNYXJrZXJBYnNvbHV0ZSxESy5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGtndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEN0LFosVHQsSHQpe2ZvcihUdD1UdHx8e30sSHQ9Q3QubGVuZ3RoO0h0LS07VHRbQ3RbSHRdXT1aKTtyZXR1cm4gVHR9LGE9WzEsMl0sZj1bMSwzXSxwPVsxLDRdLHY9WzIsNF0sbT1bMSw5XSxiPVsxLDExXSxFPVsxLDE1XSxfPVsxLDE2XSxMPVsxLDE3XSxOPVsxLDE4XSxCPVsxLDMwXSxqPVsxLDE5XSxSPVsxLDIwXSx6PVsxLDIxXSxLPVsxLDIyXSxpdD1bMSwyM10sc3Q9WzEsMjVdLHV0PVsxLDI2XSxidD1bMSwyN10sbXQ9WzEsMjhdLHl0PVsxLDI5XSxkdD1bMSwzMl0saHQ9WzEsMzNdLHd0PVsxLDM0XSxYPVsxLDM1XSxwdD1bMSwzMV0sVT1bMSw0LDUsMTUsMTYsMTgsMjAsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLHh0PVsxLDQsNSwxMywxNCwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sbnQ9WzQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sT3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLGNzc0NsYXNzU3RhdGVtZW50OjExLGlkU3RhdGVtZW50OjEyLERFU0NSOjEzLCItLT4iOjE0LEhJREVfRU1QVFk6MTUsc2NhbGU6MTYsV0lEVEg6MTcsQ09NUE9TSVRfU1RBVEU6MTgsU1RSVUNUX1NUQVJUOjE5LFNUUlVDVF9TVE9QOjIwLFNUQVRFX0RFU0NSOjIxLEFTOjIyLElEOjIzLEZPUks6MjQsSk9JTjoyNSxDSE9JQ0U6MjYsQ09OQ1VSUkVOVDoyNyxub3RlOjI4LG5vdGVQb3NpdGlvbjoyOSxOT1RFX1RFWFQ6MzAsZGlyZWN0aW9uOjMxLGFjY190aXRsZTozMixhY2NfdGl0bGVfdmFsdWU6MzMsYWNjX2Rlc2NyOjM0LGFjY19kZXNjcl92YWx1ZTozNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM2LGNsYXNzRGVmOjM3LENMQVNTREVGX0lEOjM4LENMQVNTREVGX1NUWUxFT1BUUzozOSxERUZBVUxUOjQwLGNsYXNzOjQxLENMQVNTRU5USVRZX0lEUzo0MixTVFlMRUNMQVNTOjQzLGRpcmVjdGlvbl90Yjo0NCxkaXJlY3Rpb25fYnQ6NDUsZGlyZWN0aW9uX3JsOjQ2LGRpcmVjdGlvbl9scjo0Nyxlb2w6NDgsIjsiOjQ5LEVER0VfU1RBVEU6NTAsU1RZTEVfU0VQQVJBVE9SOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDEzOiJERVNDUiIsMTQ6Ii0tPiIsMTU6IkhJREVfRU1QVFkiLDE2OiJzY2FsZSIsMTc6IldJRFRIIiwxODoiQ09NUE9TSVRfU1RBVEUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIwOiJTVFJVQ1RfU1RPUCIsMjE6IlNUQVRFX0RFU0NSIiwyMjoiQVMiLDIzOiJJRCIsMjQ6IkZPUksiLDI1OiJKT0lOIiwyNjoiQ0hPSUNFIiwyNzoiQ09OQ1VSUkVOVCIsMjg6Im5vdGUiLDMwOiJOT1RFX1RFWFQiLDMyOiJhY2NfdGl0bGUiLDMzOiJhY2NfdGl0bGVfdmFsdWUiLDM0OiJhY2NfZGVzY3IiLDM1OiJhY2NfZGVzY3JfdmFsdWUiLDM2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiY2xhc3NEZWYiLDM4OiJDTEFTU0RFRl9JRCIsMzk6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDA6IkRFRkFVTFQiLDQxOiJjbGFzcyIsNDI6IkNMQVNTRU5USVRZX0lEUyIsNDM6IlNUWUxFQ0xBU1MiLDQ0OiJkaXJlY3Rpb25fdGIiLDQ1OiJkaXJlY3Rpb25fYnQiLDQ2OiJkaXJlY3Rpb25fcmwiLDQ3OiJkaXJlY3Rpb25fbHIiLDQ5OiI7Iiw1MDoiRURHRV9TVEFURSIsNTE6IlNUWUxFX1NFUEFSQVRPUiIsNTI6ImxlZnRfb2YiLDUzOiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzQ4LDFdLFs0OCwxXSxbMTIsMV0sWzEyLDFdLFsxMiwzXSxbMTIsM10sWzI5LDFdLFsyOSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihaLFR0LEh0LEl0LEZ0LGtlLHBuKXt2YXIgTWU9a2UubGVuZ3RoLTE7c3dpdGNoKEZ0KXtjYXNlIDM6cmV0dXJuIEl0LnNldFJvb3REb2Moa2VbTWVdKSxrZVtNZV07Y2FzZSA0OnRoaXMuJD1bXTticmVhaztjYXNlIDU6a2VbTWVdIT0ibmwiJiYoa2VbTWUtMV0ucHVzaChrZVtNZV0pLHRoaXMuJD1rZVtNZS0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9a2VbTWVdO2JyZWFrO2Nhc2UgODp0aGlzLiQ9Im5sIjticmVhaztjYXNlIDExOnRoaXMuJD1rZVtNZV07YnJlYWs7Y2FzZSAxMjpjb25zdCB3ZT1rZVtNZS0xXTt3ZS5kZXNjcmlwdGlvbj1JdC50cmltQ29sb24oa2VbTWVdKSx0aGlzLiQ9d2U7YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6a2VbTWUtMl0sc3RhdGUyOmtlW01lXX07YnJlYWs7Y2FzZSAxNDpjb25zdCBfZT1JdC50cmltQ29sb24oa2VbTWVdKTt0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6a2VbTWUtM10sc3RhdGUyOmtlW01lLTFdLGRlc2NyaXB0aW9uOl9lfTticmVhaztjYXNlIDE4OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzprZVtNZS0xXX07YnJlYWs7Y2FzZSAxOTp2YXIgdmU9a2VbTWVdLEdlPWtlW01lLTJdLnRyaW0oKTtpZihrZVtNZV0ubWF0Y2goIjoiKSl7dmFyIEtlPWtlW01lXS5zcGxpdCgiOiIpO3ZlPUtlWzBdLEdlPVtHZSxLZVsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6dmUsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246R2V9O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246a2VbTWUtNV0sZG9jOmtlW01lLTFdfTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDprZVtNZV0sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWVdLHR5cGU6ImNob2ljZSJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6SXQuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmtlW01lLTJdLnRyaW0oKSx0ZXh0OmtlW01lXS50cmltKCl9fTticmVhaztjYXNlIDI4OnRoaXMuJD1rZVtNZV0udHJpbSgpLEl0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1rZVtNZV0udHJpbSgpLEl0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD17c3RtdDoiY2xhc3NEZWYiLGlkOmtlW01lLTFdLnRyaW0oKSxjbGFzc2VzOmtlW01lXS50cmltKCl9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtzdG10OiJhcHBseUNsYXNzIixpZDprZVtNZS0xXS50cmltKCksc3R5bGVDbGFzczprZVtNZV0udHJpbSgpfTticmVhaztjYXNlIDM0Okl0LnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNTpJdC5zZXREaXJlY3Rpb24oIkJUIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMzY6SXQuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDM3Okl0LnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MDpjYXNlIDQxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lXS50cmltKCksdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6a2VbTWUtMl0udHJpbSgpLGNsYXNzZXM6W2tlW01lXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmtlW01lLTJdLnRyaW0oKSxjbGFzc2VzOltrZVtNZV0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OmEsNTpmLDY6cH0sezE6WzNdfSx7Mzo1LDQ6YSw1OmYsNjpwfSx7Mzo2LDQ6YSw1OmYsNjpwfSxpKFsxLDQsNSwxNSwxNiwxOCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sdix7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0Om0sNTpiLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDE1OkUsMTY6XywxODpMLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiw1XSksezk6MzYsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjE6TiwyMzpCLDI0OmosMjU6UiwyNjp6LDI3OkssMjg6aXQsMzE6MjQsMzI6c3QsMzQ6dXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZHQsNDU6aHQsNDY6d3QsNDc6WCw1MDpwdH0saShVLFsyLDddKSxpKFUsWzIsOF0pLGkoVSxbMiw5XSksaShVLFsyLDEwXSksaShVLFsyLDExXSx7MTM6WzEsMzddLDE0OlsxLDM4XX0pLGkoVSxbMiwxNV0pLHsxNzpbMSwzOV19LGkoVSxbMiwxN10sezE5OlsxLDQwXX0pLHsyMjpbMSw0MV19LGkoVSxbMiwyMV0pLGkoVSxbMiwyMl0pLGkoVSxbMiwyM10pLGkoVSxbMiwyNF0pLHsyOTo0MiwzMDpbMSw0M10sNTI6WzEsNDRdLDUzOlsxLDQ1XX0saShVLFsyLDI3XSksezMzOlsxLDQ2XX0sezM1OlsxLDQ3XX0saShVLFsyLDMwXSksezM4OlsxLDQ4XSw0MDpbMSw0OV19LHs0MjpbMSw1MF19LGkoeHQsWzIsNDBdLHs1MTpbMSw1MV19KSxpKHh0LFsyLDQxXSx7NTE6WzEsNTJdfSksaShVLFsyLDM0XSksaShVLFsyLDM1XSksaShVLFsyLDM2XSksaShVLFsyLDM3XSksaShVLFsyLDZdKSxpKFUsWzIsMTJdKSx7MTI6NTMsMjM6Qiw1MDpwdH0saShVLFsyLDE2XSksaShudCx2LHs3OjU0fSksezIzOlsxLDU1XX0sezIzOlsxLDU2XX0sezIyOlsxLDU3XX0sezIzOlsyLDQ0XX0sezIzOlsyLDQ1XX0saShVLFsyLDI4XSksaShVLFsyLDI5XSksezM5OlsxLDU4XX0sezM5OlsxLDU5XX0sezQzOlsxLDYwXX0sezIzOlsxLDYxXX0sezIzOlsxLDYyXX0saShVLFsyLDEzXSx7MTM6WzEsNjNdfSksezQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjA6WzEsNjRdLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiwxOV0sezE5OlsxLDY1XX0pLHszMDpbMSw2Nl19LHsyMzpbMSw2N119LGkoVSxbMiwzMV0pLGkoVSxbMiwzMl0pLGkoVSxbMiwzM10pLGkoeHQsWzIsNDJdKSxpKHh0LFsyLDQzXSksaShVLFsyLDE0XSksaShVLFsyLDE4XSksaShudCx2LHs3OjY4fSksaShVLFsyLDI1XSksaShVLFsyLDI2XSksezQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkwsMjA6WzEsNjldLDIxOk4sMjM6QiwyNDpqLDI1OlIsMjY6eiwyNzpLLDI4Oml0LDMxOjI0LDMyOnN0LDM0OnV0LDM2OmJ0LDM3Om10LDQxOnl0LDQ0OmR0LDQ1Omh0LDQ2Ond0LDQ3OlgsNTA6cHR9LGkoVSxbMiwyMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDQ0OlsyLDQ0XSw0NTpbMiw0NV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWixUdCl7aWYoVHQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShaKTtlbHNle3ZhciBIdD1uZXcgRXJyb3IoWik7dGhyb3cgSHQuaGFzaD1UdCxIdH19LHBhcnNlOmZ1bmN0aW9uKFope3ZhciBUdD10aGlzLEh0PVswXSxJdD1bXSxGdD1bbnVsbF0sa2U9W10scG49dGhpcy50YWJsZSxNZT0iIix2ZT0wLEdlPTAsS2U9Mix3ZT0xLF9lPWtlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLCR0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikscmU9e3l5Ont9fTtmb3IodmFyIGllIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaWUpJiYocmUueXlbaWVdPXRoaXMueXlbaWVdKTskdC5zZXRJbnB1dChaLHJlLnl5KSxyZS55eS5sZXhlcj0kdCxyZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgJHQueXlsbG9jPiJ1IiYmKCR0Lnl5bGxvYz17fSk7dmFyIE9lPSR0Lnl5bGxvYztrZS5wdXNoKE9lKTt2YXIgb2U9JHQub3B0aW9ucyYmJHQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHJlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXJlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE5lKCl7dmFyIEVlO3JldHVybiBFZT1JdC5wb3AoKXx8JHQubGV4KCl8fHdlLHR5cGVvZiBFZSE9Im51bWJlciImJihFZSBpbnN0YW5jZW9mIEFycmF5JiYoSXQ9RWUsRWU9SXQucG9wKCkpLEVlPVR0LnN5bWJvbHNfW0VlXXx8RWUpLEVlfWZvcih2YXIgbWUsY24sbGkseWEsZGE9e30sT28sZHMsRHIsbnI7Oyl7aWYoY249SHRbSHQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbY25dP2xpPXRoaXMuZGVmYXVsdEFjdGlvbnNbY25dOigobWU9PT1udWxsfHx0eXBlb2YgbWU+InUiKSYmKG1lPU5lKCkpLGxpPXBuW2NuXSYmcG5bY25dW21lXSksdHlwZW9mIGxpPiJ1Inx8IWxpLmxlbmd0aHx8IWxpWzBdKXt2YXIgZGk9IiI7bnI9W107Zm9yKE9vIGluIHBuW2NuXSl0aGlzLnRlcm1pbmFsc19bT29dJiZPbz5LZSYmbnIucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW09vXSsiJyIpOyR0LnNob3dQb3NpdGlvbj9kaT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2ZSsxKStgOgpgKyR0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArbnIuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1ttZV18fG1lKSsiJyI6ZGk9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodmUrMSkrIjogVW5leHBlY3RlZCAiKyhtZT09d2U/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bbWVdfHxtZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoZGkse3RleHQ6JHQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW21lXXx8bWUsbGluZTokdC55eWxpbmVubyxsb2M6T2UsZXhwZWN0ZWQ6bnJ9KX1pZihsaVswXWluc3RhbmNlb2YgQXJyYXkmJmxpLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrY24rIiwgdG9rZW46ICIrbWUpO3N3aXRjaChsaVswXSl7Y2FzZSAxOkh0LnB1c2gobWUpLEZ0LnB1c2goJHQueXl0ZXh0KSxrZS5wdXNoKCR0Lnl5bGxvYyksSHQucHVzaChsaVsxXSksbWU9bnVsbCxHZT0kdC55eWxlbmcsTWU9JHQueXl0ZXh0LHZlPSR0Lnl5bGluZW5vLE9lPSR0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoZHM9dGhpcy5wcm9kdWN0aW9uc19bbGlbMV1dWzFdLGRhLiQ9RnRbRnQubGVuZ3RoLWRzXSxkYS5fJD17Zmlyc3RfbGluZTprZVtrZS5sZW5ndGgtKGRzfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6a2Vba2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46a2Vba2UubGVuZ3RoLShkc3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjprZVtrZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG9lJiYoZGEuXyQucmFuZ2U9W2tlW2tlLmxlbmd0aC0oZHN8fDEpXS5yYW5nZVswXSxrZVtrZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx5YT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoZGEsW01lLEdlLHZlLHJlLnl5LGxpWzFdLEZ0LGtlXS5jb25jYXQoX2UpKSx0eXBlb2YgeWE8InUiKXJldHVybiB5YTtkcyYmKEh0PUh0LnNsaWNlKDAsLTEqZHMqMiksRnQ9RnQuc2xpY2UoMCwtMSpkcyksa2U9a2Uuc2xpY2UoMCwtMSpkcykpLEh0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bbGlbMV1dWzBdKSxGdC5wdXNoKGRhLiQpLGtlLnB1c2goZGEuXyQpLERyPXBuW0h0W0h0Lmxlbmd0aC0yXV1bSHRbSHQubGVuZ3RoLTFdXSxIdC5wdXNoKERyKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTnQ9ZnVuY3Rpb24oKXt2YXIgQ3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oVHQsSHQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVHQsSHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oWixUdCl7cmV0dXJuIHRoaXMueXk9VHR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVosdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVosdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVosdGhpcy5tYXRjaGVkKz1aO3ZhciBUdD1aLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFp9LHVucHV0OmZ1bmN0aW9uKFope3ZhciBUdD1aLmxlbmd0aCxIdD1aLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Wit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtVHQpLHRoaXMub2Zmc2V0LT1UdDt2YXIgSXQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksSHQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1IdC5sZW5ndGgtMSk7dmFyIEZ0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpIdD8oSHQubGVuZ3RoPT09SXQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStJdFtJdC5sZW5ndGgtSHQubGVuZ3RoXS5sZW5ndGgtSHRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1UdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtGdFswXSxGdFswXSt0aGlzLnl5bGVuZy1UdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFope3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShaKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBaPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oWi5sZW5ndGg+MjA/Ii4uLiI6IiIpK1ouc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLm1hdGNoO3JldHVybiBaLmxlbmd0aDwyMCYmKForPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVoubGVuZ3RoKSksKFouc3Vic3RyKDAsMjApKyhaLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgWj10aGlzLnBhc3RJbnB1dCgpLFR0PW5ldyBBcnJheShaLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFordGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1R0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihaLFR0KXt2YXIgSHQsSXQsRnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEZ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEZ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEl0PVpbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEl0JiYodGhpcy55eWxpbmVubys9SXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXQ/SXRbSXQubGVuZ3RoLTFdLmxlbmd0aC1JdFtJdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitaWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVpbMF0sdGhpcy5tYXRjaCs9WlswXSx0aGlzLm1hdGNoZXM9Wix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShaWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1aWzBdLEh0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFR0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEh0KXJldHVybiBIdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIga2UgaW4gRnQpdGhpc1trZV09RnRba2VdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFosVHQsSHQsSXQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksa2U9MDtrZTxGdC5sZW5ndGg7a2UrKylpZihIdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W2tlXV0pLEh0JiYoIVR0fHxIdFswXS5sZW5ndGg+VHRbMF0ubGVuZ3RoKSl7aWYoVHQ9SHQsSXQ9a2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoWj10aGlzLnRlc3RfbWF0Y2goSHQsRnRba2VdKSxaIT09ITEpcmV0dXJuIFo7aWYodGhpcy5fYmFja3RyYWNrKXtUdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUdD8oWj10aGlzLnRlc3RfbWF0Y2goVHQsRnRbSXRdKSxaIT09ITE/WjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMubmV4dCgpO3JldHVybiBUdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFR0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVHQpe3JldHVybiBUdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFR0fHwwKSxUdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1R0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihUdCl7dGhpcy5iZWdpbihUdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHQsSHQsSXQsRnQpe3N3aXRjaChJdCl7Y2FzZSAwOnJldHVybiA0MDtjYXNlIDE6cmV0dXJuIDQ0O2Nhc2UgMjpyZXR1cm4gNDU7Y2FzZSAzOnJldHVybiA0NjtjYXNlIDQ6cmV0dXJuIDQ3O2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMTM6cmV0dXJuIDE3O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMyO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzc7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM4O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMzA6cmV0dXJuIDE3O2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEh0Lnl5dGV4dD1IdC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEh0Lnl5dGV4dD1IdC55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNjtjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NTtjYXNlIDQxOnJldHVybiA0NjtjYXNlIDQyOnJldHVybiA0NztjYXNlIDQzOnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE5O2Nhc2UgNTE6YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIwO2Nhc2UgNTM6YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI4O2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUzO2Nhc2UgNTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDU5OmJyZWFrO2Nhc2UgNjA6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMztjYXNlIDYzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksSHQueXl0ZXh0PUh0Lnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMwO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxIdC55eXRleHQ9SHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMDtjYXNlIDY1OnJldHVybiA2O2Nhc2UgNjY6cmV0dXJuIDY7Y2FzZSA2NzpyZXR1cm4gMTU7Y2FzZSA2ODpyZXR1cm4gNTA7Y2FzZSA2OTpyZXR1cm4gMjM7Y2FzZSA3MDpyZXR1cm4gSHQueXl0ZXh0PUh0Lnl5dGV4dC50cmltKCksMTM7Y2FzZSA3MTpyZXR1cm4gMTQ7Y2FzZSA3MjpyZXR1cm4gMjc7Y2FzZSA3MzpyZXR1cm4gNTE7Y2FzZSA3NDpyZXR1cm4gNTtjYXNlIDc1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/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/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDMyLDM5LDQwLDQxLDQyLDUxLDUyLDUzLDU0LDY4LDY5LDcwLDcxLDcyXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2MV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjMsNjRdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzYyXSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1NSw1Niw1N10saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzAsMzFdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0NV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0Niw0N10saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzMywzNCwzNSwzNiwzNywzOCw0Myw0NCw0OCw0OSw1MF0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDUwLDU0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDczLDc0LDc1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEN0fSgpO090LmxleGVyPU50O2Z1bmN0aW9uIHF0KCl7dGhpcy55eT17fX1yZXR1cm4gcXQucHJvdG90eXBlPU90LE90LlBhcnNlcj1xdCxuZXcgcXR9KCk7a2d0LnBhcnNlcj1rZ3Q7Y29uc3QgJFJ0PWtndCxGR2U9IkxSIixCR2U9IlRCIixQSz0ic3RhdGUiLEVndD0icmVsYXRpb24iLFJHZT0iY2xhc3NEZWYiLGpHZT0iYXBwbHlDbGFzcyIsUlA9ImRlZmF1bHQiLHpSdD0iZGl2aWRlciIsVGd0PSJbKl0iLHFSdD0ic3RhcnQiLEhSdD1UZ3QsR1J0PSJlbmQiLFZSdD0iY29sb3IiLFVSdD0iZmlsbCIsJEdlPSJiZ0ZpbGwiLHpHZT0iLCI7ZnVuY3Rpb24gV1J0KCl7cmV0dXJue319bGV0IEtSdD1GR2UsRks9W10salA9V1J0KCk7Y29uc3QgWVJ0PSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IEJLPXtyb290OllSdCgpfSxrMD1CSy5yb290LCRQPTAsWFJ0PTA7Y29uc3QgcUdlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sSEdlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxSSz1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxHR2U9aT0+e1V0LmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLEZLPWl9LFZHZT0oKT0+Rkssaks9KGksYSxmKT0+e2lmKGEuc3RtdD09PUVndClqSyhpLGEuc3RhdGUxLCEwKSxqSyhpLGEuc3RhdGUyLCExKTtlbHNlIGlmKGEuc3RtdD09PVBLJiYoYS5pZD09PSJbKl0iPyhhLmlkPWY/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixhLnN0YXJ0PWYpOmEuaWQ9YS5pZC50cmltKCkpLGEuZG9jKXtjb25zdCBwPVtdO2xldCB2PVtdLG07Zm9yKG09MDttPGEuZG9jLmxlbmd0aDttKyspaWYoYS5kb2NbbV0udHlwZT09PXpSdCl7Y29uc3QgYj1SSyhhLmRvY1ttXSk7Yi5kb2M9UksodikscC5wdXNoKGIpLHY9W119ZWxzZSB2LnB1c2goYS5kb2NbbV0pO2lmKHAubGVuZ3RoPjAmJnYubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6UEssaWQ6SER0KCksdHlwZToiZGl2aWRlciIsZG9jOlJLKHYpfTtwLnB1c2goUksoYikpLGEuZG9jPXB9YS5kb2MuZm9yRWFjaChiPT5qSyhhLGIsITApKX19LFVHZT0oKT0+KGpLKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOkZLfSwhMCkse2lkOiJyb290Iixkb2M6Rkt9KSxXR2U9aT0+e2xldCBhO2kuZG9jP2E9aS5kb2M6YT1pLFV0LmluZm8oYSksUVJ0KCEwKSxVdC5pbmZvKCJFeHRyYWN0IixhKSxhLmZvckVhY2goZj0+e3N3aXRjaChmLnN0bXQpe2Nhc2UgUEs6X1QoZi5pZC50cmltKCksZi50eXBlLGYuZG9jLGYuZGVzY3JpcHRpb24sZi5ub3RlLGYuY2xhc3NlcyxmLnN0eWxlcyxmLnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgRWd0OlpSdChmLnN0YXRlMSxmLnN0YXRlMixmLmRlc2NyaXB0aW9uKTticmVhaztjYXNlIFJHZTpKUnQoZi5pZC50cmltKCksZi5jbGFzc2VzKTticmVhaztjYXNlIGpHZTpBZ3QoZi5pZC50cmltKCksZi5zdHlsZUNsYXNzKTticmVha319KX0sX1Q9ZnVuY3Rpb24oaSxhPVJQLGY9bnVsbCxwPW51bGwsdj1udWxsLG09bnVsbCxiPW51bGwsRT1udWxsKXtjb25zdCBfPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO2swLnN0YXRlc1tfXT09PXZvaWQgMD8oVXQuaW5mbygiQWRkaW5nIHN0YXRlICIsXyxwKSxrMC5zdGF0ZXNbX109e2lkOl8sZGVzY3JpcHRpb25zOltdLHR5cGU6YSxkb2M6Zixub3RlOnYsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihrMC5zdGF0ZXNbX10uZG9jfHwoazAuc3RhdGVzW19dLmRvYz1mKSxrMC5zdGF0ZXNbX10udHlwZXx8KGswLnN0YXRlc1tfXS50eXBlPWEpKSxwJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsXyxwKSx0eXBlb2YgcD09InN0cmluZyImJlNndChfLHAudHJpbSgpKSx0eXBlb2YgcD09Im9iamVjdCImJnAuZm9yRWFjaChMPT5TZ3QoXyxMLnRyaW0oKSkpKSx2JiYoazAuc3RhdGVzW19dLm5vdGU9dixrMC5zdGF0ZXNbX10ubm90ZS50ZXh0PVlyLnNhbml0aXplVGV4dChrMC5zdGF0ZXNbX10ubm90ZS50ZXh0LExlKCkpKSxtJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixfLG0pLCh0eXBlb2YgbT09InN0cmluZyI/W21dOm0pLmZvckVhY2goTj0+QWd0KF8sTi50cmltKCkpKSksYiYmKFV0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixfLGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goTj0+clZlKF8sTi50cmltKCkpKSksRSYmKFV0LmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixfLGIpLCh0eXBlb2YgRT09InN0cmluZyI/W0VdOkUpLmZvckVhY2goTj0+aVZlKF8sTi50cmltKCkpKSl9LFFSdD1mdW5jdGlvbihpKXtCSz17cm9vdDpZUnQoKX0sazA9Qksucm9vdCwkUD0wLGpQPVdSdCgpLGl8fGFwKCl9LHpQPWZ1bmN0aW9uKGkpe3JldHVybiBrMC5zdGF0ZXNbaV19LEtHZT1mdW5jdGlvbigpe3JldHVybiBrMC5zdGF0ZXN9LFlHZT1mdW5jdGlvbigpe1V0LmluZm8oIkRvY3VtZW50cyA9ICIsQkspfSxYR2U9ZnVuY3Rpb24oKXtyZXR1cm4gazAucmVsYXRpb25zfTtmdW5jdGlvbiBDZ3QoaT0iIil7bGV0IGE9aTtyZXR1cm4gaT09PVRndCYmKCRQKyssYT1gJHtxUnR9JHskUH1gKSxhfWZ1bmN0aW9uIF9ndChpPSIiLGE9UlApe3JldHVybiBpPT09VGd0P3FSdDphfWZ1bmN0aW9uIFFHZShpPSIiKXtsZXQgYT1pO3JldHVybiBpPT09SFJ0JiYoJFArKyxhPWAke0dSdH0keyRQfWApLGF9ZnVuY3Rpb24gWkdlKGk9IiIsYT1SUCl7cmV0dXJuIGk9PT1IUnQ/R1J0OmF9ZnVuY3Rpb24gSkdlKGksYSxmKXtsZXQgcD1DZ3QoaS5pZC50cmltKCkpLHY9X2d0KGkuaWQudHJpbSgpLGkudHlwZSksbT1DZ3QoYS5pZC50cmltKCkpLGI9X2d0KGEuaWQudHJpbSgpLGEudHlwZSk7X1QocCx2LGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLF9UKG0sYixhLmRvYyxhLmRlc2NyaXB0aW9uLGEubm90ZSxhLmNsYXNzZXMsYS5zdHlsZXMsYS50ZXh0U3R5bGVzKSxrMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0scmVsYXRpb25UaXRsZTpZci5zYW5pdGl6ZVRleHQoZixMZSgpKX0pfWNvbnN0IFpSdD1mdW5jdGlvbihpLGEsZil7aWYodHlwZW9mIGk9PSJvYmplY3QiKUpHZShpLGEsZik7ZWxzZXtjb25zdCBwPUNndChpLnRyaW0oKSksdj1fZ3QoaSksbT1RR2UoYS50cmltKCkpLGI9WkdlKGEpO19UKHAsdiksX1QobSxiKSxrMC5yZWxhdGlvbnMucHVzaCh7aWQxOnAsaWQyOm0sdGl0bGU6WXIuc2FuaXRpemVUZXh0KGYsTGUoKSl9KX19LFNndD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9azAuc3RhdGVzW2ldLHA9YS5zdGFydHNXaXRoKCI6Iik/YS5yZXBsYWNlKCI6IiwiIikudHJpbSgpOmE7Zi5kZXNjcmlwdGlvbnMucHVzaChZci5zYW5pdGl6ZVRleHQocCxMZSgpKSl9LHRWZT1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LGVWZT0oKT0+KFhSdCsrLCJkaXZpZGVyLWlkLSIrWFJ0KSxKUnQ9ZnVuY3Rpb24oaSxhPSIiKXtqUFtpXT09PXZvaWQgMCYmKGpQW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgZj1qUFtpXTthIT1udWxsJiZhLnNwbGl0KHpHZSkuZm9yRWFjaChwPT57Y29uc3Qgdj1wLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYocC5tYXRjaChWUnQpKXtjb25zdCBiPXYucmVwbGFjZShVUnQsJEdlKS5yZXBsYWNlKFZSdCxVUnQpO2YudGV4dFN0eWxlcy5wdXNoKGIpfWYuc3R5bGVzLnB1c2godil9KX0sblZlPWZ1bmN0aW9uKCl7cmV0dXJuIGpQfSxBZ3Q9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD16UChmKTtpZihwPT09dm9pZCAwKXtjb25zdCB2PWYudHJpbSgpO19UKHYpLHA9elAodil9cC5jbGFzc2VzLnB1c2goYSl9KX0sclZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj16UChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0saVZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj16UChpKTtmIT09dm9pZCAwJiZmLnRleHRTdHlsZXMucHVzaChhKX0sTzU9e2dldENvbmZpZzooKT0+TGUoKS5zdGF0ZSxhZGRTdGF0ZTpfVCxjbGVhcjpRUnQsZ2V0U3RhdGU6elAsZ2V0U3RhdGVzOktHZSxnZXRSZWxhdGlvbnM6WEdlLGdldENsYXNzZXM6blZlLGdldERpcmVjdGlvbjooKT0+S1J0LGFkZFJlbGF0aW9uOlpSdCxnZXREaXZpZGVySWQ6ZVZlLHNldERpcmVjdGlvbjppPT57S1J0PWl9LGNsZWFudXBMYWJlbDp0VmUsbGluZVR5cGU6cUdlLHJlbGF0aW9uVHlwZTpIR2UsbG9nRG9jdW1lbnRzOllHZSxnZXRSb290RG9jOlZHZSxzZXRSb290RG9jOkdHZSxnZXRSb290RG9jVjI6VUdlLGV4dHJhY3Q6V0dlLHRyaW1Db2xvbjppPT5pJiZpWzBdPT09IjoiP2kuc3Vic3RyKDEpLnRyaW0oKTppLnRyaW0oKSxnZXRBY2NUaXRsZTpvcCxzZXRBY2NUaXRsZTpjZyxnZXRBY2NEZXNjcmlwdGlvbjp1cCxzZXRBY2NEZXNjcmlwdGlvbjpjcCxhZGRTdHlsZUNsYXNzOkpSdCxzZXRDc3NDbGFzczpBZ3QsYWRkRGVzY3JpcHRpb246U2d0LHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGJ9LHRqdD1pPT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke2kuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke2kuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7aS5zdGF0ZUJrZ3x8aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke2kuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke2kubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYCxMZ3Q9e30sc1ZlPShpLGEpPT57TGd0W2ldPWF9LGFWZT1pPT5MZ3RbaV0sZWp0PSgpPT5PYmplY3Qua2V5cyhMZ3QpLG9WZT17Z2V0OmFWZSxzZXQ6c1ZlLGtleXM6ZWp0LHNpemU6KCk9PmVqdCgpLmxlbmd0aH0sY1ZlPWk9PmkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIsTGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLExlKCkuc3RhdGUucGFkZGluZytMZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQpLHVWZT1pPT5pLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLExlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLExlKCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLGxWZT0oaSxhKT0+e2NvbnN0IGY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLExlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGEuaWQpLHA9Zi5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLExlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIscC53aWR0aCsyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCsyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLExlKCkuc3RhdGUucmFkaXVzKSxmfSxoVmU9KGksYSk9Pntjb25zdCBmPWZ1bmN0aW9uKGosUix6KXtjb25zdCBLPWouYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqTGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KFIpO3p8fEsuYXR0cigiZHkiLExlKCkuc3RhdGUudGV4dEhlaWdodCl9LHY9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKkxlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsTGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksbT12LmhlaWdodCxiPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixtK0xlKCkuc3RhdGUucGFkZGluZyouNCtMZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIik7bGV0IEU9ITAsXz0hMDthLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGope0V8fChmKGIsaixfKSxfPSExKSxFPSExfSk7Y29uc3QgTD1pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixMZSgpLnN0YXRlLnBhZGRpbmcrbStMZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLExlKCkuc3RhdGUucGFkZGluZyttK0xlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxOPWIubm9kZSgpLmdldEJCb3goKSxCPU1hdGgubWF4KE4ud2lkdGgsdi53aWR0aCk7cmV0dXJuIEwuYXR0cigieDIiLEIrMypMZSgpLnN0YXRlLnBhZGRpbmcpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKzIqTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLE4uaGVpZ2h0K20rMipMZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixMZSgpLnN0YXRlLnJhZGl1cyksaX0sZlZlPShpLGEsZik9Pntjb25zdCBwPUxlKCkuc3RhdGUucGFkZGluZyx2PTIqTGUoKS5zdGF0ZS5wYWRkaW5nLG09aS5ub2RlKCkuZ2V0QkJveCgpLGI9bS53aWR0aCxFPW0ueCxfPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsTGUoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLExlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGEuaWQpLE49Xy5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK3Y7bGV0IEI9TWF0aC5tYXgoTixiKTtCPT09YiYmKEI9Qit2KTtsZXQgajtjb25zdCBSPWkubm9kZSgpLmdldEJCb3goKTthLmRvYyxqPUUtcCxOPmImJihqPShiLUIpLzIrcCksTWF0aC5hYnMoRS1SLngpPHAmJk4+YiYmKGo9RS0oTi1iKS8yKTtjb25zdCB6PTEtTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLHopLmF0dHIoImNsYXNzIixmPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLFIuaGVpZ2h0K0xlKCkuc3RhdGUudGV4dEhlaWdodCtMZSgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksXy5hdHRyKCJ4IixqK3ApLE48PWImJl8uYXR0cigieCIsRSsoQi12KS8yLU4vMitwKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLExlKCkuc3RhdGUudGl0bGVTaGlmdC1MZSgpLnN0YXRlLnRleHRIZWlnaHQtTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsQikuYXR0cigiaGVpZ2h0IixMZSgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLExlKCkuc3RhdGUucmFkaXVzKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGopLmF0dHIoInkiLExlKCkuc3RhdGUudGl0bGVTaGlmdC1MZSgpLnN0YXRlLnRleHRIZWlnaHQtTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsQikuYXR0cigiaGVpZ2h0IixSLmhlaWdodCszKzIqTGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsTGUoKS5zdGF0ZS5yYWRpdXMpLGl9LGRWZT1pPT4oaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsTGUoKS5zdGF0ZS5zaXplVW5pdCtMZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQrTGUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLExlKCkuc3RhdGUucGFkZGluZytMZSgpLnN0YXRlLnNpemVVbml0K0xlKCkuc3RhdGUubWluaVBhZGRpbmcpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLExlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixMZSgpLnN0YXRlLnBhZGRpbmcrTGUoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsTGUoKS5zdGF0ZS5wYWRkaW5nK0xlKCkuc3RhdGUuc2l6ZVVuaXQrMikpLGdWZT0oaSxhKT0+e2xldCBmPUxlKCkuc3RhdGUuZm9ya1dpZHRoLHA9TGUoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGEucGFyZW50SWQpe2xldCB2PWY7Zj1wLHA9dn1yZXR1cm4gaS5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIscCkuYXR0cigieCIsTGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixMZSgpLnN0YXRlLnBhZGRpbmcpfSxwVmU9KGksYSxmLHApPT57bGV0IHY9MDtjb25zdCBtPXAuYXBwZW5kKCJ0ZXh0Iik7bS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLG0uYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBiPWkucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO2I9Yi5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2NvbnN0IEU9Yi5zcGxpdChZci5saW5lQnJlYWtSZWdleCk7bGV0IF89MS4yNSpMZSgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGNvbnN0IEwgb2YgRSl7Y29uc3QgTj1MLnRyaW0oKTtpZihOLmxlbmd0aD4wKXtjb25zdCBCPW0uYXBwZW5kKCJ0c3BhbiIpO2lmKEIudGV4dChOKSxfPT09MCl7Y29uc3Qgaj1CLm5vZGUoKS5nZXRCQm94KCk7Xys9ai5oZWlnaHR9dis9XyxCLmF0dHIoIngiLGErTGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxCLmF0dHIoInkiLGYrdisxLjI1KkxlKCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6bS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6dn19LGJWZT0oaSxhKT0+e2EuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7Y29uc3QgZj1hLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLExlKCkuc3RhdGUucGFkZGluZykscD1hLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6dix0ZXh0SGVpZ2h0Om19PXBWZShpLDAsMCxwKTtyZXR1cm4gZi5hdHRyKCJoZWlnaHQiLG0rMipMZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGYuYXR0cigid2lkdGgiLHYrTGUoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLGZ9LG5qdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5pZCxwPXtpZDpmLGxhYmVsOmEuaWQsd2lkdGg6MCxoZWlnaHQ6MH0sdj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIixmKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTthLnR5cGU9PT0ic3RhcnQiJiZjVmUodiksYS50eXBlPT09ImVuZCImJmRWZSh2KSwoYS50eXBlPT09ImZvcmsifHxhLnR5cGU9PT0iam9pbiIpJiZnVmUodixhKSxhLnR5cGU9PT0ibm90ZSImJmJWZShhLm5vdGUudGV4dCx2KSxhLnR5cGU9PT0iZGl2aWRlciImJnVWZSh2KSxhLnR5cGU9PT0iZGVmYXVsdCImJmEuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJmxWZSh2LGEpLGEudHlwZT09PSJkZWZhdWx0IiYmYS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJmhWZSh2LGEpO2NvbnN0IG09di5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBwLndpZHRoPW0ud2lkdGgrMipMZSgpLnN0YXRlLnBhZGRpbmcscC5oZWlnaHQ9bS5oZWlnaHQrMipMZSgpLnN0YXRlLnBhZGRpbmcsb1ZlLnNldChmLHApLHB9O2xldCByanQ9MDtjb25zdCB2VmU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9ZnVuY3Rpb24oXyl7c3dpdGNoKF8pe2Nhc2UgTzUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBPNS5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgTzUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBPNS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTthLnBvaW50cz1hLnBvaW50cy5maWx0ZXIoXz0+IU51bWJlci5pc05hTihfLnkpKTtjb25zdCB2PWEucG9pbnRzLG09WjcoKS54KGZ1bmN0aW9uKF8pe3JldHVybiBfLnh9KS55KGZ1bmN0aW9uKF8pe3JldHVybiBfLnl9KS5jdXJ2ZShGTiksYj1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLG0odikpLmF0dHIoImlkIiwiZWRnZSIrcmp0KS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKTtsZXQgRT0iIjtpZihMZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihFPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLEU9RS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxFPUUucmVwbGFjZSgvXCkvZywiXFwpIikpLGIuYXR0cigibWFya2VyLWVuZCIsInVybCgiK0UrIiMiK3AoTzUucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksZi50aXRsZSE9PXZvaWQgMCl7Y29uc3QgXz1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHt4OkwseTpOfT0kYS5jYWxjTGFiZWxQb3NpdGlvbihhLnBvaW50cyksQj1Zci5nZXRSb3dzKGYudGl0bGUpO2xldCBqPTA7Y29uc3QgUj1bXTtsZXQgej0wLEs9MDtmb3IobGV0IHV0PTA7dXQ8PUIubGVuZ3RoO3V0Kyspe2NvbnN0IGJ0PV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KEJbdXRdKS5hdHRyKCJ4IixMKS5hdHRyKCJ5IixOK2opLG10PWJ0Lm5vZGUoKS5nZXRCQm94KCk7ej1NYXRoLm1heCh6LG10LndpZHRoKSxLPU1hdGgubWluKEssbXQueCksVXQuaW5mbyhtdC54LEwsTitqKSxqPT09MCYmKGo9YnQubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsVXQuaW5mbygiVGl0bGUgaGVpZ2h0IixqLE4pKSxSLnB1c2goYnQpfWxldCBpdD1qKkIubGVuZ3RoO2lmKEIubGVuZ3RoPjEpe2NvbnN0IHV0PShCLmxlbmd0aC0xKSpqKi41O1IuZm9yRWFjaCgoYnQsbXQpPT5idC5hdHRyKCJ5IixOK210KmotdXQpKSxpdD1qKkIubGVuZ3RofWNvbnN0IHN0PV8ubm9kZSgpLmdldEJCb3goKTtfLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsTC16LzItTGUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLE4taXQvMi1MZSgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIix6K0xlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixpdCtMZSgpLnN0YXRlLnBhZGRpbmcpLFV0LmluZm8oc3QpfXJqdCsrfTtsZXQgUmI7Y29uc3QgTWd0PXt9LHdWZT1mdW5jdGlvbigpe30sbVZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0seVZlPWZ1bmN0aW9uKGksYSxmLHApe1JiPUxlKCkuc3RhdGU7Y29uc3Qgdj1MZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IG07dj09PSJzYW5kYm94IiYmKG09eXIoIiNpIithKSk7Y29uc3QgYj15cih2PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEU9dj09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1V0LmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IF89Yi5zZWxlY3QoYFtpZD0nJHthfSddYCk7bVZlKF8pO2NvbnN0IEw9cC5kYi5nZXRSb290RG9jKCk7aWp0KEwsXyx2b2lkIDAsITEsYixFLHApO2NvbnN0IE49UmIucGFkZGluZyxCPV8ubm9kZSgpLmdldEJCb3goKSxqPUIud2lkdGgrTioyLFI9Qi5oZWlnaHQrTioyLHo9aioxLjc1O29nKF8sUix6LFJiLnVzZU1heFdpZHRoKSxfLmF0dHIoInZpZXdCb3giLGAke0IueC1SYi5wYWRkaW5nfSAgJHtCLnktUmIucGFkZGluZ30gYCtqKyIgIitSKX0seFZlPWk9Pmk/aS5sZW5ndGgqUmIuZm9udFNpemVGYWN0b3I6MSxpanQ9KGksYSxmLHAsdixtLGIpPT57Y29uc3QgRT1uZXcgYTEoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KTtsZXQgXyxMPSEwO2ZvcihfPTA7XzxpLmxlbmd0aDtfKyspaWYoaVtfXS5zdG10PT09InJlbGF0aW9uIil7TD0hMTticmVha31mP0Uuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpMPzE6UmIuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOkw/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpFLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOkw/MTpSYi5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6TD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksRS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxiLmRiLmV4dHJhY3QoaSk7Y29uc3QgTj1iLmRiLmdldFN0YXRlcygpLEI9Yi5kYi5nZXRSZWxhdGlvbnMoKSxqPU9iamVjdC5rZXlzKE4pO2Zvcihjb25zdCBzdCBvZiBqKXtjb25zdCB1dD1OW3N0XTtmJiYodXQucGFyZW50SWQ9Zik7bGV0IGJ0O2lmKHV0LmRvYyl7bGV0IG10PWEuYXBwZW5kKCJnIikuYXR0cigiaWQiLHV0LmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtidD1panQodXQuZG9jLG10LHV0LmlkLCFwLHYsbSxiKTt7bXQ9ZlZlKG10LHV0LHApO2xldCB5dD1tdC5ub2RlKCkuZ2V0QkJveCgpO2J0LndpZHRoPXl0LndpZHRoLGJ0LmhlaWdodD15dC5oZWlnaHQrUmIucGFkZGluZy8yLE1ndFt1dC5pZF09e3k6UmIuY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIGJ0PW5qdChhLHV0KTtpZih1dC5ub3RlKXtjb25zdCBtdD17ZGVzY3JpcHRpb25zOltdLGlkOnV0LmlkKyItbm90ZSIsbm90ZTp1dC5ub3RlLHR5cGU6Im5vdGUifSx5dD1uanQoYSxtdCk7dXQubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oRS5zZXROb2RlKGJ0LmlkKyItbm90ZSIseXQpLEUuc2V0Tm9kZShidC5pZCxidCkpOihFLnNldE5vZGUoYnQuaWQsYnQpLEUuc2V0Tm9kZShidC5pZCsiLW5vdGUiLHl0KSksRS5zZXRQYXJlbnQoYnQuaWQsYnQuaWQrIi1ncm91cCIpLEUuc2V0UGFyZW50KGJ0LmlkKyItbm90ZSIsYnQuaWQrIi1ncm91cCIpfWVsc2UgRS5zZXROb2RlKGJ0LmlkLGJ0KX1VdC5kZWJ1ZygiQ291bnQ9IixFLm5vZGVDb3VudCgpLEUpO2xldCBSPTA7Qi5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtSKyssVXQuZGVidWcoIlNldHRpbmcgZWRnZSIsc3QpLEUuc2V0RWRnZShzdC5pZDEsc3QuaWQyLHtyZWxhdGlvbjpzdCx3aWR0aDp4VmUoc3QudGl0bGUpLGhlaWdodDpSYi5sYWJlbEhlaWdodCpZci5nZXRSb3dzKHN0LnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK1IpfSksZUwoRSksVXQuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIsRS5ub2RlcygpKTtjb25zdCB6PWEubm9kZSgpO0Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtzdCE9PXZvaWQgMCYmRS5ub2RlKHN0KSE9PXZvaWQgMD8oVXQud2FybigiTm9kZSAiK3N0KyI6ICIrSlNPTi5zdHJpbmdpZnkoRS5ub2RlKHN0KSkpLHYuc2VsZWN0KCIjIit6LmlkKyIgIyIrc3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLm5vZGUoc3QpLngtRS5ub2RlKHN0KS53aWR0aC8yKSsiLCIrKEUubm9kZShzdCkueSsoTWd0W3N0XT9NZ3Rbc3RdLnk6MCktRS5ub2RlKHN0KS5oZWlnaHQvMikrIiApIiksdi5zZWxlY3QoIiMiK3ouaWQrIiAjIitzdCkuYXR0cigiZGF0YS14LXNoaWZ0IixFLm5vZGUoc3QpLngtRS5ub2RlKHN0KS53aWR0aC8yKSxtLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3ouaWQrIiAjIitzdCsiIC5kaXZpZGVyIikuZm9yRWFjaChidD0+e2NvbnN0IG10PWJ0LnBhcmVudEVsZW1lbnQ7bGV0IHl0PTAsZHQ9MDttdCYmKG10LnBhcmVudEVsZW1lbnQmJih5dD1tdC5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksZHQ9cGFyc2VJbnQobXQuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKGR0KSYmKGR0PTApKSxidC5zZXRBdHRyaWJ1dGUoIngxIiwwLWR0KzgpLGJ0LnNldEF0dHJpYnV0ZSgieDIiLHl0LWR0LTgpfSkpOlV0LmRlYnVnKCJObyBOb2RlICIrc3QrIjogIitKU09OLnN0cmluZ2lmeShFLm5vZGUoc3QpKSl9KTtsZXQgSz16LmdldEJCb3goKTtFLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihzdCl7c3QhPT12b2lkIDAmJkUuZWRnZShzdCkhPT12b2lkIDAmJihVdC5kZWJ1ZygiRWRnZSAiK3N0LnYrIiAtPiAiK3N0LncrIjogIitKU09OLnN0cmluZ2lmeShFLmVkZ2Uoc3QpKSksdlZlKGEsRS5lZGdlKHN0KSxFLmVkZ2Uoc3QpLnJlbGF0aW9uKSl9KSxLPXouZ2V0QkJveCgpO2NvbnN0IGl0PXtpZDpmfHwicm9vdCIsbGFiZWw6Znx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBpdC53aWR0aD1LLndpZHRoKzIqUmIucGFkZGluZyxpdC5oZWlnaHQ9Sy5oZWlnaHQrMipSYi5wYWRkaW5nLFV0LmRlYnVnKCJEb2MgcmVuZGVyZWQiLGl0LEUpLGl0fSxrVmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokUnQsZGI6TzUscmVuZGVyZXI6e3NldENvbmY6d1ZlLGRyYXc6eVZlfSxzdHlsZXM6dGp0LGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLE81LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSwkSz0icmVjdCIsSWd0PSJyZWN0V2l0aFRpdGxlIixFVmU9InN0YXJ0IixUVmU9ImVuZCIsQ1ZlPSJkaXZpZGVyIixfVmU9InJvdW5kZWRXaXRoVGl0bGUiLFNWZT0ibm90ZSIsQVZlPSJub3RlR3JvdXAiLGRMPSJzdGF0ZWRpYWdyYW0iLExWZT1gJHtkTH0tc3RhdGVgLHNqdD0idHJhbnNpdGlvbiIsTVZlPSJub3RlIixJVmU9YCR7c2p0fSBub3RlLWVkZ2VgLERWZT1gJHtkTH0tJHtNVmV9YCxPVmU9YCR7ZEx9LWNsdXN0ZXJgLE5WZT1gJHtkTH0tY2x1c3Rlci1hbHRgLGFqdD0icGFyZW50IixvanQ9Im5vdGUiLFBWZT0ic3RhdGUiLERndD0iLS0tLSIsRlZlPWAke0RndH0ke29qdH1gLGNqdD1gJHtEZ3R9JHthanR9YCx1anQ9ImZpbGw6bm9uZSIsbGp0PSJmaWxsOiAjMzMzIixoanQ9ImMiLGZqdD0idGV4dCIsZGp0PSJub3JtYWwiO2xldCB6Sz17fSxnaz0wO2NvbnN0IEJWZT1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCBmIG9mIGEpaVtmXX0sUlZlPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGEuZGIuZXh0cmFjdChhLmRiLmdldFJvb3REb2NWMigpKSxhLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24galZlKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIE9ndChpPSIiLGE9MCxmPSIiLHA9RGd0KXtjb25zdCB2PWYhPT1udWxsJiZmLmxlbmd0aD4wP2Ake3B9JHtmfWA6IiI7cmV0dXJuYCR7UFZlfS0ke2l9JHt2fS0ke2F9YH1jb25zdCBxUD0oaSxhLGYscCx2LG0pPT57Y29uc3QgYj1mLmlkLEU9alZlKHBbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBfPSRLO2Yuc3RhcnQ9PT0hMCYmKF89RVZlKSxmLnN0YXJ0PT09ITEmJihfPVRWZSksZi50eXBlIT09UlAmJihfPWYudHlwZSksektbYl18fCh6S1tiXT17aWQ6YixzaGFwZTpfLGRlc2NyaXB0aW9uOllyLnNhbml0aXplVGV4dChiLExlKCkpLGNsYXNzZXM6YCR7RX0gJHtMVmV9YH0pO2NvbnN0IEw9ektbYl07Zi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoTC5kZXNjcmlwdGlvbik/KEwuc2hhcGU9SWd0LEwuZGVzY3JpcHRpb24ucHVzaChmLmRlc2NyaXB0aW9uKSk6TC5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oTC5zaGFwZT1JZ3QsTC5kZXNjcmlwdGlvbj09PWI/TC5kZXNjcmlwdGlvbj1bZi5kZXNjcmlwdGlvbl06TC5kZXNjcmlwdGlvbj1bTC5kZXNjcmlwdGlvbixmLmRlc2NyaXB0aW9uXSk6KEwuc2hhcGU9JEssTC5kZXNjcmlwdGlvbj1mLmRlc2NyaXB0aW9uKSxMLmRlc2NyaXB0aW9uPVlyLnNhbml0aXplVGV4dE9yQXJyYXkoTC5kZXNjcmlwdGlvbixMZSgpKSksTC5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZMLnNoYXBlPT09SWd0JiYoTC5zaGFwZT0kSyksIUwudHlwZSYmZi5kb2MmJihVdC5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixOZ3QoZikpLEwudHlwZT0iZ3JvdXAiLEwuZGlyPU5ndChmKSxMLnNoYXBlPWYudHlwZT09PXpSdD9DVmU6X1ZlLEwuY2xhc3Nlcz1MLmNsYXNzZXMrIiAiK09WZSsiICIrKG0/TlZlOiIiKSk7Y29uc3QgTj17bGFiZWxTdHlsZToiIixzaGFwZTpMLnNoYXBlLGxhYmVsVGV4dDpMLmRlc2NyaXB0aW9uLGNsYXNzZXM6TC5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOkwuZGlyLGRvbUlkOk9ndChiLGdrKSx0eXBlOkwudHlwZSxwYWRkaW5nOjE1fTtpZihOLmNlbnRlckxhYmVsPSEwLGYubm90ZSl7Y29uc3QgQj17bGFiZWxTdHlsZToiIixzaGFwZTpTVmUsbGFiZWxUZXh0OmYubm90ZS50ZXh0LGNsYXNzZXM6RFZlLHN0eWxlOiIiLGlkOmIrRlZlKyItIitnayxkb21JZDpPZ3QoYixnayxvanQpLHR5cGU6TC50eXBlLHBhZGRpbmc6MTV9LGo9e2xhYmVsU3R5bGU6IiIsc2hhcGU6QVZlLGxhYmVsVGV4dDpmLm5vdGUudGV4dCxjbGFzc2VzOkwuY2xhc3NlcyxzdHlsZToiIixpZDpiK2NqdCxkb21JZDpPZ3QoYixnayxhanQpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2drKys7Y29uc3QgUj1iK2NqdDtpLnNldE5vZGUoUixqKSxpLnNldE5vZGUoQi5pZCxCKSxpLnNldE5vZGUoYixOKSxpLnNldFBhcmVudChiLFIpLGkuc2V0UGFyZW50KEIuaWQsUik7bGV0IHo9YixLPUIuaWQ7Zi5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoej1CLmlkLEs9YiksaS5zZXRFZGdlKHosSyx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6dWp0LGxhYmVsU3R5bGU6IiIsY2xhc3NlczpJVmUsYXJyb3doZWFkU3R5bGU6bGp0LGxhYmVscG9zOmhqdCxsYWJlbFR5cGU6Zmp0LHRoaWNrbmVzczpkanR9KX1lbHNlIGkuc2V0Tm9kZShiLE4pfWEmJmEuaWQhPT0icm9vdCImJihVdC50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixhLmlkKSxpLnNldFBhcmVudChiLGEuaWQpKSxmLmRvYyYmKFV0LnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksJFZlKGksZixmLmRvYyxwLHYsIW0pKX0sJFZlPShpLGEsZixwLHYsbSk9PntVdC50cmFjZSgiaXRlbXMiLGYpLGYuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBQSzpxUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSBSUDpxUChpLGEsYixwLHYsbSk7YnJlYWs7Y2FzZSBFZ3Q6e3FQKGksYSxiLnN0YXRlMSxwLHYsbSkscVAoaSxhLGIuc3RhdGUyLHAsdixtKTtjb25zdCBFPXtpZDoiZWRnZSIrZ2ssYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6dWp0LGxhYmVsU3R5bGU6IiIsbGFiZWw6WXIuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24sTGUoKSksYXJyb3doZWFkU3R5bGU6bGp0LGxhYmVscG9zOmhqdCxsYWJlbFR5cGU6Zmp0LHRoaWNrbmVzczpkanQsY2xhc3NlczpzanR9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCxFLGdrKSxnaysrfWJyZWFrfX0pfSxOZ3Q9KGksYT1CR2UpPT57bGV0IGY9YTtpZihpLmRvYylmb3IobGV0IHA9MDtwPGkuZG9jLmxlbmd0aDtwKyspe2NvbnN0IHY9aS5kb2NbcF07di5zdG10PT09ImRpciImJihmPXYudmFsdWUpfXJldHVybiBmfSx6VmU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokUnQsZGI6TzUscmVuZGVyZXI6e3NldENvbmY6QlZlLGdldENsYXNzZXM6UlZlLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGEpLHpLPXt9LHAuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LHN0YXRlOm19PUxlKCksYj1tLm5vZGVTcGFjaW5nfHw1MCxFPW0ucmFua1NwYWNpbmd8fDUwO1V0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSkscC5kYi5leHRyYWN0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLFV0LmluZm8ocC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgXz1wLmRiLmdldFN0YXRlcygpLEw9bmV3IGExKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Tmd0KHAuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOkUsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO3FQKEwsdm9pZCAwLHAuZGIuZ2V0Um9vdERvY1YyKCksXyxwLmRiLCEwKTtsZXQgTjt2PT09InNhbmRib3giJiYoTj15cigiI2kiK2EpKTtjb25zdCBCPXlyKHY9PT0ic2FuZGJveCI/Ti5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iiksaj1CLnNlbGVjdChgW2lkPSIke2F9Il1gKSxSPUIuc2VsZWN0KCIjIithKyIgZyIpO2F3YWl0IEkwdChSLEwsWyJiYXJiIl0sZEwsYSk7Y29uc3Qgej04OyRhLmluc2VydFRpdGxlKGosInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBLPWoubm9kZSgpLmdldEJCb3goKSxpdD1LLndpZHRoK3oqMixzdD1LLmhlaWdodCt6KjI7ai5hdHRyKCJjbGFzcyIsZEwpO2NvbnN0IHV0PWoubm9kZSgpLmdldEJCb3goKTtvZyhqLHN0LGl0LG0udXNlTWF4V2lkdGgpO2NvbnN0IGJ0PWAke3V0Lngten0gJHt1dC55LXp9ICR7aXR9ICR7c3R9YDtVdC5kZWJ1Zyhgdmlld0JveCAke2J0fWApLGouYXR0cigidmlld0JveCIsYnQpO2NvbnN0IG10PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCB5dCBvZiBtdCl7Y29uc3QgZHQ9eXQuZ2V0QkJveCgpLGh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCRLKTtodC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxodC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxodC5zZXRBdHRyaWJ1dGUoIndpZHRoIixkdC53aWR0aCksaHQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGR0LmhlaWdodCkseXQuaW5zZXJ0QmVmb3JlKGh0LHl0LmZpcnN0Q2hpbGQpfX19LHN0eWxlczp0anQsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsTzUuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBQZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihCLGosUix6KXtmb3IoUj1SfHx7fSx6PUIubGVuZ3RoO3otLTtSW0Jbel1dPWopO3JldHVybiBSfSxhPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLGY9WzEsOV0scD1bMSwxMF0sdj1bMSwxMV0sbT1bMSwxMl0sYj1bMSwxM10sRT1bMSwxNF0sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHRhc2tOYW1lOjE4LHRhc2tEYXRhOjE5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDE4OiJ0YXNrTmFtZSIsMTk6InRhc2tEYXRhIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGosUix6LEssaXQsc3QsdXQpe3ZhciBidD1zdC5sZW5ndGgtMTtzd2l0Y2goaXQpe2Nhc2UgMTpyZXR1cm4gc3RbYnQtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6c3RbYnQtMV0ucHVzaChzdFtidF0pLHRoaXMuJD1zdFtidC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1zdFtidF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Oksuc2V0RGlhZ3JhbVRpdGxlKHN0W2J0XS5zdWJzdHIoNikpLHRoaXMuJD1zdFtidF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9c3RbYnRdLnRyaW0oKSxLLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1zdFtidF0udHJpbSgpLEsuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOksuYWRkU2VjdGlvbihzdFtidF0uc3Vic3RyKDgpKSx0aGlzLiQ9c3RbYnRdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOksuYWRkVGFzayhzdFtidC0xXSxzdFtidF0pLHRoaXMuJD0idGFzayI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODpFfSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjE1LDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSx7MTk6WzEsMThdfSxpKGEsWzIsNF0pLGkoYSxbMiw5XSksaShhLFsyLDEwXSksaShhLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oaixSKXtpZihSLnJlY292ZXJhYmxlKXRoaXMudHJhY2Uoaik7ZWxzZXt2YXIgej1uZXcgRXJyb3Ioaik7dGhyb3cgei5oYXNoPVIsen19LHBhcnNlOmZ1bmN0aW9uKGope3ZhciBSPXRoaXMsej1bMF0sSz1bXSxpdD1bbnVsbF0sc3Q9W10sdXQ9dGhpcy50YWJsZSxidD0iIixtdD0wLHl0PTAsZHQ9MixodD0xLHd0PXN0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxwdD17eXk6e319O2Zvcih2YXIgVSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFUpJiYocHQueXlbVV09dGhpcy55eVtVXSk7WC5zZXRJbnB1dChqLHB0Lnl5KSxwdC55eS5sZXhlcj1YLHB0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBYLnl5bGxvYz4idSImJihYLnl5bGxvYz17fSk7dmFyIHh0PVgueXlsbG9jO3N0LnB1c2goeHQpO3ZhciBudD1YLm9wdGlvbnMmJlgub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHB0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXB0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE90KCl7dmFyIE1lO3JldHVybiBNZT1LLnBvcCgpfHxYLmxleCgpfHxodCx0eXBlb2YgTWUhPSJudW1iZXIiJiYoTWUgaW5zdGFuY2VvZiBBcnJheSYmKEs9TWUsTWU9Sy5wb3AoKSksTWU9Ui5zeW1ib2xzX1tNZV18fE1lKSxNZX1mb3IodmFyIE50LHF0LEN0LFosVHQ9e30sSHQsSXQsRnQsa2U7Oyl7aWYocXQ9elt6Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3F0XT9DdD10aGlzLmRlZmF1bHRBY3Rpb25zW3F0XTooKE50PT09bnVsbHx8dHlwZW9mIE50PiJ1IikmJihOdD1PdCgpKSxDdD11dFtxdF0mJnV0W3F0XVtOdF0pLHR5cGVvZiBDdD4idSJ8fCFDdC5sZW5ndGh8fCFDdFswXSl7dmFyIHBuPSIiO2tlPVtdO2ZvcihIdCBpbiB1dFtxdF0pdGhpcy50ZXJtaW5hbHNfW0h0XSYmSHQ+ZHQmJmtlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tIdF0rIiciKTtYLnNob3dQb3NpdGlvbj9wbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtdCsxKStgOgpgK1guc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW050XXx8TnQpKyInIjpwbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtdCsxKSsiOiBVbmV4cGVjdGVkICIrKE50PT1odD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tOdF18fE50KSsiJyIpLHRoaXMucGFyc2VFcnJvcihwbix7dGV4dDpYLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tOdF18fE50LGxpbmU6WC55eWxpbmVubyxsb2M6eHQsZXhwZWN0ZWQ6a2V9KX1pZihDdFswXWluc3RhbmNlb2YgQXJyYXkmJkN0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrcXQrIiwgdG9rZW46ICIrTnQpO3N3aXRjaChDdFswXSl7Y2FzZSAxOnoucHVzaChOdCksaXQucHVzaChYLnl5dGV4dCksc3QucHVzaChYLnl5bGxvYyksei5wdXNoKEN0WzFdKSxOdD1udWxsLHl0PVgueXlsZW5nLGJ0PVgueXl0ZXh0LG10PVgueXlsaW5lbm8seHQ9WC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEl0PXRoaXMucHJvZHVjdGlvbnNfW0N0WzFdXVsxXSxUdC4kPWl0W2l0Lmxlbmd0aC1JdF0sVHQuXyQ9e2ZpcnN0X2xpbmU6c3Rbc3QubGVuZ3RoLShJdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnN0W3N0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnN0W3N0Lmxlbmd0aC0oSXR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46c3Rbc3QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxudCYmKFR0Ll8kLnJhbmdlPVtzdFtzdC5sZW5ndGgtKEl0fHwxKV0ucmFuZ2VbMF0sc3Rbc3QubGVuZ3RoLTFdLnJhbmdlWzFdXSksWj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoVHQsW2J0LHl0LG10LHB0Lnl5LEN0WzFdLGl0LHN0XS5jb25jYXQod3QpKSx0eXBlb2YgWjwidSIpcmV0dXJuIFo7SXQmJih6PXouc2xpY2UoMCwtMSpJdCoyKSxpdD1pdC5zbGljZSgwLC0xKkl0KSxzdD1zdC5zbGljZSgwLC0xKkl0KSksei5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0N0WzFdXVswXSksaXQucHVzaChUdC4kKSxzdC5wdXNoKFR0Ll8kKSxGdD11dFt6W3oubGVuZ3RoLTJdXVt6W3oubGVuZ3RoLTFdXSx6LnB1c2goRnQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxMPWZ1bmN0aW9uKCl7dmFyIEI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oUix6KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFIseik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoUil9LHNldElucHV0OmZ1bmN0aW9uKGosUil7cmV0dXJuIHRoaXMueXk9Unx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9aix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9aix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9aix0aGlzLm1hdGNoZWQrPWo7dmFyIFI9ai5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIFI/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGp9LHVucHV0OmZ1bmN0aW9uKGope3ZhciBSPWoubGVuZ3RoLHo9ai5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWordGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVIpLHRoaXMub2Zmc2V0LT1SO3ZhciBLPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHoubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT16Lmxlbmd0aC0xKTt2YXIgaXQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOno/KHoubGVuZ3RoPT09Sy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0tbSy5sZW5ndGgtei5sZW5ndGhdLmxlbmd0aC16WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpdFswXSxpdFswXSt0aGlzLnl5bGVuZy1SXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oail7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGopKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihqLmxlbmd0aD4yMD8iLi4uIjoiIikrai5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBqPXRoaXMubWF0Y2g7cmV0dXJuIGoubGVuZ3RoPDIwJiYoais9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtai5sZW5ndGgpKSwoai5zdWJzdHIoMCwyMCkrKGoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBqPXRoaXMucGFzdElucHV0KCksUj1uZXcgQXJyYXkoai5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBqK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtSKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihqLFIpe3ZhciB6LEssaXQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGl0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGl0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEs9alswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSyYmKHRoaXMueXlsaW5lbm8rPUsubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Sz9LW0subGVuZ3RoLTFdLmxlbmd0aC1LW0subGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4ralswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1qWzBdLHRoaXMubWF0Y2grPWpbMF0sdGhpcy5tYXRjaGVzPWosdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoalswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9alswXSx6PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFIsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseilyZXR1cm4gejtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgc3QgaW4gaXQpdGhpc1tzdF09aXRbc3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGosUix6LEs7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaXQ9dGhpcy5fY3VycmVudFJ1bGVzKCksc3Q9MDtzdDxpdC5sZW5ndGg7c3QrKylpZih6PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaXRbc3RdXSkseiYmKCFSfHx6WzBdLmxlbmd0aD5SWzBdLmxlbmd0aCkpe2lmKFI9eixLPXN0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGo9dGhpcy50ZXN0X21hdGNoKHosaXRbc3RdKSxqIT09ITEpcmV0dXJuIGo7aWYodGhpcy5fYmFja3RyYWNrKXtSPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFI/KGo9dGhpcy50ZXN0X21hdGNoKFIsaXRbS10pLGohPT0hMT9qOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm5leHQoKTtyZXR1cm4gUnx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oUil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFIpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBSPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihSKXtyZXR1cm4gUj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFJ8fDApLFI+PTA/dGhpcy5jb25kaXRpb25TdGFja1tSXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihSKXt0aGlzLmJlZ2luKFIpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIseixLLGl0KXtzd2l0Y2goSyl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAxODtjYXNlIDE2OnJldHVybiAxOTtjYXNlIDE3OnJldHVybiI6IjtjYXNlIDE4OnJldHVybiA2O2Nhc2UgMTk6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEJ9KCk7Xy5sZXhlcj1MO2Z1bmN0aW9uIE4oKXt0aGlzLnl5PXt9fXJldHVybiBOLnByb3RvdHlwZT1fLF8uUGFyc2VyPU4sbmV3IE59KCk7UGd0LnBhcnNlcj1QZ3Q7Y29uc3QgcVZlPVBndDtsZXQgZ0w9IiI7Y29uc3QgRmd0PVtdLEhQPVtdLEdQPVtdLEhWZT1mdW5jdGlvbigpe0ZndC5sZW5ndGg9MCxIUC5sZW5ndGg9MCxnTD0iIixHUC5sZW5ndGg9MCxhcCgpfSxHVmU9ZnVuY3Rpb24oaSl7Z0w9aSxGZ3QucHVzaChpKX0sVlZlPWZ1bmN0aW9uKCl7cmV0dXJuIEZndH0sVVZlPWZ1bmN0aW9uKCl7bGV0IGk9Z2p0KCk7Y29uc3QgYT0xMDA7bGV0IGY9MDtmb3IoOyFpJiZmPGE7KWk9Z2p0KCksZisrO3JldHVybiBIUC5wdXNoKC4uLkdQKSxIUH0sV1ZlPWZ1bmN0aW9uKCl7Y29uc3QgaT1bXTtyZXR1cm4gSFAuZm9yRWFjaChmPT57Zi5wZW9wbGUmJmkucHVzaCguLi5mLnBlb3BsZSl9KSxbLi4ubmV3IFNldChpKV0uc29ydCgpfSxLVmU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEuc3Vic3RyKDEpLnNwbGl0KCI6Iik7bGV0IHA9MCx2PVtdO2YubGVuZ3RoPT09MT8ocD1OdW1iZXIoZlswXSksdj1bXSk6KHA9TnVtYmVyKGZbMF0pLHY9ZlsxXS5zcGxpdCgiLCIpKTtjb25zdCBtPXYubWFwKEU9PkUudHJpbSgpKSxiPXtzZWN0aW9uOmdMLHR5cGU6Z0wscGVvcGxlOm0sdGFzazppLHNjb3JlOnB9O0dQLnB1c2goYil9LFlWZT1mdW5jdGlvbihpKXtjb25zdCBhPXtzZWN0aW9uOmdMLHR5cGU6Z0wsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX07SFAucHVzaChhKX0sZ2p0PWZ1bmN0aW9uKCl7Y29uc3QgaT1mdW5jdGlvbihmKXtyZXR1cm4gR1BbZl0ucHJvY2Vzc2VkfTtsZXQgYT0hMDtmb3IoY29uc3RbZixwXW9mIEdQLmVudHJpZXMoKSlpKGYpLGE9YSYmcC5wcm9jZXNzZWQ7cmV0dXJuIGF9LHBqdD17Z2V0Q29uZmlnOigpPT5MZSgpLmpvdXJuZXksY2xlYXI6SFZlLHNldERpYWdyYW1UaXRsZTpaMixnZXREaWFncmFtVGl0bGU6RGIsc2V0QWNjVGl0bGU6Y2csZ2V0QWNjVGl0bGU6b3Asc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0QWNjRGVzY3JpcHRpb246dXAsYWRkU2VjdGlvbjpHVmUsZ2V0U2VjdGlvbnM6VlZlLGdldFRhc2tzOlVWZSxhZGRUYXNrOktWZSxhZGRUYXNrT3JnOllWZSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gV1ZlKCl9fSxYVmU9aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmxhYmVsIHRleHQgewogICAgZmlsbDogIzMzMzsKICB9CiAgLmxhYmVsIHsKICAgIGNvbG9yOiAke2kudGV4dENvbG9yfQogIH0KCiAgLmZhY2UgewogICAgJHtpLmZhY2VDb2xvcj9gZmlsbDogJHtpLmZhY2VDb2xvcn1gOiJmaWxsOiAjRkZGOERDIn07CiAgICBzdHJva2U6ICM5OTk7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7aS5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTF9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUyfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlM31gOiIifTsKICB9CiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTR9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU1fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTd9YDoiIn07CiAgfQoKICAuYWN0b3ItMCB7CiAgICAke2kuYWN0b3IwP2BmaWxsOiAke2kuYWN0b3IwfWA6IiJ9OwogIH0KICAuYWN0b3ItMSB7CiAgICAke2kuYWN0b3IxP2BmaWxsOiAke2kuYWN0b3IxfWA6IiJ9OwogIH0KICAuYWN0b3ItMiB7CiAgICAke2kuYWN0b3IyP2BmaWxsOiAke2kuYWN0b3IyfWA6IiJ9OwogIH0KICAuYWN0b3ItMyB7CiAgICAke2kuYWN0b3IzP2BmaWxsOiAke2kuYWN0b3IzfWA6IiJ9OwogIH0KICAuYWN0b3ItNCB7CiAgICAke2kuYWN0b3I0P2BmaWxsOiAke2kuYWN0b3I0fWA6IiJ9OwogIH0KICAuYWN0b3ItNSB7CiAgICAke2kuYWN0b3I1P2BmaWxsOiAke2kuYWN0b3I1fWA6IiJ9OwogIH0KYCxCZ3Q9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gSFcoaSxhKX0sUVZlPWZ1bmN0aW9uKGksYSl7Y29uc3QgcD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gpLmF0dHIoImN5IixhLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSx2PWkuYXBwZW5kKCJnIik7di5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4LTE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3grMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIG0oXyl7Y29uc3QgTD1MQSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krMikrIikiKX1mdW5jdGlvbiBiKF8pe2NvbnN0IEw9TEEoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krNykrIikiKX1mdW5jdGlvbiBFKF8pe18uYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGEuY3gtNSkuYXR0cigieTEiLGEuY3krNykuYXR0cigieDIiLGEuY3grNSkuYXR0cigieTIiLGEuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gYS5zY29yZT4zP20odik6YS5zY29yZTwzP2Iodik6RSh2KSxwfSxianQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gZi5hdHRyKCJjeCIsYS5jeCksZi5hdHRyKCJjeSIsYS5jeSksZi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrYS5wb3MpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigiciIsYS5yKSxmLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixmLmNsYXNzKSxhLnRpdGxlIT09dm9pZCAwJiZmLmFwcGVuZCgidGl0bGUiKS50ZXh0KGEudGl0bGUpLGZ9LHZqdD1mdW5jdGlvbihpLGEpe3JldHVybiBkSWUoaSxhKX0sWlZlPWZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gZih2LG0sYixFLF8pe3JldHVybiB2KyIsIittKyIgIisoditiKSsiLCIrbSsiICIrKHYrYikrIiwiKyhtK0UtXykrIiAiKyh2K2ItXyoxLjIpKyIsIisobStFKSsiICIrdisiLCIrKG0rRSl9Y29uc3QgcD1pLmFwcGVuZCgicG9seWdvbiIpO3AuYXR0cigicG9pbnRzIixmKGEueCxhLnksNTAsMjAsNykpLHAuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGEueT1hLnkrYS5sYWJlbE1hcmdpbixhLng9YS54Ky41KmEubGFiZWxNYXJnaW4sdmp0KGksYSl9LEpWZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHY9ZlQoKTt2Lng9YS54LHYueT1hLnksdi5maWxsPWEuZmlsbCx2LndpZHRoPWYud2lkdGgqYS50YXNrQ291bnQrZi5kaWFncmFtTWFyZ2luWCooYS50YXNrQ291bnQtMSksdi5oZWlnaHQ9Zi5oZWlnaHQsdi5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtLHYucng9Myx2LnJ5PTMsQmd0KHAsdiksbWp0KGYpKGEudGV4dCxwLHYueCx2Lnksdi53aWR0aCx2LmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bX0sZixhLmNvbG91cil9O2xldCB3anQ9LTE7Y29uc3QgdFVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWEueCtmLndpZHRoLzIsdj1pLmFwcGVuZCgiZyIpO3dqdCsrO2NvbnN0IG09MzAwKzUqMzA7di5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK3dqdCkuYXR0cigieDEiLHApLmF0dHIoInkxIixhLnkpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsbSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFFWZSh2LHtjeDpwLGN5OjMwMCsoNS1hLnNjb3JlKSozMCxzY29yZTphLnNjb3JlfSk7Y29uc3QgYj1mVCgpO2IueD1hLngsYi55PWEueSxiLmZpbGw9YS5maWxsLGIud2lkdGg9Zi53aWR0aCxiLmhlaWdodD1mLmhlaWdodCxiLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2EubnVtLGIucng9MyxiLnJ5PTMsQmd0KHYsYik7bGV0IEU9YS54KzE0O2EucGVvcGxlLmZvckVhY2goXz0+e2NvbnN0IEw9YS5hY3RvcnNbX10uY29sb3IsTj17Y3g6RSxjeTphLnkscjo3LGZpbGw6TCxzdHJva2U6IiMwMDAiLHRpdGxlOl8scG9zOmEuYWN0b3JzW19dLnBvc2l0aW9ufTtianQodixOKSxFKz0xMH0pLG1qdChmKShhLnRhc2ssdixiLngsYi55LGIud2lkdGgsYi5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sZixhLmNvbG91cil9LGVVZT1mdW5jdGlvbihpLGEpe2JOdChpLGEpfSxtanQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFK0wvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsQikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKGosTil9ZnVuY3Rpb24gYSh2LG0sYixFLF8sTCxOLEIsail7Y29uc3R7dGFza0ZvbnRTaXplOlIsdGFza0ZvbnRGYW1pbHk6en09QixLPXYuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKXtjb25zdCBzdD1pdCpSLVIqKEsubGVuZ3RoLTEpLzIsdXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuYXR0cigiZmlsbCIsaikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsUikuc3R5bGUoImZvbnQtZmFtaWx5Iix6KTt1dC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsYitfLzIpLmF0dHIoImR5IixzdCkudGV4dChLW2l0XSksdXQuYXR0cigieSIsRStMLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxwKHV0LE4pfX1mdW5jdGlvbiBmKHYsbSxiLEUsXyxMLE4sQil7Y29uc3Qgaj1tLmFwcGVuZCgic3dpdGNoIiksej1qLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLmF0dHIoIndpZHRoIixfKS5hdHRyKCJoZWlnaHQiLEwpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxhKHYsaixiLEUsXyxMLE4sQikscCh6LE4pfWZ1bmN0aW9uIHAodixtKXtmb3IoY29uc3QgYiBpbiBtKWIgaW4gbSYmdi5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiB2LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6di50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxWUD17ZHJhd1JlY3Q6Qmd0LGRyYXdDaXJjbGU6Ymp0LGRyYXdTZWN0aW9uOkpWZSxkcmF3VGV4dDp2anQsZHJhd0xhYmVsOlpWZSxkcmF3VGFzazp0VWUsZHJhd0JhY2tncm91bmRSZWN0OmVVZSxpbml0R3JhcGhpY3M6ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9fSxuVWU9ZnVuY3Rpb24oaSl7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihmKXtxS1tmXT1pW2ZdfSl9LE41PXt9O2Z1bmN0aW9uIHJVZShpKXtjb25zdCBhPUxlKCkuam91cm5leTtsZXQgZj02MDtPYmplY3Qua2V5cyhONSkuZm9yRWFjaChwPT57Y29uc3Qgdj1ONVtwXS5jb2xvcixtPXtjeDoyMCxjeTpmLHI6NyxmaWxsOnYsc3Ryb2tlOiIjMDAwIixwb3M6TjVbcF0ucG9zaXRpb259O1ZQLmRyYXdDaXJjbGUoaSxtKTtjb25zdCBiPXt4OjQwLHk6Zis3LGZpbGw6IiM2NjYiLHRleHQ6cCx0ZXh0TWFyZ2luOmEuYm94VGV4dE1hcmdpbnw1fTtWUC5kcmF3VGV4dChpLGIpLGYrPTIwfSl9Y29uc3QgcUs9TGUoKS5qb3VybmV5LFNUPXFLLmxlZnRNYXJnaW4saVVlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9TGUoKS5qb3VybmV5LG09TGUoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKTtydi5pbml0KCk7Y29uc3QgXz1FLnNlbGVjdCgiIyIrYSk7VlAuaW5pdEdyYXBoaWNzKF8pO2NvbnN0IEw9cC5kYi5nZXRUYXNrcygpLE49cC5kYi5nZXREaWFncmFtVGl0bGUoKSxCPXAuZGIuZ2V0QWN0b3JzKCk7Zm9yKGNvbnN0IHN0IGluIE41KWRlbGV0ZSBONVtzdF07bGV0IGo9MDtCLmZvckVhY2goc3Q9PntONVtzdF09e2NvbG9yOnYuYWN0b3JDb2xvdXJzW2oldi5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjpqfSxqKyt9KSxyVWUoXykscnYuaW5zZXJ0KDAsMCxTVCxPYmplY3Qua2V5cyhONSkubGVuZ3RoKjUwKSxzVWUoXyxMLDApO2NvbnN0IFI9cnYuZ2V0Qm91bmRzKCk7TiYmXy5hcHBlbmQoInRleHQiKS50ZXh0KE4pLmF0dHIoIngiLFNUKS5hdHRyKCJmb250LXNpemUiLCI0ZXgiKS5hdHRyKCJmb250LXdlaWdodCIsImJvbGQiKS5hdHRyKCJ5IiwyNSk7Y29uc3Qgej1SLnN0b3B5LVIuc3RhcnR5KzIqdi5kaWFncmFtTWFyZ2luWSxLPVNUK1Iuc3RvcHgrMip2LmRpYWdyYW1NYXJnaW5YO29nKF8seixLLHYudXNlTWF4V2lkdGgpLF8uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFNUKS5hdHRyKCJ5MSIsdi5oZWlnaHQqNCkuYXR0cigieDIiLEstU1QtNCkuYXR0cigieTIiLHYuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7Y29uc3QgaXQ9Tj83MDowO18uYXR0cigidmlld0JveCIsYCR7Ui5zdGFydHh9IC0yNSAke0t9ICR7eitpdH1gKSxfLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IiksXy5hdHRyKCJoZWlnaHQiLHoraXQrMjUpfSxydj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MH0sdXBkYXRlVmFsOmZ1bmN0aW9uKGksYSxmLHApe2lbYV09PT12b2lkIDA/aVthXT1mOmlbYV09cChmLGlbYV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdj1MZSgpLmpvdXJuZXksbT10aGlzO2xldCBiPTA7ZnVuY3Rpb24gRShfKXtyZXR1cm4gZnVuY3Rpb24oTil7YisrO2NvbnN0IEI9bS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1iKzE7bS51cGRhdGVWYWwoTiwic3RhcnR5IixhLUIqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKE4sInN0b3B5IixwK0Iqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKHJ2LmRhdGEsInN0YXJ0eCIsaS1CKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weCIsZitCKnYuYm94TWFyZ2luLE1hdGgubWF4KSxfIT09ImFjdGl2YXRpb24iJiYobS51cGRhdGVWYWwoTiwic3RhcnR4IixpLUIqdi5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKE4sInN0b3B4IixmK0Iqdi5ib3hNYXJnaW4sTWF0aC5tYXgpLG0udXBkYXRlVmFsKHJ2LmRhdGEsInN0YXJ0eSIsYS1CKnYuYm94TWFyZ2luLE1hdGgubWluKSxtLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weSIscCtCKnYuYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKEUoKSl9LGluc2VydDpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PU1hdGgubWluKGksZiksbT1NYXRoLm1heChpLGYpLGI9TWF0aC5taW4oYSxwKSxFPU1hdGgubWF4KGEscCk7dGhpcy51cGRhdGVWYWwocnYuZGF0YSwic3RhcnR4Iix2LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChydi5kYXRhLCJzdGFydHkiLGIsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHJ2LmRhdGEsInN0b3B4IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChydi5kYXRhLCJzdG9weSIsRSxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHModixiLG0sRSl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbihpKXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MraSx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFJndD1xSy5zZWN0aW9uRmlsbHMseWp0PXFLLnNlY3Rpb25Db2xvdXJzLHNVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1MZSgpLmpvdXJuZXk7bGV0IHY9IiI7Y29uc3QgbT1wLmhlaWdodCoyK3AuZGlhZ3JhbU1hcmdpblksYj1mK207bGV0IEU9MCxfPSIjQ0NDIixMPSJibGFjayIsTj0wO2Zvcihjb25zdFtCLGpdb2YgYS5lbnRyaWVzKCkpe2lmKHYhPT1qLnNlY3Rpb24pe189Umd0W0UlUmd0Lmxlbmd0aF0sTj1FJVJndC5sZW5ndGgsTD15anRbRSV5anQubGVuZ3RoXTtsZXQgej0wO2NvbnN0IEs9ai5zZWN0aW9uO2ZvcihsZXQgc3Q9QjtzdDxhLmxlbmd0aCYmYVtzdF0uc2VjdGlvbj09SztzdCsrKXo9eisxO2NvbnN0IGl0PXt4OkIqcC50YXNrTWFyZ2luK0IqcC53aWR0aCtTVCx5OjUwLHRleHQ6ai5zZWN0aW9uLGZpbGw6XyxudW06Tixjb2xvdXI6TCx0YXNrQ291bnQ6en07VlAuZHJhd1NlY3Rpb24oaSxpdCxwKSx2PWouc2VjdGlvbixFKyt9Y29uc3QgUj1qLnBlb3BsZS5yZWR1Y2UoKHosSyk9PihONVtLXSYmKHpbS109TjVbS10pLHopLHt9KTtqLng9QipwLnRhc2tNYXJnaW4rQipwLndpZHRoK1NULGoueT1iLGoud2lkdGg9cC5kaWFncmFtTWFyZ2luWCxqLmhlaWdodD1wLmRpYWdyYW1NYXJnaW5ZLGouY29sb3VyPUwsai5maWxsPV8sai5udW09TixqLmFjdG9ycz1SLFZQLmRyYXdUYXNrKGksaixwKSxydi5pbnNlcnQoai54LGoueSxqLngrai53aWR0aCtwLnRhc2tNYXJnaW4sMzAwKzUqMzApfX0seGp0PXtzZXRDb25mOm5VZSxkcmF3OmlVZX0sYVVlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6cVZlLGRiOnBqdCxyZW5kZXJlcjp4anQsc3R5bGVzOlhWZSxpbml0Omk9Pnt4anQuc2V0Q29uZihpLmpvdXJuZXkpLHBqdC5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksb1VlPShpLGEsZik9Pntjb25zdHtwYXJlbnRCeUlkOnB9PWYsdj1uZXcgU2V0O2xldCBtPWk7Zm9yKDttOyl7aWYodi5hZGQobSksbT09PWEpcmV0dXJuIG07bT1wW21dfWZvcihtPWE7bTspe2lmKHYuaGFzKG0pKXJldHVybiBtO209cFttXX1yZXR1cm4icm9vdCJ9O2Z1bmN0aW9uIEhLKGkpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicraSsnIi4gUGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1JlcXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9dmFyIGtqdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYpe2kuZXhwb3J0cz1mKCl9KShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGYocCx2LG0pe2Z1bmN0aW9uIGIoTCxOKXtpZighdltMXSl7aWYoIXBbTF0pe3ZhciBCPXR5cGVvZiBISz09ImZ1bmN0aW9uIiYmSEs7aWYoIU4mJkIpcmV0dXJuIEIoTCwhMCk7aWYoRSlyZXR1cm4gRShMLCEwKTt2YXIgaj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitMKyInIik7dGhyb3cgai5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixqfXZhciBSPXZbTF09e2V4cG9ydHM6e319O3BbTF1bMF0uY2FsbChSLmV4cG9ydHMsZnVuY3Rpb24oeil7dmFyIEs9cFtMXVsxXVt6XTtyZXR1cm4gYihLfHx6KX0sUixSLmV4cG9ydHMsZixwLHYsbSl9cmV0dXJuIHZbTF0uZXhwb3J0c31mb3IodmFyIEU9dHlwZW9mIEhLPT0iZnVuY3Rpb24iJiZISyxfPTA7XzxtLmxlbmd0aDtfKyspYihtW19dKTtyZXR1cm4gYn1yZXR1cm4gZn0oKSh7MTpbZnVuY3Rpb24oZixwLHYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEwoTixCKXtmb3IodmFyIGo9MDtqPEIubGVuZ3RoO2orKyl7dmFyIFI9QltqXTtSLmVudW1lcmFibGU9Ui5lbnVtZXJhYmxlfHwhMSxSLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUiYmKFIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFIua2V5LFIpfX1yZXR1cm4gZnVuY3Rpb24oTixCLGope3JldHVybiBCJiZMKE4ucHJvdG90eXBlLEIpLGomJkwoTixqKSxOfX0oKTtmdW5jdGlvbiBiKEwsTil7aWYoIShMIGluc3RhbmNlb2YgTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKCl7dmFyIE49dGhpcyxCPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxqPUIuZGVmYXVsdExheW91dE9wdGlvbnMsUj1qPT09dm9pZCAwP3t9Omosej1CLmFsZ29yaXRobXMsSz16PT09dm9pZCAwP1sibGF5ZXJlZCIsInN0cmVzcyIsIm1ydHJlZSIsInJhZGlhbCIsImZvcmNlIiwiZGlzY28iLCJzcG9yZU92ZXJsYXAiLCJzcG9yZUNvbXBhY3Rpb24iLCJyZWN0cGFja2luZyJdOnosaXQ9Qi53b3JrZXJGYWN0b3J5LHN0PUIud29ya2VyVXJsO2lmKGIodGhpcyxMKSx0aGlzLmRlZmF1bHRMYXlvdXRPcHRpb25zPVIsdGhpcy5pbml0aWFsaXplZD0hMSx0eXBlb2Ygc3Q+InUiJiZ0eXBlb2YgaXQ+InUiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhbiBFTEsgd2l0aG91dCBib3RoICd3b3JrZXJVcmwnIGFuZCAnd29ya2VyRmFjdG9yeScuIik7dmFyIHV0PWl0O3R5cGVvZiBzdDwidSImJnR5cGVvZiBpdD4idSImJih1dD1mdW5jdGlvbih5dCl7cmV0dXJuIG5ldyBXb3JrZXIoeXQpfSk7dmFyIGJ0PXV0KHN0KTtpZih0eXBlb2YgYnQucG9zdE1lc3NhZ2UhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JlYXRlZCB3b3JrZXIgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmVxdWlyZWQgJ3Bvc3RNZXNzYWdlJyBmdW5jdGlvbi4iKTt0aGlzLndvcmtlcj1uZXcgXyhidCksdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoicmVnaXN0ZXIiLGFsZ29yaXRobXM6S30pLnRoZW4oZnVuY3Rpb24obXQpe3JldHVybiBOLmluaXRpYWxpemVkPSEwfSkuY2F0Y2goY29uc29sZS5lcnIpfXJldHVybiBtKEwsW3trZXk6ImxheW91dCIsdmFsdWU6ZnVuY3Rpb24oQil7dmFyIGo9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LFI9ai5sYXlvdXRPcHRpb25zLHo9Uj09PXZvaWQgMD90aGlzLmRlZmF1bHRMYXlvdXRPcHRpb25zOlIsSz1qLmxvZ2dpbmcsaXQ9Sz09PXZvaWQgMD8hMTpLLHN0PWoubWVhc3VyZUV4ZWN1dGlvblRpbWUsdXQ9c3Q9PT12b2lkIDA/ITE6c3Q7cmV0dXJuIEI/dGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoibGF5b3V0IixncmFwaDpCLGxheW91dE9wdGlvbnM6eixvcHRpb25zOntsb2dnaW5nOml0LG1lYXN1cmVFeGVjdXRpb25UaW1lOnV0fX0pOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyBtYW5kYXRvcnkgcGFyYW1ldGVyICdncmFwaCcuIikpfX0se2tleToia25vd25MYXlvdXRBbGdvcml0aG1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJhbGdvcml0aG1zIn0pfX0se2tleToia25vd25MYXlvdXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJvcHRpb25zIn0pfX0se2tleToia25vd25MYXlvdXRDYXRlZ29yaWVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJjYXRlZ29yaWVzIn0pfX0se2tleToidGVybWluYXRlV29ya2VyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX1dKSxMfSgpO3YuZGVmYXVsdD1FO3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChOKXt2YXIgQj10aGlzO2lmKGIodGhpcyxMKSxOPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBtYW5kYXRvcnkgcGFyYW1ldGVyICd3b3JrZXInLiIpO3RoaXMucmVzb2x2ZXJzPXt9LHRoaXMud29ya2VyPU4sdGhpcy53b3JrZXIub25tZXNzYWdlPWZ1bmN0aW9uKGope3NldFRpbWVvdXQoZnVuY3Rpb24oKXtCLnJlY2VpdmUoQixqKX0sMCl9fXJldHVybiBtKEwsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihCKXt2YXIgaj10aGlzLmlkfHwwO3RoaXMuaWQ9aisxLEIuaWQ9ajt2YXIgUj10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6LEspe1IucmVzb2x2ZXJzW2pdPWZ1bmN0aW9uKGl0LHN0KXtpdD8oUi5jb252ZXJ0R3d0U3R5bGVFcnJvcihpdCksSyhpdCkpOnooc3QpfSxSLndvcmtlci5wb3N0TWVzc2FnZShCKX0pfX0se2tleToicmVjZWl2ZSIsdmFsdWU6ZnVuY3Rpb24oQixqKXt2YXIgUj1qLmRhdGEsej1CLnJlc29sdmVyc1tSLmlkXTt6JiYoZGVsZXRlIEIucmVzb2x2ZXJzW1IuaWRdLFIuZXJyb3I/eihSLmVycm9yKTp6KG51bGwsUi5kYXRhKSl9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlJiZ0aGlzLndvcmtlci50ZXJtaW5hdGUoKX19LHtrZXk6ImNvbnZlcnRHd3RTdHlsZUVycm9yIix2YWx1ZTpmdW5jdGlvbihCKXtpZihCKXt2YXIgaj1CLl9famF2YSRleGNlcHRpb247aiYmKGouY2F1c2UmJmouY2F1c2UuYmFja2luZ0pzT2JqZWN0JiYoQi5jYXVzZT1qLmNhdXNlLmJhY2tpbmdKc09iamVjdCx0aGlzLmNvbnZlcnRHd3RTdHlsZUVycm9yKEIuY2F1c2UpKSxkZWxldGUgQi5fX2phdmEkZXhjZXB0aW9uKX19fV0pLEx9KCl9LHt9XSwyOltmdW5jdGlvbihmLHAsdil7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBiO3R5cGVvZiB3aW5kb3c8InUiP2I9d2luZG93OnR5cGVvZiBtPCJ1Ij9iPW06dHlwZW9mIHNlbGY8InUiJiYoYj1zZWxmKTt2YXIgRTtmdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIEwoKXt9ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBCKCl7fWZ1bmN0aW9uIGooKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiB6KCl7fWZ1bmN0aW9uIEsoKXt9ZnVuY3Rpb24gaXQoKXt9ZnVuY3Rpb24gc3QoKXt9ZnVuY3Rpb24gdXQoKXt9ZnVuY3Rpb24gYnQoKXt9ZnVuY3Rpb24gbXQoKXt9ZnVuY3Rpb24geXQoKXt9ZnVuY3Rpb24gZHQoKXt9ZnVuY3Rpb24gaHQoKXt9ZnVuY3Rpb24gd3QoKXt9ZnVuY3Rpb24gWCgpe31mdW5jdGlvbiBwdCgpe31mdW5jdGlvbiBVKCl7fWZ1bmN0aW9uIHh0KCl7fWZ1bmN0aW9uIG50KCl7fWZ1bmN0aW9uIE90KCl7fWZ1bmN0aW9uIE50KCl7fWZ1bmN0aW9uIHF0KCl7fWZ1bmN0aW9uIEN0KCl7fWZ1bmN0aW9uIFooKXt9ZnVuY3Rpb24gVHQoKXt9ZnVuY3Rpb24gSHQoKXt9ZnVuY3Rpb24gSXQoKXt9ZnVuY3Rpb24gRnQoKXt9ZnVuY3Rpb24ga2UoKXt9ZnVuY3Rpb24gcG4oKXt9ZnVuY3Rpb24gTWUoKXt9ZnVuY3Rpb24gdmUoKXt9ZnVuY3Rpb24gR2UoKXt9ZnVuY3Rpb24gS2UoKXt9ZnVuY3Rpb24gd2UoKXt9ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gJHQoKXt9ZnVuY3Rpb24gcmUoKXt9ZnVuY3Rpb24gaWUoKXt9ZnVuY3Rpb24gT2UoKXt9ZnVuY3Rpb24gb2UoKXt9ZnVuY3Rpb24gTmUoKXt9ZnVuY3Rpb24gbWUoKXt9ZnVuY3Rpb24gY24oKXt9ZnVuY3Rpb24gbGkoKXt9ZnVuY3Rpb24geWEoKXt9ZnVuY3Rpb24gZGEoKXt9ZnVuY3Rpb24gT28oKXt9ZnVuY3Rpb24gZHMoKXt9ZnVuY3Rpb24gRHIoKXt9ZnVuY3Rpb24gbnIoKXt9ZnVuY3Rpb24gZGkoKXt9ZnVuY3Rpb24gRWUoKXt9ZnVuY3Rpb24gWW4oKXt9ZnVuY3Rpb24gSGUoKXt9ZnVuY3Rpb24gVGkoKXt9ZnVuY3Rpb24gZ24oKXt9ZnVuY3Rpb24ga3MoKXt9ZnVuY3Rpb24gcWEoKXt9ZnVuY3Rpb24gTGEoKXt9ZnVuY3Rpb24gR3MoKXt9ZnVuY3Rpb24gTm8oKXt9ZnVuY3Rpb24gdnMoKXt9ZnVuY3Rpb24gbnUoKXt9ZnVuY3Rpb24gJHMoKXt9ZnVuY3Rpb24gTHUoKXt9ZnVuY3Rpb24gZm0oKXt9ZnVuY3Rpb24gYXYoKXt9ZnVuY3Rpb24gVXUoKXt9ZnVuY3Rpb24gWmwoKXt9ZnVuY3Rpb24gUGEoKXt9ZnVuY3Rpb24gQWwoKXt9ZnVuY3Rpb24gdWEoKXt9ZnVuY3Rpb24gYmMoKXt9ZnVuY3Rpb24gQ2MoKXt9ZnVuY3Rpb24gZ2EoKXt9ZnVuY3Rpb24gTWEoKXt9ZnVuY3Rpb24gSGEoKXt9ZnVuY3Rpb24gTGwoKXt9ZnVuY3Rpb24gX2MoKXt9ZnVuY3Rpb24gb3YoKXt9ZnVuY3Rpb24gSmwoKXt9ZnVuY3Rpb24gWjEoKXt9ZnVuY3Rpb24gRmQoKXt9ZnVuY3Rpb24gSjEoKXt9ZnVuY3Rpb24gQmQoKXt9ZnVuY3Rpb24gRTAoKXt9ZnVuY3Rpb24gQmkoKXt9ZnVuY3Rpb24gb24oKXt9ZnVuY3Rpb24ga3IoKXt9ZnVuY3Rpb24gRWkoKXt9ZnVuY3Rpb24gSm8oKXt9ZnVuY3Rpb24gdmMoKXt9ZnVuY3Rpb24gdGYoKXt9ZnVuY3Rpb24gT2MoKXt9ZnVuY3Rpb24gZWYoKXt9ZnVuY3Rpb24gbmYoKXt9ZnVuY3Rpb24gWGkoKXt9ZnVuY3Rpb24gRXMoKXt9ZnVuY3Rpb24geGEoKXt9ZnVuY3Rpb24geGkoKXt9ZnVuY3Rpb24gV2MoKXt9ZnVuY3Rpb24gQ2UoKXt9ZnVuY3Rpb24gZ3AoKXt9ZnVuY3Rpb24gQmUoKXt9ZnVuY3Rpb24gRmYoKXt9ZnVuY3Rpb24gZGcoKXt9ZnVuY3Rpb24gZG0oKXt9ZnVuY3Rpb24gcGsoKXt9ZnVuY3Rpb24geDMoKXt9ZnVuY3Rpb24gTWwoKXt9ZnVuY3Rpb24gVDAoKXt9ZnVuY3Rpb24gY3YoKXt9ZnVuY3Rpb24gRjUoKXt9ZnVuY3Rpb24gamIoKXt9ZnVuY3Rpb24gQjUoKXt9ZnVuY3Rpb24gbDEoKXt9ZnVuY3Rpb24gdGQoKXt9ZnVuY3Rpb24gZWQoKXt9ZnVuY3Rpb24gUjUoKXt9ZnVuY3Rpb24gdXYoKXt9ZnVuY3Rpb24gajUoKXt9ZnVuY3Rpb24gcHAoKXt9ZnVuY3Rpb24gJDUoKXt9ZnVuY3Rpb24gazMoKXt9ZnVuY3Rpb24gZ20oKXt9ZnVuY3Rpb24gZ2coKXt9ZnVuY3Rpb24gd0woKXt9ZnVuY3Rpb24gYmwoKXt9ZnVuY3Rpb24gV1AoKXt9ZnVuY3Rpb24gU2MoKXt9ZnVuY3Rpb24gUUsoKXt9ZnVuY3Rpb24gJGIoKXt9ZnVuY3Rpb24gWksoKXt9ZnVuY3Rpb24gSVQoKXt9ZnVuY3Rpb24gSksoKXt9ZnVuY3Rpb24gS1AoKXt9ZnVuY3Rpb24gQmYoKXt9ZnVuY3Rpb24gcG0oKXt9ZnVuY3Rpb24gbUwoKXt9ZnVuY3Rpb24gWVAoKXt9ZnVuY3Rpb24gYnAoKXt9ZnVuY3Rpb24gYm0oKXt9ZnVuY3Rpb24gdFkoKXt9ZnVuY3Rpb24gemIoKXt9ZnVuY3Rpb24gZVkoKXt9ZnVuY3Rpb24gblkoKXt9ZnVuY3Rpb24gejUoKXt9ZnVuY3Rpb24gRFQoKXt9ZnVuY3Rpb24gWFAoKXt9ZnVuY3Rpb24gYmsoKXt9ZnVuY3Rpb24gclkoKXt9ZnVuY3Rpb24gdmsoKXt9ZnVuY3Rpb24gaVkoKXt9ZnVuY3Rpb24gc1koKXt9ZnVuY3Rpb24gYVkoKXt9ZnVuY3Rpb24gb1koKXt9ZnVuY3Rpb24gY1koKXt9ZnVuY3Rpb24gdVkoKXt9ZnVuY3Rpb24gbFkoKXt9ZnVuY3Rpb24gaFkoKXt9ZnVuY3Rpb24gZlkoKXt9ZnVuY3Rpb24gZFkoKXt9ZnVuY3Rpb24gZ1koKXt9ZnVuY3Rpb24geUwoKXt9ZnVuY3Rpb24gcFkoKXt9ZnVuY3Rpb24gYlkoKXt9ZnVuY3Rpb24gT1QoKXt9ZnVuY3Rpb24gUVAoKXt9ZnVuY3Rpb24gcTUoKXt9ZnVuY3Rpb24gdlkoKXt9ZnVuY3Rpb24gd1koKXt9ZnVuY3Rpb24gbVkoKXt9ZnVuY3Rpb24geVkoKXt9ZnVuY3Rpb24geFkoKXt9ZnVuY3Rpb24gTlQoKXt9ZnVuY3Rpb24geEwoKXt9ZnVuY3Rpb24gWlAoKXt9ZnVuY3Rpb24gRTMoKXt9ZnVuY3Rpb24gVDMoKXt9ZnVuY3Rpb24ga1koKXt9ZnVuY3Rpb24gcmYoKXt9ZnVuY3Rpb24gSDUoKXt9ZnVuY3Rpb24gRVkoKXt9ZnVuY3Rpb24gd2soKXt9ZnVuY3Rpb24gUmQoKXt9ZnVuY3Rpb24gVFkoKXt9ZnVuY3Rpb24gQ1koKXt9ZnVuY3Rpb24gX1koKXt9ZnVuY3Rpb24gU1koKXt9ZnVuY3Rpb24gUFQoKXt9ZnVuY3Rpb24ga0woKXt9ZnVuY3Rpb24gSlAoKXt9ZnVuY3Rpb24gRUwoKXt9ZnVuY3Rpb24gRzUoKXt9ZnVuY3Rpb24gQVkoKXt9ZnVuY3Rpb24gdEYoKXt9ZnVuY3Rpb24gZUYoKXt9ZnVuY3Rpb24gTFkoKXt9ZnVuY3Rpb24gTVkoKXt9ZnVuY3Rpb24gSVkoKXt9ZnVuY3Rpb24gRFkoKXt9ZnVuY3Rpb24gT1koKXt9ZnVuY3Rpb24gTlkoKXt9ZnVuY3Rpb24gamQoKXt9ZnVuY3Rpb24gbHYoKXt9ZnVuY3Rpb24gUFkoKXt9ZnVuY3Rpb24gbkYoKXt9ZnVuY3Rpb24gckYoKXt9ZnVuY3Rpb24gRlkoKXt9ZnVuY3Rpb24gQzMoKXt9ZnVuY3Rpb24gbWsoKXt9ZnVuY3Rpb24gVEwoKXt9ZnVuY3Rpb24gdm0oKXt9ZnVuY3Rpb24geWsoKXt9ZnVuY3Rpb24gQlkoKXt9ZnVuY3Rpb24gRlQoKXt9ZnVuY3Rpb24gbmQoKXt9ZnVuY3Rpb24gaUYoKXt9ZnVuY3Rpb24gQ0woKXt9ZnVuY3Rpb24geGsoKXt9ZnVuY3Rpb24gX0woKXt9ZnVuY3Rpb24gc0YoKXt9ZnVuY3Rpb24gUlkoKXt9ZnVuY3Rpb24gU0woKXt9ZnVuY3Rpb24galkoKXt9ZnVuY3Rpb24gJFkoKXt9ZnVuY3Rpb24gYUYoKXt9ZnVuY3Rpb24gVjUoKXt9ZnVuY3Rpb24gb0YoKXt9ZnVuY3Rpb24gVTUoKXt9ZnVuY3Rpb24gelkoKXt9ZnVuY3Rpb24gQUwoKXt9ZnVuY3Rpb24gcVkoKXt9ZnVuY3Rpb24gSFkoKXt9ZnVuY3Rpb24gR1koKXt9ZnVuY3Rpb24gVlkoKXt9ZnVuY3Rpb24gY0YoKXt9ZnVuY3Rpb24gVVkoKXt9ZnVuY3Rpb24gV1koKXt9ZnVuY3Rpb24gS1koKXt9ZnVuY3Rpb24gdUYoKXt9ZnVuY3Rpb24gWVkoKXt9ZnVuY3Rpb24gWFkoKXt9ZnVuY3Rpb24gUVkoKXt9ZnVuY3Rpb24gbEYoKXt9ZnVuY3Rpb24gWlkoKXt9ZnVuY3Rpb24gSlkoKXt9ZnVuY3Rpb24gaEYoKXt9ZnVuY3Rpb24gZkYoKXt9ZnVuY3Rpb24gZEYoKXt9ZnVuY3Rpb24gdFgoKXt9ZnVuY3Rpb24gZVgoKXt9ZnVuY3Rpb24ga2soKXt9ZnVuY3Rpb24gVzUoKXt9ZnVuY3Rpb24gQlQoKXt9ZnVuY3Rpb24gblgoKXt9ZnVuY3Rpb24gTEwoKXt9ZnVuY3Rpb24gUlQoKXt9ZnVuY3Rpb24gTUwoKXt9ZnVuY3Rpb24gZ0YoKXt9ZnVuY3Rpb24gcEYoKXt9ZnVuY3Rpb24gclgoKXt9ZnVuY3Rpb24gaVgoKXt9ZnVuY3Rpb24gc1goKXt9ZnVuY3Rpb24gYkYoKXt9ZnVuY3Rpb24gdkYoKXt9ZnVuY3Rpb24gYVgoKXt9ZnVuY3Rpb24gb1goKXt9ZnVuY3Rpb24gY1goKXt9ZnVuY3Rpb24gdVgoKXt9ZnVuY3Rpb24gbFgoKXt9ZnVuY3Rpb24gd0YoKXt9ZnVuY3Rpb24gaFgoKXt9ZnVuY3Rpb24gZlgoKXt9ZnVuY3Rpb24gZFgoKXt9ZnVuY3Rpb24gZ1goKXt9ZnVuY3Rpb24gbUYoKXt9ZnVuY3Rpb24galQoKXt9ZnVuY3Rpb24gcFgoKXt9ZnVuY3Rpb24gYlgoKXt9ZnVuY3Rpb24geUYoKXt9ZnVuY3Rpb24gdlgoKXt9ZnVuY3Rpb24gd1goKXt9ZnVuY3Rpb24gbVgoKXt9ZnVuY3Rpb24geVgoKXt9ZnVuY3Rpb24geFgoKXt9ZnVuY3Rpb24ga1goKXt9ZnVuY3Rpb24geEYoKXt9ZnVuY3Rpb24gRVgoKXt9ZnVuY3Rpb24ga0YoKXt9ZnVuY3Rpb24gVFgoKXt9ZnVuY3Rpb24gQ1goKXt9ZnVuY3Rpb24gX1goKXt9ZnVuY3Rpb24gJFQoKXt9ZnVuY3Rpb24gU1goKXt9ZnVuY3Rpb24gelQoKXt9ZnVuY3Rpb24gQVgoKXt9ZnVuY3Rpb24gRUYoKXt9ZnVuY3Rpb24gVEYoKXt9ZnVuY3Rpb24gQ0YoKXt9ZnVuY3Rpb24gX0YoKXt9ZnVuY3Rpb24gaHYoKXt9ZnVuY3Rpb24gU0YoKXt9ZnVuY3Rpb24gQUYoKXt9ZnVuY3Rpb24gTEYoKXt9ZnVuY3Rpb24gTUYoKXt9ZnVuY3Rpb24gTFgoKXt9ZnVuY3Rpb24gSzUoKXt9ZnVuY3Rpb24gcVQoKXt9ZnVuY3Rpb24gXzMoKXt9ZnVuY3Rpb24gTVgoKXt9ZnVuY3Rpb24gSVgoKXt9ZnVuY3Rpb24gSFQoKXt9ZnVuY3Rpb24gRFgoKXt9ZnVuY3Rpb24gT1goKXt9ZnVuY3Rpb24gTlgoKXt9ZnVuY3Rpb24gUFgoKXt9ZnVuY3Rpb24gRlgoKXt9ZnVuY3Rpb24gQlgoKXt9ZnVuY3Rpb24gUlgoKXt9ZnVuY3Rpb24galgoKXt9ZnVuY3Rpb24gJFgoKXt9ZnVuY3Rpb24gelgoKXt9ZnVuY3Rpb24gcVgoKXt9ZnVuY3Rpb24gSUwoKXt9ZnVuY3Rpb24gSUYoKXt9ZnVuY3Rpb24gSFgoKXt9ZnVuY3Rpb24gR1goKXt9ZnVuY3Rpb24gVlgoKXt9ZnVuY3Rpb24gREYoKXt9ZnVuY3Rpb24gVVgoKXt9ZnVuY3Rpb24gV1goKXt9ZnVuY3Rpb24gS1goKXt9ZnVuY3Rpb24gWVgoKXt9ZnVuY3Rpb24gWFgoKXt9ZnVuY3Rpb24gUVgoKXt9ZnVuY3Rpb24gT0YoKXt9ZnVuY3Rpb24gTkYoKXt9ZnVuY3Rpb24gWlgoKXt9ZnVuY3Rpb24gUEYoKXt9ZnVuY3Rpb24gRkYoKXt9ZnVuY3Rpb24gSlgoKXt9ZnVuY3Rpb24gdFEoKXt9ZnVuY3Rpb24gZVEoKXt9ZnVuY3Rpb24gREwoKXt9ZnVuY3Rpb24gblEoKXt9ZnVuY3Rpb24gRWsoKXt9ZnVuY3Rpb24gclEoKXt9ZnVuY3Rpb24gaVEoKXt9ZnVuY3Rpb24gc1EoKXt9ZnVuY3Rpb24gQkYoKXt9ZnVuY3Rpb24gYVEoKXt9ZnVuY3Rpb24gb1EoKXt9ZnVuY3Rpb24gY1EoKXt9ZnVuY3Rpb24gdVEoKXt9ZnVuY3Rpb24gbFEoKXt9ZnVuY3Rpb24gaFEoKXt9ZnVuY3Rpb24gZlEoKXt9ZnVuY3Rpb24gZFEoKXt9ZnVuY3Rpb24gZ1EoKXt9ZnVuY3Rpb24gcFEoKXt9ZnVuY3Rpb24gYlEoKXt9ZnVuY3Rpb24gdlEoKXt9ZnVuY3Rpb24gWTUoKXt9ZnVuY3Rpb24gUkYoKXt9ZnVuY3Rpb24gd1EoKXt9ZnVuY3Rpb24gbVEoKXt9ZnVuY3Rpb24geVEoKXt9ZnVuY3Rpb24gakYoKXt9ZnVuY3Rpb24geFEoKXt9ZnVuY3Rpb24gR1QoKXt9ZnVuY3Rpb24ga1EoKXt9ZnVuY3Rpb24gRVEoKXt9ZnVuY3Rpb24gVFEoKXt9ZnVuY3Rpb24gQ1EoKXt9ZnVuY3Rpb24gX1EoKXt9ZnVuY3Rpb24gU1EoKXt9ZnVuY3Rpb24gQVEoKXt9ZnVuY3Rpb24gTFEoKXt9ZnVuY3Rpb24gTVEoKXt9ZnVuY3Rpb24gSVEoKXt9ZnVuY3Rpb24gWDUoKXt9ZnVuY3Rpb24gRFEoKXt9ZnVuY3Rpb24gT1EoKXt9ZnVuY3Rpb24gTlEoKXt9ZnVuY3Rpb24gUFEoKXt9ZnVuY3Rpb24gRlEoKXt9ZnVuY3Rpb24gQlEoKXt9ZnVuY3Rpb24gUlEoKXt9ZnVuY3Rpb24galEoKXt9ZnVuY3Rpb24gVlQoKXt9ZnVuY3Rpb24gJFEoKXt9ZnVuY3Rpb24gelEoKXt9ZnVuY3Rpb24gcVEoKXt9ZnVuY3Rpb24gSFEoKXt9ZnVuY3Rpb24gR1EoKXt9ZnVuY3Rpb24gVlEoKXt9ZnVuY3Rpb24gVVEoKXt9ZnVuY3Rpb24gV1EoKXt9ZnVuY3Rpb24gUTUoKXt9ZnVuY3Rpb24gJEYoKXt9ZnVuY3Rpb24gS1EoKXt9ZnVuY3Rpb24gT0woKXt9ZnVuY3Rpb24gWVEoKXt9ZnVuY3Rpb24gWFEoKXt9ZnVuY3Rpb24gUVEoKXt9ZnVuY3Rpb24gWlEoKXt9ZnVuY3Rpb24gSlEoKXt9ZnVuY3Rpb24gdFooKXt9ZnVuY3Rpb24gZVooKXt9ZnVuY3Rpb24gekYoKXt9ZnVuY3Rpb24gblooKXt9ZnVuY3Rpb24gcUYoKXt9ZnVuY3Rpb24gclooKXt9ZnVuY3Rpb24gSEYoKXt9ZnVuY3Rpb24gR0YoKXt9ZnVuY3Rpb24gVkYoKXt9ZnVuY3Rpb24gaVooKXt9ZnVuY3Rpb24gc1ooKXt9ZnVuY3Rpb24gVVQoKXt9ZnVuY3Rpb24gTkwoKXt9ZnVuY3Rpb24gV1QoKXt9ZnVuY3Rpb24gYVooKXt9ZnVuY3Rpb24gb1ooKXt9ZnVuY3Rpb24gUEwoKXt9ZnVuY3Rpb24gY1ooKXt9ZnVuY3Rpb24gdVooKXt9ZnVuY3Rpb24gVUYoKXt9ZnVuY3Rpb24gbFooKXt9ZnVuY3Rpb24gaFooKXt9ZnVuY3Rpb24gZlooKXt9ZnVuY3Rpb24gZFooKXt9ZnVuY3Rpb24gZ1ooKXt9ZnVuY3Rpb24gcFooKXt9ZnVuY3Rpb24gYlooKXt9ZnVuY3Rpb24gdlooKXt9ZnVuY3Rpb24gd1ooKXt9ZnVuY3Rpb24gbVooKXt9ZnVuY3Rpb24gcGcoKXt9ZnVuY3Rpb24geVooKXt9ZnVuY3Rpb24gd20oKXt9ZnVuY3Rpb24gV0YoKXt9ZnVuY3Rpb24geFooKXt9ZnVuY3Rpb24ga1ooKXt9ZnVuY3Rpb24gRVooKXt9ZnVuY3Rpb24gVFooKXt9ZnVuY3Rpb24gQ1ooKXt9ZnVuY3Rpb24gX1ooKXt9ZnVuY3Rpb24gU1ooKXt9ZnVuY3Rpb24gQVooKXt9ZnVuY3Rpb24gTFooKXt9ZnVuY3Rpb24gQWMoKXt9ZnVuY3Rpb24gTVooKXt9ZnVuY3Rpb24gS1QoKXt9ZnVuY3Rpb24gdGMoKXt9ZnVuY3Rpb24gS2MoKXt9ZnVuY3Rpb24gemkoKXt9ZnVuY3Rpb24gRkwoKXt9ZnVuY3Rpb24gSVooKXt9ZnVuY3Rpb24gRFooKXt9ZnVuY3Rpb24gT1ooKXt9ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gbW0oKXt9ZnVuY3Rpb24gVWUoKXt9ZnVuY3Rpb24gTlooKXt9ZnVuY3Rpb24gUFooKXt9ZnVuY3Rpb24gRlooKXt9ZnVuY3Rpb24gQlooKXt9ZnVuY3Rpb24gUlooKXt9ZnVuY3Rpb24gS0YoKXt9ZnVuY3Rpb24galooKXt9ZnVuY3Rpb24gJFooKXt9ZnVuY3Rpb24gQkwoKXt9ZnVuY3Rpb24gelooKXt9ZnVuY3Rpb24gV3UoKXt9ZnVuY3Rpb24gTXUoKXt9ZnVuY3Rpb24gcVooKXt9ZnVuY3Rpb24gSFooKXt9ZnVuY3Rpb24gR1ooKXt9ZnVuY3Rpb24geW0oKXt9ZnVuY3Rpb24gZnYoKXt9ZnVuY3Rpb24gdnAoKXt9ZnVuY3Rpb24gcmQoKXt9ZnVuY3Rpb24gSjUoKXt9ZnVuY3Rpb24gWVQoKXt9ZnVuY3Rpb24gVGsoKXt9ZnVuY3Rpb24gWUYoKXt9ZnVuY3Rpb24gVlooKXt9ZnVuY3Rpb24gQ2soKXt9ZnVuY3Rpb24gWEYoKXt9ZnVuY3Rpb24gVVooKXt9ZnVuY3Rpb24gWFQoKXt9ZnVuY3Rpb24gdHgoKXt9ZnVuY3Rpb24gZXgoKXt9ZnVuY3Rpb24gd3AoKXt9ZnVuY3Rpb24gUUYoKXt9ZnVuY3Rpb24gX2soKXt9ZnVuY3Rpb24gWkYoKXt9ZnVuY3Rpb24gSkYoKXt9ZnVuY3Rpb24gbngoKXt9ZnVuY3Rpb24gcWIoKXt9ZnVuY3Rpb24gQzAoKXt9ZnVuY3Rpb24gbXAoKXt9ZnVuY3Rpb24gUzMoKXt9ZnVuY3Rpb24gU2soKXt9ZnVuY3Rpb24gUVQoKXt9ZnVuY3Rpb24gdEIoKXt9ZnVuY3Rpb24gV1ooKXt9ZnVuY3Rpb24gZUIoKXt9ZnVuY3Rpb24gbkIoKXt9ZnVuY3Rpb24gckIoKXt9ZnVuY3Rpb24gQWsoKXt9ZnVuY3Rpb24gaUIoKXt9ZnVuY3Rpb24gc0IoKXt9ZnVuY3Rpb24gS1ooKXt9ZnVuY3Rpb24gTGsoKXt9ZnVuY3Rpb24gTWsoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gUkwoKXt9ZnVuY3Rpb24gWVooKXt9ZnVuY3Rpb24gWFooKXt9ZnVuY3Rpb24gUVooKXt9ZnVuY3Rpb24gWlooKXt9ZnVuY3Rpb24gSlooKXt9ZnVuY3Rpb24gdEooKXt9ZnVuY3Rpb24gZUooKXt9ZnVuY3Rpb24gbkooKXt9ZnVuY3Rpb24gYUIoKXt9ZnVuY3Rpb24gckooKXt9ZnVuY3Rpb24gaUooKXt9ZnVuY3Rpb24gc0ooKXt9ZnVuY3Rpb24gb0IoKXt9ZnVuY3Rpb24gSWsoKXt9ZnVuY3Rpb24gWlQoKXt9ZnVuY3Rpb24gY0IoKXt9ZnVuY3Rpb24gYUooKXt9ZnVuY3Rpb24gdUIoKXt9ZnVuY3Rpb24gbEIoKXt9ZnVuY3Rpb24gb0ooKXt9ZnVuY3Rpb24gSlQoKXt9ZnVuY3Rpb24ga20oKXt9ZnVuY3Rpb24gaEIoKXt9ZnVuY3Rpb24gZkIoKXt9ZnVuY3Rpb24gY0ooKXt9ZnVuY3Rpb24gdUooKXt9ZnVuY3Rpb24gdDkoKXt9ZnVuY3Rpb24gZEIoKXt9ZnVuY3Rpb24gZ0IoKXt9ZnVuY3Rpb24gdWMoKXt9ZnVuY3Rpb24gbEooKXt9ZnVuY3Rpb24gcEIoKXt9ZnVuY3Rpb24gZTkoKXt9ZnVuY3Rpb24gaEooKXt9ZnVuY3Rpb24gZkooKXt9ZnVuY3Rpb24gbjkoKXt9ZnVuY3Rpb24gYkIoKXt9ZnVuY3Rpb24gcjkoKXt9ZnVuY3Rpb24gaTkoKXt9ZnVuY3Rpb24gUmYoKXt9ZnVuY3Rpb24gakwoKXt9ZnVuY3Rpb24gJEwoKXt9ZnVuY3Rpb24gcngoKXt9ZnVuY3Rpb24gZEooKXt9ZnVuY3Rpb24gZ0ooKXt9ZnVuY3Rpb24gcEooKXt9ZnVuY3Rpb24gYkooKXt9ZnVuY3Rpb24gRW0oKXt9ZnVuY3Rpb24gdkIoKXt9ZnVuY3Rpb24gaXgoKXt9ZnVuY3Rpb24gaDEoKXt9ZnVuY3Rpb24gd0IoKXt9ZnVuY3Rpb24gbUIoKXt9ZnVuY3Rpb24geUIoKXt9ZnVuY3Rpb24geEIoKXt9ZnVuY3Rpb24ga0IoKXt9ZnVuY3Rpb24gRUIoKXt9ZnVuY3Rpb24gamYoKXt9ZnVuY3Rpb24gaHUoKXt9ZnVuY3Rpb24gdkooKXt9ZnVuY3Rpb24gd0ooKXt9ZnVuY3Rpb24gbUooKXt9ZnVuY3Rpb24gZnUoKXt9ZnVuY3Rpb24gczkoKXt9ZnVuY3Rpb24gVEIoKXt9ZnVuY3Rpb24gQ0IoKXt9ZnVuY3Rpb24gc3goKXt9ZnVuY3Rpb24geUooKXt9ZnVuY3Rpb24gRGsoKXt9ZnVuY3Rpb24geEooKXt9ZnVuY3Rpb24gX0IoKXt9ZnVuY3Rpb24ga0ooKXt9ZnVuY3Rpb24gRUooKXt9ZnVuY3Rpb24gYTkoKXt9ZnVuY3Rpb24gU0IoKXt9ZnVuY3Rpb24gekwoKXt9ZnVuY3Rpb24gbzkoKXt9ZnVuY3Rpb24gVEooKXt9ZnVuY3Rpb24gQ0ooKXt9ZnVuY3Rpb24gcUwoKXt9ZnVuY3Rpb24gYzkoKXt9ZnVuY3Rpb24gZjEoKXt9ZnVuY3Rpb24gT2soKXt9ZnVuY3Rpb24gX0ooKXt9ZnVuY3Rpb24gTmsoKXt9ZnVuY3Rpb24gSEwoKXt9ZnVuY3Rpb24gSGIoKXt9ZnVuY3Rpb24gdTkoKXt9ZnVuY3Rpb24gR0woKXt9ZnVuY3Rpb24gJGYoKXt9ZnVuY3Rpb24gbDkoKXt9ZnVuY3Rpb24gZDEoKXt9ZnVuY3Rpb24gZzEoKXt9ZnVuY3Rpb24gU0ooKXt9ZnVuY3Rpb24gQUooKXt9ZnVuY3Rpb24gQTMoKXt9ZnVuY3Rpb24gUGsoKXt9ZnVuY3Rpb24gRmsoKXt9ZnVuY3Rpb24gaDkoKXt9ZnVuY3Rpb24gTEooKXt9ZnVuY3Rpb24gYXgoKXt9ZnVuY3Rpb24gVkwoKXt9ZnVuY3Rpb24gQUIoKXt9ZnVuY3Rpb24gTUooKXt9ZnVuY3Rpb24gZjkoKXtJOSgpfWZ1bmN0aW9uIElKKCl7U2l0KCl9ZnVuY3Rpb24gTEIoKXtpXygpfWZ1bmN0aW9uIFVMKCl7S3ooKX1mdW5jdGlvbiBESigpe1A0dCgpfWZ1bmN0aW9uIGQ5KCl7WmYoKX1mdW5jdGlvbiBPSigpe1UzdCgpfWZ1bmN0aW9uIE5KKCl7SkkoKX1mdW5jdGlvbiBQSigpe3dNKCl9ZnVuY3Rpb24gRkooKXt2TSgpfWZ1bmN0aW9uIEJKKCl7R00oKX1mdW5jdGlvbiBNQigpe3lHdCgpfWZ1bmN0aW9uIFJKKCl7WHgoKX1mdW5jdGlvbiBqSigpe0xSKCl9ZnVuY3Rpb24gJEooKXtJSnQoKX1mdW5jdGlvbiBJQigpe0dlZSgpfWZ1bmN0aW9uIHpKKCl7dXRlKCl9ZnVuY3Rpb24gcUooKXtfUXQoKX1mdW5jdGlvbiBnOSgpe0o4KCl9ZnVuY3Rpb24gSEooKXtacCgpfWZ1bmN0aW9uIEdKKCl7VmVlKCl9ZnVuY3Rpb24gVkooKXttWnQoKX1mdW5jdGlvbiBVSigpe0F4dCgpfWZ1bmN0aW9uIFdKKCl7RHNlKCl9ZnVuY3Rpb24gS0ooKXtTUXQoKX1mdW5jdGlvbiBEQigpe1RlKCl9ZnVuY3Rpb24gWUooKXtDUXQoKX1mdW5jdGlvbiBPQigpe1VlZSgpfWZ1bmN0aW9uIFhKKCl7WW5lKCl9ZnVuY3Rpb24gV0woKXtMUXQoKX1mdW5jdGlvbiBRSigpe2d0ZSgpfWZ1bmN0aW9uIE5CKCl7eEd0KCl9ZnVuY3Rpb24gWkooKXtiNXQoKX1mdW5jdGlvbiBQQigpe2F5KCl9ZnVuY3Rpb24gSkooKXttbmUoKX1mdW5jdGlvbiBGQigpe3JEKCl9ZnVuY3Rpb24gQkIoKXtuYXQoKX1mdW5jdGlvbiBSQigpe3VzdCgpfWZ1bmN0aW9uIEtMKCl7aHcoKX1mdW5jdGlvbiBMMygpe2Z5dCgpfWZ1bmN0aW9uIHA5KCl7QVF0KCl9ZnVuY3Rpb24gaWQoKXskdWUoKX1mdW5jdGlvbiBqQigpe2Q1dCgpfWZ1bmN0aW9uIEJrKCl7S3N0KCl9ZnVuY3Rpb24gWUwoKXtPJCgpfWZ1bmN0aW9uIHR0dCgpe2VxKCl9ZnVuY3Rpb24geXAoKXtjaSgpfWZ1bmN0aW9uICRCKCl7YnooKX1mdW5jdGlvbiB6Qigpe3kzdCgpfWZ1bmN0aW9uIHFCKCl7eXEoKX1mdW5jdGlvbiB0aCgpe3BLdCgpfWZ1bmN0aW9uIFhMKCl7aGl0KCl9ZnVuY3Rpb24gSEIoKXt0eHQoKX1mdW5jdGlvbiBSayh0KXtPbih0KX1mdW5jdGlvbiBiOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHQih0KXt0aGlzLmE9dH1mdW5jdGlvbiBveCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkdih0KXt0aGlzLmE9dH1mdW5jdGlvbiAkayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWQih0KXt0aGlzLmE9dH1mdW5jdGlvbiBldHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUUwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTTModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWkwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdjkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHc5KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG05KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGN4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEpMKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHRNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFVCKHQpe3RoaXMuYj10fWZ1bmN0aW9uIGF0dCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBvdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHB0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ayh0KXt0aGlzLmE9dH1mdW5jdGlvbiBraCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBidHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbHgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24geTkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYmcoKXt0aGlzLmE9W119ZnVuY3Rpb24gdnR0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gZXB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gbnB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gcnB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gaXB0KHQsZSl7dC5iPWV9ZnVuY3Rpb24gZU0odCxlKXt0Lmo9ZX1mdW5jdGlvbiBzcHQodCxlKXt0Lmc9ZX1mdW5jdGlvbiBhcHQodCxlKXt0Lmk9ZX1mdW5jdGlvbiB3dHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBwMSh0LGUpe3QuZD1lfWZ1bmN0aW9uIG10dCh0LGUpe3QuZD1lfWZ1bmN0aW9uIG9wdCh0LGUpe3QuYz1lfWZ1bmN0aW9uIF8wKHQsZSl7dC5rPWV9ZnVuY3Rpb24geXR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gV0IodCxlKXt0LmM9ZX1mdW5jdGlvbiBLQih0LGUpe3QuYT1lfWZ1bmN0aW9uIHh0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGNwdCh0LGUpe3QuZj1lfWZ1bmN0aW9uIHVwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGd2KHQsZSl7dC5iPWV9ZnVuY3Rpb24gbk0odCxlKXt0LmQ9ZX1mdW5jdGlvbiB4OSh0LGUpe3QuaT1lfWZ1bmN0aW9uIFlCKHQsZSl7dC5vPWV9ZnVuY3Rpb24gbHB0KHQsZSl7dC5yPWV9ZnVuY3Rpb24gaHB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gWEIodCxlKXt0LmI9ZX1mdW5jdGlvbiBwdih0LGUpe3QuZT1lfWZ1bmN0aW9uIGt0dCh0LGUpe3QuZj1lfWZ1bmN0aW9uIGs5KHQsZSl7dC5nPWV9ZnVuY3Rpb24gaHgodCxlKXt0LmU9ZX1mdW5jdGlvbiBmcHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBHayh0LGUpe3QuZj1lfWZ1bmN0aW9uIEV0dCh0LGUpe3Qubj1lfWZ1bmN0aW9uIHZnKHQsZSl7dC5hPWV9ZnVuY3Rpb24gZHB0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gSTModCxlKXt0LmM9ZX1mdW5jdGlvbiBUdHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBDdHQodCxlKXt0LmQ9ZX1mdW5jdGlvbiBRQih0LGUpe3QuZT1lfWZ1bmN0aW9uIFpCKHQsZSl7dC5nPWV9ZnVuY3Rpb24gX3R0KHQsZSl7dC5hPWV9ZnVuY3Rpb24gVmsodCxlKXt0LmM9ZX1mdW5jdGlvbiBFOSh0LGUpe3QuZD1lfWZ1bmN0aW9uIGdwdCh0LGUpe3QuZT1lfWZ1bmN0aW9uIFN0dCh0LGUpe3QuZj1lfWZ1bmN0aW9uIEF0dCh0LGUpe3Quaj1lfWZ1bmN0aW9uIEx0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIHBwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIHdjKHQsZSl7dC5hPWV9ZnVuY3Rpb24gSkIodCl7dC5iPXQuYX1mdW5jdGlvbiBNdHQodCl7dC5jPXQuZC5kfWZ1bmN0aW9uIGZ4KHQpe3RoaXMuZD10fWZ1bmN0aW9uIHdnKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFRtKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGIxKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEl0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB0Uih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlUih0KXt0aGlzLmE9dH1mdW5jdGlvbiB2MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGcodCl7dGhpcy5hPXR9ZnVuY3Rpb24geCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBUKHQpe3RoaXMuYj10fWZ1bmN0aW9uIEEodCl7dGhpcy5iPXR9ZnVuY3Rpb24gRCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBPKHQpe3RoaXMuYT10fWZ1bmN0aW9uICQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcSh0KXt0aGlzLmM9dH1mdW5jdGlvbiBTKHQpe3RoaXMuYz10fWZ1bmN0aW9uIEcodCl7dGhpcy5jPXR9ZnVuY3Rpb24gVyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBldCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBhdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBBdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBNdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBadCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBLdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBmZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBuZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBwZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBibih0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWZSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBLbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBTbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBXbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBycih0KXt0aGlzLmE9dH1mdW5jdGlvbiB2cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB1cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB0cih0KXt0aGlzLmE9dH1mdW5jdGlvbiB3bih0KXt0aGlzLmE9dH1mdW5jdGlvbiBncih0KXt0aGlzLmE9dH1mdW5jdGlvbiBmcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBKcih0KXt0aGlzLmE9dH1mdW5jdGlvbiB3aSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBLcyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBncyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBVaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHYSh0KXt0aGlzLmU9dH1mdW5jdGlvbiBZcyh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6cyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBRdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBqbih0KXt0aGlzLmE9dH1mdW5jdGlvbiBfcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBpcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBzcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBJYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkcih0KXt0aGlzLmE9dH1mdW5jdGlvbiBLaSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQbyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOYyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtYyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBKYSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2bCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6Zih0KXt0aGlzLmE9dH1mdW5jdGlvbiB4cCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxZih0KXt0aGlzLmE9dH1mdW5jdGlvbiBtZyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBidih0KXt0aGlzLmE9dH1mdW5jdGlvbiBfbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBneCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBPMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBweCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBUOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOMyh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6ZCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDOSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHYih0KXt0aGlzLmE9dH1mdW5jdGlvbiBuUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBEdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE50dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBQdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc00odCl7dGhpcy5hPXR9ZnVuY3Rpb24gXzkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gclIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24ganR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGFNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHNSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFdrKHQpe3RoaXMuYz10fWZ1bmN0aW9uIFRwKHQpe3RoaXMuYj10fWZ1bmN0aW9uICR0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHAkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBiJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHckdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBDJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gXyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFMkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBBJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE0kdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIENwKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIE8kdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBOJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBCJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBIJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFYkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBVJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEskdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBhUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBZJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWCR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHR6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBlenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBvenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHV6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBsenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGZ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBkenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBienQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHd6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBtenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHh6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYnB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEdpKHQpe3RoaXMuYj10fWZ1bmN0aW9uIEV6dCh0KXt0aGlzLmY9dH1mdW5jdGlvbiB2cHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBvTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBEenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3p0KHQpe3RoaXMuYj10fWZ1bmN0aW9uIHdwdCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBvUih0KXt0aGlzLmU9dH1mdW5jdGlvbiBOenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gY1IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24genR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGenQodCl7dGhpcy5kPXR9ZnVuY3Rpb24gbXB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlwdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2dih0KXt0aGlzLmU9dH1mdW5jdGlvbiBLV2UoKXt0aGlzLmE9MH1mdW5jdGlvbiBQMygpe3BVdCh0aGlzKX1mdW5jdGlvbiBsZSgpe1lldCh0aGlzKX1mdW5jdGlvbiBDcigpe1l1KHRoaXMpfWZ1bmN0aW9uIHF0dCgpe21YdCh0aGlzKX1mdW5jdGlvbiBCenQoKXt9ZnVuY3Rpb24gd3YoKXt0aGlzLmM9dEx0fWZ1bmN0aW9uIFlXZSh0LGUpe2UuV2IodCl9ZnVuY3Rpb24gUnp0KHQsZSl7dC5iKz1lfWZ1bmN0aW9uIGp6dCh0KXt0LmI9bmV3IHNldH1mdW5jdGlvbiBydCh0KXtyZXR1cm4gdC5lfWZ1bmN0aW9uIFhXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIFFXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIFpXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIEpXZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIHRLZSh0KXtyZXR1cm4gdC5hfWZ1bmN0aW9uIGVLZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG5LZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHJLZSgpe2FidCgpLGc1bigpfWZ1bmN0aW9uIGlLZSh0KXt0LmIudGYodC5lKX1mdW5jdGlvbiBTOSh0LGUpe3QuYj1lLXQuYn1mdW5jdGlvbiBBOSh0LGUpe3QuYT1lLXQuYX1mdW5jdGlvbiAkenQodCxlKXtlLmFkKHQuYSl9ZnVuY3Rpb24gc0tlKHQsZSl7RnMoZSx0KX1mdW5jdGlvbiBhS2UodCxlLG4pe3QuT2QobixlKX1mdW5jdGlvbiBjTSh0LGUpe3QuZT1lLGUuYj10fWZ1bmN0aW9uIHhwdCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIHp6dCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIHF6dCh0KXtoZCgpLHRoaXMuYT10fWZ1bmN0aW9uIGtwdCh0KXtHbSgpLHRoaXMuYT10fWZ1bmN0aW9uIEh6dCh0KXtUOCgpLGt1dC5iZSh0KX1mdW5jdGlvbiBWYigpe1pVdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEVwdCgpe1pVdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRwdCgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gSHR0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBHenQoKXtWYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVNKCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBJdSgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gTDkoKXtWYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIE9yKCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBlaCgpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gVnp0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBsYygpe1ZiLmNhbGwodGhpcyl9ZnVuY3Rpb24gVXp0KCl7VmIuY2FsbCh0aGlzKX1mdW5jdGlvbiBXenQoKXt0aGlzLmE9dGhpc31mdW5jdGlvbiBsUigpe3RoaXMuQmJ8PTI1Nn1mdW5jdGlvbiBLenQoKXt0aGlzLmI9bmV3IFhWdH1mdW5jdGlvbiBDcHQoKXtDcHQ9WixuZXcgQ3J9ZnVuY3Rpb24gX3B0KCl7VHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gWXp0KHQsZSl7dC5sZW5ndGg9ZX1mdW5jdGlvbiBoUih0LGUpe3VlKHQuYSxlKX1mdW5jdGlvbiBvS2UodCxlKXtCNHQodC5jLGUpfWZ1bmN0aW9uIGNLZSh0LGUpe05zKHQuYixlKX1mdW5jdGlvbiB1S2UodCxlKXtxeih0LmEsZSl9ZnVuY3Rpb24gbEtlKHQsZSl7Rml0KHQuYSxlKX1mdW5jdGlvbiBLayh0LGUpe21pKHQuZSxlKX1mdW5jdGlvbiB2eCh0KXtpcSh0LmMsdC5iKX1mdW5jdGlvbiBoS2UodCxlKXt0LmtjKCkuTmIoZSl9ZnVuY3Rpb24gU3B0KHQpe3RoaXMuYT11bG4odCl9ZnVuY3Rpb24gcXMoKXt0aGlzLmE9bmV3IENyfWZ1bmN0aW9uIFh6dCgpe3RoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gZlIoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIEd0dCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gQXB0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBFaCgpe3RoaXMuYT1uZXcgYXZ9ZnVuY3Rpb24gVWIoKXt0aGlzLmE9bmV3IFNKdH1mdW5jdGlvbiBMcHQoKXt0aGlzLmE9bmV3IEY1fWZ1bmN0aW9uIE1wdCgpe3RoaXMuYT1uZXcgZkd0fWZ1bmN0aW9uIFF6dCgpe3RoaXMuYT1uZXcgdFp0fWZ1bmN0aW9uIElwdCgpe3RoaXMuYT1uZXcgYlF0fWZ1bmN0aW9uIERwdCgpe3RoaXMuYT1uZXcgJFd0fWZ1bmN0aW9uIFp6dCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gT3B0KCl7dGhpcy5hPW5ldyBsZX1mdW5jdGlvbiBKenQoKXt0aGlzLmE9bmV3IGxlfWZ1bmN0aW9uIHRxdCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gZXF0KCl7dGhpcy5kPW5ldyBsZX1mdW5jdGlvbiBucXQoKXt0aGlzLmE9bmV3IHFzfWZ1bmN0aW9uIHJxdCgpe3RoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gaXF0KCl7dGhpcy5iPW5ldyBDcn1mdW5jdGlvbiBzcXQoKXt0aGlzLmI9bmV3IGxlfWZ1bmN0aW9uIE5wdCgpe3RoaXMuZT1uZXcgbGV9ZnVuY3Rpb24gYXF0KCl7dGhpcy5kPW5ldyBsZX1mdW5jdGlvbiBvcXQoKXt0aGlzLmE9bmV3IEhKfWZ1bmN0aW9uIGNxdCgpe2xlLmNhbGwodGhpcyl9ZnVuY3Rpb24gUHB0KCl7ZlIuY2FsbCh0aGlzKX1mdW5jdGlvbiB1cXQoKXt4ai5jYWxsKHRoaXMpfWZ1bmN0aW9uIGxxdCgpe09wdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZ0dCgpe005LmNhbGwodGhpcyl9ZnVuY3Rpb24gTTkoKXtCenQuY2FsbCh0aGlzKX1mdW5jdGlvbiB3eCgpe0J6dC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZwdCgpe3d4LmNhbGwodGhpcyl9ZnVuY3Rpb24gaHF0KCl7V1h0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZnF0KCl7V1h0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZHF0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gZ3F0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gcHF0KCl7SHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gYnF0KCl7R3B0LmNhbGwodGhpcyl9ZnVuY3Rpb24gRHUoKXtRaS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJwdCgpe3ltLmNhbGwodGhpcyl9ZnVuY3Rpb24gUnB0KCl7eW0uY2FsbCh0aGlzKX1mdW5jdGlvbiB2cXQoKXtPcXQuY2FsbCh0aGlzKX1mdW5jdGlvbiB3cXQoKXtPcXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBtcXQoKXtDci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHlxdCgpe0NyLmNhbGwodGhpcyl9ZnVuY3Rpb24geHF0KCl7Q3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBrcXQoKXtxcy5jYWxsKHRoaXMpfWZ1bmN0aW9uIFV0dCgpe3plZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEVxdCgpe2xSLmNhbGwodGhpcyl9ZnVuY3Rpb24gV3R0KCl7ZzJ0LmNhbGwodGhpcyl9ZnVuY3Rpb24gS3R0KCl7ZzJ0LmNhbGwodGhpcyl9ZnVuY3Rpb24ganB0KCl7Q3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBZdHQoKXtDci5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRxdCgpe0NyLmNhbGwodGhpcyl9ZnVuY3Rpb24gJHB0KCl7X2suY2FsbCh0aGlzKX1mdW5jdGlvbiBDcXQoKXtfay5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9xdCgpeyRwdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFNxdCgpe1ZMLmNhbGwodGhpcyl9ZnVuY3Rpb24gQXF0KHQpe2ZlZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTHF0KHQpe2ZlZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24genB0KHQpe1FMLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBxcHQodCl7bkd0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBmS2UodCl7cXB0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBkS2UodCl7bkd0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZaygpe3RoaXMuYT1uZXcgUWl9ZnVuY3Rpb24gSHB0KCl7dGhpcy5hPW5ldyBxc31mdW5jdGlvbiBHcHQoKXt0aGlzLmE9bmV3IENyfWZ1bmN0aW9uIE1xdCgpe3RoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gSXF0KCl7dGhpcy5qPW5ldyBsZX1mdW5jdGlvbiBWcHQoKXt0aGlzLmE9bmV3IFZGfWZ1bmN0aW9uIERxdCgpe3RoaXMuYT1uZXcgU0h0fWZ1bmN0aW9uIE9xdCgpe3RoaXMuYT1uZXcgUUZ9ZnVuY3Rpb24gWHR0KCl7WHR0PVosYnV0PW5ldyBRcXR9ZnVuY3Rpb24gUXR0KCl7UXR0PVoscHV0PW5ldyBYcXR9ZnVuY3Rpb24gSTkoKXtJOT1aLGd1dD1uZXcgTH1mdW5jdGlvbiBkUigpe2RSPVosbXV0PW5ldyBYVXR9ZnVuY3Rpb24gZ0tlKHQpe3FwdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gcEtlKHQpe3FwdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTnF0KHQpe0xydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUHF0KHQpe0xydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRnF0KHQpe2NLdC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gWnR0KHQpe1Awbi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gbXYodCl7TW0uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEQ5KHQpe0NSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBVcHQodCl7Q1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEJxdCh0KXtDUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gR28odCl7a1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBScXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG14KCl7SGsuY2FsbCh0aGlzLHt9KX1mdW5jdGlvbiBnUih0KXt1OCgpLHRoaXMuYT10fWZ1bmN0aW9uIE85KHQpe3QuYj1udWxsLHQuYz0wfWZ1bmN0aW9uIGJLZSh0LGUpe3QuZT1lLGpjZSh0LGUpfWZ1bmN0aW9uIHZLZSh0LGUpe3QuYT1lLHhnbih0KX1mdW5jdGlvbiBKdHQodCxlLG4pe3QuYVtlLmddPW59ZnVuY3Rpb24gd0tlKHQsZSxuKXtCMW4obix0LGUpfWZ1bmN0aW9uIG1LZSh0LGUpe0dRZShlLmksdC5uKX1mdW5jdGlvbiBqcXQodCxlKXtWY24odCkudGQoZSl9ZnVuY3Rpb24geUtlKHQsZSl7cmV0dXJuIHQqdC9lfWZ1bmN0aW9uICRxdCh0LGUpe3JldHVybiB0LmctZS5nfWZ1bmN0aW9uIHhLZSh0KXtyZXR1cm4gbmV3IHk5KHQpfWZ1bmN0aW9uIGtLZSh0KXtyZXR1cm4gbmV3IEhtKHQpfWZ1bmN0aW9uIHBSKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBtbyh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24genF0KHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiB0ZXQodCl7a1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBlZXQodCl7bHl0KCksdGhpcy5hPXR9ZnVuY3Rpb24gcXF0KHQpe2dLdCgpLHRoaXMuYT10fWZ1bmN0aW9uIFNtKHQpe09udCgpLHRoaXMuZj10fWZ1bmN0aW9uIG5ldCh0KXtPbnQoKSx0aGlzLmY9dH1mdW5jdGlvbiBYayh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUG4odCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEZvKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBIcXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHl4KHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBqZSh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBYdCh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBsTSh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBXcHQodCl7cmV0dXJuIE9uKHQpLHR9ZnVuY3Rpb24gRUtlKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIE45KHQpe3JldHVybiB0LmI9PXQuY31mdW5jdGlvbiBBbSh0KXtyZXR1cm4hIXQmJnQuYn1mdW5jdGlvbiBUS2UodCl7cmV0dXJuISF0JiZ0Lmt9ZnVuY3Rpb24gQ0tlKHQpe3JldHVybiEhdCYmdC5qfWZ1bmN0aW9uIHdsKHQpe09uKHQpLHRoaXMuYT10fWZ1bmN0aW9uIEtwdCh0KXtyZXR1cm4gbDIodCksdH1mdW5jdGlvbiBQOSh0KXthd3QodCx0Lmxlbmd0aCl9ZnVuY3Rpb24geWcodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFkKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiByZXQodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEYzKHQpe0dvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBGOSh0KXtHby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRnIodCl7R28uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGlldCh0KXtEMnQuY2FsbCh0aGlzLHQsMCl9ZnVuY3Rpb24gc2V0KCl7JHd0LmNhbGwodGhpcywxMiwzKX1mdW5jdGlvbiBZcHQoKXtZcHQ9WixYOHQ9bmV3IHB0fWZ1bmN0aW9uIEdxdCgpe0dxdD1aLFk4dD1uZXcgX31mdW5jdGlvbiBiUigpe2JSPVosc1M9bmV3IG10fWZ1bmN0aW9uIFZxdCgpe1ZxdD1aLHlnZT1uZXcgZHR9ZnVuY3Rpb24gVXF0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBYcHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIFdxdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gX0tlKCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBTS2UoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIEFLZSgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gYWV0KCl7dGhpcy5hPUJyKEFyKEthKSl9ZnVuY3Rpb24geHgodCl7aGQoKSx0aGlzLmE9QXIodCl9ZnVuY3Rpb24gS3F0KHQsZSl7dC5UZChlKSxlLlNkKHQpfWZ1bmN0aW9uIExLZSh0LGUpe3QuYS5lYygpLk1jKGUpfWZ1bmN0aW9uIE1LZSh0LGUsbil7dC5jLmxmKGUsbil9ZnVuY3Rpb24gUXB0KHQpe21vLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBvZCh0KXtQbi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geGcoKXtkeC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIEI5KCl7ZHguY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBfcCgpe2R4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gTG0oKXtkeC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIFpwdCh0KXttby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUWsodCl7VC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gb2V0KHQpe2ZqLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZcXQodCl7UWsuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFhxdCgpe3c5LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBRcXQoKXt3OS5jYWxsKHRoaXMsbnVsbCl9ZnVuY3Rpb24gdlIoKXt2Uj1aLFQ4KCl9ZnVuY3Rpb24gWnF0KCl7WnF0PVosTWdlPWxkbigpfWZ1bmN0aW9uIEpxdCh0KXtyZXR1cm4gdC5hP3QuYjowfWZ1bmN0aW9uIElLZSh0KXtyZXR1cm4gdC5hP3QuYjowfWZ1bmN0aW9uIERLZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIE9LZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIE5LZSh0LGUpe3JldHVybiB0LmEtZS5hfWZ1bmN0aW9uIHdSKHQsZSl7cmV0dXJuIE1tdCh0LGUpfWZ1bmN0aW9uIG90KHQsZSl7cmV0dXJuIG1RdCh0LGUpfWZ1bmN0aW9uIFBLZSh0LGUpe3JldHVybiBlIGluIHQuYX1mdW5jdGlvbiB0SHQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBGS2UodCxlKXtyZXR1cm4gdC5iPWUsdH1mdW5jdGlvbiBlSHQodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBCS2UodCxlKXtyZXR1cm4gdC5nPWUsdH1mdW5jdGlvbiBKcHQodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiB0YnQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBSS2UodCxlKXtyZXR1cm4gdC5rPWUsdH1mdW5jdGlvbiBlYnQodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBqS2UodCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBuYnQodCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiAkS2UodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiB6S2UodCxlKXt0LmI9ITAsdC5kPWV9ZnVuY3Rpb24gcUtlKHQsZSl7dC5iPW5ldyB5byhlKX1mdW5jdGlvbiBIS2UodCxlLG4pe2UudGQodC5hW25dKX1mdW5jdGlvbiBHS2UodCxlLG4pe2Uud2UodC5hW25dKX1mdW5jdGlvbiBWS2UodCxlKXtyZXR1cm4gdC5iLWUuYn1mdW5jdGlvbiBVS2UodCxlKXtyZXR1cm4gdC5nLWUuZ31mdW5jdGlvbiBXS2UodCxlKXtyZXR1cm4gdC5zLWUuc31mdW5jdGlvbiBLS2UodCxlKXtyZXR1cm4gdD8wOmUtMX1mdW5jdGlvbiBuSHQodCxlKXtyZXR1cm4gdD8wOmUtMX1mdW5jdGlvbiBZS2UodCxlKXtyZXR1cm4gdD9lLTE6MH1mdW5jdGlvbiBYS2UodCxlKXtyZXR1cm4gZS5ZZih0KX1mdW5jdGlvbiB5dih0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIG1SKHQsZSl7cmV0dXJuIHQuYT1lLHR9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBrdih0LGUpe3JldHVybiB0LmQ9ZSx0fWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIHQuZT1lLHR9ZnVuY3Rpb24gcmJ0KHQsZSl7cmV0dXJuIHQuZj1lLHR9ZnVuY3Rpb24gUjkodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBaayh0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIEprKHQsZSl7cmV0dXJuIHQuYz1lLHR9ZnVuY3Rpb24gWmUodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBrbih0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIEplKHQsZSl7cmV0dXJuIHQuZD1lLHR9ZnVuY3Rpb24gdG4odCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBRS2UodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiBlbih0LGUpe3JldHVybiB0Lmc9ZSx0fWZ1bmN0aW9uIG5uKHQsZSl7cmV0dXJuIHQuYT1lLHR9ZnVuY3Rpb24gcm4odCxlKXtyZXR1cm4gdC5pPWUsdH1mdW5jdGlvbiBzbih0LGUpe3JldHVybiB0Lmo9ZSx0fWZ1bmN0aW9uIHJIdCh0LGUpe3JldHVybiB0Lms9ZSx0fWZ1bmN0aW9uIFpLZSh0LGUpe3JldHVybiB0Lmo9ZSx0fWZ1bmN0aW9uIEpLZSh0LGUpe1pwKCksVW8oZSx0KX1mdW5jdGlvbiB0WWUodCxlLG4pe0t0bih0LmEsZSxuKX1mdW5jdGlvbiBpSHQodCl7eFh0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBpYnQodCl7eFh0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB5Uih0KXtibnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHNIdCh0KXt2bG4uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFNwKHQpe0t2LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBhSHQodCl7aXJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBvSHQodCl7aXJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBjSHQoKXt1MnQuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBUYSgpe3RoaXMuYT0wLHRoaXMuYj0wfWZ1bmN0aW9uIHVIdCgpe3RoaXMuYj0wLHRoaXMuYT0wfWZ1bmN0aW9uIGxIdCh0LGUpe3QuYj0wLHR5KHQsZSl9ZnVuY3Rpb24gZVllKHQsZSl7dC5jPWUsdC5iPSEwfWZ1bmN0aW9uIGhIdCh0LGUpe3JldHVybiB0LmMuX2IoZSl9ZnVuY3Rpb24gSGYodCl7cmV0dXJuIHQuZSYmdC5lKCl9ZnVuY3Rpb24gY2V0KHQpe3JldHVybiB0P3QuZDpudWxsfWZ1bmN0aW9uIGZIdCh0LGUpe3JldHVybiBScmUodC5iLGUpfWZ1bmN0aW9uIG5ZZSh0KXtyZXR1cm4gdD90Lmc6bnVsbH1mdW5jdGlvbiByWWUodCl7cmV0dXJuIHQ/dC5pOm51bGx9ZnVuY3Rpb24gQXAodCl7cmV0dXJuIEwwKHQpLHQub31mdW5jdGlvbiBUdigpe1R2PVosQTRlPXgxbigpfWZ1bmN0aW9uIGRIdCgpe2RIdD1aLHRhPU9kbigpfWZ1bmN0aW9uIHQ4KCl7dDg9WixKQXQ9RTFuKCl9ZnVuY3Rpb24gZ0h0KCl7Z0h0PVosZjVlPWsxbigpfWZ1bmN0aW9uIHNidCgpe3NidD1aLHBjPXdnbigpfWZ1bmN0aW9uIGFidCgpe2FidD1aLFRiPXo4KCl9ZnVuY3Rpb24gcEh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBiSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIHZIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gd0h0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBtSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIHlIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24geFIodCl7dGhpcy5hPW5ldyBreCh0KX1mdW5jdGlvbiBvYnQodCl7cGhlKCksUzVuKHRoaXMsdCl9ZnVuY3Rpb24gTHAodCl7dGhpcy5hPW5ldyBCbnQodCl9ZnVuY3Rpb24gQjModCxlKXtmb3IoO3QueWUoZSk7KTt9ZnVuY3Rpb24gY2J0KHQsZSl7Zm9yKDt0LnNkKGUpOyk7fWZ1bmN0aW9uIFIzKHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIHVldCh0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBrZyh0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBDdih0LGUpe3JldHVybiB0LmErPWUsdH1mdW5jdGlvbiBqOSh0KXtyZXR1cm4gJHAodCksdC5hfWZ1bmN0aW9uIGtSKHQpe3JldHVybiB0LmIhPXQuZC5jfWZ1bmN0aW9uIHhIdCh0KXtyZXR1cm4gdC5sfHQubTw8MjJ9ZnVuY3Rpb24gdWJ0KHQsZSl7cmV0dXJuIHQuZFtlLnBdfWZ1bmN0aW9uIGtIdCh0LGUpe3JldHVybiBvdm4odCxlKX1mdW5jdGlvbiBsYnQodCxlLG4pe3Quc3BsaWNlKGUsbil9ZnVuY3Rpb24gRUh0KHQpe3QuYz9hdWUodCk6b3VlKHQpfWZ1bmN0aW9uIEVSKHQpe3RoaXMuYT0wLHRoaXMuYj10fWZ1bmN0aW9uIFRIdCgpe3RoaXMuYT1uZXcgZEQoZl90KX1mdW5jdGlvbiBDSHQoKXt0aGlzLmI9bmV3IGREKFpDdCl9ZnVuY3Rpb24gX0h0KCl7dGhpcy5iPW5ldyBkRCh6aHQpfWZ1bmN0aW9uIFNIdCgpe3RoaXMuYj1uZXcgZEQoemh0KX1mdW5jdGlvbiBBSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIExIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gTUh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBJSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIERIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gT0h0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBOSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIFBIdCgpe3Rocm93IHJ0KG5ldyBPcil9ZnVuY3Rpb24gRkh0KCl7dGhyb3cgcnQobmV3IE9yKX1mdW5jdGlvbiBCSHQoKXt0aHJvdyBydChuZXcgT3IpfWZ1bmN0aW9uIGlZZSgpe3Rocm93IHJ0KG5ldyBsYyl9ZnVuY3Rpb24gc1llKCl7dGhyb3cgcnQobmV3IGxjKX1mdW5jdGlvbiBoTSh0KXt0aGlzLmE9bmV3IFJIdCh0KX1mdW5jdGlvbiBSSHQodCl7Ym9uKHRoaXMsdCxiZG4oKSl9ZnVuY3Rpb24gZk0odCl7cmV0dXJuIXR8fHNYdCh0KX1mdW5jdGlvbiBkTSh0KXtyZXR1cm4gVTFbdF0hPS0xfWZ1bmN0aW9uIGFZZSgpe3pIIT0wJiYoekg9MCkscUg9LTF9ZnVuY3Rpb24gakh0KCl7ZHV0PT1udWxsJiYoZHV0PVtdKX1mdW5jdGlvbiBvWWUodCxlKXtIc3QoV3QodC5hKSxlKX1mdW5jdGlvbiBjWWUodCxlKXtIc3QoV3QodC5hKSxlKX1mdW5jdGlvbiBnTSh0LGUpe1czLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGU4KHQsZSl7Z00uY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gaGJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gJEh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gekh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcUh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSEh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gR0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gVkh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gVUh0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gV0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gS0h0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gWUh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWEh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gUUh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWkh0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gR3IodCxlKXt0aGlzLmY9dCx0aGlzLmc9ZX1mdW5jdGlvbiBuOCh0LGUpe3RoaXMuZT10LHRoaXMuZD1lfWZ1bmN0aW9uIF92KHQsZSl7dGhpcy5nPXQsdGhpcy5pPWV9ZnVuY3Rpb24gaGV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSkh0KHQsZSl7dGhpcy5hPXQsdGhpcy5mPWV9ZnVuY3Rpb24gdEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gdVllKHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZmV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbkd0KHQpe3gydCh0LmRjKCkpLHRoaXMuYz10fWZ1bmN0aW9uIFRSKHQpe3RoaXMuYj11KEFyKHQpLDgzKX1mdW5jdGlvbiByR3QodCl7dGhpcy5hPXUoQXIodCksODMpfWZ1bmN0aW9uIE1tKHQpe3RoaXMuYT11KEFyKHQpLDE1KX1mdW5jdGlvbiBpR3QodCl7dGhpcy5hPXUoQXIodCksMTUpfWZ1bmN0aW9uIENSKHQpe3RoaXMuYj11KEFyKHQpLDQ3KX1mdW5jdGlvbiBfUigpe3RoaXMucT1uZXcgYi5EYXRlfWZ1bmN0aW9uIHFkKCl7cWQ9WixoRXQ9bmV3IFR0fWZ1bmN0aW9uIHI4KCl7cjg9WixaRT1uZXcgTnR9ZnVuY3Rpb24gJDkodCl7cmV0dXJuIHQuZi5jK3QuZy5jfWZ1bmN0aW9uIHBNKHQsZSl7cmV0dXJuIHQuYi5IYyhlKX1mdW5jdGlvbiBzR3QodCxlKXtyZXR1cm4gdC5iLkljKGUpfWZ1bmN0aW9uIGFHdCh0LGUpe3JldHVybiB0LmIuUWMoZSl9ZnVuY3Rpb24gb0d0KHQsZSl7cmV0dXJuIHQuYi5IYyhlKX1mdW5jdGlvbiBjR3QodCxlKXtyZXR1cm4gdC5jLnVjKGUpfWZ1bmN0aW9uIFMwKHQsZSl7cmV0dXJuIHQuYS5fYihlKX1mdW5jdGlvbiB1R3QodCxlKXtyZXR1cm4geWkodC5jLGUpfWZ1bmN0aW9uIGxHdCh0LGUpe3JldHVybiBrbCh0LmIsZSl9ZnVuY3Rpb24gaEd0KHQsZSl7cmV0dXJuIHQ+ZSYmZTxBX31mdW5jdGlvbiBsWWUodCxlKXtyZXR1cm4gdC5HYyhlKSx0fWZ1bmN0aW9uIGhZZSh0LGUpe3JldHVybiBVYSh0LGUpLHR9ZnVuY3Rpb24gZlllKHQpe3JldHVybiB0WHQoKSx0P21nZTp3Z2V9ZnVuY3Rpb24ga3godCl7WG5lLmNhbGwodGhpcyx0LDApfWZ1bmN0aW9uIGZHdCgpe0JudC5jYWxsKHRoaXMsbnVsbCl9ZnVuY3Rpb24gZmJ0KCl7anJ0LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBFeCh0KXt0aGlzLmM9dCxWdGUodGhpcyl9ZnVuY3Rpb24gUWkoKXtFVXQodGhpcyksX2godGhpcyl9ZnVuY3Rpb24gdXModCxlKXskcCh0KSx0LmEuTmIoZSl9ZnVuY3Rpb24gZEd0KHQsZSl7cmV0dXJuIHQuR2MoZSksdH1mdW5jdGlvbiBkWWUodCxlKXtyZXR1cm4gdC5hLmY9ZSx0fWZ1bmN0aW9uIGdHdCh0LGUpe3JldHVybiB0LmEuZD1lLHR9ZnVuY3Rpb24gcEd0KHQsZSl7cmV0dXJuIHQuYS5nPWUsdH1mdW5jdGlvbiBiR3QodCxlKXtyZXR1cm4gdC5hLmo9ZSx0fWZ1bmN0aW9uIHNmKHQsZSl7cmV0dXJuIHQuYS5hPWUsdH1mdW5jdGlvbiBhZih0LGUpe3JldHVybiB0LmEuZD1lLHR9ZnVuY3Rpb24gb2YodCxlKXtyZXR1cm4gdC5hLmU9ZSx0fWZ1bmN0aW9uIGNmKHQsZSl7cmV0dXJuIHQuYS5nPWUsdH1mdW5jdGlvbiBiTSh0LGUpe3JldHVybiB0LmEuZj1lLHR9ZnVuY3Rpb24gZ1llKHQpe3JldHVybiB0LmI9ITEsdH1mdW5jdGlvbiBpOCgpe2k4PVosRUV0PW5ldyBRVnR9ZnVuY3Rpb24gU1IoKXtTUj1aLERnZT1uZXcgWlZ0fWZ1bmN0aW9uIHM4KCl7czg9WixMRXQ9bmV3IE9lfWZ1bmN0aW9uIHZHdCgpe3ZHdD1aLERiZT1uZXcgcG19ZnVuY3Rpb24gQVIoKXtBUj1aLFJ1dD1uZXcgdVd0fWZ1bmN0aW9uIFdiKCl7V2I9WixKRT1uZXcgZ259ZnVuY3Rpb24gejkoKXt6OT1aLE5iZT1uZXcgbUx9ZnVuY3Rpb24gd0d0KCl7d0d0PVoscWdlPW5ldyBOb31mdW5jdGlvbiBkYnQoKXtkYnQ9Wix4YmU9bmV3IHV2fWZ1bmN0aW9uIHZNKCl7dk09WixCYmU9bmV3IFRhfWZ1bmN0aW9uIG1HdCgpe21HdD1aLGtiZT1uZXcgd0x9ZnVuY3Rpb24gZ2J0KCl7Z2J0PVosRWJlPW5ldyBnWXR9ZnVuY3Rpb24gcGJ0KCl7cGJ0PVosXzd0PW5ldyBnbX1mdW5jdGlvbiB3TSgpe3dNPVosUmJlPW5ldyBPVH1mdW5jdGlvbiB5R3QoKXt5R3Q9WixxYmU9bmV3IGx2fWZ1bmN0aW9uIHE5KCl7cTk9WixLYmU9bmV3IFNYfWZ1bmN0aW9uIExSKCl7TFI9Wix6ND1uZXcgUlh9ZnVuY3Rpb24geEd0KCl7eEd0PVosYnllPW5ldyBIc31mdW5jdGlvbiBNUigpe01SPVoscWh0PW5ldyBFR3R9ZnVuY3Rpb24gSVIoKXtJUj1aLEhodD1uZXcgRVd0fWZ1bmN0aW9uIEg5KCl7SDk9WixqTz1uZXcgZFh0fWZ1bmN0aW9uIERSKCl7RFI9WixSd2U9bmV3ICRafWZ1bmN0aW9uIGtHdCgpe0hlZSgpLHRoaXMuYz1uZXcgc2V0fWZ1bmN0aW9uIEVHdCgpe0dyLmNhbGwodGhpcyxoMWUsMCl9ZnVuY3Rpb24gU3YodCxlKXtwMih0LmMuYixlLmMsZSl9ZnVuY3Rpb24gRzkodCxlKXtwMih0LmMuYyxlLmIsZSl9ZnVuY3Rpb24gcFllKHQsZSxuKXt4byh0LmQsZS5mLG4pfWZ1bmN0aW9uIGJZZSh0LGUsbixyKXtVaG4odCxyLGUsbil9ZnVuY3Rpb24gdlllKHQsZSxuLHIpe2cybihyLHQsZSxuKX1mdW5jdGlvbiB3WWUodCxlLG4scil7STRuKHIsdCxlLG4pfWZ1bmN0aW9uIE9SKHQsZSl7cmV0dXJuIHQuYT1lLmcsdH1mdW5jdGlvbiBUR3QodCxlKXtyZXR1cm4gZTFuKHQuYSxlKX1mdW5jdGlvbiBtWWUodCl7cmV0dXJuIHQuYj90LmI6dC5hfWZ1bmN0aW9uIHlZZSh0KXtyZXR1cm4odC5jK3QuYSkvMn1mdW5jdGlvbiBJbSgpe0ltPVosXzRlPW5ldyBHWn1mdW5jdGlvbiBDR3QoKXtDR3Q9WixONGU9bmV3IFZafWZ1bmN0aW9uIF9HdCgpe19HdD1aLFc0ZT1uZXcgeXF0fWZ1bmN0aW9uIFNHdCgpe1NHdD1aLEs0ZT1uZXcgeHF0fWZ1bmN0aW9uIE1wKCl7TXA9WixVaD1uZXcganB0fWZ1bmN0aW9uIGJidCgpe2JidD1aLFpBdD1uZXcgVHF0fWZ1bmN0aW9uIFY5KCl7Vjk9WixTZnQ9bmV3IExVdH1mdW5jdGlvbiBFZygpe0VnPVosaE49bmV3IE1VdH1mdW5jdGlvbiBkZXQoKXtkZXQ9WixjNWU9bmV3IHBKfWZ1bmN0aW9uIHRvKCl7dG89WixsNWU9bmV3IGJKfWZ1bmN0aW9uIE5SKCl7TlI9WixuVT1uZXcgQ3J9ZnVuY3Rpb24gdmJ0KCl7dmJ0PVosdUx0PW5ldyBsZX1mdW5jdGlvbiBJcCgpe0lwPVosQWI9bmV3IE1KfWZ1bmN0aW9uIHhZZSh0KXtiLmNsZWFyVGltZW91dCh0KX1mdW5jdGlvbiB3YnQodCl7dGhpcy5hPXUoQXIodCksMjI0KX1mdW5jdGlvbiBQUih0KXtyZXR1cm4gdSh0LDQyKS5jZCgpfWZ1bmN0aW9uIG1NKHQpe3JldHVybiB0LmI8dC5kLmdjKCl9ZnVuY3Rpb24gQUd0KHQsZSl7cmV0dXJuIE1udCh0LmEsZSl9ZnVuY3Rpb24gTEd0KHQsZSl7cmV0dXJuIHljKHQsZSk+MH1mdW5jdGlvbiBnZXQodCxlKXtyZXR1cm4geWModCxlKTwwfWZ1bmN0aW9uIFU5KHQsZSl7cmV0dXJuIHQuYS5nZXQoZSl9ZnVuY3Rpb24ga1llKHQsZSl7cmV0dXJuIGUuc3BsaXQodCl9ZnVuY3Rpb24gTUd0KHQsZSl7cmV0dXJuIGtsKHQuZSxlKX1mdW5jdGlvbiBtYnQodCl7cmV0dXJuIE9uKHQpLCExfWZ1bmN0aW9uIEZSKHQpe19uLmNhbGwodGhpcyx0LDIxKX1mdW5jdGlvbiBFWWUodCxlKXtvUXQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQlIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBwZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB5YnQodCl7WG50KCksY0t0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB4YnQodCxlKXtoWXQodCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiB5TSh0LGUpeyRZdCh0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIFRZZSh0LGUsbil7ZS51ZCh0LmEuR2UobikpfWZ1bmN0aW9uIENZZSh0LGUsbil7ZS53ZSh0LmEuRmUobikpfWZ1bmN0aW9uIF9ZZSh0LGUsbil7ZS50ZCh0LmEuS2IobikpfWZ1bmN0aW9uIFNZZSh0LGUsbil7dC5NYihuKSYmZS50ZChuKX1mdW5jdGlvbiBXOSh0LGUsbil7dC5zcGxpY2UoZSwwLG4pfWZ1bmN0aW9uIEFZZSh0LGUpe3JldHVybiBOdSh0LmUsZSl9ZnVuY3Rpb24gUlIodCxlKXt0aGlzLmQ9dCx0aGlzLmU9ZX1mdW5jdGlvbiBJR3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBER3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBrYnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBPR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBOR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBQR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBGR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBUeCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEVidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFRidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGpSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gJFIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBDYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqMyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGJldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHZldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gU2J0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geE0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBxUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHlldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEs5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gd3ModCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBIUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uICRHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHFHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEdHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFZHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIExidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFVHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFdHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEtHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGE4KHQsZSl7dGhpcy5jPXQsdGhpcy5kPWV9ZnVuY3Rpb24gWUd0KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWV9ZnVuY3Rpb24gWEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUUd0KHQsZSl7dGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gR1IodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFk5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24ga2V0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRU0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBYOSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERidCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFE5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWjkodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEbSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF9ldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9idCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEo5KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVlIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBUTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIENNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQ3godCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBMZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBOYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBNZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBPZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBOZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBaR3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBKR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB0VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBlVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBuVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBCYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiByVnQodCxlKXt0aGlzLmI9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBqYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkYnQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBzVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBVUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHRDKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gemJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSGJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRmV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gR2J0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQmV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gV1IodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICRldCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFZidCh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVWJ0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTFllKHQsZSl7cmV0dXJuIE51KHQuYyxlKX1mdW5jdGlvbiBNWWUodCxlKXtyZXR1cm4gTnUoZS5iLHQpfWZ1bmN0aW9uIElZZSh0LGUpe3JldHVybi10LmIuSmUoZSl9ZnVuY3Rpb24gV2J0KHQsZSl7cmV0dXJuIE51KHQuZyxlKX1mdW5jdGlvbiBBTSh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF94KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gYVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gb1Z0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gJGUodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBlQyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG5DKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTE0odCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB6ZXQodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBLUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHJDKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcWV0KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWVIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiAkMyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE1NKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gaUModCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBzQyh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElNKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWFIodCxlKXtHci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB6Myh0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFFSKHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gY1Z0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gdVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZlZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbGEodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBaUih0LGUpe0dyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGdWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHBWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGJWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHZWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHdWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG1WdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHlWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIHhWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGtWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEVWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFRWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIENWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIERZZSh0LGUpe2Mybih0LmEsdShlLDU2KSl9ZnVuY3Rpb24gX1Z0KHQsZSl7eWFuKHQuYSx1KGUsMTEpKX1mdW5jdGlvbiBPWWUodCxlKXtyZXR1cm4gZzgoKSxlIT10fWZ1bmN0aW9uIFNWdCgpe3JldHVybiBacXQoKSxuZXcgTWdlfWZ1bmN0aW9uIEFWdCgpe3BydCgpLHRoaXMuYj1uZXcgcXN9ZnVuY3Rpb24gTFZ0KCl7aHEoKSx0aGlzLmE9bmV3IHFzfWZ1bmN0aW9uIE1WdCgpe2p3dCgpLEt2dC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFN4KHQsZSl7R3IuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSVZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRFZ0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSlIodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBPVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBOVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBQVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBGVnQodCxlKXt0aGlzLmQ9dCx0aGlzLmI9ZX1mdW5jdGlvbiBLYnQodCxlKXt0aGlzLmQ9dCx0aGlzLmU9ZX1mdW5jdGlvbiBCVnQodCxlKXt0aGlzLmY9dCx0aGlzLmM9ZX1mdW5jdGlvbiBETSh0LGUpe3RoaXMuYj10LHRoaXMuYz1lfWZ1bmN0aW9uIFlidCh0LGUpe3RoaXMuaT10LHRoaXMuZz1lfWZ1bmN0aW9uIFJWdCh0LGUpe3RoaXMuZT10LHRoaXMuYT1lfWZ1bmN0aW9uIGpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFhidCh0LGUpe3QuaT1udWxsLGV6KHQsZSl9ZnVuY3Rpb24gTlllKHQsZSl7dCYma2koY04sdCxlKX1mdW5jdGlvbiAkVnQodCxlKXtyZXR1cm4gV2l0KHQuYSxlKX1mdW5jdGlvbiB0aih0KXtyZXR1cm4gVkkodC5jLHQuYil9ZnVuY3Rpb24gZWModCl7cmV0dXJuIHQ/dC5kZCgpOm51bGx9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIHQ/P251bGx9ZnVuY3Rpb24gT20odCl7cmV0dXJuIHR5cGVvZiB0PT09dTZ9ZnVuY3Rpb24gTm0odCl7cmV0dXJuIHR5cGVvZiB0PT09THh0fWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0eXBlb2YgdD09PU9hdH1mdW5jdGlvbiBEcCh0LGUpe3JldHVybiB0LkhkKCkuWGIoZSl9ZnVuY3Rpb24gZWoodCxlKXtyZXR1cm4gWG9uKHQuS2MoKSxlKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiB5Yyh0LGUpPT0wfWZ1bmN0aW9uIFBZZSh0LGUpe3JldHVybiB5Yyh0LGUpPj0wfWZ1bmN0aW9uIGFDKHQsZSl7cmV0dXJuIHljKHQsZSkhPTB9ZnVuY3Rpb24gRlllKHQpe3JldHVybiIiKyhPbih0KSx0KX1mdW5jdGlvbiBPTSh0LGUpe3JldHVybiB0LnN1YnN0cihlKX1mdW5jdGlvbiB6VnQodCl7cmV0dXJuIGFsKHQpLHQuZC5nYygpfWZ1bmN0aW9uIEhldCh0KXtyZXR1cm4gRHBuKHQsdC5jKSx0fWZ1bmN0aW9uIG5qKHQpe3JldHVybiBtQyh0PT1udWxsKSx0fWZ1bmN0aW9uIG9DKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGZvKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGNDKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIGhjKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIFZyKHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIFFidCh0LGUpe3JldHVybiB0LmErPSIiK2UsdH1mdW5jdGlvbiBxVnQodCxlKXtocyh0LGUsdC5hLHQuYS5hKX1mdW5jdGlvbiBLYih0LGUpe2hzKHQsZSx0LmMuYix0LmMpfWZ1bmN0aW9uIEJZZSh0LGUsbil7UXNlKGUsRnN0KHQsbikpfWZ1bmN0aW9uIFJZZSh0LGUsbil7UXNlKGUsRnN0KHQsbikpfWZ1bmN0aW9uIGpZZSh0LGUpe0lhbihuZXcgZXIodCksZSl9ZnVuY3Rpb24gSFZ0KHQsZSl7dC5xLnNldFRpbWUoVnYoZSkpfWZ1bmN0aW9uIEdWdCh0LGUpe3J3dC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBWVnQodCxlKXtyd3QuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gR2V0KHQsZSl7cnd0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFVWdCh0KXtZdSh0aGlzKSxWQyh0aGlzLHQpfWZ1bmN0aW9uIFpidCh0KXtyZXR1cm4gQW4odCwwKSxudWxsfWZ1bmN0aW9uIEdmKHQpe3JldHVybiB0LmE9MCx0LmI9MCx0fWZ1bmN0aW9uIFdWdCh0LGUpe3JldHVybiB0LmE9ZS5nKzEsdH1mdW5jdGlvbiAkWWUodCxlKXtyZXR1cm4gdC5qW2UucF09PTJ9ZnVuY3Rpb24gSmJ0KHQpe3JldHVybiBrZW4odSh0LDc5KSl9ZnVuY3Rpb24gS1Z0KCl7S1Z0PVosVHBlPVdyKEppdCgpKX1mdW5jdGlvbiBZVnQoKXtZVnQ9Wix6YmU9V3IoSWNlKCkpfWZ1bmN0aW9uIFhWdCgpe3RoaXMuYj1uZXcga3goUW0oMTIpKX1mdW5jdGlvbiBRVnQoKXt0aGlzLmI9MCx0aGlzLmE9ITF9ZnVuY3Rpb24gWlZ0KCl7dGhpcy5iPTAsdGhpcy5hPSExfWZ1bmN0aW9uIHVDKHQpe3RoaXMuYT10LGY5LmNhbGwodGhpcyl9ZnVuY3Rpb24gSlZ0KHQpe3RoaXMuYT10LGY5LmNhbGwodGhpcyl9ZnVuY3Rpb24gbW4odCxlKXtPcy5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBWZXQodCxlKXtqbS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBxMyh0LGUpe1lidC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBVZXQodCxlKXtVOC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB0VXQodCxlKXtOTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiByaSh0LGUpe05SKCksa2koblUsdCxlKX1mdW5jdGlvbiBXZXQodCxlKXtyZXR1cm4gRGwodC5hLDAsZSl9ZnVuY3Rpb24gZVV0KHQsZSl7cmV0dXJuIHQuYS5hLmEuY2MoZSl9ZnVuY3Rpb24gblV0KHQsZSl7cmV0dXJuIEd0KHQpPT09R3QoZSl9ZnVuY3Rpb24gelllKHQsZSl7cmV0dXJuIExzKHQuYSxlLmEpfWZ1bmN0aW9uIHFZZSh0LGUpe3JldHVybiBkdSh0LmEsZS5hKX1mdW5jdGlvbiBIWWUodCxlKXtyZXR1cm4gQll0KHQuYSxlLmEpfWZ1bmN0aW9uIGNkKHQsZSl7cmV0dXJuIHQuaW5kZXhPZihlKX1mdW5jdGlvbiBMdih0LGUpe3JldHVybiB0PT1lPzA6dD8xOi0xfWZ1bmN0aW9uIHJqKHQpe3JldHVybiB0PDEwPyIwIit0OiIiK3R9ZnVuY3Rpb24gR1llKHQpe3JldHVybiBBcih0KSxuZXcgdUModCl9ZnVuY3Rpb24gclV0KHQpe3JldHVybiBydSh0LmwsdC5tLHQuaCl9ZnVuY3Rpb24gbzgodCl7cmV0dXJuIHBzKChPbih0KSx0KSl9ZnVuY3Rpb24gVlllKHQpe3JldHVybiBwcygoT24odCksdCkpfWZ1bmN0aW9uIGlVdCh0LGUpe3JldHVybiBkdSh0LmcsZS5nKX1mdW5jdGlvbiBCbyh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1MeHR9ZnVuY3Rpb24gVVllKHQpe3JldHVybiB0PT1fd3x8dD09RHl9ZnVuY3Rpb24gV1llKHQpe3JldHVybiB0PT1fd3x8dD09SXl9ZnVuY3Rpb24gdDJ0KHQpe3JldHVybiBSbyh0LmIuYix0LDApfWZ1bmN0aW9uIHNVdCh0KXt0aGlzLmE9U1Z0KCksdGhpcy5iPXR9ZnVuY3Rpb24gYVV0KHQpe3RoaXMuYT1TVnQoKSx0aGlzLmI9dH1mdW5jdGlvbiBLWWUodCxlKXtyZXR1cm4gdWUodC5hLGUpLGV9ZnVuY3Rpb24gWVllKHQsZSl7cmV0dXJuIHVlKHQuYyxlKSx0fWZ1bmN0aW9uIG9VdCh0LGUpe3JldHVybiBSbCh0LmEsZSksdH1mdW5jdGlvbiBYWWUodCxlKXtyZXR1cm4gbGYoKSxlLmErPXR9ZnVuY3Rpb24gUVllKHQsZSl7cmV0dXJuIGxmKCksZS5hKz10fWZ1bmN0aW9uIFpZZSh0LGUpe3JldHVybiBsZigpLGUuYys9dH1mdW5jdGlvbiBlMnQodCxlKXtEOCh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gQTAoKXtrdC5jYWxsKHRoaXMsbmV3IG4yKX1mdW5jdGlvbiBjVXQoKXtGai5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24gQXgoKXtpaC5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24geW8odCl7dGhpcy5hPXQuYSx0aGlzLmI9dC5ifWZ1bmN0aW9uIE9wKHQpe3JldHVybiB0PT1qaHx8dD09a2Z9ZnVuY3Rpb24gYzgodCl7cmV0dXJuIHQ9PVowfHx0PT1RMH1mdW5jdGlvbiB1VXQodCl7cmV0dXJuIHQ9PXQ1fHx0PT1KNH1mdW5jdGlvbiBIMyh0KXtyZXR1cm4gdCE9SDEmJnQhPXlifWZ1bmN0aW9uIG1sKHQpe3JldHVybiB0LkxnKCkmJnQuTWcoKX1mdW5jdGlvbiBsVXQodCl7cmV0dXJuIFpqKHUodCwxMTgpKX1mdW5jdGlvbiBpaih0KXtyZXR1cm4gUmwobmV3IEhzLHQpfWZ1bmN0aW9uIGhVdCh0LGUpe3JldHVybiBuZXcgVTgoZSx0KX1mdW5jdGlvbiBKWWUodCxlKXtyZXR1cm4gbmV3IFU4KGUsdCl9ZnVuY3Rpb24gbjJ0KHQsZSxuKXtXJCh0LGUpLEskKHQsbil9ZnVuY3Rpb24gc2oodCxlLG4pe1F2KHQsZSksWHYodCxuKX1mdW5jdGlvbiBtMSh0LGUsbil7eXUodCxlKSx4dSh0LG4pfWZ1bmN0aW9uIGFqKHQsZSxuKXtGOCh0LGUpLFI4KHQsbil9ZnVuY3Rpb24gb2oodCxlLG4pe0I4KHQsZSksajgodCxuKX1mdW5jdGlvbiBLZXQodCxlKXtaOCh0LGUpLCQ4KHQsdC5EKX1mdW5jdGlvbiByMnQodCl7QlZ0LmNhbGwodGhpcyx0LCEwKX1mdW5jdGlvbiBmVXQodCxlLG4pe1UydC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIE5wKHQpe0pwKCksdGNuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBkVXQoKXtCUi5jYWxsKHRoaXMsIkhlYWQiLDEpfWZ1bmN0aW9uIGdVdCgpe0JSLmNhbGwodGhpcywiVGFpbCIsMyl9ZnVuY3Rpb24gWWV0KHQpe3QuYz1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiBwVXQodCl7dC5hPVB0KFhuLEllLDEsOCw1LDEpfWZ1bmN0aW9uIGJVdCh0KXttdSh0LnhmKCksbmV3IHVyKHQpKX1mdW5jdGlvbiBHMyh0KXtyZXR1cm4gdCE9bnVsbD9IaSh0KTowfWZ1bmN0aW9uIHRYZSh0LGUpe3JldHVybiBabShlLGsxKHQpKX1mdW5jdGlvbiBlWGUodCxlKXtyZXR1cm4gWm0oZSxrMSh0KSl9ZnVuY3Rpb24gblhlKHQsZSl7cmV0dXJuIHRbdC5sZW5ndGhdPWV9ZnVuY3Rpb24gclhlKHQsZSl7cmV0dXJuIHRbdC5sZW5ndGhdPWV9ZnVuY3Rpb24gaTJ0KHQpe3JldHVybiBudG4odC5iLktjKCksdC5hKX1mdW5jdGlvbiBpWGUodCxlKXtyZXR1cm4gdHooS250KHQuZCksZSl9ZnVuY3Rpb24gc1hlKHQsZSl7cmV0dXJuIHR6KEtudCh0LmcpLGUpfWZ1bmN0aW9uIGFYZSh0LGUpe3JldHVybiB0eihLbnQodC5qKSxlKX1mdW5jdGlvbiBlbyh0LGUpe09zLmNhbGwodGhpcyx0LmIsZSl9ZnVuY3Rpb24gTXYodCl7RmouY2FsbCh0aGlzLHQsdCx0LHQpfWZ1bmN0aW9uIHMydCh0KXtyZXR1cm4gdC5iJiZiYXQodCksdC5hfWZ1bmN0aW9uIGEydCh0KXtyZXR1cm4gdC5iJiZiYXQodCksdC5jfWZ1bmN0aW9uIG9YZSh0LGUpe1IxfHwodC5iPWUpfWZ1bmN0aW9uIFhldCh0LGUsbil7cmV0dXJuIEppKHQsZSxuKSxufWZ1bmN0aW9uIHZVdCh0LGUsbil7SmkodC5jW2UuZ10sZS5nLG4pfWZ1bmN0aW9uIGNYZSh0LGUsbil7dSh0LmMsNjkpLlhoKGUsbil9ZnVuY3Rpb24gdVhlKHQsZSxuKXttMShuLG4uaSt0LG4uaitlKX1mdW5jdGlvbiBsWGUodCxlKXtNcihMYyh0LmEpLElRdChlKSl9ZnVuY3Rpb24gaFhlKHQsZSl7TXIoaWwodC5hKSxEUXQoZSkpfWZ1bmN0aW9uIGxDKHQpe2dpKCksdnYuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZYZSh0KXtyZXR1cm4gdD09bnVsbD8wOkhpKHQpfWZ1bmN0aW9uIHdVdCgpe3dVdD1aLHlodD1uZXcgZV8ocGZ0KX1mdW5jdGlvbiBOcigpe05yPVosbmV3IG1VdCxuZXcgbGV9ZnVuY3Rpb24gbVV0KCl7bmV3IENyLG5ldyBDcixuZXcgQ3J9ZnVuY3Rpb24gbzJ0KCl7bzJ0PVosQ3B0KCksUTh0PW5ldyBDcn1mdW5jdGlvbiB5MSgpe3kxPVosYi5NYXRoLmxvZygyKX1mdW5jdGlvbiBuaCgpe25oPVosZjA9KENHdCgpLE40ZSl9ZnVuY3Rpb24gZFhlKCl7dGhyb3cgcnQobmV3IHlnKHNnZSkpfWZ1bmN0aW9uIGdYZSgpe3Rocm93IHJ0KG5ldyB5ZyhzZ2UpKX1mdW5jdGlvbiBwWGUoKXt0aHJvdyBydChuZXcgeWcoYWdlKSl9ZnVuY3Rpb24gYlhlKCl7dGhyb3cgcnQobmV3IHlnKGFnZSkpfWZ1bmN0aW9uIHlVdCh0KXt0aGlzLmE9dCxDdnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFFldCh0KXt0aGlzLmE9dCxUUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gWmV0KHQpe3RoaXMuYT10LFRSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBYcyh0LGUpe0xudCh0LmMsdC5jLmxlbmd0aCxlKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gdC5hPHQuYy5jLmxlbmd0aH1mdW5jdGlvbiBjMnQodCl7cmV0dXJuIHQuYTx0LmMuYS5sZW5ndGh9ZnVuY3Rpb24geFV0KHQsZSl7cmV0dXJuIHQuYT90LmI6ZS5EZSgpfWZ1bmN0aW9uIGR1KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIGtVdCh0LGUpe3JldHVybiB5Yyh0LGUpPjA/dDplfWZ1bmN0aW9uIHJ1KHQsZSxuKXtyZXR1cm57bDp0LG06ZSxoOm59fWZ1bmN0aW9uIHZYZSh0LGUpe3QuYSE9bnVsbCYmX1Z0KGUsdC5hKX1mdW5jdGlvbiBFVXQodCl7dC5hPW5ldyBIdCx0LmM9bmV3IEh0fWZ1bmN0aW9uIGNqKHQpe3RoaXMuYj10LHRoaXMuYT1uZXcgbGV9ZnVuY3Rpb24gVFV0KHQpe3RoaXMuYj1uZXcgQ2UsdGhpcy5hPXR9ZnVuY3Rpb24gdTJ0KHQpe2V2dC5jYWxsKHRoaXMpLHRoaXMuYT10fWZ1bmN0aW9uIENVdCgpe0JSLmNhbGwodGhpcywiUmFuZ2UiLDIpfWZ1bmN0aW9uIF9VdCgpe3I0dCgpLHRoaXMuYT1uZXcgZEQoQzd0KX1mdW5jdGlvbiB3WGUodCxlKXtBcihlKSxZMyh0KS5KYyhuZXcgc3QpfWZ1bmN0aW9uIG1YZSh0LGUpe3JldHVybiBPbCgpLGUubi5iKz10fWZ1bmN0aW9uIHlYZSh0LGUsbil7cmV0dXJuIGtpKHQuZyxuLGUpfWZ1bmN0aW9uIHhYZSh0LGUsbil7cmV0dXJuIGtpKHQuayxuLGUpfWZ1bmN0aW9uIGtYZSh0LGUpe3JldHVybiBraSh0LmEsZS5hLGUpfWZ1bmN0aW9uIFYzKHQsZSxuKXtyZXR1cm4gRTN0KGUsbix0LmMpfWZ1bmN0aW9uIGwydCh0KXtyZXR1cm4gbmV3ICRlKHQuYyx0LmQpfWZ1bmN0aW9uIEVYZSh0KXtyZXR1cm4gbmV3ICRlKHQuYyx0LmQpfWZ1bmN0aW9uIG5jKHQpe3JldHVybiBuZXcgJGUodC5hLHQuYil9ZnVuY3Rpb24gU1V0KHQsZSl7cmV0dXJuIFUzbih0LmEsZSxudWxsKX1mdW5jdGlvbiBUWGUodCl7RGEodCxudWxsKSxzYSh0LG51bGwpfWZ1bmN0aW9uIEFVdCh0KXt2cnQodCxudWxsKSx3cnQodCxudWxsKX1mdW5jdGlvbiBMVXQoKXtOTS5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBNVXQoKXtiai5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBoMnQodCl7dGhpcy5hPXQsQ3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBDWGUodCl7dGhpcy5iPSh2bigpLG5ldyBxKHQpKX1mdW5jdGlvbiB1aih0KXt0Lmo9UHQobEV0LHRlLDMxMCwwLDAsMSl9ZnVuY3Rpb24gX1hlKHQsZSxuKXt0LmMuVmMoZSx1KG4sMTMzKSl9ZnVuY3Rpb24gU1hlKHQsZSxuKXt0LmMuamkoZSx1KG4sMTMzKSl9ZnVuY3Rpb24gSVV0KHQsZSl7eHIodCksdC5HYyh1KGUsMTUpKX1mdW5jdGlvbiBoQyh0LGUpe3JldHVybiBjM24odC5jLHQuYixlKX1mdW5jdGlvbiBBWGUodCxlKXtyZXR1cm4gbmV3IEpVdCh0LktjKCksZSl9ZnVuY3Rpb24gSmV0KHQsZSl7cmV0dXJuIFNjbih0LktjKCksZSkhPS0xfWZ1bmN0aW9uIGYydCh0LGUpe3JldHVybiB0LmEuQmMoZSkhPW51bGx9ZnVuY3Rpb24gbGoodCl7cmV0dXJuIHQuT2IoKT90LlBiKCk6bnVsbH1mdW5jdGlvbiBEVXQodCl7cmV0dXJuIEFoKHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gRXQodCxlKXtyZXR1cm4gdCE9bnVsbCYmcnN0KHQsZSl9ZnVuY3Rpb24gTFhlKHQsZSl7dC5xLnNldEhvdXJzKGUpLHlfKHQsZSl9ZnVuY3Rpb24gT1V0KHQsZSl7dC5jJiYoRnZ0KGUpLHNRdChlKSl9ZnVuY3Rpb24gTVhlKHQsZSxuKXt1KHQuS2IobiksMTY0KS5OYihlKX1mdW5jdGlvbiBJWGUodCxlLG4pe3JldHVybiBqM24odCxlLG4pLG59ZnVuY3Rpb24gTlV0KHQsZSxuKXt0LmE9ZV4xNTAyLHQuYj1uXmZvdH1mdW5jdGlvbiB0bnQodCxlLG4pe3JldHVybiB0LmFbZS5nXVtuLmddfWZ1bmN0aW9uIHgxKHQsZSl7cmV0dXJuIHQuYVtlLmMucF1bZS5wXX1mdW5jdGlvbiBEWGUodCxlKXtyZXR1cm4gdC5lW2UuYy5wXVtlLnBdfWZ1bmN0aW9uIE9YZSh0LGUpe3JldHVybiB0LmNbZS5jLnBdW2UucF19ZnVuY3Rpb24gTlhlKHQsZSl7cmV0dXJuIHQualtlLnBdPUhibihlKX1mdW5jdGlvbiBQWGUodCxlKXtyZXR1cm4gcG10KHQuZixlLnRnKCkpfWZ1bmN0aW9uIEZYZSh0LGUpe3JldHVybiBwbXQodC5iLGUudGcoKSl9ZnVuY3Rpb24gQlhlKHQsZSl7cmV0dXJuIHQuYTxmdnQoZSk/LTE6MX1mdW5jdGlvbiBSWGUodCxlLG4pe3JldHVybiBuP2UhPTA6ZSE9dC0xfWZ1bmN0aW9uIGpYZSh0LGUsbil7cmV0dXJuIHQuYT1lLHQuYj1uLHR9ZnVuY3Rpb24gdWQodCxlKXtyZXR1cm4gdC5hKj1lLHQuYio9ZSx0fWZ1bmN0aW9uIGZDKHQsZSxuKXtyZXR1cm4gSmkodC5nLGUsbiksbn1mdW5jdGlvbiAkWGUodCxlLG4scil7SmkodC5hW2UuZ10sbi5nLHIpfWZ1bmN0aW9uIHpYZSh0LGUpe0ZtKGUsdC5hLmEuYSx0LmEuYS5iKX1mdW5jdGlvbiBQVXQodCl7dC5hPXUoSW4odC5iLmEsNCksMTI2KX1mdW5jdGlvbiBGVXQodCl7dC5hPXUoSW4odC5iLmEsNCksMTI2KX1mdW5jdGlvbiBxWGUodCl7dEkodCxPZGUpLFhzdCh0LEg0bih0KSl9ZnVuY3Rpb24gdTgoKXt1OD1aLFdIPW5ldyBnUihudWxsKX1mdW5jdGlvbiBkMnQoKXtkMnQ9WixkMnQoKSxPZ2U9bmV3IGllfWZ1bmN0aW9uIGcydCgpe3RoaXMuQmJ8PTI1Nix0aGlzLkJifD01MTJ9ZnVuY3Rpb24gZXIodCl7dGhpcy5pPXQsdGhpcy5mPXRoaXMuaS5qfWZ1bmN0aW9uIFNzKHQsZSxuKXtXTS5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIGhqKHQsZSxuKXtTcy5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIE91KHQsZSxuKXtTcy5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEJVdCh0LGUsbil7aGouY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBwMnQodCxlLG4pe1dNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVTModCxlLG4pe1dNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gYjJ0KHQsZSxuKXtTai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFJVdCh0LGUsbil7U2ouY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBqVXQodCxlLG4pe2IydC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uICRVdCh0LGUsbil7cDJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVzModCxlKXt0aGlzLmE9dCxUUi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gelV0KHQsZSl7dGhpcy5hPXQsaWV0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBxVXQodCxlKXt0aGlzLmE9dCxpZXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEhVdCh0LGUpe3RoaXMuYT10LGlldC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gdjJ0KHQpe3RoaXMuYT10LGF0dC5jYWxsKHRoaXMsdC5kKX1mdW5jdGlvbiBQcCh0KXt0aGlzLmM9dCx0aGlzLmE9dGhpcy5jLmF9ZnVuY3Rpb24gdzJ0KHQsZSl7dGhpcy5hPWUsaWV0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBHVXQodCxlKXt0aGlzLmE9ZSxMcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFZVdCh0LGUpe3RoaXMuYT10LExydC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSFhlKHQsZSl7cmV0dXJuIGV3dChObnQodC5jKSkuWGIoZSl9ZnVuY3Rpb24gbTJ0KHQsZSl7cmV0dXJuIGlsbih0LG5ldyBfcCxlKS5hfWZ1bmN0aW9uIGxyKHQsZSl7cmV0dXJuIEFyKGUpLG5ldyBVVXQodCxlKX1mdW5jdGlvbiBVVXQodCxlKXt0aGlzLmE9ZSxDUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geTJ0KHQpe3RoaXMuYj10LHRoaXMuYT10aGlzLmIuYS5lfWZ1bmN0aW9uIFdVdCh0KXt0LmIuUWIoKSwtLXQuZC5mLmQsUmoodC5kKX1mdW5jdGlvbiBLVXQodCl7dzkuY2FsbCh0aGlzLHUoQXIodCksMzUpKX1mdW5jdGlvbiBZVXQodCl7dzkuY2FsbCh0aGlzLHUoQXIodCksMzUpKX1mdW5jdGlvbiBYVXQoKXtHci5jYWxsKHRoaXMsIklOU1RBTkNFIiwwKX1mdW5jdGlvbiB4MnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IHVNKX1mdW5jdGlvbiBrMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IEl1KX1mdW5jdGlvbiBFMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IGxjKX1mdW5jdGlvbiBRVXQoKXtRVXQ9WixkZXQoKSx1NWU9bmV3IEhCfWZ1bmN0aW9uIEZuKCl7Rm49WixJMj0hMSxZRT0hMH1mdW5jdGlvbiBUaCh0KXtkeC5jYWxsKHRoaXMsKE9uKHQpLHQpKX1mdW5jdGlvbiBJbCh0KXtkeC5jYWxsKHRoaXMsKE9uKHQpLHQpKX1mdW5jdGlvbiBmaih0KXtULmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBUMnQodCl7QS5jYWxsKHRoaXMsdCksdGhpcy5hPXR9ZnVuY3Rpb24gQzJ0KHQpe1FrLmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBaVXQoKXt1aih0aGlzKSxuJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gSlV0KHQsZSl7dGhpcy5hPWUsQ1IuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHRXdCh0LGUpe3JldHVybiBuZXcgS2FlKHQuYSx0LmIsZSl9ZnVuY3Rpb24gZGoodCxlKXtyZXR1cm4gdC5sYXN0SW5kZXhPZihlKX1mdW5jdGlvbiBfMnQodCxlLG4pe3JldHVybiB0LmluZGV4T2YoZSxuKX1mdW5jdGlvbiBkQyh0KXtyZXR1cm4gdD09bnVsbD9UdTokbyh0KX1mdW5jdGlvbiBHWGUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDp0Lm5hbWV9ZnVuY3Rpb24gUzJ0KHQpe3JldHVybiB0LmEhPW51bGw/dC5hOm51bGx9ZnVuY3Rpb24gVlhlKHQpe3JldHVybiBrUih0LmEpP0ZRdCh0KTpudWxsfWZ1bmN0aW9uIGVudCh0LGUpe3JldHVybiBJQyh0LmEsZSkhPW51bGx9ZnVuY3Rpb24gTnUodCxlKXtyZXR1cm4hIWUmJnQuYltlLmddPT1lfWZ1bmN0aW9uIEl2KHQpe3JldHVybiB0LiRIfHwodC4kSD0rK2l4bil9ZnVuY3Rpb24gVVhlKHQpe3JldHVybiB0LmwrdC5tKmY2K3QuaCp4Mn1mdW5jdGlvbiBlV3QodCxlKXtyZXR1cm4gdWUoZS5hLHQuYSksdC5hfWZ1bmN0aW9uIG5XdCh0LGUpe3JldHVybiB1ZShlLmIsdC5hKSx0LmF9ZnVuY3Rpb24gRHYodCxlKXtyZXR1cm4gdWUoZS5hLHQuYSksdC5hfWZ1bmN0aW9uIE92KHQpe3JldHVybiBRbih0LmEhPW51bGwpLHQuYX1mdW5jdGlvbiBubnQodCl7a3QuY2FsbCh0aGlzLG5ldyBFbXQodCkpfWZ1bmN0aW9uIEEydCh0LGUpe0wzdC5jYWxsKHRoaXMsdCxlLG51bGwpfWZ1bmN0aW9uIGdDKHQpe3RoaXMuYT10LHguY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGdqKCl7Z2o9WixaSD1uZXcgT3MoT2ZlLDApfWZ1bmN0aW9uIHBqKHQsZSl7cmV0dXJuKyt0LmIsdWUodC5hLGUpfWZ1bmN0aW9uIEwydCh0LGUpe3JldHVybisrdC5iLHZ1KHQuYSxlKX1mdW5jdGlvbiBXWGUodCxlKXtyZXR1cm4gTHModC5uLmEsZS5uLmEpfWZ1bmN0aW9uIEtYZSh0LGUpe3JldHVybiBMcyh0LmMuZCxlLmMuZCl9ZnVuY3Rpb24gWVhlKHQsZSl7cmV0dXJuIExzKHQuYy5jLGUuYy5jKX1mdW5jdGlvbiBndSh0LGUpe3JldHVybiB1KEFpKHQuYixlKSwxNSl9ZnVuY3Rpb24gWFhlKHQsZSl7cmV0dXJuIHQubi5iPShPbihlKSxlKX1mdW5jdGlvbiBRWGUodCxlKXtyZXR1cm4gdC5uLmI9KE9uKGUpLGUpfWZ1bmN0aW9uIHBDKHQpe3JldHVybiBWbyh0LmEpfHxWbyh0LmIpfWZ1bmN0aW9uIFpYZSh0LGUsbil7cmV0dXJuIExadCh0LGUsbix0LmIpfWZ1bmN0aW9uIE0ydCh0LGUsbil7cmV0dXJuIExadCh0LGUsbix0LmMpfWZ1bmN0aW9uIEkydCh0LGUsbil7dSh3SSh0LGUpLDIxKS5GYyhuKX1mdW5jdGlvbiBKWGUodCxlLG4pe0ZpdCh0LmEsbikscXoodC5hLGUpfWZ1bmN0aW9uIE5NKHQsZSl7VjkoKSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBiaih0LGUpe0VnKCksdGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gcm50KHQsZSl7T250KCksdGhpcy5mPWUsdGhpcy5kPXR9ZnVuY3Rpb24gRDJ0KHQsZSl7Ym10KGUsdCksdGhpcy5kPXQsdGhpcy5jPWV9ZnVuY3Rpb24gVGcodCl7dmFyIGU7ZT10LmEsdC5hPXQuYix0LmI9ZX1mdW5jdGlvbiB0UWUodCl7cmV0dXJuIGxmKCksISF0JiYhdC5kYygpfWZ1bmN0aW9uIGVRZSh0KXtyZXR1cm4gbmV3IFdtKDMsdCl9ZnVuY3Rpb24gTzJ0KHQsZSl7cmV0dXJuIG5ldyBKV3QodCx0LmdjKCksZSl9ZnVuY3Rpb24gblFlKHQpe3JldHVybiBkUigpLFVyKChUUXQoKSxnZ2UpLHQpfWZ1bmN0aW9uIEx4KHQpe3RoaXMuZD10LGVyLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBNeCh0KXt0aGlzLmM9dCxlci5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUE0odCl7dGhpcy5jPXQsTHguY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHJXdCgpe3E5KCksdGhpcy5iPW5ldyB3MSh0aGlzKX1mdW5jdGlvbiBIZCh0KXtyZXR1cm4gQmwodCxteSksbmV3IFljKHQpfWZ1bmN0aW9uIGlXdCh0KXtyZXR1cm4gVDgoKSxwYXJzZUludCh0KXx8LTF9ZnVuY3Rpb24gRGwodCxlLG4pe3JldHVybiB0LnN1YnN0cihlLG4tZSl9ZnVuY3Rpb24gbDgodCxlLG4pe3JldHVybiBfMnQodCxFdShlKSxuKX1mdW5jdGlvbiBpbnQodCl7cmV0dXJuIGR3dCh0LmMsdC5jLmxlbmd0aCl9ZnVuY3Rpb24gclFlKHQpe3JldHVybiB0LmYhPW51bGw/dC5mOiIiK3QuZ31mdW5jdGlvbiBzbnQodCl7cmV0dXJuIHQuZiE9bnVsbD90LmY6IiIrdC5nfWZ1bmN0aW9uIGFudCh0KXtyZXR1cm4gUW4odC5iIT0wKSx0LmEuYS5jfWZ1bmN0aW9uIHZqKHQpe3JldHVybiBRbih0LmIhPTApLHQuYy5iLmN9ZnVuY3Rpb24gRk0odCl7RXQodCwxNTApJiZ1KHQsMTUwKS5HaCgpfWZ1bmN0aW9uIHdqKHQpe3JldHVybiB0LmI9dShQWHQodC5hKSw0Mil9ZnVuY3Rpb24gTjJ0KHQpe2k4KCksdGhpcy5iPXQsdGhpcy5hPSEwfWZ1bmN0aW9uIHNXdCh0KXtTUigpLHRoaXMuYj10LHRoaXMuYT0hMH1mdW5jdGlvbiBhV3QodCl7dC5kPW5ldyBjV3QodCksdC5lPW5ldyBDcn1mdW5jdGlvbiBvV3QodCl7aWYoIXQpdGhyb3cgcnQobmV3IGVoKX1mdW5jdGlvbiBQMnQodCl7aWYoIXQpdGhyb3cgcnQobmV3IHVNKX1mdW5jdGlvbiBQbSh0KXtpZighdCl0aHJvdyBydChuZXcgSXUpfWZ1bmN0aW9uIGlRZSh0KXtpZighdCl0aHJvdyBydChuZXcgSHR0KX1mdW5jdGlvbiBRbih0KXtpZighdCl0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGNXdCh0KXtfdnQuY2FsbCh0aGlzLHQsbnVsbCxudWxsKX1mdW5jdGlvbiB1V3QoKXtHci5jYWxsKHRoaXMsIlBPTFlPTUlOTyIsMCl9ZnVuY3Rpb24gbFd0KHQsZSxuLHIpe3R3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gc1FlKHQsZSl7cmV0dXJuIFpwKCksbG4odCxlLmUsZSl9ZnVuY3Rpb24gYVFlKHQsZSxuKXtyZXR1cm4gRFIoKSxuLnFnKHQsZSl9ZnVuY3Rpb24gVnModCxlKXtyZXR1cm4hIXQucSYma2wodC5xLGUpfWZ1bmN0aW9uIG9RZSh0LGUpe3JldHVybiB0PjA/ZSplL3Q6ZSplKjEwMH1mdW5jdGlvbiBjUWUodCxlKXtyZXR1cm4gdD4wP2UvKHQqdCk6ZSoxMDB9ZnVuY3Rpb24gdVFlKHQsZSxuKXtyZXR1cm4gdWUoZSxyaWUodCxuKSl9ZnVuY3Rpb24gbFFlKHQsZSxuKXtPJCgpLHQuWGUoZSkmJm4udGQodCl9ZnVuY3Rpb24gaDgodCxlLG4pe3ZhciByO3I9dC5aYyhlKSxyLlJiKG4pfWZ1bmN0aW9uIEZtKHQsZSxuKXtyZXR1cm4gdC5hKz1lLHQuYis9bix0fWZ1bmN0aW9uIGhRZSh0LGUsbil7cmV0dXJuIHQuYSo9ZSx0LmIqPW4sdH1mdW5jdGlvbiBCTSh0LGUsbil7cmV0dXJuIHQuYS09ZSx0LmItPW4sdH1mdW5jdGlvbiBGMnQodCxlKXtyZXR1cm4gdC5hPWUuYSx0LmI9ZS5iLHR9ZnVuY3Rpb24gbWoodCl7cmV0dXJuIHQuYT0tdC5hLHQuYj0tdC5iLHR9ZnVuY3Rpb24gaFd0KHQpe3RoaXMuYz10LHRoaXMuYT0xLHRoaXMuYj0xfWZ1bmN0aW9uIGZXdCh0KXt0aGlzLmM9dCx5dSh0LDApLHh1KHQsMCl9ZnVuY3Rpb24gZFd0KHQpe1FpLmNhbGwodGhpcyksekModGhpcyx0KX1mdW5jdGlvbiBnV3QodCl7SWF0KCksanp0KHRoaXMpLHRoaXMubWYodCl9ZnVuY3Rpb24gcFd0KHQsZSl7VjkoKSxOTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCMnQodCxlKXtFZygpLGJqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGJXdCh0LGUpe0VnKCksYmouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdld0KHQsZSl7RWcoKSxCMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geWwodCxlLG4pe1RsLmNhbGwodGhpcyx0LGUsbiwyKX1mdW5jdGlvbiBvbnQodCxlKXtuaCgpLFBqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdXdCh0LGUpe25oKCksb250LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFIydCh0LGUpe25oKCksb250LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG1XdCh0LGUpe25oKCksUjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGoydCh0LGUpe25oKCksUGouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geVd0KHQsZSl7bmgoKSxqMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geFd0KHQsZSl7bmgoKSxQai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBmUWUodCxlKXtyZXR1cm4gdC5jLkZjKHUoZSwxMzMpKX1mdW5jdGlvbiAkMnQodCxlLG4pe3JldHVybiBFcShtSSh0LGUpLG4pfWZ1bmN0aW9uIGRRZSh0LGUsbil7cmV0dXJuIGUuUWsodC5lLHQuYyxuKX1mdW5jdGlvbiBnUWUodCxlLG4pe3JldHVybiBlLlJrKHQuZSx0LmMsbil9ZnVuY3Rpb24gY250KHQsZSl7cmV0dXJuIEtwKHQuZSx1KGUsNDkpKX1mdW5jdGlvbiBwUWUodCxlLG4pe0pDKGlsKHQuYSksZSxEUXQobikpfWZ1bmN0aW9uIGJRZSh0LGUsbil7SkMoTGModC5hKSxlLElRdChuKSl9ZnVuY3Rpb24gejJ0KHQsZSl7ZS4kbW9kQ291bnQ9dC4kbW9kQ291bnR9ZnVuY3Rpb24gYkMoKXtiQz1aLCRTPW5ldyBHaSgicm9vdCIpfWZ1bmN0aW9uIGY4KCl7Zjg9WixsTj1uZXcgdnF0LG5ldyB3cXR9ZnVuY3Rpb24ga1d0KCl7dGhpcy5hPW5ldyBIdix0aGlzLmI9bmV3IEh2fWZ1bmN0aW9uIHEydCgpe3plZS5jYWxsKHRoaXMpLHRoaXMuQmJ8PVlhfWZ1bmN0aW9uIEVXdCgpe0dyLmNhbGwodGhpcywiR1JPV19UUkVFIiwwKX1mdW5jdGlvbiB2UWUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpQNG4odCl9ZnVuY3Rpb24gd1FlKHQpe3JldHVybiB0PT1udWxsP251bGw6SDBuKHQpfWZ1bmN0aW9uIG1RZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIHlRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIEwwKHQpe3Qubz09bnVsbCYmdmJuKHQpfWZ1bmN0aW9uIFJlKHQpe3JldHVybiBtQyh0PT1udWxsfHxPbSh0KSksdH1mdW5jdGlvbiB5ZSh0KXtyZXR1cm4gbUModD09bnVsbHx8Tm0odCkpLHR9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIG1DKHQ9PW51bGx8fGVhKHQpKSx0fWZ1bmN0aW9uIEgydCh0KXt0aGlzLnE9bmV3IGIuRGF0ZShWdih0KSl9ZnVuY3Rpb24gUk0odCxlKXt0aGlzLmM9dCxuOC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB5aih0LGUpe3RoaXMuYT10LFJNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhRZSh0LGUpe3RoaXMuZD10LE10dCh0aGlzKSx0aGlzLmI9ZX1mdW5jdGlvbiBHMnQodCxlKXtqcnQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIFYydCh0LGUpe2pydC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24ga1FlKHQpe3czdC5jYWxsKHRoaXMsMCwwKSx0aGlzLmY9dH1mdW5jdGlvbiBVMnQodCxlLG4pe0kkLmNhbGwodGhpcyx0LGUsbixudWxsKX1mdW5jdGlvbiBUV3QodCxlLG4pe0kkLmNhbGwodGhpcyx0LGUsbixudWxsKX1mdW5jdGlvbiBFUWUodCxlLG4pe3JldHVybiB0LnVlKGUsbik8PTA/bjplfWZ1bmN0aW9uIFRRZSh0LGUsbil7cmV0dXJuIHQudWUoZSxuKTw9MD9lOm59ZnVuY3Rpb24gQ1FlKHQsZSl7cmV0dXJuIHUoV3YodC5iLGUpLDE0OSl9ZnVuY3Rpb24gX1FlKHQsZSl7cmV0dXJuIHUoV3YodC5jLGUpLDIyOSl9ZnVuY3Rpb24gdW50KHQpe3JldHVybiB1KEZlKHQuYSx0LmIpLDI4Nyl9ZnVuY3Rpb24gQ1d0KHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCt0LmEpfWZ1bmN0aW9uIF9XdCh0KXtyZXR1cm4gT2woKSx1VXQodSh0LDE5NykpfWZ1bmN0aW9uIEJtKCl7Qm09Wix0N3Q9dW4oKF9sKCksVjIpKX1mdW5jdGlvbiBTUWUodCxlKXtlLmE/ZnZuKHQsZSk6ZW50KHQuYSxlLmIpfWZ1bmN0aW9uIFNXdCh0LGUpe1IxfHx1ZSh0LmEsZSl9ZnVuY3Rpb24gQVFlKHQsZSl7cmV0dXJuIHZNKCksVjgoZS5kLmksdCl9ZnVuY3Rpb24gTFFlKHQsZSl7cmV0dXJuIFh4KCksbmV3IEx1ZShlLHQpfWZ1bmN0aW9uIGxkKHQsZSl7cmV0dXJuIHRJKGUsWXh0KSx0LmY9ZSx0fWZ1bmN0aW9uIFcydCh0LGUsbil7cmV0dXJuIG49emwodCxlLDMsbiksbn1mdW5jdGlvbiBLMnQodCxlLG4pe3JldHVybiBuPXpsKHQsZSw2LG4pLG59ZnVuY3Rpb24gWTJ0KHQsZSxuKXtyZXR1cm4gbj16bCh0LGUsOSxuKSxufWZ1bmN0aW9uIGpNKHQsZSxuKXsrK3Quaix0LktpKCksQnJ0KHQsZSxuKX1mdW5jdGlvbiBBV3QodCxlLG4peysrdC5qLHQuSGkoZSx0Lm9pKGUsbikpfWZ1bmN0aW9uIExXdCh0LGUsbil7dmFyIHI7cj10LlpjKGUpLHIuUmIobil9ZnVuY3Rpb24gTVd0KHQsZSxuKXtyZXR1cm4gdXh0KHQuYyx0LmIsZSxuKX1mdW5jdGlvbiBYMnQodCxlKXtyZXR1cm4oZSZ2aSkldC5kLmxlbmd0aH1mdW5jdGlvbiBPcyh0LGUpe0dpLmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBRMnQodCxlKXt3cHQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIGxudCh0LGUpe3dwdC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gSVd0KHQsZSl7dGhpcy5jPXQsS3YuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIERXdCh0LGUpe3RoaXMuYT10LE96dC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gJE0odCxlKXt0aGlzLmE9dCxPenQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIE9XdCh0KXt0aGlzLmE9KEJsKHQsbXkpLG5ldyBZYyh0KSl9ZnVuY3Rpb24gTld0KHQpe3RoaXMuYT0oQmwodCxteSksbmV3IFljKHQpKX1mdW5jdGlvbiB6TSh0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyB1dCksdC5hfWZ1bmN0aW9uIFBXdCh0KXtyZXR1cm4gdD44PzA6dCsxfWZ1bmN0aW9uIE1RZSh0LGUpe3JldHVybiBGbigpLHQ9PWU/MDp0PzE6LTF9ZnVuY3Rpb24gWjJ0KHQsZSxuKXtyZXR1cm4gTngodCx1KGUsMjIpLG4pfWZ1bmN0aW9uIElRZSh0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX1mdW5jdGlvbiBGV3QodCxlLG4pe3JldHVybiB0LmErPUFoKGUsMCxuKSx0fWZ1bmN0aW9uIEoydCh0LGUpe3ZhciBuO3JldHVybiBuPXQuZSx0LmU9ZSxufWZ1bmN0aW9uIERRZSh0LGUpe3ZhciBuO249dFtob3RdLG4uY2FsbCh0LGUpfWZ1bmN0aW9uIE9RZSh0LGUpe3ZhciBuO249dFtob3RdLG4uY2FsbCh0LGUpfWZ1bmN0aW9uIFJtKHQsZSl7dC5hLlZjKHQuYixlKSwrK3QuYix0LmM9LTF9ZnVuY3Rpb24gQld0KHQpe1l1KHQuZSksdC5kLmI9dC5kLHQuZC5hPXQuZH1mdW5jdGlvbiBxTSh0KXt0LmI/cU0odC5iKTp0LmYuYy56Yyh0LmUsdC5kKX1mdW5jdGlvbiBOUWUodCxlLG4pe1diKCksdnR0KHQsZS5DZSh0LmEsbikpfWZ1bmN0aW9uIFBRZSh0LGUpe3JldHVybiBjZXQobWllKHQuYSxlLCEwKSl9ZnVuY3Rpb24gRlFlKHQsZSl7cmV0dXJuIGNldCh5aWUodC5hLGUsITApKX1mdW5jdGlvbiB1Zih0LGUpe3JldHVybiB3UihuZXcgQXJyYXkoZSksdCl9ZnVuY3Rpb24gaG50KHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWZ1bmN0aW9uIEJRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOnQubWVzc2FnZX1mdW5jdGlvbiBSV3QoKXt0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgbGV9ZnVuY3Rpb24gald0KCl7dGhpcy5hPW5ldyBGNSx0aGlzLmI9bmV3IEt6dH1mdW5jdGlvbiAkV3QoKXt0aGlzLmI9bmV3IFRhLHRoaXMuYz1uZXcgbGV9ZnVuY3Rpb24gdHZ0KCl7dGhpcy5kPW5ldyBUYSx0aGlzLmU9bmV3IFRhfWZ1bmN0aW9uIGV2dCgpe3RoaXMubj1uZXcgVGEsdGhpcy5vPW5ldyBUYX1mdW5jdGlvbiB4aigpe3RoaXMubj1uZXcgd3gsdGhpcy5pPW5ldyBBeH1mdW5jdGlvbiB6V3QoKXt0aGlzLmE9bmV3IGpKLHRoaXMuYj1uZXcgelh9ZnVuY3Rpb24gcVd0KCl7dGhpcy5hPW5ldyBsZSx0aGlzLmQ9bmV3IGxlfWZ1bmN0aW9uIEhXdCgpe3RoaXMuYj1uZXcgcXMsdGhpcy5hPW5ldyBxc31mdW5jdGlvbiBHV3QoKXt0aGlzLmI9bmV3IENyLHRoaXMuYT1uZXcgQ3J9ZnVuY3Rpb24gVld0KCl7dGhpcy5iPW5ldyBDSHQsdGhpcy5hPW5ldyBOUX1mdW5jdGlvbiBVV3QoKXt4ai5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgVGF9ZnVuY3Rpb24gdkModCl7Y2NuLmNhbGwodGhpcyx0LChQJCgpLEF1dCkpfWZ1bmN0aW9uIG52dCh0LGUsbixyKXtGai5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gUlFlKHQsZSxuKXtuIT1udWxsJiZaJChlLGdzdCh0LG4pKX1mdW5jdGlvbiBqUWUodCxlLG4pe24hPW51bGwmJkokKGUsZ3N0KHQsbikpfWZ1bmN0aW9uIHJ2dCh0LGUsbil7cmV0dXJuIG49emwodCxlLDExLG4pLG59ZnVuY3Rpb24gTGkodCxlKXtyZXR1cm4gdC5hKz1lLmEsdC5iKz1lLmIsdH1mdW5jdGlvbiBuYSh0LGUpe3JldHVybiB0LmEtPWUuYSx0LmItPWUuYix0fWZ1bmN0aW9uICRRZSh0LGUpe3JldHVybiB0Lm4uYT0oT24oZSksZSsxMCl9ZnVuY3Rpb24gelFlKHQsZSl7cmV0dXJuIHQubi5hPShPbihlKSxlKzEwKX1mdW5jdGlvbiBxUWUodCxlKXtyZXR1cm4gZT09dHx8ZkUoY3EoZSksdCl9ZnVuY3Rpb24gV1d0KHQsZSl7cmV0dXJuIGtpKHQuYSxlLCIiKT09bnVsbH1mdW5jdGlvbiBIUWUodCxlKXtyZXR1cm4gdk0oKSwhVjgoZS5kLmksdCl9ZnVuY3Rpb24gR1FlKHQsZSl7T3AodC5mKT9vYm4odCxlKTpWZG4odCxlKX1mdW5jdGlvbiBWUWUodCxlKXt2YXIgbjtyZXR1cm4gbj1lLkhoKHQuYSksbn1mdW5jdGlvbiBqbSh0LGUpe21vLmNhbGwodGhpcyxYXyt0K1MyK2UpfWZ1bmN0aW9uIEl4KHQsZSxuLHIpe2hlLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBpdnQodCxlLG4scil7aGUuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIEtXdCh0LGUsbixyKXtpdnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFlXdCh0LGUsbixyKXtVai5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZm50KHQsZSxuLHIpe1VqLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBzdnQodCxlLG4scil7VWouY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIFhXdCh0LGUsbixyKXtmbnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGF2dCh0LGUsbixyKXtmbnQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIENuKHQsZSxuLHIpe3N2dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gUVd0KHQsZSxuLHIpe2F2dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gWld0KHQsZSxuLHIpe2l3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gSld0KHQsZSxuKXt0aGlzLmE9dCxEMnQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gdEt0KHQsZSxuKXt0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmE9dH1mdW5jdGlvbiBVUWUodCxlLG4pe3JldHVybiB0LmQ9dShlLktiKG4pLDE2NCl9ZnVuY3Rpb24gb3Z0KHQsZSl7cmV0dXJuIHQuQWooKS5OaCgpLktoKHQsZSl9ZnVuY3Rpb24gY3Z0KHQsZSl7cmV0dXJuIHQuQWooKS5OaCgpLkloKHQsZSl9ZnVuY3Rpb24gZUt0KHQsZSl7cmV0dXJuIE9uKHQpLEd0KHQpPT09R3QoZSl9ZnVuY3Rpb24gaG4odCxlKXtyZXR1cm4gT24odCksR3QodCk9PT1HdChlKX1mdW5jdGlvbiBkbnQodCxlKXtyZXR1cm4gY2V0KG1pZSh0LmEsZSwhMSkpfWZ1bmN0aW9uIGdudCh0LGUpe3JldHVybiBjZXQoeWllKHQuYSxlLCExKSl9ZnVuY3Rpb24gV1FlKHQsZSl7cmV0dXJuIHQuYi5zZChuZXcgTkd0KHQsZSkpfWZ1bmN0aW9uIEtRZSh0LGUpe3JldHVybiB0LmIuc2QobmV3IFBHdCh0LGUpKX1mdW5jdGlvbiBuS3QodCxlKXtyZXR1cm4gdC5iLnNkKG5ldyBGR3QodCxlKSl9ZnVuY3Rpb24gdXZ0KHQsZSxuKXtyZXR1cm4gdC5sYXN0SW5kZXhPZihlLG4pfWZ1bmN0aW9uIFlRZSh0LGUsbil7cmV0dXJuIExzKHRbZS5iXSx0W24uYl0pfWZ1bmN0aW9uIFhRZSh0LGUpe3JldHVybiBKdChlLChUZSgpLF9PKSx0KX1mdW5jdGlvbiBRUWUodCxlKXtyZXR1cm4gZHUoZS5hLmQucCx0LmEuZC5wKX1mdW5jdGlvbiBaUWUodCxlKXtyZXR1cm4gZHUodC5hLmQucCxlLmEuZC5wKX1mdW5jdGlvbiBKUWUodCxlKXtyZXR1cm4gTHModC5jLXQucyxlLmMtZS5zKX1mdW5jdGlvbiByS3QodCl7cmV0dXJuIHQuYz9Sbyh0LmMuYSx0LDApOi0xfWZ1bmN0aW9uIHRaZSh0KXtyZXR1cm4gdDwxMDA/bnVsbDpuZXcgU3AodCl9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIHQ9PUcyfHx0PT1oMHx8dD09VmN9ZnVuY3Rpb24gaUt0KHQsZSl7cmV0dXJuIEV0KGUsMTUpJiZsdWUodC5jLGUpfWZ1bmN0aW9uIGVaZSh0LGUpe1IxfHxlJiYodC5kPWUpfWZ1bmN0aW9uIHBudCh0LGUpe3ZhciBuO3JldHVybiBuPWUsISFEeXQodCxuKX1mdW5jdGlvbiBsdnQodCxlKXt0aGlzLmM9dCxxbnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gc0t0KHQpe3RoaXMuYz10LEdldC5jYWxsKHRoaXMsSXEsMCl9ZnVuY3Rpb24gYUt0KHQsZSl7YXRuLmNhbGwodGhpcyx0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIG5aZSh0LGUsbil7cmV0dXJuIHUodC5jLDY5KS5sayhlLG4pfWZ1bmN0aW9uIGtqKHQsZSxuKXtyZXR1cm4gdSh0LmMsNjkpLm1rKGUsbil9ZnVuY3Rpb24gclplKHQsZSxuKXtyZXR1cm4gZFFlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gaHZ0KHQsZSxuKXtyZXR1cm4gZ1FlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gaVplKHQsZSxuKXtyZXR1cm4gaWFlKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gb0t0KHQsZSxuKXtyZXR1cm4gbjBuKHQsdShlLDMzMiksbil9ZnVuY3Rpb24gd0ModCxlKXtyZXR1cm4gZT09bnVsbD9udWxsOm55KHQuYixlKX1mdW5jdGlvbiBmdnQodCl7cmV0dXJuIE5tKHQpPyhPbih0KSx0KTp0LmtlKCl9ZnVuY3Rpb24gRWoodCl7cmV0dXJuIWlzTmFOKHQpJiYhaXNGaW5pdGUodCl9ZnVuY3Rpb24gY0t0KHQpe2hkKCksdGhpcy5hPSh2bigpLG5ldyBRayh0KSl9ZnVuY3Rpb24gSE0odCl7ZzgoKSx0aGlzLmQ9dCx0aGlzLmE9bmV3IFAzfWZ1bmN0aW9uIHJoKHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB1S3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIGxLdCh0LGUsbil7dGhpcy5kPXQsdGhpcy5iPW4sdGhpcy5hPWV9ZnVuY3Rpb24gYm50KHQpe0VVdCh0aGlzKSxfaCh0aGlzKSxVYSh0aGlzLHQpfWZ1bmN0aW9uIFB1KHQpe1lldCh0aGlzKSxTdnQodGhpcy5jLDAsdC5QYygpKX1mdW5jdGlvbiBoS3QodCl7RWwodC5hKSxjdGUodC5jLHQuYiksdC5iPW51bGx9ZnVuY3Rpb24gZkt0KHQpe3RoaXMuYT10LHFkKCksa3UoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gZEt0KCl7ZEt0PVosSUV0PW5ldyBfLFlIPW5ldyBffWZ1bmN0aW9uIHZudCgpe3ZudD1aLGtFdD1uZXcgSXQsSWdlPW5ldyBGdH1mdW5jdGlvbiBnS3QoKXtnS3Q9WixqNGU9UHQoWG4sSWUsMSwwLDUsMSl9ZnVuY3Rpb24gcEt0KCl7cEt0PVoscjVlPVB0KFhuLEllLDEsMCw1LDEpfWZ1bmN0aW9uIGR2dCgpe2R2dD1aLGk1ZT1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiBoZCgpe2hkPVosbmV3IHhwdCgodm4oKSx2bigpLGlvKSl9ZnVuY3Rpb24gc1plKHQpe3JldHVybiBQJCgpLFVyKChtdGUoKSxOZ2UpLHQpfWZ1bmN0aW9uIGFaZSh0KXtyZXR1cm4gSTEoKSxVcigoUkp0KCksJGdlKSx0KX1mdW5jdGlvbiBvWmUodCl7cmV0dXJuIE56KCksVXIoKFZadCgpLFVnZSksdCl9ZnVuY3Rpb24gY1plKHQpe3JldHVybiAkJCgpLFVyKChVWnQoKSxXZ2UpLHQpfWZ1bmN0aW9uIHVaZSh0KXtyZXR1cm4gZ3EoKSxVcigoRG5lKCksS2dlKSx0KX1mdW5jdGlvbiBsWmUodCl7cmV0dXJuIEtmKCksVXIoKFBKdCgpLFFnZSksdCl9ZnVuY3Rpb24gaFplKHQpe3JldHVybiBYdSgpLFVyKChGSnQoKSxKZ2UpLHQpfWZ1bmN0aW9uIGZaZSh0KXtyZXR1cm4gd3UoKSxVcigoQkp0KCksZXBlKSx0KX1mdW5jdGlvbiBkWmUodCl7cmV0dXJuIExxKCksVXIoKEtWdCgpLFRwZSksdCl9ZnVuY3Rpb24gZ1plKHQpe3JldHVybiB0dygpLFVyKCh4dGUoKSxfcGUpLHQpfWZ1bmN0aW9uIHBaZSh0KXtyZXR1cm4gbjYoKSxVcigoa3RlKCksQXBlKSx0KX1mdW5jdGlvbiBiWmUodCl7cmV0dXJuIHNfKCksVXIoKEV0ZSgpLElwZSksdCl9ZnVuY3Rpb24gdlplKHQpe3JldHVybiBBUigpLFVyKChFWnQoKSxEcGUpLHQpfWZ1bmN0aW9uIHdaZSh0KXtyZXR1cm4geiQoKSxVcigoV1p0KCksWXBlKSx0KX1mdW5jdGlvbiBtWmUodCl7cmV0dXJuIGpDKCksVXIoKGpKdCgpLGJiZSksdCl9ZnVuY3Rpb24geVplKHQpe3JldHVybiBXYSgpLFVyKChKdGUoKSx5YmUpLHQpfWZ1bmN0aW9uIHhaZSh0KXtyZXR1cm4gSzgoKSxVcigoeXRlKCksQ2JlKSx0KX1mdW5jdGlvbiBrWmUodCl7cmV0dXJuIGV3KCksVXIoKCRKdCgpLEliZSksdCl9ZnVuY3Rpb24gZ3Z0KHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IFBuKGUpKX1mdW5jdGlvbiBFWmUodCl7cmV0dXJuIEduKCksVXIoKHllZSgpLFBiZSksdCl9ZnVuY3Rpb24gcHZ0KHQpe0ZqLmNhbGwodGhpcyx0LmQsdC5jLHQuYSx0LmIpfWZ1bmN0aW9uIHdudCh0KXtGai5jYWxsKHRoaXMsdC5kLHQuYyx0LmEsdC5iKX1mdW5jdGlvbiBidnQodCxlLG4pe3RoaXMuYj10LHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIFRqKHQsZSxuKXt0aGlzLmI9dCx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiBiS3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHZ2dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gdkt0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB3dnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHdLdCh0LGUsbil7dGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gQ2oodCxlLG4pe3RoaXMuZT1lLHRoaXMuYj10LHRoaXMuZD1ufWZ1bmN0aW9uIFRaZSh0LGUsbil7cmV0dXJuIFdiKCksdC5hLk9kKGUsbiksZX1mdW5jdGlvbiBtbnQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IFV1LGUuZT10LGV9ZnVuY3Rpb24gbXZ0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBlcXQsZS5iPXQsZX1mdW5jdGlvbiBHTSgpe0dNPVosY0c9bmV3IF9ZLHVHPW5ldyBTWX1mdW5jdGlvbiBsZigpe2xmPVosWWJlPW5ldyBiWCxYYmU9bmV3IHlGfWZ1bmN0aW9uIENaZSh0KXtyZXR1cm4gZHooKSxVcigoQ3RlKCksR2JlKSx0KX1mdW5jdGlvbiBfWmUodCl7cmV0dXJuIE0xKCksVXIoKFN0ZSgpLEpiZSksdCl9ZnVuY3Rpb24gU1plKHQpe3JldHVybiBmcSgpLFVyKCh4bmUoKSxvMmUpLHQpfWZ1bmN0aW9uIEFaZSh0KXtyZXR1cm4gaTYoKSxVcigoRWVlKCksYzJlKSx0KX1mdW5jdGlvbiBMWmUodCl7cmV0dXJuIEQkKCksVXIoKEpadCgpLHUyZSksdCl9ZnVuY3Rpb24gTVplKHQpe3JldHVybiBZeCgpLFVyKCh6SnQoKSxsMmUpLHQpfWZ1bmN0aW9uIElaZSh0KXtyZXR1cm4gZzQoKSxVcigoS3RlKCksZTJlKSx0KX1mdW5jdGlvbiBEWmUodCl7cmV0dXJuIEp2KCksVXIoKEdKdCgpLGEyZSksdCl9ZnVuY3Rpb24gT1plKHQpe3JldHVybiBYJCgpLFVyKChxSnQoKSxoMmUpLHQpfWZ1bmN0aW9uIE5aZSh0KXtyZXR1cm4gdjIoKSxVcigoVXRlKCksZjJlKSx0KX1mdW5jdGlvbiBQWmUodCl7cmV0dXJuIFRJKCksVXIoKFladCgpLGQyZSksdCl9ZnVuY3Rpb24gRlplKHQpe3JldHVybiB1MigpLFVyKChISnQoKSxwMmUpLHQpfWZ1bmN0aW9uIEJaZSh0KXtyZXR1cm4gbnEoKSxVcigoU2VlKCksYjJlKSx0KX1mdW5jdGlvbiBSWmUodCl7cmV0dXJuIGJJKCksVXIoKFhadCgpLHYyZSksdCl9ZnVuY3Rpb24galplKHQpe3JldHVybiBuRCgpLFVyKChDZWUoKSx3MmUpLHQpfWZ1bmN0aW9uICRaZSh0KXtyZXR1cm4gZ0UoKSxVcigoVGVlKCksbTJlKSx0KX1mdW5jdGlvbiB6WmUodCl7cmV0dXJuIG9vKCksVXIoKFduZSgpLHkyZSksdCl9ZnVuY3Rpb24gcVplKHQpe3JldHVybiBXOCgpLFVyKChVSnQoKSx4MmUpLHQpfWZ1bmN0aW9uIEhaZSh0KXtyZXR1cm4gQjAoKSxVcigoVkp0KCksRTJlKSx0KX1mdW5jdGlvbiBHWmUodCl7cmV0dXJuIHgkKCksVXIoKHRKdCgpLFQyZSksdCl9ZnVuY3Rpb24gVlplKHQpe3JldHVybiBoaCgpLFVyKChZdGUoKSxDMmUpLHQpfWZ1bmN0aW9uIFVaZSh0KXtyZXR1cm4gWnooKSxVcigoX2VlKCksJHdlKSx0KX1mdW5jdGlvbiBXWmUodCl7cmV0dXJuIFlDKCksVXIoKFdKdCgpLHp3ZSksdCl9ZnVuY3Rpb24gS1plKHQpe3JldHVybiBzeSgpLFVyKChBdGUoKSxxd2UpLHQpfWZ1bmN0aW9uIFlaZSh0KXtyZXR1cm4gc28oKSxVcigoWEp0KCksS3dlKSx0KX1mdW5jdGlvbiBYWmUodCl7cmV0dXJuIHc0KCksVXIoKHluZSgpLEd3ZSksdCl9ZnVuY3Rpb24gUVplKHQpe3JldHVybiBqMCgpLFVyKChZSnQoKSxWd2UpLHQpfWZ1bmN0aW9uIFpaZSh0KXtyZXR1cm4geUkoKSxVcigoWlp0KCksVXdlKSx0KX1mdW5jdGlvbiBKWmUodCl7cmV0dXJuIHV6KCksVXIoKEtKdCgpLFl3ZSksdCl9ZnVuY3Rpb24gdEplKHQpe3JldHVybiBhXygpLFVyKChXdGUoKSxId2UpLHQpfWZ1bmN0aW9uIGVKZSh0KXtyZXR1cm4gbEkoKSxVcigoUVp0KCksWHdlKSx0KX1mdW5jdGlvbiBuSmUodCl7cmV0dXJuIHRFKCksVXIoKFpKdCgpLFF3ZSksdCl9ZnVuY3Rpb24gckplKHQpe3JldHVybiBveigpLFVyKChKSnQoKSxad2UpLHQpfWZ1bmN0aW9uIGlKZSh0KXtyZXR1cm4gZ3ooKSxVcigoUUp0KCksSndlKSx0KX1mdW5jdGlvbiBzSmUodCl7cmV0dXJuIFp2KCksVXIoKHR0ZSgpLGZtZSksdCl9ZnVuY3Rpb24gYUplKHQpe3JldHVybiBCQygpLFVyKChuSnQoKSx2bWUpLHQpfWZ1bmN0aW9uIG9KZSh0KXtyZXR1cm4gZGQoKSxVcigockp0KCksVG1lKSx0KX1mdW5jdGlvbiBjSmUodCl7cmV0dXJuIEUxKCksVXIoKGlKdCgpLF9tZSksdCl9ZnVuY3Rpb24gdUplKHQpe3JldHVybiBWZigpLFVyKChlSnQoKSx6bWUpLHQpfWZ1bmN0aW9uIGxKZSh0KXtyZXR1cm4gcXYoKSxVcigoc0p0KCksS21lKSx0KX1mdW5jdGlvbiBoSmUodCl7cmV0dXJuIHVFKCksVXIoKFR0ZSgpLFltZSksdCl9ZnVuY3Rpb24gZkplKHQpe3JldHVybiBmXygpLFVyKChBZWUoKSxRbWUpLHQpfWZ1bmN0aW9uIGRKZSh0KXtyZXR1cm4gZCQoKSxVcigoY0p0KCksaHllKSx0KX1mdW5jdGlvbiBnSmUodCl7cmV0dXJuIGl6KCksVXIoKG9KdCgpLHZ5ZSksdCl9ZnVuY3Rpb24gcEplKHQpe3JldHVybiB2JCgpLFVyKChhSnQoKSxmeWUpLHQpfWZ1bmN0aW9uIGJKZSh0KXtyZXR1cm4gQ3ooKSxVcigoZXRlKCksbXllKSx0KX1mdW5jdGlvbiB2SmUodCl7cmV0dXJuIE4kKCksVXIoKHVKdCgpLHl5ZSksdCl9ZnVuY3Rpb24gd0plKHQpe3JldHVybiBSSSgpLFVyKChudGUoKSx4eWUpLHQpfWZ1bmN0aW9uIG1KZSh0KXtyZXR1cm4gR3ooKSxVcigoX3RlKCksRnllKSx0KX1mdW5jdGlvbiB5SmUodCl7cmV0dXJuIGN6KCksVXIoKGl0ZSgpLEJ5ZSksdCl9ZnVuY3Rpb24geEplKHQpe3JldHVybiBUeigpLFVyKChydGUoKSxSeWUpLHQpfWZ1bmN0aW9uIGtKZSh0KXtyZXR1cm4geUUoKSxVcigoWnRlKCksaTNlKSx0KX1mdW5jdGlvbiBFSmUodCl7cmV0dXJuIEdJKCksVXIoKHN0ZSgpLHMzZSksdCl9ZnVuY3Rpb24gVEplKHQpe3JldHVybiBNUigpLFVyKCh4WnQoKSxhM2UpLHQpfWZ1bmN0aW9uIENKZSh0KXtyZXR1cm4gSVIoKSxVcigoeVp0KCksYzNlKSx0KX1mdW5jdGlvbiBfSmUodCl7cmV0dXJuIGhJKCksVXIoKGhKdCgpLHUzZSksdCl9ZnVuY3Rpb24gU0plKHQpe3JldHVybiBpRCgpLFVyKChYdGUoKSxsM2UpLHQpfWZ1bmN0aW9uIEFKZSh0KXtyZXR1cm4gSDkoKSxVcigoa1p0KCksXzNlKSx0KX1mdW5jdGlvbiBMSmUodCl7cmV0dXJuIE5JKCksVXIoKGxKdCgpLFMzZSksdCl9ZnVuY3Rpb24gTUplKHQpe3JldHVybiBYZigpLFVyKChRdGUoKSxPM2UpLHQpfWZ1bmN0aW9uIElKZSh0KXtyZXR1cm4gamcoKSxVcigoa25lKCksUDNlKSx0KX1mdW5jdGlvbiBESmUodCl7cmV0dXJuIFFkKCksVXIoKGtlZSgpLEYzZSksdCl9ZnVuY3Rpb24gT0plKHQpe3JldHVybiBjeSgpLFVyKCh4ZWUoKSxxM2UpLHQpfWZ1bmN0aW9uIE5KZSh0KXtyZXR1cm4gcm8oKSxVcigoWVZ0KCksemJlKSx0KX1mdW5jdGlvbiBQSmUodCl7cmV0dXJuIHE4KCksVXIoKEtadCgpLCRiZSksdCl9ZnVuY3Rpb24gRkplKHQpe3JldHVybiBhbygpLFVyKCh0ZWUoKSxyNGUpLHQpfWZ1bmN0aW9uIEJKZSh0KXtyZXR1cm4gQTEoKSxVcigob3RlKCksaTRlKSx0KX1mdW5jdGlvbiBSSmUodCl7cmV0dXJuIHEwKCksVXIoKEl0ZSgpLHM0ZSksdCl9ZnVuY3Rpb24gakplKHQpe3JldHVybiB0cSgpLFVyKChNZWUoKSxhNGUpLHQpfWZ1bmN0aW9uICRKZSh0KXtyZXR1cm4gJDAoKSxVcigoYXRlKCksYzRlKSx0KX1mdW5jdGlvbiB6SmUodCl7cmV0dXJuIGpsKCksVXIoKE10ZSgpLGw0ZSksdCl9ZnVuY3Rpb24gcUplKHQpe3JldHVybiBmeSgpLFVyKChJbmUoKSxoNGUpLHQpfWZ1bmN0aW9uIEhKZSh0KXtyZXR1cm4gYzQoKSxVcigoZWVlKCksZjRlKSx0KX1mdW5jdGlvbiBHSmUodCl7cmV0dXJuIG9hKCksVXIoKGJlZSgpLGQ0ZSksdCl9ZnVuY3Rpb24gVkplKHQpe3JldHVybiBRdSgpLFVyKChMZWUoKSxnNGUpLHQpfWZ1bmN0aW9uIFVKZSh0KXtyZXR1cm4gX2woKSxVcigoT3RlKCkseTRlKSx0KX1mdW5jdGlvbiBXSmUodCl7cmV0dXJuIGNsKCksVXIoKEtuZSgpLHg0ZSksdCl9ZnVuY3Rpb24gS0plKHQpe3JldHVybiBiZSgpLFVyKChuZWUoKSxwNGUpLHQpfWZ1bmN0aW9uIFlKZSh0KXtyZXR1cm4gQXooKSxVcigoRHRlKCksazRlKSx0KX1mdW5jdGlvbiBYSmUodCl7cmV0dXJuIENsKCksVXIoKEx0ZSgpLEM0ZSksdCl9ZnVuY3Rpb24gUUplKHQpe3JldHVybiB2RSgpLFVyKChFbmUoKSxSNGUpLHQpfWZ1bmN0aW9uIFpKZSh0LGUpe3JldHVybiBPbih0KSx0KyhPbihlKSxlKX1mdW5jdGlvbiBKSmUodCxlKXtyZXR1cm4gcWQoKSxNcihXdCh0LmEpLGUpfWZ1bmN0aW9uIHR0bih0LGUpe3JldHVybiBxZCgpLE1yKFd0KHQuYSksZSl9ZnVuY3Rpb24geW50KHQsZSl7dGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5iPWUtdH1mdW5jdGlvbiBtS3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHl2dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24geHZ0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB5S3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIHhLdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gQ2codCxlLG4pe3RoaXMuZT10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIGtLdCh0LGUsbil7bmgoKSxPd3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiB4bnQodCxlLG4pe25oKCksdnd0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24ga3Z0KHQsZSxuKXtuaCgpLHZ3dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEV2dCh0LGUsbil7bmgoKSx2d3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBFS3QodCxlLG4pe25oKCkseG50LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gVHZ0KHQsZSxuKXtuaCgpLHhudC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFRLdCh0LGUsbil7bmgoKSxUdnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBDS3QodCxlLG4pe25oKCksa3Z0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gX0t0KHQsZSxuKXtuaCgpLEV2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIFZNKHQsZSl7cmV0dXJuIEFyKHQpLEFyKGUpLG5ldyBXSHQodCxlKX1mdW5jdGlvbiBPeCh0LGUpe3JldHVybiBBcih0KSxBcihlKSxuZXcgakt0KHQsZSl9ZnVuY3Rpb24gZXRuKHQsZSl7cmV0dXJuIEFyKHQpLEFyKGUpLG5ldyAkS3QodCxlKX1mdW5jdGlvbiBudG4odCxlKXtyZXR1cm4gQXIodCksQXIoZSksbmV3IFlIdCh0LGUpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gbUModD09bnVsbHx8cnN0KHQsZSkpLHR9ZnVuY3Rpb24gZDgodCl7dmFyIGU7cmV0dXJuIGU9bmV3IGxlLFhydChlLHQpLGV9ZnVuY3Rpb24gcnRuKHQpe3ZhciBlO3JldHVybiBlPW5ldyBxcyxYcnQoZSx0KSxlfWZ1bmN0aW9uIFNLdCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgTXB0LGxpdChlLHQpLGV9ZnVuY3Rpb24gVU0odCl7dmFyIGU7cmV0dXJuIGU9bmV3IFFpLGxpdChlLHQpLGV9ZnVuY3Rpb24gaXRuKHQpe3JldHVybiF0LmUmJih0LmU9bmV3IGxlKSx0LmV9ZnVuY3Rpb24gc3RuKHQpe3JldHVybiF0LmMmJih0LmM9bmV3IHhtKSx0LmN9ZnVuY3Rpb24gdWUodCxlKXtyZXR1cm4gdC5jW3QuYy5sZW5ndGhdPWUsITB9ZnVuY3Rpb24gQUt0KHQsZSl7dGhpcy5jPXQsdGhpcy5iPWUsdGhpcy5hPSExfWZ1bmN0aW9uIEN2dCh0KXt0aGlzLmQ9dCxNdHQodGhpcyksdGhpcy5iPVF0bih0LmQpfWZ1bmN0aW9uIExLdCgpe3RoaXMuYT0iOyw7Iix0aGlzLmI9IiIsdGhpcy5jPSIifWZ1bmN0aW9uIGF0bih0LGUsbil7TVl0LmNhbGwodGhpcyxlLG4pLHRoaXMuYT10fWZ1bmN0aW9uIE1LdCh0LGUsbil7dGhpcy5iPXQsR1Z0LmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIF92dCh0LGUsbil7dGhpcy5jPXQsUlIuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gU3Z0KHQsZSxuKXtZNHQobiwwLHQsZSxuLmxlbmd0aCwhMSl9ZnVuY3Rpb24gR2QodCxlLG4scixzKXt0LmI9ZSx0LmM9bix0LmQ9cix0LmE9c31mdW5jdGlvbiBvdG4odCxlKXtlJiYodC5iPWUsdC5hPSgkcChlKSxlLmEpKX1mdW5jdGlvbiBBdnQodCxlLG4scixzKXt0LmQ9ZSx0LmM9bix0LmE9cix0LmI9c31mdW5jdGlvbiBMdnQodCl7dmFyIGUsbjtlPXQuYixuPXQuYyx0LmI9bix0LmM9ZX1mdW5jdGlvbiBNdnQodCl7dmFyIGUsbjtuPXQuZCxlPXQuYSx0LmQ9ZSx0LmE9bn1mdW5jdGlvbiBJdnQodCl7cmV0dXJuIFZwKGRlbihCbyh0KT9TaCh0KTp0KSl9ZnVuY3Rpb24gY3RuKHQsZSl7cmV0dXJuIGR1KFVLdCh0LmQpLFVLdChlLmQpKX1mdW5jdGlvbiB1dG4odCxlKXtyZXR1cm4gZT09KGJlKCksQm4pP3QuYzp0LmR9ZnVuY3Rpb24gZzgoKXtnOD1aLFhDdD0oYmUoKSxCbiksZ1Y9SG59ZnVuY3Rpb24gSUt0KCl7dGhpcy5iPVh0KHllKERlKChaZigpLFZ1dCkpKSl9ZnVuY3Rpb24gREt0KHQpe3JldHVybiBXYigpLFB0KFhuLEllLDEsdCw1LDEpfWZ1bmN0aW9uIGx0bih0KXtyZXR1cm4gbmV3ICRlKHQuYyt0LmIsdC5kK3QuYSl9ZnVuY3Rpb24gaHRuKHQsZSl7cmV0dXJuIExSKCksZHUodC5kLnAsZS5kLnApfWZ1bmN0aW9uIGtudCh0KXtyZXR1cm4gUW4odC5iIT0wKSxjaCh0LHQuYS5hKX1mdW5jdGlvbiBmdG4odCl7cmV0dXJuIFFuKHQuYiE9MCksY2godCx0LmMuYil9ZnVuY3Rpb24gRHZ0KHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IHpxdChlKSl9ZnVuY3Rpb24gX2oodCxlKXtpZighdCl0aHJvdyBydChuZXcgUG4oZSkpfWZ1bmN0aW9uIE92dCh0LGUsbil7YTguY2FsbCh0aGlzLHQsZSksdGhpcy5iPW59ZnVuY3Rpb24gV00odCxlLG4pe0tidC5jYWxsKHRoaXMsdCxlKSx0aGlzLmM9bn1mdW5jdGlvbiBPS3QodCxlLG4pe2xlZS5jYWxsKHRoaXMsZSxuKSx0aGlzLmQ9dH1mdW5jdGlvbiBOdnQodCl7ZHZ0KCksX2suY2FsbCh0aGlzKSx0aGlzLnRoKHQpfWZ1bmN0aW9uIE5LdCh0LGUsbil7dGhpcy5hPXQscTMuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gUEt0KHQsZSxuKXt0aGlzLmE9dCxxMy5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBTaih0LGUsbil7S2J0LmNhbGwodGhpcyx0LGUpLHRoaXMuYz1ufWZ1bmN0aW9uIEZLdCgpe0w4KCksSWVuLmNhbGwodGhpcywoTXAoKSxVaCkpfWZ1bmN0aW9uIEJLdCh0KXtyZXR1cm4gdCE9bnVsbCYmIUhpdCh0LGlBLHNBKX1mdW5jdGlvbiBkdG4odCxlKXtyZXR1cm4oVXJlKHQpPDw0fFVyZShlKSkmbXN9ZnVuY3Rpb24gZ3RuKHQsZSl7cmV0dXJuIFFqKCksaHN0KHQsZSksbmV3IGxYdCh0LGUpfWZ1bmN0aW9uIFliKHQsZSl7dmFyIG47dC5uJiYobj1lLHVlKHQuZixuKSl9ZnVuY3Rpb24gcDgodCxlLG4pe3ZhciByO3I9bmV3IEhtKG4pLFdmKHQsZSxyKX1mdW5jdGlvbiBwdG4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmMsWm10KHQsZSksbn1mdW5jdGlvbiBQdnQodCxlKXtyZXR1cm4gZTwwP3QuZz0tMTp0Lmc9ZSx0fWZ1bmN0aW9uIEFqKHQsZSl7cmV0dXJuIEphbih0KSx0LmEqPWUsdC5iKj1lLHR9ZnVuY3Rpb24gUkt0KHQsZSxuLHIscyl7dC5jPWUsdC5kPW4sdC5iPXIsdC5hPXN9ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gaHModCxlLHQuYy5iLHQuYyksITB9ZnVuY3Rpb24gRnZ0KHQpe3QuYS5iPXQuYix0LmIuYT10LmEsdC5hPXQuYj1udWxsfWZ1bmN0aW9uIEVudCh0KXt0aGlzLmI9dCx0aGlzLmE9UHYodGhpcy5iLmEpLkVkKCl9ZnVuY3Rpb24gakt0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWUsZjkuY2FsbCh0aGlzKX1mdW5jdGlvbiAkS3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZSxmOS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHpLdCh0LGUpe01ZdC5jYWxsKHRoaXMsZSwxMDQwKSx0aGlzLmE9dH1mdW5jdGlvbiBLTSh0KXtyZXR1cm4gdD09MHx8aXNOYU4odCk/dDp0PDA/LTE6MX1mdW5jdGlvbiBidG4odCl7cmV0dXJuIGp4KCksWmQodCk9PXRzKFhwKHQpKX1mdW5jdGlvbiB2dG4odCl7cmV0dXJuIGp4KCksWHAodCk9PXRzKFpkKHQpKX1mdW5jdGlvbiBOdih0LGUpe3JldHVybiBsXyh0LG5ldyBhOChlLmEsZS5iKSl9ZnVuY3Rpb24gd3RuKHQpe3JldHVybiFWYSh0KSYmdC5jLmkuYz09dC5kLmkuY31mdW5jdGlvbiBMaih0KXt2YXIgZTtyZXR1cm4gZT10Lm4sdC5hLmIrZS5kK2UuYX1mdW5jdGlvbiBxS3QodCl7dmFyIGU7cmV0dXJuIGU9dC5uLHQuZS5iK2UuZCtlLmF9ZnVuY3Rpb24gQnZ0KHQpe3ZhciBlO3JldHVybiBlPXQubix0LmUuYStlLmIrZS5jfWZ1bmN0aW9uIEhLdCh0KXtyZXR1cm4gZ2koKSxuZXcgVmQoMCx0KX1mdW5jdGlvbiBtdG4odCl7cmV0dXJuIHQuYT90LmE6cnJ0KHQpfWZ1bmN0aW9uIG1DKHQpe2lmKCF0KXRocm93IHJ0KG5ldyBYayhudWxsKSl9ZnVuY3Rpb24gR0t0KCl7R0t0PVosTGZ0PSh2bigpLG5ldyBEKGl1dCkpfWZ1bmN0aW9uIE1qKCl7TWo9WixuZXcgTjN0KChYdHQoKSxidXQpLChRdHQoKSxwdXQpKX1mdW5jdGlvbiBWS3QoKXtWS3Q9WixzRXQ9UHQoamEsdGUsMTksMjU2LDAsMSl9ZnVuY3Rpb24gVG50KHQsZSxuLHIpe3UzdC5jYWxsKHRoaXMsdCxlLG4sciwwLDApfWZ1bmN0aW9uIHl0bih0LGUsbil7cmV0dXJuIGtpKHQuYix1KG4uYiwxNyksZSl9ZnVuY3Rpb24geHRuKHQsZSxuKXtyZXR1cm4ga2kodC5iLHUobi5iLDE3KSxlKX1mdW5jdGlvbiBrdG4odCxlKXtyZXR1cm4gdWUodCxuZXcgJGUoZS5hLGUuYikpfWZ1bmN0aW9uIEV0bih0LGUpe3JldHVybiB0LmM8ZS5jPy0xOnQuYz09ZS5jPzA6MX1mdW5jdGlvbiBDbnQodCl7cmV0dXJuIHQuZS5jLmxlbmd0aCt0LmcuYy5sZW5ndGh9ZnVuY3Rpb24gVUt0KHQpe3JldHVybiB0LmUuYy5sZW5ndGgtdC5nLmMubGVuZ3RofWZ1bmN0aW9uIFdLdCh0KXtyZXR1cm4gdC5iLmMubGVuZ3RoLXQuZS5jLmxlbmd0aH1mdW5jdGlvbiBUdG4odCl7cmV0dXJuIE9sKCksKGJlKCksdXUpLkhjKHQuail9ZnVuY3Rpb24gS0t0KHQpe2R2dCgpLE52dC5jYWxsKHRoaXMsdCksdGhpcy5hPS0xfWZ1bmN0aW9uIElqKHQsZSl7RE0uY2FsbCh0aGlzLHQsZSksdGhpcy5hPXRoaXN9ZnVuY3Rpb24gWWkodCxlKXt2YXIgbjtyZXR1cm4gbj1VbnQodCxlKSxuLmk9MixufWZ1bmN0aW9uIERqKHQsZSl7dmFyIG47cmV0dXJuKyt0Lmosbj10LlRpKGUpLG59ZnVuY3Rpb24gYmkodCxlLG4pe3JldHVybiB0LmE9LTEsSTJ0KHQsZS5nLG4pLHR9ZnVuY3Rpb24gQ3RuKHQsZSxuKXtiNG4odC5hLHQuYix0LmMsdShlLDIwMiksbil9ZnVuY3Rpb24gX3RuKHQsZSl7dHl0KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gU3RuKHQsZSl7UW10KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gQXRuKHQsZSl7UW10KHQsZT09bnVsbD9udWxsOihPbihlKSxlKSl9ZnVuY3Rpb24gX250KHQsZSxuKXtyZXR1cm4gbmV3IHRLdChEZW4odCkuSWUoKSxuLGUpfWZ1bmN0aW9uIFhiKHQsZSxuLHIscyxvKXtyZXR1cm4gWnNlKHQsZSxuLHIscywwLG8pfWZ1bmN0aW9uIFlLdCgpe1lLdD1aLG5FdD1QdChFNix0ZSwyMTcsMjU2LDAsMSl9ZnVuY3Rpb24gWEt0KCl7WEt0PVosYUV0PVB0KFR3LHRlLDE2MiwyNTYsMCwxKX1mdW5jdGlvbiBRS3QoKXtRS3Q9Wix1RXQ9UHQoQ3csdGUsMTg0LDI1NiwwLDEpfWZ1bmN0aW9uIFpLdCgpe1pLdD1aLGlFdD1QdChhUyx0ZSwxNzIsMTI4LDAsMSl9ZnVuY3Rpb24gUnZ0KCl7R2QodGhpcywhMSwhMSwhMSwhMSl9ZnVuY3Rpb24gU250KHQpe0dtKCksdGhpcy5hPSh2bigpLG5ldyBEKEFyKHQpKSl9ZnVuY3Rpb24gT2oodCl7Zm9yKEFyKHQpO3QuT2IoKTspdC5QYigpLHQuUWIoKX1mdW5jdGlvbiBMdG4odCl7dC5hLmNkKCksdSh0LmEuZGQoKSwxNCkuZ2MoKSxYcHQoKX1mdW5jdGlvbiBqdnQodCl7dGhpcy5jPXQsdGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1mdW5jdGlvbiBKS3QodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBFeCh0aGlzLmMuYSl9ZnVuY3Rpb24geUModCl7dGhpcy5hPW5ldyBreCh0LmdjKCkpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gJHZ0KHQpe2t0LmNhbGwodGhpcyxuZXcgbjIpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gdFl0KHQsZSl7cmV0dXJuIHQuYSs9QWgoZSwwLGUubGVuZ3RoKSx0fWZ1bmN0aW9uIEZlKHQsZSl7cmV0dXJuIEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdfWZ1bmN0aW9uIGVZdCh0LGUpe3JldHVybiBBbihlLHQuYS5sZW5ndGgpLHQuYVtlXX1mdW5jdGlvbiBUbih0LGUpe1diKCksanJ0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBNdG4odCxlKXtyZXR1cm4gZzIoT2EoZzIodC5hKS5hLGUuYSkpfWZ1bmN0aW9uIEl0bih0LGUpe3JldHVybiBPbih0KSxTSSh0LChPbihlKSxlKSl9ZnVuY3Rpb24gRHRuKHQsZSl7cmV0dXJuIE9uKGUpLFNJKGUsKE9uKHQpLHQpKX1mdW5jdGlvbiBPdG4odCxlKXtyZXR1cm4gSmkoZSwwLHp2dChlWzBdLGcyKDEpKSl9ZnVuY3Rpb24genZ0KHQsZSl7cmV0dXJuIE10bih1KHQsMTYyKSx1KGUsMTYyKSl9ZnVuY3Rpb24gbll0KHQpe3JldHVybiB0LmMtdShGZSh0LmEsdC5iKSwyODcpLmJ9ZnVuY3Rpb24gcll0KHQpe3JldHVybiB0LnE/dC5xOih2bigpLHZuKCksYTApfWZ1bmN0aW9uIGlZdCh0KXtyZXR1cm4gdC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpfWZ1bmN0aW9uIE50bih0LGUsbil7cmV0dXJuIGR1KGUuZFt0LmddLG4uZFt0LmddKX1mdW5jdGlvbiBQdG4odCxlLG4pe3JldHVybiBkdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gRnRuKHQsZSxuKXtyZXR1cm4gZHUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIEJ0bih0LGUsbil7cmV0dXJuIGR1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBSdG4odCxlLG4pe3JldHVybiBkdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gcXZ0KHQsZSxuKXtyZXR1cm4gYi5NYXRoLm1pbihuL3QsMS9lKX1mdW5jdGlvbiBzWXQodCxlKXtyZXR1cm4gdD8wOmIuTWF0aC5tYXgoMCxlLTEpfWZ1bmN0aW9uIGp0bih0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0W25dPS0xfWZ1bmN0aW9uIGFZdCh0KXt2YXIgZTtyZXR1cm4gZT10YWUodCksZT9hWXQoZSk6dH1mdW5jdGlvbiAkdG4odCxlKXtyZXR1cm4gdC5hPT1udWxsJiZwdWUodCksdC5hW2VdfWZ1bmN0aW9uIHhsKHQpe3JldHVybiB0LmM/dC5jLmY6dC5lLmJ9ZnVuY3Rpb24gRnUodCl7cmV0dXJuIHQuYz90LmMuZzp0LmUuYX1mdW5jdGlvbiBOaih0KXtLdi5jYWxsKHRoaXMsdC5nYygpKSxycyh0aGlzLHQpfWZ1bmN0aW9uIFBqKHQsZSl7bmgoKSxvUi5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24geEModCxlLG4pe3RoaXMuYT10LFNzLmNhbGwodGhpcyxlLG4sMil9ZnVuY3Rpb24gRmoodCxlLG4scil7QXZ0KHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gVmQodCxlKXtnaSgpLHZ2LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBvWXQodCl7dGhpcy5iPW5ldyBRaSx0aGlzLmE9dCx0aGlzLmM9LTF9ZnVuY3Rpb24gY1l0KCl7dGhpcy5kPW5ldyAkZSgwLDApLHRoaXMuZT1uZXcgcXN9ZnVuY3Rpb24gdVl0KHQpe0QydC5jYWxsKHRoaXMsMCwwKSx0aGlzLmE9dCx0aGlzLmI9MH1mdW5jdGlvbiBsWXQodCl7dGhpcy5hPXQsdGhpcy5jPW5ldyBDcixJY24odGhpcyl9ZnVuY3Rpb24gSHZ0KHQpe2lmKHQuZS5jIT10LmIpdGhyb3cgcnQobmV3IGVoKX1mdW5jdGlvbiBHdnQodCl7aWYodC5jLmUhPXQuYSl0aHJvdyBydChuZXcgZWgpfWZ1bmN0aW9uIFNyKHQpe3JldHVybiBCbyh0KT90fDA6eEh0KHQpfWZ1bmN0aW9uIEJqKHQsZSl7cmV0dXJuIGdpKCksbmV3IGZ3dCh0LGUpfWZ1bmN0aW9uIEFudCh0LGUpe3JldHVybiB0PT1udWxsP2U9PW51bGw6aG4odCxlKX1mdW5jdGlvbiB6dG4odCxlKXtyZXR1cm4gdD09bnVsbD9lPT1udWxsOk96KHQsZSl9ZnVuY3Rpb24gTngodCxlLG4pe3JldHVybiBwZih0LmEsZSksY3d0KHQsZS5nLG4pfWZ1bmN0aW9uIExudCh0LGUsbil7eXJlKDAsZSx0Lmxlbmd0aCksRDgodCwwLGUsbil9ZnVuY3Rpb24gJG0odCxlLG4pe1VtKGUsdC5jLmxlbmd0aCksVzkodC5jLGUsbil9ZnVuY3Rpb24gaFl0KHQsZSxuKXt2YXIgcjtmb3Iocj0wO3I8ZTsrK3IpdFtyXT1ufWZ1bmN0aW9uIGppKHQsZSl7dmFyIG47cmV0dXJuIG49dW4odCksX3l0KG4sZSksbn1mdW5jdGlvbiBxdG4odCxlKXtyZXR1cm4hdCYmKHQ9W10pLHRbdC5sZW5ndGhdPWUsdH1mdW5jdGlvbiBIdG4odCxlKXtyZXR1cm4gdC5hLmdldChlKSE9PXZvaWQgMH1mdW5jdGlvbiBmWXQodCxlKXtyZXR1cm4gdm9uKG5ldyBPbyxuZXcgS3QodCksZSl9ZnVuY3Rpb24gR3RuKHQpe3JldHVybiB0PT1udWxsP1dIOm5ldyBnUihPbih0KSl9ZnVuY3Rpb24gTW50KHQsZSl7cmV0dXJuIEV0KGUsMjIpJiZOdSh0LHUoZSwyMikpfWZ1bmN0aW9uIGRZdCh0LGUpe3JldHVybiBFdChlLDIyKSYmV2FuKHQsdShlLDIyKSl9ZnVuY3Rpb24gVnZ0KHQpe3JldHVybiBvbCh0LDI2KSpMXytvbCh0LDI3KSpNX31mdW5jdGlvbiBVdnQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdH1mdW5jdGlvbiBSaih0KXt0LmI/UmoodC5iKTp0LmQuZGMoKSYmdC5mLmMuQmModC5lKX1mdW5jdGlvbiBJbnQodCxlKXtMaSh0LmMsZSksdC5iLmMrPWUuYSx0LmIuZCs9ZS5ifWZ1bmN0aW9uIFZ0bih0LGUpe0ludCh0LG5hKG5ldyAkZShlLmEsZS5iKSx0LmMpKX1mdW5jdGlvbiBEbnQodCxlKXt0aGlzLmI9bmV3IFFpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIGdZdCgpe3RoaXMuYj1uZXcgU2MsdGhpcy5jPW5ldyBWWHQodGhpcyl9ZnVuY3Rpb24gV3Z0KCl7dGhpcy5kPW5ldyBMdSx0aGlzLmU9bmV3IEdYdCh0aGlzKX1mdW5jdGlvbiBLdnQoKXtqd3QoKSx0aGlzLmY9bmV3IFFpLHRoaXMuZT1uZXcgUWl9ZnVuY3Rpb24gcFl0KCl7T2woKSx0aGlzLms9bmV3IENyLHRoaXMuZD1uZXcgcXN9ZnVuY3Rpb24gT250KCl7T250PVosUzRlPW5ldyBlbygoY2koKSxobCksMCl9ZnVuY3Rpb24gYll0KCl7Yll0PVosZmdlPW5ldyB1WXQoUHQoWG4sSWUsMSwwLDUsMSkpfWZ1bmN0aW9uIFV0bih0LGUsbil7Y2NlKG4sdCwxKSx1ZShlLG5ldyAkR3Qobix0KSl9ZnVuY3Rpb24gV3RuKHQsZSxuKXtjXyhuLHQsMSksdWUoZSxuZXcgV0d0KG4sdCkpfWZ1bmN0aW9uIEt0bih0LGUsbil7cmV0dXJuIE5zKHQsbmV3IFR4KGUuYSxuLmEpKX1mdW5jdGlvbiBZdG4odCxlLG4pe3JldHVybi1kdSh0LmZbZS5wXSx0LmZbbi5wXSl9ZnVuY3Rpb24gamoodCxlLG4pe3ZhciByO3QmJihyPXQuaSxyLmM9ZSxyLmI9bil9ZnVuY3Rpb24gJGoodCxlLG4pe3ZhciByO3QmJihyPXQuaSxyLmQ9ZSxyLmE9bil9ZnVuY3Rpb24gS3UodCxlLG4pe3JldHVybiB0LmE9LTEsSTJ0KHQsZS5nKzEsbiksdH1mdW5jdGlvbiBZdnQodCxlLG4pe3JldHVybiBuPXpsKHQsdShlLDQ5KSw3LG4pLG59ZnVuY3Rpb24gWHZ0KHQsZSxuKXtyZXR1cm4gbj16bCh0LHUoZSw0OSksMyxuKSxufWZ1bmN0aW9uIHZZdCh0LGUsbil7dGhpcy5hPXQsaGouY2FsbCh0aGlzLGUsbiwyMil9ZnVuY3Rpb24gd1l0KHQsZSxuKXt0aGlzLmE9dCxoai5jYWxsKHRoaXMsZSxuLDE0KX1mdW5jdGlvbiBtWXQodCxlLG4scil7bmgoKSxKUXQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIHlZdCh0LGUsbixyKXtuaCgpLEpRdC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gWHRuKHQsZSl7ZS5CYiZkYyYmIXQuYS5vJiYodC5hLm89ZSl9ZnVuY3Rpb24geFl0KHQpe3JldHVybiB0IT1udWxsJiZ6bnQodCkmJnQuaW0hPT1DdH1mdW5jdGlvbiBRdnQodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdH1mdW5jdGlvbiBRdG4odCl7cmV0dXJuIEV0KHQsMTUpP3UodCwxNSkuWWMoKTp0LktjKCl9ZnVuY3Rpb24gWnZ0KHQpe3JldHVybiB0LlFjKFB0KFhuLEllLDEsdC5nYygpLDUsMSkpfWZ1bmN0aW9uIGtDKHQsZSl7cmV0dXJuIGhobihtSSh0LGUpKT9lLlFoKCk6bnVsbH1mdW5jdGlvbiBKdnQodCl7dD9IM3QodCwocWQoKSxoRXQpKTpxZCgpfWZ1bmN0aW9uIGFyKHQpe3RoaXMuYT0oYll0KCksZmdlKSx0aGlzLmQ9dShBcih0KSw0Nyl9ZnVuY3Rpb24gdHd0KHQsZSxuLHIpe3RoaXMuYT10LEkkLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBRYih0KXtJcCgpLHRoaXMuYT0wLHRoaXMuYj10LTEsdGhpcy5jPTF9ZnVuY3Rpb24ga1l0KHQpe3VqKHRoaXMpLHRoaXMuZz10LG4kKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBQdih0KXtyZXR1cm4gdC5jP3QuYzp0LmM9dC5JZCgpfWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gdC5kP3QuZDp0LmQ9dC5KZCgpfWZ1bmN0aW9uIGV3dCh0KXt2YXIgZTtyZXR1cm4gZT10LmMsZXx8KHQuYz10LkRkKCkpfWZ1bmN0aW9uIEVZdCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj10LkRjKCkpfWZ1bmN0aW9uIFB4KHQpe3ZhciBlO3JldHVybiBlPXQuaSxlfHwodC5pPXQuYmMoKSl9ZnVuY3Rpb24gVFl0KHQpe3JldHVybiBnaSgpLG5ldyBocnQoMTAsdCwwKX1mdW5jdGlvbiBFQyh0KXtyZXR1cm4gQm8odCk/IiIrdDp1dWUodCl9ZnVuY3Rpb24gemoodCl7aWYodC5lLmohPXQuZCl0aHJvdyBydChuZXcgZWgpfWZ1bmN0aW9uIE0wKHQsZSl7cmV0dXJuIFZwKE1hZShCbyh0KT9TaCh0KTp0LGUpKX1mdW5jdGlvbiBGcCh0LGUpe3JldHVybiBWcChoNXQoQm8odCk/U2godCk6dCxlKSl9ZnVuY3Rpb24gem0odCxlKXtyZXR1cm4gVnAoSjBuKEJvKHQpP1NoKHQpOnQsZSkpfWZ1bmN0aW9uIFp0bih0LGUpe3JldHVybiBNUWUoKE9uKHQpLHQpLChPbihlKSxlKSl9ZnVuY3Rpb24gUG50KHQsZSl7cmV0dXJuIExzKChPbih0KSx0KSwoT24oZSksZSkpfWZ1bmN0aW9uIENZdCh0LGUpe3JldHVybiBBcihlKSx0LmEuQWQoZSkmJiF0LmIuQWQoZSl9ZnVuY3Rpb24gSnRuKHQsZSl7cmV0dXJuIHJ1KHQubCZlLmwsdC5tJmUubSx0LmgmZS5oKX1mdW5jdGlvbiB0ZW4odCxlKXtyZXR1cm4gcnUodC5sfGUubCx0Lm18ZS5tLHQuaHxlLmgpfWZ1bmN0aW9uIGVlbih0LGUpe3JldHVybiBydSh0LmxeZS5sLHQubV5lLm0sdC5oXmUuaCl9ZnVuY3Rpb24gcWoodCxlKXtyZXR1cm4gcUkodCwoT24oZSksbmV3IER0KGUpKSl9ZnVuY3Rpb24gSGoodCxlKXtyZXR1cm4gcUkodCwoT24oZSksbmV3IGp0KGUpKSl9ZnVuY3Rpb24gX1l0KHQpe3JldHVybiBCdSgpLHUodCwxMSkuZS5jLmxlbmd0aCE9MH1mdW5jdGlvbiBTWXQodCl7cmV0dXJuIEJ1KCksdSh0LDExKS5nLmMubGVuZ3RoIT0wfWZ1bmN0aW9uIG5lbih0LGUpe3JldHVybiBYeCgpLExzKGUuYS5vLmEsdC5hLm8uYSl9ZnVuY3Rpb24gQVl0KHQsZSxuKXtyZXR1cm4gajRuKHQsdShlLDExKSx1KG4sMTEpKX1mdW5jdGlvbiByZW4odCl7cmV0dXJuIHQuZT93bXQodC5lKTpudWxsfWZ1bmN0aW9uIG53dCh0KXt0LmR8fCh0LmQ9dC5iLktjKCksdC5jPXQuYi5nYygpKX1mdW5jdGlvbiBpZW4odCxlLG4pe3QuYS5NYihuKSYmKHQuYj0hMCxlLnRkKG4pKX1mdW5jdGlvbiBiOCh0LGUpe2lmKHQ8MHx8dD49ZSl0aHJvdyBydChuZXcgX3B0KX1mdW5jdGlvbiBzZW4odCxlLG4pe3JldHVybiBKaShlLDAsenZ0KGVbMF0sblswXSkpLGV9ZnVuY3Rpb24gYWVuKHQsZSxuKXtlLlllKG4sWHQoeWUoSm4odC5iLG4pKSkqdC5hKX1mdW5jdGlvbiBMWXQodCxlLG4pe3JldHVybiB5NCgpLEg4KHQsZSkmJkg4KHQsbil9ZnVuY3Rpb24gVEModCl7cmV0dXJuIFF1KCksIXQuSGModGcpJiYhdC5IYyh4Yil9ZnVuY3Rpb24gR2oodCl7cmV0dXJuIG5ldyAkZSh0LmMrdC5iLzIsdC5kK3QuYS8yKX1mdW5jdGlvbiBGbnQodCxlKXtyZXR1cm4gZS5raCgpP0twKHQuYix1KGUsNDkpKTplfWZ1bmN0aW9uIHJ3dCh0LGUpe3RoaXMuZT10LHRoaXMuZD1lJjY0P2V8YmQ6ZX1mdW5jdGlvbiBNWXQodCxlKXt0aGlzLmM9MCx0aGlzLmQ9dCx0aGlzLmI9ZXw2NHxiZH1mdW5jdGlvbiBWaih0KXt0aGlzLmI9bmV3IFljKDExKSx0aGlzLmE9KFgzKCksdCl9ZnVuY3Rpb24gQm50KHQpe3RoaXMuYj1udWxsLHRoaXMuYT0oWDMoKSx0fHxtRXQpfWZ1bmN0aW9uIElZdCh0KXt0aGlzLmE9dHNlKHQuYSksdGhpcy5iPW5ldyBQdSh0LmIpfWZ1bmN0aW9uIERZdCh0KXt0aGlzLmI9dCxMeC5jYWxsKHRoaXMsdCksUFV0KHRoaXMpfWZ1bmN0aW9uIE9ZdCh0KXt0aGlzLmI9dCxQTS5jYWxsKHRoaXMsdCksRlV0KHRoaXMpfWZ1bmN0aW9uIHFtKHQsZSxuKXt0aGlzLmE9dCxJeC5jYWxsKHRoaXMsZSxuLDUsNil9ZnVuY3Rpb24gaXd0KHQsZSxuLHIpe3RoaXMuYj10LFNzLmNhbGwodGhpcyxlLG4scil9ZnVuY3Rpb24gUXModCxlLG4scixzKXtxcnQuY2FsbCh0aGlzLHQsZSxuLHIscywtMSl9ZnVuY3Rpb24gQ0ModCxlLG4scixzKXtnSS5jYWxsKHRoaXMsdCxlLG4scixzLC0xKX1mdW5jdGlvbiBoZSh0LGUsbixyKXtTcy5jYWxsKHRoaXMsdCxlLG4pLHRoaXMuYj1yfWZ1bmN0aW9uIFVqKHQsZSxuLHIpe1dNLmNhbGwodGhpcyx0LGUsbiksdGhpcy5iPXJ9ZnVuY3Rpb24gTll0KHQpe0JWdC5jYWxsKHRoaXMsdCwhMSksdGhpcy5hPSExfWZ1bmN0aW9uIFBZdCh0LGUpe3RoaXMuYj10LGF0dC5jYWxsKHRoaXMsdC5iKSx0aGlzLmE9ZX1mdW5jdGlvbiBGWXQodCxlKXtHbSgpLHVZZS5jYWxsKHRoaXMsdCx5eihuZXcgd2woZSkpKX1mdW5jdGlvbiBXaih0LGUpe3JldHVybiBnaSgpLG5ldyB3d3QodCxlLDApfWZ1bmN0aW9uIFJudCh0LGUpe3JldHVybiBnaSgpLG5ldyB3d3QoNix0LGUpfWZ1bmN0aW9uIG9lbih0LGUpe3JldHVybiBobih0LnN1YnN0cigwLGUubGVuZ3RoKSxlKX1mdW5jdGlvbiBrbCh0LGUpe3JldHVybiBlYShlKT9hcnQodCxlKTohIUFvKHQuZixlKX1mdW5jdGlvbiBwYSh0LGUpe2ZvcihPbihlKTt0Lk9iKCk7KWUudGQodC5QYigpKX1mdW5jdGlvbiBLMyh0LGUsbil7SnAoKSx0aGlzLmU9dCx0aGlzLmQ9ZSx0aGlzLmE9bn1mdW5jdGlvbiBfZyh0LGUsbixyKXt2YXIgcztzPXQuaSxzLmk9ZSxzLmE9bixzLmI9cn1mdW5jdGlvbiBzd3QodCl7dmFyIGU7Zm9yKGU9dDtlLmY7KWU9ZS5mO3JldHVybiBlfWZ1bmN0aW9uIEZ4KHQpe3ZhciBlO3JldHVybiBlPUtDKHQpLFFuKGUhPW51bGwpLGV9ZnVuY3Rpb24gY2VuKHQpe3ZhciBlO3JldHVybiBlPVd1bih0KSxRbihlIT1udWxsKSxlfWZ1bmN0aW9uIHY4KHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdjKCksYm10KGUsbiksbi1lfWZ1bmN0aW9uIGF3dCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0W25dPSExfWZ1bmN0aW9uIHVlbih0LGUsbixyKXt2YXIgcztmb3Iocz1lO3M8bjsrK3MpdFtzXT1yfWZ1bmN0aW9uIFJ0KHQsZSxuLHIpe3lyZShlLG4sdC5sZW5ndGgpLHVlbih0LGUsbixyKX1mdW5jdGlvbiBsZW4odCxlLG4pe2I4KG4sdC5hLmMubGVuZ3RoKSxhaCh0LmEsbixlKX1mdW5jdGlvbiBvd3QodCxlLG4pe3RoaXMuYz10LHRoaXMuYT1lLHZuKCksdGhpcy5iPW59ZnVuY3Rpb24gY3d0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmJbZV0sdC5iW2VdPW4scn1mdW5jdGlvbiBOcyh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS56YyhlLHQpLG49PW51bGx9ZnVuY3Rpb24gaGVuKHQpe2lmKCF0KXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHQuZH1mdW5jdGlvbiB1d3QodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eChlKSl9ZnVuY3Rpb24gbHd0KHQsZSl7cmV0dXJuIGU/VWEodCxlKTohMX1mdW5jdGlvbiBVZCh0LGUsbil7cmV0dXJuIHN1bih0LGUuZyxuKSxwZih0LmMsZSksdH1mdW5jdGlvbiBmZW4odCl7cmV0dXJuIFQ0KHQsKGFvKCksamgpKSx0LmQ9ITAsdH1mdW5jdGlvbiBqbnQodCl7cmV0dXJuIXQuaiYmQXR0KHQsSXduKHQuZyx0LmIpKSx0Lmp9ZnVuY3Rpb24gX0ModCl7UG0odC5iIT0tMSksQWcodC5jLHQuYT10LmIpLHQuYj0tMX1mdW5jdGlvbiBZdSh0KXt0LmY9bmV3IHNVdCh0KSx0Lmc9bmV3IGFVdCh0KSxhJCh0KX1mdW5jdGlvbiAkbnQodCl7cmV0dXJuIG5ldyBUbihudWxsLHZlbih0LHQubGVuZ3RoKSl9ZnVuY3Rpb24gQnAodCl7cmV0dXJuIG5ldyBhcihuZXcgdzJ0KHQuYS5sZW5ndGgsdC5hKSl9ZnVuY3Rpb24gZGVuKHQpe3JldHVybiBydSh+dC5sJnVsLH50Lm0mdWwsfnQuaCZXMCl9ZnVuY3Rpb24gem50KHQpe3JldHVybiB0eXBlb2YgdD09PUNEfHx0eXBlb2YgdD09PU5hdH1mdW5jdGlvbiBnZW4odCl7cmV0dXJuIHQ9PXNzP25POnQ9PVRzPyItSU5GIjoiIit0fWZ1bmN0aW9uIHBlbih0KXtyZXR1cm4gdD09c3M/bk86dD09VHM/Ii1JTkYiOiIiK3R9ZnVuY3Rpb24gYmVuKHQsZSl7cmV0dXJuIHQ+MD9iLk1hdGgubG9nKHQvZSk6LTEwMH1mdW5jdGlvbiBCWXQodCxlKXtyZXR1cm4geWModCxlKTwwPy0xOnljKHQsZSk+MD8xOjB9ZnVuY3Rpb24gaHd0KHQsZSxuKXtyZXR1cm4gQWxlKHQsdShlLDQ2KSx1KG4sMTY3KSl9ZnVuY3Rpb24gUll0KHQsZSl7cmV0dXJuIHUoZXd0KFB2KHQuYSkpLlhiKGUpLDQyKS5jZCgpfWZ1bmN0aW9uIHZlbih0LGUpe3JldHVybiAkYW4oZSx0Lmxlbmd0aCksbmV3IHpLdCh0LGUpfWZ1bmN0aW9uIHFudCh0LGUpe3RoaXMuZD10LGVyLmNhbGwodGhpcyx0KSx0aGlzLmU9ZX1mdW5jdGlvbiBGdih0KXt0aGlzLmQ9KE9uKHQpLHQpLHRoaXMuYT0wLHRoaXMuYz1JcX1mdW5jdGlvbiBmd3QodCxlKXt2di5jYWxsKHRoaXMsMSksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gall0KHQsZSl7cmV0dXJuIHQuYz9qWXQodC5jLGUpOnVlKHQuYixlKSx0fWZ1bmN0aW9uIHdlbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9WG0odCxlKSxfcnQodCxlLG4pLHJ9ZnVuY3Rpb24gZHd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5zbGljZSgwLGUpLE1tdChuLHQpfWZ1bmN0aW9uICRZdCh0LGUsbil7dmFyIHI7Zm9yKHI9MDtyPGU7KytyKUppKHQscixuKX1mdW5jdGlvbiB6WXQodCxlLG4scixzKXtmb3IoO2U8bjspcltzKytdPWJhKHQsZSsrKX1mdW5jdGlvbiBtZW4odCxlKXtyZXR1cm4gTHModC5jLmMrdC5jLmIsZS5jLmMrZS5jLmIpfWZ1bmN0aW9uIFlNKHQsZSl7cmV0dXJuIHB6KHQuYSxlLChGbigpLEkyKSk9PW51bGx9ZnVuY3Rpb24gWE0odCxlKXtocyh0LmQsZSx0LmIuYix0LmIpLCsrdC5hLHQuYz1udWxsfWZ1bmN0aW9uIFFNKHQsZSl7SVV0KHQsRXQoZSwxNTMpP2U6dShlLDE5MzcpLmdsKCkpfWZ1bmN0aW9uIEJ2KHQsZSl7dXMocHUodC5PYygpLG5ldyBIVCksbmV3IEZ0dChlKSl9ZnVuY3Rpb24gdzgodCxlLG4scixzKXtDc3QodCx1KEFpKGUuayxuKSwxNSksbixyLHMpfWZ1bmN0aW9uIEtqKHQpe3Qucz1OYU4sdC5jPU5hTixLb2UodCx0LmUpLEtvZSh0LHQuail9ZnVuY3Rpb24gcVl0KHQpe3QuYT1udWxsLHQuZT1udWxsLFl1KHQuYiksdC5kPTAsKyt0LmN9ZnVuY3Rpb24gSG50KHQpe3JldHVybiBiLk1hdGguYWJzKHQuZC5lLXQuZS5lKS10LmF9ZnVuY3Rpb24geWVuKHQsZSxuKXtyZXR1cm4gdSh0LmMuX2MoZSx1KG4sMTMzKSksNDIpfWZ1bmN0aW9uIHhlbigpe3JldHVybiBkUigpLGN0KG90KGRnZSwxKSxhZSw1MzgsMCxbbXV0XSl9ZnVuY3Rpb24ga2VuKHQpe3JldHVybiBqeCgpLHRzKFpkKHQpKT09dHMoWHAodCkpfWZ1bmN0aW9uIEhZdCh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9dCx1ZSh0LmEsdGhpcyl9ZnVuY3Rpb24gR250KHQsZSl7dGhpcy5kPUt1bih0KSx0aGlzLmM9ZSx0aGlzLmE9LjUqZX1mdW5jdGlvbiBHWXQoKXtuMi5jYWxsKHRoaXMpLHRoaXMuYT0hMCx0aGlzLmI9ITB9ZnVuY3Rpb24gWm4odCl7cmV0dXJuKHQuaT09bnVsbCYmcGQodCksdC5pKS5sZW5ndGh9ZnVuY3Rpb24gVll0KHQpe3JldHVybiBFdCh0LDk5KSYmKHUodCwxOCkuQmImZGMpIT0wfWZ1bmN0aW9uIEVlbih0LGUpeysrdC5qLFNzdCh0LHQuaSxlKSxocG4odCx1KGUsMzMyKSl9ZnVuY3Rpb24gVm50KHQsZSl7cmV0dXJuIGU9dC5uayhudWxsLGUpLGZhZSh0LG51bGwsZSl9ZnVuY3Rpb24gcnModCxlKXtyZXR1cm4gdC5oaSgpJiYoZT1nUXQodCxlKSksdC5XaChlKX1mdW5jdGlvbiBQKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1VbnQodCxlKSxOZWUobixyKSxyfWZ1bmN0aW9uIFVudCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBreXQsbi5qPXQsbi5kPWUsbn1mdW5jdGlvbiBBcih0KXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyBMOSk7cmV0dXJuIHR9ZnVuY3Rpb24gV250KHQpe3ZhciBlO3JldHVybiBlPXQuaixlfHwodC5qPW5ldyBsdHQodCkpfWZ1bmN0aW9uIFVZdCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj1uZXcgdjJ0KHQpKX1mdW5jdGlvbiBnd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5rLGV8fCh0Lms9bmV3IE0zKHQpKX1mdW5jdGlvbiBZaih0KXt2YXIgZTtyZXR1cm4gZT10LmssZXx8KHQuaz1uZXcgTTModCkpfWZ1bmN0aW9uIFNDKHQpe3ZhciBlO3JldHVybiBlPXQuZyxlfHwodC5nPW5ldyBRTCh0KSl9ZnVuY3Rpb24gVGVuKHQpe3ZhciBlO3JldHVybiBlPXQuaSxlfHwodC5pPW5ldyBudHQodCkpfWZ1bmN0aW9uIEtudCh0KXt2YXIgZTtyZXR1cm4gZT10LmQsZXx8KHQuZD1uZXcgY3godCkpfWZ1bmN0aW9uIFdZdCh0KXtyZXR1cm4gQXIodCksRXQodCw0NzUpP3UodCw0NzUpOiRvKHQpfWZ1bmN0aW9uIHB3dCh0KXtyZXR1cm4gRXQodCw2MDcpP3Q6bmV3IG5RdCh0KX1mdW5jdGlvbiBLWXQodCxlKXtyZXR1cm4gb0koZSx0LmMuYi5jLmdjKCkpLG5ldyBVSHQodCxlKX1mdW5jdGlvbiBZWXQodCxlLG4pe3JldHVybiBnaSgpLG5ldyBHUXQodCxlLG4pfWZ1bmN0aW9uIEppKHQsZSxuKXtyZXR1cm4gaVFlKG49PW51bGx8fGRtbih0LG4pKSx0W2VdPW59ZnVuY3Rpb24gYnd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdjKCksb0koZSxuKSxuLTEtZX1mdW5jdGlvbiBtOCh0LGUpe3JldHVybiB0LmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksdH1mdW5jdGlvbiBScCh0LGUpe3JldHVybiB0LmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksdH1mdW5jdGlvbiBZbnQodCxlKXtmb3IoT24oZSk7dC5jPHQuZDspdC56ZShlLHQuYysrKX1mdW5jdGlvbiBKbih0LGUpe3JldHVybiBlYShlKT9GYyh0LGUpOmVjKEFvKHQuZixlKSl9ZnVuY3Rpb24gQ2VuKHQsZSl7cmV0dXJuIGp4KCksdD09WmQoZSk/WHAoZSk6WmQoZSl9ZnVuY3Rpb24gX2VuKHQsZSl7QngodCxuZXcgSG0oZS5mIT1udWxsP2UuZjoiIitlLmcpKX1mdW5jdGlvbiBTZW4odCxlKXtCeCh0LG5ldyBIbShlLmYhPW51bGw/ZS5mOiIiK2UuZykpfWZ1bmN0aW9uIFhZdCh0KXt0aGlzLmI9bmV3IGxlLHRoaXMuYT1uZXcgbGUsdGhpcy5jPXR9ZnVuY3Rpb24gQ2godCl7dGhpcy5jPW5ldyBUYSx0aGlzLmE9bmV3IGxlLHRoaXMuYj10fWZ1bmN0aW9uIFFZdCh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9bmV3IFRhLHRoaXMuYz10fWZ1bmN0aW9uIEhtKHQpe2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IEw5KTt0aGlzLmE9dH1mdW5jdGlvbiBaWXQodCl7Q3B0KCksdGhpcy5iPW5ldyBsZSx0aGlzLmE9dCxUM24odGhpcyx0KX1mdW5jdGlvbiBKWXQodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBRaSx0aGlzLmI9bmV3IFFpfWZ1bmN0aW9uIHRYdCgpe3RYdD1aLHdnZT1uZXcgcWsoITEpLG1nZT1uZXcgcWsoITApfWZ1bmN0aW9uIEdtKCl7R209WixoZCgpLHZ1dD1uZXcgb3J0KCh2bigpLHZuKCksaW8pKX1mdW5jdGlvbiBYbnQoKXtYbnQ9WixoZCgpLEs4dD1uZXcgeWJ0KCh2bigpLHZuKCksVUgpKX1mdW5jdGlvbiBqcCgpe2pwPVosTG49bHBuKCksZG4oKSx0MyYmdjFuKCl9ZnVuY3Rpb24gQWVuKHQsZSl7cmV0dXJuIFh4KCksdShnbyh0LGUuZCksMTUpLkZjKGUpfWZ1bmN0aW9uIExlbih0LGUsbixyKXtyZXR1cm4gbj09MHx8KG4tcikvbjx0LmV8fGU+PXQuZ31mdW5jdGlvbiBRbnQodCxlLG4pe3ZhciByO3JldHVybiByPWNpdCh0LGUsbiksejV0KHQscil9ZnVuY3Rpb24gQngodCxlKXt2YXIgbjtuPXQuYS5sZW5ndGgsWG0odCxuKSxfcnQodCxuLGUpfWZ1bmN0aW9uIGVYdCh0LGUpe3ZhciBuO249Y29uc29sZVt0XSxuLmNhbGwoY29uc29sZSxlKX1mdW5jdGlvbiBuWHQodCxlKXt2YXIgbjsrK3QuaixuPXQuVmkoKSx0LklpKHQub2kobixlKSl9ZnVuY3Rpb24gTWVuKHQsZSxuKXt1KGUuYiw2NSksbXUoZS5hLG5ldyB5dnQodCxuLGUpKX1mdW5jdGlvbiB2d3QodCxlLG4pe29SLmNhbGwodGhpcyxlKSx0aGlzLmE9dCx0aGlzLmI9bn1mdW5jdGlvbiB3d3QodCxlLG4pe3Z2LmNhbGwodGhpcyx0KSx0aGlzLmE9ZSx0aGlzLmI9bn1mdW5jdGlvbiBtd3QodCxlLG4pe3RoaXMuYT10LHdwdC5jYWxsKHRoaXMsZSksdGhpcy5iPW59ZnVuY3Rpb24gclh0KHQsZSxuKXt0aGlzLmE9dCxZd3QuY2FsbCh0aGlzLDgsZSxudWxsLG4pfWZ1bmN0aW9uIEllbih0KXt0aGlzLmE9KE9uKEtyKSxLciksdGhpcy5iPXQsbmV3IGpwdH1mdW5jdGlvbiBpWHQodCl7dGhpcy5jPXQsdGhpcy5iPXRoaXMuYy5hLHRoaXMuYT10aGlzLmMuZX1mdW5jdGlvbiB5d3QodCl7dGhpcy5jPXQsdGhpcy5iPXQuYS5kLmEsejJ0KHQuYS5lLHRoaXMpfWZ1bmN0aW9uIEVsKHQpe1BtKHQuYyE9LTEpLHQuZC4kYyh0LmMpLHQuYj10LmMsdC5jPS0xfWZ1bmN0aW9uIEFDKHQpe3JldHVybiBiLk1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpfWZ1bmN0aW9uIFJ2KHQsZSl7cmV0dXJuIGI4KGUsdC5hLmMubGVuZ3RoKSxGZSh0LmEsZSl9ZnVuY3Rpb24gZmQodCxlKXtyZXR1cm4gR3QodCk9PT1HdChlKXx8dCE9bnVsbCYmeWkodCxlKX1mdW5jdGlvbiBEZW4odCl7cmV0dXJuIDA+PXQ/bmV3IGZidDp3b24odC0xKX1mdW5jdGlvbiBPZW4odCl7cmV0dXJuIG4zP2FydChuMyx0KTohMX1mdW5jdGlvbiBzWHQodCl7cmV0dXJuIHQ/dC5kYygpOiF0LktjKCkuT2IoKX1mdW5jdGlvbiBGYSh0KXtyZXR1cm4hdC5hJiZ0LmM/dC5jLmI6dC5hfWZ1bmN0aW9uIE5lbih0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyBTcyhrYix0LDQpKSx0LmF9ZnVuY3Rpb24ganYodCl7cmV0dXJuIXQuZCYmKHQuZD1uZXcgU3MoaG8sdCwxKSksdC5kfWZ1bmN0aW9uIE9uKHQpe2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IEw5KTtyZXR1cm4gdH1mdW5jdGlvbiBMQyh0KXt0LmM/dC5jLkhlKCk6KHQuZD0hMCxqMm4odCkpfWZ1bmN0aW9uICRwKHQpe3QuYz8kcCh0LmMpOihkMih0KSx0LmQ9ITApfWZ1bmN0aW9uIGFYdCh0KXtUd3QodC5hKSx0LmI9UHQoWG4sSWUsMSx0LmIubGVuZ3RoLDUsMSl9ZnVuY3Rpb24gUGVuKHQsZSl7cmV0dXJuIGR1KGUuai5jLmxlbmd0aCx0LmouYy5sZW5ndGgpfWZ1bmN0aW9uIEZlbih0LGUpe3QuYzwwfHx0LmIuYjx0LmM/S2IodC5iLGUpOnQuYS5fZShlKX1mdW5jdGlvbiBCZW4odCxlKXt2YXIgbjtuPXQuWWcoZSksbj49MD90LkJoKG4pOlE0dCh0LGUpfWZ1bmN0aW9uIG9YdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuYy5pLmMsbj10LmQuaS5jLGU9PW59ZnVuY3Rpb24gUmVuKHQpe2lmKHQucCE9NCl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmV9ZnVuY3Rpb24gamVuKHQpe2lmKHQucCE9Myl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmV9ZnVuY3Rpb24gJGVuKHQpe2lmKHQucCE9Nil0aHJvdyBydChuZXcgSXUpO3JldHVybiB0LmZ9ZnVuY3Rpb24gemVuKHQpe2lmKHQucCE9Nil0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmt9ZnVuY3Rpb24gcWVuKHQpe2lmKHQucCE9Myl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmp9ZnVuY3Rpb24gSGVuKHQpe2lmKHQucCE9NCl0aHJvdyBydChuZXcgSXUpO3JldHVybiB0Lmp9ZnVuY3Rpb24geHd0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IGNSKG5ldyBZdHQpKSx0LmJ9ZnVuY3Rpb24gJHYodCl7cmV0dXJuIHQuYz09LTImJlZrKHQsbzBuKHQuZyx0LmIpKSx0LmN9ZnVuY3Rpb24geTgodCxlKXt2YXIgbjtyZXR1cm4gbj1VbnQoIiIsdCksbi5uPWUsbi5pPTEsbn1mdW5jdGlvbiBHZW4odCxlKXtJbnQodShlLmIsNjUpLHQpLG11KGUuYSxuZXcgSnIodCkpfWZ1bmN0aW9uIFZlbih0LGUpe01yKCghdC5hJiYodC5hPW5ldyAkTSh0LHQpKSx0LmEpLGUpfWZ1bmN0aW9uIGNYdCh0LGUpe3RoaXMuYj10LHFudC5jYWxsKHRoaXMsdCxlKSxQVXQodGhpcyl9ZnVuY3Rpb24gdVh0KHQsZSl7dGhpcy5iPXQsbHZ0LmNhbGwodGhpcyx0LGUpLEZVdCh0aGlzKX1mdW5jdGlvbiBrd3QodCxlLG4scil7X3YuY2FsbCh0aGlzLHQsZSksdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gWGoodCxlLG4scil7X3YuY2FsbCh0aGlzLHQsbiksdGhpcy5hPWUsdGhpcy5mPXJ9ZnVuY3Rpb24gbFh0KHQsZSl7Q1hlLmNhbGwodGhpcyxtb24oQXIodCksQXIoZSkpKSx0aGlzLmE9ZX1mdW5jdGlvbiBoWHQoKXtMNHQuY2FsbCh0aGlzLEwyLChnSHQoKSxmNWUpKSxkM24odGhpcyl9ZnVuY3Rpb24gZlh0KCl7TDR0LmNhbGwodGhpcyxQaCwodDgoKSxKQXQpKSxreW4odGhpcyl9ZnVuY3Rpb24gZFh0KCl7R3IuY2FsbCh0aGlzLCJERUxBVU5BWV9UUklBTkdVTEFUSU9OIiwwKX1mdW5jdGlvbiBVZW4odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KX1mdW5jdGlvbiBraSh0LGUsbil7cmV0dXJuIGVhKGUpP3hvKHQsZSxuKTpzdSh0LmYsZSxuKX1mdW5jdGlvbiBFd3QodCl7cmV0dXJuIHZuKCksdD90LnZlKCk6KFgzKCksWDMoKSx4RXQpfWZ1bmN0aW9uIFdlbih0LGUsbil7cmV0dXJuIFF4KCksbi5wZyh0LHUoZS5jZCgpLDE0NikpfWZ1bmN0aW9uIGdYdCh0LGUpe3JldHVybiBNaigpLG5ldyBOM3QobmV3IFlVdCh0KSxuZXcgS1V0KGUpKX1mdW5jdGlvbiBLZW4odCl7cmV0dXJuIEJsKHQsQmF0KSxxJChPYShPYSg1LHQpLHQvMTB8MCkpfWZ1bmN0aW9uIFFqKCl7UWo9WixoZ2U9bmV3IFp0dChjdChvdChNMiwxKSxEcSw0MiwwLFtdKSl9ZnVuY3Rpb24gcFh0KHQpe3JldHVybiF0LmQmJih0LmQ9bmV3IFQodC5jLkNjKCkpKSx0LmR9ZnVuY3Rpb24geDgodCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgWXF0KHQuYy52YygpKSksdC5hfWZ1bmN0aW9uIGJYdCh0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBRayh0LmMuZWMoKSkpLHQuYn1mdW5jdGlvbiBXZCh0LGUpe2Zvcig7ZS0tID4wOyl0PXQ8PDF8KHQ8MD8xOjApO3JldHVybiB0fWZ1bmN0aW9uIFBjKHQsZSl7cmV0dXJuIEd0KHQpPT09R3QoZSl8fHQhPW51bGwmJnlpKHQsZSl9ZnVuY3Rpb24gWWVuKHQsZSl7cmV0dXJuIEZuKCksdShlLmIsMTkpLmE8dH1mdW5jdGlvbiBYZW4odCxlKXtyZXR1cm4gRm4oKSx1KGUuYSwxOSkuYTx0fWZ1bmN0aW9uIGdvKHQsZSl7cmV0dXJuIE1udCh0LmEsZSk/dC5iW3UoZSwyMikuZ106bnVsbH1mdW5jdGlvbiBRZW4odCxlLG4scil7dC5hPURsKHQuYSwwLGUpKygiIityKStPTSh0LmEsbil9ZnVuY3Rpb24gdlh0KHQsZSl7dC51LkhjKChRdSgpLHRnKSkmJmVwbih0LGUpLEJzbih0LGUpfWZ1bmN0aW9uIGJhKHQsZSl7cmV0dXJuIFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKX1mdW5jdGlvbiB3WHQoKXtHby5jYWxsKHRoaXMsIlRoZXJlIGlzIG5vIG1vcmUgZWxlbWVudC4iKX1mdW5jdGlvbiBNQyh0KXt0aGlzLmQ9dCx0aGlzLmE9dGhpcy5kLmIsdGhpcy5iPXRoaXMuZC5jfWZ1bmN0aW9uIG1YdCh0KXt0LmI9ITEsdC5jPSExLHQuZD0hMSx0LmE9ITF9ZnVuY3Rpb24gc2kodCxlLG4scil7cmV0dXJuIHduZSh0LGUsbiwhMSkseHoodCxyKSx0fWZ1bmN0aW9uIFplbih0KXtyZXR1cm4gdC5qLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hPS0xLHR9ZnVuY3Rpb24gSmVuKHQpe3JldHVybiF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jfWZ1bmN0aW9uIHRubih0KXtyZXR1cm4hdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYn1mdW5jdGlvbiBaaih0KXtyZXR1cm4hdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHQubn1mdW5jdGlvbiBabnQodCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmN9ZnVuY3Rpb24gazgodCl7cmV0dXJuIHQuZT09VUUmJmdwdCh0LHdobih0LmcsdC5iKSksdC5lfWZ1bmN0aW9uIFpNKHQpe3JldHVybiB0LmY9PVVFJiZTdHQodCxzMW4odC5nLHQuYikpLHQuZn1mdW5jdGlvbiBZMyh0KXt2YXIgZTtyZXR1cm4gZT10LmIsIWUmJih0LmI9ZT1uZXcgWkwodCkpLGV9ZnVuY3Rpb24gVHd0KHQpe3ZhciBlO2ZvcihlPXQuS2MoKTtlLk9iKCk7KWUuUGIoKSxlLlFiKCl9ZnVuY3Rpb24gRTgodCl7aWYoYWwodC5kKSx0LmQuZCE9dC5jKXRocm93IHJ0KG5ldyBlaCl9ZnVuY3Rpb24gQ3d0KHQsZSl7dGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5hPW5ldyBFeCh0aGlzLmIpfWZ1bmN0aW9uIEpudCh0LGUsbil7dGhpcy5hPU54dCx0aGlzLmQ9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiB5WHQodCxlKXt0aGlzLmQ9KE9uKHQpLHQpLHRoaXMuYT0xNjQ0OSx0aGlzLmM9ZX1mdW5jdGlvbiBlbm4odCxlKXtacmUodCxYdChSMChlLCJ4IikpLFh0KFIwKGUsInkiKSkpfWZ1bmN0aW9uIG5ubih0LGUpe1pyZSh0LFh0KFIwKGUsIngiKSksWHQoUjAoZSwieSIpKSl9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gZDIodCksbmV3IFRuKHQsbmV3IExtdChlLHQuYSkpfWZ1bmN0aW9uIHB1KHQsZSl7cmV0dXJuIGQyKHQpLG5ldyBUbih0LG5ldyB2bXQoZSx0LmEpKX1mdW5jdGlvbiBKaih0LGUpe3JldHVybiBkMih0KSxuZXcgRzJ0KHQsbmV3IExKdChlLHQuYSkpfWZ1bmN0aW9uIHQkKHQsZSl7cmV0dXJuIGQyKHQpLG5ldyBWMnQodCxuZXcgTUp0KGUsdC5hKSl9ZnVuY3Rpb24gcm5uKHQsZSl7cmV0dXJuIG5ldyBLWHQodShBcih0KSw2MiksdShBcihlKSw2MikpfWZ1bmN0aW9uIGlubih0LGUpe3JldHVybiBwYnQoKSxMcygoT24odCksdCksKE9uKGUpLGUpKX1mdW5jdGlvbiBzbm4oKXtyZXR1cm4gQVIoKSxjdChvdChyN3QsMSksYWUsNDgxLDAsW1J1dF0pfWZ1bmN0aW9uIGFubigpe3JldHVybiBNUigpLGN0KG90KEtfdCwxKSxhZSw0ODIsMCxbcWh0XSl9ZnVuY3Rpb24gb25uKCl7cmV0dXJuIElSKCksY3Qob3QobzNlLDEpLGFlLDU1MSwwLFtIaHRdKX1mdW5jdGlvbiBjbm4oKXtyZXR1cm4gSDkoKSxjdChvdChwU3QsMSksYWUsNTMwLDAsW2pPXSl9ZnVuY3Rpb24geFh0KHQpe3RoaXMuYT1uZXcgbGUsdGhpcy5lPVB0KFRyLHRlLDQ4LHQsMCwyKX1mdW5jdGlvbiB0cnQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5lPWUsdGhpcy5kPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gZSQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5iPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gX3d0KHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuYj1lLHRoaXMuYT1uLHRoaXMuZD1yfWZ1bmN0aW9uIGtYdCh0LGUsbixyKXt0aGlzLmM9dCx0aGlzLmI9ZSx0aGlzLmQ9bix0aGlzLmE9cn1mdW5jdGlvbiBpaCh0LGUsbixyKXt0aGlzLmM9dCx0aGlzLmQ9ZSx0aGlzLmI9bix0aGlzLmE9cn1mdW5jdGlvbiBFWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5kPWUsdGhpcy5jPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gUngodCxlLG4scil7R3IuY2FsbCh0aGlzLHQsZSksdGhpcy5hPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gVFh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIHVubih0LGUsbil7bXluKHQuYSxuKSxiY24obiksVXBuKHQuYixuKSxCeW4oZSxuKX1mdW5jdGlvbiBlcnQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9RXh0KHQpLHM9ZS5LaChuLHIpLHN9ZnVuY3Rpb24gQ1h0KHQsZSl7dmFyIG4scjtyZXR1cm4gbj10L2Uscj1wcyhuKSxuPnImJisrcixyfWZ1bmN0aW9uIEkwKHQpe3ZhciBlLG47cmV0dXJuIG49KGU9bmV3IHd2LGUpLFA4KG4sdCksbn1mdW5jdGlvbiBucnQodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgd3YsZSksRDR0KG4sdCksbn1mdW5jdGlvbiBsbm4odCxlKXt2YXIgbjtyZXR1cm4gbj1Kbih0LmYsZSksdXl0KGUsbiksbnVsbH1mdW5jdGlvbiBycnQodCl7dmFyIGU7cmV0dXJuIGU9eG9uKHQpLGV8fG51bGx9ZnVuY3Rpb24gX1h0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IGhlKFdzLHQsMTIsMykpLHQuYn1mdW5jdGlvbiBobm4odCl7cmV0dXJuIHQhPW51bGwmJnBNKHJVLHQudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZm5uKHQsZSl7cmV0dXJuIExzKEZ1KHQpKnhsKHQpLEZ1KGUpKnhsKGUpKX1mdW5jdGlvbiBkbm4odCxlKXtyZXR1cm4gTHMoRnUodCkqeGwodCksRnUoZSkqeGwoZSkpfWZ1bmN0aW9uIGdubih0LGUpe3JldHVybiBMcyh0LmQuYyt0LmQuYi8yLGUuZC5jK2UuZC5iLzIpfWZ1bmN0aW9uIHBubih0LGUpe3JldHVybiBMcyh0LmcuYyt0LmcuYi8yLGUuZy5jK2UuZy5iLzIpfWZ1bmN0aW9uIFNYdCh0LGUsbil7bi5hP3h1KHQsZS5iLXQuZi8yKTp5dSh0LGUuYS10LmcvMil9ZnVuY3Rpb24gQVh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIExYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBaYih0LGUsbixyKXt0aGlzLmU9dCx0aGlzLmE9ZSx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBNWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gSVh0KHQsZSxuLHIpe25oKCksRUp0LmNhbGwodGhpcyxlLG4sciksdGhpcy5hPXR9ZnVuY3Rpb24gRFh0KHQsZSxuLHIpe25oKCksRUp0LmNhbGwodGhpcyxlLG4sciksdGhpcy5hPXR9ZnVuY3Rpb24gT1h0KHQsZSl7dGhpcy5hPXQseFFlLmNhbGwodGhpcyx0LHUodC5kLDE1KS5aYyhlKSl9ZnVuY3Rpb24gaXJ0KHQpe3RoaXMuZj10LHRoaXMuYz10aGlzLmYuZSx0LmY+MCYmVnNlKHRoaXMpfWZ1bmN0aW9uIE5YdCh0LGUsbixyKXt0aGlzLmI9dCx0aGlzLmM9cixHZXQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gUFh0KHQpe3JldHVybiBRbih0LmI8dC5kLmdjKCkpLHQuZC5YYih0LmM9dC5iKyspfWZ1bmN0aW9uIF9oKHQpe3QuYS5hPXQuYyx0LmMuYj10LmEsdC5hLmI9dC5jLmE9bnVsbCx0LmI9MH1mdW5jdGlvbiBTd3QodCxlKXtyZXR1cm4gdC5iPWUuYix0LmM9ZS5jLHQuZD1lLmQsdC5hPWUuYSx0fWZ1bmN0aW9uIG4kKHQpe3JldHVybiB0Lm4mJih0LmUhPT1lZmUmJnQuX2QoKSx0Lmo9bnVsbCksdH1mdW5jdGlvbiBGWHQodCl7cmV0dXJuIG1DKHQ9PW51bGx8fHpudCh0KSYmdC5pbSE9PUN0KSx0fWZ1bmN0aW9uIEJYdCh0KXt0aGlzLmI9bmV3IGxlLEFzKHRoaXMuYix0aGlzLmIpLHRoaXMuYT10fWZ1bmN0aW9uIGp4KCl7ang9WixuRz1uZXcgbGUscXV0PW5ldyBDcix6dXQ9bmV3IGxlfWZ1bmN0aW9uIHZuKCl7dm49Wixpbz1uZXcgT3QsYTA9bmV3IHF0LFVIPW5ldyBudH1mdW5jdGlvbiBYMygpe1gzPVosbUV0PW5ldyBNZSx5RXQ9bmV3IE1lLHhFdD1uZXcgdmV9ZnVuY3Rpb24gQXd0KCl7QXd0PVosSGdlPW5ldyB2cyxWZ2U9bmV3IFd2dCxHZ2U9bmV3IG51fWZ1bmN0aW9uIGJubigpe0RFdD09MjU2JiYoSUV0PVlILFlIPW5ldyBfLERFdD0wKSwrK0RFdH1mdW5jdGlvbiAkeCh0KXt2YXIgZTtyZXR1cm4gZT10LmYsZXx8KHQuZj1uZXcgbjgodCx0LmMpKX1mdW5jdGlvbiB2bm4odCl7cmV0dXJuIHV3KHQpJiZqZShSZShxZSh0LChUZSgpLFAyKSkpKX1mdW5jdGlvbiB3bm4odCxlKXtyZXR1cm4gbG4odCx1KFEoZSwoVGUoKSxiNykpLDE5KSxlKX1mdW5jdGlvbiBSWHQodCxlKXtyZXR1cm4gYTQodC5qLGUucyxlLmMpK2E0KGUuZSx0LnMsdC5jKX1mdW5jdGlvbiBqWHQodCxlKXt0LmUmJiF0LmUuYSYmKFJ6dCh0LmUsZSksalh0KHQuZSxlKSl9ZnVuY3Rpb24gJFh0KHQsZSl7dC5kJiYhdC5kLmEmJihSenQodC5kLGUpLCRYdCh0LmQsZSkpfWZ1bmN0aW9uIG1ubih0LGUpe3JldHVybi1McyhGdSh0KSp4bCh0KSxGdShlKSp4bChlKSl9ZnVuY3Rpb24geW5uKHQpe3JldHVybiB1KHQuY2QoKSwxNDYpLnRnKCkrIjoiKyRvKHQuZGQoKSl9ZnVuY3Rpb24geG5uKHQpe2xmKCk7dmFyIGU7ZT11KHQuZywxMCksZS5uLmE9dC5kLmMrZS5kLmJ9ZnVuY3Rpb24ga25uKHQsZSxuKXtyZXR1cm4gcTkoKSxkbG4odShKbih0LmUsZSksNTIyKSxuKX1mdW5jdGlvbiBFbm4odCxlKXtyZXR1cm4gc2wodCksc2woZSksJHF0KHUodCwyMiksdShlLDIyKSl9ZnVuY3Rpb24gVG5uKHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiZvcmUodCxlLG4pfWZ1bmN0aW9uIENubih0LGUsbil7dC5pPTAsdC5lPTAsZSE9biYmY3JlKHQsZSxuKX1mdW5jdGlvbiBKYih0LGUsbil7dmFyIHIscztyPWZ2dChuKSxzPW5ldyB5OShyKSxXZih0LGUscyl9ZnVuY3Rpb24gc3J0KHQsZSxuLHIscyxvKXtnSS5jYWxsKHRoaXMsdCxlLG4scixzLG8/LTI6LTEpfWZ1bmN0aW9uIHpYdCh0LGUsbixyKXtLYnQuY2FsbCh0aGlzLGUsbiksdGhpcy5iPXQsdGhpcy5hPXJ9ZnVuY3Rpb24gTHd0KHQsZSl7bmV3IFFpLHRoaXMuYT1uZXcgRHUsdGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gX25uKHQsZSl7cmV0dXJuIHUoUSh0LChzZSgpLEk2KSksMTUpLkZjKGUpLGV9ZnVuY3Rpb24gciQodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTWkodCl7cmV0dXJuIXQucSYmKHQucT1uZXcgaGUoVmgsdCwxMSwxMCkpLHQucX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4hdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksdC5zfWZ1bmN0aW9uIGkkKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmF9ZnVuY3Rpb24gcyQodCl7cmV0dXJuIEV0KHQsMTQpP25ldyB5Qyh1KHQsMTQpKTpydG4odC5LYygpKX1mdW5jdGlvbiBTbm4odCl7cmV0dXJuIG5ldyB6VXQodCx0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCkpfWZ1bmN0aW9uIEFubih0KXtyZXR1cm4gbmV3IHFVdCh0LHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSl9ZnVuY3Rpb24gTXd0KHQpe3JldHVybiB0JiZ0Lmhhc2hDb2RlP3QuaGFzaENvZGUoKTpJdih0KX1mdW5jdGlvbiBhcnQodCxlKXtyZXR1cm4gZT09bnVsbD8hIUFvKHQuZixudWxsKTpIdG4odC5nLGUpfWZ1bmN0aW9uIExubih0KXtyZXR1cm4gQXIodCksdXNlKG5ldyBhcihscih0LmEuS2MoKSxuZXcgeikpKX1mdW5jdGlvbiBKTSh0KXtyZXR1cm4gdm4oKSxFdCh0LDU0KT9uZXcgb2V0KHQpOm5ldyBmaih0KX1mdW5jdGlvbiBxWHQodCxlLG4pe3JldHVybiB0LmY/dC5mLk5lKGUsbik6ITF9ZnVuY3Rpb24gTW5uKHQsZSl7cmV0dXJuIHQuYT1EbCh0LmEsMCxlKSsiIitPTSh0LmEsZSsxKSx0fWZ1bmN0aW9uIElubih0LGUpe3ZhciBuO3JldHVybiBuPWYydCh0LmEsZSksbiYmKGUuZD1udWxsKSxufWZ1bmN0aW9uIGEkKHQpe3ZhciBlLG47bj10LGU9bi4kbW9kQ291bnR8MCxuLiRtb2RDb3VudD1lKzF9ZnVuY3Rpb24gSXd0KHQpe3RoaXMuYj10LHRoaXMuYz10LHQuZT1udWxsLHQuYz1udWxsLHRoaXMuYT0xfWZ1bmN0aW9uIEhYdCh0KXt0aGlzLmI9dCx0aGlzLmE9bmV3IExwKHUoQXIobmV3IFdjKSw2MikpfWZ1bmN0aW9uIEdYdCh0KXt0aGlzLmM9dCx0aGlzLmI9bmV3IExwKHUoQXIobmV3ICRzKSw2MikpfWZ1bmN0aW9uIFZYdCh0KXt0aGlzLmM9dCx0aGlzLmI9bmV3IExwKHUoQXIobmV3IFdQKSw2MikpfWZ1bmN0aW9uIFVYdCgpe3RoaXMuYT1uZXcgT3B0LHRoaXMuYj1uZXcgbHF0LHRoaXMuZD1uZXcgS1B9ZnVuY3Rpb24genYoKXt0aGlzLmE9bmV3IER1LHRoaXMuYj0oQmwoMyxteSksbmV3IFljKDMpKX1mdW5jdGlvbiBXWHQoKXt0aGlzLmI9bmV3IHFzLHRoaXMuZD1uZXcgUWksdGhpcy5lPW5ldyBQcHR9ZnVuY3Rpb24gbyQodCl7dGhpcy5jPXQuYyx0aGlzLmQ9dC5kLHRoaXMuYj10LmIsdGhpcy5hPXQuYX1mdW5jdGlvbiBLWHQodCxlKXtmS2UuY2FsbCh0aGlzLG5ldyBCbnQodCkpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFlYdCgpe0RzdCh0aGlzLG5ldyBxQiksdGhpcy53Yj0oanAoKSxMbiksdDgoKX1mdW5jdGlvbiBEbm4odCl7d3IodCwiTm8gY3Jvc3NpbmcgbWluaW1pemF0aW9uIiwxKSxvcih0KX1mdW5jdGlvbiBPbm4odCl7dlIoKSxiLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSwwKX1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdC51fHwocmwodCksdC51PW5ldyBEV3QodCx0KSksdC51fWZ1bmN0aW9uIGJ1KHQpe3ZhciBlO3JldHVybiBlPXUoSW4odCwxNiksMjYpLGV8fHQuemgoKX1mdW5jdGlvbiBYWHQodCxlKXtyZXR1cm4gRXQoZSwxNDYpJiZobih0LmIsdShlLDE0NikudGcoKSl9ZnVuY3Rpb24gTm5uKHQsZSl7cmV0dXJuIHQuYT9lLldnKCkuS2MoKTp1KGUuV2coKSw2OSkuWmgoKX1mdW5jdGlvbiBQbm4odCl7cmV0dXJuIHQuaz09KEduKCksRHMpJiZWcyh0LChzZSgpLG1TKSl9ZnVuY3Rpb24gb3J0KHQpe3RoaXMuYT0odm4oKSxFdCh0LDU0KT9uZXcgb2V0KHQpOm5ldyBmaih0KSl9ZnVuY3Rpb24gVDgoKXtUOD1aO3ZhciB0LGU7ZT0hbmhuKCksdD1uZXcgYnQsa3V0PWU/bmV3IFU6dH1mdW5jdGlvbiBjcnQodCxlKXt2YXIgbjtyZXR1cm4gbj1BcCh0LmdtKSxlPT1udWxsP246bisiOiAiK2V9ZnVuY3Rpb24gUVh0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5iLlFjKGUpLHFadChuLHQuYi5nYygpKSxufWZ1bmN0aW9uIHRJKHQsZSl7aWYodD09bnVsbCl0aHJvdyBydChuZXcgeXgoZSkpO3JldHVybiB0fWZ1bmN0aW9uIEFvKHQsZSl7cmV0dXJuIGtyZSh0LGUsdnJuKHQsZT09bnVsbD8wOnQuYi5zZShlKSkpfWZ1bmN0aW9uIEZubih0LGUsbil7cmV0dXJuIG4+PTAmJmhuKHQuc3Vic3RyKG4sZS5sZW5ndGgpLGUpfWZ1bmN0aW9uIHpwKHQsZSxuLHIscyxvLGgpe3JldHVybiBuZXcgQXJ0KHQuZSxlLG4scixzLG8saCl9ZnVuY3Rpb24gWlh0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCxlaXQuY2FsbCh0aGlzLGUsbixyLHMsbyl9ZnVuY3Rpb24gSlh0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCxlaXQuY2FsbCh0aGlzLGUsbixyLHMsbyl9ZnVuY3Rpb24gdFF0KHQsZSl7dGhpcy5nPXQsdGhpcy5kPWN0KG90KG8wLDEpLHpnLDEwLDAsW2VdKX1mdW5jdGlvbiBTZyh0LGUpe3RoaXMuZT10LHRoaXMuYT1Ybix0aGlzLmI9RXVlKGUpLHRoaXMuYz1lfWZ1bmN0aW9uIGVRdCh0LGUpe3hqLmNhbGwodGhpcyksUm10KHRoaXMpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIGVJKHQsZSxuLHIpe0ppKHQuY1tlLmddLG4uZyxyKSxKaSh0LmNbbi5nXSxlLmcscil9ZnVuY3Rpb24gdXJ0KHQsZSxuLHIpe0ppKHQuY1tlLmddLGUuZyxuKSxKaSh0LmJbZS5nXSxlLmcscil9ZnVuY3Rpb24gQm5uKCl7cmV0dXJuIGxJKCksY3Qob3QoekN0LDEpLGFlLDM3NiwwLFtiaHQsRE9dKX1mdW5jdGlvbiBSbm4oKXtyZXR1cm4gYkkoKSxjdChvdChPVHQsMSksYWUsNDc5LDAsW0RUdCxGR10pfWZ1bmN0aW9uIGpubigpe3JldHVybiBUSSgpLGN0KG90KE1UdCwxKSxhZSw0MTksMCxbTkcsTFR0XSl9ZnVuY3Rpb24gJG5uKCl7cmV0dXJuIEQkKCksY3Qob3Qoa1R0LDEpLGFlLDQyMiwwLFt4VHQsdmx0XSl9ZnVuY3Rpb24gem5uKCl7cmV0dXJuIHgkKCksY3Qob3QoVVR0LDEpLGFlLDQyMCwwLFtEbHQsVlR0XSl9ZnVuY3Rpb24gcW5uKCl7cmV0dXJuIHlJKCksY3Qob3QoQkN0LDEpLGFlLDQyMSwwLFtkaHQsZ2h0XSl9ZnVuY3Rpb24gSG5uKCl7cmV0dXJuIEJDKCksY3Qob3QoYm1lLDEpLGFlLDUyMywwLFtOUyxPU10pfWZ1bmN0aW9uIEdubigpe3JldHVybiBWZigpLGN0KG90KCRtZSwxKSxhZSw1MjAsMCxbVXkscGJdKX1mdW5jdGlvbiBWbm4oKXtyZXR1cm4gZGQoKSxjdChvdChFbWUsMSksYWUsNTE2LDAsW1J3LEtnXSl9ZnVuY3Rpb24gVW5uKCl7cmV0dXJuIEUxKCksY3Qob3QoQ21lLDEpLGFlLDUxNSwwLFtqMix6MV0pfWZ1bmN0aW9uIFdubigpe3JldHVybiBxdigpLGN0KG90KFdtZSwxKSxhZSw0NTUsMCxbYmIsZTVdKX1mdW5jdGlvbiBLbm4oKXtyZXR1cm4gdiQoKSxjdChvdChoX3QsMSksYWUsNDI1LDAsW0lodCxsX3RdKX1mdW5jdGlvbiBZbm4oKXtyZXR1cm4gZCQoKSxjdChvdCh1X3QsMSksYWUsNDgwLDAsW01odCxjX3RdKX1mdW5jdGlvbiBYbm4oKXtyZXR1cm4gaXooKSxjdChvdChmX3QsMSksYWUsNDk1LDAsW1RWLEU3XSl9ZnVuY3Rpb24gUW5uKCl7cmV0dXJuIE4kKCksY3Qob3QoZ190LDEpLGFlLDQyNiwwLFtkX3QsUGh0XSl9ZnVuY3Rpb24gWm5uKCl7cmV0dXJuIE5JKCksY3Qob3QodlN0LDEpLGFlLDQyOSwwLFtPVixiU3RdKX1mdW5jdGlvbiBKbm4oKXtyZXR1cm4gaEkoKSxjdChvdChZX3QsMSksYWUsNDMwLDAsW0dodCxJVl0pfWZ1bmN0aW9uIHRybigpe3JldHVybiBOeigpLGN0KG90KE5FdCwxKSxhZSw0MjgsMCxbSXV0LE9FdF0pfWZ1bmN0aW9uIGVybigpe3JldHVybiAkJCgpLGN0KG90KEZFdCwxKSxhZSw0MjcsMCxbUEV0LER1dF0pfWZ1bmN0aW9uIG5ybigpe3JldHVybiB6JCgpLGN0KG90KGw3dCwxKSxhZSw0MjQsMCxbSHV0LHJHXSl9ZnVuY3Rpb24gcnJuKCl7cmV0dXJuIHE4KCksY3Qob3QoamJlLDEpLGFlLDUxMSwwLFtwTyxubHRdKX1mdW5jdGlvbiBjJCh0LGUsbixyKXtyZXR1cm4gbj49MD90LmpoKGUsbixyKTp0LlNnKG51bGwsbixyKX1mdW5jdGlvbiBscnQodCl7cmV0dXJuIHQuYi5iPT0wP3QuYS4kZSgpOmtudCh0LmIpfWZ1bmN0aW9uIGlybih0KXtpZih0LnAhPTUpdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gU3IodC5mKX1mdW5jdGlvbiBzcm4odCl7aWYodC5wIT01KXRocm93IHJ0KG5ldyBJdSk7cmV0dXJuIFNyKHQuayl9ZnVuY3Rpb24gRHd0KHQpe3JldHVybiBHdCh0LmEpPT09R3QoKGhpdCgpLF9mdCkpJiZhM24odCksdC5hfWZ1bmN0aW9uIG5RdCh0KXt0aGlzLmE9dShBcih0KSwyNzEpLHRoaXMuYj0odm4oKSxuZXcgQzJ0KHQpKX1mdW5jdGlvbiByUXQodCxlKXtocHQodGhpcyxuZXcgJGUodC5hLHQuYikpLFhCKHRoaXMsVU0oZSkpfWZ1bmN0aW9uIHF2KCl7cXY9WixiYj1uZXcgJGJ0KGQ2LDApLGU1PW5ldyAkYnQoZzYsMSl9ZnVuY3Rpb24gZGQoKXtkZD1aLFJ3PW5ldyBSYnQoZzYsMCksS2c9bmV3IFJidChkNiwxKX1mdW5jdGlvbiBIdigpe3BLZS5jYWxsKHRoaXMsbmV3IGt4KFFtKDEyKSkpLHgydCghMCksdGhpcy5hPTJ9ZnVuY3Rpb24gaHJ0KHQsZSxuKXtnaSgpLHZ2LmNhbGwodGhpcyx0KSx0aGlzLmI9ZSx0aGlzLmE9bn1mdW5jdGlvbiBPd3QodCxlLG4pe25oKCksb1IuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIGlRdCh0KXt4ai5jYWxsKHRoaXMpLFJtdCh0aGlzKSx0aGlzLmE9dCx0aGlzLmM9ITB9ZnVuY3Rpb24gc1F0KHQpe3ZhciBlO2U9dC5jLmQuYix0LmI9ZSx0LmE9dC5jLmQsZS5hPXQuYy5kLmI9dH1mdW5jdGlvbiB1JCh0KXt2YXIgZTtmb24odC5hKSxiVXQodC5hKSxlPW5ldyB0cih0LmEpLGMzdChlKX1mdW5jdGlvbiBhcm4odCxlKXtndWUodCwhMCksbXUodC5lLndmKCksbmV3IGJ2dCh0LCEwLGUpKX1mdW5jdGlvbiBsJCh0LGUpe3JldHVybiBSWnQoZSksdW9uKHQsUHQoVHIsWHIsMjUsZSwxNSwxKSxlKX1mdW5jdGlvbiBvcm4odCxlKXtyZXR1cm4gangoKSx0PT10cyhaZChlKSl8fHQ9PXRzKFhwKGUpKX1mdW5jdGlvbiBGYyh0LGUpe3JldHVybiBlPT1udWxsP2VjKEFvKHQuZixudWxsKSk6VTkodC5nLGUpfWZ1bmN0aW9uIGNybih0KXtyZXR1cm4gdC5iPT0wP251bGw6KFFuKHQuYiE9MCksY2godCx0LmEuYSkpfWZ1bmN0aW9uIHBzKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0LHZpKSwtMjE0NzQ4MzY0OCl8MH1mdW5jdGlvbiB1cm4odCxlKXt2YXIgbj14dXRbdC5jaGFyQ29kZUF0KDApXTtyZXR1cm4gbj8/dH1mdW5jdGlvbiBoJCh0LGUpe3JldHVybiByJCh0LCJzZXQxIiksciQoZSwic2V0MiIpLG5ldyBlR3QodCxlKX1mdW5jdGlvbiBscm4odCxlKXt2YXIgbjtyZXR1cm4gbj1pb24odC5mLGUpLExpKG1qKG4pLHQuZi5kKX1mdW5jdGlvbiBJQyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZSxyPW5ldyAkdCxuaGUodCxuLHIpLHIuZH1mdW5jdGlvbiBmcnQodCxlLG4scil7dmFyIHM7cz1uZXcgVVd0LGUuYVtuLmddPXMsTngodC5iLHIscyl9ZnVuY3Rpb24gTnd0KHQsZSxuKXt2YXIgcjtyPXQuWWcoZSkscj49MD90LnNoKHIsbik6RTV0KHQsZSxuKX1mdW5jdGlvbiBRMyh0LGUsbil7ZyQoKSx0JiZraShFZnQsdCxlKSx0JiZraShjTix0LG4pfWZ1bmN0aW9uIGFRdCh0LGUsbil7dGhpcy5pPW5ldyBsZSx0aGlzLmI9dCx0aGlzLmc9ZSx0aGlzLmE9bn1mdW5jdGlvbiBmJCh0LGUsbil7dGhpcy5jPW5ldyBsZSx0aGlzLmU9dCx0aGlzLmY9ZSx0aGlzLmI9bn1mdW5jdGlvbiBQd3QodCxlLG4pe3RoaXMuYT1uZXcgbGUsdGhpcy5lPXQsdGhpcy5mPWUsdGhpcy5jPW59ZnVuY3Rpb24gb1F0KHQsZSl7dWoodGhpcyksdGhpcy5mPWUsdGhpcy5nPXQsbiQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIG5JKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0RGF0ZShlKSx5Xyh0LG4pfWZ1bmN0aW9uIGNRdCh0LGUpe3ZhciBuO2ZvcihBcihlKSxuPXQuYTtuO249bi5jKWUuT2Qobi5nLG4uaSl9ZnVuY3Rpb24gdVF0KHQpe3ZhciBlO3JldHVybiBlPW5ldyB4UihRbSh0Lmxlbmd0aCkpLF95dChlLHQpLGV9ZnVuY3Rpb24gaHJuKHQpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlPXR8fHt9LG5ldyBlfWZ1bmN0aW9uIGZybih0LGUpe3JldHVybiBSbmUodCxlKT8oRmVlKHQpLCEwKTohMX1mdW5jdGlvbiBEMCh0LGUpe2lmKGU9PW51bGwpdGhyb3cgcnQobmV3IEw5KTtyZXR1cm4gdWhuKHQsZSl9ZnVuY3Rpb24gZHJuKHQpe2lmKHQucWUoKSlyZXR1cm4gbnVsbDt2YXIgZT10Lm47cmV0dXJuICRIW2VdfWZ1bmN0aW9uIHJJKHQpe3JldHVybiB0LkRiPj4xNiE9Mz9udWxsOnUodC5DYiwzMyl9ZnVuY3Rpb24gazEodCl7cmV0dXJuIHQuRGI+PjE2IT05P251bGw6dSh0LkNiLDMzKX1mdW5jdGlvbiBsUXQodCl7cmV0dXJuIHQuRGI+PjE2IT02P251bGw6dSh0LkNiLDc5KX1mdW5jdGlvbiBoUXQodCl7cmV0dXJuIHQuRGI+PjE2IT03P251bGw6dSh0LkNiLDIzNSl9ZnVuY3Rpb24gZlF0KHQpe3JldHVybiB0LkRiPj4xNiE9Nz9udWxsOnUodC5DYiwxNjApfWZ1bmN0aW9uIHRzKHQpe3JldHVybiB0LkRiPj4xNiE9MTE/bnVsbDp1KHQuQ2IsMzMpfWZ1bmN0aW9uIGRRdCh0LGUpe3ZhciBuO3JldHVybiBuPXQuWWcoZSksbj49MD90LmxoKG4pOnpzdCh0LGUpfWZ1bmN0aW9uIGdRdCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyAkdnQoZSkscGFlKG4sdCksbmV3IFB1KG4pfWZ1bmN0aW9uIEZ3dCh0KXt2YXIgZTtyZXR1cm4gZT10LmQsZT10LnNpKHQuZiksTXIodCxlKSxlLk9iKCl9ZnVuY3Rpb24gcFF0KHQsZSl7cmV0dXJuIHQuYis9ZS5iLHQuYys9ZS5jLHQuZCs9ZS5kLHQuYSs9ZS5hLHR9ZnVuY3Rpb24gZHJ0KHQsZSl7cmV0dXJuIGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyhlKT90OmV9ZnVuY3Rpb24gZ3JuKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEuaT4wfWZ1bmN0aW9uIGJRdCgpe3RoaXMuYT1uZXcgQTAsdGhpcy5lPW5ldyBxcyx0aGlzLmc9MCx0aGlzLmk9MH1mdW5jdGlvbiB2UXQodCl7dGhpcy5hPXQsdGhpcy5iPVB0KGRtZSx0ZSwxOTQ0LHQuZS5sZW5ndGgsMCwyKX1mdW5jdGlvbiBncnQodCxlLG4pe3ZhciByO3I9aXJlKHQsZSxuKSx0LmI9bmV3IHJ6KHIuYy5sZW5ndGgpfWZ1bmN0aW9uIEUxKCl7RTE9WixqMj1uZXcgQmJ0KHlvdCwwKSx6MT1uZXcgQmJ0KCJVUCIsMSl9ZnVuY3Rpb24gZCQoKXtkJD1aLE1odD1uZXcgemJ0KEkxZSwwKSxjX3Q9bmV3IHpidCgiRkFOIiwxKX1mdW5jdGlvbiBnJCgpe2ckPVosRWZ0PW5ldyBDcixjTj1uZXcgQ3IsTlllKExnZSxuZXcgWFQpfWZ1bmN0aW9uIHBybih0KXtpZih0LnAhPTApdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gYUModC5mLDApfWZ1bmN0aW9uIGJybih0KXtpZih0LnAhPTApdGhyb3cgcnQobmV3IEl1KTtyZXR1cm4gYUModC5rLDApfWZ1bmN0aW9uIHdRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTM/bnVsbDp1KHQuQ2IsMTQ3KX1mdW5jdGlvbiBDOCh0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KHQuQ2IsMjM1KX1mdW5jdGlvbiBWbSh0KXtyZXR1cm4gdC5EYj4+MTYhPTE3P251bGw6dSh0LkNiLDI2KX1mdW5jdGlvbiBtUXQodCxlKXt2YXIgbj10LmE9dC5hfHxbXTtyZXR1cm4gbltlXXx8KG5bZV09dC5sZShlKSl9ZnVuY3Rpb24gdnJuKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdldChlKSxuPz9uZXcgQXJyYXl9ZnVuY3Rpb24gd3JuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0TW9udGgoZSkseV8odCxuKX1mdW5jdGlvbiB4byh0LGUsbil7cmV0dXJuIGU9PW51bGw/c3UodC5mLG51bGwsbik6bncodC5nLGUsbil9ZnVuY3Rpb24gREModCxlLG4scixzLG8pe3JldHVybiBuZXcgRjAodC5lLGUsdC5haigpLG4scixzLG8pfWZ1bmN0aW9uIGlJKHQsZSxuKXtyZXR1cm4gdC5hPURsKHQuYSwwLGUpKygiIituKStPTSh0LmEsZSksdH1mdW5jdGlvbiBtcm4odCxlLG4pe3JldHVybiB1ZSh0LmEsKFFqKCksaHN0KGUsbiksbmV3IF92KGUsbikpKSx0fWZ1bmN0aW9uIEJ3dCh0KXtyZXR1cm4gRTJ0KHQuYyksdC5lPXQuYT10LmMsdC5jPXQuYy5jLCsrdC5kLHQuYS5mfWZ1bmN0aW9uIHlRdCh0KXtyZXR1cm4gRTJ0KHQuZSksdC5jPXQuYT10LmUsdC5lPXQuZS5lLC0tdC5kLHQuYS5mfWZ1bmN0aW9uIHNhKHQsZSl7dC5kJiZ2dSh0LmQuZSx0KSx0LmQ9ZSx0LmQmJnVlKHQuZC5lLHQpfWZ1bmN0aW9uIERhKHQsZSl7dC5jJiZ2dSh0LmMuZyx0KSx0LmM9ZSx0LmMmJnVlKHQuYy5nLHQpfWZ1bmN0aW9uIGtvKHQsZSl7dC5jJiZ2dSh0LmMuYSx0KSx0LmM9ZSx0LmMmJnVlKHQuYy5hLHQpfWZ1bmN0aW9uIFVvKHQsZSl7dC5pJiZ2dSh0Lmkuaix0KSx0Lmk9ZSx0LmkmJnVlKHQuaS5qLHQpfWZ1bmN0aW9uIHhRdCh0LGUsbil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5iPShBcihuKSxuZXcgUHUobikpfWZ1bmN0aW9uIGtRdCh0LGUsbil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5iPShBcihuKSxuZXcgUHUobikpfWZ1bmN0aW9uIEVRdCh0LGUpe3RoaXMuYT10LHRoaXMuYz1uYyh0aGlzLmEpLHRoaXMuYj1uZXcgbyQoZSl9ZnVuY3Rpb24geXJuKHQpe3ZhciBlO3JldHVybiBkMih0KSxlPW5ldyBxcyxSaSh0LG5ldyBWZShlKSl9ZnVuY3Rpb24gVW0odCxlKXtpZih0PDB8fHQ+ZSl0aHJvdyBydChuZXcgbW8ocXh0K3QrSHh0K2UpKX1mdW5jdGlvbiBSd3QodCxlKXtyZXR1cm4gZFl0KHQuYSxlKT9jd3QodCx1KGUsMjIpLmcsbnVsbCk6bnVsbH1mdW5jdGlvbiB4cm4odCl7cmV0dXJuIElpdCgpLEZuKCksdSh0LmEsODEpLmQuZSE9MH1mdW5jdGlvbiBUUXQoKXtUUXQ9WixnZ2U9V3IoKGRSKCksY3Qob3QoZGdlLDEpLGFlLDUzOCwwLFttdXRdKSkpfWZ1bmN0aW9uIENRdCgpe0NRdD1aLHRtZT1LdShuZXcgSHMsKFdhKCksSW8pLChybygpLGJPKSl9ZnVuY3Rpb24gand0KCl7and0PVosZW1lPUt1KG5ldyBIcywoV2EoKSxJbyksKHJvKCksYk8pKX1mdW5jdGlvbiBfUXQoKXtfUXQ9WixybWU9S3UobmV3IEhzLChXYSgpLElvKSwocm8oKSxiTykpfWZ1bmN0aW9uIFNRdCgpe1NRdD1aLHdtZT1iaShuZXcgSHMsKFdhKCksSW8pLChybygpLGZTKSl9ZnVuY3Rpb24gT2woKXtPbD1aLHhtZT1iaShuZXcgSHMsKFdhKCksSW8pLChybygpLGZTKSl9ZnVuY3Rpb24gQVF0KCl7QVF0PVosa21lPWJpKG5ldyBIcywoV2EoKSxJbyksKHJvKCksZlMpKX1mdW5jdGlvbiBwcnQoKXtwcnQ9WixTbWU9YmkobmV3IEhzLChXYSgpLElvKSwocm8oKSxmUykpfWZ1bmN0aW9uIExRdCgpe0xRdD1aLGR5ZT1LdShuZXcgSHMsKHVFKCksRlMpLChmXygpLHhodCkpfWZ1bmN0aW9uIHQyKHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuZD1yLHZydCh0aGlzLGUpLHdydCh0aGlzLG4pfWZ1bmN0aW9uIHp4KHQpe3RoaXMuYz1uZXcgUWksdGhpcy5iPXQuYix0aGlzLmQ9dC5jLHRoaXMuYT10LmF9ZnVuY3Rpb24gYnJ0KHQpe3RoaXMuYT1iLk1hdGguY29zKHQpLHRoaXMuYj1iLk1hdGguc2luKHQpfWZ1bmN0aW9uIHZydCh0LGUpe3QuYSYmdnUodC5hLmssdCksdC5hPWUsdC5hJiZ1ZSh0LmEuayx0KX1mdW5jdGlvbiB3cnQodCxlKXt0LmImJnZ1KHQuYi5mLHQpLHQuYj1lLHQuYiYmdWUodC5iLmYsdCl9ZnVuY3Rpb24gTVF0KHQsZSl7TWVuKHQsdC5iLHQuYyksdSh0LmIuYiw2NSksZSYmdShlLmIsNjUpLmJ9ZnVuY3Rpb24ga3JuKHQsZSl7ZTN0KHQsZSksRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDIpfWZ1bmN0aW9uIG1ydCh0LGUpe0V0KHQuQ2IsODgpJiZoeShybCh1KHQuQ2IsODgpKSw0KSxYYyh0LGUpfWZ1bmN0aW9uIHAkKHQsZSl7RXQodC5DYiwxNzkpJiYodSh0LkNiLDE3OSkudGI9bnVsbCksWGModCxlKX1mdW5jdGlvbiBCYyh0LGUpe3JldHVybiB0bygpLFlydChlKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KX1mdW5jdGlvbiBFcm4odCxlKXt2YXIgbixyO249ZS5jLHI9biE9bnVsbCxyJiZCeCh0LG5ldyBIbShlLmMpKX1mdW5jdGlvbiBJUXQodCl7dmFyIGUsbjtyZXR1cm4gbj0odDgoKSxlPW5ldyB3dixlKSxQOChuLHQpLG59ZnVuY3Rpb24gRFF0KHQpe3ZhciBlLG47cmV0dXJuIG49KHQ4KCksZT1uZXcgd3YsZSksUDgobix0KSxufWZ1bmN0aW9uIE9RdCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBDaCh0KSxlLmNbZS5jLmxlbmd0aF09bixufWZ1bmN0aW9uIE5RdCh0LGUpe3ZhciBuO3JldHVybiBuPXUobnkoJHgodC5hKSxlKSwxNCksbj9uLmdjKCk6MH1mdW5jdGlvbiBQUXQodCl7dmFyIGU7cmV0dXJuIGQyKHQpLGU9KFgzKCksWDMoKSx5RXQpLEckKHQsZSl9ZnVuY3Rpb24gRlF0KHQpe2Zvcih2YXIgZTs7KWlmKGU9dC5QYigpLCF0Lk9iKCkpcmV0dXJuIGV9ZnVuY3Rpb24gJHd0KHQsZSl7ZEtlLmNhbGwodGhpcyxuZXcga3goUW0odCkpKSxCbChlLFloZSksdGhpcy5hPWV9ZnVuY3Rpb24gS2QodCxlLG4pe0hyZShlLG4sdC5nYygpKSx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9bi1lfWZ1bmN0aW9uIEJRdCh0LGUsbil7dmFyIHI7SHJlKGUsbix0LmMubGVuZ3RoKSxyPW4tZSxsYnQodC5jLGUscil9ZnVuY3Rpb24gVHJuKHQsZSl7TlV0KHQsU3IoUHMoRnAoZSwyNCksUHEpKSxTcihQcyhlLFBxKSkpfWZ1bmN0aW9uIEFuKHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IHJ0KG5ldyBtbyhxeHQrdCtIeHQrZSkpfWZ1bmN0aW9uIFJyKHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IHJ0KG5ldyBacHQocXh0K3QrSHh0K2UpKX1mdW5jdGlvbiBfbih0LGUpe3RoaXMuYj0oT24odCksdCksdGhpcy5hPWUmeXk/ZTplfDY0fGJkfWZ1bmN0aW9uIFJRdCh0KXtwVXQodGhpcyksWXp0KHRoaXMuYSxUeXQoYi5NYXRoLm1heCg4LHQpKTw8MSl9ZnVuY3Rpb24gVDEodCl7cmV0dXJuIEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKX1mdW5jdGlvbiBDcm4oKXtyZXR1cm4gSTEoKSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTUV0LEdsLEx5XSl9ZnVuY3Rpb24gX3JuKCl7cmV0dXJuIEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSl9ZnVuY3Rpb24gU3JuKCl7cmV0dXJuIFh1KCksY3Qob3QoWmdlLDEpLGFlLDQ2MSwwLFtTZCxjYixtZl0pfWZ1bmN0aW9uIEFybigpe3JldHVybiB3dSgpLGN0KG90KHRwZSwxKSxhZSw0NjIsMCxbZTEsdWIseWZdKX1mdW5jdGlvbiBMcm4oKXtyZXR1cm4gZXcoKSxjdChvdChBN3QsMSksYWUsNDIzLDAsWyQ0LFM3dCxKdXRdKX1mdW5jdGlvbiBNcm4oKXtyZXR1cm4gakMoKSxjdChvdChUN3QsMSksYWUsMzc5LDAsW1d1dCxVdXQsS3V0XSl9ZnVuY3Rpb24gSXJuKCl7cmV0dXJuIFlDKCksY3Qob3QoU0N0LDEpLGFlLDM3OCwwLFtvaHQsX0N0LHVWXSl9ZnVuY3Rpb24gRHJuKCl7cmV0dXJuIFl4KCksY3Qob3QoVFR0LDEpLGFlLDMxNCwwLFtTNix3TyxFVHRdKX1mdW5jdGlvbiBPcm4oKXtyZXR1cm4gWCQoKSxjdChvdChfVHQsMSksYWUsMzM3LDAsW0NUdCxPRyx3bHRdKX1mdW5jdGlvbiBOcm4oKXtyZXR1cm4gdTIoKSxjdChvdChnMmUsMSksYWUsNDUwLDAsW3hsdCx1NyxHNF0pfWZ1bmN0aW9uIFBybigpe3JldHVybiBKdigpLGN0KG90KGNsdCwxKSxhZSwzNjEsMCxbQXcsaGIsU3ddKX1mdW5jdGlvbiBGcm4oKXtyZXR1cm4gQjAoKSxjdChvdChrMmUsMSksYWUsMzAzLDAsW3lPLFU0LEE2XSl9ZnVuY3Rpb24gQnJuKCl7cmV0dXJuIFc4KCksY3Qob3QoSWx0LDEpLGFlLDI5MiwwLFtMbHQsTWx0LG1PXSl9ZnVuY3Rpb24gUnJuKCl7cmV0dXJuIHNvKCksY3Qob3QoV3dlLDEpLGFlLDQ1MiwwLFtNUyxKdSxldV0pfWZ1bmN0aW9uIGpybigpe3JldHVybiBqMCgpLGN0KG90KEZDdCwxKSxhZSwzMzksMCxbZ2IsUEN0LGZodF0pfWZ1bmN0aW9uICRybigpe3JldHVybiB1eigpLGN0KG90KCRDdCwxKSxhZSwzNzUsMCxbUkN0LHBodCxqQ3RdKX1mdW5jdGlvbiB6cm4oKXtyZXR1cm4gZ3ooKSxjdChvdChXQ3QsMSksYWUsMzc3LDAsW21odCx4NyxWeV0pfWZ1bmN0aW9uIHFybigpe3JldHVybiB0RSgpLGN0KG90KEhDdCwxKSxhZSwzMzYsMCxbdmh0LHFDdCxJU10pfWZ1bmN0aW9uIEhybigpe3JldHVybiBveigpLGN0KG90KFVDdCwxKSxhZSwzMzgsMCxbVkN0LHdodCxHQ3RdKX1mdW5jdGlvbiBHcm4oKXtyZXR1cm4gWnYoKSxjdChvdChobWUsMSksYWUsNDU0LDAsW09PLERTLGRWXSl9ZnVuY3Rpb24gVnJuKCl7cmV0dXJuIEN6KCksY3Qob3Qod3llLDEpLGFlLDQ0MiwwLFtOaHQsRGh0LE9odF0pfWZ1bmN0aW9uIFVybigpe3JldHVybiBSSSgpLGN0KG90KHZfdCwxKSxhZSwzODAsMCxbQ1YscF90LGJfdF0pfWZ1bmN0aW9uIFdybigpe3JldHVybiBUeigpLGN0KG90KFBfdCwxKSxhZSwzODEsMCxbTl90LCRodCxPX3RdKX1mdW5jdGlvbiBLcm4oKXtyZXR1cm4gY3ooKSxjdChvdChJX3QsMSksYWUsMjkzLDAsW2podCxNX3QsTF90XSl9ZnVuY3Rpb24gWXJuKCl7cmV0dXJuIEdJKCksY3Qob3Qoemh0LDEpLGFlLDQzNywwLFtBVixMVixNVl0pfWZ1bmN0aW9uIFhybigpe3JldHVybiAkMCgpLGN0KG90KFRBdCwxKSxhZSwzMzQsMCxbSFYsWmcsWVNdKX1mdW5jdGlvbiBRcm4oKXtyZXR1cm4gQTEoKSxjdChvdChmQXQsMSksYWUsMjcyLDAsW183LFl5LFM3XSl9ZnVuY3Rpb24gWnJuKHQsZSl7cmV0dXJuIG1ibih0LGUsRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gSnJuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1FXyh0LGUsITEpLHIuYjw9ZSYmci5hPD1ufWZ1bmN0aW9uIGpRdCh0LGUsbil7dmFyIHI7cj1uZXcgQ1Esci5iPWUsci5hPW4sKytlLmIsdWUodC5kLHIpfWZ1bmN0aW9uIHRpbih0LGUpe3ZhciBuO3JldHVybiBuPShPbih0KSx0KS5nLFAydCghIW4pLE9uKGUpLG4oZSl9ZnVuY3Rpb24gend0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj12OCh0LGUpLG49dC5hLlpjKHIpLG5ldyB0R3QodCxuKX1mdW5jdGlvbiBlaW4odCl7cmV0dXJuIHQuRGI+PjE2IT02P251bGw6dShHc3QodCksMjM1KX1mdW5jdGlvbiBuaW4odCl7aWYodC5wIT0yKXRocm93IHJ0KG5ldyBJdSk7cmV0dXJuIFNyKHQuZikmbXN9ZnVuY3Rpb24gcmluKHQpe2lmKHQucCE9Mil0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspJm1zfWZ1bmN0aW9uIGlpbih0KXtyZXR1cm4gdC5hPT0oTDgoKSxvVSkmJl90dCh0LFBibih0LmcsdC5iKSksdC5hfWZ1bmN0aW9uIHF4KHQpe3JldHVybiB0LmQ9PShMOCgpLG9VKSYmRTkodCxBd24odC5nLHQuYikpLHQuZH1mdW5jdGlvbiBKKHQpe3JldHVybiBRbih0LmE8dC5jLmMubGVuZ3RoKSx0LmI9dC5hKyssdC5jLmNbdC5iXX1mdW5jdGlvbiBzaW4odCxlKXt0LmI9dC5ifGUuYix0LmM9dC5jfGUuYyx0LmQ9dC5kfGUuZCx0LmE9dC5hfGUuYX1mdW5jdGlvbiBQcyh0LGUpe3JldHVybiBWcChKdG4oQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKSl9ZnVuY3Rpb24gQzEodCxlKXtyZXR1cm4gVnAodGVuKEJvKHQpP1NoKHQpOnQsQm8oZSk/U2goZSk6ZSkpfWZ1bmN0aW9uIHlydCh0LGUpe3JldHVybiBWcChlZW4oQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKSl9ZnVuY3Rpb24gYWluKHQpe3JldHVybiBPYShNMChrdShvbCh0LDMyKSksMzIpLGt1KG9sKHQsMzIpKSl9ZnVuY3Rpb24gR3YodCl7cmV0dXJuIEFyKHQpLEV0KHQsMTQpP25ldyBQdSh1KHQsMTQpKTpkOCh0LktjKCkpfWZ1bmN0aW9uIG9pbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKGUuZCx0LmQpOkxzKHQuYyxlLmMpfWZ1bmN0aW9uIGNpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKHQuZCxlLmQpOkxzKHQuYyxlLmMpfWZ1bmN0aW9uIHVpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKHQuZCxlLmQpOkxzKGUuYyx0LmMpfWZ1bmN0aW9uIGxpbih0LGUpe3JldHVybiAkQygpLHQuYz09ZS5jP0xzKGUuZCx0LmQpOkxzKGUuYyx0LmMpfWZ1bmN0aW9uIGhpbih0LGUpe3ZhciBuO249WHQoeWUodC5hLldlKChjaSgpLHFWKSkpKSxTaGUodCxlLG4pfWZ1bmN0aW9uIGZpbih0LGUpe3ZhciBuO249dShKbih0LmcsZSksNTcpLG11KGUuZCxuZXcgSEd0KHQsbikpfWZ1bmN0aW9uIGRpbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49Q3NlKHQpLHI9Q3NlKGUpLG48cj8tMTpuPnI/MTowfWZ1bmN0aW9uICRRdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49R3J0KGUpLHI9bix1KEpuKHQuYyxyKSwxOSkuYX1mdW5jdGlvbiB6UXQodCxlKXt2YXIgbjtmb3Iobj10KyIiO24ubGVuZ3RoPGU7KW49IjAiK247cmV0dXJuIG59ZnVuY3Rpb24gYiQodCl7cmV0dXJuIHQuYz09bnVsbHx8dC5jLmxlbmd0aD09MD8ibl8iK3QuZzoibl8iK3QuY31mdW5jdGlvbiBxd3QodCl7cmV0dXJuIHQuYz09bnVsbHx8dC5jLmxlbmd0aD09MD8ibl8iK3QuYjoibl8iK3QuY31mdW5jdGlvbiBId3QodCxlKXtyZXR1cm4gdCYmdC5lcXVhbHM/dC5lcXVhbHMoZSk6R3QodCk9PT1HdChlKX1mdW5jdGlvbiBHd3QodCxlKXtyZXR1cm4gZT09MD8hIXQubyYmdC5vLmYhPTA6ZXN0KHQsZSl9ZnVuY3Rpb24gaGYodCxlLG4pe3ZhciByO3QubiYmZSYmbiYmKHI9bmV3IHFaLHVlKHQuZSxyKSl9ZnVuY3Rpb24geHJ0KHQsZSxuKXt2YXIgcjtyPXQuZFtlLnBdLHQuZFtlLnBdPXQuZFtuLnBdLHQuZFtuLnBdPXJ9ZnVuY3Rpb24gcVF0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLmo9ZSx0aGlzLmU9bix0aGlzLm89LTEsdGhpcy5wPTN9ZnVuY3Rpb24gSFF0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLms9ZSx0aGlzLmY9bix0aGlzLm89LTEsdGhpcy5wPTV9ZnVuY3Rpb24gR1F0KHQsZSxuKXt2di5jYWxsKHRoaXMsMjUpLHRoaXMuYj10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIE5sKHQpe2dpKCksdnYuY2FsbCh0aGlzLHQpLHRoaXMuYz0hMSx0aGlzLmE9ITF9ZnVuY3Rpb24gVlF0KHQsZSxuLHIscyxvKXt6bXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gVVF0KHQsZSxuLHIscyxvKXtxbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gV1F0KHQsZSxuLHIscyxvKXtmbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gS1F0KHQsZSxuLHIscyxvKXtWbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWVF0KHQsZSxuLHIscyxvKXtkbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWFF0KHQsZSxuLHIscyxvKXtIbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gUVF0KHQsZSxuLHIscyxvKXtHbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gWlF0KHQsZSxuLHIscyxvKXtnbXQuY2FsbCh0aGlzLHQsZSxuLHIscyksbyYmKHRoaXMubz0tMil9ZnVuY3Rpb24gSlF0KHQsZSxuLHIpe29SLmNhbGwodGhpcyxuKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmQ9cn1mdW5jdGlvbiBWd3QodCxlKXt0aGlzLmE9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5mPXQsdGhpcy5jPWV9ZnVuY3Rpb24gdFp0KCl7dGhpcy5jPW5ldyBfVXQsdGhpcy5hPW5ldyBVWHQsdGhpcy5iPW5ldyBpcXQsdkd0KCl9ZnVuY3Rpb24gZVp0KCl7UXgoKSx0aGlzLmI9bmV3IENyLHRoaXMuYT1uZXcgQ3IsdGhpcy5jPW5ldyBsZX1mdW5jdGlvbiBuWnQodCxlKXt0aGlzLmc9dCx0aGlzLmQ9KEw4KCksb1UpLHRoaXMuYT1vVSx0aGlzLmI9ZX1mdW5jdGlvbiByWnQodCxlKXt0aGlzLmY9dCx0aGlzLmE9KEw4KCksYVUpLHRoaXMuYz1hVSx0aGlzLmI9ZX1mdW5jdGlvbiBVd3QodCxlKXshdC5jJiYodC5jPW5ldyBpcyh0LDApKSxrcSh0LmMsKERpKCksb0EpLGUpfWZ1bmN0aW9uIHYkKCl7diQ9WixJaHQ9bmV3IHFidCgiREZTIiwwKSxsX3Q9bmV3IHFidCgiQkZTIiwxKX1mdW5jdGlvbiBnaW4odCxlLG4pe3ZhciByO3JldHVybiByPXUodC5aYigpLnhjKGUpLDE0KSwhIXImJnIuSGMobil9ZnVuY3Rpb24gaVp0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj11KHQuWmIoKS54YyhlKSwxNCksISFyJiZyLk1jKG4pfWZ1bmN0aW9uIHNadCh0LGUsbixyKXtyZXR1cm4gdC5hKz0iIitEbChlPT1udWxsP1R1OiRvKGUpLG4sciksdH1mdW5jdGlvbiByYyh0LGUsbixyLHMsbyl7cmV0dXJuIHduZSh0LGUsbixvKSxYeXQodCxyKSxReXQodCxzKSx0fWZ1bmN0aW9uIGtydCh0KXtyZXR1cm4gUW4odC5iLmIhPXQuZC5hKSx0LmM9dC5iPXQuYi5iLC0tdC5hLHQuYy5jfWZ1bmN0aW9uIE9DKHQpe2Zvcig7dC5kPjAmJnQuYVstLXQuZF09PTA7KTt0LmFbdC5kKytdPT0wJiYodC5lPTApfWZ1bmN0aW9uIGFadCh0KXtyZXR1cm4gdC5hP3QuZS5sZW5ndGg9PTA/dC5hLmE6dC5hLmErKCIiK3QuZSk6dC5jfWZ1bmN0aW9uIHBpbih0KXtyZXR1cm4hIXQuYSYmaWwodC5hLmEpLmkhPTAmJiEodC5iJiZjc3QodC5iKSl9ZnVuY3Rpb24gYmluKHQpe3JldHVybiEhdC51JiZMYyh0LnUuYSkuaSE9MCYmISh0Lm4mJm9zdCh0Lm4pKX1mdW5jdGlvbiBvWnQodCl7cmV0dXJuIF9udCh0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCksMTYsbmV3IG94KHQpKX1mdW5jdGlvbiB2aW4odCxlKXtyZXR1cm4gQll0KGt1KHQucS5nZXRUaW1lKCkpLGt1KGUucS5nZXRUaW1lKCkpKX1mdW5jdGlvbiBnZCh0KXtyZXR1cm4gdShEMSh0LFB0KHRsdCxGb3QsMTcsdC5jLmxlbmd0aCwwLDEpKSw0NzQpfWZ1bmN0aW9uIHNJKHQpe3JldHVybiB1KEQxKHQsUHQobzAsemcsMTAsdC5jLmxlbmd0aCwwLDEpKSwxOTMpfWZ1bmN0aW9uIHdpbih0KXtyZXR1cm4gT2woKSwhVmEodCkmJiEoIVZhKHQpJiZ0LmMuaS5jPT10LmQuaS5jKX1mdW5jdGlvbiBjWnQodCxlLG4pe3ZhciByO3I9KEFyKHQpLG5ldyBQdSh0KSksS2ZuKG5ldyB4UXQocixlLG4pKX1mdW5jdGlvbiBhSSh0LGUsbil7dmFyIHI7cj0oQXIodCksbmV3IFB1KHQpKSxZZm4obmV3IGtRdChyLGUsbikpfWZ1bmN0aW9uIHVadCh0LGUpe3ZhciBuO3JldHVybiBuPTEtZSx0LmFbbl09bnoodC5hW25dLG4pLG56KHQsZSl9ZnVuY3Rpb24gbFp0KHQsZSl7dmFyIG47dC5lPW5ldyBWcHQsbj1neShlKSxYcyhuLHQuYykscnVlKHQsbiwwKX1mdW5jdGlvbiBhYSh0LGUsbixyKXt2YXIgcztzPW5ldyBXRixzLmE9ZSxzLmI9bixzLmM9cixuaSh0LmEscyl9ZnVuY3Rpb24geGUodCxlLG4scil7dmFyIHM7cz1uZXcgV0Yscy5hPWUscy5iPW4scy5jPXIsbmkodC5iLHMpfWZ1bmN0aW9uIGZmKHQpe3ZhciBlLG4scjtyZXR1cm4gZT1uZXcgR1l0LG49dWF0KGUsdCkscjRuKGUpLHI9bixyfWZ1bmN0aW9uIFd3dCgpe3ZhciB0LGUsbjtyZXR1cm4gZT0obj0odD1uZXcgd3YsdCksbiksdWUodUx0LGUpLGV9ZnVuY3Rpb24gdyQodCl7cmV0dXJuIHQuai5jPVB0KFhuLEllLDEsMCw1LDEpLFR3dCh0LmMpLFplbih0LmEpLHR9ZnVuY3Rpb24gWjModCl7cmV0dXJuIHE5KCksRXQodC5nLDEwKT91KHQuZywxMCk6bnVsbH1mdW5jdGlvbiBtaW4odCl7cmV0dXJuIFkzKHQpLmRjKCk/ITE6KHdYZSh0LG5ldyBodCksITApfWZ1bmN0aW9uIHlpbih0KXtpZighKCJzdGFjayJpbiB0KSl0cnl7dGhyb3cgdH1jYXRjaHt9cmV0dXJuIHR9ZnVuY3Rpb24gb0kodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgcnQobmV3IG1vKE9nbih0LGUpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaFp0KHQsZSxuKXtpZih0PDB8fGU8dHx8ZT5uKXRocm93IHJ0KG5ldyBtbyhpZ24odCxlLG4pKSl9ZnVuY3Rpb24gRXJ0KHQsZSl7aWYoTnModC5hLGUpLGUuZCl0aHJvdyBydChuZXcgR28odmZlKSk7ZS5kPXR9ZnVuY3Rpb24gVHJ0KHQsZSl7aWYoZS4kbW9kQ291bnQhPXQuJG1vZENvdW50KXRocm93IHJ0KG5ldyBlaCl9ZnVuY3Rpb24gZlp0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24gZFp0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24gZ1p0KHQsZSl7cmV0dXJuIEV0KGUsNDIpP2RzdCh0LmEsdShlLDQyKSk6ITF9ZnVuY3Rpb24geGluKHQsZSl7cmV0dXJuIHQuYTw9dC5iPyhlLnVkKHQuYSsrKSwhMCk6ITF9ZnVuY3Rpb24gVnYodCl7dmFyIGU7cmV0dXJuIEJvKHQpPyhlPXQsZT09LTA/MDplKTpNYW4odCl9ZnVuY3Rpb24gbSQodCl7dmFyIGU7cmV0dXJuICRwKHQpLGU9bmV3IEtlLEIzKHQuYSxuZXcgYm4oZSkpLGV9ZnVuY3Rpb24gcFp0KHQpe3ZhciBlO3JldHVybiAkcCh0KSxlPW5ldyBHZSxCMyh0LmEsbmV3IHBlKGUpKSxlfWZ1bmN0aW9uIGhhKHQsZSl7dGhpcy5hPXQsZnguY2FsbCh0aGlzLHQpLFVtKGUsdC5nYygpKSx0aGlzLmI9ZX1mdW5jdGlvbiBLd3QodCl7dGhpcy5lPXQsdGhpcy5iPXRoaXMuZS5hLmVudHJpZXMoKSx0aGlzLmE9bmV3IEFycmF5fWZ1bmN0aW9uIGtpbih0KXtyZXR1cm4gX250KHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSwyNzMsbmV3IEdCKHQpKX1mdW5jdGlvbiB5JCh0KXtyZXR1cm4gbmV3IFljKChCbCh0LEJhdCkscSQoT2EoT2EoNSx0KSx0LzEwfDApKSkpfWZ1bmN0aW9uIGJadCh0KXtyZXR1cm4gdShEMSh0LFB0KEZiZSxLZmUsMTEsdC5jLmxlbmd0aCwwLDEpKSwxOTQzKX1mdW5jdGlvbiBFaW4odCxlLG4pe3JldHVybiBuLmYuYy5sZW5ndGg+MD9od3QodC5hLGUsbik6aHd0KHQuYixlLG4pfWZ1bmN0aW9uIFRpbih0LGUsbil7dC5kJiZ2dSh0LmQuZSx0KSx0LmQ9ZSx0LmQmJiRtKHQuZC5lLG4sdCl9ZnVuY3Rpb24gQ3J0KHQsZSl7djVuKGUsdCksTXZ0KHQuZCksTXZ0KHUoUSh0LChUZSgpLG5WKSksMjA3KSl9ZnVuY3Rpb24gTkModCxlKXtiNW4oZSx0KSxMdnQodC5kKSxMdnQodShRKHQsKFRlKCksblYpKSwyMDcpKX1mdW5jdGlvbiBVdih0LGUpe3ZhciBuLHI7cmV0dXJuIG49RDAodCxlKSxyPW51bGwsbiYmKHI9bi5mZSgpKSxyfWZ1bmN0aW9uIF84KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1YbSh0LGUpLHI9bnVsbCxuJiYocj1uLmllKCkpLHJ9ZnVuY3Rpb24gUEModCxlKXt2YXIgbixyO3JldHVybiBuPUQwKHQsZSkscj1udWxsLG4mJihyPW4uaWUoKSkscn1mdW5jdGlvbiBPMCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49RDAodCxlKSxyPW51bGwsbiYmKHI9ajR0KG4pKSxyfWZ1bmN0aW9uIENpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0UobiksdnEodC5nLHIsZSksdnEodC5pLGUsbiksZX1mdW5jdGlvbiBfaW4odCxlLG4pe3ZhciByO3I9dGhuKCk7dHJ5e3JldHVybiBJUWUodCxlLG4pfWZpbmFsbHl7QmluKHIpfX1mdW5jdGlvbiB2WnQodCl7dmFyIGU7ZT10LldnKCksdGhpcy5hPUV0KGUsNjkpP3UoZSw2OSkuWmgoKTplLktjKCl9ZnVuY3Rpb24gSHMoKXtJcXQuY2FsbCh0aGlzKSx0aGlzLmouYz1QdChYbixJZSwxLDAsNSwxKSx0aGlzLmE9LTF9ZnVuY3Rpb24gWXd0KHQsZSxuLHIpe3RoaXMuZD10LHRoaXMubj1lLHRoaXMuZz1uLHRoaXMubz1yLHRoaXMucD0tMX1mdW5jdGlvbiB3WnQodCxlLG4scil7dGhpcy5lPXIsdGhpcy5kPW51bGwsdGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gWHd0KHQsZSxuKXt0aGlzLmQ9bmV3IHNSKHRoaXMpLHRoaXMuZT10LHRoaXMuaT1lLHRoaXMuZj1ufWZ1bmN0aW9uIHgkKCl7eCQ9WixEbHQ9bmV3IE9idChORSwwKSxWVHQ9bmV3IE9idCgiVE9QX0xFRlQiLDEpfWZ1bmN0aW9uIG1adCgpe21adD1aLFlDdD1nWHQoZGUoMSksZGUoNCkpLEtDdD1nWHQoZGUoMSksZGUoMikpfWZ1bmN0aW9uIHladCgpe3ladD1aLGMzZT1XcigoSVIoKSxjdChvdChvM2UsMSksYWUsNTUxLDAsW0hodF0pKSl9ZnVuY3Rpb24geFp0KCl7eFp0PVosYTNlPVdyKChNUigpLGN0KG90KEtfdCwxKSxhZSw0ODIsMCxbcWh0XSkpKX1mdW5jdGlvbiBrWnQoKXtrWnQ9WixfM2U9V3IoKEg5KCksY3Qob3QocFN0LDEpLGFlLDUzMCwwLFtqT10pKSl9ZnVuY3Rpb24gRVp0KCl7RVp0PVosRHBlPVdyKChBUigpLGN0KG90KHI3dCwxKSxhZSw0ODEsMCxbUnV0XSkpKX1mdW5jdGlvbiBTaW4oKXtyZXR1cm4gdHcoKSxjdChvdChDcGUsMSksYWUsNDA2LDAsW2FPLHNPLEZ1dCxCdXRdKX1mdW5jdGlvbiBBaW4oKXtyZXR1cm4gUCQoKSxjdChvdChLSCwxKSxhZSwyOTcsMCxbQXV0LF9FdCxTRXQsQUV0XSl9ZnVuY3Rpb24gTGluKCl7cmV0dXJuIHNfKCksY3Qob3QoTXBlLDEpLGFlLDM5NCwwLFtoTyxKSCx0RyxmT10pfWZ1bmN0aW9uIE1pbigpe3JldHVybiBuNigpLGN0KG90KFNwZSwxKSxhZSwzMjMsMCxbY08sb08sdU8sbE9dKX1mdW5jdGlvbiBJaW4oKXtyZXR1cm4gSzgoKSxjdChvdChUYmUsMSksYWUsNDA1LDAsW193LER5LEl5LGo0XSl9ZnVuY3Rpb24gRGluKCl7cmV0dXJuIGR6KCksY3Qob3QoSGJlLDEpLGFlLDM2MCwwLFthbHQsX0csU0csdk9dKX1mdW5jdGlvbiBUWnQodCxlLG4scil7cmV0dXJuIEV0KG4sNTQpP25ldyBsV3QodCxlLG4scik6bmV3IHR3dCh0LGUsbixyKX1mdW5jdGlvbiBPaW4oKXtyZXR1cm4gTTEoKSxjdChvdChaYmUsMSksYWUsNDExLDAsW182LGk3LHM3LG9sdF0pfWZ1bmN0aW9uIE5pbih0KXt2YXIgZTtyZXR1cm4gdC5qPT0oYmUoKSxtcikmJihlPVVvZSh0KSxOdShlLEhuKSl9ZnVuY3Rpb24gUGluKHQsZSl7dmFyIG47bj1lLmEsRGEobixlLmMuZCksc2EobixlLmQuZCksSm0obi5hLHQubil9ZnVuY3Rpb24gQ1p0KHQsZSl7cmV0dXJuIHUoT3YocWoodShBaSh0LmssZSksMTUpLk9jKCksejQpKSwxMTMpfWZ1bmN0aW9uIF9adCh0LGUpe3JldHVybiB1KE92KEhqKHUoQWkodC5rLGUpLDE1KS5PYygpLHo0KSksMTEzKX1mdW5jdGlvbiBGaW4odCl7cmV0dXJuIG5ldyBfbihPb24odSh0LmEuZGQoKSwxNCkuZ2MoKSx0LmEuY2QoKSksMTYpfWZ1bmN0aW9uIFM4KHQpe3JldHVybiBFdCh0LDE0KT91KHQsMTQpLmRjKCk6IXQuS2MoKS5PYigpfWZ1bmN0aW9uIEh4KHQpe3JldHVybiBxOSgpLEV0KHQuZywxNDUpP3UodC5nLDE0NSk6bnVsbH1mdW5jdGlvbiBTWnQodCl7aWYodC5lLmchPXQuYil0aHJvdyBydChuZXcgZWgpO3JldHVybiEhdC5jJiZ0LmQ+MH1mdW5jdGlvbiB0aSh0KXtyZXR1cm4gUW4odC5iIT10LmQuYyksdC5jPXQuYix0LmI9dC5iLmEsKyt0LmEsdC5jLmN9ZnVuY3Rpb24gUXd0KHQsZSl7T24oZSksSmkodC5hLHQuYyxlKSx0LmM9dC5jKzEmdC5hLmxlbmd0aC0xLEFzZSh0KX1mdW5jdGlvbiBxcCh0LGUpe09uKGUpLHQuYj10LmItMSZ0LmEubGVuZ3RoLTEsSmkodC5hLHQuYixlKSxBc2UodCl9ZnVuY3Rpb24gQVp0KHQsZSl7dmFyIG47Zm9yKG49dC5qLmMubGVuZ3RoO248ZTtuKyspdWUodC5qLHQucmcoKSl9ZnVuY3Rpb24gTFp0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPXJbZS5nXVtuLmddLFh0KHllKFEodC5hLHMpKSl9ZnVuY3Rpb24gWnd0KHQsZSxuLHIscyl7dGhpcy5pPXQsdGhpcy5hPWUsdGhpcy5lPW4sdGhpcy5qPXIsdGhpcy5mPXN9ZnVuY3Rpb24gTVp0KHQsZSxuLHIscyl7dGhpcy5hPXQsdGhpcy5lPWUsdGhpcy5mPW4sdGhpcy5iPXIsdGhpcy5nPXN9ZnVuY3Rpb24gQmluKHQpe3QmJk9hbigoWXB0KCksWDh0KSksLS16SCx0JiZxSCE9LTEmJih4WWUocUgpLHFIPS0xKX1mdW5jdGlvbiBSaW4oKXtyZXR1cm4gc3koKSxjdChvdCh1aHQsMSksYWUsMTk3LDAsW2xWLGNodCx0NSxKNF0pfWZ1bmN0aW9uIGppbigpe3JldHVybiB1RSgpLGN0KG90KFpDdCwxKSxhZSwzOTMsMCxbdlYsUFMsUE8sRlNdKX1mdW5jdGlvbiAkaW4oKXtyZXR1cm4gR3ooKSxjdChvdChBX3QsMSksYWUsMzQwLDAsW1JodCxfX3QsU190LENfdF0pfWZ1bmN0aW9uIHppbigpe3JldHVybiBfbCgpLGN0KG90KHRBLDEpLGFlLDM3NCwwLFtuTixWMixlTixYeV0pfWZ1bmN0aW9uIHFpbigpe3JldHVybiBqbCgpLGN0KG90KHU0ZSwxKSxhZSwyODUsMCxbWk8sdTAsd2IsUU9dKX1mdW5jdGlvbiBIaW4oKXtyZXR1cm4gcTAoKSxjdChvdChwZnQsMSksYWUsMjE4LDAsW2dmdCxYTyxBNyxINl0pfWZ1bmN0aW9uIEdpbigpe3JldHVybiBBeigpLGN0KG90KE9BdCwxKSxhZSwzMTEsMCxbd2Z0LE1BdCxEQXQsSUF0XSl9ZnVuY3Rpb24gVmluKCl7cmV0dXJuIENsKCksY3Qob3QoVDRlLDEpLGFlLDM5NiwwLFtZbCxQQXQsTkF0LEZBdF0pfWZ1bmN0aW9uIFVpbih0KXtyZXR1cm4gZyQoKSxrbChFZnQsdCk/dShKbihFZnQsdCksMzMxKS51ZygpOm51bGx9ZnVuY3Rpb24gc2godCxlLG4pe3JldHVybiBlPDA/enN0KHQsbik6dShuLDY2KS5OaigpLlNqKHQsdC55aCgpLGUpfWZ1bmN0aW9uIFdpbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0UobiksdnEodC5kLHIsZSksa2kodC5lLGUsbiksZX1mdW5jdGlvbiBLaW4odCxlLG4pe3ZhciByO3JldHVybiByPW9FKG4pLHZxKHQuaixyLGUpLGtpKHQuayxlLG4pLGV9ZnVuY3Rpb24gSVp0KHQpe3ZhciBlLG47cmV0dXJuIGU9KFR2KCksbj1uZXcgZnYsbiksdCYmWHN0KGUsdCksZX1mdW5jdGlvbiBKd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5yaSh0LmkpLHQuaT4wJiZJYyh0LmcsMCxlLDAsdC5pKSxlfWZ1bmN0aW9uIERadCh0LGUpe05SKCk7dmFyIG47cmV0dXJuIG49dShKbihuVSx0KSw1NSksIW58fG4ud2ooZSl9ZnVuY3Rpb24gWWluKHQpe2lmKHQucCE9MSl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmYpPDwyND4+MjR9ZnVuY3Rpb24gWGluKHQpe2lmKHQucCE9MSl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspPDwyND4+MjR9ZnVuY3Rpb24gUWluKHQpe2lmKHQucCE9Nyl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmspPDwxNj4+MTZ9ZnVuY3Rpb24gWmluKHQpe2lmKHQucCE9Nyl0aHJvdyBydChuZXcgSXUpO3JldHVybiBTcih0LmYpPDwxNj4+MTZ9ZnVuY3Rpb24gTjAodCl7dmFyIGU7Zm9yKGU9MDt0Lk9iKCk7KXQuUGIoKSxlPU9hKGUsMSk7cmV0dXJuIHEkKGUpfWZ1bmN0aW9uIE9adCh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBMbSx0LnhkKG4pLG4uYSs9Ii4uIixlLnlkKG4pLG4uYX1mdW5jdGlvbiBKaW4odCxlLG4pe3ZhciByO3I9dShKbih0LmcsbiksNTcpLHVlKHQuYS5jLG5ldyBsYShlLHIpKX1mdW5jdGlvbiB0c24odCxlLG4pe3JldHVybiBQbnQoeWUoZWMoQW8odC5mLGUpKSkseWUoZWMoQW8odC5mLG4pKSkpfWZ1bmN0aW9uIGskKHQsZSxuKXtyZXR1cm4gbXEodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gZXNuKHQsZSxuKXtyZXR1cm4gRUUodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl9ZnVuY3Rpb24gbnNuKHQsZSxuKXtyZXR1cm4gQ2JuKHQsZSxuLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApfWZ1bmN0aW9uIHRtdCh0LGUpe3JldHVybiB0PT0oR24oKSxEcykmJmU9PURzPzQ6dD09RHN8fGU9PURzPzg6MzJ9ZnVuY3Rpb24gTlp0KHQsZSl7cmV0dXJuIEd0KGUpPT09R3QodCk/Iih0aGlzIE1hcCkiOmU9PW51bGw/VHU6JG8oZSl9ZnVuY3Rpb24gcnNuKHQsZSl7cmV0dXJuIHUoZT09bnVsbD9lYyhBbyh0LmYsbnVsbCkpOlU5KHQuZyxlKSwyODEpfWZ1bmN0aW9uIFBadCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9b0Uobiksa2kodC5iLHIsZSksa2kodC5jLGUsbiksZX1mdW5jdGlvbiBGWnQodCxlKXt2YXIgbjtmb3Iobj1lO247KUZtKHQsbi5pLG4uaiksbj10cyhuKTtyZXR1cm4gdH1mdW5jdGlvbiBlbXQodCxlKXt2YXIgbjtyZXR1cm4gbj1KTShkOChuZXcgVnJ0KHQsZSkpKSxPaihuZXcgVnJ0KHQsZSkpLG59ZnVuY3Rpb24gWWQodCxlKXt0bygpO3ZhciBuO3JldHVybiBuPXUodCw2NikuTWooKSxCMG4obixlKSxuLk9rKGUpfWZ1bmN0aW9uIGlzbih0LGUsbixyLHMpe3ZhciBvO289TWJuKHMsbixyKSx1ZShlLEFnbihzLG8pKSxtMG4odCxzLGUpfWZ1bmN0aW9uIEJadCh0LGUsbil7dC5pPTAsdC5lPTAsZSE9biYmKGNyZSh0LGUsbiksb3JlKHQsZSxuKSl9ZnVuY3Rpb24gbm10KHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSx0LnEuc2V0RnVsbFllYXIoZStuYikseV8odCxuKX1mdW5jdGlvbiBzc24odCxlLG4pe2lmKG4pe3ZhciByPW4uZWUoKTt0LmFbZV09cihuKX1lbHNlIGRlbGV0ZSB0LmFbZV19ZnVuY3Rpb24gX3J0KHQsZSxuKXtpZihuKXt2YXIgcj1uLmVlKCk7bj1yKG4pfWVsc2Ugbj12b2lkIDA7dC5hW2VdPW59ZnVuY3Rpb24gUlp0KHQpe2lmKHQ8MCl0aHJvdyBydChuZXcgSHF0KCJOZWdhdGl2ZSBhcnJheSBzaXplOiAiK3QpKX1mdW5jdGlvbiBMYyh0KXtyZXR1cm4gdC5ufHwocmwodCksdC5uPW5ldyB2WXQodCxobyx0KSxTbyh0KSksdC5ufWZ1bmN0aW9uIEZDKHQpe3JldHVybiBRbih0LmE8dC5jLmEubGVuZ3RoKSx0LmI9dC5hLFZ0ZSh0KSx0LmMuYlt0LmJdfWZ1bmN0aW9uIHJtdCh0KXt0LmIhPXQuYyYmKHQuYT1QdChYbixJZSwxLDgsNSwxKSx0LmI9MCx0LmM9MCl9ZnVuY3Rpb24galp0KHQpe3RoaXMuYj1uZXcgQ3IsdGhpcy5jPW5ldyBDcix0aGlzLmQ9bmV3IENyLHRoaXMuYT10fWZ1bmN0aW9uIFdtKHQsZSl7Z2koKSx2di5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5jPS0xLHRoaXMuYj0tMX1mdW5jdGlvbiBLbSh0LGUsbixyKXtxUXQuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBTcnQodCxlLG4scil7SFF0LmNhbGwodGhpcywxLG4sciksdGhpcy5jPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQXJ0KHQsZSxuLHIscyxvLGgpe2VpdC5jYWxsKHRoaXMsZSxyLHMsbyxoKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBlMih0LGUsbil7dGhpcy5lPXQsdGhpcy5hPVhuLHRoaXMuYj1FdWUoZSksdGhpcy5jPWUsdGhpcy5kPW59ZnVuY3Rpb24gTHJ0KHQpe3RoaXMuZT10LHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmcsdGhpcy5kPXRoaXMuZS5pfWZ1bmN0aW9uICRadCh0KXt0aGlzLmM9dCx0aGlzLmE9dShMaCh0KSwxNDgpLHRoaXMuYj10aGlzLmEuQWooKS5OaCgpfWZ1bmN0aW9uIGltdCh0KXt0aGlzLmQ9dCx0aGlzLmI9dGhpcy5kLmEuZW50cmllcygpLHRoaXMuYT10aGlzLmIubmV4dCgpfWZ1bmN0aW9uIG4yKCl7Q3IuY2FsbCh0aGlzKSxhV3QodGhpcyksdGhpcy5kLmI9dGhpcy5kLHRoaXMuZC5hPXRoaXMuZH1mdW5jdGlvbiB6WnQodCxlKXt0dnQuY2FsbCh0aGlzKSx0aGlzLmE9dCx0aGlzLmI9ZSx1ZSh0aGlzLmEuYix0aGlzKX1mdW5jdGlvbiBhc24odCxlKXt2YXIgbjtyZXR1cm4gbj1lIT1udWxsP0ZjKHQsZSk6ZWMoQW8odC5mLGUpKSxuaihuKX1mdW5jdGlvbiBvc24odCxlKXt2YXIgbjtyZXR1cm4gbj1lIT1udWxsP0ZjKHQsZSk6ZWMoQW8odC5mLGUpKSxuaihuKX1mdW5jdGlvbiBxWnQodCxlKXt2YXIgbjtmb3Iobj0wO248ZTsrK24pSmkodCxuLG5ldyAkKHUodFtuXSw0MikpKX1mdW5jdGlvbiBjc24odCxlKXt2YXIgbjtmb3Iobj10LmQtMTtuPj0wJiZ0LmFbbl09PT1lW25dO24tLSk7cmV0dXJuIG48MH1mdW5jdGlvbiBIWnQodCxlKXtKOCgpO3ZhciBuO3JldHVybiBuPXQuai5nLWUuai5nLG4hPTA/bjowfWZ1bmN0aW9uIEdadCh0LGUpe3JldHVybiBPbihlKSx0LmEhPW51bGw/R3RuKGUuS2IodC5hKSk6V0h9ZnVuY3Rpb24gRSQodCl7dmFyIGU7cmV0dXJuIHQ/bmV3ICR2dCh0KTooZT1uZXcgQTAsbGl0KGUsdCksZSl9ZnVuY3Rpb24gUGwodCxlKXt2YXIgbjtyZXR1cm4gZS5iLktiKEZ0ZSh0LGUuYy5FZSgpLChuPW5ldyBEbihlKSxuKSkpfWZ1bmN0aW9uIFQkKHQpe0U0dCgpLE5VdCh0aGlzLFNyKFBzKEZwKHQsMjQpLFBxKSksU3IoUHModCxQcSkpKX1mdW5jdGlvbiBWWnQoKXtWWnQ9WixVZ2U9V3IoKE56KCksY3Qob3QoTkV0LDEpLGFlLDQyOCwwLFtJdXQsT0V0XSkpKX1mdW5jdGlvbiBVWnQoKXtVWnQ9WixXZ2U9V3IoKCQkKCksY3Qob3QoRkV0LDEpLGFlLDQyNywwLFtQRXQsRHV0XSkpKX1mdW5jdGlvbiBXWnQoKXtXWnQ9WixZcGU9V3IoKHokKCksY3Qob3QobDd0LDEpLGFlLDQyNCwwLFtIdXQsckddKSkpfWZ1bmN0aW9uIEtadCgpe0tadD1aLCRiZT1XcigocTgoKSxjdChvdChqYmUsMSksYWUsNTExLDAsW3BPLG5sdF0pKSl9ZnVuY3Rpb24gWVp0KCl7WVp0PVosZDJlPVdyKChUSSgpLGN0KG90KE1UdCwxKSxhZSw0MTksMCxbTkcsTFR0XSkpKX1mdW5jdGlvbiBYWnQoKXtYWnQ9Wix2MmU9V3IoKGJJKCksY3Qob3QoT1R0LDEpLGFlLDQ3OSwwLFtEVHQsRkddKSkpfWZ1bmN0aW9uIFFadCgpe1FadD1aLFh3ZT1XcigobEkoKSxjdChvdCh6Q3QsMSksYWUsMzc2LDAsW2JodCxET10pKSl9ZnVuY3Rpb24gWlp0KCl7Wlp0PVosVXdlPVdyKCh5SSgpLGN0KG90KEJDdCwxKSxhZSw0MjEsMCxbZGh0LGdodF0pKSl9ZnVuY3Rpb24gSlp0KCl7Slp0PVosdTJlPVdyKChEJCgpLGN0KG90KGtUdCwxKSxhZSw0MjIsMCxbeFR0LHZsdF0pKSl9ZnVuY3Rpb24gdEp0KCl7dEp0PVosVDJlPVdyKCh4JCgpLGN0KG90KFVUdCwxKSxhZSw0MjAsMCxbRGx0LFZUdF0pKSl9ZnVuY3Rpb24gZUp0KCl7ZUp0PVosem1lPVdyKChWZigpLGN0KG90KCRtZSwxKSxhZSw1MjAsMCxbVXkscGJdKSkpfWZ1bmN0aW9uIG5KdCgpe25KdD1aLHZtZT1XcigoQkMoKSxjdChvdChibWUsMSksYWUsNTIzLDAsW05TLE9TXSkpKX1mdW5jdGlvbiBySnQoKXtySnQ9WixUbWU9V3IoKGRkKCksY3Qob3QoRW1lLDEpLGFlLDUxNiwwLFtSdyxLZ10pKSl9ZnVuY3Rpb24gaUp0KCl7aUp0PVosX21lPVdyKChFMSgpLGN0KG90KENtZSwxKSxhZSw1MTUsMCxbajIsejFdKSkpfWZ1bmN0aW9uIHNKdCgpe3NKdD1aLEttZT1XcigocXYoKSxjdChvdChXbWUsMSksYWUsNDU1LDAsW2JiLGU1XSkpKX1mdW5jdGlvbiBhSnQoKXthSnQ9WixmeWU9V3IoKHYkKCksY3Qob3QoaF90LDEpLGFlLDQyNSwwLFtJaHQsbF90XSkpKX1mdW5jdGlvbiBvSnQoKXtvSnQ9Wix2eWU9V3IoKGl6KCksY3Qob3QoZl90LDEpLGFlLDQ5NSwwLFtUVixFN10pKSl9ZnVuY3Rpb24gY0p0KCl7Y0p0PVosaHllPVdyKChkJCgpLGN0KG90KHVfdCwxKSxhZSw0ODAsMCxbTWh0LGNfdF0pKSl9ZnVuY3Rpb24gdUp0KCl7dUp0PVoseXllPVdyKChOJCgpLGN0KG90KGdfdCwxKSxhZSw0MjYsMCxbZF90LFBodF0pKSl9ZnVuY3Rpb24gbEp0KCl7bEp0PVosUzNlPVdyKChOSSgpLGN0KG90KHZTdCwxKSxhZSw0MjksMCxbT1YsYlN0XSkpKX1mdW5jdGlvbiBoSnQoKXtoSnQ9Wix1M2U9V3IoKGhJKCksY3Qob3QoWV90LDEpLGFlLDQzMCwwLFtHaHQsSVZdKSkpfWZ1bmN0aW9uIEJDKCl7QkM9WixOUz1uZXcgRmJ0KCJVUFBFUiIsMCksT1M9bmV3IEZidCgiTE9XRVIiLDEpfWZ1bmN0aW9uIHVzbih0LGUpe3ZhciBuO249bmV3IG14LEpiKG4sIngiLGUuYSksSmIobiwieSIsZS5iKSxCeCh0LG4pfWZ1bmN0aW9uIGxzbih0LGUpe3ZhciBuO249bmV3IG14LEpiKG4sIngiLGUuYSksSmIobiwieSIsZS5iKSxCeCh0LG4pfWZ1bmN0aW9uIGhzbih0LGUpe3ZhciBuLHI7cj0hMTtkbyBuPUpuZSh0LGUpLHI9cnxuO3doaWxlKG4pO3JldHVybiByfWZ1bmN0aW9uIHNtdCh0LGUpe3ZhciBuLHI7Zm9yKG49ZSxyPTA7bj4wOylyKz10LmFbbl0sbi09biYtbjtyZXR1cm4gcn1mdW5jdGlvbiBmSnQodCxlKXt2YXIgbjtmb3Iobj1lO247KUZtKHQsLW4uaSwtbi5qKSxuPXRzKG4pO3JldHVybiB0fWZ1bmN0aW9uIHZhKHQsZSl7dmFyIG4scjtmb3IoT24oZSkscj10LktjKCk7ci5PYigpOyluPXIuUGIoKSxlLnRkKG4pfWZ1bmN0aW9uIGRKdCh0LGUpe3ZhciBuO3JldHVybiBuPWUuY2QoKSxuZXcgX3Yobix0LmUucGMobix1KGUuZGQoKSwxNCkpKX1mdW5jdGlvbiBocyh0LGUsbixyKXt2YXIgcztzPW5ldyBIdCxzLmM9ZSxzLmI9bixzLmE9cixyLmI9bi5hPXMsKyt0LmJ9ZnVuY3Rpb24gYWgodCxlLG4pe3ZhciByO3JldHVybiByPShBbihlLHQuYy5sZW5ndGgpLHQuY1tlXSksdC5jW2VdPW4scn1mdW5jdGlvbiBmc24odCxlLG4pe3JldHVybiB1KGU9PW51bGw/c3UodC5mLG51bGwsbik6bncodC5nLGUsbiksMjgxKX1mdW5jdGlvbiBNcnQodCl7cmV0dXJuIHQuYyYmdC5kP3F3dCh0LmMpKyItPiIrcXd0KHQuZCk6ImVfIitJdih0KX1mdW5jdGlvbiBBOCh0LGUpe3JldHVybihkMih0KSxqOShuZXcgVG4odCxuZXcgTG10KGUsdC5hKSkpKS5zZChKRSl9ZnVuY3Rpb24gZHNuKCl7cmV0dXJuIFdhKCksY3Qob3QoQzd0LDEpLGFlLDM1NiwwLFtBZCxsYixvdSxxYyxJb10pfWZ1bmN0aW9uIGdzbigpe3JldHVybiBiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSl9ZnVuY3Rpb24gcHNuKHQpe3JldHVybiB2UigpLGZ1bmN0aW9uKCl7cmV0dXJuIF9pbih0LHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gYnNuKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6bmV3IERhdGUoKS5nZXRUaW1lKCl9ZnVuY3Rpb24gVmEodCl7cmV0dXJuIXQuY3x8IXQuZD8hMTohIXQuYy5pJiZ0LmMuaT09dC5kLml9ZnVuY3Rpb24gZ0p0KHQpe2lmKCF0LmMuU2IoKSl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0LmE9ITAsdC5jLlViKCl9ZnVuY3Rpb24gY0kodCl7dC5pPTAseU0odC5iLG51bGwpLHlNKHQuYyxudWxsKSx0LmE9bnVsbCx0LmU9bnVsbCwrK3QuZ31mdW5jdGlvbiBhbXQodCl7RVllLmNhbGwodGhpcyx0PT1udWxsP1R1OiRvKHQpLEV0KHQsNzgpP3UodCw3OCk6bnVsbCl9ZnVuY3Rpb24gcEp0KHQpeyRoZSgpLGp6dCh0aGlzKSx0aGlzLmE9bmV3IFFpLE95dCh0aGlzLHQpLG5pKHRoaXMuYSx0KX1mdW5jdGlvbiBiSnQoKXtZZXQodGhpcyksdGhpcy5iPW5ldyAkZShzcyxzcyksdGhpcy5hPW5ldyAkZShUcyxUcyl9ZnVuY3Rpb24gdkp0KHQsZSl7dGhpcy5jPTAsdGhpcy5iPWUsVlZ0LmNhbGwodGhpcyx0LDE3NDkzKSx0aGlzLmE9dGhpcy5jfWZ1bmN0aW9uIElydCh0KXtDJCgpLCFSMSYmKHRoaXMuYz10LHRoaXMuZT0hMCx0aGlzLmE9bmV3IGxlKX1mdW5jdGlvbiBDJCgpe0MkPVosUjE9ITAsRmdlPSExLEJnZT0hMSxqZ2U9ITEsUmdlPSExfWZ1bmN0aW9uIG9tdCh0LGUpe3JldHVybiBFdChlLDE0OSk/aG4odC5jLHUoZSwxNDkpLmMpOiExfWZ1bmN0aW9uIGNtdCh0LGUpe3ZhciBuO3JldHVybiBuPTAsdCYmKG4rPXQuZi5hLzIpLGUmJihuKz1lLmYuYS8yKSxufWZ1bmN0aW9uIERydCh0LGUpe3ZhciBuO3JldHVybiBuPXUoV3YodC5kLGUpLDIzKSxufHx1KFd2KHQuZSxlKSwyMyl9ZnVuY3Rpb24gd0p0KHQpe3RoaXMuYj10LGVyLmNhbGwodGhpcyx0KSx0aGlzLmE9dShJbih0aGlzLmIuYSw0KSwxMjYpfWZ1bmN0aW9uIG1KdCh0KXt0aGlzLmI9dCxNeC5jYWxsKHRoaXMsdCksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX1mdW5jdGlvbiBybCh0KXtyZXR1cm4gdC50fHwodC50PW5ldyBMenQodCksSkMobmV3IHFxdCh0KSwwLHQudCkpLHQudH1mdW5jdGlvbiB2c24oKXtyZXR1cm4gYW8oKSxjdChvdChXUywxKSxhZSwxMDMsMCxbYzAsa2YsamgsUTAsWjBdKX1mdW5jdGlvbiB3c24oKXtyZXR1cm4gYzQoKSxjdChvdChRUywxKSxhZSwyNDksMCxbbWIsSk8sQ0F0LFhTLF9BdF0pfWZ1bmN0aW9uIG1zbigpe3JldHVybiBYZigpLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtxbixKcyxJZCwkMixYZ10pfWZ1bmN0aW9uIHlzbigpe3JldHVybiBpRCgpLGN0KG90KEpfdCwxKSxhZSwzMTYsMCxbWF90LFZodCxaX3QsVWh0LFFfdF0pfWZ1bmN0aW9uIHhzbigpe3JldHVybiBhXygpLGN0KG90KExDdCwxKSxhZSwzMTUsMCxbQUN0LGxodCxoaHQsQVMsTFNdKX1mdW5jdGlvbiBrc24oKXtyZXR1cm4gdjIoKSxjdChvdChBVHQsMSksYWUsMzM1LDAsW21sdCxTVHQseWx0LHBTLGdTXSl9ZnVuY3Rpb24gRXNuKCl7cmV0dXJuIHlFKCksY3Qob3QocjNlLDEpLGFlLDM1NSwwLFtuNSxSNixxUyx6UyxIU10pfWZ1bmN0aW9uIFRzbigpe3JldHVybiBnNCgpLGN0KG90KHQyZSwxKSxhZSwzNjMsMCxbTEcsSUcsREcsTUcsQUddKX1mdW5jdGlvbiBDc24oKXtyZXR1cm4gaGgoKSxjdChvdChzOXQsMSksYWUsMTYzLDAsW0NPLHlTLGZiLHhTLEZ5XSl9ZnVuY3Rpb24gTDgoKXtMOD1aO3ZhciB0LGU7YVU9KHQ4KCksZT1uZXcgbFIsZSksb1U9KHQ9bmV3IFV0dCx0KX1mdW5jdGlvbiB5SnQodCl7dmFyIGU7cmV0dXJuIHQuY3x8KGU9dC5yLEV0KGUsODgpJiYodC5jPXUoZSwyNikpKSx0LmN9ZnVuY3Rpb24gX3NuKHQpe3JldHVybiB0LmU9Myx0LmQ9dC5ZYigpLHQuZSE9Mj8odC5lPTAsITApOiExfWZ1bmN0aW9uIE9ydCh0KXt2YXIgZSxuLHI7cmV0dXJuIGU9dCZ1bCxuPXQ+PjIyJnVsLHI9dDwwP1cwOjAscnUoZSxuLHIpfWZ1bmN0aW9uIFNzbih0KXt2YXIgZSxuLHIscztmb3Iobj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLExDKGUpfWZ1bmN0aW9uIEFzbih0LGUpe3ZhciBuLHI7bj11KFR1bih0LmMsZSksMTQpLG4mJihyPW4uZ2MoKSxuLiRiKCksdC5kLT1yKX1mdW5jdGlvbiB4SnQodCxlKXt2YXIgbixyO3JldHVybiBuPWUuY2QoKSxyPUR5dCh0LG4pLCEhciYmUGMoci5lLGUuZGQoKSl9ZnVuY3Rpb24gR3godCxlKXtyZXR1cm4gZT09MHx8dC5lPT0wP3Q6ZT4wP3dpZSh0LGUpOiRjZSh0LC1lKX1mdW5jdGlvbiB1bXQodCxlKXtyZXR1cm4gZT09MHx8dC5lPT0wP3Q6ZT4wPyRjZSh0LGUpOndpZSh0LC1lKX1mdW5jdGlvbiBMcih0KXtpZih6cih0KSlyZXR1cm4gdC5jPXQuYSx0LmEuUGIoKTt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGtKdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuYy5pLG49dC5kLmksZS5rPT0oR24oKSx4cykmJm4uaz09eHN9ZnVuY3Rpb24gTnJ0KHQpe3ZhciBlO3JldHVybiBlPW5ldyB6dixMbyhlLHQpLEp0KGUsKFRlKCksX28pLG51bGwpLGV9ZnVuY3Rpb24gUHJ0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LllnKGUpLHI+PTA/dC5fZyhyLG4sITApOmx3KHQsZSxuKX1mdW5jdGlvbiBsbXQodCxlLG4scil7dmFyIHM7Zm9yKHM9MDtzPE51dDtzKyspJGoodC5hW2UuZ11bc10sbixyW2UuZ10pfWZ1bmN0aW9uIGhtdCh0LGUsbixyKXt2YXIgcztmb3Iocz0wO3M8UUg7cysrKWpqKHQuYVtzXVtlLmddLG4scltlLmddKX1mdW5jdGlvbiBmbXQodCxlLG4scixzKXtxUXQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBkbXQodCxlLG4scixzKXtIUXQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBnbXQodCxlLG4scixzKXtUSnQuY2FsbCh0aGlzLGUscixzKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBkZih0LGUsbixyLHMpe1RKdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYj1ufWZ1bmN0aW9uIEVKdCh0LGUsbil7b1IuY2FsbCh0aGlzLG4pLHRoaXMuYj10LHRoaXMuYz1lLHRoaXMuZD0oVWl0KCksQWZ0KX1mdW5jdGlvbiBUSnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaz1lPzE6MCx0aGlzLmY9bj8xOjAsdGhpcy5vPS0xLHRoaXMucD0wfWZ1bmN0aW9uIENKdCh0LGUsbil7dmFyIHI7cj1uZXcgaDJ0KHQuYSksVkMocix0LmEuYSksc3Uoci5mLGUsbiksdC5hLmE9cn1mdW5jdGlvbiB1SSh0LGUpe3QucWkodC5pKzEpLGZDKHQsdC5pLHQub2kodC5pLGUpKSx0LmJpKHQuaSsrLGUpLHQuY2koKX1mdW5jdGlvbiBSQyh0KXt2YXIgZSxuOysrdC5qLGU9dC5nLG49dC5pLHQuZz1udWxsLHQuaT0wLHQuZGkobixlKSx0LmNpKCl9ZnVuY3Rpb24gXzEodCl7dmFyIGUsbjtyZXR1cm4gQXIodCksZT1LZW4odC5sZW5ndGgpLG49bmV3IFljKGUpLF95dChuLHQpLG59ZnVuY3Rpb24gVngodCl7dmFyIGU7cmV0dXJuIGU9KEFyKHQpLHQ/bmV3IFB1KHQpOmQ4KHQuS2MoKSkpLEJzdChlKSx5eihlKX1mdW5jdGlvbiBBZyh0LGUpe3ZhciBuO3JldHVybiBuPShBbihlLHQuYy5sZW5ndGgpLHQuY1tlXSksbGJ0KHQuYyxlLDEpLG59ZnVuY3Rpb24gQWkodCxlKXt2YXIgbjtyZXR1cm4gbj11KHQuYy54YyhlKSwxNCksIW4mJihuPXQuaWMoZSkpLHQucGMoZSxuKX1mdW5jdGlvbiBwbXQodCxlKXt2YXIgbixyO3JldHVybiBuPShPbih0KSx0KSxyPShPbihlKSxlKSxuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gX0p0KHQpe3ZhciBlO3JldHVybiBlPXQuZSt0LmYsaXNOYU4oZSkmJkVqKHQuZCk/dC5kOmV9ZnVuY3Rpb24gUDAodCxlKXtyZXR1cm4gdC5hP1ZyKHQuYSx0LmIpOnQuYT1uZXcgSWwodC5kKSxjQyh0LmEsZSksdH1mdW5jdGlvbiBibXQodCxlKXtpZih0PDB8fHQ+ZSl0aHJvdyBydChuZXcgbW8oVTR0KHQsZSwiaW5kZXgiKSkpO3JldHVybiB0fWZ1bmN0aW9uIEZydCh0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1QdChUcixYciwyNSxlLDE1LDEpLCRkbihzLHQsZSxuLHIpLHN9ZnVuY3Rpb24gTHNuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSsoZS82MHwwKSx0LnEuc2V0TWludXRlcyhlKSx5Xyh0LG4pfWZ1bmN0aW9uIE1zbih0LGUpe3JldHVybiBiLk1hdGgubWluKEhwKGUuYSx0LmQuZC5jKSxIcChlLmIsdC5kLmQuYykpfWZ1bmN0aW9uIFV4KHQsZSl7cmV0dXJuIGVhKGUpP2U9PW51bGw/dTV0KHQuZixudWxsKTpQbmUodC5nLGUpOnU1dCh0LmYsZSl9ZnVuY3Rpb24gUzEodCl7dGhpcy5jPXQsdGhpcy5hPW5ldyBTKHRoaXMuYy5hKSx0aGlzLmI9bmV3IFModGhpcy5jLmIpfWZ1bmN0aW9uIF8kKCl7dGhpcy5lPW5ldyBsZSx0aGlzLmM9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5iPW5ldyBsZX1mdW5jdGlvbiBTSnQoKXt0aGlzLmc9bmV3IEFwdCx0aGlzLmI9bmV3IEFwdCx0aGlzLmE9bmV3IGxlLHRoaXMuaz1uZXcgbGV9ZnVuY3Rpb24gQUp0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmQ9bix1ZShlLmUsdGhpcyksdWUobi5iLHRoaXMpfWZ1bmN0aW9uIExKdCh0LGUpe0dWdC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtNiksT24odCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTUp0KHQsZSl7VlZ0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi02KSxPbih0KSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2bXQodCxlKXtHZXQuY2FsbCh0aGlzLGUucmQoKSxlLnFkKCkmLTYpLE9uKHQpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFMkKHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix1ZSh0LnQsdGhpcyksdWUoZS5pLHRoaXMpfWZ1bmN0aW9uIEEkKCl7dGhpcy5iPW5ldyBRaSx0aGlzLmE9bmV3IFFpLHRoaXMuYj1uZXcgUWksdGhpcy5hPW5ldyBRaX1mdW5jdGlvbiBMJCgpe0wkPVosR1M9bmV3IEdpKCJvcmcuZWNsaXBzZS5lbGsubGFiZWxzLmxhYmVsTWFuYWdlciIpfWZ1bmN0aW9uIElKdCgpe0lKdD1aLGJUdD1uZXcgT3MoInNlcGFyYXRlTGF5ZXJDb25uZWN0aW9ucyIsKGR6KCksYWx0KSl9ZnVuY3Rpb24gVmYoKXtWZj1aLFV5PW5ldyBqYnQoIlJFR1VMQVIiLDApLHBiPW5ldyBqYnQoIkNSSVRJQ0FMIiwxKX1mdW5jdGlvbiBsSSgpe2xJPVosYmh0PW5ldyBQYnQoIlNUQUNLRUQiLDApLERPPW5ldyBQYnQoIlNFUVVFTkNFRCIsMSl9ZnVuY3Rpb24gaEkoKXtoST1aLEdodD1uZXcgVmJ0KCJGSVhFRCIsMCksSVY9bmV3IFZidCgiQ0VOVEVSX05PREUiLDEpfWZ1bmN0aW9uIElzbih0LGUpe3ZhciBuO3JldHVybiBuPVAzbih0LGUpLHQuYj1uZXcgcnoobi5jLmxlbmd0aCksV3luKHQsbil9ZnVuY3Rpb24gRHNuKHQsZSxuKXt2YXIgcjtyZXR1cm4rK3QuZSwtLXQuZixyPXUodC5kW2VdLiRjKG4pLDEzMyksci5kZCgpfWZ1bmN0aW9uIERKdCh0KXt2YXIgZTtyZXR1cm4gdC5hfHwoZT10LnIsRXQoZSwxNDgpJiYodC5hPXUoZSwxNDgpKSksdC5hfWZ1bmN0aW9uIHdtdCh0KXtpZih0LmEpe2lmKHQuZSlyZXR1cm4gd210KHQuZSl9ZWxzZSByZXR1cm4gdDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBPc24odCxlKXtyZXR1cm4gdC5wPGUucD8xOnQucD5lLnA/LTE6MH1mdW5jdGlvbiBNJCh0LGUpe3JldHVybiBPbihlKSx0LmM8dC5kPyh0LnplKGUsdC5jKyspLCEwKTohMX1mdW5jdGlvbiBPSnQodCxlKXtyZXR1cm4ga2wodC5hLGUpPyhVeCh0LmEsZSksITApOiExfWZ1bmN0aW9uIE5zbih0KXt2YXIgZSxuO3JldHVybiBlPXQuY2QoKSxuPXUodC5kZCgpLDE0KSxWTShuLk5jKCksbmV3IGV0dChlKSl9ZnVuY3Rpb24gUHNuKHQpe3ZhciBlO3JldHVybiBlPXUoZHd0KHQuYix0LmIubGVuZ3RoKSw5KSxuZXcgcmgodC5hLGUsdC5jKX1mdW5jdGlvbiBGc24odCl7dmFyIGU7cmV0dXJuIGQyKHQpLGU9bmV3IE1LdCh0LHQuYS5lLHQuYS5kfDQpLG5ldyBHMnQodCxlKX1mdW5jdGlvbiBOSnQodCl7dmFyIGU7Zm9yKCRwKHQpLGU9MDt0LmEuc2QobmV3IGtzKTspZT1PYShlLDEpO3JldHVybiBlfWZ1bmN0aW9uIG1tdCh0LGUsbil7dmFyIHIscztmb3Iocj0wLHM9MDtzPGUubGVuZ3RoO3MrKylyKz10LiRmKGVbc10scixuKX1mdW5jdGlvbiBCc24odCxlKXt2YXIgbjt0LkMmJihuPXUoZ28odC5iLGUpLDEyNCkubixuLmQ9dC5DLmQsbi5hPXQuQy5hKX1mdW5jdGlvbiBXeCh0LGUsbil7cmV0dXJuIG9JKGUsdC5lLkhkKCkuZ2MoKSksb0kobix0LmMuSGQoKS5nYygpKSx0LmFbZV1bbl19ZnVuY3Rpb24gTGcodCxlKXtKcCgpLHRoaXMuZT10LHRoaXMuZD0xLHRoaXMuYT1jdChvdChUciwxKSxYciwyNSwxNSxbZV0pfWZ1bmN0aW9uIEkkKHQsZSxuLHIpe3RoaXMuZj10LHRoaXMuZT1lLHRoaXMuZD1uLHRoaXMuYj1yLHRoaXMuYz1yP3IuZDpudWxsfWZ1bmN0aW9uIHltdCh0KXt2YXIgZSxuLHIscztzPXQuZCxlPXQuYSxuPXQuYixyPXQuYyx0LmQ9bix0LmE9cix0LmI9cyx0LmM9ZX1mdW5jdGlvbiBSc24odCxlLG4scil7YWxlKHQsZSxuLEVFKHQsZSxyLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApKX1mdW5jdGlvbiBqc24odCxlKXt3cihlLCJMYWJlbCBtYW5hZ2VtZW50IiwxKSxuaihRKHQsKEwkKCksR1MpKSksb3IoZSl9ZnVuY3Rpb24gWWModCl7WWV0KHRoaXMpLF9qKHQ+PTAsIkluaXRpYWwgY2FwYWNpdHkgbXVzdCBub3QgYmUgbmVnYXRpdmUiKX1mdW5jdGlvbiBQSnQoKXtQSnQ9WixRZ2U9V3IoKEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpKX1mdW5jdGlvbiBGSnQoKXtGSnQ9WixKZ2U9V3IoKFh1KCksY3Qob3QoWmdlLDEpLGFlLDQ2MSwwLFtTZCxjYixtZl0pKSl9ZnVuY3Rpb24gQkp0KCl7Qkp0PVosZXBlPVdyKCh3dSgpLGN0KG90KHRwZSwxKSxhZSw0NjIsMCxbZTEsdWIseWZdKSkpfWZ1bmN0aW9uIFJKdCgpe1JKdD1aLCRnZT1XcigoSTEoKSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTUV0LEdsLEx5XSkpKX1mdW5jdGlvbiBqSnQoKXtqSnQ9WixiYmU9V3IoKGpDKCksY3Qob3QoVDd0LDEpLGFlLDM3OSwwLFtXdXQsVXV0LEt1dF0pKSl9ZnVuY3Rpb24gJEp0KCl7JEp0PVosSWJlPVdyKChldygpLGN0KG90KEE3dCwxKSxhZSw0MjMsMCxbJDQsUzd0LEp1dF0pKSl9ZnVuY3Rpb24gekp0KCl7ekp0PVosbDJlPVdyKChZeCgpLGN0KG90KFRUdCwxKSxhZSwzMTQsMCxbUzYsd08sRVR0XSkpKX1mdW5jdGlvbiBxSnQoKXtxSnQ9WixoMmU9V3IoKFgkKCksY3Qob3QoX1R0LDEpLGFlLDMzNywwLFtDVHQsT0csd2x0XSkpKX1mdW5jdGlvbiBISnQoKXtISnQ9WixwMmU9V3IoKHUyKCksY3Qob3QoZzJlLDEpLGFlLDQ1MCwwLFt4bHQsdTcsRzRdKSkpfWZ1bmN0aW9uIEdKdCgpe0dKdD1aLGEyZT1XcigoSnYoKSxjdChvdChjbHQsMSksYWUsMzYxLDAsW0F3LGhiLFN3XSkpKX1mdW5jdGlvbiBWSnQoKXtWSnQ9WixFMmU9V3IoKEIwKCksY3Qob3QoazJlLDEpLGFlLDMwMywwLFt5TyxVNCxBNl0pKSl9ZnVuY3Rpb24gVUp0KCl7VUp0PVoseDJlPVdyKChXOCgpLGN0KG90KElsdCwxKSxhZSwyOTIsMCxbTGx0LE1sdCxtT10pKSl9ZnVuY3Rpb24gV0p0KCl7V0p0PVosendlPVdyKChZQygpLGN0KG90KFNDdCwxKSxhZSwzNzgsMCxbb2h0LF9DdCx1Vl0pKSl9ZnVuY3Rpb24gS0p0KCl7S0p0PVosWXdlPVdyKCh1eigpLGN0KG90KCRDdCwxKSxhZSwzNzUsMCxbUkN0LHBodCxqQ3RdKSkpfWZ1bmN0aW9uIFlKdCgpe1lKdD1aLFZ3ZT1XcigoajAoKSxjdChvdChGQ3QsMSksYWUsMzM5LDAsW2diLFBDdCxmaHRdKSkpfWZ1bmN0aW9uIFhKdCgpe1hKdD1aLEt3ZT1Xcigoc28oKSxjdChvdChXd2UsMSksYWUsNDUyLDAsW01TLEp1LGV1XSkpKX1mdW5jdGlvbiBRSnQoKXtRSnQ9WixKd2U9V3IoKGd6KCksY3Qob3QoV0N0LDEpLGFlLDM3NywwLFttaHQseDcsVnldKSkpfWZ1bmN0aW9uIFpKdCgpe1pKdD1aLFF3ZT1XcigodEUoKSxjdChvdChIQ3QsMSksYWUsMzM2LDAsW3ZodCxxQ3QsSVNdKSkpfWZ1bmN0aW9uIEpKdCgpe0pKdD1aLFp3ZT1Xcigob3ooKSxjdChvdChVQ3QsMSksYWUsMzM4LDAsW1ZDdCx3aHQsR0N0XSkpKX1mdW5jdGlvbiB0dGUoKXt0dGU9WixmbWU9V3IoKFp2KCksY3Qob3QoaG1lLDEpLGFlLDQ1NCwwLFtPTyxEUyxkVl0pKSl9ZnVuY3Rpb24gZXRlKCl7ZXRlPVosbXllPVdyKChDeigpLGN0KG90KHd5ZSwxKSxhZSw0NDIsMCxbTmh0LERodCxPaHRdKSkpfWZ1bmN0aW9uIG50ZSgpe250ZT1aLHh5ZT1XcigoUkkoKSxjdChvdCh2X3QsMSksYWUsMzgwLDAsW0NWLHBfdCxiX3RdKSkpfWZ1bmN0aW9uIHJ0ZSgpe3J0ZT1aLFJ5ZT1XcigoVHooKSxjdChvdChQX3QsMSksYWUsMzgxLDAsW05fdCwkaHQsT190XSkpKX1mdW5jdGlvbiBpdGUoKXtpdGU9WixCeWU9V3IoKGN6KCksY3Qob3QoSV90LDEpLGFlLDI5MywwLFtqaHQsTV90LExfdF0pKSl9ZnVuY3Rpb24gc3RlKCl7c3RlPVosczNlPVdyKChHSSgpLGN0KG90KHpodCwxKSxhZSw0MzcsMCxbQVYsTFYsTVZdKSkpfWZ1bmN0aW9uIGF0ZSgpe2F0ZT1aLGM0ZT1XcigoJDAoKSxjdChvdChUQXQsMSksYWUsMzM0LDAsW0hWLFpnLFlTXSkpKX1mdW5jdGlvbiBvdGUoKXtvdGU9WixpNGU9V3IoKEExKCksY3Qob3QoZkF0LDEpLGFlLDI3MiwwLFtfNyxZeSxTN10pKSl9ZnVuY3Rpb24gJHNuKCl7cmV0dXJuIG9hKCksY3Qob3QoU0F0LDEpLGFlLDk4LDAsW3liLEgxLEw3LEcyLGgwLFZjXSl9ZnVuY3Rpb24gcjIodCxlKXtyZXR1cm4hdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksV2l0KHQubyxlKX1mdW5jdGlvbiB6c24odCl7cmV0dXJuIXQuZyYmKHQuZz1uZXcgVGspLCF0LmcuZCYmKHQuZy5kPW5ldyBfenQodCkpLHQuZy5kfWZ1bmN0aW9uIHFzbih0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBUayksIXQuZy5hJiYodC5nLmE9bmV3IFN6dCh0KSksdC5nLmF9ZnVuY3Rpb24gSHNuKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IFRrKSwhdC5nLmImJih0LmcuYj1uZXcgQ3p0KHQpKSx0LmcuYn1mdW5jdGlvbiBmSSh0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBUayksIXQuZy5jJiYodC5nLmM9bmV3IEF6dCh0KSksdC5nLmN9ZnVuY3Rpb24gR3NuKHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBVOChlLHQpLHI9MDtyPG47KytyKSR6KHMpO3JldHVybiBzfWZ1bmN0aW9uIEJydCh0LGUsbil7dmFyIHIscztpZihuIT1udWxsKWZvcihyPTA7cjxlOysrcilzPW5bcl0sdC5maShyLHMpfWZ1bmN0aW9uIFJydCh0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1QdChUcixYciwyNSxlKzEsMTUsMSksX21uKHMsdCxlLG4sciksc31mdW5jdGlvbiBQdCh0LGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bXNlKHMscikscyE9MTAmJmN0KG90KHQsbyksZSxuLHMsaCksaH1mdW5jdGlvbiBWc24odCxlLG4scil7cmV0dXJuIG4mJihyPW4uZ2goZSxWaShuLlRnKCksdC5jLkxqKCkpLG51bGwscikpLHJ9ZnVuY3Rpb24gVXNuKHQsZSxuLHIpe3JldHVybiBuJiYocj1uLmloKGUsVmkobi5UZygpLHQuYy5MaigpKSxudWxsLHIpKSxyfWZ1bmN0aW9uIHhtdCh0LGUsbil7dSh0LmIsNjUpLHUodC5iLDY1KSx1KHQuYiw2NSksbXUodC5hLG5ldyBiS3QobixlLHQpKX1mdW5jdGlvbiBrbXQodCxlLG4pe2lmKHQ8MHx8ZT5ufHxlPHQpdGhyb3cgcnQobmV3IFpwdChGcSt0K3p4dCtlK2p4dCtuKSl9ZnVuY3Rpb24gTTgodCl7aWYoIXQpdGhyb3cgcnQobmV3IEZvKCJVbmFibGUgdG8gYWRkIGVsZW1lbnQgdG8gcXVldWUiKSl9ZnVuY3Rpb24ganJ0KHQpe3Q/KHRoaXMuYz10LHRoaXMuYj1udWxsKToodGhpcy5jPW51bGwsdGhpcy5iPW5ldyBsZSl9ZnVuY3Rpb24gJHJ0KHQsZSl7UlIuY2FsbCh0aGlzLHQsZSksdGhpcy5hPVB0KGV4bixEcSw0MzYsMiwwLDEpLHRoaXMuYj0hMH1mdW5jdGlvbiBFbXQodCl7WG5lLmNhbGwodGhpcyx0LDApLGFXdCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIHpydCh0KXt2YXIgZTtyZXR1cm4gZT10LmIsZS5iPT0wP251bGw6dShRZihlLDApLDE4OCkuYn1mdW5jdGlvbiBjdGUodCxlKXt2YXIgbjtyZXR1cm4gbj1uZXcgJHQsbi5jPSEwLG4uZD1lLmRkKCksbmhlKHQsZS5jZCgpLG4pfWZ1bmN0aW9uIFdzbih0LGUpe3ZhciBuO249dC5xLmdldEhvdXJzKCkrKGUvMzYwMHwwKSx0LnEuc2V0U2Vjb25kcyhlKSx5Xyh0LG4pfWZ1bmN0aW9uIFRtdCh0LGUsbil7dmFyIHI7cj10LmJbbi5jLnBdW24ucF0sci5iKz1lLmIsci5jKz1lLmMsci5hKz1lLmEsKytyLmF9ZnVuY3Rpb24gSHAodCxlKXt2YXIgbixyO3JldHVybiBuPXQuYS1lLmEscj10LmItZS5iLGIuTWF0aC5zcXJ0KG4qbityKnIpfWZ1bmN0aW9uIEQkKCl7RCQ9Wix4VHQ9bmV3IE1idCgiUVVBRFJBVElDIiwwKSx2bHQ9bmV3IE1idCgiU0NBTkxJTkUiLDEpfWZ1bmN0aW9uIHV0ZSgpe3V0ZT1aLG5tZT1LdShiaShuZXcgSHMsKFdhKCksQWQpLChybygpLHJsdCkpLElvLGJPKX1mdW5jdGlvbiBLc24oKXtyZXR1cm4gY3koKSxjdChvdChuZnQsMSksYWUsMjkxLDAsW2VmdCxWTyxHTyx0ZnQscU8sSE9dKX1mdW5jdGlvbiBZc24oKXtyZXR1cm4gUWQoKSxjdChvdChrU3QsMSksYWUsMjQ4LDAsW1podCwkTyx6TyxGVixOVixQVl0pfWZ1bmN0aW9uIFhzbigpe3JldHVybiBpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pfWZ1bmN0aW9uIFFzbigpe3JldHVybiBnRSgpLGN0KG90KEdUdCwxKSxhZSwyNzUsMCxbYlMsJFR0LEhUdCxxVHQselR0LGpUdF0pfWZ1bmN0aW9uIFpzbigpe3JldHVybiBuRCgpLGN0KG90KFJUdCwxKSxhZSwyNzQsMCxbQkcsUFR0LEJUdCxOVHQsRlR0LFNsdF0pfWZ1bmN0aW9uIEpzbigpe3JldHVybiBaeigpLGN0KG90KENDdCwxKSxhZSwzMTMsMCxbYWh0LEVDdCxzaHQsa0N0LFRDdCxjVl0pfWZ1bmN0aW9uIHRhbigpe3JldHVybiBucSgpLGN0KG90KElUdCwxKSxhZSwyNzYsMCxbRWx0LGtsdCxDbHQsVGx0LF9sdCxQR10pfWZ1bmN0aW9uIGVhbigpe3JldHVybiBmXygpLGN0KG90KFhtZSwxKSxhZSwzMjcsMCxbd1Ysa2h0LFRodCxFaHQsQ2h0LHhodF0pfWZ1bmN0aW9uIG5hbigpe3JldHVybiBRdSgpLGN0KG90KEdWLDEpLGFlLDI3MywwLFt4Yix0Zyx0TixKUyxaUyxHNl0pfWZ1bmN0aW9uIHJhbigpe3JldHVybiB0cSgpLGN0KG90KHdBdCwxKSxhZSwzMTIsMCxbYmZ0LHBBdCx2QXQsZEF0LGJBdCxnQXRdKX1mdW5jdGlvbiBpYW4oKXtyZXR1cm4gR24oKSxjdChvdChlbHQsMSksYWUsMjY3LDAsW0RzLFpzLHhzLEhjLFNsLGoxXSl9ZnVuY3Rpb24gbHRlKHQpe1BtKCEhdC5jKSxUcnQodC5lLHQpLHQuYy5RYigpLHQuYz1udWxsLHQuYj1neXQodCksejJ0KHQuZSx0KX1mdW5jdGlvbiBodGUodCl7cmV0dXJuIFRydCh0LmMuYS5lLHQpLFFuKHQuYiE9dC5jLmEuZCksdC5hPXQuYix0LmI9dC5iLmEsdC5hfWZ1bmN0aW9uIENtdCh0KXt2YXIgZTtyZXR1cm4hdC5hJiZ0LmIhPS0xJiYoZT10LmMuVGcoKSx0LmE9eW4oZSx0LmIpKSx0LmF9ZnVuY3Rpb24gTXIodCxlKXtyZXR1cm4gdC5oaSgpJiZ0LkhjKGUpPyExOih0LlloKGUpLCEwKX1mdW5jdGlvbiBVZih0LGUpe3JldHVybiB0SShlLCJIb3Jpem9udGFsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIpLHQuYj1lLHR9ZnVuY3Rpb24gZnRlKHQsZSxuKXtnaSgpO3ZhciByO3JldHVybiByPXRiKHQsZSksbiYmciYmT2VuKHQpJiYocj1udWxsKSxyfWZ1bmN0aW9uIE1nKHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLHdfKHIsZSxuKX1mdW5jdGlvbiBfbXQodCxlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzcpLE51ZSh0LG4sMCwwKX1mdW5jdGlvbiBTbXQodCxlLG4pe3ZhciByO3QuZFtlLmddPW4scj10LmcuYyxyW2UuZ109Yi5NYXRoLm1heChyW2UuZ10sbisxKX1mdW5jdGlvbiBkSSh0LGUpe3ZhciBuLHIscztyZXR1cm4gcz10LnIscj10LmQsbj1FXyh0LGUsITApLG4uYiE9c3x8bi5hIT1yfWZ1bmN0aW9uIGR0ZSh0LGUpe3JldHVybiBNR3QodC5lLGUpfHxwMih0LmUsZSxuZXcgR2llKGUpKSx1KFd2KHQuZSxlKSwxMTMpfWZ1bmN0aW9uIGkyKHQsZSxuLHIpe3JldHVybiBPbih0KSxPbihlKSxPbihuKSxPbihyKSxuZXcgb3d0KHQsZSxuZXcgcmUpfWZ1bmN0aW9uIFRsKHQsZSxuLHIpe3RoaXMucmooKSx0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bmV3IGl3dCh0aGlzLGUsbixyKX1mdW5jdGlvbiBxcnQodCxlLG4scixzLG8pe1l3dC5jYWxsKHRoaXMsZSxyLHMsbyksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gZ0kodCxlLG4scixzLG8pe1l3dC5jYWxsKHRoaXMsZSxyLHMsbyksdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gc2FuKHQsZSxuKXt2YXIgcixzLG87cj1EMCh0LG4pLHM9bnVsbCxyJiYocz1qNHQocikpLG89cyx6aWUoZSxuLG8pfWZ1bmN0aW9uIGFhbih0LGUsbil7dmFyIHIscyxvO3I9RDAodCxuKSxzPW51bGwsciYmKHM9ajR0KHIpKSxvPXMsemllKGUsbixvKX1mdW5jdGlvbiBwSSh0LGUsbil7dmFyIHIscztyZXR1cm4gcz0ocj13RSh0LmIsZSkscikscz9FcShtSSh0LHMpLG4pOm51bGx9ZnVuY3Rpb24gSTgodCxlKXt2YXIgbjtyZXR1cm4gbj10LllnKGUpLG4+PTA/dC5fZyhuLCEwLCEwKTpsdyh0LGUsITApfWZ1bmN0aW9uIG9hbih0LGUpe3JldHVybiBMcyhYdCh5ZShRKHQsKHNlKCksRHcpKSkpLFh0KHllKFEoZSxEdykpKSl9ZnVuY3Rpb24gZ3RlKCl7Z3RlPVosZ3llPWF3KGF3KE9SKG5ldyBIcywodUUoKSxQUykpLChmXygpLHdWKSksa2h0KX1mdW5jdGlvbiBjYW4odCxlLG4pe3ZhciByO3JldHVybiByPWlyZSh0LGUsbiksdC5iPW5ldyByeihyLmMubGVuZ3RoKSxONXQodCxyKX1mdW5jdGlvbiB1YW4odCl7aWYodC5iPD0wKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuLS10LmIsdC5hLT10LmMuYyxkZSh0LmEpfWZ1bmN0aW9uIGxhbih0KXt2YXIgZTtpZighdC5hKXRocm93IHJ0KG5ldyB3WHQpO3JldHVybiBlPXQuYSx0LmE9dHModC5hKSxlfWZ1bmN0aW9uIGhhbih0KXtmb3IoOyF0LmE7KWlmKCFuS3QodC5jLG5ldyB6ZSh0KSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS3godCl7dmFyIGU7cmV0dXJuIEFyKHQpLEV0KHQsMTk4KT8oZT11KHQsMTk4KSxlKTpuZXcgc3R0KHQpfWZ1bmN0aW9uIGZhbih0KXtPJCgpLHUodC5XZSgoY2koKSxLeSkpLDE3NCkuRmMoKFF1KCksdE4pKSx0LlllKGhmdCxudWxsKX1mdW5jdGlvbiBPJCgpe08kPVosTTNlPW5ldyB3WixEM2U9bmV3IG1aLEkzZT1YY24oKGNpKCksaGZ0KSxNM2UsdmIsRDNlKX1mdW5jdGlvbiBOJCgpe04kPVosZF90PW5ldyBHYnQoIkxFQUZfTlVNQkVSIiwwKSxQaHQ9bmV3IEdidCgiTk9ERV9TSVpFIiwxKX1mdW5jdGlvbiBkYW4odCxlLG4pe3QuYT1lLHQuYz1uLHQuYi5hLiRiKCksX2godC5kKSx0LmUuYS5jPVB0KFhuLEllLDEsMCw1LDEpfWZ1bmN0aW9uIEhydCh0KXt0LmE9UHQoVHIsWHIsMjUsdC5iKzEsMTUsMSksdC5jPVB0KFRyLFhyLDI1LHQuYiwxNSwxKSx0LmQ9MH1mdW5jdGlvbiBnYW4odCxlKXt0LmEudWUoZS5kLHQuYik+MCYmKHVlKHQuYyxuZXcgT3Z0KGUuYyxlLmQsdC5kKSksdC5iPWUuZCl9ZnVuY3Rpb24gQW10KHQsZSl7aWYodC5nPT1udWxsfHxlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybiB0LmdbZV19ZnVuY3Rpb24gcHRlKHQsZSxuKXtpZihROCh0LG4pLG4hPW51bGwmJiF0LndqKG4pKXRocm93IHJ0KG5ldyBIdHQpO3JldHVybiBufWZ1bmN0aW9uIGJ0ZSh0KXt2YXIgZTtpZih0LkVrKCkpZm9yKGU9dC5pLTE7ZT49MDstLWUpU3QodCxlKTtyZXR1cm4gSnd0KHQpfWZ1bmN0aW9uIHBhbih0KXt2YXIgZSxuO2lmKCF0LmIpcmV0dXJuIG51bGw7Zm9yKG49dC5iO2U9bi5hWzBdOyluPWU7cmV0dXJuIG59ZnVuY3Rpb24gYmFuKHQsZSl7dmFyIG4scjtyZXR1cm4gUlp0KGUpLG49KHI9dC5zbGljZSgwLGUpLE1tdChyLHQpKSxuLmxlbmd0aD1lLG59ZnVuY3Rpb24gRDgodCxlLG4scil7dmFyIHM7cj0oWDMoKSxyfHxtRXQpLHM9dC5zbGljZShlLG4pLFc0dChzLHQsZSxuLC1lLHIpfWZ1bmN0aW9uIG9oKHQsZSxuLHIscyl7cmV0dXJuIGU8MD9sdyh0LG4scik6dShuLDY2KS5OaigpLlBqKHQsdC55aCgpLGUscixzKX1mdW5jdGlvbiB2YW4odCl7cmV0dXJuIEV0KHQsMTcyKT8iIit1KHQsMTcyKS5hOnQ9PW51bGw/bnVsbDokbyh0KX1mdW5jdGlvbiB3YW4odCl7cmV0dXJuIEV0KHQsMTcyKT8iIit1KHQsMTcyKS5hOnQ9PW51bGw/bnVsbDokbyh0KX1mdW5jdGlvbiB2dGUodCxlKXtpZihlLmEpdGhyb3cgcnQobmV3IEdvKHZmZSkpO05zKHQuYSxlKSxlLmE9dCwhdC5qJiYodC5qPWUpfWZ1bmN0aW9uIExtdCh0LGUpe0dldC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtMTY0NDkpLE9uKHQpLHRoaXMuYT10LHRoaXMuYz1lfWZ1bmN0aW9uIHd0ZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9ZS90LmMuSGQoKS5nYygpfDAsbj1lJXQuYy5IZCgpLmdjKCksV3godCxyLG4pfWZ1bmN0aW9uIFh1KCl7WHU9WixTZD1uZXcgdmV0KGQ2LDApLGNiPW5ldyB2ZXQoTkUsMSksbWY9bmV3IHZldChnNiwyKX1mdW5jdGlvbiBQJCgpe1AkPVosQXV0PW5ldyBCUigiQWxsIiwwKSxfRXQ9bmV3IGRVdCxTRXQ9bmV3IENVdCxBRXQ9bmV3IGdVdH1mdW5jdGlvbiBtdGUoKXttdGU9WixOZ2U9V3IoKFAkKCksY3Qob3QoS0gsMSksYWUsMjk3LDAsW0F1dCxfRXQsU0V0LEFFdF0pKSl9ZnVuY3Rpb24geXRlKCl7eXRlPVosQ2JlPVdyKChLOCgpLGN0KG90KFRiZSwxKSxhZSw0MDUsMCxbX3csRHksSXksajRdKSkpfWZ1bmN0aW9uIHh0ZSgpe3h0ZT1aLF9wZT1XcigodHcoKSxjdChvdChDcGUsMSksYWUsNDA2LDAsW2FPLHNPLEZ1dCxCdXRdKSkpfWZ1bmN0aW9uIGt0ZSgpe2t0ZT1aLEFwZT1XcigobjYoKSxjdChvdChTcGUsMSksYWUsMzIzLDAsW2NPLG9PLHVPLGxPXSkpKX1mdW5jdGlvbiBFdGUoKXtFdGU9WixJcGU9V3IoKHNfKCksY3Qob3QoTXBlLDEpLGFlLDM5NCwwLFtoTyxKSCx0RyxmT10pKSl9ZnVuY3Rpb24gVHRlKCl7VHRlPVosWW1lPVdyKCh1RSgpLGN0KG90KFpDdCwxKSxhZSwzOTMsMCxbdlYsUFMsUE8sRlNdKSkpfWZ1bmN0aW9uIEN0ZSgpe0N0ZT1aLEdiZT1XcigoZHooKSxjdChvdChIYmUsMSksYWUsMzYwLDAsW2FsdCxfRyxTRyx2T10pKSl9ZnVuY3Rpb24gX3RlKCl7X3RlPVosRnllPVdyKChHeigpLGN0KG90KEFfdCwxKSxhZSwzNDAsMCxbUmh0LF9fdCxTX3QsQ190XSkpKX1mdW5jdGlvbiBTdGUoKXtTdGU9WixKYmU9V3IoKE0xKCksY3Qob3QoWmJlLDEpLGFlLDQxMSwwLFtfNixpNyxzNyxvbHRdKSkpfWZ1bmN0aW9uIEF0ZSgpe0F0ZT1aLHF3ZT1Xcigoc3koKSxjdChvdCh1aHQsMSksYWUsMTk3LDAsW2xWLGNodCx0NSxKNF0pKSl9ZnVuY3Rpb24gTHRlKCl7THRlPVosQzRlPVdyKChDbCgpLGN0KG90KFQ0ZSwxKSxhZSwzOTYsMCxbWWwsUEF0LE5BdCxGQXRdKSkpfWZ1bmN0aW9uIE10ZSgpe010ZT1aLGw0ZT1XcigoamwoKSxjdChvdCh1NGUsMSksYWUsMjg1LDAsW1pPLHUwLHdiLFFPXSkpKX1mdW5jdGlvbiBJdGUoKXtJdGU9WixzNGU9V3IoKHEwKCksY3Qob3QocGZ0LDEpLGFlLDIxOCwwLFtnZnQsWE8sQTcsSDZdKSkpfWZ1bmN0aW9uIER0ZSgpe0R0ZT1aLGs0ZT1XcigoQXooKSxjdChvdChPQXQsMSksYWUsMzExLDAsW3dmdCxNQXQsREF0LElBdF0pKSl9ZnVuY3Rpb24gT3RlKCl7T3RlPVoseTRlPVdyKChfbCgpLGN0KG90KHRBLDEpLGFlLDM3NCwwLFtuTixWMixlTixYeV0pKSl9ZnVuY3Rpb24gTnRlKCl7TnRlPVoseXEoKSx2THQ9c3MsUzVlPVRzLHdMdD1uZXcgRDMoc3MpLEE1ZT1uZXcgRDMoVHMpfWZ1bmN0aW9uIGJJKCl7Ykk9WixEVHQ9bmV3IERidChLMCwwKSxGRz1uZXcgRGJ0KCJJTVBST1ZFX1NUUkFJR0hUTkVTUyIsMSl9ZnVuY3Rpb24gbWFuKHQsZSl7cmV0dXJuIGc4KCksdWUodCxuZXcgbGEoZSxkZShlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoKSkpfWZ1bmN0aW9uIHlhbih0LGUpe3JldHVybiBnOCgpLHVlKHQsbmV3IGxhKGUsZGUoZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aCkpKX1mdW5jdGlvbiBNbXQodCxlKXtyZXR1cm4geEkoZSkhPTEwJiZjdChzbChlKSxlLmhtLGUuX19lbGVtZW50VHlwZUlkJCx4SShlKSx0KSx0fWZ1bmN0aW9uIHZ1KHQsZSl7dmFyIG47cmV0dXJuIG49Um8odCxlLDApLG49PS0xPyExOihBZyh0LG4pLCEwKX1mdW5jdGlvbiBQdGUodCxlKXt2YXIgbjtyZXR1cm4gbj11KFV4KHQuZSxlKSwzODcpLG4/KEZ2dChuKSxuLmUpOm51bGx9ZnVuY3Rpb24gTzgodCl7dmFyIGU7cmV0dXJuIEJvKHQpJiYoZT0wLXQsIWlzTmFOKGUpKT9lOlZwKFk4KHQpKX1mdW5jdGlvbiBSbyh0LGUsbil7Zm9yKDtuPHQuYy5sZW5ndGg7KytuKWlmKFBjKGUsdC5jW25dKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGdGUodCxlLG4pe3ZhciByO3JldHVybiAkcCh0KSxyPW5ldyBUaSxyLmE9ZSx0LmEuTmIobmV3IERHdChyLG4pKSxyLmF9ZnVuY3Rpb24geGFuKHQpe3ZhciBlO3JldHVybiAkcCh0KSxlPVB0KGlhLHZvLDI1LDAsMTUsMSksQjModC5hLG5ldyBQZShlKSksZX1mdW5jdGlvbiBHcnQodCl7dmFyIGUsbjtyZXR1cm4gbj11KEZlKHQuaiwwKSwxMSksZT11KFEobiwoc2UoKSxfaSkpLDExKSxlfWZ1bmN0aW9uIEltdCh0KXt2YXIgZTtpZighc2l0KHQpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHQuZT0xLGU9dC5kLHQuZD1udWxsLGV9ZnVuY3Rpb24gVnJ0KHQsZSl7dmFyIG47dGhpcy5mPXQsdGhpcy5iPWUsbj11KEpuKHQuYixlKSwyODMpLHRoaXMuYz1uP24uYjpudWxsfWZ1bmN0aW9uIEJ0ZSgpe2xmKCksdGhpcy5iPW5ldyBDcix0aGlzLmY9bmV3IENyLHRoaXMuZz1uZXcgQ3IsdGhpcy5lPW5ldyBDcn1mdW5jdGlvbiBSdGUodCxlKXt0aGlzLmE9UHQobzAsemcsMTAsdC5hLmMubGVuZ3RoLDAsMSksRDEodC5hLHRoaXMuYSksdGhpcy5iPWV9ZnVuY3Rpb24gdkkodCl7dmFyIGU7Zm9yKGU9dC5wKzE7ZTx0LmMuYS5jLmxlbmd0aDsrK2UpLS11KEZlKHQuYy5hLGUpLDEwKS5wfWZ1bmN0aW9uIFVydCh0KXt2YXIgZTtlPXQuQWkoKSxlIT1udWxsJiZ0LmQhPS0xJiZ1KGUsOTIpLk5nKHQpLHQuaSYmdC5pLkZpKCl9ZnVuY3Rpb24gRiQodCl7dWoodGhpcyksdGhpcy5nPXQ/Y3J0KHQsdC4kZCgpKTpudWxsLHRoaXMuZj10LG4kKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBGMCh0LGUsbixyLHMsbyxoKXtlaXQuY2FsbCh0aGlzLGUscixzLG8saCksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gWW0odCxlLG4scixzKXtyZXR1cm4gT24odCksT24oZSksT24obiksT24ociksT24ocyksbmV3IG93dCh0LGUscil9ZnVuY3Rpb24gd0kodCxlKXtpZihlPDApdGhyb3cgcnQobmV3IG1vKHExZStlKSk7cmV0dXJuIEFadCh0LGUrMSksRmUodC5qLGUpfWZ1bmN0aW9uIGp0ZSh0LGUsbixyKXtpZighdCl0aHJvdyBydChuZXcgUG4odl8oZSxjdChvdChYbiwxKSxJZSwxLDUsW24scl0pKSkpfWZ1bmN0aW9uIEIkKHQsZSl7cmV0dXJuIFBjKGUsRmUodC5mLDApKXx8UGMoZSxGZSh0LmYsMSkpfHxQYyhlLEZlKHQuZiwyKSl9ZnVuY3Rpb24ga2FuKHQsZSl7RHgodSh1KHQuZiwzMykuV2UoKGNpKCksVVMpKSw5OCkpJiZrbG4oWm50KHUodC5mLDMzKSksZSl9ZnVuY3Rpb24gbUkodCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzUpLHI9bi5PaCgpLCFyJiZuLlJoKHI9bmV3IFJWdCh0LGUpKSxyfWZ1bmN0aW9uIEVvKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KGUsNjc3KSxyPW4ucGsoKSwhciYmbi50ayhyPW5ldyBuWnQodCxlKSkscn1mdW5jdGlvbiBpbCh0KXtyZXR1cm4gdC5ifHwodC5iPW5ldyB3WXQodCxobyx0KSwhdC5hJiYodC5hPW5ldyAkTSh0LHQpKSksdC5ifWZ1bmN0aW9uIGpDKCl7akM9WixXdXQ9bmV3IG1ldCgiWFkiLDApLFV1dD1uZXcgbWV0KCJYIiwxKSxLdXQ9bmV3IG1ldCgiWSIsMil9ZnVuY3Rpb24gd3UoKXt3dT1aLGUxPW5ldyB3ZXQoIlRPUCIsMCksdWI9bmV3IHdldChORSwxKSx5Zj1uZXcgd2V0KFh4dCwyKX1mdW5jdGlvbiBCMCgpe0IwPVoseU89bmV3IF9ldChLMCwwKSxVND1uZXcgX2V0KCJUT1AiLDEpLEE2PW5ldyBfZXQoWHh0LDIpfWZ1bmN0aW9uIHlJKCl7eUk9WixkaHQ9bmV3IE5idCgiSU5QVVRfT1JERVIiLDApLGdodD1uZXcgTmJ0KCJQT1JUX0RFR1JFRSIsMSl9ZnVuY3Rpb24gTjgoKXtOOD1aLFo4dD1ydSh1bCx1bCw1MjQyODcpLHhnZT1ydSgwLDAsSUQpLEo4dD1PcnQoMSksT3J0KDIpLHRFdD1PcnQoMCl9ZnVuY3Rpb24gRG10KHQsZSxuKXt0LmEuYz1QdChYbixJZSwxLDAsNSwxKSxmM24odCxlLG4pLHQuYS5jLmxlbmd0aD09MHx8R3duKHQsZSl9ZnVuY3Rpb24gUiQodCl7dmFyIGUsbjtyZXR1cm4gbj10Lmxlbmd0aCxlPVB0KG1oLHZkLDI1LG4sMTUsMSksell0KHQsMCxuLGUsMCksZX1mdW5jdGlvbiBPbXQodCl7dmFyIGU7cmV0dXJuIHQuZGgoKXx8KGU9Wm4odC5UZygpKS10LkFoKCksdC5waCgpLmJrKGUpKSx0LlBnKCl9ZnVuY3Rpb24gTm10KHQpe3ZhciBlO3JldHVybiBlPXMyKEluKHQsMzIpKSxlPT1udWxsJiYoaXUodCksZT1zMihJbih0LDMyKSkpLGV9ZnVuY3Rpb24gV3J0KHQsZSl7dmFyIG47cmV0dXJuIG49VmkodC5kLGUpLG4+PTA/anoodCxuLCEwLCEwKTpsdyh0LGUsITApfWZ1bmN0aW9uIFBtdCh0LGUpe3E5KCk7dmFyIG4scjtyZXR1cm4gbj1IeCh0KSxyPUh4KGUpLCEhbiYmISFyJiYhUWllKG4uayxyLmspfWZ1bmN0aW9uIEVhbih0LGUpe3l1KHQsZT09bnVsbHx8RWooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gVGFuKHQsZSl7eHUodCxlPT1udWxsfHxFaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiBDYW4odCxlKXtRdih0LGU9PW51bGx8fEVqKChPbihlKSxlKSl8fGlzTmFOKChPbihlKSxlKSk/MDooT24oZSksZSkpfWZ1bmN0aW9uIF9hbih0LGUpe1h2KHQsZT09bnVsbHx8RWooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gJHRlKHQpeyh0aGlzLnE/dGhpcy5xOih2bigpLHZuKCksYTApKS5BYyh0LnE/dC5xOih2bigpLHZuKCksYTApKX1mdW5jdGlvbiBTYW4odCxlKXtyZXR1cm4gRXQoZSw5OSkmJnUoZSwxOCkuQmImWWE/bmV3IFVldChlLHQpOm5ldyBVOChlLHQpfWZ1bmN0aW9uIEFhbih0LGUpe3JldHVybiBFdChlLDk5KSYmdShlLDE4KS5CYiZZYT9uZXcgVWV0KGUsdCk6bmV3IFU4KGUsdCl9ZnVuY3Rpb24genRlKHQsZSl7ZTd0PW5ldyBncCxMcGU9ZSxjUz10LHUoY1MuYiw2NSkseG10KGNTLGU3dCxudWxsKSxObGUoY1MpfWZ1bmN0aW9uIEtydCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9dC5nW2VdLGZDKHQsZSx0Lm9pKGUsbikpLHQuZ2koZSxuLHIpLHQuY2koKSxyfWZ1bmN0aW9uIGokKHQsZSl7dmFyIG47cmV0dXJuIG49dC5YYyhlKSxuPj0wPyh0LiRjKG4pLCEwKTohMX1mdW5jdGlvbiBZcnQodCl7dmFyIGU7cmV0dXJuIHQuZCE9dC5yJiYoZT1MaCh0KSx0LmU9ISFlJiZlLkNqKCk9PWswZSx0LmQ9ZSksdC5lfWZ1bmN0aW9uIFhydCh0LGUpe3ZhciBuO2ZvcihBcih0KSxBcihlKSxuPSExO2UuT2IoKTspbj1ufHQuRmMoZS5QYigpKTtyZXR1cm4gbn1mdW5jdGlvbiBXdih0LGUpe3ZhciBuO3JldHVybiBuPXUoSm4odC5lLGUpLDM4Nyksbj8oT1V0KHQsbiksbi5lKTpudWxsfWZ1bmN0aW9uIHF0ZSh0KXt2YXIgZSxuO3JldHVybiBlPXQvNjB8MCxuPXQlNjAsbj09MD8iIitlOiIiK2UrIjoiKygiIituKX1mdW5jdGlvbiBXbyh0LGUpe3ZhciBuLHI7cmV0dXJuIGQyKHQpLHI9bmV3IHZtdChlLHQuYSksbj1uZXcgc0t0KHIpLG5ldyBUbih0LG4pfWZ1bmN0aW9uIFhtKHQsZSl7dmFyIG49dC5hW2VdLHI9KHBpdCgpLEV1dClbdHlwZW9mIG5dO3JldHVybiByP3Iobik6anl0KHR5cGVvZiBuKX1mdW5jdGlvbiBMYW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiB2aTtjYXNlIDE6cmV0dXJuLTE7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gTWFuKHQpe3JldHVybiBuNHQodCwoTjgoKSx0RXQpKTwwPy1VWGUoWTgodCkpOnQubCt0Lm0qZjYrdC5oKngyfWZ1bmN0aW9uIHhJKHQpe3JldHVybiB0Ll9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9PW51bGw/MTA6dC5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkfWZ1bmN0aW9uIFFydCh0KXt2YXIgZTtyZXR1cm4gZT10LmIuYy5sZW5ndGg9PTA/bnVsbDpGZSh0LmIsMCksZSE9bnVsbCYmb2l0KHQsMCksZX1mdW5jdGlvbiBIdGUodCxlKXtmb3IoO2VbMF08dC5sZW5ndGgmJmNkKGAgCVxyCmAsRXUoYmEodCxlWzBdKSkpPj0wOykrK2VbMF19ZnVuY3Rpb24ga0kodCxlKXt0aGlzLmU9ZSx0aGlzLmE9Rm5lKHQpLHRoaXMuYTw1ND90aGlzLmY9VnYodCk6dGhpcy5jPUtJKHQpfWZ1bmN0aW9uIEd0ZSh0LGUsbixyKXtnaSgpLHZ2LmNhbGwodGhpcywyNiksdGhpcy5jPXQsdGhpcy5hPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByLHM7Zm9yKHI9MTAscz0wO3M8bi0xO3MrKyllPHImJih0LmErPSIwIikscio9MTA7dC5hKz1lfWZ1bmN0aW9uIElhbih0LGUpe3ZhciBuO2ZvcihuPTA7dC5lIT10LmkuZ2MoKTspQ3RuKGUsZHIodCksZGUobikpLG4hPXZpJiYrK259ZnVuY3Rpb24gRm10KHQsZSl7dmFyIG47Zm9yKCsrdC5kLCsrdC5jW2VdLG49ZSsxO248dC5hLmxlbmd0aDspKyt0LmFbbl0sbis9biYtbn1mdW5jdGlvbiBEYW4odCxlKXt2YXIgbixyLHM7cz1lLmMuaSxuPXUoSm4odC5mLHMpLDU3KSxyPW4uZC5jLW4uZS5jLGF5dChlLmEsciwwKX1mdW5jdGlvbiBFSSh0KXt2YXIgZSxuO3JldHVybiBlPXQrMTI4LG49KFlLdCgpLG5FdClbZV0sIW4mJihuPW5FdFtlXT1uZXcgSXR0KHQpKSxufWZ1bmN0aW9uIFVyKHQsZSl7dmFyIG47cmV0dXJuIE9uKGUpLG49dFsiOiIrZV0sQmFuKCEhbixjdChvdChYbiwxKSxJZSwxLDUsW2VdKSksbn1mdW5jdGlvbiBPYW4odCl7dmFyIGUsbjtpZih0LmIpe249bnVsbDtkbyBlPXQuYix0LmI9bnVsbCxuPXphZShlLG4pO3doaWxlKHQuYik7dC5iPW59fWZ1bmN0aW9uIE5hbih0KXt2YXIgZSxuO2lmKHQuYSl7bj1udWxsO2RvIGU9dC5hLHQuYT1udWxsLG49emFlKGUsbik7d2hpbGUodC5hKTt0LmE9bn19ZnVuY3Rpb24gVnRlKHQpe3ZhciBlO2ZvcigrK3QuYSxlPXQuYy5hLmxlbmd0aDt0LmE8ZTsrK3QuYSlpZih0LmMuYlt0LmFdKXJldHVybn1mdW5jdGlvbiBQYW4odCxlKXt2YXIgbixyO2ZvcihyPWUuYyxuPXIrMTtuPD1lLmY7bisrKXQuYVtuXT50LmFbcl0mJihyPW4pO3JldHVybiByfWZ1bmN0aW9uIEZhbih0LGUpe3ZhciBuO3JldHVybiBuPXJ3KHQuZS5jLGUuZS5jKSxuPT0wP0xzKHQuZS5kLGUuZS5kKTpufWZ1bmN0aW9uIEozKHQsZSl7cmV0dXJuIGUuZT09MHx8dC5lPT0wP1FFOihiRSgpLFpzdCh0LGUpKX1mdW5jdGlvbiBCYW4odCxlKXtpZighdCl0aHJvdyBydChuZXcgUG4oJDJuKCJFbnVtIGNvbnN0YW50IHVuZGVmaW5lZDogJXMiLGUpKSl9ZnVuY3Rpb24gJEMoKXskQz1aLEFiZT1uZXcgZ2csTGJlPW5ldyBrMyxfYmU9bmV3IFFLLFNiZT1uZXcgJGIsTWJlPW5ldyBaS31mdW5jdGlvbiAkJCgpeyQkPVosUEV0PW5ldyBfYnQoIkJZX1NJWkUiLDApLER1dD1uZXcgX2J0KCJCWV9TSVpFX0FORF9TSEFQRSIsMSl9ZnVuY3Rpb24geiQoKXt6JD1aLEh1dD1uZXcgU2J0KCJFQURFUyIsMCksckc9bmV3IFNidCgiRlJVQ0hURVJNQU5fUkVJTkdPTEQiLDEpfWZ1bmN0aW9uIFRJKCl7VEk9WixORz1uZXcgSWJ0KCJSRUFESU5HX0RJUkVDVElPTiIsMCksTFR0PW5ldyBJYnQoIlJPVEFUSU9OIiwxKX1mdW5jdGlvbiBVdGUoKXtVdGU9WixmMmU9V3IoKHYyKCksY3Qob3QoQVR0LDEpLGFlLDMzNSwwLFttbHQsU1R0LHlsdCxwUyxnU10pKSl9ZnVuY3Rpb24gV3RlKCl7V3RlPVosSHdlPVdyKChhXygpLGN0KG90KExDdCwxKSxhZSwzMTUsMCxbQUN0LGxodCxoaHQsQVMsTFNdKSkpfWZ1bmN0aW9uIEt0ZSgpe0t0ZT1aLGUyZT1XcigoZzQoKSxjdChvdCh0MmUsMSksYWUsMzYzLDAsW0xHLElHLERHLE1HLEFHXSkpKX1mdW5jdGlvbiBZdGUoKXtZdGU9WixDMmU9V3IoKGhoKCksY3Qob3Qoczl0LDEpLGFlLDE2MywwLFtDTyx5UyxmYix4UyxGeV0pKSl9ZnVuY3Rpb24gWHRlKCl7WHRlPVosbDNlPVdyKChpRCgpLGN0KG90KEpfdCwxKSxhZSwzMTYsMCxbWF90LFZodCxaX3QsVWh0LFFfdF0pKSl9ZnVuY3Rpb24gUXRlKCl7UXRlPVosTzNlPVdyKChYZigpLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtxbixKcyxJZCwkMixYZ10pKSl9ZnVuY3Rpb24gWnRlKCl7WnRlPVosaTNlPVdyKCh5RSgpLGN0KG90KHIzZSwxKSxhZSwzNTUsMCxbbjUsUjYscVMselMsSFNdKSkpfWZ1bmN0aW9uIEp0ZSgpe0p0ZT1aLHliZT1XcigoV2EoKSxjdChvdChDN3QsMSksYWUsMzU2LDAsW0FkLGxiLG91LHFjLElvXSkpKX1mdW5jdGlvbiB0ZWUoKXt0ZWU9WixyNGU9V3IoKGFvKCksY3Qob3QoV1MsMSksYWUsMTAzLDAsW2MwLGtmLGpoLFEwLFowXSkpKX1mdW5jdGlvbiBlZWUoKXtlZWU9WixmNGU9V3IoKGM0KCksY3Qob3QoUVMsMSksYWUsMjQ5LDAsW21iLEpPLENBdCxYUyxfQXRdKSkpfWZ1bmN0aW9uIG5lZSgpe25lZT1aLHA0ZT1XcigoYmUoKSxjdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pKSl9ZnVuY3Rpb24gWnJ0KHQsZSl7dmFyIG47cmV0dXJuIG49dShKbih0LmEsZSksMTM0KSxufHwobj1uZXcgeGEsa2kodC5hLGUsbikpLG59ZnVuY3Rpb24gcmVlKHQpe3ZhciBlO3JldHVybiBlPXUoUSh0LChzZSgpLEx3KSksMzA1KSxlP2UuYT09dDohMX1mdW5jdGlvbiBpZWUodCl7dmFyIGU7cmV0dXJuIGU9dShRKHQsKHNlKCksTHcpKSwzMDUpLGU/ZS5pPT10OiExfWZ1bmN0aW9uIHNlZSh0LGUpe3JldHVybiBPbihlKSxud3QodCksdC5kLk9iKCk/KGUudGQodC5kLlBiKCkpLCEwKTohMX1mdW5jdGlvbiBxJCh0KXtyZXR1cm4geWModCx2aSk+MD92aTp5Yyh0LF9hKTwwP19hOlNyKHQpfWZ1bmN0aW9uIFFtKHQpe3JldHVybiB0PDM/KEJsKHQsSmhlKSx0KzEpOnQ8QV8/cHModC8uNzUrMSk6dml9ZnVuY3Rpb24geW4odCxlKXt2YXIgbjtyZXR1cm4gbj0odC5pPT1udWxsJiZwZCh0KSx0LmkpLGU+PTAmJmU8bi5sZW5ndGg/bltlXTpudWxsfWZ1bmN0aW9uIFdmKHQsZSxuKXt2YXIgcjtpZihlPT1udWxsKXRocm93IHJ0KG5ldyBMOSk7cmV0dXJuIHI9RDAodCxlKSxzc24odCxlLG4pLHJ9ZnVuY3Rpb24gYWVlKHQpe3JldHVybiB0LmE+PS0uMDEmJnQuYTw9UDEmJih0LmE9MCksdC5iPj0tLjAxJiZ0LmI8PVAxJiYodC5iPTApLHR9ZnVuY3Rpb24gb2VlKHQsZSl7cmV0dXJuIGU9PSh2bnQoKSx2bnQoKSxJZ2UpP3QudG9Mb2NhbGVMb3dlckNhc2UoKTp0LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gQm10KHQpe3JldHVybih0LmkmMj8iaW50ZXJmYWNlICI6dC5pJjE/IiI6ImNsYXNzICIpKyhMMCh0KSx0Lm8pfWZ1bmN0aW9uIFRvKHQpe3ZhciBlLG47bj0oZT1uZXcgV3R0LGUpLE1yKCghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksdC5xKSxuKX1mdW5jdGlvbiBSYW4odCxlKXt2YXIgbjtyZXR1cm4gbj1lPjA/ZS0xOmUsckh0KFpLZShEZWUoUHZ0KG5ldyBZayxuKSx0Lm4pLHQuaiksdC5rKX1mdW5jdGlvbiBqYW4odCxlLG4scil7dmFyIHM7dC5qPS0xLGE1dCh0LCQ0dCh0LGUsbiksKHRvKCkscz11KGUsNjYpLk1qKCkscy5PayhyKSkpfWZ1bmN0aW9uIGNlZSh0KXt0aGlzLmc9dCx0aGlzLmY9bmV3IGxlLHRoaXMuYT1iLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9ZnVuY3Rpb24gdWVlKHQpe3RoaXMuYj1uZXcgbGUsdGhpcy5hPW5ldyBsZSx0aGlzLmM9bmV3IGxlLHRoaXMuZD1uZXcgbGUsdGhpcy5lPXR9ZnVuY3Rpb24gbGVlKHQsZSl7dGhpcy5hPW5ldyBDcix0aGlzLmU9bmV3IENyLHRoaXMuYj0oWUMoKSx1ViksdGhpcy5jPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaGVlKHQsZSxuKXt4ai5jYWxsKHRoaXMpLFJtdCh0aGlzKSx0aGlzLmE9dCx0aGlzLmM9bix0aGlzLmI9ZS5kLHRoaXMuZj1lLmV9ZnVuY3Rpb24gZmVlKHQpe3RoaXMuZD10LHRoaXMuYz10LmMudmMoKS5LYygpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsLHRoaXMuZT0oZFIoKSxtdXQpfWZ1bmN0aW9uIEt2KHQpe2lmKHQ8MCl0aHJvdyBydChuZXcgUG4oIklsbGVnYWwgQ2FwYWNpdHk6ICIrdCkpO3RoaXMuZz10aGlzLnJpKHQpfWZ1bmN0aW9uICRhbih0LGUpe2lmKDA+dHx8dD5lKXRocm93IHJ0KG5ldyBRcHQoImZyb21JbmRleDogMCwgdG9JbmRleDogIit0K2p4dCtlKSl9ZnVuY3Rpb24gemFuKHQpe3ZhciBlO2lmKHQuYT09dC5iLmEpdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gZT10LmEsdC5jPWUsdC5hPXQuYS5lLGV9ZnVuY3Rpb24gSCQodCl7dmFyIGU7UG0oISF0LmMpLGU9dC5jLmEsY2godC5kLHQuYyksdC5iPT10LmM/dC5iPWU6LS10LmEsdC5jPW51bGx9ZnVuY3Rpb24gRyQodCxlKXt2YXIgbjtyZXR1cm4gZDIodCksbj1uZXcgTlh0KHQsdC5hLnJkKCksdC5hLnFkKCl8NCxlKSxuZXcgVG4odCxuKX1mdW5jdGlvbiBxYW4odCxlKXt2YXIgbixyO3JldHVybiBuPXUobnkodC5kLGUpLDE0KSxuPyhyPWUsdC5lLnBjKHIsbikpOm51bGx9ZnVuY3Rpb24gViQodCxlKXt2YXIgbixyO2ZvcihyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNzApLEp0KG4sKHNlKCksRDYpLGUpfWZ1bmN0aW9uIEhhbih0KXt2YXIgZTtyZXR1cm4gZT1YdCh5ZShRKHQsKFRlKCksVWcpKSkpLGU8MCYmKGU9MCxKdCh0LFVnLGUpKSxlfWZ1bmN0aW9uIEdhbih0LGUsbil7dmFyIHI7cj1iLk1hdGgubWF4KDAsdC5iLzItLjUpLGNfKG4sciwxKSx1ZShlLG5ldyBSR3QobixyKSl9ZnVuY3Rpb24gVmFuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmEuZVt1KGUuYSwxMCkucF0tdC5hLmVbdShuLmEsMTApLnBdLHBzKEtNKHIpKX1mdW5jdGlvbiBkZWUodCxlLG4scixzLG8pe3ZhciBoO2g9TnJ0KHIpLERhKGgscyksc2EoaCxvKSxsbih0LmEscixuZXcgVGooaCxlLG4uZikpfWZ1bmN0aW9uIGdlZSh0LGUpe3ZhciBuO2lmKG49Z0QodC5UZygpLGUpLCFuKXRocm93IHJ0KG5ldyBQbihhYitlK0ZjdCkpO3JldHVybiBufWZ1bmN0aW9uIFptKHQsZSl7dmFyIG47Zm9yKG49dDt0cyhuKTspaWYobj10cyhuKSxuPT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFVhbih0LGUpe3ZhciBuLHIscztmb3Iocj1lLmEuY2QoKSxuPXUoZS5hLmRkKCksMTQpLmdjKCkscz0wO3M8bjtzKyspdC50ZChyKX1mdW5jdGlvbiBtdSh0LGUpe3ZhciBuLHIscyxvO2ZvcihPbihlKSxyPXQuYyxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlLnRkKG4pfWZ1bmN0aW9uIGNoKHQsZSl7dmFyIG47cmV0dXJuIG49ZS5jLGUuYS5iPWUuYixlLmIuYT1lLmEsZS5hPWUuYj1udWxsLGUuYz1udWxsLC0tdC5iLG59ZnVuY3Rpb24gV2FuKHQsZSl7cmV0dXJuIGUmJnQuYltlLmddPT1lPyhKaSh0LmIsZS5nLG51bGwpLC0tdC5jLCEwKTohMX1mdW5jdGlvbiBwZWUodCxlKXtyZXR1cm4hIUdDKHQsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSl9ZnVuY3Rpb24gS2FuKHQsZSl7RHgodShRKHUodC5lLDEwKSwoVGUoKSxvcykpLDk4KSkmJih2bigpLFhzKHUodC5lLDEwKS5qLGUpKX1mdW5jdGlvbiBSbXQodCl7dC5iPShYdSgpLGNiKSx0LmY9KHd1KCksdWIpLHQuZD0oQmwoMixteSksbmV3IFljKDIpKSx0LmU9bmV3IFRhfWZ1bmN0aW9uIEtmKCl7S2Y9WixzYz1uZXcgYmV0KCJCRUdJTiIsMCksdHU9bmV3IGJldChORSwxKSxhYz1uZXcgYmV0KCJFTkQiLDIpfWZ1bmN0aW9uIEExKCl7QTE9WixfNz1uZXcgemV0KE5FLDApLFl5PW5ldyB6ZXQoIkhFQUQiLDEpLFM3PW5ldyB6ZXQoIlRBSUwiLDIpfWZ1bmN0aW9uIFlhbigpe3JldHVybiB2RSgpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtrZnQsSlYsdFUsWlYseGZ0LFFWLFhWLHlmdF0pfWZ1bmN0aW9uIFhhbigpe3JldHVybiBqZygpLGN0KG90KE4zZSwxKSxhZSwyNzcsMCxbbVN0LEFhLGdjLFQ3LERvLGNzLGo2LHExXSl9ZnVuY3Rpb24gUWFuKCl7cmV0dXJuIGZxKCksY3Qob3QoeVR0LDEpLGFlLDI3MCwwLFtsbHQsZGx0LHVsdCxibHQsZmx0LGhsdCxwbHQsZ2x0XSl9ZnVuY3Rpb24gWmFuKCl7cmV0dXJuIHc0KCksY3Qob3QoTkN0LDEpLGFlLDI2MCwwLFtoVixNTyxJTyxJQ3QsREN0LE1DdCxPQ3QsZlZdKX1mdW5jdGlvbiBiZWUoKXtiZWU9WixkNGU9V3IoKG9hKCksY3Qob3QoU0F0LDEpLGFlLDk4LDAsW3liLEgxLEw3LEcyLGgwLFZjXSkpKX1mdW5jdGlvbiB2ZWUoKXt2ZWU9WixRSD0oS2YoKSxjdChvdChNeSwxKSxhZSwyMzIsMCxbc2MsdHUsYWNdKSkubGVuZ3RoLE51dD1RSH1mdW5jdGlvbiBVJCh0KXt0aGlzLmI9KEFyKHQpLG5ldyBQdSh0KSksdGhpcy5hPW5ldyBsZSx0aGlzLmQ9bmV3IGxlLHRoaXMuZT1uZXcgVGF9ZnVuY3Rpb24gSmFuKHQpe3ZhciBlO3JldHVybiBlPWIuTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksZT4wJiYodC5hLz1lLHQuYi89ZSksdH1mdW5jdGlvbiBGbCh0KXt2YXIgZTtyZXR1cm4gdC53P3QudzooZT1laW4odCksZSYmIWUua2goKSYmKHQudz1lKSxlKX1mdW5jdGlvbiB0b24odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDooZT11KHQsMTkwKSxlMG4oZSxlLmxlbmd0aCkpfWZ1bmN0aW9uIFN0KHQsZSl7aWYodC5nPT1udWxsfHxlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybiB0LmxpKGUsdC5nW2VdKX1mdW5jdGlvbiBlb24odCl7dmFyIGUsbjtmb3IoZT10LmEuZC5qLG49dC5jLmQuajtlIT1uOylwZih0LmIsZSksZT1reihlKTtwZih0LmIsZSl9ZnVuY3Rpb24gbm9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0LmMubGVuZ3RoO2UrKykoQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwxMSkpLnA9ZX1mdW5jdGlvbiByb24odCxlLG4pe3ZhciByLHMsbztmb3Iocz1lW25dLHI9MDtyPHMubGVuZ3RoO3IrKylvPXNbcl0sdC5lW28uYy5wXVtvLnBdPXJ9ZnVuY3Rpb24gSnJ0KHQsZSl7dmFyIG4scixzLG87Zm9yKHI9dC5kLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLHgxKHQuZyxuKS5hPWV9ZnVuY3Rpb24gSm0odCxlKXt2YXIgbixyO2ZvcihyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLExpKG4sZSk7cmV0dXJuIHR9ZnVuY3Rpb24gaW9uKHQsZSl7dmFyIG47cmV0dXJuIG49bmEobmModShKbih0LmcsZSksOCkpLGwydCh1KEpuKHQuZixlKSw0NjApLmIpKSxufWZ1bmN0aW9uIFl2KHQpe3ZhciBlO3JldHVybiBUcnQodC5lLHQpLFFuKHQuYiksdC5jPXQuYSxlPXUodC5hLlBiKCksNDIpLHQuYj1neXQodCksZX1mdW5jdGlvbiBzMih0KXt2YXIgZTtyZXR1cm4gbUModD09bnVsbHx8QXJyYXkuaXNBcnJheSh0KSYmKGU9eEkodCksIShlPj0xNCYmZTw9MTYpKSksdH1mdW5jdGlvbiB3ZWUodCxlLG4pe3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkocixhcmd1bWVudHMpfTtyZXR1cm4gZS5hcHBseShyLG4pLHJ9ZnVuY3Rpb24gbWVlKHQsZSxuKXt2YXIgcixzO3I9ZTtkbyBzPVh0KHQucFtyLnBdKStuLHQucFtyLnBdPXMscj10LmFbci5wXTt3aGlsZShyIT1lKX1mdW5jdGlvbiBQOCh0LGUpe3ZhciBuLHI7cj10LmEsbj1GdW4odCxlLG51bGwpLHIhPWUmJiF0LmUmJihuPV9FKHQsZSxuKSksbiYmbi5GaSgpfWZ1bmN0aW9uIGptdCh0LGUpe3JldHVybiB5MSgpLGdmKGViKSxiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24gJG10KHQsZSl7cmV0dXJuIHkxKCksZ2YoZWIpLGIuTWF0aC5hYnModC1lKTw9ZWJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBzb24odCxlKXtyZXR1cm4gWnAoKSxkdSh0LmIuYy5sZW5ndGgtdC5lLmMubGVuZ3RoLGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGgpfWZ1bmN0aW9uIHQ0KHQsZSl7cmV0dXJuIHJZZShIQyh0LGUsU3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSkpKX1mdW5jdGlvbiB5ZWUoKXt5ZWU9WixQYmU9V3IoKEduKCksY3Qob3QoZWx0LDEpLGFlLDI2NywwLFtEcyxacyx4cyxIYyxTbCxqMV0pKSl9ZnVuY3Rpb24geGVlKCl7eGVlPVoscTNlPVdyKChjeSgpLGN0KG90KG5mdCwxKSxhZSwyOTEsMCxbZWZ0LFZPLEdPLHRmdCxxTyxIT10pKSl9ZnVuY3Rpb24ga2VlKCl7a2VlPVosRjNlPVdyKChRZCgpLGN0KG90KGtTdCwxKSxhZSwyNDgsMCxbWmh0LCRPLHpPLEZWLE5WLFBWXSkpKX1mdW5jdGlvbiBFZWUoKXtFZWU9WixjMmU9V3IoKGk2KCksY3Qob3QoYzcsMSksYWUsMjI3LDAsW283LGRTLGE3LE95LEg0LHE0XSkpKX1mdW5jdGlvbiBUZWUoKXtUZWU9WixtMmU9V3IoKGdFKCksY3Qob3QoR1R0LDEpLGFlLDI3NSwwLFtiUywkVHQsSFR0LHFUdCx6VHQsalR0XSkpKX1mdW5jdGlvbiBDZWUoKXtDZWU9Wix3MmU9V3IoKG5EKCksY3Qob3QoUlR0LDEpLGFlLDI3NCwwLFtCRyxQVHQsQlR0LE5UdCxGVHQsU2x0XSkpKX1mdW5jdGlvbiBfZWUoKXtfZWU9Wiwkd2U9V3IoKFp6KCksY3Qob3QoQ0N0LDEpLGFlLDMxMywwLFthaHQsRUN0LHNodCxrQ3QsVEN0LGNWXSkpKX1mdW5jdGlvbiBTZWUoKXtTZWU9WixiMmU9V3IoKG5xKCksY3Qob3QoSVR0LDEpLGFlLDI3NiwwLFtFbHQsa2x0LENsdCxUbHQsX2x0LFBHXSkpKX1mdW5jdGlvbiBBZWUoKXtBZWU9WixRbWU9V3IoKGZfKCksY3Qob3QoWG1lLDEpLGFlLDMyNywwLFt3VixraHQsVGh0LEVodCxDaHQseGh0XSkpKX1mdW5jdGlvbiBMZWUoKXtMZWU9WixnNGU9V3IoKFF1KCksY3Qob3QoR1YsMSksYWUsMjczLDAsW3hiLHRnLHROLEpTLFpTLEc2XSkpKX1mdW5jdGlvbiBNZWUoKXtNZWU9WixhNGU9V3IoKHRxKCksY3Qob3Qod0F0LDEpLGFlLDMxMiwwLFtiZnQscEF0LHZBdCxkQXQsYkF0LGdBdF0pKSl9ZnVuY3Rpb24gYW9uKCl7cmV0dXJuIGZ5KCksY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsSjAsVGYsX2YsbDAsemgsVWwsQ2YsJGhdKX1mdW5jdGlvbiBXJCh0LGUpe3ZhciBuO249dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDAsbix0LmEpKX1mdW5jdGlvbiBLJCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDEsbix0LmIpKX1mdW5jdGlvbiBGOCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDMsbix0LmIpKX1mdW5jdGlvbiBYdih0LGUpe3ZhciBuO249dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDMsbix0LmYpKX1mdW5jdGlvbiBRdih0LGUpe3ZhciBuO249dC5nLHQuZz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDQsbix0LmcpKX1mdW5jdGlvbiB5dSh0LGUpe3ZhciBuO249dC5pLHQuaT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDUsbix0LmkpKX1mdW5jdGlvbiB4dSh0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDYsbix0LmopKX1mdW5jdGlvbiBCOCh0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDEsbix0LmopKX1mdW5jdGlvbiBSOCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDQsbix0LmMpKX1mdW5jdGlvbiBqOCh0LGUpe3ZhciBuO249dC5rLHQuaz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBLbSh0LDIsbix0LmspKX1mdW5jdGlvbiB0aXQodCxlKXt2YXIgbjtuPXQuZCx0LmQ9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgU3J0KHQsMixuLHQuZCkpfWZ1bmN0aW9uIElnKHQsZSl7dmFyIG47bj10LnMsdC5zPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFNydCh0LDQsbix0LnMpKX1mdW5jdGlvbiB0eSh0LGUpe3ZhciBuO249dC50LHQudD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBTcnQodCw1LG4sdC50KSl9ZnVuY3Rpb24gJDgodCxlKXt2YXIgbjtuPXQuRix0LkY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDUsbixlKSl9ZnVuY3Rpb24gQ0kodCxlKXt2YXIgbjtyZXR1cm4gbj11KEpuKChOUigpLG5VKSx0KSw1NSksbj9uLnhqKGUpOlB0KFhuLEllLDEsZSw1LDEpfWZ1bmN0aW9uIFIwKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lIGluIHQuYSxuJiYocj1EMCh0LGUpLmhlKCkscik/ci5hOm51bGx9ZnVuY3Rpb24gb29uKHQsZSl7dmFyIG4scixzO3JldHVybiBuPShyPShUdigpLHM9bmV3IFlULHMpLGUmJkE1dChyLGUpLHIpLFltdChuLHQpLG59ZnVuY3Rpb24gSWVlKHQsZSxuKXtpZihROCh0LG4pLCF0LkJrKCkmJm4hPW51bGwmJiF0LndqKG4pKXRocm93IHJ0KG5ldyBIdHQpO3JldHVybiBufWZ1bmN0aW9uIERlZSh0LGUpe3JldHVybiB0Lm49ZSx0Lm4/KHQuZj1uZXcgbGUsdC5lPW5ldyBsZSk6KHQuZj1udWxsLHQuZT1udWxsKSx0fWZ1bmN0aW9uIGpyKHQsZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1VbnQodCxlKSxOZWUobixoKSxoLmk9cz84OjAsaC5mPXIsaC5lPXMsaC5nPW8saH1mdW5jdGlvbiB6bXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTEsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gcW10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5rPXIsdGhpcy5mPXMsdGhpcy5vPS0xLHRoaXMucD0yLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIEhtdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9Nix0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBHbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTcsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gVm10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5qPXIsdGhpcy5lPXMsdGhpcy5vPS0xLHRoaXMucD00LHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIE9lZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sdnRlKHQuYSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBMMSh0KXt2YXIgZSxuLHIscztmb3Iobj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLEFyKGUpO3JldHVybiBuZXcgSlZ0KHQpfWZ1bmN0aW9uIGNvbih0KXt2YXIgZT0vZnVuY3Rpb24oPzpccysoW1x3JF0rKSk/XHMqXCgvLG49ZS5leGVjKHQpO3JldHVybiBuJiZuWzFdfHxSYXR9ZnVuY3Rpb24gTmVlKHQsZSl7aWYodCl7ZS5uPXQ7dmFyIG49ZHJuKGUpO2lmKCFuKXskSFt0XT1bZV07cmV0dXJufW4uZ209ZX19ZnVuY3Rpb24gdW9uKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQubGVuZ3RoLHI9Yi5NYXRoLm1pbihuLHMpLFk0dCh0LDAsZSwwLHIsITApLGV9ZnVuY3Rpb24gUGVlKHQsZSxuKXt2YXIgcixzO2ZvcihzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNzkpLE5zKHQsdShuLktiKHIpLDMzKSl9ZnVuY3Rpb24gbG9uKCl7akh0KCk7Zm9yKHZhciB0PWR1dCxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKX1mdW5jdGlvbiB6Qyh0LGUpe3ZhciBuLHIscyxvO2ZvcihyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10saHModCxuLHQuYy5iLHQuYyl9ZnVuY3Rpb24gWSQodCxlKXt0LmI9Yi5NYXRoLm1heCh0LmIsZS5kKSx0LmUrPWUucisodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSx1ZSh0LmEsZSl9ZnVuY3Rpb24gRmVlKHQpe1BtKHQuYz49MCksb2huKHQuZCx0LmMpPDAmJih0LmE9dC5hLTEmdC5kLmEubGVuZ3RoLTEsdC5iPXQuZC5jKSx0LmM9LTF9ZnVuY3Rpb24gVW10KHQpe3JldHVybiB0LmE8NTQ/dC5mPDA/LTE6dC5mPjA/MTowOighdC5jJiYodC5jPWpJKHQuZikpLHQuYykuZX1mdW5jdGlvbiBnZih0KXtpZighKHQ+PTApKXRocm93IHJ0KG5ldyBQbigidG9sZXJhbmNlICgiK3QrIikgbXVzdCBiZSA+PSAwIikpO3JldHVybiB0fWZ1bmN0aW9uIHo4KCl7cmV0dXJuIFhodHx8KFhodD1uZXcga3VlLHM0KFhodCxjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IHlwXSkpKSxYaHR9ZnVuY3Rpb24gc28oKXtzbz1aLE1TPW5ldyBNZXQoT18sMCksSnU9bmV3IE1ldCgiSU5QVVQiLDEpLGV1PW5ldyBNZXQoIk9VVFBVVCIsMil9ZnVuY3Rpb24gWCQoKXtYJD1aLENUdD1uZXcgRWV0KCJBUkQiLDApLE9HPW5ldyBFZXQoIk1TRCIsMSksd2x0PW5ldyBFZXQoIk1BTlVBTCIsMil9ZnVuY3Rpb24gWnYoKXtadj1aLE9PPW5ldyBQZXQoIkJBUllDRU5URVIiLDApLERTPW5ldyBQZXQoYTFlLDEpLGRWPW5ldyBQZXQobzFlLDIpfWZ1bmN0aW9uIF9JKHQsZSl7dmFyIG47aWYobj10LmdjKCksZTwwfHxlPm4pdGhyb3cgcnQobmV3IGptKGUsbikpO3JldHVybiBuZXcgbHZ0KHQsZSl9ZnVuY3Rpb24gQmVlKHQsZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpP3QuYy5NYyhlKToobj1XaXQodCxlKSxJeih0LGUpLG4pfWZ1bmN0aW9uIHBvKHQsZSxuKXtyZXR1cm4gZjIodCxlKSxYYyh0LG4pLElnKHQsMCksdHkodCwxKSxQZyh0LCEwKSxOZyh0LCEwKSx0fWZ1bmN0aW9uIEJsKHQsZSl7aWYodDwwKXRocm93IHJ0KG5ldyBQbihlKyIgY2Fubm90IGJlIG5lZ2F0aXZlIGJ1dCB3YXM6ICIrdCkpO3JldHVybiB0fWZ1bmN0aW9uIFJlZSh0LGUpe3ZhciBuLHI7Zm9yKG49MCxyPXQuZ2MoKTtuPHI7KytuKWlmKFBjKGUsdC5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gUSQodCl7dmFyIGUsbjtmb3Iobj10LmMuQ2MoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwxNCksZS4kYigpO3QuYy4kYigpLHQuZD0wfWZ1bmN0aW9uIGhvbih0KXt2YXIgZSxuLHIscztmb3Iobj10LmEscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sJFl0KGUsZS5sZW5ndGgsbnVsbCl9ZnVuY3Rpb24gV210KHQpe3ZhciBlLG47aWYodD09MClyZXR1cm4gMzI7Zm9yKG49MCxlPTE7IShlJnQpO2U8PD0xKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBmb24odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyhUc2UodCkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDY4MCksZS5HZigpfWZ1bmN0aW9uIGplZSh0KXtkYnQoKSx0aGlzLmc9bmV3IENyLHRoaXMuZj1uZXcgQ3IsdGhpcy5iPW5ldyBDcix0aGlzLmM9bmV3IEh2LHRoaXMuaT10fWZ1bmN0aW9uIEttdCgpe3RoaXMuZj1uZXcgVGEsdGhpcy5kPW5ldyBGcHQsdGhpcy5jPW5ldyBUYSx0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgbGV9ZnVuY3Rpb24gJGVlKHQsZSxuLHIpe3RoaXMucmooKSx0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bnVsbCx0aGlzLmM9bmV3IFpXdCh0aGlzLGUsbixyKX1mdW5jdGlvbiBlaXQodCxlLG4scixzKXt0aGlzLmQ9dCx0aGlzLm49ZSx0aGlzLmc9bix0aGlzLm89cix0aGlzLnA9LTEsc3x8KHRoaXMubz0tMi1yLTEpfWZ1bmN0aW9uIHplZSgpe2cydC5jYWxsKHRoaXMpLHRoaXMubj0tMSx0aGlzLmc9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLkJifD13Zn1mdW5jdGlvbiBkb24oKXtyZXR1cm4gY2woKSxjdChvdChMQXQsMSksYWUsMjU5LDAsW003LGlOLFZWLGVBLFVWLEtWLFdWLHZmdCxyTl0pfWZ1bmN0aW9uIGdvbigpe3JldHVybiBncSgpLGN0KG90KFpFdCwxKSxhZSwyNTAsMCxbUUV0LFdFdCxLRXQsVUV0LE91dCxYRXQsWUV0LFZFdCxHRXRdKX1mdW5jdGlvbiBxZWUoKXtxZWU9WixrZ2U9Y3Qob3QoVHIsMSksWHIsMjUsMTUsWzAsOCw0LDEyLDIsMTAsNiwxNCwxLDksNSwxMywzLDExLDcsMTVdKX1mdW5jdGlvbiBIZWUoKXtIZWU9WixpbWU9YmkoYmkoYmkobmV3IEhzLChXYSgpLEFkKSwocm8oKSxoUykpLGxiLHI3KSxvdSxuNyl9ZnVuY3Rpb24gR2VlKCl7R2VlPVosc21lPWJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCksaFMpKSxsYixyNyksb3UsbjcpfWZ1bmN0aW9uIFZlZSgpe1ZlZT1aLGFtZT1iaShiaShiaShuZXcgSHMsKFdhKCksQWQpLChybygpLGhTKSksbGIscjcpLG91LG43KX1mdW5jdGlvbiBVZWUoKXtVZWU9Wix1bWU9S3UoYmkoYmkobmV3IEhzLChXYSgpLG91KSwocm8oKSx3RykpLHFjLGRHKSxJbyx2Ryl9ZnVuY3Rpb24gWXgoKXtZeD1aLFM2PW5ldyBrZXQoIkxBWUVSX1NXRUVQIiwwKSx3Tz1uZXcga2V0KGpvdCwxKSxFVHQ9bmV3IGtldChLMCwyKX1mdW5jdGlvbiBwb24odCxlKXt2YXIgbixyO3JldHVybiBuPXQuYyxyPWUuZVt0LnBdLHI+MD91KEZlKG4uYSxyLTEpLDEwKTpudWxsfWZ1bmN0aW9uIHFDKHQsZSl7dmFyIG47bj10LmssdC5rPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwyLG4sdC5rKSl9ZnVuY3Rpb24gWiQodCxlKXt2YXIgbjtuPXQuZix0LmY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDgsbix0LmYpKX1mdW5jdGlvbiBKJCh0LGUpe3ZhciBuO249dC5pLHQuaT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNyxuLHQuaSkpfWZ1bmN0aW9uIFltdCh0LGUpe3ZhciBuO249dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsOCxuLHQuYSkpfWZ1bmN0aW9uIFhtdCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMCxuLHQuYikpfWZ1bmN0aW9uIFFtdCh0LGUpe3ZhciBuO249dC5iLHQuYj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMCxuLHQuYikpfWZ1bmN0aW9uIFptdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuYykpfWZ1bmN0aW9uIEptdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuYykpfWZ1bmN0aW9uIG5pdCh0LGUpe3ZhciBuO249dC5jLHQuYz1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNCxuLHQuYykpfWZ1bmN0aW9uIHR5dCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuZCkpfWZ1bmN0aW9uIHJpdCh0LGUpe3ZhciBuO249dC5ELHQuRD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMixuLHQuRCkpfWZ1bmN0aW9uIGlpdCh0LGUpe3Qucj4wJiZ0LmM8dC5yJiYodC5jKz1lLHQuaSYmdC5pLmQ+MCYmdC5nIT0wJiZpaXQodC5pLGUvdC5yKnQuaS5kKSl9ZnVuY3Rpb24gYm9uKHQsZSxuKXt2YXIgcjt0LmI9ZSx0LmE9bixyPSh0LmEmNTEyKT09NTEyP25ldyBTcXQ6bmV3IFZMLHQuYz1Edm4ocix0LmIsdC5hKX1mdW5jdGlvbiBXZWUodCxlKXtyZXR1cm4gVjAodC5lLGUpPyh0bygpLFlydChlKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KSk6bmV3IGpWdChlLHQpfWZ1bmN0aW9uIHR6KHQsZSl7cmV0dXJuIG5ZZShHQyh0LmEsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSkpfWZ1bmN0aW9uIHZvbih0LGUsbil7cmV0dXJuIFltKHQsbmV3IGZlKGUpLG5ldyBZbixuZXcgZ2UobiksY3Qob3QobGwsMSksYWUsMTMyLDAsW10pKX1mdW5jdGlvbiB3b24odCl7dmFyIGUsbjtyZXR1cm4gMD50P25ldyBmYnQ6KGU9dCsxLG49bmV3IHZKdChlLHQpLG5ldyBWMnQobnVsbCxuKSl9ZnVuY3Rpb24gbW9uKHQsZSl7dm4oKTt2YXIgbjtyZXR1cm4gbj1uZXcga3goMSksZWEodCk/eG8obix0LGUpOnN1KG4uZix0LGUpLG5ldyBxKG4pfWZ1bmN0aW9uIHlvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5vK3QucCxyPWUubytlLnAsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIHhvbih0KXt2YXIgZTtyZXR1cm4gZT1RKHQsKHNlKCksX2kpKSxFdChlLDE2MCk/YWllKHUoZSwxNjApKTpudWxsfWZ1bmN0aW9uIEtlZSh0KXt2YXIgZTtyZXR1cm4gdD1iLk1hdGgubWF4KHQsMiksZT1UeXQodCksdD5lPyhlPDw9MSxlPjA/ZTpBXyk6ZX1mdW5jdGlvbiBzaXQodCl7c3dpdGNoKGsydCh0LmUhPTMpLHQuZSl7Y2FzZSAyOnJldHVybiExO2Nhc2UgMDpyZXR1cm4hMH1yZXR1cm4gX3NuKHQpfWZ1bmN0aW9uIFllZSh0LGUpe3ZhciBuO3JldHVybiBFdChlLDgpPyhuPXUoZSw4KSx0LmE9PW4uYSYmdC5iPT1uLmIpOiExfWZ1bmN0aW9uIGFpdCh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPWU+PjUscz1lJjMxLHI9UHMoem0odC5uW25dW29dLFNyKE0wKHMsMSkpKSwzKSxyfWZ1bmN0aW9uIGtvbih0LGUpe3ZhciBuLHI7Zm9yKHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxZeih0LG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIEVvbih0LGUpe3ZhciBuO249bmV3IGdwLHUoZS5iLDY1KSx1KGUuYiw2NSksdShlLmIsNjUpLG11KGUuYSxuZXcgeHZ0KHQsbixlKSl9ZnVuY3Rpb24gZXl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwyMSxuLHQuYikpfWZ1bmN0aW9uIG55dCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMTEsbix0LmQpKX1mdW5jdGlvbiBleih0LGUpe3ZhciBuO249dC5qLHQuaj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMTMsbix0LmopKX1mdW5jdGlvbiBYZWUodCxlLG4pe3ZhciByLHMsbztmb3Iobz10LmEubGVuZ3RoLTEscz10LmIscj0wO3I8bjtzPXMrMSZvLCsrcilKaShlLHIsdC5hW3NdKX1mdW5jdGlvbiBwZih0LGUpe3ZhciBuO3JldHVybiBPbihlKSxuPWUuZyx0LmJbbl0/ITE6KEppKHQuYixuLGUpLCsrdC5jLCEwKX1mdW5jdGlvbiBRZWUodCxlKXt2YXIgbjtyZXR1cm4gbj1lPT1udWxsPy0xOlJvKHQuYixlLDApLG48MD8hMToob2l0KHQsbiksITApfWZ1bmN0aW9uIG9pdCh0LGUpe3ZhciBuO249QWcodC5iLHQuYi5jLmxlbmd0aC0xKSxlPHQuYi5jLmxlbmd0aCYmKGFoKHQuYixlLG4pLGhvZSh0LGUpKX1mdW5jdGlvbiBUb24odCxlKXsoQyQoKSxSMT9udWxsOmUuYykubGVuZ3RoPT0wJiZTV3QoZSxuZXcgb2UpLHhvKHQuYSxSMT9udWxsOmUuYyxlKX1mdW5jdGlvbiBDb24odCxlKXt3cihlLCJIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmciLDEpLE9obih0KSxONW4odCksb3IoZSl9ZnVuY3Rpb24gX29uKHQsZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDI2NiksdC5iPSEwLE5zKHQuZSxuKSxuLmI9dH1mdW5jdGlvbiBueih0LGUpe3ZhciBuLHI7cmV0dXJuIG49MS1lLHI9dC5hW25dLHQuYVtuXT1yLmFbZV0sci5hW2VdPXQsdC5iPSEwLHIuYj0hMSxyfWZ1bmN0aW9uIFNvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShRKHQsKFRlKCksSHkpKSw4KSxyPXUoUShlLEh5KSw4KSxMcyhuLmIsci5iKX1mdW5jdGlvbiBaZWUodCl7V3Z0LmNhbGwodGhpcyksdGhpcy5iPVh0KHllKFEodCwoVGUoKSx4ZikpKSksdGhpcy5hPXUoUSh0LFgwKSwyMTgpfWZ1bmN0aW9uIEplZSh0LGUsbil7WHd0LmNhbGwodGhpcyx0LGUsbiksdGhpcy5hPW5ldyBDcix0aGlzLmI9bmV3IENyLHRoaXMuZD1uZXcgZyR0KHRoaXMpfWZ1bmN0aW9uIHRuZSh0KXt0aGlzLmU9dCx0aGlzLmQ9bmV3IHhSKFFtKFB4KHRoaXMuZSkuZ2MoKSkpLHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmN9ZnVuY3Rpb24gcnoodCl7dGhpcy5iPXQsdGhpcy5hPVB0KFRyLFhyLDI1LHQrMSwxNSwxKSx0aGlzLmM9UHQoVHIsWHIsMjUsdCwxNSwxKSx0aGlzLmQ9MH1mdW5jdGlvbiBjaXQodCxlLG4pe3ZhciByO3JldHVybiByPW5ldyBsZSxJNXQodCxlLHIsbiwhMCwhMCksdC5iPW5ldyByeihyLmMubGVuZ3RoKSxyfWZ1bmN0aW9uIGVuZSh0LGUpe3ZhciBuO3JldHVybiBuPXUoSm4odC5jLGUpLDQ1OCksbnx8KG49bmV3IGFxdCxuLmM9ZSxraSh0LmMsbi5jLG4pKSxufWZ1bmN0aW9uIHVpdCh0LGUpe3ZhciBuPXQuYSxyPTA7Zm9yKHZhciBzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKGVbcisrXT1zKTtyZXR1cm4gZX1mdW5jdGlvbiByeXQodCl7dmFyIGU7cmV0dXJuIHQuYj09bnVsbD8oRWcoKSxFZygpLGhOKTooZT10LkxrKCk/dC5LaygpOnQuSmsoKSxlKX1mdW5jdGlvbiBubmUodCl7dmFyIGUsbjtmb3Iobj1uZXcgZXIodCk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDMzKSx5dShlLDApLHh1KGUsMCl9ZnVuY3Rpb24gR3AoKXtHcD1aLEM2PW5ldyBHaShsNnQpLGFHPW5ldyBHaSh6ZmUpLGxTPW5ldyBHaShxZmUpLGRPPW5ldyBHaShIZmUpfWZ1bmN0aW9uIHE4KCl7cTg9WixwTz1uZXcgQWJ0KCJUT19JTlRFUk5BTF9MVFIiLDApLG5sdD1uZXcgQWJ0KCJUT19JTlBVVF9ESVJFQ1RJT04iLDEpfWZ1bmN0aW9uIGl6KCl7aXo9WixUVj1uZXcgSGJ0KCJQMV9OT0RFX1BMQUNFTUVOVCIsMCksRTc9bmV3IEhidCgiUDJfRURHRV9ST1VUSU5HIiwxKX1mdW5jdGlvbiBKdigpe0p2PVosQXc9bmV3IHhldCgiU1RBUlQiLDApLGhiPW5ldyB4ZXQoIk1JRERMRSIsMSksU3c9bmV3IHhldCgiRU5EIiwyKX1mdW5jdGlvbiBYeCgpe1h4PVosc2x0PW5ldyBPcygiZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsIiwoRm4oKSxJMikpfWZ1bmN0aW9uIEFvbih0LGUpe3VzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuZXcgVG0odC5iKSwxKSksbmV3IGNWdCh0LGUpKSxuZXcgbFZ0KHQsZSkpfWZ1bmN0aW9uIHJuZSgpe3RoaXMuYz1uZXcgRVIoMCksdGhpcy5iPW5ldyBFUihMMWUpLHRoaXMuZD1uZXcgRVIoQTFlKSx0aGlzLmE9bmV3IEVSKE1vdCl9ZnVuY3Rpb24gaXl0KHQpe3ZhciBlLG47Zm9yKG49dC5jLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwyMTQpLGNwdChlLG5ldyBDYWUoZS5lKSl9ZnVuY3Rpb24gaW5lKHQpe3ZhciBlLG47Zm9yKG49dC5jLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSwyMTQpLHh0dChlLG5ldyBJWXQoZS5mKSl9ZnVuY3Rpb24gWGModCxlKXt2YXIgbjtuPXQuemIsdC56Yj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxuLHQuemIpKX1mdW5jdGlvbiBzeih0LGUpe3ZhciBuO249dC54Yix0LnhiPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLG4sdC54YikpfWZ1bmN0aW9uIGF6KHQsZSl7dmFyIG47bj10LnliLHQueWI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDIsbix0LnliKSl9ZnVuY3Rpb24gZXModCxlKXt2YXIgbixyO249KHI9bmV3IFV0dCxyKSxuLm49ZSxNcigoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucyksbil9ZnVuY3Rpb24gUGkodCxlKXt2YXIgbixyO3I9KG49bmV3IHEydCxuKSxyLm49ZSxNcigoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucykscil9ZnVuY3Rpb24gZTQodCxlKXt2YXIgbixyO2ZvcihuPXQuUGMoKSxEOChuLDAsbi5sZW5ndGgsZSkscj0wO3I8bi5sZW5ndGg7cisrKXQuX2MocixuW3JdKX1mdW5jdGlvbiBVYSh0LGUpe3ZhciBuLHIscztmb3IoT24oZSksbj0hMSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLG49bnx0LkZjKHIpO3JldHVybiBufWZ1bmN0aW9uIHNuZSh0KXt2YXIgZSxuLHI7Zm9yKGU9MCxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGUrPW4hPW51bGw/SGkobik6MCxlPX5+ZTtyZXR1cm4gZX1mdW5jdGlvbiBhbmUodCl7dmFyIGU7cmV0dXJuIHQ9PTA/IlVUQyI6KHQ8MD8odD0tdCxlPSJVVEMrIik6ZT0iVVRDLSIsZStxdGUodCkpfWZ1bmN0aW9uIGxpdCh0LGUpe3ZhciBuO3JldHVybiBFdChlLDE0KT8obj11KGUsMTQpLHQuR2MobikpOlhydCh0LHUoQXIoZSksMjApLktjKCkpfWZ1bmN0aW9uIG9uZSh0LGUsbil7bGVlLmNhbGwodGhpcyxlLG4pLHRoaXMuZD1QdChvMCx6ZywxMCx0LmEuYy5sZW5ndGgsMCwxKSxEMSh0LmEsdGhpcy5kKX1mdW5jdGlvbiBMb24odCl7dC5hPW51bGwsdC5lPW51bGwsdC5iLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5mLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5jPW51bGx9ZnVuY3Rpb24gY25lKHQsZSl7ZT90LkI9PW51bGwmJih0LkI9dC5ELHQuRD1udWxsKTp0LkIhPW51bGwmJih0LkQ9dC5CLHQuQj1udWxsKX1mdW5jdGlvbiB1bmUodCxlKXtyZXR1cm4gWHQoeWUoT3YocUkocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuYy5iLDE2KSksbmV3IHJSKHQpKSxlKSkpKX1mdW5jdGlvbiBzeXQodCxlKXtyZXR1cm4gWHQoeWUoT3YocUkocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuYy5iLDE2KSksbmV3IF85KHQpKSxlKSkpKX1mdW5jdGlvbiBNb24odCxlKXt3cihlLHMxZSwxKSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IGlZKSxuZXcgc1kpLG9yKGUpfWZ1bmN0aW9uIElvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShxZSh0LChheSgpLF9WKSksMTkpLHI9dShxZShlLF9WKSwxOSksZHUobi5hLHIuYSl9ZnVuY3Rpb24gYXl0KHQsZSxuKXt2YXIgcixzO2ZvcihzPWVpKHQsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDgpLHIuYSs9ZSxyLmIrPW47cmV0dXJuIHR9ZnVuY3Rpb24gSEModCxlLG4pe3ZhciByO2ZvcihyPXQuYltuJnQuZl07cjtyPXIuYilpZihuPT1yLmEmJmZkKGUsci5nKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBHQyh0LGUsbil7dmFyIHI7Zm9yKHI9dC5jW24mdC5mXTtyO3I9ci5kKWlmKG49PXIuZiYmZmQoZSxyLmkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIERvbih0LGUsbil7dmFyIHIscyxvO2ZvcihyPTAscz0wO3M8bjtzKyspbz1lW3NdLHRbc109bzw8MXxyLHI9bz4+PjMxO3IhPTAmJih0W25dPXIpfWZ1bmN0aW9uIE9vbih0LGUpe3ZuKCk7dmFyIG4scjtmb3Iocj1uZXcgbGUsbj0wO248dDsrK24pci5jW3IuYy5sZW5ndGhdPWU7cmV0dXJuIG5ldyBvZXQocil9ZnVuY3Rpb24gbG5lKHQpe3ZhciBlO3JldHVybiBlPXBadCh0KSxBdihlLmEsMCk/KGk4KCksaTgoKSxFRXQpOihpOCgpLG5ldyBOMnQoZS5iKSl9ZnVuY3Rpb24gaG5lKHQpe3ZhciBlO3JldHVybiBlPXBadCh0KSxBdihlLmEsMCk/KGk4KCksaTgoKSxFRXQpOihpOCgpLG5ldyBOMnQoZS5jKSl9ZnVuY3Rpb24gTm9uKHQpe3ZhciBlO3JldHVybiBlPW0kKHQpLEF2KGUuYSwwKT8oU1IoKSxTUigpLERnZSk6KFNSKCksbmV3IHNXdChlLmIpKX1mdW5jdGlvbiBQb24odCl7cmV0dXJuIHQuYi5jLmkuaz09KEduKCkseHMpP3UoUSh0LmIuYy5pLChzZSgpLF9pKSksMTEpOnQuYi5jfWZ1bmN0aW9uIGZuZSh0KXtyZXR1cm4gdC5iLmQuaS5rPT0oR24oKSx4cyk/dShRKHQuYi5kLmksKHNlKCksX2kpKSwxMSk6dC5iLmR9ZnVuY3Rpb24gbHModCxlLG4scixzLG8saCxkLHcsayxDLE0sRil7cmV0dXJuIGlvZSh0LGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGKSxSaXQodCwhMSksdH1mdW5jdGlvbiB1aCh0LGUsbixyLHMsbyxoKXtHci5jYWxsKHRoaXMsdCxlKSx0aGlzLmQ9bix0aGlzLmU9cix0aGlzLmM9cyx0aGlzLmI9byx0aGlzLmE9XzEoaCl9ZnVuY3Rpb24gRm9uKHQsZSl7dHlwZW9mIHdpbmRvdz09PUNEJiZ0eXBlb2Ygd2luZG93LiRnd3Q9PT1DRCYmKHdpbmRvdy4kZ3d0W3RdPWUpfWZ1bmN0aW9uIEJvbih0LGUpe3JldHVybiBLOCgpLHQ9PV93JiZlPT1EeXx8dD09RHkmJmU9PV93fHx0PT1qNCYmZT09SXl8fHQ9PUl5JiZlPT1qNH1mdW5jdGlvbiBSb24odCxlKXtyZXR1cm4gSzgoKSx0PT1fdyYmZT09SXl8fHQ9PV93JiZlPT1qNHx8dD09RHkmJmU9PWo0fHx0PT1EeSYmZT09SXl9ZnVuY3Rpb24gZG5lKHQsZSl7cmV0dXJuIHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoMC1lKTw9UDF8fGU9PTB8fGlzTmFOKDApJiZpc05hTihlKT8wOnQvZX1mdW5jdGlvbiBqb24oKXtyZXR1cm4gb28oKSxjdChvdChBbHQsMSksYWUsMjU2LDAsW1JHLGJoLHZTLGpHLGY3LFY0LHdTLGw3LGg3LCRHXSl9ZnVuY3Rpb24gaGl0KCl7aGl0PVosYUE9bmV3IGtxdCxfZnQ9Y3Qob3QoQXUsMSksUDQsMTcwLDAsW10pLHM1ZT1jdChvdChWaCwxKSxPOHQsNTksMCxbXSl9ZnVuY3Rpb24gb3ooKXtvej1aLFZDdD1uZXcgT2V0KCJOTyIsMCksd2h0PW5ldyBPZXQoIkdSRUVEWSIsMSksR0N0PW5ldyBPZXQoIkxPT0tfQkFDSyIsMil9ZnVuY3Rpb24gQnUoKXtCdT1aLE43dD1uZXcgYm0sRDd0PW5ldyBicCxPN3Q9bmV3IHRZLEk3dD1uZXcgemIsUDd0PW5ldyBlWSxGN3Q9bmV3IG5ZfWZ1bmN0aW9uICRvbih0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjkpLGUucD1yLCsrcn1mdW5jdGlvbiB6b24odCxlKXt2YXIgbjtyZXR1cm4gbj1DNHQodCksdDV0KG5ldyAkZShuLmMsbi5kKSxuZXcgJGUobi5iLG4uYSksdC5yZigpLGUsdC5IZigpKX1mdW5jdGlvbiBSYyh0LGUpe3ZhciBuO3JldHVybiB0LmI/bnVsbDoobj1SYW4odCx0LmcpLG5pKHQuYSxuKSxuLmk9dCx0LmQ9ZSxuKX1mdW5jdGlvbiBxb24odCxlLG4pe3dyKG4sIkRGUyBUcmVlaWZ5aW5nIHBoYXNlIiwxKSxRbG4odCxlKSxXMm4odCxlKSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBnbmUodCxlLG4pe3RoaXMuZz10LHRoaXMuZD1lLHRoaXMuZT1uLHRoaXMuYT1uZXcgbGUsJGduKHRoaXMpLHZuKCksWHModGhpcy5hLG51bGwpfWZ1bmN0aW9uIG95dCh0KXt0aGlzLmk9dC5nYygpLHRoaXMuaT4wJiYodGhpcy5nPXRoaXMucmkodGhpcy5pKyh0aGlzLmkvOHwwKSsxKSx0LlFjKHRoaXMuZykpfWZ1bmN0aW9uIGlzKHQsZSl7U2ouY2FsbCh0aGlzLGE1ZSx0LGUpLHRoaXMuYj10aGlzLHRoaXMuYT1hdSh0LlRnKCkseW4odGhpcy5lLlRnKCksdGhpcy5jKSl9ZnVuY3Rpb24gVkModCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPWUudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0MiksdC56YyhuLmNkKCksbi5kZCgpKX1mdW5jdGlvbiBIb24odCxlLG4pe3ZhciByO2ZvcihyPW4uS2MoKTtyLk9iKCk7KWlmKCFrJCh0LGUsci5QYigpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHb24odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbiYmKG89VmkoZS5UZygpLHQuYykscz1uLmdoKGUsLTEtKG89PS0xP3I6byksbnVsbCxzKSksc31mdW5jdGlvbiBWb24odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbiYmKG89VmkoZS5UZygpLHQuYykscz1uLmloKGUsLTEtKG89PS0xP3I6byksbnVsbCxzKSksc31mdW5jdGlvbiBwbmUodCl7dmFyIGU7aWYodC5iPT0tMil7aWYodC5lPT0wKWU9LTE7ZWxzZSBmb3IoZT0wO3QuYVtlXT09MDtlKyspO3QuYj1lfXJldHVybiB0LmJ9ZnVuY3Rpb24gYm5lKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMjpyZXR1cm4gYmUoKSxCbjtjYXNlIDQ6cmV0dXJuIGJlKCksSG47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gdm5lKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYmUoKSxtcjtjYXNlIDM6cmV0dXJuIGJlKCksTm47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gVW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdC5qPT0oYmUoKSxObikmJihlPVVvZSh0KSxuPU51KGUsSG4pLHI9TnUoZSxCbikscnx8ciYmbil9ZnVuY3Rpb24gV29uKHQpe3ZhciBlLG47cmV0dXJuIGU9dSh0LmUmJnQuZSgpLDkpLG49dShkd3QoZSxlLmxlbmd0aCksOSksbmV3IHJoKGUsbixlLmxlbmd0aCl9ZnVuY3Rpb24gS29uKHQsZSl7d3IoZSxzMWUsMSksYzN0KGdZZShuZXcgdHIoKHo5KCksbmV3IHRydCh0LCExLCExLG5ldyBZUCkpKSkpLG9yKGUpfWZ1bmN0aW9uIFNJKHQsZSl7cmV0dXJuIEZuKCksZWEodCk/cG10KHQsQnIoZSkpOk5tKHQpP1BudCh0LHllKGUpKTpPbSh0KT9adG4odCxSZShlKSk6dC53ZChlKX1mdW5jdGlvbiBjeXQodCxlKXtlLnE9dCx0LmQ9Yi5NYXRoLm1heCh0LmQsZS5yKSx0LmIrPWUuZCsodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSx1ZSh0LmEsZSl9ZnVuY3Rpb24gSDgodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcz10LmMsbj10LmMrdC5iLG89dC5kLHI9dC5kK3QuYSxlLmE+cyYmZS5hPG4mJmUuYj5vJiZlLmI8cn1mdW5jdGlvbiB3bmUodCxlLG4scil7RXQodC5DYiwxNzkpJiYodSh0LkNiLDE3OSkudGI9bnVsbCksWGModCxuKSxlJiZjcG4odCxlKSxyJiZ0LnhrKCEwKX1mdW5jdGlvbiB1eXQodCxlKXt2YXIgbjtuPXUoZSwxODMpLEpiKG4sIngiLHQuaSksSmIobiwieSIsdC5qKSxKYihuLHpjdCx0LmcpLEpiKG4sJGN0LHQuZil9ZnVuY3Rpb24gbHl0KCl7bHl0PVosbG1lPWF3KFdWdChiaShiaShuZXcgSHMsKFdhKCksb3UpLChybygpLHdHKSkscWMsZEcpLElvKSx2Ryl9ZnVuY3Rpb24gbW5lKCl7bW5lPVosZ21lPWF3KFdWdChiaShiaShuZXcgSHMsKFdhKCksb3UpLChybygpLHdHKSkscWMsZEcpLElvKSx2Ryl9ZnVuY3Rpb24gY3ooKXtjej1aLGpodD1uZXcgUmV0KEswLDApLE1fdD1uZXcgUmV0KCJQT0xBUl9DT09SRElOQVRFIiwxKSxMX3Q9bmV3IFJldCgiSUQiLDIpfWZ1bmN0aW9uIHV6KCl7dXo9WixSQ3Q9bmV3IElldCgiRVFVQUxMWSIsMCkscGh0PW5ldyBJZXQoUnEsMSksakN0PW5ldyBJZXQoIk5PUlRIX1NPVVRIIiwyKX1mdW5jdGlvbiB5bmUoKXt5bmU9WixHd2U9V3IoKHc0KCksY3Qob3QoTkN0LDEpLGFlLDI2MCwwLFtoVixNTyxJTyxJQ3QsREN0LE1DdCxPQ3QsZlZdKSkpfWZ1bmN0aW9uIHhuZSgpe3huZT1aLG8yZT1XcigoZnEoKSxjdChvdCh5VHQsMSksYWUsMjcwLDAsW2xsdCxkbHQsdWx0LGJsdCxmbHQsaGx0LHBsdCxnbHRdKSkpfWZ1bmN0aW9uIGtuZSgpe2tuZT1aLFAzZT1XcigoamcoKSxjdChvdChOM2UsMSksYWUsMjc3LDAsW21TdCxBYSxnYyxUNyxEbyxjcyxqNixxMV0pKSl9ZnVuY3Rpb24gRW5lKCl7RW5lPVosUjRlPVdyKCh2RSgpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtrZnQsSlYsdFUsWlYseGZ0LFFWLFhWLHlmdF0pKSl9ZnVuY3Rpb24gRzgoKXtHOD1aLHVTPW5ldyBPcygiZGVidWdTVkciLChGbigpLCExKSksbjd0PW5ldyBPcygib3ZlcmxhcHNFeGlzdGVkIiwhMCl9ZnVuY3Rpb24gVG5lKHQsZSl7cmV0dXJuIFltKG5ldyB6dCh0KSxuZXcgZWUoZSksbmV3IFZ0KGUpLG5ldyBkcyxjdChvdChsbCwxKSxhZSwxMzIsMCxbXSkpfWZ1bmN0aW9uIFlvbigpe3ZhciB0O3JldHVybiBMdXR8fChMdXQ9bmV3IFh6dCx0PW5ldyBJcnQoIiIpLG9YZSh0LChzOCgpLExFdCkpLFRvbihMdXQsdCkpLEx1dH1mdW5jdGlvbiBYb24odCxlKXt2YXIgbjtmb3IoQXIoZSk7dC5PYigpOylpZihuPXQuUGIoKSwhZHl0KHUobiwxMCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIENuZSh0LGUpe3ZhciBuO3JldHVybiBuPXNhdCh6OCgpLHQpLG4/KGJvKGUsKGNpKCksQzcpLG4pLCEwKTohMX1mdW5jdGlvbiBSbCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmouYy5sZW5ndGg7bisrKXUod0kodCxuKSwyMSkuR2ModSh3SShlLG4pLDE0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gUW9uKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI5KSx0LmFbbi5wXT14MG4obil9ZnVuY3Rpb24gVUModCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0MiksZS5PZChuLmNkKCksbi5kZCgpKX1mdW5jdGlvbiBseih0LGUpe3ZhciBuO0V0KGUsODMpPyh1KHQuYyw3NikuWGooKSxuPXUoZSw4Myksa29uKHQsbikpOnUodC5jLDc2KS5XYihlKX1mdW5jdGlvbiBhMih0KXtyZXR1cm4gRXQodCwxNTIpP1Z4KHUodCwxNTIpKTpFdCh0LDEzMSk/dSh0LDEzMSkuYTpFdCh0LDU0KT9uZXcgbXYodCk6bmV3IE1tKHQpfWZ1bmN0aW9uIFpvbih0LGUpe3JldHVybiBlPHQuYi5nYygpP3UodC5iLlhiKGUpLDEwKTplPT10LmIuZ2MoKT90LmE6dShGZSh0LmUsZS10LmIuZ2MoKS0xKSwxMCl9ZnVuY3Rpb24gX25lKHQsZSl7dC5hPU9hKHQuYSwxKSx0LmM9Yi5NYXRoLm1pbih0LmMsZSksdC5iPWIuTWF0aC5tYXgodC5iLGUpLHQuZD1PYSh0LmQsZSl9ZnVuY3Rpb24gSm9uKHQsZSl7dmFyIG47d3IoZSwiRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxuPW53bih0KSx3NG4obiksb3IoZSl9ZnVuY3Rpb24gU25lKHQpe3ZhciBlO3QuZD09bnVsbD8oKyt0LmUsdC5mPTAsRnJlKG51bGwpKTooKyt0LmUsZT10LmQsdC5kPW51bGwsdC5mPTAsRnJlKGUpKX1mdW5jdGlvbiBWcCh0KXt2YXIgZTtyZXR1cm4gZT10LmgsZT09MD90LmwrdC5tKmY2OmU9PVcwP3QubCt0Lm0qZjYteDI6dH1mdW5jdGlvbiBBbmUodCl7cmV0dXJuIEJtKCksdC5BLkhjKChfbCgpLFh5KSkmJiF0LkIuSGMoKGNsKCksaU4pKT9saWUodCk6bnVsbH1mdW5jdGlvbiB0Y24odCl7aWYoT24odCksdC5sZW5ndGg9PTApdGhyb3cgcnQobmV3IG9kKCJaZXJvIGxlbmd0aCBCaWdJbnRlZ2VyIikpO2R3bih0aGlzLHQpfWZ1bmN0aW9uIG40KHQpe2lmKCF0KXRocm93IHJ0KG5ldyBGbygibm8gY2FsbHMgdG8gbmV4dCgpIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcmVtb3ZlKCkiKSl9ZnVuY3Rpb24ga3UodCl7cmV0dXJuIEREPHQmJnQ8eDI/dDwwP2IuTWF0aC5jZWlsKHQpOmIuTWF0aC5mbG9vcih0KTpWcCh5Mm4odCkpfWZ1bmN0aW9uIGVjbih0LGUpe3ZhciBuLHIscztmb3Iobj10LmMuRWUoKSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLHQuYS5PZChuLHIpO3JldHVybiB0LmIuS2Iobil9ZnVuY3Rpb24gbWkodCxlKXt2YXIgbixyLHM7aWYobj10LkpnKCksbiE9bnVsbCYmdC5NZygpKWZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKW5bcl0udWkoZSl9ZnVuY3Rpb24gVjgodCxlKXt2YXIgbixyO2ZvcihuPXQscj1GYShuKS5lO3I7KXtpZihuPXIsbj09ZSlyZXR1cm4hMDtyPUZhKG4pLmV9cmV0dXJuITF9ZnVuY3Rpb24gbmNuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXQuYS5mW2UucF0scz10LmEuZltuLnBdLHI8cz8tMTpyPT1zPzA6MX1mdW5jdGlvbiBvMih0LGUsbil7dmFyIHIscztyZXR1cm4gcz11KHdDKHQuZCxlKSwxOSkscj11KHdDKHQuYixuKSwxOSksIXN8fCFyP251bGw6V3godCxzLmEsci5hKX1mdW5jdGlvbiByY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBlcih0KTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMzMpLG0xKG4sbi5pK2UuYixuLmorZS5kKX1mdW5jdGlvbiBpY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSx1ZSh0LmQsbiksZzBuKHQsbil9ZnVuY3Rpb24gc2NuKHQsZSl7dmFyIG4scjtyPW5ldyBsZSxuPWU7ZG8gci5jW3IuYy5sZW5ndGhdPW4sbj11KEpuKHQuayxuKSwxNyk7d2hpbGUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gSW4odCxlKXt2YXIgbjtyZXR1cm4gdC5EYiZlPyhuPWJzdCh0LGUpLG49PS0xP3QuRWI6czIodC5FYilbbl0pOm51bGx9ZnVuY3Rpb24gaWModCxlKXt2YXIgbixyO3JldHVybiBuPShyPW5ldyBYTCxyKSxuLkc9ZSwhdC5yYiYmKHQucmI9bmV3IHFtKHQsaTEsdCkpLE1yKHQucmIsbiksbn1mdW5jdGlvbiBhaSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGxSLHIpLG4uRz1lLCF0LnJiJiYodC5yYj1uZXcgcW0odCxpMSx0KSksTXIodC5yYixuKSxufWZ1bmN0aW9uIGh5dCh0LGUpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuISF0Lm4mJnQubi5pIT0wO2Nhc2UgMjpyZXR1cm4gdC5rIT1udWxsfXJldHVybiBHd3QodCxlKX1mdW5jdGlvbiBMbmUodCl7c3dpdGNoKHQuYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBMVnQ7Y2FzZSAzOnJldHVybiBuZXcgU3NlO2RlZmF1bHQ6cmV0dXJuIG5ldyBpZH19ZnVuY3Rpb24gaHoodCl7dmFyIGU7aWYodC5nPjF8fHQuT2IoKSlyZXR1cm4rK3QuYSx0Lmc9MCxlPXQuaSx0Lk9iKCksZTt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIGFjbih0KXt3VXQoKTt2YXIgZTtyZXR1cm4gQUd0KHlodCx0KXx8KGU9bmV3IFNRLGUuYT10LFoydCh5aHQsdCxlKSksdShnbyh5aHQsdCksNjM1KX1mdW5jdGlvbiBTaCh0KXt2YXIgZSxuLHIscztyZXR1cm4gcz10LHI9MCxzPDAmJihzKz14MixyPVcwKSxuPXBzKHMvZjYpLGU9cHMocy1uKmY2KSxydShlLG4scil9ZnVuY3Rpb24gQUkodCl7dmFyIGUsbixyO2ZvcihyPTAsbj1uZXcgRXgodC5hKTtuLmE8bi5jLmEubGVuZ3RoOyllPUZDKG4pLHQuYi5IYyhlKSYmKytyO3JldHVybiByfWZ1bmN0aW9uIG9jbih0KXt2YXIgZSxuLHI7Zm9yKGU9MSxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGU9MzEqZSsobj09bnVsbD8wOkhpKG4pKSxlPX5+ZTtyZXR1cm4gZX1mdW5jdGlvbiBjY24odCxlKXt2YXIgbjt0aGlzLmM9dCxuPW5ldyBsZSx6M3QodCxuLGUsdC5iLG51bGwsITEsbnVsbCwhMSksdGhpcy5hPW5ldyBoYShuLDApfWZ1bmN0aW9uIFU4KHQsZSl7dGhpcy5iPXQsdGhpcy5lPWUsdGhpcy5kPWUuaix0aGlzLmY9KHRvKCksdSh0LDY2KS5PaigpKSx0aGlzLms9YXUoZS5lLlRnKCksdCl9ZnVuY3Rpb24gYzIodCxlLG4pe3RoaXMuYj0oT24odCksdCksdGhpcy5kPShPbihlKSxlKSx0aGlzLmU9KE9uKG4pLG4pLHRoaXMuYz10aGlzLmQrKCIiK3RoaXMuZSl9ZnVuY3Rpb24gTW5lKCl7dGhpcy5hPXUoRGUoKFpmKCksaUcpKSwxOSkuYSx0aGlzLmM9WHQoeWUoRGUoc0cpKSksdGhpcy5iPVh0KHllKERlKEd1dCkpKX1mdW5jdGlvbiBJbmUoKXtJbmU9WixoNGU9V3IoKGZ5KCksY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsSjAsVGYsX2YsbDAsemgsVWwsQ2YsJGhdKSkpfWZ1bmN0aW9uIERuZSgpe0RuZT1aLEtnZT1XcigoZ3EoKSxjdChvdChaRXQsMSksYWUsMjUwLDAsW1FFdCxXRXQsS0V0LFVFdCxPdXQsWEV0LFlFdCxWRXQsR0V0XSkpKX1mdW5jdGlvbiB0dygpe3R3PVosYU89bmV3IHpSKCJVUCIsMCksc089bmV3IHpSKHlvdCwxKSxGdXQ9bmV3IHpSKGQ2LDIpLEJ1dD1uZXcgelIoZzYsMyl9ZnVuY3Rpb24gZnl0KCl7Znl0PVosbl90PShkJCgpLE1odCksZXllPW5ldyBtbihGa3Qsbl90KSxlX3Q9KHYkKCksSWh0KSx0eWU9bmV3IG1uKEJrdCxlX3QpfWZ1bmN0aW9uIFc4KCl7Vzg9WixMbHQ9bmV3IENldCgiT05FX1NJREVEIiwwKSxNbHQ9bmV3IENldCgiVFdPX1NJREVEIiwxKSxtTz1uZXcgQ2V0KCJPRkYiLDIpfWZ1bmN0aW9uIE9uZSh0KXt0LnI9bmV3IHFzLHQudz1uZXcgcXMsdC50PW5ldyBsZSx0Lmk9bmV3IGxlLHQuZD1uZXcgcXMsdC5hPW5ldyBBeCx0LmM9bmV3IENyfWZ1bmN0aW9uIExJKHQpe3RoaXMubj1uZXcgbGUsdGhpcy5lPW5ldyBRaSx0aGlzLmo9bmV3IFFpLHRoaXMuaz1uZXcgbGUsdGhpcy5mPW5ldyBsZSx0aGlzLnA9dH1mdW5jdGlvbiBObmUodCxlKXt0LmMmJihCdWUodCxlLCEwKSx1cyhuZXcgVG4obnVsbCxuZXcgX24oZSwxNikpLG5ldyAkdHQodCkpKSxCdWUodCxlLCExKX1mdW5jdGlvbiB1Y24odCxlLG4pe3JldHVybiB0PT0oWnYoKSxkVik/bmV3IHRROm9sKGUsMSkhPTA/bmV3IGlidChuLmxlbmd0aCk6bmV3IGlIdChuLmxlbmd0aCl9ZnVuY3Rpb24gTG8odCxlKXt2YXIgbjtyZXR1cm4gZSYmKG49ZS5WZSgpLG4uZGMoKXx8KHQucT9WQyh0LnEsbik6dC5xPW5ldyBVVnQobikpKSx0fWZ1bmN0aW9uIFBuZSh0LGUpe3ZhciBuO3JldHVybiBuPXQuYS5nZXQoZSksbj09PXZvaWQgMD8rK3QuZDooT1FlKHQuYSxlKSwtLXQuYyxhJCh0LmIpKSxufWZ1bmN0aW9uIGxjbih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLnAtdC5wLG49PTA/KHI9dC5mLmEqdC5mLmIscz1lLmYuYSplLmYuYixMcyhyLHMpKTpufWZ1bmN0aW9uIGhjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5mLmMubGVuZ3RoLHI9ZS5mLmMubGVuZ3RoLG48cj8tMTpuPT1yPzA6MX1mdW5jdGlvbiBmY24odCl7cmV0dXJuIHQuYi5jLmxlbmd0aCE9MCYmdShGZSh0LmIsMCksNzApLmE/dShGZSh0LmIsMCksNzApLmE6cnJ0KHQpfWZ1bmN0aW9uIGRjbih0KXt2YXIgZTtpZih0KXtpZihlPXQsZS5kYygpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIGUuWGIoZS5nYygpLTEpfXJldHVybiBGUXQodC5LYygpKX1mdW5jdGlvbiBGbmUodCl7dmFyIGU7cmV0dXJuIHljKHQsMCk8MCYmKHQ9SXZ0KHQpKSxlPVNyKEZwKHQsMzIpKSw2NC0oZSE9MD9sRChlKTpsRChTcih0KSkrMzIpfWZ1bmN0aW9uIGR5dCh0KXt2YXIgZTtyZXR1cm4gZT11KFEodCwoc2UoKSxvYykpLDYxKSx0Lms9PShHbigpLHhzKSYmKGU9PShiZSgpLEJuKXx8ZT09SG4pfWZ1bmN0aW9uIGdjbih0LGUsbil7dmFyIHIscztzPXUoUSh0LChUZSgpLF9vKSksNzQpLHMmJihyPW5ldyBEdSxBaXQociwwLHMpLEptKHIsbiksVWEoZSxyKSl9ZnVuY3Rpb24gZnoodCxlLG4pe3ZhciByLHMsbyxoO2g9RmEodCkscj1oLmQscz1oLmMsbz10Lm4sZSYmKG8uYT1vLmEtci5iLXMuYSksbiYmKG8uYj1vLmItci5kLXMuYil9ZnVuY3Rpb24gcGNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10Lmoscj1lLmosbiE9cj9uLmctci5nOnQucD09ZS5wPzA6bj09KGJlKCksTm4pP3QucC1lLnA6ZS5wLXQucH1mdW5jdGlvbiBiY24odCl7dmFyIGUsbjtmb3IoejRuKHQpLG49bmV3IFModC5kKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMDEpLGUuaSYmWDBuKGUpfWZ1bmN0aW9uIFdDKHQsZSxuLHIscyl7SmkodC5jW2UuZ10sbi5nLHIpLEppKHQuY1tuLmddLGUuZyxyKSxKaSh0LmJbZS5nXSxuLmcscyksSmkodC5iW24uZ10sZS5nLHMpfWZ1bmN0aW9uIHZjbih0LGUsbixyKXt1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLG11KHIuYSxuZXcgeXZ0KHQsZSxyKSl9ZnVuY3Rpb24gd2NuKHQsZSl7dC5kPT0oYW8oKSxqaCl8fHQuZD09WjA/dShlLmEsNTcpLmMuRmModShlLmIsNTcpKTp1KGUuYiw1NykuYy5GYyh1KGUuYSw1NykpfWZ1bmN0aW9uIGZpdCh0LGUsbixyKXtyZXR1cm4gbj09MT8oIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSxCYSh0Lm4sZSxyKSk6TzR0KHQsZSxuLHIpfWZ1bmN0aW9uIE1JKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0obj1uZXcgUkwsbiksWGMocixlKSxNcigoIXQuQSYmKHQuQT1uZXcgT3UobHUsdCw3KSksdC5BKSxyKSxyfWZ1bmN0aW9uIG1jbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89bnVsbCxoPWUscz1VdihoLEdjdCkscj1uZXcgZ1Z0KHQsbiksbz0oUjFuKHIuYSxyLmIscykscyksb31mdW5jdGlvbiBkaXQodCl7dmFyIGU7cmV0dXJuKCF0LmF8fCEodC5CYiYxKSYmdC5hLmtoKCkpJiYoZT1MaCh0KSxFdChlLDE0OCkmJih0LmE9dShlLDE0OCkpKSx0LmF9ZnVuY3Rpb24gSUkodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPWUuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLCF0LkhjKG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHljbih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj10LmwrZS5sLHI9dC5tK2UubSsobj4+MjIpLHM9dC5oK2UuaCsocj4+MjIpLHJ1KG4mdWwsciZ1bCxzJlcwKX1mdW5jdGlvbiBCbmUodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dC5sLWUubCxyPXQubS1lLm0rKG4+PjIyKSxzPXQuaC1lLmgrKHI+PjIyKSxydShuJnVsLHImdWwscyZXMCl9ZnVuY3Rpb24gREkodCl7dmFyIGU7cmV0dXJuIHQ8MTI4PyhlPShaS3QoKSxpRXQpW3RdLCFlJiYoZT1pRXRbdF09bmV3IHRSKHQpKSxlKTpuZXcgdFIodCl9ZnVuY3Rpb24gV2kodCl7dmFyIGU7cmV0dXJuIEV0KHQsNzgpP3Q6KGU9dCYmdC5fX2phdmEkZXhjZXB0aW9uLGV8fChlPW5ldyBfcmUodCksSHp0KGUpKSxlKX1mdW5jdGlvbiBPSSh0KXtpZihFdCh0LDE4NikpcmV0dXJuIHUodCwxMTgpO2lmKHQpcmV0dXJuIG51bGw7dGhyb3cgcnQobmV3IHl4KERkZSkpfWZ1bmN0aW9uIFJuZSh0LGUpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKDt0LmEhPXQuYjspaWYoeWkoZSxteih0KSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3l0KHQpe3JldHVybiB0LmEuT2IoKT8hMDp0LmEhPXQuZD8hMToodC5hPW5ldyBLd3QodC5lLmYpLHQuYS5PYigpKX1mdW5jdGlvbiBBcyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5QYygpLHI9bi5sZW5ndGgscj09MD8hMTooU3Z0KHQuYyx0LmMubGVuZ3RoLG4pLCEwKX1mdW5jdGlvbiB4Y24odCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS52YygpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDQyKSx0LnljKHIuY2QoKSxyLmRkKCksbik7cmV0dXJuIHR9ZnVuY3Rpb24gam5lKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxKdChuLChzZSgpLEQ2KSxlKX1mdW5jdGlvbiBrY24odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwzMyksbTEocixyLmkrZSxyLmorbil9ZnVuY3Rpb24gJG5lKHQsZSl7aWYoIXQpdGhyb3cgcnQobmV3IFBuKHZfKCJ2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICVzIixjdChvdChYbiwxKSxJZSwxLDUsW2VdKSkpKX1mdW5jdGlvbiB6bmUodCxlKXtyZXR1cm4hdHx8IWV8fHQ9PWU/ITE6RWllKHQuZC5jLGUuZC5jK2UuZC5iKSYmRWllKGUuZC5jLHQuZC5jK3QuZC5iKX1mdW5jdGlvbiBFY24oKXtyZXR1cm4gQyQoKSxSMT9uZXcgSXJ0KG51bGwpOkdvZShZb24oKSwiY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzIil9ZnVuY3Rpb24gcW5lKHQsZSl7dmFyIG47cmV0dXJuIG49SGQoZS5hLmdjKCkpLHVzKEckKG5ldyBUbihudWxsLG5ldyBfbihlLDEpKSx0LmkpLG5ldyBvVnQodCxuKSksbn1mdW5jdGlvbiBIbmUodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgUkwsZSksWGMobiwiVCIpLE1yKCghdC5kJiYodC5kPW5ldyBPdShsdSx0LDExKSksdC5kKSxuKSxufWZ1bmN0aW9uIHB5dCh0KXt2YXIgZSxuLHIscztmb3IoZT0xLG49MCxzPXQuZ2MoKTtuPHM7KytuKXI9dC5raShuKSxlPTMxKmUrKHI9PW51bGw/MDpIaShyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gR25lKHQsZSxuLHIpe3ZhciBzO3JldHVybiBvSShlLHQuZS5IZCgpLmdjKCkpLG9JKG4sdC5jLkhkKCkuZ2MoKSkscz10LmFbZV1bbl0sSmkodC5hW2VdLG4sciksc31mdW5jdGlvbiBjdCh0LGUsbixyLHMpe3JldHVybiBzLmdtPXQscy5obT1lLHMuaW09Q3Qscy5fX2VsZW1lbnRUeXBlSWQkPW4scy5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPXIsc31mdW5jdGlvbiBUY24odCxlLG4scixzKXtyZXR1cm4geTQoKSxiLk1hdGgubWluKHRoZSh0LGUsbixyLHMpLHRoZShuLHIsdCxlLG1qKG5ldyAkZShzLmEscy5iKSkpKX1mdW5jdGlvbiBkeigpe2R6PVosYWx0PW5ldyBIUihLMCwwKSxfRz1uZXcgSFIoYzFlLDEpLFNHPW5ldyBIUih1MWUsMiksdk89bmV3IEhSKCJCT1RIIiwzKX1mdW5jdGlvbiBNMSgpe00xPVosXzY9bmV3IEdSKE5FLDApLGk3PW5ldyBHUihkNiwxKSxzNz1uZXcgR1IoZzYsMiksb2x0PW5ldyBHUigiVE9QIiwzKX1mdW5jdGlvbiBLOCgpe0s4PVosX3c9bmV3IHFSKCJRMSIsMCksRHk9bmV3IHFSKCJRNCIsMSksSXk9bmV3IHFSKCJRMiIsMiksajQ9bmV3IHFSKCJRMyIsMyl9ZnVuY3Rpb24gZ3ooKXtnej1aLG1odD1uZXcgTmV0KCJPRkYiLDApLHg3PW5ldyBOZXQoIlNJTkdMRV9FREdFIiwxKSxWeT1uZXcgTmV0KCJNVUxUSV9FREdFIiwyKX1mdW5jdGlvbiBOSSgpe05JPVosT1Y9bmV3IFVidCgiTUlOSU1VTV9TUEFOTklOR19UUkVFIiwwKSxiU3Q9bmV3IFVidCgiTUFYSU1VTV9TUEFOTklOR19UUkVFIiwxKX1mdW5jdGlvbiBReCgpe1F4PVosTDNlPW5ldyBkWixBM2U9bmV3IGhafWZ1bmN0aW9uIGJ5dCh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IFFpLHI9ZWkodC5kLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLG5pKGUsbi5jKTtyZXR1cm4gZX1mdW5jdGlvbiBnaXQodCl7dmFyIGUsbixyLHM7Zm9yKHM9bmV3IGxlLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzMyksZT1neShuKSxBcyhzLGUpO3JldHVybiBzfWZ1bmN0aW9uIENjbih0KXt2YXIgZTtkdyh0LCEwKSxlPSRnLFZzKHQsKFRlKCksdzcpKSYmKGUrPXUoUSh0LHc3KSwxOSkuYSksSnQodCx3NyxkZShlKSl9ZnVuY3Rpb24gVm5lKHQsZSxuKXt2YXIgcjtZdSh0LmEpLG11KG4uaSxuZXcgJCR0KHQpKSxyPW5ldyBjaih1KEpuKHQuYSxlLmIpLDY1KSksRGllKHQscixlKSxuLmY9cn1mdW5jdGlvbiBfY24odCxlKXt2YXIgbixyO3JldHVybiBuPXQuYyxyPWUuZVt0LnBdLHI8bi5hLmMubGVuZ3RoLTE/dShGZShuLmEscisxKSwxMCk6bnVsbH1mdW5jdGlvbiBTY24odCxlKXt2YXIgbixyO2ZvcihyJChlLCJwcmVkaWNhdGUiKSxyPTA7dC5PYigpO3IrKylpZihuPXQuUGIoKSxlLkxiKG4pKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIFp4KHQsZSl7dmFyIG4scjtpZihyPTAsdDw2NCYmdDw9ZSlmb3IoZT1lPDY0P2U6NjMsbj10O248PWU7bisrKXI9QzEocixNMCgxLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiB2eXQodCl7dm4oKTt2YXIgZSxuLHI7Zm9yKHI9MCxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLHI9cisoZSE9bnVsbD9IaShlKTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiB3eXQodCl7dmFyIGUsbjtyZXR1cm4gbj0oVHYoKSxlPW5ldyByZCxlKSx0JiZNcigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLG4pLG59ZnVuY3Rpb24gQWNuKHQpe3ZhciBlO3JldHVybiBlPW5ldyB5dCxlLmE9dCxlLmI9UGNuKHQpLGUuYz1QdChBZSx0ZSwyLDIsNiwxKSxlLmNbMF09YW5lKHQpLGUuY1sxXT1hbmUodCksZX1mdW5jdGlvbiBteXQodCxlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSx0Lm8uYy4kYigpO3JldHVybn1Oc3QodCxlKX1mdW5jdGlvbiBQSSh0LGUsbil7c3dpdGNoKG4uZyl7Y2FzZSAyOnQuYj1lO2JyZWFrO2Nhc2UgMTp0LmM9ZTticmVhaztjYXNlIDQ6dC5kPWU7YnJlYWs7Y2FzZSAzOnQuYT1lfX1mdW5jdGlvbiBVbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB3YjtjYXNlIDI6cmV0dXJuIHUwO2Nhc2UgMzpyZXR1cm4gUU87ZGVmYXVsdDpyZXR1cm4gWk99fWZ1bmN0aW9uIExjbih0KXtzd2l0Y2godShRKHQsKFRlKCksY3UpKSwxNjMpLmcpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gV25lKCl7V25lPVoseTJlPVdyKChvbygpLGN0KG90KEFsdCwxKSxhZSwyNTYsMCxbUkcsYmgsdlMsakcsZjcsVjQsd1MsbDcsaDcsJEddKSkpfWZ1bmN0aW9uIEtuZSgpe0tuZT1aLHg0ZT1XcigoY2woKSxjdChvdChMQXQsMSksYWUsMjU5LDAsW003LGlOLFZWLGVBLFVWLEtWLFdWLHZmdCxyTl0pKSl9ZnVuY3Rpb24gWW5lKCl7WW5lPVoscHllPWJpKGF3KGF3KE9SKGJpKG5ldyBIcywodUUoKSxQUyksKGZfKCksd1YpKSxQTyksRWh0KSxUaHQpLEZTLENodCl9ZnVuY3Rpb24gdTIoKXt1Mj1aLHhsdD1uZXcgVGV0KEswLDApLHU3PW5ldyBUZXQoIklOQ09NSU5HX09OTFkiLDEpLEc0PW5ldyBUZXQoIk9VVEdPSU5HX09OTFkiLDIpfWZ1bmN0aW9uIHBpdCgpe3BpdD1aLEV1dD17Ym9vbGVhbjpmWWUsbnVtYmVyOnhLZSxzdHJpbmc6a0tlLG9iamVjdDpjb2UsZnVuY3Rpb246Y29lLHVuZGVmaW5lZDplS2V9fWZ1bmN0aW9uIFhuZSh0LGUpe19qKHQ+PTAsIk5lZ2F0aXZlIGluaXRpYWwgY2FwYWNpdHkiKSxfaihlPj0wLCJOb24tcG9zaXRpdmUgbG9hZCBmYWN0b3IiKSxZdSh0aGlzKX1mdW5jdGlvbiBiaXQodCxlLG4pe3JldHVybiB0Pj0xMjg/ITE6dDw2ND9hQyhQcyhNMCgxLHQpLG4pLDApOmFDKFBzKE0wKDEsdC02NCksZSksMCl9ZnVuY3Rpb24gTWNuKHQsZSl7cmV0dXJuIXR8fCFlfHx0PT1lPyExOnJ3KHQuYi5jLGUuYi5jK2UuYi5iKTwwJiZydyhlLmIuYyx0LmIuYyt0LmIuYik8MH1mdW5jdGlvbiBRbmUodCl7dmFyIGUsbixyO3JldHVybiBuPXQubixyPXQubyxlPXQuZCxuZXcgaWgobi5hLWUuYixuLmItZS5kLHIuYSsoZS5iK2UuYyksci5iKyhlLmQrZS5hKSl9ZnVuY3Rpb24gSWNuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQuYSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxycmUodCxlLChiZSgpLG1yKSkscnJlKHQsZSxObil9ZnVuY3Rpb24gRGNuKHQpe3ZhciBlLG4scixzO2ZvcihlPSh0Lmo9PW51bGwmJih0Lmo9KFQ4KCkscz1rdXQuY2UodCksRzFuKHMpKSksdC5qKSxuPTAscj1lLmxlbmd0aDtuPHI7KytuKTt9ZnVuY3Rpb24gWTgodCl7dmFyIGUsbixyO3JldHVybiBlPX50LmwrMSZ1bCxuPX50Lm0rKGU9PTA/MTowKSZ1bCxyPX50LmgrKGU9PTAmJm49PTA/MTowKSZXMCxydShlLG4scil9ZnVuY3Rpb24gT2NuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHUoSm4odC5nLGUuYSksNDYpLmEsNjUpLHI9dSh1KEpuKHQuZyxlLmIpLDQ2KS5hLDY1KSx1bGUobixyKX1mdW5jdGlvbiB5eXQodCxlLG4pe3ZhciByO2lmKHI9dC5nYygpLGU+cil0aHJvdyBydChuZXcgam0oZSxyKSk7cmV0dXJuIHQuaGkoKSYmKG49Z1F0KHQsbikpLHQuVmgoZSxuKX1mdW5jdGlvbiBGSSh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0LnEmJih0LnE9bmV3IENyKSxVeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBDciksa2kodC5xLGUsbikpLHR9ZnVuY3Rpb24gSnQodCxlLG4pe3JldHVybiBuPT1udWxsPyghdC5xJiYodC5xPW5ldyBDciksVXgodC5xLGUpKTooIXQucSYmKHQucT1uZXcgQ3IpLGtpKHQucSxlLG4pKSx0fWZ1bmN0aW9uIFpuZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBfJCxMbyhuLHQpLEp0KG4sKEdwKCksQzYpLHQpLGU9bmV3IENyLFBtbih0LG4sZSksbzRuKHQsbixlKSxufWZ1bmN0aW9uIE5jbih0KXt5NCgpO3ZhciBlLG4scjtmb3Iobj1QdChVcyx0ZSw4LDIsMCwxKSxyPTAsZT0wO2U8MjtlKyspcis9LjUsbltlXT1wZm4ocix0KTtyZXR1cm4gbn1mdW5jdGlvbiBKbmUodCxlKXt2YXIgbixyLHMsbztmb3Iobj0hMSxyPXQuYVtlXS5sZW5ndGgsbz0wO288ci0xO28rKylzPW8rMSxuPW58WmxuKHQsZSxvLHMpO3JldHVybiBufWZ1bmN0aW9uIFg4KHQsZSxuLHIscyl7dmFyIG8saDtmb3IoaD1uO2g8PXM7aCsrKWZvcihvPWU7bzw9cjtvKyspbDQodCxvLGgpfHxicSh0LG8saCwhMCwhMSl9ZnVuY3Rpb24gdHJlKHQsZSl7dGhpcy5iPXQscTMuY2FsbCh0aGlzLCh1KFN0KFd0KChqcCgpLExuKS5vKSwxMCksMTgpLGUuaSksZS5nKSx0aGlzLmE9KGhpdCgpLF9mdCl9ZnVuY3Rpb24geHl0KHQsZSl7dGhpcy5jPXQsdGhpcy5kPWUsdGhpcy5iPXRoaXMuZC90aGlzLmMuYy5IZCgpLmdjKCl8MCx0aGlzLmE9dGhpcy5kJXRoaXMuYy5jLkhkKCkuZ2MoKX1mdW5jdGlvbiBreXQoKXt0aGlzLm89bnVsbCx0aGlzLms9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmE9bnVsbH1mdW5jdGlvbiBFeXQodCxlLG4pe3RoaXMucT1uZXcgYi5EYXRlLHRoaXMucS5zZXRGdWxsWWVhcih0K25iLGUsbiksdGhpcy5xLnNldEhvdXJzKDAsMCwwLDApLHlfKHRoaXMsMCl9ZnVuY3Rpb24gajAoKXtqMD1aLGdiPW5ldyBMZXQoSzAsMCksUEN0PW5ldyBMZXQoIk5PREVTX0FORF9FREdFUyIsMSksZmh0PW5ldyBMZXQoIlBSRUZFUl9FREdFUyIsMil9ZnVuY3Rpb24gUGNuKHQpe3ZhciBlO3JldHVybiB0PT0wPyJFdGMvR01UIjoodDwwPyh0PS10LGU9IkV0Yy9HTVQtIik6ZT0iRXRjL0dNVCsiLGUrcXRlKHQpKX1mdW5jdGlvbiBUeXQodCl7dmFyIGU7aWYodDwwKXJldHVybiBfYTtpZih0PT0wKXJldHVybiAwO2ZvcihlPUFfOyEoZSZ0KTtlPj49MSk7cmV0dXJuIGV9ZnVuY3Rpb24gZXJlKHQpe3ZhciBlLG47cmV0dXJuIG49bEQodC5oKSxuPT0zMj8oZT1sRCh0Lm0pLGU9PTMyP2xEKHQubCkrMzI6ZSsyMC0xMCk6bi0xMn1mdW5jdGlvbiBLQyh0KXt2YXIgZTtyZXR1cm4gZT10LmFbdC5iXSxlPT1udWxsP251bGw6KEppKHQuYSx0LmIsbnVsbCksdC5iPXQuYisxJnQuYS5sZW5ndGgtMSxlKX1mdW5jdGlvbiBucmUodCl7dmFyIGUsbjtyZXR1cm4gZT10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXT50LmYsbj10LnUrdC5lW3Quby5wXSp0LmQ+dC5mKnQucyp0LmQsZXx8bn1mdW5jdGlvbiBweih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgJHJ0KGUsbikscz1uZXcgJHQsdC5iPVdjZSh0LHQuYixyLHMpLHMuYnx8Kyt0LmMsdC5iLmI9ITEscy5kfWZ1bmN0aW9uIHJyZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9UUMoZSxuKSxvPTAscz1oLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxraSh0LmMscixkZShvKyspKX1mdW5jdGlvbiBVcCh0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5nLmM9LWUuZy5jLWUuZy5iO3VxKHQpfWZ1bmN0aW9uIFdwKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmQuYz0tZS5kLmMtZS5kLmI7UzV0KHQpfWZ1bmN0aW9uIEN5dCh0KXt2YXIgZTtyZXR1cm4oIXQuY3x8ISh0LkJiJjEpJiZ0LmMuRGImNjQpJiYoZT1MaCh0KSxFdChlLDg4KSYmKHQuYz11KGUsMjYpKSksdC5jfWZ1bmN0aW9uIHZpdCh0KXt2YXIgZSxuLHI7ZT1+dC5sKzEmdWwsbj1+dC5tKyhlPT0wPzE6MCkmdWwscj1+dC5oKyhlPT0wJiZuPT0wPzE6MCkmVzAsdC5sPWUsdC5tPW4sdC5oPXJ9ZnVuY3Rpb24gS28odCl7dmFyIGUsbixyLHMsbztmb3IoZT1uZXcgVGEscj10LHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGUuYSs9bi5hLGUuYis9bi5iO3JldHVybiBlfWZ1bmN0aW9uIF95dCh0LGUpe3ZuKCk7dmFyIG4scixzLG8saDtmb3IoaD0hMSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10saD1ofHQuRmMobik7cmV0dXJuIGh9ZnVuY3Rpb24gcjQodCl7eTQoKTt2YXIgZSxuO2ZvcihuPS0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0+biYmKG49dFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gaXJlKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1uZXcgbGUsSTV0KHQsZSxyLChiZSgpLEhuKSwhMCwhMSksSTV0KHQsbixyLEJuLCExLCExKSxyfWZ1bmN0aW9uIHdpdCh0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89bnVsbCxoPWUscz1VdihoLCJsYWJlbHMiKSxyPW5ldyBUVnQodCxuKSxvPShKcG4oci5hLHIuYixzKSxzKSxvfWZ1bmN0aW9uIEZjbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NXQodCxlLG4sciksIXMmJihzPUJ1bih0LG4scikscyYmIUU0KHQsZSxzKSk/bnVsbDpzfWZ1bmN0aW9uIEJjbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz1tNXQodCxlLG4sciksIXMmJihzPVBpdCh0LG4scikscyYmIUU0KHQsZSxzKSk/bnVsbDpzfWZ1bmN0aW9uIHNyZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjx0LmEuYS5sZW5ndGg7bisrKWlmKCF1KGVZdCh0LmEsbiksMTY5KS5MYihlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSY24odCxlLG4pe2lmKEFyKGUpLG4uT2IoKSlmb3IoUWJ0KGUsV1l0KG4uUGIoKSkpO24uT2IoKTspUWJ0KGUsdC5hKSxRYnQoZSxXWXQobi5QYigpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU3l0KHQpe3ZuKCk7dmFyIGUsbixyO2ZvcihyPTEsbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxyPTMxKnIrKGUhPW51bGw/SGkoZSk6MCkscj1yfDA7cmV0dXJuIHJ9ZnVuY3Rpb24gamNuKHQsZSxuLHIscyl7dmFyIG87cmV0dXJuIG89aDV0KHQsZSksbiYmdml0KG8pLHMmJih0PXhmbih0LGUpLHI/b2I9WTgodCk6b2I9cnUodC5sLHQubSx0LmgpKSxvfWZ1bmN0aW9uICRjbih0LGUpe3ZhciBuO3RyeXtlLlZkKCl9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDc4KSluPXIsdC5jW3QuYy5sZW5ndGhdPW47ZWxzZSB0aHJvdyBydChyKX19ZnVuY3Rpb24gYXJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBFdChlLDE0NCkmJm4/KHI9dShlLDE0NCkscz1uLHQuYVtyLmJdW3MuYl0rdC5hW3MuYl1bci5iXSk6MH1mdW5jdGlvbiBBeXQodCxlKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiEhdC5lJiZ0LmUuaSE9MDtjYXNlIDg6cmV0dXJuISF0LmQmJnQuZC5pIT0wfXJldHVybiBmM3QodCxlKX1mdW5jdGlvbiB6Y24odCxlKXtzd2l0Y2goZS5nKXtjYXNlIDA6RXQodC5iLDYzMSl8fCh0LmI9bmV3IE1uZSk7YnJlYWs7Y2FzZSAxOkV0KHQuYiw2MzIpfHwodC5iPW5ldyBJS3QpfX1mdW5jdGlvbiBxY24odCxlKXtmb3IoO3QuZz09bnVsbCYmIXQuYz9Gd3QodCk6dC5nPT1udWxsfHx0LmkhPTAmJnUodC5nW3QuaS0xXSw0NykuT2IoKTspRFllKGUsYXEodCkpfWZ1bmN0aW9uIG9yZSh0LGUsbil7dC5nPVBzdCh0LGUsKGJlKCksSG4pLHQuYiksdC5kPVBzdCh0LG4sSG4sdC5iKSwhKHQuZy5jPT0wfHx0LmQuYz09MCkmJl9hZSh0KX1mdW5jdGlvbiBjcmUodCxlLG4pe3QuZz1Qc3QodCxlLChiZSgpLEJuKSx0LmopLHQuZD1Qc3QodCxuLEJuLHQuaiksISh0LmcuYz09MHx8dC5kLmM9PTApJiZfYWUodCl9ZnVuY3Rpb24gSGNuKHQsZSxuKXtyZXR1cm4hajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYywxNikpLG5ldyBadChuZXcgdVZ0KGUsbikpKSkuc2QoKFdiKCksSkUpKX1mdW5jdGlvbiBtaXQodCl7dmFyIGU7cmV0dXJuICRwKHQpLGU9bmV3IFRpLHQuYS5zZChlKT8odTgoKSxuZXcgZ1IoT24oZS5hKSkpOih1OCgpLHU4KCksV0gpfWZ1bmN0aW9uIEx5dCh0KXt2YXIgZTtyZXR1cm4gdC5iPD0wPyExOihlPWNkKCJNTHlkaEhtc1NEa0siLEV1KGJhKHQuYywwKSkpLGU+MXx8ZT49MCYmdC5iPDMpfWZ1bmN0aW9uIEJJKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgRHUscj1laSh0LDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxoOChlLDAsbmV3IHlvKG4pKTtyZXR1cm4gZX1mdW5jdGlvbiBsMih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5mLiRiKCk7dktlKHQuYix0KSxOY2UodCl9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIGVhKHQpP0JnKHQpOk5tKHQpP284KHQpOk9tKHQpPyhPbih0KSx0PzEyMzE6MTIzNyk6UXZ0KHQpP3QuSGIoKTpVdnQodCk/SXYodCk6TXd0KHQpfWZ1bmN0aW9uIHNsKHQpe3JldHVybiBlYSh0KT9BZTpObSh0KT9jYTpPbSh0KT9CczpRdnQodCl8fFV2dCh0KT90LmdtOnQuZ218fEFycmF5LmlzQXJyYXkodCkmJm90KGJnZSwxKXx8YmdlfWZ1bmN0aW9uIHVyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBsWjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGxyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyB1WjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIE15dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksbHoodC5vLG4pO3JldHVybn1qc3QodCxlLG4pfWZ1bmN0aW9uIHlpdCh0LGUsbil7dGhpcy5nPXQsdGhpcy5lPW5ldyBUYSx0aGlzLmY9bmV3IFRhLHRoaXMuZD1uZXcgUWksdGhpcy5iPW5ldyBRaSx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiB4aXQodCxlLG4scil7dGhpcy5iPW5ldyBsZSx0aGlzLm49bmV3IGxlLHRoaXMuaT1yLHRoaXMuaj1uLHRoaXMucz10LHRoaXMudD1lLHRoaXMucj0wLHRoaXMuZD0wfWZ1bmN0aW9uIGgyKHQpe3RoaXMuZT10LHRoaXMuZD1uZXcgaW10KHRoaXMuZS5nKSx0aGlzLmE9dGhpcy5kLHRoaXMuYj1neXQodGhpcyksdGhpcy4kbW9kQ291bnQ9dC4kbW9kQ291bnR9ZnVuY3Rpb24gR2NuKHQpe2Zvcig7IXQuZHx8IXQuZC5PYigpOylpZih0LmImJiFOOSh0LmIpKXQuZD11KEZ4KHQuYiksNDcpO2Vsc2UgcmV0dXJuIG51bGw7cmV0dXJuIHQuZH1mdW5jdGlvbiBWY24odCl7cmV0dXJuIHVlKHQuYywoUXgoKSxMM2UpKSwkbXQodC5hLFh0KHllKERlKChWaXQoKSxvVikpKSkpP25ldyBGWjpuZXcgVSR0KHQpfWZ1bmN0aW9uIEl5dCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEExZTtkZWZhdWx0OmNhc2UgMjpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIE1vdDtjYXNlIDQ6cmV0dXJuIEwxZX19ZnVuY3Rpb24gVWNuKCl7Z2koKTt2YXIgdDtyZXR1cm4gRGZ0fHwodD1lUWUodGIoIk0iLCEwKSksdD1Caih0YigiTSIsITEpLHQpLERmdD10LERmdCl9ZnVuY3Rpb24gRHl0KHQsZSl7dmFyIG4scixzO2ZvcihzPXQuYjtzOyl7aWYobj10LmEudWUoZSxzLmQpLG49PTApcmV0dXJuIHM7cj1uPDA/MDoxLHM9cy5hW3JdfXJldHVybiBudWxsfWZ1bmN0aW9uIFdjbih0LGUsbil7dmFyIHIscztyPShGbigpLCEhSmJ0KG4pKSxzPXUoZS54YyhyKSwxNSksc3x8KHM9bmV3IGxlLGUuemMocixzKSkscy5GYyhuKX1mdW5jdGlvbiBLY24odCxlKXt2YXIgbixyO3JldHVybiBuPXUocWUodCwoS3N0KCksUk8pKSwxOSkuYSxyPXUocWUoZSxSTyksMTkpLmEsbj09cnx8bjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gT3l0KHQsZSl7cmV0dXJuIExjZSh0LGUpPyhsbih0LmIsdShRKGUsKHNlKCksTnkpKSwyMSksZSksbmkodC5hLGUpLCEwKTohMX1mdW5jdGlvbiBZY24odCl7dmFyIGUsbjtlPXUoUSh0LChzZSgpLFp1KSksMTApLGUmJihuPWUuYyx2dShuLmEsZSksbi5hLmMubGVuZ3RoPT0wJiZ2dShGYShlKS5iLG4pKX1mdW5jdGlvbiBocmUodCl7cmV0dXJuIFIxP1B0KFBnZSxkZmUsNTcyLDAsMCwxKTp1KEQxKHQuYSxQdChQZ2UsZGZlLDU3Mix0LmEuYy5sZW5ndGgsMCwxKSksODQyKX1mdW5jdGlvbiBYY24odCxlLG4scil7cmV0dXJuIFFqKCksbmV3IFp0dChjdChvdChNMiwxKSxEcSw0MiwwLFsoaHN0KHQsZSksbmV3IF92KHQsZSkpLChoc3QobixyKSxuZXcgX3YobixyKSldKSl9ZnVuY3Rpb24gaTQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9KHI9bmV3IFd0dCxyKSxwbyhzLGUsbiksTXIoKCF0LnEmJih0LnE9bmV3IGhlKFZoLHQsMTEsMTApKSx0LnEpLHMpLHN9ZnVuY3Rpb24ga2l0KHQpe3ZhciBlLG4scixzO2ZvcihzPWtZZShQNGUsdCksbj1zLmxlbmd0aCxyPVB0KEFlLHRlLDIsbiw2LDEpLGU9MDtlPG47KytlKXJbZV09c1tlXTtyZXR1cm4gcn1mdW5jdGlvbiBzNCh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxoPW5ldyBKWXQodCksbi5RZShoKSx0eW4oaCk7WXUodC5mKX1mdW5jdGlvbiBFaXQodCxlKXt2YXIgbjtyZXR1cm4gZT09PXQ/ITA6RXQoZSwyMjQpPyhuPXUoZSwyMjQpLHlpKHQuWmIoKSxuLlpiKCkpKTohMX1mdW5jdGlvbiBOeXQodCxlKXt2YXIgbjtlKjIrMT49dC5iLmMubGVuZ3RofHwoTnl0KHQsMiplKzEpLG49MiplKzIsbjx0LmIuYy5sZW5ndGgmJk55dCh0LG4pLGhvZSh0LGUpKX1mdW5jdGlvbiBmcmUodCxlLG4pe3ZhciByLHM7dGhpcy5nPXQsdGhpcy5jPWUsdGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMscz1LZWUobikscj1QdChwZ2UsTEQsMzMwLHMsMCwxKSx0aGlzLmI9cn1mdW5jdGlvbiBQeXQodCxlLG4pe3ZhciByO2ZvcihyPW4tMTtyPj0wJiZ0W3JdPT09ZVtyXTtyLS0pO3JldHVybiByPDA/MDpnZXQoUHModFtyXSxjbyksUHMoZVtyXSxjbykpPy0xOjF9ZnVuY3Rpb24gUWNuKHQsZSl7dmFyIG4scjtmb3Iocj1laSh0LDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwyMTQpLG4uZS5sZW5ndGg+MCYmKGUudGQobiksbi5pJiZWdW4obikpfWZ1bmN0aW9uIFRpdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9dShJbih0LmEsNCksMTI2KSxuPVB0KFRmdCxKY3QsNDE1LGUsMCwxKSxyIT1udWxsJiZJYyhyLDAsbiwwLHIubGVuZ3RoKSxufWZ1bmN0aW9uIGRyZSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBlYXQoKHQuZiYyNTYpIT0wLHQuaSx0LmEsdC5kLCh0LmYmMTYpIT0wLHQuaix0LmcsZSksdC5lIT1udWxsfHwobi5jPXQpLG59ZnVuY3Rpb24gWmNuKHQsZSl7dmFyIG4scjtmb3Iocj10LlpiKCkuQ2MoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwxNCksbi5IYyhlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDaXQodCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPW47aDw9cztoKyspZm9yKG89ZTtvPD1yO28rKylpZihsNCh0LG8saCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZ3JlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoT24obiksaD0hMSxvPXQuWmMoZSkscz1uLktjKCk7cy5PYigpOylyPXMuUGIoKSxvLlJiKHIpLGg9ITA7cmV0dXJuIGh9ZnVuY3Rpb24gSmNuKHQsZSl7dmFyIG47cmV0dXJuIHQ9PT1lPyEwOkV0KGUsODMpPyhuPXUoZSw4MyksRjR0KFB2KHQpLG4udmMoKSkpOiExfWZ1bmN0aW9uIHByZSh0LGUsbil7dmFyIHIscztmb3Iocz1uLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDQyKSx0LnJlKGUsci5kZCgpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBicmUodCxlLG4pe3JldHVybiB0LmRbZS5wXVtuLnBdfHwoWWhuKHQsZSxuKSx0LmRbZS5wXVtuLnBdPSEwLHQuZFtuLnBdW2UucF09ITApLHQuYVtlLnBdW24ucF19ZnVuY3Rpb24gUTgodCxlKXtpZighdC5haSgpJiZlPT1udWxsKXRocm93IHJ0KG5ldyBQbigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpO3JldHVybiBlfWZ1bmN0aW9uIFo4KHQsZSl7dC5EPT1udWxsJiZ0LkIhPW51bGwmJih0LkQ9dC5CLHQuQj1udWxsKSxyaXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKSx0LkMmJnQueWsobnVsbCl9ZnVuY3Rpb24gdHVuKHQsZSl7dmFyIG47cmV0dXJuIXR8fHQ9PWV8fCFWcyhlLChzZSgpLEl3KSk/ITE6KG49dShRKGUsKHNlKCksSXcpKSwxMCksbiE9dCl9ZnVuY3Rpb24gX2l0KHQpe3N3aXRjaCh0Lmkpe2Nhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0xOisrdC5jO2RlZmF1bHQ6cmV0dXJuIHQucGwoKX19ZnVuY3Rpb24gdnJlKHQpe3N3aXRjaCh0Lmkpe2Nhc2UtMjpyZXR1cm4hMDtjYXNlLTE6cmV0dXJuITE7Y2FzZSAxOi0tdC5jO2RlZmF1bHQ6cmV0dXJuIHQucWwoKX19ZnVuY3Rpb24gd3JlKHQpe29RdC5jYWxsKHRoaXMsIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgaW5kaXZpZHVhbCBzcGFjaW5ncy4iLHQpfWZ1bmN0aW9uIENsKCl7Q2w9WixZbD1uZXcgWlIoIkVMSyIsMCksUEF0PW5ldyBaUigiSlNPTiIsMSksTkF0PW5ldyBaUigiRE9UIiwyKSxGQXQ9bmV3IFpSKCJTVkciLDMpfWZ1bmN0aW9uIFJJKCl7Ukk9WixDVj1uZXcgQmV0KEswLDApLHBfdD1uZXcgQmV0KCJSQURJQUxfQ09NUEFDVElPTiIsMSksYl90PW5ldyBCZXQoIldFREdFX0NPTVBBQ1RJT04iLDIpfWZ1bmN0aW9uIEkxKCl7STE9WixNRXQ9bmV3IHBldCgiQ09OQ1VSUkVOVCIsMCksR2w9bmV3IHBldCgiSURFTlRJVFlfRklOSVNIIiwxKSxMeT1uZXcgcGV0KCJVTk9SREVSRUQiLDIpfWZ1bmN0aW9uIFNpdCgpe1NpdD1aLHM3dD0oQVIoKSxSdXQpLGk3dD1uZXcgbW4odDZ0LHM3dCksT3BlPW5ldyBHaShlNnQpLE5wZT1uZXcgR2kobjZ0KSxQcGU9bmV3IEdpKHI2dCl9ZnVuY3Rpb24gSjgoKXtKOD1aLHdUdD1uZXcgVTUsbVR0PW5ldyB6WSxXYmU9bmV3IEFMLFViZT1uZXcgcVksVmJlPW5ldyBIWSx2VHQ9KE9uKFZiZSksbmV3IHBuKX1mdW5jdGlvbiB0RSgpe3RFPVosdmh0PW5ldyBEZXQoIkNPTlNFUlZBVElWRSIsMCkscUN0PW5ldyBEZXQoIkNPTlNFUlZBVElWRV9TT0ZUIiwxKSxJUz1uZXcgRGV0KCJTTE9QUFkiLDIpfWZ1bmN0aW9uIGJ6KCl7Yno9WixFQXQ9bmV3IE12KDE1KSxvNGU9bmV3IGVvKChjaSgpLHEyKSxFQXQpLEtTPXo2LG1BdD1HM2UseUF0PXoyLGtBdD1hNSx4QXQ9alZ9ZnVuY3Rpb24gQWl0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9bmV3IFFpLG89ZWkobiwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksOCksbmkocixuZXcgeW8ocykpO2dyZSh0LGUscil9ZnVuY3Rpb24gZXVuKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9UHQoVXMsdGUsOCx0LmIsMCwxKSxuPWVpKHQsMCk7bi5iIT1uLmQuYzspcltlKytdPXUodGkobiksOCk7cmV0dXJuIHJ9ZnVuY3Rpb24gRnl0KHQpe3ZhciBlO3JldHVybiBlPSghdC5hJiYodC5hPW5ldyBoZShlZyx0LDksNSkpLHQuYSksZS5pIT0wP21ZZSh1KFN0KGUsMCksNjc4KSk6bnVsbH1mdW5jdGlvbiBudW4odCxlKXt2YXIgbjtyZXR1cm4gbj1PYSh0LGUpLGdldCh5cnQodCxlKSwwKXxQWWUoeXJ0KHQsbiksMCk/bjpPYShJcSx5cnQoem0obiw2MyksMSkpfWZ1bmN0aW9uIHJ1bih0LGUpe3ZhciBuO249RGUoKFZpdCgpLG9WKSkhPW51bGwmJmUud2coKSE9bnVsbD9YdCh5ZShlLndnKCkpKS9YdCh5ZShEZShvVikpKToxLGtpKHQuYixlLG4pfWZ1bmN0aW9uIGl1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dSh0LmQuQmMoZSksMTQpLG4/KHI9dC5lLmhjKCksci5HYyhuKSx0LmUuZC09bi5nYygpLG4uJGIoKSxyKTpudWxsfWZ1bmN0aW9uIEJ5dCh0LGUpe3ZhciBuLHI7aWYocj10LmNbZV0sciE9MClmb3IodC5jW2VdPTAsdC5kLT1yLG49ZSsxO248dC5hLmxlbmd0aDspdC5hW25dLT1yLG4rPW4mLW59ZnVuY3Rpb24gbXJlKHQpe3ZhciBlO2lmKGU9dC5hLmMubGVuZ3RoLGU+MClyZXR1cm4gYjgoZS0xLHQuYS5jLmxlbmd0aCksQWcodC5hLGUtMSk7dGhyb3cgcnQobmV3IFZ6dCl9ZnVuY3Rpb24gc3VuKHQsZSxuKXtpZihlPDApdGhyb3cgcnQobmV3IG1vKHExZStlKSk7ZTx0LmouYy5sZW5ndGg/YWgodC5qLGUsbik6KEFadCh0LGUpLHVlKHQuaixuKSl9ZnVuY3Rpb24geXJlKHQsZSxuKXtpZih0PmUpdGhyb3cgcnQobmV3IFBuKEZxK3QrZ2ZlK2UpKTtpZih0PDB8fGU+bil0aHJvdyBydChuZXcgUXB0KEZxK3Qrenh0K2Uranh0K24pKX1mdW5jdGlvbiB4cmUodCl7aWYoIXQuYXx8ISh0LmEuaSY4KSl0aHJvdyBydChuZXcgRm8oIkVudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrdC5mKSl9ZnVuY3Rpb24gZXkodCl7dmFyIGU7Kyt0LmosdC5pPT0wP3QuZz1udWxsOnQuaTx0LmcubGVuZ3RoJiYoZT10LmcsdC5nPXQucmkodC5pKSxJYyhlLDAsdC5nLDAsdC5pKSl9ZnVuY3Rpb24gYXVuKHQsZSl7dmFyIG4scjtmb3Iobj10LmEubGVuZ3RoLTEsdC5jPXQuYy0xJm47ZSE9dC5jOylyPWUrMSZuLEppKHQuYSxlLHQuYVtyXSksZT1yO0ppKHQuYSx0LmMsbnVsbCl9ZnVuY3Rpb24gb3VuKHQsZSl7dmFyIG4scjtmb3Iobj10LmEubGVuZ3RoLTE7ZSE9dC5iOylyPWUtMSZuLEppKHQuYSxlLHQuYVtyXSksZT1yO0ppKHQuYSx0LmIsbnVsbCksdC5iPXQuYisxJm59ZnVuY3Rpb24gUnl0KHQsZSxuKXt2YXIgcixzO3JldHVybiBVbShlLHQuYy5sZW5ndGgpLHI9bi5QYygpLHM9ci5sZW5ndGgscz09MD8hMTooU3Z0KHQuYyxlLHIpLCEwKX1mdW5jdGlvbiBjdW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKCFCS3QodFtlXSkpcmV0dXJuIHRbZV07cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3JlKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iocz1uLG89MCxoPXMubGVuZ3RoO288aDsrK28paWYocj1zW29dLHQuYi5yZShlLHIuY2QoKSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdnoodCl7dmFyIGUsbixyLHMsbztmb3Iobz0xLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvPTMxKm8rKGUhPW51bGw/SGkoZSk6MCksbz1vfDA7cmV0dXJuIG99ZnVuY3Rpb24gV3IodCl7dmFyIGUsbixyLHMsbztmb3IoZT17fSxyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZVsiOiIrKG4uZiE9bnVsbD9uLmY6IiIrbi5nKV09bjtyZXR1cm4gZX1mdW5jdGlvbiB1dW4odCl7dmFyIGU7Zm9yKEFyKHQpLGd2dCghMCwibnVtYmVyVG9BZHZhbmNlIG11c3QgYmUgbm9ubmVnYXRpdmUiKSxlPTA7ZTwwJiZ6cih0KTtlKyspTHIodCk7cmV0dXJuIGV9ZnVuY3Rpb24gRXJlKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IGFyKGxyKHQuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNyksZS5jLmk9PWUuZC5pfHwrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gVHJlKHQsZSl7dmFyIG4scixzO249dCxzPTA7ZG97aWYobj09ZSlyZXR1cm4gcztpZihyPW4uZSwhcil0aHJvdyBydChuZXcgdU0pO249RmEociksKytzfXdoaWxlKCEwKX1mdW5jdGlvbiBDcmUodCxlKXt2YXIgbixyLHM7Zm9yKHM9ZS10LmYscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDQ0MyksdmllKG4sbi5lLG4uZitzKTt0LmY9ZX1mdW5jdGlvbiBMaXQodCxlLG4pe3JldHVybiBiLk1hdGguYWJzKGUtdCk8aEh8fGIuTWF0aC5hYnMobi10KTxoSD8hMDplLXQ+aEg/dC1uPmhIOm4tdD5oSH1mdW5jdGlvbiBNaXQodCxlKXtyZXR1cm4hdHx8ZSYmIXQuanx8RXQodCwxMjQpJiZ1KHQsMTI0KS5hLmI9PTA/MDp0LlJlKCl9ZnVuY3Rpb24gd3oodCxlKXtyZXR1cm4hdHx8ZSYmIXQua3x8RXQodCwxMjQpJiZ1KHQsMTI0KS5hLmE9PTA/MDp0LlNlKCl9ZnVuY3Rpb24gakkodCl7cmV0dXJuIEpwKCksdDwwP3QhPS0xP25ldyBEM3QoLTEsLXQpOl91dDp0PD0xMD93RXRbcHModCldOm5ldyBEM3QoMSx0KX1mdW5jdGlvbiBqeXQodCl7dGhyb3cgcGl0KCkscnQobmV3IFJxdCgiVW5leHBlY3RlZCB0eXBlb2YgcmVzdWx0ICciK3QrIic7IHBsZWFzZSByZXBvcnQgdGhpcyBidWcgdG8gdGhlIEdXVCB0ZWFtIikpfWZ1bmN0aW9uIF9yZSh0KXtHcXQoKSx1aih0aGlzKSxuJCh0aGlzKSx0aGlzLmU9dCxqY2UodGhpcyx0KSx0aGlzLmc9dD09bnVsbD9UdTokbyh0KSx0aGlzLmE9IiIsdGhpcy5iPXQsdGhpcy5hPSIifWZ1bmN0aW9uICR5dCgpe3RoaXMuYT1uZXcgb1osdGhpcy5mPW5ldyBPJHQodGhpcyksdGhpcy5iPW5ldyBOJHQodGhpcyksdGhpcy5pPW5ldyBQJHQodGhpcyksdGhpcy5lPW5ldyBGJHQodGhpcyl9ZnVuY3Rpb24gU3JlKCl7Z0tlLmNhbGwodGhpcyxuZXcgRW10KFFtKDE2KSkpLEJsKDIsWWhlKSx0aGlzLmI9Mix0aGlzLmE9bmV3IGt3dChudWxsLG51bGwsMCxudWxsKSxjTSh0aGlzLmEsdGhpcy5hKX1mdW5jdGlvbiBZQygpe1lDPVosb2h0PW5ldyBBZXQoIkRVTU1ZX05PREVfT1ZFUiIsMCksX0N0PW5ldyBBZXQoIkRVTU1ZX05PREVfVU5ERVIiLDEpLHVWPW5ldyBBZXQoIkVRVUFMIiwyKX1mdW5jdGlvbiBJaXQoKXtJaXQ9WixYdXQ9dVF0KGN0KG90KFdTLDEpLGFlLDEwMywwLFsoYW8oKSxqaCksa2ZdKSksUXV0PXVRdChjdChvdChXUywxKSxhZSwxMDMsMCxbWjAsUTBdKSl9ZnVuY3Rpb24gRGl0KHQpe3JldHVybihiZSgpLF91KS5IYyh0LmopP1h0KHllKFEodCwoc2UoKSxnNykpKSk6S28oY3Qob3QoVXMsMSksdGUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmJ9ZnVuY3Rpb24gbHVuKHQpe3ZhciBlLG4scixzO2ZvcihyPXQuYi5hLG49ci5hLmVjKCkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNTYxKSxzPW5ldyBtY2UoZSx0LmUsdC5mKSx1ZSh0Lmcscyl9ZnVuY3Rpb24gZjIodCxlKXt2YXIgbixyLHM7cj10Lm5rKGUsbnVsbCkscz1udWxsLGUmJihzPSh0OCgpLG49bmV3IHd2LG4pLFA4KHMsdC5yKSkscj1PMSh0LHMsciksciYmci5GaSgpfWZ1bmN0aW9uIGh1bih0LGUpe3ZhciBuLHI7Zm9yKHI9b2wodC5kLDEpIT0wLG49ITA7bjspbj0hMSxuPWUuYy5UZihlLmUsciksbj1ufHBEKHQsZSxyLCExKSxyPSFyO2l5dCh0KX1mdW5jdGlvbiB6eXQodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9ITEsbj1lLnEuZCxlLmQ8dC5iJiYocz1NY2UoZS5xLHQuYiksZS5xLmQ+cyYmKEpzZShlLnEscykscj1uIT1lLnEuZCkpLHJ9ZnVuY3Rpb24gQXJlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztyZXR1cm4gdz1lLmksaz1lLmoscj10LmYscz1yLmksbz1yLmosaD13LXMsZD1rLW8sbj1iLk1hdGguc3FydChoKmgrZCpkKSxufWZ1bmN0aW9uIHF5dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9RHoodCkscnx8KG49KFRhdCgpLHRvZShlKSkscj1uZXcgRnp0KG4pLE1yKHIuVmsoKSx0KSkscn1mdW5jdGlvbiAkSSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dSh0LmMuQmMoZSksMTQpLG4/KHI9dC5oYygpLHIuR2MobiksdC5kLT1uLmdjKCksbi4kYigpLHQubWMocikpOnQuamMoKX1mdW5jdGlvbiBMcmUodCxlKXt2YXIgbjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHQ9PShScihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE1yZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD09KFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZnVuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4hMTtmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylpZighQkt0KHRbZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIElyZSh0KXt2YXIgZTtpZih0LmMhPTApcmV0dXJuIHQuYztmb3IoZT0wO2U8dC5hLmxlbmd0aDtlKyspdC5jPXQuYyozMysodC5hW2VdJi0xKTtyZXR1cm4gdC5jPXQuYyp0LmUsdC5jfWZ1bmN0aW9uIG16KHQpe3ZhciBlO3JldHVybiBRbih0LmEhPXQuYiksZT10LmQuYVt0LmFdLG9XdCh0LmI9PXQuZC5jJiZlIT1udWxsKSx0LmM9dC5hLHQuYT10LmErMSZ0LmQuYS5sZW5ndGgtMSxlfWZ1bmN0aW9uIGR1bih0KXt2YXIgZTtpZighKHQuYy5jPDA/dC5hPj10LmMuYjp0LmE8PXQuYy5iKSl0aHJvdyBydChuZXcgbGMpO3JldHVybiBlPXQuYSx0LmErPXQuYy5jLCsrdC5iLGRlKGUpfWZ1bmN0aW9uIGd1bih0KXt2YXIgZTtyZXR1cm4gZT1uZXcgY2VlKHQpLGFJKHQuYSxNYmUsbmV3IHdsKGN0KG90KGdPLDEpLEllLDM2OSwwLFtlXSkpKSxlLmQmJnVlKGUuZixlLmQpLGUuZn1mdW5jdGlvbiBPaXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHUydCh0LmEpLExvKGUsdCksSnQoZSwoc2UoKSxfaSksdCksZS5vLmE9dC5nLGUuby5iPXQuZixlLm4uYT10LmksZS5uLmI9dC5qLGV9ZnVuY3Rpb24gcHVuKHQsZSxuLHIpe3ZhciBzLG87Zm9yKG89dC5LYygpO28uT2IoKTspcz11KG8uUGIoKSw3MCkscy5uLmE9ZS5hKyhyLmEtcy5vLmEpLzIscy5uLmI9ZS5iLGUuYis9cy5vLmIrbn1mdW5jdGlvbiBidW4odCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSw1NykscVh0KHQscixuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2dW4odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LnIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDEwKSx0Lm5bZS5wXTw9MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBEcmUodCl7dmFyIGUsbixyLHM7Zm9yKHM9bmV3IHFzLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLGU9X3ZuKG4pLFVhKHMsZSk7cmV0dXJuIHN9ZnVuY3Rpb24gd3VuKHQpe3ZhciBlO3JldHVybiBlPWlqKHVtZSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksZjcpKSYmYmkoZSwoV2EoKSxvdSksKHJvKCkseEcpKSxlfWZ1bmN0aW9uIG11bih0LGUsbil7dmFyIHI7cj1uZXcgQm9lKHQsZSksbG4odC5yLGUuSGYoKSxyKSxuJiYhVEModC51KSYmKHIuYz1uZXcgaVF0KHQuZCksbXUoZS53ZigpLG5ldyB3bihyKSkpfWZ1bmN0aW9uIHljKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC1lLCFpc05hTihuKSk/bjpuNHQoQm8odCk/U2godCk6dCxCbyhlKT9TaChlKTplKX1mdW5jdGlvbiB5dW4odCxlKXtyZXR1cm4gZTx0Lmxlbmd0aCYmKFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKSE9NjMpJiYoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpIT0zNSl9ZnVuY3Rpb24gT3JlKHQsZSxuLHIpe3ZhciBzLG87dC5hPWUsbz1yPzA6MSx0LmY9KHM9bmV3IEZhZSh0LmMsdC5hLG4sbyksbmV3IGR1ZShuLHQuYSxzLHQuZSx0LmIsdC5jPT0oWnYoKSxEUykpKX1mdW5jdGlvbiBIeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDEscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIE5yZSh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBRcyh0LDEsMyxzLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gUHJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuZix0LmY9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSwwLHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBLcCh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBvPShzPXQ/RHoodCk6bnVsbCxhb2UoKHI9ZSxzJiZzLlhrKCkscikpKSxvPT1lJiYobj1Eeih0KSxuJiZuLlhrKCkpLG99ZnVuY3Rpb24gR3l0KHQsZSl7dmFyIG4scixzO2ZvcihzPTEsbj10LHI9ZT49MD9lOi1lO3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihzKj1uLHItPTEpO3JldHVybiBlPDA/MS9zOnN9ZnVuY3Rpb24geHVuKHQsZSl7dmFyIG4scixzO2ZvcihzPTEsbj10LHI9ZT49MD9lOi1lO3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihzKj1uLHItPTEpO3JldHVybiBlPDA/MS9zOnN9ZnVuY3Rpb24gRnJlKHQpe3ZhciBlLG47aWYodCE9bnVsbClmb3Iobj0wO248dC5sZW5ndGg7KytuKWU9dFtuXSxlJiYodShlLmcsMzY3KSxlLmkpfWZ1bmN0aW9uIGt1bih0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxyPWIuTWF0aC5tYXgocixlLmcpO3JldHVybiByfWZ1bmN0aW9uIEV1bih0KXt2YXIgZSxuLHI7Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTQpLGU9bi5jLlJmKCk/bi5mOm4uYSxlJiZxeW4oZSxuLmopfWZ1bmN0aW9uICQwKCl7JDA9WixIVj1uZXcgcWV0KCJJTkhFUklUIiwwKSxaZz1uZXcgcWV0KCJJTkNMVURFX0NISUxEUkVOIiwxKSxZUz1uZXcgcWV0KCJTRVBBUkFURV9DSElMRFJFTiIsMil9ZnVuY3Rpb24gVnl0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMTohdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHhyKHQubik7cmV0dXJuO2Nhc2UgMjpxQyh0LG51bGwpO3JldHVybn1teXQodCxlKX1mdW5jdGlvbiB5eih0KXt2YXIgZTtzd2l0Y2godC5nYygpKXtjYXNlIDA6cmV0dXJuIHZ1dDtjYXNlIDE6cmV0dXJuIG5ldyBTbnQoQXIodC5YYigwKSkpO2RlZmF1bHQ6cmV0dXJuIGU9dCxuZXcgb3J0KGUpfX1mdW5jdGlvbiBCcmUodCl7c3dpdGNoKGhkKCksdC5nYygpKXtjYXNlIDA6cmV0dXJuIFhudCgpLEs4dDtjYXNlIDE6cmV0dXJuIG5ldyB4eCh0LktjKCkuUGIoKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHlidCh0KX19ZnVuY3Rpb24gRGcodCl7c3dpdGNoKGhkKCksdC5jKXtjYXNlIDA6cmV0dXJuIFhudCgpLEs4dDtjYXNlIDE6cmV0dXJuIG5ldyB4eChwb2UobmV3IEV4KHQpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IEZxdCh0KX19ZnVuY3Rpb24gbnkodCxlKXtBcih0KTt0cnl7cmV0dXJuIHQueGMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSl8fEV0KG4sMTczKSlyZXR1cm4gbnVsbDt0aHJvdyBydChuKX19ZnVuY3Rpb24gVHVuKHQsZSl7QXIodCk7dHJ5e3JldHVybiB0LkJjKGUpfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwyMDUpfHxFdChuLDE3MykpcmV0dXJuIG51bGw7dGhyb3cgcnQobil9fWZ1bmN0aW9uIFV5dCh0LGUpe0FyKHQpO3RyeXtyZXR1cm4gdC5IYyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMjA1KXx8RXQobiwxNzMpKXJldHVybiExO3Rocm93IHJ0KG4pfX1mdW5jdGlvbiBDdW4odCxlKXtBcih0KTt0cnl7cmV0dXJuIHQuTWMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSl8fEV0KG4sMTczKSlyZXR1cm4hMTt0aHJvdyBydChuKX19ZnVuY3Rpb24gUnJlKHQsZSl7QXIodCk7dHJ5e3JldHVybiB0Ll9iKGUpfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwyMDUpfHxFdChuLDE3MykpcmV0dXJuITE7dGhyb3cgcnQobil9fWZ1bmN0aW9uIGpyZSh0LGUpe3ZhciBuO3QuYS5jLmxlbmd0aD4wJiYobj11KEZlKHQuYSx0LmEuYy5sZW5ndGgtMSksNTcwKSxPeXQobixlKSl8fHVlKHQuYSxuZXcgcEp0KGUpKX1mdW5jdGlvbiBfdW4odCl7bGYoKTt2YXIgZSxuO2U9dC5kLmMtdC5lLmMsbj11KHQuZywxNDUpLG11KG4uYixuZXcgQzkoZSkpLG11KG4uYyxuZXcgR2IoZSkpLHZhKG4uaSxuZXcgblIoZSkpfWZ1bmN0aW9uICRyZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgX3AsZS5hKz0iVmVydGljYWxTZWdtZW50ICIsaGMoZSx0LmUpLGUuYSs9IiAiLFZyKGUsbTJ0KG5ldyBhZXQsbmV3IFModC5rKSkpLGUuYX1mdW5jdGlvbiBTdW4odCl7dmFyIGU7cmV0dXJuIGU9dShXdih0LmMuYywiIiksMjI5KSxlfHwoZT1uZXcgengoSmsoWmsobmV3IHdtLCIiKSwiT3RoZXIiKSkscDIodC5jLmMsIiIsZSkpLGV9ZnVuY3Rpb24gWEModCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKG5hbWU6ICIsZm8oZSx0LnpiKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIFd5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LnNiLHQuc2I9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSw0LHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBOaXQodCxlKXt2YXIgbixyLHM7Zm9yKG49MCxzPVlvKHQsZSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLG4rPVEociwoc2UoKSxadSkpIT1udWxsPzE6MDtyZXR1cm4gbn1mdW5jdGlvbiBhNCh0LGUsbil7dmFyIHIscyxvO2ZvcihyPTAsbz1laSh0LDApO28uYiE9by5kLmMmJihzPVh0KHllKHRpKG8pKSksIShzPm4pKTspcz49ZSYmKytyO3JldHVybiByfWZ1bmN0aW9uIEF1bih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgRjAodC5lLDMsMTMsbnVsbCwocz1lLmMsc3x8KGRuKCksVjEpKSxGZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gTHVuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBGMCh0LmUsNCwxMywocz1lLmMsc3x8KGRuKCksVjEpKSxudWxsLEZnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBLeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5yLHQucj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDgscyx0LnIpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gT2codCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzYpLHI9bi52aygpLCFyJiZuLndrKHI9RXQoZSw4OCk/bmV3IEZWdCh0LHUoZSwyNikpOm5ldyByWnQodCx1KGUsMTQ4KSkpLHJ9ZnVuY3Rpb24gekkodCxlLG4pe3ZhciByO3QucWkodC5pKzEpLHI9dC5vaShlLG4pLGUhPXQuaSYmSWModC5nLGUsdC5nLGUrMSx0LmktZSksSmkodC5nLGUsciksKyt0LmksdC5iaShlLG4pLHQuY2koKX1mdW5jdGlvbiBNdW4odCxlKXt2YXIgbjtyZXR1cm4gZS5hJiYobj1lLmEuYS5sZW5ndGgsdC5hP1ZyKHQuYSx0LmIpOnQuYT1uZXcgSWwodC5kKSxzWnQodC5hLGUuYSxlLmQubGVuZ3RoLG4pKSx0fWZ1bmN0aW9uIEl1bih0LGUpe3ZhciBuLHIscyxvO2lmKGUudmkodC5hKSxvPXUoSW4odC5hLDgpLDE5MzYpLG8hPW51bGwpZm9yKG49byxyPTAscz1uLmxlbmd0aDtyPHM7KytyKW51bGwuam0oKX1mdW5jdGlvbiBxSSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyBUaSx0LmEuc2Qobik/KHU4KCksbmV3IGdSKE9uKEZ0ZSh0LG4uYSxlKSkpKTooJHAodCksdTgoKSx1OCgpLFdIKX1mdW5jdGlvbiBRQyh0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpjYXNlIDE6cmV0dXJuIFlvKHQsZSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYTIoWW8odCxlKSl9cmV0dXJuIHZuKCksdm4oKSxpb31mdW5jdGlvbiB5aSh0LGUpe3JldHVybiBlYSh0KT9obih0LGUpOk5tKHQpP2VLdCh0LGUpOk9tKHQpPyhPbih0KSxHdCh0KT09PUd0KGUpKTpRdnQodCk/dC5GYihlKTpVdnQodCk/blV0KHQsZSk6SHd0KHQsZSl9ZnVuY3Rpb24gRHVuKHQpe3JldHVybiB0P3QuaSYxP3Q9PWRsP0JzOnQ9PVRyP2phOnQ9PXIzP1hFOnQ9PWlhP2NhOnQ9PUxiP1R3OnQ9PWY1P0N3OnQ9PUh1P0U2OmFTOnQ6bnVsbH1mdW5jdGlvbiBPdW4odCxlLG4scixzKXtlPT0wfHxyPT0wfHwoZT09MT9zW3JdPVAzdChzLG4scix0WzBdKTpyPT0xP3NbZV09UDN0KHMsdCxlLG5bMF0pOlBwbih0LG4scyxlLHIpKX1mdW5jdGlvbiB6cmUodCxlKXt2YXIgbjt0LmMubGVuZ3RoIT0wJiYobj11KEQxKHQsUHQobzAsemcsMTAsdC5jLmxlbmd0aCwwLDEpKSwxOTMpLGUydChuLG5ldyB3ayksQW9lKG4sZSkpfWZ1bmN0aW9uIHFyZSh0LGUpe3ZhciBuO3QuYy5sZW5ndGghPTAmJihuPXUoRDEodCxQdChvMCx6ZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5MyksZTJ0KG4sbmV3IFJkKSxBb2UobixlKSl9ZnVuY3Rpb24gWXl0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm47Y2FzZSAyOnJldHVybiB0Lmt9cmV0dXJuIFYzdCh0LGUsbixyKX1mdW5jdGlvbiBhbygpe2FvPVosYzA9bmV3IExNKE9fLDApLGtmPW5ldyBMTShnNiwxKSxqaD1uZXcgTE0oZDYsMiksUTA9bmV3IExNKHlvdCwzKSxaMD1uZXcgTE0oIlVQIiw0KX1mdW5jdGlvbiBldygpe2V3PVosJDQ9bmV3IHlldChLMCwwKSxTN3Q9bmV3IHlldCgiSU5TSURFX1BPUlRfU0lERV9HUk9VUFMiLDEpLEp1dD1uZXcgeWV0KCJGT1JDRV9NT0RFTF9PUkRFUiIsMil9ZnVuY3Rpb24gSHJlKHQsZSxuKXtpZih0PDB8fGU+bil0aHJvdyBydChuZXcgbW8oRnErdCt6eHQrZSsiLCBzaXplOiAiK24pKTtpZih0PmUpdGhyb3cgcnQobmV3IFBuKEZxK3QrZ2ZlK2UpKX1mdW5jdGlvbiBsaCh0LGUsbil7aWYoZTwwKVE0dCh0LG4pO2Vsc2V7aWYoIW4uSWooKSl0aHJvdyBydChuZXcgUG4oYWIrbi5uZSgpK1dfKSk7dShuLDY2KS5OaigpLlZqKHQsdC55aCgpLGUpfX1mdW5jdGlvbiBOdW4odCxlLG4scixzLG8saCxkKXt2YXIgdztmb3Iodz1uO288aDspdz49cnx8ZTxuJiZkLnVlKHRbZV0sdFt3XSk8PTA/SmkocyxvKyssdFtlKytdKTpKaShzLG8rKyx0W3crK10pfWZ1bmN0aW9uIEdyZSh0LGUsbixyLHMsbyl7dGhpcy5lPW5ldyBsZSx0aGlzLmY9KHNvKCksTVMpLHVlKHRoaXMuZSx0KSx0aGlzLmQ9ZSx0aGlzLmE9bix0aGlzLmI9cix0aGlzLmY9cyx0aGlzLmM9b31mdW5jdGlvbiBWcmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBlcih0KTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksMjYpLEd0KGUpPT09R3QobikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUHVuKHQpe0xxKCk7dmFyIGUsbixyLHM7Zm9yKG49Sml0KCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihlPW5bcl0sUm8oZS5hLHQsMCkhPS0xKXJldHVybiBlO3JldHVybiBQdXR9ZnVuY3Rpb24gVXJlKHQpe3JldHVybiB0Pj02NSYmdDw9NzA/dC02NSsxMDp0Pj05NyYmdDw9MTAyP3QtOTcrMTA6dD49NDgmJnQ8PTU3P3QtNDg6MH1mdW5jdGlvbiBXcmUodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKHNvdXJjZTogIixmbyhlLHQuZCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBGdW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5hLHQuYT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgUXModCwxLDUscyx0LmEpLG4/djR0KG4scik6bj1yKSxufWZ1bmN0aW9uIE5nKHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwyLG4sZSkpfWZ1bmN0aW9uIFh5dCh0LGUpe3ZhciBuO249KHQuQmImMjU2KSE9MCxlP3QuQmJ8PTI1Njp0LkJiJj0tMjU3LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsOCxuLGUpKX1mdW5jdGlvbiB4eih0LGUpe3ZhciBuO249KHQuQmImMjU2KSE9MCxlP3QuQmJ8PTI1Njp0LkJiJj0tMjU3LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsOCxuLGUpKX1mdW5jdGlvbiBQZyh0LGUpe3ZhciBuO249KHQuQmImNTEyKSE9MCxlP3QuQmJ8PTUxMjp0LkJiJj0tNTEzLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsMyxuLGUpKX1mdW5jdGlvbiBReXQodCxlKXt2YXIgbjtuPSh0LkJiJjUxMikhPTAsZT90LkJifD01MTI6dC5CYiY9LTUxMyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgZGYodCwxLDksbixlKSl9ZnVuY3Rpb24gWkModCxlKXt2YXIgbjtyZXR1cm4gdC5iPT0tMSYmdC5hJiYobj10LmEuR2ooKSx0LmI9bj90LmMuWGcodC5hLmFqKCksbik6VmkodC5jLlRnKCksdC5hKSksdC5jLk9nKHQuYixlKX1mdW5jdGlvbiBkZSh0KXt2YXIgZSxuO3JldHVybiB0Pi0xMjkmJnQ8MTI4PyhlPXQrMTI4LG49KFZLdCgpLHNFdClbZV0sIW4mJihuPXNFdFtlXT1uZXcgaU0odCkpLG4pOm5ldyBpTSh0KX1mdW5jdGlvbiBlRSh0KXt2YXIgZSxuO3JldHVybiB0Pi0xMjkmJnQ8MTI4PyhlPXQrMTI4LG49KFFLdCgpLHVFdClbZV0sIW4mJihuPXVFdFtlXT1uZXcgZVIodCkpLG4pOm5ldyBlUih0KX1mdW5jdGlvbiBaeXQodCl7dmFyIGUsbjtyZXR1cm4gZT10LmssZT09KEduKCkseHMpPyhuPXUoUSh0LChzZSgpLG9jKSksNjEpLG49PShiZSgpLE5uKXx8bj09bXIpOiExfWZ1bmN0aW9uIEJ1bih0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPShzPXdFKHQuYixlKSxzKSxvJiYocj11KEVxKG1JKHQsbyksIiIpLDI2KSxyKT93NXQodCxyLGUsbik6bnVsbH1mdW5jdGlvbiBQaXQodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gbz0ocz13RSh0LmIsZSkscyksbyYmKHI9dShFcShtSSh0LG8pLCIiKSwyNikscik/bTV0KHQscixlLG4pOm51bGx9ZnVuY3Rpb24gS3JlKHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgZXIodCk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDEzOCksR3QoZSk9PT1HdChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBKQyh0LGUsbil7dmFyIHI7aWYocj10LmdjKCksZT5yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtpZih0LmhpKCkmJnQuSGMobikpdGhyb3cgcnQobmV3IFBuKFhEKSk7dC5YaChlLG4pfWZ1bmN0aW9uIFJ1bih0LGUpe3ZhciBuO2lmKG49dDQodC5pLGUpLG49PW51bGwpdGhyb3cgcnQobmV3IGFkKCJOb2RlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiB1eXQoZSxuKSxudWxsfWZ1bmN0aW9uIGp1bih0LGUpe3ZhciBuO2lmKG49Z0QodCxlKSxFdChuLDMyMikpcmV0dXJuIHUobiwzNCk7dGhyb3cgcnQobmV3IFBuKGFiK2UrIicgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIikpfWZ1bmN0aW9uICR1bih0LGUsbil7dmFyIHIscztmb3Iocz1FdChlLDk5KSYmdShlLDE4KS5CYiZZYT9uZXcgVWV0KGUsdCk6bmV3IFU4KGUsdCkscj0wO3I8bjsrK3IpJHoocyk7cmV0dXJuIHN9ZnVuY3Rpb24genVuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49dC5sZW5ndGgsZT0wO2U8bjtlKyspdFtlXT09MzJ8fHRbZV09PTEzfHx0W2VdPT0xMHx8dFtlXT09OXx8KHRbcisrXT10W2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBxdW4odCl7dmFyIGUsbixyO2ZvcihlPW5ldyBsZSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTk0KSxBcyhlLHUobi5qZigpLDE0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gSHVuKHQpe3ZhciBlLG4scjtmb3IoZT11KFEodCwoZmMoKSxKQ3QpKSwxNSkscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE4OCksbmkobi5iLmQsbiksbmkobi5jLmIsbil9ZnVuY3Rpb24gR3VuKHQpe3N3aXRjaCh1KFEodCwoc2UoKSxPMikpLDMwMykuZyl7Y2FzZSAxOkp0KHQsTzIsKEIwKCksQTYpKTticmVhaztjYXNlIDI6SnQodCxPMiwoQjAoKSxVNCkpfX1mdW5jdGlvbiBWdW4odCl7dmFyIGU7dC5nJiYoZT10LmMuUmYoKT90LmY6dC5hLEQ1dChlLmEsdC5vLCEwKSxENXQoZS5hLHQubywhMSksSnQodC5vLChUZSgpLG9zKSwob2EoKSxHMikpKX1mdW5jdGlvbiBVdW4odCl7dmFyIGU7aWYoIXQuYSl0aHJvdyBydChuZXcgRm8oIkNhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuIikpO2U9dC5jLXQuYix0LmIrPWUsJFh0KHQsZSksalh0KHQsZSl9ZnVuY3Rpb24gV3VuKHQpe3ZhciBlO3JldHVybiBlPXQuYVt0LmMtMSZ0LmEubGVuZ3RoLTFdLGU9PW51bGw/bnVsbDoodC5jPXQuYy0xJnQuYS5sZW5ndGgtMSxKaSh0LmEsdC5jLG51bGwpLGUpfWZ1bmN0aW9uIFlyZSh0KXt2YXIgZSxuO2ZvcihuPXQucC5hLmVjKCkuS2MoKTtuLk9iKCk7KWlmKGU9dShuLlBiKCksMjEzKSxlLmYmJnQuYltlLmNdPC0xZS0xMClyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKeXQodCxlKXtzd2l0Y2godC5iLmcpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIGU7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gbmV3IGloKGUuZCwwLGUuYSxlLmIpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFhyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDI6cmV0dXJuIGtmO2Nhc2UgMTpyZXR1cm4gamg7Y2FzZSA0OnJldHVybiBRMDtjYXNlIDM6cmV0dXJuIFowO2RlZmF1bHQ6cmV0dXJuIGMwfX1mdW5jdGlvbiB0M3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBCbjtjYXNlIDI6cmV0dXJuIE5uO2Nhc2UgMzpyZXR1cm4gSG47Y2FzZSA0OnJldHVybiBtcjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gSEkodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBtcjtjYXNlIDI6cmV0dXJuIEJuO2Nhc2UgMzpyZXR1cm4gTm47Y2FzZSA0OnJldHVybiBIbjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24ga3oodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBIbjtjYXNlIDI6cmV0dXJuIG1yO2Nhc2UgMzpyZXR1cm4gQm47Y2FzZSA0OnJldHVybiBObjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gS3VuKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG5ldyBwcXQ7Y2FzZSAxOnJldHVybiBuZXcgZHF0O2Nhc2UgMjpyZXR1cm4gbmV3IGdxdDtkZWZhdWx0OnRocm93IHJ0KG5ldyB1TSl9fWZ1bmN0aW9uIExzKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0PT1lP3Q9PTA/THMoMS90LDEvZSk6MDppc05hTih0KT9pc05hTihlKT8wOjE6LTF9ZnVuY3Rpb24gWXVuKHQsZSl7d3IoZSwiU29ydCBlbmQgbGFiZWxzIiwxKSx1cyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IFFQKSxuZXcgcTUpLG5ldyB2WSksb3IoZSl9ZnVuY3Rpb24gdF8odCxlLG4pe3ZhciByLHM7cmV0dXJuIHQuZWooKT8ocz10LmZqKCkscj1xc3QodCxlLG4pLHQuJGkodC5aaSg3LGRlKG4pLHIsZSxzKSkscik6cXN0KHQsZSxuKX1mdW5jdGlvbiBGaXQodCxlKXt2YXIgbixyLHM7dC5kPT1udWxsPygrK3QuZSwtLXQuZik6KHM9ZS5jZCgpLG49ZS5TaCgpLHI9KG4mdmkpJXQuZC5sZW5ndGgsRHNuKHQscixmY2UodCxyLG4scykpKX1mdW5jdGlvbiBuRSh0LGUpe3ZhciBuO249KHQuQmImd2YpIT0wLGU/dC5CYnw9d2Y6dC5CYiY9LTEwMjUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMCxuLGUpKX1mdW5jdGlvbiByRSh0LGUpe3ZhciBuO249KHQuQmImeXkpIT0wLGU/dC5CYnw9eXk6dC5CYiY9LTQwOTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMixuLGUpKX1mdW5jdGlvbiBpRSh0LGUpe3ZhciBuO249KHQuQmImenUpIT0wLGU/dC5CYnw9enU6dC5CYiY9LTgxOTMsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxNSxuLGUpKX1mdW5jdGlvbiBzRSh0LGUpe3ZhciBuO249KHQuQmImQXkpIT0wLGU/dC5CYnw9QXk6dC5CYiY9LTIwNDksdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxMSxuLGUpKX1mdW5jdGlvbiBYdW4odCxlKXt2YXIgbjtyZXR1cm4gbj1Mcyh0LmIuYyxlLmIuYyksbiE9MHx8KG49THModC5hLmEsZS5hLmEpLG4hPTApP246THModC5hLmIsZS5hLmIpfWZ1bmN0aW9uIFF1bih0LGUpe3ZhciBuO2lmKG49Sm4odC5rLGUpLG49PW51bGwpdGhyb3cgcnQobmV3IGFkKCJQb3J0IGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiB1eXQoZSxuKSxudWxsfWZ1bmN0aW9uIFp1bih0KXt2YXIgZSxuO2ZvcihuPXZjZShGbCh0KSkuS2MoKTtuLk9iKCk7KWlmKGU9QnIobi5QYigpKSxtXyh0LGUpKXJldHVybiBhc24oKF9HdCgpLFc0ZSksZSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSnVuKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD1hdSh0LmUuVGcoKSxlKSxvPTAsbj11KHQuZywxMTkpLHM9MDtzPHQuaTsrK3Mpcj1uW3NdLGgucmwoci5haygpKSYmKytvO3JldHVybiBvfWZ1bmN0aW9uIHRsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj11KGUuV2UodC5hKSwzNSkscz11KG4uV2UodC5hKSwzNSksciE9bnVsbCYmcyE9bnVsbD9TSShyLHMpOnIhPW51bGw/LTE6cyE9bnVsbD8xOjB9ZnVuY3Rpb24gUXJlKHQsZSxuKXt2YXIgcixzO2lmKHQuYylBNHQodC5jLGUsbik7ZWxzZSBmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksUXJlKHIsZSxuKX1mdW5jdGlvbiBCaXQodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDQ2KSx2dSh0LmIuYixuLmIpLElubih1KG4uYSwxODkpLHUobi5iLDgxKSl9ZnVuY3Rpb24gZWxuKHQpe3ZhciBlLG47Zm9yKG49UnAobmV3IF9wLDkxKSxlPSEwO3QuT2IoKTspZXx8KG4uYSs9S2EpLGU9ITEsaGMobix0LlBiKCkpO3JldHVybihuLmErPSJdIixuKS5hfWZ1bmN0aW9uIGFFKHQsZSl7dmFyIG47bj0odC5CYiZiZCkhPTAsZT90LkJifD1iZDp0LkJiJj0tMTYzODUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwxNixuLGUpKX1mdW5jdGlvbiBSaXQodCxlKXt2YXIgbjtuPSh0LkJiJmRjKSE9MCxlP3QuQmJ8PWRjOnQuQmImPS0zMjc2OSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgZGYodCwxLDE4LG4sZSkpfWZ1bmN0aW9uIGUzdCh0LGUpe3ZhciBuO249KHQuQmImZGMpIT0wLGU/dC5CYnw9ZGM6dC5CYiY9LTMyNzY5LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBkZih0LDEsMTgsbixlKSl9ZnVuY3Rpb24gbjN0KHQsZSl7dmFyIG47bj0odC5CYiZZYSkhPTAsZT90LkJifD1ZYTp0LkJiJj0tNjU1MzcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGRmKHQsMSwyMCxuLGUpKX1mdW5jdGlvbiByM3QodCl7dmFyIGU7cmV0dXJuIGU9UHQobWgsdmQsMjUsMiwxNSwxKSx0LT1ZYSxlWzBdPSh0Pj4xMCkrT0QmbXMsZVsxXT0odCYxMDIzKSs1NjMyMCZtcyxBaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIEV6KHQpe3ZhciBlLG47cmV0dXJuIG49dShRKHQsKFRlKCksVmwpKSwxMDMpLG49PShhbygpLGMwKT8oZT1YdCh5ZShRKHQsVUcpKSksZT49MT9rZjpRMCk6bn1mdW5jdGlvbiBubG4odCl7c3dpdGNoKHUoUSh0LChUZSgpLFgwKSksMjE4KS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBCWDtjYXNlIDM6cmV0dXJuIG5ldyBxWDtkZWZhdWx0OnJldHVybiBuZXcgRlh9fWZ1bmN0aW9uIGQyKHQpe2lmKHQuYylkMih0LmMpO2Vsc2UgaWYodC5kKXRocm93IHJ0KG5ldyBGbygiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX1mdW5jdGlvbiBqaXQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/YmYodCk6KGU9bmV3IFRoKGJmKHQpKSxlLmErPSIgKGlkZW50aWZpZXI6ICIsZm8oZSx0LmspLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gWnJlKHQsZSxuKXt2YXIgcixzO3JldHVybiByPShUdigpLHM9bmV3IHZwLHMpLFckKHIsZSksSyQocixuKSx0JiZNcigoIXQuYSYmKHQuYT1uZXcgU3MoSGgsdCw1KSksdC5hKSxyKSxyfWZ1bmN0aW9uICRpdCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBPbihyKSxPbihuKSxzPXQueGMoZSksbz1zPT1udWxsP246ZEd0KHUocywxNSksdShuLDE0KSksbz09bnVsbD90LkJjKGUpOnQuemMoZSxvKSxvfWZ1bmN0aW9uIHVuKHQpe3ZhciBlLG4scixzO3JldHVybiBuPShlPXUoSGYoKHI9dC5nbSxzPXIuZixzPT1Icj9yOnMpKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxwZihuLHQpLG59ZnVuY3Rpb24gcmxuKHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDEwKSxJSShuLHUoRmUoZSxyLnApLDE0KSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWxuKHQsZSxuKXt2YXIgcjt0cnl7UmNuKHQsZSxuKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNTk3KT8ocj1zLHJ0KG5ldyBhbXQocikpKTpydChzKX1yZXR1cm4gZX1mdW5jdGlvbiBZcCh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQtZSxERDxuJiZuPHgyKT9uOlZwKEJuZShCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBPYSh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQrZSxERDxuJiZuPHgyKT9uOlZwKHljbihCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBDYSh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQqZSxERDxuJiZuPHgyKT9uOlZwKHp5bihCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUpKX1mdW5jdGlvbiBZbyh0LGUpe3ZhciBuO3JldHVybiB0Lml8fFg0dCh0KSxuPXUoZ28odC5nLGUpLDQ2KSxuP25ldyBLZCh0LmosdShuLmEsMTkpLmEsdShuLmIsMTkpLmEpOih2bigpLHZuKCksaW8pfWZ1bmN0aW9uIG53KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmEuZ2V0KGUpLHQuYS5zZXQoZSxuPT09dm9pZCAwP251bGw6bikscj09PXZvaWQgMD8oKyt0LmMsYSQodC5iKSk6Kyt0LmQscn1mdW5jdGlvbiBzbG4odCxlLG4pe3Qubj1YYihMYixbdGUsYW90XSxbMzY0LDI1XSwxNCxbbixwcyhiLk1hdGguY2VpbChlLzMyKSldLDIpLHQubz1lLHQucD1uLHQuaj1lLTE+PjEsdC5rPW4tMT4+MX1mdW5jdGlvbiB6aXQoKXtFNHQoKTt2YXIgdCxlLG47bj10eG4rKytEYXRlLm5vdygpLHQ9cHMoYi5NYXRoLmZsb29yKG4qUEQpKSZQcSxlPXBzKG4tdCpSeHQpLHRoaXMuYT10XjE1MDIsdGhpcy5iPWVeZm90fWZ1bmN0aW9uIHowKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgbGUscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExKSx1ZShlLG4uYik7cmV0dXJuIEFyKGUpLG5ldyB1QyhlKX1mdW5jdGlvbiBqbyh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGxlLHI9bmV3IFModC5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksdWUoZSxuLmUpO3JldHVybiBBcihlKSxuZXcgdUMoZSl9ZnVuY3Rpb24gTXModCl7dmFyIGUsbixyO2ZvcihlPW5ldyBsZSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLHVlKGUsbi5nKTtyZXR1cm4gQXIoZSksbmV3IHVDKGUpfWZ1bmN0aW9uIGFsbih0KXt2YXIgZSxuO2ZvcihuPXJibihGbChWbSh0KSkpLktjKCk7bi5PYigpOylpZihlPUJyKG4uUGIoKSksbV8odCxlKSlyZXR1cm4gb3NuKChTR3QoKSxLNGUpLGUpO3JldHVybiBudWxsfWZ1bmN0aW9uIG9sbih0KXt2YXIgZSxuLHI7Zm9yKG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYodFtuXT09bnVsbCl0aHJvdyBydChuZXcgeXgoImF0IGluZGV4ICIrbikpO3JldHVybiBlPXQsbmV3IHdsKGUpfWZ1bmN0aW9uIGNsbih0LGUpe3ZhciBuO2lmKG49Z0QodC5UZygpLGUpLEV0KG4sOTkpKXJldHVybiB1KG4sMTgpO3Rocm93IHJ0KG5ldyBQbihhYitlKyInIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpKX1mdW5jdGlvbiB1bG4odCl7dmFyIGU7cmV0dXJuIGU9bHkodCksZT4zNDAyODIzNDY2Mzg1Mjg4NmUyMj9zczplPC0zNDAyODIzNDY2Mzg1Mjg4NmUyMj9UczplfWZ1bmN0aW9uIEpyZSh0KXtyZXR1cm4gdC09dD4+MSYxNDMxNjU1NzY1LHQ9KHQ+PjImODU4OTkzNDU5KSsodCY4NTg5OTM0NTkpLHQ9KHQ+PjQpK3QmMjUyNjQ1MTM1LHQrPXQ+PjgsdCs9dD4+MTYsdCY2M31mdW5jdGlvbiB0aWUodCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IE5XdCh0LkhkKCkuZ2MoKSkscz0wLHI9S3godC5IZCgpLktjKCkpO3IuT2IoKTspbj1yLlBiKCksbXJuKGUsbixkZShzKyspKTtyZXR1cm4gRzBuKGUuYSl9ZnVuY3Rpb24gbGxuKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBDcixyPWUudmMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw0Miksa2kocyxuLmNkKCksZWNuKHQsdShuLmRkKCksMTUpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gaTN0KHQsZSl7dC5uLmMubGVuZ3RoPT0wJiZ1ZSh0Lm4sbmV3IGYkKHQucyx0LnQsdC5pKSksdWUodC5iLGUpLCQzdCh1KEZlKHQubix0Lm4uYy5sZW5ndGgtMSksMjExKSxlKSxsbGUodCxlKX1mdW5jdGlvbiBvNCh0KXtyZXR1cm4odC5jIT10LmIuYnx8dC5pIT10LmcuYikmJih0LmEuYz1QdChYbixJZSwxLDAsNSwxKSxBcyh0LmEsdC5iKSxBcyh0LmEsdC5nKSx0LmM9dC5iLmIsdC5pPXQuZy5iKSx0LmF9ZnVuY3Rpb24gcWl0KHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KGUuS2IodCksMjApLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE3KSxqZShSZShRKG4sKHNlKCksJDEpKSkpfHwrK3M7cmV0dXJuIHN9ZnVuY3Rpb24gaGxuKHQsZSl7dmFyIG4scixzO3I9WjMoZSkscz1YdCh5ZShpeShyLChUZSgpLHhmKSkpKSxuPWIuTWF0aC5tYXgoMCxzLzItLjUpLGNfKGUsbiwxKSx1ZSh0LG5ldyBVR3QoZSxuKSl9ZnVuY3Rpb24gaGgoKXtoaD1aLENPPW5ldyBDTShLMCwwKSx5Uz1uZXcgQ00oIkZJUlNUIiwxKSxmYj1uZXcgQ00oYzFlLDIpLHhTPW5ldyBDTSgiTEFTVCIsMyksRnk9bmV3IENNKHUxZSw0KX1mdW5jdGlvbiBxMCgpe3EwPVosZ2Z0PW5ldyBLUihPXywwKSxYTz1uZXcgS1IoIlBPTFlMSU5FIiwxKSxBNz1uZXcgS1IoIk9SVEhPR09OQUwiLDIpLEg2PW5ldyBLUigiU1BMSU5FUyIsMyl9ZnVuY3Rpb24gVHooKXtUej1aLE5fdD1uZXcgamV0KCJBU1BFQ1RfUkFUSU9fRFJJVkVOIiwwKSwkaHQ9bmV3IGpldCgiTUFYX1NDQUxFX0RSSVZFTiIsMSksT190PW5ldyBqZXQoIkFSRUFfRFJJVkVOIiwyKX1mdW5jdGlvbiBHSSgpe0dJPVosQVY9bmV3ICRldCgiUDFfU1RSVUNUVVJFIiwwKSxMVj1uZXcgJGV0KCJQMl9QUk9DRVNTSU5HX09SREVSIiwxKSxNVj1uZXcgJGV0KCJQM19FWEVDVVRJT04iLDIpfWZ1bmN0aW9uIEN6KCl7Q3o9WixOaHQ9bmV3IEZldCgiT1ZFUkxBUF9SRU1PVkFMIiwwKSxEaHQ9bmV3IEZldCgiQ09NUEFDVElPTiIsMSksT2h0PW5ldyBGZXQoIkdSQVBIX1NJWkVfQ0FMQ1VMQVRJT04iLDIpfWZ1bmN0aW9uIHJ3KHQsZSl7cmV0dXJuIHkxKCksZ2YoZWIpLGIuTWF0aC5hYnModC1lKTw9ZWJ8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpMdihpc05hTih0KSxpc05hTihlKSl9ZnVuY3Rpb24gZWllKHQsZSl7dmFyIG4scjtmb3Iobj1laSh0LDApO24uYiE9bi5kLmM7KXtpZihyPWxNKHllKHRpKG4pKSkscj09ZSlyZXR1cm47aWYocj5lKXtrcnQobik7YnJlYWt9fVhNKG4sZSl9ZnVuY3Rpb24gYW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKG49ZS5mLHAyKHQuYy5kLG4sZSksZS5nIT1udWxsKWZvcihzPWUuZyxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxwMih0LmMuZSxyLGUpfWZ1bmN0aW9uIGZsbih0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKHM9ZSsxO3M8bjsrK3MpZm9yKG89cztvPmUmJnIudWUodFtvLTFdLHRbb10pPjA7LS1vKWg9dFtvXSxKaSh0LG8sdFtvLTFdKSxKaSh0LG8tMSxoKX1mdW5jdGlvbiBmaCh0LGUsbixyKXtpZihlPDApRTV0KHQsbixyKTtlbHNle2lmKCFuLklqKCkpdGhyb3cgcnQobmV3IFBuKGFiK24ubmUoKStXXykpO3Uobiw2NikuTmooKS5Uaih0LHQueWgoKSxlLHIpfX1mdW5jdGlvbiBfeih0LGUpe2lmKGU9PXQuZClyZXR1cm4gdC5lO2lmKGU9PXQuZSlyZXR1cm4gdC5kO3Rocm93IHJ0KG5ldyBQbigiTm9kZSAiK2UrIiBub3QgcGFydCBvZiBlZGdlICIrdCkpfWZ1bmN0aW9uIGRsbih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdC5iO2Nhc2UgMTpyZXR1cm4gdC5jO2Nhc2UgNDpyZXR1cm4gdC5kO2Nhc2UgMzpyZXR1cm4gdC5hO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIG5pZSh0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdC5iO2Nhc2UgMTpyZXR1cm4gdC5jO2Nhc2UgNDpyZXR1cm4gdC5kO2Nhc2UgMzpyZXR1cm4gdC5hO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHMzdCh0LGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiB0LmY7Y2FzZSA0OnJldHVybiB0Lmc7Y2FzZSA1OnJldHVybiB0Lmk7Y2FzZSA2OnJldHVybiB0Lmp9cmV0dXJuIFl5dCh0LGUsbixyKX1mdW5jdGlvbiBnbG4odCl7cmV0dXJuIHQuayE9KEduKCksRHMpPyExOkE4KG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoTXModCkuYS5LYygpLG5ldyB6KSkpKSxuZXcgTEYpfWZ1bmN0aW9uIHBsbih0KXtyZXR1cm4gdC5lPT1udWxsP3Q6KCF0LmMmJih0LmM9bmV3IGVhdCgodC5mJjI1NikhPTAsdC5pLHQuYSx0LmQsKHQuZiYxNikhPTAsdC5qLHQuZyxudWxsKSksdC5jKX1mdW5jdGlvbiBibG4odCxlKXtyZXR1cm4gdC5oPT1JRCYmdC5tPT0wJiZ0Lmw9PTA/KGUmJihvYj1ydSgwLDAsMCkpLHJVdCgoTjgoKSxKOHQpKSk6KGUmJihvYj1ydSh0LmwsdC5tLHQuaCkpLHJ1KDAsMCwwKSl9ZnVuY3Rpb24gJG8odCl7dmFyIGU7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQuaW09PT1DdD9BcChzbCh0KSkrIkAiKyhlPUhpKHQpPj4+MCxlLnRvU3RyaW5nKDE2KSk6dC50b1N0cmluZygpfWZ1bmN0aW9uIGVfKHQpe3ZhciBlO3RoaXMuYT0oZT11KHQuZSYmdC5lKCksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5iPVB0KFhuLEllLDEsdGhpcy5hLmEubGVuZ3RoLDUsMSl9ZnVuY3Rpb24gdmxuKHQpe3ZhciBlLG4scjtmb3IodGhpcy5hPW5ldyBBMCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE0KSxlPW5ldyBjWXQsX29uKGUsbiksTnModGhpcy5hLGUpfWZ1bmN0aW9uIHdsbih0KXtCbSgpO3ZhciBlLG4scixzO2ZvcihlPXQuby5iLHI9dSh1KEFpKHQuciwoYmUoKSxtcikpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzPW4uZSxzLmIrPWV9ZnVuY3Rpb24gYWwodCl7dmFyIGU7aWYodC5iKXtpZihhbCh0LmIpLHQuYi5kIT10LmMpdGhyb3cgcnQobmV3IGVoKX1lbHNlIHQuZC5kYygpJiYoZT11KHQuZi5jLnhjKHQuZSksMTQpLGUmJih0LmQ9ZSkpfWZ1bmN0aW9uIG1sbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD8hMDooZT10Lmxlbmd0aCxlPjAmJihScihlLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlLTEpPT01OCkmJiFIaXQodCxpQSxzQSkpfWZ1bmN0aW9uIEhpdCh0LGUsbil7dmFyIHIscztmb3Iocj0wLHM9dC5sZW5ndGg7cjxzO3IrKylpZihiaXQoKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSksZSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB5bG4odCxlKXt2YXIgbixyO2ZvcihyPXQuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksMjY2KSxUMG4oZSxuLmQpfHxJZ24oZSxuLmQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHhsbih0LGUpe3ZhciBuLHIscztmb3Iocj1hd24odCxlKSxzPXJbci5sZW5ndGgtMV0vMixuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT49cylyZXR1cm4gZS5jK247cmV0dXJuIGUuYytlLmIuZ2MoKX1mdW5jdGlvbiBrbG4odCxlKXtmOCgpO3ZhciBuLHIscyxvO2ZvcihyPWJ0ZSh0KSxzPWUsRDgociwwLHIubGVuZ3RoLHMpLG49MDtuPHIubGVuZ3RoO24rKylvPWkxbih0LHJbbl0sbiksbiE9byYmdF8odCxuLG8pfWZ1bmN0aW9uIGEzdCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocj0wLG49MCxvPWUsaD0wLGQ9by5sZW5ndGg7aDxkOysraClzPW9baF0scz4wJiYocis9cywrK24pO3JldHVybiBuPjEmJihyKz10LmQqKG4tMSkpLHJ9ZnVuY3Rpb24gbzN0KHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgeGcsci5hKz0iWyIsZT0wLG49dC5nYygpO2U8bjspZm8ocixkQyh0LmtpKGUpKSksKytlPG4mJihyLmErPUthKTtyZXR1cm4gci5hKz0iXSIsci5hfWZ1bmN0aW9uIEVsbih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBvPVQ0dCh0KSxuPWZNKHQuYykscj0hbixyJiYocz1uZXcgYmcsV2Yobywia25vd25MYXlvdXRlcnMiLHMpLGU9bmV3IHh6dChzKSx2YSh0LmMsZSkpLG99ZnVuY3Rpb24gVGxuKHQsZSl7dmFyIG4scixzO2ZvcihPbihlKSxuPSExLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspcz1KKHIpLHJ5KGUscywhMSkmJihfQyhyKSxuPSEwKTtyZXR1cm4gbn1mdW5jdGlvbiBjM3QodCl7dmFyIGUsbixyO2ZvcihyPVh0KHllKHQuYS5XZSgoY2koKSxxVikpKSksbj1uZXcgUyh0LmEueGYoKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNjgwKSxTaGUodCxlLHIpfWZ1bmN0aW9uIEdpdCh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDYpLHVlKHQuYi5iLHUobi5iLDgxKSksRXJ0KHUobi5hLDE4OSksdShuLmIsODEpKX1mdW5jdGlvbiBDbG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5hLmIscj1zLmMubGVuZ3RoO3I8bjtyKyspJG0ocywwLG5ldyBDaCh0LmEpKTtrbyhlLHUoRmUocyxzLmMubGVuZ3RoLW4pLDI5KSksdC5iW2UucF09bn1mdW5jdGlvbiBfbG4odCxlLG4pe3ZhciByO3I9biwhciYmKHI9UHZ0KG5ldyBZaywwKSksd3IocixWZmUsMikscnNlKHQuYixlLFJjKHIsMSkpLG8zbih0LGUsUmMociwxKSksSjRuKGUsUmMociwxKSksb3Iocil9ZnVuY3Rpb24gU2xuKHQsZSxuLHIscyl7T2woKSx2ZihvZihhZihzZihjZihuZXcgRWgsMCkscy5kLmUtdCksZSkscy5kKSksdmYob2YoYWYoc2YoY2YobmV3IEVoLDApLG4tcy5hLmUpLHMuYSkscikpfWZ1bmN0aW9uIHUzdCh0LGUsbixyLHMsbyl7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5iPW4sdGhpcy5mPXIsdGhpcy5kPXMsdGhpcy5lPW8sdGhpcy5jPjAmJnRoaXMuYj4wJiZxdnQodGhpcy5jLHRoaXMuYix0aGlzLmEpfWZ1bmN0aW9uIGwzdCh0KXtWaXQoKSx0aGlzLmM9XzEoY3Qob3Qod3huLDEpLEllLDgzMSwwLFtSd2VdKSksdGhpcy5iPW5ldyBDcix0aGlzLmE9dCxraSh0aGlzLmIsb1YsMSksbXUoandlLG5ldyBWJHQodGhpcykpfWZ1bmN0aW9uIHJpZSh0LGUpe3ZhciBuO3JldHVybiB0LmQ/a2wodC5iLGUpP3UoSm4odC5iLGUpLDUxKToobj1lLktmKCksa2kodC5iLGUsbiksbik6ZS5LZigpfWZ1bmN0aW9uIGgzdCh0LGUpe3ZhciBuO3JldHVybiBHdCh0KT09PUd0KGUpPyEwOkV0KGUsOTEpPyhuPXUoZSw5MSksdC5lPT1uLmUmJnQuZD09bi5kJiZjc24odCxuLmEpKTohMX1mdW5jdGlvbiBKeCh0KXtzd2l0Y2goYmUoKSx0Lmcpe2Nhc2UgNDpyZXR1cm4gTm47Y2FzZSAxOnJldHVybiBIbjtjYXNlIDM6cmV0dXJuIG1yO2Nhc2UgMjpyZXR1cm4gQm47ZGVmYXVsdDpyZXR1cm4gWm99fWZ1bmN0aW9uIGYzdCh0LGUpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIHQuZiE9MDtjYXNlIDQ6cmV0dXJuIHQuZyE9MDtjYXNlIDU6cmV0dXJuIHQuaSE9MDtjYXNlIDY6cmV0dXJuIHQuaiE9MH1yZXR1cm4gaHl0KHQsZSl9ZnVuY3Rpb24gQWxuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHJaO2Nhc2UgMTpyZXR1cm4gbmV3IEhGO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGlpZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBxRjtjYXNlIDE6cmV0dXJuIG5ldyBHRjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihCb3QrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBzaWUodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgR3B0O2Nhc2UgMTpyZXR1cm4gbmV3IGJxdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIExsbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBaUTtjYXNlIDI6cmV0dXJuIG5ldyBrV3Q7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oeGN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gTWxuKHQpe3ZhciBlLG47aWYodC5iKXJldHVybiB0LmI7Zm9yKG49UjE/bnVsbDp0LmQ7bjspe2lmKGU9UjE/bnVsbDpuLmIsZSlyZXR1cm4gZTtuPVIxP251bGw6bi5kfXJldHVybiBzOCgpLExFdH1mdW5jdGlvbiBJbG4odCl7dmFyIGUsbixyO3JldHVybiB0LmU9PTA/MDooZT10LmQ8PDUsbj10LmFbdC5kLTFdLHQuZTwwJiYocj1wbmUodCkscj09dC5kLTEmJigtLW4sbj1ufDApKSxlLT1sRChuKSxlKX1mdW5jdGlvbiBEbG4odCl7dmFyIGUsbixyO3JldHVybiB0PFZILmxlbmd0aD9WSFt0XToobj10Pj41LGU9dCYzMSxyPVB0KFRyLFhyLDI1LG4rMSwxNSwxKSxyW25dPTE8PGUsbmV3IEszKDEsbisxLHIpKX1mdW5jdGlvbiBhaWUodCl7dmFyIGUsbixyO3JldHVybiBuPXQuemcoKSxuPyhlPXQuVWcoKSxFdChlLDE2MCkmJihyPWFpZSh1KGUsMTYwKSksciE9bnVsbCk/cisiLiIrbjpuKTpudWxsfWZ1bmN0aW9uIHJ5KHQsZSxuKXt2YXIgcixzO2ZvcihzPXQuS2MoKTtzLk9iKCk7KWlmKHI9cy5QYigpLEd0KGUpPT09R3Qocil8fGUhPW51bGwmJnlpKGUscikpcmV0dXJuIG4mJnMuUWIoKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBkM3QodCxlLG4pe3ZhciByLHM7aWYoKyt0Lmosbi5kYygpKXJldHVybiExO2ZvcihzPW4uS2MoKTtzLk9iKCk7KXI9cy5QYigpLHQuSGkoZSx0Lm9pKGUscikpLCsrZTtyZXR1cm4hMH1mdW5jdGlvbiBPbG4odCxlLG4scil7dmFyIHMsbztpZihvPW4tZSxvPDMpZm9yKDtvPDM7KXQqPTEwLCsrbztlbHNle2ZvcihzPTE7bz4zOylzKj0xMCwtLW87dD0odCsocz4+MSkpL3N8MH1yZXR1cm4gci5pPXQsITB9ZnVuY3Rpb24gTmxuKHQpe3JldHVybiBJaXQoKSxGbigpLCEhKG5pZSh1KHQuYSw4MSkuaix1KHQuYiwxMDMpKXx8dSh0LmEsODEpLmQuZSE9MCYmbmllKHUodC5hLDgxKS5qLHUodC5iLDEwMykpKX1mdW5jdGlvbiBQbG4odCl7TyQoKSx1KHQuV2UoKGNpKCksdmIpKSwxNzQpLkhjKChjbCgpLFdWKSkmJih1KHQuV2UoS3kpLDE3NCkuRmMoKFF1KCksRzYpKSx1KHQuV2UodmIpLDE3NCkuTWMoV1YpKX1mdW5jdGlvbiBvaWUodCxlKXt2YXIgbixyO2lmKGUpe2ZvcihuPTA7bjx0Lmk7KytuKWlmKHI9dSh0Lmdbbl0sMzY2KSxyLkRpKGUpKXJldHVybiExO3JldHVybiBNcih0LGUpfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gZzN0KHQpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBiZyxzPW5ldyBBKHQuYi5LYygpKTtzLmIuT2IoKTspcj11KHMuYi5QYigpLDY4Niksbj1RMG4ociksd2VuKGUsZS5hLmxlbmd0aCxuKTtyZXR1cm4gZS5hfWZ1bmN0aW9uIHAzdCh0KXt2YXIgZTtyZXR1cm4hdC5jJiYodC5jPW5ldyBvdiksWHModC5kLG5ldyBaMSksQnduKHQpLGU9Q3ZuKHQpLHVzKG5ldyBUbihudWxsLG5ldyBfbih0LmQsMTYpKSxuZXcgZ3IodCkpLGV9ZnVuY3Rpb24gU3oodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/WEModCk6KGU9bmV3IFRoKFhDKHQpKSxlLmErPSIgKGluc3RhbmNlQ2xhc3NOYW1lOiAiLGZvKGUsdC5EKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIEZsbih0LGUpe3ZhciBuLHIscyxvO2UmJihzPVIwKGUsIngiKSxuPW5ldyBienQodCksRjgobi5hLChPbihzKSxzKSksbz1SMChlLCJ5Iikscj1uZXcgdnp0KHQpLFI4KHIuYSwoT24obyksbykpKX1mdW5jdGlvbiBCbG4odCxlKXt2YXIgbixyLHMsbztlJiYocz1SMChlLCJ4Iiksbj1uZXcgZnp0KHQpLEI4KG4uYSwoT24ocykscykpLG89UjAoZSwieSIpLHI9bmV3IGd6dCh0KSxqOChyLmEsKE9uKG8pLG8pKSl9ZnVuY3Rpb24gVmkodCxlKXt2YXIgbixyLHM7aWYobj0odC5pPT1udWxsJiZwZCh0KSx0LmkpLHI9ZS5haigpLHIhPS0xKXtmb3Iocz1uLmxlbmd0aDtyPHM7KytyKWlmKG5bcl09PWUpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gUmxuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49dSh0LmcsNjc0KSxyPXQuaS0xO3I+PTA7LS1yKWZvcihlPW5bcl0scz0wO3M8cjsrK3MpaWYobz1uW3NdLHNsZSh0LGUsbykpe3I2KHQscik7YnJlYWt9fWZ1bmN0aW9uIGpsbih0KXt2YXIgZT10LmU7ZnVuY3Rpb24gbihyKXtyZXR1cm4hcnx8ci5sZW5ndGg9PTA/IiI6IgkiK3Iuam9pbihgCglgKX1yZXR1cm4gZSYmKGUuc3RhY2t8fG4odFtqYXRdKSl9ZnVuY3Rpb24gYjN0KHQpe0dtKCk7dmFyIGU7c3dpdGNoKGU9dC5QYygpLGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHZ1dDtjYXNlIDE6cmV0dXJuIG5ldyBTbnQoQXIoZVswXSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBvcnQob2xuKGUpKX19ZnVuY3Rpb24gaXcodCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIE94KHQuaiwoQnUoKSxEN3QpKTtjYXNlIDI6cmV0dXJuIE94KHQuaiwoQnUoKSxON3QpKTtkZWZhdWx0OnJldHVybiB2bigpLHZuKCksaW99fWZ1bmN0aW9uIHYzdCh0LGUpe3N3aXRjaChlKXtjYXNlIDM6WHYodCwwKTtyZXR1cm47Y2FzZSA0OlF2KHQsMCk7cmV0dXJuO2Nhc2UgNTp5dSh0LDApO3JldHVybjtjYXNlIDY6eHUodCwwKTtyZXR1cm59Vnl0KHQsZSl9ZnVuY3Rpb24gVml0KCl7Vml0PVosRFIoKSxvVj0oVGUoKSxCdyksandlPV8xKGN0KG90KFFodCwxKSxOa3QsMTQ2LDAsW0FPLHhmLEI2LEZ3LEd5LHRodCxtNyx5NyxlaHQsX1MsUTQsUjIsWjRdKSl9ZnVuY3Rpb24gY2llKHQpe3ZhciBlLG47ZT10LmQ9PShpNigpLGE3KSxuPWI0dCh0KSxlJiYhbnx8IWUmJm4/SnQodC5hLChUZSgpLExkKSwoUWQoKSx6TykpOkp0KHQuYSwoVGUoKSxMZCksKFFkKCksJE8pKX1mdW5jdGlvbiAkbG4odCxlKXt2YXIgbjtyZXR1cm4gbj11KFBsKHQsaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG4uUWMoREt0KG4uZ2MoKSkpfWZ1bmN0aW9uIEF6KCl7QXo9Wix3ZnQ9bmV3IFFSKCJTSU1QTEUiLDApLE1BdD1uZXcgUVIoIkdST1VQX0RFQyIsMSksREF0PW5ldyBRUigiR1JPVVBfTUlYRUQiLDIpLElBdD1uZXcgUVIoIkdST1VQX0lOQyIsMyl9ZnVuY3Rpb24gVWl0KCl7VWl0PVosQWZ0PW5ldyBlQixlTHQ9bmV3IG5CLG5MdD1uZXcgckIsckx0PW5ldyBBayxpTHQ9bmV3IGlCLHNMdD1uZXcgc0IsYUx0PW5ldyBLWixvTHQ9bmV3IExrLGNMdD1uZXcgTWt9ZnVuY3Rpb24gdWllKHQsZSxuKXt2ZWUoKSx1cXQuY2FsbCh0aGlzKSx0aGlzLmE9WGIoWGdlLFt0ZSxLeHRdLFs1OTUsMjEyXSwwLFtRSCxOdXRdLDIpLHRoaXMuYz1uZXcgQXgsdGhpcy5nPXQsdGhpcy5mPWUsdGhpcy5kPW59ZnVuY3Rpb24gdzN0KHQsZSl7dGhpcy5uPVhiKExiLFt0ZSxhb3RdLFszNjQsMjVdLDE0LFtlLHBzKGIuTWF0aC5jZWlsKHQvMzIpKV0sMiksdGhpcy5vPXQsdGhpcy5wPWUsdGhpcy5qPXQtMT4+MSx0aGlzLms9ZS0xPj4xfWZ1bmN0aW9uIHpsbih0LGUpe3dyKGUsIkVuZCBsYWJlbCBwb3N0LXByb2Nlc3NpbmciLDEpLHVzKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgaFkpLG5ldyBmWSksbmV3IGRZKSxvcihlKX1mdW5jdGlvbiBxbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9WHQodC5wW2UuaS5wXSkrWHQodC5kW2UuaS5wXSkrZS5uLmIrZS5hLmIscz1YdCh0LnBbbi5pLnBdKStYdCh0LmRbbi5pLnBdKStuLm4uYituLmEuYixzLXJ9ZnVuY3Rpb24gSGxuKHQsZSxuKXt2YXIgcixzO2ZvcihyPVBzKG4sY28pLHM9MDt5YyhyLDApIT0wJiZzPGU7cysrKXI9T2EocixQcyh0W3NdLGNvKSksdFtzXT1TcihyKSxyPUZwKHIsMzIpO3JldHVybiBTcihyKX1mdW5jdGlvbiBMeih0KXt2YXIgZSxuLHIscztmb3Iocz0wLG49MCxyPXQubGVuZ3RoO248cjtuKyspZT0oUnIobix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSxlPDY0JiYocz1DMShzLE0wKDEsZSkpKTtyZXR1cm4gc31mdW5jdGlvbiBHbG4odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDpuZXcgTnAoKGU9JGModCwhMCksZS5sZW5ndGg+MCYmKFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpP2Uuc3Vic3RyKDEpOmUpKX1mdW5jdGlvbiBWbG4odCl7dmFyIGU7cmV0dXJuIHQ9PW51bGw/bnVsbDpuZXcgTnAoKGU9JGModCwhMCksZS5sZW5ndGg+MCYmKFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpP2Uuc3Vic3RyKDEpOmUpKX1mdW5jdGlvbiBtM3QodCxlKXt2YXIgbjtyZXR1cm4gdC5pPjAmJihlLmxlbmd0aDx0LmkmJihuPUNJKHNsKGUpLmMsdC5pKSxlPW4pLEljKHQuZywwLGUsMCx0LmkpKSxlLmxlbmd0aD50LmkmJkppKGUsdC5pLG51bGwpLGV9ZnVuY3Rpb24gUWModCxlLG4pe3ZhciByLHMsbztyZXR1cm4gdC5laigpPyhyPXQuaSxvPXQuZmooKSx6SSh0LHIsZSkscz10LlppKDMsbnVsbCxlLHIsbyksbj9uLkVpKHMpOm49cyk6ekkodCx0LmksZSksbn1mdW5jdGlvbiBVbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IEYwKHQuZSw0LDEwLChzPWUuYyxFdChzLDg4KT91KHMsMjYpOihkbigpLFdoKSksbnVsbCxGZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gV2xuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBGMCh0LmUsMywxMCxudWxsLChzPWUuYyxFdChzLDg4KT91KHMsMjYpOihkbigpLFdoKSksRmcodCxlKSwhMSksbj9uLkVpKHIpOm49cixufWZ1bmN0aW9uIGxpZSh0KXtCbSgpO3ZhciBlO3JldHVybiBlPW5ldyB5byh1KHQuZS5XZSgoY2koKSxhNSkpLDgpKSx0LkIuSGMoKGNsKCksTTcpKSYmKGUuYTw9MCYmKGUuYT0yMCksZS5iPD0wJiYoZS5iPTIwKSksZX1mdW5jdGlvbiBoaWUodCl7c3koKTt2YXIgZTtyZXR1cm4odC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksTncpKT9lPXUoUSh0LE53KSwxOTcpOmU9dShRKEZhKHQpLENTKSwxOTcpLGV9ZnVuY3Rpb24gaXkodCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsVnModCwoVGUoKSxzVikpJiYobj11KFEodCxzViksOTQpLG4uWGUoZSkmJihyPW4uV2UoZSkpKSxyPT1udWxsJiYocj1RKEZhKHQpLGUpKSxyfWZ1bmN0aW9uIGZpZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxyPW4uY2QoKSxzPW55KHQuUmMoKSxyKSxmZChzLG4uZGQoKSkmJihzIT1udWxsfHx0LlJjKCkuX2IocikpKTohMX1mdW5jdGlvbiBXaXQodCxlKXt2YXIgbixyLHM7cmV0dXJuIHQuZj4wPyh0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ2aSkldC5kLmxlbmd0aCxuPWZjZSh0LHMscixlKSxuIT0tMSk6ITF9ZnVuY3Rpb24gWWYodCxlKXt2YXIgbixyLHM7cmV0dXJuIHQuZj4wJiYodC5xaigpLHI9ZT09bnVsbD8wOkhpKGUpLHM9KHImdmkpJXQuZC5sZW5ndGgsbj1yNXQodCxzLHIsZSksbik/bi5kZCgpOm51bGx9ZnVuY3Rpb24gVkkodCxlKXt2YXIgbixyLHMsbztmb3Iobz1hdSh0LmUuVGcoKSxlKSxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylpZihyPW5bc10sby5ybChyLmFrKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGRpZSh0KXtpZih0LmI9PW51bGwpe2Zvcig7dC5hLk9iKCk7KWlmKHQuYj10LmEuUGIoKSwhdSh0LmIsNDkpLlpnKCkpcmV0dXJuITA7cmV0dXJuIHQuYj1udWxsLCExfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gZ2llKHQsZSl7dC5taigpO3RyeXt0LmQuVmModC5lKyssZSksdC5mPXQuZC5qLHQuZz0tMX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpP3J0KG5ldyBlaCk6cnQobil9fWZ1bmN0aW9uIE16KHQsZSl7bzJ0KCk7dmFyIG4scjtyZXR1cm4gbj16TSgoYlIoKSxiUigpLHNTKSkscj1udWxsLGU9PW4mJihyPXUoRmMoUTh0LHQpLDYxNSkpLHJ8fChyPW5ldyBaWXQodCksZT09biYmeG8oUTh0LHQscikpLHJ9ZnVuY3Rpb24gcGllKHQsZSl7dmFyIG4scjt0LmE9T2EodC5hLDEpLHQuYz1iLk1hdGgubWluKHQuYyxlKSx0LmI9Yi5NYXRoLm1heCh0LmIsZSksdC5kKz1lLG49ZS10LmYscj10LmUrbix0LmY9ci10LmUtbix0LmU9cn1mdW5jdGlvbiBLbG4odCxlKXt2YXIgbjt0LmM9ZSx0LmE9SWxuKGUpLHQuYTw1NCYmKHQuZj0obj1lLmQ+MT9DMShNMChlLmFbMV0sMzIpLFBzKGUuYVswXSxjbykpOlBzKGUuYVswXSxjbyksVnYoQ2EoZS5lLG4pKSkpfWZ1bmN0aW9uIFVJKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCVlLEREPG4mJm48eDIpP246VnAoKGR4dChCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUsITApLG9iKSl9ZnVuY3Rpb24gbl8odCxlKXt2YXIgbjtnNG4oZSksbj11KFEodCwoVGUoKSxaRykpLDI3NiksbiYmSnQodCxaRyxXZm4obikpLFRnKHQuYyksVGcodC5mKSx5bXQodC5kKSx5bXQodShRKHQsblYpLDIwNykpfWZ1bmN0aW9uIGJpZSh0KXt0aGlzLmU9UHQoVHIsWHIsMjUsdC5sZW5ndGgsMTUsMSksdGhpcy5jPVB0KGRsLGkwLDI1LHQubGVuZ3RoLDE2LDEpLHRoaXMuYj1QdChkbCxpMCwyNSx0Lmxlbmd0aCwxNiwxKSx0aGlzLmY9MH1mdW5jdGlvbiBZbG4odCl7dmFyIGUsbjtmb3IodC5qPVB0KGlhLHZvLDI1LHQucC5jLmxlbmd0aCwxNSwxKSxuPW5ldyBTKHQucCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHQualtlLnBdPWUuby5iL3QuaX1mdW5jdGlvbiBLaXQodCl7dmFyIGU7dC5jIT0wJiYoZT11KEZlKHQuYSx0LmIpLDI4NyksZS5iPT0xPygrK3QuYix0LmI8dC5hLmMubGVuZ3RoJiZKQih1KEZlKHQuYSx0LmIpLDI4NykpKTotLWUuYiwtLXQuYyl9ZnVuY3Rpb24gWGxuKHQpe3ZhciBlO2U9dC5hO2RvIGU9dShMcihuZXcgYXIobHIoTXMoZSkuYS5LYygpLG5ldyB6KSkpLDE3KS5kLmksZS5rPT0oR24oKSxacykmJnVlKHQuZSxlKTt3aGlsZShlLms9PShHbigpLFpzKSl9ZnVuY3Rpb24geTN0KCl7eTN0PVosQUF0PW5ldyBNdigxNSksdjRlPW5ldyBlbygoY2koKSxxMiksQUF0KSxtNGU9bmV3IGVvKEgyLDE1KSx3NGU9bmV3IGVvKGZmdCxkZSgwKSksYjRlPW5ldyBlbygkNixCRSl9ZnVuY3Rpb24gX2woKXtfbD1aLG5OPW5ldyBYUigiUE9SVFMiLDApLFYyPW5ldyBYUigiUE9SVF9MQUJFTFMiLDEpLGVOPW5ldyBYUigiTk9ERV9MQUJFTFMiLDIpLFh5PW5ldyBYUigiTUlOSU1VTV9TSVpFIiwzKX1mdW5jdGlvbiBXSSh0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5sZW5ndGgsbj0wO248cjtuKz0yKWpjKHQsKFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSksKFJyKG4rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4rMSkpKX1mdW5jdGlvbiB2aWUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUtdC5lLGg9bi10LmYscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4NyksWUkocixyLnMrbyxyLnQraCk7dC5lPWUsdC5mPW59ZnVuY3Rpb24gUWxuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89ZS5iLmIsdC5hPW5ldyBRaSx0LmI9UHQoVHIsWHIsMjUsbywxNSwxKSxuPTAscz1laShlLmIsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDg2KSxyLmc9bisrfWZ1bmN0aW9uIHdpZSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPWU+PjUsZSY9MzEscz10LmQrbisoZT09MD8wOjEpLHI9UHQoVHIsWHIsMjUscywxNSwxKSxLZG4ocix0LmEsbixlKSxvPW5ldyBLMyh0LmUscyxyKSxPQyhvKSxvfWZ1bmN0aW9uIHgzdCh0LGUsbil7dmFyIHIscztyPXUoRmMoTzcsZSksMTE3KSxzPXUoRmMoaEEsZSksMTE3KSxuPyh4byhPNyx0LHIpLHhvKGhBLHQscykpOih4byhoQSx0LHIpLHhvKE83LHQscykpfWZ1bmN0aW9uIG1pZSh0LGUsbil7dmFyIHIscyxvO2ZvcihzPW51bGwsbz10LmI7bzspe2lmKHI9dC5hLnVlKGUsby5kKSxuJiZyPT0wKXJldHVybiBvO3I+PTA/bz1vLmFbMV06KHM9byxvPW8uYVswXSl9cmV0dXJuIHN9ZnVuY3Rpb24geWllKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bnVsbCxvPXQuYjtvOyl7aWYocj10LmEudWUoZSxvLmQpLG4mJnI9PTApcmV0dXJuIG87cjw9MD9vPW8uYVswXToocz1vLG89by5hWzFdKX1yZXR1cm4gc31mdW5jdGlvbiBabG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPSExLE8zbih0LmYsbixyKSYmKEVobih0LmYsdC5hW2VdW25dLHQuYVtlXVtyXSksbz10LmFbZV0saD1vW3JdLG9bcl09b1tuXSxvW25dPWgscz0hMCksc31mdW5jdGlvbiBrM3QodCxlLG4scixzKXt2YXIgbyxoLGQ7Zm9yKGg9cztlLmIhPWUuYzspbz11KEZ4KGUpLDEwKSxkPXUoWW8obyxyKS5YYigwKSwxMSksdC5kW2QucF09aCsrLG4uY1tuLmMubGVuZ3RoXT1kO3JldHVybiBofWZ1bmN0aW9uIEUzdCh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gaD10LmssZD1lLmsscj1uW2guZ11bZC5nXSxzPXllKGl5KHQscikpLG89eWUoaXkoZSxyKSksYi5NYXRoLm1heCgoT24ocykscyksKE9uKG8pLG8pKX1mdW5jdGlvbiBKbG4odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihyPW4vdC5jLmxlbmd0aCxzPTAsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMDApLENyZShvLG8uZityKnMpLEQxbihvLGUsciksKytzfWZ1bmN0aW9uIHhpZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHM9dShKbih0LmIsbiksMTc3KSxyPTAsaD1uZXcgUyhlLmopO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDExMyksc1tvLmQucF0mJisrcjtyZXR1cm4gcn1mdW5jdGlvbiBraWUodCl7dmFyIGUsbjtyZXR1cm4gZT11KEluKHQuYSw0KSwxMjYpLGUhPW51bGw/KG49UHQoVGZ0LEpjdCw0MTUsZS5sZW5ndGgsMCwxKSxJYyhlLDAsbiwwLGUubGVuZ3RoKSxuKTpqNGV9ZnVuY3Rpb24gdGhuKCl7dmFyIHQ7cmV0dXJuIHpIIT0wJiYodD1ic24oKSx0LXZnZT4yZTMmJih2Z2U9dCxxSD1iLnNldFRpbWVvdXQoYVllLDEwKSkpLHpIKys9PTA/KE5hbigoWXB0KCksWDh0KSksITApOiExfWZ1bmN0aW9uIGVobih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgYXIobHIoTXModCkuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShMcihyKSwxNykscz1uLmQuaSxzLmM9PWUpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVDN0KHQsZSl7dmFyIG4scjtpZihFdChlLDI0NSkpe3I9dShlLDI0NSk7dHJ5e3JldHVybiBuPXQudmQociksbj09MH1jYXRjaChzKXtpZihzPVdpKHMpLCFFdChzLDIwNSkpdGhyb3cgcnQocyl9fXJldHVybiExfWZ1bmN0aW9uIG5obigpe3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ+MD8oYi5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0LCEwKToic3RhY2siaW4gbmV3IEVycm9yfWZ1bmN0aW9uIHJobih0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKT4wfWZ1bmN0aW9uIEMzdCh0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKTwwfWZ1bmN0aW9uIEVpZSh0LGUpe3JldHVybiB5MSgpLHkxKCksZ2YoZWIpLChiLk1hdGguYWJzKHQtZSk8PWVifHx0PT1lfHxpc05hTih0KSYmaXNOYU4oZSk/MDp0PGU/LTE6dD5lPzE6THYoaXNOYU4odCksaXNOYU4oZSkpKTw9MH1mdW5jdGlvbiBZaXQodCxlKXtmb3IodmFyIG49MDshZVtuXXx8ZVtuXT09IiI7KW4rKztmb3IodmFyIHI9ZVtuKytdO248ZS5sZW5ndGg7bisrKSFlW25dfHxlW25dPT0iInx8KHIrPXQrZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQWgodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUrbixrbXQoZSxvLHQubGVuZ3RoKSxoPSIiLHM9ZTtzPG87KXI9Yi5NYXRoLm1pbihzKzFlNCxvKSxoKz1VZW4odC5zbGljZShzLHIpKSxzPXI7cmV0dXJuIGh9ZnVuY3Rpb24gVGllKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gQ2llKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gX2llKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbGUsbj1raXQodCkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sdWUobywkYyhlLCEwKSk7cmV0dXJuIG99ZnVuY3Rpb24gU2llKHQsZSl7dmFyIG4scixzO2lmKHQuYylRdih0LmMsZSk7ZWxzZSBmb3Iobj1lLUZ1KHQpLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNTcpLFNpZShyLEZ1KHIpK24pfWZ1bmN0aW9uIEFpZSh0LGUpe3ZhciBuLHIscztpZih0LmMpWHYodC5jLGUpO2Vsc2UgZm9yKG49ZS14bCh0KSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxBaWUocix4bChyKStuKX1mdW5jdGlvbiBpaG4odCxlKXt2YXIgbixyLHMsbztmb3Iocz1uZXcgWWMoZS5nYygpKSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLG89dWF0KHQsdShuLDU2KSksbyYmKHMuY1tzLmMubGVuZ3RoXT1vKTtyZXR1cm4gc31mdW5jdGlvbiBJeih0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5xaigpLHI9ZT09bnVsbD8wOkhpKGUpLHM9KHImdmkpJXQuZC5sZW5ndGgsbj1yNXQodCxzLHIsZSksbj8oQmVlKHQsbiksbi5kZCgpKTpudWxsfWZ1bmN0aW9uIHN3KHQpe3ZhciBlLG47Zm9yKG49JGFlKHQpLGU9bnVsbDt0LmM9PTI7KWZpKHQpLGV8fChlPShnaSgpLGdpKCksbmV3IGxDKDIpKSxtMihlLG4pLG49ZSksbi4kbCgkYWUodCkpO3JldHVybiBufWZ1bmN0aW9uIG9FKHQpe3ZhciBlLG4scjtpZihyPW51bGwsZT1DZCBpbiB0LmEsbj0hZSxuKXRocm93IHJ0KG5ldyBhZCgiRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuIikpO3JldHVybiByPXM2KEQwKHQsQ2QpKSxyfWZ1bmN0aW9uIER6KHQpe3ZhciBlLG4scjtpZihyPXQuWmcoKSwhcilmb3IoZT0wLG49dC5laCgpO247bj1uLmVoKCkpe2lmKCsrZT5vb3QpcmV0dXJuIG4uZmgoKTtpZihyPW4uWmcoKSxyfHxuPT10KWJyZWFrfXJldHVybiByfWZ1bmN0aW9uIF8zdCh0KXtyZXR1cm4gZyQoKSxFdCh0LDE1Nik/dShKbihjTixMZ2UpLDI4OCkudmcodCk6a2woY04sc2wodCkpP3UoSm4oY04sc2wodCkpLDI4OCkudmcodCk6bnVsbH1mdW5jdGlvbiBzaG4odCl7aWYoT3oocUUsdCkpcmV0dXJuIEZuKCksWUU7aWYoT3ooT2N0LHQpKXJldHVybiBGbigpLEkyO3Rocm93IHJ0KG5ldyBQbigiRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UiKSl9ZnVuY3Rpb24gYWhuKHQsZSl7aWYoZS5jPT10KXJldHVybiBlLmQ7aWYoZS5kPT10KXJldHVybiBlLmM7dGhyb3cgcnQobmV3IFBuKCJJbnB1dCBlZGdlIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQuIikpfWZ1bmN0aW9uIExpZSh0LGUpe3JldHVybiB0LmU+ZS5lPzE6dC5lPGUuZT8tMTp0LmQ+ZS5kP3QuZTp0LmQ8ZS5kPy1lLmU6dC5lKlB5dCh0LmEsZS5hLHQuZCl9ZnVuY3Rpb24gTWllKHQpe3JldHVybiB0Pj00OCYmdDw0OCtiLk1hdGgubWluKDEwLDEwKT90LTQ4OnQ+PTk3JiZ0PDk3P3QtOTcrMTA6dD49NjUmJnQ8NjU/dC02NSsxMDotMX1mdW5jdGlvbiBJaWUodCxlKXt2YXIgbjtyZXR1cm4gR3QoZSk9PT1HdCh0KT8hMDohRXQoZSwyMSl8fChuPXUoZSwyMSksbi5nYygpIT10LmdjKCkpPyExOnQuSWMobil9ZnVuY3Rpb24gb2huKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHI9dC5hLmxlbmd0aC0xLG49ZS10LmImcixvPXQuYy1lJnIscz10LmMtdC5iJnIsb1d0KG48cyksbj49bz8oYXVuKHQsZSksLTEpOihvdW4odCxlKSwxKX1mdW5jdGlvbiBjaG4odCxlKXt2YXIgbixyO2ZvcihuPShScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkpLHI9ZSsxO3I8dC5sZW5ndGgmJihScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocik9PW4pOykrK3I7cmV0dXJuIHItZX1mdW5jdGlvbiBTM3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdWhuKHQsZSl7dmFyIG49dC5hLHI7ZT1TdHJpbmcoZSksbi5oYXNPd25Qcm9wZXJ0eShlKSYmKHI9bltlXSk7dmFyIHM9KHBpdCgpLEV1dClbdHlwZW9mIHJdLG89cz9zKHIpOmp5dCh0eXBlb2Ygcik7cmV0dXJuIG99ZnVuY3Rpb24gYXcodCxlKXtpZih0LmE8MCl0aHJvdyBydChuZXcgRm8oIkRpZCBub3QgY2FsbCBiZWZvcmUoLi4uKSBvciBhZnRlciguLi4pIGJlZm9yZSBjYWxsaW5nIGFkZCguLi4pLiIpKTtyZXR1cm4gSTJ0KHQsdC5hLGUpLHR9ZnVuY3Rpb24gbGhuKHQsZSxuLHIpe3ZhciBzLG87ZS5jLmxlbmd0aCE9MCYmKHM9S2JuKG4sciksbz1XZ24oZSksdXMoRyQobmV3IFRuKG51bGwsbmV3IF9uKG8sMSkpLG5ldyAkUSksbmV3IEVYdCh0LG4scyxyKSkpfWZ1bmN0aW9uIHQ2KHQsZSxuKXt2YXIgcjt0LkRiJmU/bj09bnVsbD9PcG4odCxlKToocj1ic3QodCxlKSxyPT0tMT90LkViPW46SmkoczIodC5FYikscixuKSk6biE9bnVsbCYmaXZuKHQsZSxuKX1mdW5jdGlvbiBpdSh0KXt2YXIgZSxuO3JldHVybiB0LkRiJjMyfHwobj0oZT11KEluKHQsMTYpLDI2KSxabihlfHx0LnpoKCkpLVpuKHQuemgoKSkpLG4hPTAmJnQ2KHQsMzIsUHQoWG4sSWUsMSxuLDUsMSkpKSx0fWZ1bmN0aW9uIGhobih0KXt2YXIgZTtyZXR1cm4gdC5ifHxlWWUodCwoZT1WUWUodC5lLHQuYSksIWV8fCFobihPY3QsWWYoKCFlLmImJihlLmI9bmV3IHlsKChkbigpLFFhKSxjYyxlKSksZS5iKSwicXVhbGlmaWVkIikpKSksdC5jfWZ1bmN0aW9uIGZobih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPXUoU3QoaWwodC5hKSxlKSw4Nyksbz0ocz1yLmMsc3x8KGRuKCksVjEpKSwoby5raCgpP0twKHQuYix1KG8sNDkpKTpvKT09bj93cShyKTpQOChyLG4pLG99ZnVuY3Rpb24gZGhuKHQsZSl7KCFlJiZjb25zb2xlLmdyb3VwQ29sbGFwc2VkIT1udWxsP2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ6Y29uc29sZS5ncm91cD8/Y29uc29sZS5sb2cpLmNhbGwoY29uc29sZSx0KX1mdW5jdGlvbiBnaG4odCxlLG4scil7cj09dCx1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkuYy5iLHhtdChyLGUsdCl9ZnVuY3Rpb24gcGhuKHQpe3ZhciBlLG47Zm9yKGU9bmV3IFModC5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl1KEooZSksNTYyKTtuPW5ldyBGY2UodC5nLFh0KHQuYSksdC5jKSxrNG4obiksdC5nPW4uYix0LmQ9bi5hfWZ1bmN0aW9uIEEzdCh0LGUsbil7ZS5iPWIuTWF0aC5tYXgoZS5iLC1uLmEpLGUuYz1iLk1hdGgubWF4KGUuYyxuLmEtdC5hKSxlLmQ9Yi5NYXRoLm1heChlLmQsLW4uYiksZS5hPWIuTWF0aC5tYXgoZS5hLG4uYi10LmIpfWZ1bmN0aW9uIGJobih0LGUpe3JldHVybiB0LmU8ZS5lPy0xOnQuZT5lLmU/MTp0LmY8ZS5mPy0xOnQuZj5lLmY/MTpIaSh0KS1IaShlKX1mdW5jdGlvbiBPeih0LGUpe3JldHVybiBPbih0KSxlPT1udWxsPyExOmhuKHQsZSk/ITA6dC5sZW5ndGg9PWUubGVuZ3RoJiZobih0LnRvTG93ZXJDYXNlKCksZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB2aG4odCxlKXt2YXIgbixyLHMsbztmb3Iocj0wLHM9ZS5nYygpO3I8czsrK3Ipbj1lLmlsKHIpLEV0KG4sOTkpJiZ1KG4sMTgpLkJiJmRjJiYobz1lLmpsKHIpLG8hPW51bGwmJnVhdCh0LHUobyw1NikpKX1mdW5jdGlvbiBEaWUodCxlLG4pe3ZhciByLHMsbztmb3Iobz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMSkscj1uZXcgY2oodShKbih0LmEscy5iKSw2NSkpLHVlKGUuYSxyKSxEaWUodCxyLHMpfWZ1bmN0aW9uIGcyKHQpe3ZhciBlLG47cmV0dXJuIHljKHQsLTEyOSk+MCYmeWModCwxMjgpPDA/KGU9U3IodCkrMTI4LG49KFhLdCgpLGFFdClbZV0sIW4mJihuPWFFdFtlXT1uZXcgQ20odCkpLG4pOm5ldyBDbSh0KX1mdW5jdGlvbiBPaWUodCxlKXt2YXIgbixyO3JldHVybiBuPWUuSGgodC5hKSxuJiYocj1CcihZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLG9pKSksciE9bnVsbCk/cjplLm5lKCl9ZnVuY3Rpb24gd2huKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLkhoKHQuYSksbiYmKHI9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxvaSkpLHIhPW51bGwpP3I6ZS5uZSgpfWZ1bmN0aW9uIG1obih0LGUpe3BydCgpO3ZhciBuLHI7Zm9yKHI9bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOylpZihuPXUoTHIociksMTcpLG4uZC5pPT1lfHxuLmMuaT09ZSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBMM3QodCxlLG4pe3RoaXMuYz10LHRoaXMuZj1uZXcgbGUsdGhpcy5lPW5ldyBUYSx0aGlzLmo9bmV3IFJ2dCx0aGlzLm49bmV3IFJ2dCx0aGlzLmI9ZSx0aGlzLmc9bmV3IGloKGUuYyxlLmQsZS5iLGUuYSksdGhpcy5hPW59ZnVuY3Rpb24gWGl0KHQpe3ZhciBlLG4scixzO2Zvcih0aGlzLmE9bmV3IEEwLHRoaXMuZD1uZXcgcXMsdGhpcy5lPTAsbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLCF0aGlzLmYmJih0aGlzLmY9ZSksRXJ0KHRoaXMsZSl9ZnVuY3Rpb24gTmllKHQpe0pwKCksdC5sZW5ndGg9PTA/KHRoaXMuZT0wLHRoaXMuZD0xLHRoaXMuYT1jdChvdChUciwxKSxYciwyNSwxNSxbMF0pKToodGhpcy5lPTEsdGhpcy5kPXQubGVuZ3RoLHRoaXMuYT10LE9DKHRoaXMpKX1mdW5jdGlvbiByXyh0LGUsbil7dXF0LmNhbGwodGhpcyksdGhpcy5hPVB0KFhnZSxLeHQsMjEyLChLZigpLGN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pKS5sZW5ndGgsMCwxKSx0aGlzLmI9dCx0aGlzLmQ9ZSx0aGlzLmM9bn1mdW5jdGlvbiBQaWUodCl7dGhpcy5kPW5ldyBsZSx0aGlzLmU9bmV3IG4yLHRoaXMuYz1QdChUcixYciwyNSwoYmUoKSxjdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPXR9ZnVuY3Rpb24geWhuKHQpe3ZhciBlLG4scixzLG8saDtmb3IoaD11KFEodCwoc2UoKSxfaSkpLDExKSxKdChoLGc3LHQuaS5uLmIpLGU9Z2QodC5lKSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sc2EobixoKX1mdW5jdGlvbiB4aG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihuPXUoUSh0LChzZSgpLF9pKSksMTEpLEp0KG4sZzcsdC5pLm4uYiksZT1nZCh0LmcpLHM9ZSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxEYShyLG4pfWZ1bmN0aW9uIGtobih0KXt2YXIgZSxuO3JldHVybiBWcyh0LmQuaSwoVGUoKSxiNykpPyhlPXUoUSh0LmMuaSxiNyksMTkpLG49dShRKHQuZC5pLGI3KSwxOSksZHUoZS5hLG4uYSk+MCk6ITF9ZnVuY3Rpb24gRmllKHQpe3ZhciBlO0d0KHFlKHQsKGNpKCkscjUpKSk9PT1HdCgoJDAoKSxIVikpJiYodHModCk/KGU9dShxZSh0cyh0KSxyNSksMzM0KSxibyh0LHI1LGUpKTpibyh0LHI1LFlTKSl9ZnVuY3Rpb24gRWhuKHQsZSxuKXt2YXIgcixzO0lzdCh0LmUsZSxuLChiZSgpLEJuKSksSXN0KHQuaSxlLG4sSG4pLHQuYSYmKHM9dShRKGUsKHNlKCksX2kpKSwxMSkscj11KFEobixfaSksMTEpLHhydCh0LmcscyxyKSl9ZnVuY3Rpb24gQmllKHQsZSxuKXt2YXIgcixzLG87cj1lLmMucCxvPWUucCx0LmJbcl1bb109bmV3IHRRdCh0LGUpLG4mJih0LmFbcl1bb109bmV3IFdrKGUpLHM9dShRKGUsKHNlKCksSXcpKSwxMCkscyYmbG4odC5kLHMsZSkpfWZ1bmN0aW9uIFJpZSh0LGUpe3ZhciBuLHIscztpZih1ZShuRyx0KSxlLkZjKHQpLG49dShKbihxdXQsdCksMjEpLG4pZm9yKHM9bi5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzMyksUm8obkcsciwwKSE9LTF8fFJpZShyLGUpfWZ1bmN0aW9uIFRobih0LGUsbil7dmFyIHI7KEZnZT8oTWxuKHQpLCEwKTpCZ2V8fGpnZT8oczgoKSwhMCk6UmdlJiYoczgoKSwhMSkpJiYocj1uZXcgZkt0KGUpLHIuYj1uLFMwbih0LHIpKX1mdW5jdGlvbiBRaXQodCxlKXt2YXIgbjtuPSF0LkEuSGMoKF9sKCksVjIpKXx8dC5xPT0ob2EoKSxWYyksdC51LkhjKChRdSgpLHRnKSk/bj9VNG4odCxlKTpnaGUodCxlKTp0LnUuSGMoeGIpJiYobj9oNG4odCxlKTpBaGUodCxlKSl9ZnVuY3Rpb24gY0UodCxlKXt2YXIgbixyO2lmKCsrdC5qLGUhPW51bGwmJihuPShyPXQuYS5DYixFdChyLDk3KT91KHIsOTcpLkpnKCk6bnVsbCksbXBuKGUsbikpKXt0Nih0LmEsNCxuKTtyZXR1cm59dDYodC5hLDQsdShlLDEyNikpfWZ1bmN0aW9uIGppZSh0LGUsbil7cmV0dXJuIG5ldyBpaChiLk1hdGgubWluKHQuYSxlLmEpLW4vMixiLk1hdGgubWluKHQuYixlLmIpLW4vMixiLk1hdGguYWJzKHQuYS1lLmEpK24sYi5NYXRoLmFicyh0LmItZS5iKStuKX1mdW5jdGlvbiBDaG4odCxlKXt2YXIgbixyO3JldHVybiBuPWR1KHQuYS5jLnAsZS5hLmMucCksbiE9MD9uOihyPWR1KHQuYS5kLmkucCxlLmEuZC5pLnApLHIhPTA/cjpkdShlLmEuZC5wLHQuYS5kLnApKX1mdW5jdGlvbiBfaG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBvPWUuaixoPW4uaixvIT1oP28uZy1oLmc6KHI9dC5mW2UucF0scz10LmZbbi5wXSxyPT0wJiZzPT0wPzA6cj09MD8tMTpzPT0wPzE6THMocixzKSl9ZnVuY3Rpb24gJGllKHQsZSxuKXt2YXIgcixzLG87aWYoIW5bZS5kXSlmb3IobltlLmRdPSEwLHM9bmV3IFMobzQoZSkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDIxMyksbz1feihyLGUpLCRpZSh0LG8sbil9ZnVuY3Rpb24gTTN0KHQsZSxuKXt2YXIgcjtzd2l0Y2gocj1uW3QuZ11bZV0sdC5nKXtjYXNlIDE6Y2FzZSAzOnJldHVybiBuZXcgJGUoMCxyKTtjYXNlIDI6Y2FzZSA0OnJldHVybiBuZXcgJGUociwwKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBTaG4odCxlLG4pe3ZhciByLHM7cz11KGxydChlLmYpLDIwOSk7dHJ5e3MuWmUodCxuKSxGZW4oZS5mLHMpfWNhdGNoKG8pe3Rocm93IG89V2kobyksRXQobywxMDIpPyhyPW8scnQocikpOnJ0KG8pfX1mdW5jdGlvbiB6aWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdztyZXR1cm4gcj1udWxsLGQ9Ynh0KHo4KCksZSksbz1udWxsLGQmJihzPW51bGwsdz1neHQoZCxuKSxoPW51bGwsdyE9bnVsbCYmKGg9dC5ZZShkLHcpKSxzPWgsbz1zKSxyPW8scn1mdW5jdGlvbiBBaG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPW5ldyBGMCh0LmUsMSwxMywoaD1lLmMsaHx8KGRuKCksVjEpKSwobz1uLmMsb3x8KGRuKCksVjEpKSxGZyh0LGUpLCExKSxyP3IuRWkocyk6cj1zLHJ9ZnVuY3Rpb24gWml0KHQsZSxuLHIpe3ZhciBzO2lmKHM9dC5sZW5ndGgsZT49cylyZXR1cm4gcztmb3IoZT1lPjA/ZTowO2U8cyYmIWJpdCgoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpKSxuLHIpO2UrKyk7cmV0dXJuIGV9ZnVuY3Rpb24gRDEodCxlKXt2YXIgbixyO2ZvcihyPXQuYy5sZW5ndGgsZS5sZW5ndGg8ciYmKGU9d1IobmV3IEFycmF5KHIpLGUpKSxuPTA7bjxyOysrbilKaShlLG4sdC5jW25dKTtyZXR1cm4gZS5sZW5ndGg+ciYmSmkoZSxyLG51bGwpLGV9ZnVuY3Rpb24gcWllKHQsZSl7dmFyIG4scjtmb3Iocj10LmEubGVuZ3RoLGUubGVuZ3RoPHImJihlPXdSKG5ldyBBcnJheShyKSxlKSksbj0wO248cjsrK24pSmkoZSxuLHQuYVtuXSk7cmV0dXJuIGUubGVuZ3RoPnImJkppKGUscixudWxsKSxlfWZ1bmN0aW9uIHAyKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHM9dShKbih0LmUsZSksMzg3KSxzPyhvPUoydChzLG4pLE9VdCh0LHMpLG8pOihyPW5ldyBfdnQodCxlLG4pLGtpKHQuZSxlLHIpLHNRdChyKSxudWxsKX1mdW5jdGlvbiBMaG4odCl7dmFyIGU7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihlPUVibigkYyh0LCEwKSksZT09bnVsbCl0aHJvdyBydChuZXcgcmV0KCJJbnZhbGlkIGhleEJpbmFyeSB2YWx1ZTogJyIrdCsiJyIpKTtyZXR1cm4gZX1mdW5jdGlvbiBLSSh0KXtyZXR1cm4gSnAoKSx5Yyh0LDApPDA/eWModCwtMSkhPTA/bmV3IGc0dCgtMSxPOCh0KSk6X3V0OnljKHQsMTApPD0wP3dFdFtTcih0KV06bmV3IGc0dCgxLHQpfWZ1bmN0aW9uIEppdCgpe3JldHVybiBMcSgpLGN0KG90KEVwZSwxKSxhZSwxNTksMCxbeHBlLHlwZSxrcGUsZnBlLGhwZSxkcGUsYnBlLHBwZSxncGUsbXBlLHdwZSx2cGUsdXBlLGNwZSxscGUsYXBlLHNwZSxvcGUscnBlLG5wZSxpcGUsUHV0XSl9ZnVuY3Rpb24gSGllKHQpe3ZhciBlO3RoaXMuZD1uZXcgbGUsdGhpcy5qPW5ldyBUYSx0aGlzLmc9bmV3IFRhLGU9dC5nLmIsdGhpcy5mPXUoUShGYShlKSwoVGUoKSxWbCkpLDEwMyksdGhpcy5lPVh0KHllKEZ6KGUsR3kpKSl9ZnVuY3Rpb24gR2llKHQpe3RoaXMuYj1uZXcgbGUsdGhpcy5lPW5ldyBsZSx0aGlzLmQ9dCx0aGlzLmE9IWo5KFJpKG5ldyBUbihudWxsLG5ldyBGdihuZXcgUzEodC5iKSkpLG5ldyBadChuZXcgTUYpKSkuc2QoKFdiKCksSkUpKX1mdW5jdGlvbiBYZigpe1hmPVoscW49bmV3IEFNKCJQQVJFTlRTIiwwKSxKcz1uZXcgQU0oIk5PREVTIiwxKSxJZD1uZXcgQU0oIkVER0VTIiwyKSwkMj1uZXcgQU0oIlBPUlRTIiwzKSxYZz1uZXcgQU0oIkxBQkVMUyIsNCl9ZnVuY3Rpb24gYzQoKXtjND1aLG1iPW5ldyBNTSgiRElTVFJJQlVURUQiLDApLEpPPW5ldyBNTSgiSlVTVElGSUVEIiwxKSxDQXQ9bmV3IE1NKCJCRUdJTiIsMiksWFM9bmV3IE1NKE5FLDMpLF9BdD1uZXcgTU0oIkVORCIsNCl9ZnVuY3Rpb24gTWhuKHQpe3ZhciBlO3N3aXRjaChlPXQueWkobnVsbCksZSl7Y2FzZSAxMDpyZXR1cm4gMDtjYXNlIDE1OnJldHVybiAxO2Nhc2UgMTQ6cmV0dXJuIDI7Y2FzZSAxMTpyZXR1cm4gMztjYXNlIDIxOnJldHVybiA0fXJldHVybi0xfWZ1bmN0aW9uIHRzdCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIGFvKCksWjA7Y2FzZSA0OnJldHVybiBhbygpLGpoO2Nhc2UgMjpyZXR1cm4gYW8oKSxrZjtjYXNlIDM6cmV0dXJuIGFvKCksUTB9cmV0dXJuIGFvKCksYzB9ZnVuY3Rpb24gSWhuKHQsZSxuKXt2YXIgcjtzd2l0Y2gocj1uLnEuZ2V0RnVsbFllYXIoKS1uYituYixyPDAmJihyPS1yKSxlKXtjYXNlIDE6dC5hKz1yO2JyZWFrO2Nhc2UgMjpYZCh0LHIlMTAwLDIpO2JyZWFrO2RlZmF1bHQ6WGQodCxyLGUpfX1mdW5jdGlvbiBlaSh0LGUpe3ZhciBuLHI7aWYoVW0oZSx0LmIpLGU+PXQuYj4+MSlmb3Iocj10LmMsbj10LmI7bj5lOy0tbilyPXIuYjtlbHNlIGZvcihyPXQuYS5hLG49MDtuPGU7KytuKXI9ci5hO3JldHVybiBuZXcgbEt0KHQsZSxyKX1mdW5jdGlvbiBOeigpe056PVosSXV0PW5ldyBDYnQoIk5VTV9PRl9FWFRFUk5BTF9TSURFU19USEFOX05VTV9PRl9FWFRFTlNJT05TX0xBU1QiLDApLE9FdD1uZXcgQ2J0KCJDT1JORVJfQ0FTRVNfVEhBTl9TSU5HTEVfU0lERV9MQVNUIiwxKX1mdW5jdGlvbiBEaG4odCl7dmFyIGUsbixyLHM7Zm9yKHI9a2duKHQpLFhzKHIsUmJlKSxzPXQuZCxzLmM9UHQoWG4sSWUsMSwwLDUsMSksbj1uZXcgUyhyKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw0NTYpLEFzKHMsZS5iKX1mdW5jdGlvbiBWaWUodCl7dmFyIGUsbixyO2ZvcihyPSghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksdC5vKSxuPXIuYy5LYygpO24uZSE9bi5pLmdjKCk7KWU9dShuLm5qKCksNDIpLGUuZGQoKTtyZXR1cm4gZkkocil9ZnVuY3Rpb24gT2huKHQpe3ZhciBlO0R4KHUoUSh0LChUZSgpLG9zKSksOTgpKSYmKGU9dC5iLE1vZSgoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwyOSkpKSxNb2UodShGZShlLGUuYy5sZW5ndGgtMSksMjkpKSl9ZnVuY3Rpb24gVWllKHQsZSl7dmFyIG4scixzLG87Zm9yKG49MCxzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89ci5vLmErci5kLmMrci5kLmIrdC5qLG49Yi5NYXRoLm1heChuLG8pO3JldHVybiBufWZ1bmN0aW9uIFB6KHQpe3ZhciBlLG4scixzO2ZvcihzPTAsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllPShScihuLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobikpLGU+PTY0JiZlPDEyOCYmKHM9QzEocyxNMCgxLGUtNjQpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gRnoodCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsVnModCwoY2koKSxxNikpJiYobj11KFEodCxxNiksOTQpLG4uWGUoZSkmJihyPW4uV2UoZSkpKSxyPT1udWxsJiZGYSh0KSYmKHI9UShGYSh0KSxlKSkscn1mdW5jdGlvbiBXaWUodCxlKXt2YXIgbixyLHM7cz1lLmQuaSxyPXMuaywhKHI9PShHbigpLERzKXx8cj09ajEpJiYobj1uZXcgYXIobHIoTXMocykuYS5LYygpLG5ldyB6KSksenIobikmJmtpKHQuayxlLHUoTHIobiksMTcpKSl9ZnVuY3Rpb24gZXN0KHQsZSl7dmFyIG4scixzO3JldHVybiByPXluKHQuVGcoKSxlKSxuPWUtdC5BaCgpLG48MD8ocz10LllnKHIpLHM+PTA/dC5saChzKTp6c3QodCxyKSk6bjwwP3pzdCh0LHIpOnUociw2NikuTmooKS5Taih0LHQueWgoKSxuKX1mdW5jdGlvbiBEZSh0KXt2YXIgZTtpZihFdCh0LmEsNCkpe2lmKGU9XzN0KHQuYSksZT09bnVsbCl0aHJvdyBydChuZXcgRm8oRzFlK3QuYisiJy4gIitIMWUrKEwwKHVOKSx1Ti5rKSthOHQpKTtyZXR1cm4gZX1lbHNlIHJldHVybiB0LmF9ZnVuY3Rpb24gTmhuKHQpe3ZhciBlO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYoZT10NW4oJGModCwhMCkpLGU9PW51bGwpdGhyb3cgcnQobmV3IHJldCgiSW52YWxpZCBiYXNlNjRCaW5hcnkgdmFsdWU6ICciK3QrIiciKSk7cmV0dXJuIGV9ZnVuY3Rpb24gZHIodCl7dmFyIGU7dHJ5e3JldHVybiBlPXQuaS5YYih0LmUpLHQubWooKSx0Lmc9dC5lKyssZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0Lm1qKCkscnQobmV3IGxjKSk6cnQobil9fWZ1bmN0aW9uIG5zdCh0KXt2YXIgZTt0cnl7cmV0dXJuIGU9dC5jLmtpKHQuZSksdC5taigpLHQuZz10LmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/KHQubWooKSxydChuZXcgbGMpKTpydChuKX19ZnVuY3Rpb24gaV8oKXtpXz1aLGM3dD0oY2koKSxpQXQpLCR1dD1GU3QsRnBlPSQ2LG83dD1xMiwkcGU9KEt6KCksJEV0KSxqcGU9UkV0LHpwZT1xRXQsUnBlPUJFdCxCcGU9KFNpdCgpLGk3dCksanV0PU9wZSxhN3Q9TnBlLGVHPVBwZX1mdW5jdGlvbiBCeih0KXtzd2l0Y2gocGJ0KCksdGhpcy5jPW5ldyBsZSx0aGlzLmQ9dCx0Lmcpe2Nhc2UgMDpjYXNlIDI6dGhpcy5hPUV3dChfN3QpLHRoaXMuYj1zczticmVhaztjYXNlIDM6Y2FzZSAxOnRoaXMuYT1fN3QsdGhpcy5iPVRzfX1mdW5jdGlvbiBLaWUodCxlLG4pe3ZhciByLHM7aWYodC5jKXl1KHQuYyx0LmMuaStlKSx4dSh0LmMsdC5jLmorbik7ZWxzZSBmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksS2llKHIsZSxuKX1mdW5jdGlvbiBQaG4odCxlKXt2YXIgbixyO2lmKHQuai5sZW5ndGghPWUuai5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxyPXQuai5sZW5ndGg7bjxyO24rKylpZighaG4odC5qW25dLGUualtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUnoodCxlLG4pe3ZhciByO2UuYS5sZW5ndGg+MCYmKHVlKHQuYixuZXcgQUt0KGUuYSxuKSkscj1lLmEubGVuZ3RoLDA8cj9lLmE9ZS5hLnN1YnN0cigwLDApOjA+ciYmKGUuYSs9RFV0KFB0KG1oLHZkLDI1LC1yLDE1LDEpKSkpfWZ1bmN0aW9uIFlpZSh0LGUpe3ZhciBuLHIscztmb3Iobj10Lm8scz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYT1CZm4ocixuLmEpLHIuZS5iPW4uYipYdCh5ZShyLmIuV2UoWkgpKSl9ZnVuY3Rpb24gRmhuKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHM9dC5rLG49WHQoeWUoUSh0LChzZSgpLER3KSkpKSxvPWUuayxyPVh0KHllKFEoZSxEdykpKSxvIT0oR24oKSx4cyk/LTE6cyE9eHM/MTpuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gQmhuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHUoSm4odC5nLGUuYSksNDYpLmEsNjUpLHI9dSh1KEpuKHQuZyxlLmIpLDQ2KS5hLDY1KSxIcChlLmEsZS5iKS1IcChlLmEsbDJ0KG4uYikpLUhwKGUuYixsMnQoci5iKSl9ZnVuY3Rpb24gUmhuKHQsZSl7dmFyIG47cmV0dXJuIG49dShRKHQsKFRlKCksX28pKSw3NCksSmV0KGUsRGJlKT9uP19oKG4pOihuPW5ldyBEdSxKdCh0LF9vLG4pKTpuJiZKdCh0LF9vLG51bGwpLG59ZnVuY3Rpb24gWGllKHQpe3ZhciBlO3JldHVybiBlPW5ldyBfcCxlLmErPSJuIix0LmshPShHbigpLERzKSYmVnIoVnIoKGUuYSs9IigiLGUpLHNudCh0LmspLnRvTG93ZXJDYXNlKCkpLCIpIiksVnIoKGUuYSs9Il8iLGUpLFpJKHQpKSxlLmF9ZnVuY3Rpb24gamhuKHQsZSl7d3IoZSwiU2VsZi1Mb29wIHBvc3QtcHJvY2Vzc2luZyIsMSksdXMoUmkoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBYWSksbmV3IFFZKSxuZXcgbEYpLG5ldyBaWSksb3IoZSl9ZnVuY3Rpb24gZTYodCxlLG4scil7dmFyIHM7cmV0dXJuIG4+PTA/dC5oaChlLG4scik6KHQuZWgoKSYmKHI9KHM9dC5WZygpLHM+PTA/dC5RZyhyKTp0LmVoKCkuaWgodCwtMS1zLG51bGwscikpKSx0LlNnKGUsbixyKSl9ZnVuY3Rpb24gSTN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgNzohdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHhyKHQuZSk7cmV0dXJuO2Nhc2UgODohdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHhyKHQuZCk7cmV0dXJufXYzdCh0LGUpfWZ1bmN0aW9uIFFmKHQsZSl7dmFyIG47bj10LlpjKGUpO3RyeXtyZXR1cm4gbi5QYigpfWNhdGNoKHIpe3Rocm93IHI9V2kociksRXQociwxMDkpP3J0KG5ldyBtbygiQ2FuJ3QgZ2V0IGVsZW1lbnQgIitlKSk6cnQocil9fWZ1bmN0aW9uIEQzdCh0LGUpe3RoaXMuZT10LGU8Y290Pyh0aGlzLmQ9MSx0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW2V8MF0pKToodGhpcy5kPTIsdGhpcy5hPWN0KG90KFRyLDEpLFhyLDI1LDE1LFtlJWNvdHwwLGUvY290fDBdKSl9ZnVuY3Rpb24gUWllKHQsZSl7dm4oKTt2YXIgbixyLHMsbztmb3Iobj10LG89ZSxFdCh0LDIxKSYmIUV0KGUsMjEpJiYobj1lLG89dCkscz1uLktjKCk7cy5PYigpOylpZihyPXMuUGIoKSxvLkhjKHIpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEJhKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gcj10LlhjKGUpLHIhPS0xJiYodC5laigpPyhvPXQuZmooKSxoPXI2KHQscikscz10LlppKDQsaCxudWxsLHIsbyksbj9uLkVpKHMpOm49cyk6cjYodCxyKSksbn1mdW5jdGlvbiAkaG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiByPXQuWGMoZSksciE9LTEmJih0LmVqKCk/KG89dC5maigpLGg9RGoodCxyKSxzPXQuWmkoNCxoLG51bGwscixvKSxuP24uRWkocyk6bj1zKTpEaih0LHIpKSxufWZ1bmN0aW9uIFppZSh0LGUpe3ZhciBuO3N3aXRjaChuPXUoZ28odC5iLGUpLDEyNCkubixlLmcpe2Nhc2UgMTp0LnQ+PTAmJihuLmQ9dC50KTticmVhaztjYXNlIDM6dC50Pj0wJiYobi5hPXQudCl9dC5DJiYobi5iPXQuQy5iLG4uYz10LkMuYyl9ZnVuY3Rpb24gbjYoKXtuNj1aLGNPPW5ldyAkUihScSwwKSxvTz1uZXcgJFIoeG90LDEpLHVPPW5ldyAkUihrb3QsMiksbE89bmV3ICRSKEVvdCwzKSxjTy5hPSExLG9PLmE9ITAsdU8uYT0hMSxsTy5hPSEwfWZ1bmN0aW9uIHNfKCl7c189WixoTz1uZXcgalIoUnEsMCksSkg9bmV3IGpSKHhvdCwxKSx0Rz1uZXcgalIoa290LDIpLGZPPW5ldyBqUihFb3QsMyksaE8uYT0hMSxKSC5hPSEwLHRHLmE9ITEsZk8uYT0hMH1mdW5jdGlvbiB6aG4odCl7dmFyIGU7ZT10LmE7ZG8gZT11KExyKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksMTcpLmMuaSxlLms9PShHbigpLFpzKSYmdC5iLkZjKGUpO3doaWxlKGUuaz09KEduKCksWnMpKTt0LmI9YTIodC5iKX1mdW5jdGlvbiBxaG4odCl7dmFyIGUsbixyO2ZvcihyPXQuYy5hLHQucD0oQXIociksbmV3IFB1KHIpKSxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxlLnA9Q2duKGUpLmE7dm4oKSxYcyh0LnAsbmV3IG5RKX1mdW5jdGlvbiBKaWUodCl7dmFyIGUsbixyLHM7aWYocj0wLHM9Z3kodCkscy5jLmxlbmd0aD09MClyZXR1cm4gMTtmb3Iobj1uZXcgUyhzKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwzMykscis9SmllKGUpO3JldHVybiByfWZ1bmN0aW9uIEhobih0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDExMSkscys9bi5kLmIrbi5iLnJmKCkuYStuLmQuYyxyLk9iKCkmJihzKz10LncpO3JldHVybiBzfWZ1bmN0aW9uIEdobih0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDExMSkscys9bi5kLmQrbi5iLnJmKCkuYituLmQuYSxyLk9iKCkmJihzKz10LncpO3JldHVybiBzfWZ1bmN0aW9uIFZobih0LGUsbixyKXtpZihlLmE8ci5hKXJldHVybiEwO2lmKGUuYT09ci5hKXtpZihlLmI8ci5iKXJldHVybiEwO2lmKGUuYj09ci5iJiZ0LmI+bi5iKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHJzdCh0LGUpe3JldHVybiBlYSh0KT8hIWxnZVtlXTp0LmhtPyEhdC5obVtlXTpObSh0KT8hIXVnZVtlXTpPbSh0KT8hIWNnZVtlXTohMX1mdW5jdGlvbiBibyh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxJeih0Lm8sZSkpOighdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksWXoodC5vLGUsbikpLHR9ZnVuY3Rpb24gVWhuKHQsZSxuLHIpe3ZhciBzLG87bz1lLlhlKChjaSgpLHM1KSk/dShlLldlKHM1KSwyMSk6dC5qLHM9UHVuKG8pLHMhPShMcSgpLFB1dCkmJihuJiYhUzN0KHMpfHxCNHQoVGJuKHQscyxyKSxlKSl9ZnVuY3Rpb24ganoodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPXluKHQuVGcoKSxlKSxzPWUtdC5BaCgpLHM8MD8oaD10LllnKG8pLGg+PTA/dC5fZyhoLG4sITApOmx3KHQsbyxuKSk6dShvLDY2KS5OaigpLlBqKHQsdC55aCgpLHMsbixyKX1mdW5jdGlvbiBXaG4odCxlLG4scil7dmFyIHMsbyxoO24ubWgoZSkmJih0bygpLFlydChlKT8ocz11KG4uYWgoZSksMTUzKSx2aG4odCxzKSk6KG89KGg9ZSxoP3Uociw0OSkueGgoaCk6bnVsbCksbyYmWVdlKG4uYWgoZSksbykpKX1mdW5jdGlvbiBLaG4odCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB0dygpLGFPO2Nhc2UgMzpyZXR1cm4gdHcoKSxzTztjYXNlIDI6cmV0dXJuIHR3KCksQnV0O2Nhc2UgNDpyZXR1cm4gdHcoKSxGdXQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTzN0KHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSBPYXQ6cmV0dXJuIEJnKHQpO2Nhc2UgTHh0OnJldHVybiBwcyh0KTtjYXNlIHU2OnJldHVybiBGbigpLHQ/MTIzMToxMjM3O2RlZmF1bHQ6cmV0dXJuIHQ9PW51bGw/MDpJdih0KX19ZnVuY3Rpb24gWWhuKHQsZSxuKXtpZih0LmUpc3dpdGNoKHQuYil7Y2FzZSAxOlRubih0LmMsZSxuKTticmVhaztjYXNlIDA6Q25uKHQuYyxlLG4pfWVsc2UgQlp0KHQuYyxlLG4pO3QuYVtlLnBdW24ucF09dC5jLmksdC5hW24ucF1bZS5wXT10LmMuZX1mdW5jdGlvbiB0c2UodCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihuPVB0KG8wLHRlLDE5Myx0Lmxlbmd0aCwwLDIpLGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdPXUoYmFuKHRbZV0sdFtlXS5sZW5ndGgpLDE5Myk7cmV0dXJuIG59ZnVuY3Rpb24gJHoodCl7dmFyIGU7aWYoX2l0KHQpKXJldHVybiB6aih0KSx0LkxrKCkmJihlPWRfKHQuZSx0LmIsdC5jLHQuYSx0LmopLHQuaj1lKSx0Lmc9dC5hLCsrdC5hLCsrdC5jLHQuaT0wLHQuajt0aHJvdyBydChuZXcgbGMpfWZ1bmN0aW9uIFhobih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBvPXQubyxuPXQucCxvPG4/byo9bzpuKj1uLHI9bytuLG89ZS5vLG49ZS5wLG88bj9vKj1vOm4qPW4scz1vK24scjxzPy0xOnI9PXM/MDoxfWZ1bmN0aW9uIEZnKHQsZSl7dmFyIG4scixzO2lmKHM9T3NlKHQsZSkscz49MClyZXR1cm4gcztpZih0LkZrKCkpe2ZvcihyPTA7cjx0Lmk7KytyKWlmKG49dC5Hayh1KHQuZ1tyXSw1NikpLEd0KG4pPT09R3QoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gdTQodCxlLG4pe3ZhciByLHM7aWYocz10LmdjKCksZT49cyl0aHJvdyBydChuZXcgam0oZSxzKSk7aWYodC5oaSgpJiYocj10LlhjKG4pLHI+PTAmJnIhPWUpKXRocm93IHJ0KG5ldyBQbihYRCkpO3JldHVybiB0Lm1pKGUsbil9ZnVuY3Rpb24gTjN0KHQsZSl7aWYodGhpcy5hPXUoQXIodCksMjQ1KSx0aGlzLmI9dShBcihlKSwyNDUpLHQudmQoZSk+MHx8dD09KFF0dCgpLHB1dCl8fGU9PShYdHQoKSxidXQpKXRocm93IHJ0KG5ldyBQbigiSW52YWxpZCByYW5nZTogIitPWnQodCxlKSkpfWZ1bmN0aW9uIGVzZSh0KXt2YXIgZSxuO2Zvcih0aGlzLmI9bmV3IGxlLHRoaXMuYz10LHRoaXMuYT0hMSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHRoaXMuYT10aGlzLmF8ZS5rPT0oR24oKSxEcyl9ZnVuY3Rpb24gUWhuKHQsZSl7dmFyIG4scixzO2ZvcihuPUR2KG5ldyBVYix0KSxzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLDApLG4pLHIpKTtyZXR1cm4gbn1mdW5jdGlvbiBuc2UodCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgYXIobHIoKGU/am8odCk6TXModCkpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksMTcpLG89ZT9yLmMuaTpyLmQuaSxvLms9PShHbigpLFNsKSYma28obyxuKX1mdW5jdGlvbiBzeSgpe3N5PVosbFY9bmV3IFZSKEswLDApLGNodD1uZXcgVlIoIlBPUlRfUE9TSVRJT04iLDEpLHQ1PW5ldyBWUigiTk9ERV9TSVpFX1dIRVJFX1NQQUNFX1BFUk1JVFMiLDIpLEo0PW5ldyBWUigiTk9ERV9TSVpFIiwzKX1mdW5jdGlvbiBRZCgpe1FkPVosWmh0PW5ldyBlQygiQVVUT01BVElDIiwwKSwkTz1uZXcgZUMoZDYsMSksek89bmV3IGVDKGc2LDIpLEZWPW5ldyBlQygiVE9QIiwzKSxOVj1uZXcgZUMoWHh0LDQpLFBWPW5ldyBlQyhORSw1KX1mdW5jdGlvbiBQM3QodCxlLG4scil7YkUoKTt2YXIgcyxvO2ZvcihzPTAsbz0wO288bjtvKyspcz1PYShDYShQcyhlW29dLGNvKSxQcyhyLGNvKSksUHMoU3IocyksY28pKSx0W29dPVNyKHMpLHM9em0ocywzMik7cmV0dXJuIFNyKHMpfWZ1bmN0aW9uIEYzdCh0LGUsbil7dmFyIHIscztmb3Iocz0wLHI9MDtyPE51dDtyKyspcz1iLk1hdGgubWF4KHMsTWl0KHQuYVtlLmddW3JdLG4pKTtyZXR1cm4gZT09KEtmKCksdHUpJiZ0LmImJihzPWIuTWF0aC5tYXgocyx0LmIuYikpLHN9ZnVuY3Rpb24genoodCxlKXt2YXIgbixyO2lmKFAydChlPjApLChlJi1lKT09ZSlyZXR1cm4gcHMoZSpvbCh0LDMxKSo0NjU2NjEyODczMDc3MzkzZS0yNSk7ZG8gbj1vbCh0LDMxKSxyPW4lZTt3aGlsZShuLXIrKGUtMSk8MCk7cmV0dXJuIHBzKHIpfWZ1bmN0aW9uIEJnKHQpe2RLdCgpO3ZhciBlLG4scjtyZXR1cm4gbj0iOiIrdCxyPVlIW25dLHIhPW51bGw/cHMoKE9uKHIpLHIpKToocj1JRXRbbl0sZT1yPT1udWxsP3oybih0KTpwcygoT24ocikscikpLGJubigpLFlIW25dPWUsZSl9ZnVuY3Rpb24gcnNlKHQsZSxuKXt3cihuLCJDb21wb3VuZCBncmFwaCBwcmVwcm9jZXNzb3IiLDEpLHQuYT1uZXcgSHYsdWhlKHQsZSxudWxsKSxBeW4odCxlKSxsMm4odCksSnQoZSwoc2UoKSxYVHQpLHQuYSksdC5hPW51bGwsWXUodC5iKSxvcihuKX1mdW5jdGlvbiBaaG4odCxlLG4pe3N3aXRjaChuLmcpe2Nhc2UgMTp0LmE9ZS5hLzIsdC5iPTA7YnJlYWs7Y2FzZSAyOnQuYT1lLmEsdC5iPWUuYi8yO2JyZWFrO2Nhc2UgMzp0LmE9ZS5hLzIsdC5iPWUuYjticmVhaztjYXNlIDQ6dC5hPTAsdC5iPWUuYi8yfX1mdW5jdGlvbiBKaG4odCl7dmFyIGUsbixyO2ZvcihyPXUoQWkodC5hLChnNCgpLElHKSksMTUpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDEwMSksZT1XM3QobiksdzgodCxuLGVbMF0sKEp2KCksU3cpLDApLHc4KHQsbixlWzFdLEF3LDEpfWZ1bmN0aW9uIHRmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dShBaSh0LmEsKGc0KCksREcpKSwxNSkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTAxKSxlPVczdChuKSx3OCh0LG4sZVswXSwoSnYoKSxTdyksMCksdzgodCxuLGVbMV0sQXcsMSl9ZnVuY3Rpb24gaXN0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIG5ldyBybmU7Y2FzZSAyOnJldHVybiBuZXcgVnB0O2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIFlJKHQsZSxuKXt2YXIgcixzO2ZvcihrY24odCxlLXQucyxuLXQudCkscz1uZXcgUyh0Lm4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDIxMSksaHgocixyLmUrZS10LnMpLGZwdChyLHIuZituLXQudCk7dC5zPWUsdC50PW59ZnVuY3Rpb24gZWZuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49MCxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSxyLmQ9bisrO3JldHVybiBlPUQwbih0KSxvPW51bGwsZS5jLmxlbmd0aD4xJiYobz1RaG4odCxlKSksb31mdW5jdGlvbiBzc3QodCl7dmFyIGU7cmV0dXJuIHQuZiYmdC5mLmtoKCkmJihlPXUodC5mLDQ5KSx0LmY9dShLcCh0LGUpLDgyKSx0LmYhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksOCxlLHQuZikpKSx0LmZ9ZnVuY3Rpb24gYXN0KHQpe3ZhciBlO3JldHVybiB0LmkmJnQuaS5raCgpJiYoZT11KHQuaSw0OSksdC5pPXUoS3AodCxlKSw4MiksdC5pIT1lJiZ0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCw5LDcsZSx0LmkpKSksdC5pfWZ1bmN0aW9uIG5vKHQpe3ZhciBlO3JldHVybiB0LmImJnQuYi5EYiY2NCYmKGU9dC5iLHQuYj11KEtwKHQsZSksMTgpLHQuYiE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsOSwyMSxlLHQuYikpKSx0LmJ9ZnVuY3Rpb24gcXoodCxlKXt2YXIgbixyLHM7dC5kPT1udWxsPygrK3QuZSwrK3QuZik6KHI9ZS5TaCgpLHYybih0LHQuZisxKSxzPShyJnZpKSV0LmQubGVuZ3RoLG49dC5kW3NdLCFuJiYobj10LmRbc109dC51aigpKSxuLkZjKGUpLCsrdC5mKX1mdW5jdGlvbiBCM3QodCxlLG4pe3ZhciByO3JldHVybiBlLktqKCk/ITE6ZS5aaigpIT0tMj8ocj1lLnpqKCkscj09bnVsbD9uPT1udWxsOnlpKHIsbikpOmUuSGooKT09dC5lLlRnKCkmJm49PW51bGx9ZnVuY3Rpb24gSHooKXt2YXIgdDtCbCgxNixKaGUpLHQ9S2VlKDE2KSx0aGlzLmI9UHQod3V0LExELDMxNyx0LDAsMSksdGhpcy5jPVB0KHd1dCxMRCwzMTcsdCwwLDEpLHRoaXMuYT1udWxsLHRoaXMuZT1udWxsLHRoaXMuaT0wLHRoaXMuZj10LTEsdGhpcy5nPTB9ZnVuY3Rpb24gSDAodCl7ZXZ0LmNhbGwodGhpcyksdGhpcy5rPShHbigpLERzKSx0aGlzLmo9KEJsKDYsbXkpLG5ldyBZYyg2KSksdGhpcy5iPShCbCgyLG15KSxuZXcgWWMoMikpLHRoaXMuZD1uZXcgVnR0LHRoaXMuZj1uZXcgRnB0LHRoaXMuYT10fWZ1bmN0aW9uIG5mbih0KXt2YXIgZSxuO3QuYy5sZW5ndGg8PTF8fChlPWV1ZSh0LChiZSgpLG1yKSksSGFlKHQsdShlLmEsMTkpLmEsdShlLmIsMTkpLmEpLG49ZXVlKHQsQm4pLEhhZSh0LHUobi5hLDE5KS5hLHUobi5iLDE5KS5hKSl9ZnVuY3Rpb24gYV8oKXthXz1aLEFDdD1uZXcgVE0oIlNJTVBMRSIsMCksbGh0PW5ldyBUTShqb3QsMSksaGh0PW5ldyBUTSgiTElORUFSX1NFR01FTlRTIiwyKSxBUz1uZXcgVE0oIkJSQU5ERVNfS09FUEYiLDMpLExTPW5ldyBUTShDMWUsNCl9ZnVuY3Rpb24gUjN0KHQsZSxuKXtEeCh1KFEoZSwoVGUoKSxvcykpLDk4KSl8fChEbXQodCxlLFJnKGUsbikpLERtdCh0LGUsUmcoZSwoYmUoKSxtcikpKSxEbXQodCxlLFJnKGUsTm4pKSx2bigpLFhzKGUuaixuZXcgYU0odCkpKX1mdW5jdGlvbiBpc2UodCxlLG4scil7dmFyIHMsbyxoO2ZvcihzPXUoQWkocj90LmE6dC5iLGUpLDIxKSxoPXMuS2MoKTtoLk9iKCk7KWlmKG89dShoLlBiKCksMzMpLGRxKHQsbixvKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvc3QodCl7dmFyIGUsbjtmb3Iobj1uZXcgZXIodCk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDg3KSxlLmV8fCghZS5kJiYoZS5kPW5ldyBTcyhobyxlLDEpKSxlLmQpLmkhPTApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY3N0KHQpe3ZhciBlLG47Zm9yKG49bmV3IGVyKHQpO24uZSE9bi5pLmdjKCk7KWlmKGU9dShkcihuKSw4NyksZS5lfHwoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKS5pIT0wKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJmbih0KXt2YXIgZSxuLHI7Zm9yKGU9MCxyPW5ldyBTKHQuYy5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksZSs9TjAobmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpKTtyZXR1cm4gZS90LmMuYS5jLmxlbmd0aH1mdW5jdGlvbiBzc2UodCl7dmFyIGUsbjtmb3IodC5jfHxoM24odCksbj1uZXcgRHUsZT1uZXcgUyh0LmEpLEooZSk7ZS5hPGUuYy5jLmxlbmd0aDspbmkobix1KEooZSksNDA3KS5hKTtyZXR1cm4gUW4obi5iIT0wKSxjaChuLG4uYy5iKSxufWZ1bmN0aW9uIHVzdCgpe3VzdD1aLGdTdD0obmF0KCksbFN0KSxkU3Q9bmV3IE12KDgpLG5ldyBlbygoY2koKSxxMiksZFN0KSxuZXcgZW8oSDIsOCksQzNlPWNTdCxoU3Q9djNlLGZTdD13M2UsVDNlPW5ldyBlbyhVTywoRm4oKSwhMSkpfWZ1bmN0aW9uIGozdCh0LGUsbixyKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZH1yZXR1cm4gczN0KHQsZSxuLHIpfWZ1bmN0aW9uIGxzdCh0KXt2YXIgZTtyZXR1cm4gdC5hJiZ0LmEua2goKSYmKGU9dSh0LmEsNDkpLHQuYT11KEtwKHQsZSksMTM4KSx0LmEhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksNSxlLHQuYSkpKSx0LmF9ZnVuY3Rpb24gYjIodCl7cmV0dXJuIHQ8NDh8fHQ+MTAyPy0xOnQ8PTU3P3QtNDg6dDw2NT8tMTp0PD03MD90LTY1KzEwOnQ8OTc/LTE6dC05NysxMH1mdW5jdGlvbiBoc3QodCxlKXtpZih0PT1udWxsKXRocm93IHJ0KG5ldyB5eCgibnVsbCBrZXkgaW4gZW50cnk6IG51bGw9IitlKSk7aWYoZT09bnVsbCl0aHJvdyBydChuZXcgeXgoIm51bGwgdmFsdWUgaW4gZW50cnk6ICIrdCsiPW51bGwiKSl9ZnVuY3Rpb24gaWZuKHQsZSl7Zm9yKHZhciBuLHI7dC5PYigpOylpZighZS5PYigpfHwobj10LlBiKCkscj1lLlBiKCksIShHdChuKT09PUd0KHIpfHxuIT1udWxsJiZ5aShuLHIpKSkpcmV0dXJuITE7cmV0dXJuIWUuT2IoKX1mdW5jdGlvbiBhc2UodCxlKXt2YXIgbjtyZXR1cm4gbj1jdChvdChpYSwxKSx2bywyNSwxNSxbTWl0KHQuYVswXSxlKSxNaXQodC5hWzFdLGUpLE1pdCh0LmFbMl0sZSldKSx0LmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gb3NlKHQsZSl7dmFyIG47cmV0dXJuIG49Y3Qob3QoaWEsMSksdm8sMjUsMTUsW3d6KHQuYVswXSxlKSx3eih0LmFbMV0sZSksd3oodC5hWzJdLGUpXSksdC5kJiYoblswXT1iLk1hdGgubWF4KG5bMF0sblsyXSksblsyXT1uWzBdKSxufWZ1bmN0aW9uIHYyKCl7djI9WixtbHQ9bmV3IEVNKCJHUkVFRFkiLDApLFNUdD1uZXcgRU0oaDFlLDEpLHlsdD1uZXcgRU0oam90LDIpLHBTPW5ldyBFTSgiTU9ERUxfT1JERVIiLDMpLGdTPW5ldyBFTSgiR1JFRURZX01PREVMX09SREVSIiw0KX1mdW5jdGlvbiBjc2UodCxlKXt2YXIgbixyLHM7Zm9yKHQuYltlLmddPTEscj1laShlLmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCkscz1uLmMsdC5iW3MuZ109PTE/bmkodC5hLG4pOnQuYltzLmddPT0yP3QuYltzLmddPTE6Y3NlKHQscyl9ZnVuY3Rpb24gc2ZuKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBZYyhlLmdjKCkpLHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyODYpLG4uYz09bi5mP3BFKHQsbixuLmMpOnJnbih0LG4pfHwocy5jW3MuYy5sZW5ndGhdPW4pO3JldHVybiBzfWZ1bmN0aW9uIGFmbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoZD10LnIrZSx0LnIrPWUsdC5kKz1uLHI9bi90Lm4uYy5sZW5ndGgscz0wLGg9bmV3IFModC5uKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMTEpLHBibihvLGQscixzKSwrK3N9ZnVuY3Rpb24gb2ZuKHQpe3ZhciBlLG4scjtmb3IoTzkodC5iLmEpLHQuYT1QdChYSCxJZSw1Nyx0LmMuYy5hLmIuYy5sZW5ndGgsMCwxKSxlPTAscj1uZXcgUyh0LmMuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmY9ZSsrfWZ1bmN0aW9uIGNmbih0KXt2YXIgZSxuLHI7Zm9yKE85KHQuYi5hKSx0LmE9UHQoWXV0LEllLDgxLHQuYy5hLmEuYi5jLmxlbmd0aCwwLDEpLGU9MCxyPW5ldyBTKHQuYy5hLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksODEpLG4uaT1lKyt9ZnVuY3Rpb24gdWZuKHQsZSxuKXt2YXIgcjt3cihuLCJTaHJpbmtpbmcgdHJlZSBjb21wYWN0aW9uIiwxKSxqZShSZShRKGUsKEc4KCksdVMpKSkpPyhFb24odCxlLmYpLHp0ZShlLmYsKHI9ZS5jLHIpKSk6enRlKGUuZixlLmMpLG9yKG4pfWZ1bmN0aW9uIHVzZSh0KXt2YXIgZTtpZihlPXV1bih0KSwhenIodCkpdGhyb3cgcnQobmV3IG1vKCJwb3NpdGlvbiAoMCkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHJlbWFpbmVkICgiK2UrIikiKSk7cmV0dXJuIExyKHQpfWZ1bmN0aW9uIGxzZSh0LGUsbil7dmFyIHI7dHJ5e3JldHVybiBsNCh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gbGZuKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGRzZSh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gaGZuKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGdzZSh0LGUrdC5qLG4rdC5rKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24gaHNlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYmUoKSxCbjtjYXNlIDQ6cmV0dXJuIGJlKCksTm47Y2FzZSAzOnJldHVybiBiZSgpLEhuO2Nhc2UgMjpyZXR1cm4gYmUoKSxtcjtkZWZhdWx0OnJldHVybiBiZSgpLFpvfX1mdW5jdGlvbiBmZm4odCxlLG4pe2Uuaz09KEduKCksRHMpJiZuLms9PVpzJiYodC5kPU5pdChlLChiZSgpLG1yKSksdC5iPU5pdChlLE5uKSksbi5rPT1EcyYmZS5rPT1acyYmKHQuZD1OaXQobiwoYmUoKSxObikpLHQuYj1OaXQobixtcikpfWZ1bmN0aW9uIGZzdCh0LGUpe3ZhciBuLHIscztmb3Iocz1Zbyh0LGUpLHI9cy5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwxMSksUShuLChzZSgpLFp1KSkhPW51bGx8fHBDKG5ldyBTMShuLmIpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkM3QodCxlKXtyZXR1cm4geXUoZSx0LmUrdC5kKyh0LmMuYy5sZW5ndGg9PTA/MDp0LmIpKSx4dShlLHQuZiksdC5hPWIuTWF0aC5tYXgodC5hLGUuZiksdC5kKz1lLmcrKHQuYy5jLmxlbmd0aD09MD8wOnQuYiksdWUodC5jLGUpLCEwfWZ1bmN0aW9uIGRmbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9MCxyPW4vdC5hLmMubGVuZ3RoLG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxODcpLFlJKHMscy5zLHMudCtoKnIpLGFmbihzLHQuZC1zLnIrZSxyKSwrK2h9ZnVuY3Rpb24gZ2ZuKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLGU9MCxvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLHMucD1lKyt9ZnVuY3Rpb24gcGZuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihzPWUubGVuZ3RoLTEsaD0wLGQ9MCxyPTA7cjw9cztyKyspbz1lW3JdLG49TjBuKHMscikqR3l0KDEtdCxzLXIpKkd5dCh0LHIpLGgrPW8uYSpuLGQrPW8uYipuO3JldHVybiBuZXcgJGUoaCxkKX1mdW5jdGlvbiBmc2UodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihuPWUuZ2MoKSx0LnFpKHQuaStuKSxvPWUuS2MoKSxoPXQuaSx0LmkrPW4scj1oO3I8dC5pOysrcilzPW8uUGIoKSxmQyh0LHIsdC5vaShyLHMpKSx0LmJpKHIscyksdC5jaSgpO3JldHVybiBuIT0wfWZ1bmN0aW9uIGJmbih0LGUsbil7dmFyIHIscyxvO3JldHVybiB0LmVqKCk/KHI9dC5WaSgpLG89dC5maigpLCsrdC5qLHQuSGkocix0Lm9pKHIsZSkpLHM9dC5aaSgzLG51bGwsZSxyLG8pLG4/bi5FaShzKTpuPXMpOkFXdCh0LHQuVmkoKSxlKSxufWZ1bmN0aW9uIHZmbih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPXUoU3QoTGModC5hKSxlKSw4Nyksbz0ocz1yLmMsRXQocyw4OCk/dShzLDI2KTooZG4oKSxXaCkpLChvLkRiJjY0P0twKHQuYixvKTpvKT09bj93cShyKTpQOChyLG4pLG99ZnVuY3Rpb24gejN0KHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsaztyJiYodz1yLmFbMF0sdyYmejN0KHQsZSxuLHcscyxvLGgsZCksVmZuKHQsbixyLmQscyxvLGgsZCkmJmUuRmMociksaz1yLmFbMV0sayYmejN0KHQsZSxuLGsscyxvLGgsZCkpfWZ1bmN0aW9uIHdmbih0LGUpe3ZhciBuO3JldHVybiB0LmF8fChuPVB0KGlhLHZvLDI1LDAsMTUsMSksQjModC5iLmEsbmV3IG5lKG4pKSxuLnNvcnQod2VlKHh0LnByb3RvdHlwZS50ZSx4dCxbXSkpLHQuYT1uZXcgYUt0KG4sdC5kKSksTSQodC5hLGUpfWZ1bmN0aW9uIGw0KHQsZSxuKXt0cnl7cmV0dXJuIEF2KGFpdCh0LGUsbiksMSl9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxFdChyLDMyMCk/cnQobmV3IG1vKFRvdCt0Lm8rIioiK3QucCtDb3QrZStLYStuK19vdCkpOnJ0KHIpfX1mdW5jdGlvbiBkc2UodCxlLG4pe3RyeXtyZXR1cm4gQXYoYWl0KHQsZSxuKSwwKX1jYXRjaChyKXt0aHJvdyByPVdpKHIpLEV0KHIsMzIwKT9ydChuZXcgbW8oVG90K3QubysiKiIrdC5wK0NvdCtlK0thK24rX290KSk6cnQocil9fWZ1bmN0aW9uIGdzZSh0LGUsbil7dHJ5e3JldHVybiBBdihhaXQodCxlLG4pLDIpfWNhdGNoKHIpe3Rocm93IHI9V2kociksRXQociwzMjApP3J0KG5ldyBtbyhUb3QrdC5vKyIqIit0LnArQ290K2UrS2Erbitfb3QpKTpydChyKX19ZnVuY3Rpb24gcHNlKHQsZSl7aWYodC5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3QubWooKTt0cnl7dC5kLl9jKHQuZyxlKSx0LmY9dC5kLmp9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxFdChuLDczKT9ydChuZXcgZWgpOnJ0KG4pfX1mdW5jdGlvbiBtZm4odCxlLG4pe3dyKG4sIkxpbmVhciBzZWdtZW50cyBub2RlIHBsYWNlbWVudCIsMSksdC5iPXUoUShlLChzZSgpLFk0KSksMzA0KSxPNW4odCxlKSxieW4odCxlKSxEeW4odCxlKSxmNW4odCksdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gWEkodCxlKXt2YXIgbixyLHMsbztmb3Iobz10LmdjKCksZS5sZW5ndGg8byYmKGU9d1IobmV3IEFycmF5KG8pLGUpKSxzPWUscj10LktjKCksbj0wO248bzsrK24pSmkocyxuLHIuUGIoKSk7cmV0dXJuIGUubGVuZ3RoPm8mJkppKGUsbyxudWxsKSxlfWZ1bmN0aW9uIHlmbih0LGUpe3ZhciBuLHI7aWYocj10LmdjKCksZT09bnVsbCl7Zm9yKG49MDtuPHI7bisrKWlmKHQuWGIobik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iobj0wO248cjtuKyspaWYoeWkoZSx0LlhiKG4pKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBkc3QodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49ZS5jZCgpLHM9ZS5kZCgpLHI9dC54YyhuKSwhKCEoR3Qocyk9PT1HdChyKXx8cyE9bnVsbCYmeWkocyxyKSl8fHI9PW51bGwmJiF0Ll9iKG4pKX1mdW5jdGlvbiB4Zm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIGU8PTIyPyhuPXQubCYoMTw8ZSktMSxyPXM9MCk6ZTw9NDQ/KG49dC5sLHI9dC5tJigxPDxlLTIyKS0xLHM9MCk6KG49dC5sLHI9dC5tLHM9dC5oJigxPDxlLTQ0KS0xKSxydShuLHIscyl9ZnVuY3Rpb24ga2ZuKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiB0LmYubi5kK3QudDtjYXNlIDM6cmV0dXJuIHQuZi5uLmErdC50O2Nhc2UgMjpyZXR1cm4gdC5mLm4uYyt0LnM7Y2FzZSA0OnJldHVybiB0LmYubi5iK3QucztkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBFZm4odCxlKXt2YXIgbixyO3N3aXRjaChyPWUuYyxuPWUuYSx0LmIuZyl7Y2FzZSAwOm4uZD10LmUtci5hLXIuZDticmVhaztjYXNlIDE6bi5kKz10LmU7YnJlYWs7Y2FzZSAyOm4uYz10LmUtci5hLXIuZDticmVhaztjYXNlIDM6bi5jPXQuZStyLmR9fWZ1bmN0aW9uIHEzdCh0LGUsbixyKXt2YXIgcyxvO3RoaXMuYT1lLHRoaXMuYz1yLHM9dC5hLHJwdCh0aGlzLG5ldyAkZSgtcy5jLC1zLmQpKSxMaSh0aGlzLmIsbiksbz1yLzIsZS5hP0JNKHRoaXMuYiwwLG8pOkJNKHRoaXMuYixvLDApLHVlKHQuYyx0aGlzKX1mdW5jdGlvbiBHeigpe0d6PVosUmh0PW5ldyBXUihLMCwwKSxfX3Q9bmV3IFdSKGYxZSwxKSxTX3Q9bmV3IFdSKCJFREdFX0xFTkdUSF9CWV9QT1NJVElPTiIsMiksQ190PW5ldyBXUigiQ1JPU1NJTkdfTUlOSU1JWkFUSU9OX0JZX1BPU0lUSU9OIiwzKX1mdW5jdGlvbiBnc3QodCxlKXt2YXIgbixyO2lmKG49dSh0NCh0LmcsZSksMzMpLG4pcmV0dXJuIG47aWYocj11KHQ0KHQuaixlKSwxMTgpLHIpcmV0dXJuIHI7dGhyb3cgcnQobmV3IGFkKCJSZWZlcmVuY2VkIHNoYXBlIGRvZXMgbm90IGV4aXN0OiAiK2UpKX1mdW5jdGlvbiBUZm4odCxlKXtpZih0LmM9PWUpcmV0dXJuIHQuZDtpZih0LmQ9PWUpcmV0dXJuIHQuYzt0aHJvdyBydChuZXcgUG4oIk5vZGUgJ29uZScgbXVzdCBiZSBlaXRoZXIgc291cmNlIG9yIHRhcmdldCBvZiBlZGdlICdlZGdlJy4iKSl9ZnVuY3Rpb24gQ2ZuKHQsZSl7aWYodC5jLmk9PWUpcmV0dXJuIHQuZC5pO2lmKHQuZC5pPT1lKXJldHVybiB0LmMuaTt0aHJvdyBydChuZXcgUG4oIk5vZGUgIitlKyIgaXMgbmVpdGhlciBzb3VyY2Ugbm9yIHRhcmdldCBvZiBlZGdlICIrdCkpfWZ1bmN0aW9uIF9mbih0LGUpe3ZhciBuO3N3aXRjaChlLmcpe2Nhc2UgMjpjYXNlIDQ6bj10LmEsdC5jLmQubi5iPG4uZC5uLmImJihuPXQuYyksX2codCxlLChNMSgpLG9sdCksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpfZyh0LGUsKE0xKCksXzYpLG51bGwpfX1mdW5jdGlvbiBwc3QodCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEM7Zm9yKGg9TDFuKGUsbixvKSxkPW49PShiZSgpLE5uKXx8bj09Qm4/LTE6MSxrPXRbbi5nXSxDPTA7QzxrLmxlbmd0aDtDKyspdz1rW0NdLHc+MCYmKHcrPXMpLGtbQ109aCxoKz1kKih3K3IpfWZ1bmN0aW9uIGJzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9dC5mLHQubj1QdChpYSx2bywyNSxyLDE1LDEpLHQuZD1QdChpYSx2bywyNSxyLDE1LDEpLGU9MDtlPHI7ZSsrKW49dShGZSh0LmMuYixlKSwyOSksdC5uW2VdPVVpZSh0LG4pLHQuZFtlXT1TY2UodCxuKX1mdW5jdGlvbiBic3QodCxlKXt2YXIgbixyLHM7Zm9yKHM9MCxyPTI7cjxlO3I8PD0xKXQuRGImciYmKytzO2lmKHM9PTApe2ZvcihuPWU8PD0xO248PTEyODtuPDw9MSlpZih0LkRiJm4pcmV0dXJuIDA7cmV0dXJuLTF9ZWxzZSByZXR1cm4gc31mdW5jdGlvbiB2c2UodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPWF1KHQuZS5UZygpLGUpLG89bnVsbCxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylyPW5bc10saC5ybChyLmFrKCkpJiYoIW8mJihvPW5ldyB0eCksTXIobyxyKSk7byYmTGhlKHQsbyl9ZnVuY3Rpb24gd3NlKHQpe3ZhciBlLG4scjtpZighdClyZXR1cm4gbnVsbDtpZih0LmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IHhnLG49dC5LYygpO24uT2IoKTspZT1uLlBiKCksZm8ocixCcihlKSksci5hKz0iICI7cmV0dXJuIFdldChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gSDN0KHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihEY24odCkscz0odC5rPT1udWxsJiYodC5rPVB0KHl1dCx0ZSw3OCwwLDAsMSkpLHQuayksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sSDN0KHIpO2Q9dC5mLGQmJkgzdChkKX1mdW5jdGlvbiBtc2UodCxlKXt2YXIgbj1uZXcgQXJyYXkoZSkscjtzd2l0Y2godCl7Y2FzZSAxNDpjYXNlIDE1OnI9MDticmVhaztjYXNlIDE2OnI9ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbn1mb3IodmFyIHM9MDtzPGU7KytzKW5bc109cjtyZXR1cm4gbn1mdW5jdGlvbiBvdyh0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmMuJGIoKTtPcCh0LmQpP3I9dC5hLmM6cj10LmEuZCxtdShyLG5ldyB2cih0KSksdC5jLk1lKHQpLEdjZSh0KX1mdW5jdGlvbiB5c2UodCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IFModC5lLmMpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IoZT11KEoobiksMjgyKSxzPW5ldyBTKGUuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNDQ3KSxheHQocik7Zm9lKGUpfX1mdW5jdGlvbiBWeih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPTAsbz0wLHM9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxvPWIuTWF0aC5tYXgobyxlLnIpLHIrPWUuZCsocz4wP3QuYzowKSwrK3M7dC5iPXIsdC5kPW99ZnVuY3Rpb24gU2ZuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0wLHM9MCxuPTAsaD1uZXcgUyhlKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyMDApLHI9Yi5NYXRoLm1heChyLG8uZSkscys9by5iKyhuPjA/dC5nOjApLCsrbjt0LmM9cyx0LmQ9cn1mdW5jdGlvbiB4c2UodCxlKXt2YXIgbjtyZXR1cm4gbj1jdChvdChpYSwxKSx2bywyNSwxNSxbRjN0KHQsKEtmKCksc2MpLGUpLEYzdCh0LHR1LGUpLEYzdCh0LGFjLGUpXSksdC5mJiYoblswXT1iLk1hdGgubWF4KG5bMF0sblsyXSksblsyXT1uWzBdKSxufWZ1bmN0aW9uIEFmbih0LGUsbil7dmFyIHI7dHJ5e2JxKHQsZSt0Lmosbit0LmssITEsITApfWNhdGNoKHMpe3Rocm93IHM9V2kocyksRXQocyw3Myk/KHI9cyxydChuZXcgbW8oci5nKyRxK2UrS2ErbisiKS4iKSkpOnJ0KHMpfX1mdW5jdGlvbiBMZm4odCxlLG4pe3ZhciByO3RyeXticSh0LGUrdC5qLG4rdC5rLCEwLCExKX1jYXRjaChzKXt0aHJvdyBzPVdpKHMpLEV0KHMsNzMpPyhyPXMscnQobmV3IG1vKHIuZyskcStlK0thK24rIikuIikpKTpydChzKX19ZnVuY3Rpb24ga3NlKHQpe3ZhciBlO1ZzKHQsKFRlKCksT3cpKSYmKGU9dShRKHQsT3cpLDIxKSxlLkhjKChmeSgpLEVmKSk/KGUuTWMoRWYpLGUuRmMoVGYpKTplLkhjKFRmKSYmKGUuTWMoVGYpLGUuRmMoRWYpKSl9ZnVuY3Rpb24gRXNlKHQpe3ZhciBlO1ZzKHQsKFRlKCksT3cpKSYmKGU9dShRKHQsT3cpLDIxKSxlLkhjKChmeSgpLF9mKSk/KGUuTWMoX2YpLGUuRmMoemgpKTplLkhjKHpoKSYmKGUuTWMoemgpLGUuRmMoX2YpKSl9ZnVuY3Rpb24gTWZuKHQsZSxuKXt3cihuLCJTZWxmLUxvb3Agb3JkZXJpbmciLDEpLHVzKHB1KFJpKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgY0YpLG5ldyBVWSksbmV3IFdZKSxuZXcgS1kpLG5ldyBfbSh0KSksb3Iobil9ZnVuY3Rpb24gUUkodCxlLG4scil7dmFyIHMsbztmb3Iocz1lO3M8dC5jLmxlbmd0aDtzKyspaWYobz0oQW4ocyx0LmMubGVuZ3RoKSx1KHQuY1tzXSwxMSkpLG4uTWIobykpci5jW3IuYy5sZW5ndGhdPW87ZWxzZSByZXR1cm4gcztyZXR1cm4gdC5jLmxlbmd0aH1mdW5jdGlvbiB2c3QodCxlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIHQuYT09bnVsbCYmTzBuKHQsZSksaD1lLmIuai5jLmxlbmd0aCxvPW4uZC5wLGQ9ci5kLnAscz1kLTEsczwwJiYocz1oLTEpLG88PXM/dC5hW3NdLXQuYVtvXTp0LmFbaC0xXS10LmFbb10rdC5hW3NdfWZ1bmN0aW9uIElmbih0KXt2YXIgZSxuO2lmKCF0LmIpZm9yKHQuYj15JCh1KHQuZiwzMykuQWcoKS5pKSxuPW5ldyBlcih1KHQuZiwzMykuQWcoKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDEzNyksdWUodC5iLG5ldyBuZXQoZSkpO3JldHVybiB0LmJ9ZnVuY3Rpb24gRGZuKHQpe3ZhciBlLG47aWYoIXQuZSlmb3IodC5lPXkkKFpudCh1KHQuZiwzMykpLmkpLG49bmV3IGVyKFpudCh1KHQuZiwzMykpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTE4KSx1ZSh0LmUsbmV3IEV6dChlKSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBUc2UodCl7dmFyIGUsbjtpZighdC5hKWZvcih0LmE9eSQoaSQodSh0LmYsMzMpKS5pKSxuPW5ldyBlcihpJCh1KHQuZiwzMykpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLHVlKHQuYSxuZXcgcm50KHQsZSkpO3JldHVybiB0LmF9ZnVuY3Rpb24gY3codCl7dmFyIGU7aWYoIXQuQyYmKHQuRCE9bnVsbHx8dC5CIT1udWxsKSlpZihlPUozbih0KSxlKXQueWsoZSk7ZWxzZSB0cnl7dC55ayhudWxsKX1jYXRjaChuKXtpZihuPVdpKG4pLCFFdChuLDYwKSl0aHJvdyBydChuKX1yZXR1cm4gdC5DfWZ1bmN0aW9uIE9mbih0KXtzd2l0Y2godC5xLmcpe2Nhc2UgNTpLc2UodCwoYmUoKSxObikpLEtzZSh0LG1yKTticmVhaztjYXNlIDQ6JGxlKHQsKGJlKCksTm4pKSwkbGUodCxtcik7YnJlYWs7ZGVmYXVsdDpZYWUodCwoYmUoKSxObikpLFlhZSh0LG1yKX19ZnVuY3Rpb24gTmZuKHQpe3N3aXRjaCh0LnEuZyl7Y2FzZSA1OllzZSh0LChiZSgpLEhuKSksWXNlKHQsQm4pO2JyZWFrO2Nhc2UgNDp6bGUodCwoYmUoKSxIbikpLHpsZSh0LEJuKTticmVhaztkZWZhdWx0OlhhZSh0LChiZSgpLEhuKSksWGFlKHQsQm4pfX1mdW5jdGlvbiBoNCh0LGUpe3ZhciBuLHIscztmb3Iocz1uZXcgVGEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDM3KSx3XyhuLHMuYSwwKSxzLmErPW4uZi5hK2Uscy5iPWIuTWF0aC5tYXgocy5iLG4uZi5iKTtyZXR1cm4gcy5iPjAmJihzLmIrPWUpLHN9ZnVuY3Rpb24gVXoodCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IFRhLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzNyksd18obiwwLHMuYikscy5iKz1uLmYuYitlLHMuYT1iLk1hdGgubWF4KHMuYSxuLmYuYSk7cmV0dXJuIHMuYT4wJiYocy5hKz1lKSxzfWZ1bmN0aW9uIENzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9dmksbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxWcyhlLChzZSgpLFRjKSkmJihyPWIuTWF0aC5taW4ocix1KFEoZSxUYyksMTkpLmEpKTtyZXR1cm4gcn1mdW5jdGlvbiBfc2UodCxlKXt2YXIgbixyO2lmKGUubGVuZ3RoPT0wKXJldHVybiAwO2ZvcihuPVFudCh0LmEsZVswXSwoYmUoKSxCbikpLG4rPVFudCh0LmEsZVtlLmxlbmd0aC0xXSxIbikscj0wO3I8ZS5sZW5ndGg7cisrKW4rPXYwbih0LHIsZSk7cmV0dXJuIG59ZnVuY3Rpb24gU3NlKCl7Yl8oKSx0aGlzLmM9bmV3IGxlLHRoaXMuaT1uZXcgbGUsdGhpcy5lPW5ldyBBMCx0aGlzLmY9bmV3IEEwLHRoaXMuZz1uZXcgQTAsdGhpcy5qPW5ldyBsZSx0aGlzLmE9bmV3IGxlLHRoaXMuYj1uZXcgQ3IsdGhpcy5rPW5ldyBDcn1mdW5jdGlvbiB3c3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nj90LkNiLmloKHQsNSxyMSxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fHQuemgoKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFBmbih0KXtUOCgpO3ZhciBlPXQuZTtpZihlJiZlLnN0YWNrKXt2YXIgbj1lLnN0YWNrLHI9ZStgCmA7cmV0dXJuIG4uc3Vic3RyaW5nKDAsci5sZW5ndGgpPT1yJiYobj1uLnN1YnN0cmluZyhyLmxlbmd0aCkpLG4uc3BsaXQoYApgKX1yZXR1cm5bXX1mdW5jdGlvbiBGZm4odCl7dmFyIGU7cmV0dXJuIGU9KHFlZSgpLGtnZSksZVt0Pj4+MjhdfGVbdD4+MjQmMTVdPDw0fGVbdD4+MjAmMTVdPDw4fGVbdD4+MTYmMTVdPDwxMnxlW3Q+PjEyJjE1XTw8MTZ8ZVt0Pj44JjE1XTw8MjB8ZVt0Pj40JjE1XTw8MjR8ZVt0JjE1XTw8Mjh9ZnVuY3Rpb24gQXNlKHQpe3ZhciBlLG4scjt0LmI9PXQuYyYmKHI9dC5hLmxlbmd0aCxuPVR5dChiLk1hdGgubWF4KDgscikpPDwxLHQuYiE9MD8oZT11Zih0LmEsbiksWGVlKHQsZSxyKSx0LmE9ZSx0LmI9MCk6WXp0KHQuYSxuKSx0LmM9cil9ZnVuY3Rpb24gQmZuKHQsZSl7dmFyIG47cmV0dXJuIG49dC5iLG4uWGUoKGNpKCksaGwpKT9uLkhmKCk9PShiZSgpLEJuKT8tbi5yZigpLmEtWHQoeWUobi5XZShobCkpKTplK1h0KHllKG4uV2UoaGwpKSk6bi5IZigpPT0oYmUoKSxCbik/LW4ucmYoKS5hOmV9ZnVuY3Rpb24gWkkodCl7dmFyIGU7cmV0dXJuIHQuYi5jLmxlbmd0aCE9MCYmdShGZSh0LmIsMCksNzApLmE/dShGZSh0LmIsMCksNzApLmE6KGU9cnJ0KHQpLGU/PyIiKyh0LmM/Um8odC5jLmEsdCwwKTotMSkpfWZ1bmN0aW9uIFd6KHQpe3ZhciBlO3JldHVybiB0LmYuYy5sZW5ndGghPTAmJnUoRmUodC5mLDApLDcwKS5hP3UoRmUodC5mLDApLDcwKS5hOihlPXJydCh0KSxlPz8iIisodC5pP1JvKHQuaS5qLHQsMCk6LTEpKX1mdW5jdGlvbiBSZm4odCxlKXt2YXIgbixyO2lmKGU8MHx8ZT49dC5nYygpKXJldHVybiBudWxsO2ZvcihuPWU7bjx0LmdjKCk7KytuKWlmKHI9dSh0LlhiKG4pLDEyOCksbj09dC5nYygpLTF8fCFyLm8pcmV0dXJuIG5ldyBsYShkZShuKSxyKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqZm4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89dC5jLGQ9bj9lOnQscj1uP3Q6ZSxzPWQucCsxO3M8ci5wOysrcylpZihoPXUoRmUoby5hLHMpLDEwKSwhKGguaz09KEduKCksajEpfHxkMW4oaCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEczdCh0KXt2YXIgZSxuLHIscyxvO2ZvcihvPTAscz1UcyxyPTAsbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE4Nyksbys9ZS5yKyhyPjA/dC5jOjApLHM9Yi5NYXRoLm1heChzLGUuZCksKytyO3QuZT1vLHQuYj1zfWZ1bmN0aW9uICRmbih0KXt2YXIgZSxuO2lmKCF0LmIpZm9yKHQuYj15JCh1KHQuZiwxMTgpLkFnKCkuaSksbj1uZXcgZXIodSh0LmYsMTE4KS5BZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSx1ZSh0LmIsbmV3IG5ldChlKSk7cmV0dXJuIHQuYn1mdW5jdGlvbiB6Zm4odCxlKXt2YXIgbixyLHM7aWYoZS5kYygpKXJldHVybiBmOCgpLGY4KCksbE47Zm9yKG49bmV3IElXdCh0LGUuZ2MoKSkscz1uZXcgZXIodCk7cy5lIT1zLmkuZ2MoKTspcj1kcihzKSxlLkhjKHIpJiZNcihuLHIpO3JldHVybiBufWZ1bmN0aW9uIFYzdCh0LGUsbixyKXtyZXR1cm4gZT09MD9yPyghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksdC5vKTooIXQubyYmKHQubz1uZXcgVGwoKFpjKCksRWIpLCR3LHQsMCkpLGZJKHQubykpOmp6KHQsZSxuLHIpfWZ1bmN0aW9uIG1zdCh0KXt2YXIgZSxuO2lmKHQucmIpZm9yKGU9MCxuPXQucmIuaTtlPG47KytlKUZNKFN0KHQucmIsZSkpO2lmKHQudmIpZm9yKGU9MCxuPXQudmIuaTtlPG47KytlKUZNKFN0KHQudmIsZSkpO2tDKChSdSgpLG1hKSx0KSx0LkJifD0xfWZ1bmN0aW9uIEZpKHQsZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCl7cmV0dXJuIGlvZSh0LGUscixudWxsLHMsbyxoLGQsdyxrLEYsITAsSCksZTN0KHQsQyksRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDIpLG4mJmV5dCh0LG4pLG4zdCh0LE0pLHR9ZnVuY3Rpb24gcWZuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249JGwodCxfYSx2aSkmbXN9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDEyNykpZT1SJCh0KSxuPWVbMF07ZWxzZSB0aHJvdyBydChyKX1yZXR1cm4gREkobil9ZnVuY3Rpb24gSGZuKHQpe3ZhciBlLG47aWYodD09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249JGwodCxfYSx2aSkmbXN9Y2F0Y2gocil7aWYocj1XaShyKSxFdChyLDEyNykpZT1SJCh0KSxuPWVbMF07ZWxzZSB0aHJvdyBydChyKX1yZXR1cm4gREkobil9ZnVuY3Rpb24gR2ZuKHQsZSl7dmFyIG4scixzO3JldHVybiBzPXQuaC1lLmgsczwwfHwobj10LmwtZS5sLHI9dC5tLWUubSsobj4+MjIpLHMrPXI+PjIyLHM8MCk/ITE6KHQubD1uJnVsLHQubT1yJnVsLHQuaD1zJlcwLCEwKX1mdW5jdGlvbiBWZm4odCxlLG4scixzLG8saCl7dmFyIGQsdztyZXR1cm4hKGUuQWUoKSYmKHc9dC5hLnVlKG4sciksdzwwfHwhcyYmdz09MCl8fGUuQmUoKSYmKGQ9dC5hLnVlKG4sbyksZD4wfHwhaCYmZD09MCkpfWZ1bmN0aW9uIFVmbih0LGUpe0o4KCk7dmFyIG47aWYobj10LmouZy1lLmouZyxuIT0wKXJldHVybiAwO3N3aXRjaCh0LmouZyl7Y2FzZSAyOnJldHVybiBxaXQoZSxtVHQpLXFpdCh0LG1UdCk7Y2FzZSA0OnJldHVybiBxaXQodCx3VHQpLXFpdChlLHdUdCl9cmV0dXJuIDB9ZnVuY3Rpb24gV2ZuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4ga2x0O2Nhc2UgMTpyZXR1cm4gRWx0O2Nhc2UgMjpyZXR1cm4gVGx0O2Nhc2UgMzpyZXR1cm4gQ2x0O2Nhc2UgNDpyZXR1cm4gUEc7Y2FzZSA1OnJldHVybiBfbHQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gQ28odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9KHM9bmV3IEt0dCxmMihzLGUpLFhjKHMsbiksTXIoKCF0LmMmJih0LmM9bmV3IGhlKHp3LHQsMTIsMTApKSx0LmMpLHMpLHMpLElnKHIsMCksdHkociwxKSxQZyhyLCEwKSxOZyhyLCEwKSxyfWZ1bmN0aW9uIHI2KHQsZSl7dmFyIG4scjtpZihlPj10LmkpdGhyb3cgcnQobmV3IFZldChlLHQuaSkpO3JldHVybisrdC5qLG49dC5nW2VdLHI9dC5pLWUtMSxyPjAmJkljKHQuZyxlKzEsdC5nLGUsciksSmkodC5nLC0tdC5pLG51bGwpLHQuZmkoZSxuKSx0LmNpKCksbn1mdW5jdGlvbiBMc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTc/dC5DYi5paCh0LDIxLEdoLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8dC56aCgpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gS2ZuKHQpe3ZhciBlLG4scixzO2Zvcih2bigpLFhzKHQuYyx0LmEpLHM9bmV3IFModC5jKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj1KKHMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw2NzkpLGUuS2Uocil9ZnVuY3Rpb24gWWZuKHQpe3ZhciBlLG4scixzO2Zvcih2bigpLFhzKHQuYyx0LmEpLHM9bmV3IFModC5jKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj1KKHMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwzNjkpLGUuS2Uocil9ZnVuY3Rpb24gWGZuKHQpe3ZhciBlLG4scixzLG87Zm9yKHM9dmksbz1udWxsLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLG4uZC5qXm4uZS5qJiYoZT1uLmUuZS1uLmQuZS1uLmEsZTxzJiYocz1lLG89bikpO3JldHVybiBvfWZ1bmN0aW9uIFUzdCgpe1UzdD1aLHViZT1uZXcgbW4oaDZ0LChGbigpLCExKSksYWJlPW5ldyBtbihmNnQsMTAwKSx2N3Q9KGpDKCksV3V0KSxvYmU9bmV3IG1uKGQ2dCx2N3QpLGNiZT1uZXcgbW4oZzZ0LHlkKSxsYmU9bmV3IG1uKHA2dCxkZSh2aSkpfWZ1bmN0aW9uIE1zZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztmb3Ioaz0wLHM9dC5hW2VdLG89MCxoPXMubGVuZ3RoO288aDsrK28pZm9yKHI9c1tvXSxDPVFDKHIsbiksdz1DLktjKCk7dy5PYigpOylkPXUody5QYigpLDExKSxraSh0LmYsZCxkZShrKyspKX1mdW5jdGlvbiBRZm4odCxlLG4pe3ZhciByLHMsbyxoO2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBRYihzKSxoPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2guT2IoKTspbz11KGguUGIoKSwxOSksbG4odCxlLHM2KFhtKG4sby5hKSkpfWZ1bmN0aW9uIFpmbih0LGUsbil7dmFyIHIscyxvLGg7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IFFiKHMpLGg9KHIuYi1yLmEpKnIuYzwwPyhJcCgpLEFiKTpuZXcgUHAocik7aC5PYigpOylvPXUoaC5QYigpLDE5KSxsbih0LGUsczYoWG0obixvLmEpKSl9ZnVuY3Rpb24gVzN0KHQpe1pwKCk7dmFyIGU7cmV0dXJuIGU9dShYSShQeCh0LmspLFB0KFhhLHhjLDYxLDIsMCwxKSksMTIyKSxEOChlLDAsZS5sZW5ndGgsbnVsbCksZVswXT09KGJlKCksTm4pJiZlWzFdPT1CbiYmKEppKGUsMCxCbiksSmkoZSwxLE5uKSksZX1mdW5jdGlvbiBJc2UodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcz1CMm4odCxlLG4pLG89TjV0KHQscyksSHJ0KHQuYikseHJ0KHQsZSxuKSx2bigpLFhzKHMsbmV3IHAkdCh0KSkscj1ONXQodCxzKSxIcnQodC5iKSx4cnQodCxuLGUpLG5ldyBsYShkZShvKSxkZShyKSl9ZnVuY3Rpb24gRHNlKCl7RHNlPVosbW1lPWJpKG5ldyBIcywoV2EoKSxJbyksKHJvKCksZlMpKSxwVj1uZXcgT3MoImxpbmVhclNlZ21lbnRzLmlucHV0UHJpbyIsZGUoMCkpLGJWPW5ldyBPcygibGluZWFyU2VnbWVudHMub3V0cHV0UHJpbyIsZGUoMCkpfWZ1bmN0aW9uIHVFKCl7dUU9Wix2Vj1uZXcgVVIoIlAxX1RSRUVJRklDQVRJT04iLDApLFBTPW5ldyBVUigiUDJfTk9ERV9PUkRFUklORyIsMSksUE89bmV3IFVSKCJQM19OT0RFX1BMQUNFTUVOVCIsMiksRlM9bmV3IFVSKCJQNF9FREdFX1JPVVRJTkciLDMpfWZ1bmN0aW9uIGF5KCl7YXk9WixOeWU9KGNpKCksejYpLFB5ZT1IMixNeWU9ejIsSXllPWE1LER5ZT12YixMeWU9czUsa190PVlPLE95ZT1LeSxGaHQ9KGI1dCgpLGt5ZSksQmh0PUV5ZSxFX3Q9VHllLF9WPUN5ZSxTVj1feWUsQk89U3llLFRfdD1BeWV9ZnVuY3Rpb24gamwoKXtqbD1aLFpPPW5ldyBZUigiVU5LTk9XTiIsMCksdTA9bmV3IFlSKCJBQk9WRSIsMSksd2I9bmV3IFlSKCJCRUxPVyIsMiksUU89bmV3IFlSKCJJTkxJTkUiLDMpLG5ldyBPcygib3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZSIsWk8pfWZ1bmN0aW9uIE9zZSh0LGUpe3ZhciBuO2lmKHQubmkoKSYmZSE9bnVsbCl7Zm9yKG49MDtuPHQuaTsrK24paWYoeWkoZSx0Lmdbbl0pKXJldHVybiBufWVsc2UgZm9yKG49MDtuPHQuaTsrK24paWYoR3QodC5nW25dKT09PUd0KGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEpmbih0LGUsbil7dmFyIHIscztyZXR1cm4gZS5jPT0oc28oKSxldSkmJm4uYz09SnU/LTE6ZS5jPT1KdSYmbi5jPT1ldT8xOihyPVRyZShlLmEsdC5hKSxzPVRyZShuLmEsdC5hKSxlLmM9PWV1P3MtcjpyLXMpfWZ1bmN0aW9uIG95KHQsZSxuKXtpZihuJiYoZTwwfHxlPm4uYS5jLmxlbmd0aCkpdGhyb3cgcnQobmV3IFBuKCJpbmRleCBtdXN0IGJlID49IDAgYW5kIDw9IGxheWVyIG5vZGUgY291bnQiKSk7dC5jJiZ2dSh0LmMuYSx0KSx0LmM9bixuJiYkbShuLmEsZSx0KX1mdW5jdGlvbiBOc2UodCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOylyZXR1cm4gbj11KExyKHIpLDE3KSxzPXUoZS5LYihuKSwxMCksbmV3IGprKEFyKHMubi5iK3Muby5iLzIpKTtyZXR1cm4gSTkoKSxJOSgpLGd1dH1mdW5jdGlvbiBQc2UodCxlKXt0aGlzLmM9bmV3IENyLHRoaXMuYT10LHRoaXMuYj1lLHRoaXMuZD11KFEodCwoc2UoKSxZNCkpLDMwNCksR3QoUSh0LChUZSgpLGlDdCkpKT09PUd0KChiSSgpLEZHKSk/dGhpcy5lPW5ldyBmcXQ6dGhpcy5lPW5ldyBocXR9ZnVuY3Rpb24gdDFuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89MCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSxvKz1iLk1hdGgucG93KG4uZypuLmYtZSwyKTtyZXR1cm4gcz1iLk1hdGguc3FydChvLyh0LmMubGVuZ3RoLTEpKSxzfWZ1bmN0aW9uIG9fKHQsZSl7dmFyIG4scjtyZXR1cm4gcj1udWxsLHQuWGUoKGNpKCkscTYpKSYmKG49dSh0LldlKHE2KSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJnQueWYoKSYmKHI9dC55ZigpLldlKGUpKSxyPT1udWxsJiYocj1EZShlKSkscn1mdW5jdGlvbiB5c3QodCxlKXt2YXIgbixyO249dC5aYyhlKTt0cnl7cmV0dXJuIHI9bi5QYigpLG4uUWIoKSxyfWNhdGNoKHMpe3Rocm93IHM9V2kocyksRXQocywxMDkpP3J0KG5ldyBtbygiQ2FuJ3QgcmVtb3ZlIGVsZW1lbnQgIitlKSk6cnQocyl9fWZ1bmN0aW9uIGUxbih0LGUpe3ZhciBuLHIscztpZihyPW5ldyBfUixzPW5ldyBFeXQoci5xLmdldEZ1bGxZZWFyKCktbmIsci5xLmdldE1vbnRoKCksci5xLmdldERhdGUoKSksbj1ueW4odCxlLHMpLG49PTB8fG48ZS5sZW5ndGgpdGhyb3cgcnQobmV3IFBuKGUpKTtyZXR1cm4gc31mdW5jdGlvbiBLM3QodCxlKXt2YXIgbixyLHM7Zm9yKE9uKGUpLFAydChlIT10KSxzPXQuYi5jLmxlbmd0aCxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHVlKHQuYixPbihuKSk7cmV0dXJuIHMhPXQuYi5jLmxlbmd0aD8oTnl0KHQsMCksITApOiExfWZ1bmN0aW9uIEpJKCl7Skk9Wix4N3Q9KGNpKCksUlYpLG5ldyBlbyhyZnQsKEZuKCksITApKSxmYmU9ejIsZGJlPWE1LGdiZT12YixoYmU9czUsRTd0PVlPLHBiZT1LeSx5N3Q9KFUzdCgpLHViZSksdzd0PW9iZSxtN3Q9Y2JlLGs3dD1sYmUsb0c9YWJlfWZ1bmN0aW9uIG4xbih0LGUpe2lmKGU9PXQuYylyZXR1cm4gdC5kO2lmKGU9PXQuZClyZXR1cm4gdC5jO3Rocm93IHJ0KG5ldyBQbigiJ3BvcnQnIG11c3QgYmUgZWl0aGVyIHRoZSBzb3VyY2UgcG9ydCBvciB0YXJnZXQgcG9ydCBvZiB0aGUgZWRnZS4iKSl9ZnVuY3Rpb24gcjFuKHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPXQubyxyPXQuZCxlLmcpe2Nhc2UgMTpyZXR1cm4tci5kLW47Y2FzZSAzOnJldHVybiBzLmIrci5hK247Y2FzZSAyOnJldHVybiBzLmErci5jK247Y2FzZSA0OnJldHVybi1yLmItbjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBZM3QodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGtvKGUsdShyLlhiKDApLDI5KSksZD1yLmJkKDEsci5nYygpKSxvPXUobi5LYihlKSwyMCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTcpLGg9cy5jLmk9PWU/cy5kLmk6cy5jLmksWTN0KHQsaCxuLGQpfWZ1bmN0aW9uIEZzZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgQ3IsVnModCwoc2UoKSxqbHQpKT91KFEodCxqbHQpLDgzKToodXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuaiwxNikpLG5ldyBpWCksbmV3IHB4KGUpKSxKdCh0LGpsdCxlKSxlKX1mdW5jdGlvbiBYM3QodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nj90LkNiLmloKHQsNixXcyxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChaYygpLFlWKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFEzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT03P3QuQ2IuaWgodCwxLHNOLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KFpjKCksUkF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIFozdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT05P3QuQ2IuaWgodCw5LG5zLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KFpjKCksJEF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIEJzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT01P3QuQ2IuaWgodCw5LGlVLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KGRuKCksdHApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gSjN0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTM/dC5DYi5paCh0LDAsb04sZSk6KHI9bm8odSh5bigobj11KEluKHQsMTYpLDI2KSxufHwoZG4oKSxKZykpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBSc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Nz90LkNiLmloKHQsNixyMSxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChkbigpLG5wKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIGpzZSgpe3RoaXMuYT1uZXcgWEYsdGhpcy5nPW5ldyBIeix0aGlzLmo9bmV3IEh6LHRoaXMuYj1uZXcgQ3IsdGhpcy5kPW5ldyBIeix0aGlzLmk9bmV3IEh6LHRoaXMuaz1uZXcgQ3IsdGhpcy5jPW5ldyBDcix0aGlzLmU9bmV3IENyLHRoaXMuZj1uZXcgQ3J9ZnVuY3Rpb24gaTFuKHQsZSxuKXt2YXIgcixzLG87Zm9yKG48MCYmKG49MCksbz10Lmkscz1uO3M8bztzKyspaWYocj1TdCh0LHMpLGU9PW51bGwpe2lmKHI9PW51bGwpcmV0dXJuIHN9ZWxzZSBpZihHdChlKT09PUd0KHIpfHx5aShlLHIpKXJldHVybiBzO3JldHVybi0xfWZ1bmN0aW9uIHMxbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5IaCh0LmEpLG4/KHI9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxPSCkpLGhuKHRPLHIpP2tDKHQsRmwoZS5IaigpKSk6cik6bnVsbH1mdW5jdGlvbiBsRSh0LGUpe3ZhciBuLHI7aWYoZSl7aWYoZT09dClyZXR1cm4hMDtmb3Iobj0wLHI9dShlLDQ5KS5laCgpO3ImJnIhPWU7cj1yLmVoKCkpe2lmKCsrbj5vb3QpcmV0dXJuIGxFKHQscik7aWYocj09dClyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gYTFuKHQpe3N3aXRjaChnaigpLHQucS5nKXtjYXNlIDU6RW9lKHQsKGJlKCksTm4pKSxFb2UodCxtcik7YnJlYWs7Y2FzZSA0OndjZSh0LChiZSgpLE5uKSksd2NlKHQsbXIpO2JyZWFrO2RlZmF1bHQ6d2hlKHQsKGJlKCksTm4pKSx3aGUodCxtcil9fWZ1bmN0aW9uIG8xbih0KXtzd2l0Y2goZ2ooKSx0LnEuZyl7Y2FzZSA1OlJvZSh0LChiZSgpLEhuKSksUm9lKHQsQm4pO2JyZWFrO2Nhc2UgNDpZaWUodCwoYmUoKSxIbikpLFlpZSh0LEJuKTticmVhaztkZWZhdWx0Om1oZSh0LChiZSgpLEhuKSksbWhlKHQsQm4pfX1mdW5jdGlvbiBjMW4odCl7dmFyIGUsbjtlPXUoUSh0LChaZigpLHJiZSkpLDE5KSxlPyhuPWUuYSxuPT0wP0p0KHQsKEdwKCksYUcpLG5ldyB6aXQpOkp0KHQsKEdwKCksYUcpLG5ldyBUJChuKSkpOkp0KHQsKEdwKCksYUcpLG5ldyBUJCgxKSl9ZnVuY3Rpb24gdTFuKHQsZSl7dmFyIG47c3dpdGNoKG49dC5pLGUuZyl7Y2FzZSAxOnJldHVybi0odC5uLmIrdC5vLmIpO2Nhc2UgMjpyZXR1cm4gdC5uLmEtbi5vLmE7Y2FzZSAzOnJldHVybiB0Lm4uYi1uLm8uYjtjYXNlIDQ6cmV0dXJuLSh0Lm4uYSt0Lm8uYSl9cmV0dXJuIDB9ZnVuY3Rpb24gbDFuKHQsZSl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBlPT0oaGgoKSxmYik/X0c6U0c7Y2FzZSAxOnJldHVybiBlPT0oaGgoKSxmYik/X0c6dk87Y2FzZSAyOnJldHVybiBlPT0oaGgoKSxmYik/dk86U0c7ZGVmYXVsdDpyZXR1cm4gdk99fWZ1bmN0aW9uIHREKHQsZSl7dmFyIG4scixzO2Zvcih2dSh0LmEsZSksdC5lLT1lLnIrKHQuYS5jLmxlbmd0aD09MD8wOnQuYykscz1qa3Qscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4Nykscz1iLk1hdGgubWF4KHMsbi5kKTt0LmI9c31mdW5jdGlvbiB0NHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Mz90LkNiLmloKHQsMTIsbnMsZSk6KHI9bm8odSh5bigobj11KEluKHQsMTYpLDI2KSxufHwoWmMoKSxCQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gZTR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTExP3QuQ2IuaWgodCwxMCxucyxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChaYygpLGpBdCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiAkc2UodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTA/dC5DYi5paCh0LDExLEdoLGUpOihyPW5vKHUoeW4oKG49dShJbih0LDE2KSwyNiksbnx8KGRuKCksZXApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24genNlKHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTEwP3QuQ2IuaWgodCwxMixWaCxlKToocj1ubyh1KHluKChuPXUoSW4odCwxNiksMjYpLG58fChkbigpLGUzKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIExoKHQpe3ZhciBlO3JldHVybiEodC5CYiYxKSYmdC5yJiZ0LnIua2goKSYmKGU9dSh0LnIsNDkpLHQucj11KEtwKHQsZSksMTM4KSx0LnIhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDksOCxlLHQucikpKSx0LnJ9ZnVuY3Rpb24geHN0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1jdChvdChpYSwxKSx2bywyNSwxNSxbXzR0KHQsKEtmKCksc2MpLGUsbiksXzR0KHQsdHUsZSxuKSxfNHQodCxhYyxlLG4pXSksdC5mJiYoclswXT1iLk1hdGgubWF4KHJbMF0sclsyXSksclsyXT1yWzBdKSxyfWZ1bmN0aW9uIGgxbih0LGUpe3ZhciBuLHIscztpZihzPXNmbih0LGUpLHMuYy5sZW5ndGghPTApZm9yKFhzKHMsbmV3IEZZKSxuPXMuYy5sZW5ndGgscj0wO3I8bjtyKyspcEUodCwoQW4ocixzLmMubGVuZ3RoKSx1KHMuY1tyXSwyODYpKSxJdm4odCxzLHIpKX1mdW5jdGlvbiBmMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9dShBaSh0LmEsKGc0KCksQUcpKSwxNSkuS2MoKTtzLk9iKCk7KWZvcihyPXUocy5QYigpLDEwMSksbj1QeChyLmspLktjKCk7bi5PYigpOyllPXUobi5QYigpLDYxKSx3OCh0LHIsZSwoSnYoKSxoYiksMSl9ZnVuY3Rpb24gZDFuKHQpe3ZhciBlLG47aWYodC5rPT0oR24oKSxacykpe2ZvcihuPW5ldyBhcihscih6MCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KExyKG4pLDE3KSwhVmEoZSkmJnQuYz09YzR0KGUsdCkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBnMW4odCl7dmFyIGUsbjtpZih0Lms9PShHbigpLFpzKSl7Zm9yKG49bmV3IGFyKGxyKHowKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLCFWYShlKSYmZS5jLmkuYz09ZS5kLmkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBwMW4odCxlKXt2YXIgbixyLHMsbztmb3Iod3IoZSwiRHVsbCBlZGdlIHJvdXRpbmciLDEpLG89ZWkodC5iLDApO28uYiE9by5kLmM7KWZvcihzPXUodGkobyksODYpLHI9ZWkocy5kLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLF9oKG4uYSl9ZnVuY3Rpb24gYjFuKHQsZSl7dmFyIG4scixzLG8saDtpZihlKWZvcihzPWUuYS5sZW5ndGgsbj1uZXcgUWIocyksaD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtoLk9iKCk7KW89dShoLlBiKCksMTkpLHI9XzgoZSxvLmEpLHImJmhjZSh0LHIpfWZ1bmN0aW9uIHYxbigpe3ZidCgpO3ZhciB0LGU7Zm9yKEY1bigoanAoKSxMbikpLEE1bihMbiksbXN0KExuKSx0THQ9KGRuKCksVjEpLGU9bmV3IFModUx0KTtlLmE8ZS5jLmMubGVuZ3RoOyl0PXUoSihlKSwyNDEpLF9FKHQsVjEsbnVsbCk7cmV0dXJuITB9ZnVuY3Rpb24gbjR0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztyZXR1cm4gdz10Lmg+PjE5LGs9ZS5oPj4xOSx3IT1rP2stdzoocz10LmgsZD1lLmgscyE9ZD9zLWQ6KHI9dC5tLGg9ZS5tLHIhPWg/ci1oOihuPXQubCxvPWUubCxuLW8pKSl9ZnVuY3Rpb24gS3ooKXtLej1aLEhFdD0oZ3EoKSxPdXQpLHFFdD1uZXcgbW4oR3h0LEhFdCksekV0PSgkJCgpLER1dCksJEV0PW5ldyBtbihWeHQsekV0KSxqRXQ9KE56KCksSXV0KSxSRXQ9bmV3IG1uKFV4dCxqRXQpLEJFdD1uZXcgbW4oV3h0LChGbigpLCEwKSl9ZnVuY3Rpb24gY18odCxlLG4pe3ZhciByLHM7cj1lKm4sRXQodC5nLDE0NSk/KHM9SHgodCkscy5mLmQ/cy5mLmF8fCh0LmQuYSs9citQMSk6KHQuZC5kLT1yK1AxLHQuZC5hKz1yK1AxKSk6RXQodC5nLDEwKSYmKHQuZC5kLT1yLHQuZC5hKz0yKnIpfWZ1bmN0aW9uIHFzZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iocz10W24uZ10sZD1uZXcgUyhlLmQpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwMSksbz1oLmksbyYmby5pPT1uJiYocj1oLmRbbi5nXSxzW3JdPWIuTWF0aC5tYXgoc1tyXSxvLmouYikpfWZ1bmN0aW9uIHcxbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9MCxzPTAsbj0wLGg9bmV3IFMoZS5kKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw0NDMpLFZ6KG8pLHI9Yi5NYXRoLm1heChyLG8uYikscys9by5kKyhuPjA/dC5nOjApLCsrbjtlLmI9cixlLmU9c31mdW5jdGlvbiBIc2UodCl7dmFyIGUsbixyO2lmKHI9dC5iLGhHdCh0Lmksci5sZW5ndGgpKXtmb3Iobj1yLmxlbmd0aCoyLHQuYj1QdCh3dXQsTEQsMzE3LG4sMCwxKSx0LmM9UHQod3V0LExELDMxNyxuLDAsMSksdC5mPW4tMSx0Lmk9MCxlPXQuYTtlO2U9ZS5jKW9EKHQsZSxlKTsrK3QuZ319ZnVuY3Rpb24gbTFuKHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihzPTA7czxlLm87cysrKWZvcihvPXMtZS5qK24saD0wO2g8ZS5wO2grKylkPWgtZS5rK3IsbDQoZSxzLGgpP2hmbih0LG8sZCl8fEFmbih0LG8sZCk6Z3NlKGUscyxoKSYmKGxzZSh0LG8sZCl8fExmbih0LG8sZCkpfWZ1bmN0aW9uIHkxbih0LGUsbil7dmFyIHI7cj1lLmMuaSxyLms9PShHbigpLFpzKT8oSnQodCwoc2UoKSxuMSksdShRKHIsbjEpLDExKSksSnQodCxSaCx1KFEocixSaCksMTEpKSk6KEp0KHQsKHNlKCksbjEpLGUuYyksSnQodCxSaCxuLmQpKX1mdW5jdGlvbiBoRSh0LGUsbil7eTQoKTt2YXIgcixzLG8saCxkLHc7cmV0dXJuIGg9ZS8yLG89bi8yLHI9Yi5NYXRoLmFicyh0LmEpLHM9Yi5NYXRoLmFicyh0LmIpLGQ9MSx3PTEscj5oJiYoZD1oL3IpLHM+byYmKHc9by9zKSx1ZCh0LGIuTWF0aC5taW4oZCx3KSksdH1mdW5jdGlvbiB4MW4oKXt5cSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShmNHQoKE1wKCksVWgpLEdFKSwyMDE0KSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksRXQobiwxMDIpKXQ9bixKdnQoKE5yKCksdCkpO2Vsc2UgdGhyb3cgcnQobil9cmV0dXJuIG5ldyBKNX1mdW5jdGlvbiBrMW4oKXtOdGUoKTt2YXIgdCxlO3RyeXtpZihlPXUoZjR0KChNcCgpLFVoKSxMMiksMjAyNCksZSlyZXR1cm4gZX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMTAyKSl0PW4sSnZ0KChOcigpLHQpKTtlbHNlIHRocm93IHJ0KG4pfXJldHVybiBuZXcgRW19ZnVuY3Rpb24gRTFuKCl7eXEoKTt2YXIgdCxlO3RyeXtpZihlPXUoZjR0KChNcCgpLFVoKSxQaCksMTk0MSksZSlyZXR1cm4gZX1jYXRjaChuKXtpZihuPVdpKG4pLEV0KG4sMTAyKSl0PW4sSnZ0KChOcigpLHQpKTtlbHNlIHRocm93IHJ0KG4pfXJldHVybiBuZXcgWVp9ZnVuY3Rpb24gVDFuKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuZSx0LmU9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IFFzKHQsMSw0LHMsZSksbj9uLkVpKHIpOm49cikscyE9ZSYmKGU/bj1fRSh0LG9xKHQsZSksbik6bj1fRSh0LHQuYSxuKSksbn1mdW5jdGlvbiBHc2UoKXtfUi5jYWxsKHRoaXMpLHRoaXMuZT0tMSx0aGlzLmE9ITEsdGhpcy5wPV9hLHRoaXMuaz0tMSx0aGlzLmM9LTEsdGhpcy5iPS0xLHRoaXMuZz0hMSx0aGlzLmY9LTEsdGhpcy5qPS0xLHRoaXMubj0tMSx0aGlzLmk9LTEsdGhpcy5kPS0xLHRoaXMubz1fYX1mdW5jdGlvbiBDMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuZC5kLHQuYXx8KHIrPXQuYi5kLmEpLHM9ZS5iLmQuZCxlLmF8fChzKz1lLmIuZC5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiBfMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuYi5kLHQuYXx8KHIrPXQuYi5iLmEpLHM9ZS5iLmIuZCxlLmF8fChzKz1lLmIuYi5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiBTMW4odCxlKXt2YXIgbixyLHM7aWYocj10LmIuZy5kLHQuYXx8KHIrPXQuYi5nLmEpLHM9ZS5iLmcuZCxlLmF8fChzKz1lLmIuZy5hKSxuPUxzKHIscyksbj09MCl7aWYoIXQuYSYmZS5hKXJldHVybi0xO2lmKCFlLmEmJnQuYSlyZXR1cm4gMX1yZXR1cm4gbn1mdW5jdGlvbiByNHQoKXtyNHQ9Wix2YmU9S3UoYmkoYmkoYmkobmV3IEhzLChXYSgpLHFjKSwocm8oKSxpVHQpKSxxYyxzVHQpLElvLGFUdCksSW8sVzd0KSxtYmU9YmkoYmkobmV3IEhzLHFjLCQ3dCkscWMsSzd0KSx3YmU9S3UobmV3IEhzLElvLFg3dCl9ZnVuY3Rpb24gQTFuKHQpe3ZhciBlLG4scixzLG87Zm9yKGU9dShRKHQsKHNlKCksbVMpKSw4Myksbz10Lm4scj1lLkNjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzA2KSxzPW4uaSxzLmMrPW8uYSxzLmQrPW8uYixuLmM/YXVlKG4pOm91ZShuKTtKdCh0LG1TLG51bGwpfWZ1bmN0aW9uIEwxbih0LGUsbil7dmFyIHIscztzd2l0Y2gocz10LmIscj1zLmQsZS5nKXtjYXNlIDE6cmV0dXJuLXIuZC1uO2Nhc2UgMjpyZXR1cm4gcy5vLmErci5jK247Y2FzZSAzOnJldHVybiBzLm8uYityLmErbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuLTF9fWZ1bmN0aW9uIE0xbih0KXt2YXIgZSxuLHIscyxvO2lmKHI9MCxzPUZFLHQuYilmb3IoZT0wO2U8MzYwO2UrKyluPWUqLjAxNzQ1MzI5MjUxOTk0MzI5NSxXNXQodCx0LmQsMCwwLEk0LG4pLG89dC5iLmlnKHQuZCksbzxzJiYocj1uLHM9byk7VzV0KHQsdC5kLDAsMCxJNCxyKX1mdW5jdGlvbiBJMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1uZXcgQ3IsZS5lPW51bGwsZS5mPW51bGwscj1uZXcgUyhlLmkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1KSxzPXUoSm4odC5nLG4uYSksNDYpLG4uYT1HaihuLmIpLGtpKG8sbi5hLHMpO3QuZz1vfWZ1bmN0aW9uIEQxbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihzPWUtdC5lLG89cy90LmQuYy5sZW5ndGgsaD0wLHc9bmV3IFModC5kKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw0NDMpLHI9dC5iLWQuYituLHZpZShkLGQuZStoKm8sZC5mKSxkZm4oZCxvLHIpLCsraH1mdW5jdGlvbiBWc2UodCl7dmFyIGU7aWYodC5mLnFqKCksdC5iIT0tMSl7aWYoKyt0LmIsZT10LmYuZFt0LmFdLHQuYjxlLmkpcmV0dXJuOysrdC5hfWZvcig7dC5hPHQuZi5kLmxlbmd0aDsrK3QuYSlpZihlPXQuZi5kW3QuYV0sZSYmZS5pIT0wKXt0LmI9MDtyZXR1cm59dC5iPS0xfWZ1bmN0aW9uIE8xbih0LGUpe3ZhciBuLHIscztmb3Iocz1lLmMubGVuZ3RoLG49RGduKHQscz09MD8iIjooQW4oMCxlLmMubGVuZ3RoKSxCcihlLmNbMF0pKSkscj0xO3I8cyYmbjsrK3Ipbj11KG4sNDkpLm9oKChBbihyLGUuYy5sZW5ndGgpLEJyKGUuY1tyXSkpKTtyZXR1cm4gbn1mdW5jdGlvbiBVc2UodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSx0LmNbbi5jLnBdW24ucF0uYT1WdnQodC5pKSx0LmNbbi5jLnBdW24ucF0uZD1YdCh0LmNbbi5jLnBdW24ucF0uYSksdC5jW24uYy5wXVtuLnBdLmI9MX1mdW5jdGlvbiBOMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTU3KSxvKz1iLk1hdGgucG93KEZ1KG4pKnhsKG4pLWUsMik7cmV0dXJuIHM9Yi5NYXRoLnNxcnQoby8odC5jLmxlbmd0aC0xKSksc31mdW5jdGlvbiBXc2UodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPW93bih0LGUsbixyKSxoPXo1dCh0LG8pLElzdCh0LGUsbixyKSxIcnQodC5iKSx2bigpLFhzKG8sbmV3IGIkdCh0KSkscz16NXQodCxvKSxJc3QodCxuLGUsciksSHJ0KHQuYiksbmV3IGxhKGRlKGgpLGRlKHMpKX1mdW5jdGlvbiBQMW4odCxlLG4pe3ZhciByLHM7Zm9yKHdyKG4sIkludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50IiwxKSx0LmE9dShRKGUsKHNlKCksWTQpKSwzMDQpLHM9bmV3IFMoZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyOSksbXZuKHQscik7b3Iobil9ZnVuY3Rpb24gRjFuKHQsZSl7dmFyIG47d3IoZSwiR2VuZXJhbCBDb21wYWN0b3IiLDEpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpLG49TGxuKHUocWUodCwoYXkoKSxCaHQpKSwzODApKSxuLmhnKHQpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpfWZ1bmN0aW9uIEIxbih0LGUsbil7dmFyIHIscztmb3Iob2oodCx0LmorZSx0Lmsrbikscz1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IFNzKEhoLHQsNSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSw0NjkpLG4ydChyLHIuYStlLHIuYituKTthaih0LHQuYitlLHQuYytuKX1mdW5jdGlvbiBpNHQodCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4hdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLFFjKHQuZSxlLHIpO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLFFjKHQuZCxlLHIpfXJldHVybiBBc3QodCxlLG4scil9ZnVuY3Rpb24gczR0KHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIXQuZSYmKHQuZT1uZXcgQ24oV3MsdCw3LDQpKSxCYSh0LmUsZSxyKTtjYXNlIDg6cmV0dXJuIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSxCYSh0LmQsZSxyKX1yZXR1cm4gZml0KHQsZSxuLHIpfWZ1bmN0aW9uIFIxbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgUWIobyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgobixoLmEpLHMmJmtvZSh0LHMsZSl9ZnVuY3Rpb24gWXoodCxlLG4pe3ZhciByLHMsbyxoLGQ7cmV0dXJuIHQucWooKSxvPWU9PW51bGw/MDpIaShlKSx0LmY+MCYmKGg9KG8mdmkpJXQuZC5sZW5ndGgscz1yNXQodCxoLG8sZSkscyk/KGQ9cy5lZChuKSxkKToocj10LnRqKG8sZSxuKSx0LmMuRmMociksbnVsbCl9ZnVuY3Rpb24gYTR0KHQsZSl7dmFyIG4scixzLG87c3dpdGNoKE9nKHQsZSkuX2soKSl7Y2FzZSAzOmNhc2UgMjp7Zm9yKG49azQoZSkscz0wLG89bi5pO3M8bzsrK3MpaWYocj11KFN0KG4scyksMzQpLCR2KEVvKHQscikpPT01KXJldHVybiByO2JyZWFrfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqMW4odCl7dmFyIGUsbixyLHMsbztpZihoR3QodC5mLHQuYi5sZW5ndGgpKWZvcihyPVB0KHBnZSxMRCwzMzAsdC5iLmxlbmd0aCoyLDAsMSksdC5iPXIscz1yLmxlbmd0aC0xLG49dC5hO24hPXQ7bj1uLlJkKCkpbz11KG4sMzMwKSxlPW8uZCZzLG8uYT1yW2VdLHJbZV09b31mdW5jdGlvbiBLc2UodCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksbz1iLk1hdGgubWF4KG8sci5lLmErci5iLnJmKCkuYSk7bj11KGdvKHQuYixlKSwxMjQpLG4ubi5iPTAsbi5hLmE9b31mdW5jdGlvbiBZc2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj0wLG89dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExMSksbj1iLk1hdGgubWF4KG4scy5lLmIrcy5iLnJmKCkuYik7cj11KGdvKHQuYixlKSwxMjQpLHIubi5kPTAsci5hLmI9bn1mdW5jdGlvbiAkMW4odCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoc2UoKSxHYykpLDIxKSxlPWlqKFBtZSksbi5IYygob28oKSxWNCkpJiZSbChlLFJtZSksbi5IYyh3UykmJlJsKGUsam1lKSxuLkhjKGw3KSYmUmwoZSxGbWUpLG4uSGMoaDcpJiZSbChlLEJtZSksZX1mdW5jdGlvbiB6MW4odCxlKXt2YXIgbjt3cihlLCJEZWxhdW5heSB0cmlhbmd1bGF0aW9uIiwxKSxuPW5ldyBsZSxtdSh0LmksbmV3IFIkdChuKSksamUoUmUoUSh0LChHOCgpLHVTKSkpKSx0LmU/VWEodC5lLE5oZShuKSk6dC5lPU5oZShuKSxvcihlKX1mdW5jdGlvbiBvNHQodCl7aWYodDwwKXRocm93IHJ0KG5ldyBQbigiVGhlIGlucHV0IG11c3QgYmUgcG9zaXRpdmUiKSk7cmV0dXJuIHQ8eVN0Lmxlbmd0aD9Wdih5U3RbdF0pOmIuTWF0aC5zcXJ0KEk0KnQpKih4dW4odCx0KS9HeXQoMi43MTgyODE4Mjg0NTkwNDUsdCkpfWZ1bmN0aW9uIGZFKHQsZSl7dmFyIG47aWYodC5uaSgpJiZlIT1udWxsKXtmb3Iobj0wO248dC5pOysrbilpZih5aShlLHQuZ1tuXSkpcmV0dXJuITB9ZWxzZSBmb3Iobj0wO248dC5pOysrbilpZihHdCh0Lmdbbl0pPT09R3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcTFuKHQsZSl7aWYoZT09bnVsbCl7Zm9yKDt0LmEuT2IoKTspaWYodSh0LmEuUGIoKSw0MikuZGQoKT09bnVsbClyZXR1cm4hMH1lbHNlIGZvcig7dC5hLk9iKCk7KWlmKHlpKGUsdSh0LmEuUGIoKSw0MikuZGQoKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSDFuKHQsZSl7dmFyIG4scixzO3JldHVybiBlPT09dD8hMDpFdChlLDY2NCk/KHM9dShlLDE5NDcpLElpZSgocj10Lmcscnx8KHQuZz1uZXcgdjkodCkpKSwobj1zLmcsbnx8KHMuZz1uZXcgdjkocykpKSkpOiExfWZ1bmN0aW9uIEcxbih0KXt2YXIgZSxuLHIscztmb3IoZT0iU3oiLG49ImV6IixzPWIuTWF0aC5taW4odC5sZW5ndGgsNSkscj1zLTE7cj49MDtyLS0paWYoaG4odFtyXS5kLGUpfHxobih0W3JdLmQsbikpe3QubGVuZ3RoPj1yKzEmJnQuc3BsaWNlKDAscisxKTticmVha31yZXR1cm4gdH1mdW5jdGlvbiBlRCh0LGUpe3ZhciBuO3JldHVybiBCbyh0KSYmQm8oZSkmJihuPXQvZSxERDxuJiZuPHgyKT9uPDA/Yi5NYXRoLmNlaWwobik6Yi5NYXRoLmZsb29yKG4pOlZwKGR4dChCbyh0KT9TaCh0KTp0LEJvKGUpP1NoKGUpOmUsITEpKX1mdW5jdGlvbiBjNHQodCxlKXtpZihlPT10LmMuaSlyZXR1cm4gdC5kLmk7aWYoZT09dC5kLmkpcmV0dXJuIHQuYy5pO3Rocm93IHJ0KG5ldyBQbigiJ25vZGUnIG11c3QgZWl0aGVyIGJlIHRoZSBzb3VyY2Ugbm9kZSBvciB0YXJnZXQgbm9kZSBvZiB0aGUgZWRnZS4iKSl9ZnVuY3Rpb24gVjFuKHQpe3ZhciBlLG4scixzO2lmKHM9dShRKHQsKHNlKCksWVR0KSksMzcpLHMpe2ZvcihyPW5ldyBUYSxlPUZhKHQuYy5pKTtlIT1zOyluPWUuZSxlPUZhKG4pLEZtKExpKExpKHIsbi5uKSxlLmMpLGUuZC5iLGUuZC5kKTtyZXR1cm4gcn1yZXR1cm4gQmJlfWZ1bmN0aW9uIFUxbih0KXt2YXIgZTtlPXUoUSh0LChzZSgpLGQ3KSksNDAzKSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IEpZKSxuZXcgZ3godCkpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgaEYpLG5ldyBPMyh0KSl9ZnVuY3Rpb24ga3N0KHQsZSl7dmFyIG4scixzLG87Zm9yKHM9ZT9Ncyh0KTpqbyh0KSxyPW5ldyBhcihscihzLmEuS2MoKSxuZXcgeikpO3pyKHIpOylpZihuPXUoTHIociksMTcpLG89YzR0KG4sdCksby5rPT0oR24oKSxacykmJm8uYyE9dC5jKXJldHVybiBvO3JldHVybiBudWxsfWZ1bmN0aW9uIFcxbih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksZS5rPT0oR24oKSxEcykmJihyPWUuby5iLHQuaT1iLk1hdGgubWluKHQuaSxyKSx0Lmc9Yi5NYXRoLm1heCh0LmcscikpfWZ1bmN0aW9uIFhzZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSx0LmNbci5jLnBdW3IucF0uZT0hMTtmb3Iocz1uZXcgUyhlKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbXh0KHQscixuKX1mdW5jdGlvbiBFc3QodCxlLG4pe3ZhciByLHM7cj1hNChlLmosbi5zLG4uYykrYTQobi5lLGUucyxlLmMpLHM9YTQobi5qLGUucyxlLmMpK2E0KGUuZSxuLnMsbi5jKSxyPT1zP3I+MCYmKHQuYis9Mix0LmErPXIpOih0LmIrPTEsdC5hKz1iLk1hdGgubWluKHIscykpfWZ1bmN0aW9uIFFzZSh0LGUpe3ZhciBuLHI7aWYocj0hMSxlYShlKSYmKHI9ITAsQngodCxuZXcgSG0oQnIoZSkpKSkscnx8RXQoZSwyMzYpJiYocj0hMCxCeCh0LChuPWZ2dCh1KGUsMjM2KSksbmV3IHk5KG4pKSkpLCFyKXRocm93IHJ0KG5ldyB0ZXQoeDh0KSl9ZnVuY3Rpb24gSzFuKHQsZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gcz1uZXcgRjAodC5lLDEsMTAsKGg9ZS5jLEV0KGgsODgpP3UoaCwyNik6KGRuKCksV2gpKSwobz1uLmMsRXQobyw4OCk/dShvLDI2KTooZG4oKSxXaCkpLEZnKHQsZSksITEpLHI/ci5FaShzKTpyPXMscn1mdW5jdGlvbiB1NHQodCl7dmFyIGUsbjtzd2l0Y2godShRKEZhKHQpLChUZSgpLFg5dCkpLDQyMCkuZyl7Y2FzZSAwOnJldHVybiBlPXQubixuPXQubyxuZXcgJGUoZS5hK24uYS8yLGUuYituLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgeW8odC5uKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBuRCgpe25EPVosQkc9bmV3IFE5KEswLDApLFBUdD1uZXcgUTkoIkxFRlRVUCIsMSksQlR0PW5ldyBROSgiUklHSFRVUCIsMiksTlR0PW5ldyBROSgiTEVGVERPV04iLDMpLEZUdD1uZXcgUTkoIlJJR0hURE9XTiIsNCksU2x0PW5ldyBROSgiQkFMQU5DRUQiLDUpfWZ1bmN0aW9uIFkxbih0LGUsbil7dmFyIHIscyxvO2lmKHI9THModC5hW2UucF0sdC5hW24ucF0pLHI9PTApe2lmKHM9dShRKGUsKHNlKCksSTYpKSwxNSksbz11KFEobixJNiksMTUpLHMuSGMobikpcmV0dXJuLTE7aWYoby5IYyhlKSlyZXR1cm4gMX1yZXR1cm4gcn1mdW5jdGlvbiBYMW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiBuZXcgdFo7Y2FzZSAyOnJldHVybiBuZXcgZVo7Y2FzZSAzOnJldHVybiBuZXcgSlE7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKHhjdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGw0dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMTohdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHhyKHQubiksIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSxycyh0Lm4sdShuLDE0KSk7cmV0dXJuO2Nhc2UgMjpxQyh0LEJyKG4pKTtyZXR1cm59TXl0KHQsZSxuKX1mdW5jdGlvbiBoNHQodCxlLG4pe3N3aXRjaChlKXtjYXNlIDM6WHYodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDQ6UXYodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDU6eXUodCxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDY6eHUodCxYdCh5ZShuKSkpO3JldHVybn1sNHQodCxlLG4pfWZ1bmN0aW9uIFh6KHQsZSxuKXt2YXIgcixzLG87bz0ocj1uZXcgS3R0LHIpLHM9TzEobyxlLG51bGwpLHMmJnMuRmkoKSxYYyhvLG4pLE1yKCghdC5jJiYodC5jPW5ldyBoZSh6dyx0LDEyLDEwKSksdC5jKSxvKSxJZyhvLDApLHR5KG8sMSksUGcobywhMCksTmcobywhMCl9ZnVuY3Rpb24gZjR0KHQsZSl7dmFyIG4scixzO3JldHVybiBuPVU5KHQuZyxlKSxFdChuLDIzNSk/KHM9dShuLDIzNSkscy5RaCgpPT1udWxsLHMuTmgoKSk6RXQobiw0OTgpPyhyPXUobiwxOTM4KSxzPXIuYixzKTpudWxsfWZ1bmN0aW9uIFExbih0LGUsbixyKXt2YXIgcyxvO3JldHVybiBBcihlKSxBcihuKSxvPXUod0ModC5kLGUpLDE5KSxqdGUoISFvLCJSb3cgJXMgbm90IGluICVzIixlLHQuZSkscz11KHdDKHQuYixuKSwxOSksanRlKCEhcywiQ29sdW1uICVzIG5vdCBpbiAlcyIsbix0LmMpLEduZSh0LG8uYSxzLmEscil9ZnVuY3Rpb24gWnNlKHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE07aWYoQz1zW29dLGs9bz09aC0xLGQ9az9yOjAsTT1tc2UoZCxDKSxyIT0xMCYmY3Qob3QodCxoLW8pLGVbb10sbltvXSxkLE0pLCFrKWZvcigrK28sdz0wO3c8QzsrK3cpTVt3XT1ac2UodCxlLG4scixzLG8saCk7cmV0dXJuIE19ZnVuY3Rpb24gdV8odCl7aWYodC5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3QubWooKTt0cnl7dC5pLiRjKHQuZyksdC5mPXQuaS5qLHQuZzx0LmUmJi0tdC5lLHQuZz0tMX1jYXRjaChlKXt0aHJvdyBlPVdpKGUpLEV0KGUsNzMpP3J0KG5ldyBlaCk6cnQoZSl9fWZ1bmN0aW9uIGxfKHQsZSl7cmV0dXJuIHQuYi5hPWIuTWF0aC5taW4odC5iLmEsZS5jKSx0LmIuYj1iLk1hdGgubWluKHQuYi5iLGUuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxlLmMpLHQuYS5iPWIuTWF0aC5tYXgodC5hLmIsZS5kKSx0LmNbdC5jLmxlbmd0aF09ZSwhMH1mdW5jdGlvbiBaMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9LTEscj0wLG49bmV3IFModCk7bi5hPG4uYy5jLmxlbmd0aDspe2lmKGU9dShKKG4pLDI0MyksZS5jPT0oc28oKSxKdSkpe3M9cj09MD8wOnItMTticmVha31lbHNlIHI9PXQuYy5sZW5ndGgtMSYmKHM9cik7cis9MX1yZXR1cm4gc31mdW5jdGlvbiBKMW4odCl7dmFyIGUsbixyLHM7Zm9yKHM9MCxlPTAscj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSx5dShuLHQuZStzKSx4dShuLHQuZikscys9bi5nK3QuYixlPWIuTWF0aC5tYXgoZSxuLmYrdC5iKTt0LmQ9cy10LmIsdC5hPWUtdC5ifWZ1bmN0aW9uIGY0KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLHI9ZS5kLmMsZS5kLmM9ZS5kLmQsZS5kLmQ9cixyPWUuZC5iLGUuZC5iPWUuZC5hLGUuZC5hPXIscj1lLmIuYSxlLmIuYT1lLmIuYixlLmIuYj1yO1M1dCh0KX1mdW5jdGlvbiBkNCh0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxyPWUuZy5jLGUuZy5jPWUuZy5kLGUuZy5kPXIscj1lLmcuYixlLmcuYj1lLmcuYSxlLmcuYT1yLHI9ZS5lLmEsZS5lLmE9ZS5lLmIsZS5lLmI9cjt1cSh0KX1mdW5jdGlvbiB0ZG4odCl7dmFyIGUsbixyLHMsbztmb3Iobz1QeCh0LmspLG49KGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkscj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihlPW5bcl0sZSE9Wm8mJiFvLkhjKGUpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIFRzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9dShTMnQobWl0KFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmosMTYpKSxuZXcgVlgpKSksMTEpLHImJihuPXUoRmUoci5lLDApLDE3KSxuKT91KFEobiwoc2UoKSxUYykpLDE5KS5hOkxhbih0LmIpfWZ1bmN0aW9uIGVkbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxQOSh0LmQpLHI9bmV3IGFyKGxyKE1zKHMpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLFdvZSh0LHMsbi5kLmkpfWZ1bmN0aW9uIG5kbih0LGUpe3ZhciBuLHI7Zm9yKHZ1KHQuYixlKSxyPW5ldyBTKHQubik7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMjExKSxSbyhuLmMsZSwwKSE9LTEpe3Z1KG4uYyxlKSxKMW4obiksbi5jLmMubGVuZ3RoPT0wJiZ2dSh0Lm4sbik7YnJlYWt9Z3luKHQpfWZ1bmN0aW9uIEpzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9dC5mLHM9MCxvPTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4NyksWUkobix0LmUsaCksZEkobixlKSxvPWIuTWF0aC5tYXgobyxuLnIpLGgrPW4uZCt0LmMscz1oO3QuZD1vLHQuYj1zfWZ1bmN0aW9uIHRhZSh0KXt2YXIgZSxuO3JldHVybiBuPWZEKHQpLFM4KG4pP251bGw6KGU9KEFyKG4pLHUodXNlKG5ldyBhcihscihuLmEuS2MoKSxuZXcgeikpKSw3OSkpLE1vKHUoU3QoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MikpKX1mdW5jdGlvbiBReih0KXt2YXIgZTtyZXR1cm4gdC5vfHwoZT10LkxqKCksZT90Lm89bmV3IG13dCh0LHQsbnVsbCk6dC5yaygpP3Qubz1uZXcgUTJ0KHQsbnVsbCk6JHYoRW8oKFJ1KCksbWEpLHQpKT09MT90Lm89bmV3ICRadCh0KTp0Lm89bmV3IGxudCh0LG51bGwpKSx0Lm99ZnVuY3Rpb24gcmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7bi5taChlKSYmKHM9KGg9ZSxoP3Uociw0OSkueGgoaCk6bnVsbCkscyYmKHc9bi5haChlKSxkPWUudCxkPjF8fGQ9PS0xPyhvPXUodywxNSkscy5XYihpaG4odCxvKSkpOnMuV2IodWF0KHQsdSh3LDU2KSkpKSl9ZnVuY3Rpb24gaWRuKHQsZSxuLHIpe2pIdCgpO3ZhciBzPWR1dDtmdW5jdGlvbiBvKCl7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspc1toXSgpfWlmKHQpdHJ5e2o1ZShvKSgpfWNhdGNoKGgpe3QoZSxoKX1lbHNlIGo1ZShvKSgpfWZ1bmN0aW9uIHNkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPW5ldyBoMihuZXcgd2codC5iKS5hKTtyLmI7KW49WXYociksZT11KG4uY2QoKSwxMCksbz11KHUobi5kZCgpLDQ2KS5hLDEwKSxzPXUodShuLmRkKCksNDYpLmIsOCksTGkoR2YoZS5uKSxMaShuYyhvLm4pLHMpKX1mdW5jdGlvbiBhZG4odCl7c3dpdGNoKHUoUSh0LmIsKFRlKCksSDl0KSksMzc1KS5nKXtjYXNlIDE6dXMocHUoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZCwxNikpLG5ldyBfRiksbmV3IGh2KSxuZXcgU0YpO2JyZWFrO2Nhc2UgMjpZdm4odCk7YnJlYWs7Y2FzZSAwOk1nbih0KX19ZnVuY3Rpb24gb2RuKHQsZSxuKXt2YXIgcjt3cihuLCJTdHJhaWdodCBMaW5lIEVkZ2UgUm91dGluZyIsMSksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSkscj11KHFlKGUsKGJDKCksJFMpKSwzMyksX2xlKHQsciksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSl9ZnVuY3Rpb24gY3koKXtjeT1aLGVmdD1uZXcgbkMoIlZfVE9QIiwwKSxWTz1uZXcgbkMoIlZfQ0VOVEVSIiwxKSxHTz1uZXcgbkMoIlZfQk9UVE9NIiwyKSx0ZnQ9bmV3IG5DKCJIX0xFRlQiLDMpLHFPPW5ldyBuQygiSF9DRU5URVIiLDQpLEhPPW5ldyBuQygiSF9SSUdIVCIsNSl9ZnVuY3Rpb24gZDR0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1N6KHQpOihlPW5ldyBUaChTeih0KSksZS5hKz0iIChhYnN0cmFjdDogIixrZyhlLCh0LkJiJjI1NikhPTApLGUuYSs9IiwgaW50ZXJmYWNlOiAiLGtnKGUsKHQuQmImNTEyKSE9MCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBjZG4odCxlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIG1sKHQuZSkmJihzPWUuYWsoKSxkPWUuZGQoKSxvPW4uZGQoKSxoPXpwKHQsMSxzLGQsbyxzLiRqKCk/RUUodCxzLG8sRXQocyw5OSkmJih1KHMsMTgpLkJiJllhKSE9MCk6LTEsITApLHI/ci5FaShoKTpyPWgpLHJ9ZnVuY3Rpb24gdWRuKHQpe3ZhciBlO3QuYz09bnVsbCYmKGU9R3QodC5iKT09PUd0KFk4dCk/bnVsbDp0LmIsdC5kPWU9PW51bGw/VHU6eFl0KGUpP0dYZShGWHQoZSkpOmVhKGUpP0R4dDpBcChzbChlKSksdC5hPXQuYSsiOiAiKyh4WXQoZSk/QlFlKEZYdChlKSk6ZSsiIiksdC5jPSIoIit0LmQrIikgIit0LmEpfWZ1bmN0aW9uIGc0dCh0LGUpe3RoaXMuZT10LEF2KFBzKGUsLTQyOTQ5NjcyOTYpLDApPyh0aGlzLmQ9MSx0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW1NyKGUpXSkpOih0aGlzLmQ9Mix0aGlzLmE9Y3Qob3QoVHIsMSksWHIsMjUsMTUsW1NyKGUpLFNyKEZwKGUsMzIpKV0pKX1mdW5jdGlvbiBsZG4oKXtmdW5jdGlvbiB0KCl7dHJ5e3JldHVybiBuZXcgTWFwKCkuZW50cmllcygpLm5leHQoKS5kb25lfWNhdGNoe3JldHVybiExfX1yZXR1cm4gdHlwZW9mIE1hcD09PU5hdCYmTWFwLnByb3RvdHlwZS5lbnRyaWVzJiZ0KCk/TWFwOk40bigpfWZ1bmN0aW9uIGhkbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBoYSh0LmUsMCksbj0wO28uYjxvLmQuZ2MoKTspe2lmKHI9WHQoKFFuKG8uYjxvLmQuZ2MoKSkseWUoby5kLlhiKG8uYz1vLmIrKykpKSkscz1yLWUscz53Y3QpcmV0dXJuIG47cz4tMWUtNiYmKytufXJldHVybiBufWZ1bmN0aW9uIHA0dCh0LGUpe3ZhciBuO2UhPXQuYj8obj1udWxsLHQuYiYmKG49YyQodC5iLHQsLTQsbikpLGUmJihuPWU2KGUsdCwtNCxuKSksbj1OcmUodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIGVhZSh0LGUpe3ZhciBuO2UhPXQuZj8obj1udWxsLHQuZiYmKG49YyQodC5mLHQsLTEsbikpLGUmJihuPWU2KGUsdCwtMSxuKSksbj1QcmUodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwwLGUsZSkpfWZ1bmN0aW9uIG5hZSh0KXt2YXIgZSxuLHI7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihuPXUodCwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyB4ZyxlPW4uS2MoKTtlLk9iKCk7KWZvKHIsKERpKCksQnIoZS5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBXZXQocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIHJhZSh0KXt2YXIgZSxuLHI7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihuPXUodCwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyB4ZyxlPW4uS2MoKTtlLk9iKCk7KWZvKHIsKERpKCksQnIoZS5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBXZXQocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIGZkbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj10LmNbZS5jLnBdW2UucF0scz10LmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZzLmEhPW51bGw/UG50KHIuYSxzLmEpOnIuYSE9bnVsbD8tMTpzLmEhPW51bGw/MTowfWZ1bmN0aW9uIGRkbih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKWZvcihvPWUuYS5sZW5ndGgsbj1uZXcgUWIobyksZD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgoZSxoLmEpLHI9bmV3IGl6dCh0KSxubm4oci5hLHMpfWZ1bmN0aW9uIGdkbih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKWZvcihvPWUuYS5sZW5ndGgsbj1uZXcgUWIobyksZD0obi5iLW4uYSkqbi5jPDA/KElwKCksQWIpOm5ldyBQcChuKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9XzgoZSxoLmEpLHI9bmV3IFkkdCh0KSxlbm4oci5hLHMpfWZ1bmN0aW9uIHBkbih0KXt2YXIgZTtpZih0IT1udWxsJiZ0Lmxlbmd0aD4wJiZiYSh0LHQubGVuZ3RoLTEpPT0zMyl0cnl7cmV0dXJuIGU9dG9lKERsKHQsMCx0Lmxlbmd0aC0xKSksZS5lPT1udWxsfWNhdGNoKG4pe2lmKG49V2kobiksIUV0KG4sMzIpKXRocm93IHJ0KG4pfXJldHVybiExfWZ1bmN0aW9uIGlhZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiByPWUuYWsoKSxvPWUuZGQoKSxzPXIuJGooKT96cCh0LDMscixudWxsLG8sRUUodCxyLG8sRXQociw5OSkmJih1KHIsMTgpLkJiJllhKSE9MCksITApOnpwKHQsMSxyLHIuemooKSxvLC0xLCEwKSxuP24uRWkocyk6bj1zLG59ZnVuY3Rpb24gYmRuKCl7dmFyIHQsZSxuO2ZvcihlPTAsdD0wO3Q8MTt0Kyspe2lmKG49bzV0KChScih0LDEpLCJYIi5jaGFyQ29kZUF0KHQpKSksbj09MCl0aHJvdyBydChuZXcgRnIoIlVua25vd24gT3B0aW9uOiAiKyJYIi5zdWJzdHIodCkpKTtlfD1ufXJldHVybiBlfWZ1bmN0aW9uIHZkbih0LGUsbil7dmFyIHIscyxvO3N3aXRjaChyPUZhKGUpLHM9RXoociksbz1uZXcgTWMsVW8obyxlKSxuLmcpe2Nhc2UgMTpGcyhvLEhJKEp4KHMpKSk7YnJlYWs7Y2FzZSAyOkZzKG8sSngocykpfXJldHVybiBKdChvLChUZSgpLHp5KSx5ZShRKHQsenkpKSksb31mdW5jdGlvbiBiNHQodCl7dmFyIGUsbjtyZXR1cm4gZT11KExyKG5ldyBhcihscihqbyh0LmEpLmEuS2MoKSxuZXcgeikpKSwxNyksbj11KExyKG5ldyBhcihscihNcyh0LmEpLmEuS2MoKSxuZXcgeikpKSwxNyksamUoUmUoUShlLChzZSgpLCQxKSkpKXx8amUoUmUoUShuLCQxKSkpfWZ1bmN0aW9uIGc0KCl7ZzQ9WixMRz1uZXcga00oIk9ORV9TSURFIiwwKSxJRz1uZXcga00oIlRXT19TSURFU19DT1JORVIiLDEpLERHPW5ldyBrTSgiVFdPX1NJREVTX09QUE9TSU5HIiwyKSxNRz1uZXcga00oIlRIUkVFX1NJREVTIiwzKSxBRz1uZXcga00oIkZPVVJfU0lERVMiLDQpfWZ1bmN0aW9uIENzdCh0LGUsbixyLHMpe3ZhciBvLGg7bz11KFBsKFJpKGUuT2MoKSxuZXcgT1gpLGkyKG5ldyBfZSxuZXcgd2UsbmV3IG5yLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxHbCldKSkpLDE1KSxoPXUobzIodC5iLG4sciksMTUpLHM9PTA/aC5XYygwLG8pOmguR2Mobyl9ZnVuY3Rpb24gd2RuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCkscj1uZXcgYXIobHIoam8ocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksaD1uLmMuaS5wLHQubltoXT10Lm5baF0tMX1mdW5jdGlvbiBtZG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPW5ldyBTKGUuZCk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwMSksaD11KEpuKHQuYyxzKSwxMTIpLm8scj1uZXcgRXgocy5iKTtyLmE8ci5jLmEubGVuZ3RoOyluPXUoRkMociksNjEpLFNtdChzLG4saCl9ZnVuY3Rpb24geWRuKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5lLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI5KSxYM24odCxlKTt1cyhSaShXbyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgdlEpLG5ldyBqRiksbmV3IHhRKSxuZXcgTSR0KHQpKX1mdW5jdGlvbiB2NHQodCxlKXtyZXR1cm4gZT90LkRpKGUpPyExOnQuaT90LmkuRWkoZSk6RXQoZSwxNDMpPyh0Lmk9dShlLDE0MyksITApOih0Lmk9bmV3IGV4LHQuaS5FaShlKSk6ITF9ZnVuY3Rpb24geGRuKHQpe2lmKHQ9JGModCwhMCksaG4ocUUsdCl8fGhuKCIxIix0KSlyZXR1cm4gRm4oKSxZRTtpZihobihPY3QsdCl8fGhuKCIwIix0KSlyZXR1cm4gRm4oKSxJMjt0aHJvdyBydChuZXcgcmV0KCJJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICciK3QrIiciKSl9ZnVuY3Rpb24gdzR0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9dC52YygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDQyKSxvPXIuY2QoKSxHdChlKT09PUd0KG8pfHxlIT1udWxsJiZ5aShlLG8pKXJldHVybiBuJiYocj1uZXcgUlIoci5jZCgpLHIuZGQoKSkscy5RYigpKSxyO3JldHVybiBudWxsfWZ1bmN0aW9uIGtkbih0KXtCbSgpO3ZhciBlLG4scjt0LkIuSGMoKGNsKCksVlYpKSYmKHI9dC5mLmksZT1uZXcgbyQodC5hLmMpLG49bmV3IHd4LG4uYj1lLmMtci5jLG4uZD1lLmQtci5kLG4uYz1yLmMrci5iLShlLmMrZS5iKSxuLmE9ci5kK3IuYS0oZS5kK2UuYSksdC5lLkZmKG4pKX1mdW5jdGlvbiBzYWUodCxlLG4scil7dmFyIHMsbyxoO2ZvcihoPWIuTWF0aC5taW4obixkbGUodSh0LmIsNjUpLGUsbixyKSksbz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMSkscyE9ZSYmKGg9Yi5NYXRoLm1pbihoLHNhZShzLGUsaCxyKSkpO3JldHVybiBofWZ1bmN0aW9uIG00dCh0KXt2YXIgZSxuLHIscztmb3Iocz1QdChvMCx0ZSwxOTMsdC5iLmMubGVuZ3RoLDAsMikscj1uZXcgaGEodC5iLDApO3IuYjxyLmQuZ2MoKTspZT0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDI5KSksbj1yLmItMSxzW25dPXNJKGUuYSk7cmV0dXJuIHN9ZnVuY3Rpb24gX3N0KHQsZSxuLHIscyl7dmFyIG8saCxkLHc7Zm9yKGg9aktlKGVidChtdnQoS2huKG4pKSxyKSxyMW4odCxuLHMpKSx3PVJnKHQsbikuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLGVbZC5wXSYmKG89ZVtkLnBdLmksdWUoaC5kLG5ldyBEbnQobyxKeXQoaCxvKSkpKTtwM3QoaCl9ZnVuY3Rpb24geTR0KHQsZSl7dGhpcy5mPW5ldyBDcix0aGlzLmI9bmV3IENyLHRoaXMuaj1uZXcgQ3IsdGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5jPjAmJk1zZSh0aGlzLHRoaXMuYy0xLChiZSgpLEhuKSksdGhpcy5jPHRoaXMuYS5sZW5ndGgtMSYmTXNlKHRoaXMsdGhpcy5jKzEsKGJlKCksQm4pKX1mdW5jdGlvbiB4NHQodCl7dC5sZW5ndGg+MCYmdFswXS5sZW5ndGg+MCYmKHRoaXMuYz1qZShSZShRKEZhKHRbMF1bMF0pLChzZSgpLFpUdCkpKSkpLHRoaXMuYT1QdChvbWUsdGUsMjAxOCx0Lmxlbmd0aCwwLDIpLHRoaXMuYj1QdChjbWUsdGUsMjAxOSx0Lmxlbmd0aCwwLDIpLHRoaXMuZD1uZXcgU3JlfWZ1bmN0aW9uIEVkbih0KXtyZXR1cm4gdC5jLmxlbmd0aD09MD8hMTooQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLmMuaS5rPT0oR24oKSxacyk/ITA6QTgocHUobmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgY1EpLG5ldyB1USl9ZnVuY3Rpb24gVGRuKHQsZSxuKXtyZXR1cm4gd3IobiwiVHJlZSBsYXlvdXQiLDEpLHckKHQuYiksVWQodC5iLCh1RSgpLHZWKSx2ViksVWQodC5iLFBTLFBTKSxVZCh0LmIsUE8sUE8pLFVkKHQuYixGUyxGUyksdC5hPVRxKHQuYixlKSxKMm4odCxlLFJjKG4sMSkpLG9yKG4pLGV9ZnVuY3Rpb24gYWFlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGQ9Z3koZSksbz1lLmYsdz1lLmcsaD1iLk1hdGguc3FydChvKm8rdyp3KSxzPTAscj1uZXcgUyhkKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwzMykscys9YWFlKHQsbik7cmV0dXJuIGIuTWF0aC5tYXgocyxoKX1mdW5jdGlvbiBvYSgpe29hPVoseWI9bmV3IGlDKE9fLDApLEgxPW5ldyBpQygiRlJFRSIsMSksTDc9bmV3IGlDKCJGSVhFRF9TSURFIiwyKSxHMj1uZXcgaUMoIkZJWEVEX09SREVSIiwzKSxoMD1uZXcgaUMoIkZJWEVEX1JBVElPIiw0KSxWYz1uZXcgaUMoIkZJWEVEX1BPUyIsNSl9ZnVuY3Rpb24gQ2RuKHQsZSl7dmFyIG4scixzO2lmKG49ZS5IaCh0LmEpLG4pe2ZvcihzPUJyKFlmKCghbi5iJiYobi5iPW5ldyB5bCgoZG4oKSxRYSksY2MsbikpLG4uYiksRmgpKSxyPTE7cjwoUnUoKSxkTHQpLmxlbmd0aDsrK3IpaWYoaG4oZEx0W3JdLHMpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIF9kbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sUDAobywiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFNkbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sUDAobywiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIG9hZSh0KXt2YXIgZSxuLHI7Zm9yKHI9bmV3IGMyKEthLCJ7IiwifSIpLG49dC52YygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDQyKSxQMChyLE5adCh0LGUuY2QoKSkrIj0iK05adCh0LGUuZGQoKSkpO3JldHVybiByLmE/ci5lLmxlbmd0aD09MD9yLmEuYTpyLmEuYSsoIiIrci5lKTpyLmN9ZnVuY3Rpb24gQWRuKHQpe2Zvcih2YXIgZSxuLHIsczshTjkodC5vKTspbj11KEZ4KHQubyksNDYpLHI9dShuLmEsMTIxKSxlPXUobi5iLDIxMykscz1feihlLHIpLGUuZT09cj8ocGoocy5nLGUpLHIuZT1zLmUrZS5hKToocGoocy5iLGUpLHIuZT1zLmUtZS5hKSx1ZSh0LmUuYSxyKX1mdW5jdGlvbiBrNHQodCxlKXt2YXIgbixyLHM7Zm9yKG49bnVsbCxzPXUoZS5LYih0KSwyMCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTcpLCFuKW49ci5jLmk9PXQ/ci5kLmk6ci5jLmk7ZWxzZSBpZigoci5jLmk9PXQ/ci5kLmk6ci5jLmkpIT1uKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNhZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49QWNlKHQsITEsZSkscz1uZXcgUyhuKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjkpLHIuZD09MD8odnJ0KHIsbnVsbCksd3J0KHIsbnVsbCkpOihvPXIuYSxoPXIuYix2cnQocixoKSx3cnQocixvKSl9ZnVuY3Rpb24gTGRuKHQpe3ZhciBlLG47cmV0dXJuIGU9bmV3IEhzLFJsKGUscW1lKSxuPXUoUSh0LChzZSgpLEdjKSksMjEpLG4uSGMoKG9vKCksd1MpKSYmUmwoZSxVbWUpLG4uSGMobDcpJiZSbChlLEhtZSksbi5IYyhWNCkmJlJsKGUsVm1lKSxuLkhjKGg3KSYmUmwoZSxHbWUpLGV9ZnVuY3Rpb24gTWRuKHQpe3ZhciBlLG4scixzO2ZvcihaeW4odCksbj1uZXcgYXIobHIoejAodCkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNykscj1lLmMuaT09dCxzPXI/ZS5kOmUuYyxyP3NhKGUsbnVsbCk6RGEoZSxudWxsKSxKdChlLChzZSgpLG45dCkscyksanBuKHQscy5pKX1mdW5jdGlvbiBJZG4odCxlLG4scil7dmFyIHMsbztzd2l0Y2gobz1lLmkscz1uW28uZ11bdC5kW28uZ11dLG8uZyl7Y2FzZSAxOnMtPXIrZS5qLmIsZS5nLmI9czticmVhaztjYXNlIDM6cys9cixlLmcuYj1zO2JyZWFrO2Nhc2UgNDpzLT1yK2Uuai5hLGUuZy5hPXM7YnJlYWs7Y2FzZSAyOnMrPXIsZS5nLmE9c319ZnVuY3Rpb24gRGRuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksMzMpLHI9ZkQoZSksIXpyKG5ldyBhcihscihyLmEuS2MoKSxuZXcgeikpKSlyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBPZG4oKXt2YXIgdDtyZXR1cm4gRjRlP3Uod0UoKE1wKCksVWgpLEdFKSwyMDE2KToodD11KEV0KEZjKChNcCgpLFVoKSxHRSksNTU1KT9GYyhVaCxHRSk6bmV3IFFvZSw1NTUpLEY0ZT0hMCxCM24odCksVjVuKHQpLG1zdCh0KSx4byhVaCxHRSx0KSx0KX1mdW5jdGlvbiBTc3QodCxlLG4pe3ZhciByLHM7aWYodC5qPT0wKXJldHVybiBuO2lmKHM9dShJZWUodCxlLG4pLDcyKSxyPW4uYWsoKSwhci5JaigpfHwhdC5hLnJsKHIpKXRocm93IHJ0KG5ldyBHbygiSW52YWxpZCBlbnRyeSBmZWF0dXJlICciK3IuSGooKS56YisiLiIrci5uZSgpKyInIikpO3JldHVybiBzfWZ1bmN0aW9uIE5kbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGQ9dC5hLHc9MCxrPWQubGVuZ3RoO3c8azsrK3cpZm9yKGg9ZFt3XSxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcylpZihuPXJbc10sR3QoZSk9PT1HdChuKXx8ZSE9bnVsbCYmeWkoZSxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQZG4odCl7dmFyIGUsbixyO3JldHVybiB5Yyh0LDApPj0wPyhuPWVEKHQsTnEpLHI9VUkodCxOcSkpOihlPXptKHQsMSksbj1lRChlLDVlOCkscj1VSShlLDVlOCkscj1PYShNMChyLDEpLFBzKHQsMSkpKSxDMShNMChyLDMyKSxQcyhuLGNvKSl9ZnVuY3Rpb24gdWFlKHQsZSxuKXt2YXIgcixzO3N3aXRjaChyPShRbihlLmIhPTApLHUoY2goZSxlLmEuYSksOCkpLG4uZyl7Y2FzZSAwOnIuYj0wO2JyZWFrO2Nhc2UgMjpyLmI9dC5mO2JyZWFrO2Nhc2UgMzpyLmE9MDticmVhaztkZWZhdWx0OnIuYT10Lmd9cmV0dXJuIHM9ZWkoZSwwKSxYTShzLHIpLGV9ZnVuY3Rpb24gbGFlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7c3dpdGNoKHc9dC5iLG89ZS5kLGg9by5qLGQ9TTN0KGgsdy5kW2guZ10sbikscz1MaShuYyhvLm4pLG8uYSksby5qLmcpe2Nhc2UgMTpjYXNlIDM6ZC5hKz1zLmE7YnJlYWs7Y2FzZSAyOmNhc2UgNDpkLmIrPXMuYn1ocyhyLGQsci5jLmIsci5jKX1mdW5jdGlvbiBGZG4odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihoPVJvKHQuZSxlLDApLG89bmV3IE5wdCxvLmI9bixyPW5ldyBoYSh0LmUsaCk7ci5iPHIuZC5nYygpOylzPShRbihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMTApKSxzLnA9bix1ZShvLmUscyksRWwocik7cmV0dXJuIG99ZnVuY3Rpb24gQmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKHM9bnVsbCxvPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksdz1oLmkraC5nLHQ8aC5qK2guZityJiYocz9uLmktdzxuLmktbyYmKHM9aCk6cz1oLG89cy5pK3MuZyk7cmV0dXJuIHM/bytyOjB9ZnVuY3Rpb24gUmRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7Zm9yKG89bnVsbCxzPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksdz1oLmoraC5mLHQ8aC5pK2guZytyJiYobz9uLmotdzxuLmotcyYmKG89aCk6bz1oLHM9by5qK28uZik7cmV0dXJuIG8/cytyOjB9ZnVuY3Rpb24gamRuKHQpe3ZhciBlLG4scjtmb3IoZT0hMSxyPXQuYi5jLmxlbmd0aCxuPTA7bjxyO24rKylMeXQodShGZSh0LmIsbiksNDM0KSk/IWUmJm4rMTxyJiZMeXQodShGZSh0LmIsbisxKSw0MzQpKSYmKGU9ITAsdShGZSh0LmIsbiksNDM0KS5hPSEwKTplPSExfWZ1bmN0aW9uICRkbih0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKG89MCxoPTA7aDxzO2grKylvPU9hKG8sWXAoUHMoZVtoXSxjbyksUHMocltoXSxjbykpKSx0W2hdPVNyKG8pLG89RnAobywzMik7Zm9yKDtoPG47aCsrKW89T2EobyxQcyhlW2hdLGNvKSksdFtoXT1TcihvKSxvPUZwKG8sMzIpfWZ1bmN0aW9uIHpkbih0LGUpe2JFKCk7dmFyIG4scjtmb3Iocj0oSnAoKSxHSCksbj10O2U+MTtlPj49MSllJjEmJihyPUozKHIsbikpLG4uZD09MT9uPUozKG4sbik6bj1uZXcgTmllKEh1ZShuLmEsbi5kLFB0KFRyLFhyLDI1LG4uZDw8MSwxNSwxKSkpO3JldHVybiByPUozKHIsbikscn1mdW5jdGlvbiBFNHQoKXtFNHQ9Wjt2YXIgdCxlLG4scjtmb3IoVEV0PVB0KGlhLHZvLDI1LDI1LDE1LDEpLENFdD1QdChpYSx2bywyNSwzMywxNSwxKSxyPTE1MjU4Nzg5MDYyNWUtMTYsZT0zMjtlPj0wO2UtLSlDRXRbZV09cixyKj0uNTtmb3Iobj0xLHQ9MjQ7dD49MDt0LS0pVEV0W3RdPW4sbio9LjV9ZnVuY3Rpb24gcWRuKHQpe3ZhciBlLG47aWYoamUoUmUocWUodCwoVGUoKSwkeSkpKSkpe2ZvcihuPW5ldyBhcihscihHMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KExyKG4pLDc5KSx1dyhlKSYmamUoUmUocWUoZSxQMikpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBoYWUodCxlKXt2YXIgbixyLHM7TnModC5mLGUpJiYoZS5iPXQscj1lLmMsUm8odC5qLHIsMCkhPS0xfHx1ZSh0Lmoscikscz1lLmQsUm8odC5qLHMsMCkhPS0xfHx1ZSh0Lmoscyksbj1lLmEuYixuLmMubGVuZ3RoIT0wJiYoIXQuaSYmKHQuaT1uZXcgSGllKHQpKSxpY24odC5pLG4pKSl9ZnVuY3Rpb24gSGRuKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG49dC5jLmQscj1uLmoscz10LmQuZCxvPXMuaixyPT1vP24ucDxzLnA/MDoxOmt6KHIpPT1vPzA6dDN0KHIpPT1vPzE6KGU9dC5iLE51KGUuYixreihyKSk/MDoxKX1mdW5jdGlvbiBaeigpe1p6PVosYWh0PW5ldyBKOShDMWUsMCksRUN0PW5ldyBKOSgiTE9OR0VTVF9QQVRIIiwxKSxzaHQ9bmV3IEo5KCJDT0ZGTUFOX0dSQUhBTSIsMiksa0N0PW5ldyBKOShqb3QsMyksVEN0PW5ldyBKOSgiU1RSRVRDSF9XSURUSCIsNCksY1Y9bmV3IEo5KCJNSU5fV0lEVEgiLDUpfWZ1bmN0aW9uIHcyKHQpe3ZhciBlO3RoaXMuZD1uZXcgQ3IsdGhpcy5jPXQuYyx0aGlzLmU9dC5kLHRoaXMuYj10LmIsdGhpcy5mPW5ldyBvWXQodC5lKSx0aGlzLmE9dC5hLHQuZj90aGlzLmc9dC5mOnRoaXMuZz0oZT11KEhmKGVVKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKX1mdW5jdGlvbiBKeih0LGUpe3ZhciBuLHIscyxvLGgsZDtzPXQsaD1QQyhzLCJsYXlvdXRPcHRpb25zIiksIWgmJihoPVBDKHMsRWRlKSksaCYmKGQ9aCxyPW51bGwsZCYmKHI9KG89dWl0KGQsUHQoQWUsdGUsMiwwLDYsMSkpLG5ldyBmZXQoZCxvKSkpLHImJihuPW5ldyBrVnQoZCxlKSx2YShyLG4pKSl9ZnVuY3Rpb24gTW8odCl7aWYoRXQodCwyMzkpKXJldHVybiB1KHQsMzMpO2lmKEV0KHQsMTg2KSlyZXR1cm4gazEodSh0LDExOCkpO3Rocm93IHJ0KHQ/bmV3IHlnKCJPbmx5IHN1cHBvcnQgbm9kZXMgYW5kIHBvcnRzLiIpOm5ldyB5eChEZGUpKX1mdW5jdGlvbiBHZG4odCxlLG4scil7cmV0dXJuKGU+PTAmJmhuKHQuc3Vic3RyKGUsMyksIkdNVCIpfHxlPj0wJiZobih0LnN1YnN0cihlLDMpLCJVVEMiKSkmJihuWzBdPWUrMyksWDV0KHQsbixyKX1mdW5jdGlvbiBWZG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPXQuZy5hLGg9dC5nLmIscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubixzLmE9byx0Lmk9PShiZSgpLE5uKT9zLmI9aCt0LmouYi1uLm8uYjpzLmI9aCxMaShzLGUpLG8rPW4uby5hK3QuZX1mdW5jdGlvbiB3cih0LGUsbil7aWYodC5iKXRocm93IHJ0KG5ldyBGbygiVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLiIpKTtyZXR1cm4gdC5wIT1udWxsPyExOih0LnA9ZSx0LnI9bix0LmsmJih0Lm89KHFkKCksQ2Eoa3UoRGF0ZS5ub3coKSksJGcpKSksITApfWZ1bmN0aW9uIFQ0dCh0KXt2YXIgZSxuLHIscyxvLGgsZDtyZXR1cm4gZD1uZXcgbXgsbj10LnRnKCkscz1uIT1udWxsLHMmJnA4KGQsQ2QsdC50ZygpKSxyPXQubmUoKSxvPXIhPW51bGwsbyYmcDgoZCxvaSx0Lm5lKCkpLGU9dC5zZygpLGg9ZSE9bnVsbCxoJiZwOChkLCJkZXNjcmlwdGlvbiIsdC5zZygpKSxkfWZ1bmN0aW9uIGZhZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPXQucSx0LnE9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHM9bmV3IFFzKHQsMSw5LG8sZSksbj9uLkVpKHMpOm49cyksZT8ocj1lLmMsciE9dC5yJiYobj10Lm5rKHIsbikpKTp0LnImJihuPXQubmsobnVsbCxuKSksbn1mdW5jdGlvbiBVZG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG49KGQ9ZSxlNihkLHQuZSwtMS10LmMsbikpLGg9eHd0KHQuYSksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsdC5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBXZG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG49KGQ9ZSxjJChkLHQuZSwtMS10LmMsbikpLGg9eHd0KHQuYSksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsdC5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBLZG4odCxlLG4scil7dmFyIHMsbyxoO2lmKHI9PTApSWMoZSwwLHQsbix0Lmxlbmd0aC1uKTtlbHNlIGZvcihoPTMyLXIsdFt0Lmxlbmd0aC0xXT0wLG89dC5sZW5ndGgtMTtvPm47by0tKXRbb118PWVbby1uLTFdPj4+aCx0W28tMV09ZVtvLW4tMV08PHI7Zm9yKHM9MDtzPG47cysrKXRbc109MH1mdW5jdGlvbiBZZG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT0wLG49MCxvPXQuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTExKSxlPWIuTWF0aC5tYXgoZSxyLmQuYiksbj1iLk1hdGgubWF4KG4sci5kLmMpO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmQuYj1lLHIuZC5jPW59ZnVuY3Rpb24gWGRuKHQpe3ZhciBlLG4scixzLG87Zm9yKG49MCxlPTAsbz10LktjKCk7by5PYigpOylyPXUoby5QYigpLDExMSksbj1iLk1hdGgubWF4KG4sci5kLmQpLGU9Yi5NYXRoLm1heChlLHIuZC5hKTtmb3Iocz10LktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5kLmQ9bixyLmQuYT1lfWZ1bmN0aW9uIGRhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBsZSxzPTAscj1lLktjKCk7ci5PYigpOyl7Zm9yKG49ZGUodShyLlBiKCksMTkpLmErcyk7bi5hPHQuZiYmISR0bih0LG4uYSk7KW49ZGUobi5hKzEpLCsrcztpZihuLmE+PXQuZilicmVhaztvLmNbby5jLmxlbmd0aF09bn1yZXR1cm4gb31mdW5jdGlvbiBDNHQodCl7dmFyIGUsbixyLHM7Zm9yKGU9bnVsbCxzPW5ldyBTKHQud2YoKSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTgxKSxuPW5ldyBpaChyLnFmKCkuYSxyLnFmKCkuYixyLnJmKCkuYSxyLnJmKCkuYiksZT9oXyhlLG4pOmU9bjtyZXR1cm4hZSYmKGU9bmV3IEF4KSxlfWZ1bmN0aW9uIEFzdCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0xPyghdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLFFjKHQubixlLHIpKToobz11KHluKChzPXUoSW4odCwxNiksMjYpLHN8fHQuemgoKSksbiksNjYpLG8uTmooKS5Raih0LGl1KHQpLG4tWm4odC56aCgpKSxlLHIpKX1mdW5jdGlvbiBMc3QodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHI9bi5nYygpLHQucWkodC5pK3IpLGQ9dC5pLWUsZD4wJiZJYyh0LmcsZSx0LmcsZStyLGQpLGg9bi5LYygpLHQuaSs9cixzPTA7czxyOysrcylvPWguUGIoKSxmQyh0LGUsdC5vaShlLG8pKSx0LmJpKGUsbyksdC5jaSgpLCsrZTtyZXR1cm4gciE9MH1mdW5jdGlvbiBPMSh0LGUsbil7dmFyIHI7cmV0dXJuIGUhPXQucT8odC5xJiYobj1jJCh0LnEsdCwtMTAsbikpLGUmJihuPWU2KGUsdCwtMTAsbikpLG49ZmFlKHQsZSxuKSk6dC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBRcyh0LDEsOSxlLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gTXN0KHQsZSxuLHIpe3JldHVybiBndnQoKG4mYmQpPT0wLCJmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU1VCU0laRUQgY2hhcmFjdGVyaXN0aWMiKSxndnQoKG4mNCk9PTAsImZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTT1JURUQgY2hhcmFjdGVyaXN0aWMiKSxBcih0KSxBcihlKSxuZXcgd1p0KHQsbixyLGUpfWZ1bmN0aW9uIFFkbih0LGUpe3V3dChlLCJDYW5ub3Qgc3VwcHJlc3MgYSBudWxsIGV4Y2VwdGlvbi4iKSxfaihlIT10LCJFeGNlcHRpb24gY2FuIG5vdCBzdXBwcmVzcyBpdHNlbGYuIiksIXQuaSYmKHQuaz09bnVsbD90Lms9Y3Qob3QoeXV0LDEpLHRlLDc4LDAsW2VdKTp0LmtbdC5rLmxlbmd0aF09ZSl9ZnVuY3Rpb24gcDQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPW4ubGVuZ3RoLG89MCxzPS0xLGs9b2VlKHQuc3Vic3RyKGUpLCh2bnQoKSxrRXQpKSxkPTA7ZDxoOysrZCl3PW5bZF0ubGVuZ3RoLHc+byYmb2VuKGssb2VlKG5bZF0sa0V0KSkmJihzPWQsbz13KTtyZXR1cm4gcz49MCYmKHJbMF09ZStvKSxzfWZ1bmN0aW9uIFpkbih0LGUpe3ZhciBuO2lmKG49aVV0KHQuYi5IZigpLGUuYi5IZigpKSxuIT0wKXJldHVybiBuO3N3aXRjaCh0LmIuSGYoKS5nKXtjYXNlIDE6Y2FzZSAyOnJldHVybiBkdSh0LmIuc2YoKSxlLmIuc2YoKSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gZHUoZS5iLnNmKCksdC5iLnNmKCkpfXJldHVybiAwfWZ1bmN0aW9uIEpkbih0KXt2YXIgZSxuLHI7Zm9yKHI9dC5lLmMubGVuZ3RoLHQuYT1YYihUcixbdGUsWHJdLFs0OCwyNV0sMTUsW3Iscl0sMiksbj1uZXcgUyh0LmMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI4MiksdC5hW2UuYy5iXVtlLmQuYl0rPXUoUShlLChaZigpLHQ3KSksMTkpLmF9ZnVuY3Rpb24gdDBuKHQsZSxuKXt3cihuLCJHcm93IFRyZWUiLDEpLHQuYj1lLmYsamUoUmUoUShlLChHOCgpLHVTKSkpKT8odC5jPW5ldyBncCxNUXQodCxudWxsKSk6dC5jPW5ldyBncCx0LmE9ITEsT2NlKHQsZS5mKSxKdChlLG43dCwoRm4oKSwhIXQuYSkpLG9yKG4pfWZ1bmN0aW9uIGUwbih0LGUpe3ZhciBuLHIscyxvLGg7aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3IoaD1QdChtaCx2ZCwyNSwyKmUsMTUsMSkscj0wLHM9MDtyPGU7KytyKW49dFtyXT4+NCYxNSxvPXRbcl0mMTUsaFtzKytdPXpBdFtuXSxoW3MrK109ekF0W29dO3JldHVybiBBaChoLDAsaC5sZW5ndGgpfWZ1bmN0aW9uIG4wbih0LGUsbil7dmFyIHIscyxvO3JldHVybiByPWUuYWsoKSxvPWUuZGQoKSxzPXIuJGooKT96cCh0LDQscixvLG51bGwsRUUodCxyLG8sRXQociw5OSkmJih1KHIsMTgpLkJiJllhKSE9MCksITApOnpwKHQsci5LaigpPzI6MSxyLG8sci56aigpLC0xLCEwKSxuP24uRWkocyk6bj1zLG59ZnVuY3Rpb24gRXUodCl7dmFyIGUsbjtyZXR1cm4gdD49WWE/KGU9T0QrKHQtWWE+PjEwJjEwMjMpJm1zLG49NTYzMjArKHQtWWEmMTAyMykmbXMsU3RyaW5nLmZyb21DaGFyQ29kZShlKSsoIiIrU3RyaW5nLmZyb21DaGFyQ29kZShuKSkpOlN0cmluZy5mcm9tQ2hhckNvZGUodCZtcyl9ZnVuY3Rpb24gcjBuKHQsZSl7Qm0oKTt2YXIgbixyLHMsbztyZXR1cm4gcz11KHUoQWkodC5yLGUpLDIxKSw4NCkscy5nYygpPj0yPyhyPXUocy5LYygpLlBiKCksMTExKSxuPXQudS5IYygoUXUoKSxKUykpLG89dC51LkhjKEc2KSwhci5hJiYhbiYmKHMuZ2MoKT09Mnx8bykpOiExfWZ1bmN0aW9uIGdhZSh0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3Iobz1RY2UodCxlLG4scixzKSxkPSExOyFvOylzcSh0LHMsITApLGQ9ITAsbz1RY2UodCxlLG4scixzKTtkJiZzcSh0LHMsITEpLGg9Z2l0KHMpLGguYy5sZW5ndGghPTAmJih0LmQmJnQuZC5sZyhoKSxnYWUodCxzLG4scixoKSl9ZnVuY3Rpb24gdHEoKXt0cT1aLGJmdD1uZXcgckMoSzAsMCkscEF0PW5ldyByQygiRElSRUNURUQiLDEpLHZBdD1uZXcgckMoIlVORElSRUNURUQiLDIpLGRBdD1uZXcgckMoIkFTU09DSUFUSU9OIiwzKSxiQXQ9bmV3IHJDKCJHRU5FUkFMSVpBVElPTiIsNCksZ0F0PW5ldyByQygiREVQRU5ERU5DWSIsNSl9ZnVuY3Rpb24gaTBuKHQsZSl7dmFyIG47aWYoIWsxKHQpKXRocm93IHJ0KG5ldyBGbyh1ZGUpKTtzd2l0Y2gobj1rMSh0KSxlLmcpe2Nhc2UgMTpyZXR1cm4tKHQuait0LmYpO2Nhc2UgMjpyZXR1cm4gdC5pLW4uZztjYXNlIDM6cmV0dXJuIHQuai1uLmY7Y2FzZSA0OnJldHVybi0odC5pK3QuZyl9cmV0dXJuIDB9ZnVuY3Rpb24gZEUodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQuYi5jLmxlbmd0aCx1ZSh0LmIsZSk7cj4wOyl7aWYobj1yLHI9KHItMSkvMnwwLHQuYS51ZShGZSh0LmIsciksZSk8PTApcmV0dXJuIGFoKHQuYixuLGUpLCEwO2FoKHQuYixuLEZlKHQuYixyKSl9cmV0dXJuIGFoKHQuYixyLGUpLCEwfWZ1bmN0aW9uIF80dCh0LGUsbixyKXt2YXIgcyxvO2lmKHM9MCxuKXM9d3oodC5hW24uZ11bZS5nXSxyKTtlbHNlIGZvcihvPTA7bzxRSDtvKyspcz1iLk1hdGgubWF4KHMsd3oodC5hW29dW2UuZ10scikpO3JldHVybiBlPT0oS2YoKSx0dSkmJnQuYiYmKHM9Yi5NYXRoLm1heChzLHQuYi5hKSksc31mdW5jdGlvbiBzMG4odCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHM9dC5pLG89ZS5pLCFzfHwhb3x8cy5pIT1vLml8fHMuaT09KGJlKCksSG4pfHxzLmk9PShiZSgpLEJuKT8hMTooaD1zLmcuYSxuPWgrcy5qLmEsZD1vLmcuYSxyPWQrby5qLmEsaDw9ciYmbj49ZCl9ZnVuY3Rpb24gUzR0KHQsZSxuLHIpe3ZhciBzO2lmKHM9ITEsZWEocikmJihzPSEwLHA4KGUsbixCcihyKSkpLHN8fE9tKHIpJiYocz0hMCxTNHQodCxlLG4scikpLHN8fEV0KHIsMjM2KSYmKHM9ITAsSmIoZSxuLHUociwyMzYpKSksIXMpdGhyb3cgcnQobmV3IHRldCh4OHQpKX1mdW5jdGlvbiBhMG4odCxlKXt2YXIgbixyLHM7aWYobj1lLkhoKHQuYSksbiYmKHM9WWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSxOaCkscyE9bnVsbCkpe2ZvcihyPTE7cjwoUnUoKSxoTHQpLmxlbmd0aDsrK3IpaWYoaG4oaEx0W3JdLHMpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIG8wbih0LGUpe3ZhciBuLHIscztpZihuPWUuSGgodC5hKSxuJiYocz1ZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLE5oKSxzIT1udWxsKSl7Zm9yKHI9MTtyPChSdSgpLGZMdCkubGVuZ3RoOysrcilpZihobihmTHRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gcGFlKHQsZSl7dmFyIG4scixzLG87aWYoT24oZSksbz10LmEuZ2MoKSxvPGUuZ2MoKSlmb3Iobj10LmEuZWMoKS5LYygpO24uT2IoKTspcj1uLlBiKCksZS5IYyhyKSYmbi5RYigpO2Vsc2UgZm9yKHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5hLkJjKHIpIT1udWxsO3JldHVybiBvIT10LmEuZ2MoKX1mdW5jdGlvbiBiYWUodCl7dmFyIGUsbjtzd2l0Y2gobj1uYyhLbyhjdChvdChVcywxKSx0ZSw4LDAsW3QuaS5uLHQubix0LmFdKSkpLGU9dC5pLmQsdC5qLmcpe2Nhc2UgMTpuLmItPWUuZDticmVhaztjYXNlIDI6bi5hKz1lLmM7YnJlYWs7Y2FzZSAzOm4uYis9ZS5hO2JyZWFrO2Nhc2UgNDpuLmEtPWUuYn1yZXR1cm4gbn1mdW5jdGlvbiBjMG4odCl7dmFyIGU7Zm9yKGU9KFh4KCksdShMcihuZXcgYXIobHIoam8odCkuYS5LYygpLG5ldyB6KSkpLDE3KS5jLmkpO2Uuaz09KEduKCksWnMpOylKdChlLChzZSgpLEVPKSwoRm4oKSwhMCkpLGU9dShMcihuZXcgYXIobHIoam8oZSkuYS5LYygpLG5ldyB6KSkpLDE3KS5jLml9ZnVuY3Rpb24gSXN0KHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihkPVFDKGUsciksaD1kLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDExKSx0LmRbcy5wXT10LmRbcy5wXSt0LmNbbi5wXTtmb3IoZD1RQyhuLHIpLG89ZC5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMSksdC5kW3MucF09dC5kW3MucF0tdC5jW2UucF19ZnVuY3Rpb24gQTR0KHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksbTEocixyLmkrZSxyLmorbik7dmEoKCF0LmImJih0LmI9bmV3IGhlKFdzLHQsMTIsMykpLHQuYiksbmV3IGhWdChlLG4pKX1mdW5jdGlvbiB1MG4odCxlLG4scil7dmFyIHMsbztmb3Iobz1lLHM9by5kPT1udWxsfHx0LmEudWUobi5kLG8uZCk+MD8xOjA7by5hW3NdIT1uOylvPW8uYVtzXSxzPXQuYS51ZShuLmQsby5kKT4wPzE6MDtvLmFbc109cixyLmI9bi5iLHIuYVswXT1uLmFbMF0sci5hWzFdPW4uYVsxXSxuLmFbMF09bnVsbCxuLmFbMV09bnVsbH1mdW5jdGlvbiBsMG4odCl7UXUoKTt2YXIgZSxuO3JldHVybiBlPWppKHRnLGN0KG90KEdWLDEpLGFlLDI3MywwLFt4Yl0pKSwhKEFJKGgkKGUsdCkpPjF8fChuPWppKEpTLGN0KG90KEdWLDEpLGFlLDI3MywwLFtaUyxHNl0pKSxBSShoJChuLHQpKT4xKSl9ZnVuY3Rpb24gTDR0KHQsZSl7dmFyIG47bj1GYygoTXAoKSxVaCksdCksRXQobiw0OTgpP3hvKFVoLHQsbmV3IE5WdCh0aGlzLGUpKTp4byhVaCx0LHRoaXMpLERzdCh0aGlzLGUpLGU9PSh0OCgpLEpBdCk/KHRoaXMud2I9dSh0aGlzLDE5MzkpLHUoZSwxOTQxKSk6dGhpcy53Yj0oanAoKSxMbil9ZnVuY3Rpb24gaDBuKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihlPW51bGwsbj0wO248ckEubGVuZ3RoOysrbil0cnl7cmV0dXJuIFRHdChyQVtuXSx0KX1jYXRjaChzKXtpZihzPVdpKHMpLEV0KHMsMzIpKXI9cyxlPXI7ZWxzZSB0aHJvdyBydChzKX10aHJvdyBydChuZXcgRiQoZSkpfWZ1bmN0aW9uIHZhZSgpe3ZhZT1aLFNnZT1jdChvdChBZSwxKSx0ZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksQWdlPWN0KG90KEFlLDEpLHRlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsbDYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKX1mdW5jdGlvbiB3YWUodCl7dmFyIGUsbixyO2U9aG4odHlwZW9mIGUscG90KT9udWxsOm5ldyBxYSxlJiYoczgoKSxuPShyPTkwMCxyPj0kZz8iZXJyb3IiOnI+PTkwMD8id2FybiI6cj49ODAwPyJpbmZvIjoibG9nIiksZVh0KG4sdC5hKSx0LmImJkw1dChlLG4sdC5iLCJFeGNlcHRpb246ICIsITApKX1mdW5jdGlvbiBRKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0oIXQucSYmKHQucT1uZXcgQ3IpLEpuKHQucSxlKSkscj8/KG49ZS53ZygpLEV0KG4sNCkmJihuPT1udWxsPyghdC5xJiYodC5xPW5ldyBDciksVXgodC5xLGUpKTooIXQucSYmKHQucT1uZXcgQ3IpLGtpKHQucSxlLG4pKSksbil9ZnVuY3Rpb24gV2EoKXtXYT1aLEFkPW5ldyB4TSgiUDFfQ1lDTEVfQlJFQUtJTkciLDApLGxiPW5ldyB4TSgiUDJfTEFZRVJJTkciLDEpLG91PW5ldyB4TSgiUDNfTk9ERV9PUkRFUklORyIsMikscWM9bmV3IHhNKCJQNF9OT0RFX1BMQUNFTUVOVCIsMyksSW89bmV3IHhNKCJQNV9FREdFX1JPVVRJTkciLDQpfWZ1bmN0aW9uIG1hZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9ZT09MT9RdXQ6WHV0LHI9cy5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDEwMyksaD11KEFpKHQuZi5jLG4pLDIxKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NiksdnUodC5iLmIsby5iKSx2dSh0LmIuYSx1KG8uYiw4MSkuZCl9ZnVuY3Rpb24gZjBuKHQsZSl7JEMoKTt2YXIgbjtpZih0LmM9PWUuYyl7aWYodC5iPT1lLmJ8fEJvbih0LmIsZS5iKSl7aWYobj1VWWUodC5iKT8xOi0xLHQuYSYmIWUuYSlyZXR1cm4gbjtpZighdC5hJiZlLmEpcmV0dXJuLW59cmV0dXJuIGR1KHQuYi5nLGUuYi5nKX1lbHNlIHJldHVybiBMcyh0LmMsZS5jKX1mdW5jdGlvbiBkMG4odCxlKXt2YXIgbjt3cihlLCJIaWVyYXJjaGljYWwgcG9ydCBwb3NpdGlvbiBwcm9jZXNzaW5nIiwxKSxuPXQuYixuLmMubGVuZ3RoPjAmJlJ1ZSgoQW4oMCxuLmMubGVuZ3RoKSx1KG4uY1swXSwyOSkpLHQpLG4uYy5sZW5ndGg+MSYmUnVlKHUoRmUobixuLmMubGVuZ3RoLTEpLDI5KSx0KSxvcihlKX1mdW5jdGlvbiB5YWUodCxlKXt2YXIgbixyLHM7aWYoSTR0KHQsZSkpcmV0dXJuITA7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMzMpLHM9dGFlKG4pLGRxKHQsbixzKXx8QXJlKHQsbiktdC5nPD10LmEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gckQoKXtyRD1aLERWPShuYXQoKSxsU3QpLFlodD1FM2UsS2h0PWszZSxyU3Q9bTNlLFdodD14M2UsblN0PW5ldyBNdig4KSxmM2U9bmV3IGVvKChjaSgpLHEyKSxuU3QpLGQzZT1uZXcgZW8oSDIsOCksZzNlPWNTdCx0U3Q9cDNlLGVTdD1iM2UsaDNlPW5ldyBlbyhVTywoRm4oKSwhMSkpfWZ1bmN0aW9uIGVxKCl7ZXE9WixTU3Q9bmV3IE12KDE1KSwkM2U9bmV3IGVvKChjaSgpLHEyKSxTU3QpLHozZT1uZXcgZW8oSDIsMTUpLEFTdD1uZXcgZW8oelYsZGUoMCkpLFRTdD1SU3QsUjNlPXoyLGozZT12YixFU3Q9bmV3IGVvKCQ2LFYxZSksQ1N0PVJWLF9TdD1hNSxKaHQ9VjNlLEIzZT1CVn1mdW5jdGlvbiBaZCh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE1vKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpfWZ1bmN0aW9uIHhhZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE9JKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpfWZ1bmN0aW9uIGthZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmkhPTF8fCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaSE9MSl0aHJvdyBydChuZXcgUG4oVWN0KSk7cmV0dXJuIE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpfWZ1bmN0aW9uIFhwKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IHJ0KG5ldyBQbihVY3QpKTtyZXR1cm4gTW8odShTdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSl9ZnVuY3Rpb24gTTR0KHQsZSxuKXt2YXIgcixzLG87aWYoKyt0Lmoscz10LlZpKCksZT49c3x8ZTwwKXRocm93IHJ0KG5ldyBtbyhXY3QrZStTMitzKSk7aWYobj49c3x8bjwwKXRocm93IHJ0KG5ldyBtbyhLY3QrbitTMitzKSk7cmV0dXJuIGUhPW4/cj0obz10LlRpKG4pLHQuSGkoZSxvKSxvKTpyPXQuT2kobikscn1mdW5jdGlvbiBFYWUodCl7dmFyIGUsbixyO2lmKHI9dCx0KWZvcihlPTAsbj10LlVnKCk7bjtuPW4uVWcoKSl7aWYoKytlPm9vdClyZXR1cm4gRWFlKG4pO2lmKHI9bixuPT10KXRocm93IHJ0KG5ldyBGbygiVGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgY29udGFpbm1lbnQgaGllcmFyY2h5IG9mICIrdCkpfXJldHVybiByfWZ1bmN0aW9uIFFwKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgYzIoS2EsIlsiLCJdIiksbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxQMChyLEd0KGUpPT09R3QodCk/Iih0aGlzIENvbGxlY3Rpb24pIjplPT1udWxsP1R1OiRvKGUpKTtyZXR1cm4gci5hP3IuZS5sZW5ndGg9PTA/ci5hLmE6ci5hLmErKCIiK3IuZSk6ci5jfWZ1bmN0aW9uIEk0dCh0LGUpe3ZhciBuLHI7aWYocj0hMSxlLmdjKCk8MilyZXR1cm4hMTtmb3Iobj0wO248ZS5nYygpO24rKyluPGUuZ2MoKS0xP3I9cnxkcSh0LHUoZS5YYihuKSwzMyksdShlLlhiKG4rMSksMzMpKTpyPXJ8ZHEodCx1KGUuWGIobiksMzMpLHUoZS5YYigwKSwzMykpO3JldHVybiByfWZ1bmN0aW9uIFRhZSh0LGUpe3ZhciBuO2UhPXQuYT8obj1udWxsLHQuYSYmKG49dSh0LmEsNDkpLmloKHQsNCxyMSxuKSksZSYmKG49dShlLDQ5KS5naCh0LDQscjEsbikpLG49SHl0KHQsZSxuKSxuJiZuLkZpKCkpOnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsMSxlLGUpKX1mdW5jdGlvbiBENHQodCxlKXt2YXIgbjtlIT10LmU/KHQuZSYmT0p0KHh3dCh0LmUpLHQpLGUmJighZS5iJiYoZS5iPW5ldyBjUihuZXcgWXR0KSksV1d0KGUuYix0KSksbj1UMW4odCxlLG51bGwpLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSw0LGUsZSkpfWZ1bmN0aW9uIHV5KHQpe3ZhciBlLG4scjtmb3Iobj10Lmxlbmd0aCxyPTA7cjxuJiYoUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpPD0zMik7KSsrcjtmb3IoZT1uO2U+ciYmKFJyKGUtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUtMSk8PTMyKTspLS1lO3JldHVybiByPjB8fGU8bj90LnN1YnN0cihyLGUtcik6dH1mdW5jdGlvbiBnMG4odCxlKXt2YXIgbjtuPWUubyxPcCh0LmYpPyh0LmouYT1iLk1hdGgubWF4KHQuai5hLG4uYSksdC5qLmIrPW4uYix0LmQuYy5sZW5ndGg+MSYmKHQuai5iKz10LmUpKToodC5qLmErPW4uYSx0LmouYj1iLk1hdGgubWF4KHQuai5iLG4uYiksdC5kLmMubGVuZ3RoPjEmJih0LmouYSs9dC5lKSl9ZnVuY3Rpb24gWnAoKXtacD1aLHIyZT1jdChvdChYYSwxKSx4Yyw2MSwwLFsoYmUoKSxObiksSG4sbXJdKSxuMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbSG4sbXIsQm5dKSxpMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbbXIsQm4sTm5dKSxzMmU9Y3Qob3QoWGEsMSkseGMsNjEsMCxbQm4sTm4sSG5dKX1mdW5jdGlvbiBwMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYoaD10LmMuZCxkPXQuZC5kLGguaiE9ZC5qKWZvcihDPXQuYixzPWguaix3PW51bGw7cyE9ZC5qOyl3PWU9PTA/a3oocyk6dDN0KHMpLG89TTN0KHMsQy5kW3MuZ10sbiksaz1NM3QodyxDLmRbdy5nXSxuKSxuaShyLExpKG8saykpLHM9d31mdW5jdGlvbiBiMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gaD1Jc2UodC5hLGUsbiksZD11KGguYSwxOSkuYSxvPXUoaC5iLDE5KS5hLHImJih3PXUoUShlLChzZSgpLFp1KSksMTApLHM9dShRKG4sWnUpLDEwKSx3JiZzJiYoQlp0KHQuYix3LHMpLGQrPXQuYi5pLG8rPXQuYi5lKSksZD5vfWZ1bmN0aW9uIENhZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHRoaXMuYT10c2UodCksdGhpcy5iPW5ldyBsZSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcilmb3IoZT1uW3JdLG89bmV3IGxlLHVlKHRoaXMuYixvKSxkPWUsdz0wLGs9ZC5sZW5ndGg7dzxrOysrdyloPWRbd10sdWUobyxuZXcgUHUoaC5qKSl9ZnVuY3Rpb24gdjBuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89MCxyPW5bZV0sZTxuLmxlbmd0aC0xJiYocz1uW2UrMV0sdC5iW2VdPyhvPXE1bih0LmQscixzKSxvKz1RbnQodC5hLHIsKGJlKCksSG4pKSxvKz1RbnQodC5hLHMsQm4pKTpvPWNhbih0LmEscixzKSksdC5jW2VdJiYobys9SXNuKHQuYSxyKSksb31mdW5jdGlvbiB3MG4odCxlLG4scixzKXt2YXIgbyxoLGQsdztmb3Iodz1udWxsLGQ9bmV3IFMocik7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksNDQxKSxoIT1uJiZSbyhoLmUscywwKSE9LTEpe3c9aDticmVha31vPU5ydChzKSxEYShvLG4uYiksc2Eobyx3LmIpLGxuKHQuYSxzLG5ldyBUaihvLGUsbi5mKSl9ZnVuY3Rpb24gX2FlKHQpe2Zvcig7dC5nLmMhPTAmJnQuZC5jIT0wOyl1bnQodC5nKS5jPnVudCh0LmQpLmM/KHQuaSs9dC5nLmMsS2l0KHQuZCkpOnVudCh0LmQpLmM+dW50KHQuZykuYz8odC5lKz10LmQuYyxLaXQodC5nKSk6KHQuaSs9bll0KHQuZyksdC5lKz1uWXQodC5kKSxLaXQodC5nKSxLaXQodC5kKSl9ZnVuY3Rpb24gbTBuKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iobz1lLnEsaD1lLnIsbmV3IHQyKChWZigpLHBiKSxlLG8sMSksbmV3IHQyKHBiLG8saCwxKSxzPW5ldyBTKG4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExMiksciE9byYmciE9ZSYmciE9aCYmKGx4dCh0LmEscixlKSxseHQodC5hLHIsaCkpfWZ1bmN0aW9uIFNhZSh0LGUsbixyKXt0LmEuZD1iLk1hdGgubWluKGUsbiksdC5hLmE9Yi5NYXRoLm1heChlLHIpLXQuYS5kLGU8bj8odC5iPS41KihlK24pLHQuZz1tY3QqdC5iKy45KmUsdC5mPW1jdCp0LmIrLjkqbik6KHQuYj0uNSooZStyKSx0Lmc9bWN0KnQuYisuOSpyLHQuZj1tY3QqdC5iKy45KmUpfWZ1bmN0aW9uIHkwbigpeyRIPXt9LCFBcnJheS5pc0FycmF5JiYoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgQXJyYXldIn0pO2Z1bmN0aW9uIHQoKXtyZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCl9IURhdGUubm93JiYoRGF0ZS5ub3c9dCl9ZnVuY3Rpb24gQWFlKHQsZSl7dmFyIG4scjtyPXUoUShlLChUZSgpLG9zKSksOTgpLEp0KGUsKHNlKCkscjl0KSxyKSxuPWUuZSxuJiYodXMobmV3IFRuKG51bGwsbmV3IF9uKG4uYSwxNikpLG5ldyBncyh0KSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKG4uYiwxNikpLG5ldyBSNSksbmV3IHFpKHQpKSl9ZnVuY3Rpb24geDBuKHQpe3ZhciBlLG4scixzO2lmKGM4KHUoUSh0LmIsKFRlKCksVmwpKSwxMDMpKSlyZXR1cm4gMDtmb3IoZT0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksbi5rPT0oR24oKSxEcykmJihzPW4uby5hLGU9Yi5NYXRoLm1heChlLHMpKTtyZXR1cm4gZX1mdW5jdGlvbiBrMG4odCl7c3dpdGNoKHUoUSh0LChUZSgpLGN1KSksMTYzKS5nKXtjYXNlIDE6SnQodCxjdSwoaGgoKSx4UykpO2JyZWFrO2Nhc2UgMjpKdCh0LGN1LChoaCgpLEZ5KSk7YnJlYWs7Y2FzZSAzOkp0KHQsY3UsKGhoKCkseVMpKTticmVhaztjYXNlIDQ6SnQodCxjdSwoaGgoKSxmYikpfX1mdW5jdGlvbiBnRSgpe2dFPVosYlM9bmV3IFo5KEswLDApLCRUdD1uZXcgWjkoZDYsMSksSFR0PW5ldyBaOShnNiwyKSxxVHQ9bmV3IFo5KCJMRUZUX1JJR0hUX0NPTlNUUkFJTlRfTE9DS0lORyIsMykselR0PW5ldyBaOSgiTEVGVF9SSUdIVF9DT05ORUNUSU9OX0xPQ0tJTkciLDQpLGpUdD1uZXcgWjkoZjFlLDUpfWZ1bmN0aW9uIExhZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7ZD1uLmEvMixvPW4uYi8yLHI9Yi5NYXRoLmFicyhlLmEtdC5hKSxzPWIuTWF0aC5hYnMoZS5iLXQuYiksdz0xLGs9MSxyPmQmJih3PWQvcikscz5vJiYoaz1vL3MpLGg9Yi5NYXRoLm1pbih3LGspLHQuYSs9aCooZS5hLXQuYSksdC5iKz1oKihlLmItdC5iKX1mdW5jdGlvbiBFMG4odCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPSExLG89dShGZShuLmIsMCksMzMpO1Jtbih0LGUsbyxyLHMpJiYoaD0hMCxuZG4obixvKSxuLmIuYy5sZW5ndGghPTApOylvPXUoRmUobi5iLDApLDMzKTtyZXR1cm4gbi5iLmMubGVuZ3RoPT0wJiZ0RChuLmosbiksaCYmVnooZS5xKSxofWZ1bmN0aW9uIFQwbih0LGUpe3k0KCk7dmFyIG4scixzLG87aWYoZS5iPDIpcmV0dXJuITE7Zm9yKG89ZWkoZSwwKSxuPXUodGkobyksOCkscj1uO28uYiE9by5kLmM7KXtpZihzPXUodGkobyksOCksUXN0KHQscixzKSlyZXR1cm4hMDtyPXN9cmV0dXJuISFRc3QodCxyLG4pfWZ1bmN0aW9uIE80dCh0LGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdC5vJiYodC5vPW5ldyBUbCgoWmMoKSxFYiksJHcsdCwwKSksa2oodC5vLGUscikpOihvPXUoeW4oKHM9dShJbih0LDE2KSwyNiksc3x8dC56aCgpKSxuKSw2Niksby5OaigpLlJqKHQsaXUodCksbi1abih0LnpoKCkpLGUscikpfWZ1bmN0aW9uIERzdCh0LGUpe3ZhciBuO2UhPXQuc2I/KG49bnVsbCx0LnNiJiYobj11KHQuc2IsNDkpLmloKHQsMSxuQSxuKSksZSYmKG49dShlLDQ5KS5naCh0LDEsbkEsbikpLG49V3l0KHQsZSxuKSxuJiZuLkZpKCkpOnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNCxlLGUpKX1mdW5jdGlvbiBDMG4odCxlKXt2YXIgbixyLHMsbztpZihlKXM9UjAoZSwieCIpLG49bmV3IGV6dCh0KSxGOChuLmEsKE9uKHMpLHMpKSxvPVIwKGUsInkiKSxyPW5ldyBuenQodCksUjgoci5hLChPbihvKSxvKSk7ZWxzZSB0aHJvdyBydChuZXcgYWQoIkFsbCBlZGdlIHNlY3Rpb25zIG5lZWQgYW4gZW5kIHBvaW50LiIpKX1mdW5jdGlvbiBfMG4odCxlKXt2YXIgbixyLHMsbztpZihlKXM9UjAoZSwieCIpLG49bmV3IFokdCh0KSxCOChuLmEsKE9uKHMpLHMpKSxvPVIwKGUsInkiKSxyPW5ldyBKJHQodCksajgoci5hLChPbihvKSxvKSk7ZWxzZSB0aHJvdyBydChuZXcgYWQoIkFsbCBlZGdlIHNlY3Rpb25zIG5lZWQgYSBzdGFydCBwb2ludC4iKSl9ZnVuY3Rpb24gUzBuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHI9aHJlKHQpLG89MCxkPXIubGVuZ3RoO288ZDsrK28pd2FlKGUpO2Zvcih3PSFSMSYmdC5lP1IxP251bGw6dC5kOm51bGw7dzspe2ZvcihuPWhyZSh3KSxzPTAsaD1uLmxlbmd0aDtzPGg7KytzKXdhZShlKTt3PSFSMSYmdy5lP1IxP251bGw6dy5kOm51bGx9fWZ1bmN0aW9uIEduKCl7R249WixEcz1uZXcgSzkoIk5PUk1BTCIsMCksWnM9bmV3IEs5KCJMT05HX0VER0UiLDEpLHhzPW5ldyBLOSgiRVhURVJOQUxfUE9SVCIsMiksSGM9bmV3IEs5KCJOT1JUSF9TT1VUSF9QT1JUIiwzKSxTbD1uZXcgSzkoIkxBQkVMIiw0KSxqMT1uZXcgSzkoIkJSRUFLSU5HX1BPSU5UIiw1KX1mdW5jdGlvbiBBMG4odCl7dmFyIGUsbixyLHM7aWYoZT0hMSxWcyh0LChzZSgpLG1TKSkpZm9yKG49dShRKHQsbVMpLDgzKSxzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLElibihyKSYmKGV8fChVZ24oRmEodCkpLGU9ITApLERobih1KG4ueGMociksMzA2KSkpfWZ1bmN0aW9uIEwwbih0LGUsbil7dmFyIHI7d3IobiwiU2VsZi1Mb29wIHJvdXRpbmciLDEpLHI9bmxuKGUpLG5qKFEoZSwoTCQoKSxHUykpKSx1cyhwdShSaShSaShXbyhuZXcgVG4obnVsbCxuZXcgX24oZS5iLDE2KSksbmV3IGtrKSxuZXcgVzUpLG5ldyBCVCksbmV3IG5YKSxuZXcgQkd0KHQscikpLG9yKG4pfWZ1bmN0aW9uIE0wbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7cmV0dXJuIGs9VDR0KHQpLG49dC5lLG89biE9bnVsbCxvJiZwOChrLG1ILHQuZSksZD10LmssaD0hIWQsaCYmcDgoaywidHlwZSIsc250KHQuaykpLHI9Zk0odC5qKSxzPSFyLHMmJih3PW5ldyBiZyxXZihrLFZjdCx3KSxlPW5ldyBrenQodyksdmEodC5qLGUpKSxrfWZ1bmN0aW9uIEkwbih0KXt2YXIgZSxuLHIscztmb3Iocz1ScCgoQmwodC5nYygpLCJzaXplIiksbmV3IExtKSwxMjMpLHI9ITAsbj1Qdih0KS5LYygpO24uT2IoKTspZT11KG4uUGIoKSw0Mikscnx8KHMuYSs9S2EpLHI9ITEsaGMoUnAoaGMocyxlLmNkKCkpLDYxKSxlLmRkKCkpO3JldHVybihzLmErPSJ9IixzKS5hfWZ1bmN0aW9uIE1hZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gZSY9NjMsZTwyMj8obj10Lmw8PGUscj10Lm08PGV8dC5sPj4yMi1lLHM9dC5oPDxlfHQubT4+MjItZSk6ZTw0ND8obj0wLHI9dC5sPDxlLTIyLHM9dC5tPDxlLTIyfHQubD4+NDQtZSk6KG49MCxyPTAscz10Lmw8PGUtNDQpLHJ1KG4mdWwsciZ1bCxzJlcwKX1mdW5jdGlvbiBseSh0KXtpZihlRXQ9PW51bGwmJihlRXQ9bmV3IFJlZ0V4cCgiXlxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXGQrXFwuP1xcZCopfChcXC5cXGQrKSkoW2VFXVsrLV0/XFxkKyk/W2REZkZdPylcXHMqJCIpKSwhZUV0LnRlc3QodCkpdGhyb3cgcnQobmV3IG9kKHZ3K3QrJyInKSk7cmV0dXJuIHBhcnNlRmxvYXQodCl9ZnVuY3Rpb24gRDBuKHQpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBsZSxuPVB0KGRsLGkwLDI1LHQuYS5jLmxlbmd0aCwxNiwxKSxhd3QobixuLmxlbmd0aCkscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksbltyLmRdfHwoZS5jW2UuYy5sZW5ndGhdPXIsJGllKHQscixuKSk7cmV0dXJuIGV9ZnVuY3Rpb24gTzBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89ZS5iLmosdC5hPVB0KFRyLFhyLDI1LG8uYy5sZW5ndGgsMTUsMSkscz0wLHI9MDtyPG8uYy5sZW5ndGg7cisrKW49KEFuKHIsby5jLmxlbmd0aCksdShvLmNbcl0sMTEpKSxuLmUuYy5sZW5ndGg9PTAmJm4uZy5jLmxlbmd0aD09MD9zKz0xOnMrPTMsdC5hW3JdPXN9ZnVuY3Rpb24gbnEoKXtucT1aLEVsdD1uZXcgWDkoIkFMV0FZU19VUCIsMCksa2x0PW5ldyBYOSgiQUxXQVlTX0RPV04iLDEpLENsdD1uZXcgWDkoIkRJUkVDVElPTl9VUCIsMiksVGx0PW5ldyBYOSgiRElSRUNUSU9OX0RPV04iLDMpLF9sdD1uZXcgWDkoIlNNQVJUX1VQIiw0KSxQRz1uZXcgWDkoIlNNQVJUX0RPV04iLDUpfWZ1bmN0aW9uIE4wbih0LGUpe2lmKHQ8MHx8ZTwwKXRocm93IHJ0KG5ldyBQbigiayBhbmQgbiBtdXN0IGJlIHBvc2l0aXZlIikpO2lmKGU+dCl0aHJvdyBydChuZXcgUG4oImsgbXVzdCBiZSBzbWFsbGVyIHRoYW4gbiIpKTtyZXR1cm4gZT09MHx8ZT09dD8xOnQ9PTA/MDpvNHQodCkvKG80dChlKSpvNHQodC1lKSl9ZnVuY3Rpb24gTjR0KHQsZSl7dmFyIG4scixzLG87Zm9yKG49bmV3IHIydCh0KTtuLmc9PW51bGwmJiFuLmM/Rnd0KG4pOm4uZz09bnVsbHx8bi5pIT0wJiZ1KG4uZ1tuLmktMV0sNDcpLk9iKCk7KWlmKG89dShhcShuKSw1NiksRXQobywxNjApKWZvcihyPXUobywxNjApLHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLm9nKHIpfWZ1bmN0aW9uIE9zdCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9qaXQodCk6KGU9bmV3IFRoKGppdCh0KSksZS5hKz0iIChoZWlnaHQ6ICIsUjMoZSx0LmYpLGUuYSs9Iiwgd2lkdGg6ICIsUjMoZSx0LmcpLGUuYSs9IiwgeDogIixSMyhlLHQuaSksZS5hKz0iLCB5OiAiLFIzKGUsdC5qKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIFAwbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT1uZXcgbjIscj10LHM9MCxvPXIubGVuZ3RoO3M8bzsrK3MpaWYobj1yW3NdLGg9QXIobi5jZCgpKSxkPXAyKGUsaCxBcihuLmRkKCkpKSxkIT1udWxsKXRocm93IHJ0KG5ldyBQbigiZHVwbGljYXRlIGtleTogIitoKSk7dGhpcy5iPSh2bigpLG5ldyBxKGUpKX1mdW5jdGlvbiBGMG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBUdTtmb3Iobz1uZXcgYzIoS2EsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLFAwKG8sU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBQNHQoKXtQNHQ9Wix1N3Q9KHokKCksckcpLEhwZT1uZXcgbW4ocXEsdTd0KSxkZSgxKSxxcGU9bmV3IG1uKGM2dCxkZSgzMDApKSxkZSgwKSxVcGU9bmV3IG1uKHU2dCxkZSgwKSksV3BlPW5ldyBtbihJb3QseWQpLEdwZT1uZXcgbW4oRG90LDUpLEtwZT1yRyxWcGU9SHV0fWZ1bmN0aW9uIElhZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9ZT09MT9RdXQ6WHV0LHI9cy5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDEwMyksaD11KEFpKHQuZi5jLG4pLDIxKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NiksdWUodC5iLmIsdShvLmIsODEpKSx1ZSh0LmIuYSx1KG8uYiw4MSkuZCl9ZnVuY3Rpb24gQjBuKHQsZSl7dmFyIG47aWYoZSE9bnVsbCYmIXQuYy5ZaigpLndqKGUpKXRocm93IG49RXQoZSw1Nik/dShlLDU2KS5UZygpLnpiOkFwKHNsKGUpKSxydChuZXcgWGsoYWIrdC5jLm5lKCkrIidzIHR5cGUgJyIrdC5jLllqKCkubmUoKSsiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICciK24rIiciKSl9ZnVuY3Rpb24gUjBuKHQsZSxuKXt2YXIgcixzO2ZvcihzPW5ldyBoYSh0LmIsMCk7cy5iPHMuZC5nYygpOylyPShRbihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksNzApKSxHdChRKHIsKHNlKCksZTl0KSkpPT09R3QoZSkmJih6NHQoci5uLEZhKHQuYy5pKSxuKSxFbChzKSx1ZShlLmIscikpfWZ1bmN0aW9uIGowbih0LGUpe2lmKGUuYSlzd2l0Y2godShRKGUuYiwoc2UoKSxyOXQpKSw5OCkuZyl7Y2FzZSAwOmNhc2UgMTphZG4oZSk7Y2FzZSAyOnVzKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgdUYpLCRwbih0LmEsZSl9ZWxzZSB1cyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IHVGKX1mdW5jdGlvbiBEYWUodCl7dmFyIGUsbjtyZXR1cm4gbj1iLk1hdGguc3FydCgodC5rPT1udWxsJiYodC5rPXN5dCh0LG5ldyBaWCkpLFh0KHQuaykvKHQuYioodC5nPT1udWxsJiYodC5nPXVuZSh0LG5ldyBORikpLFh0KHQuZykpKSkpLGU9U3Ioa3UoYi5NYXRoLnJvdW5kKG4pKSksZT1iLk1hdGgubWluKGUsdC5mKSxlfWZ1bmN0aW9uIE1jKCl7QnUoKSxldnQuY2FsbCh0aGlzKSx0aGlzLmo9KGJlKCksWm8pLHRoaXMuYT1uZXcgVGEsbmV3IFZ0dCx0aGlzLmY9KEJsKDIsbXkpLG5ldyBZYygyKSksdGhpcy5lPShCbCg0LG15KSxuZXcgWWMoNCkpLHRoaXMuZz0oQmwoNCxteSksbmV3IFljKDQpKSx0aGlzLmI9bmV3IFZHdCh0aGlzLmUsdGhpcy5nKX1mdW5jdGlvbiAkMG4odCxlKXt2YXIgbixyO3JldHVybiEoamUoUmUoUShlLChzZSgpLCQxKSkpKXx8KHI9ZS5jLmksdD09KGhoKCkseVMpJiZyLms9PShHbigpLFNsKSl8fChuPXUoUShyLChUZSgpLGN1KSksMTYzKSxuPT1mYikpfWZ1bmN0aW9uIHowbih0LGUpe3ZhciBuLHI7cmV0dXJuIShqZShSZShRKGUsKHNlKCksJDEpKSkpfHwocj1lLmQuaSx0PT0oaGgoKSx4UykmJnIuaz09KEduKCksU2wpKXx8KG49dShRKHIsKFRlKCksY3UpKSwxNjMpLG49PUZ5KSl9ZnVuY3Rpb24gcTBuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGg9dC5kLHc9dC5vLGQ9bmV3IGloKC1oLmIsLWguZCxoLmIrdy5hK2guYyxoLmQrdy5iK2guYSkscj1lLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLG4mJmhfKGQsbi5pKTtoLmI9LWQuYyxoLmQ9LWQuZCxoLmM9ZC5iLWguYi13LmEsaC5hPWQuYS1oLmQtdy5ifWZ1bmN0aW9uIGlEKCl7aUQ9WixYX3Q9bmV3IFNNKCJDRU5URVJfRElTVEFOQ0UiLDApLFZodD1uZXcgU00oIkNJUkNMRV9VTkRFUkxBUCIsMSksWl90PW5ldyBTTSgiUkVDVEFOR0xFX1VOREVSTEFQIiwyKSxVaHQ9bmV3IFNNKCJJTlZFUlRFRF9PVkVSTEFQIiwzKSxRX3Q9bmV3IFNNKCJNSU5JTVVNX1JPT1RfRElTVEFOQ0UiLDQpfWZ1bmN0aW9uIEgwbih0KXtQNXQoKTt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHI9dC5sZW5ndGgscz1yKjIsZT1QdChtaCx2ZCwyNSxzLDE1LDEpLG49MDtuPHI7bisrKW89dFtuXSxvPDAmJihvKz0yNTYpLGVbbioyXT11VVtvPj40XSxlW24qMisxXT11VVtvJjE1XTtyZXR1cm4gQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBHMG4odCl7UWooKTt2YXIgZSxuLHI7c3dpdGNoKHI9dC5jLmxlbmd0aCxyKXtjYXNlIDA6cmV0dXJuIGhnZTtjYXNlIDE6cmV0dXJuIGU9dShwb2UobmV3IFModCkpLDQyKSxndG4oZS5jZCgpLGUuZGQoKSk7ZGVmYXVsdDpyZXR1cm4gbj11KEQxKHQsUHQoTTIsRHEsNDIsdC5jLmxlbmd0aCwwLDEpKSwxNjUpLG5ldyBadHQobil9fWZ1bmN0aW9uIFYwbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKGU9bmV3IFAzLG49bmV3IFAzLHFwKGUsdCkscXAobix0KTtuLmIhPW4uYzspZm9yKHM9dShGeChuKSwzNyksaD1uZXcgUyhzLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxvLmUmJihyPW8uZSxxcChlLHIpLHFwKG4scikpO3JldHVybiBlfWZ1bmN0aW9uIFJnKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBPeCh0LmosKEJ1KCksTzd0KSk7Y2FzZSAyOnJldHVybiBPeCh0LmosKEJ1KCksSTd0KSk7Y2FzZSAzOnJldHVybiBPeCh0LmosKEJ1KCksUDd0KSk7Y2FzZSA0OnJldHVybiBPeCh0LmosKEJ1KCksRjd0KSk7ZGVmYXVsdDpyZXR1cm4gdm4oKSx2bigpLGlvfX1mdW5jdGlvbiBVMG4odCxlKXt2YXIgbixyLHM7bj11dG4oZSx0LmUpLHI9dShKbih0LmcuZixuKSwxOSkuYSxzPXQuYS5jLmxlbmd0aC0xLHQuYS5jLmxlbmd0aCE9MCYmdShGZSh0LmEscyksMjg3KS5jPT1yPygrK3UoRmUodC5hLHMpLDI4NykuYSwrK3UoRmUodC5hLHMpLDI4NykuYik6dWUodC5hLG5ldyBoV3QocikpfWZ1bmN0aW9uIFcwbih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1Kdm4odCxlLG4pLHIhPTA/cjpWcyhlLChzZSgpLFRjKSkmJlZzKG4sVGMpPyhzPWR1KHUoUShlLFRjKSwxOSkuYSx1KFEobixUYyksMTkpLmEpLHM8MD92RCh0LGUsbik6cz4wJiZ2RCh0LG4sZSkscyk6U3BuKHQsZSxuKX1mdW5jdGlvbiBPYWUodCxlLG4pe3ZhciByLHMsbyxoO2lmKGUuYiE9MCl7Zm9yKHI9bmV3IFFpLGg9ZWkoZSwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksODYpLFVhKHIsYnl0KG8pKSxzPW8uZSxzLmE9dShRKG8sKGZjKCksTGh0KSksMTkpLmEscy5iPXUoUShvLHRfdCksMTkpLmE7T2FlKHQscixSYyhuLHIuYi90LmF8MCkpfX1mdW5jdGlvbiBOYWUodCxlKXt2YXIgbixyLHMsbyxoO2lmKHQuZTw9ZXx8SnJuKHQsdC5nLGUpKXJldHVybiB0Lmc7Zm9yKG89dC5yLHI9dC5nLGg9dC5yLHM9KG8tcikvMityO3IrMTxvOyluPUVfKHQscywhMSksbi5iPD1zJiZuLmE8PWU/KGg9cyxvPXMpOnI9cyxzPShvLXIpLzIrcjtyZXR1cm4gaH1mdW5jdGlvbiBLMG4odCxlLG4pe3ZhciByO3I9SmNlKHQsZSwhMCksd3IobiwiUmVjdXJzaXZlIEdyYXBoIExheW91dCIsciksTjR0KGUsY3Qob3Qod1N0LDEpLEllLDUyNywwLFtuZXcgWUxdKSkscjIoZSwoY2koKSxDNykpfHxONHQoZSxjdChvdCh3U3QsMSksSWUsNTI3LDAsW25ldyB5Wl0pKSxUeHQodCxlLG51bGwsbiksb3Iobil9ZnVuY3Rpb24gb3IodCl7dmFyIGU7aWYodC5wPT1udWxsKXRocm93IHJ0KG5ldyBGbygiVGhlIHRhc2sgaGFzIG5vdCBiZWd1biB5ZXQuIikpO3QuYnx8KHQuayYmKGU9KHFkKCksQ2Eoa3UoRGF0ZS5ub3coKSksJGcpKSx0LnE9VnYoWXAoZSx0Lm8pKSoxZS05KSx0LmM8dC5yJiZpaXQodCx0LnItdC5jKSx0LmI9ITApfWZ1bmN0aW9uIHNEKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgRHUsbmkocixuZXcgJGUodC5qLHQuaykpLG49bmV3IGVyKCghdC5hJiYodC5hPW5ldyBTcyhIaCx0LDUpKSx0LmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNDY5KSxuaShyLG5ldyAkZShlLmEsZS5iKSk7cmV0dXJuIG5pKHIsbmV3ICRlKHQuYix0LmMpKSxyfWZ1bmN0aW9uIFkwbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztpZihzKWZvcih3PXMuYS5sZW5ndGgsbz1uZXcgUWIodyksQz0oby5iLW8uYSkqby5jPDA/KElwKCksQWIpOm5ldyBQcChvKTtDLk9iKCk7KWs9dShDLlBiKCksMTkpLGQ9XzgocyxrLmEpLGg9bmV3IEFYdCh0LGUsbixyKSxzbW4oaC5hLGguYixoLmMsaC5kLGQpfWZ1bmN0aW9uIEY0dCh0LGUpe3ZhciBuO2lmKEd0KHQpPT09R3QoZSkpcmV0dXJuITA7aWYoRXQoZSwyMSkpe249dShlLDIxKTt0cnl7cmV0dXJuIHQuZ2MoKT09bi5nYygpJiZ0LkljKG4pfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxNzMpfHxFdChyLDIwNSkpcmV0dXJuITE7dGhyb3cgcnQocil9fXJldHVybiExfWZ1bmN0aW9uIEI0dCh0LGUpe3ZhciBuO3VlKHQuZCxlKSxuPWUucmYoKSx0LmM/KHQuZS5hPWIuTWF0aC5tYXgodC5lLmEsbi5hKSx0LmUuYis9bi5iLHQuZC5jLmxlbmd0aD4xJiYodC5lLmIrPXQuYSkpOih0LmUuYSs9bi5hLHQuZS5iPWIuTWF0aC5tYXgodC5lLmIsbi5iKSx0LmQuYy5sZW5ndGg+MSYmKHQuZS5hKz10LmEpKX1mdW5jdGlvbiBYMG4odCl7dmFyIGUsbixyLHM7c3dpdGNoKHM9dC5pLGU9cy5iLHI9cy5qLG49cy5nLHMuYS5nKXtjYXNlIDA6bi5hPSh0LmcuYi5vLmEtci5hKS8yO2JyZWFrO2Nhc2UgMTpuLmE9ZS5kLm4uYStlLmQuYS5hO2JyZWFrO2Nhc2UgMjpuLmE9ZS5kLm4uYStlLmQuYS5hLXIuYTticmVhaztjYXNlIDM6bi5iPWUuZC5uLmIrZS5kLmEuYn19ZnVuY3Rpb24gUGFlKHQsZSxuLHIscyl7aWYocjxlfHxzPG4pdGhyb3cgcnQobmV3IFBuKCJUaGUgaGlnaHggbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d4IGFuZCB0aGUgaGlnaHkgbXVzdCBiZSBiaWdnZXIgdGhlbiBsb3d5IikpO3JldHVybiB0LmE8ZT90LmE9ZTp0LmE+ciYmKHQuYT1yKSx0LmI8bj90LmI9bjp0LmI+cyYmKHQuYj1zKSx0fWZ1bmN0aW9uIFEwbih0KXtpZihFdCh0LDE0OSkpcmV0dXJuIF8ybih1KHQsMTQ5KSk7aWYoRXQodCwyMjkpKXJldHVybiBFbG4odSh0LDIyOSkpO2lmKEV0KHQsMjMpKXJldHVybiBNMG4odSh0LDIzKSk7dGhyb3cgcnQobmV3IFBuKGs4dCtRcChuZXcgd2woY3Qob3QoWG4sMSksSWUsMSw1LFt0XSkpKSkpfWZ1bmN0aW9uIFowbih0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3Iobz0hMCxoPTA7aDxyO2grKylvPW8mbltoXT09MDtpZihzPT0wKUljKG4scix0LDAsZSksaD1lO2Vsc2V7Zm9yKGQ9MzItcyxvPW8mbltoXTw8ZD09MCxoPTA7aDxlLTE7aCsrKXRbaF09bltoK3JdPj4+c3xuW2grcisxXTw8ZDt0W2hdPW5baCtyXT4+PnMsKytofXJldHVybiBvfWZ1bmN0aW9uIFI0dCh0LGUsbixyKXt2YXIgcyxvLGg7aWYoZS5rPT0oR24oKSxacykpe2ZvcihvPW5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KExyKG8pLDE3KSxoPXMuYy5pLmssaD09WnMmJnQuYy5hW3MuYy5pLmMucF09PXImJnQuYy5hW2UuYy5wXT09bilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBKMG4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gZSY9NjMsbj10LmgmVzAsZTwyMj8obz1uPj4+ZSxzPXQubT4+ZXxuPDwyMi1lLHI9dC5sPj5lfHQubTw8MjItZSk6ZTw0ND8obz0wLHM9bj4+PmUtMjIscj10Lm0+PmUtMjJ8dC5oPDw0NC1lKToobz0wLHM9MCxyPW4+Pj5lLTQ0KSxydShyJnVsLHMmdWwsbyZXMCl9ZnVuY3Rpb24gRmFlKHQsZSxuLHIpe3ZhciBzO3RoaXMuYj1yLHRoaXMuZT10PT0oWnYoKSxEUykscz1lW25dLHRoaXMuZD1YYihkbCxbdGUsaTBdLFsxNzcsMjVdLDE2LFtzLmxlbmd0aCxzLmxlbmd0aF0sMiksdGhpcy5hPVhiKFRyLFt0ZSxYcl0sWzQ4LDI1XSwxNSxbcy5sZW5ndGgscy5sZW5ndGhdLDIpLHRoaXMuYz1uZXcgeTR0KGUsbil9ZnVuY3Rpb24gdGduKHQpe3ZhciBlLG4scjtmb3IodC5rPW5ldyAkd3QoKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkubGVuZ3RoLHQuai5jLmxlbmd0aCkscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExMyksZT1uLmQuaixsbih0LmssZSxuKTt0LmU9ZjJuKFB4KHQuaykpfWZ1bmN0aW9uIEJhZSh0LGUpe3ZhciBuLHIscztOcyh0LmQsZSksbj1uZXcgVlQsa2kodC5jLGUsbiksbi5mPURpdChlLmMpLG4uYT1EaXQoZS5kKSxuLmQ9KGJfKCkscz1lLmMuaS5rLHM9PShHbigpLERzKXx8cz09ajEpLG4uZT0ocj1lLmQuaS5rLHI9PURzfHxyPT1qMSksbi5iPWUuYy5qPT0oYmUoKSxCbiksbi5jPWUuZC5qPT1Ibn1mdW5jdGlvbiBlZ24odCl7dmFyIGUsbixyLHMsbztmb3Iobz12aSxzPXZpLHI9bmV3IFMobzQodCkpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMyksZT1uLmUuZS1uLmQuZSxuLmU9PXQmJmU8cz9zPWU6ZTxvJiYobz1lKTtyZXR1cm4gcz09dmkmJihzPS0xKSxvPT12aSYmKG89LTEpLG5ldyBsYShkZShzKSxkZShvKSl9ZnVuY3Rpb24gbmduKHQsZSl7dmFyIG4scixzO3JldHVybiBzPUZFLHI9KHNfKCksaE8pLHM9Yi5NYXRoLmFicyh0LmIpLG49Yi5NYXRoLmFicyhlLmYtdC5iKSxuPHMmJihzPW4scj10Ryksbj1iLk1hdGguYWJzKHQuYSksbjxzJiYocz1uLHI9Zk8pLG49Yi5NYXRoLmFicyhlLmctdC5hKSxuPHMmJihzPW4scj1KSCkscn1mdW5jdGlvbiByZ24odCxlKXt2YXIgbixyLHMsbztmb3Iobj1lLmEuby5hLG89bmV3IEtkKEZhKGUuYSkuYixlLmMsZS5mKzEpLHM9bmV3IGZ4KG8pO3MuYjxzLmQuZ2MoKTspaWYocj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDI5KSksci5jLmE+PW4pcmV0dXJuIHBFKHQsZSxyLnApLCEwO3JldHVybiExfWZ1bmN0aW9uIFJhZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9Pc3QodCk6KGU9bmV3IElsKGg4dCksIXQuYXx8VnIoVnIoKGUuYSs9JyAiJyxlKSx0LmEpLCciJyksVnIoQ3YoVnIoQ3YoVnIoQ3YoVnIoQ3YoKGUuYSs9IiAoIixlKSx0LmkpLCIsIiksdC5qKSwiIHwgIiksdC5nKSwiLCIpLHQuZiksIikiKSxlLmEpfWZ1bmN0aW9uIGphZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoZD1hdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSkscj0wLGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGQucmwoby5haygpKSl7aWYocj09bilyZXR1cm4gZHkodCxoKSx0bygpLHUoZSw2NikuT2ooKT9vOm8uZGQoKTsrK3J9dGhyb3cgcnQobmV3IG1vKFhfK24rUzIrcikpfWZ1bmN0aW9uICRhZSh0KXt2YXIgZSxuLHI7aWYoZT10LmMsZT09Mnx8ZT09N3x8ZT09MSlyZXR1cm4gZ2koKSxnaSgpLGZBO2ZvcihyPUN4dCh0KSxuPW51bGw7KGU9dC5jKSE9MiYmZSE9NyYmZSE9MTspbnx8KG49KGdpKCksZ2koKSxuZXcgbEMoMSkpLG0yKG4scikscj1uKSxtMihuLEN4dCh0KSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaWduKHQsZSxuKXtyZXR1cm4gdDwwfHx0Pm4/VTR0KHQsbiwic3RhcnQgaW5kZXgiKTplPDB8fGU+bj9VNHQoZSxuLCJlbmQgaW5kZXgiKTp2XygiZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcykiLGN0KG90KFhuLDEpLEllLDEsNSxbZGUoZSksZGUodCldKSl9ZnVuY3Rpb24gemFlKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe289dFtyXTt0cnl7b1sxXT9vWzBdLmptKCkmJihlPXF0bihlLG8pKTpvWzBdLmptKCl9Y2F0Y2goaCl7aWYoaD1XaShoKSxFdChoLDc4KSluPWgsdlIoKSxPbm4oRXQobiw0NzcpP3Uobiw0NzcpLmFlKCk6bik7ZWxzZSB0aHJvdyBydChoKX19cmV0dXJuIGV9ZnVuY3Rpb24gcEUodCxlLG4pe3ZhciByLHMsbztmb3IobiE9ZS5jK2UuYi5nYygpJiZweW4oZS5hLFpvbihlLG4tZS5jKSksbz1lLmEuYy5wLHQuYVtvXT1iLk1hdGgubWF4KHQuYVtvXSxlLmEuby5hKSxzPXUoUShlLmEsKHNlKCksVE8pKSwxNSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNzApLEp0KHIsc2x0LChGbigpLCEwKSl9ZnVuY3Rpb24gc2duKHQsZSl7dmFyIG4scixzO3M9TjJuKGUpLEp0KGUsKHNlKCksRmx0KSxzKSxzJiYocj12aSxBbyh0LmYscykmJihyPXUoZWMoQW8odC5mLHMpKSwxOSkuYSksbj11KEZlKGUuZywwKSwxNyksamUoUmUoUShuLCQxKSkpfHxraSh0LHMsZGUoYi5NYXRoLm1pbih1KFEobixUYyksMTkpLmEscikpKSl9ZnVuY3Rpb24gcWFlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihlLnA9LTEsZD1pdyhlLChzbygpLGV1KSkuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDExKSxzPW5ldyBTKGguZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89ci5kLmksZSE9byYmKG8ucDwwP24uRmMocik6by5wPjAmJnFhZSh0LG8sbikpO2UucD0wfWZ1bmN0aW9uIFhlKHQpe3ZhciBlO3RoaXMuYz1uZXcgUWksdGhpcy5mPXQuZSx0aGlzLmU9dC5kLHRoaXMuaT10LmcsdGhpcy5kPXQuYyx0aGlzLmI9dC5iLHRoaXMuaz10LmosdGhpcy5hPXQuYSx0Lmk/dGhpcy5qPXQuaTp0aGlzLmo9KGU9dShIZihRZyksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5nPXQuZn1mdW5jdGlvbiBhZ24odCl7dmFyIGUsbixyLHM7Zm9yKGU9UnAoVnIobmV3IElsKCJQcmVkaWNhdGVzLiIpLCJhbmQiKSw0MCksbj0hMCxzPW5ldyBmeCh0KTtzLmI8cy5kLmdjKCk7KXI9KFFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKykpLG58fChlLmErPSIsIiksZS5hKz0iIityLG49ITE7cmV0dXJuKGUuYSs9IikiLGUpLmF9ZnVuY3Rpb24gSGFlKHQsZSxuKXt2YXIgcixzLG87aWYoIShuPD1lKzIpKWZvcihzPShuLWUpLzJ8MCxyPTA7cjxzOysrcilvPShBbihlK3IsdC5jLmxlbmd0aCksdSh0LmNbZStyXSwxMSkpLGFoKHQsZStyLChBbihuLXItMSx0LmMubGVuZ3RoKSx1KHQuY1tuLXItMV0sMTEpKSksQW4obi1yLTEsdC5jLmxlbmd0aCksdC5jW24tci0xXT1vfWZ1bmN0aW9uIG9nbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztvPXQuZC5wLGQ9by5lLHc9by5yLHQuZz1uZXcgSE0odyksaD10LmQuby5jLnAscj1oPjA/ZFtoLTFdOlB0KG8wLHpnLDEwLDAsMCwxKSxzPWRbaF0saz1oPGQubGVuZ3RoLTE/ZFtoKzFdOlB0KG8wLHpnLDEwLDAsMCwxKSxDPWU9PW4tMSxDP2dydCh0LmcscyxrKTpncnQodC5nLHIscyl9ZnVuY3Rpb24gR2FlKHQpe3ZhciBlO3RoaXMuaj1uZXcgbGUsdGhpcy5mPW5ldyBxcyx0aGlzLmI9KGU9dShIZihYYSksOSksbmV3IHJoKGUsdSh1ZihlLGUubGVuZ3RoKSw5KSwwKSksdGhpcy5kPVB0KFRyLFhyLDI1LChiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmc9dH1mdW5jdGlvbiBWYWUodCxlKXt2YXIgbixyLHM7aWYoZS5jLmxlbmd0aCE9MCl7Zm9yKG49eWFlKHQsZSkscz0hMTshbjspc3EodCxlLCEwKSxzPSEwLG49eWFlKHQsZSk7cyYmc3EodCxlLCExKSxyPWdpdChlKSx0LmImJnQuYi5sZyhyKSx0LmE9QXJlKHQsKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMzMpKSksVmFlKHQscil9fWZ1bmN0aW9uIE5zdCh0LGUpe3ZhciBuLHIscztpZihyPXluKHQuVGcoKSxlKSxuPWUtdC5BaCgpLG48MClpZihyKWlmKHIuSWooKSlzPXQuWWcocikscz49MD90LkJoKHMpOlE0dCh0LHIpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKGFiK3IubmUoKStXXykpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKHlkZStlK3hkZSkpO2Vsc2UgbGgodCxuLHIpfWZ1bmN0aW9uIGo0dCh0KXt2YXIgZSxuO2lmKG49bnVsbCxlPSExLEV0KHQsMjA0KSYmKGU9ITAsbj11KHQsMjA0KS5hKSxlfHxFdCh0LDI1OCkmJihlPSEwLG49IiIrdSh0LDI1OCkuYSksZXx8RXQodCw0ODMpJiYoZT0hMCxuPSIiK3UodCw0ODMpLmEpLCFlKXRocm93IHJ0KG5ldyB0ZXQoeDh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gVWFlKHQsZSl7dmFyIG4scjtpZih0LmYpe2Zvcig7ZS5PYigpOylpZihuPXUoZS5QYigpLDcyKSxyPW4uYWsoKSxFdChyLDk5KSYmdShyLDE4KS5CYiZkYyYmKCF0LmV8fHIuR2ooKSE9STd8fHIuYWooKSE9MCkmJm4uZGQoKSE9bnVsbClyZXR1cm4gZS5VYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIGUuT2IoKX1mdW5jdGlvbiBXYWUodCxlKXt2YXIgbixyO2lmKHQuZil7Zm9yKDtlLlNiKCk7KWlmKG49dShlLlViKCksNzIpLHI9bi5haygpLEV0KHIsOTkpJiZ1KHIsMTgpLkJiJmRjJiYoIXQuZXx8ci5HaigpIT1JN3x8ci5haigpIT0wKSYmbi5kZCgpIT1udWxsKXJldHVybiBlLlBiKCksITA7cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5TYigpfWZ1bmN0aW9uICQ0dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2Zvcih3PWF1KHQuZS5UZygpLGUpLHI9MCxkPXQuaSxzPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihvPXNbaF0sdy5ybChvLmFrKCkpKXtpZihuPT1yKXJldHVybiBoOysrcixkPWgrMX1pZihuPT1yKXJldHVybiBkO3Rocm93IHJ0KG5ldyBtbyhYXytuK1MyK3IpKX1mdW5jdGlvbiBjZ24odCxlKXt2YXIgbixyLHMsbztpZih0LmYuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3IEF4LHI9bmV3IFModC5mKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz1uLm8sby5iPWIuTWF0aC5tYXgoby5iLHMuYSksby5hKz1zLmI7cmV0dXJuIG8uYSs9KHQuZi5jLmxlbmd0aC0xKSplLG99ZnVuY3Rpb24gdWduKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bmV3IGFyKGxyKHowKG4pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksMTcpLCFWYShyKSYmISghVmEocikmJnIuYy5pLmM9PXIuZC5pLmMpJiYobz1fY2UodCxyLG4sbmV3IGNxdCksby5jLmxlbmd0aD4xJiYoZS5jW2UuYy5sZW5ndGhdPW8pKX1mdW5jdGlvbiBsZ24odCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IFFpLFVhKG4sdC5vKSxyPW5ldyBQcHQ7bi5iIT0wOyllPXUobi5iPT0wP251bGw6KFFuKG4uYiE9MCksY2gobixuLmEuYSkpLDUwOCkscz1faGUodCxlLCEwKSxzJiZ1ZShyLmEsZSk7Zm9yKDtyLmEuYy5sZW5ndGghPTA7KWU9dShtcmUociksNTA4KSxfaGUodCxlLCExKX1mdW5jdGlvbiBqZygpe2pnPVosbVN0PW5ldyBfeChPXywwKSxBYT1uZXcgX3goIkJPT0xFQU4iLDEpLGdjPW5ldyBfeCgiSU5UIiwyKSxUNz1uZXcgX3goIlNUUklORyIsMyksRG89bmV3IF94KCJET1VCTEUiLDQpLGNzPW5ldyBfeCgiRU5VTSIsNSksajY9bmV3IF94KCJFTlVNU0VUIiw2KSxxMT1uZXcgX3goIk9CSkVDVCIsNyl9ZnVuY3Rpb24gaF8odCxlKXt2YXIgbixyLHMsbyxoO3I9Yi5NYXRoLm1pbih0LmMsZS5jKSxvPWIuTWF0aC5taW4odC5kLGUuZCkscz1iLk1hdGgubWF4KHQuYyt0LmIsZS5jK2UuYiksaD1iLk1hdGgubWF4KHQuZCt0LmEsZS5kK2UuYSksczxyJiYobj1yLHI9cyxzPW4pLGg8byYmKG49byxvPWgsaD1uKSxSS3QodCxyLG8scy1yLGgtbyl9ZnVuY3Rpb24gUnUoKXtSdT1aLGZMdD1jdChvdChBZSwxKSx0ZSwyLDYsW0Y4dCxKRCxJSCxCMGUsREgsbnV0LG1IXSksaEx0PWN0KG90KEFlLDEpLHRlLDIsNixbRjh0LCJlbXB0eSIsSkQsWkQsImVsZW1lbnRPbmx5Il0pLGRMdD1jdChvdChBZSwxKSx0ZSwyLDYsW0Y4dCwicHJlc2VydmUiLCJyZXBsYWNlIix0MV0pLG1hPW5ldyBGS3R9ZnVuY3Rpb24gejR0KHQsZSxuKXt2YXIgcixzLG87aWYoZSE9bil7cj1lO2RvIExpKHQsci5jKSxzPXIuZSxzJiYobz1yLmQsRm0odCxvLmIsby5kKSxMaSh0LHMubikscj1GYShzKSk7d2hpbGUocyk7cj1uO2RvIG5hKHQsci5jKSxzPXIuZSxzJiYobz1yLmQsQk0odCxvLmIsby5kKSxuYSh0LHMubikscj1GYShzKSk7d2hpbGUocyl9fWZ1bmN0aW9uIFBzdCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2lmKHIuZi5jK3IuZy5jPT0wKWZvcihoPXQuYVt0LmNdLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2Qpbz1oW2RdLGtpKHIsbyxuZXcgZ25lKHQsbyxuKSk7cmV0dXJuIHM9dShlYyhBbyhyLmYsZSkpLDY2Mykscy5iPTAscy5jPXMuZixzLmM9PTB8fEpCKHUoRmUocy5hLHMuYiksMjg3KSksc31mdW5jdGlvbiBpNigpe2k2PVosbzc9bmV3IFk5KCJNRURJQU5fTEFZRVIiLDApLGRTPW5ldyBZOSgiVEFJTF9MQVlFUiIsMSksYTc9bmV3IFk5KCJIRUFEX0xBWUVSIiwyKSxPeT1uZXcgWTkoIlNQQUNFX0VGRklDSUVOVF9MQVlFUiIsMyksSDQ9bmV3IFk5KCJXSURFU1RfTEFZRVIiLDQpLHE0PW5ldyBZOSgiQ0VOVEVSX0xBWUVSIiw1KX1mdW5jdGlvbiBoZ24odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6cmV0dXJuIGJlKCksTm47Y2FzZSAzOmNhc2UgNDpjYXNlIDU6cmV0dXJuIGJlKCksbXI7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6cmV0dXJuIGJlKCksQm47Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gYmUoKSxIbjtkZWZhdWx0OnJldHVybiBiZSgpLFpvfX1mdW5jdGlvbiBmZ24odCxlKXt2YXIgbjtyZXR1cm4gdC5jLmxlbmd0aD09MD8hMToobj1oaWUoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTcpKS5jLmkpLE9sKCksbj09KHN5KCksdDUpfHxuPT1KND8hMDpBOChwdShuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBsUSksbmV3IEUkdChlKSkpfWZ1bmN0aW9uIHE0dCh0LGUsbil7dmFyIHIscyxvO2lmKCF0LmJbZS5nXSl7Zm9yKHQuYltlLmddPSEwLHI9biwhciYmKHI9bmV3IEEkKSxuaShyLmIsZSksbz10LmFbZS5nXS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxODgpLHMuYiE9ZSYmcTR0KHQscy5iLHIpLHMuYyE9ZSYmcTR0KHQscy5jLHIpLG5pKHIuYSxzKTtyZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBmXygpe2ZfPVosd1Y9bmV3IHRDKCJST09UX1BST0MiLDApLGtodD1uZXcgdEMoIkZBTl9QUk9DIiwxKSxUaHQ9bmV3IHRDKCJORUlHSEJPUlNfUFJPQyIsMiksRWh0PW5ldyB0QygiTEVWRUxfSEVJR0hUIiwzKSxDaHQ9bmV3IHRDKCJOT0RFX1BPU0lUSU9OX1BST0MiLDQpLHhodD1uZXcgdEMoIkRFVFJFRUlGWUlOR19QUk9DIiw1KX1mdW5jdGlvbiBGc3QodCxlKXtpZihFdChlLDIzOSkpcmV0dXJuIHNYZSh0LHUoZSwzMykpO2lmKEV0KGUsMTg2KSlyZXR1cm4gYVhlKHQsdShlLDExOCkpO2lmKEV0KGUsNDM5KSlyZXR1cm4gaVhlKHQsdShlLDIwMikpO3Rocm93IHJ0KG5ldyBQbihrOHQrUXAobmV3IHdsKGN0KG90KFhuLDEpLEllLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiBLYWUodCxlLG4pe3ZhciByLHM7aWYodGhpcy5mPXQscj11KEpuKHQuYixlKSwyODMpLHM9cj9yLmE6MCxibXQobixzKSxuPj0ocy8yfDApKWZvcih0aGlzLmU9cj9yLmM6bnVsbCx0aGlzLmQ9cztuKys8czspeVF0KHRoaXMpO2Vsc2UgZm9yKHRoaXMuYz1yP3IuYjpudWxsO24tLSA+MDspQnd0KHRoaXMpO3RoaXMuYj1lLHRoaXMuYT1udWxsfWZ1bmN0aW9uIGRnbih0LGUpe3ZhciBuLHI7ZS5hP0Yybih0LGUpOihuPXUoZ250KHQuYixlLmIpLDU3KSxuJiZuPT10LmFbZS5iLmZdJiZuLmEmJm4uYSE9ZS5iLmEmJm4uYy5GYyhlLmIpLHI9dShkbnQodC5iLGUuYiksNTcpLHImJnQuYVtyLmZdPT1lLmImJnIuYSYmci5hIT1lLmIuYSYmZS5iLmMuRmMociksZW50KHQuYixlLmIpKX1mdW5jdGlvbiBZYWUodCxlKXt2YXIgbixyO2lmKG49dShnbyh0LmIsZSksMTI0KSx1KHUoQWkodC5yLGUpLDIxKSw4NCkuZGMoKSl7bi5uLmI9MCxuLm4uYz0wO3JldHVybn1uLm4uYj10LkMuYixuLm4uYz10LkMuYyx0LkEuSGMoKF9sKCksVjIpKSYmbXVlKHQsZSkscj1IaG4odCxlKSxKc3QodCxlKT09KGM0KCksbWIpJiYocis9Mip0LncpLG4uYS5hPXJ9ZnVuY3Rpb24gWGFlKHQsZSl7dmFyIG4scjtpZihuPXUoZ28odC5iLGUpLDEyNCksdSh1KEFpKHQucixlKSwyMSksODQpLmRjKCkpe24ubi5kPTAsbi5uLmE9MDtyZXR1cm59bi5uLmQ9dC5DLmQsbi5uLmE9dC5DLmEsdC5BLkhjKChfbCgpLFYyKSkmJnl1ZSh0LGUpLHI9R2huKHQsZSksSnN0KHQsZSk9PShjNCgpLG1iKSYmKHIrPTIqdC53KSxuLmEuYj1yfWZ1bmN0aW9uIGdnbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBsZSxyPW5ldyBTKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1KSx1ZShvLG5ldyBUYnQobiwhMCkpLHVlKG8sbmV3IFRidChuLCExKSk7cz1uZXcgSFh0KHQpLE85KHMuYS5hKSxjWnQobyx0LmIsbmV3IHdsKGN0KG90KHpnZSwxKSxJZSw2NzksMCxbc10pKSl9ZnVuY3Rpb24gUWFlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtyZXR1cm4gdz10LmEsSD10LmIsaz1lLmEsVj1lLmIsQz1uLmEsWT1uLmIsTT1yLmEsdHQ9ci5iLG89dypWLUgqayxoPUMqdHQtWSpNLHM9KHctaykqKFktdHQpLShILVYpKihDLU0pLGQ9KG8qKEMtTSktaCoody1rKSkvcyxGPShvKihZLXR0KS1oKihILVYpKS9zLG5ldyAkZShkLEYpfWZ1bmN0aW9uIEg0dCh0LGUpe3ZhciBuLHIscztpZighdC5kW2UucF0pe2Zvcih0LmRbZS5wXT0hMCx0LmFbZS5wXT0hMCxyPW5ldyBhcihscihNcyhlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSwhVmEobikmJihzPW4uZC5pLHQuYVtzLnBdP3VlKHQuYixuKTpINHQodCxzKSk7dC5hW2UucF09ITF9fWZ1bmN0aW9uIFphZSh0LGUsbil7dmFyIHI7c3dpdGNoKHI9MCx1KFEoZSwoVGUoKSxjdSkpLDE2MykuZyl7Y2FzZSAyOnI9Miotbit0LmEsKyt0LmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rdC5iLCsrdC5ifXJldHVybiBWcyhlLChzZSgpLFRjKSkmJihyKz11KFEoZSxUYyksMTkpLmEpLHJ9ZnVuY3Rpb24gSmFlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG4uemMoZSx0KSx1ZSh0Lm4sZSksbz10LnAuZWcoZSksZS5qPT10LnAuZmcoKT9laWUodC5lLG8pOmVpZSh0LmosbyksS2oodCkscz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoZSksbmV3IEVyKGUpXSkpKTt6cihzKTspcj11KExyKHMpLDExKSxuLl9iKHIpfHxKYWUodCxyLG4pfWZ1bmN0aW9uIEc0dCh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dShxZSh0LChjaSgpLHoyKSksMjEpLG4uSGMoKF9sKCksWHkpKT8ocj11KHFlKHQsdmIpLDIxKSxlPW5ldyB5byh1KHFlKHQsYTUpLDgpKSxyLkhjKChjbCgpLE03KSkmJihlLmE8PTAmJihlLmE9MjApLGUuYjw9MCYmKGUuYj0yMCkpLGUpOm5ldyBUYX1mdW5jdGlvbiBWNHQodCl7dmFyIGUsbixyO2lmKCF0LmIpe2ZvcihyPW5ldyBTayxuPW5ldyBNeChrXyh0KSk7bi5lIT1uLmkuZ2MoKTspZT11KG5zdChuKSwxOCksZS5CYiZkYyYmTXIocixlKTtleShyKSx0LmI9bmV3IHEzKCh1KFN0KFd0KChqcCgpLExuKS5vKSw4KSwxOCksci5pKSxyLmcpLHJsKHQpLmImPS05fXJldHVybiB0LmJ9ZnVuY3Rpb24gcGduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsazt3PXUoWEkoUHgoZS5rKSxQdChYYSx4Yyw2MSwyLDAsMSkpLDEyMiksaz1lLmcsbj1fWnQoZSx3WzBdKSxzPUNadChlLHdbMV0pLHI9dnN0KHQsayxuLHMpLG89X1p0KGUsd1sxXSksZD1DWnQoZSx3WzBdKSxoPXZzdCh0LGssbyxkKSxyPD1oPyhlLmE9bixlLmM9cyk6KGUuYT1vLGUuYz1kKX1mdW5jdGlvbiBiZ24odCxlLG4pe3ZhciByLHMsbztmb3Iod3IobiwiUHJvY2Vzc29yIHNldCBuZWlnaGJvcnMiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLHM9bnVsbCxyPWVpKGUuYiwwKTshcyYmci5iIT1yLmQuYzspbz11KHRpKHIpLDg2KSxqZShSZShRKG8sKGZjKCksV3kpKSkpJiYocz1vKTtzJiZzdWUodCxuZXcgQ3Aocyksbiksb3Iobil9ZnVuY3Rpb24gdG9lKHQpe1RhdCgpO3ZhciBlLG4scixzO3JldHVybiByPWNkKHQsRXUoMzUpKSxlPXI9PS0xP3Q6dC5zdWJzdHIoMCxyKSxuPXI9PS0xP251bGw6dC5zdWJzdHIocisxKSxzPXJzbihRQXQsZSkscz9uIT1udWxsJiYocz1kcmUocywoT24obiksbikpKToocz1ENW4oZSksZnNuKFFBdCxlLHMpLG4hPW51bGwmJihzPWRyZShzLG4pKSksc31mdW5jdGlvbiBCc3QodCl7dmFyIGU7dm4oKTt2YXIgbixyLHMsbyxoLGQ7aWYoRXQodCw1NCkpZm9yKG89MCxzPXQuZ2MoKS0xO288czsrK28sLS1zKWU9dC5YYihvKSx0Ll9jKG8sdC5YYihzKSksdC5fYyhzLGUpO2Vsc2UgZm9yKG49dC5ZYygpLGg9dC5aYyh0LmdjKCkpO24uVGIoKTxoLlZiKCk7KXI9bi5QYigpLGQ9aC5VYigpLG4uV2IoZCksaC5XYihyKX1mdW5jdGlvbiB2Z24odCxlKXt2YXIgbixyLHM7d3IoZSwiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPVh0KHllKFEodCwoVGUoKSxCNikpKSkscj1YdCh5ZShRKHQsR3kpKSkscz1jOCh1KFEodCxWbCksMTAzKSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyB5TCksbmV3IHZLdChuLHIscykpLG9yKGUpfWZ1bmN0aW9uIFJzdCh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoZD0wLG89bmV3IFAzLHFwKG8sZSk7by5iIT1vLmM7KWZvcihoPXUoRngobyksMjE0KSxkKz1fc2UoaC5kLGguZSkscz1uZXcgUyhoLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDM3KSxuPXUoRmUodC5iLHIucCksMjE0KSxuLnN8fChkKz1Sc3QodCxuKSk7cmV0dXJuIGR9ZnVuY3Rpb24gZW9lKHQsZSxuKXt2YXIgcixzO09uZSh0aGlzKSxlPT0ocXYoKSxiYik/TnModGhpcy5yLHQuYyk6TnModGhpcy53LHQuYyksbj09YmI/TnModGhpcy5yLHQuZCk6TnModGhpcy53LHQuZCksQmFlKHRoaXMsdCkscj1EaXQodC5jKSxzPURpdCh0LmQpLFNhZSh0aGlzLHIscyxzKSx0aGlzLm89KGJfKCksYi5NYXRoLmFicyhyLXMpPC4yKX1mdW5jdGlvbiBub2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihkPXUoSW4odC5hLDgpLDE5MzYpLGQhPW51bGwpZm9yKHM9ZCxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKW51bGwuam0oKTtyPW4sdC5hLkRiJjF8fCh3PW5ldyByWHQodCxuLGUpLHIudWkodykpLEV0KHIsNjcyKT91KHIsNjcyKS53aSh0LmEpOnIudGkoKT09dC5hJiZyLnZpKG51bGwpfWZ1bmN0aW9uIHdnbigpe3ZhciB0O3JldHVybiBMNWU/dSh3RSgoTXAoKSxVaCksTDIpLDE5NDUpOihENG4oKSx0PXUoRXQoRmMoKE1wKCksVWgpLEwyKSw1ODYpP0ZjKFVoLEwyKTpuZXcgaFh0LDU4NiksTDVlPSEwLHA1bih0KSxINW4odCksa2koKGJidCgpLFpBdCksdCxuZXcgaXgpLG1zdCh0KSx4byhVaCxMMix0KSx0KX1mdW5jdGlvbiBtZ24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cDQodCxuLGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSksZSksczwwJiYocz1wNCh0LG4sY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB5Z24odCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cDQodCxuLGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSksZSksczwwJiYocz1wNCh0LG4sY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pLGUpKSxzPDA/ITE6KHIuZD1zLCEwKX1mdW5jdGlvbiB4Z24odCl7dmFyIGUsbixyO2ZvcihTYm4odCkscj1uZXcgbGUsbj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksdWUocixuZXcgTGJ0KGUsITApKSx1ZShyLG5ldyBMYnQoZSwhMSkpO2Nmbih0LmMpLGFJKHIsdC5iLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbdC5jXSkpKSxxcG4odCl9ZnVuY3Rpb24ga2duKHQpe3ZhciBlLG4scixzO2ZvcihuPW5ldyBDcixzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTgxKSxlPXUoci5XZSgoc2UoKSxNNikpLDE3KSxBbyhuLmYsZSl8fGtpKG4sZSxuZXcgQlh0KGUpKSx1ZSh1KGVjKEFvKG4uZixlKSksNDU2KS5iLHIpO3JldHVybiBuZXcgUHUobmV3IGIxKG4pKX1mdW5jdGlvbiBFZ24odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPW5ldyBSUXQodC5qLmMubGVuZ3RoKSxuPW51bGwsbz1uZXcgUyh0LmopO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExKSxzLmohPW4mJihyLmI9PXIuY3x8cGNlKHIsbixlKSxybXQociksbj1zLmopLGg9Sm9lKHMpLGgmJlF3dChyLGgpO3IuYj09ci5jfHxwY2UocixuLGUpfWZ1bmN0aW9uIFRnbih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgaGEodC5iLDApO3IuYjxyLmQuZ2MoKTspbj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDcwKSkscz11KFEobiwoVGUoKSxNZCkpLDI3Mikscz09KEExKCksWXkpJiYoRWwociksdWUoZS5iLG4pLFZzKG4sKHNlKCksTTYpKXx8SnQobixNNix0KSl9ZnVuY3Rpb24gQ2duKHQpe3ZhciBlLG4scixzLG87Zm9yKGU9TjAobmV3IGFyKGxyKE1zKHQpLmEuS2MoKSxuZXcgeikpKSxzPW5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKTt6cihzKTspcj11KExyKHMpLDE3KSxuPXIuYy5pLG89TjAobmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpKSxlPWIuTWF0aC5tYXgoZSxvKTtyZXR1cm4gZGUoZSl9ZnVuY3Rpb24gX2duKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iod3IobiwiUHJvY2Vzc29yIGFycmFuZ2Ugbm9kZSIsMSkscz1udWxsLG89bmV3IFFpLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOyloPXUodGkociksODYpLGplKFJlKFEoaCwoZmMoKSxXeSkpKSkmJihzPWgpO2hzKG8scyxvLmMuYixvLmMpLGZoZSh0LG8sUmMobiwxKSksb3Iobil9ZnVuY3Rpb24gcm9lKHQsZSxuKXt2YXIgcixzLG87cj11KHFlKHQsKGNpKCksQlYpKSwyMSkscz0wLG89MCxlLmE+bi5hJiYoci5IYygoY3koKSxxTykpP3M9KGUuYS1uLmEpLzI6ci5IYyhITykmJihzPWUuYS1uLmEpKSxlLmI+bi5iJiYoci5IYygoY3koKSxWTykpP289KGUuYi1uLmIpLzI6ci5IYyhHTykmJihvPWUuYi1uLmIpKSxBNHQodCxzLG8pfWZ1bmN0aW9uIGlvZSh0LGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGKXtFdCh0LkNiLDg4KSYmaHkocmwodSh0LkNiLDg4KSksNCksWGModCxuKSx0LmY9aCxyRSh0LGQpLHNFKHQsdyksbkUodCxrKSxpRSh0LEMpLFBnKHQsTSksYUUodCxGKSxOZyh0LCEwKSxJZyh0LHMpLHQub2sobyksZjIodCxlKSxyIT1udWxsJiYodC5pPW51bGwsZXoodCxyKSl9ZnVuY3Rpb24gc29lKHQpe3ZhciBlLG47aWYodC5mKXtmb3IoO3Qubj4wOyl7aWYoZT11KHQuay5YYih0Lm4tMSksNzIpLG49ZS5haygpLEV0KG4sOTkpJiZ1KG4sMTgpLkJiJmRjJiYoIXQuZXx8bi5HaigpIT1JN3x8bi5haigpIT0wKSYmZS5kZCgpIT1udWxsKXJldHVybiEwOy0tdC5ufXJldHVybiExfWVsc2UgcmV0dXJuIHQubj4wfWZ1bmN0aW9uIFU0dCh0LGUsbil7aWYodDwwKXJldHVybiB2XyhIaGUsY3Qob3QoWG4sMSksSWUsMSw1LFtuLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBydChuZXcgUG4oR2hlK2UpKTtyZXR1cm4gdl8oIiVzICglcykgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHNpemUgKCVzKSIsY3Qob3QoWG4sMSksSWUsMSw1LFtuLGRlKHQpLGRlKGUpXSkpfWZ1bmN0aW9uIFc0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGs7aWYoaD1yLW4saDw3KXtmbG4oZSxuLHIsbyk7cmV0dXJufWlmKHc9bitzLGQ9citzLGs9dysoZC13Pj4xKSxXNHQoZSx0LHcsaywtcyxvKSxXNHQoZSx0LGssZCwtcyxvKSxvLnVlKHRbay0xXSx0W2tdKTw9MCl7Zm9yKDtuPHI7KUppKGUsbisrLHRbdysrXSk7cmV0dXJufU51bih0LHcsayxkLGUsbixyLG8pfWZ1bmN0aW9uIGFEKHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBsZSxyPW5ldyBTKHQuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxlLkxiKG4pJiYodWUocyxuZXcga2J0KG4sITApKSx1ZShzLG5ldyBrYnQobiwhMSkpKTtvZm4odC5lKSxjWnQocyx0LmQsbmV3IHdsKGN0KG90KHpnZSwxKSxJZSw2NzksMCxbdC5lXSkpKX1mdW5jdGlvbiBTZ24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iodz1lLmQscz1lLmIuaixkPW5ldyBTKHcpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMDEpLG89UHQoZGwsaTAsMjUscy5jLmxlbmd0aCwxNiwxKSxraSh0LmIsaCxvKSxuPWguYS5kLnAtMSxyPWguYy5kLnA7biE9cjspbj0obisxKSVzLmMubGVuZ3RoLG9bbl09ITB9ZnVuY3Rpb24gQWduKHQsZSl7Zm9yKHQucj1uZXcgTEkodC5wKSxscHQodC5yLHQpLFVhKHQuci5qLHQuaiksX2godC5qKSxuaSh0LmosZSksbmkodC5yLmUsZSksS2oodCksS2oodC5yKTt0LmYuYy5sZW5ndGghPTA7KUFVdCh1KEZlKHQuZiwwKSwxMjkpKTtmb3IoO3Quay5jLmxlbmd0aCE9MDspQVV0KHUoRmUodC5rLDApLDEyOSkpO3JldHVybiB0LnJ9ZnVuY3Rpb24ganN0KHQsZSxuKXt2YXIgcixzLG87aWYocz15bih0LlRnKCksZSkscj1lLXQuQWgoKSxyPDApaWYocylpZihzLklqKCkpbz10LllnKHMpLG8+PTA/dC5zaChvLG4pOkU1dCh0LHMsbik7ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrcy5uZSgpK1dfKSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oeWRlK2UreGRlKSk7ZWxzZSBmaCh0LHIscyxuKX1mdW5jdGlvbiBhb2UodCl7dmFyIGUsbixyLHM7aWYobj11KHQsNDkpLnFoKCksbil0cnl7aWYocj1udWxsLGU9d0UoKE1wKCksVWgpLHF1ZShwbG4obikpKSxlJiYocz1lLnJoKCkscyYmKHI9cy5XayhFS2Uobi5lKSkpKSxyJiZyIT10KXJldHVybiBhb2Uocil9Y2F0Y2gobyl7aWYobz1XaShvKSwhRXQobyw2MCkpdGhyb3cgcnQobyl9cmV0dXJuIHR9ZnVuY3Rpb24gc3UodCxlLG4pe3ZhciByLHMsbyxoO2lmKGg9ZT09bnVsbD8wOnQuYi5zZShlKSxzPShyPXQuYS5nZXQoaCkscj8/bmV3IEFycmF5KSxzLmxlbmd0aD09MCl0LmEuc2V0KGgscyk7ZWxzZSBpZihvPWtyZSh0LGUscyksbylyZXR1cm4gby5lZChuKTtyZXR1cm4gSmkocyxzLmxlbmd0aCxuZXcgUlIoZSxuKSksKyt0LmMsYSQodC5iKSxudWxsfWZ1bmN0aW9uIG9vZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHckKHQuYSksVWQodC5hLChpeigpLFRWKSxUViksVWQodC5hLEU3LEU3KSxyPW5ldyBIcyxiaShyLEU3LChDeigpLE5odCkpLEd0KHFlKGUsKGF5KCksQmh0KSkpIT09R3QoKFJJKCksQ1YpKSYmYmkocixFNyxEaHQpLGJpKHIsRTcsT2h0KSxvVXQodC5hLHIpLG49VHEodC5hLGUpLG59ZnVuY3Rpb24gY29lKHQpe2lmKCF0KXJldHVybiBWcXQoKSx5Z2U7dmFyIGU9dC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7aWYoZSE9PXQpe3ZhciBuPUV1dFt0eXBlb2YgZV07cmV0dXJuIG4/bihlKTpqeXQodHlwZW9mIGUpfWVsc2UgcmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8dCBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IGx4KHQpOm5ldyBIayh0KX1mdW5jdGlvbiB1b2UodCxlLG4pe3ZhciByLHMsbztzd2l0Y2gobz10Lm8scj11KGdvKHQucCxuKSwyNDQpLHM9ci5pLHMuYj11RChyKSxzLmE9Y0Qocikscy5iPWIuTWF0aC5tYXgocy5iLG8uYSkscy5iPm8uYSYmIWUmJihzLmI9by5hKSxzLmM9LShzLmItby5hKS8yLG4uZyl7Y2FzZSAxOnMuZD0tcy5hO2JyZWFrO2Nhc2UgMzpzLmQ9by5ifWZhdChyKSxkYXQocil9ZnVuY3Rpb24gbG9lKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKG89dC5vLHI9dShnbyh0LnAsbiksMjQ0KSxzPXIuaSxzLmI9dUQocikscy5hPWNEKHIpLHMuYT1iLk1hdGgubWF4KHMuYSxvLmIpLHMuYT5vLmImJiFlJiYocy5hPW8uYikscy5kPS0ocy5hLW8uYikvMixuLmcpe2Nhc2UgNDpzLmM9LXMuYjticmVhaztjYXNlIDI6cy5jPW8uYX1mYXQociksZGF0KHIpfWZ1bmN0aW9uIExnbih0LGUpe3ZhciBuLHIscyxvLGg7aWYoIWUuZGMoKSl7aWYocz11KGUuWGIoMCksMTI4KSxlLmdjKCk9PTEpe0JjZSh0LHMscywxLDAsZSk7cmV0dXJufWZvcihuPTE7bjxlLmdjKCk7KShzLmp8fCFzLm8pJiYobz1SZm4oZSxuKSxvJiYocj11KG8uYSwxOSkuYSxoPXUoby5iLDEyOCksQmNlKHQscyxoLG4scixlKSxuPXIrMSxzPWgpKX19ZnVuY3Rpb24gTWduKHQpe3ZhciBlLG4scixzLG8saDtmb3IoaD1uZXcgUHUodC5kKSxYcyhoLG5ldyBMWCksZT0oZnEoKSxjdChvdCh5VHQsMSksYWUsMjcwLDAsW2xsdCxkbHQsdWx0LGJsdCxmbHQsaGx0LHBsdCxnbHRdKSksbj0wLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTAxKSxyPWVbbiVlLmxlbmd0aF0sX3BuKHMsciksKytufWZ1bmN0aW9uIElnbih0LGUpe3k0KCk7dmFyIG4scixzLG87aWYoZS5iPDIpcmV0dXJuITE7Zm9yKG89ZWkoZSwwKSxuPXUodGkobyksOCkscj1uO28uYiE9by5kLmM7KXtpZihzPXUodGkobyksOCksIShIOCh0LHIpJiZIOCh0LHMpKSlyZXR1cm4hMTtyPXN9cmV0dXJuISEoSDgodCxyKSYmSDgodCxuKSl9ZnVuY3Rpb24gSzR0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07cmV0dXJuIEM9bnVsbCxNPXQsaD1SMChNLCJ4Iiksbj1uZXcgYXp0KGUpLEVhbihuLmEsaCksZD1SMChNLCJ5Iikscj1uZXcgb3p0KGUpLFRhbihyLmEsZCksdz1SMChNLHpjdCkscz1uZXcgY3p0KGUpLENhbihzLmEsdyksaz1SMChNLCRjdCksbz1uZXcgdXp0KGUpLEM9KF9hbihvLmEsayksayksQ31mdW5jdGlvbiBoeSh0LGUpe2J1ZSh0LGUpLHQuYiYxJiYodC5hLmE9bnVsbCksdC5iJjImJih0LmEuZj1udWxsKSx0LmImNCYmKHQuYS5nPW51bGwsdC5hLmk9bnVsbCksdC5iJjE2JiYodC5hLmQ9bnVsbCx0LmEuZT1udWxsKSx0LmImOCYmKHQuYS5iPW51bGwpLHQuYiYzMiYmKHQuYS5qPW51bGwsdC5hLmM9bnVsbCl9ZnVuY3Rpb24gRGduKHQsZSl7dmFyIG4scixzO2lmKHM9MCxlLmxlbmd0aD4wKXRyeXtzPSRsKGUsX2EsdmkpfWNhdGNoKG8pe3Rocm93IG89V2kobyksRXQobywxMjcpPyhyPW8scnQobmV3IEYkKHIpKSk6cnQobyl9cmV0dXJuIG49KCF0LmEmJih0LmE9bmV3IHp0dCh0KSksdC5hKSxzPG4uaSYmcz49MD91KFN0KG4scyksNTYpOm51bGx9ZnVuY3Rpb24gT2duKHQsZSl7aWYodDwwKXJldHVybiB2XyhIaGUsY3Qob3QoWG4sMSksSWUsMSw1LFsiaW5kZXgiLGRlKHQpXSkpO2lmKGU8MCl0aHJvdyBydChuZXcgUG4oR2hlK2UpKTtyZXR1cm4gdl8oIiVzICglcykgbXVzdCBiZSBsZXNzIHRoYW4gc2l6ZSAoJXMpIixjdChvdChYbiwxKSxJZSwxLDUsWyJpbmRleCIsZGUodCksZGUoZSldKSl9ZnVuY3Rpb24gTmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFBnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIFR1O2ZvcihvPW5ldyBjMihLYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP1ZyKG8uYSxvLmIpOm8uYT1uZXcgSWwoby5kKSxjQyhvLmEsIiIrZSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBGZ24odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBUdTtmb3Iobz1uZXcgYzIoS2EsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9WcihvLmEsby5iKTpvLmE9bmV3IElsKG8uZCksY0Moby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQmduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIGhvZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj10LmIuYy5sZW5ndGgscz1GZSh0LmIsZSk7ZSoyKzE8biYmKHI9KG89MiplKzEsaD1vKzEsZD1vLGg8biYmdC5hLnVlKEZlKHQuYixoKSxGZSh0LmIsbykpPDAmJihkPWgpLGQpLCEodC5hLnVlKHMsRmUodC5iLHIpKTwwKSk7KWFoKHQuYixlLEZlKHQuYixyKSksZT1yO2FoKHQuYixlLHMpfWZ1bmN0aW9uIFk0dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx3LGssQztmb3IoR3QodCk9PT1HdChuKSYmKHQ9dC5zbGljZShlLGUrcyksZT0wKSx3PW4sZD1lLGs9ZStzO2Q8azspaD1iLk1hdGgubWluKGQrMWU0LGspLHM9aC1kLEM9dC5zbGljZShkLGgpLEMuc3BsaWNlKDAsMCxyLG8/czowKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHcsQyksZD1oLHIrPXN9ZnVuY3Rpb24gJHN0KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW4uZCxzPW4uZSx0Lmdbci5kXTw9dC5pW2UuZF0mJnQuaVtlLmRdPD10Lmlbci5kXSYmdC5nW3MuZF08PXQuaVtlLmRdJiZ0LmlbZS5kXTw9dC5pW3MuZF0/ISh0Lmlbci5kXTx0Lmlbcy5kXSk6dC5pW3IuZF08dC5pW3MuZF19ZnVuY3Rpb24gZm9lKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHI9dC5hLmMubGVuZ3RoLHI+MClmb3IoaD10LmMuZCxkPXQuZC5kLHM9dWQobmEobmV3ICRlKGQuYSxkLmIpLGgpLDEvKHIrMSkpLG89bmV3ICRlKGguYSxoLmIpLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1NTkpLGUuZC5hPW8uYSxlLmQuYj1vLmIsTGkobyxzKX1mdW5jdGlvbiBkb2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iodz1zcyxvPW5ldyBTKENjZSh0LmIpKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTY4KSxkPW5ldyBTKENjZShlLmIpKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNjgpLHI9VGNuKHMuYSxzLmIsaC5hLGguYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBGcyh0LGUpe2lmKCFlKXRocm93IHJ0KG5ldyBMOSk7aWYodC5qPWUsIXQuZClzd2l0Y2godC5qLmcpe2Nhc2UgMTp0LmEuYT10Lm8uYS8yLHQuYS5iPTA7YnJlYWs7Y2FzZSAyOnQuYS5hPXQuby5hLHQuYS5iPXQuby5iLzI7YnJlYWs7Y2FzZSAzOnQuYS5hPXQuby5hLzIsdC5hLmI9dC5vLmI7YnJlYWs7Y2FzZSA0OnQuYS5hPTAsdC5hLmI9dC5vLmIvMn19ZnVuY3Rpb24gUmduKHQsZSl7dmFyIG4scixzO3JldHVybiBFdChlLmcsMTApJiZ1KGUuZywxMCkuaz09KEduKCkseHMpP3NzOihzPUh4KGUpLHM/Yi5NYXRoLm1heCgwLHQuYi8yLS41KToobj1aMyhlKSxuPyhyPVh0KHllKGl5KG4sKFRlKCksQncpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpzcykpfWZ1bmN0aW9uIGpnbih0LGUpe3ZhciBuLHIscztyZXR1cm4gRXQoZS5nLDEwKSYmdShlLmcsMTApLms9PShHbigpLHhzKT9zczoocz1IeChlKSxzP2IuTWF0aC5tYXgoMCx0LmIvMi0uNSk6KG49WjMoZSksbj8ocj1YdCh5ZShpeShuLChUZSgpLEJ3KSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6c3MpKX1mdW5jdGlvbiAkZ24odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPVFDKHQuZCx0LmUpLG89aC5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTEpLHI9dC5lPT0oYmUoKSxCbik/cy5lOnMuZyxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE3KSwhVmEoZSkmJmUuYy5pLmMhPWUuZC5pLmMmJihVMG4odCxlKSwrK3QuZiwrK3QuYyl9ZnVuY3Rpb24gZ29lKHQsZSl7dmFyIG4scjtpZihlLmRjKCkpcmV0dXJuIHZuKCksdm4oKSxpbztmb3Iocj1uZXcgbGUsdWUocixkZShfYSkpLG49MTtuPHQuZjsrK24pdC5hPT1udWxsJiZwdWUodCksdC5hW25dJiZ1ZShyLGRlKG4pKTtyZXR1cm4gci5jLmxlbmd0aD09MT8odm4oKSx2bigpLGlvKToodWUocixkZSh2aSkpLHptbihlLHIpKX1mdW5jdGlvbiB6Z24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztoPWUuYy5pLmshPShHbigpLERzKSx3PWg/ZS5kOmUuYyxuPW4xbihlLHcpLmkscz11KEpuKHQuayx3KSwxMjEpLHI9dC5pW24ucF0uYSxyS3Qody5pKTwobi5jP1JvKG4uYy5hLG4sMCk6LTEpPyhvPXMsZD1yKToobz1yLGQ9cyksdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLDQpLG8pLGQpKX1mdW5jdGlvbiBxZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9Z3N0KHQsczYoWG0obixoLmEpKSksdyYmKG89KCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSxNcihvLHcpKX1mdW5jdGlvbiBIZ24odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHc9Z3N0KHQsczYoWG0obixoLmEpKSksdyYmKG89KCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSxNcihvLHcpKX1mdW5jdGlvbiBvRCh0LGUsbil7dmFyIHIscztyPWUuYSZ0LmYsZS5iPXQuYltyXSx0LmJbcl09ZSxzPWUuZiZ0LmYsZS5kPXQuY1tzXSx0LmNbc109ZSxuPyhlLmU9bi5lLGUuZT9lLmUuYz1lOnQuYT1lLGUuYz1uLmMsZS5jP2UuYy5lPWU6dC5lPWUpOihlLmU9dC5lLGUuYz1udWxsLHQuZT90LmUuYz1lOnQuYT1lLHQuZT1lKSwrK3QuaSwrK3QuZ31mdW5jdGlvbiBwb2UodCl7dmFyIGUsbixyO2lmKGU9dC5QYigpLCF0Lk9iKCkpcmV0dXJuIGU7Zm9yKHI9aGMoVnIobmV3IF9wLCJleHBlY3RlZCBvbmUgZWxlbWVudCBidXQgd2FzOiA8IiksZSksbj0wO248NCYmdC5PYigpO24rKyloYygoci5hKz1LYSxyKSx0LlBiKCkpO3Rocm93IHQuT2IoKSYmKHIuYSs9IiwgLi4uIiksci5hKz0iPiIscnQobmV3IFBuKHIuYSkpfWZ1bmN0aW9uIEdnbih0LGUpe3ZhciBuO2UuZD9lLmQuYj1lLmI6dC5hPWUuYixlLmI/ZS5iLmQ9ZS5kOnQuZT1lLmQsIWUuZSYmIWUuYz8obj11KFV4KHQuYixlLmEpLDI4Myksbi5hPTAsKyt0LmMpOihuPXUoSm4odC5iLGUuYSksMjgzKSwtLW4uYSxlLmU/ZS5lLmM9ZS5jOm4uYj1lLmMsZS5jP2UuYy5lPWUuZTpuLmM9ZS5lKSwtLXQuZH1mdW5jdGlvbiBWZ24odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJm1zLGVbMl09ZVsyXSsobi82MHwwKSUxMCZtcyxlWzNdPWVbM10rKG4lNjAvMTB8MCkmbXMsZVs0XT1lWzRdK24lMTAmbXMsQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBib2UodCxlLG4pe3ZhciByLHM7Zm9yKHI9ZS5kLHM9bi5kO3IuYS1zLmE9PTAmJnIuYi1zLmI9PTA7KXIuYSs9b2wodCwyNikqTF8rb2wodCwyNykqTV8tLjUsci5iKz1vbCh0LDI2KSpMXytvbCh0LDI3KSpNXy0uNSxzLmErPW9sKHQsMjYpKkxfK29sKHQsMjcpKk1fLS41LHMuYis9b2wodCwyNikqTF8rb2wodCwyNykqTV8tLjV9ZnVuY3Rpb24gWDR0KHQpe3ZhciBlLG4scixzO2Zvcih0Lmc9bmV3IGVfKHUoQXIoWGEpLDI5MCkpLHI9MCxuPShiZSgpLE5uKSxlPTA7ZTx0LmouYy5sZW5ndGg7ZSsrKXM9dShGZSh0LmosZSksMTEpLHMuaiE9biYmKHIhPWUmJk54KHQuZyxuLG5ldyBsYShkZShyKSxkZShlKSkpLG49cy5qLHI9ZSk7TngodC5nLG4sbmV3IGxhKGRlKHIpLGRlKGUpKSl9ZnVuY3Rpb24gVWduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihyPTAsbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksbz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCkscy5wPXIrKyxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTEpLGgucD1yKyt9ZnVuY3Rpb24gdm9lKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihlKWZvcihkPWUuS2MoKTtkLk9iKCk7KWZvcihoPXUoZC5QYigpLDEwKSxrPWo1dChoLChzbygpLGV1KSxuKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwxMSksbz11KGVjKEFvKHMuZix3KSksMTEyKSxvfHwobz1uZXcgTEkodC5kKSxyLmNbci5jLmxlbmd0aF09byxKYWUobyx3LHMpKX1mdW5jdGlvbiBRNHQodCxlKXt2YXIgbixyLHM7aWYocz1FNCgoUnUoKSxtYSksdC5UZygpLGUpLHMpdG8oKSx1KHMsNjYpLk9qKCl8fChzPXF4KEVvKG1hLHMpKSkscj0obj10LllnKHMpLHUobj49MD90Ll9nKG4sITAsITApOmx3KHQscywhMCksMTUzKSksdShyLDIxNSkub2woZSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK1dfKSl9ZnVuY3Rpb24gWjR0KHQpe3ZhciBlLG47cmV0dXJuIHQ+LTB4ODAwMDAwMDAwMDAwJiZ0PDB4ODAwMDAwMDAwMDAwP3Q9PTA/MDooZT10PDAsZSYmKHQ9LXQpLG49cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2codCkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIWV8fHQhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpGbmUoa3UodCkpfWZ1bmN0aW9uIFdnbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgQTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMjkpLGg9ZS5hLGQ9ZS5iLCEoby5hLl9iKGgpfHxvLmEuX2IoZCkpJiYocz1oLHI9ZCxoLmUuYitoLmouYj4yJiZkLmUuYitkLmouYjw9MiYmKHM9ZCxyPWgpLG8uYS56YyhzLG8pLHMucT1yKTtyZXR1cm4gb31mdW5jdGlvbiB3b2UodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9bmV3IEgwKHQpLExvKHIsZSksSnQociwoc2UoKSxHRyksZSksSnQociwoVGUoKSxvcyksKG9hKCksVmMpKSxKdChyLExkLChRZCgpLFBWKSksXzAociwoR24oKSx4cykpLG49bmV3IE1jLFVvKG4sciksRnMobiwoYmUoKSxCbikpLHM9bmV3IE1jLFVvKHMsciksRnMocyxIbikscn1mdW5jdGlvbiBtb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgZWV0KChadigpLE9PKSk7Y2FzZSAxOnJldHVybiBuZXcgT0I7Y2FzZSAyOnJldHVybiBuZXcgSko7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNyb3NzaW5nIG1pbmltaXplciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geW9lKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jW2UucF09ITAsdWUodC5hLGUpLGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLHI9bmV3IFMxKG8uYik7Vm8oci5hKXx8Vm8oci5iKTspbj11KFZvKHIuYSk/SihyLmEpOkooci5iKSwxNykscz1haG4obyxuKS5pLHQuY1tzLnBdfHx5b2UodCxzKX1mdW5jdGlvbiB4b2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9MCxuPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksZD1lLmcscz1lLmYscj1iLk1hdGguc3FydChkKmQrcypzKSxoPWIuTWF0aC5tYXgocixoKSxvPXhvZShlKSxoPWIuTWF0aC5tYXgobyxoKTtyZXR1cm4gaH1mdW5jdGlvbiBRdSgpe1F1PVoseGI9bmV3IHNDKCJPVVRTSURFIiwwKSx0Zz1uZXcgc0MoIklOU0lERSIsMSksdE49bmV3IHNDKCJORVhUX1RPX1BPUlRfSUZfUE9TU0lCTEUiLDIpLEpTPW5ldyBzQygiQUxXQVlTX1NBTUVfU0lERSIsMyksWlM9bmV3IHNDKCJBTFdBWVNfT1RIRVJfU0FNRV9TSURFIiw0KSxHNj1uZXcgc0MoIlNQQUNFX0VGRklDSUVOVCIsNSl9ZnVuY3Rpb24ga29lKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7cmV0dXJuIHI9Q2luKHQsKHM9KFR2KCksbz1uZXcgQnB0LG8pLG4mJkM1dChzLG4pLHMpLGUpLHFDKHIsTzAoZSxDZCkpLEp6KGUsciksbGJuKGUsciksSzR0KGUsciksaD1lLGQ9VXYoaCwicG9ydHMiKSx3PW5ldyBDVnQodCxyKSxYYm4ody5hLHcuYixkKSx3aXQodCxlLHIpLG1jbih0LGUscikscn1mdW5jdGlvbiBLZ24odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJm1zLGVbMl09ZVsyXSsobi82MHwwKSUxMCZtcyxlWzRdPWVbNF0rKG4lNjAvMTB8MCkmbXMsZVs1XT1lWzVdK24lMTAmbXMsQWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBZZ24odCl7dmFyIGU7cmV0dXJuIGU9Y3Qob3QobWgsMSksdmQsMjUsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksdDw9MCYmKGVbM109NDMsdD0tdCksZVs0XT1lWzRdKygodC82MHwwKS8xMHwwKSZtcyxlWzVdPWVbNV0rKHQvNjB8MCklMTAmbXMsZVs3XT1lWzddKyh0JTYwLzEwfDApJm1zLGVbOF09ZVs4XSt0JTEwJm1zLEFoKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gWGduKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gVHU7Zm9yKG89bmV3IGMyKEthLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/VnIoby5hLG8uYik6by5hPW5ldyBJbChvLmQpLGNDKG8uYSwiIitFQyhlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBKNHQodCxlKXt2YXIgbixyLHM7Zm9yKHM9dmkscj1uZXcgUyhvNChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmYmJiF0LmNbbi5jXSYmKHQuY1tuLmNdPSEwLHM9Yi5NYXRoLm1pbihzLEo0dCh0LF96KG4sZSkpKSk7cmV0dXJuIHQuaVtlLmRdPXQuaix0LmdbZS5kXT1iLk1hdGgubWluKHMsdC5qKyspLHQuZ1tlLmRdfWZ1bmN0aW9uIEVvZSh0LGUpe3ZhciBuLHIscztmb3Iocz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYj0obj1yLmIsbi5YZSgoY2koKSxobCkpP24uSGYoKT09KGJlKCksTm4pPy1uLnJmKCkuYi1YdCh5ZShuLldlKGhsKSkpOlh0KHllKG4uV2UoaGwpKSk6bi5IZigpPT0oYmUoKSxObik/LW4ucmYoKS5iOjApfWZ1bmN0aW9uIFFnbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1hMnQodC5lKSxvPXVkKEJNKG5jKHMydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksZT1uLmEtby5hLHM9bi5iLW8uYixkPTA7ZDx0LmM7ZCsrKXtmb3Iocj1lLGg9MDtoPHQuZDtoKyspeWxuKHQuZSxuZXcgaWgocixzLHQuYSx0LmIpKSYmYnEodCxoLGQsITEsITApLHIrPXQuYTtzKz10LmJ9fWZ1bmN0aW9uIFpnbih0KXt2YXIgZSxuLHI7aWYoamUoUmUocWUodCwoY2koKSxXTykpKSkpe2ZvcihyPW5ldyBsZSxuPW5ldyBhcihscihHMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDc5KSx1dyhlKSYmamUoUmUocWUoZSxzZnQpKSkmJihyLmNbci5jLmxlbmd0aF09ZSk7cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIHM2KHQpe3ZhciBlLG47aWYobj0hMSxFdCh0LDIwNCkpcmV0dXJuIG49ITAsdSh0LDIwNCkuYTtpZighbiYmRXQodCwyNTgpJiYoZT11KHQsMjU4KS5hJTE9PTAsZSkpcmV0dXJuIG49ITAsZGUoVlllKHUodCwyNTgpLmEpKTt0aHJvdyBydChuZXcgYWQoIklkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW50ZWdlcjogJyIrdCsiJy4iKSl9ZnVuY3Rpb24gSmduKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPW51bGwscz1uZXcgTll0KCghdC5hJiYodC5hPW5ldyB6dHQodCkpLHQuYSkpO2k1dChzKTspaWYobj11KGFxKHMpLDU2KSxyPShoPW4uVGcoKSxkPShrNChoKSxoLm8pLCFkfHwhbi5taChkKT9udWxsOmN2dChkaXQoZCksbi5haChkKSkpLHIhPW51bGwmJmhuKHIsZSkpe289bjticmVha31yZXR1cm4gb31mdW5jdGlvbiBUb2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoQmwobiwib2NjdXJyZW5jZXMiKSxuPT0wKXJldHVybiBkPXUobnkoJHgodC5hKSxlKSwxNCksZD9kLmdjKCk6MDtpZihoPXUobnkoJHgodC5hKSxlKSwxNCksIWgpcmV0dXJuIDA7aWYobz1oLmdjKCksbj49byloLiRiKCk7ZWxzZSBmb3Iocz1oLktjKCkscj0wO3I8bjtyKyspcy5QYigpLHMuUWIoKTtyZXR1cm4gb31mdW5jdGlvbiB0cG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBCbChuLCJvbGRDb3VudCIpLEJsKDAsIm5ld0NvdW50Iikscj11KG55KCR4KHQuYSksZSksMTQpLChyP3IuZ2MoKTowKT09bj8oQmwoMCwiY291bnQiKSxzPShvPXUobnkoJHgodC5hKSxlKSwxNCksbz9vLmdjKCk6MCksaD0tcyxoPjA/WHB0KCk6aDwwJiZUb2UodCxlLC1oKSwhMCk6ITF9ZnVuY3Rpb24gY0QodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MCl7Zm9yKGg9YXNlKHQsITApLGU9MCxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbj4wJiYoZCs9biwrK2UpO2U+MSYmKGQrPXQuYyooZS0xKSl9ZWxzZSBkPUpxdChsbmUoSmooUmkoJG50KHQuYSksbmV3IEFsKSxuZXcgdWEpKSk7cmV0dXJuIGQ+MD9kK3Qubi5kK3Qubi5hOjB9ZnVuY3Rpb24gdUQodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MClkPUpxdChsbmUoSmooUmkoJG50KHQuYSksbmV3IFpsKSxuZXcgUGEpKSk7ZWxzZXtmb3IoaD1vc2UodCwhMCksZT0wLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxuPjAmJihkKz1uLCsrZSk7ZT4xJiYoZCs9dC5jKihlLTEpKX1yZXR1cm4gZD4wP2QrdC5uLmIrdC5uLmM6MH1mdW5jdGlvbiBlcG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KGdvKHQuYixlKSwxMjQpLG49by5hLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5jJiYobi5hPWIuTWF0aC5tYXgobi5hLEJ2dChyLmMpKSk7aWYobi5hPjApc3dpdGNoKGUuZyl7Y2FzZSAyOm8ubi5jPXQuczticmVhaztjYXNlIDQ6by5uLmI9dC5zfX1mdW5jdGlvbiBucG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dShRKGUsKFpmKCksdDcpKSwxOSkuYS11KFEodCx0NyksMTkpLmEsbj09MD8ocj1uYShuYyh1KFEodCwoR3AoKSxkTykpLDgpKSx1KFEodCxsUyksOCkpLHM9bmEobmModShRKGUsZE8pLDgpKSx1KFEoZSxsUyksOCkpLExzKHIuYSpyLmIscy5hKnMuYikpOm59ZnVuY3Rpb24gcnBuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXUoUShlLChodygpLEVWKSksMTkpLmEtdShRKHQsRVYpLDE5KS5hLG49PTA/KHI9bmEobmModShRKHQsKGZjKCksRk8pKSw4KSksdShRKHQsQlMpLDgpKSxzPW5hKG5jKHUoUShlLEZPKSw4KSksdShRKGUsQlMpLDgpKSxMcyhyLmEqci5iLHMuYSpzLmIpKTpufWZ1bmN0aW9uIENvZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBfcCxuLmErPSJlXyIsZT1mY24odCksZSE9bnVsbCYmKG4uYSs9IiIrZSksdC5jJiZ0LmQmJihWcigobi5hKz0iICIsbiksV3oodC5jKSksVnIoaGMoKG4uYSs9IlsiLG4pLHQuYy5pKSwiXSIpLFZyKChuLmErPVBvdCxuKSxXeih0LmQpKSxWcihoYygobi5hKz0iWyIsbiksdC5kLmkpLCJdIikpLG4uYX1mdW5jdGlvbiBfb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgV0w7Y2FzZSAxOnJldHVybiBuZXcgUUo7Y2FzZSAyOnJldHVybiBuZXcgWEo7Y2FzZSAzOnJldHVybiBuZXcgTkI7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBwaGFzZSAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdDV0KHQsZSxuLHIscyl7dmFyIG87c3dpdGNoKG89MCxzLmcpe2Nhc2UgMTpvPWIuTWF0aC5tYXgoMCxlLmIrdC5iLShuLmIrcikpO2JyZWFrO2Nhc2UgMzpvPWIuTWF0aC5tYXgoMCwtdC5iLXIpO2JyZWFrO2Nhc2UgMjpvPWIuTWF0aC5tYXgoMCwtdC5hLXIpO2JyZWFrO2Nhc2UgNDpvPWIuTWF0aC5tYXgoMCxlLmErdC5hLShuLmErcikpfXJldHVybiBvfWZ1bmN0aW9uIGlwbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgUWIocyksZD0oci5iLXIuYSkqci5jPDA/KElwKCksQWIpOm5ldyBQcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLG89XzgobixoLmEpLHA4dCBpbiBvLmF8fFZjdCBpbiBvLmE/cHduKHQsbyxlKTp4NW4odCxvLGUpLHFYZSh1KEpuKHQuYixvRShvKSksNzkpKX1mdW5jdGlvbiBlNXQodCl7dmFyIGUsbjtzd2l0Y2godC5iKXtjYXNlLTE6cmV0dXJuITA7Y2FzZSAwOnJldHVybiBuPXQudCxuPjF8fG49PS0xPyh0LmI9LTEsITApOihlPUxoKHQpLGUmJih0bygpLGUuQ2ooKT09azBlKT8odC5iPS0xLCEwKToodC5iPTEsITEpKTtkZWZhdWx0OmNhc2UgMTpyZXR1cm4hMX19ZnVuY3Rpb24gc3BuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0oIWUucyYmKGUucz1uZXcgaGUoQXUsZSwyMSwxNykpLGUucyksbz1udWxsLHM9MCxoPXIuaTtzPGg7KytzKXN3aXRjaChuPXUoU3QocixzKSwxNzApLCR2KEVvKHQsbikpKXtjYXNlIDI6Y2FzZSAzOiFvJiYobz1uZXcgbGUpLG8uY1tvLmMubGVuZ3RoXT1ufXJldHVybiBvfHwodm4oKSx2bigpLGlvKX1mdW5jdGlvbiBuNXQodCxlKXt2YXIgbixyLHMsbztpZihmaSh0KSx0LmMhPTB8fHQuYSE9MTIzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZGUpKSkpO2lmKG89ZT09MTEyLHI9dC5kLG49bDgodC5pLDEyNSxyKSxuPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFZkZSkpKSk7cmV0dXJuIHM9RGwodC5pLHIsbiksdC5kPW4rMSxmdGUocyxvLCh0LmUmNTEyKT09NTEyKX1mdW5jdGlvbiBhcG4odCl7dmFyIGU7aWYoZT11KFEodCwoVGUoKSxFUykpLDMxNCksZT09KFl4KCksUzYpKXRocm93IHJ0KG5ldyBGOSgiVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgIitlKyIgaW4gY2hpbGQgbm9kZSAiK3QrIiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4iKSl9ZnVuY3Rpb24gb3BuKHQsZSl7bGYoKTt2YXIgbixyLHMsbyxoLGQ7Zm9yKG49bnVsbCxoPWUuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTI4KSwhby5vJiYocj1FWGUoby5hKSxzPWx0bihvLmEpLGQ9bmV3IHhfKHIscyxudWxsLHUoby5kLmEuZWMoKS5LYygpLlBiKCksMTcpKSx1ZShkLmMsby5hKSx0LmNbdC5jLmxlbmd0aF09ZCxuJiZ1ZShuLmQsZCksbj1kKX1mdW5jdGlvbiBjcG4odCxlKXt2YXIgbixyLHM7aWYoIWUpcml0KHQsbnVsbCksJDgodCxudWxsKTtlbHNlIGlmKGUuaSY0KWZvcihyPSJbXSIsbj1lLmM7O249bi5jKXtpZighKG4uaSY0KSl7cz1XcHQoKEwwKG4pLG4ubytyKSkscml0KHQscyksJDgodCxzKTticmVha31yKz0iW10ifWVsc2Ugcz1XcHQoKEwwKGUpLGUubykpLHJpdCh0LHMpLCQ4KHQscyk7dC55ayhlKX1mdW5jdGlvbiBkXyh0LGUsbixyLHMpe3ZhciBvLGgsZCx3O3JldHVybiB3PWNudCh0LHUocyw1NikpLEd0KHcpIT09R3Qocyk/KGQ9dSh0Lmdbbl0sNzIpLG89WWQoZSx3KSxmQyh0LG4sU3N0KHQsbixvKSksbWwodC5lKSYmKGg9enAodCw5LG8uYWsoKSxzLHcsciwhMSksdjR0KGgsbmV3IEYwKHQuZSw5LHQuYyxkLG8sciwhMSkpLFVydChoKSksdyk6c31mdW5jdGlvbiB1cG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3Iocj11KEFpKHQuYyxlKSwxNSkscz11KEFpKHQuYyxuKSwxNSksbz1yLlpjKHIuZ2MoKSksaD1zLlpjKHMuZ2MoKSk7by5TYigpJiZoLlNiKCk7KWlmKGQ9dShvLlViKCksMTkpLHc9dShoLlViKCksMTkpLGQhPXcpcmV0dXJuIGR1KGQuYSx3LmEpO3JldHVybiFvLk9iKCkmJiFoLk9iKCk/MDpvLk9iKCk/MTotMX1mdW5jdGlvbiBTb2UodCxlKXt2YXIgbixyLHM7dHJ5e3JldHVybiBzPXRpbih0LmEsZSksc31jYXRjaChvKXtpZihvPVdpKG8pLEV0KG8sMzIpKXt0cnl7aWYocj0kbChlLF9hLHZpKSxuPUhmKHQuYSkscj49MCYmcjxuLmxlbmd0aClyZXR1cm4gbltyXX1jYXRjaChoKXtpZihoPVdpKGgpLCFFdChoLDEyNykpdGhyb3cgcnQoaCl9cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyBydChvKX19ZnVuY3Rpb24genN0KHQsZSl7dmFyIG4scixzO2lmKHM9RTQoKFJ1KCksbWEpLHQuVGcoKSxlKSxzKXJldHVybiB0bygpLHUocyw2NikuT2ooKXx8KHM9cXgoRW8obWEscykpKSxyPShuPXQuWWcocyksdShuPj0wP3QuX2cobiwhMCwhMCk6bHcodCxzLCEwKSwxNTMpKSx1KHIsMjE1KS5sbChlKTt0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK0ZjdCkpfWZ1bmN0aW9uIGxwbigpe3ZidCgpO3ZhciB0O3JldHVybiBvNWU/dSh3RSgoTXAoKSxVaCksUGgpLDE5MzkpOihyaShNMixuZXcgUmYpLFYzbigpLHQ9dShFdChGYygoTXAoKSxVaCksUGgpLDU0Nyk/RmMoVWgsUGgpOm5ldyBmWHQsNTQ3KSxvNWU9ITAsejVuKHQpLFU1bih0KSxraSgoYmJ0KCksWkF0KSx0LG5ldyBYWikseG8oVWgsUGgsdCksdCl9ZnVuY3Rpb24gaHBuKHQsZSl7dmFyIG4scixzLG87dC5qPS0xLG1sKHQuZSk/KG49dC5pLG89dC5pIT0wLHVJKHQsZSkscj1uZXcgRjAodC5lLDMsdC5jLG51bGwsZSxuLG8pLHM9ZS5Rayh0LmUsdC5jLG51bGwpLHM9aWFlKHQsZSxzKSxzPyhzLkVpKHIpLHMuRmkoKSk6bWkodC5lLHIpKToodUkodCxlKSxzPWUuUWsodC5lLHQuYyxudWxsKSxzJiZzLkZpKCkpfWZ1bmN0aW9uIHJxKHQsZSl7dmFyIG4scixzO2lmKHM9MCxyPWVbMF0scj49dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKG49KFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSk7bj49NDgmJm48PTU3JiYocz1zKjEwKyhuLTQ4KSwrK3IsIShyPj10Lmxlbmd0aCkpOyluPShScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpO3JldHVybiByPmVbMF0/ZVswXT1yOnM9LTEsc31mdW5jdGlvbiBmcG4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gcz11KHQuYSwxOSkuYSxvPXUodC5iLDE5KS5hLG49cyxyPW8sZT1iLk1hdGgubWF4KGIuTWF0aC5hYnMocyksYi5NYXRoLmFicyhvKSksczw9MCYmcz09bz8obj0wLHI9by0xKTpzPT0tZSYmbyE9ZT8obj1vLHI9cyxvPj0wJiYrK24pOihuPS1vLHI9cyksbmV3IGxhKGRlKG4pLGRlKHIpKX1mdW5jdGlvbiBkcG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihzPTA7czxlLm87cysrKWZvcihvPXMtZS5qK24saD0wO2g8ZS5wO2grKylpZihkPWgtZS5rK3Isdz1vLGs9ZCx3Kz10Lmosays9dC5rLHc+PTAmJms+PTAmJnc8dC5vJiZrPHQucCYmKCFkc2UoZSxzLGgpJiZsc2UodCxvLGQpfHxsNChlLHMsaCkmJiFsZm4odCxvLGQpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBncG4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aD10LmMsZD10LmQsbz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2guaS5uLGgubixoLmFdKSkuYixzPShvK0tvKGN0KG90KFVzLDEpLHRlLDgsMCxbZC5pLm4sZC5uLGQuYV0pKS5iKS8yLHI9bnVsbCxoLmo9PShiZSgpLEhuKT9yPW5ldyAkZShlK2guaS5jLmMuYStuLHMpOnI9bmV3ICRlKGUtbixzKSxoOCh0LmEsMCxyKX1mdW5jdGlvbiB1dyh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpXSkpKTt6cihyKTspaWYobj11KExyKHIpLDgyKSxzPU1vKG4pLCFlKWU9cztlbHNlIGlmKGUhPXMpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcXN0KHQsZSxuKXt2YXIgcjtpZigrK3QuaixlPj10LmkpdGhyb3cgcnQobmV3IG1vKFdjdCtlK1MyK3QuaSkpO2lmKG4+PXQuaSl0aHJvdyBydChuZXcgbW8oS2N0K24rUzIrdC5pKSk7cmV0dXJuIHI9dC5nW25dLGUhPW4mJihlPG4/SWModC5nLGUsdC5nLGUrMSxuLWUpOkljKHQuZyxuKzEsdC5nLG4sZS1uKSxKaSh0LmcsZSxyKSx0LmVpKGUscixuKSx0LmNpKCkpLHJ9ZnVuY3Rpb24gbG4odCxlLG4pe3ZhciByO2lmKHI9dSh0LmMueGMoZSksMTQpLHIpcmV0dXJuIHIuRmMobik/KCsrdC5kLCEwKTohMTtpZihyPXQuaWMoZSksci5GYyhuKSlyZXR1cm4rK3QuZCx0LmMuemMoZSxyKSwhMDt0aHJvdyBydChuZXcgYW10KCJOZXcgQ29sbGVjdGlvbiB2aW9sYXRlZCB0aGUgQ29sbGVjdGlvbiBzcGVjIikpfWZ1bmN0aW9uIGxEKHQpe3ZhciBlLG4scjtyZXR1cm4gdDwwPzA6dD09MD8zMjoocj0tKHQ+PjE2KSxlPXI+PjE2JjE2LG49MTYtZSx0PXQ+PmUscj10LTI1NixlPXI+PjE2Jjgsbis9ZSx0PDw9ZSxyPXQteXksZT1yPj4xNiY0LG4rPWUsdDw8PWUscj10LWJkLGU9cj4+MTYmMixuKz1lLHQ8PD1lLHI9dD4+MTQsZT1yJn4ocj4+MSksbisyLWUpfWZ1bmN0aW9uIHBwbih0KXtqeCgpO3ZhciBlLG4scixzO2ZvcihuRz1uZXcgbGUscXV0PW5ldyBDcix6dXQ9bmV3IGxlLGU9KCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpLFc0bihlKSxzPW5ldyBlcihlKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLFJvKG5HLHIsMCk9PS0xJiYobj1uZXcgbGUsdWUoenV0LG4pLFJpZShyLG4pKTtyZXR1cm4genV0fWZ1bmN0aW9uIGJwbih0LGUsbil7dmFyIHIscyxvLGg7dC5hPW4uYi5kLEV0KGUsMzUyKT8ocz1tNCh1KGUsNzkpLCExLCExKSxvPXNEKHMpLHI9bmV3IGthKHQpLHZhKG8scikseUQobyxzKSxlLldlKChjaSgpLGk1KSkhPW51bGwmJnZhKHUoZS5XZShpNSksNzQpLHIpKTooaD11KGUsNDcwKSxoLkhnKGguRGcoKSt0LmEuYSksaC5JZyhoLkVnKCkrdC5hLmIpKX1mdW5jdGlvbiBBb2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihrPVh0KHllKFEoZSwoVGUoKSxfUykpKSksdz10WzBdLm4uYSt0WzBdLm8uYSt0WzBdLmQuYytrLGQ9MTtkPHQubGVuZ3RoO2QrKylyPXRbZF0ubixzPXRbZF0ubyxuPXRbZF0uZCxvPXIuYS1uLmItdyxvPDAmJihyLmEtPW8pLGg9ZS5mLGguYT1iLk1hdGgubWF4KGguYSxyLmErcy5hKSx3PXIuYStzLmErbi5jK2t9ZnVuY3Rpb24gdnBuKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiByPXUodShKbih0LmcsZS5hKSw0NikuYSw2NSkscz11KHUoSm4odC5nLGUuYiksNDYpLmEsNjUpLG89ci5iLGg9cy5iLG49UHluKG8saCksbj49MD9uOihkPUFDKG5hKG5ldyAkZShoLmMraC5iLzIsaC5kK2guYS8yKSxuZXcgJGUoby5jK28uYi8yLG8uZCtvLmEvMikpKSwtKFh1ZShvLGgpLTEpKmQpfWZ1bmN0aW9uIHdwbih0LGUsbil7dmFyIHI7dXMobmV3IFRuKG51bGwsKCFuLmEmJihuLmE9bmV3IGhlKFppLG4sNiw2KSksbmV3IF9uKG4uYSwxNikpKSxuZXcgZlZ0KHQsZSkpLHVzKG5ldyBUbihudWxsLCghbi5uJiYobi5uPW5ldyBoZShxbyxuLDEsNykpLG5ldyBfbihuLm4sMTYpKSksbmV3IGRWdCh0LGUpKSxyPXUocWUobiwoY2koKSxpNSkpLDc0KSxyJiZheXQocix0LGUpfWZ1bmN0aW9uIGx3KHQsZSxuKXt2YXIgcixzLG87aWYobz1FNCgoUnUoKSxtYSksdC5UZygpLGUpLG8pcmV0dXJuIHRvKCksdShvLDY2KS5PaigpfHwobz1xeChFbyhtYSxvKSkpLHM9KHI9dC5ZZyhvKSx1KHI+PTA/dC5fZyhyLCEwLCEwKTpsdyh0LG8sITApLDE1MykpLHUocywyMTUpLmhsKGUsbik7dGhyb3cgcnQobmV3IFBuKGFiK2UubmUoKStGY3QpKX1mdW5jdGlvbiByNXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZihzPXQuZFtlXSxzKXtpZihvPXMuZyx3PXMuaSxyIT1udWxsKXtmb3IoZD0wO2Q8dzsrK2QpaWYoaD11KG9bZF0sMTMzKSxoLlNoKCk9PW4mJnlpKHIsaC5jZCgpKSlyZXR1cm4gaH1lbHNlIGZvcihkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLEd0KGguY2QoKSk9PT1HdChyKSlyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBoRCh0LGUpe3ZhciBuO2lmKGU8MCl0aHJvdyBydChuZXcgcFIoIk5lZ2F0aXZlIGV4cG9uZW50IikpO2lmKGU9PTApcmV0dXJuIEdIO2lmKGU9PTF8fGgzdCh0LEdIKXx8aDN0KHQsUUUpKXJldHVybiB0O2lmKCFab2UodCwwKSl7Zm9yKG49MTshWm9lKHQsbik7KSsrbjtyZXR1cm4gSjMoRGxuKG4qZSksaEQodW10KHQsbiksZSkpfXJldHVybiB6ZG4odCxlKX1mdW5jdGlvbiBtcG4odCxlKXt2YXIgbixyLHM7aWYoR3QodCk9PT1HdChlKSlyZXR1cm4hMDtpZih0PT1udWxsfHxlPT1udWxsfHx0Lmxlbmd0aCE9ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbilpZihyPXRbbl0scz1lW25dLCEoR3Qocik9PT1HdChzKXx8ciE9bnVsbCYmeWkocixzKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTG9lKHQpe2didCgpO3ZhciBlLG4scjtmb3IodGhpcy5iPUViZSx0aGlzLmM9KGFvKCksYzApLHRoaXMuZj0obUd0KCksa2JlKSx0aGlzLmE9dCxuYnQodGhpcyxuZXcgYmwpLHVxKHRoaXMpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksbi5kfHwoZT1uZXcgWGl0KGN0KG90KFl1dCwxKSxJZSw4MSwwLFtuXSkpLHVlKHQuYSxlKSl9ZnVuY3Rpb24geXBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoIXR8fHQuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3IGVRdChlLCFuKSxzPW5ldyBTKHQpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDcwKSxCNHQobywoejkoKSxuZXcgR2EocikpKTtyZXR1cm4gaD1vLmksaC5hPSh3PW8ubixvLmUuYit3LmQrdy5hKSxoLmI9KGQ9by5uLG8uZS5hK2QuYitkLmMpLG99ZnVuY3Rpb24gTW9lKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPXNJKHQuYSksZTJ0KGQsbmV3IHJmKSxuPW51bGwscz1kLG89MCxoPXMubGVuZ3RoO288aCYmKHI9c1tvXSxyLms9PShHbigpLHhzKSk7KytvKWU9dShRKHIsKHNlKCksb2MpKSw2MSksIShlIT0oYmUoKSxCbikmJmUhPUhuKSYmKG4mJnUoUShuLEk2KSwxNSkuRmMociksbj1yKX1mdW5jdGlvbiB4cG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO3c9KEFuKGUsdC5jLmxlbmd0aCksdSh0LmNbZV0sMzI5KSksQWcodCxlKSx3LmIvMj49biYmKHI9ZSxrPSh3LmMrdy5hKS8yLGg9ay1uLHcuYzw9ay1uJiYocz1uZXcgeW50KHcuYyxoKSwkbSh0LHIrKyxzKSksZD1rK24sZDw9dy5hJiYobz1uZXcgeW50KGQsdy5hKSxVbShyLHQuYy5sZW5ndGgpLFc5KHQuYyxyLG8pKSl9ZnVuY3Rpb24gaTV0KHQpe3ZhciBlO2lmKCF0LmMmJnQuZz09bnVsbCl0LmQ9dC5zaSh0LmYpLE1yKHQsdC5kKSxlPXQuZDtlbHNle2lmKHQuZz09bnVsbClyZXR1cm4hMDtpZih0Lmk9PTApcmV0dXJuITE7ZT11KHQuZ1t0LmktMV0sNDcpfXJldHVybiBlPT10LmImJm51bGwua20+PW51bGwuam0oKT8oYXEodCksaTV0KHQpKTplLk9iKCl9ZnVuY3Rpb24ga3BuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKGQ9biwhZCYmKGQ9UHZ0KG5ldyBZaywwKSksd3IoZCxWZmUsMSksWGxlKHQuYyxlKSxoPUYzbih0LmEsZSksaC5nYygpPT0xKURsZSh1KGguWGIoMCksMzcpLGQpO2Vsc2UgZm9yKG89MS9oLmdjKCkscz1oLktjKCk7cy5PYigpOylyPXUocy5QYigpLDM3KSxEbGUocixSYyhkLG8pKTtNS2UodC5hLGgsZSksRnZuKGUpLG9yKGQpfWZ1bmN0aW9uIElvZSh0KXtpZih0aGlzLmE9dCx0LmMuaS5rPT0oR24oKSx4cykpdGhpcy5jPXQuYyx0aGlzLmQ9dShRKHQuYy5pLChzZSgpLG9jKSksNjEpO2Vsc2UgaWYodC5kLmkuaz09eHMpdGhpcy5jPXQuZCx0aGlzLmQ9dShRKHQuZC5pLChzZSgpLG9jKSksNjEpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKCJFZGdlICIrdCsiIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLiIpKX1mdW5jdGlvbiBEb2UodCxlKXt2YXIgbixyLHM7cz10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLHMsdC5iKSksZT9lIT10JiYoWGModCxlLnpiKSx0aXQodCxlLmQpLG49KHI9ZS5jLHI/P2UuemIpLG5pdCh0LG49PW51bGx8fGhuKG4sZS56Yik/bnVsbDpuKSk6KFhjKHQsbnVsbCksdGl0KHQsMCksbml0KHQsbnVsbCkpfWZ1bmN0aW9uIE9vZSh0KXt2YXIgZSxuO2lmKHQuZil7Zm9yKDt0Lm48dC5vOyl7aWYoZT11KHQuaj90LmoucGkodC5uKTp0LmsuWGIodC5uKSw3Miksbj1lLmFrKCksRXQobiw5OSkmJnUobiwxOCkuQmImZGMmJighdC5lfHxuLkdqKCkhPUk3fHxuLmFqKCkhPTApJiZlLmRkKCkhPW51bGwpcmV0dXJuITA7Kyt0Lm59cmV0dXJuITF9ZWxzZSByZXR1cm4gdC5uPHQub31mdW5jdGlvbiBOb2UodCxlKXt2YXIgbjt0aGlzLmU9KEdtKCksQXIodCksR20oKSxiM3QodCkpLHRoaXMuYz0oQXIoZSksYjN0KGUpKSx4MnQodGhpcy5lLkhkKCkuZGMoKT09dGhpcy5jLkhkKCkuZGMoKSksdGhpcy5kPXRpZSh0aGlzLmUpLHRoaXMuYj10aWUodGhpcy5jKSxuPVhiKFhuLFt0ZSxJZV0sWzUsMV0sNSxbdGhpcy5lLkhkKCkuZ2MoKSx0aGlzLmMuSGQoKS5nYygpXSwyKSx0aGlzLmE9bixob24odGhpcyl9ZnVuY3Rpb24gUG9lKHQpeyF4dXQmJih4dXQ9bjVuKCkpO3ZhciBlPXQucmVwbGFjZSgvW1x4MDAtXHgxZlx4YWRcdTA2MDAtXHUwNjAzXHUwNmRkXHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBiLVx1MjAwZlx1MjAyOC1cdTIwMmVcdTIwNjAtXHUyMDY0XHUyMDZhLVx1MjA2Zlx1ZmVmZlx1ZmZmOS1cdWZmZmIiXFxdL2csZnVuY3Rpb24obil7cmV0dXJuIHVybihuKX0pO3JldHVybiciJytlKyciJ31mdW5jdGlvbiBGb2UodCl7QXd0KCk7dmFyIGUsbjtmb3IodGhpcy5iPUhnZSx0aGlzLmM9VmdlLHRoaXMuZz0od0d0KCkscWdlKSx0aGlzLmQ9KGFvKCksYzApLHRoaXMuYT10LFM1dCh0aGlzKSxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLCFlLmEmJmVXdChPZWUobmV3IElwdCxjdChvdChYSCwxKSxJZSw1NywwLFtlXSkpLHQpLGUuZT1uZXcgbyQoZS5kKX1mdW5jdGlvbiBFcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPXQuZS5jLmxlbmd0aCxyPVB0KHBoLHh5LDE1LHMsMCwxKSxoPW5ldyBTKHQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTQ0KSxyW28uYl09bmV3IFFpO2ZvcihuPW5ldyBTKHQuYyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjgyKSxyW2UuYy5iXS5GYyhlKSxyW2UuZC5iXS5GYyhlKTtyZXR1cm4gcn1mdW5jdGlvbiBUcG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9SGQodC5jLmxlbmd0aCkscz1uZXcgUyh0KTtzLmE8cy5jLmMubGVuZ3RoOyl7Zm9yKHI9dShKKHMpLDEwKSxoPW5ldyBxcyxvPU1zKHIpLG49bmV3IGFyKGxyKG8uYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSwxNyksZS5jLmk9PWUuZC5pfHxOcyhoLGUuZC5pKTtkLmNbZC5jLmxlbmd0aF09aH1yZXR1cm4gZH1mdW5jdGlvbiBDcG4odCxlKXt2YXIgbixyLHMsbyxoO2lmKG49dShJbih0LmEsNCksMTI2KSxoPW49PW51bGw/MDpuLmxlbmd0aCxlPj1oKXRocm93IHJ0KG5ldyBqbShlLGgpKTtyZXR1cm4gcz1uW2VdLGg9PTE/cj1udWxsOihyPVB0KFRmdCxKY3QsNDE1LGgtMSwwLDEpLEljKG4sMCxyLDAsZSksbz1oLWUtMSxvPjAmJkljKG4sZSsxLHIsZSxvKSksY0UodCxyKSxub2UodCxlLHMpLHN9ZnVuY3Rpb24gYTYoKXthNj1aLFc2PXUoU3QoV3QoKHNidCgpLHBjKS5xYiksNiksMzQpLFU2PXUoU3QoV3QocGMucWIpLDMpLDM0KSxNZnQ9dShTdChXdChwYy5xYiksNCksMzQpLElmdD11KFN0KFd0KHBjLnFiKSw1KSwxOCksUXooVzYpLFF6KFU2KSxReihNZnQpLFF6KElmdCksaDVlPW5ldyB3bChjdChvdChBdSwxKSxQNCwxNzAsMCxbVzYsVTZdKSl9ZnVuY3Rpb24gQm9lKHQsZSl7dmFyIG47dGhpcy5kPW5ldyBNOSx0aGlzLmI9ZSx0aGlzLmU9bmV3IHlvKGUucWYoKSksbj10LnUuSGMoKFF1KCksdE4pKSx0LnUuSGModGcpP3QuRD90aGlzLmE9biYmIWUuSWYoKTp0aGlzLmE9ITA6dC51LkhjKHhiKT9uP3RoaXMuYT0hKGUuemYoKS5LYygpLk9iKCl8fGUuQmYoKS5LYygpLk9iKCkpOnRoaXMuYT0hMTp0aGlzLmE9ITF9ZnVuY3Rpb24gUm9lKHQsZSl7dmFyIG4scixzLG87Zm9yKG49dC5vLmEsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxzLmUuYT0ocj1zLmIsci5YZSgoY2koKSxobCkpP3IuSGYoKT09KGJlKCksQm4pPy1yLnJmKCkuYS1YdCh5ZShyLldlKGhsKSkpOm4rWHQoeWUoci5XZShobCkpKTpyLkhmKCk9PShiZSgpLEJuKT8tci5yZigpLmE6bil9ZnVuY3Rpb24gam9lKHQsZSl7dmFyIG4scixzLG87bj11KFEodCwoVGUoKSxWbCkpLDEwMyksbz11KHFlKGUsdjcpLDYxKSxzPXUoUSh0LG9zKSw5OCkscyE9KG9hKCksSDEpJiZzIT15Yj9vPT0oYmUoKSxabykmJihvPW54dChlLG4pLG89PVpvJiYobz1KeChuKSkpOihyPUlsZShlKSxyPjA/bz1KeChuKTpvPUhJKEp4KG4pKSksYm8oZSx2NyxvKX1mdW5jdGlvbiBfcG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPXQuaixlLmEhPWUuYiYmWHMoaCxuZXcgSzUpLHM9aC5jLmxlbmd0aC8yfDAscj0wO3I8cztyKyspbz0oQW4ocixoLmMubGVuZ3RoKSx1KGguY1tyXSwxMTMpKSxvLmMmJkZzKG8uZCxlLmEpO2ZvcihuPXM7bjxoLmMubGVuZ3RoO24rKylvPShBbihuLGguYy5sZW5ndGgpLHUoaC5jW25dLDExMykpLG8uYyYmRnMoby5kLGUuYil9ZnVuY3Rpb24gU3BuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dC5jW2UuYy5wXVtlLnBdLHM9dC5jW24uYy5wXVtuLnBdLHIuYSE9bnVsbCYmcy5hIT1udWxsPyhvPVBudChyLmEscy5hKSxvPDA/dkQodCxlLG4pOm8+MCYmdkQodCxuLGUpLG8pOnIuYSE9bnVsbD8odkQodCxlLG4pLC0xKTpzLmEhPW51bGw/KHZEKHQsbixlKSwxKTowfWZ1bmN0aW9uICRvZSh0LGUpe3ZhciBuLHIscyxvO3QuZWooKT8obj10LlZpKCksbz10LmZqKCksKyt0LmosdC5IaShuLHQub2kobixlKSkscj10LlppKDMsbnVsbCxlLG4sbyksdC5iaigpPyhzPXQuY2ooZSxudWxsKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KG5YdCh0LGUpLHQuYmooKSYmKHM9dC5jaihlLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIGlxKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD1hdSh0LmUuVGcoKSxlKSxzPW5ldyB0eCxuPXUodC5nLDExOSksbz10Lmk7LS1vPj0wOylyPW5bb10saC5ybChyLmFrKCkpJiZNcihzLHIpOyFMaGUodCxzKSYmbWwodC5lKSYmS2sodCxlLiRqKCk/enAodCw2LGUsKHZuKCksaW8pLG51bGwsLTEsITEpOnpwKHQsZS5LaigpPzI6MSxlLG51bGwsbnVsbCwtMSwhMSkpfWZ1bmN0aW9uIGJFKCl7YkU9Wjt2YXIgdCxlO2ZvcihUNj1QdChCNCx0ZSw5MSwzMiwwLDEpLG9TPVB0KEI0LHRlLDkxLDMyLDAsMSksdD0xLGU9MDtlPD0xODtlKyspVDZbZV09S0kodCksb1NbZV09S0koTTAodCxlKSksdD1DYSh0LDUpO2Zvcig7ZTxvUy5sZW5ndGg7ZSsrKVQ2W2VdPUozKFQ2W2UtMV0sVDZbMV0pLG9TW2VdPUozKG9TW2UtMV0sKEpwKCksU3V0KSl9ZnVuY3Rpb24gQXBuKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gdC5hPT0oZ0UoKSxiUyk/ITA6KG89ZS5hLmMsbj1lLmEuYytlLmEuYiwhKGUuaiYmKHI9ZS5BLGg9ci5jLmMuYS1yLm8uYS8yLHM9by0oci5uLmErci5vLmEpLHM+aCl8fGUucSYmKHI9ZS5DLGg9ci5jLmMuYS1yLm8uYS8yLHM9ci5uLmEtbixzPmgpKSl9ZnVuY3Rpb24gTHBuKHQsZSl7dmFyIG47d3IoZSwiUGFydGl0aW9uIHByZXByb2Nlc3NpbmciLDEpLG49dShQbChSaShXbyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5hLDE2KSksbmV3ICRZKSxuZXcgYUYpLG5ldyBWNSksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHVzKG4uT2MoKSxuZXcgb0YpLG9yKGUpfWZ1bmN0aW9uIHpvZSh0KXtwcnQoKTt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1uZXcgbjIscz1uZXcgUyh0LmUuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLGQ9dC5nW28ucF0sZT11KFd2KG4sZCksMTUpLGV8fChlPW5ldyBsZSxwMihuLGQsZSkpLGUuRmMobyk7cmV0dXJuIG59ZnVuY3Rpb24gTXBuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lLmIuYix0LmE9UHQocGgseHksMTUscywwLDEpLHQuYj1QdChkbCxpMCwyNSxzLDE2LDEpLGg9ZWkoZS5iLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4NiksdC5hW28uZ109bmV3IFFpO2ZvcihyPWVpKGUuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSx0LmFbbi5iLmddLkZjKG4pLHQuYVtuLmMuZ10uRmMobil9ZnVuY3Rpb24gcW9lKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P2JmKHQpOihlPW5ldyBUaChiZih0KSksZS5hKz0iIChzdGFydFg6ICIsUjMoZSx0LmopLGUuYSs9Iiwgc3RhcnRZOiAiLFIzKGUsdC5rKSxlLmErPSIsIGVuZFg6ICIsUjMoZSx0LmIpLGUuYSs9IiwgZW5kWTogIixSMyhlLHQuYyksZS5hKz0iLCBpZGVudGlmaWVyOiAiLGZvKGUsdC5kKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIHM1dCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9YQyh0KTooZT1uZXcgVGgoWEModCkpLGUuYSs9IiAob3JkZXJlZDogIixrZyhlLCh0LkJiJjI1NikhPTApLGUuYSs9IiwgdW5pcXVlOiAiLGtnKGUsKHQuQmImNTEyKSE9MCksZS5hKz0iLCBsb3dlckJvdW5kOiAiLHVldChlLHQucyksZS5hKz0iLCB1cHBlckJvdW5kOiAiLHVldChlLHQudCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBIb2UodCxlLG4scixzLG8saCxkKXt2YXIgdztyZXR1cm4gRXQodC5DYiw4OCkmJmh5KHJsKHUodC5DYiw4OCkpLDQpLFhjKHQsbiksdC5mPXIsckUodCxzKSxzRSh0LG8pLG5FKHQsaCksaUUodCwhMSksUGcodCwhMCksYUUodCxkKSxOZyh0LCEwKSxJZyh0LDApLHQuYj0wLHR5KHQsMSksdz1PMSh0LGUsbnVsbCksdyYmdy5GaSgpLFJpdCh0LCExKSx0fWZ1bmN0aW9uIEdvZSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPXUoRmModC5hLGUpLDUxMiksbnx8KHI9bmV3IElydChlKSxzPShDJCgpLFIxP251bGw6ci5jKSxvPURsKHMsMCxiLk1hdGgubWF4KDAsZGoocyxFdSg0NikpKSksZVplKHIsR29lKHQsbykpLChSMT9udWxsOnIuYykubGVuZ3RoPT0wJiZTV3QocixuZXcgb2UpLHhvKHQuYSxSMT9udWxsOnIuYyxyKSxyKX1mdW5jdGlvbiBJcG4odCxlKXt2YXIgbjt0LmI9ZSx0Lmc9bmV3IGxlLG49RnBuKHQuYiksdC5lPW4sdC5mPW4sdC5jPWplKFJlKFEodC5iLChLeigpLEJFdCkpKSksdC5hPXllKFEodC5iLChjaSgpLCQ2KSkpLHQuYT09bnVsbCYmKHQuYT0xKSxYdCh0LmEpPjE/dC5lKj1YdCh0LmEpOnQuZi89WHQodC5hKSxsdW4odCkscGhuKHQpLFF2bih0KSxKdCh0LmIsKGlfKCksZUcpLHQuZyl9ZnVuY3Rpb24gVm9lKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHI9MCx3PW4sZXx8KHI9bioodC5jLmxlbmd0aC0xKSx3Kj0tMSksbz1uZXcgUyh0KTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDEwKSxKdChzLChUZSgpLExkKSwoUWQoKSxQVikpLHMuby5hPXIsZD1SZyhzLChiZSgpLEhuKSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTEpLGgubi5hPXI7cis9d319ZnVuY3Rpb24gYTV0KHQsZSxuKXt2YXIgcixzLG87dC5laigpPyhvPXQuZmooKSx6SSh0LGUsbikscj10LlppKDMsbnVsbCxuLGUsbyksdC5iaigpPyhzPXQuY2oobixudWxsKSx0LmlqKCkmJihzPXQuamoobixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOih6SSh0LGUsbiksdC5iaigpJiYocz10LmNqKG4sbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gbzYodCxlLG4pe3ZhciByLHMsbyxoLGQsdztyZXR1cm4gZD10LkdrKG4pLGQhPW4/KGg9dC5nW2VdLHc9ZCxmQyh0LGUsdC5vaShlLHcpKSxvPWgsdC5naShlLHcsbyksdC5yaygpJiYocj1uLHM9dC5kaihyLG51bGwpLCF1KGQsNDkpLmVoKCkmJihzPXQuY2oodyxzKSkscyYmcy5GaSgpKSxtbCh0LmUpJiZLayh0LHQuWmkoOSxuLGQsZSwhMSkpLGQpOm59ZnVuY3Rpb24gRHBuKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9bmV3IFModC5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4OSksbi5nPSEwO2ZvcihvPW5ldyBTKHQuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw4MSkscy5rPWplKFJlKHQuZS5LYihuZXcgbGEocyxlKSkpKSxzLmQuZz1zLmQuZyZqZShSZSh0LmUuS2IobmV3IGxhKHMsZSkpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVW9lKHQpe3ZhciBlLG4scixzLG87aWYobj0oZT11KEhmKFhhKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxvPXUoUSh0LChzZSgpLFp1KSksMTApLG8pZm9yKHM9bmV3IFMoby5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksR3QoUShyLF9pKSk9PT1HdCh0KSYmcEMobmV3IFMxKHIuYikpJiZwZihuLHIuaik7cmV0dXJuIG59ZnVuY3Rpb24gV29lKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKCF0LmRbbi5wXSl7Zm9yKHM9bmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpO3pyKHMpOyl7Zm9yKHI9dShMcihzKSwxNyksZD1yLmQuaSxoPW5ldyBhcihscihqbyhkKS5hLktjKCksbmV3IHopKTt6cihoKTspbz11KExyKGgpLDE3KSxvLmMuaT09ZSYmKHQuYVtvLnBdPSEwKTtXb2UodCxlLGQpfXQuZFtuLnBdPSEwfX1mdW5jdGlvbiBPcG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZihyPUpyZSh0LkRiJjI1NCkscj09MSl0LkViPW51bGw7ZWxzZSBpZihvPXMyKHQuRWIpLHI9PTIpcz1ic3QodCxlKSx0LkViPW9bcz09MD8xOjBdO2Vsc2V7Zm9yKGg9UHQoWG4sSWUsMSxyLTEsNSwxKSxuPTIsZD0wLHc9MDtuPD0xMjg7bjw8PTEpbj09ZT8rK2Q6dC5EYiZuJiYoaFt3KytdPW9bZCsrXSk7dC5FYj1ofXQuRGImPX5lfWZ1bmN0aW9uIE5wbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9KCFlLnMmJihlLnM9bmV3IGhlKEF1LGUsMjEsMTcpKSxlLnMpLG89bnVsbCxzPTAsaD1yLmk7czxoOysrcylzd2l0Y2gobj11KFN0KHIscyksMTcwKSwkdihFbyh0LG4pKSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6eyFvJiYobz1uZXcgbGUpLG8uY1tvLmMubGVuZ3RoXT1uO2JyZWFrfX1yZXR1cm4gb3x8KHZuKCksdm4oKSxpbyl9ZnVuY3Rpb24gbzV0KHQpe3ZhciBlO3N3aXRjaChlPTAsdCl7Y2FzZSAxMDU6ZT0yO2JyZWFrO2Nhc2UgMTA5OmU9ODticmVhaztjYXNlIDExNTplPTQ7YnJlYWs7Y2FzZSAxMjA6ZT0xNjticmVhaztjYXNlIDExNzplPTMyO2JyZWFrO2Nhc2UgMTE5OmU9NjQ7YnJlYWs7Y2FzZSA3MDplPTI1NjticmVhaztjYXNlIDcyOmU9MTI4O2JyZWFrO2Nhc2UgODg6ZT01MTI7YnJlYWs7Y2FzZSA0NDplPXdmfXJldHVybiBlfWZ1bmN0aW9uIFBwbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3O2lmKEd0KHQpPT09R3QoZSkmJnI9PXMpe0h1ZSh0LHIsbik7cmV0dXJufWZvcihkPTA7ZDxyO2QrKyl7Zm9yKGg9MCxvPXRbZF0sdz0wO3c8czt3KyspaD1PYShPYShDYShQcyhvLGNvKSxQcyhlW3ddLGNvKSksUHMobltkK3ddLGNvKSksUHMoU3IoaCksY28pKSxuW2Qrd109U3IoaCksaD16bShoLDMyKTtuW2Qrc109U3IoaCl9fWZ1bmN0aW9uIEZwbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihDPTAsaz0wLHM9dC5hLGQ9cy5hLmdjKCkscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw1NjEpLGU9KG4uYiYmYmF0KG4pLG4uYSksTT1lLmEsaD1lLmIsQys9TStoLGsrPU0qaDtyZXR1cm4gdz1iLk1hdGguc3FydCg0MDAqZCprLTQqaytDKkMpK0Msbz0yKigxMDAqZC0xKSxvPT0wP3c6dy9vfWZ1bmN0aW9uIEtvZSh0LGUpe2UuYiE9MCYmKGlzTmFOKHQucyk/dC5zPVh0KChRbihlLmIhPTApLHllKGUuYS5hLmMpKSk6dC5zPWIuTWF0aC5taW4odC5zLFh0KChRbihlLmIhPTApLHllKGUuYS5hLmMpKSkpLGlzTmFOKHQuYyk/dC5jPVh0KChRbihlLmIhPTApLHllKGUuYy5iLmMpKSk6dC5jPWIuTWF0aC5tYXgodC5jLFh0KChRbihlLmIhPTApLHllKGUuYy5iLmMpKSkpKX1mdW5jdGlvbiBnXyh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpXSkpKTt6cihyKTspaWYobj11KExyKHIpLDgyKSxzPU1vKG4pLCFlKWU9dHMocyk7ZWxzZSBpZihlIT10cyhzKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIc3QodCxlKXt2YXIgbixyLHMsbzt0LmVqKCk/KG49dC5pLG89dC5maigpLHVJKHQsZSkscj10LlppKDMsbnVsbCxlLG4sbyksdC5iaigpPyhzPXQuY2ooZSxudWxsKSx0LmlqKCkmJihzPXQuamooZSxzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOnQuJGkocikpOih1SSh0LGUpLHQuYmooKSYmKHM9dC5jaihlLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIFlvZSh0LGUsbil7dmFyIHIscyxvO3QuZWooKT8obz10LmZqKCksKyt0LmosdC5IaShlLHQub2koZSxuKSkscj10LlppKDMsbnVsbCxuLGUsbyksdC5iaigpPyhzPXQuY2oobixudWxsKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KCsrdC5qLHQuSGkoZSx0Lm9pKGUsbikpLHQuYmooKSYmKHM9dC5jaihuLG51bGwpLHMmJnMuRmkoKSkpfWZ1bmN0aW9uIEJwbih0KXt2YXIgZSxuLHIscztmb3Iocz10Lmxlbmd0aCxlPW51bGwscj0wO3I8cztyKyspbj0oUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKSxjZCgiLiorP3tbKCl8XFxeJCIsRXUobikpPj0wPyhlfHwoZT1uZXcgQjkscj4wJiZmbyhlLHQuc3Vic3RyKDAscikpKSxlLmErPSJcXCIsbTgoZSxuJm1zKSk6ZSYmbTgoZSxuJm1zKTtyZXR1cm4gZT9lLmE6dH1mdW5jdGlvbiBScG4odCl7dmFyIGU7aWYoIXQuYSl0aHJvdyBydChuZXcgRm8oIklEYXRhVHlwZSBjbGFzcyBleHBlY3RlZCBmb3IgbGF5b3V0IG9wdGlvbiAiK3QuZikpO2lmKGU9VWluKHQuYSksZT09bnVsbCl0aHJvdyBydChuZXcgRm8oIkNvdWxkbid0IGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb2YgcHJvcGVydHkgJyIrdC5mKyInLiAiK0gxZSsoTDAodU4pLHVOLmspK2E4dCkpO3JldHVybiB1KGUsNDE0KX1mdW5jdGlvbiBHc3QodCl7dmFyIGUsbixyLHMsbztyZXR1cm4gbz10LmVoKCksbyYmby5raCgpJiYocz1LcCh0LG8pLHMhPW8pPyhuPXQuVmcoKSxyPShlPXQuVmcoKSxlPj0wP3QuUWcobnVsbCk6dC5laCgpLmloKHQsLTEtZSxudWxsLG51bGwpKSx0LlJnKHUocyw0OSksbiksciYmci5GaSgpLHQuTGcoKSYmdC5NZygpJiZuPi0xJiZtaSh0LG5ldyBRcyh0LDksbixvLHMpKSxzKTpvfWZ1bmN0aW9uIFhvZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2ZvcihoPTAsbz10LmYuZSxyPTA7cjxvLmMubGVuZ3RoOysrcilmb3IoZD0oQW4ocixvLmMubGVuZ3RoKSx1KG8uY1tyXSwxNDQpKSxzPXIrMTtzPG8uYy5sZW5ndGg7KytzKXc9KEFuKHMsby5jLmxlbmd0aCksdShvLmNbc10sMTQ0KSksbj1IcChkLmQsdy5kKSxlPW4tdC5hW2QuYl1bdy5iXSxoKz10LmlbZC5iXVt3LmJdKmUqZTtyZXR1cm4gaH1mdW5jdGlvbiBqcG4odCxlKXt2YXIgbjtpZighVnMoZSwoVGUoKSxjdSkpJiYobj1sMW4odShRKGUsYlR0KSwzNjApLHUoUSh0LGN1KSwxNjMpKSxKdChlLGJUdCxuKSwhenIobmV3IGFyKGxyKHowKGUpLmEuS2MoKSxuZXcgeikpKSkpc3dpdGNoKG4uZyl7Y2FzZSAxOkp0KGUsY3UsKGhoKCkseVMpKTticmVhaztjYXNlIDI6SnQoZSxjdSwoaGgoKSx4UykpfX1mdW5jdGlvbiAkcG4odCxlKXt2YXIgbjtYdm4odCksdC5hPShuPW5ldyBzZXQsdXMobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBCdHQobikpLG4pLGF2bih0LHUoUShlLmIsKFRlKCksV2x0KSksMzc2KSksSmhuKHQpLFZwbih0KSxmMW4odCksdGZuKHQpLFl5bih0LGUpLHVzKFdvKG5ldyBUbihudWxsLG9adChUZW4odC5iKS5hKSksbmV3IF8zKSxuZXcgTVgpLGUuYT0hMSx0LmE9bnVsbH1mdW5jdGlvbiBRb2UoKXtMNHQuY2FsbCh0aGlzLEdFLChUdigpLEE0ZSkpLHRoaXMucD1udWxsLHRoaXMuYT1udWxsLHRoaXMuZj1udWxsLHRoaXMubj1udWxsLHRoaXMuZz1udWxsLHRoaXMuYz1udWxsLHRoaXMuaT1udWxsLHRoaXMuaj1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1udWxsLHRoaXMuZT1udWxsLHRoaXMuaz1udWxsLHRoaXMubz1udWxsLHRoaXMucz1udWxsLHRoaXMucT0hMSx0aGlzLnI9ITF9ZnVuY3Rpb24gdkUoKXt2RT1aLGtmdD1uZXcgU3goZDFlLDApLEpWPW5ldyBTeCgiSU5TSURFX1NFTEZfTE9PUFMiLDEpLHRVPW5ldyBTeCgiTVVMVElfRURHRVMiLDIpLFpWPW5ldyBTeCgiRURHRV9MQUJFTFMiLDMpLHhmdD1uZXcgU3goIlBPUlRTIiw0KSxRVj1uZXcgU3goIkNPTVBPVU5EIiw1KSxYVj1uZXcgU3goIkNMVVNURVJTIiw2KSx5ZnQ9bmV3IFN4KCJESVNDT05ORUNURUQiLDcpfWZ1bmN0aW9uIFpvZSh0LGUpe3ZhciBuLHIscztpZihlPT0wKXJldHVybih0LmFbMF0mMSkhPTA7aWYoZTwwKXRocm93IHJ0KG5ldyBwUigiTmVnYXRpdmUgYml0IGFkZHJlc3MiKSk7aWYocz1lPj41LHM+PXQuZClyZXR1cm4gdC5lPDA7aWYobj10LmFbc10sZT0xPDwoZSYzMSksdC5lPDApe2lmKHI9cG5lKHQpLHM8cilyZXR1cm4hMTtyPT1zP249LW46bj1+bn1yZXR1cm4obiZlKSE9MH1mdW5jdGlvbiB6cG4odCxlLG4scil7dmFyIHM7dShuLmIsNjUpLHUobi5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLHM9bmEobmModShuLmIsNjUpLmMpLHUoci5iLDY1KS5jKSxBaihzLGRvZSh1KG4uYiw2NSksdShyLmIsNjUpLHMpKSx1KHIuYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KS5jLmErcy5hLHUoci5iLDY1KS5jLmIrcy5iLHUoci5iLDY1KSxtdShyLmEsbmV3IHh2dCh0LGUscikpfWZ1bmN0aW9uIGM1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKG89ZS5lLG8pe2ZvcihuPUdzdChvKSxyPXUodC5nLDY3NCksaD0wO2g8dC5pOysraClpZih3PXJbaF0sbHN0KHcpPT1uJiYocz0oIXcuZCYmKHcuZD1uZXcgU3MoaG8sdywxKSksdy5kKSxkPXUobi5haChhYXQobyxvLkNiLG8uRGI+PjE2KSksMTUpLlhjKG8pLGQ8cy5pKSlyZXR1cm4gYzV0KHQsdShTdChzLGQpLDg3KSl9cmV0dXJuIGV9ZnVuY3Rpb24gSSh0LGUsbil7dmFyIHI9JEgscyxvPXJbdF0saD1vIGluc3RhbmNlb2YgQXJyYXk/b1swXTpudWxsO28mJiFoP2w9bzoobD0ocz1lJiZlLnByb3RvdHlwZSwhcyYmKHM9JEhbZV0pLGhybihzKSksbC5obT1uLCFlJiYobC5pbT1DdCksclt0XT1sKTtmb3IodmFyIGQ9MztkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWFyZ3VtZW50c1tkXS5wcm90b3R5cGU9bDtoJiYobC5nbT1oKX1mdW5jdGlvbiB6cih0KXtmb3IodmFyIGU7IXUoQXIodC5hKSw0NykuT2IoKTspe2lmKHQuZD1HY24odCksIXQuZClyZXR1cm4hMTtpZih0LmE9dSh0LmQuUGIoKSw0NyksRXQodC5hLDM5KSl7aWYoZT11KHQuYSwzOSksdC5hPWUuYSwhdC5iJiYodC5iPW5ldyBQMykscXAodC5iLHQuZCksZS5iKWZvcig7IU45KGUuYik7KXFwKHQuYix1KGNlbihlLmIpLDQ3KSk7dC5kPWUuZH19cmV0dXJuITB9ZnVuY3Rpb24gdTV0KHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz1lPT1udWxsPzA6dC5iLnNlKGUpLHI9KG49dC5hLmdldChvKSxuPz9uZXcgQXJyYXkpLGg9MDtoPHIubGVuZ3RoO2grKylpZihzPXJbaF0sdC5iLnJlKGUscy5jZCgpKSlyZXR1cm4gci5sZW5ndGg9PTE/KHIubGVuZ3RoPTAsRFFlKHQuYSxvKSk6ci5zcGxpY2UoaCwxKSwtLXQuYyxhJCh0LmIpLHMuZGQoKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsNXQodCxlKXt2YXIgbixyLHMsbztmb3Iocz0xLGUuaj0hMCxvPW51bGwscj1uZXcgUyhvNChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSx0LmNbbi5jXXx8KHQuY1tuLmNdPSEwLG89X3oobixlKSxuLmY/cys9bDV0KHQsbyk6IW8uaiYmbi5hPT1uLmUuZS1uLmQuZSYmKG4uZj0hMCxOcyh0LnAsbikscys9bDV0KHQsbykpKTtyZXR1cm4gc31mdW5jdGlvbiBxcG4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxyPShPbigwKSwwKSxyPjAmJighKE9wKHQuYS5jKSYmZS5uLmQpJiYhKGM4KHQuYS5jKSYmZS5uLmIpJiYoZS5nLmQrPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKE9wKHQuYS5jKSYmZS5uLmEpJiYhKGM4KHQuYS5jKSYmZS5uLmMpJiYoZS5nLmEtPXItMSkpfWZ1bmN0aW9uIEpvZSh0KXt2YXIgZSxuLHIscyxvO2lmKHM9bmV3IGxlLG89VXVlKHQscyksZT11KFEodCwoc2UoKSxadSkpLDEwKSxlKWZvcihyPW5ldyBTKGUuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLEd0KFEobixfaSkpPT09R3QodCkmJihvPWIuTWF0aC5tYXgobyxVdWUobixzKSkpO3JldHVybiBzLmMubGVuZ3RoPT0wfHxKdCh0LFc0LG8pLG8hPS0xP3M6bnVsbH1mdW5jdGlvbiB0Y2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztvPXUoRmUoZS5lLDApLDE3KS5jLHI9by5pLHM9ci5rLHc9dShGZShuLmcsMCksMTcpLmQsaD13LmksZD1oLmsscz09KEduKCksWnMpP0p0KHQsKHNlKCksbjEpLHUoUShyLG4xKSwxMSkpOkp0KHQsKHNlKCksbjEpLG8pLGQ9PVpzP0p0KHQsKHNlKCksUmgpLHUoUShoLFJoKSwxMSkpOkp0KHQsKHNlKCksUmgpLHcpfWZ1bmN0aW9uIGVjZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPVNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpLG49byZ0LmIubGVuZ3RoLTEscz1udWxsLHI9dC5iW25dO3I7cz1yLHI9ci5hKWlmKHIuZD09byYmZmQoci5pLGUpKXJldHVybiBzP3MuYT1yLmE6dC5iW25dPXIuYSxLcXQoci5jLHIuZiksY00oci5iLHIuZSksLS10LmYsKyt0LmUsITA7cmV0dXJuITF9ZnVuY3Rpb24gaDV0KHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gZSY9NjMsbj10Lmgscj0obiZJRCkhPTAsciYmKG58PS0xMDQ4NTc2KSxlPDIyPyhoPW4+PmUsbz10Lm0+PmV8bjw8MjItZSxzPXQubD4+ZXx0Lm08PDIyLWUpOmU8NDQ/KGg9cj9XMDowLG89bj4+ZS0yMixzPXQubT4+ZS0yMnxuPDw0NC1lKTooaD1yP1cwOjAsbz1yP3VsOjAscz1uPj5lLTQ0KSxydShzJnVsLG8mdWwsaCZXMCl9ZnVuY3Rpb24gVnN0KHQpe3ZhciBlLG4scixzLG8saDtmb3IodGhpcy5jPW5ldyBsZSx0aGlzLmQ9dCxyPXNzLHM9c3MsZT1UcyxuPVRzLGg9ZWkodCwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksOCkscj1iLk1hdGgubWluKHIsby5hKSxzPWIuTWF0aC5taW4ocyxvLmIpLGU9Yi5NYXRoLm1heChlLG8uYSksbj1iLk1hdGgubWF4KG4sby5iKTt0aGlzLmE9bmV3IGloKHIscyxlLXIsbi1zKX1mdW5jdGlvbiBuY2UodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMjkpLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOylmb3IoaD11KEooZCksMTApLGguaz09KEduKCksU2wpJiZjNihoLGUpLHI9bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLGpuZShuLGUpfWZ1bmN0aW9uIGY1dCh0KXt2YXIgZSxuLHI7dGhpcy5jPXQscj11KFEodCwoVGUoKSxWbCkpLDEwMyksZT1YdCh5ZShRKHQsVUcpKSksbj1YdCh5ZShRKHQscEN0KSkpLHI9PShhbygpLGpoKXx8cj09a2Z8fHI9PWMwP3RoaXMuYj1lKm46dGhpcy5iPTEvKGUqbiksdGhpcy5qPVh0KHllKFEodCxaNCkpKSx0aGlzLmU9WHQoeWUoUSh0LEJ3KSkpLHRoaXMuZj10LmIuYy5sZW5ndGh9ZnVuY3Rpb24gSHBuKHQpe3ZhciBlLG47Zm9yKHQuZT1QdChUcixYciwyNSx0LnAuYy5sZW5ndGgsMTUsMSksdC5rPVB0KFRyLFhyLDI1LHQucC5jLmxlbmd0aCwxNSwxKSxuPW5ldyBTKHQucCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLHQuZVtlLnBdPU4wKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksdC5rW2UucF09TjAobmV3IGFyKGxyKE1zKGUpLmEuS2MoKSxuZXcgeikpKX1mdW5jdGlvbiBHcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPTAsdC5xPW5ldyBsZSxlPW5ldyBxcyxoPW5ldyBTKHQucCk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksby5wPXMscj1uZXcgYXIobHIoTXMobykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksTnMoZSxuLmQuaSk7ZS5hLkJjKG8pIT1udWxsLHVlKHQucSxuZXcgeUMoZSkpLGUuYS4kYigpLCsrc319ZnVuY3Rpb24gaHcoKXtodz1aLHNfdD1uZXcgTXYoMjApLG95ZT1uZXcgZW8oKGNpKCkscTIpLHNfdCksb190PW5ldyBlbyhIMiwyMCksbnllPW5ldyBlbygkNixCRSksRVY9bmV3IGVvKHpWLGRlKDEpKSx1eWU9bmV3IGVvKGRmdCwoRm4oKSwhMCkpLHJfdD1VTyxpeWU9ejIsc3llPWE1LGF5ZT12YixyeWU9czUsaV90PVlPLGN5ZT1LeSxseWU9KGZ5dCgpLGV5ZSksYV90PXR5ZX1mdW5jdGlvbiByY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodC5hLmY+MCYmRXQoZSw0MikmJih0LmEucWooKSxrPXUoZSw0Miksdz1rLmNkKCksbz13PT1udWxsPzA6SGkodyksaD1YMnQodC5hLG8pLG49dC5hLmRbaF0sbikpe2ZvcihyPXUobi5nLDM2NyksQz1uLmksZD0wO2Q8QzsrK2QpaWYocz1yW2RdLHMuU2goKT09byYmcy5GYihrKSlyZXR1cm4gcmNlKHQsayksITB9cmV0dXJuITF9ZnVuY3Rpb24gVnBuKHQpe3ZhciBlLG4scixzO2ZvcihzPXUoQWkodC5hLChnNCgpLE1HKSksMTUpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwMSksbj0oZT1QeChyLmspLGUuSGMoKGJlKCksTm4pKT9lLkhjKEhuKT9lLkhjKG1yKT9lLkhjKEJuKT9udWxsOnIyZTpzMmU6aTJlOm4yZSksdzgodCxyLG5bMF0sKEp2KCksU3cpLDApLHc4KHQscixuWzFdLGhiLDEpLHc4KHQscixuWzJdLEF3LDEpfWZ1bmN0aW9uIFVwbih0LGUpe3ZhciBuLHI7bj15d24oZSksd3ZuKHQsZSxuKSxjYWUodC5hLHUoUShGYShlLmIpLChzZSgpLE82KSksMjMwKSksVnduKHQpLG1kbih0LGUpLHI9UHQoVHIsWHIsMjUsZS5iLmouYy5sZW5ndGgsMTUsMSksU2F0KHQsZSwoYmUoKSxObikscixuKSxTYXQodCxlLEhuLHIsbiksU2F0KHQsZSxtcixyLG4pLFNhdCh0LGUsQm4scixuKSx0LmE9bnVsbCx0LmM9bnVsbCx0LmI9bnVsbH1mdW5jdGlvbiBkNXQoKXtkNXQ9WixGX3Q9KFR6KCksJGh0KSxHeWU9bmV3IG1uKFdrdCxGX3QpLHF5ZT1uZXcgbW4oS2t0LChGbigpLCEwKSksZGUoLTEpLGp5ZT1uZXcgbW4oWWt0LGRlKC0xKSksZGUoLTEpLCR5ZT1uZXcgbW4oWGt0LGRlKC0xKSksSHllPW5ldyBtbihRa3QsITEpLFZ5ZT1uZXcgbW4oWmt0LCEwKSx6eWU9bmV3IG1uKENjdCwhMSksVXllPW5ldyBtbihKa3QsLTEpfWZ1bmN0aW9uIGc1dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgNzohdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHhyKHQuZSksIXQuZSYmKHQuZT1uZXcgQ24oV3MsdCw3LDQpKSxycyh0LmUsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODohdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHhyKHQuZCksIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSxycyh0LmQsdShuLDE0KSk7cmV0dXJufWg0dCh0LGUsbil9ZnVuY3Rpb24gcDV0KHQsZSl7dmFyIG4scixzLG8saDtpZihHdChlKT09PUd0KHQpKXJldHVybiEwO2lmKCFFdChlLDE1KXx8KGg9dShlLDE1KSx0LmdjKCkhPWguZ2MoKSkpcmV0dXJuITE7Zm9yKG89aC5LYygpLHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCkscz1vLlBiKCksIShHdChuKT09PUd0KHMpfHxuIT1udWxsJiZ5aShuLHMpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBXcG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KFBsKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcga0wpLG5ldyBKUCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG8uSmMobmV3IEVMKSxuPTAscz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxyLnA9PS0xJiZ2NXQodCxyLG4rKyl9ZnVuY3Rpb24gaWNlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHA5O2Nhc2UgMTpyZXR1cm4gbmV3IEtKO2Nhc2UgMjpyZXR1cm4gbmV3IFdKO2Nhc2UgMzpyZXR1cm4gbmV3IEFWdDtjYXNlIDQ6cmV0dXJuIG5ldyBwWXQ7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBzY2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgS3Z0O2Nhc2UgMTpyZXR1cm4gbmV3IFlKO2Nhc2UgMjpyZXR1cm4gbmV3IHpKO2Nhc2UgMzpyZXR1cm4gbmV3IHFKO2Nhc2UgNDpyZXR1cm4gbmV3IE1WdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3ljbGUgYnJlYWtlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gYjV0KCl7YjV0PVosQ3llPW5ldyBtbih6a3QsZGUoMCkpLF95ZT1uZXcgbW4ocWt0LDApLHdfdD0oUkkoKSxDViksRXllPW5ldyBtbihrY3Qsd190KSxkZSgwKSxreWU9bmV3IG1uKEVjdCxkZSgxKSkseV90PShjeigpLGpodCksU3llPW5ldyBtbihIa3QseV90KSx4X3Q9KE4kKCksUGh0KSxBeWU9bmV3IG1uKEdrdCx4X3QpLG1fdD0oR3ooKSxSaHQpLFR5ZT1uZXcgbW4oVmt0LG1fdCl9ZnVuY3Rpb24gS3BuKHQsZSxuKXt2YXIgcjtyPW51bGwsZSYmKHI9ZS5kKSxsXyh0LG5ldyBhOChlLm4uYS1yLmIrbi5hLGUubi5iLXIuZCtuLmIpKSxsXyh0LG5ldyBhOChlLm4uYS1yLmIrbi5hLGUubi5iK2Uuby5iK3IuYStuLmIpKSxsXyh0LG5ldyBhOChlLm4uYStlLm8uYStyLmMrbi5hLGUubi5iLXIuZCtuLmIpKSxsXyh0LG5ldyBhOChlLm4uYStlLm8uYStyLmMrbi5hLGUubi5iK2Uuby5iK3IuYStuLmIpKX1mdW5jdGlvbiB2NXQodCxlLG4pe3ZhciByLHMsbztmb3IoZS5wPW4sbz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoZSksbmV3IEVyKGUpXSkpKTt6cihvKTspcj11KExyKG8pLDExKSxyLnA9PS0xJiZ2NXQodCxyLG4pO2lmKGUuaS5rPT0oR24oKSxacykpZm9yKHM9bmV3IFMoZS5pLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxyIT1lJiZyLnA9PS0xJiZ2NXQodCxyLG4pfWZ1bmN0aW9uIGFjZSh0KXt2YXIgZSxuLHIscyxvO2lmKHM9dShQbCh5cm4oUFF0KHQpKSxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksR2wpXSkpKSwxNSkscj1GRSxzLmdjKCk+PTIpZm9yKG49cy5LYygpLGU9eWUobi5QYigpKTtuLk9iKCk7KW89ZSxlPXllKG4uUGIoKSkscj1iLk1hdGgubWluKHIsKE9uKGUpLGUtKE9uKG8pLG8pKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gWXBuKHQsZSl7dmFyIG4scixzLG8saDtyPW5ldyBRaSxocyhyLGUsci5jLmIsci5jKTtkbyBmb3Iobj0oUW4oci5iIT0wKSx1KGNoKHIsci5hLmEpLDg2KSksdC5iW24uZ109MSxvPWVpKG4uZCwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksMTg4KSxoPXMuYyx0LmJbaC5nXT09MT9uaSh0LmEscyk6dC5iW2guZ109PTI/dC5iW2guZ109MTpocyhyLGgsci5jLmIsci5jKTt3aGlsZShyLmIhPTApfWZ1bmN0aW9uIFhwbih0LGUpe3ZhciBuLHIscztpZihHdChlKT09PUd0KEFyKHQpKSlyZXR1cm4hMDtpZighRXQoZSwxNSl8fChyPXUoZSwxNSkscz10LmdjKCkscyE9ci5nYygpKSlyZXR1cm4hMTtpZihFdChyLDU0KSl7Zm9yKG49MDtuPHM7bisrKWlmKCFmZCh0LlhiKG4pLHIuWGIobikpKXJldHVybiExO3JldHVybiEwfWVsc2UgcmV0dXJuIGlmbih0LktjKCksci5LYygpKX1mdW5jdGlvbiBvY2UodCxlKXt2YXIgbixyO2lmKHQuYy5sZW5ndGghPTApe2lmKHQuYy5sZW5ndGg9PTIpYzYoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTApKSwoamwoKSx1MCkpLGM2KChBbigxLHQuYy5sZW5ndGgpLHUodC5jWzFdLDEwKSksd2IpO2Vsc2UgZm9yKHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLGM2KG4sZSk7dC5jPVB0KFhuLEllLDEsMCw1LDEpfX1mdW5jdGlvbiBRcG4odCl7dmFyIGUsbjtpZih0LmMubGVuZ3RoIT0yKXRocm93IHJ0KG5ldyBGbygiT3JkZXIgb25seSBhbGxvd2VkIGZvciB0d28gcGF0aHMuIikpO2U9KEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTcpKSxuPShBbigxLHQuYy5sZW5ndGgpLHUodC5jWzFdLDE3KSksZS5kLmkhPW4uYy5pJiYodC5jPVB0KFhuLEllLDEsMCw1LDEpLHQuY1t0LmMubGVuZ3RoXT1uLHQuY1t0LmMubGVuZ3RoXT1lKX1mdW5jdGlvbiBacG4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHI9bmV3IG4yLGg9RSQobmV3IHdsKHQuZykpLG89aC5hLmVjKCkuS2MoKTtvLk9iKCk7KXtpZihzPXUoby5QYigpLDEwKSwhcyl7WWIoZSwiVGhlcmUgYXJlIG5vIGNsYXNzZXMgaW4gYSBiYWxhbmNlZCBsYXlvdXQuIik7YnJlYWt9ZD10Lmpbcy5wXSxuPXUoV3YocixkKSwxNSksbnx8KG49bmV3IGxlLHAyKHIsZCxuKSksbi5GYyhzKX1yZXR1cm4gcn1mdW5jdGlvbiBKcG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBRYihvKSxkPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdz1fOChuLGguYSksdyYmKGs9b29uKE8wKHcsSGN0KSxlKSxraSh0LmYsayx3KSxzPUNkIGluIHcuYSxzJiZxQyhrLE8wKHcsQ2QpKSxKeih3LGspLEs0dCh3LGspKX1mdW5jdGlvbiB0Ym4odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih3cihlLCJQb3J0IHNpZGUgcHJvY2Vzc2luZyIsMSksaD1uZXcgUyh0LmEpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxibGUocyk7Zm9yKHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksYmxlKHMpO29yKGUpfWZ1bmN0aW9uIGNjZSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihzPXQuZiwhcyYmKHM9dSh0LmEuYS5lYygpLktjKCkuUGIoKSw1NykpLGNfKHMsZSxuKSx0LmEuYS5nYygpIT0xKWZvcihyPWUqbixoPXQuYS5hLmVjKCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNTcpLG8hPXMmJihkPUh4KG8pLGQuZi5kPyhvLmQuZCs9citQMSxvLmQuYS09citQMSk6ZC5mLmEmJihvLmQuYS09citQMSkpfWZ1bmN0aW9uIFVzdCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSDtyZXR1cm4gaD1uLXQsZD1yLWUsbz1iLk1hdGguYXRhbjIoaCxkKSx3PW8rTW90LGs9by1Nb3QsQz1zKmIuTWF0aC5zaW4odykrdCxGPXMqYi5NYXRoLmNvcyh3KStlLE09cypiLk1hdGguc2luKGspK3QsSD1zKmIuTWF0aC5jb3MoaykrZSxfMShjdChvdChVcywxKSx0ZSw4LDAsW25ldyAkZShDLEYpLG5ldyAkZShNLEgpXSkpfWZ1bmN0aW9uIGVibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO3M9bixDPWUsbz1DO2RvIG89dC5hW28ucF0sZD0oTT10Lmdbby5wXSxYdCh0LnBbTS5wXSkrWHQodC5kW28ucF0pLW8uZC5kKSx3PXBvbihvLHIpLHcmJihoPShrPXQuZ1t3LnBdLFh0KHQucFtrLnBdKStYdCh0LmRbdy5wXSkrdy5vLmIrdy5kLmEpLHM9Yi5NYXRoLm1pbihzLGQtKGgrVjModC5rLG8sdykpKSk7d2hpbGUoQyE9byk7cmV0dXJuIHN9ZnVuY3Rpb24gbmJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE07cz1uLEM9ZSxvPUM7ZG8gbz10LmFbby5wXSxoPShNPXQuZ1tvLnBdLFh0KHQucFtNLnBdKStYdCh0LmRbby5wXSkrby5vLmIrby5kLmEpLHc9X2NuKG8sciksdyYmKGQ9KGs9dC5nW3cucF0sWHQodC5wW2sucF0pK1h0KHQuZFt3LnBdKS13LmQuZCkscz1iLk1hdGgubWluKHMsZC0oaCtWMyh0Lmssbyx3KSkpKTt3aGlsZShDIT1vKTtyZXR1cm4gc31mdW5jdGlvbiBxZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxZZih0Lm8sZSkpLHI/PyhuPWUud2coKSxFdChuLDQpJiYobj09bnVsbD8oIXQubyYmKHQubz1uZXcgVGwoKFpjKCksRWIpLCR3LHQsMCkpLEl6KHQubyxlKSk6KCF0Lm8mJih0Lm89bmV3IFRsKChaYygpLEViKSwkdyx0LDApKSxZeih0Lm8sZSxuKSkpLG4pfWZ1bmN0aW9uIGZ5KCl7Znk9WixFZj1uZXcgJDMoIkhfTEVGVCIsMCksSjA9bmV3ICQzKCJIX0NFTlRFUiIsMSksVGY9bmV3ICQzKCJIX1JJR0hUIiwyKSxfZj1uZXcgJDMoIlZfVE9QIiwzKSxsMD1uZXcgJDMoIlZfQ0VOVEVSIiw0KSx6aD1uZXcgJDMoIlZfQk9UVE9NIiw1KSxVbD1uZXcgJDMoIklOU0lERSIsNiksQ2Y9bmV3ICQzKCJPVVRTSURFIiw3KSwkaD1uZXcgJDMoIkhfUFJJT1JJVFkiLDgpfWZ1bmN0aW9uIHJibih0KXt2YXIgZSxuLHIscyxvLGgsZDtpZihlPXQuSGgoUGgpLGUmJihkPUJyKFlmKCghZS5iJiYoZS5iPW5ldyB5bCgoZG4oKSxRYSksY2MsZSkpLGUuYiksInNldHRpbmdEZWxlZ2F0ZXMiKSksZCE9bnVsbCkpe2ZvcihuPW5ldyBsZSxzPXB5KGQsIlxcdysiKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxuLmNbbi5jLmxlbmd0aF09cjtyZXR1cm4gbn1yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIGlibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKCFlLmYpdGhyb3cgcnQobmV3IFBuKCJUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuIikpO2ZvcihvPW51bGwscz12aSxyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxkPW4uZCx3PW4uZSwkc3QodCxkLGUpJiYhJHN0KHQsdyxlKSYmKGg9dy5lLWQuZS1uLmEsaDxzJiYocz1oLG89bikpO3JldHVybiBvfWZ1bmN0aW9uIHNibih0KXt2YXIgZSxuLHIscyxvLGg7aWYoISh0LmYuZS5jLmxlbmd0aDw9MSkpe2U9MCxzPVhvZSh0KSxuPXNzO2Rve2ZvcihlPjAmJihzPW4pLGg9bmV3IFModC5mLmUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE0NCksIWplKFJlKFEobywoSkkoKSx5N3QpKSkpJiYocj1nbW4odCxvKSxMaShHZihvLmQpLHIpKTtuPVhvZSh0KX13aGlsZSghTGVuKHQsZSsrLHMsbikpfX1mdW5jdGlvbiBhYm4odCxlKXt2YXIgbixyLHM7Zm9yKHdyKGUsIkxheWVyIGNvbnN0cmFpbnQgcHJlcHJvY2Vzc2luZyIsMSksbj1uZXcgbGUscz1uZXcgaGEodC5hLDApO3MuYjxzLmQuZ2MoKTspcj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDEwKSksTGNuKHIpJiYoTWRuKHIpLG4uY1tuLmMubGVuZ3RoXT1yLEVsKHMpKTtuLmMubGVuZ3RoPT0wfHxKdCh0LChzZSgpLE5sdCksbiksb3IoZSl9ZnVuY3Rpb24gb2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobz10LmcuYSxoPXQuZy5iLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz1uLm4sdC5hPT0oTTEoKSxpNyl8fHQuaT09KGJlKCksSG4pP3MuYT1vOnQuYT09czd8fHQuaT09KGJlKCksQm4pP3MuYT1vK3Quai5hLW4uby5hOnMuYT1vKyh0LmouYS1uLm8uYSkvMixzLmI9aCxMaShzLGUpLGgrPW4uby5iK3QuZX1mdW5jdGlvbiBjYm4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzIiwxKSx0LmE9ZS5iLmI9PTA/MTplLmIuYixvPW51bGwscj1laShlLmIsMCk7IW8mJnIuYiE9ci5kLmM7KWg9dSh0aShyKSw4NiksamUoUmUoUShoLChmYygpLFd5KSkpKSYmKG89aCxzPWguZSxzLmE9dShRKGgsTGh0KSwxOSkuYSxzLmI9MCk7T2FlKHQsYnl0KG8pLFJjKG4sMSkpLG9yKG4pfWZ1bmN0aW9uIHVibih0LGUsbil7dmFyIHIscyxvO2Zvcih3cihuLCJQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBoZWlnaHQgZm9yIGVhY2ggbGV2ZWwiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLHM9bnVsbCxyPWVpKGUuYiwwKTshcyYmci5iIT1yLmQuYzspbz11KHRpKHIpLDg2KSxqZShSZShRKG8sKGZjKCksV3kpKSkpJiYocz1vKTtzJiZYY2UodCxfMShjdChvdChieG4sMSksaTZ0LDg2LDAsW3NdKSksbiksb3Iobil9ZnVuY3Rpb24gbGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07az10LHc9UEMoaywiaW5kaXZpZHVhbFNwYWNpbmdzIiksdyYmKHI9cjIoZSwoY2koKSxxNikpLGg9IXIsaCYmKHM9bmV3IFd1LGJvKGUscTYscykpLGQ9dShxZShlLHE2KSwzNzMpLE09dyxvPW51bGwsTSYmKG89KEM9dWl0KE0sUHQoQWUsdGUsMiwwLDYsMSkpLG5ldyBmZXQoTSxDKSkpLG8mJihuPW5ldyBFVnQoTSxkKSx2YShvLG4pKSl9ZnVuY3Rpb24gaGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtyZXR1cm4gdz1udWxsLE09dCxDPW51bGwsKE1kZSBpbiBNLmF8fElkZSBpbiBNLmF8fHdIIGluIE0uYSkmJihrPW51bGwsRj13eXQoZSksaD1QQyhNLE1kZSksbj1uZXcgc3p0KEYpLEJsbihuLmEsaCksZD1QQyhNLElkZSkscj1uZXcgcHp0KEYpLEZsbihyLmEsZCksbz1VdihNLHdIKSxzPW5ldyB3enQoRiksaz0oZ2RuKHMuYSxvKSxvKSxDPWspLHc9Qyx3fWZ1bmN0aW9uIGZibih0LGUpe3ZhciBuLHIscztpZihlPT09dClyZXR1cm4hMDtpZihFdChlLDU0Mykpe2lmKHM9dShlLDgzNSksdC5hLmQhPXMuYS5kfHxZMyh0KS5nYygpIT1ZMyhzKS5nYygpKXJldHVybiExO2ZvcihyPVkzKHMpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQxNiksTlF0KHQsbi5hLmNkKCkpIT11KG4uYS5kZCgpLDE0KS5nYygpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGRibih0KXt2YXIgZSxuLHIscztyZXR1cm4gcj11KHQuYSwxOSkuYSxzPXUodC5iLDE5KS5hLGU9cixuPXMscj09MCYmcz09MD9uLT0xOnI9PS0xJiZzPD0wPyhlPTAsbi09Mik6cjw9MCYmcz4wPyhlLT0xLG4tPTEpOnI+PTAmJnM8MD8oZSs9MSxuKz0xKTpyPjAmJnM+PTA/KGUtPTEsbis9MSk6KGUrPTEsbi09MSksbmV3IGxhKGRlKGUpLGRlKG4pKX1mdW5jdGlvbiBnYm4odCxlKXtyZXR1cm4gdC5jPGUuYz8tMTp0LmM+ZS5jPzE6dC5iPGUuYj8tMTp0LmI+ZS5iPzE6dC5hIT1lLmE/SGkodC5hKS1IaShlLmEpOnQuZD09KEJDKCksTlMpJiZlLmQ9PU9TPy0xOnQuZD09T1MmJmUuZD09TlM/MTowfWZ1bmN0aW9uIHVjZSh0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIG89ZS5hLG8uYy5pPT1lLmI/aD1vLmQ6aD1vLmMsby5jLmk9PWUuYj9yPW8uYzpyPW8uZCxzPXFsbih0LmEsaCxyKSxzPjAmJnM8RkU/KG49ZWJuKHQuYSxyLmkscyx0LmMpLG1lZSh0LmEsci5pLC1uKSxuPjApOnM8MCYmLXM8RkU/KG49bmJuKHQuYSxyLmksLXMsdC5jKSxtZWUodC5hLHIuaSxuKSxuPjApOiExfWZ1bmN0aW9uIHBibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO2ZvcihzPShlLXQuZCkvdC5jLmMubGVuZ3RoLG89MCx0LmErPW4sdC5kPWUsTT1uZXcgUyh0LmMpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDMzKSxrPUMuZyx3PUMuZix5dShDLEMuaStvKnMpLHh1KEMsQy5qK3IqbiksUXYoQyxDLmcrcyksWHYoQyx0LmEpLCsrbyxkPUMuZyxoPUMuZixyb2UoQyxuZXcgJGUoZCxoKSxuZXcgJGUoayx3KSl9ZnVuY3Rpb24gYmJuKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGQ9dC5sZW5ndGgscz0oZCsxKS8yfDAsaD1QdChIdSxONCwyNSxzLDE1LDEpLGQlMiE9MCYmKGhbLS1zXT1SNXQoKFJyKGQtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQtMSkpKSksbj0wLHI9MDtuPHM7KytuKWU9UjV0KGJhKHQscisrKSksbz1SNXQoYmEodCxyKyspKSxoW25dPShlPDw0fG8pPDwyND4+MjQ7cmV0dXJuIGh9ZnVuY3Rpb24gdmJuKHQpe2lmKHQucGUoKSl7dmFyIGU9dC5jO2UucWUoKT90Lm89IlsiK2UubjplLnBlKCk/dC5vPSJbIitlLm5lKCk6dC5vPSJbTCIrZS5uZSgpKyI7Iix0LmI9ZS5tZSgpKyJbXSIsdC5rPWUub2UoKSsiW10iO3JldHVybn12YXIgbj10Lmoscj10LmQ7cj1yLnNwbGl0KCIvIiksdC5vPVlpdCgiLiIsW24sWWl0KCIkIixyKV0pLHQuYj1ZaXQoIi4iLFtuLFlpdCgiLiIscildKSx0Lms9cltyLmxlbmd0aC0xXX1mdW5jdGlvbiB3Ym4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW51bGwsbz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMTIxKSxzLmIuYS5jLmxlbmd0aD09cy5nLmEuYy5sZW5ndGgpe2ZvcihyPXMuZSxoPWVnbihzKSxuPXMuZS11KGguYSwxOSkuYSsxO248cy5lK3UoaC5iLDE5KS5hO24rKyllW25dPGVbcl0mJihyPW4pO2Vbcl08ZVtzLmVdJiYoLS1lW3MuZV0sKytlW3JdLHMuZT1yKX19ZnVuY3Rpb24gV3N0KHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHM9c3Mscj1UcyxuPW5ldyBTKHQuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IoZT11KEoobiksMjkpLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksdz1YdCh0LnBbby5wXSksZD13K1h0KHQuYlt0Lmdbby5wXS5wXSkscz1iLk1hdGgubWluKHMsdykscj1iLk1hdGgubWF4KHIsZCk7cmV0dXJuIHItc31mdW5jdGlvbiB3NXQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iocz1WNXQodCxlKSxkPTAsdz1zLmdjKCk7ZDx3OysrZClpZihvPXUocy5YYihkKSwxNzApLGhuKHIsazgoRW8odCxvKSkpKXtpZihoPVpNKEVvKHQsbykpLG49PW51bGwpe2lmKGg9PW51bGwpcmV0dXJuIG99ZWxzZSBpZihobihuLGgpKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIG01dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2ZvcihzPW9hdCh0LGUpLGQ9MCx3PXMuZ2MoKTtkPHc7KytkKWlmKG89dShzLlhiKGQpLDE3MCksaG4ocixrOChFbyh0LG8pKSkpe2lmKGg9Wk0oRW8odCxvKSksbj09bnVsbCl7aWYoaD09bnVsbClyZXR1cm4gb31lbHNlIGlmKGhuKG4saCkpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gbWJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoaD1uZXcgdHgsZD1hdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKG89MDtvPHQuaTsrK28pcz1yW29dLGQucmwocy5haygpKSYmTXIoaCxzKTtlbHNlIGZvcihvPTA7bzx0Lmk7KytvKXM9cltvXSxkLnJsKHMuYWsoKSkmJih3PXMuZGQoKSxNcihoLG4/ZF8odCxlLG8saC5pLHcpOncpKTtyZXR1cm4gSnd0KGgpfWZ1bmN0aW9uIHlibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IGVfKGM3KSxzPShpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxaMnQobixyLG5ldyBsZSk7cmV0dXJuIHVzKHB1KFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgbkYpLG5ldyByRiksbmV3IG1nKGUpKSxuZXcgc2QobikpLG59ZnVuY3Rpb24gc3EodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzMpLEM9cy5pK3MuZy8yLEY9cy5qK3MuZi8yLHc9dC5mLGg9dy5pK3cuZy8yLGQ9dy5qK3cuZi8yLGs9Qy1oLE09Ri1kLHI9Yi5NYXRoLnNxcnQoayprK00qTSksayo9dC5lL3IsTSo9dC5lL3Isbj8oQy09ayxGLT1NKTooQys9ayxGKz1NKSx5dShzLEMtcy5nLzIpLHh1KHMsRi1zLmYvMil9ZnVuY3Rpb24gYjQodCl7dmFyIGUsbixyO2lmKCF0LmMmJnQuYiE9bnVsbCl7Zm9yKGU9dC5iLmxlbmd0aC00O2U+PTA7ZS09Milmb3Iobj0wO248PWU7bis9MikodC5iW25dPnQuYltuKzJdfHx0LmJbbl09PT10LmJbbisyXSYmdC5iW24rMV0+dC5iW24rM10pJiYocj10LmJbbisyXSx0LmJbbisyXT10LmJbbl0sdC5iW25dPXIscj10LmJbbiszXSx0LmJbbiszXT10LmJbbisxXSx0LmJbbisxXT1yKTt0LmM9ITB9fWZ1bmN0aW9uIGxjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGg9ZT09MT9RdXQ6WHV0LG89aC5hLmVjKCkuS2MoKTtvLk9iKCk7KWZvcihzPXUoby5QYigpLDEwMyksdz11KEFpKHQuZi5jLHMpLDIxKS5LYygpO3cuT2IoKTspc3dpdGNoKGQ9dSh3LlBiKCksNDYpLHI9dShkLmIsODEpLGs9dShkLmEsMTg5KSxuPWsuYyxzLmcpe2Nhc2UgMjpjYXNlIDE6ci5nLmQrPW47YnJlYWs7Y2FzZSA0OmNhc2UgMzpyLmcuYys9bn19ZnVuY3Rpb24geGJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihrPS0xLEM9MCxoPXQsZD0wLHc9aC5sZW5ndGg7ZDx3OysrZCl7Zm9yKG89aFtkXSxuPW5ldyBPS3Qoaz09LTE/dFswXTp0W2tdLGUsKFlDKCksdVYpKSxyPTA7cjxvLmxlbmd0aDtyKyspZm9yKHM9cisxO3M8by5sZW5ndGg7cysrKVZzKG9bcl0sKHNlKCksVGMpKSYmVnMob1tzXSxUYykmJkloZShuLG9bcl0sb1tzXSk+MCYmKytDOysra31yZXR1cm4gQ31mdW5jdGlvbiBiZih0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBJbChBcCh0LmdtKSksbi5hKz0iQCIsVnIobiwoZT1IaSh0KT4+PjAsZS50b1N0cmluZygxNikpKSx0LmtoKCk/KG4uYSs9IiAoZVByb3h5VVJJOiAiLGhjKG4sdC5xaCgpKSx0LiRnKCkmJihuLmErPSIgZUNsYXNzOiAiLGhjKG4sdC4kZygpKSksbi5hKz0iKSIpOnQuJGcoKSYmKG4uYSs9IiAoZUNsYXNzOiAiLGhjKG4sdC4kZygpKSxuLmErPSIpIiksbi5hfWZ1bmN0aW9uIHBfKHQpe3ZhciBlLG4scixzO2lmKHQuZSl0aHJvdyBydChuZXcgRm8oKEwwKE11dCksYm90K011dC5rK3ZvdCkpKTtmb3IodC5kPT0oYW8oKSxjMCkmJl9xKHQsamgpLG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDMwNyksZS5nPWUuaTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNTcpLHIuaT1UcztyZXR1cm4gdC5iLkxlKHQpLHR9ZnVuY3Rpb24ga2JuKHQsZSl7dmFyIG4scixzLG8saDtpZihlPDIqdC5iKXRocm93IHJ0KG5ldyBQbigiVGhlIGtub3QgdmVjdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gdGltZSB0aGUgZGltZW5zaW9uIGVsZW1lbnRzLiIpKTtmb3IodC5mPTEscz0wO3M8dC5iO3MrKyl1ZSh0LmUsMCk7Zm9yKGg9ZSsxLTIqdC5iLG49aCxvPTE7bzxoO28rKyl1ZSh0LmUsby9uKTtpZih0LmQpZm9yKHI9MDtyPHQuYjtyKyspdWUodC5lLDEpfWZ1bmN0aW9uIGhjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZihrPWUsQz11KHR6KEtudCh0LmkpLGspLDMzKSwhQyl0aHJvdyBzPU8wKGssQ2QpLGQ9IlVuYWJsZSB0byBmaW5kIGVsayBub2RlIGZvciBqc29uIG9iamVjdCAnIitzLHc9ZCsiJyBQYW5pYyEiLHJ0KG5ldyBhZCh3KSk7bz1VdihrLCJlZGdlcyIpLG49bmV3IHBWdCh0LEMpLGlwbihuLmEsbi5iLG8pLGg9VXYoayxHY3QpLHI9bmV3IFEkdCh0KSxiMW4oci5hLGgpfWZ1bmN0aW9uIGZjZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2lmKHIhPW51bGwpe2lmKHM9dC5kW2VdLHMpe2ZvcihvPXMuZyx3PXMuaSxkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLGguU2goKT09biYmeWkocixoLmNkKCkpKXJldHVybiBkfX1lbHNlIGlmKHM9dC5kW2VdLHMpe2ZvcihvPXMuZyx3PXMuaSxkPTA7ZDx3OysrZClpZihoPXUob1tkXSwxMzMpLEd0KGguY2QoKSk9PT1HdChyKSlyZXR1cm4gZH1yZXR1cm4tMX1mdW5jdGlvbiB3RSh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lPT1udWxsP2VjKEFvKHQuZixudWxsKSk6VTkodC5nLGUpLEV0KG4sMjM1KT8ocz11KG4sMjM1KSxzLlFoKCk9PW51bGwscyk6RXQobiw0OTgpPyhyPXUobiwxOTM4KSxzPXIuYSxzJiYocy55Yj09bnVsbHx8KGU9PW51bGw/c3UodC5mLG51bGwscyk6bncodC5nLGUscykpKSxzKTpudWxsfWZ1bmN0aW9uIEVibih0KXtQNXQoKTt2YXIgZSxuLHIscyxvLGgsZDtpZih0PT1udWxsfHwocz10Lmxlbmd0aCxzJTIhPTApKXJldHVybiBudWxsO2ZvcihlPVIkKHQpLG89cy8yfDAsbj1QdChIdSxONCwyNSxvLDE1LDEpLHI9MDtyPG87cisrKXtpZihoPWxBW2VbcioyXV0saD09LTF8fChkPWxBW2VbcioyKzFdXSxkPT0tMSkpcmV0dXJuIG51bGw7bltyXT0oaDw8NHxkKTw8MjQ+PjI0fXJldHVybiBufWZ1bmN0aW9uIFRibih0LGUsbil7dmFyIHIscyxvO2lmKHM9dShnbyh0LmksZSksMzA2KSwhcylpZihzPW5ldyBoZWUodC5kLGUsbiksTngodC5pLGUscyksUzN0KGUpKSRYZSh0LmEsZS5jLGUuYixzKTtlbHNlIHN3aXRjaChvPWhnbihlKSxyPXUoZ28odC5wLG8pLDI0NCksby5nKXtjYXNlIDE6Y2FzZSAzOnMuaj0hMCxKdHQocixlLmIscyk7YnJlYWs7Y2FzZSA0OmNhc2UgMjpzLms9ITAsSnR0KHIsZS5jLHMpfXJldHVybiBzfWZ1bmN0aW9uIENibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYoZD1uZXcgdHgsdz1hdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKGg9MDtoPHQuaTsrK2gpbz1zW2hdLHcucmwoby5haygpKSYmTXIoZCxvKTtlbHNlIGZvcihoPTA7aDx0Lmk7KytoKW89c1toXSx3LnJsKG8uYWsoKSkmJihrPW8uZGQoKSxNcihkLHI/ZF8odCxlLGgsZC5pLGspOmspKTtyZXR1cm4gbTN0KGQsbil9ZnVuY3Rpb24gZGNlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztpZihzPXQuYltlLnBdLHM+PTApcmV0dXJuIHM7Zm9yKG89MSxkPW5ldyBTKGUuaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxyPW5ldyBTKGguZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLGs9bi5kLmksZSE9ayYmKHc9ZGNlKHQsayksbz1iLk1hdGgubWF4KG8sdysxKSk7cmV0dXJuIENsbih0LGUsbyksb31mdW5jdGlvbiBnY2UodCxlLG4pe3ZhciByLHMsbztmb3Iocj0xO3I8dC5jLmxlbmd0aDtyKyspe2ZvcihvPShBbihyLHQuYy5sZW5ndGgpLHUodC5jW3JdLDEwKSkscz1yO3M+MCYmZS51ZSgoQW4ocy0xLHQuYy5sZW5ndGgpLHUodC5jW3MtMV0sMTApKSxvKT4wOylhaCh0LHMsKEFuKHMtMSx0LmMubGVuZ3RoKSx1KHQuY1tzLTFdLDEwKSkpLC0tcztBbihzLHQuYy5sZW5ndGgpLHQuY1tzXT1vfW4uYT1uZXcgQ3Isbi5iPW5ldyBDcn1mdW5jdGlvbiBfYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKEM9KHI9dShlLmUmJmUuZSgpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpLHc9cHkobiwiW1xcW1xcXVxccyxdKyIpLG89dyxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKWlmKHM9b1toXSx1eShzKS5sZW5ndGghPTApe2lmKGs9U29lKHQscyksaz09bnVsbClyZXR1cm4gbnVsbDtwZihDLHUoaywyMikpfXJldHVybiBDfWZ1bmN0aW9uIFNibih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9KE9uKDApLDApLHI+MCYmKCEoT3AodC5hLmMpJiZlLm4uZCkmJiEoYzgodC5hLmMpJiZlLm4uYikmJihlLmcuZC09Yi5NYXRoLm1heCgwLHIvMi0uNSkpLCEoT3AodC5hLmMpJiZlLm4uYSkmJiEoYzgodC5hLmMpJiZlLm4uYykmJihlLmcuYSs9Yi5NYXRoLm1heCgwLHItMSkpKX1mdW5jdGlvbiBwY2UodCxlLG4pe3ZhciByLHM7aWYoKHQuYy10LmImdC5hLmxlbmd0aC0xKT09MillPT0oYmUoKSxObil8fGU9PUhuPyhWJCh1KEtDKHQpLDE1KSwoamwoKSx1MCkpLFYkKHUoS0ModCksMTUpLHdiKSk6KFYkKHUoS0ModCksMTUpLChqbCgpLHdiKSksViQodShLQyh0KSwxNSksdTApKTtlbHNlIGZvcihzPW5ldyBNQyh0KTtzLmEhPXMuYjspcj11KG16KHMpLDE1KSxWJChyLG4pfWZ1bmN0aW9uIEFibih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPWQ4KG5ldyB2cHQodCkpLGQ9bmV3IGhhKHMscy5jLmxlbmd0aCksbz1kOChuZXcgdnB0KGUpKSx3PW5ldyBoYShvLG8uYy5sZW5ndGgpLGg9bnVsbDtkLmI+MCYmdy5iPjAmJihuPShRbihkLmI+MCksdShkLmEuWGIoZC5jPS0tZC5iKSwzMykpLHI9KFFuKHcuYj4wKSx1KHcuYS5YYih3LmM9LS13LmIpLDMzKSksbj09cik7KWg9bjtyZXR1cm4gaH1mdW5jdGlvbiBvbCh0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz10LmEqZm90K3QuYioxNTAyLGQ9dC5iKmZvdCsxMSxuPWIuTWF0aC5mbG9vcihkKlBEKSxvKz1uLGQtPW4qUnh0LG8lPVJ4dCx0LmE9byx0LmI9ZCxlPD0yND9iLk1hdGguZmxvb3IodC5hKlRFdFtlXSk6KHM9dC5hKigxPDxlLTI0KSxoPWIuTWF0aC5mbG9vcih0LmIqQ0V0W2VdKSxyPXMraCxyPj0yMTQ3NDgzNjQ4JiYoci09Y290KSxyKX1mdW5jdGlvbiBiY2UodCxlLG4pe3ZhciByLHMsbyxoOyRRdCh0LGUpPiRRdCh0LG4pPyhyPVlvKG4sKGJlKCksSG4pKSx0LmQ9ci5kYygpPzA6Q250KHUoci5YYigwKSwxMSkpLGg9WW8oZSxCbiksdC5iPWguZGMoKT8wOkNudCh1KGguWGIoMCksMTEpKSk6KHM9WW8obiwoYmUoKSxCbikpLHQuZD1zLmRjKCk/MDpDbnQodShzLlhiKDApLDExKSksbz1ZbyhlLEhuKSx0LmI9by5kYygpPzA6Q250KHUoby5YYigwKSwxMSkpKX1mdW5jdGlvbiB2Y2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYodCYmKGU9dC5IaChQaCksZSYmKGg9QnIoWWYoKCFlLmImJihlLmI9bmV3IHlsKChkbigpLFFhKSxjYyxlKSksZS5iKSwiY29udmVyc2lvbkRlbGVnYXRlcyIpKSxoIT1udWxsKSkpe2ZvcihkPW5ldyBsZSxyPXB5KGgsIlxcdysiKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxkLmNbZC5jLmxlbmd0aF09bjtyZXR1cm4gZH1yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIHdjZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPXQuby5hLG89dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExMSkscy5lLmE9bipYdCh5ZShzLmIuV2UoWkgpKSkscy5lLmI9KHI9cy5iLHIuWGUoKGNpKCksaGwpKT9yLkhmKCk9PShiZSgpLE5uKT8tci5yZigpLmItWHQoeWUoci5XZShobCkpKTpYdCh5ZShyLldlKGhsKSkpOnIuSGYoKT09KGJlKCksTm4pPy1yLnJmKCkuYjowKX1mdW5jdGlvbiBMYm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztlPSEwLHM9bnVsbCxvPW51bGw7dDpmb3Iodz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwxMCkscj1uZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSk7enIocik7KXtpZihuPXUoTHIociksMTcpLHMmJnMhPWQpe2U9ITE7YnJlYWsgdH1pZihzPWQsaD1uLmMuaSxvJiZvIT1oKXtlPSExO2JyZWFrIHR9bz1ofXJldHVybiBlfWZ1bmN0aW9uIE1ibih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihvPS0xLGQ9LTEsaD0wO2g8ZS5jLmxlbmd0aCYmKHM9KEFuKGgsZS5jLmxlbmd0aCksdShlLmNbaF0sMzI5KSksIShzLmM+dC5jKSk7aCsrKXMuYT49dC5zJiYobzwwJiYobz1oKSxkPWgpO3JldHVybiB3PSh0LnMrdC5jKS8yLG8+PTAmJihyPWh3bih0LGUsbyxkKSx3PXlZZSgoQW4ocixlLmMubGVuZ3RoKSx1KGUuY1tyXSwzMjkpKSkseHBuKGUscixuKSksd31mdW5jdGlvbiBLc3QoKXtLc3Q9WixXeWU9bmV3IGVvKChjaSgpLCQ2KSwxLjMpLFJfdD1SU3QsVl90PW5ldyBNdigxNSksdDNlPW5ldyBlbyhxMixWX3QpLG4zZT1uZXcgZW8oSDIsMTUpLEt5ZT1CVixReWU9ejIsWnllPWE1LEp5ZT12YixYeWU9czUscV90PVlPLGUzZT1LeSxHX3Q9KGQ1dCgpLEd5ZSksel90PXF5ZSxIX3Q9SHllLFVfdD1WeWUsal90PXp5ZSwkX3Q9UlYsWXllPSRTdCxSTz0keWUsQl90PWp5ZSxXX3Q9VXllfWZ1bmN0aW9uIElyKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztmb3IoaD0obz1uZXcgSkYsbyksdHl0KGgsKE9uKGUpLGUpKSxrPSghaC5iJiYoaC5iPW5ldyB5bCgoZG4oKSxRYSksY2MsaCkpLGguYiksdz0xO3c8bi5sZW5ndGg7dys9MilZeihrLG5bdy0xXSxuW3ddKTtmb3Iocj0oIXQuQWImJih0LkFiPW5ldyBoZShacix0LDAsMykpLHQuQWIpLGQ9MDtkPDA7KytkKXM9TmVuKHUoU3QocixyLmktMSksNTkwKSkscj1zO01yKHIsaCl9ZnVuY3Rpb24gbWNlKHQsZSxuKXt2YXIgcixzLG87Zm9yKGtRZS5jYWxsKHRoaXMsbmV3IGxlKSx0aGlzLmE9ZSx0aGlzLmI9bix0aGlzLmU9dCxyPSh0LmImJmJhdCh0KSx0LmEpLHRoaXMuZD1DWHQoci5hLHRoaXMuYSksdGhpcy5jPUNYdChyLmIsdGhpcy5iKSxzbG4odGhpcyx0aGlzLmQsdGhpcy5jKSxRZ24odGhpcyksbz10aGlzLmUuZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMjY2KSxzLmMuYy5sZW5ndGg+MCYmaTNuKHRoaXMscyl9ZnVuY3Rpb24geTV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHc7aWYoIXNbZS5iXSl7Zm9yKHNbZS5iXT0hMCxoPXIsIWgmJihoPW5ldyBfJCksdWUoaC5lLGUpLHc9b1tlLmJdLktjKCk7dy5PYigpOylkPXUody5QYigpLDI4MiksIShkLmQ9PW58fGQuYz09bikmJihkLmMhPWUmJnk1dCh0LGQuYyxlLGgscyxvKSxkLmQhPWUmJnk1dCh0LGQuZCxlLGgscyxvKSx1ZShoLmMsZCksQXMoaC5kLGQuYikpO3JldHVybiBofXJldHVybiBudWxsfWZ1bmN0aW9uIElibih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0wLHM9bmV3IFModC5lKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksbj1BOChuZXcgVG4obnVsbCxuZXcgX24oci5iLDE2KSksbmV3IHdZKSxuJiYrK2U7Zm9yKGg9bmV3IFModC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksZD1BOChuZXcgVG4obnVsbCxuZXcgX24oby5iLDE2KSksbmV3IG1ZKSxkJiYrK2U7cmV0dXJuIGU+PTJ9ZnVuY3Rpb24gRGJuKHQsZSl7dmFyIG4scixzLG87Zm9yKHdyKGUsIlNlbGYtTG9vcCBwcmUtcHJvY2Vzc2luZyIsMSkscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxnbG4obikmJihzPShvPW5ldyBQaWUobiksSnQobiwoc2UoKSxkNyksbyksWHduKG8pLG8pLHVzKHB1KFdvKG5ldyBUbihudWxsLG5ldyBfbihzLmQsMTYpKSxuZXcgZEYpLG5ldyB0WCksbmV3IGVYKSxWMm4ocykpO29yKGUpfWZ1bmN0aW9uIE9ibih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztmb3Iobz10LmMuZC5qLGg9dShRZihuLDApLDgpLEM9MTtDPG4uYjtDKyspaz11KFFmKG4sQyksOCksaHMocixoLHIuYy5iLHIuYyksZD11ZChMaShuZXcgeW8oaCksayksLjUpLHc9dWQobmV3IGJydChJeXQobykpLHMpLExpKGQsdyksaHMocixkLHIuYy5iLHIuYyksaD1rLG89ZT09MD9reihvKTp0M3Qobyk7bmkociwoUW4obi5iIT0wKSx1KG4uYy5iLmMsOCkpKX1mdW5jdGlvbiBOYm4odCl7ZnkoKTt2YXIgZSxuLHI7cmV0dXJuIG49amkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbQ2ZdKSksIShBSShoJChuLHQpKT4xfHwoZT1qaShFZixjdChvdChsbywxKSxhZSw5MywwLFtKMCxUZl0pKSxBSShoJChlLHQpKT4xKXx8KHI9amkoX2YsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsemhdKSksQUkoaCQocix0KSk+MSkpfWZ1bmN0aW9uIFBibih0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLkhoKHQuYSksbiYmKHM9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSwiYWZmaWxpYXRpb24iKSkscyE9bnVsbCk/KHI9ZGoocyxFdSgzNSkpLHI9PS0xP1BpdCh0LGtDKHQsRmwoZS5IaigpKSkscyk6cj09MD9QaXQodCxudWxsLHMuc3Vic3RyKDEpKTpQaXQodCxzLnN1YnN0cigwLHIpLHMuc3Vic3RyKHIrMSkpKTpudWxsfWZ1bmN0aW9uIEZibih0KXt2YXIgZSxuLHI7dHJ5e3JldHVybiB0PT1udWxsP1R1OiRvKHQpfWNhdGNoKHMpe2lmKHM9V2kocyksRXQocywxMDIpKXJldHVybiBlPXMscj1BcChzbCh0KSkrIkAiKyhuPShxZCgpLE8zdCh0KT4+PjApLG4udG9TdHJpbmcoMTYpKSxUaG4oRWNuKCksKHM4KCksIkV4Y2VwdGlvbiBkdXJpbmcgbGVuaWVudEZvcm1hdCBmb3IgIityKSxlKSwiPCIrcisiIHRocmV3ICIrQXAoZS5nbSkrIj4iO3Rocm93IHJ0KHMpfX1mdW5jdGlvbiB5Y2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgR0o7Y2FzZSAxOnJldHVybiBuZXcgSUI7Y2FzZSAyOnJldHVybiBuZXcga0d0O2Nhc2UgMzpyZXR1cm4gbmV3IERMO2Nhc2UgNDpyZXR1cm4gbmV3IEhXdDtjYXNlIDU6cmV0dXJuIG5ldyBWSjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geDV0KHQsZSxuKXt2YXIgcixzLG87Zm9yKG89bmV3IFModC50KTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyNjgpLHIuYi5zPDAmJnIuYz4wJiYoci5iLm4tPXIuYyxyLmIubjw9MCYmci5iLnU+MCYmbmkoZSxyLmIpKTtmb3Iocz1uZXcgUyh0LmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksci5hLnM8MCYmci5jPjAmJihyLmEudS09ci5jLHIuYS51PD0wJiZyLmEubj4wJiZuaShuLHIuYSkpfWZ1bmN0aW9uIGFxKHQpe3ZhciBlLG4scixzLG87aWYodC5nPT1udWxsJiYodC5kPXQuc2kodC5mKSxNcih0LHQuZCksdC5jKSlyZXR1cm4gbz10LmYsbztpZihlPXUodC5nW3QuaS0xXSw0Nykscz1lLlBiKCksdC5lPWUsbj10LnNpKHMpLG4uT2IoKSl0LmQ9bixNcih0LG4pO2Vsc2UgZm9yKHQuZD1udWxsOyFlLk9iKCkmJihKaSh0LmcsLS10LmksbnVsbCksdC5pIT0wKTspcj11KHQuZ1t0LmktMV0sNDcpLGU9cjtyZXR1cm4gc31mdW5jdGlvbiBCYm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYocj1lLHM9ci5haygpLFYwKHQuZSxzKSl7aWYocy5oaSgpJiZrJCh0LHMsci5kZCgpKSlyZXR1cm4hMX1lbHNlIGZvcihkPWF1KHQuZS5UZygpLHMpLG49dSh0LmcsMTE5KSxvPTA7bzx0Lmk7KytvKWlmKGg9bltvXSxkLnJsKGguYWsoKSkpcmV0dXJuIHlpKGgscik/ITE6KHUodTQodCxvLGUpLDcyKSwhMCk7cmV0dXJuIE1yKHQsZSl9ZnVuY3Rpb24gUmJuKHQsZSxuLHIpe3ZhciBzLG8saCxkO2ZvcihzPW5ldyBIMCh0KSxfMChzLChHbigpLFNsKSksSnQocywoc2UoKSxfaSksZSksSnQocyxUTyxyKSxKdChzLChUZSgpLG9zKSwob2EoKSxWYykpLEp0KHMsbjEsZS5jKSxKdChzLFJoLGUuZCksVWNlKGUscyksZD1iLk1hdGguZmxvb3Iobi8yKSxoPW5ldyBTKHMuaik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTEpLG8ubi5iPWQ7cmV0dXJuIHN9ZnVuY3Rpb24gamJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2Zvcih3PUhkKHQuYy10LmImdC5hLmxlbmd0aC0xKSxrPW51bGwsQz1udWxsLG89bmV3IE1DKHQpO28uYSE9by5iOylzPXUobXoobyksMTApLG49KGQ9dShRKHMsKHNlKCksbjEpKSwxMSksZD9kLmk6bnVsbCkscj0oaD11KFEocyxSaCksMTEpLGg/aC5pOm51bGwpLChrIT1ufHxDIT1yKSYmKG9jZSh3LGUpLGs9bixDPXIpLHcuY1t3LmMubGVuZ3RoXT1zO29jZSh3LGUpfWZ1bmN0aW9uIHhjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZT0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMTApLG89bmV3IGFyKGxyKE1zKG4pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLHQ9PXMuZC5pLmMmJnMuYy5qPT0oYmUoKSxCbikmJihoPVQxKHMuYykuYixkPVQxKHMuZCkuYixlPWIuTWF0aC5tYXgoZSxiLk1hdGguYWJzKGQtaCkpKTtyZXR1cm4gZX1mdW5jdGlvbiAkYm4odCxlLG4pe3ZhciByLHMsbzt3cihuLCJSZW1vdmUgb3ZlcmxhcHMiLDEpLG4ubiYmZSYmaGYobixmZihlKSwoQ2woKSxZbCkpLHI9dShxZShlLChiQygpLCRTKSksMzMpLHQuZj1yLHQuYT1pc3QodShxZShlLChheSgpLEJPKSksMjkzKSkscz15ZShxZShlLChjaSgpLEgyKSkpLGs5KHQsKE9uKHMpLHMpKSxvPWd5KHIpLGhoZSh0LGUsbyxuKSxuLm4mJmUmJmhmKG4sZmYoZSksKENsKCksWWwpKX1mdW5jdGlvbiBrNXQodCxlLG4pe3N3aXRjaChuLmcpe2Nhc2UgMTpyZXR1cm4gbmV3ICRlKGUuYSxiLk1hdGgubWluKHQuZC5iLGUuYikpO2Nhc2UgMjpyZXR1cm4gbmV3ICRlKGIuTWF0aC5tYXgodC5jLmEsZS5hKSxlLmIpO2Nhc2UgMzpyZXR1cm4gbmV3ICRlKGUuYSxiLk1hdGgubWF4KHQuYy5iLGUuYikpO2Nhc2UgNDpyZXR1cm4gbmV3ICRlKGIuTWF0aC5taW4oZS5hLHQuZC5hKSxlLmIpfXJldHVybiBuZXcgJGUoZS5hLGUuYil9ZnVuY3Rpb24gemJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRjtmb3IoTT1yPyhiZSgpLEJuKTooYmUoKSxIbikscz0hMSx3PWVbbl0saz0wLEM9dy5sZW5ndGg7azxDOysraylkPXdba10sIUR4KHUoUShkLChUZSgpLG9zKSksOTgpKSYmKGg9ZC5lLEY9IVlvKGQsTSkuZGMoKSYmISFoLEYmJihvPW00dChoKSx0LmI9bmV3IHk0dChvLHI/MDpvLmxlbmd0aC0xKSkscz1zfGp3bih0LGQsTSxGKSk7cmV0dXJuIHN9ZnVuY3Rpb24gZkQodCl7dmFyIGUsbixyO2ZvcihlPUhkKDErKCF0LmMmJih0LmM9bmV3IGhlKGZsLHQsOSw5KSksdC5jKS5pKSx1ZShlLCghdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZCkpLHI9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLHVlKGUsKCFuLmQmJihuLmQ9bmV3IENuKFdzLG4sOCw1KSksbi5kKSk7cmV0dXJuIEFyKGUpLG5ldyB1QyhlKX1mdW5jdGlvbiBHMCh0KXt2YXIgZSxuLHI7Zm9yKGU9SGQoMSsoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLmkpLHVlKGUsKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSkscj1uZXcgZXIoKCF0LmMmJih0LmM9bmV3IGhlKGZsLHQsOSw5KSksdC5jKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDExOCksdWUoZSwoIW4uZSYmKG4uZT1uZXcgQ24oV3Msbiw3LDQpKSxuLmUpKTtyZXR1cm4gQXIoZSksbmV3IHVDKGUpfWZ1bmN0aW9uIHFibih0KXt2YXIgZSxuLHIscztpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHI9JGModCwhMCkscz1uTy5sZW5ndGgsaG4oci5zdWJzdHIoci5sZW5ndGgtcyxzKSxuTykpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYoZT0oUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSxlPT00MylyZXR1cm4gdkx0O2lmKGU9PTQ1KXJldHVybiBTNWV9ZWxzZSBpZihuPT0zKXJldHVybiB2THR9cmV0dXJuIGx5KHIpfWZ1bmN0aW9uIEhibih0KXt2YXIgZSxuLHIscztmb3IoZT0wLG49MCxzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksMTEpLGU9U3IoT2EoZSxOSnQoUmkobmV3IFRuKG51bGwsbmV3IF9uKHIuZSwxNikpLG5ldyBtUSkpKSksbj1TcihPYShuLE5KdChSaShuZXcgVG4obnVsbCxuZXcgX24oci5nLDE2KSksbmV3IHlRKSkpKSxlPjF8fG4+MSlyZXR1cm4gMjtyZXR1cm4gZStuPT0xPzI6MH1mdW5jdGlvbiBrY2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHdyKG4sIkVMSyBGb3JjZSIsMSksamUoUmUocWUoZSwoWmYoKSxkN3QpKSkpfHx1JCgocj1uZXcgcnIoKEltKCksbmV3IFNtKGUpKSkscikpLGQ9Wm5lKGUpLGMxbihkKSx6Y24odCx1KFEoZCxmN3QpLDQyNCkpLGg9aGxlKHQuYSxkKSxvPWguS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMjMxKSxFd24odC5iLHMsUmMobiwxL2guZ2MoKSkpO2Q9VGhlKGgpLHhoZShkKSxvcihuKX1mdW5jdGlvbiBHYm4odCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIkJyZWFraW5nIFBvaW50IFByb2Nlc3NvciIsMSksbDRuKHQpLGplKFJlKFEodCwoVGUoKSx5Q3QpKSkpKXtmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksbj0wLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksby5wPW4rKztmeW4odCksVmNlKHQsITApLFZjZSh0LCExKX1vcihlKX1mdW5jdGlvbiBWYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztmb3IoZD10LmMsaD0obi5xP24ucToodm4oKSx2bigpLGEwKSkudmMoKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0Mikscj0hajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKGQsMTYpKSxuZXcgWnQobmV3IGFWdChlLG8pKSkpLnNkKChXYigpLEpFKSksciYmKHc9by5kZCgpLEV0KHcsNCkmJihzPV8zdCh3KSxzIT1udWxsJiYodz1zKSksZS5ZZSh1KG8uY2QoKSwxNDYpLHcpKX1mdW5jdGlvbiBvcSh0LGUpe3ZhciBuLHIscyxvLGg7aWYoZSl7Zm9yKG89RXQodC5DYiw4OCl8fEV0KHQuQ2IsOTkpLGg9IW8mJkV0KHQuQ2IsMzIyKSxyPW5ldyBlcigoIWUuYSYmKGUuYT1uZXcgeEMoZSxobyxlKSksZS5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDg3KSxzPXdxKG4pLG8/RXQocyw4OCk6aD9FdChzLDE0OCk6cylyZXR1cm4gcztyZXR1cm4gbz8oZG4oKSxXaCk6KGRuKCksVjEpfWVsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gVWJuKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih3cihlLCJDb25zdHJhaW50cyBQb3N0cHJvY2Vzc29yIiwxKSxoPTAsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9MCxyPW5ldyBTKHMuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLG4uaz09KEduKCksRHMpJiYoSnQobiwoVGUoKSx0ViksZGUoaCkpLEp0KG4sWEcsZGUoZCkpLCsrZCk7KytofW9yKGUpfWZ1bmN0aW9uIFdibih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztmb3Iodz1uZXcgJGUobixyKSxuYSh3LHUoUShlLChmYygpLEJTKSksOCkpLEM9ZWkoZS5iLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4NiksTGkoay5lLHcpLG5pKHQuYixrKTtmb3IoZD1laShlLmEsMCk7ZC5iIT1kLmQuYzspe2ZvcihoPXUodGkoZCksMTg4KSxvPWVpKGguYSwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksOCksTGkocyx3KTtuaSh0LmEsaCl9fWZ1bmN0aW9uIEU1dCh0LGUsbil7dmFyIHIscyxvO2lmKG89RTQoKFJ1KCksbWEpLHQuVGcoKSxlKSxvKXtpZih0bygpLCF1KG8sNjYpLk9qKCkmJihvPXF4KEVvKG1hLG8pKSwhbykpdGhyb3cgcnQobmV3IFBuKGFiK2UubmUoKStXXykpO3M9KHI9dC5ZZyhvKSx1KHI+PTA/dC5fZyhyLCEwLCEwKTpsdyh0LG8sITApLDE1MykpLHUocywyMTUpLm1sKGUsbil9ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK1dfKSl9ZnVuY3Rpb24gS2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgbGUscz1XbyhuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyB6USksbz1XbyhuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBxUSksaD14YW4oRnNuKEpqKFMybihjdChvdChyeG4sMSksSWUsODMzLDAsW3Msb10pKSxuZXcgSFEpKSkscj0xO3I8aC5sZW5ndGg7cisrKWhbcl0taFtyLTFdPj0yKmUmJnVlKG4sbmV3IHludChoW3ItMV0rZSxoW3JdLWUpKTtyZXR1cm4gbn1mdW5jdGlvbiBZYm4odCxlLG4pe3dyKG4sIkVhZGVzIHJhZGlhbCIsMSksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSksdC5kPXUocWUoZSwoYkMoKSwkUykpLDMzKSx0LmM9WHQoeWUocWUoZSwoYXkoKSxTVikpKSksdC5lPWlzdCh1KHFlKGUsQk8pLDI5MykpLHQuYT1BbG4odShxZShlLFRfdCksNDI2KSksdC5iPVgxbih1KHFlKGUsRV90KSwzNDApKSxNMW4odCksbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSl9ZnVuY3Rpb24gWGJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBRYihvKSxkPShyLmItci5hKSpyLmM8MD8oSXAoKSxBYik6bmV3IFBwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1fOChuLGguYSkscyYmKHc9S2luKHQsKGs9KFR2KCksQz1uZXcgUnB0LEMpLGUmJlQ1dChrLGUpLGspLHMpLHFDKHcsTzAocyxDZCkpLEp6KHMsdyksSzR0KHMsdyksd2l0KHQscyx3KSl9ZnVuY3Rpb24gY3EodCl7dmFyIGUsbixyLHMsbyxoO2lmKCF0Lmope2lmKGg9bmV3IFFULGU9YUEsbz1lLmEuemModCxlKSxvPT1udWxsKXtmb3Iocj1uZXcgZXIoU28odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNikscz1jcShuKSxycyhoLHMpLE1yKGgsbik7ZS5hLkJjKHQpIT1udWxsfWV5KGgpLHQuaj1uZXcgcTMoKHUoU3QoV3QoKGpwKCksTG4pLm8pLDExKSwxOCksaC5pKSxoLmcpLHJsKHQpLmImPS0zM31yZXR1cm4gdC5qfWZ1bmN0aW9uIFFibih0KXt2YXIgZSxuLHIscztpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHI9JGModCwhMCkscz1uTy5sZW5ndGgsaG4oci5zdWJzdHIoci5sZW5ndGgtcyxzKSxuTykpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYoZT0oUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSxlPT00MylyZXR1cm4gd0x0O2lmKGU9PTQ1KXJldHVybiBBNWV9ZWxzZSBpZihuPT0zKXJldHVybiB3THR9cmV0dXJuIG5ldyBTcHQocil9ZnVuY3Rpb24gWmJuKHQpe3ZhciBlLG4scjtyZXR1cm4gbj10LmwsbiZuLTF8fChyPXQubSxyJnItMSl8fChlPXQuaCxlJmUtMSl8fGU9PTAmJnI9PTAmJm49PTA/LTE6ZT09MCYmcj09MCYmbiE9MD9XbXQobik6ZT09MCYmciE9MCYmbj09MD9XbXQocikrMjI6ZSE9MCYmcj09MCYmbj09MD9XbXQoZSkrNDQ6LTF9ZnVuY3Rpb24gSmJuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iod3IoZSwiRWRnZSBqb2luaW5nIiwxKSxuPWplKFJlKFEodCwoVGUoKSxuaHQpKSkpLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IGhhKHIuYSwwKTtoLmI8aC5kLmdjKCk7KW89KFFuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwxMCkpLG8uaz09KEduKCksWnMpJiYoX2F0KG8sbiksRWwoaCkpO29yKGUpfWZ1bmN0aW9uIHQybih0LGUsbil7dmFyIHIscztpZih3JCh0LmIpLFVkKHQuYiwoR0koKSxBViksKEg5KCksak8pKSxVZCh0LmIsTFYsZS5nKSxVZCh0LmIsTVYsZS5hKSx0LmE9VHEodC5iLGUpLHdyKG4sIkNvbXBhY3Rpb24gYnkgc2hyaW5raW5nIGEgdHJlZSIsdC5hLmMubGVuZ3RoKSxlLmkuYy5sZW5ndGg+MSlmb3Iocz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDUxKSxyLnBmKGUsUmMobiwxKSk7b3Iobil9ZnVuY3Rpb24gdjQodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPWUuYSZ0LmYsbz1udWxsLHI9dC5iW3NdOztyPXIuYil7aWYocj09ZSl7bz9vLmI9ZS5iOnQuYltzXT1lLmI7YnJlYWt9bz1yfWZvcihoPWUuZiZ0LmYsbz1udWxsLG49dC5jW2hdOztuPW4uZCl7aWYobj09ZSl7bz9vLmQ9ZS5kOnQuY1toXT1lLmQ7YnJlYWt9bz1ufWUuZT9lLmUuYz1lLmM6dC5hPWUuYyxlLmM/ZS5jLmU9ZS5lOnQuZT1lLmUsLS10LmksKyt0Lmd9ZnVuY3Rpb24gZTJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihuPXQubyxlPXQucCxoPXZpLHM9X2EsZD12aSxvPV9hLGs9MDtrPG47KytrKWZvcihDPTA7QzxlOysrQylsNCh0LGssQykmJihoPWIuTWF0aC5taW4oaCxrKSxzPWIuTWF0aC5tYXgocyxrKSxkPWIuTWF0aC5taW4oZCxDKSxvPWIuTWF0aC5tYXgobyxDKSk7cmV0dXJuIHc9cy1oKzEscj1vLWQrMSxuZXcgVFh0KGRlKGgpLGRlKGQpLGRlKHcpLGRlKHIpKX1mdW5jdGlvbiBZc3QodCxlKXt2YXIgbixyLHMsbztmb3Iobz1uZXcgaGEodCwwKSxuPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMTQwKSk7by5iPG8uZC5nYygpOylyPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMTQwKSkscz1uZXcgT3Z0KHIuYyxuLmQsZSksUW4oby5iPjApLG8uYS5YYihvLmM9LS1vLmIpLFJtKG8scyksUW4oby5iPG8uZC5nYygpKSxvLmQuWGIoby5jPW8uYisrKSxzLmE9ITEsbj1yfWZ1bmN0aW9uIEVjZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9dShRKHQsKHNlKCksekcpKSwxMSksaD1uZXcgUyh0LmopO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTEpLHI9bmV3IFMoby5nKTtyLmE8ci5jLmMubGVuZ3RoOylyZXR1cm4gZT11KEoociksMTcpLHNhKGUscyksbztmb3Iobj1uZXcgUyhvLmUpO24uYTxuLmMuYy5sZW5ndGg7KXJldHVybiBlPXUoSihuKSwxNyksRGEoZSxzKSxvfXJldHVybiBudWxsfWZ1bmN0aW9uIG4ybih0LGUsbil7dmFyIHIscztyPWt1KG4ucS5nZXRUaW1lKCkpLHljKHIsMCk8MD8ocz0kZy1TcihVSShPOChyKSwkZykpLHM9PSRnJiYocz0wKSk6cz1TcihVSShyLCRnKSksZT09MT8ocz1iLk1hdGgubWluKChzKzUwKS8xMDB8MCw5KSxScCh0LDQ4K3MmbXMpKTplPT0yPyhzPWIuTWF0aC5taW4oKHMrNSkvMTB8MCw5OSksWGQodCxzLDIpKTooWGQodCxzLDMpLGU+MyYmWGQodCwwLGUtMykpfWZ1bmN0aW9uIHIybih0KXt2YXIgZSxuLHIscztyZXR1cm4gR3QoUSh0LChUZSgpLGp5KSkpPT09R3QoKCQwKCksWmcpKT8hdC5lJiZHdChRKHQsX08pKSE9PUd0KChXOCgpLG1PKSk6KHI9dShRKHQsR2x0KSwyOTIpLHM9amUoUmUoUSh0LFZsdCkpKXx8R3QoUSh0LEVTKSk9PT1HdCgoWXgoKSx3TykpLGU9dShRKHQsQjl0KSwxOSkuYSxuPXQuYS5jLmxlbmd0aCwhcyYmciE9KFc4KCksbU8pJiYoZT09MHx8ZT5uKSl9ZnVuY3Rpb24gaTJuKHQpe3ZhciBlLG47Zm9yKG49MDtuPHQuYy5sZW5ndGgmJiEoV0t0KChBbihuLHQuYy5sZW5ndGgpLHUodC5jW25dLDExMykpKT4wKTtuKyspO2lmKG4+MCYmbjx0LmMubGVuZ3RoLTEpcmV0dXJuIG47Zm9yKGU9MDtlPHQuYy5sZW5ndGgmJiEoV0t0KChBbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDExMykpKT4wKTtlKyspO3JldHVybiBlPjAmJm48dC5jLmxlbmd0aC0xP2U6dC5jLmxlbmd0aC8yfDB9ZnVuY3Rpb24gVGNlKHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9NiYmZSl7aWYobEUodCxlKSl0aHJvdyBydChuZXcgUG4oS18rcW9lKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/WDN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWU2KGUsdCw2LHIpKSxyPUsydCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSw2LGUsZSkpfWZ1bmN0aW9uIFQ1dCh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTkmJmUpe2lmKGxFKHQsZSkpdGhyb3cgcnQobmV3IFBuKEtfK1R1ZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP1ozdCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj1lNihlLHQsOSxyKSkscj1ZMnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsOSxlLGUpKX1mdW5jdGlvbiBYc3QodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0zJiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytFbGUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD90NHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9ZTYoZSx0LDEyLHIpKSxyPVcydCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIG1FKHQpe3ZhciBlLG4scixzLG87aWYocj1MaCh0KSxvPXQuaixvPT1udWxsJiZyKXJldHVybiB0LiRqKCk/bnVsbDpyLnpqKCk7aWYoRXQociwxNDgpKXtpZihuPXIuQWooKSxuJiYocz1uLk5oKCkscyE9dC5pKSl7aWYoZT11KHIsMTQ4KSxlLkVqKCkpdHJ5e3QuZz1zLktoKGUsbyl9Y2F0Y2goaCl7aWYoaD1XaShoKSxFdChoLDc4KSl0Lmc9bnVsbDtlbHNlIHRocm93IHJ0KGgpfXQuaT1zfXJldHVybiB0Lmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2NlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBsZSx1ZShlLG5ldyBUeChuZXcgJGUodC5jLHQuZCksbmV3ICRlKHQuYyt0LmIsdC5kKSkpLHVlKGUsbmV3IFR4KG5ldyAkZSh0LmMsdC5kKSxuZXcgJGUodC5jLHQuZCt0LmEpKSksdWUoZSxuZXcgVHgobmV3ICRlKHQuYyt0LmIsdC5kK3QuYSksbmV3ICRlKHQuYyt0LmIsdC5kKSkpLHVlKGUsbmV3IFR4KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kK3QuYSkpKSxlfWZ1bmN0aW9uIF9jZSh0LGUsbixyKXt2YXIgcyxvLGg7aWYoaD1jNHQoZSxuKSxyLmNbci5jLmxlbmd0aF09ZSx0LmpbaC5wXT09LTF8fHQualtoLnBdPT0yfHx0LmFbZS5wXSlyZXR1cm4gcjtmb3IodC5qW2gucF09LTEsbz1uZXcgYXIobHIoejAoaCkuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShMcihvKSwxNyksISghKCFWYShzKSYmISghVmEocykmJnMuYy5pLmM9PXMuZC5pLmMpKXx8cz09ZSkpcmV0dXJuIF9jZSh0LHMsaCxyKTtyZXR1cm4gcn1mdW5jdGlvbiBzMm4odCxlLG4pe3ZhciByLHMsbztmb3Iobz1lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSw3OSkscj11KEpuKHQuYixzKSwyNjYpLCFyJiYodHMoWmQocykpPT10cyhYcChzKSk/eXZuKHQscyxuKTpaZChzKT09dHMoWHAocykpP0puKHQuYyxzKT09bnVsbCYmSm4odC5iLFhwKHMpKSE9bnVsbCYmc2hlKHQscyxuLCExKTpKbih0LmQscyk9PW51bGwmJkpuKHQuYixaZChzKSkhPW51bGwmJnNoZSh0LHMsbiwhMCkpfWZ1bmN0aW9uIGEybih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPXQuS2MoKTtzLk9iKCk7KWZvcihyPXUocy5QYigpLDEwKSxkPW5ldyBNYyxVbyhkLHIpLEZzKGQsKGJlKCksSG4pKSxKdChkLChzZSgpLFZHKSwoRm4oKSwhMCkpLGg9ZS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMCksdz1uZXcgTWMsVW8odyxvKSxGcyh3LEJuKSxKdCh3LFZHLCEwKSxuPW5ldyB6dixKdChuLFZHLCEwKSxEYShuLGQpLHNhKG4sdyl9ZnVuY3Rpb24gbzJuKHQsZSxuLHIpe3ZhciBzLG8saCxkO3M9eGllKHQsZSxuKSxvPXhpZSh0LG4sZSksaD11KEpuKHQuYyxlKSwxMTIpLGQ9dShKbih0LmMsbiksMTEyKSxzPG8/bmV3IHQyKChWZigpLFV5KSxoLGQsby1zKTpvPHM/bmV3IHQyKChWZigpLFV5KSxkLGgscy1vKToocyE9MHx8ISghZS5pfHwhbi5pKSYmcltlLmkuY11bbi5pLmNdKSYmKG5ldyB0MigoVmYoKSxVeSksaCxkLDApLG5ldyB0MihVeSxkLGgsMCkpfWZ1bmN0aW9uIFNjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPTAsaD1uZXcgUyhlLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwxMCkscys9by5vLmIrby5kLmErby5kLmQrdC5lLHI9bmV3IGFyKGxyKGpvKG8pLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLG4uYy5pLms9PShHbigpLEhjKSYmKHc9bi5jLmksZD11KFEodywoc2UoKSxfaSkpLDEwKSxzKz1kLm8uYitkLmQuYStkLmQuZCk7cmV0dXJuIHN9ZnVuY3Rpb24gQWNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztmb3Iobz1uZXcgbGUsaz1uZXcgUWksaD1uZXcgUWksWG1uKHQsayxoLGUpLGE0bih0LGssaCxlLG4pLHc9bmV3IFModCk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDExMikscz1uZXcgUyhkLmspO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyOSksKCFlfHxyLmM9PShWZigpLHBiKSkmJmQuZz5yLmIuZyYmKG8uY1tvLmMubGVuZ3RoXT1yKTtyZXR1cm4gb31mdW5jdGlvbiB5RSgpe3lFPVosbjU9bmV3IF9NKCJDQU5ESURBVEVfUE9TSVRJT05fTEFTVF9QTEFDRURfUklHSFQiLDApLFI2PW5ldyBfTSgiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX0JFTE9XIiwxKSxxUz1uZXcgX00oIkNBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX1JJR0hUIiwyKSx6Uz1uZXcgX00oIkNBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX0JFTE9XIiwzKSxIUz1uZXcgX00oIldIT0xFX0RSQVdJTkciLDQpfWZ1bmN0aW9uIGMybih0LGUpe2lmKEV0KGUsMjM5KSlyZXR1cm4gUnVuKHQsdShlLDMzKSk7aWYoRXQoZSwxODYpKXJldHVybiBRdW4odCx1KGUsMTE4KSk7aWYoRXQoZSwzNTQpKXJldHVybiBsbm4odCx1KGUsMTM3KSk7aWYoRXQoZSwzNTIpKXJldHVybiBObW4odCx1KGUsNzkpKTtpZihlKXJldHVybiBudWxsO3Rocm93IHJ0KG5ldyBQbihrOHQrUXAobmV3IHdsKGN0KG90KFhuLDEpLEllLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiB1Mm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89bmV3IFFpLHM9bmV3IFModC5kLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyMSksci5iLmEuYy5sZW5ndGg9PTAmJmhzKG8scixvLmMuYixvLmMpO2lmKG8uYj4xKWZvcihlPUR2KChuPW5ldyBVYiwrK3QuYixuKSx0LmQpLGQ9ZWkobywwKTtkLmIhPWQuZC5jOyloPXUodGkoZCksMTIxKSx2ZihvZihhZihjZihzZihuZXcgRWgsMSksMCksZSksaCkpfWZ1bmN0aW9uIEM1dCh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTExJiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytINXQodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9lNHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9ZTYoZSx0LDEwLHIpKSxyPXJ2dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwxMSxlLGUpKX1mdW5jdGlvbiBsMm4odCl7dmFyIGUsbixyLHM7Zm9yKHI9bmV3IGgyKG5ldyB3Zyh0LmIpLmEpO3IuYjspbj1ZdihyKSxzPXUobi5jZCgpLDExKSxlPXUobi5kZCgpLDEwKSxKdChlLChzZSgpLF9pKSxzKSxKdChzLFp1LGUpLEp0KHMsa08sKEZuKCksITApKSxGcyhzLHUoUShlLG9jKSw2MSkpLFEoZSxvYyksSnQocy5pLChUZSgpLG9zKSwob2EoKSxMNykpLHUoUShGYShzLmkpLEdjKSwyMSkuRmMoKG9vKCksZjcpKX1mdW5jdGlvbiBoMm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihvPTAsaD0wLHQuYylmb3Iodz1uZXcgUyh0LmQuaS5qKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMSksbys9ZC5lLmMubGVuZ3RoO2Vsc2Ugbz0xO2lmKHQuZClmb3Iodz1uZXcgUyh0LmMuaS5qKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMSksaCs9ZC5nLmMubGVuZ3RoO2Vsc2UgaD0xO3JldHVybiBzPXBzKEtNKGgtbykpLHI9KG4rZSkvMisobi1lKSooLjQqcykscn1mdW5jdGlvbiBmMm4odCl7ZzQoKTt2YXIgZSxuO2lmKHQuSGMoKGJlKCksWm8pKSl0aHJvdyBydChuZXcgUG4oIlBvcnQgc2lkZXMgbXVzdCBub3QgY29udGFpbiBVTkRFRklORUQiKSk7c3dpdGNoKHQuZ2MoKSl7Y2FzZSAxOnJldHVybiBMRztjYXNlIDI6cmV0dXJuIGU9dC5IYyhIbikmJnQuSGMoQm4pLG49dC5IYyhObikmJnQuSGMobXIpLGV8fG4/REc6SUc7Y2FzZSAzOnJldHVybiBNRztjYXNlIDQ6cmV0dXJuIEFHO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGQybih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iod3IobiwiQnJlYWtpbmcgUG9pbnQgUmVtb3ZpbmciLDEpLHQuYT11KFEoZSwoVGUoKSxYMCkpLDIxOCksbz1uZXcgUyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhHdihzLmEpKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCkscmVlKGgpJiYocj11KFEoaCwoc2UoKSxMdykpLDMwNSksIXIuZCYmQ2hlKHQscikpO29yKG4pfWZ1bmN0aW9uIFFzdCh0LGUsbil7cmV0dXJuIHk0KCksSDgodCxlKSYmSDgodCxuKT8hMTpBYXQobmV3ICRlKHQuYyx0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCksZSxuKXx8QWF0KG5ldyAkZSh0LmMrdC5iLHQuZCksbmV3ICRlKHQuYyt0LmIsdC5kK3QuYSksZSxuKXx8QWF0KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kK3QuYSksZSxuKXx8QWF0KG5ldyAkZSh0LmMsdC5kK3QuYSksbmV3ICRlKHQuYyx0LmQpLGUsbil9ZnVuY3Rpb24gXzV0KHQsZSl7dmFyIG4scixzLG87aWYoIXQuZGMoKSl7Zm9yKG49MCxyPXQuZ2MoKTtuPHI7KytuKWlmKG89QnIodC5YYihuKSksbz09bnVsbD9lPT1udWxsOmhuKG8uc3Vic3RyKDAsMyksIiEjIyIpP2UhPW51bGwmJihzPWUubGVuZ3RoLCFobihvLnN1YnN0cihvLmxlbmd0aC1zLHMpLGUpfHxvLmxlbmd0aCE9ZS5sZW5ndGgrMykmJiFobihMMixlKTpobihvLGl1dCkmJiFobihMMixlKXx8aG4obyxlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBnMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPXQuai5jLmxlbmd0aCx3PVB0KGF4bixLeHQsMzA2LGgsMCwxKSxkPTA7ZDxoO2QrKylvPXUoRmUodC5qLGQpLDExKSxvLnA9ZCx3W2RdPXlwbihKb2UobyksbixyKTtmb3IoUjJuKHQsdyxuLGUsciksaz1uZXcgQ3Iscz0wO3M8dy5sZW5ndGg7cysrKXdbc10mJmtpKGssdShGZSh0LmoscyksMTEpLHdbc10pO2suZi5jK2suZy5jIT0wJiYoSnQodCwoc2UoKSxtUyksaykscTBuKHQsdykpfWZ1bmN0aW9uIHAybih0LGUsbil7dmFyIHIscyxvO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylpZihyPXUoSihzKSw1Nyksbz1aMyhyKSxvJiZvLms9PShHbigpLHhzKSlzd2l0Y2godShRKG8sKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSA0Om8ubi5hPWUuYTticmVhaztjYXNlIDI6by5uLmE9bi5hLShvLm8uYStvLmQuYyk7YnJlYWs7Y2FzZSAxOm8ubi5iPWUuYjticmVhaztjYXNlIDM6by5uLmI9bi5iLShvLm8uYitvLmQuYSl9fWZ1bmN0aW9uIHc0KCl7dzQ9WixoVj1uZXcgQ3goSzAsMCksTU89bmV3IEN4KCJOSUtPTE9WIiwxKSxJTz1uZXcgQ3goIk5JS09MT1ZfUElYRUwiLDIpLElDdD1uZXcgQ3goIk5JS09MT1ZfSU1QUk9WRUQiLDMpLERDdD1uZXcgQ3goIk5JS09MT1ZfSU1QUk9WRURfUElYRUwiLDQpLE1DdD1uZXcgQ3goIkRVTU1ZTk9ERV9QRVJDRU5UQUdFIiw1KSxPQ3Q9bmV3IEN4KCJOT0RFQ09VTlRfUEVSQ0VOVEFHRSIsNiksZlY9bmV3IEN4KCJOT19CT1VOREFSWSIsNyl9ZnVuY3Rpb24gYjJuKHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBzPXUocWUoZSwoZXEoKSxBU3QpKSwxOSksIXMmJihzPWRlKDApKSxvPXUocWUobixBU3QpLDE5KSwhbyYmKG89ZGUoMCkpLHMuYT5vLmE/LTE6cy5hPG8uYT8xOnQuYSYmKHI9THMoZS5qLG4uaiksciE9MHx8KHI9THMoZS5pLG4uaSksciE9MCkpP3I6KGg9ZS5nKmUuZixkPW4uZypuLmYsTHMoaCxkKSl9ZnVuY3Rpb24gdjJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYoKyt0LmUsdz10LmQ9PW51bGw/MDp0LmQubGVuZ3RoLGU+dyl7Zm9yKEM9dC5kLHQuZD1QdChIQXQsSTh0LDYzLDIqdys0LDAsMSksbz0wO288dzsrK28paWYoaz1DW29dLGspZm9yKHI9ay5nLE09ay5pLGQ9MDtkPE07KytkKXM9dShyW2RdLDEzMyksaD1YMnQodCxzLlNoKCkpLG49dC5kW2hdLCFuJiYobj10LmRbaF09dC51aigpKSxuLkZjKHMpO3JldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gdzJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocz1uLG89cy5haygpLFYwKHQuZSxvKSl7aWYoby5oaSgpKXtmb3Iocj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHlpKGQscykmJmghPWUpdGhyb3cgcnQobmV3IFBuKFhEKSl9fWVsc2UgZm9yKHc9YXUodC5lLlRnKCksbykscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHcucmwoZC5haygpKSl0aHJvdyBydChuZXcgUG4oZU8pKTtKQyh0LGUsbil9ZnVuY3Rpb24gTGNlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPXUoUShlLChzZSgpLE55KSksMjEpLGg9dShBaSgoSWF0KCksTmkpLG4pLDIxKSxkPXUoQWkoUXIsbiksMjEpLG89aC5LYygpO28uT2IoKTspaWYocj11KG8uUGIoKSwyMSksIXUoQWkodC5iLHIpLDE1KS5kYygpKXJldHVybiExO2ZvcihzPWQuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHQuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtMm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHdyKGUsIlBhcnRpdGlvbiBwb3N0cHJvY2Vzc2luZyIsMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCksZD1uZXcgUyhzLmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxqZShSZShRKGgsKHNlKCksVkcpKSkpJiZfQyhkKTtvcihlKX1mdW5jdGlvbiBNY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodC5hLmMubGVuZ3RoPT0xKXJldHVybiBOYWUodShGZSh0LmEsMCksMTg3KSxlKTtmb3IoaD1rdW4odCksdz0wLGs9dC5kLG89aCxDPXQuZCxkPShrLW8pLzIrbztvKzE8azspe2Zvcih3PTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE4Nyksdys9KHM9RV8obixkLCExKSxzLmEpO3c8ZT8oQz1kLGs9ZCk6bz1kLGQ9KGstbykvMitvfXJldHVybiBDfWZ1bmN0aW9uIHkybih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBpc05hTih0KT8oTjgoKSx0RXQpOnQ8LTkyMjMzNzIwMzY4NTQ3NzZlMz8oTjgoKSx4Z2UpOnQ+PTkyMjMzNzIwMzY4NTQ3NzZlMz8oTjgoKSxaOHQpOihzPSExLHQ8MCYmKHM9ITAsdD0tdCkscj0wLHQ+PXgyJiYocj1wcyh0L3gyKSx0LT1yKngyKSxuPTAsdD49ZjYmJihuPXBzKHQvZjYpLHQtPW4qZjYpLGU9cHModCksbz1ydShlLG4scikscyYmdml0KG8pLG8pfWZ1bmN0aW9uIHgybih0LGUpe3ZhciBuLHIscyxvO2ZvcihuPSFlfHwhdC51LkhjKChRdSgpLHRnKSksbz0wLHM9bmV3IFModC5lLkNmKCkpO3MuYTxzLmMuYy5sZW5ndGg7KXtpZihyPXUoSihzKSw4MzgpLHIuSGYoKT09KGJlKCksWm8pKXRocm93IHJ0KG5ldyBQbigiTGFiZWwgYW5kIG5vZGUgc2l6ZSBjYWxjdWxhdG9yIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwb3J0cyB0aGF0IGhhdmUgcG9ydCBzaWRlcyBhc3NpZ25lZC4iKSk7ci52ZihvKyspLG11bih0LHIsbil9fWZ1bmN0aW9uIGsybih0LGUpe3ZhciBuLHIscyxvLGg7cmV0dXJuIHM9ZS5IaCh0LmEpLHMmJihyPSghcy5iJiYocy5iPW5ldyB5bCgoZG4oKSxRYSksY2MscykpLHMuYiksbj1CcihZZihyLFNhKSksbiE9bnVsbCYmKG89bi5sYXN0SW5kZXhPZigiIyIpLGg9bz09LTE/JDJ0KHQsZS5BaigpLG4pOm89PTA/cEkodCxudWxsLG4uc3Vic3RyKDEpKTpwSSh0LG4uc3Vic3RyKDAsbyksbi5zdWJzdHIobysxKSksRXQoaCwxNDgpKSk/dShoLDE0OCk6bnVsbH1mdW5jdGlvbiBFMm4odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiByPWUuSGgodC5hKSxyJiYobj0oIXIuYiYmKHIuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHIpKSxyLmIpLG89QnIoWWYobixydXQpKSxvIT1udWxsJiYocz1vLmxhc3RJbmRleE9mKCIjIiksaD1zPT0tMT8kMnQodCxlLkFqKCksbyk6cz09MD9wSSh0LG51bGwsby5zdWJzdHIoMSkpOnBJKHQsby5zdWJzdHIoMCxzKSxvLnN1YnN0cihzKzEpKSxFdChoLDE0OCkpKT91KGgsMTQ4KTpudWxsfWZ1bmN0aW9uIFM1dCh0KXt2YXIgZSxuLHIscyxvO2ZvcihuPW5ldyBTKHQuYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl7Zm9yKGU9dShKKG4pLDMwNyksZS5qPW51bGwsbz1lLmEuYS5lYygpLktjKCk7by5PYigpOylyPXUoby5QYigpLDU3KSxHZihyLmIpLCghZS5qfHxyLmQuYzxlLmouZC5jKSYmKGUuaj1yKTtmb3Iocz1lLmEuYS5lYygpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDU3KSxyLmIuYT1yLmQuYy1lLmouZC5jLHIuYi5iPXIuZC5kLWUuai5kLmR9cmV0dXJuIHR9ZnVuY3Rpb24gdXEodCl7dmFyIGUsbixyLHMsbztmb3Iobj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwxODkpLGUuZj1udWxsLG89ZS5hLmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw4MSksR2Yoci5lKSwoIWUuZnx8ci5nLmM8ZS5mLmcuYykmJihlLmY9cik7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4MSksci5lLmE9ci5nLmMtZS5mLmcuYyxyLmUuYj1yLmcuZC1lLmYuZy5kfXJldHVybiB0fWZ1bmN0aW9uIFQybih0KXt2YXIgZSxuLHI7cmV0dXJuIG49dSh0LmEsMTkpLmEscj11KHQuYiwxOSkuYSxlPWIuTWF0aC5tYXgoYi5NYXRoLmFicyhuKSxiLk1hdGguYWJzKHIpKSxuPGUmJnI9PS1lP25ldyBsYShkZShuKzEpLGRlKHIpKTpuPT1lJiZyPGU/bmV3IGxhKGRlKG4pLGRlKHIrMSkpOm4+PS1lJiZyPT1lP25ldyBsYShkZShuLTEpLGRlKHIpKTpuZXcgbGEoZGUobiksZGUoci0xKSl9ZnVuY3Rpb24gSWNlKCl7cmV0dXJuIHJvKCksY3Qob3QoaHhuLDEpLGFlLDc3LDAsW1U3dCxIN3QsaFMscmx0LGhUdCxnRyxURyxyNyx1VHQsdFR0LG9UdCxuNyxsVHQsUTd0LGZUdCxCN3Qsd0csaWx0LGZHLHhHLGdUdCx5RyxSN3QsY1R0LHBUdCxrRyxkVHQsZEcsSzd0LHNUdCxpVHQsQ0csejd0LGhHLGJHLCQ3dCxlNyxuVHQsWjd0LGFUdCxmUyxHN3QscTd0LHJUdCxKN3QsdkcsRUcsajd0LG1HLGVUdCxwRyxZN3QsVzd0LGJPLGxHLFg3dCxWN3RdKX1mdW5jdGlvbiBDMm4odCxlLG4pe3QuZD0wLHQuYj0wLGUuaz09KEduKCksSGMpJiZuLms9PUhjJiZ1KFEoZSwoc2UoKSxfaSkpLDEwKT09dShRKG4sX2kpLDEwKSYmKEdydChlKS5qPT0oYmUoKSxObik/YmNlKHQsZSxuKTpiY2UodCxuLGUpKSxlLms9PUhjJiZuLms9PVpzP0dydChlKS5qPT0oYmUoKSxObik/dC5kPTE6dC5iPTE6bi5rPT1IYyYmZS5rPT1acyYmKEdydChuKS5qPT0oYmUoKSxObik/dC5iPTE6dC5kPTEpLGZmbih0LGUsbil9ZnVuY3Rpb24gXzJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07cmV0dXJuIE09VDR0KHQpLGU9dC5hLHc9ZSE9bnVsbCx3JiZwOChNLCJjYXRlZ29yeSIsdC5hKSxzPWZNKG5ldyBUbSh0LmQpKSxoPSFzLGgmJihrPW5ldyBiZyxXZihNLCJrbm93bk9wdGlvbnMiLGspLG49bmV3IG16dChrKSx2YShuZXcgVG0odC5kKSxuKSksbz1mTSh0LmcpLGQ9IW8sZCYmKEM9bmV3IGJnLFdmKE0sInN1cHBvcnRlZEZlYXR1cmVzIixDKSxyPW5ldyB5enQoQyksdmEodC5nLHIpKSxNfWZ1bmN0aW9uIFMybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHI9ITEsZT0zMzYsbj0wLG89bmV3IE9XdCh0Lmxlbmd0aCksZD10LHc9MCxrPWQubGVuZ3RoO3c8azsrK3cpaD1kW3ddLHI9cnwoZDIoaCksITEpLHM9KCRwKGgpLGguYSksdWUoby5hLEFyKHMpKSxlJj1zLnFkKCksbj1udW4obixzLnJkKCkpO3JldHVybiB1KHUoall0KG5ldyBUbihudWxsLE1zdChuZXcgX24oKEdtKCksYjN0KG8uYSkpLDE2KSxuZXcgWCxlLG4pKSxuZXcgYnR0KHQpKSw2NzApLDgzMyl9ZnVuY3Rpb24gQTJuKHQsZSl7dmFyIG47dC5kJiYoZS5jIT10LmUuY3x8Um9uKHQuZS5iLGUuYikpJiYodWUodC5mLHQuZCksdC5hPXQuZC5jK3QuZC5iLHQuZD1udWxsLHQuZT1udWxsKSxXWWUoZS5iKT90LmM9ZTp0LmI9ZSwoZS5iPT0oSzgoKSxfdykmJiFlLmF8fGUuYj09SXkmJmUuYXx8ZS5iPT1qNCYmZS5hfHxlLmI9PUR5JiYhZS5hKSYmdC5jJiZ0LmImJihuPW5ldyBpaCh0LmEsdC5jLmQsZS5jLXQuYSx0LmIuZC10LmMuZCksdC5kPW4sdC5lPWUpfWZ1bmN0aW9uIGREKHQpe3ZhciBlO2lmKElxdC5jYWxsKHRoaXMpLHRoaXMuaT1uZXcgdlosdGhpcy5nPXQsdGhpcy5mPXUodC5lJiZ0LmUoKSw5KS5sZW5ndGgsdGhpcy5mPT0wKXRocm93IHJ0KG5ldyBQbigiVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgcGhhc2UgaW4gdGhlIHBoYXNlIGVudW1lcmF0aW9uLiIpKTt0aGlzLmM9KGU9dShIZih0aGlzLmcpLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpLHRoaXMuYT1uZXcgSHMsdGhpcy5iPW5ldyBDcn1mdW5jdGlvbiBBNXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT03JiZlKXtpZihsRSh0LGUpKXRocm93IHJ0KG5ldyBQbihLXytSYWUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9RM3QodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9dShlLDQ5KS5naCh0LDEsc04scikpLHI9WXZ0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCwxLDcsZSxlKSl9ZnVuY3Rpb24gRGNlKHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9MyYmZSl7aWYobEUodCxlKSl0aHJvdyBydChuZXcgUG4oS18rV3JlKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/SjN0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXUoZSw0OSkuZ2godCwwLG9OLHIpKSxyPVh2dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFzKHQsMSwzLGUsZSkpfWZ1bmN0aW9uIFpzdCh0LGUpe2JFKCk7dmFyIG4scixzLG8saCxkLHcsayxDO3JldHVybiBlLmQ+dC5kJiYoZD10LHQ9ZSxlPWQpLGUuZDw2Mz92dm4odCxlKTooaD0odC5kJi0yKTw8NCxrPXVtdCh0LGgpLEM9dW10KGUsaCkscj1nYXQodCxHeChrLGgpKSxzPWdhdChlLEd4KEMsaCkpLHc9WnN0KGssQyksbj1ac3QocixzKSxvPVpzdChnYXQoayxyKSxnYXQocyxDKSksbz1rYXQoa2F0KG8sdyksbiksbz1HeChvLGgpLHc9R3godyxoPDwxKSxrYXQoa2F0KHcsbyksbikpfWZ1bmN0aW9uIEwybih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IoaD1RQyh0LG4pLGQ9UHQobzAsemcsMTAsZS5sZW5ndGgsMCwxKSxyPTAsbz1oLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSxqZShSZShRKHMsKHNlKCksa08pKSkpJiYoZFtyKytdPXUoUShzLFp1KSwxMCkpO2lmKHI8ZS5sZW5ndGgpdGhyb3cgcnQobmV3IEZvKCJFeHBlY3RlZCAiK2UubGVuZ3RoKyIgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAiK3IrIi4iKSk7cmV0dXJuIGR9ZnVuY3Rpb24gTTJuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKCF0LnRiKXtmb3Iobz0oIXQucmImJih0LnJiPW5ldyBxbSh0LGkxLHQpKSx0LnJiKSxkPW5ldyBreChvLmkpLHM9bmV3IGVyKG8pO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwxMzgpLGg9ci5uZSgpLG49dShoPT1udWxsP3N1KGQuZixudWxsLHIpOm53KGQuZyxoLHIpLDEzOCksbiYmKGg9PW51bGw/c3UoZC5mLG51bGwsbik6bncoZC5nLGgsbikpO3QudGI9ZH1yZXR1cm4gdShGYyh0LnRiLGUpLDEzOCl9ZnVuY3Rpb24gZ0QodCxlKXt2YXIgbixyLHMsbyxoO2lmKCh0Lmk9PW51bGwmJnBkKHQpLHQuaSkubGVuZ3RoLCF0LnApe2ZvcihoPW5ldyBreCgoMyp0LmcuaS8yfDApKzEpLHM9bmV3IE14KHQuZyk7cy5lIT1zLmkuZ2MoKTspcj11KG5zdChzKSwxNzApLG89ci5uZSgpLG49dShvPT1udWxsP3N1KGguZixudWxsLHIpOm53KGguZyxvLHIpLDE3MCksbiYmKG89PW51bGw/c3UoaC5mLG51bGwsbik6bncoaC5nLG8sbikpO3QucD1ofXJldHVybiB1KEZjKHQucCxlKSwxNzApfWZ1bmN0aW9uIEw1dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGs7Zm9yKGRobihyK2NydChuLG4uJGQoKSkscyksZVh0KGUsamxuKG4pKSxvPW4uZixvJiZMNXQodCxlLG8sIkNhdXNlZCBieTogIiwhMSksZD0obi5rPT1udWxsJiYobi5rPVB0KHl1dCx0ZSw3OCwwLDAsMSkpLG4uayksdz0wLGs9ZC5sZW5ndGg7dzxrOysrdyloPWRbd10sTDV0KHQsZSxoLCJTdXBwcmVzc2VkOiAiLCExKTtjb25zb2xlLmdyb3VwRW5kIT1udWxsJiZjb25zb2xlLmdyb3VwRW5kLmNhbGwoY29uc29sZSl9ZnVuY3Rpb24gcEQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iodz1lLmUsZD13Lmxlbmd0aCxoPWUucS5fZih3LG4/MDpkLTEsbikscz13W24/MDpkLTFdLGg9aHx2dWUodCxzLG4sciksbz1uPzE6ZC0yO24/bzxkOm8+PTA7bys9bj8xOi0xKWg9aHxlLmMuU2YodyxvLG4sciYmIWplKFJlKFEoZS5qLChzZSgpLE13KSkpKSYmIWplKFJlKFEoZS5qLChzZSgpLEs0KSkpKSksaD1ofGUucS5fZih3LG8sbiksaD1ofHZ1ZSh0LHdbb10sbixyKTtyZXR1cm4gTnModC5jLGUpLGh9ZnVuY3Rpb24gbHEodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihDPWJadCh0LmopLE09MCxGPUMubGVuZ3RoO008RjsrK00pe2lmKGs9Q1tNXSxuPT0oc28oKSxKdSl8fG49PU1TKWZvcih3PWdkKGsuZykscz13LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHowbihlLHIpJiZkdyhyLCEwKTtpZihuPT1ldXx8bj09TVMpZm9yKGQ9Z2Qoay5lKSxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sJDBuKGUscikmJmR3KHIsITApfX1mdW5jdGlvbiBJMm4odCl7dmFyIGUsbjtzd2l0Y2goZT1udWxsLG49bnVsbCx0ZG4odCkuZyl7Y2FzZSAxOmU9KGJlKCksSG4pLG49Qm47YnJlYWs7Y2FzZSAyOmU9KGJlKCksbXIpLG49Tm47YnJlYWs7Y2FzZSAzOmU9KGJlKCksQm4pLG49SG47YnJlYWs7Y2FzZSA0OmU9KGJlKCksTm4pLG49bXJ9S0IodCx1KE92KEhqKHUoQWkodC5rLGUpLDE1KS5PYygpLHo0KSksMTEzKSksV0IodCx1KE92KHFqKHUoQWkodC5rLG4pLDE1KS5PYygpLHo0KSksMTEzKSl9ZnVuY3Rpb24gRDJuKHQpe3ZhciBlLG4scixzLG8saDtpZihzPXUoRmUodC5qLDApLDExKSxzLmUuYy5sZW5ndGgrcy5nLmMubGVuZ3RoPT0wKXQubi5hPTA7ZWxzZXtmb3IoaD0wLHI9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbmV3IFlzKHMpLG5ldyBFcihzKV0pKSk7enIocik7KW49dShMcihyKSwxMSksaCs9bi5pLm4uYStuLm4uYStuLmEuYTtlPXUoUSh0LChUZSgpLFB3KSksOCksbz1lP2UuYTowLHQubi5hPWgvKHMuZS5jLmxlbmd0aCtzLmcuYy5sZW5ndGgpLW99fWZ1bmN0aW9uIE9jZSh0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgUyhlLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIyMSksSW50KHUobi5iLDY1KSxuYShuYyh1KGUuYiw2NSkuYyksdShlLmIsNjUpLmEpKSxzPVh1ZSh1KGUuYiw2NSkuYix1KG4uYiw2NSkuYikscz4xJiYodC5hPSEwKSxWdG4odShuLmIsNjUpLExpKG5jKHUoZS5iLDY1KS5jKSx1ZChuYShuYyh1KG4uYiw2NSkuYSksdShlLmIsNjUpLmEpLHMpKSksTVF0KHQsZSksT2NlKHQsbil9ZnVuY3Rpb24gTmNlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBTKHQuYS5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuZT0wLHIuZC5hLiRiKCk7Zm9yKHM9bmV3IFModC5hLmEpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwxODkpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKGU9dShuLlBiKCksODEpLGQ9ZS5mLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDgxKSxoLmQhPXImJihOcyhyLmQsaCksKytoLmQuZSl9ZnVuY3Rpb24gTzJuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9dC5qLmMubGVuZ3RoLG49MCxlPXcscz0yKncsZD1uZXcgUyh0LmopO2QuYTxkLmMuYy5sZW5ndGg7KXN3aXRjaChoPXUoSihkKSwxMSksaC5qLmcpe2Nhc2UgMjpjYXNlIDQ6aC5wPS0xO2JyZWFrO2Nhc2UgMTpjYXNlIDM6cj1oLmUuYy5sZW5ndGgsbz1oLmcuYy5sZW5ndGgscj4wJiZvPjA/aC5wPWUrKzpyPjA/aC5wPW4rKzpvPjA/aC5wPXMrKzpoLnA9bisrfXZuKCksWHModC5qLG5ldyBfTCl9ZnVuY3Rpb24gTjJuKHQpe3ZhciBlLG47bj1udWxsLGU9dShGZSh0LmcsMCksMTcpO2Rve2lmKG49ZS5kLmksVnMobiwoc2UoKSxSaCkpKXJldHVybiB1KFEobixSaCksMTEpLmk7aWYobi5rIT0oR24oKSxEcykmJnpyKG5ldyBhcihscihNcyhuKS5hLktjKCksbmV3IHopKSkpZT11KExyKG5ldyBhcihscihNcyhuKS5hLktjKCksbmV3IHopKSksMTcpO2Vsc2UgaWYobi5rIT1EcylyZXR1cm4gbnVsbH13aGlsZShuJiZuLmshPShHbigpLERzKSk7cmV0dXJuIG59ZnVuY3Rpb24gUDJuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihkPWUuaixoPWUuZyx3PXUoRmUoZCxkLmMubGVuZ3RoLTEpLDExMyksQz0oQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSwxMTMpKSxrPXZzdCh0LGgsdyxDKSxvPTE7bzxkLmMubGVuZ3RoO28rKyluPShBbihvLTEsZC5jLmxlbmd0aCksdShkLmNbby0xXSwxMTMpKSxzPShBbihvLGQuYy5sZW5ndGgpLHUoZC5jW29dLDExMykpLHI9dnN0KHQsaCxuLHMpLHI+ayYmKHc9bixDPXMsaz1yKTtlLmE9QyxlLmM9d31mdW5jdGlvbiBGMm4odCxlKXt2YXIgbixyO2lmKHI9WU0odC5iLGUuYiksIXIpdGhyb3cgcnQobmV3IEZvKCJJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBjb25zdHJhaW50IGNhbGN1bGF0aW9uLiIpKTsoem5lKGUuYix1KEZRZSh0LmIsZS5iKSw1NykpfHx6bmUoZS5iLHUoUFFlKHQuYixlLmIpLDU3KSkpJiYocWQoKSxlLmIrIiIpLHQuYVtlLmIuZl09dShnbnQodC5iLGUuYiksNTcpLG49dShkbnQodC5iLGUuYiksNTcpLG4mJih0LmFbbi5mXT1lLmIpfWZ1bmN0aW9uIHZmKHQpe2lmKCF0LmEuZHx8IXQuYS5lKXRocm93IHJ0KG5ldyBGbygoTDAoWWdlKSxZZ2UuaysiIG11c3QgaGF2ZSBhIHNvdXJjZSBhbmQgdGFyZ2V0ICIrKEwwKEpFdCksSkV0LmspKyIgc3BlY2lmaWVkLiIpKSk7aWYodC5hLmQ9PXQuYS5lKXRocm93IHJ0KG5ldyBGbygiTmV0d29yayBzaW1wbGV4IGRvZXMgbm90IHN1cHBvcnQgc2VsZi1sb29wczogIit0LmErIiAiK3QuYS5kKyIgIit0LmEuZSkpO3JldHVybiBwaih0LmEuZC5nLHQuYSkscGoodC5hLmUuYix0LmEpLHQuYX1mdW5jdGlvbiBCMm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihrPW5ldyBMcChuZXcgdyR0KHQpKSxoPWN0KG90KEZiZSwxKSxLZmUsMTEsMCxbZSxuXSksZD0wLHc9aC5sZW5ndGg7ZDx3OysrZClmb3Iobz1oW2RdLHB6KGsuYSxvLChGbigpLEkyKSk9PW51bGwscz1uZXcgUzEoby5iKTtWbyhzLmEpfHxWbyhzLmIpOylyPXUoVm8ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxyLmM9PXIuZHx8WU0oayxvPT1yLmM/ci5kOnIuYyk7cmV0dXJuIEFyKGspLG5ldyBQdShrKX1mdW5jdGlvbiBQY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihyPTAsZS5iIT0wJiZuLmIhPTApe289ZWkoZSwwKSxoPWVpKG4sMCksZD1YdCh5ZSh0aShvKSkpLHc9WHQoeWUodGkoaCkpKSxzPSEwO2Rve2lmKGQ+dy10LmImJmQ8dyt0LmIpcmV0dXJuLTE7ZD53LXQuYSYmZDx3K3QuYSYmKytyLGQ8PXcmJm8uYiE9by5kLmM/ZD1YdCh5ZSh0aShvKSkpOnc8PWQmJmguYiE9aC5kLmM/dz1YdCh5ZSh0aShoKSkpOnM9ITF9d2hpbGUocyl9cmV0dXJuIHJ9ZnVuY3Rpb24gUjJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHc7Zm9yKHc9KG89dShIZihYYSksOSksbmV3IHJoKG8sdSh1ZihvLG8ubGVuZ3RoKSw5KSwwKSksZD1uZXcgUyh0LmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxlW2gucF0mJihRNG4oaCxlW2gucF0scikscGYodyxoLmopKTtzPyhfc3QodCxlLChiZSgpLEhuKSwyKm4sciksX3N0KHQsZSxCbiwyKm4scikpOihfc3QodCxlLChiZSgpLE5uKSwyKm4sciksX3N0KHQsZSxtciwyKm4scikpfWZ1bmN0aW9uIGoybih0KXt2YXIgZSxuLHIscyxvO2lmKG89bmV3IGxlLG11KHQuYixuZXcgS24obykpLHQuYi5jPVB0KFhuLEllLDEsMCw1LDEpLG8uYy5sZW5ndGghPTApe2ZvcihlPShBbigwLG8uYy5sZW5ndGgpLHUoby5jWzBdLDc4KSksbj0xLHI9by5jLmxlbmd0aDtuPHI7KytuKXM9KEFuKG4sby5jLmxlbmd0aCksdShvLmNbbl0sNzgpKSxzIT1lJiZRZG4oZSxzKTtpZihFdChlLDYwKSl0aHJvdyBydCh1KGUsNjApKTtpZihFdChlLDI4OSkpdGhyb3cgcnQodShlLDI4OSkpfX1mdW5jdGlvbiAkMm4odCxlKXt2YXIgbixyLHMsbztmb3IodD10PT1udWxsP1R1OihPbih0KSx0KSxuPW5ldyBMbSxvPTAscj0wO3I8ZS5sZW5ndGgmJihzPXQuaW5kZXhPZigiJXMiLG8pLHMhPS0xKTspVnIobix0LnN1YnN0cihvLHMtbykpLGhjKG4sZVtyKytdKSxvPXMrMjtpZihWcihuLHQuc3Vic3RyKG8pKSxyPGUubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLGhjKG4sZVtyKytdKTtyPGUubGVuZ3RoOyluLmErPUthLGhjKG4sZVtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIHoybih0KXt2YXIgZSxuLHIscztmb3IoZT0wLHI9dC5sZW5ndGgscz1yLTQsbj0wO248czspZT0oUnIobiszLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobiszKSsoUnIobisyLHQubGVuZ3RoKSwzMSoodC5jaGFyQ29kZUF0KG4rMikrKFJyKG4rMSx0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKzEpKyhScihuLHQubGVuZ3RoKSwzMSoodC5jaGFyQ29kZUF0KG4pKzMxKmUpKSkpKSkpLGU9ZXwwLG4rPTQ7Zm9yKDtuPHI7KWU9ZSozMStiYSh0LG4rKyk7cmV0dXJuIGU9ZXwwLGV9ZnVuY3Rpb24gcTJuKHQpe3ZhciBlLG47Zm9yKG49bmV3IGFyKGxyKE1zKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLGUuZC5pLmshPShHbigpLFNsKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVCwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZSB0aGF0ICBkb2VzIG5vdCBnbyB0byBhIExBU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIEgybih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKHc9MCxDPW5ldyBTKHQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspe2ZvcihrPXUoSihDKSwxMCksZD0wLG89bmV3IGFyKGxyKGpvKGspLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLE09VDEocy5jKS5iLEY9VDEocy5kKS5iLGQ9Yi5NYXRoLm1heChkLGIuTWF0aC5hYnMoRi1NKSk7dz1iLk1hdGgubWF4KHcsZCl9cmV0dXJuIGg9cipiLk1hdGgubWluKDEsZS9uKSp3LGh9ZnVuY3Rpb24gTTV0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBCOSx0JjI1NiYmKGUuYSs9IkYiKSx0JjEyOCYmKGUuYSs9IkgiKSx0JjUxMiYmKGUuYSs9IlgiKSx0JjImJihlLmErPSJpIiksdCY4JiYoZS5hKz0ibSIpLHQmNCYmKGUuYSs9InMiKSx0JjMyJiYoZS5hKz0idSIpLHQmNjQmJihlLmErPSJ3IiksdCYxNiYmKGUuYSs9IngiKSx0JndmJiYoZS5hKz0iLCIpLFdwdChlLmEpfWZ1bmN0aW9uIEcybih0LGUpe3ZhciBuLHIscyxvO2Zvcih3cihlLCJSZXNpemUgY2hpbGQgZ3JhcGggdG8gZml0IHBhcmVudC4iLDEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyOSksQXModC5hLG4uYSksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSk7Zm9yKG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksa28ocyxudWxsKTt0LmIuYz1QdChYbixJZSwxLDAsNSwxKSxkdm4odCksdC5lJiZKd24odC5lLHQpLG9yKGUpfWZ1bmN0aW9uIFYybih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7aWYocj10LmIsbz1yLmUsaD1EeCh1KFEociwoVGUoKSxvcykpLDk4KSksbj0hIW8mJnUoUShvLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSksIShofHxuKSlmb3Ioaz0oZD1uZXcgYjEodC5lKS5hLnZjKCkuS2MoKSxuZXcgdjEoZCkpO2suYS5PYigpOyl3PShlPXUoay5hLlBiKCksNDIpLHUoZS5kZCgpLDExMykpLHcuYSYmKHM9dy5kLFVvKHMsbnVsbCksdy5jPSEwLHQuYT0hMCl9ZnVuY3Rpb24gVTJuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2ZvcihGPS0xLEg9MCxrPXQsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl7Zm9yKHc9a1tDXSxvPXcsaD0wLGQ9by5sZW5ndGg7aDxkOysraClmb3Iocz1vW2hdLGU9bmV3IFhHdChGPT0tMT90WzBdOnRbRl0sRnNlKHMpKSxuPTA7bjxzLmouYy5sZW5ndGg7bisrKWZvcihyPW4rMTtyPHMuai5jLmxlbmd0aDtyKyspQVl0KGUsdShGZShzLmosbiksMTEpLHUoRmUocy5qLHIpLDExKSk+MCYmKytIOysrRn1yZXR1cm4gSH1mdW5jdGlvbiBXMm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPXUoUShlLChodygpLGFfdCkpLDQyNSksbz1laShlLmIsMCk7by5iIT1vLmQuYzspaWYocz11KHRpKG8pLDg2KSx0LmJbcy5nXT09MCl7c3dpdGNoKGguZyl7Y2FzZSAwOmNzZSh0LHMpO2JyZWFrO2Nhc2UgMTpZcG4odCxzKX10LmJbcy5nXT0yfWZvcihyPWVpKHQuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSxyeShuLmIuZCxuLCEwKSxyeShuLmMuYixuLCEwKTtKdChlLChmYygpLEpDdCksdC5hKX1mdW5jdGlvbiBhdSh0LGUpe3RvKCk7dmFyIG4scixzLG87cmV0dXJuIGU/ZT09KERpKCksXzVlKXx8KGU9PWc1ZXx8ZT09VTJ8fGU9PWQ1ZSkmJnQhPWJMdD9uZXcgeHh0KHQsZSk6KHI9dShlLDY3Nyksbj1yLnBrKCksbnx8KGs4KEVvKChSdSgpLG1hKSxlKSksbj1yLnBrKCkpLG89KCFuLmkmJihuLmk9bmV3IENyKSxuLmkpLHM9dShlYyhBbyhvLmYsdCkpLDE5NDIpLCFzJiZraShvLHQscz1uZXcgeHh0KHQsZSkpLHMpOmw1ZX1mdW5jdGlvbiBLMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHc9dShRKHQsKHNlKCksX2kpKSwxMSksaz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW3cuaS5uLHcubix3LmFdKSkuYSxDPXQuaS5uLmIsbj1nZCh0LmUpLHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxzYShyLHcpLEtiKHIuYSxuZXcgJGUoayxDKSksZSYmKGQ9dShRKHIsKFRlKCksX28pKSw3NCksZHx8KGQ9bmV3IER1LEp0KHIsX28sZCkpLG5pKGQsbmV3ICRlKGssQykpKX1mdW5jdGlvbiBZMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHM9dShRKHQsKHNlKCksX2kpKSwxMSksaz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYSxDPXQuaS5uLmIsbj1nZCh0LmcpLGg9bixkPTAsdz1oLmxlbmd0aDtkPHc7KytkKW89aFtkXSxEYShvLHMpLHFWdChvLmEsbmV3ICRlKGssQykpLGUmJihyPXUoUShvLChUZSgpLF9vKSksNzQpLHJ8fChyPW5ldyBEdSxKdChvLF9vLHIpKSxuaShyLG5ldyAkZShrLEMpKSl9ZnVuY3Rpb24gWDJuKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih0LmI9bmV3IGxlLHQuZD11KFEoZSwoc2UoKSxPNikpLDIzMCksdC5lPWFpbih0LmQpLG89bmV3IFFpLHM9XzEoY3Qob3QoT2JlLDEpLFVmZSwzNywwLFtlXSkpLGg9MDtoPHMuYy5sZW5ndGg7KXI9KEFuKGgscy5jLmxlbmd0aCksdShzLmNbaF0sMzcpKSxyLnA9aCsrLG49bmV3IEtsZShyLHQuYSx0LmIpLEFzKHMsbi5iKSx1ZSh0LmIsbiksbi5zJiYoZD1laShvLDApLFhNKGQsbikpO3JldHVybiB0LmM9bmV3IHFzLG99ZnVuY3Rpb24gUTJuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihoPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMTEpLG49by5jP0J2dChvLmMpOjAsbj4wP28uYT8oZD1vLmIucmYoKS5hLG4+ZCYmKHM9KG4tZCkvMixvLmQuYj1zLG8uZC5jPXMpKTpvLmQuYz10LnMrbjpUQyh0LnUpJiYocj1DNHQoby5iKSxyLmM8MCYmKG8uZC5iPS1yLmMpLHIuYytyLmI+by5iLnJmKCkuYSYmKG8uZC5jPXIuYytyLmItby5iLnJmKCkuYSkpfWZ1bmN0aW9uIFoybih0LGUpe3ZhciBuLHIscyxvO2Zvcih3cihlLCJTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiBQcm9jZXNzb3IiLDEpLG49ITEscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI5KSxvPXFJKEckKFJpKFJpKG5ldyBUbihudWxsLG5ldyBfbihyLmEsMTYpKSxuZXcgUlQpLG5ldyBNTCksbmV3IGdGKSxuZXcgcEYpLG49bnxvLmEhPW51bGw7biYmSnQodCwoc2UoKSxaVHQpLChGbigpLCEwKSksb3IoZSl9ZnVuY3Rpb24gSjJuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHM9biwhcyYmKHM9bmV3IFlrKSx3cihzLCJMYXlvdXQiLHQuYS5jLmxlbmd0aCksamUoUmUoUShlLChodygpLHJfdCkpKSkpZm9yKHFkKCkscj0wO3I8dC5hLmMubGVuZ3RoO3IrKylkPShyPDEwPyIwIjoiIikrcisrLCIiK2QrQXAoc2wodShGZSh0LmEsciksNTEpKSk7Zm9yKGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw1MSksby5wZihlLFJjKHMsMSkpO29yKHMpfWZ1bmN0aW9uIHR2bih0KXt2YXIgZSxuO2lmKGU9dSh0LmEsMTkpLmEsbj11KHQuYiwxOSkuYSxlPj0wKXtpZihlPT1uKXJldHVybiBuZXcgbGEoZGUoLWUtMSksZGUoLWUtMSkpO2lmKGU9PS1uKXJldHVybiBuZXcgbGEoZGUoLWUpLGRlKG4rMSkpfXJldHVybiBiLk1hdGguYWJzKGUpPmIuTWF0aC5hYnMobik/ZTwwP25ldyBsYShkZSgtZSksZGUobikpOm5ldyBsYShkZSgtZSksZGUobisxKSk6bmV3IGxhKGRlKGUrMSksZGUobikpfWZ1bmN0aW9uIGV2bih0KXt2YXIgZSxuO249dShRKHQsKFRlKCksY3UpKSwxNjMpLGU9dShRKHQsKHNlKCksTzIpKSwzMDMpLG49PShoaCgpLGZiKT8oSnQodCxjdSxDTyksSnQodCxPMiwoQjAoKSxVNCkpKTpuPT1GeT8oSnQodCxjdSxDTyksSnQodCxPMiwoQjAoKSxBNikpKTplPT0oQjAoKSxVNCk/KEp0KHQsY3UsZmIpLEp0KHQsTzIseU8pKTplPT1BNiYmKEp0KHQsY3UsRnkpLEp0KHQsTzIseU8pKX1mdW5jdGlvbiBocSgpe2hxPVosTk89bmV3IEFRLFBtZT1iaShuZXcgSHMsKFdhKCksb3UpLChybygpLGZHKSksUm1lPUt1KGJpKG5ldyBIcyxvdSx5RyksSW8sbUcpLGptZT1hdyhhdyhPUihLdShiaShuZXcgSHMsQWQsVEcpLElvLEVHKSxxYyksa0cpLENHKSxGbWU9S3UoYmkoYmkoYmkobmV3IEhzLGxiLGdHKSxxYyxiRykscWMsZTcpLElvLHBHKSxCbWU9S3UoYmkoYmkobmV3IEhzLHFjLGU3KSxxYyxoRyksSW8sbEcpfWZ1bmN0aW9uIGJfKCl7Yl89WixxbWU9YmkoS3UobmV3IEhzLChXYSgpLElvKSwocm8oKSxZN3QpKSxvdSxmRyksVW1lPWF3KGF3KE9SKEt1KGJpKG5ldyBIcyxBZCxURyksSW8sRUcpLHFjKSxrRyksQ0cpLEhtZT1LdShiaShiaShiaShuZXcgSHMsbGIsZ0cpLHFjLGJHKSxxYyxlNyksSW8scEcpLFZtZT1iaShiaShuZXcgSHMsb3UseUcpLElvLG1HKSxHbWU9S3UoYmkoYmkobmV3IEhzLHFjLGU3KSxxYyxoRyksSW8sbEcpfWZ1bmN0aW9uIG52bih0LGUsbixyLHMpe3ZhciBvLGg7KCFWYShlKSYmZS5jLmkuYz09ZS5kLmkuY3x8IVllZShLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSksbikpJiYhVmEoZSkmJihlLmM9PXM/aDgoZS5hLDAsbmV3IHlvKG4pKTpuaShlLmEsbmV3IHlvKG4pKSxyJiYhUzAodC5hLG4pJiYoaD11KFEoZSwoVGUoKSxfbykpLDc0KSxofHwoaD1uZXcgRHUsSnQoZSxfbyxoKSksbz1uZXcgeW8obiksaHMoaCxvLGguYy5iLGguYyksTnModC5hLG8pKSl9ZnVuY3Rpb24gcnZuKHQpe3ZhciBlLG47Zm9yKG49bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTHIobiksMTcpLGUuYy5pLmshPShHbigpLFNsKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgY29tZSBmcm9tIGEgRklSU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIGl2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYocz1KcmUodC5EYiYyNTQpLHM9PTApdC5FYj1uO2Vsc2V7aWYocz09MSlkPVB0KFhuLEllLDEsMiw1LDEpLG89YnN0KHQsZSksbz09MD8oZFswXT1uLGRbMV09dC5FYik6KGRbMF09dC5FYixkWzFdPW4pO2Vsc2UgZm9yKGQ9UHQoWG4sSWUsMSxzKzEsNSwxKSxoPXMyKHQuRWIpLHI9Mix3PTAsaz0wO3I8PTEyODtyPDw9MSlyPT1lP2RbaysrXT1uOnQuRGImciYmKGRbaysrXT1oW3crK10pO3QuRWI9ZH10LkRifD1lfWZ1bmN0aW9uIEZjZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHRoaXMuYj1uZXcgbGUscz0wLHI9MCxoPW5ldyBTKHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE2NyksbiYmcnluKG8pLHVlKHRoaXMuYixvKSxzKz1vLm8scis9by5wO3RoaXMuYi5jLmxlbmd0aD4wJiYobz11KEZlKHRoaXMuYiwwKSwxNjcpLHMrPW8ubyxyKz1vLnApLHMqPTIscio9MixlPjE/cz1wcyhiLk1hdGguY2VpbChzKmUpKTpyPXBzKGIuTWF0aC5jZWlsKHIvZSkpLHRoaXMuYT1uZXcgdzN0KHMscil9ZnVuY3Rpb24gQmNlKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3IoQz1yLGUuaiYmZS5vPyhIPXUoSm4odC5mLGUuQSksNTcpLFk9SC5kLmMrSC5kLmIsLS1DKTpZPWUuYS5jK2UuYS5iLE09cyxuLnEmJm4ubz8oSD11KEpuKHQuZixuLkMpLDU3KSxrPUguZC5jLCsrTSk6az1uLmEuYyx0dD1rLVksdz1iLk1hdGgubWF4KDIsTS1DKSxkPXR0L3csVj1ZK2QsRj1DO0Y8TTsrK0YpaD11KG8uWGIoRiksMTI4KSxndD1oLmEuYixoLmEuYz1WLWd0LzIsVis9ZH1mdW5jdGlvbiBJNXQodCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtmb3Ioaz1uLmMubGVuZ3RoLG8mJih0LmM9UHQoVHIsWHIsMjUsZS5sZW5ndGgsMTUsMSkpLGg9cz8wOmUubGVuZ3RoLTE7cz9oPGUubGVuZ3RoOmg+PTA7aCs9cz8xOi0xKXtmb3IoZD1lW2hdLHc9cj09KGJlKCksSG4pP3M/WW8oZCxyKTphMihZbyhkLHIpKTpzP2EyKFlvKGQscikpOllvKGQsciksbyYmKHQuY1tkLnBdPXcuZ2MoKSksTT13LktjKCk7TS5PYigpOylDPXUoTS5QYigpLDExKSx0LmRbQy5wXT1rKys7QXMobix3KX19ZnVuY3Rpb24gUmNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihvPVh0KHllKHQuYi5LYygpLlBiKCkpKSxrPVh0KHllKGRjbihlLmIpKSkscj11ZChuYyh0LmEpLGstbikscz11ZChuYyhlLmEpLG4tbyksQz1MaShyLHMpLHVkKEMsMS8oay1vKSksdGhpcy5hPUMsdGhpcy5iPW5ldyBsZSxkPSEwLGg9dC5iLktjKCksaC5QYigpO2guT2IoKTspdz1YdCh5ZShoLlBiKCkpKSxkJiZ3LW4+d2N0JiYodGhpcy5iLkZjKG4pLGQ9ITEpLHRoaXMuYi5GYyh3KTtkJiZ0aGlzLmIuRmMobil9ZnVuY3Rpb24gc3ZuKHQpe3ZhciBlLG4scixzO2lmKGJ3bih0LHQubiksdC5kLmMubGVuZ3RoPjApe2ZvcihQOSh0LmMpO2w1dCh0LHUoSihuZXcgUyh0LmUuYSkpLDEyMSkpPHQuZS5hLmMubGVuZ3RoOyl7Zm9yKGU9WGZuKHQpLHM9ZS5lLmUtZS5kLmUtZS5hLGUuZS5qJiYocz0tcykscj1uZXcgUyh0LmUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTIxKSxuLmomJihuLmUrPXMpO1A5KHQuYyl9UDkodC5jKSxKNHQodCx1KEoobmV3IFModC5lLmEpKSwxMjEpKSxWbGUodCl9fWZ1bmN0aW9uIGF2bih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHM9dShBaSh0LmEsKGc0KCksTEcpKSwxNSkuS2MoKTtzLk9iKCk7KXN3aXRjaChyPXUocy5QYigpLDEwMSksbj11KEZlKHIuaiwwKSwxMTMpLmQuaixvPW5ldyBQdShyLmopLFhzKG8sbmV3IERYKSxlLmcpe2Nhc2UgMTpDc3QodCxvLG4sKEp2KCksaGIpLDEpO2JyZWFrO2Nhc2UgMDpoPWkybihvKSxDc3QodCxuZXcgS2QobywwLGgpLG4sKEp2KCksaGIpLDApLENzdCh0LG5ldyBLZChvLGgsby5jLmxlbmd0aCksbixoYiwxKX19ZnVuY3Rpb24gb3ZuKHQsZSl7UXgoKTt2YXIgbixyO2lmKG49RHJ0KHo4KCksZS50ZygpKSxuKXtpZihyPW4uaixFdCh0LDIzOSkpcmV0dXJuIGdybih1KHQsMzMpKT9OdShyLChYZigpLEpzKSl8fE51KHIscW4pOk51KHIsKFhmKCksSnMpKTtpZihFdCh0LDM1MikpcmV0dXJuIE51KHIsKFhmKCksSWQpKTtpZihFdCh0LDE4NikpcmV0dXJuIE51KHIsKFhmKCksJDIpKTtpZihFdCh0LDM1NCkpcmV0dXJuIE51KHIsKFhmKCksWGcpKX1yZXR1cm4hMH1mdW5jdGlvbiBjdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdztpZihzPW4sbz1zLmFrKCksVjAodC5lLG8pKXtpZihvLmhpKCkpe2ZvcihyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihkPXJbaF0seWkoZCxzKSYmaCE9ZSl0aHJvdyBydChuZXcgUG4oWEQpKX19ZWxzZSBmb3Iodz1hdSh0LmUuVGcoKSxvKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihkPXJbaF0sdy5ybChkLmFrKCkpJiZoIT1lKXRocm93IHJ0KG5ldyBQbihlTykpO3JldHVybiB1KHU0KHQsZSxuKSw3Mil9ZnVuY3Rpb24gamNlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIE9iamVjdCl0cnl7aWYoZS5fX2phdmEkZXhjZXB0aW9uPXQsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSE9LTEmJiRkb2MuZG9jdW1lbnRNb2RlPDkpcmV0dXJuO3ZhciBuPXQ7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7Y2F1c2U6e2dldDpmdW5jdGlvbigpe3ZhciByPW4uWmQoKTtyZXR1cm4gciYmci5YZCgpfX0sc3VwcHJlc3NlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uWWQoKX19fSl9Y2F0Y2h7fX1mdW5jdGlvbiAkY2UodCxlKXt2YXIgbixyLHMsbyxoO2lmKHI9ZT4+NSxlJj0zMSxyPj10LmQpcmV0dXJuIHQuZTwwPyhKcCgpLF91dCk6KEpwKCksUUUpO2lmKG89dC5kLXIscz1QdChUcixYciwyNSxvKzEsMTUsMSksWjBuKHMsbyx0LmEscixlKSx0LmU8MCl7Zm9yKG49MDtuPHImJnQuYVtuXT09MDtuKyspO2lmKG48cnx8ZT4wJiZ0LmFbbl08PDMyLWUpe2ZvcihuPTA7bjxvJiZzW25dPT0tMTtuKyspc1tuXT0wO249PW8mJisrbywrK3Nbbl19fXJldHVybiBoPW5ldyBLMyh0LmUsbyxzKSxPQyhoKSxofWZ1bmN0aW9uIHpjZSh0KXt2YXIgZSxuLHIscztyZXR1cm4gcz1rMSh0KSxuPW5ldyB3aShzKSxyPW5ldyBLcyhzKSxlPW5ldyBsZSxBcyhlLCghdC5kJiYodC5kPW5ldyBDbihXcyx0LDgsNSkpLHQuZCkpLEFzKGUsKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSksdShQbChwdShSaShuZXcgVG4obnVsbCxuZXcgX24oZSwxNikpLG4pLHIpLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSl9ZnVuY3Rpb24gcWNlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYoZD0odG8oKSx1KGUsNjYpLk9qKCkpLFYwKHQuZSxlKSl7aWYoZS5oaSgpJiZtcSh0LGUscixFdChlLDk5KSYmKHUoZSwxOCkuQmImWWEpIT0wKSl0aHJvdyBydChuZXcgUG4oWEQpKX1lbHNlIGZvcih3PWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkpdGhyb3cgcnQobmV3IFBuKGVPKSk7SkModCwkNHQodCxlLG4pLGQ/dShyLDcyKTpZZChlLHIpKX1mdW5jdGlvbiBWMCh0LGUpe3RvKCk7dmFyIG4scixzO3JldHVybiBlLiRqKCk/ITA6ZS5aaigpPT0tMj9lPT0oYTYoKSxXNil8fGU9PVU2fHxlPT1NZnR8fGU9PUlmdD8hMDoocz10LlRnKCksVmkocyxlKT49MD8hMToobj1FNCgoUnUoKSxtYSkscyxlKSxuPyhyPW4uWmooKSwocj4xfHxyPT0tMSkmJiR2KEVvKG1hLG4pKSE9Myk6ITApKTohMX1mdW5jdGlvbiB1dm4odCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gZD1Nbyh1KFN0KCghZS5iJiYoZS5iPW5ldyBDbihicixlLDQsNykpLGUuYiksMCksODIpKSx3PU1vKHUoU3QoKCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSwwKSw4MikpLHRzKGQpPT10cyh3KXx8Wm0odyxkKT9udWxsOihoPXJJKGUpLGg9PW4/cjoobz11KEpuKHQuYSxoKSwxMCksbyYmKHM9by5lLHMpP3M6bnVsbCkpfWZ1bmN0aW9uIGx2bih0LGUpe3ZhciBuO3N3aXRjaChuPXUoUSh0LChUZSgpLFpHKSksMjc2KSx3cihlLCJMYWJlbCBzaWRlIHNlbGVjdGlvbiAoIituKyIpIiwxKSxuLmcpe2Nhc2UgMDpuY2UodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgMTpuY2UodCwoamwoKSx3YikpO2JyZWFrO2Nhc2UgMjp2bGUodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgMzp2bGUodCwoamwoKSx3YikpO2JyZWFrO2Nhc2UgNDpaY2UodCwoamwoKSx1MCkpO2JyZWFrO2Nhc2UgNTpaY2UodCwoamwoKSx3YikpfW9yKGUpfWZ1bmN0aW9uIEQ1dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKHI9WUtlKG4sdC5sZW5ndGgpLGg9dFtyXSxoWzBdLms9PShHbigpLHhzKSlmb3Iobz1uSHQobixoLmxlbmd0aCksdz1lLmoscz0wO3M8dy5jLmxlbmd0aDtzKyspZD0oQW4ocyx3LmMubGVuZ3RoKSx1KHcuY1tzXSwxMSkpLChuP2Quaj09KGJlKCksSG4pOmQuaj09KGJlKCksQm4pKSYmamUoUmUoUShkLChzZSgpLGtPKSkpKSYmKGFoKHcscyx1KFEoaFtvXSwoc2UoKSxfaSkpLDExKSksbys9bj8xOi0xKX1mdW5jdGlvbiBodm4odCxlKXt2YXIgbixyLHMsbyxoO2g9bmV3IGxlLG49ZTtkbyBvPXUoSm4odC5iLG4pLDEyOCksby5CPW4uYyxvLkQ9bi5kLGguY1toLmMubGVuZ3RoXT1vLG49dShKbih0LmssbiksMTcpO3doaWxlKG4pO3JldHVybiByPShBbigwLGguYy5sZW5ndGgpLHUoaC5jWzBdLDEyOCkpLHIuaj0hMCxyLkE9dShyLmQuYS5lYygpLktjKCkuUGIoKSwxNykuYy5pLHM9dShGZShoLGguYy5sZW5ndGgtMSksMTI4KSxzLnE9ITAscy5DPXUocy5kLmEuZWMoKS5LYygpLlBiKCksMTcpLmQuaSxofWZ1bmN0aW9uIEhjZSh0KXtpZih0Lmc9PW51bGwpc3dpdGNoKHQucCl7Y2FzZSAwOnQuZz1wcm4odCk/KEZuKCksWUUpOihGbigpLEkyKTticmVhaztjYXNlIDE6dC5nPUVJKFlpbih0KSk7YnJlYWs7Y2FzZSAyOnQuZz1ESShuaW4odCkpO2JyZWFrO2Nhc2UgMzp0Lmc9amVuKHQpO2JyZWFrO2Nhc2UgNDp0Lmc9bmV3IEQzKFJlbih0KSk7YnJlYWs7Y2FzZSA2OnQuZz1nMigkZW4odCkpO2JyZWFrO2Nhc2UgNTp0Lmc9ZGUoaXJuKHQpKTticmVhaztjYXNlIDc6dC5nPWVFKFppbih0KSl9cmV0dXJuIHQuZ31mdW5jdGlvbiBPNXQodCl7aWYodC5uPT1udWxsKXN3aXRjaCh0LnApe2Nhc2UgMDp0Lm49YnJuKHQpPyhGbigpLFlFKTooRm4oKSxJMik7YnJlYWs7Y2FzZSAxOnQubj1FSShYaW4odCkpO2JyZWFrO2Nhc2UgMjp0Lm49REkocmluKHQpKTticmVhaztjYXNlIDM6dC5uPXFlbih0KTticmVhaztjYXNlIDQ6dC5uPW5ldyBEMyhIZW4odCkpO2JyZWFrO2Nhc2UgNjp0Lm49ZzIoemVuKHQpKTticmVhaztjYXNlIDU6dC5uPWRlKHNybih0KSk7YnJlYWs7Y2FzZSA3OnQubj1lRShRaW4odCkpfXJldHVybiB0Lm59ZnVuY3Rpb24gR2NlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBTKHQuYS5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwzMDcpLHIuZz0wLHIuaT0wLHIuZS5hLiRiKCk7Zm9yKHM9bmV3IFModC5hLmEpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwzMDcpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKGU9dShuLlBiKCksNTcpLGQ9ZS5jLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDU3KSxoLmEhPXImJihOcyhyLmUsaCksKytoLmEuZywrK2guYS5pKX1mdW5jdGlvbiBmdm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoZD1ZTSh0LmEsZS5iKSwhZCl0aHJvdyBydChuZXcgRm8oIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIG92ZXJsYXAgY2FsY3VsYXRpb24uIikpO2ZvcihoPSExLG89KHI9bmV3IHZDKG5ldyBnQyhuZXcgeSh0LmEuYSkuYSkuYiksbmV3IGcocikpO21NKG8uYS5hKTspaWYocz0obj13aihvLmEpLHUobi5jZCgpLDY1KSksTWNuKGUuYixzKSl0WWUodC5iLmEsZS5iLHMpLGg9ITA7ZWxzZSBpZihoKWJyZWFrfWZ1bmN0aW9uIGR2bih0KXt2YXIgZSxuLHIscyxvO3M9dShRKHQsKFRlKCksRjIpKSwyMSksbz11KFEodCxpViksMjEpLG49bmV3ICRlKHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxlPW5ldyB5byhuKSxzLkhjKChfbCgpLFh5KSkmJihyPXUoUSh0LHA3KSw4KSxvLkhjKChjbCgpLE03KSkmJihyLmE8PTAmJihyLmE9MjApLHIuYjw9MCYmKHIuYj0yMCkpLGUuYT1iLk1hdGgubWF4KG4uYSxyLmEpLGUuYj1iLk1hdGgubWF4KG4uYixyLmIpKSxheW4odCxuLGUpfWZ1bmN0aW9uIFZjZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7cz1lP25ldyBLWDpuZXcgWVgsbz0hMTtkbyBmb3Iobz0hMSxrPWU/YTIodC5iKTp0LmIsdz1rLktjKCk7dy5PYigpOylmb3IoZD11KHcuUGIoKSwyOSksRj1HdihkLmEpLGV8fG5ldyBtdihGKSxNPW5ldyBTKEYpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDEwKSxzLk1iKEMpJiYocj1DLG49dShRKEMsKHNlKCksTHcpKSwzMDUpLGg9ZT9uLmI6bi5rLG89ZnVlKHIsaCxlLCExKSk7d2hpbGUobyl9ZnVuY3Rpb24gZ3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkO2Zvcih3cihuLCJMb25nZXN0IHBhdGggbGF5ZXJpbmciLDEpLHQuYT1lLGQ9dC5hLmEsdC5iPVB0KFRyLFhyLDI1LGQuYy5sZW5ndGgsMTUsMSkscj0wLGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLHMucD1yLHQuYltyXT0tMSwrK3I7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLGRjZSh0LHMpO2QuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBwdm4odCxlKXt2YXIgbixyLHM7ZS5hPyhZTSh0LmIsZS5iKSx0LmFbZS5iLmldPXUoZ250KHQuYixlLmIpLDgxKSxuPXUoZG50KHQuYixlLmIpLDgxKSxuJiYodC5hW24uaV09ZS5iKSk6KHI9dShnbnQodC5iLGUuYiksODEpLHImJnI9PXQuYVtlLmIuaV0mJnIuZCYmci5kIT1lLmIuZCYmci5mLkZjKGUuYikscz11KGRudCh0LmIsZS5iKSw4MSkscyYmdC5hW3MuaV09PWUuYiYmcy5kJiZzLmQhPWUuYi5kJiZlLmIuZi5GYyhzKSxlbnQodC5iLGUuYikpfWZ1bmN0aW9uIFVjZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz10LmQsZD1YdCh5ZShRKHQsKFRlKCksVWcpKSkpLGQ8MCYmKGQ9MCxKdCh0LFVnLGQpKSxlLm8uYj1kLGg9Yi5NYXRoLmZsb29yKGQvMikscj1uZXcgTWMsRnMociwoYmUoKSxCbikpLFVvKHIsZSksci5uLmI9aCxzPW5ldyBNYyxGcyhzLEhuKSxVbyhzLGUpLHMubi5iPWgsc2EodCxyKSxuPW5ldyB6dixMbyhuLHQpLEp0KG4sX28sbnVsbCksRGEobixzKSxzYShuLG8pLHhtbihlLHQsbiksVGduKHQsbiksbn1mdW5jdGlvbiBidm4odCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoc2UoKSxHYykpLDIxKSxlPW5ldyBIcyxuLkhjKChvbygpLHZTKSkmJihSbChlLEltZSksUmwoZSxRQ3QpKSwobi5IYyhmNyl8fGplKFJlKFEodCwoVGUoKSxZbHQpKSkpKSYmKFJsKGUsUUN0KSxuLkhjKFY0KSYmUmwoZSxPbWUpKSxuLkhjKGJoKSYmUmwoZSxNbWUpLG4uSGMod1MpJiZSbChlLE5tZSksbi5IYyhqRykmJlJsKGUsRG1lKSxuLkhjKGw3KSYmUmwoZSxBbWUpLG4uSGMoaDcpJiZSbChlLExtZSksZX1mdW5jdGlvbiB2dm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO3JldHVybiByPXQuZCxvPWUuZCxkPXIrbyx3PXQuZSE9ZS5lPy0xOjEsZD09Mj8oQz1DYShQcyh0LmFbMF0sY28pLFBzKGUuYVswXSxjbykpLEY9U3IoQyksTT1Tcih6bShDLDMyKSksTT09MD9uZXcgTGcodyxGKTpuZXcgSzModywyLGN0KG90KFRyLDEpLFhyLDI1LDE1LFtGLE1dKSkpOihuPXQuYSxzPWUuYSxoPVB0KFRyLFhyLDI1LGQsMTUsMSksT3VuKG4scixzLG8saCksaz1uZXcgSzModyxkLGgpLE9DKGspLGspfWZ1bmN0aW9uIFdjZSh0LGUsbixyKXt2YXIgcyxvO2lmKGUpe2lmKHM9dC5hLnVlKG4uZCxlLmQpLHM9PTApcmV0dXJuIHIuZD1KMnQoZSxuLmUpLHIuYj0hMCxlO289czwwPzA6MSxlLmFbb109V2NlKHQsZS5hW29dLG4sciksQW0oZS5hW29dKSYmKEFtKGUuYVsxLW9dKT8oZS5iPSEwLGUuYVswXS5iPSExLGUuYVsxXS5iPSExKTpBbShlLmFbb10uYVtvXSk/ZT1ueihlLDEtbyk6QW0oZS5hW29dLmFbMS1vXSkmJihlPXVadChlLDEtbykpKX1lbHNlIHJldHVybiBuO3JldHVybiBlfWZ1bmN0aW9uIEtjZSh0LGUsbil7dmFyIHIscyxvLGg7cz10Lmkscj10Lm4saG10KHQsKEtmKCksc2MpLHMuYytyLmIsbiksaG10KHQsYWMscy5jK3MuYi1yLmMtblsyXSxuKSxoPXMuYi1yLmItci5jLG5bMF0+MCYmKG5bMF0rPXQuZCxoLT1uWzBdKSxuWzJdPjAmJihuWzJdKz10LmQsaC09blsyXSksbz1iLk1hdGgubWF4KDAsaCksblsxXT1iLk1hdGgubWF4KG5bMV0saCksaG10KHQsdHUscy5jK3IuYituWzBdLShuWzFdLWgpLzIsbiksZT09dHUmJih0LmMuYj1vLHQuYy5jPXMuYytyLmIrKG8taCkvMil9ZnVuY3Rpb24gWWNlKCl7dGhpcy5jPVB0KGlhLHZvLDI1LChiZSgpLGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmI9UHQoaWEsdm8sMjUsY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKS5sZW5ndGgsMTUsMSksdGhpcy5hPVB0KGlhLHZvLDI1LGN0KG90KFhhLDEpLHhjLDYxLDAsW1pvLE5uLEhuLG1yLEJuXSkubGVuZ3RoLDE1LDEpLHhidCh0aGlzLmMsc3MpLHhidCh0aGlzLmIsVHMpLHhidCh0aGlzLmEsVHMpfWZ1bmN0aW9uIGpjKHQsZSxuKXt2YXIgcixzLG8saDtpZihlPD1uPyhzPWUsbz1uKToocz1uLG89ZSkscj0wLHQuYj09bnVsbCl0LmI9UHQoVHIsWHIsMjUsMiwxNSwxKSx0LmJbMF09cyx0LmJbMV09byx0LmM9ITA7ZWxzZXtpZihyPXQuYi5sZW5ndGgsdC5iW3ItMV0rMT09cyl7dC5iW3ItMV09bztyZXR1cm59aD1QdChUcixYciwyNSxyKzIsMTUsMSksSWModC5iLDAsaCwwLHIpLHQuYj1oLHQuYltyLTFdPj1zJiYodC5jPSExLHQuYT0hMSksdC5iW3IrK109cyx0LmJbcl09byx0LmN8fGI0KHQpfX1mdW5jdGlvbiB3dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihrPWUuZCx0LmE9bmV3IFljKGsuYy5sZW5ndGgpLHQuYz1uZXcgQ3IsZD1uZXcgUyhrKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMDEpLG89bmV3IExJKG51bGwpLHVlKHQuYSxvKSxraSh0LmMsaCxvKTtmb3IodC5iPW5ldyBDcixTZ24odCxlKSxyPTA7cjxrLmMubGVuZ3RoLTE7cisrKWZvcih3PXUoRmUoZS5kLHIpLDEwMSkscz1yKzE7czxrLmMubGVuZ3RoO3MrKylvMm4odCx3LHUoRmUoZS5kLHMpLDEwMSksbil9ZnVuY3Rpb24gWGNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoIVM4KGUpKXtmb3Iodz1SYyhuLChFdChlLDE0KT91KGUsMTQpLmdjKCk6TjAoZS5LYygpKSkvdC5hfDApLHdyKHcsTTFlLDEpLGQ9bmV3IFdRLGg9MCxvPWUuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksODYpLGQ9TDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbZCxuZXcgQ3AocildKSksaDxyLmYuYiYmKGg9ci5mLmIpO2ZvcihzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODYpLEp0KHIsKGZjKCkseFYpLGgpO29yKHcpLFhjZSh0LGQsbil9fWZ1bmN0aW9uIG12bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihuPVRzLGQ9KEduKCksRHMpLHM9bmV3IFMoZS5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbz1yLmssbyE9RHMmJihoPXllKFEociwoc2UoKSx0OXQpKSksaD09bnVsbD8obj1iLk1hdGgubWF4KG4sMCksci5uLmI9bitNMnQodC5hLG8sZCkpOnIubi5iPShPbihoKSxoKSksdz1NMnQodC5hLG8sZCksci5uLmI8bit3K3IuZC5kJiYoci5uLmI9bit3K3IuZC5kKSxuPXIubi5iK3Iuby5iK3IuZC5hLGQ9b31mdW5jdGlvbiB5dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3Iobz1tNChlLCExLCExKSxrPXNEKG8pLE09WHQoeWUocWUoZSwoaV8oKSwkdXQpKSkpLHM9UmhlKGssTSt0LmEpLEM9bmV3IFZzdChzKSxMbyhDLGUpLGtpKHQuYixlLEMpLG4uY1tuLmMubGVuZ3RoXT1DLHc9KCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSxkPW5ldyBlcih3KTtkLmUhPWQuaS5nYygpOyloPXUoZHIoZCksMTM3KSxyPWJEKHQsaCwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1yO3JldHVybiBDfWZ1bmN0aW9uIFFjZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQztpZih0LmQmJnQuZC5sZyhzKSxvPXUocy5YYigwKSwzMyksaXNlKHQsbixvLCExKXx8KGg9dShzLlhiKHMuZ2MoKS0xKSwzMyksaXNlKHQscixoLCEwKSl8fEk0dCh0LHMpKXJldHVybiEwO2ZvcihDPXMuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDMzKSx3PWUuS2MoKTt3Lk9iKCk7KWlmKGQ9dSh3LlBiKCksMzMpLGRxKHQsayxkKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4dm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO0Y9ZS5jLmxlbmd0aCxNPShrPXQuWWcobiksdShrPj0wP3QuX2coaywhMSwhMCk6bHcodCxuLCExKSw1OCkpO3Q6Zm9yKG89TS5LYygpO28uT2IoKTspe2ZvcihzPXUoby5QYigpLDU2KSxDPTA7QzxGOysrQylpZihoPShBbihDLGUuYy5sZW5ndGgpLHUoZS5jW0NdLDcyKSksdz1oLmRkKCksZD1oLmFrKCkscj1zLmJoKGQsITEpLHc9PW51bGw/ciE9bnVsbDoheWkodyxyKSljb250aW51ZSB0O3JldHVybiBzfXJldHVybiBudWxsfWZ1bmN0aW9uIGt2bih0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3Iocz11KFJnKGUsKGJlKCksQm4pKS5LYygpLlBiKCksMTEpLG89dShSZyhlLEhuKS5LYygpLlBiKCksMTEpLGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKTtoLmUuYy5sZW5ndGghPTA7KXNhKHUoRmUoaC5lLDApLDE3KSxzKTtmb3IoO2guZy5jLmxlbmd0aCE9MDspRGEodShGZShoLmcsMCksMTcpLG8pfW58fEp0KGUsKHNlKCksbjEpLG51bGwpLHJ8fEp0KGUsKHNlKCksUmgpLG51bGwpfWZ1bmN0aW9uIG00KHQsZSxuKXt2YXIgcixzO2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MClyZXR1cm4gd3l0KHQpO2lmKHI9dShTdCgoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLDApLDIwMiksZSYmKHhyKCghci5hJiYoci5hPW5ldyBTcyhIaCxyLDUpKSxyLmEpKSxCOChyLDApLGo4KHIsMCksRjgociwwKSxSOChyLDApKSxuKWZvcihzPSghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSk7cy5pPjE7KWR5KHMscy5pLTEpO3JldHVybiByfWZ1bmN0aW9uIEV2bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih3cihlLCJDb21tZW50IHBvc3QtcHJvY2Vzc2luZyIsMSksbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHI9bmV3IGxlLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksdz11KFEoaCwoc2UoKSxONikpLDE1KSxuPXUoUShoLEw2KSwxNSksKHd8fG4pJiYoVDRuKGgsdyxuKSx3JiZBcyhyLHcpLG4mJkFzKHIsbikpO0FzKHMuYSxyKX1vcihlKX1mdW5jdGlvbiBaY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iobj1uZXcgUDMsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHc9ITAscj0wLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOylzd2l0Y2goaD11KEooZCksMTApLGguay5nKXtjYXNlIDQ6KytyO2Nhc2UgMTpRd3QobixoKTticmVhaztjYXNlIDA6RWduKGgsZSk7ZGVmYXVsdDpuLmI9PW4uY3x8enVlKG4scix3LCExLGUpLHc9ITEscj0wfW4uYj09bi5jfHx6dWUobixyLHcsITAsZSl9fWZ1bmN0aW9uIFR2bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihzPW5ldyBsZSxuPTA7bjw9dC5pO24rKylyPW5ldyBDaChlKSxyLnA9dC5pLW4scy5jW3MuYy5sZW5ndGhdPXI7Zm9yKGQ9bmV3IFModC5vKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksa28oaCx1KEZlKHMsdC5pLXQuZltoLnBdKSwyOSkpO2ZvcihvPW5ldyBTKHMpO28uYTxvLmMuYy5sZW5ndGg7KXc9dShKKG8pLDI5KSx3LmEuYy5sZW5ndGg9PTAmJl9DKG8pO2UuYi5jPVB0KFhuLEllLDEsMCw1LDEpLEFzKGUuYixzKX1mdW5jdGlvbiBONXQodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG49MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMTEpLEJ5dCh0LmIsdC5kW2gucF0pLHM9bmV3IFMxKGguYik7Vm8ocy5hKXx8Vm8ocy5iKTspcj11KFZvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksbz11YnQodCxoPT1yLmM/ci5kOnIuYyksbz50LmRbaC5wXSYmKG4rPXNtdCh0LmIsbykscXAodC5hLGRlKG8pKSk7Zm9yKDshTjkodC5hKTspRm10KHQuYix1KEZ4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIEpjZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89KCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkscz1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLCghci5hJiYoci5hPW5ldyBoZShucyxyLDEwLDExKSksci5hKS5pPT0wfHwobys9SmNlKHQsciwhMSkpO2lmKG4pZm9yKGg9dHMoZSk7aDspbys9KCFoLmEmJihoLmE9bmV3IGhlKG5zLGgsMTAsMTEpKSxoLmEpLmksaD10cyhoKTtyZXR1cm4gb31mdW5jdGlvbiBkeSh0LGUpe3ZhciBuLHIscyxvO3JldHVybiB0LmVqKCk/KHI9bnVsbCxzPXQuZmooKSx0LmlqKCkmJihyPXQua2oodC5waShlKSxudWxsKSksbj10LlppKDQsbz1yNih0LGUpLG51bGwsZSxzKSx0LmJqKCkmJm8hPW51bGwmJihyPXQuZGoobyxyKSkscj8oci5FaShuKSxyLkZpKCkpOnQuJGkobiksbyk6KG89cjYodCxlKSx0LmJqKCkmJm8hPW51bGwmJihyPXQuZGoobyxudWxsKSxyJiZyLkZpKCkpLG8pfWZ1bmN0aW9uIEN2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQztmb3Ioaz10LmEsZT1uZXcgcXMsdz0wLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDIyMiksQz0wLGU0KG4uYixuZXcgTGwpLGg9ZWkobi5iLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSwyMjIpLGUuYS5fYihvKSYmKHM9bi5jLGQ9by5jLEM8ZC5kK2QuYStrJiZDK3MuYStrPmQuZCYmKEM9ZC5kK2QuYStrKSk7bi5jLmQ9QyxlLmEuemMobixlKSx3PWIuTWF0aC5tYXgodyxuLmMuZCtuLmMuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gb28oKXtvbz1aLFJHPW5ldyBEbSgiQ09NTUVOVFMiLDApLGJoPW5ldyBEbSgiRVhURVJOQUxfUE9SVFMiLDEpLHZTPW5ldyBEbSgiSFlQRVJFREdFUyIsMiksakc9bmV3IERtKCJIWVBFUk5PREVTIiwzKSxmNz1uZXcgRG0oIk5PTl9GUkVFX1BPUlRTIiw0KSxWND1uZXcgRG0oIk5PUlRIX1NPVVRIX1BPUlRTIiw1KSx3Uz1uZXcgRG0oZDFlLDYpLGw3PW5ldyBEbSgiQ0VOVEVSX0xBQkVMUyIsNyksaDc9bmV3IERtKCJFTkRfTEFCRUxTIiw4KSwkRz1uZXcgRG0oIlBBUlRJVElPTlMiLDkpfWZ1bmN0aW9uIGd5KHQpe3ZhciBlLG4scixzLG87Zm9yKHM9bmV3IGxlLGU9bmV3IHlDKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSkscj1uZXcgYXIobHIoRzAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSw3OSksRXQoU3QoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSwxODYpfHwobz1Nbyh1KFN0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxlLmEuX2Iobyl8fChzLmNbcy5jLmxlbmd0aF09bykpO3JldHVybiBzfWZ1bmN0aW9uIF92bih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG89bmV3IHFzLGU9bmV3IHlDKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSkscz1uZXcgYXIobHIoRzAodCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSw3OSksRXQoU3QoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSwxODYpfHwoaD1Nbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSxlLmEuX2IoaCl8fChuPW8uYS56YyhoLG8pLG49PW51bGwpKTtyZXR1cm4gb31mdW5jdGlvbiBTdm4odCxlLG4scixzKXtyZXR1cm4gcjwwPyhyPXA0KHQscyxjdChvdChBZSwxKSx0ZSwyLDYsWyRhdCx6YXQscWF0LEhhdCxsNixHYXQsVmF0LFVhdCxXYXQsS2F0LFlhdCxYYXRdKSxlKSxyPDAmJihyPXA0KHQscyxjdChvdChBZSwxKSx0ZSwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLGw2LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSksZSkpLHI8MD8hMToobi5rPXIsITApKTpyPjA/KG4uaz1yLTEsITApOiExfWZ1bmN0aW9uIEF2bih0LGUsbixyLHMpe3JldHVybiByPDA/KHI9cDQodCxzLGN0KG90KEFlLDEpLHRlLDIsNixbJGF0LHphdCxxYXQsSGF0LGw2LEdhdCxWYXQsVWF0LFdhdCxLYXQsWWF0LFhhdF0pLGUpLHI8MCYmKHI9cDQodCxzLGN0KG90KEFlLDEpLHRlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsbDYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSxlKSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gTHZuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsaztpZihkPTMyLHI8MCl7aWYoZVswXT49dC5sZW5ndGh8fChkPWJhKHQsZVswXSksZCE9NDMmJmQhPTQ1KXx8KCsrZVswXSxyPXJxKHQsZSkscjwwKSlyZXR1cm4hMTtkPT00NSYmKHI9LXIpfXJldHVybiBkPT0zMiYmZVswXS1uPT0yJiZzLmI9PTImJih3PW5ldyBfUixrPXcucS5nZXRGdWxsWWVhcigpLW5iK25iLTgwLGg9ayUxMDAsby5hPXI9PWgscis9KGsvMTAwfDApKjEwMCsocjxoPzEwMDowKSksby5wPXIsITB9ZnVuY3Rpb24gdHVlKHQsZSl7dmFyIG4scixzLG8saDt0cyh0KSYmKGg9dShRKGUsKFRlKCksRjIpKSwxNzQpLEd0KHFlKHQsb3MpKT09PUd0KChvYSgpLHliKSkmJmJvKHQsb3MsSDEpLHI9KEltKCksbmV3IFNtKHRzKHQpKSksbz1uZXcgcm50KHRzKHQpP25ldyBTbSh0cyh0KSk6bnVsbCx0KSxzPWxoZShyLG8sITEsITApLHBmKGgsKF9sKCksWHkpKSxuPXUoUShlLHA3KSw4KSxuLmE9Yi5NYXRoLm1heChzLmEsbi5hKSxuLmI9Yi5NYXRoLm1heChzLmIsbi5iKSl9ZnVuY3Rpb24gTXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKGg9dShRKHQsKHNlKCksTmx0KSksMTUpLktjKCk7aC5PYigpOyl7c3dpdGNoKG89dShoLlBiKCksMTApLHUoUShvLChUZSgpLGN1KSksMTYzKS5nKXtjYXNlIDI6a28obyxlKTticmVhaztjYXNlIDQ6a28obyxuKX1mb3Iocz1uZXcgYXIobHIoejAobykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksIShyLmMmJnIuZCkmJihkPSFyLmQsdz11KFEocixuOXQpLDExKSxkP3NhKHIsdyk6RGEocix3KSl9fWZ1bmN0aW9uIGZxKCl7ZnE9WixsbHQ9bmV3IFJ4KFJxLDAsKGJlKCksTm4pLE5uKSxkbHQ9bmV3IFJ4KGtvdCwxLG1yLG1yKSx1bHQ9bmV3IFJ4KHhvdCwyLEhuLEhuKSxibHQ9bmV3IFJ4KEVvdCwzLEJuLEJuKSxmbHQ9bmV3IFJ4KCJOT1JUSF9XRVNUX0NPUk5FUiIsNCxCbixObiksaGx0PW5ldyBSeCgiTk9SVEhfRUFTVF9DT1JORVIiLDUsTm4sSG4pLHBsdD1uZXcgUngoIlNPVVRIX1dFU1RfQ09STkVSIiw2LG1yLEJuKSxnbHQ9bmV3IFJ4KCJTT1VUSF9FQVNUX0NPUk5FUiIsNyxIbixtcil9ZnVuY3Rpb24geTQoKXt5ND1aLHlTdD1jdChvdChMYiwxKSxhb3QsMjUsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjhlMyx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSksYi5NYXRoLnBvdygyLC02NSl9ZnVuY3Rpb24gZXVlKHQsZSl7dmFyIG4scixzLG8saDtpZih0LmMubGVuZ3RoPT0wKXJldHVybiBuZXcgbGEoZGUoMCksZGUoMCkpO2ZvcihuPShBbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDExKSkuaixoPTAsbz1lLmcscj1lLmcrMTtoPHQuYy5sZW5ndGgtMSYmbi5nPG87KSsraCxuPShBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDExKSkuajtmb3Iocz1oO3M8dC5jLmxlbmd0aC0xJiZuLmc8cjspKytzLG49KEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMTEpKS5qO3JldHVybiBuZXcgbGEoZGUoaCksZGUocykpfWZ1bmN0aW9uIEl2bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG89ZS5jLmxlbmd0aCxoPShBbihuLGUuYy5sZW5ndGgpLHUoZS5jW25dLDI4NikpLGQ9aC5hLm8uYSxNPWguYyxGPTAsaz1oLmM7azw9aC5mO2srKyl7aWYoZDw9dC5hW2tdKXJldHVybiBrO2ZvcihDPXQuYVtrXSx3PW51bGwscz1uKzE7czxvO3MrKylyPShBbihzLGUuYy5sZW5ndGgpLHUoZS5jW3NdLDI4NikpLHIuYzw9ayYmci5mPj1rJiYodz1yKTt3JiYoQz1iLk1hdGgubWF4KEMsdy5hLm8uYSkpLEM+RiYmKE09ayxGPUMpfXJldHVybiBNfWZ1bmN0aW9uIER2bih0LGUsbil7dmFyIHIscyxvO2lmKHQuZT1uLHQuZD0wLHQuYj0wLHQuZj0xLHQuaT1lLCh0LmUmMTYpPT0xNiYmKHQuaT13d24odC5pKSksdC5qPXQuaS5sZW5ndGgsZmkodCksbz1zdyh0KSx0LmQhPXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUGRlKSkpKTtpZih0Lmcpe2ZvcihyPTA7cjx0LmcuYS5jLmxlbmd0aDtyKyspaWYocz11KFJ2KHQuZyxyKSw1ODQpLHQuZjw9cy5hKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxGZGUpKSkpO3QuZy5hLmM9UHQoWG4sSWUsMSwwLDUsMSl9cmV0dXJuIG99ZnVuY3Rpb24gT3ZuKHQsZSl7dmFyIG4scixzO2lmKGU9PW51bGwpe2ZvcihyPSghdC5hJiYodC5hPW5ldyBoZShlZyx0LDksNSkpLG5ldyBlcih0LmEpKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNjc4KSxzPW4uYywocz8/bi56Yik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj0oIXQuYSYmKHQuYT1uZXcgaGUoZWcsdCw5LDUpKSxuZXcgZXIodC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDY3OCksaG4oZSwocz1uLmMscz8/bi56YikpKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEpzdCh0LGUpe3ZhciBuO3N3aXRjaChuPW51bGwsZS5nKXtjYXNlIDE6dC5lLlhlKChjaSgpLG9mdCkpJiYobj11KHQuZS5XZShvZnQpLDI0OSkpO2JyZWFrO2Nhc2UgMzp0LmUuWGUoKGNpKCksY2Z0KSkmJihuPXUodC5lLldlKGNmdCksMjQ5KSk7YnJlYWs7Y2FzZSAyOnQuZS5YZSgoY2koKSxhZnQpKSYmKG49dSh0LmUuV2UoYWZ0KSwyNDkpKTticmVhaztjYXNlIDQ6dC5lLlhlKChjaSgpLHVmdCkpJiYobj11KHQuZS5XZSh1ZnQpLDI0OSkpfXJldHVybiFuJiYobj11KHQuZS5XZSgoY2koKSxRU3QpKSwyNDkpKSxufWZ1bmN0aW9uIG51ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihlLnA9MSxvPWUuYyxNPWl3KGUsKHNvKCksZXUpKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksaz1yLmQuaSxlIT1rJiYoaD1rLmMsaC5wPD1vLnAmJihkPW8ucCsxLGQ9PW4uYi5jLmxlbmd0aD8odz1uZXcgQ2gobiksdy5wPWQsdWUobi5iLHcpLGtvKGssdykpOih3PXUoRmUobi5iLGQpLDI5KSxrbyhrLHcpKSxudWUodCxrLG4pKSl9ZnVuY3Rpb24gcnVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7Zm9yKHM9bixvPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwzMyksYm8oaCwoYXkoKSxfViksZGUocysrKSksdz1neShoKSxyPWIuTWF0aC5hdGFuMihoLmoraC5mLzIsaC5pK2guZy8yKSxyKz1yPDA/STQ6MCxyPC43ODUzOTgxNjMzOTc0NDgzfHxyPkYxZT9Ycyh3LHQuYik6cjw9RjFlJiZyPkIxZT9Ycyh3LHQuZCk6cjw9QjFlJiZyPlIxZT9Ycyh3LHQuYyk6cjw9UjFlJiZYcyh3LHQuYSksbz1ydWUodCx3LG8pO3JldHVybiBzfWZ1bmN0aW9uIEpwKCl7SnA9Wjt2YXIgdDtmb3IoR0g9bmV3IExnKDEsMSksU3V0PW5ldyBMZygxLDEwKSxRRT1uZXcgTGcoMCwwKSxfdXQ9bmV3IExnKC0xLDEpLHdFdD1jdChvdChCNCwxKSx0ZSw5MSwwLFtRRSxHSCxuZXcgTGcoMSwyKSxuZXcgTGcoMSwzKSxuZXcgTGcoMSw0KSxuZXcgTGcoMSw1KSxuZXcgTGcoMSw2KSxuZXcgTGcoMSw3KSxuZXcgTGcoMSw4KSxuZXcgTGcoMSw5KSxTdXRdKSxWSD1QdChCNCx0ZSw5MSwzMiwwLDEpLHQ9MDt0PFZILmxlbmd0aDt0KyspVkhbdF09S0koTTAoMSx0KSl9ZnVuY3Rpb24gTnZuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsaztmb3IoZD0hajkoUmkodC5PYygpLG5ldyBadChuZXcgUFkpKSkuc2QoKFdiKCksSkUpKSxoPXQsbz09KGFvKCksWjApJiYoaD1FdChoLDE1Mik/VngodShoLDE1MikpOkV0KGgsMTMxKT91KGgsMTMxKS5hOkV0KGgsNTQpP25ldyBtdihoKTpuZXcgTW0oaCkpLGs9aC5LYygpO2suT2IoKTspdz11KGsuUGIoKSw3MCksdy5uLmE9ZS5hLGQ/dy5uLmI9ZS5iKyhyLmItdy5vLmIpLzI6cz93Lm4uYj1lLmI6dy5uLmI9ZS5iK3IuYi13Lm8uYixlLmErPXcuby5hK259ZnVuY3Rpb24gaXVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iocz0oci5jK3IuYSkvMixfaChlLmopLG5pKGUuaixzKSxfaChuLmUpLG5pKG4uZSxzKSxrPW5ldyB1SHQsZD1uZXcgUyh0LmYpO2QuYTxkLmMuYy5sZW5ndGg7KW89dShKKGQpLDEyOSksdz1vLmEsRXN0KGssZSx3KSxFc3QoayxuLHcpO2ZvcihoPW5ldyBTKHQuayk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTI5KSx3PW8uYixFc3QoayxlLHcpLEVzdChrLG4sdyk7cmV0dXJuIGsuYis9MixrLmErPVJYdChlLHQucSksay5hKz1SWHQodC5xLG4pLGt9ZnVuY3Rpb24gc3VlKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKCFTOChlKSl7Zm9yKGQ9UmMobiwoRXQoZSwxNCk/dShlLDE0KS5nYygpOk4wKGUuS2MoKSkpL3QuYXwwKSx3cihkLE0xZSwxKSxoPW5ldyAkRixvPW51bGwscz1lLktjKCk7cy5PYigpOylyPXUocy5QYigpLDg2KSxoPUwxKGN0KG90KEIxLDEpLEllLDIwLDAsW2gsbmV3IENwKHIpXSkpLG8mJihKdChvLChmYygpLEptZSksciksSnQocixTaHQsbyksenJ0KHIpPT16cnQobykmJihKdChvLEFodCxyKSxKdChyLHlWLG8pKSksbz1yO29yKGQpLHN1ZSh0LGgsbil9fWZ1bmN0aW9uIGF1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj10LmksZT10Lm4sZD1uLmQsdC5mPT0od3UoKSx1Yik/ZCs9KG4uYS10LmUuYikvMjp0LmY9PXlmJiYoZCs9bi5hLXQuZS5iKSxzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxODEpLGg9ci5yZigpLG89bmV3IFRhLG8uYj1kLGQrPWguYit0LmEsdC5iLmcpe2Nhc2UgMDpvLmE9bi5jK2UuYjticmVhaztjYXNlIDE6by5hPW4uYytlLmIrKG4uYi1oLmEpLzI7YnJlYWs7Y2FzZSAyOm8uYT1uLmMrbi5iLWUuYy1oLmF9ci50ZihvKX19ZnVuY3Rpb24gb3VlKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihuPXQuaSxlPXQubixkPW4uYyx0LmI9PShYdSgpLGNiKT9kKz0obi5iLXQuZS5hKS8yOnQuYj09bWYmJihkKz1uLmItdC5lLmEpLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOyl7c3dpdGNoKHI9dShKKHMpLDE4MSksaD1yLnJmKCksbz1uZXcgVGEsby5hPWQsZCs9aC5hK3QuYSx0LmYuZyl7Y2FzZSAwOm8uYj1uLmQrZS5kO2JyZWFrO2Nhc2UgMTpvLmI9bi5kK2UuZCsobi5hLWguYikvMjticmVhaztjYXNlIDI6by5iPW4uZCtuLmEtZS5hLWguYn1yLnRmKG8pfX1mdW5jdGlvbiBQdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtDPW4uYS5jLGg9bi5hLmMrbi5hLmIsbz11KEpuKG4uYyxlKSw0NTkpLEg9by5mLFY9by5hLHc9bmV3ICRlKEMsSCksTT1uZXcgJGUoaCxWKSxzPUMsbi5wfHwocys9dC5jKSxzKz1uLkYrbi52KnQuYixrPW5ldyAkZShzLEgpLEY9bmV3ICRlKHMsViksekMoZS5hLGN0KG90KFVzLDEpLHRlLDgsMCxbdyxrXSkpLGQ9bi5kLmEuZ2MoKT4xLGQmJihyPW5ldyAkZShzLG4uYiksbmkoZS5hLHIpKSx6QyhlLmEsY3Qob3QoVXMsMSksdGUsOCwwLFtGLE1dKSl9ZnVuY3Rpb24gY3VlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyx2SCksIkVMSyBSYW5kb21pemVyIiksJ0Rpc3RyaWJ1dGVzIHRoZSBub2RlcyByYW5kb21seSBvbiB0aGUgcGxhbmUsIGxlYWRpbmcgdG8gdmVyeSBvYmZ1c2NhdGluZyBsYXlvdXRzLiBDYW4gYmUgdXNlZnVsIHRvIGRlbW9uc3RyYXRlIHRoZSBwb3dlciBvZiAicmVhbCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IHpaKSkpLHhlKHQsdkgsd3csQUF0KSx4ZSh0LHZILGt5LDE1KSx4ZSh0LHZILEhxLGRlKDApKSx4ZSh0LHZILGI2LEJFKX1mdW5jdGlvbiBQNXQoKXtQNXQ9Wjt2YXIgdCxlLG4scixzLG87Zm9yKGxBPVB0KEh1LE40LDI1LDI1NSwxNSwxKSx1VT1QdChtaCx2ZCwyNSwxNiwxNSwxKSxlPTA7ZTwyNTU7ZSsrKWxBW2VdPS0xO2ZvcihuPTU3O24+PTQ4O24tLSlsQVtuXT1uLTQ4PDwyND4+MjQ7Zm9yKHI9NzA7cj49NjU7ci0tKWxBW3JdPXItNjUrMTA8PDI0Pj4yNDtmb3Iocz0xMDI7cz49OTc7cy0tKWxBW3NdPXMtOTcrMTA8PDI0Pj4yNDtmb3Iobz0wO288MTA7bysrKXVVW29dPTQ4K28mbXM7Zm9yKHQ9MTA7dDw9MTU7dCsrKXVVW3RdPTY1K3QtMTAmbXN9ZnVuY3Rpb24gZHEodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7cmV0dXJuIGQ9ZS5pLXQuZy8yLHc9bi5pLXQuZy8yLGs9ZS5qLXQuZy8yLEM9bi5qLXQuZy8yLG89ZS5nK3QuZy8yLGg9bi5nK3QuZy8yLHI9ZS5mK3QuZy8yLHM9bi5mK3QuZy8yLGQ8dytoJiZ3PGQmJms8QytzJiZDPGt8fHc8ZCtvJiZkPHcmJkM8aytyJiZrPEN8fGQ8dytoJiZ3PGQmJms8QyYmQzxrK3I/ITA6dzxkK28mJmQ8dyYmazxDK3MmJkM8a31mdW5jdGlvbiBGdm4odCl7dmFyIGUsbixyLHMsbztzPXUoUSh0LChUZSgpLEYyKSksMjEpLG89dShRKHQsaVYpLDIxKSxuPW5ldyAkZSh0LmYuYSt0LmQuYit0LmQuYyx0LmYuYit0LmQuZCt0LmQuYSksZT1uZXcgeW8obikscy5IYygoX2woKSxYeSkpJiYocj11KFEodCxwNyksOCksby5IYygoY2woKSxNNykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSxlLmE9Yi5NYXRoLm1heChuLmEsci5hKSxlLmI9Yi5NYXRoLm1heChuLmIsci5iKSksamUoUmUoUSh0LFpsdCkpKXx8c3luKHQsbixlKX1mdW5jdGlvbiBCdm4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1ZbyhlLChiZSgpLG1yKSkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTEpLG49dShRKHIsKHNlKCksWnUpKSwxMCksbiYmdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLC4xKSx0LmlbZS5wXS5kKSx0Lmlbbi5wXS5hKSk7Zm9yKHM9WW8oZSxObikuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLG49dShRKHIsKHNlKCksWnUpKSwxMCksbiYmdmYob2YoYWYoY2Yoc2YobmV3IEVoLDApLC4xKSx0Lmlbbi5wXS5kKSx0LmlbZS5wXS5hKSl9ZnVuY3Rpb24gdGF0KHQpe3ZhciBlLG4scixzLG8saDtpZighdC5jKXtpZihoPW5ldyBueCxlPWFBLG89ZS5hLnpjKHQsZSksbz09bnVsbCl7Zm9yKHI9bmV3IGVyKExjKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLHM9d3EobiksRXQocyw4OCkmJnJzKGgsdGF0KHUocywyNikpKSxNcihoLG4pO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1SbG4oaCksZXkoaCksdC5jPW5ldyBxMygodShTdChXdCgoanAoKSxMbikubyksMTUpLDE4KSxoLmkpLGguZykscmwodCkuYiY9LTMzfXJldHVybiB0LmN9ZnVuY3Rpb24gRjV0KHQpe3ZhciBlO2lmKHQuYyE9MTApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTtzd2l0Y2goZT10LmEsZSl7Y2FzZSAxMTA6ZT0xMDticmVhaztjYXNlIDExNDplPTEzO2JyZWFrO2Nhc2UgMTE2OmU9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfXJldHVybiBlfWZ1bmN0aW9uIHV1ZSh0KXt2YXIgZSxuLHIscyxvO2lmKHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApcmV0dXJuIjAiO2lmKHQuaD09SUQmJnQubT09MCYmdC5sPT0wKXJldHVybiItOTIyMzM3MjAzNjg1NDc3NTgwOCI7aWYodC5oPj4xOSlyZXR1cm4iLSIrdXVlKFk4KHQpKTtmb3Iobj10LHI9IiI7IShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKTspe2lmKHM9T3J0KE5xKSxuPWR4dChuLHMsITApLGU9IiIreEh0KG9iKSwhKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApKWZvcihvPTktZS5sZW5ndGg7bz4wO28tLSllPSIwIitlO3I9ZStyfXJldHVybiByfWZ1bmN0aW9uIFJ2bigpe2lmKCFPYmplY3QuY3JlYXRlfHwhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuITE7dmFyIHQ9Il9fcHJvdG9fXyIsZT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGVbdF0hPT12b2lkIDApcmV0dXJuITE7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7cmV0dXJuIShuLmxlbmd0aCE9MHx8KGVbdF09NDIsZVt0XSE9PTQyKXx8T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubGVuZ3RoPT0wKX1mdW5jdGlvbiBqdm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9ITEsbj0wLHM9bmV3IFModC5kLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksci5wPW4rKyxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLCFlJiYhUzgoejAobykpJiYoZT0hMCk7ZD1qaSgoYW8oKSxjMCksY3Qob3QoV1MsMSksYWUsMTAzLDAsW2poLGtmXSkpLGV8fChwZihkLFowKSxwZihkLFEwKSksdC5hPW5ldyB1ZWUoZCksWXUodC5mKSxZdSh0LmIpLFl1KHQuZSksWXUodC5nKX1mdW5jdGlvbiAkdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3Iocj1uLmMscz1uLmQsZD1UMShlLmMpLHc9VDEoZS5kKSxyPT1lLmM/KGQ9azV0KHQsZCxzKSx3PWJhZShlLmQpKTooZD1iYWUoZS5jKSx3PWs1dCh0LHcscykpLGs9bmV3IHlSKGUuYSksaHMoayxkLGsuYSxrLmEuYSksaHMoayx3LGsuYy5iLGsuYyksaD1lLmM9PXIsTT1uZXcgdHF0LG89MDtvPGsuYi0xOysrbylDPW5ldyBsYSh1KFFmKGssbyksOCksdShRZihrLG8rMSksOCkpLGgmJm89PTB8fCFoJiZvPT1rLmItMj9NLmI9Qzp1ZShNLmEsQyk7cmV0dXJuIE19ZnVuY3Rpb24genZuKHQsZSl7dmFyIG4scixzLG87aWYobz10LmouZy1lLmouZyxvIT0wKXJldHVybiBvO2lmKG49dShRKHQsKFRlKCksV2cpKSwxOSkscj11KFEoZSxXZyksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpcmV0dXJuIHM7c3dpdGNoKHQuai5nKXtjYXNlIDE6cmV0dXJuIExzKHQubi5hLGUubi5hKTtjYXNlIDI6cmV0dXJuIExzKHQubi5iLGUubi5iKTtjYXNlIDM6cmV0dXJuIExzKGUubi5hLHQubi5hKTtjYXNlIDQ6cmV0dXJuIExzKGUubi5iLHQubi5iKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gQjV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYoTjAoKEdNKCksbmV3IGFyKGxyKHowKGUpLmEuS2MoKSxuZXcgeikpKSk+PXQuYXx8IWs0dChlLG4pKXJldHVybi0xO2lmKFM4KHUoci5LYihlKSwyMCkpKXJldHVybiAxO2ZvcihzPTAsaD11KHIuS2IoZSksMjApLktjKCk7aC5PYigpOylpZihvPXUoaC5QYigpLDE3KSx3PW8uYy5pPT1lP28uZC5pOm8uYy5pLGQ9QjV0KHQsdyxuLHIpLGQ9PS0xfHwocz1iLk1hdGgubWF4KHMsZCkscz50LmMtMSkpcmV0dXJuLTE7cmV0dXJuIHMrMX1mdW5jdGlvbiBsdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoR3QoZSk9PT1HdCh0KSlyZXR1cm4hMDtpZighRXQoZSwxNSl8fChyPXUoZSwxNSksZD10LmdjKCksci5nYygpIT1kKSlyZXR1cm4hMTtpZihoPXIuS2MoKSx0Lm5pKCkpe2ZvcihuPTA7bjxkOysrbilpZihzPXQua2kobiksbz1oLlBiKCkscz09bnVsbD9vIT1udWxsOiF5aShzLG8pKXJldHVybiExfWVsc2UgZm9yKG49MDtuPGQ7KytuKWlmKHM9dC5raShuKSxvPWguUGIoKSxHdChzKSE9PUd0KG8pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGh1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZih0LmY+MCl7aWYodC5xaigpLGUhPW51bGwpe2ZvcihvPTA7bzx0LmQubGVuZ3RoOysrbylpZihuPXQuZFtvXSxuKXtmb3Iocj11KG4uZywzNjcpLGQ9bi5pLGg9MDtoPGQ7KytoKWlmKHM9cltoXSx5aShlLHMuZGQoKSkpcmV0dXJuITB9fWVsc2UgZm9yKG89MDtvPHQuZC5sZW5ndGg7KytvKWlmKG49dC5kW29dLG4pe2ZvcihyPXUobi5nLDM2NyksZD1uLmksaD0wO2g8ZDsrK2gpaWYocz1yW2hdLEd0KGUpPT09R3Qocy5kZCgpKSlyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gcXZuKHQsZSxuKXt2YXIgcixzLG8saDt3cihuLCJPcnRob2dvbmFsbHkgcm91dGluZyBoaWVyYXJjaGljYWwgcG9ydCBlZGdlcyIsMSksdC5hPTAscj1NeW4oZSksTjNuKGUscikscDNuKHQsZSxyKSxPNG4oZSkscz11KFEoZSwoVGUoKSxvcykpLDk4KSxvPWUuYixjaGUoKEFuKDAsby5jLmxlbmd0aCksdShvLmNbMF0sMjkpKSxzLGUpLGNoZSh1KEZlKG8sby5jLmxlbmd0aC0xKSwyOSkscyxlKSxoPWUuYix5bGUoKEFuKDAsaC5jLmxlbmd0aCksdShoLmNbMF0sMjkpKSkseWxlKHUoRmUoaCxoLmMubGVuZ3RoLTEpLDI5KSksb3Iobil9ZnVuY3Rpb24gUjV0KHQpe3N3aXRjaCh0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LTQ4PDwyND4+MjQ7Y2FzZSA5NzpjYXNlIDk4OmNhc2UgOTk6Y2FzZSAxMDA6Y2FzZSAxMDE6Y2FzZSAxMDI6cmV0dXJuIHQtOTcrMTA8PDI0Pj4yNDtjYXNlIDY1OmNhc2UgNjY6Y2FzZSA2NzpjYXNlIDY4OmNhc2UgNjk6Y2FzZSA3MDpyZXR1cm4gdC02NSsxMDw8MjQ+PjI0O2RlZmF1bHQ6dGhyb3cgcnQobmV3IG9kKCJJbnZhbGlkIGhleGFkZWNpbWFsIikpfX1mdW5jdGlvbiBIdm4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJQcm9jZXNzb3Igb3JkZXIgbm9kZXMiLDIpLHQuYT1YdCh5ZShRKGUsKGh3KCksb190KSkpKSxzPW5ldyBRaSxoPWVpKGUuYiwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksODYpLGplKFJlKFEobywoZmMoKSxXeSkpKSkmJmhzKHMsbyxzLmMuYixzLmMpO3I9KFFuKHMuYiE9MCksdShzLmEuYS5jLDg2KSksTWxlKHQsciksIW4uYiYmaWl0KG4sMSkscTV0KHQsciwwLVh0KHllKFEociwoZmMoKSx4VikpKSkvMiwwKSwhbi5iJiZpaXQobiwxKSxvcihuKX1mdW5jdGlvbiBncSgpe2dxPVosUUV0PW5ldyBqMygiU1BJUkFMIiwwKSxXRXQ9bmV3IGozKCJMSU5FX0JZX0xJTkUiLDEpLEtFdD1uZXcgajMoIk1BTkhBVFRBTiIsMiksVUV0PW5ldyBqMygiSklUVEVSIiwzKSxPdXQ9bmV3IGozKCJRVUFEUkFOVFNfTElORV9CWV9MSU5FIiw0KSxYRXQ9bmV3IGozKCJRVUFEUkFOVFNfTUFOSEFUVEFOIiw1KSxZRXQ9bmV3IGozKCJRVUFEUkFOVFNfSklUVEVSIiw2KSxWRXQ9bmV3IGozKCJDT01CSU5FX0xJTkVfQllfTElORV9NQU5IQVRUQU4iLDcpLEdFdD1uZXcgajMoIkNPTUJJTkVfSklUVEVSX01BTkhBVFRBTiIsOCl9ZnVuY3Rpb24gZnVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iodz1rc3QodCxuKSxrPWtzdChlLG4pLHM9ITE7dyYmayYmKHJ8fGpmbih3LGssbikpOyloPWtzdCh3LG4pLGQ9a3N0KGssbiksdkkoZSksdkkodCksbz13LmMsX2F0KHcsITEpLF9hdChrLCExKSxuPyhveShlLGsucCxvKSxlLnA9ay5wLG95KHQsdy5wKzEsbyksdC5wPXcucCk6KG95KHQsdy5wLG8pLHQucD13LnAsb3koZSxrLnArMSxvKSxlLnA9ay5wKSxrbyh3LG51bGwpLGtvKGssbnVsbCksdz1oLGs9ZCxzPSEwO3JldHVybiBzfWZ1bmN0aW9uIEd2bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3O2ZvcihzPSExLG89ITEsZD1uZXcgUyhyLmopO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDExKSxHdChRKGgsKHNlKCksX2kpKSk9PT1HdChuKSYmKGguZy5jLmxlbmd0aD09MD9oLmUuYy5sZW5ndGg9PTB8fChzPSEwKTpvPSEwKTtyZXR1cm4gdz0wLHMmJnNebz93PW4uaj09KGJlKCksTm4pPy10LmVbci5jLnBdW3IucF06ZS10LmVbci5jLnBdW3IucF06byYmc15vP3c9dC5lW3IuYy5wXVtyLnBdKzE6cyYmbyYmKHc9bi5qPT0oYmUoKSxObik/MDplLzIpLHd9ZnVuY3Rpb24gZWF0KHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsayxDO2Zvcih3PTAsZSE9bnVsbCYmKHdePUJnKGUudG9Mb3dlckNhc2UoKSkpLG4hPW51bGwmJih3Xj1CZyhuKSksciE9bnVsbCYmKHdePUJnKHIpKSxoIT1udWxsJiYod149QmcoaCkpLGQhPW51bGwmJih3Xj1CZyhkKSksaz0wLEM9by5sZW5ndGg7azxDO2srKyl3Xj1CZyhvW2tdKTt0P3d8PTI1Njp3Jj0tMjU3LHM/d3w9MTY6dyY9LTE3LHRoaXMuZj13LHRoaXMuaT1lPT1udWxsP251bGw6KE9uKGUpLGUpLHRoaXMuYT1uLHRoaXMuZD1yLHRoaXMuaj1vLHRoaXMuZz1oLHRoaXMuZT1kfWZ1bmN0aW9uIGo1dCh0LGUsbil7dmFyIHIscztzd2l0Y2gocz1udWxsLGUuZyl7Y2FzZSAxOnM9KEJ1KCksRDd0KTticmVhaztjYXNlIDI6cz0oQnUoKSxON3QpfXN3aXRjaChyPW51bGwsbi5nKXtjYXNlIDE6cj0oQnUoKSxPN3QpO2JyZWFrO2Nhc2UgMjpyPShCdSgpLEk3dCk7YnJlYWs7Y2FzZSAzOnI9KEJ1KCksUDd0KTticmVhaztjYXNlIDQ6cj0oQnUoKSxGN3QpfXJldHVybiBzJiZyP094KHQuaixuZXcgYjkobmV3IHdsKGN0KG90KFk1biwxKSxJZSwxNjksMCxbdShBcihzKSwxNjkpLHUoQXIociksMTY5KV0pKSkpOih2bigpLHZuKCksaW8pfWZ1bmN0aW9uIFZ2bih0KXt2YXIgZSxuLHI7c3dpdGNoKGU9dShRKHQsKFRlKCkscDcpKSw4KSxKdCh0LHA3LG5ldyAkZShlLmIsZS5hKSksdShRKHQsTGQpLDI0OCkuZyl7Y2FzZSAxOkp0KHQsTGQsKFFkKCksRlYpKTticmVhaztjYXNlIDI6SnQodCxMZCwoUWQoKSxOVikpO2JyZWFrO2Nhc2UgMzpKdCh0LExkLChRZCgpLCRPKSk7YnJlYWs7Y2FzZSA0Okp0KHQsTGQsKFFkKCksek8pKX0odC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoSHkpJiYobj11KFEodCxIeSksOCkscj1uLmEsbi5hPW4uYixuLmI9cil9ZnVuY3Rpb24gZHVlKHQsZSxuLHIscyxvKXtpZih0aGlzLmI9bix0aGlzLmQ9cyx0Pj1lLmxlbmd0aCl0aHJvdyBydChuZXcgbW8oIkdyZWVkeSBTd2l0Y2hEZWNpZGVyOiBGcmVlIGxheWVyIG5vdCBpbiBncmFwaC4iKSk7dGhpcy5jPWVbdF0sdGhpcy5lPW5ldyBITShyKSxjaXQodGhpcy5lLHRoaXMuYywoYmUoKSxCbikpLHRoaXMuaT1uZXcgSE0ociksY2l0KHRoaXMuaSx0aGlzLmMsSG4pLHRoaXMuZj1uZXcgbFl0KHRoaXMuYyksdGhpcy5hPSFvJiZzLmkmJiFzLnMmJnRoaXMuY1swXS5rPT0oR24oKSx4cyksdGhpcy5hJiZvZ24odGhpcyx0LGUubGVuZ3RoKX1mdW5jdGlvbiBndWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7bz0hdC5CLkhjKChjbCgpLHJOKSksaD10LkIuSGModmZ0KSx0LmE9bmV3IHVpZShoLG8sdC5jKSx0Lm4mJlN3dCh0LmEubix0Lm4pLEp0dCh0LmcsKEtmKCksdHUpLHQuYSksZXx8KHI9bmV3IHJfKDEsbyx0LmMpLHIubi5hPXQuayxOeCh0LnAsKGJlKCksTm4pLHIpLHM9bmV3IHJfKDEsbyx0LmMpLHMubi5kPXQuayxOeCh0LnAsbXIscyksZD1uZXcgcl8oMCxvLHQuYyksZC5uLmM9dC5rLE54KHQucCxCbixkKSxuPW5ldyByXygwLG8sdC5jKSxuLm4uYj10LmssTngodC5wLEhuLG4pKX1mdW5jdGlvbiBVdm4odCl7dmFyIGUsbixyO3N3aXRjaChlPXUoUSh0LmQsKFRlKCksWDApKSwyMTgpLGUuZyl7Y2FzZSAyOm49azVuKHQpO2JyZWFrO2Nhc2UgMzpuPShyPW5ldyBsZSx1cyhSaShwdShXbyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5kLmIsMTYpKSxuZXcgQ1gpLG5ldyBfWCksbmV3ICRUKSxuZXcgcFgpLG5ldyBQdHQocikpLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgcnQobmV3IEZvKCJDb21wYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yICIrZSsiIGVkZ2VzLiIpKX1HeW4odCxuKSx2YShuZXcgVG0odC5nKSxuZXcgT3R0KHQpKX1mdW5jdGlvbiBXdm4odCxlKXt2YXIgbjtyZXR1cm4gbj1uZXcgeGEsZSYmTG8obix1KEpuKHQuYSxzTiksOTQpKSxFdChlLDQ3MCkmJkxvKG4sdShKbih0LmEsYU4pLDk0KSksRXQoZSwzNTQpPyhMbyhuLHUoSm4odC5hLHFvKSw5NCkpLG4pOihFdChlLDgyKSYmTG8obix1KEpuKHQuYSxiciksOTQpKSxFdChlLDIzOSk/KExvKG4sdShKbih0LmEsbnMpLDk0KSksbik6RXQoZSwxODYpPyhMbyhuLHUoSm4odC5hLGZsKSw5NCkpLG4pOihFdChlLDM1MikmJkxvKG4sdShKbih0LmEsV3MpLDk0KSksbikpfWZ1bmN0aW9uIFpmKCl7WmY9Wix0Nz1uZXcgZW8oKGNpKCkselYpLGRlKDEpKSxzRz1uZXcgZW8oSDIsODApLHNiZT1uZXcgZW8oc0F0LDUpLFhwZT1uZXcgZW8oJDYsQkUpLHJiZT1uZXcgZW8oZmZ0LGRlKDEpKSxpYmU9bmV3IGVvKGRmdCwoRm4oKSwhMCkpLGc3dD1uZXcgTXYoNTApLGViZT1uZXcgZW8ocTIsZzd0KSxoN3Q9UlYscDd0PVVTLFFwZT1uZXcgZW8ocmZ0LCExKSxkN3Q9WU8sdGJlPXZiLEpwZT16MixacGU9czUsbmJlPUt5LGY3dD0oUDR0KCksSHBlKSxWdXQ9V3BlLGlHPXFwZSxHdXQ9R3BlLGI3dD1VcGV9ZnVuY3Rpb24gS3ZuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9bmV3IGJKdCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTApLGguayE9KEduKCkseHMpKXtmb3IoS3BuKHcsaCxuZXcgVGEpLG89bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTHIobyksMTcpLCEocy5jLmkuaz09eHN8fHMuZC5pLms9PXhzKSlmb3Iocj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLGU9bixsXyh3LG5ldyBhOChlLmEsZS5iKSl9cmV0dXJuIHd9ZnVuY3Rpb24gbmF0KCl7bmF0PVosbFN0PW5ldyBHaShfY3QpLHVTdD0oSDkoKSxqTyksY1N0PW5ldyBtbihMY3QsdVN0KSxvU3Q9KE5JKCksT1YpLEUzZT1uZXcgbW4odDh0LG9TdCksYVN0PShpRCgpLFZodCksazNlPW5ldyBtbihlOHQsYVN0KSxtM2U9bmV3IG1uKFNjdCxudWxsKSxzU3Q9KGhJKCksSVYpLHgzZT1uZXcgbW4oQWN0LHNTdCksaVN0PShNUigpLHFodCkscDNlPW5ldyBtbihuOHQsaVN0KSxiM2U9bmV3IG1uKHI4dCwoRm4oKSwhMSkpLHYzZT1uZXcgbW4oaTh0LGRlKDY0KSksdzNlPW5ldyBtbihzOHQsITApLHkzZT1HaHR9ZnVuY3Rpb24gcHVlKHQpe3ZhciBlLG4scixzLG8saDtpZih0LmE9PW51bGwpaWYodC5hPVB0KGRsLGkwLDI1LHQuYy5iLmMubGVuZ3RoLDE2LDEpLHQuYVswXT0hMSxWcyh0LmMsKFRlKCksaWh0KSkpZm9yKHI9dShRKHQuYyxpaHQpLDE1KSxuPXIuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTkpLmEsZT4wJiZlPHQuYS5sZW5ndGgmJih0LmFbZV09ITEpO2Vsc2UgZm9yKGg9bmV3IFModC5jLmIpLGguYTxoLmMuYy5sZW5ndGgmJkooaCkscz0xO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDI5KSx0LmFbcysrXT1MYm4obyl9ZnVuY3Rpb24gYnVlKHQsZSl7dmFyIG4scixzLG87c3dpdGNoKHM9dC5iLGUpe2Nhc2UgMTp7dC5ifD0xLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSAyOnt0LmJ8PTIsdC5ifD00LHQuYnw9ODticmVha31jYXNlIDQ6e3QuYnw9MSx0LmJ8PTIsdC5ifD00LHQuYnw9ODticmVha31jYXNlIDM6e3QuYnw9MTYsdC5ifD04O2JyZWFrfWNhc2UgMDp7dC5ifD0zMix0LmJ8PTE2LHQuYnw9OCx0LmJ8PTEsdC5ifD0yLHQuYnw9NDticmVha319aWYodC5iIT1zJiZ0LmMpZm9yKHI9bmV3IGVyKHQuYyk7ci5lIT1yLmkuZ2MoKTspbz11KGRyKHIpLDQ3Myksbj1ybChvKSxoeShuLGUpfWZ1bmN0aW9uIHZ1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihzPSExLGg9ZSxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKW89aFtkXSxqZSgoRm4oKSwhIW8uZSkpJiYhdShGZSh0LmIsby5lLnApLDIxNCkucyYmKHM9c3woaz1vLmUsQz11KEZlKHQuYixrLnApLDIxNCksTT1DLmUsRj1uSHQobixNLmxlbmd0aCksSD1NW0ZdWzBdLEguaz09KEduKCkseHMpP01bRl09TDJuKG8sTVtGXSxuPyhiZSgpLEJuKTooYmUoKSxIbikpOkMuYy5UZihNLG4pLFY9cEQodCxDLG4sciksRDV0KEMuZSxDLm8sbiksVikpO3JldHVybiBzfWZ1bmN0aW9uIHd1ZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89KCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkscz1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMzMpLEd0KHFlKHIsKGNpKCkscjUpKSkhPT1HdCgoJDAoKSxZUykpJiYoaD11KHFlKGUsQzcpLDE0OSksbj11KHFlKHIsQzcpLDE0OSksKGg9PW58fGgmJm9tdChoLG4pKSYmKCFyLmEmJihyLmE9bmV3IGhlKG5zLHIsMTAsMTEpKSxyLmEpLmkhPTAmJihvKz13dWUodCxyKSkpO3JldHVybiBvfWZ1bmN0aW9uIFl2bih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iocj0wLGQ9MCxoPW5ldyBTKHQuZCk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTAxKSxzPXUoUGwoUmkobmV3IFRuKG51bGwsbmV3IF9uKG8uaiwxNikpLG5ldyBxVCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLG49bnVsbCxyPD1kPyhuPShiZSgpLE5uKSxyKz1zLmdjKCkpOmQ8ciYmKG49KGJlKCksbXIpLGQrPXMuZ2MoKSksZT1uLHVzKHB1KHMuT2MoKSxuZXcgQUYpLG5ldyBSdHQoZSkpfWZ1bmN0aW9uIFh2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2Zvcih0LmI9bmV3IE5vZShuZXcgd2woKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkpLG5ldyB3bCgoSnYoKSxjdChvdChjbHQsMSksYWUsMzYxLDAsW0F3LGhiLFN3XSkpKSksaD1jdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pLGQ9MCx3PWgubGVuZ3RoO2Q8dzsrK2QpZm9yKG89aFtkXSxuPWN0KG90KGNsdCwxKSxhZSwzNjEsMCxbQXcsaGIsU3ddKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxRMW4odC5iLG8sZSxuZXcgbGUpfWZ1bmN0aW9uIG11ZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKGg9dSh1KEFpKHQucixlKSwyMSksODQpLGQ9dC51LkhjKChRdSgpLHhiKSksbj10LnUuSGMoSlMpLHI9dC51LkhjKFpTKSxrPXQudS5IYyhHNiksTT10LkIuSGMoKGNsKCksS1YpKSxDPSFuJiYhciYmKGt8fGguZ2MoKT09MiksUTJuKHQsZSkscz1udWxsLHc9bnVsbCxkKXtmb3Iobz1oLktjKCkscz11KG8uUGIoKSwxMTEpLHc9cztvLk9iKCk7KXc9dShvLlBiKCksMTExKTtzLmQuYj0wLHcuZC5jPTAsQyYmIXMuYSYmKHMuZC5jPTApfU0mJihZZG4oaCksZCYmKHMuZC5iPTAsdy5kLmM9MCkpfWZ1bmN0aW9uIHl1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKGg9dSh1KEFpKHQucixlKSwyMSksODQpLGQ9dC51LkhjKChRdSgpLHhiKSksbj10LnUuSGMoSlMpLHI9dC51LkhjKFpTKSx3PXQudS5IYyhHNiksTT10LkIuSGMoKGNsKCksS1YpKSxrPSFuJiYhciYmKHd8fGguZ2MoKT09MiksZm1uKHQsZSksQz1udWxsLHM9bnVsbCxkKXtmb3Iobz1oLktjKCksQz11KG8uUGIoKSwxMTEpLHM9QztvLk9iKCk7KXM9dShvLlBiKCksMTExKTtDLmQuZD0wLHMuZC5hPTAsayYmIUMuYSYmKEMuZC5hPTApfU0mJihYZG4oaCksZCYmKEMuZC5kPTAscy5kLmE9MCkpfWZ1bmN0aW9uIHh1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztpZihzPWUuayxlLnA+PTApcmV0dXJuITE7aWYoZS5wPW4uYix1ZShuLmUsZSkscz09KEduKCksWnMpfHxzPT1IYyl7Zm9yKGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLEM9KHI9bmV3IFMobmV3IEVyKG8pLmEuZyksbmV3IFF0KHIpKTtWbyhDLmEpOylpZihrPXUoSihDLmEpLDE3KS5kLGQ9ay5pLHc9ZC5rLGUuYyE9ZC5jJiYodz09WnN8fHc9PUhjKSYmeHVlKHQsZCxuKSlyZXR1cm4hMH1yZXR1cm4hMH1mdW5jdGlvbiBwcSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9zNXQodCk6KGU9bmV3IFRoKHM1dCh0KSksZS5hKz0iIChjaGFuZ2VhYmxlOiAiLGtnKGUsKHQuQmImd2YpIT0wKSxlLmErPSIsIHZvbGF0aWxlOiAiLGtnKGUsKHQuQmImQXkpIT0wKSxlLmErPSIsIHRyYW5zaWVudDogIixrZyhlLCh0LkJiJnl5KSE9MCksZS5hKz0iLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiAiLGZvKGUsdC5qKSxlLmErPSIsIHVuc2V0dGFibGU6ICIsa2coZSwodC5CYiZ6dSkhPTApLGUuYSs9IiwgZGVyaXZlZDogIixrZyhlLCh0LkJiJmJkKSE9MCksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBRdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihzPWUybih0LmQpLGg9dShRKHQuYiwoaV8oKSxvN3QpKSwxMTYpLGQ9aC5iK2guYyx3PWguZCtoLmEsQz1zLmQuYSp0LmUrZCxrPXMuYi5hKnQuZit3LGlwdCh0LmIsbmV3ICRlKEMsaykpLEY9bmV3IFModC5nKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSw1NjIpLGU9TS5nLXMuYS5hLG49TS5pLXMuYy5hLHI9TGkoaFFlKG5ldyAkZShlLG4pLE0uYSxNLmIpLHVkKEJNKG5jKHMydChNLmUpKSxNLmQqTS5hLE0uYypNLmIpLC0uNSkpLG89YTJ0KE0uZSksektlKE0uZSxuYShyLG8pKX1mdW5jdGlvbiBadm4odCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3Iodz1QdChpYSx0ZSwxMDQsKGJlKCksY3Qob3QoWGEsMSkseGMsNjEsMCxbWm8sTm4sSG4sbXIsQm5dKSkubGVuZ3RoLDAsMiksbz1jdChvdChYYSwxKSx4Yyw2MSwwLFtabyxObixIbixtcixCbl0pLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHdbcy5nXT1QdChpYSx2bywyNSx0LmNbcy5nXSwxNSwxKTtyZXR1cm4gcXNlKHcsdCxObikscXNlKHcsdCxtcikscHN0KHcsdCxObixlLG4scikscHN0KHcsdCxIbixlLG4scikscHN0KHcsdCxtcixlLG4scikscHN0KHcsdCxCbixlLG4sciksd31mdW5jdGlvbiBKdm4odCxlLG4pe2lmKGtsKHQuYSxlKSl7aWYoUzAodShKbih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IHFzKTtpZihrbCh0LmEsbikpe2lmKFMwKHUoSm4odC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBxcyk7aWYoa2wodC5iLGUpKXtpZihTMCh1KEpuKHQuYixlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmIsZSxuZXcgcXMpO2lmKGtsKHQuYixuKSl7aWYoUzAodShKbih0LmIsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5iLG4sbmV3IHFzKTtyZXR1cm4gMH1mdW5jdGlvbiAkNXQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKG49PW51bGwpe2ZvcihzPXUodC5nLDExOSksZD0wO2Q8dC5pOysrZClpZihoPXNbZF0saC5haygpPT1lKXJldHVybiBCYSh0LGgscil9cmV0dXJuIG89KHRvKCksdShlLDY2KS5PaigpP3Uobiw3Mik6WWQoZSxuKSksbWwodC5lKT8oaz0hVkkodCxlKSxyPVFjKHQsbyxyKSx3PWUuJGooKT96cCh0LDMsZSxudWxsLG4sRUUodCxlLG4sRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCksayk6enAodCwxLGUsZS56aigpLG4sLTEsaykscj9yLkVpKHcpOnI9dyk6cj1RYyh0LG8scikscn1mdW5jdGlvbiB0d24odCl7dmFyIGUsbixyLHMsbyxoO3QucT09KG9hKCksaDApfHx0LnE9PVZjfHwocz10LmYubi5kK0xqKHUoZ28odC5iLChiZSgpLE5uKSksMTI0KSkrdC5jLGU9dC5mLm4uYStMaih1KGdvKHQuYixtciksMTI0KSkrdC5jLHI9dShnbyh0LmIsSG4pLDEyNCksaD11KGdvKHQuYixCbiksMTI0KSxvPWIuTWF0aC5tYXgoMCxyLm4uZC1zKSxvPWIuTWF0aC5tYXgobyxoLm4uZC1zKSxuPWIuTWF0aC5tYXgoMCxyLm4uYS1lKSxuPWIuTWF0aC5tYXgobixoLm4uYS1lKSxyLm4uZD1vLGgubi5kPW8sci5uLmE9bixoLm4uYT1uKX1mdW5jdGlvbiBld24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2Zvcih3cihlLCJSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMiLDEpLHc9bmV3IFModC5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZD11KEoodyksMjkpLEM9bmV3IFMoZC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLEY9bmV3IFMoay5qKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMTEpLGg9Z2QoTS5nKSxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10samUoUmUoUShuLChzZSgpLCQxKSkpKSYmZHcobiwhMSk7b3IoZSl9ZnVuY3Rpb24ga3VlKCl7dGhpcy5iPW5ldyBuMix0aGlzLmQ9bmV3IG4yLHRoaXMuZT1uZXcgbjIsdGhpcy5jPW5ldyBuMix0aGlzLmE9bmV3IENyLHRoaXMuZj1uZXcgQ3IsUTMoVXMsbmV3IHhaLG5ldyBrWiksUTMoeFN0LG5ldyB0YyxuZXcgS2MpLFEzKEw3dCxuZXcgemksbmV3IEZMKSxRMyhNN3QsbmV3IERaLG5ldyBPWiksUTMoRTRlLG5ldyBaNSxuZXcgbW0pLFEzKFg1bixuZXcgRVosbmV3IFRaKSxRMyhKNW4sbmV3IENaLG5ldyBfWiksUTMoUTVuLG5ldyBTWixuZXcgQVopLFEzKFo1bixuZXcgTFosbmV3IEFjKSxRMyhueG4sbmV3IE1aLG5ldyBLVCl9ZnVuY3Rpb24gRXVlKHQpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gbz0wLGU9TGgodCksZS5CaigpJiYob3w9NCksdC5CYiZ6dSYmKG98PTIpLEV0KHQsOTkpPyhuPXUodCwxOCkscz1ubyhuKSxuLkJiJmRjJiYob3w9MzIpLHMmJihabihWbShzKSksb3w9OCxoPXMudCwoaD4xfHxoPT0tMSkmJihvfD0xNikscy5CYiZkYyYmKG98PTY0KSksbi5CYiZZYSYmKG98PUF5KSxvfD13Zik6RXQoZSw0NTcpP298PTUxMjoocj1lLkJqKCksciYmci5pJjEmJihvfD0yNTYpKSx0LkJiJjUxMiYmKG98PTEyOCksb31mdW5jdGlvbiB2Xyh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHQ9dD09bnVsbD9UdTooT24odCksdCkscz0wO3M8ZS5sZW5ndGg7cysrKWVbc109RmJuKGVbc10pO2ZvcihuPW5ldyBMbSxoPTAscj0wO3I8ZS5sZW5ndGgmJihvPXQuaW5kZXhPZigiJXMiLGgpLG8hPS0xKTspbi5hKz0iIitEbCh0PT1udWxsP1R1OihPbih0KSx0KSxoLG8pLGhjKG4sZVtyKytdKSxoPW8rMjtpZihzWnQobix0LGgsdC5sZW5ndGgpLHI8ZS5sZW5ndGgpe2ZvcihuLmErPSIgWyIsaGMobixlW3IrK10pO3I8ZS5sZW5ndGg7KW4uYSs9S2EsaGMobixlW3IrK10pO24uYSs9Il0ifXJldHVybiBuLmF9ZnVuY3Rpb24gbnduKHQpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IFljKHQuYS5jLmxlbmd0aCkscz1uZXcgUyh0LmEpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KEoocyksMTApLG49dShRKHIsKFRlKCksY3UpKSwxNjMpLGU9bnVsbCxuLmcpe2Nhc2UgMTpjYXNlIDI6ZT0odTIoKSxHNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDplPSh1MigpLHU3KX1lPyhKdChyLChzZSgpLEhHKSwodTIoKSxHNCkpLGU9PXU3P2xxKHIsbiwoc28oKSxKdSkpOmU9PUc0JiZscShyLG4sKHNvKCksZXUpKSk6by5jW28uYy5sZW5ndGhdPXJ9cmV0dXJuIG99ZnVuY3Rpb24gejV0KHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49MCx3PW5ldyBTKGUpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoZD11KEoodyksMTEpLEJ5dCh0LmIsdC5kW2QucF0pLGg9MCxzPW5ldyBTMShkLmIpO1ZvKHMuYSl8fFZvKHMuYik7KXI9dShWbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLG9YdChyKT8obz11YnQodCxkPT1yLmM/ci5kOnIuYyksbz50LmRbZC5wXSYmKG4rPXNtdCh0LmIsbykscXAodC5hLGRlKG8pKSkpOisraDtmb3Iobis9dC5iLmQqaDshTjkodC5hKTspRm10KHQuYix1KEZ4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIHJ3bih0LGUpe3ZhciBuO3JldHVybiB0LmY9PUxmdD8obj0kdihFbygoUnUoKSxtYSksZSkpLHQuZT9uPT00JiZlIT0oYTYoKSxXNikmJmUhPShhNigpLFU2KSYmZSE9KGE2KCksTWZ0KSYmZSE9KGE2KCksSWZ0KTpuPT0yKTp0LmQmJih0LmQuSGMoZSl8fHQuZC5IYyhxeChFbygoUnUoKSxtYSksZSkpKXx8dC5kLkhjKEU0KChSdSgpLG1hKSx0LmIsZSkpKT8hMDp0LmYmJl81dCgoUnUoKSx0LmYpLFpNKEVvKG1hLGUpKSk/KG49JHYoRW8obWEsZSkpLHQuZT9uPT00Om49PTIpOiExfWZ1bmN0aW9uIGl3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO3JldHVybiBoPXUocWUobiwoY2koKSx6NikpLDgpLHc9aC5hLEM9aC5iK3Qscz1iLk1hdGguYXRhbjIoQyx3KSxzPDAmJihzKz1JNCkscys9ZSxzPkk0JiYocy09STQpLGQ9dShxZShyLHo2KSw4KSxrPWQuYSxNPWQuYit0LG89Yi5NYXRoLmF0YW4yKE0sayksbzwwJiYobys9STQpLG8rPWUsbz5JNCYmKG8tPUk0KSx5MSgpLGdmKDFlLTEwKSxiLk1hdGguYWJzKHMtbyk8PTFlLTEwfHxzPT1vfHxpc05hTihzKSYmaXNOYU4obyk/MDpzPG8/LTE6cz5vPzE6THYoaXNOYU4ocyksaXNOYU4obykpfWZ1bmN0aW9uIHJhdCh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgQ3Iscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksNTcpLGtpKGQsZSxuZXcgbGUpO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3IoZT11KEoocyksNTcpLGUuaT1UcyxoPWUuYy5LYygpO2guT2IoKTspbz11KGguUGIoKSw1NyksdShlYyhBbyhkLmYsbykpLDE1KS5GYyhlKTtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuYy4kYigpLGUuYz11KGVjKEFvKGQuZixlKSksMTUpO0djZSh0KX1mdW5jdGlvbiBpYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bmV3IENyLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShKKHIpLDgxKSxraShkLGUsbmV3IGxlKTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKGU9dShKKHMpLDgxKSxlLm89VHMsaD1lLmYuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksODEpLHUoZWMoQW8oZC5mLG8pKSwxNSkuRmMoZSk7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmYuJGIoKSxlLmY9dShlYyhBbyhkLmYsZSkpLDE1KTtOY2UodCl9ZnVuY3Rpb24gc3duKHQsZSxuLHIpe3ZhciBzLG87Zm9yKG0xbih0LGUsbixyKSxzcHQoZSx0LmotZS5qK24pLGFwdChlLHQuay1lLmsrciksbz1uZXcgUyhlLmYpO28uYTxvLmMuYy5sZW5ndGg7KXN3aXRjaChzPXUoSihvKSwzMjQpLHMuYS5nKXtjYXNlIDA6WDgodCxlLmcrcy5iLmEsMCxlLmcrcy5jLmEsZS5pLTEpO2JyZWFrO2Nhc2UgMTpYOCh0LGUuZytlLm8sZS5pK3MuYi5hLHQuby0xLGUuaStzLmMuYSk7YnJlYWs7Y2FzZSAyOlg4KHQsZS5nK3MuYi5hLGUuaStlLnAsZS5nK3MuYy5hLHQucC0xKTticmVhaztkZWZhdWx0Olg4KHQsMCxlLmkrcy5iLmEsZS5nLTEsZS5pK3MuYy5hKX19ZnVuY3Rpb24gYnEodCxlLG4scixzKXt2YXIgbyxoLGQ7dHJ5e2lmKGU+PXQubyl0aHJvdyBydChuZXcgX3B0KTtkPWU+PjUsaD1lJjMxLG89TTAoMSxTcihNMChoLDEpKSkscz90Lm5bbl1bZF09QzEodC5uW25dW2RdLG8pOnQubltuXVtkXT1Qcyh0Lm5bbl1bZF0sSXZ0KG8pKSxvPU0wKG8sMSkscj90Lm5bbl1bZF09QzEodC5uW25dW2RdLG8pOnQubltuXVtkXT1Qcyh0Lm5bbl1bZF0sSXZ0KG8pKX1jYXRjaCh3KXt0aHJvdyB3PVdpKHcpLEV0KHcsMzIwKT9ydChuZXcgbW8oVG90K3QubysiKiIrdC5wK0NvdCtlK0thK24rX290KSk6cnQodyl9fWZ1bmN0aW9uIHE1dCh0LGUsbixyKXt2YXIgcyxvLGg7ZSYmKG89WHQoeWUoUShlLChmYygpLFlnKSkpKStyLGg9bitYdCh5ZShRKGUseFYpKSkvMixKdChlLExodCxkZShTcihrdShiLk1hdGgucm91bmQobykpKSkpLEp0KGUsdF90LGRlKFNyKGt1KGIuTWF0aC5yb3VuZChoKSkpKSksZS5kLmI9PTB8fHE1dCh0LHUobGooKHM9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngocykpKSw4NiksbitYdCh5ZShRKGUseFYpKSkrdC5hLHIrWHQoeWUoUShlLGs3KSkpKSxRKGUsQWh0KSE9bnVsbCYmcTV0KHQsdShRKGUsQWh0KSw4NiksbixyKSl9ZnVuY3Rpb24gYXduKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3Iodz1GYShlLmEpLHM9WHQoeWUoUSh3LChUZSgpLFIyKSkpKSoyLEM9WHQoeWUoUSh3LFo0KSkpLGs9Yi5NYXRoLm1heChzLEMpLG89UHQoaWEsdm8sMjUsZS5mLWUuYysxLDE1LDEpLHI9LWssbj0wLGQ9ZS5iLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxyKz10LmFbaC5jLnBdK2ssb1tuKytdPXI7Zm9yKHIrPXQuYVtlLmEuYy5wXStrLG9bbisrXT1yLEY9bmV3IFMoZS5lKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCkscis9dC5hW00uYy5wXStrLG9bbisrXT1yO3JldHVybiBvfWZ1bmN0aW9uIG93bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKEY9bmV3IExwKG5ldyB2JHQodCkpLGQ9Y3Qob3QobzAsMSksemcsMTAsMCxbZSxuXSksdz0wLGs9ZC5sZW5ndGg7dzxrOysrdylmb3IoaD1kW3ddLE09UUMoaCxyKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLG89bmV3IFMxKEMuYik7Vm8oby5hKXx8Vm8oby5iKTspcz11KFZvKG8uYSk/SihvLmEpOkooby5iKSwxNyksVmEocyl8fChweihGLmEsQywoRm4oKSxJMikpPT1udWxsLG9YdChzKSYmWU0oRixDPT1zLmM/cy5kOnMuYykpO3JldHVybiBBcihGKSxuZXcgUHUoRil9ZnVuY3Rpb24gY3duKHQsZSl7dmFyIG4scixzLG87aWYobz11KHFlKHQsKGNpKCksbzUpKSw2MSkuZy11KHFlKGUsbzUpLDYxKS5nLG8hPTApcmV0dXJuIG87aWYobj11KHFlKHQsbGZ0KSwxOSkscj11KHFlKGUsbGZ0KSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSlyZXR1cm4gcztzd2l0Y2godShxZSh0LG81KSw2MSkuZyl7Y2FzZSAxOnJldHVybiBMcyh0LmksZS5pKTtjYXNlIDI6cmV0dXJuIExzKHQuaixlLmopO2Nhc2UgMzpyZXR1cm4gTHMoZS5pLHQuaSk7Y2FzZSA0OnJldHVybiBMcyhlLmosdC5qKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gSDV0KHQpe3ZhciBlLG4scjtyZXR1cm4gdC5EYiY2ND9Pc3QodCk6KGU9bmV3IElsKGY4dCksbj10Lmssbj9WcihWcigoZS5hKz0nICInLGUpLG4pLCciJyk6KCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uLmk+MCYmKHI9KCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdShTdCh0Lm4sMCksMTM3KSkuYSwhcnx8VnIoVnIoKGUuYSs9JyAiJyxlKSxyKSwnIicpKSksVnIoQ3YoVnIoQ3YoVnIoQ3YoVnIoQ3YoKGUuYSs9IiAoIixlKSx0LmkpLCIsIiksdC5qKSwiIHwgIiksdC5nKSwiLCIpLHQuZiksIikiKSxlLmEpfWZ1bmN0aW9uIFR1ZSh0KXt2YXIgZSxuLHI7cmV0dXJuIHQuRGImNjQ/T3N0KHQpOihlPW5ldyBJbChkOHQpLG49dC5rLG4/VnIoVnIoKGUuYSs9JyAiJyxlKSxuKSwnIicpOighdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHQubi5pPjAmJihyPSghdC5uJiYodC5uPW5ldyBoZShxbyx0LDEsNykpLHUoU3QodC5uLDApLDEzNykpLmEsIXJ8fFZyKFZyKChlLmErPScgIicsZSksciksJyInKSkpLFZyKEN2KFZyKEN2KFZyKEN2KFZyKEN2KChlLmErPSIgKCIsZSksdC5pKSwiLCIpLHQuaiksIiB8ICIpLHQuZyksIiwiKSx0LmYpLCIpIiksZS5hKX1mdW5jdGlvbiBzYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihzPXUoRmModC5hLGUpLDE0OSksIXMpe2ZvcihyPShkPW5ldyBiMSh0LmIpLmEudmMoKS5LYygpLG5ldyB2MShkKSk7ci5hLk9iKCk7KWlmKG49KG89dShyLmEuUGIoKSw0MiksdShvLmRkKCksMTQ5KSksaD1uLmMsdz1lLmxlbmd0aCxobihoLnN1YnN0cihoLmxlbmd0aC13LHcpLGUpJiYoZS5sZW5ndGg9PWgubGVuZ3RofHxiYShoLGgubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKHMpcmV0dXJuIG51bGw7cz1ufXMmJnhvKHQuYSxlLHMpfXJldHVybiBzfWZ1bmN0aW9uIHV3bih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyBKbCxyPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSkscz1yLmdjKCkscj11KFBsKHB1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxZbShuZXcgY24sbmV3IGxpLG5ldyBkaSxuZXcgRWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW0x5LEdsXSkpKSwyMSksbz1yLmdjKCksczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIEN1ZSh0KXt2YXIgZSxuLHI7VnModCwoVGUoKSxPdykpJiYocj11KFEodCxPdyksMjEpLCFyLmRjKCkmJihuPShlPXUoSGYobG8pLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpLHIuSGMoKGZ5KCksVWwpKT9wZihuLFVsKTpwZihuLENmKSxyLkhjKCRoKXx8cGYobiwkaCksci5IYyhFZik/cGYobixfZik6ci5IYyhKMCk/cGYobixsMCk6ci5IYyhUZikmJnBmKG4semgpLHIuSGMoX2YpP3BmKG4sRWYpOnIuSGMobDApP3BmKG4sSjApOnIuSGMoemgpJiZwZihuLFRmKSxKdCh0LE93LG4pKSl9ZnVuY3Rpb24gbHduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihzPXUoUSh0LChzZSgpLEl3KSksMTApLHI9dC5qLG49KEFuKDAsci5jLmxlbmd0aCksdShyLmNbMF0sMTEpKSxoPW5ldyBTKHMuaik7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTEpLEd0KG8pPT09R3QoUShuLF9pKSkpe28uaj09KGJlKCksTm4pJiZ0LnA+cy5wPyhGcyhvLG1yKSxvLmQmJihkPW8uby5iLGU9by5hLmIsby5hLmI9ZC1lKSk6by5qPT1tciYmcy5wPnQucCYmKEZzKG8sTm4pLG8uZCYmKGQ9by5vLmIsZT1vLmEuYixvLmEuYj0tKGQtZSkpKTticmVha31yZXR1cm4gc31mdW5jdGlvbiBod24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihvPW4sbjxyKWZvcihGPShIPW5ldyBMSSh0LnApLFY9bmV3IExJKHQucCksVWEoSC5lLHQuZSksSC5xPXQucSxILnI9VixLaihIKSxVYShWLmosdC5qKSxWLnI9SCxLaihWKSxuZXcgbGEoSCxWKSksTT11KEYuYSwxMTIpLEM9dShGLmIsMTEyKSxzPShBbihvLGUuYy5sZW5ndGgpLHUoZS5jW29dLDMyOSkpLGg9aXVlKHQsTSxDLHMpLGs9bisxO2s8PXI7aysrKWQ9KEFuKGssZS5jLmxlbmd0aCksdShlLmNba10sMzI5KSksdz1pdWUodCxNLEMsZCksVmhuKGQsdyxzLGgpJiYocz1kLGg9dyk7cmV0dXJuIG99ZnVuY3Rpb24gYkQodCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTTtpZighKEV0KGUsMjM5KXx8RXQoZSwzNTQpfHxFdChlLDE4NikpKXRocm93IHJ0KG5ldyBQbigiTWV0aG9kIG9ubHkgd29ya3MgZm9yIEVsa05vZGUtLCBFbGtMYWJlbCBhbmQgRWxrUG9ydC1vYmplY3RzLiIpKTtyZXR1cm4gaD10LmEvMix3PWUuaStyLWgsQz1lLmorcy1oLGs9dytlLmcrdC5hLE09QytlLmYrdC5hLG89bmV3IER1LG5pKG8sbmV3ICRlKHcsQykpLG5pKG8sbmV3ICRlKHcsTSkpLG5pKG8sbmV3ICRlKGssTSkpLG5pKG8sbmV3ICRlKGssQykpLGQ9bmV3IFZzdChvKSxMbyhkLGUpLG4mJmtpKHQuYixlLGQpLGR9ZnVuY3Rpb24gd18odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihvPW5ldyAkZShlLG4pLEM9bmV3IFModC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLExpKGsubixvKSxGPW5ldyBTKGsuaik7Ri5hPEYuYy5jLmxlbmd0aDspZm9yKE09dShKKEYpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDE3KSxKbShyLmEsbyksaD11KFEociwoVGUoKSxfbykpLDc0KSxoJiZKbShoLG8pLHc9bmV3IFMoci5iKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw3MCksTGkoZC5uLG8pfWZ1bmN0aW9uIGZ3bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG89bmV3ICRlKGUsbiksQz1uZXcgUyh0LmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMCksTGkoay5uLG8pLEY9bmV3IFMoay5qKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMTEpLHM9bmV3IFMoTS5nKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMTcpLEptKHIuYSxvKSxoPXUoUShyLChUZSgpLF9vKSksNzQpLGgmJkptKGgsbyksdz1uZXcgUyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDcwKSxMaShkLm4sbyl9ZnVuY3Rpb24gX3VlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MCl0aHJvdyBydChuZXcgRjkoIkVkZ2VzIG11c3QgaGF2ZSBhIHNvdXJjZS4iKSk7aWYoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0wKXRocm93IHJ0KG5ldyBGOSgiRWRnZXMgbXVzdCBoYXZlIGEgdGFyZ2V0LiIpKTtpZighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLCEodC5iLmk8PTEmJighdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYy5pPD0xKSkpdGhyb3cgcnQobmV3IEY5KCJIeXBlcmVkZ2VzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX1mdW5jdGlvbiBTdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoTT0wLG89bmV3IFAzLHFwKG8sZSk7by5iIT1vLmM7KWZvcih3PXUoRngobyksMjE0KSxrPTAsQz11KFEoZS5qLChUZSgpLGRiKSksMzM5KSxoPVh0KHllKFEoZS5qLFlHKSkpLGQ9WHQoeWUoUShlLmosUDl0KSkpLEMhPShqMCgpLGdiKSYmKGsrPWgqeGJuKHcuZSxDKSxrKz1kKlUybih3LmUpKSxNKz1fc2Uody5kLHcuZSkrayxzPW5ldyBTKHcuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMzcpLG49dShGZSh0LmIsci5wKSwyMTQpLG4uc3x8KE0rPVJzdCh0LG4pKTtyZXR1cm4gTX1mdW5jdGlvbiBkd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihIPWUubGVuZ3RoLHc9SCxScigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ1PyhNPS0xLEY9MSwtLUgpOihNPTEsRj0wKSxvPSh3YXQoKSxfZ2UpWzEwXSxzPUgvb3wwLHR0PUglbyx0dCE9MCYmKytzLGQ9UHQoVHIsWHIsMjUscywxNSwxKSxuPUNnZVs4XSxoPTAsVj1GKyh0dD09MD9vOnR0KSxZPUY7WTx3O1k9VixWPVkrbylyPSRsKGUuc3Vic3RyKFksVi1ZKSxfYSx2aSksaz0oYkUoKSxQM3QoZCxkLGgsbikpLGsrPUhsbihkLGgsciksZFtoKytdPWs7Qz1oLHQuZT1NLHQuZD1DLHQuYT1kLE9DKHQpfWZ1bmN0aW9uIEF1ZSh0LGUsbixyLHMsbyxoKXtpZih0LmM9ci5xZigpLmEsdC5kPXIucWYoKS5iLHMmJih0LmMrPXMucWYoKS5hLHQuZCs9cy5xZigpLmIpLHQuYj1lLnJmKCkuYSx0LmE9ZS5yZigpLmIsIXMpbj90LmMtPWgrZS5yZigpLmE6dC5jKz1yLnJmKCkuYStoO2Vsc2Ugc3dpdGNoKHMuSGYoKS5nKXtjYXNlIDA6Y2FzZSAyOnQuYys9cy5yZigpLmEraCtvLmEraDticmVhaztjYXNlIDQ6dC5jLT1oK28uYStoK2UucmYoKS5hO2JyZWFrO2Nhc2UgMTp0LmMrPXMucmYoKS5hK2gsdC5kLT1oK28uYitoK2UucmYoKS5iO2JyZWFrO2Nhc2UgMzp0LmMrPXMucmYoKS5hK2gsdC5kKz1zLnJmKCkuYitoK28uYitofX1mdW5jdGlvbiBMdWUodCxlKXt2YXIgbixyO2Zvcih0aGlzLmI9bmV3IGxlLHRoaXMuZT1uZXcgbGUsdGhpcy5hPXQsdGhpcy5kPWUsemhuKHRoaXMpLFhsbih0aGlzKSx0aGlzLmIuZGMoKT90aGlzLmM9dC5jLnA6dGhpcy5jPXUodGhpcy5iLlhiKDApLDEwKS5jLnAsdGhpcy5lLmMubGVuZ3RoPT0wP3RoaXMuZj10LmMucDp0aGlzLmY9dShGZSh0aGlzLmUsdGhpcy5lLmMubGVuZ3RoLTEpLDEwKS5jLnAscj11KFEodCwoc2UoKSxUTykpLDE1KS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw3MCksVnMobiwoVGUoKSxRRykpKXt0aGlzLmQ9dShRKG4sUUcpLDIyNyk7YnJlYWt9fWZ1bmN0aW9uIHhFKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihyPXUoSm4odC5hLGUpLDUzKSxvPXUoSm4odC5hLG4pLDUzKSxzPXUoSm4odC5lLGUpLDUzKSxoPXUoSm4odC5lLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxDPW8uYS5lYygpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDEwKSxyLmEuemMoayxyKSxOcyh1KEpuKHQuZSxrKSw1MyksZSksVWEodShKbih0LmUsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxOcyh1KEpuKHQuYSxkKSw1MyksbiksVWEodShKbih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIHZEKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2ZvcihyPXUoSm4odC5hLGUpLDUzKSxvPXUoSm4odC5hLG4pLDUzKSxzPXUoSm4odC5iLGUpLDUzKSxoPXUoSm4odC5iLG4pLDUzKSxyLmEuemMobixyKSxoLmEuemMoZSxoKSxDPW8uYS5lYygpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDEwKSxyLmEuemMoayxyKSxOcyh1KEpuKHQuYixrKSw1MyksZSksVWEodShKbih0LmIsayksNTMpLHMpO2Zvcih3PXMuYS5lYygpLktjKCk7dy5PYigpOylkPXUody5QYigpLDEwKSxoLmEuemMoZCxoKSxOcyh1KEpuKHQuYSxkKSw1MyksbiksVWEodShKbih0LmEsZCksNTMpLG8pfWZ1bmN0aW9uIGd3bih0LGUpe3ZhciBuLHIscztzd2l0Y2god3IoZSwiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyBmNXQodCksdShRKHQsKFRlKCkscmh0KSksMzM3KS5nKXtjYXNlIDI6cz1uZXcgUEY7Y2FzZSAwOnM9bmV3IERGO2JyZWFrO2RlZmF1bHQ6cz1uZXcgRkZ9aWYobj1zLlZmKHQsciksamUoUmUoUSh0LG1DdCkpKSYmKG49czNuKHQsbikpLCFzLldmKCkmJlZzKHQsYVYpKXN3aXRjaCh1KFEodCxhViksMzM4KS5nKXtjYXNlIDI6bj1nb2UocixuKTticmVhaztjYXNlIDE6bj1kYWUocixuKX1pZihuLmRjKCkpe29yKGUpO3JldHVybn1zNW4odCxuKSxvcihlKX1mdW5jdGlvbiBwd24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2lmKEM9bnVsbCxGPWUsTT1QWnQodCxJWnQobiksRikscUMoTSxPMChGLENkKSksaD1VdihGLHA4dCkscj1uZXcgYlZ0KHQsTSkscWduKHIuYSxyLmIsaCksZD1VdihGLFZjdCkscz1uZXcgdlZ0KHQsTSksSGduKHMuYSxzLmIsZCksKCFNLmImJihNLmI9bmV3IENuKGJyLE0sNCw3KSksTS5iKS5pPT0wfHwoIU0uYyYmKE0uYz1uZXcgQ24oYnIsTSw1LDgpKSxNLmMpLmk9PTApdGhyb3cgbz1PMChGLENkKSx3PVNkZStvLGs9dytWRSxydChuZXcgYWQoaykpO3JldHVybiBKeihGLE0pLGg1bih0LEYsTSksQz13aXQodCxGLE0pLEN9ZnVuY3Rpb24gYnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHM9UHQoVHIsWHIsMjUsdC5lLmEuYy5sZW5ndGgsMTUsMSksaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxzW28uZF0rPW8uYi5hLmMubGVuZ3RoO2ZvcihkPVVNKGUpO2QuYiE9MDspZm9yKG89dShkLmI9PTA/bnVsbDooUW4oZC5iIT0wKSxjaChkLGQuYS5hKSksMTIxKSxyPUt4KG5ldyBTKG8uZy5hKSk7ci5PYigpOyluPXUoci5QYigpLDIxMyksdz1uLmUsdy5lPWIuTWF0aC5tYXgody5lLG8uZStuLmEpLC0tc1t3LmRdLHNbdy5kXT09MCYmaHMoZCx3LGQuYy5iLGQuYyl9ZnVuY3Rpb24gTXVlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07Zm9yKG49X2Escz12aSxkPW5ldyBTKHQuZS5hKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxMjEpLHM9Yi5NYXRoLm1pbihzLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IoZT1QdChUcixYciwyNSxuLXMrMSwxNSwxKSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLG8uZS09cywrK2Vbby5lXTtpZihyPTAsdC5rIT1udWxsKWZvcihrPXQuayxDPTAsTT1rLmxlbmd0aDtDPE0mJih3PWtbQ10sZVtyKytdKz13LGUubGVuZ3RoIT1yKTsrK0MpO3JldHVybiBlfWZ1bmN0aW9uIEl1ZSh0KXtzd2l0Y2godC5kKXtjYXNlIDk6Y2FzZSA4OnJldHVybiEwO2Nhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpyZXR1cm4hMTtjYXNlIDc6cmV0dXJuIHUoTzV0KHQpLDE5KS5hPT10Lm87Y2FzZSAxOmNhc2UgMjp7aWYodC5vPT0tMilyZXR1cm4hMTtzd2l0Y2godC5wKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA1OmNhc2UgNzpyZXR1cm4gQXYodC5rLHQuZik7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gdC5qPT10LmU7ZGVmYXVsdDpyZXR1cm4gdC5uPT1udWxsP3QuZz09bnVsbDp5aSh0Lm4sdC5nKX19ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRHVlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxWXyksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IEJMKSkpLHhlKHQsVl8sd3csRUF0KSx4ZSh0LFZfLHVILERlKEtTKSkseGUodCxWXyxjOHQsRGUobUF0KSkseGUodCxWXyxMNCxEZSh5QXQpKSx4ZSh0LFZfLHc2LERlKGtBdCkpLHhlKHQsVl8sZmN0LERlKHhBdCkpfWZ1bmN0aW9uIHZxKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9U3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSksZD1TcihDYShlMCxXZChTcihDYShuPT1udWxsPzA6SGkobiksbjApKSwxNSkpKSxvPUhDKHQsZSxyKSxvJiZkPT1vLmYmJmZkKG4sby5pKSlyZXR1cm4gbjtpZihoPUdDKHQsbixkKSxoKXRocm93IHJ0KG5ldyBQbigidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAiK24pKTtyZXR1cm4gcz1uZXcgWGooZSxyLG4sZCksbz8odjQodCxvKSxvRCh0LHMsbyksby5lPW51bGwsby5jPW51bGwsby5pKToob0QodCxzLG51bGwpLEhzZSh0KSxudWxsKX1mdW5jdGlvbiB2d24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtDPW4uYS5jLGg9bi5hLmMrbi5hLmIsbz11KEpuKG4uYyxlKSw0NTkpLEg9by5mLFY9by5hLG8uYj93PW5ldyAkZShoLEgpOnc9bmV3ICRlKEMsSCksby5jP009bmV3ICRlKEMsVik6TT1uZXcgJGUoaCxWKSxzPUMsbi5wfHwocys9dC5jKSxzKz1uLkYrbi52KnQuYixrPW5ldyAkZShzLEgpLEY9bmV3ICRlKHMsViksekMoZS5hLGN0KG90KFVzLDEpLHRlLDgsMCxbdyxrXSkpLGQ9bi5kLmEuZ2MoKT4xLGQmJihyPW5ldyAkZShzLG4uYiksbmkoZS5hLHIpKSx6QyhlLmEsY3Qob3QoVXMsMSksdGUsOCwwLFtGLE1dKSl9ZnVuY3Rpb24gYWF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoZSlpZihuPD0tMSl7aWYocj15bihlLlRnKCksLTEtbiksRXQociw5OSkpcmV0dXJuIHUociwxOCk7Zm9yKGg9dShlLmFoKHIpLDE1MyksZD0wLHc9aC5nYygpO2Q8dzsrK2QpaWYoR3QoaC5qbChkKSk9PT1HdCh0KSYmKHM9aC5pbChkKSxFdChzLDk5KSYmKG89dShzLDE4KSxvLkJiJmRjKSkpcmV0dXJuIG87dGhyb3cgcnQobmV3IEZvKCJUaGUgY29udGFpbm1lbnQgZmVhdHVyZSBjb3VsZCBub3QgYmUgbG9jYXRlZCIpKX1lbHNlIHJldHVybiBubyh1KHluKHQuVGcoKSxuKSwxOCkpO2Vsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gd3duKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9dC5sZW5ndGgsZT1uZXcgQjksbz0wO288cjspaWYobj1iYSh0LG8rKyksIShuPT05fHxuPT0xMHx8bj09MTJ8fG49PTEzfHxuPT0zMikpe2lmKG49PTM1KXtmb3IoO288ciYmKG49YmEodCxvKyspLCEobj09MTN8fG49PTEwKSk7KTtjb250aW51ZX1uPT05MiYmbzxyPyhzPShScihvLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobykpKT09MzV8fHM9PTl8fHM9PTEwfHxzPT0xMnx8cz09MTN8fHM9PTMyPyhtOChlLHMmbXMpLCsrbyk6KGUuYSs9IlxcIixtOChlLHMmbXMpLCsrbyk6bTgoZSxuJm1zKX1yZXR1cm4gZS5hfWZ1bmN0aW9uIG13bih0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMyksbG4odC5hLG4sbiksbG4odC5iLG4sbikscz1neShuKSxzLmMubGVuZ3RoIT0wKWZvcih0LmQmJnQuZC5sZyhzKSxsbih0LmEsbiwoQW4oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSwzMykpKSxsbih0LmIsbix1KEZlKHMscy5jLmxlbmd0aC0xKSwzMykpO2dpdChzKS5jLmxlbmd0aCE9MDspcz1naXQocyksdC5kJiZ0LmQubGcocyksbG4odC5hLG4sKEFuKDAscy5jLmxlbmd0aCksdShzLmNbMF0sMzMpKSksbG4odC5iLG4sdShGZShzLHMuYy5sZW5ndGgtMSksMzMpKX1mdW5jdGlvbiB5d24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKG49MCxkPW5ldyBTKHQuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxoLmkmJihoLmkuYz1uKyspO2ZvcihlPVhiKGRsLFt0ZSxpMF0sWzE3NywyNV0sMTYsW24sbl0sMiksQz10LmQscz0wO3M8Qy5jLmxlbmd0aDtzKyspaWYodz0oQW4ocyxDLmMubGVuZ3RoKSx1KEMuY1tzXSwxMDEpKSx3LmkpZm9yKG89cysxO288Qy5jLmxlbmd0aDtvKyspaz0oQW4obyxDLmMubGVuZ3RoKSx1KEMuY1tvXSwxMDEpKSxrLmkmJihyPXMwbih3LGspLGVbdy5pLmNdW2suaS5jXT1yLGVbay5pLmNdW3cuaS5jXT1yKTtyZXR1cm4gZX1mdW5jdGlvbiBHNXQodCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBoPW5ldyBKSHQoZSxuKSx0LmE/cj8ocz11KEpuKHQuYixlKSwyODMpLCsrcy5hLGguZD1yLmQsaC5lPXIuZSxoLmI9cixoLmM9cixyLmU/ci5lLmM9aDp1KEpuKHQuYixlKSwyODMpLmI9aCxyLmQ/ci5kLmI9aDp0LmE9aCxyLmQ9aCxyLmU9aCk6KHQuZS5iPWgsaC5kPXQuZSx0LmU9aCxzPXUoSm4odC5iLGUpLDI4Mykscz8oKytzLmEsbz1zLmMsby5jPWgsaC5lPW8scy5jPWgpOihraSh0LmIsZSxzPW5ldyBJd3QoaCkpLCsrdC5jKSk6KHQuYT10LmU9aCxraSh0LmIsZSxuZXcgSXd0KGgpKSwrK3QuYyksKyt0LmQsaH1mdW5jdGlvbiBweSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKG49bmV3IFJlZ0V4cChlLCJnIiksdz1QdChBZSx0ZSwyLDAsNiwxKSxyPTAsaz10LG89bnVsbDs7KWlmKGQ9bi5leGVjKGspLGQ9PW51bGx8fGs9PSIiKXt3W3JdPWs7YnJlYWt9ZWxzZSBoPWQuaW5kZXgsd1tyXT1rLnN1YnN0cigwLGgpLGs9RGwoayxoK2RbMF0ubGVuZ3RoLGsubGVuZ3RoKSxuLmxhc3RJbmRleD0wLG89PWsmJih3W3JdPWsuc3Vic3RyKDAsMSksaz1rLnN1YnN0cigxKSksbz1rLCsrcjtpZih0Lmxlbmd0aD4wKXtmb3Iocz13Lmxlbmd0aDtzPjAmJndbcy0xXT09IiI7KS0tcztzPHcubGVuZ3RoJiYody5sZW5ndGg9cyl9cmV0dXJuIHd9ZnVuY3Rpb24gVjV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKE09U28oZSksaz1udWxsLHM9ITEsZD0wLEM9TGMoTS5hKS5pO2Q8QzsrK2QpaD11KEVEKE0sZCwobz11KFN0KExjKE0uYSksZCksODcpLHc9by5jLEV0KHcsODgpP3UodywyNik6KGRuKCksV2gpKSksMjYpLG49VjV0KHQsaCksbi5kYygpfHwoaz8oc3x8KHM9ITAsaz1uZXcgTmooaykpLGsuR2MobikpOms9bik7cmV0dXJuIHI9c3BuKHQsZSksci5kYygpP2t8fCh2bigpLHZuKCksaW8pOms/KHN8fChrPW5ldyBOaihrKSksay5HYyhyKSxrKTpyfWZ1bmN0aW9uIG9hdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihNPVNvKGUpLGs9bnVsbCxyPSExLGQ9MCxDPUxjKE0uYSkuaTtkPEM7KytkKW89dShFRChNLGQsKHM9dShTdChMYyhNLmEpLGQpLDg3KSx3PXMuYyxFdCh3LDg4KT91KHcsMjYpOihkbigpLFdoKSkpLDI2KSxuPW9hdCh0LG8pLG4uZGMoKXx8KGs/KHJ8fChyPSEwLGs9bmV3IE5qKGspKSxrLkdjKG4pKTprPW4pO3JldHVybiBoPU5wbih0LGUpLGguZGMoKT9rfHwodm4oKSx2bigpLGlvKTprPyhyfHwoaz1uZXcgTmooaykpLGsuR2MoaCksayk6aH1mdW5jdGlvbiB3RCh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2lmKEV0KGUsNzIpKXJldHVybiBCYSh0LGUsbik7Zm9yKGQ9bnVsbCxvPW51bGwscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYocz1yW2hdLHlpKGUscy5kZCgpKSYmKG89cy5haygpLEV0KG8sOTkpJiZ1KG8sMTgpLkJiJmRjKSl7ZD1zO2JyZWFrfXJldHVybiBkJiYobWwodC5lKSYmKHc9by4kaigpP3pwKHQsNCxvLGUsbnVsbCxFRSh0LG8sZSxFdChvLDk5KSYmKHUobywxOCkuQmImWWEpIT0wKSwhMCk6enAodCxvLktqKCk/MjoxLG8sZSxvLnpqKCksLTEsITApLG4/bi5FaSh3KTpuPXcpLG49d0QodCxkLG4pKSxufWZ1bmN0aW9uIHh3bih0KXt2YXIgZSxuLHIscztyPXQubyxCbSgpLHQuQS5kYygpfHx5aSh0LkEsdDd0KT9zPXIuYToocz11RCh0LmYpLHQuQS5IYygoX2woKSxlTikpJiYhdC5CLkhjKChjbCgpLGVBKSkmJihzPWIuTWF0aC5tYXgocyx1RCh1KGdvKHQucCwoYmUoKSxObikpLDI0NCkpKSxzPWIuTWF0aC5tYXgocyx1RCh1KGdvKHQucCxtciksMjQ0KSkpKSxlPUFuZSh0KSxlJiYocz1iLk1hdGgubWF4KHMsZS5hKSkpLGplKFJlKHQuZS55ZigpLldlKChjaSgpLGpWKSkpKT9yLmE9Yi5NYXRoLm1heChyLmEscyk6ci5hPXMsbj10LmYuaSxuLmM9MCxuLmI9cyxmYXQodC5mKX1mdW5jdGlvbiBrd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYobj1lLkhoKHQuYSksbiYmKHc9QnIoWWYoKCFuLmImJihuLmI9bmV3IHlsKChkbigpLFFhKSxjYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihrPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLHI9cy5sYXN0SW5kZXhPZigiIyIpLEM9cj09LTE/JDJ0KHQsZS5BaigpLHMpOnI9PTA/cEkodCxudWxsLHMuc3Vic3RyKDEpKTpwSSh0LHMuc3Vic3RyKDAscikscy5zdWJzdHIocisxKSksRXQoQywxNDgpJiZ1ZShrLHUoQywxNDgpKTtyZXR1cm4ga31yZXR1cm4gdm4oKSx2bigpLGlvfWZ1bmN0aW9uIEV3bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztmb3Iod3IobiwkZmUsMSksdC5iZihlKSxvPTA7dC5kZihvKTspe2ZvcihDPW5ldyBTKGUuZSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKHc9dShKKEMpLDE0NCksZD1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtlLmUsZS5kLGUuYl0pKSk7enIoZCk7KWg9dShMcihkKSwzNTcpLGghPXcmJihzPXQuYWYoaCx3KSxzJiZMaSh3LmEscykpO2ZvcihrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTQ0KSxyPXcuYSxQYWUociwtdC5kLC10LmQsdC5kLHQuZCksTGkody5kLHIpLEdmKHIpO3QuY2YoKSwrK299b3Iobil9ZnVuY3Rpb24gVHduKHQsZSxuKXt2YXIgcixzLG8saDtpZihoPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKG89MDtvPHQuaTsrK28paWYocz1yW29dLGgucmwocy5haygpKSYmeWkocyxuKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnlpKG4scy5kZCgpKSlyZXR1cm4gZHkodCxvKSwhMH1lbHNlIGZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnMuZGQoKT09bnVsbClyZXR1cm4gZHkodCxvKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBDd24odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih0LmM9PW51bGx8fHQuYy5sZW5ndGg8ZS5jLmxlbmd0aD90LmM9UHQoZGwsaTAsMjUsZS5jLmxlbmd0aCwxNiwxKTpQOSh0LmMpLHQuYT1uZXcgbGUscj0wLGg9bmV3IFMoZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLHMucD1yKys7Zm9yKG49bmV3IFFpLG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLHQuY1tzLnBdfHwoeW9lKHQscyksbi5iPT0wfHwoUW4obi5iIT0wKSx1KG4uYS5hLmMsMTUpKS5nYygpPHQuYS5jLmxlbmd0aD9xVnQobix0LmEpOktiKG4sdC5hKSx0LmE9bmV3IGxlKTtyZXR1cm4gbn1mdW5jdGlvbiBfd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoaD11KFN0KGUsMCksMzMpLHl1KGgsMCkseHUoaCwwKSxGPW5ldyBsZSxGLmNbRi5jLmxlbmd0aF09aCxkPWgsbz1uZXcgVG50KHQuYSxoLmcsaC5mLCh5RSgpLEhTKSksSD0xO0g8ZS5pO0grKylWPXUoU3QoZSxIKSwzMyksdz12YXQodCxuNSxWLGQsbyxGLG4pLGs9dmF0KHQsUjYsVixkLG8sRixuKSxDPXZhdCh0LHFTLFYsZCxvLEYsbiksTT12YXQodCx6UyxWLGQsbyxGLG4pLHM9anluKHQsdyxrLEMsTSxWLGQscikseXUoVixzLmQpLHh1KFYscy5lKSxHayhzLEhTKSxvPXMsZD1WLEYuY1tGLmMubGVuZ3RoXT1WO3JldHVybiBvfWZ1bmN0aW9uIE91ZSh0KXtTdih0LG5ldyB3MihFdih5dihrdih4dihuZXcgcGcsJEUpLCJFTEsgU1BPckUgT3ZlcmxhcCBSZW1vdmFsIiksJ0Egbm9kZSBvdmVybGFwIHJlbW92YWwgYWxnb3JpdGhtIHByb3Bvc2VkIGJ5IE5hY2htYW5zb24gZXQgYWwuIGluICJOb2RlIG92ZXJsYXAgcmVtb3ZhbCBieSBncm93aW5nIGEgdHJlZSIuJyksbmV3IGNaKSkpLHhlKHQsJEUsX2N0LERlKGdTdCkpLHhlKHQsJEUsd3csZFN0KSx4ZSh0LCRFLGt5LDgpLHhlKHQsJEUsTGN0LERlKEMzZSkpLHhlKHQsJEUsaTh0LERlKGhTdCkpLHhlKHQsJEUsczh0LERlKGZTdCkpLHhlKHQsJEUsS0QsKEZuKCksITEpKX1mdW5jdGlvbiBOdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKGg9Rm0oZS5jLG4sciksTT1uZXcgUyhlLmEpO00uYTxNLmMuYy5sZW5ndGg7KXtmb3IoQz11KEooTSksMTApLExpKEMubixoKSxIPW5ldyBTKEMuaik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDExKSxvPW5ldyBTKEYuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDE3KSxKbShzLmEsaCksZD11KFEocywoVGUoKSxfbykpLDc0KSxkJiZKbShkLGgpLGs9bmV3IFMocy5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksTGkody5uLGgpO3VlKHQuYSxDKSxDLmE9dH19ZnVuY3Rpb24gU3duKHQsZSl7dmFyIG4scixzLG8saDtpZih3cihlLCJOb2RlIGFuZCBQb3J0IExhYmVsIFBsYWNlbWVudCBhbmQgTm9kZSBTaXppbmciLDEpLGJVdCgoejkoKSxuZXcgdHJ0KHQsITAsITAsbmV3IE5ZKSkpLHUoUSh0LChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpZm9yKG89dShRKHQsKFRlKCkscXkpKSwyMSkscz1vLkhjKChRdSgpLHROKSksaD1qZShSZShRKHQsbEN0KSkpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyOSksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG4uYSwxNikpLG5ldyBqZCksbmV3IHdLdChvLHMsaCkpO29yKGUpfWZ1bmN0aW9uIEF3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihuPWUuSGgodC5hKSxuJiYoZD1CcihZZigoIW4uYiYmKG4uYj1uZXcgeWwoKGRuKCksUWEpLGNjLG4pKSxuLmIpLG1IKSksZCE9bnVsbCkpc3dpdGNoKHM9ZGooZCxFdSgzNSkpLHI9ZS5IaigpLHM9PS0xPyhoPWtDKHQsRmwocikpLG89ZCk6cz09MD8oaD1udWxsLG89ZC5zdWJzdHIoMSkpOihoPWQuc3Vic3RyKDAscyksbz1kLnN1YnN0cihzKzEpKSwkdihFbyh0LGUpKSl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gRmNuKHQscixoLG8pO2Nhc2UgMDpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gQmNuKHQscixoLG8pfXJldHVybiBudWxsfWZ1bmN0aW9uIFU1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihoPSh0bygpLHUoZSw2NikuT2ooKSksVjAodC5lLGUpKXtpZihlLmhpKCkmJm1xKHQsZSxuLEV0KGUsOTkpJiYodShlLDE4KS5CYiZZYSkhPTApKXJldHVybiExfWVsc2UgZm9yKGQ9YXUodC5lLlRnKCksZSkscj11KHQuZywxMTkpLG89MDtvPHQuaTsrK28paWYocz1yW29dLGQucmwocy5haygpKSlyZXR1cm4oaD95aShzLG4pOm49PW51bGw/cy5kZCgpPT1udWxsOnlpKG4scy5kZCgpKSk/ITE6KHUodTQodCxvLGg/dShuLDcyKTpZZChlLG4pKSw3MiksITApO3JldHVybiBNcih0LGg/dShuLDcyKTpZZChlLG4pKX1mdW5jdGlvbiBtRCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQuZCl0aHJvdyBydChuZXcgRm8oKEwwKFp1dCksYm90K1p1dC5rK3ZvdCkpKTtmb3IodC5jPT0oYW8oKSxjMCkmJlQ0KHQsamgpLG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE4OSksZS5lPTA7Zm9yKGg9bmV3IFModC5hLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSw4MSksby5vPVRzLHM9by5mLktjKCk7cy5PYigpOylyPXUocy5QYigpLDgxKSwrK3IuZC5lO2Zvcih4NG4odCksdz1uZXcgUyh0LmEuYik7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksODEpLGQuaz0hMDtyZXR1cm4gdH1mdW5jdGlvbiBMd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBHYWUodCksbj1uZXcgUWksaHMobixlLG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9dShuLmI9PTA/bnVsbDooUW4obi5iIT0wKSxjaChuLG4uYS5hKSksMTEzKSxyLmQucD0xLGg9bmV3IFMoci5lKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSw0MDkpLGhhZShkLHMpLGs9cy5kLGsuZC5wPT0wJiZocyhuLGssbi5jLmIsbi5jKTtmb3Iobz1uZXcgUyhyLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDQwOSksaGFlKGQscyksdz1zLmMsdy5kLnA9PTAmJmhzKG4sdyxuLmMuYixuLmMpfXJldHVybiBkfWZ1bmN0aW9uIFB1ZSh0KXt2YXIgZSxuLHIscyxvO2lmKHI9WHQoeWUocWUodCwoY2koKSxRM2UpKSkpLHIhPTEpZm9yKHNqKHQscip0Lmcscip0LmYpLG49R1llKGV0bigoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLG5ldyBOWikpLG89QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbKCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uKSwoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpLG5dKSkpO3pyKG8pOylzPXUoTHIobyksNDcwKSxzLkdnKHIqcy5EZygpLHIqcy5FZygpKSxzLkZnKHIqcy5DZygpLHIqcy5CZygpKSxlPXUocy5XZShKU3QpLDgpLGUmJihlLmEqPXIsZS5iKj1yKX1mdW5jdGlvbiBNd24odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGO2ZvcihoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSxGPXNJKG8uYSksaz1GLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpc3dpdGNoKHc9a1tDXSx1KFEodywoVGUoKSxjdSkpLDE2MykuZyl7Y2FzZSAxOnJ2bih3KSxrbyh3LGUpLG5zZSh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpxMm4odyksa28odyxuKSxuc2UodywhMSxzKX1mb3IoZD1uZXcgaGEodC5iLDApO2QuYjxkLmQuZ2MoKTspKFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLmEuYy5sZW5ndGg9PTAmJkVsKGQpfWZ1bmN0aW9uIEl3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKG49ZS5IaCh0LmEpLG4mJih3PUJyKFlmKCghbi5iJiYobi5iPW5ldyB5bCgoZG4oKSxRYSksY2MsbikpLG4uYiksQjh0KSksdyE9bnVsbCkpe2ZvcihyPW5ldyBsZSxvPXB5KHcsIlxcdyIpLGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpcz1vW2hdLGhuKHMsIiMjb3RoZXIiKT91ZShyLCIhIyMiK2tDKHQsRmwoZS5IaigpKSkpOmhuKHMsIiMjbG9jYWwiKT9yLmNbci5jLmxlbmd0aF09bnVsbDpobihzLHRPKT91ZShyLGtDKHQsRmwoZS5IaigpKSkpOnIuY1tyLmMubGVuZ3RoXT1zO3JldHVybiByfXJldHVybiB2bigpLHZuKCksaW99ZnVuY3Rpb24gRHduKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IHRmLHI9dShQbChwdShuZXcgVG4obnVsbCxuZXcgX24odC5mLDE2KSksbiksWW0obmV3IGNuLG5ldyBsaSxuZXcgZGksbmV3IEVlLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxMeSksR2xdKSkpLDIxKSxzPXIuZ2MoKSxyPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKGUuZiwxNikpLG4pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbTHksR2xdKSkpLDIxKSxvPXIuZ2MoKSxzPXM9PTE/MTowLG89bz09MT8xOjAsczxvPy0xOnM9PW8/MDoxfWZ1bmN0aW9uIE93bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGQ9dC5pLHM9amUoUmUoUShkLChUZSgpLCR5KSkpKSxDPTAscj0wLGs9bmV3IFModC5nKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNyksaD1WYSh3KSxvPWgmJnMmJmplKFJlKFEodyxQMikpKSxGPXcuZC5pLGgmJm8/KytyOmgmJiFvPysrQzpGYShGKS5lPT1kPysrcjorK0M7Zm9yKG49bmV3IFModC5lKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNyksaD1WYShlKSxvPWgmJnMmJmplKFJlKFEoZSxQMikpKSxNPWUuYy5pLGgmJm8/KytDOmgmJiFvPysrcjpGYShNKS5lPT1kPysrQzorK3I7cmV0dXJuIEMtcn1mdW5jdGlvbiB4NCh0LGUsbixyKXt0aGlzLmU9dCx0aGlzLms9dShRKHQsKHNlKCksWTQpKSwzMDQpLHRoaXMuZz1QdChvMCx6ZywxMCxlLDAsMSksdGhpcy5iPVB0KGNhLHRlLDMzMyxlLDcsMSksdGhpcy5hPVB0KG8wLHpnLDEwLGUsMCwxKSx0aGlzLmQ9UHQoY2EsdGUsMzMzLGUsNywxKSx0aGlzLmo9UHQobzAsemcsMTAsZSwwLDEpLHRoaXMuaT1QdChjYSx0ZSwzMzMsZSw3LDEpLHRoaXMucD1QdChjYSx0ZSwzMzMsZSw3LDEpLHRoaXMubj1QdChCcyx0ZSw0NzYsZSw4LDEpLHlNKHRoaXMubiwoRm4oKSwhMSkpLHRoaXMuZj1QdChCcyx0ZSw0NzYsZSw4LDEpLHlNKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gRnVlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKCFlLmRjKCkpaWYodShlLlhiKDApLDI4NikuZD09KGk2KCksT3kpKWgxbih0LGUpO2Vsc2UgZm9yKHI9ZS5LYygpO3IuT2IoKTspe3N3aXRjaChuPXUoci5QYigpLDI4Niksbi5kLmcpe2Nhc2UgNTpwRSh0LG4seGxuKHQsbikpO2JyZWFrO2Nhc2UgMDpwRSh0LG4sKGg9bi5mLW4uYysxLGQ9KGgtMSkvMnwwLG4uYytkKSk7YnJlYWs7Y2FzZSA0OnBFKHQsbixQYW4odCxuKSk7YnJlYWs7Y2FzZSAyOmNpZShuKSxwRSh0LG4sKG89YjR0KG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTpjaWUobikscEUodCxuLChzPWI0dChuKSxzP24uZjpuLmMpKX1jMG4obi5hKX19ZnVuY3Rpb24gTnduKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYoIWUuZSl7Zm9yKGUuZT0hMCxyPWUuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPXUoci5QYigpLDE3KSxlLm8mJmUuZC5hLmdjKCk8PTEpe2g9ZS5hLmMsZD1lLmEuYytlLmEuYix3PW5ldyAkZShoKyhkLWgpLzIsZS5iKSxuaSh1KGUuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5hLHcpO2NvbnRpbnVlfWlmKHM9dShKbihlLmMsbiksNDU5KSxzLmJ8fHMuYyl7dnduKHQsbixlKTtjb250aW51ZX1vPXQuZD09KHRFKCksSVMpJiYocy5kfHxzLmUpJiZBcG4odCxlKSYmZS5kLmEuZ2MoKTw9MSxvP3Q0bihuLGUpOlB2bih0LG4sZSl9ZS5rJiZ2YShlLmQsbmV3IEUzKX19ZnVuY3Rpb24gVzV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoRj1vLGQ9KHIrcykvMitGLHR0PW4qYi5NYXRoLmNvcyhkKSxndD1uKmIuTWF0aC5zaW4oZCksTHQ9dHQtZS5nLzIsX3Q9Z3QtZS5mLzIseXUoZSxMdCkseHUoZSxfdCksTT10LmEuamcoZSksWT0yKmIuTWF0aC5hY29zKG4vbit0LmMpLFk8cy1yPyhIPVkvTSxoPShyK3MtWSkvMik6KEg9KHMtcikvTSxoPXIpLFY9Z3koZSksdC5lJiYodC5lLmtnKHQuZCksdC5lLmxnKFYpKSxrPW5ldyBTKFYpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDMzKSxDPXQuYS5qZyh3KSxXNXQodCx3LG4rdC5jLGgsaCtIKkMsbyksaCs9SCpDfWZ1bmN0aW9uIFB3bih0LGUsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldE1vbnRoKCksZSl7Y2FzZSA1OlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW3JdKTticmVhaztjYXNlIDQ6VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyRhdCx6YXQscWF0LEhhdCxsNixHYXQsVmF0LFVhdCxXYXQsS2F0LFlhdCxYYXRdKVtyXSk7YnJlYWs7Y2FzZSAzOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixsNiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW3JdKTticmVhaztkZWZhdWx0OlhkKHQscisxLGUpfX1mdW5jdGlvbiBjYXQodCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIk5ldHdvcmsgc2ltcGxleCIsMSksdC5lLmEuYy5sZW5ndGg8MSl7b3IoZSk7cmV0dXJufWZvcihvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMjEpLHMuZT0wO2ZvcihoPXQuZS5hLmMubGVuZ3RoPj00MCxoJiZrbW4odCksX3luKHQpLHN2bih0KSxuPVlyZSh0KSxyPTA7biYmcjx0LmY7KVJ3bih0LG4saWJuKHQsbikpLG49WXJlKHQpLCsrcjtoJiZBZG4odCksdC5hP3dibih0LE11ZSh0KSk6TXVlKHQpLHQuYj1udWxsLHQuZD1udWxsLHQucD1udWxsLHQuYz1udWxsLHQuZz1udWxsLHQuaT1udWxsLHQubj1udWxsLHQubz1udWxsLG9yKGUpfWZ1bmN0aW9uIEZ3bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEY7Zm9yKHc9bmV3ICRlKG4sciksbmEodyx1KFEoZSwoR3AoKSxsUykpLDgpKSxGPW5ldyBTKGUuZSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTQ0KSxMaShNLmQsdyksdWUodC5lLE0pO2ZvcihkPW5ldyBTKGUuYyk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwyODIpLG89bmV3IFMoaC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw1NTkpLExpKHMuZCx3KTt1ZSh0LmMsaCl9Zm9yKEM9bmV3IFMoZS5kKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0NDcpLExpKGsuZCx3KSx1ZSh0LmQsayl9ZnVuY3Rpb24gSzV0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz1uZXcgUyhlLmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwxMSkscz1uZXcgUzEoZC5iKTtWbyhzLmEpfHxWbyhzLmIpOylyPXUoVm8ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxuPXIuYz09ZD9yLmQ6ci5jLG89bi5pLGUhPW8mJihrPXUoUShyLChUZSgpLHc3KSksMTkpLmEsazwwJiYoaz0wKSxoPW8ucCx0LmJbaF09PTAmJihyLmQ9PW4/KHQuYVtoXS09aysxLHQuYVtoXTw9MCYmdC5jW2hdPjAmJm5pKHQuZixvKSk6KHQuY1toXS09aysxLHQuY1toXTw9MCYmdC5hW2hdPjAmJm5pKHQuZSxvKSkpKX1mdW5jdGlvbiBCd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihkPW5ldyBMcCh1KEFyKG5ldyBGZCksNjIpKSxrPVRzLG49bmV3IFModC5kKTtuLmE8bi5jLmMubGVuZ3RoOyl7Zm9yKGU9dShKKG4pLDIyMiksaz1lLmMuYztkLmEuYyE9MCYmKHc9dShoZW4ocGFuKGQuYSkpLDIyMiksdy5jLmMrdy5jLmI8ayk7KUlDKGQuYSx3KSE9bnVsbDtmb3IoaD0ocz1uZXcgdkMobmV3IGdDKG5ldyB5KGQuYSkuYSkuYiksbmV3IGcocykpO21NKGguYS5hKTspbz0ocj13aihoLmEpLHUoci5jZCgpLDIyMikpLG5pKG8uYixlKSxuaShlLmIsbyk7cHooZC5hLGUsKEZuKCksSTIpKT09bnVsbH19ZnVuY3Rpb24gQnVlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKG89bmV3IFljKGUuYy5sZW5ndGgpLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspaD11KEooayksMTApLHVlKG8sdC5iW2guYy5wXVtoLnBdKTtmb3IoVXluKHQsbyxuKSxNPW51bGw7TT1XM24obyk7KUJtbih0LHUoTS5hLDIzMyksdShNLmIsMjMzKSxvKTtmb3IoZS5jPVB0KFhuLEllLDEsMCw1LDEpLHM9bmV3IFMobyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDIzMyksZD1yLmQsdz0wLEM9ZC5sZW5ndGg7dzxDOysrdyloPWRbd10sZS5jW2UuYy5sZW5ndGhdPWgsdC5hW2guYy5wXVtoLnBdLmE9eDEoci5nLHIuZFswXSkuYX1mdW5jdGlvbiBZNXQodCxlKXt2YXIgbixyLHMsbztpZigwPChFdCh0LDE0KT91KHQsMTQpLmdjKCk6TjAodC5LYygpKSkpe2lmKHM9ZSwxPHMpe2ZvcigtLXMsbz1uZXcgRlEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDg2KSxvPUwxKGN0KG90KEIxLDEpLEllLDIwLDAsW28sbmV3IENwKG4pXSkpO3JldHVybiBZNXQobyxzKX1pZihzPDApe2ZvcihvPW5ldyBCUSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksODYpLG89TDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbyxuZXcgQ3AobildKSk7aWYoMDwoRXQobywxNCk/dShvLDE0KS5nYygpOk4wKG8uS2MoKSkpKXJldHVybiBZNXQobyxzKX19cmV0dXJuIHUobGoodC5LYygpKSw4Nil9ZnVuY3Rpb24gY2woKXtjbD1aLE03PW5ldyB6MygiREVGQVVMVF9NSU5JTVVNX1NJWkUiLDApLGlOPW5ldyB6MygiTUlOSU1VTV9TSVpFX0FDQ09VTlRTX0ZPUl9QQURESU5HIiwxKSxWVj1uZXcgejMoIkNPTVBVVEVfUEFERElORyIsMiksZUE9bmV3IHozKCJPVVRTSURFX05PREVfTEFCRUxTX09WRVJIQU5HIiwzKSxVVj1uZXcgejMoIlBPUlRTX09WRVJIQU5HIiw0KSxLVj1uZXcgejMoIlVOSUZPUk1fUE9SVF9TUEFDSU5HIiw1KSxXVj1uZXcgejMoIlNQQUNFX0VGRklDSUVOVF9QT1JUX0xBQkVMUyIsNiksdmZ0PW5ldyB6MygiRk9SQ0VfVEFCVUxBUl9OT0RFX0xBQkVMUyIsNyksck49bmV3IHozKCJBU1lNTUVUUklDQUwiLDgpfWZ1bmN0aW9uIHVhdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYoZSl7aWYobj0obz1lLlRnKCksbz9GbChvKS5OaCgpLkpoKG8pOm51bGwpLG4pe2ZvcihwMih0LGUsbikscz1lLlRnKCksdz0wLGs9KHMuaT09bnVsbCYmcGQocykscy5pKS5sZW5ndGg7dzxrOysrdylkPShyPShzLmk9PW51bGwmJnBkKHMpLHMuaSksdz49MCYmdzxyLmxlbmd0aD9yW3ddOm51bGwpLGQuSWooKSYmIWQuSmooKSYmKEV0KGQsMzIyKT9XaG4odCx1KGQsMzQpLGUsbik6KGg9dShkLDE4KSxoLkJiJmRjJiZyZG4odCxoLGUsbikpKTtlLmtoKCkmJnUobiw0OSkudmgodShlLDQ5KS5xaCgpKX1yZXR1cm4gbn1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIFJ3bih0LGUsbil7dmFyIHIscyxvO2lmKCFlLmYpdGhyb3cgcnQobmV3IFBuKCJHaXZlbiBsZWF2ZSBlZGdlIGlzIG5vIHRyZWUgZWRnZS4iKSk7aWYobi5mKXRocm93IHJ0KG5ldyBQbigiR2l2ZW4gZW50ZXIgZWRnZSBpcyBhIHRyZWUgZWRnZSBhbHJlYWR5LiIpKTtmb3IoZS5mPSExLGYydCh0LnAsZSksbi5mPSEwLE5zKHQucCxuKSxyPW4uZS5lLW4uZC5lLW4uYSwkc3QodCxuLmUsZSl8fChyPS1yKSxvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMjEpLCRzdCh0LHMsZSl8fChzLmUrPXIpO3Quaj0xLFA5KHQuYyksSjR0KHQsdShKKG5ldyBTKHQuZS5hKSksMTIxKSksVmxlKHQpfWZ1bmN0aW9uIFJ1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihkPXUoUShlLChUZSgpLG9zKSksOTgpLGQ9PShvYSgpLGgwKXx8ZD09VmMpZm9yKHM9bmV3ICRlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKS5iLGg9bmV3IFModC5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksby5rPT0oR24oKSx4cykmJihuPXUoUShvLChzZSgpLG9jKSksNjEpLCEobiE9KGJlKCksSG4pJiZuIT1CbikmJihyPVh0KHllKFEobyxEdykpKSxkPT1oMCYmKHIqPXMpLG8ubi5iPXItdShRKG8sUHcpLDgpLmIsZnoobywhMSwhMCkpKX1mdW5jdGlvbiBqdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYocm9uKHQsZSxuKSxvPWVbbl0sSD1yPyhiZSgpLEJuKTooYmUoKSxIbiksUlhlKGUubGVuZ3RoLG4scikpe2ZvcihzPWVbcj9uLTE6bisxXSxtbXQodCxzLHI/KHNvKCksZXUpOihzbygpLEp1KSksdz1vLEM9MCxGPXcubGVuZ3RoO0M8RjsrK0MpaD13W0NdLFIzdCh0LGgsSCk7Zm9yKG1tdCh0LG8scj8oc28oKSxKdSk6KHNvKCksZXUpKSxkPXMsaz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10saC5lfHxSM3QodCxoLEhJKEgpKX1lbHNlIGZvcihkPW8saz0wLE09ZC5sZW5ndGg7azxNOysrayloPWRba10sUjN0KHQsaCxIKTtyZXR1cm4hMX1mdW5jdGlvbiBqd24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7dz1ZbyhlLG4pLChuPT0oYmUoKSxtcil8fG49PUJuKSYmKHc9RXQodywxNTIpP1Z4KHUodywxNTIpKTpFdCh3LDEzMSk/dSh3LDEzMSkuYTpFdCh3LDU0KT9uZXcgbXYodyk6bmV3IE1tKHcpKSxoPSExO2RvIGZvcihzPSExLG89MDtvPHcuZ2MoKS0xO28rKylrPXUody5YYihvKSwxMSksZD11KHcuWGIobysxKSwxMSksYjBuKHQsayxkLHIpJiYoaD0hMCx4cnQodC5hLHUody5YYihvKSwxMSksdSh3LlhiKG8rMSksMTEpKSxDPXUody5YYihvKzEpLDExKSx3Ll9jKG8rMSx1KHcuWGIobyksMTEpKSx3Ll9jKG8sQykscz0hMCk7d2hpbGUocyk7cmV0dXJuIGh9ZnVuY3Rpb24gJHduKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7aWYobWwodC5lKSl7aWYoZSE9biYmKHM9dSh0LmcsMTE5KSxIPXNbbl0saD1ILmFrKCksVjAodC5lLGgpKSl7Zm9yKFY9YXUodC5lLlRnKCksaCksdz0tMSxkPS0xLHI9MCxrPTAsTT1lPm4/ZTpuO2s8PU07KytrKWs9PW4/ZD1yKys6KG89c1trXSxDPVYucmwoby5haygpKSxrPT1lJiYodz1rPT1NJiYhQz9yLTE6ciksQyYmKytyKTtyZXR1cm4gRj11KHRfKHQsZSxuKSw3MiksZCE9dyYmS2sodCxuZXcgZ0kodC5lLDcsaCxkZShkKSxILmRkKCksdykpLEZ9fWVsc2UgcmV0dXJuIHUocXN0KHQsZSxuKSw3Mik7cmV0dXJuIHUodF8odCxlLG4pLDcyKX1mdW5jdGlvbiB6d24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iod3IoZSwiUG9ydCBvcmRlciBwcm9jZXNzaW5nIiwxKSx3PXUoUSh0LChUZSgpLGhDdCkpLDQyMSkscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxoPXUoUShzLG9zKSw5OCksZD1zLmosaD09KG9hKCksRzIpfHxoPT1oMHx8aD09VmM/KHZuKCksWHMoZCx2VHQpKTpoIT1IMSYmaCE9eWImJih2bigpLFhzKGQsV2JlKSxuZm4oZCksdz09KHlJKCksZ2h0KSYmWHMoZCxVYmUpKSxzLmk9ITAsWDR0KHMpO29yKGUpfWZ1bmN0aW9uIHF3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3O2Zvcih3PW5ldyBDcixlPW5ldyBHdHQsaD10LktjKCk7aC5PYigpOylzPXUoaC5QYigpLDEwKSxkPUR2KGJNKG5ldyBVYixzKSxlKSxzdSh3LmYscyxkKTtmb3Iobz10LktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMCkscj1uZXcgYXIobHIoTXMocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShMcihyKSwxNyksIVZhKG4pJiZ2ZihvZihhZihzZihjZihuZXcgRWgsYi5NYXRoLm1heCgxLHUoUShuLChUZSgpLGZDdCkpLDE5KS5hKSksMSksdShKbih3LG4uYy5pKSwxMjEpKSx1KEpuKHcsbi5kLmkpLDEyMSkpKTtyZXR1cm4gZX1mdW5jdGlvbiAkdWUoKXskdWU9WixJbWU9YmkobmV3IEhzLChXYSgpLHFjKSwocm8oKSxuVHQpKSxRQ3Q9YmkobmV3IEhzLG91LGZHKSxPbWU9S3UoYmkobmV3IEhzLG91LHlHKSxJbyxtRyksTW1lPUt1KGJpKGJpKG5ldyBIcyxvdSxRN3QpLHFjLFo3dCksSW8sSjd0KSxObWU9YXcoYXcoT1IoS3UoYmkobmV3IEhzLEFkLFRHKSxJbyxFRykscWMpLGtHKSxDRyksRG1lPUt1KG5ldyBIcyxJbyxyVHQpLEFtZT1LdShiaShiaShiaShuZXcgSHMsbGIsZ0cpLHFjLGJHKSxxYyxlNyksSW8scEcpLExtZT1LdShiaShiaShuZXcgSHMscWMsZTcpLHFjLGhHKSxJbyxsRyl9ZnVuY3Rpb24gSHduKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRjtmb3Ioaz1lcmUoZSktZXJlKHQpLGg9TWFlKGUsayksdz1ydSgwLDAsMCk7az49MCYmKGQ9R2ZuKHQsaCksIShkJiYoazwyMj93Lmx8PTE8PGs6azw0ND93Lm18PTE8PGstMjI6dy5ofD0xPDxrLTQ0LHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApKSk7KUM9aC5tLE09aC5oLEY9aC5sLGguaD1NPj4+MSxoLm09Qz4+PjF8KE0mMSk8PDIxLGgubD1GPj4+MXwoQyYxKTw8MjEsLS1rO3JldHVybiBuJiZ2aXQodyksbyYmKHI/KG9iPVk4KHQpLHMmJihvYj1CbmUob2IsKE44KCksSjh0KSkpKTpvYj1ydSh0LmwsdC5tLHQuaCkpLHd9ZnVuY3Rpb24gR3duKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKGs9dC5lW2UuYy5wXVtlLnBdKzEsdz1lLmMuYS5jLmxlbmd0aCsxLGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKSxNPTAsbz0wLHM9QnAoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbbmV3IFlzKGgpLG5ldyBFcihoKV0pKSk7enIocyk7KXI9dShMcihzKSwxMSksci5pLmM9PWUuYyYmKE0rPURYZSh0LHIuaSkrMSwrK28pO249TS9vLEM9aC5qLEM9PShiZSgpLEhuKT9uPGs/dC5mW2gucF09dC5jLW46dC5mW2gucF09dC5iKyh3LW4pOkM9PUJuJiYobjxrP3QuZltoLnBdPXQuYituOnQuZltoLnBdPXQuYy0ody1uKSl9fWZ1bmN0aW9uICRsKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHQ9PW51bGwpdGhyb3cgcnQobmV3IG9kKFR1KSk7Zm9yKG89dC5sZW5ndGgsaD1vPjAmJihScigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ1fHwoUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00MykpPzE6MCxyPWg7cjxvO3IrKylpZihNaWUoKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSkpPT0tMSl0aHJvdyBydChuZXcgb2QodncrdCsnIicpKTtpZihkPXBhcnNlSW50KHQsMTApLHM9ZDxlLGlzTmFOKGQpKXRocm93IHJ0KG5ldyBvZCh2dyt0KyciJykpO2lmKHN8fGQ+bil0aHJvdyBydChuZXcgb2QodncrdCsnIicpKTtyZXR1cm4gZH1mdW5jdGlvbiBWd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9bmV3IFFpLG89bmV3IFModC5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMTIpLG5NKHMscy5mLmMubGVuZ3RoKSx4OShzLHMuay5jLmxlbmd0aCkscy5pPT0wJiYocy5vPTAsaHMoaCxzLGguYy5iLGguYykpO2Zvcig7aC5iIT0wOylmb3Iocz11KGguYj09MD9udWxsOihRbihoLmIhPTApLGNoKGgsaC5hLmEpKSwxMTIpLHI9cy5vKzEsbj1uZXcgUyhzLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksZD1lLmEsWUIoZCxiLk1hdGgubWF4KGQubyxyKSkseDkoZCxkLmktMSksZC5pPT0wJiZocyhoLGQsaC5jLmIsaC5jKX1mdW5jdGlvbiBVd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDc5KSxyPU1vKHUoU3QoKCFvLmImJihvLmI9bmV3IENuKGJyLG8sNCw3KSksby5iKSwwKSw4MikpLGQ9ci5pLHc9ci5qLHM9dShTdCgoIW8uYSYmKG8uYT1uZXcgaGUoWmksbyw2LDYpKSxvLmEpLDApLDIwMiksb2oocyxzLmorZCxzLmsrdyksYWoocyxzLmIrZCxzLmMrdyksbj1uZXcgZXIoKCFzLmEmJihzLmE9bmV3IFNzKEhoLHMsNSkpLHMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLG4ydChlLGUuYStkLGUuYit3KTtheXQodShxZShvLChjaSgpLGk1KSksNzQpLGQsdyl9fWZ1bmN0aW9uIGtFKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDEwMDpyZXR1cm4gQzQoaVMsITApO2Nhc2UgNjg6cmV0dXJuIEM0KGlTLCExKTtjYXNlIDExOTpyZXR1cm4gQzQob3V0LCEwKTtjYXNlIDg3OnJldHVybiBDNChvdXQsITEpO2Nhc2UgMTE1OnJldHVybiBDNChjdXQsITApO2Nhc2UgODM6cmV0dXJuIEM0KGN1dCwhMSk7Y2FzZSA5OTpyZXR1cm4gQzQodXV0LCEwKTtjYXNlIDY3OnJldHVybiBDNCh1dXQsITEpO2Nhc2UgMTA1OnJldHVybiBDNChsdXQsITApO2Nhc2UgNzM6cmV0dXJuIEM0KGx1dCwhMSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgR28oKGU9dCx0Z2UrZS50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIFd3bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChzPXUoRmUodC5hLDApLDEwKSxlPW5ldyBIMCh0KSx1ZSh0LmEsZSksZS5vLmE9Yi5NYXRoLm1heCgxLHMuby5hKSxlLm8uYj1iLk1hdGgubWF4KDEscy5vLmIpLGUubi5hPXMubi5hLGUubi5iPXMubi5iLHUoUShzLChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgNDplLm4uYSs9MjticmVhaztjYXNlIDE6ZS5uLmIrPTI7YnJlYWs7Y2FzZSAyOmUubi5hLT0yO2JyZWFrO2Nhc2UgMzplLm4uYi09Mn1yZXR1cm4gcj1uZXcgTWMsVW8ocixlKSxuPW5ldyB6dixvPXUoRmUocy5qLDApLDExKSxEYShuLG8pLHNhKG4sciksTGkoR2Yoci5uKSxvLm4pLExpKEdmKHIuYSksby5hKSxlfWZ1bmN0aW9uIHp1ZSh0LGUsbixyLHMpe24mJighcnx8KHQuYy10LmImdC5hLmxlbmd0aC0xKT4xKSYmZT09MSYmdSh0LmFbdC5iXSwxMCkuaz09KEduKCksU2wpP2M2KHUodC5hW3QuYl0sMTApLChqbCgpLHUwKSk6ciYmKCFufHwodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPjEpJiZlPT0xJiZ1KHQuYVt0LmMtMSZ0LmEubGVuZ3RoLTFdLDEwKS5rPT0oR24oKSxTbCk/YzYodSh0LmFbdC5jLTEmdC5hLmxlbmd0aC0xXSwxMCksKGpsKCksd2IpKToodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPT0yPyhjNih1KEtDKHQpLDEwKSwoamwoKSx1MCkpLGM2KHUoS0ModCksMTApLHdiKSk6amJuKHQscykscm10KHQpfWZ1bmN0aW9uIEt3bih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wLHM9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxoPSIiLCghci5uJiYoci5uPW5ldyBoZShxbyxyLDEsNykpLHIubikuaT09MHx8KGg9dShTdCgoIXIubiYmKHIubj1uZXcgaGUocW8sciwxLDcpKSxyLm4pLDApLDEzNykuYSksZD1uZXcgeWl0KG8rKyxlLGgpLExvKGQsciksSnQoZCwoZmMoKSxqUyksciksZC5lLmI9ci5qK3IuZi8yLGQuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGQuZS5hPXIuaStyLmcvMixkLmYuYj1iLk1hdGgubWF4KHIuZiwxKSxuaShlLmIsZCksc3Uobi5mLHIsZCl9ZnVuY3Rpb24gWXduKHQpe3ZhciBlLG4scixzLG87cj11KFEodCwoc2UoKSxfaSkpLDMzKSxvPXUocWUociwoVGUoKSxGMikpLDE3NCkuSGMoKF9sKCksVjIpKSx0LmV8fChzPXUoUSh0LEdjKSwyMSksZT1uZXcgJGUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLHMuSGMoKG9vKCksYmgpKT8oYm8ocixvcywob2EoKSxWYykpLGd3KHIsZS5hLGUuYiwhMSwhMCkpOmplKFJlKHFlKHIsWmx0KSkpfHxndyhyLGUuYSxlLmIsITAsITApKSxvP2JvKHIsRjIsdW4oVjIpKTpibyhyLEYyLChuPXUoSGYodEEpLDkpLG5ldyByaChuLHUodWYobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBYNXQodCxlLG4pe3ZhciByLHMsbyxoO2lmKGVbMF0+PXQubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goYmEodCxlWzBdKSl7Y2FzZSA0MzpzPTE7YnJlYWs7Y2FzZSA0NTpzPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrZVswXSxvPWVbMF0saD1ycSh0LGUpLGg9PTAmJmVbMF09PW8pcmV0dXJuITE7aWYoZVswXTx0Lmxlbmd0aCYmYmEodCxlWzBdKT09NTgpe2lmKHI9aCo2MCwrK2VbMF0sbz1lWzBdLGg9cnEodCxlKSxoPT0wJiZlWzBdPT1vKXJldHVybiExO3IrPWh9ZWxzZSByPWgscjwyNCYmZVswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1zLG4ubz0tciwhMH1mdW5jdGlvbiBYd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2ZvcihoPW5ldyBsZSxyPW5ldyBhcihscihNcyh0LmIpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLFZhKG4pJiZ1ZShoLG5ldyBBSnQobixkdGUodCxuLmMpLGR0ZSh0LG4uZCkpKTtmb3Ioaz0obz1uZXcgYjEodC5lKS5hLnZjKCkuS2MoKSxuZXcgdjEobykpO2suYS5PYigpOylkPShlPXUoay5hLlBiKCksNDIpLHUoZS5kZCgpLDExMykpLGQuZC5wPTA7Zm9yKHc9KHM9bmV3IGIxKHQuZSkuYS52YygpLktjKCksbmV3IHYxKHMpKTt3LmEuT2IoKTspZD0oZT11KHcuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSxkLmQucD09MCYmdWUodC5kLEx3bih0LGQpKX1mdW5jdGlvbiBRd24odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG89azEodCkscz1uZXcgZXIoKCF0LmUmJih0LmU9bmV3IENuKFdzLHQsNyw0KSksdC5lKSk7cy5lIT1zLmkuZ2MoKTspaWYocj11KGRyKHMpLDc5KSxkPU1vKHUoU3QoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpLCFabShkLG8pKXJldHVybiEwO2ZvcihuPW5ldyBlcigoIXQuZCYmKHQuZD1uZXcgQ24oV3MsdCw4LDUpKSx0LmQpKTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksNzkpLGg9TW8odShTdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSksIVptKGgsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWnduKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHc9bmV3IER1LGU9ZWkodCwwKSxkPW51bGwsbj11KHRpKGUpLDgpLHM9dSh0aShlKSw4KTtlLmIhPWUuZC5jOylkPW4sbj1zLHM9dSh0aShlKSw4KSxvPWFlZShuYShuZXcgJGUoZC5hLGQuYiksbikpLGg9YWVlKG5hKG5ldyAkZShzLmEscy5iKSxuKSkscj0xMCxyPWIuTWF0aC5taW4ocixiLk1hdGguYWJzKG8uYStvLmIpLzIpLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoaC5hK2guYikvMiksby5hPUtNKG8uYSkqcixvLmI9S00oby5iKSpyLGguYT1LTShoLmEpKnIsaC5iPUtNKGguYikqcixuaSh3LExpKG8sbikpLG5pKHcsTGkoaCxuKSk7cmV0dXJuIHd9ZnVuY3Rpb24gemwodCxlLG4scil7dmFyIHMsbyxoLGQsdztyZXR1cm4gaD10LmVoKCksdz10LlpnKCkscz1udWxsLHc/ZSYmIShhYXQodCxlLG4pLkJiJllhKT8ocj1CYSh3LlZrKCksdCxyKSx0LnVoKG51bGwpLHM9ZS5maCgpKTp3PW51bGw6KGgmJih3PWguZmgoKSksZSYmKHM9ZS5maCgpKSksdyE9cyYmdyYmdy5aayh0KSxkPXQuVmcoKSx0LlJnKGUsbiksdyE9cyYmcyYmcy5Zayh0KSx0LkxnKCkmJnQuTWcoKSYmKGgmJmQ+PTAmJmQhPW4mJihvPW5ldyBRcyh0LDEsZCxoLG51bGwpLHI/ci5FaShvKTpyPW8pLG4+PTAmJihvPW5ldyBRcyh0LDEsbixkPT1uP2g6bnVsbCxlKSxyP3IuRWkobyk6cj1vKSkscn1mdW5jdGlvbiBxdWUodCl7dmFyIGUsbixyO2lmKHQuYj09bnVsbCl7aWYocj1uZXcgeGcsdC5pIT1udWxsJiYoZm8ocix0LmkpLHIuYSs9IjoiKSx0LmYmMjU2KXtmb3IodC5mJjI1NiYmdC5hIT1udWxsJiYoaG5uKHQuaSl8fChyLmErPSIvLyIpLGZvKHIsdC5hKSksdC5kIT1udWxsJiYoci5hKz0iLyIsZm8ocix0LmQpKSx0LmYmMTYmJihyLmErPSIvIiksZT0wLG49dC5qLmxlbmd0aDtlPG47ZSsrKWUhPTAmJihyLmErPSIvIiksZm8ocix0LmpbZV0pO3QuZyE9bnVsbCYmKHIuYSs9Ij8iLGZvKHIsdC5nKSl9ZWxzZSBmbyhyLHQuYSk7dC5lIT1udWxsJiYoci5hKz0iIyIsZm8ocix0LmUpKSx0LmI9ci5hfXJldHVybiB0LmJ9ZnVuY3Rpb24gSnduKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89UShyLChzZSgpLF9pKSksRXQobywxMSkmJihoPXUobywxMSksZD1vbGUoZSxyLGguby5hLGguby5iKSxoLm4uYT1kLmEsaC5uLmI9ZC5iLEZzKGgsdShRKHIsb2MpLDYxKSkpO249bmV3ICRlKGUuZi5hK2UuZC5iK2UuZC5jLGUuZi5iK2UuZC5kK2UuZC5hKSx1KFEoZSwoc2UoKSxHYykpLDIxKS5IYygob28oKSxiaCkpPyhKdCh0LChUZSgpLG9zKSwob2EoKSxWYykpLHUoUShGYSh0KSxHYyksMjEpLkZjKGY3KSxHbGUodCxuLCExKSk6R2xlKHQsbiwhMCl9ZnVuY3Rpb24gdG1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYod3IobiwiTWluaW1pemUgQ3Jvc3NpbmdzICIrdC5hLDEpLHI9ZS5iLmMubGVuZ3RoPT0wfHwhajkoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBadChuZXcgRWspKSkuc2QoKFdiKCksSkUpKSx3PWUuYi5jLmxlbmd0aD09MSYmdShGZShlLmIsMCksMjkpLmEuYy5sZW5ndGg9PTEsbz1HdChRKGUsKFRlKCksankpKSk9PT1HdCgoJDAoKSxaZykpLHJ8fHcmJiFvKXtvcihuKTtyZXR1cm59cz1YMm4odCxlKSxoPShkPXUoUWYocywwKSwyMTQpLGQuYy5SZigpP2QuYy5MZigpP25ldyBmJHQodCk6bmV3IGQkdCh0KTpuZXcgaCR0KHQpKSxRY24ocyxoKSxFdW4odCksb3Iobil9ZnVuY3Rpb24gZW1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7aWYodz1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxzPVNyKENhKGUwLFdkKFNyKENhKG49PW51bGw/MDpIaShuKSxuMCkpLDE1KSkpLGQ9R0ModCxlLHcpLGg9SEModCxuLHMpLGQmJnM9PWQuYSYmZmQobixkLmcpKXJldHVybiBuO2lmKGgmJiFyKXRocm93IHJ0KG5ldyBQbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGQmJnY0KHQsZCksaCYmdjQodCxoKSxvPW5ldyBYaihuLHMsZSx3KSxvRCh0LG8saCksaCYmKGguZT1udWxsLGguYz1udWxsKSxkJiYoZC5lPW51bGwsZC5jPW51bGwpLEhzZSh0KSxkP2QuZzpudWxsfWZ1bmN0aW9uIEh1ZSh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz0wO288ZTtvKyspe2ZvcihyPTAsZD1vKzE7ZDxlO2QrKylyPU9hKE9hKENhKFBzKHRbb10sY28pLFBzKHRbZF0sY28pKSxQcyhuW28rZF0sY28pKSxQcyhTcihyKSxjbykpLG5bbytkXT1TcihyKSxyPXptKHIsMzIpO25bbytlXT1TcihyKX1mb3IoRG9uKG4sbixlPDwxKSxyPTAscz0wLGg9MDtzPGU7KytzLGgrKylyPU9hKE9hKENhKFBzKHRbc10sY28pLFBzKHRbc10sY28pKSxQcyhuW2hdLGNvKSksUHMoU3IociksY28pKSxuW2hdPVNyKHIpLHI9em0ociwzMiksKytoLHI9T2EocixQcyhuW2hdLGNvKSksbltoXT1TcihyKSxyPXptKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIEd1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQztpZighUzgoZSkpe2Zvcih3PVh0KHllKGl5KG4uYywoVGUoKSxfUykpKSksaz11KGl5KG4uYyxMTyksMTQyKSwhayYmKGs9bmV3IE05KSxyPW4uYSxzPW51bGwsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSxDPTAscz8oQz13LEMrPXMuby5iKTpDPWsuZCxvPUR2KGJNKG5ldyBVYixoKSx0LmYpLGtpKHQuayxoLG8pLHZmKG9mKGFmKHNmKGNmKG5ldyBFaCwwKSxwcyhiLk1hdGguY2VpbChDKSkpLHIpLG8pKSxzPWgscj1vO3ZmKG9mKGFmKHNmKGNmKG5ldyBFaCwwKSxwcyhiLk1hdGguY2VpbChrLmErcy5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIG5tbih0LGUsbixyLHMsbyxoLGQpe3ZhciB3LGssQyxNLEYsSDtyZXR1cm4gSD0hMSxGPW8tbi5zLEM9bi50LWUuZisoaz1FXyhuLEYsITEpLGsuYSksci5nK2Q+Rj8hMTooTT0odz1FXyhyLEYsITEpLHcuYSksQytkK008PWUuYiYmKGRJKG4sby1uLnMpLG4uYz0hMCxkSShyLG8tbi5zKSxZSShyLG4ucyxuLnQrbi5kK2QpLHIuaz0hMCxjeXQobi5xLHIpLEg9ITAscyYmKFkkKGUsciksci5qPWUsdC5jLmxlbmd0aD5oJiYodEQoKEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSksciksKEFuKGgsdC5jLmxlbmd0aCksdSh0LmNbaF0sMjAwKSkuYS5jLmxlbmd0aD09MCYmQWcodCxoKSkpKSxIKX1mdW5jdGlvbiBybW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYod3IoZSwiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLHM9bmV3IEh2LHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEsMTYpKSxuZXcgUlkpLG5ldyBidihzKSkscy5kIT0wKXtmb3IoZD11KFBsKFBRdCgobz1zLmksbmV3IFRuKG51bGwsKG98fChzLmk9bmV3IFczKHMscy5jKSkpLk5jKCkpKSksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHI9ZC5LYygpLG49dShyLlBiKCksMTkpO3IuT2IoKTspaD11KHIuUGIoKSwxOSksYTJuKHUoQWkocyxuKSwyMSksdShBaShzLGgpLDIxKSksbj1oO29yKGUpfX1mdW5jdGlvbiBWdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7aWYoZS5wPT0wKXtmb3IoZS5wPTEsaD1uLGh8fChzPW5ldyBsZSxvPShyPXUoSGYoWGEpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpLGg9bmV3IGxhKHMsbykpLHUoaC5hLDE1KS5GYyhlKSxlLms9PShHbigpLHhzKSYmdShoLmIsMjEpLkZjKHUoUShlLChzZSgpLG9jKSksNjEpKSx3PW5ldyBTKGUuaik7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDExKSxDPUJwKEwxKGN0KG90KEIxLDEpLEllLDIwLDAsW25ldyBZcyhkKSxuZXcgRXIoZCldKSkpO3pyKEMpOylrPXUoTHIoQyksMTEpLFZ1ZSh0LGsuaSxoKTtyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtXyh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5BYil7aWYodC5BYil7aWYoaD10LkFiLmksaD4wKXtpZihzPXUodC5BYi5nLDE5MzQpLGU9PW51bGwpe2ZvcihvPTA7bzxoOysrbylpZihuPXNbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGg7KytvKWlmKG49c1tvXSxobihlLG4uZCkpcmV0dXJuIG59fWVsc2UgaWYoZT09bnVsbCl7Zm9yKHI9bmV3IGVyKHQuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw1OTApLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBlcih0LkFiKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNTkwKSxobihlLG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gaW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztpZihrPVJlKFEoZSwoaHcoKSx1eWUpKSksaz09bnVsbHx8KE9uKGspLGspKXtmb3IoTXBuKHQsZSkscz1uZXcgbGUsdz1laShlLmIsMCk7dy5iIT13LmQuYzspaD11KHRpKHcpLDg2KSxuPXE0dCh0LGgsbnVsbCksbiYmKExvKG4sZSkscy5jW3MuYy5sZW5ndGhdPW4pO2lmKHQuYT1udWxsLHQuYj1udWxsLHMuYy5sZW5ndGg+MSlmb3Iocj1uZXcgUyhzKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMTM1KSxvPTAsZD1laShuLmIsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDg2KSxoLmc9bysrO3JldHVybiBzfXJldHVybiBfMShjdChvdChweG4sMSksaTZ0LDEzNSwwLFtlXSkpfWZ1bmN0aW9uIHNtbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7SD1XaW4odCx3eXQoZSkscyksbnl0KEgsTzAocyxDZCkpLEU9bnVsbCxWPXMsWT1QQyhWLF9kZSksdHQ9bmV3IFgkdChIKSxfMG4odHQuYSxZKSxndD1QQyhWLCJlbmRQb2ludCIpLEx0PW5ldyB0enQoSCksQzBuKEx0LmEsZ3QpLF90PVV2KFYsd0gpLEJ0PW5ldyByenQoSCksZGRuKEJ0LmEsX3QpLE09TzAocyx3OHQpLG89bmV3IHdWdCh0LEgpLFJRZShvLmEsby5iLE0pLEY9TzAocyx2OHQpLGg9bmV3IG1WdCh0LEgpLGpRZShoLmEsaC5iLEYpLGs9VXYocyx5OHQpLGQ9bmV3IHlWdChuLEgpLFFmbihkLmIsZC5hLGspLEM9VXYocyxtOHQpLHc9bmV3IHhWdChyLEgpLFpmbih3LmIsdy5hLEMpfWZ1bmN0aW9uIFE1dCh0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2goZD1udWxsLGUuZyl7Y2FzZSAxOmZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksMTEpLGplKFJlKFEociwoc2UoKSxQbHQpKSkpKXJldHVybiByO2Q9bmV3IE1jLEp0KGQsKHNlKCksUGx0KSwoRm4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoaD1uZXcgUyh0LmopO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDExKSxqZShSZShRKG8sKHNlKCksQmx0KSkpKSlyZXR1cm4gbztkPW5ldyBNYyxKdChkLChzZSgpLEJsdCksKEZuKCksITApKX1yZXR1cm4gZCYmKFVvKGQsdCksRnMoZCxuKSxaaG4oZC5uLHQubyxuKSksZH1mdW5jdGlvbiBVdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKGQ9LTEsaD1uZXcgUWkscj1uZXcgUzEodC5iKTtWbyhyLmEpfHxWbyhyLmIpOyl7Zm9yKG49dShWbyhyLmEpP0ooci5hKTpKKHIuYiksMTcpLGQ9Yi5NYXRoLm1heChkLFh0KHllKFEobiwoVGUoKSxVZykpKSkpLG4uYz09dD91cyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IHBZKSxuZXcgTmMoaCkpOnVzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuLmIsMTYpKSxuZXcgYlkpLG5ldyBaYShoKSksbz1laShoLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSw3MCksVnMocywoc2UoKSxNNikpfHxKdChzLE02LG4pO0FzKGUsaCksX2goaCl9cmV0dXJuIGR9ZnVuY3Rpb24gYW1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHc7bz1uZXcgSDAodCksXzAobywoR24oKSxIYykpLEp0KG8sKFRlKCksb3MpLChvYSgpLFZjKSksSnQobywoc2UoKSxfaSksZS5jLmkpLGg9bmV3IE1jLEp0KGgsX2ksZS5jKSxGcyhoLHMpLFVvKGgsbyksSnQoZS5jLFp1LG8pLGQ9bmV3IEgwKHQpLF8wKGQsSGMpLEp0KGQsb3MsVmMpLEp0KGQsX2ksZS5kLmkpLHc9bmV3IE1jLEp0KHcsX2ksZS5kKSxGcyh3LHMpLFVvKHcsZCksSnQoZS5kLFp1LGQpLERhKGUsaCksc2EoZSx3KSxVbSgwLG4uYy5sZW5ndGgpLFc5KG4uYywwLG8pLHIuY1tyLmMubGVuZ3RoXT1kLEp0KG8scUcsZGUoMSkpLEp0KGQscUcsZGUoMSkpfWZ1bmN0aW9uIGZ3KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsaztkPXM/ci5iOnIuYSwhUzAodC5hLHIpJiYoaz1kPm4ucyYmZDxuLmMsdz0hMSxuLmUuYiE9MCYmbi5qLmIhPTAmJih3PXd8KGIuTWF0aC5hYnMoZC1YdCh5ZShhbnQobi5lKSkpKTx5ZCYmYi5NYXRoLmFicyhkLVh0KHllKGFudChuLmopKSkpPHlkKSx3PXd8KGIuTWF0aC5hYnMoZC1YdCh5ZSh2aihuLmUpKSkpPHlkJiZiLk1hdGguYWJzKGQtWHQoeWUodmoobi5qKSkpKTx5ZCkpLChrfHx3KSYmKGg9dShRKGUsKFRlKCksX28pKSw3NCksaHx8KGg9bmV3IER1LEp0KGUsX28saCkpLG89bmV3IHlvKHIpLGhzKGgsbyxoLmMuYixoLmMpLE5zKHQuYSxvKSkpfWZ1bmN0aW9uIG9tbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztpZihkcG4odCxlLG4scikpcmV0dXJuITA7Zm9yKGg9bmV3IFMoZS5mKTtoLmE8aC5jLmMubGVuZ3RoOyl7c3dpdGNoKG89dShKKGgpLDMyNCksZD0hMSx3PXQuai1lLmorbixrPXcrZS5vLEM9dC5rLWUuaytyLHM9QytlLnAsby5hLmcpe2Nhc2UgMDpkPUNpdCh0LHcrby5iLmEsMCx3K28uYy5hLEMtMSk7YnJlYWs7Y2FzZSAxOmQ9Q2l0KHQsayxDK28uYi5hLHQuby0xLEMrby5jLmEpO2JyZWFrO2Nhc2UgMjpkPUNpdCh0LHcrby5iLmEscyx3K28uYy5hLHQucC0xKTticmVhaztkZWZhdWx0OmQ9Q2l0KHQsMCxDK28uYi5hLHctMSxDK28uYy5hKX1pZihkKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGNtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3IoaD1uZXcgUyhlLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaz1uZXcgUyhvLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtmb3Iodz11KEooayksMTApLEM9bmV3IGxlLGQ9MCxyPW5ldyBhcihscihqbyh3KS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSwhKFZhKG4pfHwhVmEobikmJm4uYy5pLmM9PW4uZC5pLmMpJiYocz11KFEobiwoVGUoKSxGNikpLDE5KS5hLHM+ZCYmKGQ9cyxDLmM9UHQoWG4sSWUsMSwwLDUsMSkpLHM9PWQmJnVlKEMsbmV3IGxhKG4uYy5pLG4pKSk7dm4oKSxYcyhDLHQuYyksJG0odC5iLHcucCxDKX19ZnVuY3Rpb24gdW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihoPW5ldyBTKGUuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSxrPW5ldyBTKG8uYSk7ay5hPGsuYy5jLmxlbmd0aDspe2Zvcih3PXUoSihrKSwxMCksQz1uZXcgbGUsZD0wLHI9bmV3IGFyKGxyKE1zKHcpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLCEoVmEobil8fCFWYShuKSYmbi5jLmkuYz09bi5kLmkuYykmJihzPXUoUShuLChUZSgpLEY2KSksMTkpLmEscz5kJiYoZD1zLEMuYz1QdChYbixJZSwxLDAsNSwxKSkscz09ZCYmdWUoQyxuZXcgbGEobi5kLmksbikpKTt2bigpLFhzKEMsdC5jKSwkbSh0LmYsdy5wLEMpfX1mdW5jdGlvbiBXdWUodCl7U3YodCxuZXcgdzIoRXYoeXYoa3YoeHYobmV3IHBnLHh3KSwiRUxLIEJveCIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIiksbmV3IElaKSkpLHhlKHQseHcsd3csU1N0KSx4ZSh0LHh3LGt5LDE1KSx4ZSh0LHh3LGpELGRlKDApKSx4ZSh0LHh3LGdILERlKFRTdCkpLHhlKHQseHcsTDQsRGUoUjNlKSkseGUodCx4dyx2NixEZShqM2UpKSx4ZSh0LHh3LGI2LFYxZSkseGUodCx4dywkRCxEZShDU3QpKSx4ZSh0LHh3LHc2LERlKF9TdCkpLHhlKHQseHcsbzh0LERlKEpodCkpLHhlKHQseHcsY0gsRGUoQjNlKSl9ZnVuY3Rpb24gS3VlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKHM9dC5pLGg9cy5vLmEsbz1zLm8uYixoPD0wJiZvPD0wKXJldHVybiBiZSgpLFpvO3N3aXRjaChrPXQubi5hLEM9dC5uLmIsZD10Lm8uYSxuPXQuby5iLGUuZyl7Y2FzZSAyOmNhc2UgMTppZihrPDApcmV0dXJuIGJlKCksQm47aWYoaytkPmgpcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZihDPDApcmV0dXJuIGJlKCksTm47aWYoQytuPm8pcmV0dXJuIGJlKCksbXJ9cmV0dXJuIHc9KGsrZC8yKS9oLHI9KEMrbi8yKS9vLHcrcjw9MSYmdy1yPD0wPyhiZSgpLEJuKTp3K3I+PTEmJnctcj49MD8oYmUoKSxIbik6cjwuNT8oYmUoKSxObik6KGJlKCksbXIpfWZ1bmN0aW9uIGxtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKG49ITEsQz1YdCh5ZShRKGUsKFRlKCksQncpKSkpLFY9ZWIqQyxzPW5ldyBTKGUuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxrPW5ldyBTKHIuYSksbz11KEooayksMTApLE09c3d0KHQuYVtvLnBdKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMCksRj1zd3QodC5hW2QucF0pLE0hPUYmJihIPVYzKHQuYixvLGQpLGg9by5uLmIrby5vLmIrby5kLmErTS5hK0gsdz1kLm4uYi1kLmQuZCtGLmEsaD53K1YmJihZPU0uZytGLmcsRi5hPShGLmcqRi5hK00uZypNLmEpL1ksRi5nPVksTS5mPUYsbj0hMCkpLG89ZCxNPUY7cmV0dXJuIG59ZnVuY3Rpb24gWXVlKHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE0sRjtmb3IoRj1uZXcgQXgsaz1lLktjKCk7ay5PYigpOylmb3IoZD11KGsuUGIoKSw4MzkpLE09bmV3IFMoZC53ZigpKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxODEpLEd0KEMuV2UoKGNpKCksaWZ0KSkpPT09R3QoKEExKCksUzcpKSYmKEF1ZShGLEMsITEscixzLG8saCksaF8odCxGKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGQ9dSh3LlBiKCksODM5KSxNPW5ldyBTKGQud2YoKSk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTgxKSxHdChDLldlKChjaSgpLGlmdCkpKT09PUd0KChBMSgpLFl5KSkmJihBdWUoRixDLCEwLHIscyxvLGgpLGhfKHQsRikpfWZ1bmN0aW9uIGhtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7aC5lIT1oLmkuZ2MoKTspZm9yKG89dShkcihoKSwzMykscz1uZXcgYXIobHIoRzAobykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSw3OSksIWdfKHIpJiYhZ18ocikmJiF1dyhyKSYmKHc9dShlYyhBbyhuLmYsbykpLDg2KSxrPXUoSm4obixNbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSksODYpLHcmJmsmJihkPW5ldyBMd3QodyxrKSxKdChkLChmYygpLGpTKSxyKSxMbyhkLHIpLG5pKHcuZCxkKSxuaShrLmIsZCksbmkoZS5hLGQpKSl9ZnVuY3Rpb24gZm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iodz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTExKSxzPWQuYz9xS3QoZC5jKTowLHM+MD9kLmE/KGs9ZC5iLnJmKCkuYixzPmsmJih0LnZ8fGQuYy5kLmMubGVuZ3RoPT0xPyhoPShzLWspLzIsZC5kLmQ9aCxkLmQuYT1oKToobj11KEZlKGQuYy5kLDApLDE4MSkucmYoKS5iLHI9KG4taykvMixkLmQuZD1iLk1hdGgubWF4KDAsciksZC5kLmE9cy1yLWspKSk6ZC5kLmE9dC50K3M6VEModC51KSYmKG89QzR0KGQuYiksby5kPDAmJihkLmQuZD0tby5kKSxvLmQrby5hPmQuYi5yZigpLmImJihkLmQuYT1vLmQrby5hLWQuYi5yZigpLmIpKX1mdW5jdGlvbiBkbW4odCxlKXt2YXIgbjtzd2l0Y2goeEkodCkpe2Nhc2UgNjpyZXR1cm4gZWEoZSk7Y2FzZSA3OnJldHVybiBObShlKTtjYXNlIDg6cmV0dXJuIE9tKGUpO2Nhc2UgMzpyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKG49eEkoZSksIShuPj0xNCYmbjw9MTYpKTtjYXNlIDExOnJldHVybiBlIT1udWxsJiZ0eXBlb2YgZT09PU5hdDtjYXNlIDEyOnJldHVybiBlIT1udWxsJiYodHlwZW9mIGU9PT1DRHx8dHlwZW9mIGU9PU5hdCk7Y2FzZSAwOnJldHVybiByc3QoZSx0Ll9fZWxlbWVudFR5cGVJZCQpO2Nhc2UgMjpyZXR1cm4gem50KGUpJiZlLmltIT09Q3Q7Y2FzZSAxOnJldHVybiB6bnQoZSkmJmUuaW0hPT1DdHx8cnN0KGUsdC5fX2VsZW1lbnRUeXBlSWQkKTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBYdWUodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj1iLk1hdGgubWluKGIuTWF0aC5hYnModC5jLShlLmMrZS5iKSksYi5NYXRoLmFicyh0LmMrdC5iLWUuYykpLG89Yi5NYXRoLm1pbihiLk1hdGguYWJzKHQuZC0oZS5kK2UuYSkpLGIuTWF0aC5hYnModC5kK3QuYS1lLmQpKSxuPWIuTWF0aC5hYnModC5jK3QuYi8yLShlLmMrZS5iLzIpKSxuPnQuYi8yK2UuYi8yfHwocz1iLk1hdGguYWJzKHQuZCt0LmEvMi0oZS5kK2UuYS8yKSkscz50LmEvMitlLmEvMik/MTpuPT0wJiZzPT0wPzA6bj09MD9vL3MrMTpzPT0wP3IvbisxOmIuTWF0aC5taW4oci9uLG8vcykrMX1mdW5jdGlvbiBRdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHM9VW10KHQpLGQ9VW10KGUpLHM9PWQ/dC5lPT1lLmUmJnQuYTw1NCYmZS5hPDU0P3QuZjxlLmY/LTE6dC5mPmUuZj8xOjA6KHI9dC5lLWUuZSxuPSh0LmQ+MD90LmQ6Yi5NYXRoLmZsb29yKCh0LmEtMSkqY2ZlKSsxKS0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKmNmZSkrMSksbj5yKzE/czpuPHItMT8tczoobz0oIXQuYyYmKHQuYz1qSSh0LmYpKSx0LmMpLGg9KCFlLmMmJihlLmM9akkoZS5mKSksZS5jKSxyPDA/bz1KMyhvLG1sZSgtcikpOnI+MCYmKGg9SjMoaCxtbGUocikpKSxMaWUobyxoKSkpOnM8ZD8tMToxfWZ1bmN0aW9uIGdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2ZvcihvPTAsZD0wLHc9MCxzPW5ldyBTKHQuZi5lKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNDQpLGUhPXImJihoPXQuaVtlLmJdW3IuYl0sbys9aCxuPUhwKGUuZCxyLmQpLG4+MCYmdC5kIT0oakMoKSxLdXQpJiYoZCs9aCooci5kLmErdC5hW2UuYl1bci5iXSooZS5kLmEtci5kLmEpL24pKSxuPjAmJnQuZCE9KGpDKCksVXV0KSYmKHcrPWgqKHIuZC5iK3QuYVtlLmJdW3IuYl0qKGUuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaCh0LmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgJGUoZC9vLGUuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyAkZShlLmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyAkZShkL28sdy9vKX19ZnVuY3Rpb24gWnVlKHQsZSl7SjgoKTt2YXIgbixyLHMsbyxoO2lmKGg9dShRKHQuaSwoVGUoKSxvcykpLDk4KSxvPXQuai5nLWUuai5nLG8hPTB8fCEoaD09KG9hKCksRzIpfHxoPT1oMHx8aD09VmMpKXJldHVybiAwO2lmKGg9PShvYSgpLEcyKSYmKG49dShRKHQsV2cpLDE5KSxyPXUoUShlLFdnKSwxOSksbiYmciYmKHM9bi5hLXIuYSxzIT0wKSkpcmV0dXJuIHM7c3dpdGNoKHQuai5nKXtjYXNlIDE6cmV0dXJuIExzKHQubi5hLGUubi5hKTtjYXNlIDI6cmV0dXJuIExzKHQubi5iLGUubi5iKTtjYXNlIDM6cmV0dXJuIExzKGUubi5hLHQubi5hKTtjYXNlIDQ6cmV0dXJuIExzKGUubi5iLHQubi5iKTtkZWZhdWx0OnRocm93IHJ0KG5ldyBGbyhiNnQpKX19ZnVuY3Rpb24gSnVlKHQpe3ZhciBlLG4scixzLG8saDtmb3Iobj0oIXQuYSYmKHQuYT1uZXcgU3MoSGgsdCw1KSksdC5hKS5pKzIsaD1uZXcgWWMobiksdWUoaCxuZXcgJGUodC5qLHQuaykpLHVzKG5ldyBUbihudWxsLCghdC5hJiYodC5hPW5ldyBTcyhIaCx0LDUpKSxuZXcgX24odC5hLDE2KSkpLG5ldyBXJHQoaCkpLHVlKGgsbmV3ICRlKHQuYix0LmMpKSxlPTE7ZTxoLmMubGVuZ3RoLTE7KXI9KEFuKGUtMSxoLmMubGVuZ3RoKSx1KGguY1tlLTFdLDgpKSxzPShBbihlLGguYy5sZW5ndGgpLHUoaC5jW2VdLDgpKSxvPShBbihlKzEsaC5jLmxlbmd0aCksdShoLmNbZSsxXSw4KSksci5hPT1zLmEmJnMuYT09by5hfHxyLmI9PXMuYiYmcy5iPT1vLmI/QWcoaCxlKTorK2U7cmV0dXJuIGh9ZnVuY3Rpb24gdGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKG49bld0KGJHdChnR3QocEd0KG5ldyBEcHQsZSksbmV3IG8kKGUuZSkpLFhiZSksdC5hKSxlLmouYy5sZW5ndGg9PTB8fHZ0ZSh1KEZlKGUuaiwwKSw1NykuYSxuKSx3PW5ldyBxdHQsa2kodC5lLG4sdyksaD1uZXcgcXMsZD1uZXcgcXMsbz1uZXcgUyhlLmspO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDE3KSxOcyhoLHMuYyksTnMoZCxzLmQpO3I9aC5hLmdjKCktZC5hLmdjKCkscjwwPyhQSSh3LCEwLChhbygpLGpoKSksUEkodywhMSxrZikpOnI+MCYmKFBJKHcsITEsKGFvKCksamgpKSxQSSh3LCEwLGtmKSksbXUoZS5nLG5ldyBHR3QodCxuKSksa2kodC5nLGUsbil9ZnVuY3Rpb24gZWxlKCl7ZWxlPVo7dmFyIHQ7Zm9yKG9FdD1jdChvdChUciwxKSxYciwyNSwxNSxbLTEsLTEsMzAsMTksMTUsMTMsMTEsMTEsMTAsOSw5LDgsOCw4LDgsNyw3LDcsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNV0pLFR1dD1QdChUcixYciwyNSwzNywxNSwxKSxFZ2U9Y3Qob3QoVHIsMSksWHIsMjUsMTUsWy0xLC0xLDYzLDQwLDMyLDI4LDI1LDIzLDIxLDIwLDE5LDE5LDE4LDE4LDE3LDE3LDE2LDE2LDE2LDE1LDE1LDE1LDE1LDE0LDE0LDE0LDE0LDE0LDE0LDEzLDEzLDEzLDEzLDEzLDEzLDEzLDEzXSksY0V0PVB0KExiLGFvdCwyNSwzNywxNCwxKSx0PTI7dDw9MzY7dCsrKVR1dFt0XT1wcyhiLk1hdGgucG93KHQsb0V0W3RdKSksY0V0W3RdPWVEKElxLFR1dFt0XSl9ZnVuY3Rpb24gcG1uKHQpe3ZhciBlO2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBydChuZXcgUG4obGRlKyghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSkpO3JldHVybiBlPW5ldyBEdSxPSSh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSYmVWEoZSxCaGUodCxPSSh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSwhMSkpLE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpJiZVYShlLEJoZSh0LE9JKHUoU3QoKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKSwwKSw4MikpLCEwKSksZX1mdW5jdGlvbiBubGUodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihlLmQ/cz10LmEuYz09KGRkKCksUncpP2pvKGUuYik6TXMoZS5iKTpzPXQuYS5jPT0oZGQoKSxLZyk/am8oZS5iKTpNcyhlLmIpLG89ITEscj1uZXcgYXIobHIocy5hLktjKCksbmV3IHopKTt6cihyKTspaWYobj11KExyKHIpLDE3KSxoPWplKHQuYS5mW3QuYS5nW2UuYi5wXS5wXSksISghaCYmIVZhKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmIShqZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pfHxqZSh0LmEublt0LmEuZ1tlLmIucF0ucF0pKSYmKG89ITAsUzAodC5iLHQuYS5nW0NmbihuLGUuYikucF0pKSlyZXR1cm4gZS5jPSEwLGUuYT1uLGU7cmV0dXJuIGUuYz1vLGUuYT1udWxsLGV9ZnVuY3Rpb24gYm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE07Zm9yKHZuKCksWHModCxuZXcgalopLGQ9bmV3IGhhKHQsMCksTT1uZXcgbGUsbz0wO2QuYjxkLmQuZ2MoKTspaD0oUW4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDE1NykpLE0uYy5sZW5ndGghPTAmJkZ1KGgpKnhsKGgpPm8qMj8oQz1uZXcgVSQoTSksaz1GdShoKS94bChoKSx3PU1hdChDLGUsbmV3IHd4LG4scixzLGspLExpKEdmKEMuZSksdyksTS5jPVB0KFhuLEllLDEsMCw1LDEpLG89MCxNLmNbTS5jLmxlbmd0aF09QyxNLmNbTS5jLmxlbmd0aF09aCxvPUZ1KEMpKnhsKEMpK0Z1KGgpKnhsKGgpKTooTS5jW00uYy5sZW5ndGhdPWgsbys9RnUoaCkqeGwoaCkpO3JldHVybiBNfWZ1bmN0aW9uIFo1dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGs7aWYocj1uLmdjKCkscj09MClyZXR1cm4hMTtpZih0LmVqKCkpaWYodz10LmZqKCksZDN0KHQsZSxuKSxoPXI9PTE/dC5aaSgzLG51bGwsbi5LYygpLlBiKCksZSx3KTp0LlppKDUsbnVsbCxuLGUsdyksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBTcChyKSxvPWUrcixzPWU7czxvOysrcylrPXQuT2kocyksZD10LmNqKGssZCksZD1kO2Q/KGQuRWkoaCksZC5GaSgpKTp0LiRpKGgpfWVsc2UgdC4kaShoKTtlbHNlIGlmKGQzdCh0LGUsbiksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBTcChyKSxvPWUrcixzPWU7czxvOysrcylkPXQuY2oodC5PaShzKSxkKTtkJiZkLkZpKCl9cmV0dXJuITB9ZnVuY3Rpb24gcmxlKHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxkPShoPXQuVWkoZSx0Lm9pKGUsbikpLGgpLG4sZSxvKSx0LmJqKCkmJiEodC5uaSgpJiZkP3lpKGQsbik6R3QoZCk9PT1HdChuKSkmJihkJiYocz10LmRqKGQscykpLHM9dC5jaihuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSxkKTooZD0oaD10LlVpKGUsdC5vaShlLG4pKSxoKSx0LmJqKCkmJiEodC5uaSgpJiZkP3lpKGQsbik6R3QoZCk9PT1HdChuKSkmJihzPW51bGwsZCYmKHM9dC5kaihkLG51bGwpKSxzPXQuY2oobixzKSxzJiZzLkZpKCkpLGQpfWZ1bmN0aW9uIEo1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZih0LmU9ZSx0LmY9dShRKGUsKEdwKCksYUcpKSwyMzApLEpkbihlKSx0LmQ9Yi5NYXRoLm1heChlLmUuYy5sZW5ndGgqMTYrZS5jLmMubGVuZ3RoLDI1NiksIWplKFJlKFEoZSwoWmYoKSxoN3QpKSkpKWZvcihDPXQuZS5lLmMubGVuZ3RoLHc9bmV3IFMoZS5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNDQpLGs9ZC5kLGsuYT1WdnQodC5mKSpDLGsuYj1WdnQodC5mKSpDO2ZvcihuPWUuYixvPW5ldyBTKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjgyKSxyPXUoUShzLGI3dCksMTkpLmEscj4wKXtmb3IoaD0wO2g8cjtoKyspdWUobixuZXcgSFl0KHMpKTtmb2Uocyl9fWZ1bmN0aW9uIGM2KHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHQuaz09KEduKCksU2wpJiYobj1qOShSaSh1KFEodCwoc2UoKSxUTykpLDE1KS5PYygpLG5ldyBadChuZXcgVEwpKSkuc2QoKFdiKCksSkUpKT9lOihqbCgpLFFPKSxKdCh0LEQ2LG4pLG4hPShqbCgpLHdiKSkpZm9yKHI9dShRKHQsX2kpLDE3KSxkPVh0KHllKFEociwoVGUoKSxVZykpKSksaD0wLG49PXUwP2g9dC5vLmItYi5NYXRoLmNlaWwoZC8yKTpuPT1RTyYmKHQuby5iLT1YdCh5ZShRKEZhKHQpLEI2KSkpLGg9KHQuby5iLWIuTWF0aC5jZWlsKGQpKS8yKSxvPW5ldyBTKHQuaik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEpLHMubi5iPWh9ZnVuY3Rpb24gdHh0KCl7dHh0PVosZGV0KCksUjVlPW5ldyBBQixjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTShHMGUpXSldKSxjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTSh6OHQpXSldKSxjdChvdChWNiwyKSx0ZSwzNjgsMCxbY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTShWMGUpXSksY3Qob3QoVjYsMSksRkgsNTkyLDAsW25ldyBoTSh6OHQpXSldKSxuZXcgTnAoIi0xIiksY3Qob3QoVjYsMiksdGUsMzY4LDAsW2N0KG90KFY2LDEpLEZILDU5MiwwLFtuZXcgaE0oIlxcYysiKV0pXSksbmV3IE5wKCIwIiksbmV3IE5wKCIwIiksbmV3IE5wKCIxIiksbmV3IE5wKCIwIiksbmV3IE5wKFEwZSl9ZnVuY3Rpb24gd3EodCl7dmFyIGUsbjtyZXR1cm4gdC5jJiZ0LmMua2goKSYmKG49dSh0LmMsNDkpLHQuYz11KEtwKHQsbiksMTM4KSx0LmMhPW4mJih0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUXModCw5LDIsbix0LmMpKSxFdCh0LkNiLDM5OSk/dC5EYj4+MTY9PS0xNSYmdC5DYi5uaCgpJiZVcnQobmV3IHFydCh0LkNiLDksMTMsbix0LmMsRmcoaWwodSh0LkNiLDU5KSksdCkpKTpFdCh0LkNiLDg4KSYmdC5EYj4+MTY9PS0yMyYmdC5DYi5uaCgpJiYoZT10LmMsRXQoZSw4OCl8fChlPShkbigpLFdoKSksRXQobiw4OCl8fChuPShkbigpLFdoKSksVXJ0KG5ldyBxcnQodC5DYiw5LDEwLG4sZSxGZyhMYyh1KHQuQ2IsMjYpKSx0KSkpKSkpLHQuY31mdW5jdGlvbiB2bW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtmb3Iod3IoZSwiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxkPW5ldyBTKHIuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTApLGplKFJlKFEoaCwoVGUoKSxKRykpKSkmJmguai5jLmxlbmd0aDw9Mil7Zm9yKE09MCxDPTAsbj0wLG89MCxrPW5ldyBTKGguaik7ay5hPGsuYy5jLmxlbmd0aDspc3dpdGNoKHc9dShKKGspLDExKSx3LmouZyl7Y2FzZSAxOisrTTticmVhaztjYXNlIDI6KytDO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31NPT0wJiZuPT0wJiZ5NW4odCxoLG88PUMpfW9yKGUpfWZ1bmN0aW9uIHdtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3Iod3IoZSwiTGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwyOSksQz0tMSxuPW5ldyBsZSxrPXNJKG8uYSkscz0wO3M8ay5sZW5ndGg7cysrKXI9dShRKGtbc10sKHNlKCksTzIpKSwzMDMpLEM9PS0xP3IhPShCMCgpLFU0KSYmKEM9cyk6cj09KEIwKCksVTQpJiYoa28oa1tzXSxudWxsKSxveShrW3NdLEMrKyxvKSkscj09KEIwKCksQTYpJiZ1ZShuLGtbc10pO2Zvcih3PW5ldyBTKG4pO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxrbyhkLG51bGwpLGtvKGQsbyl9b3IoZSl9ZnVuY3Rpb24gbW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKHdyKG4sIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxXcG4odCxlKSx3PW5ldyBoYShlLmIsMCk7dy5iPHcuZC5nYygpOylpZihkPShRbih3LmI8dy5kLmdjKCkpLHUody5kLlhiKHcuYz13LmIrKyksMjkpKSxDPWQuYSxDLmMubGVuZ3RoIT0wKWZvcihyPW51bGwscz1udWxsLG89bnVsbCxoPW51bGwsaz0wO2s8Qy5jLmxlbmd0aDtrKyspcj0oQW4oayxDLmMubGVuZ3RoKSx1KEMuY1trXSwxMCkpLHM9ci5rLHM9PShHbigpLFpzKSYmaD09WnMmJihNPWR5bihyLG8pLE0uYSYmKGt2bihyLG8sTS5iLE0uYyksQW4oayxDLmMubGVuZ3RoKSxsYnQoQy5jLGssMSksLS1rLHI9byxzPWgpKSxvPXIsaD1zO29yKG4pfWZ1bmN0aW9uIHltbih0LGUpe3ZhciBuLHIscztyPW9sKHQuZCwxKSE9MCwhamUoUmUoUShlLmosKHNlKCksTXcpKSkpJiYhamUoUmUoUShlLmosSzQpKSl8fEd0KFEoZS5qLChUZSgpLGRiKSkpPT09R3QoKGowKCksZ2IpKT9lLmMuVGYoZS5lLHIpOnI9amUoUmUoUShlLmosTXcpKSkscEQodCxlLHIsITApLGplKFJlKFEoZS5qLEs0KSkpJiZKdChlLmosSzQsKEZuKCksITEpKSxqZShSZShRKGUuaixNdykpKSYmKEp0KGUuaixNdywoRm4oKSwhMSkpLEp0KGUuaixLNCwhMCkpLG49U3VlKHQsZSk7ZG97aWYoaXl0KHQpLG49PTApcmV0dXJuIDA7cj0hcixzPW4scEQodCxlLHIsITEpLG49U3VlKHQsZSl9d2hpbGUocz5uKTtyZXR1cm4gc31mdW5jdGlvbiBpbGUodCxlKXt2YXIgbixyLHM7cj1vbCh0LmQsMSkhPTAsIWplKFJlKFEoZS5qLChzZSgpLE13KSkpKSYmIWplKFJlKFEoZS5qLEs0KSkpfHxHdChRKGUuaiwoVGUoKSxkYikpKT09PUd0KChqMCgpLGdiKSk/ZS5jLlRmKGUuZSxyKTpyPWplKFJlKFEoZS5qLE13KSkpLHBEKHQsZSxyLCEwKSxqZShSZShRKGUuaixLNCkpKSYmSnQoZS5qLEs0LChGbigpLCExKSksamUoUmUoUShlLmosTXcpKSkmJihKdChlLmosTXcsKEZuKCksITEpKSxKdChlLmosSzQsITApKSxuPVJzdCh0LGUpO2Rve2lmKGl5dCh0KSxuPT0wKXJldHVybiAwO3I9IXIscz1uLHBEKHQsZSxyLCExKSxuPVJzdCh0LGUpfXdoaWxlKHM+bik7cmV0dXJuIHN9ZnVuY3Rpb24gc2xlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoZT09bilyZXR1cm4hMDtpZihlPWM1dCh0LGUpLG49YzV0KHQsbikscj1sc3QoZSkscil7aWYoQz1sc3QobiksQyE9cilyZXR1cm4gQz8odz1yLkRqKCksVj1DLkRqKCksdz09ViYmdyE9bnVsbCk6ITE7aWYoaD0oIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxvPWguaSxGPSghbi5kJiYobi5kPW5ldyBTcyhobyxuLDEpKSxuLmQpLG89PUYuaSl7Zm9yKGs9MDtrPG87KytrKWlmKHM9dShTdChoLGspLDg3KSxNPXUoU3QoRixrKSw4NyksIXNsZSh0LHMsTSkpcmV0dXJuITF9cmV0dXJuITB9ZWxzZSByZXR1cm4gZD1lLmUsSD1uLmUsZD09SH1mdW5jdGlvbiBhbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTTtpZihWMCh0LmUsZSkpe2ZvcihNPWF1KHQuZS5UZygpLGUpLG89dSh0LmcsMTE5KSxDPW51bGwsdz0tMSxkPS0xLHM9MCxrPTA7azx0Lmk7KytrKWg9b1trXSxNLnJsKGguYWsoKSkmJihzPT1uJiYodz1rKSxzPT1yJiYoZD1rLEM9aC5kZCgpKSwrK3MpO2lmKHc9PS0xKXRocm93IHJ0KG5ldyBtbyhXY3QrbitTMitzKSk7aWYoZD09LTEpdGhyb3cgcnQobmV3IG1vKEtjdCtyK1MyK3MpKTtyZXR1cm4gdF8odCx3LGQpLG1sKHQuZSkmJktrKHQsenAodCw3LGUsZGUociksQyxuLCEwKSksQ31lbHNlIHRocm93IHJ0KG5ldyBQbigiVGhlIGZlYXR1cmUgbXVzdCBiZSBtYW55LXZhbHVlZCB0byBzdXBwb3J0IG1vdmUiKSl9ZnVuY3Rpb24gb2xlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHc7c3dpdGNoKHc9bmV3IHlvKGUubiksdy5hKz1lLm8uYS8yLHcuYis9ZS5vLmIvMixkPVh0KHllKFEoZSwoVGUoKSx6eSkpKSksbz10LmYsaD10LmQscz10LmMsdShRKGUsKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOncuYSs9aC5iK3MuYS1uLzIsdy5iPS1yLWQsZS5uLmI9LShoLmQrZCtzLmIpO2JyZWFrO2Nhc2UgMjp3LmE9by5hK2guYitoLmMrZCx3LmIrPWguZCtzLmItci8yLGUubi5hPW8uYStoLmMrZC1zLmE7YnJlYWs7Y2FzZSAzOncuYSs9aC5iK3MuYS1uLzIsdy5iPW8uYitoLmQraC5hK2QsZS5uLmI9by5iK2guYStkLXMuYjticmVhaztjYXNlIDQ6dy5hPS1uLWQsdy5iKz1oLmQrcy5iLXIvMixlLm4uYT0tKGguYitkK3MuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gY2xlKHQpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gcj1uZXcgS210LExvKHIsdCksR3QoUShyLChUZSgpLFZsKSkpPT09R3QoKGFvKCksYzApKSYmSnQocixWbCxFeihyKSksUShyLChMJCgpLEdTKSk9PW51bGwmJihoPXUoRWFlKHQpLDE2MCksSnQocixHUyxuaihoLldlKEdTKSkpKSxKdChyLChzZSgpLF9pKSx0KSxKdChyLEdjLChlPXUoSGYoQWx0KSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSkscz1jNG4oKHRzKHQpJiYoSW0oKSxuZXcgU20odHModCkpKSxJbSgpLG5ldyBybnQodHModCk/bmV3IFNtKHRzKHQpKTpudWxsLHQpKSxrZiksbz11KFEocixhQ3QpLDExNiksbj1yLmQscFF0KG4sbykscFF0KG4scykscn1mdW5jdGlvbiB4bW4odCxlLG4pe3ZhciByLHM7cj1lLmMuaSxzPW4uZC5pLHIuaz09KEduKCksWnMpPyhKdCh0LChzZSgpLG4xKSx1KFEocixuMSksMTEpKSxKdCh0LFJoLHUoUShyLFJoKSwxMSkpLEp0KHQsUHksUmUoUShyLFB5KSkpKTpyLms9PVNsPyhKdCh0LChzZSgpLG4xKSx1KFEocixuMSksMTEpKSxKdCh0LFJoLHUoUShyLFJoKSwxMSkpLEp0KHQsUHksKEZuKCksITApKSk6cy5rPT1TbD8oSnQodCwoc2UoKSxuMSksdShRKHMsbjEpLDExKSksSnQodCxSaCx1KFEocyxSaCksMTEpKSxKdCh0LFB5LChGbigpLCEwKSkpOihKdCh0LChzZSgpLG4xKSxlLmMpLEp0KHQsUmgsbi5kKSl9ZnVuY3Rpb24ga21uKHQpe3ZhciBlLG4scixzLG8saCxkO2Zvcih0Lm89bmV3IFAzLHI9bmV3IFFpLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyMSksbzQobykuYy5sZW5ndGg9PTEmJmhzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPXUoci5iPT0wP251bGw6KFFuKHIuYiE9MCksY2gocixyLmEuYSkpLDEyMSksbzQobykuYy5sZW5ndGghPTAmJihlPXUoRmUobzQobyksMCksMjEzKSxuPW8uZy5hLmMubGVuZ3RoPjAsZD1feihlLG8pLEwydChuP2QuYjpkLmcsZSksbzQoZCkuYy5sZW5ndGg9PTEmJmhzKHIsZCxyLmMuYixyLmMpLHM9bmV3IGxhKG8sZSkscXAodC5vLHMpLHZ1KHQuZS5hLG8pKX1mdW5jdGlvbiB1bGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdztyZXR1cm4gcj1iLk1hdGguYWJzKEdqKHQuYikuYS1HaihlLmIpLmEpLGQ9Yi5NYXRoLmFicyhHaih0LmIpLmItR2ooZS5iKS5iKSxzPTAsdz0wLG49MSxoPTEscj50LmIuYi8yK2UuYi5iLzImJihzPWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuYy0oZS5iLmMrZS5iLmIpKSxiLk1hdGguYWJzKHQuYi5jK3QuYi5iLWUuYi5jKSksbj0xLXMvciksZD50LmIuYS8yK2UuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmIuZC0oZS5iLmQrZS5iLmEpKSxiLk1hdGguYWJzKHQuYi5kK3QuYi5hLWUuYi5kKSksaD0xLXcvZCksbz1iLk1hdGgubWluKG4saCksKDEtbykqYi5NYXRoLnNxcnQocipyK2QqZCl9ZnVuY3Rpb24gRW1uKHQpe3ZhciBlLG4scixzO2ZvcihMYXQodCx0LmUsdC5mLChxdigpLGJiKSwhMCx0LmMsdC5pKSxMYXQodCx0LmUsdC5mLGJiLCExLHQuYyx0LmkpLExhdCh0LHQuZSx0LmYsZTUsITAsdC5jLHQuaSksTGF0KHQsdC5lLHQuZixlNSwhMSx0LmMsdC5pKSxDbW4odCx0LmMsdC5lLHQuZix0LmkpLHI9bmV3IGhhKHQuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcihlPShRbihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMTI4KSkscz1uZXcgaGEodC5pLHIuYik7cy5iPHMuZC5nYygpOyluPShRbihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMTI4KSkscjNuKGUsbik7QzVuKHQuaSx1KFEodC5kLChzZSgpLE82KSksMjMwKSksJDNuKHQuaSl9ZnVuY3Rpb24gbGF0KHQsZSl7dmFyIG4scjtpZihlIT1udWxsKXtpZihyPWN3KHQpLHIpaWYoci5pJjEpe2lmKHI9PWRsKXJldHVybiBPbShlKTtpZihyPT1UcilyZXR1cm4gRXQoZSwxOSk7aWYocj09cjMpcmV0dXJuIEV0KGUsMTU1KTtpZihyPT1IdSlyZXR1cm4gRXQoZSwyMTcpO2lmKHI9PW1oKXJldHVybiBFdChlLDE3Mik7aWYocj09aWEpcmV0dXJuIE5tKGUpO2lmKHI9PWY1KXJldHVybiBFdChlLDE4NCk7aWYocj09TGIpcmV0dXJuIEV0KGUsMTYyKX1lbHNlIHJldHVybiBOUigpLG49dShKbihuVSxyKSw1NSksIW58fG4ud2ooZSk7ZWxzZSBpZihFdChlLDU2KSlyZXR1cm4gdC51ayh1KGUsNTYpKX1yZXR1cm4hMX1mdW5jdGlvbiBleHQoKXtleHQ9Wjt2YXIgdCxlLG4scixzLG8saCxkLHc7Zm9yKFUxPVB0KEh1LE40LDI1LDI1NSwxNSwxKSxycD1QdChtaCx2ZCwyNSw2NCwxNSwxKSxlPTA7ZTwyNTU7ZSsrKVUxW2VdPS0xO2ZvcihuPTkwO24+PTY1O24tLSlVMVtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSlVMVtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKHM9NTc7cz49NDg7cy0tKVUxW3NdPXMtNDgrNTI8PDI0Pj4yNDtmb3IoVTFbNDNdPTYyLFUxWzQ3XT02MyxvPTA7bzw9MjU7bysrKXJwW29dPTY1K28mbXM7Zm9yKGg9MjYsdz0wO2g8PTUxOysraCx3KyspcnBbaF09OTcrdyZtcztmb3IodD01MixkPTA7dDw9NjE7Kyt0LGQrKylycFt0XT00OCtkJm1zO3JwWzYyXT00MyxycFs2M109NDd9ZnVuY3Rpb24gVG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKHQuZGMoKSlyZXR1cm4gbmV3IFRhO2ZvcihrPTAsTT0wLHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNyksbz1yLmYsaz1iLk1hdGgubWF4KGssby5hKSxNKz1vLmEqby5iO2ZvcihrPWIuTWF0aC5tYXgoayxiLk1hdGguc3FydChNKSpYdCh5ZShRKHUodC5LYygpLlBiKCksMzcpLChUZSgpLFVHKSkpKSksRj0wLEg9MCx3PTAsbj1lLGQ9dC5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwzNyksQz1oLmYsRitDLmE+ayYmKEY9MCxIKz13K2Usdz0wKSx3XyhoLEYsSCksbj1iLk1hdGgubWF4KG4sRitDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksRis9Qy5hK2U7cmV0dXJuIG5ldyAkZShuK2UsSCt3K2UpfWZ1bmN0aW9uIENtbih0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNO2ZvcihoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KXtpZihvPXUoSihoKSwxNyksdz1vLmMsbi5hLl9iKHcpKWs9KHF2KCksYmIpO2Vsc2UgaWYoci5hLl9iKHcpKWs9KHF2KCksZTUpO2Vsc2UgdGhyb3cgcnQobmV3IFBuKCJTb3VyY2UgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLiIpKTtpZihDPW8uZCxuLmEuX2IoQykpTT0ocXYoKSxiYik7ZWxzZSBpZihyLmEuX2IoQykpTT0ocXYoKSxlNSk7ZWxzZSB0aHJvdyBydChuZXcgUG4oIlRhcmdldCBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2Q9bmV3IGVvZShvLGssTSksa2kodC5iLG8sZCkscy5jW3MuYy5sZW5ndGhdPWR9fWZ1bmN0aW9uIG54dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKCFrMSh0KSl0aHJvdyBydChuZXcgRm8odWRlKSk7aWYocj1rMSh0KSxvPXIuZyxzPXIuZixvPD0wJiZzPD0wKXJldHVybiBiZSgpLFpvO3N3aXRjaChkPXQuaSx3PXQuaixlLmcpe2Nhc2UgMjpjYXNlIDE6aWYoZDwwKXJldHVybiBiZSgpLEJuO2lmKGQrdC5nPm8pcmV0dXJuIGJlKCksSG47YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIGJlKCksTm47aWYodyt0LmY+cylyZXR1cm4gYmUoKSxtcn1yZXR1cm4gaD0oZCt0LmcvMikvbyxuPSh3K3QuZi8yKS9zLGgrbjw9MSYmaC1uPD0wPyhiZSgpLEJuKTpoK24+PTEmJmgtbj49MD8oYmUoKSxIbik6bjwuNT8oYmUoKSxObik6KGJlKCksbXIpfWZ1bmN0aW9uIF9tbih0LGUsbixyLHMpe3ZhciBvLGg7aWYobz1PYShQcyhlWzBdLGNvKSxQcyhyWzBdLGNvKSksdFswXT1TcihvKSxvPUZwKG8sMzIpLG4+PXMpe2ZvcihoPTE7aDxzO2grKylvPU9hKG8sT2EoUHMoZVtoXSxjbyksUHMocltoXSxjbykpKSx0W2hdPVNyKG8pLG89RnAobywzMik7Zm9yKDtoPG47aCsrKW89T2EobyxQcyhlW2hdLGNvKSksdFtoXT1TcihvKSxvPUZwKG8sMzIpfWVsc2V7Zm9yKGg9MTtoPG47aCsrKW89T2EobyxPYShQcyhlW2hdLGNvKSxQcyhyW2hdLGNvKSkpLHRbaF09U3Iobyksbz1GcChvLDMyKTtmb3IoO2g8cztoKyspbz1PYShvLFBzKHJbaF0sY28pKSx0W2hdPVNyKG8pLG89RnAobywzMil9eWMobywwKSE9MCYmKHRbaF09U3IobykpfWZ1bmN0aW9uIGJ5KHQpe2dpKCk7dmFyIGUsbixyLHMsbyxoO2lmKHQuZSE9NCYmdC5lIT01KXRocm93IHJ0KG5ldyBQbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK3QuZSkpO2ZvcihvPXQsYjQobyksVF8obykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1XRSYmKHItPTIpLHM9bmV3IE5sKDQpLHMuYj1QdChUcixYciwyNSxyLDE1LDEpLGg9MCxvLmJbMF0+MCYmKHMuYltoKytdPTAscy5iW2grK109by5iWzBdLTEpLGU9MTtlPG8uYi5sZW5ndGgtMjtlKz0yKXMuYltoKytdPW8uYltlXSsxLHMuYltoKytdPW8uYltlKzFdLTE7cmV0dXJuIG4hPVdFJiYocy5iW2grK109bisxLHMuYltoXT1XRSkscy5hPSEwLHN9ZnVuY3Rpb24gaGF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYodC5laigpKWlmKGs9dC5maigpLExzdCh0LGUsbiksaD1yPT0xP3QuWmkoMyxudWxsLG4uS2MoKS5QYigpLGUsayk6dC5aaSg1LG51bGwsbixlLGspLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgU3Aociksbz1lK3Iscz1lO3M8bzsrK3MpQz10Lmdbc10sZD10LmNqKEMsZCksZD10LmpqKEMsZCk7ZD8oZC5FaShoKSxkLkZpKCkpOnQuJGkoaCl9ZWxzZSB0LiRpKGgpO2Vsc2UgaWYoTHN0KHQsZSxuKSx0LmJqKCkpe2ZvcihkPXI8MTAwP251bGw6bmV3IFNwKHIpLG89ZStyLHM9ZTtzPG87KytzKXc9dC5nW3NdLGQ9dC5jaih3LGQpO2QmJmQuRmkoKX1yZXR1cm4hMH1mdW5jdGlvbiByeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdztmb3IoaD1uZXcgUyh0LmspO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEyOSksKCFyfHxzLmM9PShWZigpLHBiKSkmJih3PXMuYix3Lmc8MCYmcy5kPjAmJihuTSh3LHcuZC1zLmQpLHMuYz09KFZmKCkscGIpJiZ1cHQodyx3LmEtcy5kKSx3LmQ8PTAmJncuaT4wJiZocyhlLHcsZS5jLmIsZS5jKSkpO2ZvcihvPW5ldyBTKHQuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTI5KSwoIXJ8fHMuYz09KFZmKCkscGIpKSYmKGQ9cy5hLGQuZzwwJiZzLmQ+MCYmKHg5KGQsZC5pLXMuZCkscy5jPT0oVmYoKSxwYikmJmd2KGQsZC5iLXMuZCksZC5pPD0wJiZkLmQ+MCYmaHMobixkLG4uYy5iLG4uYykpKX1mdW5jdGlvbiBTbW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKHdyKG4sIlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsMSksWXUodC5iKSxZdSh0LmEpLGQ9bnVsbCxvPWVpKGUuYiwwKTshZCYmby5iIT1vLmQuYzspaz11KHRpKG8pLDg2KSxqZShSZShRKGssKGZjKCksV3kpKSkpJiYoZD1rKTtmb3Iodz1uZXcgUWksaHModyxkLHcuYy5iLHcuYykseWhlKHQsdyksQz1laShlLmIsMCk7Qy5iIT1DLmQuYzspaz11KHRpKEMpLDg2KSxoPUJyKFEoaywoZmMoKSxSUykpKSxzPUZjKHQuYixoKSE9bnVsbD91KEZjKHQuYixoKSwxOSkuYTowLEp0KGssbVYsZGUocykpLHI9MSsoRmModC5hLGgpIT1udWxsP3UoRmModC5hLGgpLDE5KS5hOjApLEp0KGssWm1lLGRlKHIpKTtvcihuKX1mdW5jdGlvbiBBbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoRj1oZG4odCxuKSx3PTA7dzxlO3crKyl7Zm9yKFJtKHMsbiksSD1uZXcgbGUsVj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLEM9Rit3O0M8dC5iO0MrKylkPVYsVj0oUW4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDQwNykpLHVlKEgsbmV3IFJjZShkLFYsbikpO2ZvcihNPUYrdztNPHQuYjtNKyspUW4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLE0+Rit3JiZFbChyKTtmb3IoaD1uZXcgUyhIKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw0MDcpLFJtKHIsbyk7aWYodzxlLTEpZm9yKGs9Rit3O2s8dC5iO2srKylRbihyLmI+MCksci5hLlhiKHIuYz0tLXIuYil9fWZ1bmN0aW9uIExtbigpe2dpKCk7dmFyIHQsZSxuLHIscyxvO2lmKE9mdClyZXR1cm4gT2Z0O2Zvcih0PW5ldyBObCg0KSx2eSh0LHRiKGh1dCwhMCkpLF9fKHQsdGIoIk0iLCEwKSksX18odCx0YigiQyIsITApKSxvPW5ldyBObCg0KSxyPTA7cjwxMTtyKyspamMobyxyLHIpO3JldHVybiBlPW5ldyBObCg0KSx2eShlLHRiKCJNIiwhMCkpLGpjKGUsNDQ0OCw0NjA3KSxqYyhlLDY1NDM4LDY1NDM5KSxzPW5ldyBsQygyKSxtMihzLHQpLG0yKHMsZkEpLG49bmV3IGxDKDIpLG4uJGwoQmoobyx0YigiTCIsITApKSksbi4kbChlKSxuPW5ldyBXbSgzLG4pLG49bmV3IGZ3dChzLG4pLE9mdD1uLE9mdH1mdW5jdGlvbiBNbW4odCl7dmFyIGUsbjtpZihlPUJyKHFlKHQsKGNpKCksVlMpKSksIUNuZShlLHQpJiYhcjIodCxDNykmJigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkuaSE9MHx8amUoUmUocWUodCxXTykpKSkpaWYoZT09bnVsbHx8dXkoZSkubGVuZ3RoPT0wKXtpZighQ25lKFZuLHQpKXRocm93IG49VnIoVnIobmV3IElsKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksVm4pLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLENxKHQsbikscnQobmV3IEYzKG4uYSkpfWVsc2UgdGhyb3cgbj1WcihWcihuZXcgSWwoIkxheW91dCBhbGdvcml0aG0gJyIpLGUpLCInIG5vdCBmb3VuZCBmb3IgIiksQ3EodCxuKSxydChuZXcgRjMobi5hKSl9ZnVuY3Rpb24gZmF0KHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKG49dC5pLGU9dC5uLHQuYj09MClmb3IoSD1uLmMrZS5iLEY9bi5iLWUuYi1lLmMsaD10LmEsdz0wLEM9aC5sZW5ndGg7dzxDOysrdylzPWhbd10samoocyxILEYpO2Vsc2Ugcj1vc2UodCwhMSksamoodC5hWzBdLG4uYytlLmIsclswXSksamoodC5hWzJdLG4uYytuLmItZS5jLXJbMl0sclsyXSksTT1uLmItZS5iLWUuYyxyWzBdPjAmJihNLT1yWzBdK3QuYyxyWzBdKz10LmMpLHJbMl0+MCYmKE0tPXJbMl0rdC5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxNKSxqaih0LmFbMV0sbi5jK2UuYityWzBdLShyWzFdLU0pLzIsclsxXSk7Zm9yKG89dC5hLGQ9MCxrPW8ubGVuZ3RoO2Q8azsrK2Qpcz1vW2RdLEV0KHMsMzI2KSYmdShzLDMyNikuVGUoKX1mdW5jdGlvbiBJbW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoTT1uZXcgX1EsTS5kPTAsaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDI5KSxNLmQrPW8uYS5jLmxlbmd0aDtmb3Iocj0wLHM9MCxNLmE9UHQoVHIsWHIsMjUsdC5iLmMubGVuZ3RoLDE1LDEpLGs9MCxDPTAsTS5lPVB0KFRyLFhyLDI1LE0uZCwxNSwxKSxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShKKG4pLDI5KSxlLnA9cisrLE0uYVtlLnBdPXMrKyxDPTAsdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxkLnA9aysrLE0uZVtkLnBdPUMrKztyZXR1cm4gTS5jPW5ldyBJJHQoTSksTS5iPUhkKE0uZCksY21uKE0sdCksTS5mPUhkKE0uZCksdW1uKE0sdCksTX1mdW5jdGlvbiBsbGUodCxlKXt2YXIgbixyLHMsbztmb3Iobz11KEZlKHQubix0Lm4uYy5sZW5ndGgtMSksMjExKS5kLHQucD1iLk1hdGgubWluKHQucCxlLmcpLHQucj1iLk1hdGgubWF4KHQucixvKSx0Lmc9Yi5NYXRoLm1heCh0LmcsZS5nKyh0LmIuYy5sZW5ndGg9PTE/MDp0LmkpKSx0Lm89Yi5NYXRoLm1pbih0Lm8sZS5mKSx0LmUrPWUuZisodC5iLmMubGVuZ3RoPT0xPzA6dC5pKSx0LmY9Yi5NYXRoLm1heCh0LmYsZS5mKSxzPXQubi5jLmxlbmd0aD4wPyh0Lm4uYy5sZW5ndGgtMSkqdC5pOjAscj1uZXcgUyh0Lm4pO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMSkscys9bi5hO3QuZD1zLHQuYT10LmUvdC5iLmMubGVuZ3RoLXQuaSooKHQuYi5jLmxlbmd0aC0xKS90LmIuYy5sZW5ndGgpLEczdCh0LmopfWZ1bmN0aW9uIGhsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKEM9UmUoUShlLChaZigpLGliZSkpKSxDPT1udWxsfHwoT24oQyksQykpe2ZvcihNPVB0KGRsLGkwLDI1LGUuZS5jLmxlbmd0aCwxNiwxKSxoPUVwbihlKSxzPW5ldyBRaSxrPW5ldyBTKGUuZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTQ0KSxuPXk1dCh0LGQsbnVsbCxudWxsLE0saCksbiYmKExvKG4sZSksaHMocyxuLHMuYy5iLHMuYykpO2lmKHMuYj4xKWZvcihyPWVpKHMsMCk7ci5iIT1yLmQuYzspZm9yKG49dSh0aShyKSwyMzEpLG89MCx3PW5ldyBTKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTQ0KSxkLmI9bysrO3JldHVybiBzfXJldHVybiBfMShjdChvdChjeG4sMSksaTZ0LDIzMSwwLFtlXSkpfWZ1bmN0aW9uIHBkKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKCF0Lmcpe2lmKGQ9bmV3IHFiLGU9YUEsaD1lLmEuemModCxlKSxoPT1udWxsKXtmb3Iocj1uZXcgZXIoU28odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNikscnMoZCxwZChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihzPWQuaSxvPSghdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksbmV3IGVyKHQucykpO28uZSE9by5pLmdjKCk7KytzKUV0dCh1KGRyKG8pLDQ0OSkscyk7cnMoZCwoIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLHQucykpLGV5KGQpLHQuZz1uZXcgdHJlKHQsZCksdC5pPXUoZC5nLDI0NyksdC5pPT1udWxsJiYodC5pPV9mdCksdC5wPW51bGwscmwodCkuYiY9LTV9cmV0dXJuIHQuZ31mdW5jdGlvbiBkYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihyPXQuaSxuPXQubix0LmI9PTApZT1hc2UodCwhMSksJGoodC5hWzBdLHIuZCtuLmQsZVswXSksJGoodC5hWzJdLHIuZCtyLmEtbi5hLWVbMl0sZVsyXSksRj1yLmEtbi5kLW4uYSxNPUYsZVswXT4wJiYoZVswXSs9dC5jLE0tPWVbMF0pLGVbMl0+MCYmKE0tPWVbMl0rdC5jKSxlWzFdPWIuTWF0aC5tYXgoZVsxXSxNKSwkaih0LmFbMV0sci5kK24uZCtlWzBdLShlWzFdLU0pLzIsZVsxXSk7ZWxzZSBmb3IoVj1yLmQrbi5kLEg9ci5hLW4uZC1uLmEsaD10LmEsdz0wLEM9aC5sZW5ndGg7dzxDOysrdylzPWhbd10sJGoocyxWLEgpO2ZvcihvPXQuYSxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXM9b1tkXSxFdChzLDMyNikmJnUocywzMjYpLlVlKCl9ZnVuY3Rpb24gRG1uKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihDPVB0KFRyLFhyLDI1LHQuYi5jLmxlbmd0aCsxLDE1LDEpLGs9bmV3IHFzLHI9MCxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwyOSksQ1tyKytdPWsuYS5nYygpLHc9bmV3IFMocy5hKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoaD11KEoodyksMTApLG49bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKG4pOyllPXUoTHIobiksMTcpLGsuYS56YyhlLGspO2ZvcihkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwKSxuPW5ldyBhcihscihqbyhoKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSxrLmEuQmMoZSkhPW51bGx9cmV0dXJuIEN9ZnVuY3Rpb24gbXEodCxlLG4scil7dmFyIHMsbyxoLGQsdztpZih3PWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHcucmwoby5haygpKSYmeWkobyxuKSlyZXR1cm4hMH1lbHNlIGlmKG4hPW51bGwpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKG89c1tkXSx3LnJsKG8uYWsoKSkmJnlpKG4sby5kZCgpKSlyZXR1cm4hMDtpZihyKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0sdy5ybChvLmFrKCkpJiZHdChuKT09PUd0KGNudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiEwfX1lbHNlIGZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx3LnJsKG8uYWsoKSkmJm8uZGQoKT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMX1mdW5jdGlvbiBmbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2lmKGs9YXUodC5lLlRnKCksZSksaD11KHQuZywxMTkpLFYwKHQuZSxlKSl7aWYoZS5oaSgpJiYobz1FRSh0LGUscixFdChlLDk5KSYmKHUoZSwxOCkuQmImWWEpIT0wKSxvPj0wJiZvIT1uKSl0aHJvdyBydChuZXcgUG4oWEQpKTtmb3Iocz0wLHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSl7aWYocz09bilyZXR1cm4gdSh1NCh0LHcsKHRvKCksdShlLDY2KS5PaigpP3Uociw3Mik6WWQoZSxyKSkpLDcyKTsrK3N9dGhyb3cgcnQobmV3IG1vKFhfK24rUzIrcykpfWVsc2V7Zm9yKHc9MDt3PHQuaTsrK3cpaWYoZD1oW3ddLGsucmwoZC5haygpKSlyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/ZDpkLmRkKCk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoZD1uLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7aWYobz11KEooaCksMjIxKSxzPXUoby5iLDY1KSxydyh0LmIuYyxzLmIuYytzLmIuYik8PTAmJnJ3KHMuYi5jLHQuYi5jK3QuYi5iKTw9MCYmcncodC5iLmQscy5iLmQrcy5iLmEpPD0wJiZydyhzLmIuZCx0LmIuZCt0LmIuYSk8PTApe2lmKHJ3KHMuYi5jLHQuYi5jK3QuYi5iKT09MCYmci5hPDB8fHJ3KHMuYi5jK3MuYi5iLHQuYi5jKT09MCYmci5hPjB8fHJ3KHMuYi5kLHQuYi5kK3QuYi5hKT09MCYmci5iPDB8fHJ3KHMuYi5kK3MuYi5hLHQuYi5kKT09MCYmci5iPjApe2Q9MDticmVha319ZWxzZSBkPWIuTWF0aC5taW4oZCxkb2UodCxzLHIpKTtkPWIuTWF0aC5taW4oZCxkbGUodCxvLGQscikpfXJldHVybiBkfWZ1bmN0aW9uIHlEKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5iPDIpdGhyb3cgcnQobmV3IFBuKCJUaGUgdmVjdG9yIGNoYWluIG11c3QgY29udGFpbiBhdCBsZWFzdCBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgcG9pbnQuIikpO2ZvcihzPShRbih0LmIhPTApLHUodC5hLmEuYyw4KSksb2ooZSxzLmEscy5iKSx3PW5ldyBMeCgoIWUuYSYmKGUuYT1uZXcgU3MoSGgsZSw1KSksZS5hKSksaD1laSh0LDEpO2guYTx0LmItMTspZD11KHRpKGgpLDgpLHcuZSE9dy5pLmdjKCk/bj11KGRyKHcpLDQ2OSk6KG49KFR2KCkscj1uZXcgdnAsciksZ2llKHcsbikpLG4ydChuLGQuYSxkLmIpO2Zvcig7dy5lIT13LmkuZ2MoKTspZHIodyksdV8odyk7bz0oUW4odC5iIT0wKSx1KHQuYy5iLmMsOCkpLGFqKGUsby5hLG8uYil9ZnVuY3Rpb24gZ2xlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihuPTAscz1uZXcgUygoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMDEpKS5nLmIuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLHIucD1uKys7Zm9yKGU9PShiZSgpLE5uKT9Ycyh0LG5ldyBOWCk6WHModCxuZXcgUFgpLGQ9MCxDPXQuYy5sZW5ndGgtMTtkPEM7KWg9KEFuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksaz0oQW4oQyx0LmMubGVuZ3RoKSx1KHQuY1tDXSwxMDEpKSxvPWU9PU5uP2guYzpoLmEsdz1lPT1Obj9rLmE6ay5jLF9nKGgsZSwoTTEoKSxzNyksbyksX2coayxlLGk3LHcpLCsrZCwtLUM7ZD09QyYmX2coKEFuKGQsdC5jLmxlbmd0aCksdSh0LmNbZF0sMTAxKSksZSwoTTEoKSxfNiksbnVsbCl9ZnVuY3Rpb24gT21uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtyZXR1cm4gTT10LmEuaSt0LmEuZy8yLEY9dC5hLmkrdC5hLmcvMixWPWUuaStlLmcvMix0dD1lLmorZS5mLzIsZD1uZXcgJGUoVix0dCksaz11KHFlKGUsKGNpKCksejYpKSw4KSxrLmE9ay5hK00say5iPWsuYitGLG89KGQuYi1rLmIpLyhkLmEtay5hKSxyPWQuYi1vKmQuYSxZPW4uaStuLmcvMixndD1uLmorbi5mLzIsdz1uZXcgJGUoWSxndCksQz11KHFlKG4sejYpLDgpLEMuYT1DLmErTSxDLmI9Qy5iK0YsaD0ody5iLUMuYikvKHcuYS1DLmEpLHM9dy5iLWgqdy5hLEg9KHItcykvKGgtbyksay5hPEgmJmQuYTxIfHxIPGsuYSYmSDxkLmE/ITE6IShDLmE8SCYmdy5hPEh8fEg8Qy5hJiZIPHcuYSl9ZnVuY3Rpb24gTm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKEY9dShKbih0LmMsZSksMTgzKSwhRil0aHJvdyBydChuZXcgYWQoIkVkZ2UgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGs9b0UoRiksbz1mTSgoIWUuYSYmKGUuYT1uZXcgaGUoWmksZSw2LDYpKSxlLmEpKSxkPSFvLGQmJihIPW5ldyBiZyxuPW5ldyB5S3QodCxrLEgpLGpZZSgoIWUuYSYmKGUuYT1uZXcgaGUoWmksZSw2LDYpKSxlLmEpLG4pLFdmKEYsYjh0LEgpKSxzPXIyKGUsKGNpKCksaTUpKSxzJiYoQz11KHFlKGUsaTUpLDc0KSxoPSFDfHxzWHQoQyksdz0haCx3JiYoTT1uZXcgYmcscj1uZXcgZHp0KE0pLHZhKEMsciksV2YoRiwianVuY3Rpb25Qb2ludHMiLE0pKSkscDgoRiwiY29udGFpbmVyIixySShlKS5rKSxudWxsfWZ1bmN0aW9uIGl4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQzt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bix0aGlzLmU9XzEoY3Qob3Qoc3huLDEpLEllLDE2OCwwLFtuZXcgVHgodCxlKSxuZXcgVHgoZSxuKSxuZXcgVHgobix0KV0pKSx0aGlzLmY9XzEoY3Qob3QoVXMsMSksdGUsOCwwLFt0LGUsbl0pKSx0aGlzLmQ9KHI9bmEobmModGhpcy5iKSx0aGlzLmEpLHM9bmEobmModGhpcy5jKSx0aGlzLmEpLG89bmEobmModGhpcy5jKSx0aGlzLmIpLGg9ci5hKih0aGlzLmEuYSt0aGlzLmIuYSkrci5iKih0aGlzLmEuYit0aGlzLmIuYiksZD1zLmEqKHRoaXMuYS5hK3RoaXMuYy5hKStzLmIqKHRoaXMuYS5iK3RoaXMuYy5iKSx3PTIqKHIuYSpvLmItci5iKm8uYSksaz0ocy5iKmgtci5iKmQpL3csQz0oci5hKmQtcy5hKmgpL3csbmV3ICRlKGssQykpfWZ1bmN0aW9uIHBsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2lmKEY9bmV3IEhtKHQucCksV2YoZSxvaSxGKSxuJiYhKHQuZj9KTSh0LmYpOm51bGwpLmEuZGMoKSlmb3IoQz1uZXcgYmcsV2YoZSwibG9ncyIsQyksZD0wLFY9bmV3IEEoKHQuZj9KTSh0LmYpOm51bGwpLmIuS2MoKSk7Vi5iLk9iKCk7KUg9QnIoVi5iLlBiKCkpLE09bmV3IEhtKEgpLFhtKEMsZCksX3J0KEMsZCxNKSwrK2Q7aWYociYmKGs9bmV3IHk5KHQucSksV2YoZSwiZXhlY3V0aW9uVGltZSIsaykpLCFKTSh0LmEpLmEuZGMoKSlmb3IoaD1uZXcgYmcsV2YoZSxHY3QsaCksZD0wLG89bmV3IEEoSk0odC5hKS5iLktjKCkpO28uYi5PYigpOylzPXUoby5iLlBiKCksMTk0OSksdz1uZXcgbXgsWG0oaCxkKSxfcnQoaCxkLHcpLHBsZShzLHcsbixyKSwrK2R9ZnVuY3Rpb24gZHcodCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKG89dC5jLGg9dC5kLERhKHQsbnVsbCksc2EodCxudWxsKSxlJiZqZShSZShRKGgsKHNlKCksUGx0KSkpKT9EYSh0LFE1dChoLmksKHNvKCksZXUpLChiZSgpLEhuKSkpOkRhKHQsaCksZSYmamUoUmUoUShvLChzZSgpLEJsdCkpKSk/c2EodCxRNXQoby5pLChzbygpLEp1KSwoYmUoKSxCbikpKTpzYSh0LG8pLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw3MCkscz11KFEobiwoVGUoKSxNZCkpLDI3Mikscz09KEExKCksUzcpP0p0KG4sTWQsWXkpOnM9PVl5JiZKdChuLE1kLFM3KTtkPWplKFJlKFEodCwoc2UoKSwkMSkpKSksSnQodCwkMSwoRm4oKSwhZCkpLHQuYT1CSSh0LmEpfWZ1bmN0aW9uIFBtbih0LGUsbil7dmFyIHIscyxvLGgsZCx3O2ZvcihyPTAsbz1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylzPXUoZHIobyksMzMpLGg9IiIsKCFzLm4mJihzLm49bmV3IGhlKHFvLHMsMSw3KSkscy5uKS5pPT0wfHwoaD11KFN0KCghcy5uJiYocy5uPW5ldyBoZShxbyxzLDEsNykpLHMubiksMCksMTM3KS5hKSxkPW5ldyBRWXQoaCksTG8oZCxzKSxKdChkLChHcCgpLEM2KSxzKSxkLmI9cisrLGQuZC5hPXMuaStzLmcvMixkLmQuYj1zLmorcy5mLzIsZC5lLmE9Yi5NYXRoLm1heChzLmcsMSksZC5lLmI9Yi5NYXRoLm1heChzLmYsMSksdWUoZS5lLGQpLHN1KG4uZixzLGQpLHc9dShxZShzLChaZigpLHA3dCkpLDk4KSx3PT0ob2EoKSx5YikmJih3PUgxKX1mdW5jdGlvbiBGbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O249RHYobmV3IFViLHQuZiksaz10LmlbZS5jLmkucF0sSD10LmlbZS5kLmkucF0sdz1lLmMsRj1lLmQsZD13LmEuYixNPUYuYS5iLGsuYnx8KGQrPXcubi5iKSxILmJ8fChNKz1GLm4uYiksQz1wcyhiLk1hdGgubWF4KDAsZC1NKSksaD1wcyhiLk1hdGgubWF4KDAsTS1kKSksVj0oWT1iLk1hdGgubWF4KDEsdShRKGUsKFRlKCksRjYpKSwxOSkuYSksdHQ9dG10KGUuYy5pLmssZS5kLmkuayksWSp0dCkscz12ZihvZihhZihzZihjZihuZXcgRWgsViksaCksbiksdShKbih0LmssZS5jKSwxMjEpKSksbz12ZihvZihhZihzZihjZihuZXcgRWgsViksQyksbiksdShKbih0LmssZS5kKSwxMjEpKSkscj1uZXcgSkd0KHMsbyksdC5jW2UucF09cn1mdW5jdGlvbiBCbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrO2ZvcihoPW5ldyBxbGUodCxlLG4pLHc9bmV3IGhhKHIsMCkscz0hMTt3LmI8dy5kLmdjKCk7KWQ9KFFuKHcuYjx3LmQuZ2MoKSksdSh3LmQuWGIody5jPXcuYisrKSwyMzMpKSxkPT1lfHxkPT1uP0VsKHcpOiFzJiZYdCh4MShkLmcsZC5kWzBdKS5hKT5YdCh4MShoLmcsaC5kWzBdKS5hKT8oUW4ody5iPjApLHcuYS5YYih3LmM9LS13LmIpLFJtKHcsaCkscz0hMCk6ZC5lJiZkLmUuZ2MoKT4wJiYobz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMoZSksaz0oIWQuZSYmKGQuZT1uZXcgbGUpLGQuZSkuTWMobiksKG98fGspJiYoKCFkLmUmJihkLmU9bmV3IGxlKSxkLmUpLkZjKGgpLCsraC5jKSk7c3x8KHIuY1tyLmMubGVuZ3RoXT1oKX1mdW5jdGlvbiBibGUodCl7dmFyIGUsbixyO2lmKEgzKHUoUSh0LChUZSgpLG9zKSksOTgpKSlmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDExKSxlLmo9PShiZSgpLFpvKSYmKHI9dShRKGUsKHNlKCksWnUpKSwxMCkscj9GcyhlLHUoUShyLG9jKSw2MSkpOmUuZS5jLmxlbmd0aC1lLmcuYy5sZW5ndGg8MD9GcyhlLEhuKTpGcyhlLEJuKSk7ZWxzZXtmb3Iobj1uZXcgUyh0LmopO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDExKSxyPXUoUShlLChzZSgpLFp1KSksMTApLHI/RnMoZSx1KFEocixvYyksNjEpKTplLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RoPDA/RnMoZSwoYmUoKSxIbikpOkZzKGUsKGJlKCksQm4pKTtKdCh0LG9zLChvYSgpLEw3KSl9fWZ1bmN0aW9uIHhEKHQpe3ZhciBlLG4scjtzd2l0Y2godCl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUodCZtcyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dDwzMj8obj0oZT10Pj4+MCwiMCIrZS50b1N0cmluZygxNikpLHI9IlxceCIrRGwobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6dD49WWE/KG49KGU9dD4+PjAsIjAiK2UudG9TdHJpbmcoMTYpKSxyPSJcXHYiK0RsKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZSh0Jm1zKX1yZXR1cm4gcn1mdW5jdGlvbiBnYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtpZihoPXQuZSx3PWUuZSx3PT0wKXJldHVybiB0O2lmKGg9PTApcmV0dXJuIGUuZT09MD9lOm5ldyBLMygtZS5lLGUuZCxlLmEpO2lmKG89dC5kLGQ9ZS5kLG8rZD09MilyZXR1cm4gbj1Qcyh0LmFbMF0sY28pLHI9UHMoZS5hWzBdLGNvKSxoPDAmJihuPU84KG4pKSx3PDAmJihyPU84KHIpKSxLSShZcChuLHIpKTtpZihzPW8hPWQ/bz5kPzE6LTE6UHl0KHQuYSxlLmEsbykscz09LTEpTT0tdyxDPWg9PXc/RnJ0KGUuYSxkLHQuYSxvKTpScnQoZS5hLGQsdC5hLG8pO2Vsc2UgaWYoTT1oLGg9PXcpe2lmKHM9PTApcmV0dXJuIEpwKCksUUU7Qz1GcnQodC5hLG8sZS5hLGQpfWVsc2UgQz1ScnQodC5hLG8sZS5hLGQpO3JldHVybiBrPW5ldyBLMyhNLEMubGVuZ3RoLEMpLE9DKGspLGt9ZnVuY3Rpb24gc3h0KHQpe3ZhciBlLG4scixzLG8saDtmb3IodGhpcy5lPW5ldyBsZSx0aGlzLmE9bmV3IGxlLG49dC5iLTE7bjwzO24rKyloOCh0LDAsdShRZih0LDApLDgpKTtpZih0LmI8NCl0aHJvdyBydChuZXcgUG4oIkF0IChsZWFzdCBkaW1lbnNpb24gKyAxKSBjb250cm9sIHBvaW50cyBhcmUgbmVjZXNzYXJ5ISIpKTtmb3IodGhpcy5iPTMsdGhpcy5kPSEwLHRoaXMuYz0hMSxrYm4odGhpcyx0LmIrdGhpcy5iLTEpLGg9bmV3IGxlLG89bmV3IFModGhpcy5lKSxlPTA7ZTx0aGlzLmItMTtlKyspdWUoaCx5ZShKKG8pKSk7Zm9yKHM9ZWkodCwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksOCksdWUoaCx5ZShKKG8pKSksdWUodGhpcy5hLG5ldyByUXQocixoKSksQW4oMCxoLmMubGVuZ3RoKSxoLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gdmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwKSxoLms9PShHbigpLFNsKSYmKHc9KGs9dShMcihuZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSkpLDE3KSxDPXUoTHIobmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpKSwxNyksIWplKFJlKFEoaywoc2UoKSwkMSkpKSl8fCFqZShSZShRKEMsJDEpKSk/ZTpVbmUoZSkpLGM2KGgsdykpLHI9bmV3IGFyKGxyKE1zKGgpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTHIociksMTcpLHc9amUoUmUoUShuLChzZSgpLCQxKSkpKT9VbmUoZSk6ZSxqbmUobix3KX1mdW5jdGlvbiBSbW4odCxlLG4scixzKXt2YXIgbyxoLGQ7aWYobi5mPj1lLm8mJm4uZjw9ZS5mfHxlLmEqLjU8PW4uZiYmZS5hKjEuNT49bi5mKXtpZihoPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLGguZStoLmQrbi5nK3M8PXImJihvPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLG8uZi10LmYrbi5mPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIGkzdChlLG4pLCEwO2lmKGUucytuLmc8PXImJihlLnQrZS5kK24uZitzPD10LmJ8fHQuYS5jLmxlbmd0aD09MSkpcmV0dXJuIHVlKGUuYixuKSxkPXUoRmUoZS5uLGUubi5jLmxlbmd0aC0xKSwyMTEpLHVlKGUubixuZXcgZiQoZS5zLGQuZitkLmErZS5pLGUuaSkpLCQzdCh1KEZlKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxuKSxsbGUoZSxuKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiB3bGUodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiB0LmVqKCk/KHM9bnVsbCxvPXQuZmooKSxyPXQuWmkoMSxoPUtydCh0LGUsbiksbixlLG8pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/eWkoaCxuKTpHdChoKT09PUd0KG4pKT8oaCE9bnVsbCYmKHM9dC5kaihoLHMpKSxzPXQuY2oobixzKSx0LmlqKCkmJihzPXQubGooaCxuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6KHQuaWooKSYmKHM9dC5saihoLG4scykpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKSxoKTooaD1LcnQodCxlLG4pLHQuYmooKSYmISh0Lm5pKCkmJmghPW51bGw/eWkoaCxuKTpHdChoKT09PUd0KG4pKSYmKHM9bnVsbCxoIT1udWxsJiYocz10LmRqKGgsbnVsbCkpLHM9dC5jaihuLHMpLHMmJnMuRmkoKSksaCl9ZnVuY3Rpb24geV8odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2UlPTI0LHQucS5nZXRIb3VycygpIT1lJiYocj1uZXcgYi5EYXRlKHQucS5nZXRUaW1lKCkpLHIuc2V0RGF0ZShyLmdldERhdGUoKSsxKSxkPXQucS5nZXRUaW1lem9uZU9mZnNldCgpLXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxkPjAmJih3PWQvNjB8MCxrPWQlNjAscz10LnEuZ2V0RGF0ZSgpLG49dC5xLmdldEhvdXJzKCksbit3Pj0yNCYmKytzLG89bmV3IGIuRGF0ZSh0LnEuZ2V0RnVsbFllYXIoKSx0LnEuZ2V0TW9udGgoKSxzLGUrdyx0LnEuZ2V0TWludXRlcygpK2ssdC5xLmdldFNlY29uZHMoKSx0LnEuZ2V0TWlsbGlzZWNvbmRzKCkpLHQucS5zZXRUaW1lKG8uZ2V0VGltZSgpKSkpLGg9dC5xLmdldFRpbWUoKSx0LnEuc2V0VGltZShoKzM2ZTUpLHQucS5nZXRIb3VycygpIT1lJiZ0LnEuc2V0VGltZShoKX1mdW5jdGlvbiBqbW4odCxlKXt2YXIgbixyLHMsbyxoO2lmKHdyKGUsIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXtvcihlKTtyZXR1cm59aWYocz1uZXcgZjV0KHQpLGg9KHMuaT09bnVsbCYmKHMuaT1zeXQocyxuZXcgT0YpKSxYdChzLmkpKnMuZiksbj1oLyhzLmk9PW51bGwmJihzLmk9c3l0KHMsbmV3IE9GKSksWHQocy5pKSkscy5iPm4pe29yKGUpO3JldHVybn1zd2l0Y2godShRKHQsKFRlKCkscmh0KSksMzM3KS5nKXtjYXNlIDI6bz1uZXcgUEY7YnJlYWs7Y2FzZSAwOm89bmV3IERGO2JyZWFrO2RlZmF1bHQ6bz1uZXcgRkZ9aWYocj1vLlZmKHQscyksIW8uV2YoKSlzd2l0Y2godShRKHQsYVYpLDMzOCkuZyl7Y2FzZSAyOnI9Z29lKHMscik7YnJlYWs7Y2FzZSAxOnI9ZGFlKHMscil9RnluKHQscyxyKSxvcihlKX1mdW5jdGlvbiAkbW4odCxlKXt2YXIgbixyLHMsbztpZihUcm4odC5kLHQuZSksdC5jLmEuJGIoKSxYdCh5ZShRKGUuaiwoVGUoKSxZRykpKSkhPTB8fFh0KHllKFEoZS5qLFlHKSkpIT0wKWZvcihuPUZFLEd0KFEoZS5qLGRiKSkhPT1HdCgoajAoKSxnYikpJiZKdChlLmosKHNlKCksTXcpLChGbigpLCEwKSksbz11KFEoZS5qLFNTKSwxOSkuYSxzPTA7czxvJiYocj15bW4odCxlKSwhKHI8biYmKG49cixpbmUodCksbj09MCkpKTtzKyspO2Vsc2UgZm9yKG49dmksR3QoUShlLmosZGIpKSE9PUd0KChqMCgpLGdiKSkmJkp0KGUuaiwoc2UoKSxNdyksKEZuKCksITApKSxvPXUoUShlLmosU1MpLDE5KS5hLHM9MDtzPG8mJihyPWlsZSh0LGUpLCEocjxuJiYobj1yLGluZSh0KSxuPT0wKSkpO3MrKyk7fWZ1bmN0aW9uIHptbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7Zm9yKGg9bmV3IGxlLGQ9MCxuPTAsdz0wO2Q8ZS5jLmxlbmd0aC0xJiZuPHQuZ2MoKTspe2ZvcihyPXUodC5YYihuKSwxOSkuYSt3OyhBbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmE8cjspKytkO2ZvcihrPTAsbz1yLShBbihkLGUuYy5sZW5ndGgpLHUoZS5jW2RdLDE5KSkuYSxzPShBbihkKzEsZS5jLmxlbmd0aCksdShlLmNbZCsxXSwxOSkpLmEtcixvPnMmJisrayx1ZShoLChBbihkK2ssZS5jLmxlbmd0aCksdShlLmNbZCtrXSwxOSkpKSx3Kz0oQW4oZCtrLGUuYy5sZW5ndGgpLHUoZS5jW2Qra10sMTkpKS5hLXIsKytuO248dC5nYygpJiZ1KHQuWGIobiksMTkpLmErdzw9KEFuKGQrayxlLmMubGVuZ3RoKSx1KGUuY1tkK2tdLDE5KSkuYTspKytuO2QrPTEra31yZXR1cm4gaH1mdW5jdGlvbiBwYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuZCl7aWYoZD1uZXcgUzMsZT1hQSxvPWUuYS56Yyh0LGUpLG89PW51bGwpe2ZvcihyPW5ldyBlcihTbyh0KSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDI2KSxycyhkLHBhdChuKSk7ZS5hLkJjKHQpIT1udWxsLGUuYS5nYygpPT0wfWZvcihoPWQuaSxzPSghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksbmV3IGVyKHQucSkpO3MuZSE9cy5pLmdjKCk7KytoKXUoZHIocyksMzk5KTtycyhkLCghdC5xJiYodC5xPW5ldyBoZShWaCx0LDExLDEwKSksdC5xKSksZXkoZCksdC5kPW5ldyBxMygodShTdChXdCgoanAoKSxMbikubyksOSksMTgpLGQuaSksZC5nKSx0LmU9dShkLmcsNjczKSx0LmU9PW51bGwmJih0LmU9czVlKSxybCh0KS5iJj0tMTd9cmV0dXJuIHQuZH1mdW5jdGlvbiBFRSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYoaz1hdSh0LmUuVGcoKSxlKSx3PTAscz11KHQuZywxMTkpLHRvKCksdShlLDY2KS5PaigpKXtmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZih5aShvLG4pKXJldHVybiB3Oysrd319ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihvPXNbZF0say5ybChvLmFrKCkpKXtpZih5aShuLG8uZGQoKSkpcmV0dXJuIHc7Kyt3fWlmKHIpe2Zvcih3PTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0say5ybChvLmFrKCkpKXtpZihHdChuKT09PUd0KGNudCh0LHUoby5kZCgpLDU2KSkpKXJldHVybiB3Oysrd319fWVsc2UgZm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoby5kZCgpPT1udWxsKXJldHVybiB3Oysrd31yZXR1cm4tMX1mdW5jdGlvbiBxbW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKHZuKCksWHModCxuZXcgUlopLGg9VU0odCksSD1uZXcgbGUsRj1uZXcgbGUsZD1udWxsLHc9MDtoLmIhPTA7KW89dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMTU3KSwhZHx8RnUoZCkqeGwoZCkvMjxGdShvKSp4bChvKT8oZD1vLEguY1tILmMubGVuZ3RoXT1vKToodys9RnUobykqeGwobyksRi5jW0YuYy5sZW5ndGhdPW8sRi5jLmxlbmd0aD4xJiYodz5GdShkKSp4bChkKS8yfHxoLmI9PTApJiYoTT1uZXcgVSQoRiksQz1GdShkKS94bChkKSxrPU1hdChNLGUsbmV3IHd4LG4scixzLEMpLExpKEdmKE0uZSksayksZD1NLEguY1tILmMubGVuZ3RoXT1NLHc9MCxGLmM9UHQoWG4sSWUsMSwwLDUsMSkpKTtyZXR1cm4gQXMoSCxGKSxIfWZ1bmN0aW9uIEhtbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7aWYobi5taChlKSYmKEM9KEg9ZSxIP3Uociw0OSkueGgoSCk6bnVsbCksQykpaWYoWT1uLmJoKGUsdC5hKSxWPWUudCxWPjF8fFY9PS0xKWlmKE09dShZLDY5KSxGPXUoQyw2OSksTS5kYygpKUYuJGIoKTtlbHNlIGZvcihoPSEhbm8oZSksbz0wLGQ9dC5hP00uS2MoKTpNLlpoKCk7ZC5PYigpOylrPXUoZC5QYigpLDU2KSxzPXUoV3YodCxrKSw1Nikscz8oaD8odz1GLlhjKHMpLHc9PS0xP0YuWGgobyxzKTpvIT13JiZGLmppKG8scykpOkYuWGgobyxzKSwrK28pOnQuYiYmIWgmJihGLlhoKG8sayksKytvKTtlbHNlIFk9PW51bGw/Qy5XYihudWxsKToocz1Xdih0LFkpLHM9PW51bGw/dC5iJiYhbm8oZSkmJkMuV2IoWSk6Qy5XYihzKSl9ZnVuY3Rpb24gR21uKHQsZSl7dmFyIG4scixzLG8saCxkLHcsaztmb3Iobj1uZXcgQ1kscz1uZXcgYXIobHIoam8oZSkuYS5LYygpLG5ldyB6KSk7enIocyk7KWlmKHI9dShMcihzKSwxNyksIVZhKHIpJiYoZD1yLmMuaSxrNHQoZCx1RykpKXtpZihrPUI1dCh0LGQsdUcsY0cpLGs9PS0xKWNvbnRpbnVlO24uYj1iLk1hdGgubWF4KG4uYixrKSwhbi5hJiYobi5hPW5ldyBsZSksdWUobi5hLGQpfWZvcihoPW5ldyBhcihscihNcyhlKS5hLktjKCksbmV3IHopKTt6cihoKTspaWYobz11KExyKGgpLDE3KSwhVmEobykmJih3PW8uZC5pLGs0dCh3LGNHKSkpe2lmKGs9QjV0KHQsdyxjRyx1Ryksaz09LTEpY29udGludWU7bi5kPWIuTWF0aC5tYXgobi5kLGspLCFuLmMmJihuLmM9bmV3IGxlKSx1ZShuLmMsdyl9cmV0dXJuIG59ZnVuY3Rpb24gbWxlKHQpe2JFKCk7dmFyIGUsbixyLHM7aWYoZT1wcyh0KSx0PG9TLmxlbmd0aClyZXR1cm4gb1NbZV07aWYodDw9NTApcmV0dXJuIGhEKChKcCgpLFN1dCksZSk7aWYodDw9JGcpcmV0dXJuIEd4KGhEKFQ2WzFdLGUpLGUpO2lmKHQ+MWU2KXRocm93IHJ0KG5ldyBwUigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYodDw9dmkpcmV0dXJuIEd4KGhEKFQ2WzFdLGUpLGUpO2ZvcihyPWhEKFQ2WzFdLHZpKSxzPXIsbj1rdSh0LXZpKSxlPXBzKHQldmkpO3ljKG4sdmkpPjA7KXM9SjMocyxyKSxuPVlwKG4sdmkpO2ZvcihzPUozKHMsaEQoVDZbMV0sZSkpLHM9R3gocyx2aSksbj1rdSh0LXZpKTt5YyhuLHZpKT4wOylzPUd4KHMsdmkpLG49WXAobix2aSk7cmV0dXJuIHM9R3gocyxlKSxzfWZ1bmN0aW9uIFZtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztmb3Iod3IoZSwiSGllcmFyY2hpY2FsIHBvcnQgZHVtbXkgc2l6ZSBwcm9jZXNzaW5nIiwxKSx3PW5ldyBsZSxDPW5ldyBsZSxyPVh0KHllKFEodCwoVGUoKSxRNCkpKSksbj1yKjIsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLHcuYz1QdChYbixJZSwxLDAsNSwxKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShHbigpLHhzKSYmKGs9dShRKGgsKHNlKCksb2MpKSw2MSksaz09KGJlKCksTm4pP3cuY1t3LmMubGVuZ3RoXT1oOms9PW1yJiYoQy5jW0MuYy5sZW5ndGhdPWgpKTtWb2UodywhMCxuKSxWb2UoQywhMSxuKX1vcihlKX1mdW5jdGlvbiBVbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdzt3cihlLCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PXQuYix3LmMubGVuZ3RoIT0wJiYocj0oQW4oMCx3LmMubGVuZ3RoKSx1KHcuY1swXSwyOSkpLGg9dShGZSh3LHcuYy5sZW5ndGgtMSksMjkpLG49bmV3IENoKHQpLG89bmV3IENoKHQpLE13bih0LHIsaCxuLG8pLG4uYS5jLmxlbmd0aD09MHx8KFVtKDAsdy5jLmxlbmd0aCksVzkody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8KHcuY1t3LmMubGVuZ3RoXT1vKSksVnModCwoc2UoKSxObHQpKSYmKHM9bmV3IENoKHQpLGQ9bmV3IENoKHQpLE12bih0LHMsZCkscy5hLmMubGVuZ3RoPT0wfHwoVW0oMCx3LmMubGVuZ3RoKSxXOSh3LmMsMCxzKSksZC5hLmMubGVuZ3RoPT0wfHwody5jW3cuYy5sZW5ndGhdPWQpKSxvcihlKX1mdW5jdGlvbiB5bGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihkPXUoSih3KSwxMCksZC5rPT0oR24oKSx4cykmJihzPXUoUShkLChzZSgpLG9jKSksNjEpLHM9PShiZSgpLEhuKXx8cz09Qm4pKWZvcihyPW5ldyBhcihscih6MChkKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSxlPW4uYSxlLmIhPTAmJihrPW4uYyxrLmk9PWQmJihvPShRbihlLmIhPTApLHUoZS5hLmEuYyw4KSksby5iPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iKSxDPW4uZCxDLmk9PWQmJihoPShRbihlLmIhPTApLHUoZS5jLmIuYyw4KSksaC5iPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbQy5pLm4sQy5uLEMuYV0pKS5iKSl9ZnVuY3Rpb24gV21uKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHdyKGUsIlNvcnQgQnkgSW5wdXQgTW9kZWwgIitRKHQsKFRlKCksZGIpKSwxKSxzPTAscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj11KEoociksMjkpLHc9cz09MD8wOnMtMSxkPXUoRmUodC5iLHcpLDI5KSxoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLEd0KFEobyxvcykpIT09R3QoKG9hKCksRzIpKSYmR3QoUShvLG9zKSkhPT1HdChWYykmJih2bigpLFhzKG8uaixuZXcgUnRlKGQsRnNlKG8pKSksWWIoZSwiTm9kZSAiK28rIiBwb3J0czogIitvLmopKTt2bigpLFhzKG4uYSxuZXcgb25lKGQsdShRKHQsZGIpLDMzOSksdShRKHQsRjl0KSwzNzgpKSksWWIoZSwiTGF5ZXIgIitzKyI6ICIrbiksKytzfW9yKGUpfWZ1bmN0aW9uIEttbih0LGUpe3ZhciBuLHIscyxvO2lmKG89Y2xlKGUpLHVzKG5ldyBUbihudWxsLCghZS5jJiYoZS5jPW5ldyBoZShmbCxlLDksOSkpLG5ldyBfbihlLmMsMTYpKSksbmV3IGpuKG8pKSxzPXUoUShvLChzZSgpLEdjKSksMjEpLFkzbihlLHMpLHMuSGMoKG9vKCksYmgpKSlmb3Iocj1uZXcgZXIoKCFlLmMmJihlLmM9bmV3IGhlKGZsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDExOCksXzRuKHQsZSxvLG4pO3JldHVybiB1KHFlKGUsKFRlKCksRjIpKSwxNzQpLmdjKCkhPTAmJnR1ZShlLG8pLGplKFJlKFEobyxjQ3QpKSkmJnMuRmMoJEcpLFZzKG8sU08pJiZqcXQobmV3IGwzdChYdCh5ZShRKG8sU08pKSkpLG8pLEd0KHFlKGUsankpKT09PUd0KCgkMCgpLFpnKSk/ajVuKHQsZSxvKTphNW4odCxlLG8pLG99ZnVuY3Rpb24geF8odCxlLG4scil7dmFyIHMsbyxoO2lmKHRoaXMuaj1uZXcgbGUsdGhpcy5rPW5ldyBsZSx0aGlzLmI9bmV3IGxlLHRoaXMuYz1uZXcgbGUsdGhpcy5lPW5ldyBBeCx0aGlzLmk9bmV3IER1LHRoaXMuZj1uZXcgcXR0LHRoaXMuZD1uZXcgbGUsdGhpcy5nPW5ldyBsZSx1ZSh0aGlzLmIsdCksdWUodGhpcy5iLGUpLHRoaXMuZS5jPWIuTWF0aC5taW4odC5hLGUuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbih0LmIsZS5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKHQuYS1lLmEpLHRoaXMuZS5hPWIuTWF0aC5hYnModC5iLWUuYikscz11KFEociwoVGUoKSxfbykpLDc0KSxzKWZvcihoPWVpKHMsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDgpLGptdChvLmEsdC5hKSYmbmkodGhpcy5pLG8pO24mJnVlKHRoaXMuaixuKSx1ZSh0aGlzLmsscil9ZnVuY3Rpb24gWW1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3IoQz1uZXcgVmoobmV3IENpKG4pKSxkPVB0KGRsLGkwLDI1LHQuZi5lLmMubGVuZ3RoLDE2LDEpLGF3dChkLGQubGVuZ3RoKSxuW2UuYl09MCxrPW5ldyBTKHQuZi5lKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNDQpLHcuYiE9ZS5iJiYoblt3LmJdPXZpKSxNOChkRShDLHcpKTtmb3IoO0MuYi5jLmxlbmd0aCE9MDspZm9yKE09dShRcnQoQyksMTQ0KSxkW00uYl09ITAsbz10V3QobmV3IGhldCh0LmIsTSksMCk7by5jOylzPXUoQnd0KG8pLDI4MiksRj1UZm4ocyxNKSwhZFtGLmJdJiYoVnMocywoSkkoKSxvRykpP2g9WHQoeWUoUShzLG9HKSkpOmg9dC5jLHI9bltNLmJdK2gscjxuW0YuYl0mJihuW0YuYl09cixRZWUoQyxGKSxNOChkRShDLEYpKSkpfWZ1bmN0aW9uIHhsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihzPSEwLGg9bmV3IFModC5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDI5KSxrPVRzLEM9bnVsbCx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZD11KEoodyksMTApLE09WHQoZS5wW2QucF0pK1h0KGUuZFtkLnBdKS1kLmQuZCxyPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSkrZC5vLmIrZC5kLmEsTT5rJiZyPmspQz1kLGs9WHQoZS5wW2QucF0pK1h0KGUuZFtkLnBdKStkLm8uYitkLmQuYTtlbHNle3M9ITEsbi5uJiZZYihuLCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitkKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK0MpO2JyZWFrfWlmKCFzKWJyZWFrfXJldHVybiBuLm4mJlliKG4sZSsiIGlzIGZlYXNpYmxlOiAiK3MpLHN9ZnVuY3Rpb24gWG1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDO2ZvcihkPS0xLEM9bmV3IFModCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTEyKSxrLmc9ZC0tLHM9U3IobSQodCQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGsuZiwxNikpLG5ldyBMUSksbmV3IE1RKSkuZCksbz1TcihtJCh0JChSaShuZXcgVG4obnVsbCxuZXcgX24oay5rLDE2KSksbmV3IElRKSxuZXcgWDUpKS5kKSxoPXMsdz1vLHJ8fChoPVNyKG0kKHQkKG5ldyBUbihudWxsLG5ldyBfbihrLmYsMTYpKSxuZXcgRFEpKS5kKSx3PVNyKG0kKHQkKG5ldyBUbihudWxsLG5ldyBfbihrLmssMTYpKSxuZXcgT1EpKS5kKSksay5kPWgsay5hPXMsay5pPXcsay5iPW8sdz09MD9ocyhuLGssbi5jLmIsbi5jKTpoPT0wJiZocyhlLGssZS5jLmIsZS5jKX1mdW5jdGlvbiBRbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYobi5kLmkhPWUuaSl7Zm9yKHM9bmV3IEgwKHQpLF8wKHMsKEduKCksWnMpKSxKdChzLChzZSgpLF9pKSxuKSxKdChzLChUZSgpLG9zKSwob2EoKSxWYykpLHIuY1tyLmMubGVuZ3RoXT1zLGg9bmV3IE1jLFVvKGgscyksRnMoaCwoYmUoKSxCbikpLGQ9bmV3IE1jLFVvKGQscyksRnMoZCxIbiksQz1uLmQsc2EobixoKSxvPW5ldyB6dixMbyhvLG4pLEp0KG8sX28sbnVsbCksRGEobyxkKSxzYShvLEMpLGs9bmV3IGhhKG4uYiwwKTtrLmI8ay5kLmdjKCk7KXc9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSw3MCkpLEd0KFEodyxNZCkpPT09R3QoKEExKCksWXkpKSYmKEp0KHcsTTYsbiksRWwoayksdWUoby5iLHcpKTt0Y2UocyxoLGQpfX1mdW5jdGlvbiBabW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYobi5jLmkhPWUuaSlmb3Iocz1uZXcgSDAodCksXzAocywoR24oKSxacykpLEp0KHMsKHNlKCksX2kpLG4pLEp0KHMsKFRlKCksb3MpLChvYSgpLFZjKSksci5jW3IuYy5sZW5ndGhdPXMsaD1uZXcgTWMsVW8oaCxzKSxGcyhoLChiZSgpLEJuKSksZD1uZXcgTWMsVW8oZCxzKSxGcyhkLEhuKSxzYShuLGgpLG89bmV3IHp2LExvKG8sbiksSnQobyxfbyxudWxsKSxEYShvLGQpLHNhKG8sZSksdGNlKHMsaCxkKSxrPW5ldyBoYShuLmIsMCk7ay5iPGsuZC5nYygpOyl3PShRbihrLmI8ay5kLmdjKCkpLHUoay5kLlhiKGsuYz1rLmIrKyksNzApKSxDPXUoUSh3LE1kKSwyNzIpLEM9PShBMSgpLFl5KSYmKFZzKHcsTTYpfHxKdCh3LE02LG4pLEVsKGspLHVlKG8uYix3KSl9ZnVuY3Rpb24gSm1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoRj1uZXcgbGUsZ3Q9RSQociksdHQ9ZSp0LmEsTT0wLFY9MCxvPW5ldyBxcyxoPW5ldyBxcyxkPW5ldyBsZSxMdD0wLF90PTAsSD0wLFk9MCxrPTAsQz0wO2d0LmEuZ2MoKSE9MDspdz1ybG4oZ3QscyxoKSx3JiYoZ3QuYS5CYyh3KSE9bnVsbCxkLmNbZC5jLmxlbmd0aF09dyxvLmEuemModyxvKSxWPXQuZlt3LnBdLEx0Kz10LmVbdy5wXS1WKnQuYixNPXQuY1t3LnBdLF90Kz1NKnQuYixDKz1WKnQuYixZKz10LmVbdy5wXSksKCF3fHxndC5hLmdjKCk9PTB8fEx0Pj10dCYmdC5lW3cucF0+Vip0LmJ8fF90Pj1uKnR0KSYmKEYuY1tGLmMubGVuZ3RoXT1kLGQ9bmV3IGxlLFVhKGgsbyksby5hLiRiKCksay09QyxIPWIuTWF0aC5tYXgoSCxrKnQuYitZKSxrKz1fdCxMdD1fdCxfdD0wLEM9MCxZPTApO3JldHVybiBuZXcgbGEoSCxGKX1mdW5jdGlvbiB0eW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKG49KGs9bmV3IGIxKHQuYy5iKS5hLnZjKCkuS2MoKSxuZXcgdjEoaykpO24uYS5PYigpOyllPShkPXUobi5hLlBiKCksNDIpLHUoZC5kZCgpLDE0OSkpLHM9ZS5hLHM9PW51bGwmJihzPSIiKSxyPV9RZSh0LmMscyksIXImJnMubGVuZ3RoPT0wJiYocj1TdW4odCkpLHImJiFyeShyLmMsZSwhMSkmJm5pKHIuYyxlKTtmb3IoaD1laSh0LmEsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDQ3OCksQz1EcnQodC5jLG8uYSksSD1EcnQodC5jLG8uYiksQyYmSCYmbmkoQy5jLG5ldyBsYShILG8uYykpO2ZvcihfaCh0LmEpLEY9ZWkodC5iLDApO0YuYiE9Ri5kLmM7KU09dSh0aShGKSw0NzgpLGU9Q1FlKHQuYyxNLmEpLHc9RHJ0KHQuYyxNLmIpLGUmJncmJnBZZShlLHcsTS5jKTtfaCh0LmIpfWZ1bmN0aW9uIGV5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSDtvPW5ldyBIayh0KSxoPW5ldyBqc2Uscz0oY0koaC5nKSxjSShoLmopLFl1KGguYiksY0koaC5kKSxjSShoLmkpLFl1KGguayksWXUoaC5jKSxZdShoLmUpLEg9a29lKGgsbyxudWxsKSxoY2UoaCxvKSxIKSxlJiYoaz1uZXcgSGsoZSksZD1oeW4oayksTjR0KHMsY3Qob3Qod1N0LDEpLEllLDUyNywwLFtkXSkpKSxGPSExLE09ITEsbiYmKGs9bmV3IEhrKG4pLHhIIGluIGsuYSYmKEY9RDAoayx4SCkuZ2UoKS5hKSxOZGUgaW4gay5hJiYoTT1EMChrLE5kZSkuZ2UoKS5hKSksQz1ySHQoRGVlKG5ldyBZayxGKSxNKSxLMG4obmV3IGdaLHMsQykseEggaW4gby5hJiZXZihvLHhILG51bGwpLChGfHxNKSYmKHc9bmV3IG14LHBsZShDLHcsRixNKSxXZihvLHhILHcpKSxyPW5ldyBsenQoaCkscWNuKG5ldyByMnQocykscil9ZnVuY3Rpb24gbnluKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKGg9bmV3IEdzZSxrPWN0KG90KFRyLDEpLFhyLDI1LDE1LFswXSkscz0tMSxvPTAscj0wLHc9MDt3PHQuYi5jLmxlbmd0aDsrK3cpaWYoQz11KEZlKHQuYix3KSw0MzQpLEMuYj4wKXtpZihzPDAmJkMuYSYmKHM9dyxvPWtbMF0scj0wKSxzPj0wKXtpZihkPUMuYix3PT1zJiYoZC09cisrLGQ9PTApKXJldHVybiAwO2lmKCFraGUoZSxrLEMsZCxoKSl7dz1zLTEsa1swXT1vO2NvbnRpbnVlfX1lbHNlIGlmKHM9LTEsIWtoZShlLGssQywwLGgpKXJldHVybiAwfWVsc2V7aWYocz0tMSxiYShDLmMsMCk9PTMyKXtpZihNPWtbMF0sSHRlKGUsayksa1swXT5NKWNvbnRpbnVlfWVsc2UgaWYoRm5uKGUsQy5jLGtbMF0pKXtrWzBdKz1DLmMubGVuZ3RoO2NvbnRpbnVlfXJldHVybiAwfXJldHVybiBGNG4oaCxuKT9rWzBdOjB9ZnVuY3Rpb24ga18odCl7dmFyIGUsbixyLHMsbyxoLGQsdztpZighdC5mKXtpZih3PW5ldyBDMCxkPW5ldyBDMCxlPWFBLGg9ZS5hLnpjKHQsZSksaD09bnVsbCl7Zm9yKG89bmV3IGVyKFNvKHQpKTtvLmUhPW8uaS5nYygpOylzPXUoZHIobyksMjYpLHJzKHcsa18ocykpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3Iocj0oIXQucyYmKHQucz1uZXcgaGUoQXUsdCwyMSwxNykpLG5ldyBlcih0LnMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMTcwKSxFdChuLDk5KSYmTXIoZCx1KG4sMTgpKTtleShkKSx0LnI9bmV3IFBLdCh0LCh1KFN0KFd0KChqcCgpLExuKS5vKSw2KSwxOCksZC5pKSxkLmcpLHJzKHcsdC5yKSxleSh3KSx0LmY9bmV3IHEzKCh1KFN0KFd0KExuLm8pLDUpLDE4KSx3LmkpLHcuZykscmwodCkuYiY9LTN9cmV0dXJuIHQuZn1mdW5jdGlvbiByeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoaD10Lm8scj1QdChUcixYciwyNSxoLDE1LDEpLHM9UHQoVHIsWHIsMjUsaCwxNSwxKSxuPXQucCxlPVB0KFRyLFhyLDI1LG4sMTUsMSksbz1QdChUcixYciwyNSxuLDE1LDEpLGs9MDtrPGg7aysrKXtmb3IoTT0wO008biYmIWw0KHQsayxNKTspKytNO3Jba109TX1mb3IoQz0wO0M8aDtDKyspe2ZvcihNPW4tMTtNPj0wJiYhbDQodCxDLE0pOyktLU07c1tDXT1NfWZvcihIPTA7SDxuO0grKyl7Zm9yKGQ9MDtkPGgmJiFsNCh0LGQsSCk7KSsrZDtlW0hdPWR9Zm9yKFY9MDtWPG47VisrKXtmb3IoZD1oLTE7ZD49MCYmIWw0KHQsZCxWKTspLS1kO29bVl09ZH1mb3Iodz0wO3c8aDt3KyspZm9yKEY9MDtGPG47RisrKXc8b1tGXSYmdz5lW0ZdJiZGPHNbd10mJkY+clt3XSYmYnEodCx3LEYsITEsITApfWZ1bmN0aW9uIGF4dCh0KXt2YXIgZSxuLHIscyxvLGgsZCx3O249amUoUmUoUSh0LChaZigpLFFwZSkpKSksbz10LmEuYy5kLGQ9dC5hLmQuZCxuPyhoPXVkKG5hKG5ldyAkZShkLmEsZC5iKSxvKSwuNSksdz11ZChuYyh0LmUpLC41KSxlPW5hKExpKG5ldyAkZShvLmEsby5iKSxoKSx3KSxGMnQodC5kLGUpKToocz1YdCh5ZShRKHQuYSxzYmUpKSkscj10LmQsby5hPj1kLmE/by5iPj1kLmI/KHIuYT1kLmErKG8uYS1kLmEpLzIrcyxyLmI9ZC5iKyhvLmItZC5iKS8yLXMtdC5lLmIpOihyLmE9ZC5hKyhvLmEtZC5hKS8yK3Msci5iPW8uYisoZC5iLW8uYikvMitzKTpvLmI+PWQuYj8oci5hPW8uYSsoZC5hLW8uYSkvMitzLHIuYj1kLmIrKG8uYi1kLmIpLzIrcyk6KHIuYT1vLmErKGQuYS1vLmEpLzIrcyxyLmI9by5iKyhkLmItby5iKS8yLXMtdC5lLmIpKX1mdW5jdGlvbiAkYyh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYobz10Lmxlbmd0aCxvPT0wKXJldHVybiIiO2Zvcih3PVB0KG1oLHZkLDI1LG8sMTUsMSksa210KDAsbyx0Lmxlbmd0aCksa210KDAsbyx3Lmxlbmd0aCksell0KHQsMCxvLHcsMCksbj1udWxsLGQ9ZSxzPTAsaD0wO3M8bztzKyspcj13W3NdLHFoZSgpLHI8PTMyJiZ2dFtyXSYyP2Q/KCFuJiYobj1uZXcgVGgodCkpLE1ubihuLHMtaCsrKSk6KGQ9ZSxyIT0zMiYmKCFuJiYobj1uZXcgVGgodCkpLFFlbihuLHMtaCxzLWgrMSxTdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSkpKTpkPSExO3JldHVybiBkP24/KG89bi5hLmxlbmd0aCxvPjA/RGwobi5hLDAsby0xKToiIik6dC5zdWJzdHIoMCxvLTEpOm4/bi5hOnR9ZnVuY3Rpb24ga2xlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxUMiksIkVMSyBEaXNDbyIpLCJMYXlvdXRlciBmb3IgYXJyYW5naW5nIHVuY29ubmVjdGVkIHN1YmdyYXBocy4gVGhlIHN1YmdyYXBocyB0aGVtc2VsdmVzIGFyZSwgYnkgZGVmYXVsdCwgbm90IGxhaWQgb3V0LiIpLG5ldyBkZykpKSx4ZSh0LFQyLEFvdCxEZShjN3QpKSx4ZSh0LFQyLExvdCxEZSgkdXQpKSx4ZSh0LFQyLGI2LERlKEZwZSkpLHhlKHQsVDIsd3csRGUobzd0KSkseGUodCxUMixWeHQsRGUoJHBlKSkseGUodCxUMixVeHQsRGUoanBlKSkseGUodCxUMixHeHQsRGUoenBlKSkseGUodCxUMixXeHQsRGUoUnBlKSkseGUodCxUMix0NnQsRGUoQnBlKSkseGUodCxUMixlNnQsRGUoanV0KSkseGUodCxUMixuNnQsRGUoYTd0KSkseGUodCxUMixyNnQsRGUoZUcpKX1mdW5jdGlvbiBveHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGO2lmKG89bmV3IEgwKHQpLF8wKG8sKEduKCksSGMpKSxKdChvLChUZSgpLG9zKSwob2EoKSxWYykpLHM9MCxlKXtmb3IoaD1uZXcgTWMsSnQoaCwoc2UoKSxfaSksZSksSnQobyxfaSxlLmkpLEZzKGgsKGJlKCksQm4pKSxVbyhoLG8pLEY9Z2QoZS5lKSxrPUYsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sc2EodyxoKTtKdChlLFp1LG8pLCsrc31pZihuKXtmb3IoZD1uZXcgTWMsSnQobywoc2UoKSxfaSksbi5pKSxKdChkLF9pLG4pLEZzKGQsKGJlKCksSG4pKSxVbyhkLG8pLEY9Z2Qobi5nKSxrPUYsQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sRGEodyxkKTtKdChuLFp1LG8pLCsrc31yZXR1cm4gSnQobywoc2UoKSxxRyksZGUocykpLHIuY1tyLmMubGVuZ3RoXT1vLG99ZnVuY3Rpb24geXEoKXt5cT1aLHpBdD1jdChvdChtaCwxKSx2ZCwyNSwxNSxbNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjUsNjYsNjcsNjgsNjksNzBdKSxQNGU9bmV3IFJlZ0V4cChgWyAJClxyXGZdK2ApO3RyeXtyQT1jdChvdChreG4sMSksSWUsMjAxNSwwLFtuZXcgb00oKG8ydCgpLE16KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIix6TSgoYlIoKSxiUigpLHNTKSkpKSksbmV3IG9NKE16KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1MiLHpNKHNTKSkpLG5ldyBvTShNeigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzIix6TShzUykpKSxuZXcgb00oTXooInl5eXktTU0tZGQnVCdISDptbSIsek0oc1MpKSksbmV3IG9NKE16KCJ5eXl5LU1NLWRkIix6TShzUykpKV0pfWNhdGNoKHQpe2lmKHQ9V2kodCksIUV0KHQsNzgpKXRocm93IHJ0KHQpfX1mdW5jdGlvbiBpeW4odCl7dmFyIGUsbixyLHM7aWYocj1EYXQoKCF0LmMmJih0LmM9akkodC5mKSksdC5jKSwwKSx0LmU9PTB8fHQuYT09MCYmdC5mIT0tMSYmdC5lPDApcmV0dXJuIHI7aWYoZT1VbXQodCk8MD8xOjAsbj10LmUscz0oci5sZW5ndGgrMStiLk1hdGguYWJzKHBzKHQuZSkpLG5ldyBMbSksZT09MSYmKHMuYSs9Ii0iKSx0LmU+MClpZihuLT1yLmxlbmd0aC1lLG4+PTApe2ZvcihzLmErPSIwLiI7bj5EMi5sZW5ndGg7bi09RDIubGVuZ3RoKXRZdChzLEQyKTtGV3QocyxEMixwcyhuKSksVnIocyxyLnN1YnN0cihlKSl9ZWxzZSBuPWUtbixWcihzLERsKHIsZSxwcyhuKSkpLHMuYSs9Ii4iLFZyKHMsT00ocixwcyhuKSkpO2Vsc2V7Zm9yKFZyKHMsci5zdWJzdHIoZSkpO248LUQyLmxlbmd0aDtuKz1EMi5sZW5ndGgpdFl0KHMsRDIpO0ZXdChzLEQyLHBzKC1uKSl9cmV0dXJuIHMuYX1mdW5jdGlvbiBjeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGO3JldHVybiB3PW5hKG5ldyAkZShuLmEsbi5iKSx0KSxrPXcuYSplLmItdy5iKmUuYSxDPWUuYSpyLmItZS5iKnIuYSxNPSh3LmEqci5iLXcuYipyLmEpL0MsRj1rL0MsQz09MD9rPT0wPyhzPUxpKG5ldyAkZShuLmEsbi5iKSx1ZChuZXcgJGUoci5hLHIuYiksLjUpKSxvPUhwKHQscyksaD1IcChMaShuZXcgJGUodC5hLHQuYiksZSkscyksZD1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpKi41LG88aCYmbzw9ZD9uZXcgJGUodC5hLHQuYik6aDw9ZD9MaShuZXcgJGUodC5hLHQuYiksZSk6bnVsbCk6bnVsbDpNPj0wJiZNPD0xJiZGPj0wJiZGPD0xP0xpKG5ldyAkZSh0LmEsdC5iKSx1ZChuZXcgJGUoZS5hLGUuYiksTSkpOm51bGx9ZnVuY3Rpb24gc3luKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9dShRKHQsKFRlKCksSGx0KSksMjEpLG4uYT5lLmEmJihyLkhjKChjeSgpLHFPKSk/dC5jLmErPShuLmEtZS5hKS8yOnIuSGMoSE8pJiYodC5jLmErPW4uYS1lLmEpKSxuLmI+ZS5iJiYoci5IYygoY3koKSxWTykpP3QuYy5iKz0obi5iLWUuYikvMjpyLkhjKEdPKSYmKHQuYy5iKz1uLmItZS5iKSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKSYmKG4uYT5lLmF8fG4uYj5lLmIpKWZvcihkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLGguaz09KEduKCkseHMpJiYocz11KFEoaCxvYyksNjEpLHM9PShiZSgpLEhuKT9oLm4uYSs9bi5hLWUuYTpzPT1tciYmKGgubi5iKz1uLmItZS5iKSk7bz10LmQsdC5mLmE9bi5hLW8uYi1vLmMsdC5mLmI9bi5iLW8uZC1vLmF9ZnVuY3Rpb24gYXluKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHI9dShRKHQsKFRlKCksSGx0KSksMjEpLG4uYT5lLmEmJihyLkhjKChjeSgpLHFPKSk/dC5jLmErPShuLmEtZS5hKS8yOnIuSGMoSE8pJiYodC5jLmErPW4uYS1lLmEpKSxuLmI+ZS5iJiYoci5IYygoY3koKSxWTykpP3QuYy5iKz0obi5iLWUuYikvMjpyLkhjKEdPKSYmKHQuYy5iKz1uLmItZS5iKSksdShRKHQsKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKSYmKG4uYT5lLmF8fG4uYj5lLmIpKWZvcihoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uaz09KEduKCkseHMpJiYocz11KFEobyxvYyksNjEpLHM9PShiZSgpLEhuKT9vLm4uYSs9bi5hLWUuYTpzPT1tciYmKG8ubi5iKz1uLmItZS5iKSk7ZD10LmQsdC5mLmE9bi5hLWQuYi1kLmMsdC5mLmI9bi5iLWQuZC1kLmF9ZnVuY3Rpb24gb3luKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoZT16b2UodCksQz0oZD1uZXcgVG0oZSkuYS52YygpLktjKCksbmV3IHJNKGQpKTtDLmEuT2IoKTspe2ZvcihrPShzPXUoQy5hLlBiKCksNDIpLHUocy5jZCgpLDEwKSksTT0wLEY9MCxNPWsuZC5kLEY9ay5vLmIray5kLmEsdC5kW2sucF09MCxuPWs7KG89dC5hW24ucF0pIT1rOylyPW1obihuLG8pLHc9MCx0LmM9PShkZCgpLEtnKT93PXIuZC5uLmIrci5kLmEuYi1yLmMubi5iLXIuYy5hLmI6dz1yLmMubi5iK3IuYy5hLmItci5kLm4uYi1yLmQuYS5iLGg9WHQodC5kW24ucF0pK3csdC5kW28ucF09aCxNPWIuTWF0aC5tYXgoTSxvLmQuZC1oKSxGPWIuTWF0aC5tYXgoRixoK28uby5iK28uZC5hKSxuPW87bj1rO2RvIHQuZFtuLnBdPVh0KHQuZFtuLnBdKStNLG49dC5hW24ucF07d2hpbGUobiE9ayk7dC5iW2sucF09TStGfX1mdW5jdGlvbiBiYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGO2Zvcih0LmI9ITEsTT1zcyx3PVRzLEY9c3Msaz1UcyxyPXQuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPXUoci5QYigpLDI2Nikscz1uLmEsTT1iLk1hdGgubWluKE0scy5jKSx3PWIuTWF0aC5tYXgodyxzLmMrcy5iKSxGPWIuTWF0aC5taW4oRixzLmQpLGs9Yi5NYXRoLm1heChrLHMuZCtzLmEpLGg9bmV3IFMobi5jKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwzOTUpLGU9by5hLGUuYT8oQz1zLmQrby5iLmIsZD1DK28uYyxGPWIuTWF0aC5taW4oRixDKSxrPWIuTWF0aC5tYXgoayxkKSk6KEM9cy5jK28uYi5hLGQ9QytvLmMsTT1iLk1hdGgubWluKE0sQyksdz1iLk1hdGgubWF4KHcsZCkpO3QuYT1uZXcgJGUody1NLGstRiksdC5jPW5ldyAkZShNK3QuZC5hLEYrdC5kLmIpfWZ1bmN0aW9uIGN5bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNO2ZvcihNPW5ldyBsZSxDPW5ldyBWd3QoMCxuKSxvPTAsWSQoQyxuZXcgeGl0KDAsMCxDLG4pKSxzPTAsaz1uZXcgZXIodCk7ay5lIT1rLmkuZ2MoKTspdz11KGRyKGspLDMzKSxyPXUoRmUoQy5hLEMuYS5jLmxlbmd0aC0xKSwxODcpLGQ9cyt3LmcrKHUoRmUoQy5hLDApLDE4NykuYi5jLmxlbmd0aD09MD8wOm4pLGQ+ZSYmKHM9MCxvKz1DLmIrbixNLmNbTS5jLmxlbmd0aF09QyxDPW5ldyBWd3QobyxuKSxyPW5ldyB4aXQoMCxDLmYsQyxuKSxZJChDLHIpLHM9MCksci5iLmMubGVuZ3RoPT0wfHx3LmY+PXIubyYmdy5mPD1yLmZ8fHIuYSouNTw9dy5mJiZyLmEqMS41Pj13LmY/aTN0KHIsdyk6KGg9bmV3IHhpdChyLnMrci5yK24sQy5mLEMsbiksWSQoQyxoKSxpM3QoaCx3KSkscz13Lmkrdy5nO3JldHVybiBNLmNbTS5jLmxlbmd0aF09QyxNfWZ1bmN0aW9uIGs0KHQpe3ZhciBlLG4scixzLG8saCxkLHc7aWYoIXQuYSl7aWYodC5vPW51bGwsdz1uZXcgTXp0KHQpLGU9bmV3IG1wLG49YUEsZD1uLmEuemModCxuKSxkPT1udWxsKXtmb3IoaD1uZXcgZXIoU28odCkpO2guZSE9aC5pLmdjKCk7KW89dShkcihoKSwyNikscnModyxrNChvKSk7bi5hLkJjKHQpIT1udWxsLG4uYS5nYygpPT0wfWZvcihzPSghdC5zJiYodC5zPW5ldyBoZShBdSx0LDIxLDE3KSksbmV3IGVyKHQucykpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwxNzApLEV0KHIsMzIyKSYmTXIoZSx1KHIsMzQpKTtleShlKSx0Lms9bmV3IE5LdCh0LCh1KFN0KFd0KChqcCgpLExuKS5vKSw3KSwxOCksZS5pKSxlLmcpLHJzKHcsdC5rKSxleSh3KSx0LmE9bmV3IHEzKCh1KFN0KFd0KExuLm8pLDQpLDE4KSx3LmkpLHcuZykscmwodCkuYiY9LTJ9cmV0dXJuIHQuYX1mdW5jdGlvbiB1eW4odCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGO3JldHVybiBNPSExLHc9TWNlKG4ucSxlLmYrZS5iLW4ucS5mKSxGPXMtKG4ucS5lK3ctaCksRjxyLmd8fChrPW89PXQuYy5sZW5ndGgtMSYmRj49KEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSkuZSxDPShkPUVfKHIsRiwhMSksZC5hKSxDPmUuYiYmIWspPyExOigoa3x8Qzw9ZS5iKSYmKGsmJkM+ZS5iPyhuLmQ9QyxkSShuLE5hZShuLEMpKSk6KEpzZShuLnEsdyksbi5jPSEwKSxkSShyLHMtKG4ucytuLnIpKSxZSShyLG4ucS5lK24ucS5kLGUuZiksWSQoZSxyKSx0LmMubGVuZ3RoPm8mJih0RCgoQW4obyx0LmMubGVuZ3RoKSx1KHQuY1tvXSwyMDApKSxyKSwoQW4obyx0LmMubGVuZ3RoKSx1KHQuY1tvXSwyMDApKS5hLmMubGVuZ3RoPT0wJiZBZyh0LG8pKSxNPSEwKSxNKX1mdW5jdGlvbiB1eHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEM7aWYoQz1hdSh0LmUuVGcoKSxlKSxzPTAsbz11KHQuZywxMTkpLHc9bnVsbCx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoeWkoaCxuKSl7dz1oO2JyZWFrfSsrc319ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihoPW9bZF0sQy5ybChoLmFrKCkpKXtpZih5aShuLGguZGQoKSkpe3c9aDticmVha30rK3N9fWVsc2UgZm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoaC5kZCgpPT1udWxsKXt3PWg7YnJlYWt9KytzfXJldHVybiB3JiYobWwodC5lKSYmKGs9ZS4kaigpP25ldyBBcnQodC5lLDQsZSxuLG51bGwscywhMCk6enAodCxlLktqKCk/MjoxLGUsbixlLnpqKCksLTEsITApLHI/ci5FaShrKTpyPWspLHI9d0QodCx3LHIpKSxyfWZ1bmN0aW9uIHZhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFk7c3dpdGNoKFY9MCxZPTAsdz1zLmMsZD1zLmIsQz1uLmYsSD1uLmcsZS5nKXtjYXNlIDA6Vj1yLmkrci5nK2gsdC5jP1k9UmRuKFYsbyxyLGgpOlk9ci5qLEY9Yi5NYXRoLm1heCh3LFYrSCksaz1iLk1hdGgubWF4KGQsWStDKTticmVhaztjYXNlIDE6WT1yLmorci5mK2gsdC5jP1Y9QmRuKFksbyxyLGgpOlY9ci5pLEY9Yi5NYXRoLm1heCh3LFYrSCksaz1iLk1hdGgubWF4KGQsWStDKTticmVhaztjYXNlIDI6Vj13K2gsWT0wLEY9dytoK0gsaz1iLk1hdGgubWF4KGQsQyk7YnJlYWs7Y2FzZSAzOlY9MCxZPWQraCxGPWIuTWF0aC5tYXgodyxIKSxrPWQraCtDO2JyZWFrO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKCJJbGxlZ2FsUGxhY2VtZW50T3B0aW9uLiIpKX1yZXR1cm4gTT1uZXcgdTN0KHQuYSxGLGssZSxWLFkpLE19ZnVuY3Rpb24gbHluKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtpZihkPXQuZCxNPXUoUSh0LChzZSgpLE42KSksMTUpLGU9dShRKHQsTDYpLDE1KSwhKCFNJiYhZSkpe2lmKG89WHQoeWUoaXkodCwoVGUoKSxKbHQpKSkpLGg9WHQoeWUoaXkodCxkQ3QpKSksRj0wLE0pe2ZvcihrPTAscz1NLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxrPWIuTWF0aC5tYXgoayxyLm8uYiksRis9ci5vLmE7Ris9byooTS5nYygpLTEpLGQuZCs9aytofWlmKG49MCxlKXtmb3Ioaz0wLHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCksaz1iLk1hdGgubWF4KGssci5vLmIpLG4rPXIuby5hO24rPW8qKGUuZ2MoKS0xKSxkLmErPWsraH13PWIuTWF0aC5tYXgoRixuKSx3PnQuby5hJiYoQz0ody10Lm8uYSkvMixkLmI9Yi5NYXRoLm1heChkLmIsQyksZC5jPWIuTWF0aC5tYXgoZC5jLEMpKX19ZnVuY3Rpb24gaHluKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKG89bmV3IGVadCxZWWUobywoUXgoKSxBM2UpKSxyPShzPXVpdCh0LFB0KEFlLHRlLDIsMCw2LDEpKSxuZXcgZngobmV3IHdsKG5ldyBmZXQodCxzKS5iKSkpO3IuYjxyLmQuZ2MoKTspbj0oUW4oci5iPHIuZC5nYygpKSxCcihyLmQuWGIoci5jPXIuYisrKSkpLGg9Ynh0KFRiLG4pLGgmJihlPUQwKHQsbiksZS5qZSgpP2Q9ZS5qZSgpLmE6ZS5nZSgpP2Q9IiIrZS5nZSgpLmE6ZS5oZSgpP2Q9IiIrZS5oZSgpLmE6ZD1lLkliKCksdz1neHQoaCxkKSx3IT1udWxsJiYoKE51KGguaiwoWGYoKSxKcykpfHxOdShoLmoscW4pKSYmRkkoWnJ0KG8sbnMpLGgsdyksTnUoaC5qLElkKSYmRkkoWnJ0KG8sV3MpLGgsdyksTnUoaC5qLCQyKSYmRkkoWnJ0KG8sZmwpLGgsdyksTnUoaC5qLFhnKSYmRkkoWnJ0KG8scW8pLGgsdykpKTtyZXR1cm4gb31mdW5jdGlvbiB4cSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7aWYodz1hdSh0LmUuVGcoKSxlKSxvPXUodC5nLDExOSksVjAodC5lLGUpKXtmb3Iocz0wLGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLHcucmwoaC5haygpKSl7aWYocz09bilyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/aDooaz1oLmRkKCksayE9bnVsbCYmciYmRXQoZSw5OSkmJnUoZSwxOCkuQmImWWEmJihrPWRfKHQsZSxkLHMsaykpLGspOysrc310aHJvdyBydChuZXcgbW8oWF8rbitTMitzKSl9ZWxzZXtmb3Iocz0wLGQ9MDtkPHQuaTsrK2Qpe2lmKGg9b1tkXSx3LnJsKGguYWsoKSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2g6KGs9aC5kZCgpLGshPW51bGwmJnImJkV0KGUsOTkpJiZ1KGUsMTgpLkJiJllhJiYoaz1kXyh0LGUsZCxzLGspKSxrKTsrK3N9cmV0dXJuIGUuemooKX19ZnVuY3Rpb24ga0QodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7aWYocz11KHQuZywxMTkpLFYwKHQuZSxlKSlyZXR1cm4gdG8oKSx1KGUsNjYpLk9qKCk/bmV3IElqKGUsdCk6bmV3IERNKGUsdCk7Zm9yKGs9YXUodC5lLlRnKCksZSkscj0wLGQ9MDtkPHQuaTsrK2Qpe2lmKG89c1tkXSxoPW8uYWsoKSxrLnJsKGgpKXtpZih0bygpLHUoZSw2NikuT2ooKSlyZXR1cm4gbztpZihoPT0oYTYoKSxXNil8fGg9PVU2KXtmb3Iodz1uZXcgSWwoJG8oby5kZCgpKSk7KytkPHQuaTspbz1zW2RdLGg9by5haygpLChoPT1XNnx8aD09VTYpJiZWcih3LCRvKG8uZGQoKSkpO3JldHVybiBvdnQodShlLllqKCksMTQ4KSx3LmEpfWVsc2UgcmV0dXJuIEM9by5kZCgpLEMhPW51bGwmJm4mJkV0KGUsOTkpJiZ1KGUsMTgpLkJiJllhJiYoQz1kXyh0LGUsZCxyLEMpKSxDfSsrcn1yZXR1cm4gZS56aigpfWZ1bmN0aW9uIEVfKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Iobz0wLGg9dC50LHM9MCxyPTAsdz0wLEY9MCxNPTAsbiYmKHQubi5jPVB0KFhuLEllLDEsMCw1LDEpLHVlKHQubixuZXcgZiQodC5zLHQudCx0LmkpKSksZD0wLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSwzMyksbytrLmcrKGQ+MD90Lmk6MCk+ZSYmdz4wJiYobz0wLGgrPXcrdC5pLHM9Yi5NYXRoLm1heChzLEYpLHIrPXcrdC5pLHc9MCxGPTAsbiYmKCsrTSx1ZSh0Lm4sbmV3IGYkKHQucyxoLHQuaSkpKSxkPTApLEYrPWsuZysoZD4wP3QuaTowKSx3PWIuTWF0aC5tYXgodyxrLmYpLG4mJiQzdCh1KEZlKHQubixNKSwyMTEpLGspLG8rPWsuZysoZD4wP3QuaTowKSwrK2Q7cmV0dXJuIHM9Yi5NYXRoLm1heChzLEYpLHIrPXcsbiYmKHQucj1zLHQuZD1yLEczdCh0LmopKSxuZXcgaWgodC5zLHQudCxzLHIpfWZ1bmN0aW9uIEljKHQsZSxuLHIscyl7cWQoKTt2YXIgbyxoLGQsdyxrLEMsTSxGLEg7aWYodXd0KHQsInNyYyIpLHV3dChuLCJkZXN0IiksRj1zbCh0KSx3PXNsKG4pLER2dCgoRi5pJjQpIT0wLCJzcmNUeXBlIGlzIG5vdCBhbiBhcnJheSIpLER2dCgody5pJjQpIT0wLCJkZXN0VHlwZSBpcyBub3QgYW4gYXJyYXkiKSxNPUYuYyxoPXcuYyxEdnQoTS5pJjE/TT09aDooaC5pJjEpPT0wLCJBcnJheSB0eXBlcyBkb24ndCBtYXRjaCIpLEg9dC5sZW5ndGgsaz1uLmxlbmd0aCxlPDB8fHI8MHx8czwwfHxlK3M+SHx8citzPmspdGhyb3cgcnQobmV3IFRwdCk7aWYoIShNLmkmMSkmJkYhPXcpaWYoQz1zMih0KSxvPXMyKG4pLEd0KHQpPT09R3QobikmJmU8cilmb3IoZSs9cyxkPXIrcztkLS0gPnI7KUppKG8sZCxDWy0tZV0pO2Vsc2UgZm9yKGQ9citzO3I8ZDspSmkobyxyKyssQ1tlKytdKTtlbHNlIHM+MCYmWTR0KHQsZSxuLHIscywhMCl9ZnVuY3Rpb24gd2F0KCl7d2F0PVosQ2dlPWN0KG90KFRyLDEpLFhyLDI1LDE1LFtfYSwxMTYyMjYxNDY3LEFfLDEyMjA3MDMxMjUsMzYyNzk3MDU2LDE5NzczMjY3NDMsQV8sMzg3NDIwNDg5LE5xLDIxNDM1ODg4MSw0Mjk5ODE2OTYsODE1NzMwNzIxLDE0NzU3ODkwNTYsMTcwODU5Mzc1LDI2ODQzNTQ1Niw0MTAzMzg2NzMsNjEyMjIwMDMyLDg5Mzg3MTczOSwxMjhlNywxODAxMDg4NTQxLDExMzM3OTkwNCwxNDgwMzU4ODksMTkxMTAyOTc2LDI0NDE0MDYyNSwzMDg5MTU3NzYsMzg3NDIwNDg5LDQ4MTg5MDMwNCw1OTQ4MjMzMjEsNzI5ZTYsODg3NTAzNjgxLEFfLDEyOTE0Njc5NjksMTU0NDgwNDQxNiwxODM4MjY1NjI1LDYwNDY2MTc2XSksX2dlPWN0KG90KFRyLDEpLFhyLDI1LDE1LFstMSwtMSwzMSwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSl9ZnVuY3Rpb24gZnluKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IFMoR3Yoci5hKSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLGllZShvKSYmKG49dShRKG8sKHNlKCksTHcpKSwzMDUpLCFuLmcmJm4uZCkpZm9yKGU9bix3PW4uZDt3OylmdWUody5pLHcuaywhMSwhMCksdkkoZS5hKSx2SSh3LmkpLHZJKHcuayksdkkody5iKSxzYSh3LmMsZS5jLmQpLHNhKGUuYyxudWxsKSxrbyhlLmEsbnVsbCksa28ody5pLG51bGwpLGtvKHcuayxudWxsKSxrbyh3LmIsbnVsbCksZD1uZXcgWnd0KGUuaSx3LmEsZS5lLHcuaix3LmYpLGQuaz1lLmssZC5uPWUubixkLmI9ZS5iLGQuYz13LmMsZC5nPWUuZyxkLmQ9dy5kLEp0KGUuaSxMdyxkKSxKdCh3LmEsTHcsZCksdz13LmQsZT1kfWZ1bmN0aW9uIHZ5KHQsZSl7dmFyIG4scixzLG8saDtpZihoPXUoZSwxMzYpLGI0KHQpLGI0KGgpLGguYiE9bnVsbCl7aWYodC5jPSEwLHQuYj09bnVsbCl7dC5iPVB0KFRyLFhyLDI1LGguYi5sZW5ndGgsMTUsMSksSWMoaC5iLDAsdC5iLDAsaC5iLmxlbmd0aCk7cmV0dXJufWZvcihvPVB0KFRyLFhyLDI1LHQuYi5sZW5ndGgraC5iLmxlbmd0aCwxNSwxKSxuPTAscj0wLHM9MDtuPHQuYi5sZW5ndGh8fHI8aC5iLmxlbmd0aDspbj49dC5iLmxlbmd0aD8ob1tzKytdPWguYltyKytdLG9bcysrXT1oLmJbcisrXSk6cj49aC5iLmxlbmd0aD8ob1tzKytdPXQuYltuKytdLG9bcysrXT10LmJbbisrXSk6aC5iW3JdPHQuYltuXXx8aC5iW3JdPT09dC5iW25dJiZoLmJbcisxXTx0LmJbbisxXT8ob1tzKytdPWguYltyKytdLG9bcysrXT1oLmJbcisrXSk6KG9bcysrXT10LmJbbisrXSxvW3MrK109dC5iW24rK10pO3QuYj1vfX1mdW5jdGlvbiBkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtyZXR1cm4gbj1qZShSZShRKHQsKHNlKCksUHkpKSkpLGQ9amUoUmUoUShlLFB5KSkpLHI9dShRKHQsbjEpLDExKSx3PXUoUShlLG4xKSwxMSkscz11KFEodCxSaCksMTEpLGs9dShRKGUsUmgpLDExKSxDPSEhciYmcj09dyxNPSEhcyYmcz09aywhbiYmIWQ/bmV3IHd2dCh1KEoobmV3IFModC5qKSksMTEpLnA9PXUoSihuZXcgUyhlLmopKSwxMSkucCxDLE0pOihvPSghamUoUmUoUSh0LFB5KSkpfHxqZShSZShRKHQsRU8pKSkpJiYoIWplKFJlKFEoZSxQeSkpKXx8amUoUmUoUShlLEVPKSkpKSxoPSghamUoUmUoUSh0LFB5KSkpfHwhamUoUmUoUSh0LEVPKSkpKSYmKCFqZShSZShRKGUsUHkpKSl8fCFqZShSZShRKGUsRU8pKSkpLG5ldyB3dnQoQyYmb3x8TSYmaCxDLE0pKX1mdW5jdGlvbiBneW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iocj0wLG49MCx3PW5ldyBRaSxlPTAsZD1uZXcgUyh0Lm4pO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDIxMSksaC5jLmMubGVuZ3RoPT0wP2hzKHcsaCx3LmMuYix3LmMpOihyPWIuTWF0aC5tYXgocixoLmQpLG4rPWguYSsoZT4wP3QuaTowKSksKytlO2ZvcihUbG4odC5uLHcpLHQuZD1uLHQucj1yLHQuZz0wLHQuZj0wLHQuZT0wLHQubz1zcyx0LnA9c3Msbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDMzKSx0LnA9Yi5NYXRoLm1pbih0LnAscy5nKSx0Lmc9Yi5NYXRoLm1heCh0Lmcscy5nKSx0LmY9Yi5NYXRoLm1heCh0LmYscy5mKSx0Lm89Yi5NYXRoLm1pbih0Lm8scy5mKSx0LmUrPXMuZit0Lmk7dC5hPXQuZS90LmIuYy5sZW5ndGgtdC5pKigodC5iLmMubGVuZ3RoLTEpL3QuYi5jLmxlbmd0aCksRzN0KHQuail9ZnVuY3Rpb24gRWxlKHQpe3ZhciBlLG4scixzO3JldHVybiB0LkRiJjY0P2ppdCh0KTooZT1uZXcgSWwobDh0KSxyPXQuayxyP1ZyKFZyKChlLmErPScgIicsZSksciksJyInKTooIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm4uaT4wJiYocz0oIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx1KFN0KHQubiwwKSwxMzcpKS5hLCFzfHxWcihWcigoZS5hKz0nICInLGUpLHMpLCciJykpKSxuPSghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLCEodC5iLmk8PTEmJighdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYy5pPD0xKSkpLG4/ZS5hKz0iIFsiOmUuYSs9IiAiLFZyKGUsbTJ0KG5ldyBhZXQsbmV3IGVyKHQuYikpKSxuJiYoZS5hKz0iXSIpLGUuYSs9UG90LG4mJihlLmErPSJbIiksVnIoZSxtMnQobmV3IGFldCxuZXcgZXIodC5jKSkpLG4mJihlLmErPSJdIiksZS5hKX1mdW5jdGlvbiBtYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZih0LmEpe2lmKGQ9dC5hLm5lKCksdz1udWxsLGQhPW51bGw/ZS5hKz0iIitkOihoPXQuYS5EaigpLGghPW51bGwmJihvPWNkKGgsRXUoOTEpKSxvIT0tMT8odz1oLnN1YnN0cihvKSxlLmErPSIiK0RsKGg9PW51bGw/VHU6KE9uKGgpLGgpLDAsbykpOmUuYSs9IiIraCkpLHQuZCYmdC5kLmkhPTApe2ZvcihzPSEwLGUuYSs9IjwiLHI9bmV3IGVyKHQuZCk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxzP3M9ITE6ZS5hKz1LYSxtYXQobixlKTtlLmErPSI+In13IT1udWxsJiYoZS5hKz0iIit3KX1lbHNlIHQuZT8oZD10LmUuemIsZCE9bnVsbCYmKGUuYSs9IiIrZCkpOihlLmErPSI/Iix0LmI/KGUuYSs9IiBzdXBlciAiLG1hdCh0LmIsZSkpOnQuZiYmKGUuYSs9IiBleHRlbmRzICIsbWF0KHQuZixlKSkpfWZ1bmN0aW9uIHB5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm47Zm9yKFl0PXQuYyxjZT1lLmMsbj1SbyhZdC5hLHQsMCkscj1SbyhjZS5hLGUsMCksX3Q9dShpdyh0LChzbygpLEp1KSkuS2MoKS5QYigpLDExKSxRZT11KGl3KHQsZXUpLktjKCkuUGIoKSwxMSksQnQ9dShpdyhlLEp1KS5LYygpLlBiKCksMTEpLFJuPXUoaXcoZSxldSkuS2MoKS5QYigpLDExKSxndD1nZChfdC5lKSxTZT1nZChRZS5nKSxMdD1nZChCdC5lKSxXZT1nZChSbi5nKSxveSh0LHIsY2UpLGg9THQsQz0wLFY9aC5sZW5ndGg7QzxWOysrQylzPWhbQ10sc2EocyxfdCk7Zm9yKGQ9V2UsTT0wLFk9ZC5sZW5ndGg7TTxZOysrTSlzPWRbTV0sRGEocyxRZSk7Zm9yKG95KGUsbixZdCksdz1ndCxGPTAsdHQ9dy5sZW5ndGg7Rjx0dDsrK0Ypcz13W0ZdLHNhKHMsQnQpO2ZvcihvPVNlLGs9MCxIPW8ubGVuZ3RoO2s8SDsrK2spcz1vW2tdLERhKHMsUm4pfWZ1bmN0aW9uIFRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQztpZihvPUV6KHIpLGQ9amUoUmUoUShyLChUZSgpLG5DdCkpKSksKGR8fGplKFJlKFEodCxKRykpKSkmJiFIMyh1KFEodCxvcyksOTgpKSlzPUp4KG8pLHc9UTV0KHQsbixuPT0oc28oKSxldSk/czpISShzKSk7ZWxzZSBzd2l0Y2godz1uZXcgTWMsVW8odyx0KSxlPyhDPXcubixDLmE9ZS5hLXQubi5hLEMuYj1lLmItdC5uLmIsUGFlKEMsMCwwLHQuby5hLHQuby5iKSxGcyh3LEt1ZSh3LG8pKSk6KHM9SngobyksRnModyxuPT0oc28oKSxldSk/czpISShzKSkpLGg9dShRKHIsKHNlKCksR2MpKSwyMSksaz13Lmosby5nKXtjYXNlIDI6Y2FzZSAxOihrPT0oYmUoKSxObil8fGs9PW1yKSYmaC5GYygob28oKSxWNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGs9PShiZSgpLEhuKXx8az09Qm4pJiZoLkZjKChvbygpLFY0KSl9cmV0dXJuIHd9ZnVuY3Rpb24gbHh0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO3JldHVybiBiLk1hdGguYWJzKGUucy1lLmMpPHlkfHxiLk1hdGguYWJzKG4ucy1uLmMpPHlkPzA6KHI9UGNlKHQsZS5qLG4uZSkscz1QY2UodCxuLmosZS5lKSxvPXI9PS0xfHxzPT0tMSxoPTAsbz8ocj09LTEmJihuZXcgdDIoKFZmKCkscGIpLG4sZSwxKSwrK2gpLHM9PS0xJiYobmV3IHQyKChWZigpLHBiKSxlLG4sMSksKytoKSk6KGQ9YTQoZS5qLG4ucyxuLmMpLGQrPWE0KG4uZSxlLnMsZS5jKSx3PWE0KG4uaixlLnMsZS5jKSx3Kz1hNChlLmUsbi5zLG4uYyksaz1yKzE2KmQsQz1zKzE2KncsazxDP25ldyB0MigoVmYoKSxVeSksZSxuLEMtayk6az5DP25ldyB0MigoVmYoKSxVeSksbixlLGstQyk6az4wJiZDPjAmJihuZXcgdDIoKFZmKCksVXkpLGUsbiwwKSxuZXcgdDIoVXksbixlLDApKSksaCl9ZnVuY3Rpb24gQ2xlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihoPW5ldyBoMihuZXcgd2codC5mLmIpLmEpO2guYjspe2lmKG89WXYoaCkscz11KG8uY2QoKSw1OTQpLGU9PTEpe2lmKHMuZ2YoKSE9KGFvKCksWjApJiZzLmdmKCkhPVEwKWNvbnRpbnVlfWVsc2UgaWYocy5nZigpIT0oYW8oKSxqaCkmJnMuZ2YoKSE9a2YpY29udGludWU7c3dpdGNoKHI9dSh1KG8uZGQoKSw0NikuYiw4MSksZD11KHUoby5kZCgpLDQ2KS5hLDE4OSksbj1kLmMscy5nZigpLmcpe2Nhc2UgMjpyLmcuYz10LmUuYSxyLmcuYj1iLk1hdGgubWF4KDEsci5nLmIrbik7YnJlYWs7Y2FzZSAxOnIuZy5jPXIuZy5jK24sci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iLW4pO2JyZWFrO2Nhc2UgNDpyLmcuZD10LmUuYixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmErbik7YnJlYWs7Y2FzZSAzOnIuZy5kPXIuZy5kK24sci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hLW4pfX19ZnVuY3Rpb24gYnluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoZD1QdChUcixYciwyNSxlLmIuYy5sZW5ndGgsMTUsMSksaz1QdChlbHQsYWUsMjY3LGUuYi5jLmxlbmd0aCwwLDEpLHc9UHQobzAsemcsMTAsZS5iLmMubGVuZ3RoLDAsMSksTT10LmEsRj0wLEg9TS5sZW5ndGg7RjxIOysrRil7Zm9yKEM9TVtGXSxZPTAsaD1uZXcgUyhDLmUpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxyPXQydChzLmMpLCsrZFtyXSxWPVh0KHllKFEoZSwoVGUoKSx4ZikpKSksZFtyXT4wJiZ3W3JdJiYoVj1WMyh0LmIsd1tyXSxzKSksWT1iLk1hdGgubWF4KFkscy5jLmMuYitWKTtmb3Iobz1uZXcgUyhDLmUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxzLm4uYj1ZK3MuZC5kLG49cy5jLG4uYy5iPVkrcy5kLmQrcy5vLmIrcy5kLmEsa1tSbyhuLmIuYixuLDApXT1zLmssd1tSbyhuLmIuYixuLDApXT1zfX1mdW5jdGlvbiBfbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSxFdChTdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDE4Nil8fCh3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLGdfKG4pfHwoaD1lLmkrZS5nLzIsZD1lLmorZS5mLzIsQz13Lmkrdy5nLzIsTT13Lmordy5mLzIsRj1uZXcgVGEsRi5hPUMtaCxGLmI9TS1kLG89bmV3ICRlKEYuYSxGLmIpLGhFKG8sZS5nLGUuZiksRi5hLT1vLmEsRi5iLT1vLmIsaD1DLUYuYSxkPU0tRi5iLGs9bmV3ICRlKEYuYSxGLmIpLGhFKGssdy5nLHcuZiksRi5hLT1rLmEsRi5iLT1rLmIsQz1oK0YuYSxNPWQrRi5iLHM9bTQobiwhMCwhMCksQjgocyxoKSxqOChzLGQpLEY4KHMsQyksUjgocyxNKSxfbGUodCx3KSkpfWZ1bmN0aW9uIFNsZSh0KXtTdih0LG5ldyB3MihFdih5dihrdih4dihuZXcgcGcsbXcpLCJFTEsgU1BPckUgQ29tcGFjdGlvbiIpLCJTaHJpbmtUcmVlIGlzIGEgY29tcGFjdGlvbiBhbGdvcml0aG0gdGhhdCBtYWludGFpbnMgdGhlIHRvcG9sb2d5IG9mIGEgbGF5b3V0LiBUaGUgcmVsb2NhdGlvbiBvZiBkaWFncmFtIGVsZW1lbnRzIGlzIGJhc2VkIG9uIGNvbnRyYWN0aW5nIGEgc3Bhbm5pbmcgdHJlZS4iKSxuZXcgUEwpKSkseGUodCxtdyxfY3QsRGUoRFYpKSx4ZSh0LG13LHQ4dCxEZShZaHQpKSx4ZSh0LG13LGU4dCxEZShLaHQpKSx4ZSh0LG13LFNjdCxEZShyU3QpKSx4ZSh0LG13LEFjdCxEZShXaHQpKSx4ZSh0LG13LHd3LG5TdCkseGUodCxtdyxreSw4KSx4ZSh0LG13LExjdCxEZShnM2UpKSx4ZSh0LG13LG44dCxEZSh0U3QpKSx4ZSh0LG13LHI4dCxEZShlU3QpKSx4ZSh0LG13LEtELChGbigpLCExKSl9ZnVuY3Rpb24gdnluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKHdyKGUsIlNpbXBsZSBub2RlIHBsYWNlbWVudCIsMSksTT11KFEodCwoc2UoKSxZNCkpLDMwNCksZD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHI9dShKKG8pLDI5KSxoPXIuYyxoLmI9MCxuPW51bGwsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSxuJiYoaC5iKz1FM3QodyxuLE0uYykpLGguYis9dy5kLmQrdy5vLmIrdy5kLmEsbj13O2Q9Yi5NYXRoLm1heChkLGguYil9Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9ci5jLEM9KGQtaC5iKS8yLG49bnVsbCxrPW5ldyBTKHIuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTApLG4mJihDKz1FM3QodyxuLE0uYykpLEMrPXcuZC5kLHcubi5iPUMsQys9dy5vLmIrdy5kLmEsbj13O29yKGUpfWZ1bmN0aW9uIHd5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNO2lmKHIuZ2MoKT09MClyZXR1cm4hMTtpZih3PSh0bygpLHUoZSw2NikuT2ooKSksaD13P3I6bmV3IEt2KHIuZ2MoKSksVjAodC5lLGUpKXtpZihlLmhpKCkpZm9yKEM9ci5LYygpO0MuT2IoKTspaz1DLlBiKCksbXEodCxlLGssRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl8fChvPVlkKGUsayksaC5GYyhvKSk7ZWxzZSBpZighdylmb3IoQz1yLktjKCk7Qy5PYigpOylrPUMuUGIoKSxvPVlkKGUsayksaC5GYyhvKX1lbHNle2ZvcihNPWF1KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxkPTA7ZDx0Lmk7KytkKWlmKG89c1tkXSxNLnJsKG8uYWsoKSkpdGhyb3cgcnQobmV3IFBuKGVPKSk7aWYoci5nYygpPjEpdGhyb3cgcnQobmV3IFBuKGVPKSk7d3x8KG89WWQoZSxyLktjKCkuUGIoKSksaC5GYyhvKSl9cmV0dXJuIHl5dCh0LCQ0dCh0LGUsbiksaCl9ZnVuY3Rpb24gbXluKHQsZSl7dmFyIG4scixzLG87Zm9yKG5vbihlLmIuaiksdXMocHUobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBqWCksbmV3ICRYKSxvPW5ldyBTKGUuZCk7by5hPG8uYy5jLmxlbmd0aDspe3N3aXRjaChzPXUoSihvKSwxMDEpLHMuZS5nKXtjYXNlIDA6bj11KEZlKHMuaiwwKSwxMTMpLmQuaixLQihzLHUoT3YoSGoodShBaShzLmssbiksMTUpLk9jKCksejQpKSwxMTMpKSxXQihzLHUoT3YocWoodShBaShzLmssbiksMTUpLk9jKCksejQpKSwxMTMpKTticmVhaztjYXNlIDE6cj1XM3QocyksS0Iocyx1KE92KEhqKHUoQWkocy5rLHJbMF0pLDE1KS5PYygpLHo0KSksMTEzKSksV0Iocyx1KE92KHFqKHUoQWkocy5rLHJbMV0pLDE1KS5PYygpLHo0KSksMTEzKSk7YnJlYWs7Y2FzZSAyOnBnbih0LHMpO2JyZWFrO2Nhc2UgMzpJMm4ocyk7YnJlYWs7Y2FzZSA0OlAybih0LHMpfWVvbihzKX10LmE9bnVsbH1mdW5jdGlvbiB5YXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7cmV0dXJuIHI9dC5hLm89PShFMSgpLHoxKT9zczpUcyxkPW5sZSh0LG5ldyByVnQoZSxuKSksIWQuYSYmZC5jPyhuaSh0LmQsZCkscik6ZC5hPyhzPWQuYS5jLHc9ZC5hLmQsbj8oaz10LmEuYz09KGRkKCksUncpP3c6cyxvPXQuYS5jPT1Sdz9zOncsaD10LmEuZ1tvLmkucF0sQz1YdCh0LmEucFtoLnBdKStYdCh0LmEuZFtvLmkucF0pK28ubi5iK28uYS5iLVh0KHQuYS5kW2suaS5wXSktay5uLmItay5hLmIpOihrPXQuYS5jPT0oZGQoKSxLZyk/dzpzLG89dC5hLmM9PUtnP3M6dyxDPVh0KHQuYS5wW3QuYS5nW28uaS5wXS5wXSkrWHQodC5hLmRbby5pLnBdKStvLm4uYitvLmEuYi1YdCh0LmEuZFtrLmkucF0pLWsubi5iLWsuYS5iKSx0LmEublt0LmEuZ1tzLmkucF0ucF09KEZuKCksITApLHQuYS5uW3QuYS5nW3cuaS5wXS5wXT0hMCxDKTpyfWZ1bmN0aW9uIGtxKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKFYwKHQuZSxlKSl3PSh0bygpLHUoZSw2NikuT2ooKT9uZXcgSWooZSx0KTpuZXcgRE0oZSx0KSksaXEody5jLHcuYiksaEModyx1KG4sMTQpKTtlbHNle2ZvcihDPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSxvPXMuYWsoKSxDLnJsKG8pKXtpZihvPT0oYTYoKSxXNil8fG89PVU2KXtmb3Ioaz1CM3QodCxlLG4pLGQ9aCxrP2R5KHQsaCk6KytoO2g8dC5pOylzPXJbaF0sbz1zLmFrKCksbz09VzZ8fG89PVU2P2R5KHQsaCk6KytoO2t8fHUodTQodCxkLFlkKGUsbikpLDcyKX1lbHNlIEIzdCh0LGUsbik/ZHkodCxoKTp1KHU0KHQsaCwodG8oKSx1KGUsNjYpLk9qKCk/dShuLDcyKTpZZChlLG4pKSksNzIpO3JldHVybn1CM3QodCxlLG4pfHxNcih0LCh0bygpLHUoZSw2NikuT2ooKT91KG4sNzIpOllkKGUsbikpKX19ZnVuY3Rpb24gQWxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO3JldHVybiB5aShuLHQuYil8fCh0LmI9bixvPW5ldyBFcyxoPXUoUGwocHUobmV3IFRuKG51bGwsbmV3IF9uKG4uZiwxNikpLG8pLFltKG5ldyBjbixuZXcgbGksbmV3IGRpLG5ldyBFZSxjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksTHkpLEdsXSkpKSwyMSksdC5lPSEwLHQuZj0hMCx0LmM9ITAsdC5kPSEwLHM9aC5IYygobjYoKSxjTykpLHI9aC5IYyh1TykscyYmIXImJih0LmY9ITEpLCFzJiZyJiYodC5kPSExKSxzPWguSGMob08pLHI9aC5IYyhsTykscyYmIXImJih0LmM9ITEpLCFzJiZyJiYodC5lPSExKSksQz11KHQuYS5DZShlLG4pLDQ2KSx3PXUoQy5hLDE5KS5hLGs9dShDLmIsMTkpLmEsZD0hMSx3PDA/dC5jfHwoZD0hMCk6dC5lfHwoZD0hMCksazwwP3QuZHx8KGQ9ITApOnQuZnx8KGQ9ITApLGQ/QWxlKHQsQyxuKTpDfWZ1bmN0aW9uIHl5bih0KXt2YXIgZSxuLHIscztzPXQubyxCbSgpLHQuQS5kYygpfHx5aSh0LkEsdDd0KT9lPXMuYjooZT1jRCh0LmYpLHQuQS5IYygoX2woKSxlTikpJiYhdC5CLkhjKChjbCgpLGVBKSkmJihlPWIuTWF0aC5tYXgoZSxjRCh1KGdvKHQucCwoYmUoKSxIbikpLDI0NCkpKSxlPWIuTWF0aC5tYXgoZSxjRCh1KGdvKHQucCxCbiksMjQ0KSkpKSxuPUFuZSh0KSxuJiYoZT1iLk1hdGgubWF4KGUsbi5iKSksdC5BLkhjKG5OKSYmKHQucT09KG9hKCksaDApfHx0LnE9PVZjKSYmKGU9Yi5NYXRoLm1heChlLExqKHUoZ28odC5iLChiZSgpLEhuKSksMTI0KSkpLGU9Yi5NYXRoLm1heChlLExqKHUoZ28odC5iLEJuKSwxMjQpKSkpKSxqZShSZSh0LmUueWYoKS5XZSgoY2koKSxqVikpKSk/cy5iPWIuTWF0aC5tYXgocy5iLGUpOnMuYj1lLHI9dC5mLmksci5kPTAsci5hPWUsZGF0KHQuZil9ZnVuY3Rpb24gTGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoTT0wO008ZS5sZW5ndGg7TSsrKXtmb3IoZD10LktjKCk7ZC5PYigpOylvPXUoZC5QYigpLDIyNSksby5PZihNLGUpO2ZvcihGPTA7RjxlW01dLmxlbmd0aDtGKyspe2Zvcih3PXQuS2MoKTt3Lk9iKCk7KW89dSh3LlBiKCksMjI1KSxvLlBmKE0sRixlKTtmb3IoWT1lW01dW0ZdLmosSD0wO0g8WS5jLmxlbmd0aDtIKyspe2ZvcihrPXQuS2MoKTtrLk9iKCk7KW89dShrLlBiKCksMjI1KSxvLlFmKE0sRixILGUpO2ZvcihWPShBbihILFkuYy5sZW5ndGgpLHUoWS5jW0hdLDExKSksbj0wLHM9bmV3IFMxKFYuYik7Vm8ocy5hKXx8Vm8ocy5iKTspZm9yKHI9dShWbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLEM9dC5LYygpO0MuT2IoKTspbz11KEMuUGIoKSwyMjUpLG8uTmYoTSxGLEgsbisrLHIsZSl9fX1mb3IoaD10LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDIyNSksby5NZigpfWZ1bmN0aW9uIHh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih0LmI9WHQoeWUoUShlLChUZSgpLFE0KSkpKSx0LmM9WHQoeWUoUShlLFIyKSkpLHQuZD11KFEoZSxLbHQpLDMzNiksdC5hPXUoUShlLEtHKSwyNzUpLGdmbihlKSxkPXUoUGwoUmkoUmkoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyB4WSksbmV3IE5UKSxuZXcgeEwpLG5ldyBaUCksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsWyhJMSgpLEdsKV0pKSksMTUpLHM9ZC5LYygpO3MuT2IoKTspbj11KHMuUGIoKSwxNyksaD11KFEobiwoc2UoKSxOMikpLDE1KSxoLkpjKG5ldyBtYyh0KSksSnQobixOMixudWxsKTtmb3Iocj1kLktjKCk7ci5PYigpOyluPXUoci5QYigpLDE3KSx3PXUoUShuLChzZSgpLGk5dCkpLDE3KSxvPXUoUShuLFg0KSwxNSksTDVuKHQsbyx3KSxKdChuLFg0LG51bGwpfWZ1bmN0aW9uIGt5bih0KXt0LmI9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LnE9bnVsbCx0LnY9bnVsbCx0Lnc9bnVsbCx0LkI9bnVsbCx0LnA9bnVsbCx0LlE9bnVsbCx0LlI9bnVsbCx0LlM9bnVsbCx0LlQ9bnVsbCx0LlU9bnVsbCx0LlY9bnVsbCx0Llc9bnVsbCx0LmJiPW51bGwsdC5lYj1udWxsLHQuYWI9bnVsbCx0Lkg9bnVsbCx0LmRiPW51bGwsdC5jPW51bGwsdC5kPW51bGwsdC5mPW51bGwsdC5uPW51bGwsdC5yPW51bGwsdC5zPW51bGwsdC51PW51bGwsdC5HPW51bGwsdC5KPW51bGwsdC5lPW51bGwsdC5qPW51bGwsdC5pPW51bGwsdC5nPW51bGwsdC5rPW51bGwsdC50PW51bGwsdC5GPW51bGwsdC5JPW51bGwsdC5MPW51bGwsdC5NPW51bGwsdC5PPW51bGwsdC5QPW51bGwsdC4kPW51bGwsdC5OPW51bGwsdC5aPW51bGwsdC5jYj1udWxsLHQuSz1udWxsLHQuRD1udWxsLHQuQT1udWxsLHQuQz1udWxsLHQuXz1udWxsLHQuZmI9bnVsbCx0Llg9bnVsbCx0Llk9bnVsbCx0LmdiPSExLHQuaGI9ITF9ZnVuY3Rpb24geGF0KHQpe3ZhciBlLG4scixzLG8saCxkLHcsaztyZXR1cm4hKHQuayE9KEduKCksRHMpfHx0LmouYy5sZW5ndGg8PTF8fChvPXUoUSh0LChUZSgpLG9zKSksOTgpLG89PShvYSgpLFZjKSl8fChzPShzeSgpLCh0LnE/dC5xOih2bigpLHZuKCksYTApKS5fYihOdyk/cj11KFEodCxOdyksMTk3KTpyPXUoUShGYSh0KSxDUyksMTk3KSxyKSxzPT1sVil8fCEocz09dDV8fHM9PUo0KSYmKGg9WHQoeWUoaXkodCxfUykpKSxlPXUoUSh0LExPKSwxNDIpLCFlJiYoZT1uZXcgbnZ0KGgsaCxoLGgpKSxrPVlvKHQsKGJlKCksQm4pKSx3PWUuZCtlLmErKGsuZ2MoKS0xKSpoLHc+dC5vLmJ8fChuPVlvKHQsSG4pLGQ9ZS5kK2UuYSsobi5nYygpLTEpKmgsZD50Lm8uYikpKX1mdW5jdGlvbiBrYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihoPXQuZSx3PWUuZSxoPT0wKXJldHVybiBlO2lmKHc9PTApcmV0dXJuIHQ7aWYobz10LmQsZD1lLmQsbytkPT0yKXJldHVybiBuPVBzKHQuYVswXSxjbykscj1QcyhlLmFbMF0sY28pLGg9PXc/KEM9T2EobixyKSxWPVNyKEMpLEg9U3Ioem0oQywzMikpLEg9PTA/bmV3IExnKGgsVik6bmV3IEszKGgsMixjdChvdChUciwxKSxYciwyNSwxNSxbVixIXSkpKTpLSShoPDA/WXAocixuKTpZcChuLHIpKTtpZihoPT13KUY9aCxNPW8+PWQ/UnJ0KHQuYSxvLGUuYSxkKTpScnQoZS5hLGQsdC5hLG8pO2Vsc2V7aWYocz1vIT1kP28+ZD8xOi0xOlB5dCh0LmEsZS5hLG8pLHM9PTApcmV0dXJuIEpwKCksUUU7cz09MT8oRj1oLE09RnJ0KHQuYSxvLGUuYSxkKSk6KEY9dyxNPUZydChlLmEsZCx0LmEsbykpfXJldHVybiBrPW5ldyBLMyhGLE0ubGVuZ3RoLE0pLE9DKGspLGt9ZnVuY3Rpb24gRWF0KHQsZSxuLHIscyxvLGgpe3ZhciBkLHcsayxDLE0sRixIO3JldHVybiBNPWplKFJlKFEoZSwoVGUoKSxyQ3QpKSkpLEY9bnVsbCxvPT0oc28oKSxKdSkmJnIuYy5pPT1uP0Y9ci5jOm89PWV1JiZyLmQuaT09biYmKEY9ci5kKSxrPWgsIWt8fCFNfHxGPyhDPShiZSgpLFpvKSxGP0M9Ri5qOkgzKHUoUShuLG9zKSw5OCkpJiYoQz1vPT1KdT9CbjpIbiksdz1FeW4odCxlLG4sbyxDLHIpLGQ9TnJ0KChGYShuKSxyKSksbz09SnU/KERhKGQsdShGZSh3LmosMCksMTEpKSxzYShkLHMpKTooRGEoZCxzKSxzYShkLHUoRmUody5qLDApLDExKSkpLGs9bmV3IEdyZShyLGQsdyx1KFEodywoc2UoKSxfaSkpLDExKSxvLCFGKSk6KHVlKGsuZSxyKSxIPWIuTWF0aC5tYXgoWHQoeWUoUShrLmQsVWcpKSksWHQoeWUoUShyLFVnKSkpKSxKdChrLmQsVWcsSCkpLGxuKHQuYSxyLG5ldyBUaihrLmQsZSxvKSksa31mdW5jdGlvbiBFcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2lmKEM9bnVsbCx0LmQmJihDPXUoRmModC5kLGUpLDEzOCkpLCFDKXtpZihvPXQuYS5NaCgpLE09by5pLCF0LmR8fCQ5KHQuZCkhPU0pe2Zvcih3PW5ldyBDcix0LmQmJlZDKHcsdC5kKSxrPXcuZi5jK3cuZy5jLGQ9aztkPE07KytkKXI9dShTdChvLGQpLDEzOCkscz1PZyh0LmUscikubmUoKSxuPXUocz09bnVsbD9zdSh3LmYsbnVsbCxyKTpudyh3LmcscyxyKSwxMzgpLG4mJm4hPXImJihzPT1udWxsP3N1KHcuZixudWxsLG4pOm53KHcuZyxzLG4pKTtpZih3LmYuYyt3LmcuYyE9TSlmb3IoaD0wO2g8azsrK2gpcj11KFN0KG8saCksMTM4KSxzPU9nKHQuZSxyKS5uZSgpLG49dShzPT1udWxsP3N1KHcuZixudWxsLHIpOm53KHcuZyxzLHIpLDEzOCksbiYmbiE9ciYmKHM9PW51bGw/c3Uody5mLG51bGwsbik6bncody5nLHMsbikpO3QuZD13fUM9dShGYyh0LmQsZSksMTM4KX1yZXR1cm4gQ31mdW5jdGlvbiBFeW4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtyZXR1cm4gaD1udWxsLGs9cj09KHNvKCksSnUpP28uYzpvLmQsdz1FeihlKSxrLmk9PW4/KGg9dShKbih0LmIsayksMTApLGh8fChoPVREKGssdShRKG4sKFRlKCksb3MpKSw5OCkscyxPd24oayksbnVsbCxrLm4say5vLHcsZSksSnQoaCwoc2UoKSxfaSksayksa2kodC5iLGssaCkpKTooaD1URCgoQz1uZXcgeGEsTT1YdCh5ZShRKGUsKFRlKCkseGYpKSkpLzIsRkkoQyx6eSxNKSxDKSx1KFEobixvcyksOTgpLHMscj09SnU/LTE6MSxudWxsLG5ldyBUYSxuZXcgJGUoMCwwKSx3LGUpLGQ9dmRuKGgsbixyKSxKdChoLChzZSgpLF9pKSxkKSxraSh0LmIsZCxoKSksdShRKGUsKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksYmgpKSxIMyh1KFEoZSwoVGUoKSxvcykpLDk4KSk/SnQoZSxvcywob2EoKSxMNykpOkp0KGUsb3MsKG9hKCksSDEpKSxofWZ1bmN0aW9uIFR5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7d3IoZSwiT3J0aG9nb25hbCBlZGdlIHJvdXRpbmciLDEpLGs9WHQoeWUoUSh0LChUZSgpLFo0KSkpKSxuPVh0KHllKFEodCxRNCkpKSxyPVh0KHllKFEodCxSMikpKSxGPW5ldyBHbnQoMCxuKSx0dD0wLGg9bmV3IGhhKHQuYiwwKSxkPW51bGwsQz1udWxsLHc9bnVsbCxNPW51bGw7ZG8gQz1oLmI8aC5kLmdjKCk/KFFuKGguYjxoLmQuZ2MoKSksdShoLmQuWGIoaC5jPWguYisrKSwyOSkpOm51bGwsTT1DP0MuYTpudWxsLGQmJihmeHQoZCx0dCksdHQrPWQuYy5hKSxZPWQ/dHQrcjp0dCxWPXZ4dChGLHQsdyxNLFkpLHM9IWR8fGVqKHcsKGhxKCksTk8pKSxvPSFDfHxlaihNLChocSgpLE5PKSksVj4wPyhIPShWLTEpKm4sZCYmKEgrPXIpLEMmJihIKz1yKSxIPGsmJiFzJiYhbyYmKEg9ayksdHQrPUgpOiFzJiYhbyYmKHR0Kz1rKSxkPUMsdz1NO3doaWxlKEMpO3QuZi5hPXR0LG9yKGUpfWZ1bmN0aW9uIFRhdCgpe1RhdD1aO3ZhciB0O1FBdD1uZXcgbXF0LEc0ZT1QdChBZSx0ZSwyLDAsNiwxKSxxNGU9QzEoWngoMzMsNTgpLFp4KDEsMjYpKSxINGU9QzEoWngoOTcsMTIyKSxaeCg2NSw5MCkpLFVBdD1aeCg0OCw1NyksJDRlPUMxKHE0ZSwwKSx6NGU9QzEoSDRlLFVBdCksV0F0PUMxKEMxKDAsWngoMSw2KSksWngoMzMsMzgpKSxLQXQ9QzEoQzEoVUF0LFp4KDY1LDcwKSksWngoOTcsMTAyKSksVjRlPUMxKCQ0ZSxQeigiLV8uIX4qJygpIikpLFU0ZT1DMSh6NGUsTHooIi1fLiF+KicoKSIpKSxQeih1MGUpLEx6KHUwZSksQzEoVjRlLFB6KCI7OkAmPSskLCIpKSxDMShVNGUsTHooIjs6QCY9KyQsIikpLFlBdD1QeigiOi8/IyIpLFhBdD1MeigiOi8/IyIpLGlBPVB6KCIvPyMiKSxzQT1MeigiLz8jIiksdD1uZXcgcXMsdC5hLnpjKCJqYXIiLHQpLHQuYS56YygiemlwIix0KSx0LmEuemMoImFyY2hpdmUiLHQpLHJVPSh2bigpLG5ldyBRayh0KSl9ZnVuY3Rpb24gTWxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYoSnQoZSwoZmMoKSxrNyksMCksdz11KFEoZSx5ViksODYpLGUuZC5iPT0wKXc/KEM9WHQoeWUoUSh3LFlnKSkpK3QuYStjbXQodyxlKSxKdChlLFlnLEMpKTpKdChlLFlnLDApO2Vsc2V7Zm9yKHI9KG89ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngobykpO2tSKHIuYSk7KW49dSh0aShyLmEpLDE4OCkuYyxNbGUodCxuKTtkPXUobGooKGg9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngoaCkpKSw4NiksTT11KFZYZSgocz1laShuZXcgQ3AoZSkuYS5kLDApLG5ldyBieChzKSkpLDg2KSxrPShYdCh5ZShRKE0sWWcpKSkrWHQoeWUoUShkLFlnKSkpKS8yLHc/KEM9WHQoeWUoUSh3LFlnKSkpK3QuYStjbXQodyxlKSxKdChlLFlnLEMpLEp0KGUsazcsWHQoeWUoUShlLFlnKSkpLWspLEQzbih0LGUpKTpKdChlLFlnLGspfX1mdW5jdGlvbiBURSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2Q9MCxWPTAsdz1sJCh0LmYsdC5mLmxlbmd0aCksbz10LmQsaD10Lmkscj10LmEscz10LmI7ZG97Zm9yKEg9MCxDPW5ldyBTKHQucCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTApLEY9WWxlKHQsayksbj0hMCwodC5xPT0odzQoKSxNTyl8fHQucT09SU8pJiYobj1qZShSZShGLmIpKSksdShGLmEsMTkpLmE8MCYmbj8oKytILHc9bCQodC5mLHQuZi5sZW5ndGgpLHQuZD10LmQrdShGLmEsMTkpLmEsVis9by10LmQsbz10LmQrdShGLmEsMTkpLmEsaD10Lmkscj1Hdih0LmEpLHM9R3YodC5iKSk6KHQuZj1sJCh3LHcubGVuZ3RoKSx0LmQ9byx0LmE9KEFyKHIpLHI/bmV3IFB1KHIpOmQ4KG5ldyBTKHIpKSksdC5iPShBcihzKSxzP25ldyBQdShzKTpkOChuZXcgUyhzKSkpLHQuaT1oKTsrK2QsTT1IIT0wJiZqZShSZShlLktiKG5ldyBsYShkZShWKSxkZShkKSkpKSl9d2hpbGUoTSl9ZnVuY3Rpb24gQ3luKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZTtyZXR1cm4gaD10LmYsRj1lLmYsZD1oPT0oeUUoKSxSNil8fGg9PXpTLEg9Rj09UjZ8fEY9PXpTLHc9aD09bjV8fGg9PXFTLFY9Rj09bjV8fEY9PXFTLGs9aD09bjV8fGg9PVI2LFk9Rj09bjV8fEY9PVI2LGQmJkg/dC5mPT16Uz90OmU6dyYmVj90LmY9PXFTP3Q6ZTprJiZZPyhoPT1uNT8oTT10LEM9ZSk6KE09ZSxDPXQpLG89KHR0PW4uaituLmYsZ3Q9TS5lK3IuZixMdD1iLk1hdGgubWF4KHR0LGd0KSxfdD1MdC1iLk1hdGgubWluKG4uaixNLmUpLEJ0PU0uZCtyLmctbi5pLEJ0Kl90KSxzPShZdD1uLmkrbi5nLGNlPUMuZCtyLmcsU2U9Yi5NYXRoLm1heChZdCxjZSksV2U9U2UtYi5NYXRoLm1pbihuLmksQy5kKSxRZT1DLmUrci5mLW4uaixXZSpRZSksbzw9cz90LmY9PW41P3Q6ZTp0LmY9PVI2P3Q6ZSk6dH1mdW5jdGlvbiBfeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoQz10LmUuYS5jLmxlbmd0aCxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLG8uaj0hMTtmb3IodC5pPVB0KFRyLFhyLDI1LEMsMTUsMSksdC5nPVB0KFRyLFhyLDI1LEMsMTUsMSksdC5uPW5ldyBsZSxzPTAsTT1uZXcgbGUsdz1uZXcgUyh0LmUuYSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTIxKSxkLmQ9cysrLGQuYi5hLmMubGVuZ3RoPT0wJiZ1ZSh0Lm4sZCksQXMoTSxkLmcpO2ZvcihlPTAscj1uZXcgUyhNKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLG4uYz1lKyssbi5mPSExO2s9TS5jLmxlbmd0aCx0LmI9PW51bGx8fHQuYi5sZW5ndGg8az8odC5iPVB0KGlhLHZvLDI1LGssMTUsMSksdC5jPVB0KGRsLGkwLDI1LGssMTYsMSkpOlA5KHQuYyksdC5kPU0sdC5wPW5ldyBubnQoUW0odC5kLmMubGVuZ3RoKSksdC5qPTF9ZnVuY3Rpb24gU3luKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKCEoZS5lLmMubGVuZ3RoPD0xKSl7Zm9yKHQuZj1lLHQuZD11KFEodC5mLChKSSgpLHc3dCkpLDM3OSksdC5nPXUoUSh0LmYsazd0KSwxOSkuYSx0LmU9WHQoeWUoUSh0LmYsbTd0KSkpLHQuYz1YdCh5ZShRKHQuZixvRykpKSxxWXQodC5iKSxzPW5ldyBTKHQuZi5jKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyODIpLEc1dCh0LmIsci5jLHIsbnVsbCksRzV0KHQuYixyLmQscixudWxsKTtmb3IoZD10LmYuZS5jLmxlbmd0aCx0LmE9WGIoaWEsW3RlLHZvXSxbMTA0LDI1XSwxNSxbZCxkXSwyKSxrPW5ldyBTKHQuZi5lKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxNDQpLFltbih0LHcsdC5hW3cuYl0pO2Zvcih0Lmk9WGIoaWEsW3RlLHZvXSxbMTA0LDI1XSwxNSxbZCxkXSwyKSxvPTA7bzxkOysrbylmb3IoaD0wO2g8ZDsrK2gpbj10LmFbb11baF0sQz0xLyhuKm4pLHQuaVtvXVtoXT1DfX1mdW5jdGlvbiBUXyh0KXt2YXIgZSxuLHIscztpZighKHQuYj09bnVsbHx8dC5iLmxlbmd0aDw9MikmJiF0LmEpe2ZvcihlPTAscz0wO3M8dC5iLmxlbmd0aDspe2ZvcihlIT1zPyh0LmJbZV09dC5iW3MrK10sdC5iW2UrMV09dC5iW3MrK10pOnMrPTIsbj10LmJbZSsxXTtzPHQuYi5sZW5ndGgmJiEobisxPHQuYltzXSk7KWlmKG4rMT09dC5iW3NdKXQuYltlKzFdPXQuYltzKzFdLG49dC5iW2UrMV0scys9MjtlbHNlIGlmKG4+PXQuYltzKzFdKXMrPTI7ZWxzZSBpZihuPHQuYltzKzFdKXQuYltlKzFdPXQuYltzKzFdLG49dC5iW2UrMV0scys9MjtlbHNlIHRocm93IHJ0KG5ldyBHbygiVG9rZW4jY29tcGFjdFJhbmdlcygpOiBJbnRlcm5lbCBFcnJvcjogWyIrdC5iW2VdKyIsIit0LmJbZSsxXSsiXSBbIit0LmJbc10rIiwiK3QuYltzKzFdKyJdIikpO2UrPTJ9ZSE9dC5iLmxlbmd0aCYmKHI9UHQoVHIsWHIsMjUsZSwxNSwxKSxJYyh0LmIsMCxyLDAsZSksdC5iPXIpLHQuYT0hMH19ZnVuY3Rpb24gQXluKHQsZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKGg9UHgodC5hKS5LYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTcpLG8uYi5jLmxlbmd0aD4wKWZvcihyPW5ldyBQdSh1KEFpKHQuYSxvKSwyMSkpLHZuKCksWHMocixuZXcgU2koZSkpLHM9bmV3IGhhKG8uYiwwKTtzLmI8cy5kLmdjKCk7KXtzd2l0Y2gobj0oUW4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDcwKSksZD0tMSx1KFEobiwoVGUoKSxNZCkpLDI3MikuZyl7Y2FzZSAxOmQ9ci5jLmxlbmd0aC0xO2JyZWFrO2Nhc2UgMDpkPVoxbihyKTticmVhaztjYXNlIDI6ZD0wfWQhPS0xJiYodz0oQW4oZCxyLmMubGVuZ3RoKSx1KHIuY1tkXSwyNDMpKSx1ZSh3LmIuYixuKSx1KFEoRmEody5iLmMuaSksKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksaDcpKSx1KFEoRmEody5iLmMuaSksR2MpLDIxKS5GYyhsNyksRWwocyksSnQobixlOXQsbykpfURhKG8sbnVsbCksc2EobyxudWxsKX19ZnVuY3Rpb24gTHluKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49bmV3IEJkLHI9dShQbChwdShuZXcgVG4obnVsbCxuZXcgX24odC5mLDE2KSksbiksWW0obmV3IGNuLG5ldyBsaSxuZXcgZGksbmV3IEVlLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxMeSksR2xdKSkpLDIxKSxzPXIuZ2MoKSxzPXM9PTI/MTowLHM9PTEmJkF2KFVJKHUoUGwoUmkoci5MYygpLG5ldyBFMCksVG5lKGcyKDApLG5ldyBEcikpLDE2MikuYSwyKSwwKSYmKHM9MCkscj11KFBsKHB1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxZbShuZXcgY24sbmV3IGxpLG5ldyBkaSxuZXcgRWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW0x5LEdsXSkpKSwyMSksbz1yLmdjKCksbz1vPT0yPzE6MCxvPT0xJiZBdihVSSh1KFBsKFJpKHIuTGMoKSxuZXcgQmkpLFRuZShnMigwKSxuZXcgRHIpKSwxNjIpLmEsMiksMCkmJihvPTApLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBNeW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYoaz1uZXcgbGUsIVZzKHQsKHNlKCksT2x0KSkpcmV0dXJuIGs7Zm9yKHI9dShRKHQsT2x0KSwxNSkuS2MoKTtyLk9iKCk7KWU9dShyLlBiKCksMTApLEh5bihlLHQpLGsuY1trLmMubGVuZ3RoXT1lO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDI5KSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLGguaz09KEduKCkseHMpJiYodz11KFEoaCxHRyksMTApLHcmJihDPW5ldyBNYyxVbyhDLGgpLE09dShRKGgsb2MpLDYxKSxGcyhDLE0pLEY9dShGZSh3LmosMCksMTEpLEg9bmV3IHp2LERhKEgsQyksc2EoSCxGKSkpO2ZvcihuPW5ldyBTKGspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxrbyhlLHUoRmUodC5iLHQuYi5jLmxlbmd0aC0xKSwyOSkpO3JldHVybiBrfWZ1bmN0aW9uIElsZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGU9azEodCksbz1qZShSZShxZShlLChUZSgpLCR5KSkpKSxDPTAscz0wLGs9bmV3IGVyKCghdC5lJiYodC5lPW5ldyBDbihXcyx0LDcsNCkpLHQuZSkpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSw3OSksZD11dyh3KSxoPWQmJm8mJmplKFJlKHFlKHcsUDIpKSksRj1Nbyh1KFN0KCghdy5jJiYody5jPW5ldyBDbihicix3LDUsOCkpLHcuYyksMCksODIpKSxkJiZoPysrczpkJiYhaD8rK0M6dHMoRik9PWV8fEY9PWU/KytzOisrQztmb3Iocj1uZXcgZXIoKCF0LmQmJih0LmQ9bmV3IENuKFdzLHQsOCw1KSksdC5kKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDc5KSxkPXV3KG4pLGg9ZCYmbyYmamUoUmUocWUobixQMikpKSxNPU1vKHUoU3QoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSw4MikpLGQmJmg/KytDOmQmJiFoPysrczp0cyhNKT09ZXx8TT09ZT8rK0M6KytzO3JldHVybiBDLXN9ZnVuY3Rpb24gSXluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKHdyKGUsIkVkZ2Ugc3BsaXR0aW5nIiwxKSx0LmIuYy5sZW5ndGg8PTIpe29yKGUpO3JldHVybn1mb3Iobz1uZXcgaGEodC5iLDApLGg9KFFuKG8uYjxvLmQuZ2MoKSksdShvLmQuWGIoby5jPW8uYisrKSwyOSkpO28uYjxvLmQuZ2MoKTspZm9yKHM9aCxoPShRbihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMjkpKSx3PW5ldyBTKHMuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHcpLDEwKSxDPW5ldyBTKGQuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxyPW5ldyBTKGsuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLEY9bi5kLE09Ri5pLmMsTSE9cyYmTSE9aCYmVWNlKG4sKEg9bmV3IEgwKHQpLF8wKEgsKEduKCksWnMpKSxKdChILChzZSgpLF9pKSxuKSxKdChILChUZSgpLG9zKSwob2EoKSxWYykpLGtvKEgsaCksSCkpO29yKGUpfWZ1bmN0aW9uIERsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihkPWUucCE9bnVsbCYmIWUuYixkfHx3cihlLCRmZSwxKSxuPXUoUSh0LChzZSgpLFJsdCkpLDE1KSxoPTEvbi5nYygpLGUubilmb3IoWWIoZSwiRUxLIExheWVyZWQgdXNlcyB0aGUgZm9sbG93aW5nICIrbi5nYygpKyIgbW9kdWxlczoiKSxIPTAsRj1uLktjKCk7Ri5PYigpOylDPXUoRi5QYigpLDUxKSxyPShIPDEwPyIwIjoiIikrSCsrLFliKGUsIiAgIFNsb3QgIityKyI6ICIrQXAoc2woQykpKTtmb3IoTT1uLktjKCk7TS5PYigpOylDPXUoTS5QYigpLDUxKSxDLnBmKHQsUmMoZSxoKSk7Zm9yKG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyOSksQXModC5hLHMuYSkscy5hLmM9UHQoWG4sSWUsMSwwLDUsMSk7Zm9yKGs9bmV3IFModC5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxMCksa28odyxudWxsKTt0LmIuYz1QdChYbixJZSwxLDAsNSwxKSxkfHxvcihlKX1mdW5jdGlvbiBEeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlO3I9WHQoeWUoUShlLChUZSgpLHNDdCkpKSksWXQ9dShRKGUsU1MpLDE5KS5hLEY9NCxzPTMsY2U9MjAvWXQsSD0hMSx3PTAsaD12aTtkb3tmb3Iobz13IT0xLE09dyE9MCxTZT0wLHR0PXQuYSxMdD0wLEJ0PXR0Lmxlbmd0aDtMdDxCdDsrK0x0KVY9dHRbTHRdLFYuZj1udWxsLG00bih0LFYsbyxNLHIpLFNlKz1iLk1hdGguYWJzKFYuYSk7ZG8gZD1sbW4odCxlKTt3aGlsZShkKTtmb3IoWT10LmEsZ3Q9MCxfdD1ZLmxlbmd0aDtndDxfdDsrK2d0KWlmKFY9WVtndF0sbj1zd3QoVikuYSxuIT0wKWZvcihDPW5ldyBTKFYuZSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTApLGsubi5iKz1uO3c9PTB8fHc9PTE/KC0tRixGPD0wJiYoU2U8aHx8LUY+WXQpPyh3PTIsaD12aSk6dz09MD8odz0xLGg9U2UpOih3PTAsaD1TZSkpOihIPVNlPj1ofHxoLVNlPGNlLGg9U2UsSCYmLS1zKX13aGlsZSghKEgmJnM8PTApKX1mdW5jdGlvbiBDYXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IoVj1uZXcgQ3Isbz10LmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxNjgpLGtpKFYscixuLkplKHIpKTtmb3IoaD0oQXIodCksdD9uZXcgUHUodCk6ZDgodC5hLmVjKCkuS2MoKSkpLFhzKGgsbmV3IFduKFYpKSxkPUUkKGgpLHc9bmV3IGNqKGUpLEg9bmV3IENyLHN1KEguZixlLHcpO2QuYS5nYygpIT0wOyl7Zm9yKGs9bnVsbCxDPW51bGwsTT1udWxsLHM9ZC5hLmVjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTY4KSxYdCh5ZShlYyhBbyhWLmYscikpKSk8PXNzKXtpZihrbChILHIuYSkmJiFrbChILHIuYikpe0M9ci5iLE09ci5hLGs9cjticmVha31pZihrbChILHIuYikmJiFrbChILHIuYSkpe0M9ci5hLE09ci5iLGs9cjticmVha319aWYoIWspYnJlYWs7Rj1uZXcgY2ooQyksdWUodShlYyhBbyhILmYsTSkpLDIyMSkuYSxGKSxzdShILmYsQyxGKSxkLmEuQmMoaykhPW51bGx9cmV0dXJuIHd9ZnVuY3Rpb24gT3luKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2Zvcih3cihuLCJEZXB0aC1maXJzdCBjeWNsZSByZW1vdmFsIiwxKSxNPWUuYSxDPU0uYy5sZW5ndGgsdC5jPW5ldyBsZSx0LmQ9UHQoZGwsaTAsMjUsQywxNiwxKSx0LmE9UHQoZGwsaTAsMjUsQywxNiwxKSx0LmI9bmV3IGxlLGg9MCxrPW5ldyBTKE0pO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSx3LnA9aCxTOChqbyh3KSkmJnVlKHQuYyx3KSwrK2g7Zm9yKEg9bmV3IFModC5jKTtILmE8SC5jLmMubGVuZ3RoOylGPXUoSihIKSwxMCksSDR0KHQsRik7Zm9yKG89MDtvPEM7bysrKXQuZFtvXXx8KGQ9KEFuKG8sTS5jLmxlbmd0aCksdShNLmNbb10sMTApKSxINHQodCxkKSk7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksZHcociwhMCksSnQoZSwoc2UoKSx4TyksKEZuKCksITApKTt0LmM9bnVsbCx0LmQ9bnVsbCx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBOeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdztmb3IodC5hLmM9UHQoWG4sSWUsMSwwLDUsMSkscj1laShlLmIsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDg2KSxuLmIuYj09MCYmKEp0KG4sKGZjKCksV3kpLChGbigpLCEwKSksdWUodC5hLG4pKTtzd2l0Y2godC5hLmMubGVuZ3RoKXtjYXNlIDA6cz1uZXcgeWl0KDAsZSwiRFVNTVlfUk9PVCIpLEp0KHMsKGZjKCksV3kpLChGbigpLCEwKSksSnQocyxfaHQsITApLG5pKGUuYixzKTticmVhaztjYXNlIDE6YnJlYWs7ZGVmYXVsdDpmb3Iobz1uZXcgeWl0KDAsZSwiU1VQRVJfUk9PVCIpLGQ9bmV3IFModC5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw4Niksdz1uZXcgTHd0KG8saCksSnQodywoZmMoKSxfaHQpLChGbigpLCEwKSksbmkoby5hLmEsdyksbmkoby5kLHcpLG5pKGguYix3KSxKdChoLFd5LCExKTtKdChvLChmYygpLFd5KSwoRm4oKSwhMCkpLEp0KG8sX2h0LCEwKSxuaShlLmIsbyl9fWZ1bmN0aW9uIFB5bih0LGUpe3k0KCk7dmFyIG4scixzLG8saCxkO3JldHVybiBvPWUuYy0odC5jK3QuYikscz10LmMtKGUuYytlLmIpLGg9dC5kLShlLmQrZS5hKSxuPWUuZC0odC5kK3QuYSkscj1iLk1hdGgubWF4KHMsbyksZD1iLk1hdGgubWF4KGgsbikseTEoKSxnZihFZCksKGIuTWF0aC5hYnMocik8PUVkfHxyPT0wfHxpc05hTihyKSYmaXNOYU4oMCk/MDpyPDA/LTE6cj4wPzE6THYoaXNOYU4ociksaXNOYU4oMCkpKT49MF4oZ2YoRWQpLChiLk1hdGguYWJzKGQpPD1FZHx8ZD09MHx8aXNOYU4oZCkmJmlzTmFOKDApPzA6ZDwwPy0xOmQ+MD8xOkx2KGlzTmFOKGQpLGlzTmFOKDApKSk+PTApP2IuTWF0aC5tYXgoZCxyKTooZ2YoRWQpLChiLk1hdGguYWJzKHIpPD1FZHx8cj09MHx8aXNOYU4ocikmJmlzTmFOKDApPzA6cjwwPy0xOnI+MD8xOkx2KGlzTmFOKHIpLGlzTmFOKDApKSk+MD9iLk1hdGguc3FydChkKmQrcipyKTotYi5NYXRoLnNxcnQoZCpkK3IqcikpfWZ1bmN0aW9uIG0yKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpe2lmKCF0LmEmJih0LmE9bmV3IGZSKSx0LmU9PTIpe2hSKHQuYSxlKTtyZXR1cm59aWYoZS5lPT0xKXtmb3Iocz0wO3M8ZS5lbSgpO3MrKyltMih0LGUuYW0ocykpO3JldHVybn1pZihkPXQuYS5hLmMubGVuZ3RoLGQ9PTApe2hSKHQuYSxlKTtyZXR1cm59aWYoaD11KFJ2KHQuYSxkLTEpLDExNyksISgoaC5lPT0wfHxoLmU9PTEwKSYmKGUuZT09MHx8ZS5lPT0xMCkpKXtoUih0LmEsZSk7cmV0dXJufW89ZS5lPT0wPzI6ZS5ibSgpLmxlbmd0aCxoLmU9PTA/KG49bmV3IEI5LHI9aC5fbCgpLHI+PVlhP2ZvKG4scjN0KHIpKTptOChuLHImbXMpLGg9bmV3IGhydCgxMCxudWxsLDApLGxlbih0LmEsaCxkLTEpKToobj0oaC5ibSgpLmxlbmd0aCtvLG5ldyBCOSksZm8obixoLmJtKCkpKSxlLmU9PTA/KHI9ZS5fbCgpLHI+PVlhP2ZvKG4scjN0KHIpKTptOChuLHImbXMpKTpmbyhuLGUuYm0oKSksdShoLDUyMSkuYj1uLmF9fWZ1bmN0aW9uIE9sZSh0KXt2YXIgZSxuLHIscyxvO3JldHVybiB0LmchPW51bGw/dC5nOnQuYTwzMj8odC5nPUs0bihrdSh0LmYpLHBzKHQuZSkpLHQuZyk6KHM9RGF0KCghdC5jJiYodC5jPWpJKHQuZikpLHQuYyksMCksdC5lPT0wP3M6KGU9KCF0LmMmJih0LmM9akkodC5mKSksdC5jKS5lPDA/MjoxLG49cy5sZW5ndGgscj0tdC5lK24tZSxvPW5ldyBfcCxvLmErPSIiK3MsdC5lPjAmJnI+PS02P3I+PTA/aUkobyxuLXBzKHQuZSksU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpOihvLmE9RGwoby5hLDAsZS0xKSsiMC4iK09NKG8uYSxlLTEpLGlJKG8sZSsxLEFoKEQyLDAsLXBzKHIpLTEpKSk6KG4tZT49MSYmKGlJKG8sZSxTdHJpbmcuZnJvbUNoYXJDb2RlKDQ2KSksKytuKSxpSShvLG4sU3RyaW5nLmZyb21DaGFyQ29kZSg2OSkpLHI+MCYmaUkobywrK24sU3RyaW5nLmZyb21DaGFyQ29kZSg0MykpLGlJKG8sKytuLCIiK0VDKGt1KHIpKSkpLHQuZz1vLmEsdC5nKSl9ZnVuY3Rpb24gRnluKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZighbi5kYygpKXtmb3IoZD0wLEY9MCxyPW4uS2MoKSxWPXUoci5QYigpLDE5KS5hO2Q8ZS5mOyl7aWYoZD09ViYmKEY9MCxyLk9iKCk/Vj11KHIuUGIoKSwxOSkuYTpWPWUuZisxKSxkIT1GKXtmb3IodHQ9dShGZSh0LmIsZCksMjkpLEg9dShGZSh0LmIsRiksMjkpLFk9R3YodHQuYSksTT1uZXcgUyhZKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxMCksb3koQyxILmEuYy5sZW5ndGgsSCksRj09MClmb3IoaD1HdihqbyhDKSksbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksZHcocywhMCksSnQodCwoc2UoKSx4TyksKEZuKCksITApKSxqbGUodCxzLDEpfSsrRiwrK2R9Zm9yKHc9bmV3IGhhKHQuYiwwKTt3LmI8dy5kLmdjKCk7KWs9KFFuKHcuYjx3LmQuZ2MoKSksdSh3LmQuWGIody5jPXcuYisrKSwyOSkpLGsuYS5jLmxlbmd0aD09MCYmRWwodyl9fWZ1bmN0aW9uIEJ5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKGg9ZS5iLEM9aC5vLHc9aC5kLHI9WHQoeWUoRnooaCwoVGUoKSx4ZikpKSkscz1YdCh5ZShGeihoLEI2KSkpLGs9WHQoeWUoRnooaCxlaHQpKSksZD1uZXcgVnR0LEF2dChkLHcuZCx3LmMsdy5hLHcuYiksRj1adm4oZSxyLHMsayksZ3Q9bmV3IFMoZS5kKTtndC5hPGd0LmMuYy5sZW5ndGg7KXtmb3IodHQ9dShKKGd0KSwxMDEpLFY9dHQuZi5hLmVjKCkuS2MoKTtWLk9iKCk7KUg9dShWLlBiKCksNDA5KSxvPUguYSxNPUhkbihIKSxuPShMdD1uZXcgRHUsbGFlKEgsSC5jLEYsTHQpLHAwbihILE0sRixMdCksbGFlKEgsSC5kLEYsTHQpLEx0KSxuPXQuVWYoSCxNLG4pLF9oKG8uYSksVWEoby5hLG4pLHVzKG5ldyBUbihudWxsLG5ldyBfbihuLDE2KSksbmV3IEtHdChDLGQpKTtZPXR0LmksWSYmKElkbih0dCxZLEYscyksX3Q9bmV3IHlvKFkuZyksQTN0KEMsZCxfdCksTGkoX3QsWS5qKSxBM3QoQyxkLF90KSl9QXZ0KHcsZC5kLGQuYyxkLmEsZC5iKX1mdW5jdGlvbiBSeW4odCxlLG4pe3ZhciByLHMsbztpZihzPXUoUShlLChUZSgpLEtHKSksMjc1KSxzIT0oZ0UoKSxiUykpe3N3aXRjaCh3cihuLCJIb3Jpem9udGFsIENvbXBhY3Rpb24iLDEpLHQuYT1lLG89bmV3IEJ0ZSxyPW5ldyBGb2UoKG8uZD1lLG8uYz11KFEoby5kLFgwKSwyMTgpLGp2bihvKSxNM24obyksVXZuKG8pLG8uYSkpLEJLZShyLHQuYiksdShRKGUsTjl0KSw0MjIpLmcpe2Nhc2UgMTplSHQocixuZXcgWmVlKHQuYSkpO2JyZWFrO2RlZmF1bHQ6ZUh0KHIsKEF3dCgpLEdnZSkpfXN3aXRjaChzLmcpe2Nhc2UgMTpwXyhyKTticmVhaztjYXNlIDI6cF8oX3EociwoYW8oKSxrZikpKTticmVhaztjYXNlIDM6cF8odEh0KF9xKHBfKHIpLChhbygpLGtmKSksbmV3IGpUKSk7YnJlYWs7Y2FzZSA0OnBfKHRIdChfcShwXyhyKSwoYW8oKSxrZikpLG5ldyB6ZChvKSkpO2JyZWFrO2Nhc2UgNTpwXyhGS2UocixLYmUpKX1fcShyLChhbygpLGpoKSksci5lPSEwLGQ0bihvKSxvcihuKX19ZnVuY3Rpb24ganluKHQsZSxuLHIscyxvLGgsZCl7dmFyIHcsayxDLE07c3dpdGNoKHc9XzEoY3Qob3QodnhuLDEpLEllLDIyMCwwLFtlLG4scixzXSkpLE09bnVsbCx0LmIuZyl7Y2FzZSAxOk09XzEoY3Qob3QoRF90LDEpLEllLDUyNiwwLFtuZXcgV1QsbmV3IFVULG5ldyBOTF0pKTticmVhaztjYXNlIDA6TT1fMShjdChvdChEX3QsMSksSWUsNTI2LDAsW25ldyBOTCxuZXcgVVQsbmV3IFdUXSkpO2JyZWFrO2Nhc2UgMjpNPV8xKGN0KG90KERfdCwxKSxJZSw1MjYsMCxbbmV3IFVULG5ldyBXVCxuZXcgTkxdKSl9Zm9yKEM9bmV3IFMoTSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksNTI2KSx3LmMubGVuZ3RoPjEmJih3PWsubWcodyx0LmEsZCkpO3JldHVybiB3LmMubGVuZ3RoPT0xP3UoRmUodyx3LmMubGVuZ3RoLTEpLDIyMCk6dy5jLmxlbmd0aD09Mj9DeW4oKEFuKDAsdy5jLmxlbmd0aCksdSh3LmNbMF0sMjIwKSksKEFuKDEsdy5jLmxlbmd0aCksdSh3LmNbMV0sMjIwKSksaCxvKTpudWxsfWZ1bmN0aW9uIE5sZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG11KHQuYSxuZXcgeGkpLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyMjEpLHI9bmEobmModSh0LmIsNjUpLmMpLHUoZS5iLDY1KS5jKSxMcGU/KGg9dSh0LmIsNjUpLmIsbz11KGUuYiw2NSkuYixiLk1hdGguYWJzKHIuYSk+PWIuTWF0aC5hYnMoci5iKT8oci5iPTAsby5kK28uYT5oLmQmJm8uZDxoLmQraC5hJiZBaihyLGIuTWF0aC5tYXgoaC5jLShvLmMrby5iKSxvLmMtKGguYytoLmIpKSkpOihyLmE9MCxvLmMrby5iPmguYyYmby5jPGguYytoLmImJkFqKHIsYi5NYXRoLm1heChoLmQtKG8uZCtvLmEpLG8uZC0oaC5kK2guYSkpKSkpOkFqKHIsdWxlKHUodC5iLDY1KSx1KGUuYiw2NSkpKSxzPWIuTWF0aC5zcXJ0KHIuYSpyLmErci5iKnIuYikscz1zYWUoY1MsZSxzLHIpLEFqKHIscyksSW50KHUoZS5iLDY1KSxyKSxtdShlLmEsbmV3IEpyKHIpKSx1KGNTLmIsNjUpLHhtdChjUyxlN3QsZSl9ZnVuY3Rpb24gJHluKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHQuZj1uZXcgR3R0LGs9MCxzPTAsaD1uZXcgUyh0LmUuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihkPXUoSih3KSwxMCksZC5wPWsrKyxyPW5ldyBhcihscihNcyhkKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDE3KSxuLnA9cysrO2ZvcihlPXhhdChkKSxGPW5ldyBTKGQuaik7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTEpLGUmJihWPU0uYS5iLFYhPWIuTWF0aC5mbG9vcihWKSYmKEM9Vi1WdihrdShiLk1hdGgucm91bmQoVikpKSxNLmEuYi09QykpLEg9TS5uLmIrTS5hLmIsSCE9Yi5NYXRoLmZsb29yKEgpJiYoQz1ILVZ2KGt1KGIuTWF0aC5yb3VuZChIKSkpLE0ubi5iLT1DKX10Lmc9ayx0LmI9cyx0Lmk9UHQoZ3huLEllLDQwMSxrLDAsMSksdC5jPVB0KGR4bixJZSw2NDkscywwLDEpLHQuZC5hLiRiKCl9ZnVuY3Rpb24geHIodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO2lmKHQuZWooKSlpZih3PXQuZmooKSx0Lmk+MCl7aWYoZT1uZXcgWWJ0KHQuaSx0LmcpLG49dC5pLG89bjwxMDA/bnVsbDpuZXcgU3AobiksdC5paigpKWZvcihyPTA7cjx0Lmk7KytyKWg9dC5nW3JdLG89dC5raihoLG8pO2lmKFJDKHQpLHM9bj09MT90LlppKDQsU3QoZSwwKSxudWxsLDAsdyk6dC5aaSg2LGUsbnVsbCwtMSx3KSx0LmJqKCkpe2ZvcihyPW5ldyBNeChlKTtyLmUhPXIuaS5nYygpOylvPXQuZGoobnN0KHIpLG8pO28/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpfWVsc2Ugbz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyl9ZWxzZSBSQyh0KSx0LiRpKHQuWmkoNiwodm4oKSxpbyksbnVsbCwtMSx3KSk7ZWxzZSBpZih0LmJqKCkpaWYodC5pPjApe2ZvcihkPXQuZyxrPXQuaSxSQyh0KSxvPWs8MTAwP251bGw6bmV3IFNwKGspLHI9MDtyPGs7KytyKWg9ZFtyXSxvPXQuZGooaCxvKTtvJiZvLkZpKCl9ZWxzZSBSQyh0KTtlbHNlIFJDKHQpfWZ1bmN0aW9uIGh4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKE9uZSh0aGlzKSxuPT0ocXYoKSxiYik/TnModGhpcy5yLHQpOk5zKHRoaXMudyx0KSxDPXNzLGs9VHMsaD1lLmEuZWMoKS5LYygpO2guT2IoKTspcz11KGguUGIoKSw0NiksZD11KHMuYSw0NTUpLHI9dShzLmIsMTcpLHc9ci5jLHc9PXQmJih3PXIuZCksZD09YmI/TnModGhpcy5yLHcpOk5zKHRoaXMudyx3KSxGPShiZSgpLF91KS5IYyh3LmopP1h0KHllKFEodywoc2UoKSxnNykpKSk6S28oY3Qob3QoVXMsMSksdGUsOCwwLFt3Lmkubix3Lm4sdy5hXSkpLmIsQz1iLk1hdGgubWluKEMsRiksaz1iLk1hdGgubWF4KGssRik7Zm9yKE09KGJlKCksX3UpLkhjKHQuaik/WHQoeWUoUSh0LChzZSgpLGc3KSkpKTpLbyhjdChvdChVcywxKSx0ZSw4LDAsW3QuaS5uLHQubix0LmFdKSkuYixTYWUodGhpcyxNLEMsayksbz1lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSw0NiksQmFlKHRoaXMsdShzLmIsMTcpKTt0aGlzLm89ITF9ZnVuY3Rpb24genluKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocjtyZXR1cm4gbj10LmwmODE5MSxyPXQubD4+MTN8KHQubSYxNSk8PDkscz10Lm0+PjQmODE5MSxvPXQubT4+MTd8KHQuaCYyNTUpPDw1LGg9KHQuaCYxMDQ4MzIwKT4+OCxkPWUubCY4MTkxLHc9ZS5sPj4xM3woZS5tJjE1KTw8OSxrPWUubT4+NCY4MTkxLEM9ZS5tPj4xN3woZS5oJjI1NSk8PDUsTT0oZS5oJjEwNDgzMjApPj44LFdlPW4qZCxRZT1yKmQsUm49cypkLHpuPW8qZCxocj1oKmQsdyE9MCYmKFFlKz1uKncsUm4rPXIqdyx6bis9cyp3LGhyKz1vKncpLGshPTAmJihSbis9biprLHpuKz1yKmssaHIrPXMqayksQyE9MCYmKHpuKz1uKkMsaHIrPXIqQyksTSE9MCYmKGhyKz1uKk0pLEg9V2UmdWwsVj0oUWUmNTExKTw8MTMsRj1IK1YsdHQ9V2U+PjIyLGd0PVFlPj45LEx0PShSbiYyNjIxNDMpPDw0LF90PSh6biYzMSk8PDE3LFk9dHQrZ3QrTHQrX3QsWXQ9Um4+PjE4LGNlPXpuPj41LFNlPShociY0MDk1KTw8OCxCdD1ZdCtjZStTZSxZKz1GPj4yMixGJj11bCxCdCs9WT4+MjIsWSY9dWwsQnQmPVcwLHJ1KEYsWSxCdCl9ZnVuY3Rpb24gUGxlKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGQ9dShGZSh0LmosMCksMTEpLGQuZy5jLmxlbmd0aCE9MCYmZC5lLmMubGVuZ3RoIT0wKXRocm93IHJ0KG5ldyBGbygiSW50ZXJhY3RpdmUgbGF5b3V0IGRvZXMgbm90IHN1cHBvcnQgTk9SVEgvU09VVEggcG9ydHMgd2l0aCBpbmNvbWluZyBfYW5kXyBvdXRnb2luZyBlZGdlcy4iKSk7aWYoZC5nLmMubGVuZ3RoIT0wKXtmb3Iobz1zcyxuPW5ldyBTKGQuZyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9ZS5kLmkscj11KFEoaCwoVGUoKSxlVikpLDE0Miksbz1iLk1hdGgubWluKG8saC5uLmEtci5iKTtyZXR1cm4gbmV3IGprKEFyKG8pKX1pZihkLmUuYy5sZW5ndGghPTApe2ZvcihzPVRzLG49bmV3IFMoZC5lKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNyksaD1lLmMuaSxyPXUoUShoLChUZSgpLGVWKSksMTQyKSxzPWIuTWF0aC5tYXgocyxoLm4uYStoLm8uYStyLmMpO3JldHVybiBuZXcgamsoQXIocykpfXJldHVybiBJOSgpLEk5KCksZ3V0fWZ1bmN0aW9uIEZsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHQuRmsoKSl7aWYodC5pPjQpaWYodC53aihlKSl7aWYodC5yaygpKXtpZihzPXUoZSw0OSkscj1zLlVnKCksdz1yPT10LmUmJih0LkRrKCk/cy5PZyhzLlZnKCksdC56aygpKT09dC5BaygpOi0xLXMuVmcoKT09dC5haigpKSx0LkVrKCkmJiF3JiYhciYmcy5aZygpKXtmb3Iobz0wO288dC5pOysrbylpZihuPXQuR2sodSh0Lmdbb10sNTYpKSxHdChuKT09PUd0KGUpKXJldHVybiEwfXJldHVybiB3fWVsc2UgaWYodC5EaygpJiYhdC5DaygpKXtpZihoPXUoZSw1NikuYWgobm8odSh0LmFrKCksMTgpKSksR3QoaCk9PT1HdCh0LmUpKXJldHVybiEwO2lmKGg9PW51bGx8fCF1KGgsNTYpLmtoKCkpcmV0dXJuITF9fWVsc2UgcmV0dXJuITE7aWYoZD1mRSh0LGUpLHQuRWsoKSYmIWQpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9dC5Hayh1KHQuZ1tvXSw1NikpLEd0KHMpPT09R3QoZSkpcmV0dXJuITB9cmV0dXJuIGR9ZWxzZSByZXR1cm4gZkUodCxlKX1mdW5jdGlvbiBxeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGO2ZvcihDPW5ldyBsZSxGPW5ldyBxcyxoPWUuYixzPTA7czxoLmMubGVuZ3RoO3MrKyl7Zm9yKGs9KEFuKHMsaC5jLmxlbmd0aCksdShoLmNbc10sMjkpKS5hLEMuYz1QdChYbixJZSwxLDAsNSwxKSxvPTA7bzxrLmMubGVuZ3RoO28rKylkPXQuYVtzXVtvXSxkLnA9byxkLms9PShHbigpLEhjKSYmKEMuY1tDLmMubGVuZ3RoXT1kKSxhaCh1KEZlKGUuYixzKSwyOSkuYSxvLGQpLGQuai5jPVB0KFhuLEllLDEsMCw1LDEpLEFzKGQuaix1KHUoRmUodC5iLHMpLDE1KS5YYihvKSwxNCkpLER4KHUoUShkLChUZSgpLG9zKSksOTgpKXx8SnQoZCxvcywob2EoKSxHMikpO2ZvcihyPW5ldyBTKEMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxNPWx3bihuKSxGLmEuemMoTSxGKSxGLmEuemMobixGKX1mb3Iodz1GLmEuZWMoKS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMCksdm4oKSxYcyhkLmosKEo4KCksdlR0KSksZC5pPSEwLFg0dChkKX1mdW5jdGlvbiBIeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTTtpZihDPXUoUSh0LChzZSgpLG9jKSksNjEpLHI9dShGZSh0LmosMCksMTEpLEM9PShiZSgpLE5uKT9GcyhyLG1yKTpDPT1tciYmRnMocixObiksdShRKGUsKFRlKCksRjIpKSwxNzQpLkhjKChfbCgpLFYyKSkpe2lmKHc9WHQoeWUoUSh0LG03KSkpLGs9WHQoeWUoUSh0LHk3KSkpLGg9WHQoeWUoUSh0LEd5KSkpLGQ9dShRKGUscXkpLDIxKSxkLkhjKChRdSgpLHRnKSkpZm9yKG49ayxNPXQuby5hLzItci5uLmEsbz1uZXcgUyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDcwKSxzLm4uYj1uLHMubi5hPU0tcy5vLmEvMixuKz1zLm8uYitoO2Vsc2UgaWYoZC5IYyh4YikpZm9yKG89bmV3IFMoci5mKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw3MCkscy5uLmE9dyt0Lm8uYS1yLm4uYTtoaW4obmV3IHRyKCh6OSgpLG5ldyB0cnQoZSwhMSwhMSxuZXcgWVApKSksbmV3IENqKG51bGwsdCwhMSkpfX1mdW5jdGlvbiBHeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYoZS5jLmxlbmd0aCE9MCl7Zm9yKHZuKCksTG50KGUuYyxlLmMubGVuZ3RoLG51bGwpLHM9bmV3IFMoZSkscj11KEoocyksMTQ1KTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSwxNDUpLGptdChyLmUuYyxuLmUuYykmJiEoQzN0KENXdChyLmUpLmIsbi5lLmQpfHxDM3QoQ1d0KG4uZSkuYixyLmUuZCkpP3I9KEFzKHIuayxuLmspLEFzKHIuYixuLmIpLEFzKHIuYyxuLmMpLFVhKHIuaSxuLmkpLEFzKHIuZCxuLmQpLEFzKHIuaixuLmopLG89Yi5NYXRoLm1pbihyLmUuYyxuLmUuYyksaD1iLk1hdGgubWluKHIuZS5kLG4uZS5kKSxkPWIuTWF0aC5tYXgoci5lLmMrci5lLmIsbi5lLmMrbi5lLmIpLHc9ZC1vLGs9Yi5NYXRoLm1heChyLmUuZCtyLmUuYSxuLmUuZCtuLmUuYSksQz1rLWgsUkt0KHIuZSxvLGgsdyxDKSxzaW4oci5mLG4uZiksIXIuYSYmKHIuYT1uLmEpLEFzKHIuZyxuLmcpLHVlKHIuZyxuKSxyKToodGxlKHQscikscj1uKTt0bGUodCxyKX19ZnVuY3Rpb24gVnluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsaztpZihkPXQuaixkPT0oYmUoKSxabykmJmUhPShvYSgpLEgxKSYmZSE9KG9hKCkseWIpJiYoZD1LdWUodCxuKSxGcyh0LGQpLCEodC5xP3QucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksenkpKSYmZCE9Wm8mJih0Lm4uYSE9MHx8dC5uLmIhPTApJiZKdCh0LHp5LHUxbih0LGQpKSksZT09KG9hKCksaDApKXtzd2l0Y2goaz0wLGQuZyl7Y2FzZSAxOmNhc2UgMzpvPXQuaS5vLmEsbz4wJiYoaz10Lm4uYS9vKTticmVhaztjYXNlIDI6Y2FzZSA0OnM9dC5pLm8uYixzPjAmJihrPXQubi5iL3MpfUp0KHQsKHNlKCksRHcpLGspfWlmKHc9dC5vLGg9dC5hLHIpaC5hPXIuYSxoLmI9ci5iLHQuZD0hMDtlbHNlIGlmKGUhPUgxJiZlIT15YiYmZCE9Wm8pc3dpdGNoKGQuZyl7Y2FzZSAxOmguYT13LmEvMjticmVhaztjYXNlIDI6aC5hPXcuYSxoLmI9dy5iLzI7YnJlYWs7Y2FzZSAzOmguYT13LmEvMixoLmI9dy5iO2JyZWFrO2Nhc2UgNDpoLmI9dy5iLzJ9ZWxzZSBoLmE9dy5hLzIsaC5iPXcuYi8yfWZ1bmN0aW9uIENfKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2lmKHQuZWooKSlpZihDPXQuVmkoKSx3PXQuZmooKSxDPjApaWYoZT1uZXcgb3l0KHQuR2koKSksbj1DLG89bjwxMDA/bnVsbDpuZXcgU3Aobiksak0odCxuLGUuZykscz1uPT0xP3QuWmkoNCxTdChlLDApLG51bGwsMCx3KTp0LlppKDYsZSxudWxsLC0xLHcpLHQuYmooKSl7Zm9yKHI9bmV3IGVyKGUpO3IuZSE9ci5pLmdjKCk7KW89dC5kaihkcihyKSxvKTtvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKX1lbHNlIG8/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpO2Vsc2Ugak0odCx0LlZpKCksdC5XaSgpKSx0LiRpKHQuWmkoNiwodm4oKSxpbyksbnVsbCwtMSx3KSk7ZWxzZSBpZih0LmJqKCkpaWYoQz10LlZpKCksQz4wKXtmb3IoZD10LldpKCksaz1DLGpNKHQsQyxkKSxvPWs8MTAwP251bGw6bmV3IFNwKGspLHI9MDtyPGs7KytyKWg9ZFtyXSxvPXQuZGooaCxvKTtvJiZvLkZpKCl9ZWxzZSBqTSh0LHQuVmkoKSx0LldpKCkpO2Vsc2Ugak0odCx0LlZpKCksdC5XaSgpKX1mdW5jdGlvbiBVeW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMjMzKSxvLmU9bnVsbCxvLmM9MDtmb3Iodz1udWxsLGg9bmV3IFMoZSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMjMzKSxNPW8uZFswXSwhKG4mJk0uayE9KEduKCksRHMpKSl7Zm9yKEg9dShRKE0sKHNlKCksSTYpKSwxNSkuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMTApLCghbnx8Ri5rPT0oR24oKSxEcykpJiYoKCFvLmUmJihvLmU9bmV3IGxlKSxvLmUpLkZjKHQuYltGLmMucF1bRi5wXSksKyt0LmJbRi5jLnBdW0YucF0uYyk7aWYoIW4mJk0uaz09KEduKCksRHMpKXtpZih3KWZvcihDPXUoQWkodC5kLHcpLDIxKS5LYygpO0MuT2IoKTspZm9yKGs9dShDLlBiKCksMTApLHM9dShBaSh0LmQsTSksMjEpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxpdG4odC5iW2suYy5wXVtrLnBdKS5GYyh0LmJbci5jLnBdW3IucF0pLCsrdC5iW3IuYy5wXVtyLnBdLmM7dz1NfX19ZnVuY3Rpb24gV3luKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihuPTAsQz1uZXcgbGUsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyl7c3dpdGNoKGg9dShKKGQpLDExKSxCeXQodC5iLHQuZFtoLnBdKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSksaC5pLmsuZyl7Y2FzZSAwOnI9dShRKGgsKHNlKCksWnUpKSwxMCksbXUoci5qLG5ldyBtJHQoQykpO2JyZWFrO2Nhc2UgMTp2WGUobWl0KFJpKG5ldyBUbihudWxsLG5ldyBfbihoLmkuaiwxNikpLG5ldyB5JHQoaCkpKSxuZXcgeCR0KEMpKTticmVhaztjYXNlIDM6cz11KFEoaCwoc2UoKSxfaSkpLDExKSx1ZShDLG5ldyBsYShzLGRlKGguZS5jLmxlbmd0aCtoLmcuYy5sZW5ndGgpKSl9Zm9yKGs9bmV3IFMoQyk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksNDYpLG89dWJ0KHQsdSh3LmEsMTEpKSxvPnQuZFtoLnBdJiYobis9c210KHQuYixvKSp1KHcuYiwxOSkuYSxxcCh0LmEsZGUobykpKTtmb3IoOyFOOSh0LmEpOylGbXQodC5iLHUoRngodC5hKSwxOSkuYSl9cmV0dXJuIG59ZnVuY3Rpb24gS3luKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3IoTT1uZXcgeW8odShxZSh0LChlcSgpLF9TdCkpLDgpKSxNLmE9Yi5NYXRoLm1heChNLmEtbi5iLW4uYywwKSxNLmI9Yi5NYXRoLm1heChNLmItbi5kLW4uYSwwKSxzPXllKHFlKHQsRVN0KSksKHM9PW51bGx8fChPbihzKSxzPD0wKSkmJihzPTEuMyksZD1uZXcgbGUsVj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtWLmUhPVYuaS5nYygpOylIPXUoZHIoViksMzMpLGg9bmV3IGZXdChIKSxkLmNbZC5jLmxlbmd0aF09aDtzd2l0Y2goRj11KHFlKHQsSmh0KSwzMTEpLEYuZyl7Y2FzZSAzOnR0PWJtbihkLGUsTS5hLE0uYiwoaz1yLE9uKHMpLGspKTticmVhaztjYXNlIDE6dHQ9cW1uKGQsZSxNLmEsTS5iLChDPXIsT24ocyksQykpO2JyZWFrO2RlZmF1bHQ6dHQ9UXluKGQsZSxNLmEsTS5iLCh3PXIsT24ocyksdykpfW89bmV3IFUkKHR0KSxZPU1hdChvLGUsbixNLmEsTS5iLHIsKE9uKHMpLHMpKSxndyh0LFkuYSxZLmIsITEsITApfWZ1bmN0aW9uIFl5bih0LGUpe3ZhciBuLHIscyxvO249ZS5iLG89bmV3IFB1KG4uaikscz0wLHI9bi5qLHIuYz1QdChYbixJZSwxLDAsNSwxKSxCdih1KG8yKHQuYiwoYmUoKSxObiksKEp2KCksQXcpKSwxNSksbikscz1RSShvLHMsbmV3IEFYLHIpLEJ2KHUobzIodC5iLE5uLGhiKSwxNSksbikscz1RSShvLHMsbmV3IHpULHIpLEJ2KHUobzIodC5iLE5uLFN3KSwxNSksbiksQnYodShvMih0LmIsSG4sQXcpLDE1KSxuKSxCdih1KG8yKHQuYixIbixoYiksMTUpLG4pLHM9UUkobyxzLG5ldyBFRixyKSxCdih1KG8yKHQuYixIbixTdyksMTUpLG4pLEJ2KHUobzIodC5iLG1yLEF3KSwxNSksbikscz1RSShvLHMsbmV3IFRGLHIpLEJ2KHUobzIodC5iLG1yLGhiKSwxNSksbikscz1RSShvLHMsbmV3IENGLHIpLEJ2KHUobzIodC5iLG1yLFN3KSwxNSksbiksQnYodShvMih0LmIsQm4sQXcpLDE1KSxuKSxzPVFJKG8scyxuZXcgSVgsciksQnYodShvMih0LmIsQm4saGIpLDE1KSxuKSxCdih1KG8yKHQuYixCbixTdyksMTUpLG4pfWZ1bmN0aW9uIFh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKHdyKGUsIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLEM9c3Msaz1UcyxzPSExLGQ9bmV3IFModC5iKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwyOSksdz1oLmMsdy5hPTAsdy5iPTAsaC5hLmMubGVuZ3RoIT0wKXtmb3Iocz0hMCxGPW5ldyBTKGguYSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLFY9TS5vLEg9TS5kLHcuYT1iLk1hdGgubWF4KHcuYSxWLmErSC5iK0guYyk7cj11KEZlKGguYSwwKSwxMCksWT1yLm4uYi1yLmQuZCxyLms9PShHbigpLHhzKSYmKFktPXUoUSh0LChUZSgpLExPKSksMTQyKS5kKSxvPXUoRmUoaC5hLGguYS5jLmxlbmd0aC0xKSwxMCksbj1vLm4uYitvLm8uYitvLmQuYSxvLms9PXhzJiYobis9dShRKHQsKFRlKCksTE8pKSwxNDIpLmEpLHcuYj1uLVksQz1iLk1hdGgubWluKEMsWSksaz1iLk1hdGgubWF4KGssbil9c3x8KEM9MCxrPTApLHQuZi5iPWstQyx0LmMuYi09QyxvcihlKX1mdW5jdGlvbiBmeHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2ZvcihvPTAsaD0wLGs9bmV3IFModC5hKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMCksbz1iLk1hdGgubWF4KG8sZC5kLmIpLGg9Yi5NYXRoLm1heChoLGQuZC5jKTtmb3Iodz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KXtzd2l0Y2goZD11KEoodyksMTApLG49dShRKGQsKFRlKCksTGQpKSwyNDgpLG4uZyl7Y2FzZSAxOlY9MDticmVhaztjYXNlIDI6Vj0xO2JyZWFrO2Nhc2UgNTpWPS41O2JyZWFrO2RlZmF1bHQ6Zm9yKHI9MCxNPTAsSD1uZXcgUyhkLmopO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDExKSxGLmUuYy5sZW5ndGg9PTB8fCsrcixGLmcuYy5sZW5ndGg9PTB8fCsrTTtyK009PTA/Vj0uNTpWPU0vKHIrTSl9dHQ9dC5jLEM9ZC5vLmEsZ3Q9KHR0LmEtQykqVixWPi41P2d0LT1oKjIqKFYtLjUpOlY8LjUmJihndCs9byoyKiguNS1WKSkscz1kLmQuYixndDxzJiYoZ3Q9cyksWT1kLmQuYyxndD50dC5hLVktQyYmKGd0PXR0LmEtWS1DKSxkLm4uYT1lK2d0fX1mdW5jdGlvbiBReW4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihkPVB0KGlhLHZvLDI1LHQuYy5sZW5ndGgsMTUsMSksRj1uZXcgVmoobmV3IEtGKSxLM3QoRix0KSxrPTAsWT1uZXcgbGU7Ri5iLmMubGVuZ3RoIT0wOylpZihoPXUoRi5iLmMubGVuZ3RoPT0wP251bGw6RmUoRi5iLDApLDE1Nyksaz4xJiZGdShoKSp4bChoKS8yPmRbMF0pe2ZvcihvPTA7bzxZLmMubGVuZ3RoLTEmJkZ1KGgpKnhsKGgpLzI+ZFtvXTspKytvO1Y9bmV3IEtkKFksMCxvKzEpLE09bmV3IFUkKFYpLEM9RnUoaCkveGwoaCksdz1NYXQoTSxlLG5ldyB3eCxuLHIscyxDKSxMaShHZihNLmUpLHcpLE04KGRFKEYsTSkpLEg9bmV3IEtkKFksbysxLFkuYy5sZW5ndGgpLEszdChGLEgpLFkuYz1QdChYbixJZSwxLDAsNSwxKSxrPTAsaFl0KGQsZC5sZW5ndGgsMCl9ZWxzZSB0dD1GLmIuYy5sZW5ndGg9PTA/bnVsbDpGZShGLmIsMCksdHQhPW51bGwmJm9pdChGLDApLGs+MCYmKGRba109ZFtrLTFdKSxkW2tdKz1GdShoKSp4bChoKSwrK2ssWS5jW1kuYy5sZW5ndGhdPWg7cmV0dXJuIFl9ZnVuY3Rpb24gWnluKHQpe3ZhciBlLG4scixzLG87aWYocj11KFEodCwoVGUoKSxjdSkpLDE2Mykscj09KGhoKCksZmIpKXtmb3Iobj1uZXcgYXIobHIoam8odCkuYS5LYygpLG5ldyB6KSk7enIobik7KWlmKGU9dShMcihuKSwxNyksIWtKdChlKSl0aHJvdyBydChuZXcgRjMoUm90K1pJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UuIEZJUlNUX1NFUEFSQVRFIG5vZGVzIG11c3Qgbm90IGhhdmUgaW5jb21pbmcgZWRnZXMuIikpfWVsc2UgaWYocj09Rnkpe2ZvcihvPW5ldyBhcihscihNcyh0KS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KExyKG8pLDE3KSwha0p0KHMpKXRocm93IHJ0KG5ldyBGMyhSb3QrWkkodCkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBMQVNUX1NFUEFSQVRFLCBidXQgaGFzIGF0IGxlYXN0IG9uZSBvdXRnb2luZyBlZGdlLiBMQVNUX1NFUEFSQVRFIG5vZGVzIG11c3Qgbm90IGhhdmUgb3V0Z29pbmcgZWRnZXMuIikpfX1mdW5jdGlvbiBKeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3Iod3IoZSwiTGFiZWwgZHVtbXkgcmVtb3ZhbCIsMSkscj1YdCh5ZShRKHQsKFRlKCksQjYpKSkpLHM9WHQoeWUoUSh0LEd5KSkpLGs9dShRKHQsVmwpLDEwMyksdz1uZXcgUyh0LmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSwyOSksTT1uZXcgaGEoZC5hLDApO00uYjxNLmQuZ2MoKTspQz0oUW4oTS5iPE0uZC5nYygpKSx1KE0uZC5YYihNLmM9TS5iKyspLDEwKSksQy5rPT0oR24oKSxTbCkmJihGPXUoUShDLChzZSgpLF9pKSksMTcpLFY9WHQoeWUoUShGLFVnKSkpLGg9R3QoUShDLEQ2KSk9PT1HdCgoamwoKSx3YikpLG49bmV3IHlvKEMubiksaCYmKG4uYis9VityKSxvPW5ldyAkZShDLm8uYSxDLm8uYi1WLXIpLEg9dShRKEMsVE8pLDE1KSxrPT0oYW8oKSxaMCl8fGs9PVEwP052bihILG4scyxvLGgsayk6cHVuKEgsbixzLG8pLEFzKEYuYixIKSxfYXQoQyxHdChRKHQsWDApKT09PUd0KChxMCgpLFhPKSkpLEVsKE0pKTtvcihlKX1mdW5jdGlvbiB0M24odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0O2Zvcih3PW5ldyBsZSxvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxkPW5ldyBTKHMuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSksQz1udWxsLF90PWdkKGguZyksQnQ9MCxZdD1fdC5sZW5ndGg7QnQ8WXQ7KytCdClMdD1fdFtCdF0sVjgoTHQuZC5pLG4pfHwoZ3Q9RWF0KHQsZSxuLEx0LEx0LmMsKHNvKCksZXUpLEMpLGd0IT1DJiYody5jW3cuYy5sZW5ndGhdPWd0KSxndC5jJiYoQz1ndCkpO2ZvcihrPW51bGwsVj1nZChoLmUpLFk9MCx0dD1WLmxlbmd0aDtZPHR0OysrWSlIPVZbWV0sVjgoSC5jLmksbil8fChndD1FYXQodCxlLG4sSCxILmQsKHNvKCksSnUpLGspLGd0IT1rJiYody5jW3cuYy5sZW5ndGhdPWd0KSxndC5jJiYoaz1ndCkpfWZvcihGPW5ldyBTKHcpO0YuYTxGLmMuYy5sZW5ndGg7KU09dShKKEYpLDQ0MSksUm8oZS5hLE0uYSwwKSE9LTF8fHVlKGUuYSxNLmEpLE0uYyYmKHIuY1tyLmMubGVuZ3RoXT1NKX1mdW5jdGlvbiBlM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2Zvcih3cihuLCJJbnRlcmFjdGl2ZSBjeWNsZSBicmVha2luZyIsMSksTT1uZXcgbGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihGPXUoSihIKSwxMCksRi5wPTEsVj11NHQoRikuYSxDPWl3KEYsKHNvKCksZXUpKS5LYygpO0MuT2IoKTspZm9yKGs9dShDLlBiKCksMTEpLG89bmV3IFMoay5nKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxNyksWT1yLmQuaSxZIT1GJiYodHQ9dTR0KFkpLmEsdHQ8ViYmKE0uY1tNLmMubGVuZ3RoXT1yKSk7Zm9yKGg9bmV3IFMoTSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTcpLGR3KHIsITApO2ZvcihNLmM9UHQoWG4sSWUsMSwwLDUsMSksdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxkLnA+MCYmcWFlKHQsZCxNKTtmb3Iocz1uZXcgUyhNKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksZHcociwhMCk7TS5jPVB0KFhuLEllLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIEJsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztyZXR1cm4gaz0iIixlLmxlbmd0aD09MD90LmRlKE54dCxSYXQsLTEsLTEpOihDPXV5KGUpLGhuKEMuc3Vic3RyKDAsMyksImF0ICIpJiYoQz1DLnN1YnN0cigzKSksQz1DLnJlcGxhY2UoL1xbLio/XF0vZywiIiksaD1DLmluZGV4T2YoIigiKSxoPT0tMT8oaD1DLmluZGV4T2YoIkAiKSxoPT0tMT8oaz1DLEM9IiIpOihrPXV5KEMuc3Vic3RyKGgrMSkpLEM9dXkoQy5zdWJzdHIoMCxoKSkpKToobj1DLmluZGV4T2YoIikiLGgpLGs9Qy5zdWJzdHIoaCsxLG4tKGgrMSkpLEM9dXkoQy5zdWJzdHIoMCxoKSkpLGg9Y2QoQyxFdSg0NikpLGghPS0xJiYoQz1DLnN1YnN0cihoKzEpKSwoQy5sZW5ndGg9PTB8fGhuKEMsIkFub255bW91cyBmdW5jdGlvbiIpKSYmKEM9UmF0KSxkPWRqKGssRXUoNTgpKSxzPXV2dChrLEV1KDU4KSxkLTEpLHc9LTEscj0tMSxvPU54dCxkIT0tMSYmcyE9LTEmJihvPWsuc3Vic3RyKDAscyksdz1pV3Qoay5zdWJzdHIocysxLGQtKHMrMSkpKSxyPWlXdChrLnN1YnN0cihkKzEpKSksdC5kZShvLEMsdyxyKSl9ZnVuY3Rpb24gZHh0KHQsZSxuKXt2YXIgcixzLG8saCxkLHc7aWYoZS5sPT0wJiZlLm09PTAmJmUuaD09MCl0aHJvdyBydChuZXcgcFIoImRpdmlkZSBieSB6ZXJvIikpO2lmKHQubD09MCYmdC5tPT0wJiZ0Lmg9PTApcmV0dXJuIG4mJihvYj1ydSgwLDAsMCkpLHJ1KDAsMCwwKTtpZihlLmg9PUlEJiZlLm09PTAmJmUubD09MClyZXR1cm4gYmxuKHQsbik7aWYodz0hMSxlLmg+PjE5JiYoZT1ZOChlKSx3PSF3KSxoPVpibihlKSxvPSExLHM9ITEscj0hMSx0Lmg9PUlEJiZ0Lm09PTAmJnQubD09MClpZihzPSEwLG89ITAsaD09LTEpdD1yVXQoKE44KCksWjh0KSkscj0hMCx3PSF3O2Vsc2UgcmV0dXJuIGQ9aDV0KHQsaCksdyYmdml0KGQpLG4mJihvYj1ydSgwLDAsMCkpLGQ7ZWxzZSB0Lmg+PjE5JiYobz0hMCx0PVk4KHQpLHI9ITAsdz0hdyk7cmV0dXJuIGghPS0xP2pjbih0LGgsdyxvLG4pOm40dCh0LGUpPDA/KG4mJihvP29iPVk4KHQpOm9iPXJ1KHQubCx0Lm0sdC5oKSkscnUoMCwwLDApKTpId24ocj90OnJ1KHQubCx0Lm0sdC5oKSxlLHcsbyxzLG4pfWZ1bmN0aW9uIFRxKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYodC5lJiZ0LmMuYzx0LmYpdGhyb3cgcnQobmV3IEZvKCJFeHBlY3RlZCAiK3QuZisiIHBoYXNlcyB0byBiZSBjb25maWd1cmVkOyBvbmx5IGZvdW5kICIrdC5jLmMpKTtmb3IoQz11KEhmKHQuZyksOSksSD1IZCh0LmYpLG89QyxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXI9b1tkXSxNPXUod0kodCxyLmcpLDI0NiksTT91ZShILHUocmllKHQsTSksMTIzKSk6SC5jW0guYy5sZW5ndGhdPW51bGw7Zm9yKFY9bmV3IEhzLHVzKFJpKHB1KFJpKG5ldyBUbihudWxsLG5ldyBfbihILDE2KSksbmV3IHBaKSxuZXcgeiR0KGUpKSxuZXcgYlopLG5ldyBxJHQoVikpLFJsKFYsdC5hKSxuPW5ldyBsZSxzPUMsaD0wLHc9cy5sZW5ndGg7aDx3OysraClyPXNbaF0sQXMobixxbmUodCxzJCh1KHdJKFYsci5nKSwyMCkpKSksRj11KEZlKEgsci5nKSwxMjMpLEYmJihuLmNbbi5jLmxlbmd0aF09Rik7cmV0dXJuIEFzKG4scW5lKHQscyQodSh3SShWLENbQy5sZW5ndGgtMV0uZysxKSwyMCkpKSksbn1mdW5jdGlvbiBuM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2Zvcih3cihuLCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksdC5hPTAsdC5iPTAsSD1uZXcgbGUsQz1lLmEuYy5sZW5ndGgsaz1uZXcgUyhlLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSxWcyh3LChzZSgpLFRjKSkmJihDPWIuTWF0aC5tYXgoQyx1KFEodyxUYyksMTkpLmErMSkpO2ZvcihZPW5ldyBTKGUuYSk7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDEwKSxoPVphZSh0LFYsQyksRj1pdyhWLChzbygpLGV1KSkuS2MoKTtGLk9iKCk7KWZvcihNPXUoRi5QYigpLDExKSxvPW5ldyBTKE0uZyk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTcpLHR0PXIuZC5pLGQ9WmFlKHQsdHQsQyksZDxoJiYoSC5jW0guYy5sZW5ndGhdPXIpO2ZvcihzPW5ldyBTKEgpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxkdyhyLCEwKSxKdChlLChzZSgpLHhPKSwoRm4oKSwhMCkpO0guYz1QdChYbixJZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiByM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdztpZighKHQuZz5lLmZ8fGUuZz50LmYpKXtmb3Iobj0wLHI9MCxoPXQudy5hLmVjKCkuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYixlLmcsZS5mKSYmKytuO2ZvcihkPXQuci5hLmVjKCkuS2MoKTtkLk9iKCk7KXM9dShkLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYixlLmcsZS5mKSYmLS1uO2Zvcih3PWUudy5hLmVjKCkuS2MoKTt3Lk9iKCk7KXM9dSh3LlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYix0LmcsdC5mKSYmKytyO2ZvcihvPWUuci5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTEpLExpdChLbyhjdChvdChVcywxKSx0ZSw4LDAsW3MuaS5uLHMubixzLmFdKSkuYix0LmcsdC5mKSYmLS1yO248cj9uZXcgUyQodCxlLHItbik6cjxuP25ldyBTJChlLHQsbi1yKToobmV3IFMkKGUsdCwwKSxuZXcgUyQodCxlLDApKX19ZnVuY3Rpb24gaTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdDtmb3Ioaz1lLmMscz1hMnQodC5lKSxNPXVkKEJNKG5jKHMydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksbj1zLmEtTS5hLHI9cy5iLU0uYixoPWUuYSxuPWguYy1uLHI9aC5kLXIsdz1uZXcgUyhrKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGQ9dShKKHcpLDM5NSksRj1kLmIsSD1uK0YuYSx0dD1yK0YuYixWPXBzKEgvdC5hKSxndD1wcyh0dC90LmIpLG89ZC5hLG8uZyl7Y2FzZSAwOkM9KG42KCksY08pO2JyZWFrO2Nhc2UgMTpDPShuNigpLG9PKTticmVhaztjYXNlIDI6Qz0objYoKSx1Tyk7YnJlYWs7ZGVmYXVsdDpDPShuNigpLGxPKX1vLmE/KEx0PXBzKCh0dCtkLmMpL3QuYiksdWUodC5mLG5ldyB2dnQoQyxkZShndCksZGUoTHQpKSksbz09KHNfKCksZk8pP1g4KHQsMCxndCxWLEx0KTpYOCh0LFYsZ3QsdC5kLTEsTHQpKTooWT1wcygoSCtkLmMpL3QuYSksdWUodC5mLG5ldyB2dnQoQyxkZShWKSxkZShZKSkpLG89PShzXygpLGhPKT9YOCh0LFYsMCxZLGd0KTpYOCh0LFYsZ3QsWSx0LmMtMSkpfX1mdW5jdGlvbiBzM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihGPW5ldyBsZSxzPW5ldyBsZSxZPW51bGwsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDE5KSxvPW5ldyBUcChoLmEpLHMuY1tzLmMubGVuZ3RoXT1vLFkmJihvLmQ9WSxZLmU9byksWT1vO2ZvcihfdD1EbW4odCksQz0wO0M8cy5jLmxlbmd0aDsrK0Mpe2ZvcihIPW51bGwsdHQ9d210KChBbigwLHMuYy5sZW5ndGgpLHUocy5jWzBdLDY1MikpKSxuPW51bGwscj1zcyxNPTE7TTx0LmIuYy5sZW5ndGg7KytNKWd0PXR0P2IuTWF0aC5hYnModHQuYi1NKTpiLk1hdGguYWJzKE0tSC5iKSsxLFY9SD9iLk1hdGguYWJzKE0tSC5iKTpndCsxLFY8Z3Q/KGs9SCx3PVYpOihrPXR0LHc9Z3QpLEx0PShCdD1YdCh5ZShRKHQsKFRlKCksd0N0KSkpKSxfdFtNXStiLk1hdGgucG93KHcsQnQpKSxMdDxyJiYocj1MdCxuPWssbi5jPU0pLHR0JiZNPT10dC5iJiYoSD10dCx0dD1yZW4odHQpKTtuJiYodWUoRixkZShuLmMpKSxuLmE9ITAsVXVuKG4pKX1yZXR1cm4gdm4oKSxMbnQoRi5jLEYuYy5sZW5ndGgsbnVsbCksRn1mdW5jdGlvbiBhM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEM7Zm9yKGU9bmV3IHFiLG49bmV3IHFiLGs9aG4oWkQsKHM9bV8odC5iLEtyKSxzP0JyKFlmKCghcy5iJiYocy5iPW5ldyB5bCgoZG4oKSxRYSksY2MscykpLHMuYiksTmgpKTpudWxsKSksdz0wO3c8dC5pOysrdylkPXUodC5nW3ddLDE3MCksRXQoZCw5OSk/KGg9dShkLDE4KSxoLkJiJmRjPyghKGguQmImYmQpfHwhayYmKG89bV8oaCxLciksKG8/QnIoWWYoKCFvLmImJihvLmI9bmV3IHlsKChkbigpLFFhKSxjYyxvKSksby5iKSxtSCkpOm51bGwpPT1udWxsKSkmJk1yKGUsaCk6KEM9bm8oaCksQyYmQy5CYiZkY3x8KCEoaC5CYiZiZCl8fCFrJiYocj1tXyhoLEtyKSwocj9CcihZZigoIXIuYiYmKHIuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHIpKSxyLmIpLG1IKSk6bnVsbCk9PW51bGwpKSYmTXIobixoKSkpOih0bygpLHUoZCw2NikuT2ooKSYmKGQuSmooKXx8KE1yKGUsZCksTXIobixkKSkpKTtleShlKSxleShuKSx0LmE9dShlLmcsMjQ3KSx1KG4uZywyNDcpfWZ1bmN0aW9uIG8zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7Zm9yKGs9VjBuKGUpLFk9dShRKGUsKFRlKCksRVMpKSwzMTQpLFkhPShZeCgpLFM2KSYmdmEoayxuZXcgZWQpLHR0PXUoUShlLF9PKSwyOTIpLHZhKGssbmV3IGhpKHR0KSksVj0wLEM9bmV3IGxlLG89bmV3IE1DKGspO28uYSE9by5iOylzPXUobXoobyksMzcpLFhsZSh0LmMscyksRj11KFEocywoc2UoKSxSbHQpKSwxNSksVis9Ri5nYygpLHI9Ri5LYygpLHVlKEMsbmV3IGxhKHMscikpO2Zvcih3cihuLCJSZWN1cnNpdmUgaGllcmFyY2hpY2FsIGxheW91dCIsViksSD11KHUoRmUoQyxDLmMubGVuZ3RoLTEpLDQ2KS5iLDQ3KTtILk9iKCk7KWZvcih3PW5ldyBTKEMpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihkPXUoSih3KSw0NiksRj11KGQuYiw0NyksaD11KGQuYSwzNyk7Ri5PYigpOylpZihNPXUoRi5QYigpLDUxKSxFdChNLDUwNykpe2lmKGguZSlicmVhaztNLnBmKGgsUmMobiwxKSk7YnJlYWt9ZWxzZSBNLnBmKGgsUmMobiwxKSk7b3Iobil9ZnVuY3Rpb24gUmxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07aWYodz1lLmxlbmd0aC0xLGQ9KFJyKHcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh3KSksZD09OTMpe2lmKGg9Y2QoZSxFdSg5MSkpLGg+PTApcmV0dXJuIHM9Y2xuKHQsZS5zdWJzdHIoMSxoLTEpKSxDPWUuc3Vic3RyKGgrMSx3LShoKzEpKSxyNW4odCxDLHMpfWVsc2V7aWYobj0tMSxyRXQ9PW51bGwmJihyRXQ9bmV3IFJlZ0V4cCgiXFxkIikpLHJFdC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpJiYobj11dnQoZSxFdSg0Niksdy0xKSxuPj0wKSl7cj11KFBydCh0LGdlZSh0LGUuc3Vic3RyKDEsbi0xKSksITEpLDU4KSxrPTA7dHJ5e2s9JGwoZS5zdWJzdHIobisxKSxfYSx2aSl9Y2F0Y2goRil7dGhyb3cgRj1XaShGKSxFdChGLDEyNyk/KG89RixydChuZXcgRiQobykpKTpydChGKX1pZihrPHIuZ2MoKSlyZXR1cm4gTT1yLlhiKGspLEV0KE0sNzIpJiYoTT11KE0sNzIpLmRkKCkpLHUoTSw1Nil9aWYobjwwKXJldHVybiB1KFBydCh0LGdlZSh0LGUuc3Vic3RyKDEpKSwhMSksNTYpfXJldHVybiBudWxsfWZ1bmN0aW9uIEU0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYoVmkoZSxuKT49MClyZXR1cm4gbjtzd2l0Y2goJHYoRW8odCxuKSkpe2Nhc2UgMjp7aWYoaG4oIiIsT2codCxuLkhqKCkpLm5lKCkpKXtpZih3PVpNKEVvKHQsbikpLGQ9azgoRW8odCxuKSksQz13NXQodCxlLHcsZCksQylyZXR1cm4gQztmb3Iocz1WNXQodCxlKSxoPTAsTT1zLmdjKCk7aDxNOysraClpZihDPXUocy5YYihoKSwxNzApLF81dChqbnQoRW8odCxDKSksdykpcmV0dXJuIEN9cmV0dXJuIG51bGx9Y2FzZSA0OntpZihobigiIixPZyh0LG4uSGooKSkubmUoKSkpe2ZvcihyPW47cjtyPWlpbihFbyh0LHIpKSlpZihrPVpNKEVvKHQscikpLGQ9azgoRW8odCxyKSksQz1tNXQodCxlLGssZCksQylyZXR1cm4gQztpZih3PVpNKEVvKHQsbikpLGhuKEwyLHcpKXJldHVybiBhNHQodCxlKTtmb3Iobz1vYXQodCxlKSxoPTAsTT1vLmdjKCk7aDxNOysraClpZihDPXUoby5YYihoKSwxNzApLF81dChqbnQoRW8odCxDKSksdykpcmV0dXJuIEN9cmV0dXJuIG51bGx9ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDO2lmKG4uZ2MoKT09MClyZXR1cm4hMTtpZihkPSh0bygpLHUoZSw2NikuT2ooKSksbz1kP246bmV3IEt2KG4uZ2MoKSksVjAodC5lLGUpKXtpZihlLmhpKCkpZm9yKGs9bi5LYygpO2suT2IoKTspdz1rLlBiKCksbXEodCxlLHcsRXQoZSw5OSkmJih1KGUsMTgpLkJiJllhKSE9MCl8fChzPVlkKGUsdyksby5IYyhzKXx8by5GYyhzKSk7ZWxzZSBpZighZClmb3Ioaz1uLktjKCk7ay5PYigpOyl3PWsuUGIoKSxzPVlkKGUsdyksby5GYyhzKX1lbHNle2lmKG4uZ2MoKT4xKXRocm93IHJ0KG5ldyBQbihlTykpO2ZvcihDPWF1KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSxDLnJsKHMuYWsoKSkpe2lmKG4uSGMoZD9zOnMuZGQoKSkpcmV0dXJuITE7Zm9yKGs9bi5LYygpO2suT2IoKTspdz1rLlBiKCksdSh1NCh0LGgsZD91KHcsNzIpOllkKGUsdykpLDcyKTtyZXR1cm4hMH1kfHwocz1ZZChlLG4uS2MoKS5QYigpKSxvLkZjKHMpKX1yZXR1cm4gcnModCxvKX1mdW5jdGlvbiB1M24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7Zm9yKEM9bmV3IFFpLGQ9KGs9bmV3IGIxKHQuYykuYS52YygpLktjKCksbmV3IHYxKGspKTtkLmEuT2IoKTspbz0ocz11KGQuYS5QYigpLDQyKSx1KHMuZGQoKSw0NTgpKSxvLmI9PTAmJmhzKEMsbyxDLmMuYixDLmMpO2Zvcig7Qy5iIT0wOylmb3Iobz11KEMuYj09MD9udWxsOihRbihDLmIhPTApLGNoKEMsQy5hLmEpKSw0NTgpLG8uYT09bnVsbCYmKG8uYT0wKSxyPW5ldyBTKG8uZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjU0KSxuLmIuYT09bnVsbD9uLmIuYT1YdChvLmEpK24uYTplLm89PShFMSgpLGoyKT9uLmIuYT1iLk1hdGgubWluKFh0KG4uYi5hKSxYdChvLmEpK24uYSk6bi5iLmE9Yi5NYXRoLm1heChYdChuLmIuYSksWHQoby5hKStuLmEpLC0tbi5iLmIsbi5iLmI9PTAmJm5pKEMsbi5iKTtmb3IoaD0odz1uZXcgYjEodC5jKS5hLnZjKCkuS2MoKSxuZXcgdjEodykpO2guYS5PYigpOylvPShzPXUoaC5hLlBiKCksNDIpLHUocy5kZCgpLDQ1OCkpLGUuaVtvLmMucF09by5hfWZ1bmN0aW9uIGZjKCl7ZmM9WixqUz1uZXcgR2kobDZ0KSxuZXcgT3MoIkRFUFRIIixkZSgwKSksbVY9bmV3IE9zKCJGQU4iLGRlKDApKSxabWU9bmV3IE9zKEkxZSxkZSgwKSksV3k9bmV3IE9zKCJST09UIiwoRm4oKSwhMSkpLFNodD1uZXcgT3MoIkxFRlRORUlHSEJPUiIsbnVsbCksSm1lPW5ldyBPcygiUklHSFRORUlHSEJPUiIsbnVsbCkseVY9bmV3IE9zKCJMRUZUU0lCTElORyIsbnVsbCksQWh0PW5ldyBPcygiUklHSFRTSUJMSU5HIixudWxsKSxfaHQ9bmV3IE9zKCJEVU1NWSIsITEpLG5ldyBPcygiTEVWRUwiLGRlKDApKSxKQ3Q9bmV3IE9zKCJSRU1PVkFCTEVfRURHRVMiLG5ldyBRaSksTGh0PW5ldyBPcygiWENPT1IiLGRlKDApKSx0X3Q9bmV3IE9zKCJZQ09PUiIsZGUoMCkpLHhWPW5ldyBPcygiTEVWRUxIRUlHSFQiLDApLFJTPW5ldyBPcygiSUQiLCIiKSxrVj1uZXcgT3MoIlBPU0lUSU9OIixkZSgwKSksWWc9bmV3IE9zKCJQUkVMSU0iLDApLGs3PW5ldyBPcygiTU9ESUZJRVIiLDApLEJTPW5ldyBHaShxZmUpLEZPPW5ldyBHaShIZmUpfWZ1bmN0aW9uIGwzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihDPW4rZS5jLmMuYSxIPW5ldyBTKGUuaik7SC5hPEguYy5jLmxlbmd0aDspe2lmKEY9dShKKEgpLDExKSxzPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbRi5pLm4sRi5uLEYuYV0pKSxlLms9PShHbigpLEhjKSYmKGQ9dShRKEYsKHNlKCksX2kpKSwxMSkscy5hPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbZC5pLm4sZC5uLGQuYV0pKS5hLGUubi5hPXMuYSksaD1uZXcgJGUoMCxzLmIpLEYuaj09KGJlKCksSG4pKWguYT1DO2Vsc2UgaWYoRi5qPT1CbiloLmE9bjtlbHNlIGNvbnRpbnVlO2lmKFY9Yi5NYXRoLmFicyhzLmEtaC5hKSwhKFY8PXImJiFnMW4oZSkpKWZvcihvPUYuZy5jLmxlbmd0aCtGLmUuYy5sZW5ndGg+MSxrPW5ldyBTMShGLmIpO1ZvKGsuYSl8fFZvKGsuYik7KXc9dShWbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLE09dy5jPT1GP3cuZDp3LmMsYi5NYXRoLmFicyhLbyhjdChvdChVcywxKSx0ZSw4LDAsW00uaS5uLE0ubixNLmFdKSkuYi1oLmIpPjEmJm52bih0LHcsaCxvLEYpfX1mdW5jdGlvbiBoM24odCl7dmFyIGUsbixyLHMsbyxoO2lmKHM9bmV3IGhhKHQuZSwwKSxyPW5ldyBoYSh0LmEsMCksdC5kKWZvcihuPTA7bjx0LmI7bisrKVFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKyk7ZWxzZSBmb3Iobj0wO248dC5iLTE7bisrKVFuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKyksRWwocyk7Zm9yKGU9WHQoKFFuKHMuYjxzLmQuZ2MoKSkseWUocy5kLlhiKHMuYz1zLmIrKykpKSk7dC5mLWU+d2N0Oyl7Zm9yKG89ZSxoPTA7Yi5NYXRoLmFicyhlLW8pPHdjdDspKytoLGU9WHQoKFFuKHMuYjxzLmQuZ2MoKSkseWUocy5kLlhiKHMuYz1zLmIrKykpKSksUW4oci5iPHIuZC5nYygpKSxyLmQuWGIoci5jPXIuYisrKTtoPHQuYiYmKFFuKHMuYj4wKSxzLmEuWGIocy5jPS0tcy5iKSxBbW4odCx0LmItaCxvLHIscyksUW4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSksUW4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfWlmKCF0LmQpZm9yKG49MDtuPHQuYi0xO24rKylRbihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspLEVsKHMpO3QuZD0hMCx0LmM9ITB9ZnVuY3Rpb24gRGkoKXtEaT1aLGJMdD0oc2J0KCkscGMpLmIsZzVlPXUoU3QoV3QocGMuYiksMCksMzQpLFUyPXUoU3QoV3QocGMuYiksMSksMzQpLGQ1ZT11KFN0KFd0KHBjLmIpLDIpLDM0KSx1NT1wYy5iYix1KFN0KFd0KHBjLmJiKSwwKSwzNCksdShTdChXdChwYy5iYiksMSksMzQpLGw1PXBjLmZiLG9BPXUoU3QoV3QocGMuZmIpLDApLDM0KSx1KFN0KFd0KHBjLmZiKSwxKSwzNCksdShTdChXdChwYy5mYiksMiksMTgpLEd3PXBjLnFiLF81ZT11KFN0KFd0KHBjLnFiKSwwKSwzNCksdShTdChXdChwYy5xYiksMSksMTgpLHUoU3QoV3QocGMucWIpLDIpLDE4KSxnTj11KFN0KFd0KHBjLnFiKSwzKSwzNCkscE49dShTdChXdChwYy5xYiksNCksMzQpLHVBPXUoU3QoV3QocGMucWIpLDYpLDM0KSxjQT11KFN0KFd0KHBjLnFiKSw1KSwxOCkscDVlPXBjLmosYjVlPXBjLmssdjVlPXBjLnEsdzVlPXBjLncsbTVlPXBjLkIseTVlPXBjLkEseDVlPXBjLkMsazVlPXBjLkQsRTVlPXBjLl8sVDVlPXBjLmNiLEM1ZT1wYy5oYn1mdW5jdGlvbiBmM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7dC5jPTAsdC5iPTAscj0yKmUuYy5hLmMubGVuZ3RoKzE7dDpmb3IoTT1uLktjKCk7TS5PYigpOyl7aWYoQz11KE0uUGIoKSwxMSksZD1DLmo9PShiZSgpLE5uKXx8Qy5qPT1tcixIPTAsZCl7aWYoRj11KFEoQywoc2UoKSxadSkpLDEwKSwhRiljb250aW51ZTtIKz1Hdm4odCxyLEMsRil9ZWxzZXtmb3Ioaz1uZXcgUyhDLmcpO2suYTxrLmMuYy5sZW5ndGg7KWlmKHc9dShKKGspLDE3KSxzPXcuZCxzLmkuYz09ZS5jKXt1ZSh0LmEsQyk7Y29udGludWUgdH1lbHNlIEgrPXQuZ1tzLnBdO2ZvcihoPW5ldyBTKEMuZSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTcpLHM9by5jLHMuaS5jPT1lLmMpe3VlKHQuYSxDKTtjb250aW51ZSB0fWVsc2UgSC09dC5nW3MucF19Qy5lLmMubGVuZ3RoK0MuZy5jLmxlbmd0aD4wPyh0LmZbQy5wXT1ILyhDLmUuYy5sZW5ndGgrQy5nLmMubGVuZ3RoKSx0LmM9Yi5NYXRoLm1pbih0LmMsdC5mW0MucF0pLHQuYj1iLk1hdGgubWF4KHQuYix0LmZbQy5wXSkpOmQmJih0LmZbQy5wXT1IKX19ZnVuY3Rpb24gZDNuKHQpe3QuYj1udWxsLHQuYmI9bnVsbCx0LmZiPW51bGwsdC5xYj1udWxsLHQuYT1udWxsLHQuYz1udWxsLHQuZD1udWxsLHQuZT1udWxsLHQuZj1udWxsLHQubj1udWxsLHQuTT1udWxsLHQuTD1udWxsLHQuUT1udWxsLHQuUj1udWxsLHQuSz1udWxsLHQuZGI9bnVsbCx0LmViPW51bGwsdC5nPW51bGwsdC5pPW51bGwsdC5qPW51bGwsdC5rPW51bGwsdC5nYj1udWxsLHQubz1udWxsLHQucD1udWxsLHQucT1udWxsLHQucj1udWxsLHQuJD1udWxsLHQuaWI9bnVsbCx0LlM9bnVsbCx0LlQ9bnVsbCx0LnQ9bnVsbCx0LnM9bnVsbCx0LnU9bnVsbCx0LnY9bnVsbCx0Lnc9bnVsbCx0LkI9bnVsbCx0LkE9bnVsbCx0LkM9bnVsbCx0LkQ9bnVsbCx0LkY9bnVsbCx0Lkc9bnVsbCx0Lkg9bnVsbCx0Lkk9bnVsbCx0Lko9bnVsbCx0LlA9bnVsbCx0Llo9bnVsbCx0LlU9bnVsbCx0LlY9bnVsbCx0Llc9bnVsbCx0Llg9bnVsbCx0Llk9bnVsbCx0Ll89bnVsbCx0LmFiPW51bGwsdC5jYj1udWxsLHQuaGI9bnVsbCx0Lm5iPW51bGwsdC5sYj1udWxsLHQubWI9bnVsbCx0Lm9iPW51bGwsdC5wYj1udWxsLHQuamI9bnVsbCx0LmtiPW51bGwsdC5OPSExLHQuTz0hMX1mdW5jdGlvbiBnM24odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih3cihuLCJHcmFwaCB0cmFuc2Zvcm1hdGlvbiAoIit0LmErIikiLDEpLGg9R3YoZS5hKSxvPW5ldyBTKGUuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjkpLEFzKGgscy5hKTtpZihyPXUoUShlLChUZSgpLGo5dCkpLDQxOSkscj09KFRJKCksTkcpKXN3aXRjaCh1KFEoZSxWbCksMTAzKS5nKXtjYXNlIDI6TkMoZSxoKTticmVhaztjYXNlIDM6bl8oZSxoKTticmVhaztjYXNlIDQ6dC5hPT0ocTgoKSxwTyk/KG5fKGUsaCksQ3J0KGUsaCkpOihDcnQoZSxoKSxuXyhlLGgpKX1lbHNlIGlmKHQuYT09KHE4KCkscE8pKXN3aXRjaCh1KFEoZSxWbCksMTAzKS5nKXtjYXNlIDI6TkMoZSxoKSxDcnQoZSxoKTticmVhaztjYXNlIDM6bl8oZSxoKSxOQyhlLGgpO2JyZWFrO2Nhc2UgNDpOQyhlLGgpLG5fKGUsaCl9ZWxzZSBzd2l0Y2godShRKGUsVmwpLDEwMykuZyl7Y2FzZSAyOk5DKGUsaCksQ3J0KGUsaCk7YnJlYWs7Y2FzZSAzOk5DKGUsaCksbl8oZSxoKTticmVhaztjYXNlIDQ6bl8oZSxoKSxOQyhlLGgpfW9yKG4pfWZ1bmN0aW9uIHAzbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKGs9bmV3IEEwLEM9bmV3IEEwLFY9bmV3IEEwLFk9bmV3IEEwLHc9WHQoeWUoUShlLChUZSgpLEJ3KSkpKSxvPVh0KHllKFEoZSx4ZikpKSxkPW5ldyBTKG4pO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxNPXUoUShoLChzZSgpLG9jKSksNjEpLE09PShiZSgpLE5uKSlmb3IoQy5hLnpjKGgsQykscz1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksTnMoayxyLmMuaSk7ZWxzZSBpZihNPT1tcilmb3IoWS5hLnpjKGgsWSkscz1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksTnMoVixyLmMuaSk7ay5hLmdjKCkhPTAmJihGPW5ldyBHbnQoMixvKSxIPXZ4dChGLGUsayxDLC13LWUuYy5iKSxIPjAmJih0LmE9dysoSC0xKSpvLGUuYy5iKz10LmEsZS5mLmIrPXQuYSkpLFYuYS5nYygpIT0wJiYoRj1uZXcgR250KDEsbyksSD12eHQoRixlLFYsWSxlLmYuYit3LWUuYy5iKSxIPjAmJihlLmYuYis9dysoSC0xKSpvKSl9ZnVuY3Rpb24gQ0UodCxlKXt2YXIgbixyLHMsbztvPXQuRixlPT1udWxsPyh0LkY9bnVsbCxaOCh0LG51bGwpKToodC5GPShPbihlKSxlKSxyPWNkKGUsRXUoNjApKSxyIT0tMT8ocz1lLnN1YnN0cigwLHIpLGNkKGUsRXUoNDYpKT09LTEmJiFobihzLHU2KSYmIWhuKHMsUV8pJiYhaG4ocyxUSCkmJiFobihzLFpfKSYmIWhuKHMsSl8pJiYhaG4ocyx0UykmJiFobihzLGVTKSYmIWhuKHMsblMpJiYocz1FMGUpLG49ZGooZSxFdSg2MikpLG4hPS0xJiYocys9IiIrZS5zdWJzdHIobisxKSksWjgodCxzKSk6KHM9ZSxjZChlLEV1KDQ2KSk9PS0xJiYocj1jZChlLEV1KDkxKSksciE9LTEmJihzPWUuc3Vic3RyKDAscikpLCFobihzLHU2KSYmIWhuKHMsUV8pJiYhaG4ocyxUSCkmJiFobihzLFpfKSYmIWhuKHMsSl8pJiYhaG4ocyx0UykmJiFobihzLGVTKSYmIWhuKHMsblMpPyhzPUUwZSxyIT0tMSYmKHMrPSIiK2Uuc3Vic3RyKHIpKSk6cz1lKSxaOCh0LHMpLHM9PWUmJih0LkY9dC5EKSkpLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBRcyh0LDEsNSxvLGUpKX1mdW5jdGlvbiBiM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2lmKFk9ZS5iLmMubGVuZ3RoLCEoWTwzKSl7Zm9yKEg9UHQoVHIsWHIsMjUsWSwxNSwxKSxNPTAsQz1uZXcgUyhlLmIpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDI5KSxIW00rK109ay5hLmMubGVuZ3RoO2ZvcihGPW5ldyBoYShlLmIsMikscj0xO3I8WS0xO3IrKylmb3Iobj0oUW4oRi5iPEYuZC5nYygpKSx1KEYuZC5YYihGLmM9Ri5iKyspLDI5KSksVj1uZXcgUyhuLmEpLG89MCxkPTAsdz0wO3c8SFtyKzFdO3crKylpZihfdD11KEooViksMTApLHc9PUhbcisxXS0xfHxSNHQodCxfdCxyKzEscikpe2ZvcihoPUhbcl0tMSxSNHQodCxfdCxyKzEscikmJihoPXQuYy5lW3UodSh1KEZlKHQuYy5iLF90LnApLDE1KS5YYigwKSw0NikuYSwxMCkucF0pO2Q8PXc7KXtpZihMdD11KEZlKG4uYSxkKSwxMCksIVI0dCh0LEx0LHIrMSxyKSlmb3IoZ3Q9dShGZSh0LmMuYixMdC5wKSwxNSkuS2MoKTtndC5PYigpOyl0dD11KGd0LlBiKCksNDYpLHM9dC5jLmVbdSh0dC5hLDEwKS5wXSwoczxvfHxzPmgpJiZOcyh0LmIsdSh0dC5iLDE3KSk7KytkfW89aH19fWZ1bmN0aW9uIGd4dCh0LGUpe3ZhciBuO2lmKGU9PW51bGx8fGhuKGUsVHUpfHxlLmxlbmd0aD09MCYmdC5rIT0oamcoKSxqNikpcmV0dXJuIG51bGw7c3dpdGNoKHQuay5nKXtjYXNlIDE6cmV0dXJuIE96KGUscUUpPyhGbigpLFlFKTpPeihlLE9jdCk/KEZuKCksSTIpOm51bGw7Y2FzZSAyOnRyeXtyZXR1cm4gZGUoJGwoZSxfYSx2aSkpfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxMjcpKXJldHVybiBudWxsO3Rocm93IHJ0KHIpfWNhc2UgNDp0cnl7cmV0dXJuIGx5KGUpfWNhdGNoKHIpe2lmKHI9V2kociksRXQociwxMjcpKXJldHVybiBudWxsO3Rocm93IHJ0KHIpfWNhc2UgMzpyZXR1cm4gZTtjYXNlIDU6cmV0dXJuIHhyZSh0KSxTb2UodCxlKTtjYXNlIDY6cmV0dXJuIHhyZSh0KSxfYm4odCx0LmEsZSk7Y2FzZSA3OnRyeXtyZXR1cm4gbj1ScG4odCksbi5KZihlKSxufWNhdGNoKHIpe2lmKHI9V2kociksRXQociwzMikpcmV0dXJuIG51bGw7dGhyb3cgcnQocil9ZGVmYXVsdDp0aHJvdyBydChuZXcgRm8oIkludmFsaWQgdHlwZSBzZXQgZm9yIHRoaXMgbGF5b3V0IG9wdGlvbi4iKSl9fWZ1bmN0aW9uIHYzbih0KXskQygpO3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBaenQsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxNDApLCghZC5ifHxlLmM+PWQuYi5jKSYmKGQuYj1lKSwoIWQuY3x8ZS5jPD1kLmMuYykmJihkLmQ9ZC5jLGQuYz1lKSwoIWQuZXx8ZS5kPj1kLmUuZCkmJihkLmU9ZSksKCFkLmZ8fGUuZDw9ZC5mLmQpJiYoZC5mPWUpO3JldHVybiByPW5ldyBCeigoSzgoKSxfdykpLGFJKHQsTGJlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbcl0pKSksaD1uZXcgQnooRHkpLGFJKHQsQWJlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbaF0pKSkscz1uZXcgQnooSXkpLGFJKHQsU2JlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbc10pKSksbz1uZXcgQnooajQpLGFJKHQsX2JlLG5ldyB3bChjdChvdChnTywxKSxJZSwzNjksMCxbb10pKSksWXN0KHIuYyxfdyksWXN0KHMuYyxJeSksWXN0KG8uYyxqNCksWXN0KGguYyxEeSksZC5hLmM9UHQoWG4sSWUsMSwwLDUsMSksQXMoZC5hLHIuYyksQXMoZC5hLGEyKHMuYykpLEFzKGQuYSxvLmMpLEFzKGQuYSxhMihoLmMpKSxkfWZ1bmN0aW9uIHB4dCh0KXt2YXIgZTtzd2l0Y2godC5kKXtjYXNlIDE6e2lmKHQuaGooKSlyZXR1cm4gdC5vIT0tMjticmVha31jYXNlIDI6e2lmKHQuaGooKSlyZXR1cm4gdC5vPT0tMjticmVha31jYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6Y2FzZSA3OnJldHVybiB0Lm8+LTI7ZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goZT10LmdqKCksdC5wKXtjYXNlIDA6cmV0dXJuIGUhPW51bGwmJmplKFJlKGUpKSE9YUModC5rLDApO2Nhc2UgMTpyZXR1cm4gZSE9bnVsbCYmdShlLDIxNykuYSE9U3IodC5rKTw8MjQ+PjI0O2Nhc2UgMjpyZXR1cm4gZSE9bnVsbCYmdShlLDE3MikuYSE9KFNyKHQuaykmbXMpO2Nhc2UgNjpyZXR1cm4gZSE9bnVsbCYmYUModShlLDE2MikuYSx0LmspO2Nhc2UgNTpyZXR1cm4gZSE9bnVsbCYmdShlLDE5KS5hIT1Tcih0LmspO2Nhc2UgNzpyZXR1cm4gZSE9bnVsbCYmdShlLDE4NCkuYSE9U3IodC5rKTw8MTY+PjE2O2Nhc2UgMzpyZXR1cm4gZSE9bnVsbCYmWHQoeWUoZSkpIT10Lmo7Y2FzZSA0OnJldHVybiBlIT1udWxsJiZ1KGUsMTU1KS5hIT10Lmo7ZGVmYXVsdDpyZXR1cm4gZT09bnVsbD90Lm4hPW51bGw6IXlpKGUsdC5uKX19ZnVuY3Rpb24gRUQodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiB0LkZrKCkmJnQuRWsoKSYmKGg9Rm50KHQsdShuLDU2KSksR3QoaCkhPT1HdChuKSk/KHQuT2koZSksdC5VaShlLHB0ZSh0LGUsaCkpLHQucmsoKSYmKG89KHM9dShuLDQ5KSx0LkRrKCk/dC5CaygpP3MuaWgodC5iLG5vKHUoeW4oYnUodC5iKSx0LmFqKCkpLDE4KSkubix1KHluKGJ1KHQuYiksdC5haigpKS5ZaigpLDI2KS5CaigpLG51bGwpOnMuaWgodC5iLFZpKHMuVGcoKSxubyh1KHluKGJ1KHQuYiksdC5haigpKSwxOCkpKSxudWxsLG51bGwpOnMuaWgodC5iLC0xLXQuYWooKSxudWxsLG51bGwpKSwhdShoLDQ5KS5laCgpJiYobz0ocj11KGgsNDkpLHQuRGsoKT90LkJrKCk/ci5naCh0LmIsbm8odSh5bihidSh0LmIpLHQuYWooKSksMTgpKS5uLHUoeW4oYnUodC5iKSx0LmFqKCkpLllqKCksMjYpLkJqKCksbyk6ci5naCh0LmIsVmkoci5UZygpLG5vKHUoeW4oYnUodC5iKSx0LmFqKCkpLDE4KSkpLG51bGwsbyk6ci5naCh0LmIsLTEtdC5haigpLG51bGwsbykpKSxvJiZvLkZpKCkpLG1sKHQuYikmJnQuJGkodC5aaSg5LG4saCxlLCExKSksaCk6bn1mdW5jdGlvbiBqbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihDPVh0KHllKFEodCwoVGUoKSxGdykpKSkscj1YdCh5ZShRKHQsZ0N0KSkpLEY9bmV3IFd1LEp0KEYsRncsQytyKSxrPWUsZ3Q9ay5kLFk9ay5jLmksTHQ9ay5kLmksdHQ9dDJ0KFkuYyksX3Q9dDJ0KEx0LmMpLHM9bmV3IGxlLE09dHQ7TTw9X3Q7TSsrKWQ9bmV3IEgwKHQpLF8wKGQsKEduKCksWnMpKSxKdChkLChzZSgpLF9pKSxrKSxKdChkLG9zLChvYSgpLFZjKSksSnQoZCxzVixGKSxIPXUoRmUodC5iLE0pLDI5KSxNPT10dD9veShkLEguYS5jLmxlbmd0aC1uLEgpOmtvKGQsSCksQnQ9WHQoeWUoUShrLFVnKSkpLEJ0PDAmJihCdD0wLEp0KGssVWcsQnQpKSxkLm8uYj1CdCxWPWIuTWF0aC5mbG9vcihCdC8yKSxoPW5ldyBNYyxGcyhoLChiZSgpLEJuKSksVW8oaCxkKSxoLm4uYj1WLHc9bmV3IE1jLEZzKHcsSG4pLFVvKHcsZCksdy5uLmI9VixzYShrLGgpLG89bmV3IHp2LExvKG8sayksSnQobyxfbyxudWxsKSxEYShvLHcpLHNhKG8sZ3QpLHkxbihkLGssbykscy5jW3MuYy5sZW5ndGhdPW8saz1vO3JldHVybiBzfWZ1bmN0aW9uIF9hdCh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKHc9dShSZyh0LChiZSgpLEJuKSkuS2MoKS5QYigpLDExKS5lLEg9dShSZyh0LEhuKS5LYygpLlBiKCksMTEpLmcsZD13LmMubGVuZ3RoLF90PVQxKHUoRmUodC5qLDApLDExKSk7ZC0tID4wOyl7Zm9yKFk9KEFuKDAsdy5jLmxlbmd0aCksdSh3LmNbMF0sMTcpKSxzPShBbigwLEguYy5sZW5ndGgpLHUoSC5jWzBdLDE3KSksTHQ9cy5kLmUsbz1SbyhMdCxzLDApLFRpbihZLHMuZCxvKSxEYShzLG51bGwpLHNhKHMsbnVsbCksVj1ZLmEsZSYmbmkoVixuZXcgeW8oX3QpKSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbmkoVixuZXcgeW8obikpO2ZvcihndD1ZLmIsRj1uZXcgUyhzLmIpO0YuYTxGLmMuYy5sZW5ndGg7KU09dShKKEYpLDcwKSxndC5jW2d0LmMubGVuZ3RoXT1NO2lmKHR0PXUoUShZLChUZSgpLF9vKSksNzQpLGg9dShRKHMsX28pLDc0KSxoKWZvcih0dHx8KHR0PW5ldyBEdSxKdChZLF9vLHR0KSksQz1laShoLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4KSxuaSh0dCxuZXcgeW8oaykpfX1mdW5jdGlvbiAkbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYobj11KGdvKHQuYixlKSwxMjQpLHc9dSh1KEFpKHQucixlKSwyMSksODQpLHcuZGMoKSl7bi5uLmI9MCxuLm4uYz0wO3JldHVybn1mb3Ioaz10LnUuSGMoKFF1KCksdGcpKSxoPTAsZD13LktjKCksQz1udWxsLE09MCxGPTA7ZC5PYigpOylyPXUoZC5QYigpLDExMSkscz1YdCh5ZShyLmIuV2UoKGdqKCksWkgpKSkpLG89ci5iLnJmKCkuYSx0LkEuSGMoKF9sKCksVjIpKSYmbXVlKHQsZSksQz8oSD1GK0MuZC5jK3QudytyLmQuYixoPWIuTWF0aC5tYXgoaCwoeTEoKSxnZihQMSksYi5NYXRoLmFicyhNLXMpPD1QMXx8TT09c3x8aXNOYU4oTSkmJmlzTmFOKHMpPzA6SC8ocy1NKSkpKTp0LkMmJnQuQy5iPjAmJihoPWIuTWF0aC5tYXgoaCxkbmUodC5DLmIrci5kLmIscykpKSxDPXIsTT1zLEY9bzt0LkMmJnQuQy5jPjAmJihIPUYrdC5DLmMsayYmKEgrPUMuZC5jKSxoPWIuTWF0aC5tYXgoaCwoeTEoKSxnZihQMSksYi5NYXRoLmFicyhNLTEpPD1QMXx8TT09MXx8aXNOYU4oTSkmJmlzTmFOKDEpPzA6SC8oMS1NKSkpKSxuLm4uYj0wLG4uYS5hPWh9ZnVuY3Rpb24gemxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2lmKG49dShnbyh0LmIsZSksMTI0KSx3PXUodShBaSh0LnIsZSksMjEpLDg0KSx3LmRjKCkpe24ubi5kPTAsbi5uLmE9MDtyZXR1cm59Zm9yKGs9dC51LkhjKChRdSgpLHRnKSksaD0wLHQuQS5IYygoX2woKSxWMikpJiZ5dWUodCxlKSxkPXcuS2MoKSxDPW51bGwsRj0wLE09MDtkLk9iKCk7KXI9dShkLlBiKCksMTExKSxvPVh0KHllKHIuYi5XZSgoZ2ooKSxaSCkpKSkscz1yLmIucmYoKS5iLEM/KEg9TStDLmQuYSt0Lncrci5kLmQsaD1iLk1hdGgubWF4KGgsKHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoRi1vKTw9UDF8fEY9PW98fGlzTmFOKEYpJiZpc05hTihvKT8wOkgvKG8tRikpKSk6dC5DJiZ0LkMuZD4wJiYoaD1iLk1hdGgubWF4KGgsZG5lKHQuQy5kK3IuZC5kLG8pKSksQz1yLEY9byxNPXM7dC5DJiZ0LkMuYT4wJiYoSD1NK3QuQy5hLGsmJihIKz1DLmQuYSksaD1iLk1hdGgubWF4KGgsKHkxKCksZ2YoUDEpLGIuTWF0aC5hYnMoRi0xKTw9UDF8fEY9PTF8fGlzTmFOKEYpJiZpc05hTigxKT8wOkgvKDEtRikpKSksbi5uLmQ9MCxuLmEuYj1ofWZ1bmN0aW9uIHFsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3O2Zvcih0aGlzLmc9dCxkPWUuZC5sZW5ndGgsdz1uLmQubGVuZ3RoLHRoaXMuZD1QdChvMCx6ZywxMCxkK3csMCwxKSxoPTA7aDxkO2grKyl0aGlzLmRbaF09ZS5kW2hdO2ZvcihvPTA7bzx3O28rKyl0aGlzLmRbZCtvXT1uLmRbb107aWYoZS5lKXtpZih0aGlzLmU9VU0oZS5lKSx0aGlzLmUuTWMobiksbi5lKWZvcihzPW4uZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwyMzMpLHIhPWUmJih0aGlzLmUuSGMocik/LS1yLmM6dGhpcy5lLkZjKHIpKX1lbHNlIG4uZSYmKHRoaXMuZT1VTShuLmUpLHRoaXMuZS5NYyhlKSk7dGhpcy5mPWUuZituLmYsdGhpcy5hPWUuYStuLmEsdGhpcy5hPjA/SnJ0KHRoaXMsdGhpcy5mL3RoaXMuYSk6eDEoZS5nLGUuZFswXSkuYSE9bnVsbCYmeDEobi5nLG4uZFswXSkuYSE9bnVsbD9KcnQodGhpcywoWHQoeDEoZS5nLGUuZFswXSkuYSkrWHQoeDEobi5nLG4uZFswXSkuYSkpLzIpOngxKGUuZyxlLmRbMF0pLmEhPW51bGw/SnJ0KHRoaXMseDEoZS5nLGUuZFswXSkuYSk6eDEobi5nLG4uZFswXSkuYSE9bnVsbCYmSnJ0KHRoaXMseDEobi5nLG4uZFswXSkuYSl9ZnVuY3Rpb24gdzNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKHQuYT1uZXcgWFl0KFdvbihXUykpLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDg0MSksZD1uZXcgWGl0KGN0KG90KFl1dCwxKSxJZSw4MSwwLFtdKSksdWUodC5hLmEsZCksaz1uZXcgUyhuLmQpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDExMCksQz1uZXcgQTJ0KHQsdyksd3h0KEMsdShRKG4uYywoc2UoKSxOeSkpLDIxKSksa2wodC5nLG4pfHwoa2kodC5nLG4sbmV3ICRlKHcuYyx3LmQpKSxraSh0LmYsbixDKSksdWUodC5hLmIsQyksRXJ0KGQsQyk7Zm9yKGg9bmV3IFMobi5iKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSw1OTQpLEM9bmV3IEEydCh0LG8ua2YoKSksa2kodC5iLG8sbmV3IGxhKGQsQykpLHd4dChDLHUoUShuLmMsKHNlKCksTnkpKSwyMSkpLG8uaGYoKSYmKE09bmV3IEwzdCh0LG8uaGYoKSwxKSx3eHQoTSx1KFEobi5jLE55KSwyMSkpLHM9bmV3IFhpdChjdChvdChZdXQsMSksSWUsODEsMCxbXSkpLEVydChzLE0pLGxuKHQuYyxvLmdmKCksbmV3IGxhKGQsTSkpKX1yZXR1cm4gdC5hfWZ1bmN0aW9uIEhsZSh0KXt2YXIgZTt0aGlzLmE9dCxlPShHbigpLGN0KG90KGVsdCwxKSxhZSwyNjcsMCxbRHMsWnMseHMsSGMsU2wsajFdKSkubGVuZ3RoLHRoaXMuYj1YYihRaHQsW3RlLE5rdF0sWzU5MywxNDZdLDAsW2UsZV0sMiksdGhpcy5jPVhiKFFodCxbdGUsTmt0XSxbNTkzLDE0Nl0sMCxbZSxlXSwyKSx1cnQodGhpcyxEcywoVGUoKSxCdyksWjQpLFdDKHRoaXMsRHMsWnMsRncsUjIpLGVJKHRoaXMsRHMsSGMsRncpLGVJKHRoaXMsRHMseHMsRncpLFdDKHRoaXMsRHMsU2wsQncsWjQpLHVydCh0aGlzLFpzLHhmLFE0KSxlSSh0aGlzLFpzLEhjLHhmKSxlSSh0aGlzLFpzLHhzLHhmKSxXQyh0aGlzLFpzLFNsLEZ3LFIyKSx2VXQodGhpcyxIYyx4ZiksZUkodGhpcyxIYyx4cyx4ZiksZUkodGhpcyxIYyxTbCx0aHQpLHZVdCh0aGlzLHhzLF9TKSxXQyh0aGlzLHhzLFNsLHk3LG03KSx1cnQodGhpcyxTbCx4Zix4ZiksdXJ0KHRoaXMsajEseGYsUTQpLFdDKHRoaXMsajEsRHMsRncsUjIpLFdDKHRoaXMsajEsU2wsRncsUjIpLFdDKHRoaXMsajEsWnMsRncsUjIpfWZ1bmN0aW9uIG0zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7aWYoaD1uLmFrKCksRXQoaCw5OSkmJnUoaCwxOCkuQmImWWEmJihGPXUobi5kZCgpLDQ5KSxZPUtwKHQuZSxGKSxZIT1GKSl7aWYoQz1ZZChoLFkpLGZDKHQsZSxTc3QodCxlLEMpKSxNPW51bGwsbWwodC5lKSYmKHI9RTQoKFJ1KCksbWEpLHQuZS5UZygpLGgpLHIhPXluKHQuZS5UZygpLHQuYykpKXtmb3IodHQ9YXUodC5lLlRnKCksaCksZD0wLG89dSh0LmcsMTE5KSx3PTA7dzxlOysrdylzPW9bd10sdHQucmwocy5haygpKSYmKytkO009bmV3IEFydCh0LmUsOSxyLEYsWSxkLCExKSxNLkVpKG5ldyBGMCh0LmUsOSx0LmMsbixDLGUsITEpKX1yZXR1cm4gVj11KGgsMTgpLEg9bm8oViksSD8oTT1GLmloKHQuZSxWaShGLlRnKCksSCksbnVsbCxNKSxNPXUoWSw0OSkuZ2godC5lLFZpKFkuVGcoKSxIKSxudWxsLE0pKTpWLkJiJmRjJiYoaz0tMS1WaSh0LmUuVGcoKSxWKSxNPUYuaWgodC5lLGssbnVsbCxudWxsKSwhdShZLDQ5KS5laCgpJiYoTT11KFksNDkpLmdoKHQuZSxrLG51bGwsTSkpKSxNJiZNLkZpKCksQ31yZXR1cm4gbn1mdW5jdGlvbiB5M24odCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iobz1uZXcgUyh0LmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksODEpLHMuYi5jPXMuZy5jLHMuYi5kPXMuZy5kO2Zvcih3PW5ldyAkZShzcyxzcyksZT1uZXcgJGUoVHMsVHMpLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDgxKSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksZS5hPWIuTWF0aC5tYXgoZS5hLG4uZy5jK24uZy5iKSxlLmI9Yi5NYXRoLm1heChlLmIsbi5nLmQrbi5nLmEpO2ZvcihkPVlqKHQuYykuYS5uYygpO2QuT2IoKTspaD11KGQuUGIoKSw0Niksbj11KGguYiw4MSksdy5hPWIuTWF0aC5taW4ody5hLG4uZy5jKSx3LmI9Yi5NYXRoLm1pbih3LmIsbi5nLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmcuYytuLmcuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZy5kK24uZy5hKTt0LmQ9bWoobmV3ICRlKHcuYSx3LmIpKSx0LmU9bmEobmV3ICRlKGUuYSxlLmIpLHcpLHQuYS5hLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hLmIuYz1QdChYbixJZSwxLDAsNSwxKX1mdW5jdGlvbiB4M24odCl7dmFyIGUsbixyO2ZvcihzNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IHlwXSkpLG49bmV3IGx4KHQpLHI9MDtyPG4uYS5sZW5ndGg7KytyKWU9WG0obixyKS5qZSgpLmEsaG4oZSwibGF5ZXJlZCIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgVUpdKSk6aG4oZSwiZm9yY2UiKT9zNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IERKXSkpOmhuKGUsInN0cmVzcyIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgT0pdKSk6aG4oZSwibXJ0cmVlIik/czQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBMM10pKTpobihlLCJyYWRpYWwiKT9zNChUYixjdChvdChSNCwxKSxJZSwxMzAsMCxbbmV3IFpKXSkpOmhuKGUsImRpc2NvIik/czQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBVTCxuZXcgSUpdKSk6aG4oZSwic3BvcmVPdmVybGFwIil8fGhuKGUsInNwb3JlQ29tcGFjdGlvbiIpP3M0KFRiLGN0KG90KFI0LDEpLEllLDEzMCwwLFtuZXcgQkJdKSk6aG4oZSwicmVjdHBhY2tpbmciKSYmczQoVGIsY3Qob3QoUjQsMSksSWUsMTMwLDAsW25ldyBqQl0pKX1mdW5jdGlvbiBHbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKEY9bmV3IHlvKHQubyksZ3Q9ZS5hL0YuYSxkPWUuYi9GLmIsWT1lLmEtRi5hLG89ZS5iLUYuYixuKWZvcihzPUd0KFEodCwoVGUoKSxvcykpKT09PUd0KChvYSgpLFZjKSksVj1uZXcgUyh0LmopO1YuYTxWLmMuYy5sZW5ndGg7KXN3aXRjaChIPXUoSihWKSwxMSksSC5qLmcpe2Nhc2UgMTpzfHwoSC5uLmEqPWd0KTticmVhaztjYXNlIDI6SC5uLmErPVksc3x8KEgubi5iKj1kKTticmVhaztjYXNlIDM6c3x8KEgubi5hKj1ndCksSC5uLmIrPW87YnJlYWs7Y2FzZSA0OnN8fChILm4uYio9ZCl9Zm9yKGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksQz13Lm4uYSt3Lm8uYS8yLE09dy5uLmIrdy5vLmIvMix0dD1DL0YuYSxoPU0vRi5iLHR0K2g+PTEmJih0dC1oPjAmJk0+PTA/KHcubi5hKz1ZLHcubi5iKz1vKmgpOnR0LWg8MCYmQz49MCYmKHcubi5hKz1ZKnR0LHcubi5iKz1vKSk7dC5vLmE9ZS5hLHQuby5iPWUuYixKdCh0LChUZSgpLEYyKSwoX2woKSxyPXUoSGYodEEpLDkpLG5ldyByaChyLHUodWYocixyLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBrM24odCxlLG4scixzLG8pe3ZhciBoO2lmKCEoZT09bnVsbHx8IUhpdChlLFlBdCxYQXQpKSl0aHJvdyBydChuZXcgUG4oImludmFsaWQgc2NoZW1lOiAiK2UpKTtpZighdCYmIShuIT1udWxsJiZjZChuLEV1KDM1KSk9PS0xJiZuLmxlbmd0aD4wJiYoUnIoMCxuLmxlbmd0aCksbi5jaGFyQ29kZUF0KDApIT00NykpKXRocm93IHJ0KG5ldyBQbigiaW52YWxpZCBvcGFxdWVQYXJ0OiAiK24pKTtpZih0JiYhKGUhPW51bGwmJnBNKHJVLGUudG9Mb3dlckNhc2UoKSkpJiYhKG49PW51bGx8fCFIaXQobixpQSxzQSkpKXRocm93IHJ0KG5ldyBQbihsMGUrbikpO2lmKHQmJmUhPW51bGwmJnBNKHJVLGUudG9Mb3dlckNhc2UoKSkmJiFwZG4obikpdGhyb3cgcnQobmV3IFBuKGwwZStuKSk7aWYoIW1sbihyKSl0aHJvdyBydChuZXcgUG4oImludmFsaWQgZGV2aWNlOiAiK3IpKTtpZighZnVuKHMpKXRocm93IGg9cz09bnVsbD8iaW52YWxpZCBzZWdtZW50czogbnVsbCI6ImludmFsaWQgc2VnbWVudDogIitjdW4ocykscnQobmV3IFBuKGgpKTtpZighKG89PW51bGx8fGNkKG8sRXUoMzUpKT09LTEpKXRocm93IHJ0KG5ldyBQbigiaW52YWxpZCBxdWVyeTogIitvKSl9ZnVuY3Rpb24gRTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IoZSwiQ2FsY3VsYXRlIEdyYXBoIFNpemUiLDEpLGUubiYmdCYmaGYoZSxmZih0KSwoQ2woKSxZbCkpLGQ9RkUsdz1GRSxvPWprdCxoPWprdCxNPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO00uZSE9TS5pLmdjKCk7KWs9dShkcihNKSwzMyksVj1rLmksWT1rLmosZ3Q9ay5nLHI9ay5mLHM9dShxZShrLChjaSgpLEtPKSksMTQyKSxkPWIuTWF0aC5taW4oZCxWLXMuYiksdz1iLk1hdGgubWluKHcsWS1zLmQpLG89Yi5NYXRoLm1heChvLFYrZ3Qrcy5jKSxoPWIuTWF0aC5tYXgoaCxZK3Ircy5hKTtmb3IoSD11KHFlKHQsKGNpKCkscTIpKSwxMTYpLEY9bmV3ICRlKGQtSC5iLHctSC5kKSxDPW5ldyBlcigoIXQuYSYmKHQuYT1uZXcgaGUobnMsdCwxMCwxMSkpLHQuYSkpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwzMykseXUoayxrLmktRi5hKSx4dShrLGsuai1GLmIpO3R0PW8tZCsoSC5iK0guYyksbj1oLXcrKEguZCtILmEpLFF2KHQsdHQpLFh2KHQsbiksZS5uJiZ0JiZoZihlLGZmKHQpLChDbCgpLFlsKSl9ZnVuY3Rpb24gVmxlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihyPW5ldyBsZSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKGgpLDEyMSksQz0wLHMuay5jPVB0KFhuLEllLDEsMCw1LDEpLG49bmV3IFMobzQocykpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDIxMyksZS5mJiYodWUocy5rLGUpLCsrQyk7Qz09MSYmKHIuY1tyLmMubGVuZ3RoXT1zKX1mb3Iobz1uZXcgUyhyKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTIxKTtzLmsuYy5sZW5ndGg9PTE7KXtmb3Ioaz11KEoobmV3IFMocy5rKSksMjEzKSx0LmJbay5jXT1rLmcsZD1rLmQsdz1rLmUsbj1uZXcgUyhvNChzKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjEzKSx5aShlLGspfHwoZS5mP2Q9PWUuZHx8dz09ZS5lP3QuYltrLmNdLT10LmJbZS5jXS1lLmc6dC5iW2suY10rPXQuYltlLmNdLWUuZzpzPT1kP2UuZD09cz90LmJbay5jXSs9ZS5nOnQuYltrLmNdLT1lLmc6ZS5kPT1zP3QuYltrLmNdLT1lLmc6dC5iW2suY10rPWUuZyk7dnUoZC5rLGspLHZ1KHcuayxrKSxkPT1zP3M9ay5lOnM9ay5kfX1mdW5jdGlvbiBieHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihvPXUoRmModC5mLGUpLDIzKSwhbyl7Zm9yKHM9KEg9bmV3IGIxKHQuZCkuYS52YygpLktjKCksbmV3IHYxKEgpKTtzLmEuT2IoKTspaWYobj0oaD11KHMuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLGQ9bi5mLFY9ZS5sZW5ndGgsaG4oZC5zdWJzdHIoZC5sZW5ndGgtVixWKSxlKSYmKGUubGVuZ3RoPT1kLmxlbmd0aHx8YmEoZCxkLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihvKXJldHVybiBudWxsO289bn1pZighbyl7Zm9yKHI9KEY9bmV3IGIxKHQuZCkuYS52YygpLktjKCksbmV3IHYxKEYpKTtyLmEuT2IoKTspaWYobj0oaD11KHIuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLE09bi5nLE0hPW51bGwpe2Zvcih3PU0saz0wLEM9dy5sZW5ndGg7azxDOysraylpZihkPXdba10sVj1lLmxlbmd0aCxobihkLnN1YnN0cihkLmxlbmd0aC1WLFYpLGUpJiYoZS5sZW5ndGg9PWQubGVuZ3RofHxiYShkLGQubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufX19byYmeG8odC5mLGUsbyl9cmV0dXJuIG99ZnVuY3Rpb24gVDNuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgTG0saD0hMSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKHI9KFJyKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkscj09MzIpe2ZvcihSeih0LG4sMCksbi5hKz0iICIsUnoodCxuLDApO28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTMyKTspKytvO2NvbnRpbnVlfWlmKGgpe3I9PTM5P28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbyk6aD0hMTpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7Y29udGludWV9aWYoY2QoIkd5TUxka0htc1NFY0RhaEt6WnYiLEV1KHIpKT4wKXtSeih0LG4sMCksbi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHM9Y2huKGUsbyksUnoodCxuLHMpLG8rPXMtMTtjb250aW51ZX1yPT0zOT9vKzE8ZS5sZW5ndGgmJihScihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zOSk/KG4uYSs9IiciLCsrbyk6aD0hMDpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocil9UnoodCxuLDApLGpkbih0KX1mdW5jdGlvbiBDM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKHdyKG4sIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksdC5iPWUsZ3Q9dShRKGUsKFRlKCksU1MpKSwxOSkuYSo0LHR0PXQuYi5hLHR0LmMubGVuZ3RoPDEpe29yKG4pO3JldHVybn1mb3Iobz1Dd24odCx0dCksWT1udWxsLHM9ZWkobywwKTtzLmIhPXMuZC5jOyl7Zm9yKHI9dSh0aShzKSwxNSksZD1ndCpwcyhiLk1hdGguc3FydChyLmdjKCkpKSxoPXF3bihyKSxjYXQoSnB0KFJLZSh0YnQobW50KGgpLGQpLFkpLCEwKSxSYyhuLDEpKSxGPXQuYi5iLFY9bmV3IFMoaC5hKTtWLmE8Vi5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKFYpLDEyMSk7Ri5jLmxlbmd0aDw9SC5lOykkbShGLEYuYy5sZW5ndGgsbmV3IENoKHQuYikpO0M9dShILmYsMTApLGtvKEMsdShGZShGLEguZSksMjkpKX1pZihvLmI+MSlmb3IoWT1QdChUcixYciwyNSx0LmIuYi5jLmxlbmd0aCwxNSwxKSxNPTAsaz1uZXcgUyh0LmIuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMjkpLFlbTSsrXT13LmEuYy5sZW5ndGh9dHQuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCx0LmM9bnVsbCxvcihuKX1mdW5jdGlvbiBVbGUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxvPW5ldyBTKHQuYi5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuYj0wLHIuYz0wO2ZvcihJYWUodCwwKSxHaXQodCx0LmcpLHVxKHQuYyksS3B0KHQuYyksbj0oYW8oKSxqaCksbUQoSGV0KFQ0KG1EKEhldChUNChtRChUNCh0LmMsbikpLFhyZShuKSkpKSxuKSkpLFQ0KHQuYyxqaCksQml0KHQsdC5nKSxtYWUodCwwKSxDbGUodCwwKSxsY2UodCwxKSxJYWUodCwxKSxHaXQodCx0LmQpLHVxKHQuYyksaD1uZXcgUyh0LmIuYSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTg5KSxlKz1iLk1hdGguYWJzKHIuYyk7Zm9yKGQ9bmV3IFModC5iLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXI9dShKKGQpLDE4OSksci5iPTAsci5jPTA7Zm9yKG49WjAsbUQoSGV0KFQ0KG1EKEhldChUNChtRChLcHQoVDQodC5jLG4pKSksWHJlKG4pKSkpLG4pKSksVDQodC5jLGpoKSxCaXQodCx0LmQpLG1hZSh0LDEpLENsZSh0LDEpLGxjZSh0LDApLEtwdCh0LmMpLHM9bmV3IFModC5iLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4OSksZSs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiBlfWZ1bmN0aW9uIFdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZihrPWUsIShrLmI9PW51bGx8fHQuYj09bnVsbCkpe2ZvcihiNCh0KSxUXyh0KSxiNChrKSxUXyhrKSxuPVB0KFRyLFhyLDI1LHQuYi5sZW5ndGgray5iLmxlbmd0aCwxNSwxKSxDPTAscj0wLGg9MDtyPHQuYi5sZW5ndGgmJmg8ay5iLmxlbmd0aDspaWYocz10LmJbcl0sbz10LmJbcisxXSxkPWsuYltoXSx3PWsuYltoKzFdLG88ZClyKz0yO2Vsc2UgaWYobz49ZCYmczw9dylkPD1zJiZvPD13PyhuW0MrK109cyxuW0MrK109byxyKz0yKTpkPD1zPyhuW0MrK109cyxuW0MrK109dyx0LmJbcl09dysxLGgrPTIpOm88PXc/KG5bQysrXT1kLG5bQysrXT1vLHIrPTIpOihuW0MrK109ZCxuW0MrK109dyx0LmJbcl09dysxKTtlbHNlIGlmKHc8cyloKz0yO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiNpbnRlcnNlY3RSYW5nZXMoKTogSW50ZXJuYWwgRXJyb3I6IFsiK3QuYltyXSsiLCIrdC5iW3IrMV0rIl0gJiBbIitrLmJbaF0rIiwiK2suYltoKzFdKyJdIikpO2Zvcig7cjx0LmIubGVuZ3RoOyluW0MrK109dC5iW3IrK10sbltDKytdPXQuYltyKytdO3QuYj1QdChUcixYciwyNSxDLDE1LDEpLEljKG4sMCx0LmIsMCxDKX19ZnVuY3Rpb24gXzNuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBsZSx0Lmc9bmV3IGxlLHQuZD1uZXcgbGUsaD1uZXcgaDIobmV3IHdnKHQuZi5iKS5hKTtoLmI7KW89WXYoaCksdWUoZSx1KHUoby5kZCgpLDQ2KS5iLDgxKSksT3AodShvLmNkKCksNTk0KS5nZigpKT91ZSh0LmQsdShvLmRkKCksNDYpKTp1ZSh0LmcsdShvLmRkKCksNDYpKTtmb3IoR2l0KHQsdC5kKSxHaXQodCx0LmcpLHQuYz1uZXcgTG9lKHQuYiksJEtlKHQuYywoZGJ0KCkseGJlKSksQml0KHQsdC5kKSxCaXQodCx0LmcpLEFzKGUsdC5jLmEuYiksdC5lPW5ldyAkZShzcyxzcyksdC5hPW5ldyAkZShUcyxUcykscj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdC5lLmE9Yi5NYXRoLm1pbih0LmUuYSxuLmcuYyksdC5lLmI9Yi5NYXRoLm1pbih0LmUuYixuLmcuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxuLmcuYytuLmcuYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixuLmcuZCtuLmcuYSk7bmJ0KHQuYyxuZXcgcHApLGQ9MDtkbyBzPVVsZSh0KSwrK2Q7d2hpbGUoKGQ8Mnx8cz5lYikmJmQ8MTApO25idCh0LmMsbmV3ICQ1KSxVbGUodCksZmVuKHQuYykseTNuKHQuZil9ZnVuY3Rpb24gUzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZihqZShSZShRKG4sKFRlKCksJHkpKSkpKWZvcihkPW5ldyBTKG4uaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxGPWdkKGguZyksaz1GLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdz1rW0NdLG89dy5kLmk9PW4scz1vJiZqZShSZShRKHcsUDIpKSkscyYmKFY9dy5jLEg9dShKbih0LmIsViksMTApLEh8fChIPVREKFYsKG9hKCksSDEpLFYuaiwtMSxudWxsLG51bGwsVi5vLHUoUShlLFZsKSwxMDMpLGUpLEp0KEgsKHNlKCksX2kpLFYpLGtpKHQuYixWLEgpLHVlKGUuYSxIKSksdHQ9dy5kLFk9dShKbih0LmIsdHQpLDEwKSxZfHwoWT1URCh0dCwob2EoKSxIMSksdHQuaiwxLG51bGwsbnVsbCx0dC5vLHUoUShlLFZsKSwxMDMpLGUpLEp0KFksKHNlKCksX2kpLHR0KSxraSh0LmIsdHQsWSksdWUoZS5hLFkpKSxyPU5ydCh3KSxEYShyLHUoRmUoSC5qLDApLDExKSksc2Eocix1KEZlKFkuaiwwKSwxMSkpLGxuKHQuYSx3LG5ldyBUaihyLGUsKHNvKCksZXUpKSksdShRKGUsKHNlKCksR2MpKSwyMSkuRmMoKG9vKCksYmgpKSl9ZnVuY3Rpb24gQTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHdyKG4sIkxhYmVsIGR1bW15IHN3aXRjaGluZyIsMSkscj11KFEoZSwoVGUoKSxRRykpLDIyNyksJG9uKGUpLHM9eWJuKGUsciksdC5hPVB0KGlhLHZvLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxkPShpNigpLGN0KG90KGM3LDEpLGFlLDIyNywwLFtvNyxkUyxhNyxPeSxINCxxNF0pKSxDPTAsSD1kLmxlbmd0aDtDPEg7KytDKWlmKG89ZFtDXSwobz09SDR8fG89PXE0fHxvPT1PeSkmJiF1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KS5kYygpKXtRb24odCxlKTticmVha31mb3Iodz1jdChvdChjNywxKSxhZSwyMjcsMCxbbzcsZFMsYTcsT3ksSDQscTRdKSxNPTAsVj13Lmxlbmd0aDtNPFY7KytNKW89d1tNXSxvPT1INHx8bz09cTR8fG89PU95fHxGdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7Zm9yKGg9Y3Qob3QoYzcsMSksYWUsMjI3LDAsW283LGRTLGE3LE95LEg0LHE0XSksaz0wLEY9aC5sZW5ndGg7azxGOysraylvPWhba10sKG89PUg0fHxvPT1xNHx8bz09T3kpJiZGdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7dC5hPW51bGwsb3Iobil9ZnVuY3Rpb24gTDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2godC5rLmcpe2Nhc2UgMTppZihyPXUoUSh0LChzZSgpLF9pKSksMTcpLG49dShRKHIsSlR0KSw3NCksbj9qZShSZShRKHIsJDEpKSkmJihuPUJJKG4pKTpuPW5ldyBEdSxrPXUoUSh0LG4xKSwxMSksayl7aWYoQz1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2suaS5uLGsubixrLmFdKSksZTw9Qy5hKXJldHVybiBDLmI7aHMobixDLG4uYSxuLmEuYSl9aWYoTT11KFEodCxSaCksMTEpLE0pe2lmKEY9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtNLmkubixNLm4sTS5hXSkpLEYuYTw9ZSlyZXR1cm4gRi5iO2hzKG4sRixuLmMuYixuLmMpfWlmKG4uYj49Mil7Zm9yKHc9ZWkobiwwKSxoPXUodGkodyksOCksZD11KHRpKHcpLDgpO2QuYTxlJiZ3LmIhPXcuZC5jOyloPWQsZD11KHRpKHcpLDgpO3JldHVybiBoLmIrKGUtaC5hKS8oZC5hLWguYSkqKGQuYi1oLmIpfWJyZWFrO2Nhc2UgMzpzd2l0Y2gobz11KFEodShGZSh0LmosMCksMTEpLChzZSgpLF9pKSksMTEpLHM9by5pLG8uai5nKXtjYXNlIDE6cmV0dXJuIHMubi5iO2Nhc2UgMzpyZXR1cm4gcy5uLmIrcy5vLmJ9fXJldHVybiB1NHQodCkuYn1mdW5jdGlvbiBNM24odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtmb3IoaD1uZXcgUyh0LmQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx3PW5ldyBTKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2lmKGQ9dShKKHcpLDEwKSxqZShSZShRKGQsKFRlKCksa1MpKSkpJiYhUzgoejAoZCkpKXtyPXUoTG5uKHowKGQpKSwxNyksQz1yLmMuaSxDPT1kJiYoQz1yLmQuaSksTT1uZXcgbGEoQyxuYShuYyhkLm4pLEMubikpLGtpKHQuYixkLE0pO2NvbnRpbnVlfXM9bmV3IGloKGQubi5hLWQuZC5iLGQubi5iLWQuZC5kLGQuby5hK2QuZC5iK2QuZC5jLGQuby5iK2QuZC5kK2QuZC5hKSxlPW5XdChiR3QoZ0d0KHBHdChuZXcgRHB0LGQpLHMpLFliZSksdC5hKSxlV3QoZFllKE9lZShuZXcgSXB0LGN0KG90KFhILDEpLEllLDU3LDAsW2VdKSksZSksdC5hKSxrPW5ldyBxdHQsa2kodC5lLGUsayksbj1OMChuZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSkpLU4wKG5ldyBhcihscihNcyhkKS5hLktjKCksbmV3IHopKSksbjwwP1BJKGssITAsKGFvKCksamgpKTpuPjAmJlBJKGssITAsKGFvKCksa2YpKSxkLms9PShHbigpLHhzKSYmbVh0KGspLGtpKHQuZixkLGUpfX1mdW5jdGlvbiBJM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO3N3aXRjaCh3cihuLCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLHQuZz1lLEI0bih0KSx0LnE9dShRKGUsKFRlKCksWGx0KSksMjYwKSxDPXUoUSh0LmcsdEN0KSwxOSkuYSxvPW5ldyBpRix0LnEuZyl7Y2FzZSAyOmNhc2UgMTpURSh0LG8pO2JyZWFrO2Nhc2UgMzpmb3IodC5xPSh3NCgpLGZWKSxURSh0LG8pLHc9MCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTkpLHc9Yi5NYXRoLm1heCh3LGguYSk7dz50LmomJih0LnE9TU8sVEUodCxvKSk7YnJlYWs7Y2FzZSA0OmZvcih0LnE9KHc0KCksZlYpLFRFKHQsbyksaz0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXllKEoocykpLGs9Yi5NYXRoLm1heChrLChPbihyKSxyKSk7az50LmsmJih0LnE9SU8sVEUodCxvKSk7YnJlYWs7Y2FzZSA2OkY9cHMoYi5NYXRoLmNlaWwodC5mLmxlbmd0aCpDLzEwMCkpLFRFKHQsbmV3IGtwKEYpKTticmVhaztjYXNlIDU6TT1wcyhiLk1hdGguY2VpbCh0LmQqQy8xMDApKSxURSh0LG5ldyBxZihNKSk7YnJlYWs7ZGVmYXVsdDpURSh0LG8pfVR2bih0LGUpLG9yKG4pfWZ1bmN0aW9uIEtsZSh0LGUsbil7dmFyIHIscyxvLGg7dGhpcy5qPXQsdGhpcy5lPW00dCh0KSx0aGlzLm89dGhpcy5qLmUsdGhpcy5pPSEhdGhpcy5vLHRoaXMucD10aGlzLmk/dShGZShuLEZhKHRoaXMubykucCksMjE0KTpudWxsLHM9dShRKHQsKHNlKCksR2MpKSwyMSksdGhpcy5nPXMuSGMoKG9vKCksYmgpKSx0aGlzLmI9bmV3IGxlLHRoaXMuZD1uZXcgYmllKHRoaXMuZSksaD11KFEodGhpcy5qLE82KSwyMzApLHRoaXMucT11Y24oZSxoLHRoaXMuZSksdGhpcy5rPW5ldyB2UXQodGhpcyksbz1fMShjdChvdChRYmUsMSksSWUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSksZT09KFp2KCksT08pJiYhamUoUmUoUSh0LChUZSgpLEJ5KSkpKT8ocj1uZXcgeDR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBYd3QocixoLHUodGhpcy5xLDQwMikpKTplPT1PTyYmamUoUmUoUSh0LChUZSgpLEJ5KSkpKT8ocj1uZXcgeDR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBKZWUocixoLHUodGhpcy5xLDQwMikpKTp0aGlzLmM9bmV3IFFHdChlLHRoaXMpLHVlKG8sdGhpcy5jKSxMbGUobyx0aGlzLmUpLHRoaXMucz1kNW4odGhpcy5rKX1mdW5jdGlvbiBEM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2ZvcihNPXUobGooKGg9ZWkobmV3IENwKGUpLmEuZCwwKSxuZXcgYngoaCkpKSw4NiksVj1NP3UoUShNLChmYygpLFNodCkpLDg2KTpudWxsLHM9MTtNJiZWOyl7Zm9yKHc9MCxCdD0wLG49TSxyPVYsZD0wO2Q8cztkKyspbj16cnQobikscj16cnQociksQnQrPVh0KHllKFEobiwoZmMoKSxrNykpKSksdys9WHQoeWUoUShyLGs3KSkpO2lmKF90PVh0KHllKFEoViwoZmMoKSxZZykpKSksTHQ9WHQoeWUoUShNLFlnKSkpLEY9Y210KE0sViksSD1fdCt3K3QuYStGLUx0LUJ0LDA8SCl7Zm9yKGs9ZSxDPTA7ayYmayE9cjspKytDLGs9dShRKGsseVYpLDg2KTtpZihrKWZvcihndD1IL0Msaz1lO2shPXI7KXR0PVh0KHllKFEoayxZZykpKStILEp0KGssWWcsdHQpLFk9WHQoeWUoUShrLGs3KSkpK0gsSnQoayxrNyxZKSxILT1ndCxrPXUoUShrLHlWKSw4Nik7ZWxzZSByZXR1cm59KytzLE0uZC5iPT0wP009WTV0KG5ldyBDcChlKSxzKTpNPXUobGooKG89ZWkobmV3IENwKE0pLmEuZCwwKSxuZXcgYngobykpKSw4NiksVj1NP3UoUShNLFNodCksODYpOm51bGx9fWZ1bmN0aW9uIFlsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNO2Zvcih3PSEwLHM9MCxrPXQuZltlLnBdLEM9ZS5vLmIrdC5uLG49dC5jW2UucF1bMl0sYWgodC5hLGssZGUodShGZSh0LmEsayksMTkpLmEtMStuKSksYWgodC5iLGssWHQoeWUoRmUodC5iLGspKSktQytuKnQuZSksKytrLGs+PXQuaT8oKyt0LmksdWUodC5hLGRlKDEpKSx1ZSh0LmIsQykpOihyPXQuY1tlLnBdWzFdLGFoKHQuYSxrLGRlKHUoRmUodC5hLGspLDE5KS5hKzEtcikpLGFoKHQuYixrLFh0KHllKEZlKHQuYixrKSkpK0Mtcip0LmUpKSwodC5xPT0odzQoKSxNTykmJih1KEZlKHQuYSxrKSwxOSkuYT50Lmp8fHUoRmUodC5hLGstMSksMTkpLmE+dC5qKXx8dC5xPT1JTyYmKFh0KHllKEZlKHQuYixrKSkpPnQua3x8WHQoeWUoRmUodC5iLGstMSkpKT50LmspKSYmKHc9ITEpLGg9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTHIoaCksMTcpLGQ9by5jLmksdC5mW2QucF09PWsmJihNPVlsZSh0LGQpLHM9cyt1KE0uYSwxOSkuYSx3PXcmJmplKFJlKE0uYikpKTtyZXR1cm4gdC5mW2UucF09ayxzPXMrdC5jW2UucF1bMF0sbmV3IGxhKGRlKHMpLChGbigpLCEhdykpfWZ1bmN0aW9uIHZ4dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKE09bmV3IENyLGg9bmV3IGxlLHZvZSh0LG4sdC5kLmZnKCksaCxNKSx2b2UodCxyLHQuZC5nZygpLGgsTSksdC5iPS4yKihZPWFjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBHUSkpLHR0PWFjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBWUSkpLGIuTWF0aC5taW4oWSx0dCkpLG89MCxkPTA7ZDxoLmMubGVuZ3RoLTE7ZCsrKWZvcih3PShBbihkLGguYy5sZW5ndGgpLHUoaC5jW2RdLDExMikpLFY9ZCsxO1Y8aC5jLmxlbmd0aDtWKyspbys9bHh0KHQsdywoQW4oVixoLmMubGVuZ3RoKSx1KGguY1tWXSwxMTIpKSk7Zm9yKEY9dShRKGUsKHNlKCksTzYpKSwyMzApLG8+PTImJihndD1BY2UoaCwhMCxGKSwhdC5lJiYodC5lPW5ldyBEJHQodCkpLGxobih0LmUsZ3QsaCx0LmIpKSxjYWUoaCxGKSxLM24oaCksSD0tMSxDPW5ldyBTKGgpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksIShiLk1hdGguYWJzKGsucy1rLmMpPHlkKSYmKEg9Yi5NYXRoLm1heChILGsubyksdC5kLmRnKGsscyx0LmMpKTtyZXR1cm4gdC5kLmEuYS4kYigpLEgrMX1mdW5jdGlvbiBYbGUodCxlKXt2YXIgbixyLHMsbyxoO249WHQoeWUoUShlLChUZSgpLHhmKSkpKSxuPDImJkp0KGUseGYsMikscj11KFEoZSxWbCksMTAzKSxyPT0oYW8oKSxjMCkmJkp0KGUsVmwsRXooZSkpLHM9dShRKGUsRndlKSwxOSkscy5hPT0wP0p0KGUsKHNlKCksTzYpLG5ldyB6aXQpOkp0KGUsKHNlKCksTzYpLG5ldyBUJChzLmEpKSxvPVJlKFEoZSxUUykpLG89PW51bGwmJkp0KGUsVFMsKEZuKCksR3QoUShlLFgwKSk9PT1HdCgocTAoKSxBNykpKSksdXMobmV3IFRuKG51bGwsbmV3IF9uKGUuYSwxNikpLG5ldyBncyh0KSksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBSNSksbmV3IHFpKHQpKSxoPW5ldyBIbGUoZSksSnQoZSwoc2UoKSxZNCksaCksdyQodC5hKSxVZCh0LmEsKFdhKCksQWQpLHUoUShlLFJ5KSwyNDYpKSxVZCh0LmEsbGIsdShRKGUsZUN0KSwyNDYpKSxVZCh0LmEsb3UsdShRKGUsRVMpLDI0NikpLFVkKHQuYSxxYyx1KFEoZSxyViksMjQ2KSksVWQodC5hLElvLGFjbih1KFEoZSxYMCksMjE4KSkpLG9VdCh0LmEsXzVuKGUpKSxKdChlLFJsdCxUcSh0LmEsZSkpfWZ1bmN0aW9uIE8zbih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7cmV0dXJuIEY9dC5jW2VdLEg9dC5jW25dLFY9dShRKEYsKHNlKCksSTYpKSwxNSksISFWJiZWLmdjKCkhPTAmJlYuSGMoSCl8fChZPUYuayE9KEduKCksWnMpJiZILmshPVpzLHR0PXUoUShGLEl3KSwxMCksZ3Q9dShRKEgsSXcpLDEwKSxMdD10dCE9Z3QsX3Q9ISF0dCYmdHQhPUZ8fCEhZ3QmJmd0IT1ILEJ0PWZzdChGLChiZSgpLE5uKSksWXQ9ZnN0KEgsbXIpLF90PV90fChmc3QoRixtcil8fGZzdChILE5uKSksY2U9X3QmJkx0fHxCdHx8WXQsWSYmY2UpfHxGLms9PShHbigpLEhjKSYmSC5rPT1Ec3x8SC5rPT0oR24oKSxIYykmJkYuaz09RHM/ITE6KEM9dC5jW2VdLG89dC5jW25dLHM9V3NlKHQuZSxDLG8sKGJlKCksQm4pKSx3PVdzZSh0LmksQyxvLEhuKSxDMm4odC5mLEMsbyksaz1icmUodC5iLEMsbykrdShzLmEsMTkpLmErdSh3LmEsMTkpLmErdC5mLmQsZD1icmUodC5iLG8sQykrdShzLmIsMTkpLmErdSh3LmIsMTkpLmErdC5mLmIsdC5hJiYoTT11KFEoQyxfaSksMTEpLGg9dShRKG8sX2kpLDExKSxyPUlzZSh0LmcsTSxoKSxrKz11KHIuYSwxOSkuYSxkKz11KHIuYiwxOSkuYSksaz5kKX1mdW5jdGlvbiBOM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2ZvcihuPXUoUSh0LChUZSgpLG9zKSksOTgpLGg9dC5mLG89dC5kLGQ9aC5hK28uYitvLmMsdz0wLW8uZC10LmMuYixDPWguYitvLmQrby5hLXQuYy5iLGs9bmV3IGxlLE09bmV3IGxlLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxMCksbi5nKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpEMm4ocik7YnJlYWs7Y2FzZSA0OkY9dShRKHIsUHcpLDgpLEg9Rj9GLmE6MCxyLm4uYT1kKlh0KHllKFEociwoc2UoKSxEdykpKSktSCxmeihyLCEwLCExKTticmVhaztjYXNlIDU6Vj11KFEocixQdyksOCksWT1WP1YuYTowLHIubi5hPVh0KHllKFEociwoc2UoKSxEdykpKSktWSxmeihyLCEwLCExKSxoLmE9Yi5NYXRoLm1heChoLmEsci5uLmErci5vLmEvMil9c3dpdGNoKHUoUShyLChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpyLm4uYj13LGsuY1trLmMubGVuZ3RoXT1yO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLE0uY1tNLmMubGVuZ3RoXT1yfX1zd2l0Y2gobi5nKXtjYXNlIDE6Y2FzZSAyOnpyZShrLHQpLHpyZShNLHQpO2JyZWFrO2Nhc2UgMzpxcmUoayx0KSxxcmUoTSx0KX19ZnVuY3Rpb24gUDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE07Zm9yKEM9bmV3IGxlLE09bmV3IFAzLG89bnVsbCxzPTAscj0wO3I8ZS5sZW5ndGg7KytyKXN3aXRjaChuPWVbcl0sdHVuKG8sbikmJihzPWszdCh0LE0sQyxnVixzKSksVnMobiwoc2UoKSxJdykpJiYobz11KFEobixJdyksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih3PWkydChPeChZbyhuLChiZSgpLE5uKSksbmV3IEJGKSk7c2l0KHcpOyloPXUoSW10KHcpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7Zm9yKHM9azN0KHQsTSxDLGdWLHMpLGs9aTJ0KE94KFlvKG4sbXIpLG5ldyBCRikpO3NpdChrKTspaD11KEltdChrKSwxMSksdC5kW2gucF09cysrLEMuY1tDLmMubGVuZ3RoXT1oO2JyZWFrO2Nhc2UgMzpZbyhuLFhDdCkuZGMoKXx8KGg9dShZbyhuLFhDdCkuWGIoMCksMTEpLHQuZFtoLnBdPXMrKyxDLmNbQy5jLmxlbmd0aF09aCksWW8obixnVikuZGMoKXx8cXAoTSxuKTticmVhaztjYXNlIDE6Zm9yKGQ9WW8obiwoYmUoKSxCbikpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7WW8obixIbikuSmMobmV3IFpHdChNLG4pKX1yZXR1cm4gazN0KHQsTSxDLGdWLHMpLEN9ZnVuY3Rpb24gUWxlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdDtmb3Ioaz1zcyxDPXNzLGQ9VHMsdz1UcyxGPW5ldyBTKGUuaSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksNjUpLHM9dSh1KEpuKHQuZyxNLmEpLDQ2KS5iLDMzKSxtMShzLE0uYi5jLE0uYi5kKSxrPWIuTWF0aC5taW4oayxzLmkpLEM9Yi5NYXRoLm1pbihDLHMuaiksZD1iLk1hdGgubWF4KGQscy5pK3MuZyksdz1iLk1hdGgubWF4KHcscy5qK3MuZik7Zm9yKEg9dShxZSh0LmMsKHJEKCksZjNlKSksMTE2KSxndyh0LmMsZC1rKyhILmIrSC5jKSx3LUMrKEguZCtILmEpLCEwLCEwKSxBNHQodC5jLC1rK0guYiwtQytILmQpLHI9bmV3IGVyKF9YdCh0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGg9bTQobiwhMCwhMCksVj1aZChuKSx0dD1YcChuKSxZPW5ldyAkZShWLmkrVi5nLzIsVi5qK1YuZi8yKSxvPW5ldyAkZSh0dC5pK3R0LmcvMix0dC5qK3R0LmYvMiksZ3Q9bmEobmV3ICRlKG8uYSxvLmIpLFkpLGhFKGd0LFYuZyxWLmYpLExpKFksZ3QpLEx0PW5hKG5ldyAkZShZLmEsWS5iKSxvKSxoRShMdCx0dC5nLHR0LmYpLExpKG8sTHQpLG9qKGgsWS5hLFkuYiksYWooaCxvLmEsby5iKX1mdW5jdGlvbiBGM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZih0LmM9dC5kLFY9UmUoUShlLChUZSgpLEJ3ZSkpKSxIPVY9PW51bGx8fChPbihWKSxWKSxvPXUoUShlLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkscz11KFEoZSxvcyksOTgpLG49IShzPT0ob2EoKSxHMil8fHM9PWgwfHxzPT1WYyksSCYmKG58fCFvKSl7Zm9yKE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMCksay5wPTA7Zm9yKEY9bmV3IGxlLEM9bmV3IFMoZS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihrPXUoSihDKSwxMCkscj1WdWUodCxrLG51bGwpLHIpe2Zvcih3PW5ldyBLbXQsTG8odyxlKSxKdCh3LE55LHUoci5iLDIxKSksU3d0KHcuZCxlLmQpLEp0KHcscDcsbnVsbCksZD11KHIuYSwxNSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTApLHVlKHcuYSxoKSxoLmE9dztGLkZjKHcpfW8mJihHdChRKGUsUDYpKT09PUd0KChldygpLEp1dCkpP3QuYz10LmI6dC5jPXQuYSl9ZWxzZSBGPW5ldyB3bChjdChvdChPYmUsMSksVWZlLDM3LDAsW2VdKSk7cmV0dXJuIEd0KFEoZSxQNikpIT09R3QoKGV3KCksJDQpKSYmKHZuKCksRi5hZChuZXcgSkspKSxGfWZ1bmN0aW9uIFpsZSh0KXtTdih0LG5ldyB3MihyYnQobVIoRXYoeXYoa3YoeHYobmV3IHBnLEhnKSwiRUxLIE1yLiBUcmVlIiksIlRyZWUtYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIENvbXB1dGVzIGEgc3Bhbm5pbmcgdHJlZSBvZiB0aGUgaW5wdXQgZ3JhcGggYW5kIGFycmFuZ2VzIGFsbCBub2RlcyBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdGluZyBwYXJlbnQtY2hpbGRyZW4gaGllcmFyY2h5LiBJIHBpdHkgdGhlIGZvb2wgd2hvIGRvZXNuJ3QgdXNlIE1yLiBUcmVlIExheW91dC4iKSxuZXcgWVEpLEQxZSksdW4oKHZFKCkseWZ0KSkpKSkseGUodCxIZyx3dyxzX3QpLHhlKHQsSGcsa3ksMjApLHhlKHQsSGcsYjYsQkUpLHhlKHQsSGcsakQsZGUoMSkpLHhlKHQsSGcsUF8sKEZuKCksITApKSx4ZSh0LEhnLEtELERlKHJfdCkpLHhlKHQsSGcsTDQsRGUoaXllKSkseGUodCxIZyx3NixEZShzeWUpKSx4ZSh0LEhnLHY2LERlKGF5ZSkpLHhlKHQsSGcsUkUsRGUocnllKSkseGUodCxIZyxGXyxEZShpX3QpKSx4ZSh0LEhnLGpFLERlKGN5ZSkpLHhlKHQsSGcsRmt0LERlKGx5ZSkpLHhlKHQsSGcsQmt0LERlKGFfdCkpfWZ1bmN0aW9uIEIzbih0KXt0LnF8fCh0LnE9ITAsdC5wPWljKHQsMCksdC5hPWljKHQsMSksUGkodC5hLDApLHQuZj1pYyh0LDIpLFBpKHQuZiwxKSxlcyh0LmYsMiksdC5uPWljKHQsMyksZXModC5uLDMpLGVzKHQubiw0KSxlcyh0Lm4sNSksZXModC5uLDYpLHQuZz1pYyh0LDQpLFBpKHQuZyw3KSxlcyh0LmcsOCksdC5jPWljKHQsNSksUGkodC5jLDcpLFBpKHQuYyw4KSx0Lmk9aWModCw2KSxQaSh0LmksOSksUGkodC5pLDEwKSxQaSh0LmksMTEpLFBpKHQuaSwxMiksZXModC5pLDEzKSx0Lmo9aWModCw3KSxQaSh0LmosOSksdC5kPWljKHQsOCksUGkodC5kLDMpLFBpKHQuZCw0KSxQaSh0LmQsNSksUGkodC5kLDYpLGVzKHQuZCw3KSxlcyh0LmQsOCksZXModC5kLDkpLGVzKHQuZCwxMCksdC5iPWljKHQsOSksZXModC5iLDApLGVzKHQuYiwxKSx0LmU9aWModCwxMCksZXModC5lLDEpLGVzKHQuZSwyKSxlcyh0LmUsMyksZXModC5lLDQpLFBpKHQuZSw1KSxQaSh0LmUsNiksUGkodC5lLDcpLFBpKHQuZSw4KSxQaSh0LmUsOSksUGkodC5lLDEwKSxlcyh0LmUsMTEpLHQuaz1pYyh0LDExKSxlcyh0LmssMCksZXModC5rLDEpLHQubz1haSh0LDEyKSx0LnM9YWkodCwxMykpfWZ1bmN0aW9uIHd4dCh0LGUpe2UuZGMoKSYmR2QodC5qLCEwLCEwLCEwLCEwKSx5aShlLChiZSgpLFNmKSkmJkdkKHQuaiwhMCwhMCwhMCwhMSkseWkoZSx2aCkmJkdkKHQuaiwhMSwhMCwhMCwhMCkseWkoZSxXbCkmJkdkKHQuaiwhMCwhMCwhMSwhMCkseWkoZSxxaCkmJkdkKHQuaiwhMCwhMSwhMCwhMCkseWkoZSx0bCkmJkdkKHQuaiwhMSwhMCwhMCwhMSkseWkoZSx3aCkmJkdkKHQuaiwhMSwhMCwhMSwhMCkseWkoZSxLbCkmJkdkKHQuaiwhMCwhMSwhMSwhMCkseWkoZSxBZikmJkdkKHQuaiwhMCwhMSwhMCwhMSkseWkoZSxfdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSx1dSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxfdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxDdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxTdSkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxlbCkmJkdkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxVYykmJkdkKHQuaiwhMCwhMCwhMCwhMCl9ZnVuY3Rpb24gUjNuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3Iobz1uZXcgbGUsaz1uZXcgUyhyKTtrLmE8ay5jLmMubGVuZ3RoOylpZihkPXUoSihrKSw0NDEpLGg9bnVsbCxkLmY9PShzbygpLGV1KSlmb3IoVj1uZXcgUyhkLmUpO1YuYTxWLmMuYy5sZW5ndGg7KUg9dShKKFYpLDE3KSx0dD1ILmQuaSxGYSh0dCk9PWU/ZGVlKHQsZSxkLEgsZC5iLEguZCk6IW58fFY4KHR0LG4pP3cwbih0LGUsZCxyLEgpOihGPUVhdCh0LGUsbixILGQuYixldSxoKSxGIT1oJiYoby5jW28uYy5sZW5ndGhdPUYpLEYuYyYmKGg9RikpO2Vsc2UgZm9yKE09bmV3IFMoZC5lKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxNyksWT1DLmMuaSxGYShZKT09ZSlkZWUodCxlLGQsQyxDLmMsZC5iKTtlbHNle2lmKCFufHxWOChZLG4pKWNvbnRpbnVlO0Y9RWF0KHQsZSxuLEMsZC5iLEp1LGgpLEYhPWgmJihvLmNbby5jLmxlbmd0aF09RiksRi5jJiYoaD1GKX1mb3Iodz1uZXcgUyhvKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSw0NDEpLFJvKGUuYSxkLmEsMCkhPS0xfHx1ZShlLmEsZC5hKSxkLmMmJihzLmNbcy5jLmxlbmd0aF09ZCl9ZnVuY3Rpb24gajNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Ioaz1uZXcgbGUsdz1uZXcgUyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihoPXUoSih3KSwxMCksRj1ZbyhoLChiZSgpLEhuKSkuS2MoKTtGLk9iKCk7KWZvcihNPXUoRi5QYigpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCEoIVZhKHIpJiZyLmMuaS5jPT1yLmQuaS5jfHxWYShyKXx8ci5kLmkuYyE9bikmJihrLmNbay5jLmxlbmd0aF09cik7Zm9yKGQ9YTIobi5hKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLEY9WW8oaCwoYmUoKSxCbikpLktjKCk7Ri5PYigpOylmb3IoTT11KEYuUGIoKSwxMSkscz1uZXcgUyhNLmUpO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDE3KSwhKCFWYShyKSYmci5jLmkuYz09ci5kLmkuY3x8VmEocil8fHIuYy5pLmMhPWUpKXtmb3IoQz1uZXcgaGEoayxrLmMubGVuZ3RoKSxvPShRbihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO28hPXImJkMuYj4wOyl0LmFbby5wXT0hMCx0LmFbci5wXT0hMCxvPShRbihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO0MuYj4wJiZFbChDKX19ZnVuY3Rpb24gSmxlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYodC5hIT1lLkFqKCkpdGhyb3cgcnQobmV3IFBuKEhFK2UubmUoKStrdykpO2lmKHI9T2coKFJ1KCksbWEpLGUpLiRrKCkscilyZXR1cm4gci5BaigpLk5oKCkuSWgocixuKTtpZihoPU9nKG1hLGUpLmFsKCksaCl7aWYobj09bnVsbClyZXR1cm4gbnVsbDtpZihkPXUobiwxNSksZC5kYygpKXJldHVybiIiO2ZvcihNPW5ldyB4ZyxvPWQuS2MoKTtvLk9iKCk7KXM9by5QYigpLGZvKE0saC5BaigpLk5oKCkuSWgoaCxzKSksTS5hKz0iICI7cmV0dXJuIFdldChNLE0uYS5sZW5ndGgtMSl9aWYoQz1PZyhtYSxlKS5ibCgpLCFDLmRjKCkpe2ZvcihrPUMuS2MoKTtrLk9iKCk7KWlmKHc9dShrLlBiKCksMTQ4KSx3LndqKG4pKXRyeXtpZihNPXcuQWooKS5OaCgpLkloKHcsbiksTSE9bnVsbClyZXR1cm4gTX1jYXRjaChGKXtpZihGPVdpKEYpLCFFdChGLDEwMikpdGhyb3cgcnQoRil9dGhyb3cgcnQobmV3IFBuKCJJbnZhbGlkIHZhbHVlOiAnIituKyInIGZvciBkYXRhdHlwZSA6IitlLm5lKCkpKX1yZXR1cm4gdShlLDgzNCkuRmooKSxuPT1udWxsP251bGw6RXQobiwxNzIpPyIiK3UobiwxNzIpLmE6c2wobik9PUhIP1NVdChyQVswXSx1KG4sMTk5KSk6JG8obil9ZnVuY3Rpb24gJDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDO2ZvcihrPW5ldyBRaSxkPW5ldyBRaSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEyOCksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmaHMoayxyLGsuYy5iLGsuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZocyhkLHIsZC5jLmIsZC5jKTtmb3IoaD0tMTtrLmIhPTA7KWZvcihyPXUoeXN0KGssMCksMTI4KSxuPW5ldyBTKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjY4KSxDPWUuYixDLnY9Yi5NYXRoLm1heChDLnYsci52KzEpLGg9Yi5NYXRoLm1heChoLEMudiksLS1DLm4sQy5uPT0wJiZocyhrLEMsay5jLmIsay5jKTtpZihoPi0xKXtmb3Iocz1laShkLDApO3MuYiE9cy5kLmM7KXI9dSh0aShzKSwxMjgpLHIudj1oO2Zvcig7ZC5iIT0wOylmb3Iocj11KHlzdChkLDApLDEyOCksbj1uZXcgUyhyLmkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI2OCksdz1lLmEsdy5yLmEuZ2MoKT09MCYmKHcudj1iLk1hdGgubWluKHcudixyLnYtMSksLS13LnUsdy51PT0wJiZocyhkLHcsZC5jLmIsZC5jKSl9fWZ1bmN0aW9uIHRoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3O3JldHVybiB3PXNzLGg9ITEsZD1jeHQodCxuYShuZXcgJGUoZS5hLGUuYiksdCksTGkobmV3ICRlKG4uYSxuLmIpLHMpLG5hKG5ldyAkZShyLmEsci5iKSxuKSksbz0hIWQmJiEoYi5NYXRoLmFicyhkLmEtdC5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLXQuYik8PXl3fHxiLk1hdGguYWJzKGQuYS1lLmEpPD15dyYmYi5NYXRoLmFicyhkLmItZS5iKTw9eXcpLGQ9Y3h0KHQsbmEobmV3ICRlKGUuYSxlLmIpLHQpLG4scyksZCYmKChiLk1hdGguYWJzKGQuYS10LmEpPD15dyYmYi5NYXRoLmFicyhkLmItdC5iKTw9eXcpPT0oYi5NYXRoLmFicyhkLmEtZS5hKTw9eXcmJmIuTWF0aC5hYnMoZC5iLWUuYik8PXl3KXx8bz93PWIuTWF0aC5taW4odyxBQyhuYShkLG4pKSk6aD0hMCksZD1jeHQodCxuYShuZXcgJGUoZS5hLGUuYiksdCkscixzKSxkJiYoaHx8KGIuTWF0aC5hYnMoZC5hLXQuYSk8PXl3JiZiLk1hdGguYWJzKGQuYi10LmIpPD15dyk9PShiLk1hdGguYWJzKGQuYS1lLmEpPD15dyYmYi5NYXRoLmFicyhkLmItZS5iKTw9eXcpfHxvKSYmKHc9Yi5NYXRoLm1pbih3LEFDKG5hKGQscikpKSksd31mdW5jdGlvbiBlaGUodCl7U3YodCxuZXcgdzIobVIoRXYoeXYoa3YoeHYobmV3IHBnLHJiKSxHZmUpLCJNaW5pbWl6ZXMgdGhlIHN0cmVzcyB3aXRoaW4gYSBsYXlvdXQgdXNpbmcgc3RyZXNzIG1ham9yaXphdGlvbi4gU3RyZXNzIGV4aXN0cyBpZiB0aGUgZXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzIGRvZXNuJ3QgbWF0Y2ggdGhlaXIgZ3JhcGggdGhlb3JldGljIGRpc3RhbmNlLCB0aGF0IGlzLCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHRoZSB0d28gbm9kZXMuIFRoZSBtZXRob2QgYWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBlZGdlIGxlbmd0aHMuIiksbmV3IGwxKSxxbCkpKSx4ZSh0LHJiLCRELERlKHg3dCkpLHhlKHQscmIsR3EsKEZuKCksITApKSx4ZSh0LHJiLEw0LERlKGZiZSkpLHhlKHQscmIsdzYsRGUoZGJlKSkseGUodCxyYix2NixEZShnYmUpKSx4ZSh0LHJiLFJFLERlKGhiZSkpLHhlKHQscmIsRl8sRGUoRTd0KSkseGUodCxyYixqRSxEZShwYmUpKSx4ZSh0LHJiLGg2dCxEZSh5N3QpKSx4ZSh0LHJiLGQ2dCxEZSh3N3QpKSx4ZSh0LHJiLGc2dCxEZShtN3QpKSx4ZSh0LHJiLHA2dCxEZShrN3QpKSx4ZSh0LHJiLGY2dCxEZShvRykpfWZ1bmN0aW9uIHozbih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHdyKGUsIkludGVyYWN0aXZlIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyOSksci5wPWgrKztmb3IoRj1tNHQodCksdHQ9bmV3IGlidChGLmxlbmd0aCksTGxlKG5ldyB3bChjdChvdChRYmUsMSksSWUsMjI1LDAsW3R0XSkpLEYpLFk9MCxoPTAscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMjkpLG49MCxNPTAsQz1uZXcgUyhyLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih3PXUoSihDKSwxMCksdy5uLmE+MCYmKG4rPXcubi5hK3cuby5hLzIsKytNKSxWPW5ldyBTKHcuaik7Vi5hPFYuYy5jLmxlbmd0aDspSD11KEooViksMTEpLEgucD1ZKys7Zm9yKE0+MCYmKG4vPU0pLGd0PVB0KGlhLHZvLDI1LHIuYS5jLmxlbmd0aCwxNSwxKSxkPTAsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDEwKSx3LnA9ZCsrLGd0W3cucF09TDNuKHcsbiksdy5rPT0oR24oKSxacykmJkp0KHcsKHNlKCksdDl0KSxndFt3LnBdKTt2bigpLFhzKHIuYSxuZXcgbCR0KGd0KSksanVlKHR0LEYsaCwhMCksKytofW9yKGUpfWZ1bmN0aW9uIF9fKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKGUuZT09NSl7V2xlKHQsZSk7cmV0dXJufWlmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKGI0KHQpLFRfKHQpLGI0KGspLFRfKGspLG49UHQoVHIsWHIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLEM9MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHc9ay5iW2grMV0sbzxkKW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107ZWxzZSBpZihvPj1kJiZzPD13KWQ8PXMmJm88PXc/cis9MjpkPD1zPyh0LmJbcl09dysxLGgrPTIpOm88PXc/KG5bQysrXT1zLG5bQysrXT1kLTEscis9Mik6KG5bQysrXT1zLG5bQysrXT1kLTEsdC5iW3JdPXcrMSxoKz0yKTtlbHNlIGlmKHc8cyloKz0yO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAtIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107dC5iPVB0KFRyLFhyLDI1LEMsMTUsMSksSWMobiwwLHQuYiwwLEMpfX1mdW5jdGlvbiBxM24odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuQS5kYygpKXtpZih0LkEuSGMoKF9sKCksbk4pKSYmKHUoZ28odC5iLChiZSgpLE5uKSksMTI0KS5rPSEwLHUoZ28odC5iLG1yKSwxMjQpLms9ITAsZT10LnEhPShvYSgpLGgwKSYmdC5xIT1WYyxlTSh1KGdvKHQuYixIbiksMTI0KSxlKSxlTSh1KGdvKHQuYixCbiksMTI0KSxlKSxlTSh0LmcsZSksdC5BLkhjKFYyKSYmKHUoZ28odC5iLE5uKSwxMjQpLmo9ITAsdShnbyh0LmIsbXIpLDEyNCkuaj0hMCx1KGdvKHQuYixIbiksMTI0KS5rPSEwLHUoZ28odC5iLEJuKSwxMjQpLms9ITAsdC5nLms9ITApKSx0LkEuSGMoZU4pKWZvcih0LmEuaj0hMCx0LmEuaz0hMCx0Lmcuaj0hMCx0Lmcuaz0hMCxkPXQuQi5IYygoY2woKSxlQSkpLHM9Sml0KCksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbj11KGdvKHQuaSxyKSwzMDYpLG4mJihTM3Qocik/KG4uaj0hMCxuLms9ITApOihuLmo9IWQsbi5rPSFkKSk7dC5BLkhjKFh5KSYmdC5CLkhjKChjbCgpLGlOKSkmJih0Lmcuaj0hMCx0Lmcuaj0hMCx0LmEuanx8KHQuYS5qPSEwLHQuYS5rPSEwLHQuYS5lPSEwKSl9fWZ1bmN0aW9uIEgzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHI9bmV3IFModC5lLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDEwKSxIPXQuaVtzLnBdLGs9SC5hLmUsdz1ILmQuZSxzLm4uYj1rLGd0PXctay1zLm8uYixlPXhhdChzKSxGPShzeSgpLChzLnE/cy5xOih2bigpLHZuKCksYTApKS5fYigoVGUoKSxOdykpP009dShRKHMsTncpLDE5Nyk6TT11KFEoRmEocyksQ1MpLDE5NyksTSksZSYmKEY9PXQ1fHxGPT1KNCkmJihzLm8uYis9Z3QpLGUmJihGPT1jaHR8fEY9PXQ1fHxGPT1KNCkpe2ZvcihZPW5ldyBTKHMuaik7WS5hPFkuYy5jLmxlbmd0aDspVj11KEooWSksMTEpLChiZSgpLHV1KS5IYyhWLmopJiYoQz11KEpuKHQuayxWKSwxMjEpLFYubi5iPUMuZS1rKTtmb3IoZD1uZXcgUyhzLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDcwKSx0dD11KFEocyxPdyksMjEpLHR0LkhjKChmeSgpLHpoKSk/aC5uLmIrPWd0OnR0LkhjKGwwKSYmKGgubi5iKz1ndC8yKTsoRj09dDV8fEY9PUo0KSYmWW8ocywoYmUoKSxtcikpLkpjKG5ldyBfJHQoZ3QpKX19ZnVuY3Rpb24gbmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2lmKCF0LmIpcmV0dXJuITE7Zm9yKGg9bnVsbCxGPW51bGwsdz1uZXcgJHJ0KG51bGwsbnVsbCkscz0xLHcuYVsxXT10LmIsTT13O00uYVtzXTspaz1zLGQ9RixGPU0sTT1NLmFbc10scj10LmEudWUoZSxNLmQpLHM9cjwwPzA6MSxyPT0wJiYoIW4uY3x8UGMoTS5lLG4uZCkpJiYoaD1NKSwhKE0mJk0uYikmJiFBbShNLmFbc10pJiYoQW0oTS5hWzEtc10pP0Y9Ri5hW2tdPW56KE0scyk6QW0oTS5hWzEtc10pfHwoSD1GLmFbMS1rXSxIJiYoIUFtKEguYVsxLWtdKSYmIUFtKEguYVtrXSk/KEYuYj0hMSxILmI9ITAsTS5iPSEwKToobz1kLmFbMV09PUY/MTowLEFtKEguYVtrXSk/ZC5hW29dPXVadChGLGspOkFtKEguYVsxLWtdKSYmKGQuYVtvXT1ueihGLGspKSxNLmI9ZC5hW29dLmI9ITAsZC5hW29dLmFbMF0uYj0hMSxkLmFbb10uYVsxXS5iPSExKSkpKTtyZXR1cm4gaCYmKG4uYj0hMCxuLmQ9aC5lLE0hPWgmJihDPW5ldyAkcnQoTS5kLE0uZSksdTBuKHQsdyxoLEMpLEY9PWgmJihGPUMpKSxGLmFbRi5hWzFdPT1NPzE6MF09TS5hW00uYVswXT8wOjFdLC0tdC5jKSx0LmI9dy5hWzFdLHQuYiYmKHQuYi5iPSExKSxuLmJ9ZnVuY3Rpb24gRzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtmb3Iocz1uZXcgUyh0LmEuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksNTcpLHc9ci5jLktjKCk7dy5PYigpOylkPXUody5QYigpLDU3KSxyLmEhPWQuYSYmKE9wKHQuYS5kKT9NPXQuYS5nLk9lKHIsZCk6TT10LmEuZy5QZShyLGQpLG89ci5iLmErci5kLmIrTS1kLmIuYSxvPWIuTWF0aC5jZWlsKG8pLG89Yi5NYXRoLm1heCgwLG8pLFBtdChyLGQpPyhoPUR2KG5ldyBVYix0LmQpLGs9cHMoYi5NYXRoLmNlaWwoZC5iLmEtci5iLmEpKSxlPWstKGQuYi5hLXIuYi5hKSxDPUh4KHIpLmEsbj1yLEN8fChDPUh4KGQpLmEsZT0tZSxuPWQpLEMmJihuLmIuYS09ZSxDLm4uYS09ZSksdmYob2YoYWYoY2Yoc2YobmV3IEVoLGIuTWF0aC5tYXgoMCxrKSksMSksaCksdC5jW3IuYS5kXSkpLHZmKG9mKGFmKGNmKHNmKG5ldyBFaCxiLk1hdGgubWF4KDAsLWspKSwxKSxoKSx0LmNbZC5hLmRdKSkpOihGPTEsKEV0KHIuZywxNDUpJiZFdChkLmcsMTApfHxFdChkLmcsMTQ1KSYmRXQoci5nLDEwKSkmJihGPTIpLHZmKG9mKGFmKGNmKHNmKG5ldyBFaCxwcyhvKSksRiksdC5jW3IuYS5kXSksdC5jW2QuYS5kXSkpKSl9ZnVuY3Rpb24gcmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtpZihuKWZvcihyPS0xLEM9bmV3IGhhKGUsMCk7Qy5iPEMuZC5nYygpOyl7aWYoZD0oUW4oQy5iPEMuZC5nYygpKSx1KEMuZC5YYihDLmM9Qy5iKyspLDEwKSksTT10LmNbZC5jLnBdW2QucF0uYSxNPT1udWxsKXtmb3IoaD1yKzEsbz1uZXcgaGEoZSxDLmIpO28uYjxvLmQuZ2MoKTspaWYoRj1PWGUodCwoUW4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDEwKSkpLmEsRiE9bnVsbCl7aD0oT24oRiksRik7YnJlYWt9TT0ocitoKS8yLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9KE9uKE0pLE0pLHQuY1tkLmMucF1bZC5wXS5iPTF9cj0oT24oTSksTSl9ZWxzZXtmb3Iocz0wLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLHQuY1tkLmMucF1bZC5wXS5hIT1udWxsJiYocz1iLk1hdGgubWF4KHMsWHQodC5jW2QuYy5wXVtkLnBdLmEpKSk7Zm9yKHMrPTIsdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxMCksdC5jW2QuYy5wXVtkLnBdLmE9PW51bGwmJihNPW9sKHQuaSwyNCkqUEQqcy0xLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9TSx0LmNbZC5jLnBdW2QucF0uYj0xKX19ZnVuY3Rpb24gVjNuKCl7cmkoWnksbmV3IG9CKSxyaShacixuZXcgZkIpLHJpKEdoLG5ldyBmSikscmkoaTEsbmV3IGpMKSxyaShDZnQsbmV3ICRMKSxyaShpVSxuZXcgcngpLHJpKGVnLG5ldyBkSikscmkobkEsbmV3IGdKKSxyaShvTixuZXcgUVopLHJpKG1mdCxuZXcgWlopLHJpKGtiLG5ldyBKWikscmkoVmgsbmV3IHRKKSxyaShyMSxuZXcgZUopLHJpKHp3LG5ldyBuSikscmkoSnksbmV3IGFCKSxyaShBdSxuZXcgckopLHJpKFF5LG5ldyBpSikscmkoY2MsbmV3IHNKKSxyaShobyxuZXcgSWspLHJpKGx1LG5ldyBaVCkscmkoQnMsbmV3IGNCKSxyaShvdChIdSwxKSxuZXcgYUopLHJpKEU2LG5ldyB1QikscmkoYVMsbmV3IGxCKSxyaShISCxuZXcgb0opLHJpKFNMdCxuZXcgSlQpLHJpKGNhLG5ldyBrbSkscmkocUF0LG5ldyBoQikscmkoVkF0LG5ldyBjSikscmkoZ0x0LG5ldyB1Sikscmkoc1UsbmV3IHQ5KSxyaShYRSxuZXcgZEIpLHJpKGphLG5ldyBnQikscmkoVTh0LG5ldyB1YykscmkoVHcsbmV3IGxKKSxyaShXOHQsbmV3IHBCKSxyaShsTHQsbmV3IGU5KSxyaShBTHQsbmV3IGhKKSxyaShDdyxuZXcgbjkpLHJpKEFlLG5ldyBiQikscmkoR0F0LG5ldyByOSkscmkoTEx0LG5ldyBpOSl9ZnVuY3Rpb24gVTNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07Zm9yKCFuJiYobj1BY24oZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkpKSxzPShlLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmEpKjZlNCxkPW5ldyBIMnQoT2Eoa3UoZS5xLmdldFRpbWUoKSkscykpLHc9ZCxkLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkmJihzPjA/cy09ODY0ZTU6cys9ODY0ZTUsdz1uZXcgSDJ0KE9hKGt1KGUucS5nZXRUaW1lKCkpLHMpKSksQz1uZXcgTG0saz10LmEubGVuZ3RoLG89MDtvPGs7KWlmKHI9YmEodC5hLG8pLHI+PTk3JiZyPD0xMjJ8fHI+PTY1JiZyPD05MCl7Zm9yKGg9bysxO2g8ayYmYmEodC5hLGgpPT1yOysraCk7JDVuKEMscixoLW8sZCx3LG4pLG89aH1lbHNlIGlmKHI9PTM5KXtpZigrK28sbzxrJiZiYSh0LmEsbyk9PTM5KXtDLmErPSInIiwrK287Y29udGludWV9Zm9yKE09ITE7IU07KXtmb3IoaD1vO2g8ayYmYmEodC5hLGgpIT0zOTspKytoO2lmKGg+PWspdGhyb3cgcnQobmV3IFBuKCJNaXNzaW5nIHRyYWlsaW5nICciKSk7aCsxPGsmJmJhKHQuYSxoKzEpPT0zOT8rK2g6TT0hMCxWcihDLERsKHQuYSxvLGgpKSxvPWgrMX19ZWxzZSBDLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvO3JldHVybiBDLmF9ZnVuY3Rpb24gVzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHc7Zm9yKGU9bnVsbCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIzMyksWHQoeDEobi5nLG4uZFswXSkuYSksbi5iPW51bGwsbi5lJiZuLmUuZ2MoKT4wJiZuLmM9PTAmJighZSYmKGU9bmV3IGxlKSxlLmNbZS5jLmxlbmd0aF09bik7aWYoZSlmb3IoO2UuYy5sZW5ndGghPTA7KXtpZihuPXUoQWcoZSwwKSwyMzMpLG4uYiYmbi5iLmMubGVuZ3RoPjApe2ZvcihvPSghbi5iJiYobi5iPW5ldyBsZSksbmV3IFMobi5iKSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjMzKSxsTSh4MShzLmcscy5kWzBdKS5hKT09bE0oeDEobi5nLG4uZFswXSkuYSkpe2lmKFJvKHQscywwKT5Sbyh0LG4sMCkpcmV0dXJuIG5ldyBsYShzLG4pfWVsc2UgaWYoWHQoeDEocy5nLHMuZFswXSkuYSk+WHQoeDEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBsYShzLG4pfWZvcihkPSghbi5lJiYobi5lPW5ldyBsZSksbi5lKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwyMzMpLHc9KCFoLmImJihoLmI9bmV3IGxlKSxoLmIpLFVtKDAsdy5jLmxlbmd0aCksVzkody5jLDAsbiksaC5jPT13LmMubGVuZ3RoJiYoZS5jW2UuYy5sZW5ndGhdPWgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGloZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQztpZih0PT1udWxsKXJldHVybiBUdTtpZih3PWUuYS56Yyh0LGUpLHchPW51bGwpcmV0dXJuIlsuLi5dIjtmb3Iobj1uZXcgYzIoS2EsIlsiLCJdIikscz10LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHIhPW51bGwmJnNsKHIpLmkmND9BcnJheS5pc0FycmF5KHIpJiYoQz14SShyKSwhKEM+PTE0JiZDPD0xNikpP2UuYS5fYihyKT8obi5hP1ZyKG4uYSxuLmIpOm4uYT1uZXcgSWwobi5kKSxjQyhuLmEsIlsuLi5dIikpOihkPXMyKHIpLGs9bmV3IHlDKGUpLFAwKG4saWhlKGQsaykpKTpFdChyLDE3Nyk/UDAobixCZ24odShyLDE3NykpKTpFdChyLDE5MCk/UDAobixfZG4odShyLDE5MCkpKTpFdChyLDE5NSk/UDAobixGMG4odShyLDE5NSkpKTpFdChyLDIwMTIpP1AwKG4sU2RuKHUociwyMDEyKSkpOkV0KHIsNDgpP1AwKG4sRmduKHUociw0OCkpKTpFdChyLDM2NCk/UDAobixYZ24odShyLDM2NCkpKTpFdChyLDgzMik/UDAobixQZ24odShyLDgzMikpKTpFdChyLDEwNCkmJlAwKG4sTmduKHUociwxMDQpKSk6UDAobixyPT1udWxsP1R1OiRvKHIpKTtyZXR1cm4gbi5hP24uZS5sZW5ndGg9PTA/bi5hLmE6bi5hLmErKCIiK24uZSk6bi5jfWZ1bmN0aW9uIHNoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKGQ9bTQoZSwhMSwhMSksZ3Q9c0QoZCksciYmKGd0PUJJKGd0KSksX3Q9WHQoeWUocWUoZSwoaV8oKSwkdXQpKSkpLHR0PShRbihndC5iIT0wKSx1KGd0LmEuYS5jLDgpKSxNPXUoUWYoZ3QsMSksOCksZ3QuYj4yPyhDPW5ldyBsZSxBcyhDLG5ldyBLZChndCwxLGd0LmIpKSxvPVJoZShDLF90K3QuYSksTHQ9bmV3IFZzdChvKSxMbyhMdCxlKSxuLmNbbi5jLmxlbmd0aF09THQpOnI/THQ9dShKbih0LmIsWmQoZSkpLDI2Nik6THQ9dShKbih0LmIsWHAoZSkpLDI2Niksdz1aZChlKSxyJiYodz1YcChlKSksaD1uZ24odHQsdyksaz1fdCt0LmEsaC5hPyhrKz1iLk1hdGguYWJzKHR0LmItTS5iKSxZPW5ldyAkZShNLmEsKE0uYit0dC5iKS8yKSk6KGsrPWIuTWF0aC5hYnModHQuYS1NLmEpLFk9bmV3ICRlKChNLmErdHQuYSkvMixNLmIpKSxyP2tpKHQuZCxlLG5ldyBxM3QoTHQsaCxZLGspKTpraSh0LmMsZSxuZXcgcTN0KEx0LGgsWSxrKSksa2kodC5iLGUsTHQpLFY9KCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSxIPW5ldyBlcihWKTtILmUhPUguaS5nYygpOylGPXUoZHIoSCksMTM3KSxzPWJEKHQsRiwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1zfWZ1bmN0aW9uIEszbih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQztmb3Ioaz1uZXcgbGUsZD1uZXcgbGUsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMTIpLG5NKHMscy5mLmMubGVuZ3RoKSx4OShzLHMuay5jLmxlbmd0aCkscy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPXMpLHMuaT09MCYmcy5lLmI9PTAmJihkLmNbZC5jLmxlbmd0aF09cyk7Zm9yKHI9LTE7ay5jLmxlbmd0aCE9MDspZm9yKHM9dShBZyhrLDApLDExMiksbj1uZXcgUyhzLmspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksQz1lLmIsWUIoQyxiLk1hdGgubWF4KEMubyxzLm8rMSkpLHI9Yi5NYXRoLm1heChyLEMubyksbk0oQyxDLmQtMSksQy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPUMpO2lmKHI+LTEpe2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExMikscy5vPXI7Zm9yKDtkLmMubGVuZ3RoIT0wOylmb3Iocz11KEFnKGQsMCksMTEyKSxuPW5ldyBTKHMuZik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTI5KSx3PWUuYSwhKHcuZS5iPjApJiYoWUIodyxiLk1hdGgubWluKHcubyxzLm8tMSkpLHg5KHcsdy5pLTEpLHcuaT09MCYmKGQuY1tkLmMubGVuZ3RoXT13KSl9fWZ1bmN0aW9uIF9FKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsaztpZihrPXQuYywhZSYmKGU9dEx0KSx0LmM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHc9bmV3IFFzKHQsMSwyLGssdC5jKSxuP24uRWkodyk6bj13KSxrIT1lKXtpZihFdCh0LkNiLDI4NCkpdC5EYj4+MTY9PS0xMD9uPXUodC5DYiwyODQpLm5rKGUsbik6dC5EYj4+MTY9PS0xNSYmKCFlJiYoZT0oZG4oKSxWMSkpLCFrJiYoaz0oZG4oKSxWMSkpLHQuQ2IubmgoKSYmKHc9bmV3IEYwKHQuQ2IsMSwxMyxrLGUsRmcoaWwodSh0LkNiLDU5KSksdCksITEpLG4/bi5FaSh3KTpuPXcpKTtlbHNlIGlmKEV0KHQuQ2IsODgpKXQuRGI+PjE2PT0tMjMmJihFdChlLDg4KXx8KGU9KGRuKCksV2gpKSxFdChrLDg4KXx8KGs9KGRuKCksV2gpKSx0LkNiLm5oKCkmJih3PW5ldyBGMCh0LkNiLDEsMTAsayxlLEZnKExjKHUodC5DYiwyNikpLHQpLCExKSxuP24uRWkodyk6bj13KSk7ZWxzZSBpZihFdCh0LkNiLDQ0NCkpZm9yKGQ9dSh0LkNiLDgzNiksaD0oIWQuYiYmKGQuYj1uZXcgY1IobmV3IFl0dCkpLGQuYiksbz0ocj1uZXcgaDIobmV3IHdnKGguYSkuYSksbmV3IHVSKHIpKTtvLmEuYjspcz11KFl2KG8uYSkuY2QoKSw4Nyksbj1fRShzLG9xKHMsZCksbil9cmV0dXJuIG59ZnVuY3Rpb24gWTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoaD1qZShSZShxZSh0LChUZSgpLCR5KSkpKSxGPXUocWUodCxxeSksMjEpLHc9ITEsaz0hMSxNPW5ldyBlcigoIXQuYyYmKHQuYz1uZXcgaGUoZmwsdCw5LDkpKSx0LmMpKTtNLmUhPU0uaS5nYygpJiYoIXd8fCFrKTspe2ZvcihvPXUoZHIoTSksMTE4KSxkPTAscz1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFsoIW8uZCYmKG8uZD1uZXcgQ24oV3Msbyw4LDUpKSxvLmQpLCghby5lJiYoby5lPW5ldyBDbihXcyxvLDcsNCkpLG8uZSldKSkpO3pyKHMpJiYocj11KExyKHMpLDc5KSxDPWgmJnV3KHIpJiZqZShSZShxZShyLFAyKSkpLG49RmxlKCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksbyk/dD09dHMoTW8odShTdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpOnQ9PXRzKE1vKHUoU3QoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSw4MikpKSwhKChDfHxuKSYmKCsrZCxkPjEpKSk7KTsoZD4wfHxGLkhjKChRdSgpLHRnKSkmJighby5uJiYoby5uPW5ldyBoZShxbyxvLDEsNykpLG8ubikuaT4wKSYmKHc9ITApLGQ+MSYmKGs9ITApfXcmJmUuRmMoKG9vKCksYmgpKSxrJiZlLkZjKChvbygpLHZTKSl9ZnVuY3Rpb24gYWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRjtpZihGPXUocWUodCwoY2koKSx6MikpLDIxKSxGLmRjKCkpcmV0dXJuIG51bGw7aWYoZD0wLGg9MCxGLkhjKChfbCgpLG5OKSkpe2ZvcihDPXUocWUodCxVUyksOTgpLHI9MixuPTIscz0yLG89MixlPXRzKHQpP3UocWUodHModCksancpLDEwMyk6dShxZSh0LGp3KSwxMDMpLGs9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO2suZSE9ay5pLmdjKCk7KWlmKHc9dShkcihrKSwxMTgpLE09dShxZSh3LG81KSw2MSksTT09KGJlKCksWm8pJiYoTT1ueHQodyxlKSxibyh3LG81LE0pKSxDPT0ob2EoKSxWYykpc3dpdGNoKE0uZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHcuaSt3LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix3Lmordy5mKTticmVhaztjYXNlIDM6cz1iLk1hdGgubWF4KHMsdy5pK3cuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHcuait3LmYpfWVsc2Ugc3dpdGNoKE0uZyl7Y2FzZSAxOnIrPXcuZysyO2JyZWFrO2Nhc2UgMjpuKz13LmYrMjticmVhaztjYXNlIDM6cys9dy5nKzI7YnJlYWs7Y2FzZSA0Om8rPXcuZisyfWQ9Yi5NYXRoLm1heChyLHMpLGg9Yi5NYXRoLm1heChuLG8pfXJldHVybiBndyh0LGQsaCwhMCwhMCl9ZnVuY3Rpb24gU2F0KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtmb3IoTHQ9dShQbChHJChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IFVrKG4pKSxuZXcgc00obikpLGkyKG5ldyBfZSxuZXcgd2UsbmV3IG5yLGN0KG90KGxsLDEpLGFlLDEzMiwwLFsoSTEoKSxHbCldKSkpLDE1KSxNPXZpLEM9X2Esdz1uZXcgUyhlLmIuaik7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTEpLGQuaj09biYmKE09Yi5NYXRoLm1pbihNLGQucCksQz1iLk1hdGgubWF4KEMsZC5wKSk7aWYoTT09dmkpZm9yKGg9MDtoPEx0LmdjKCk7aCsrKVNtdCh1KEx0LlhiKGgpLDEwMSksbixoKTtlbHNlIGZvcihfdD1QdChUcixYciwyNSxzLmxlbmd0aCwxNSwxKSxqdG4oX3QsX3QubGVuZ3RoKSxndD1MdC5LYygpO2d0Lk9iKCk7KXtmb3IodHQ9dShndC5QYigpLDEwMSksbz11KEpuKHQuYix0dCksMTc3KSxrPTAsWT1NO1k8PUM7WSsrKW9bWV0mJihrPWIuTWF0aC5tYXgoayxyW1ldKSk7aWYodHQuaSl7Zm9yKEg9dHQuaS5jLEJ0PW5ldyBxcyxGPTA7RjxzLmxlbmd0aDtGKyspc1tIXVtGXSYmTnMoQnQsZGUoX3RbRl0pKTtmb3IoO1MwKEJ0LGRlKGspKTspKytrfWZvcihTbXQodHQsbixrKSxWPU07Vjw9QztWKyspb1tWXSYmKHJbVl09aysxKTt0dC5pJiYoX3RbdHQuaS5jXT1rKX19ZnVuY3Rpb24gWDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3Iocz1udWxsLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCkseGF0KG4pP289KGQ9RHYoYk0obmV3IFViLG4pLHQuZiksdz1EdihiTShuZXcgVWIsbiksdC5mKSxrPW5ldyBfd3QobiwhMCxkLHcpLEM9bi5vLmIsTT0oc3koKSwobi5xP24ucToodm4oKSx2bigpLGEwKSkuX2IoKFRlKCksTncpKT9GPXUoUShuLE53KSwxOTcpOkY9dShRKEZhKG4pLENTKSwxOTcpLEYpLEg9MWU0LE09PUo0JiYoSD0xKSxWPXZmKG9mKGFmKHNmKGNmKG5ldyBFaCxIKSxwcyhiLk1hdGguY2VpbChDKSkpLGQpLHcpKSxNPT10NSYmTnModC5kLFYpLEd1ZSh0LGEyKFlvKG4sKGJlKCksQm4pKSksayksR3VlKHQsWW8obixIbiksayksayk6bz0oWT1EdihiTShuZXcgVWIsbiksdC5mKSx1cyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IGhRKSxuZXcgdFZ0KHQsWSkpLG5ldyBfd3QobiwhMSxZLFkpKSx0Lmlbbi5wXT1vLHMmJihoPXMuYy5kLmErVjModC5uLHMuYyxuKStuLmQuZCxzLmJ8fChoKz1zLmMuby5iKSx2ZihvZihhZihjZihzZihuZXcgRWgscHMoYi5NYXRoLmNlaWwoaCkpKSwwKSxzLmQpLG8uYSkpKSxzPW99ZnVuY3Rpb24gUTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3Iod3IoZSwiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTT1uZXcgbGUsaD1YdCh5ZShRKHQsKFRlKCksQjYpKSkpLGs9WHQoeWUoUSh0LEd5KSkpLEM9dShRKHQsVmwpLDEwMyksSD1uZXcgUyh0LmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihGPXUoSihIKSwxMCksbz1uZXcgYXIobHIoTXMoRikuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShMcihvKSwxNykscy5jLmkhPXMuZC5pJiZKZXQocy5iLHFiZSkpe2ZvcihZPUhhbihzKSxWPUhkKHMuYi5jLmxlbmd0aCksbj1SYm4odCxzLFksViksTS5jW00uYy5sZW5ndGhdPW4scj1uLm8sZD1uZXcgaGEocy5iLDApO2QuYjxkLmQuZ2MoKTspdz0oUW4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDcwKSksR3QoUSh3LE1kKSk9PT1HdCgoQTEoKSxfNykpJiYoQz09KGFvKCksWjApfHxDPT1RMD8oci5hKz13Lm8uYStrLHIuYj1iLk1hdGgubWF4KHIuYix3Lm8uYikpOihyLmE9Yi5NYXRoLm1heChyLmEsdy5vLmEpLHIuYis9dy5vLmIrayksVi5jW1YuYy5sZW5ndGhdPXcsRWwoZCkpO0M9PShhbygpLFowKXx8Qz09UTA/KHIuYS09ayxyLmIrPWgrWSk6ci5iKz1oLWsrWX1Bcyh0LmEsTSksb3IoZSl9ZnVuY3Rpb24gWjNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixIO2ZvcihvPW5ldyBJb2UoZSksTT0kdm4odCxlLG8pLEg9Yi5NYXRoLm1heChYdCh5ZShRKGUsKFRlKCksVWcpKSkpLDEpLEM9bmV3IFMoTS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0Niksdz1qaWUodShrLmEsOCksdShrLmIsOCksSCksRT0hMCxFPUUmTnYobixuZXcgJGUody5jLHcuZCkpLEU9RSZOdihuLEZtKG5ldyAkZSh3LmMsdy5kKSx3LmIsMCkpLEU9RSZOdihuLEZtKG5ldyAkZSh3LmMsdy5kKSwwLHcuYSkpLEUmTnYobixGbShuZXcgJGUody5jLHcuZCksdy5iLHcuYSkpO3N3aXRjaChGPW8uZCxkPWppZSh1KE0uYi5hLDgpLHUoTS5iLmIsOCksSCksRj09KGJlKCksQm4pfHxGPT1Ibj8oci5jW0YuZ109Yi5NYXRoLm1pbihyLmNbRi5nXSxkLmQpLHIuYltGLmddPWIuTWF0aC5tYXgoci5iW0YuZ10sZC5kK2QuYSkpOihyLmNbRi5nXT1iLk1hdGgubWluKHIuY1tGLmddLGQuYyksci5iW0YuZ109Yi5NYXRoLm1heChyLmJbRi5nXSxkLmMrZC5iKSkscz1UcyxoPW8uYy5pLmQsRi5nKXtjYXNlIDQ6cz1oLmM7YnJlYWs7Y2FzZSAyOnM9aC5iO2JyZWFrO2Nhc2UgMTpzPWguYTticmVhaztjYXNlIDM6cz1oLmR9cmV0dXJuIHIuYVtGLmddPWIuTWF0aC5tYXgoci5hW0YuZ10scyksb31mdW5jdGlvbiBKM24odCl7dmFyIGUsbixyLHM7aWYobj10LkQhPW51bGw/dC5EOnQuQixlPWNkKG4sRXUoOTEpKSxlIT0tMSl7cj1uLnN1YnN0cigwLGUpLHM9bmV3IHhnO2RvIHMuYSs9IlsiO3doaWxlKChlPWw4KG4sOTEsKytlKSkhPS0xKTtobihyLHU2KT9zLmErPSJaIjpobihyLFFfKT9zLmErPSJCIjpobihyLFRIKT9zLmErPSJDIjpobihyLFpfKT9zLmErPSJEIjpobihyLEpfKT9zLmErPSJGIjpobihyLHRTKT9zLmErPSJJIjpobihyLGVTKT9zLmErPSJKIjpobihyLG5TKT9zLmErPSJTIjoocy5hKz0iTCIscy5hKz0iIityLHMuYSs9IjsiKTt0cnl7cmV0dXJuIG51bGx9Y2F0Y2gobyl7aWYobz1XaShvKSwhRXQobyw2MCkpdGhyb3cgcnQobyl9fWVsc2UgaWYoY2QobixFdSg0NikpPT0tMSl7aWYoaG4obix1NikpcmV0dXJuIGRsO2lmKGhuKG4sUV8pKXJldHVybiBIdTtpZihobihuLFRIKSlyZXR1cm4gbWg7aWYoaG4obixaXykpcmV0dXJuIGlhO2lmKGhuKG4sSl8pKXJldHVybiByMztpZihobihuLHRTKSlyZXR1cm4gVHI7aWYoaG4obixlUykpcmV0dXJuIExiO2lmKGhuKG4sblMpKXJldHVybiBmNX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBvaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKGs9bmV3IEgwKG4pLExvKGssZSksSnQoaywoc2UoKSxfaSksZSksay5vLmE9ZS5nLGsuby5iPWUuZixrLm4uYT1lLmksay5uLmI9ZS5qLHVlKG4uYSxrKSxraSh0LmEsZSxrKSwoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpLmkhPTB8fGplKFJlKHFlKGUsKFRlKCksJHkpKSkpKSYmSnQoayxLVHQsKEZuKCksITApKSx3PXUoUShuLEdjKSwyMSksQz11KFEoaywoVGUoKSxvcykpLDk4KSxDPT0ob2EoKSx5Yik/SnQoayxvcyxIMSk6QyE9SDEmJncuRmMoKG9vKCksZjcpKSxyPXUoUShuLFZsKSwxMDMpLGQ9bmV3IGVyKCghZS5jJiYoZS5jPW5ldyBoZShmbCxlLDksOSkpLGUuYykpO2QuZSE9ZC5pLmdjKCk7KWg9dShkcihkKSwxMTgpLGplKFJlKHFlKGgsQjIpKSl8fEE0bih0LGgsayx3LHIsQyk7Zm9yKG89bmV3IGVyKCghZS5uJiYoZS5uPW5ldyBoZShxbyxlLDEsNykpLGUubikpO28uZSE9by5pLmdjKCk7KXM9dShkcihvKSwxMzcpLCFqZShSZShxZShzLEIyKSkpJiZzLmEmJnVlKGsuYixPaXQocykpO3JldHVybiBqZShSZShRKGssa1MpKSkmJncuRmMoKG9vKCksUkcpKSxqZShSZShRKGssSkcpKSkmJih3LkZjKChvbygpLGpHKSksdy5GYyh2UyksSnQoayxvcyxIMSkpLGt9ZnVuY3Rpb24gdDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtkPXUoSm4oZS5jLHQpLDQ1OSksTHQ9ZS5hLmMsdz1lLmEuYytlLmEuYixRZT1kLmYsUm49ZC5hLGg9UWU8Um4sWT1uZXcgJGUoTHQsUWUpLF90PW5ldyAkZSh3LFJuKSxzPShMdCt3KS8yLHR0PW5ldyAkZShzLFFlKSxCdD1uZXcgJGUocyxSbiksbz1oMm4odCxRZSxSbiksY2U9VDEoZS5CKSxTZT1uZXcgJGUocyxvKSxXZT1UMShlLkQpLG49TmNuKGN0KG90KFVzLDEpLHRlLDgsMCxbY2UsU2UsV2VdKSksSD0hMSxndD1lLkIuaSxndCYmZ3QuYyYmZC5kJiYoaz1oJiZndC5wPGd0LmMuYS5jLmxlbmd0aC0xfHwhaCYmZ3QucD4wLGs/ayYmKEY9Z3QucCxoPysrRjotLUYsTT11KEZlKGd0LmMuYSxGKSwxMCkscj1RbmUoTSksSD0hKFFzdChyLGNlLG5bMF0pfHxMWXQocixjZSxuWzBdKSkpOkg9ITApLFY9ITEsWXQ9ZS5ELmksWXQmJll0LmMmJmQuZSYmKEM9aCYmWXQucD4wfHwhaCYmWXQucDxZdC5jLmEuYy5sZW5ndGgtMSxDPyhGPVl0LnAsaD8tLUY6KytGLE09dShGZShZdC5jLmEsRiksMTApLHI9UW5lKE0pLFY9IShRc3QocixuWzBdLFdlKXx8TFl0KHIsblswXSxXZSkpKTpWPSEwKSxIJiZWJiZuaSh0LmEsU2UpLEh8fHpDKHQuYSxjdChvdChVcywxKSx0ZSw4LDAsW1ksdHRdKSksVnx8ekModC5hLGN0KG90KFVzLDEpLHRlLDgsMCxbQnQsX3RdKSl9ZnVuY3Rpb24gQ3EodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKEV0KHQuVWcoKSwxNjApPyhDcSh1KHQuVWcoKSwxNjApLGUpLGUuYSs9IiA+ICIpOmUuYSs9IlJvb3QgIixuPXQuVGcoKS56YixobihuLnN1YnN0cigwLDMpLCJFbGsiKT9WcihlLG4uc3Vic3RyKDMpKTplLmErPSIiK24scz10LnpnKCkscyl7VnIoKGUuYSs9IiAiLGUpLHMpO3JldHVybn1pZihFdCh0LDM1NCkmJihrPXUodCwxMzcpLmEsaykpe1ZyKChlLmErPSIgIixlKSxrKTtyZXR1cm59Zm9yKGg9bmV3IGVyKHQuQWcoKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDEzNyksaz1vLmEsayl7VnIoKGUuYSs9IiAiLGUpLGspO3JldHVybn1pZihFdCh0LDM1MikmJihyPXUodCw3OSksIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKGUuYSs9IiAoIixkPW5ldyBMeCgoIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIpKTtkLmUhPWQuaS5nYygpOylkLmU+MCYmKGUuYSs9S2EpLENxKHUoZHIoZCksMTYwKSxlKTtmb3IoZS5hKz1Qb3Qsdz1uZXcgTHgoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSk7dy5lIT13LmkuZ2MoKTspdy5lPjAmJihlLmErPUthKSxDcSh1KGRyKHcpLDE2MCksZSk7ZS5hKz0iKSJ9fWZ1bmN0aW9uIGU0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihvPXUoUSh0LChzZSgpLF9pKSksNzkpLCEhbyl7Zm9yKHI9dC5hLHM9bmV3IHlvKG4pLExpKHMsVjFuKHQpKSxWOCh0LmQuaSx0LmMuaSk/KEY9dC5jLE09S28oY3Qob3QoVXMsMSksdGUsOCwwLFtGLm4sRi5hXSkpLG5hKE0sbikpOk09VDEodC5jKSxocyhyLE0sci5hLHIuYS5hKSxIPVQxKHQuZCksUSh0LCRsdCkhPW51bGwmJkxpKEgsdShRKHQsJGx0KSw4KSksaHMocixILHIuYy5iLHIuYyksSm0ocixzKSxoPW00KG8sITAsITApLFokKGgsdShTdCgoIW8uYiYmKG8uYj1uZXcgQ24oYnIsbyw0LDcpKSxvLmIpLDApLDgyKSksSiQoaCx1KFN0KCghby5jJiYoby5jPW5ldyBDbihicixvLDUsOCkpLG8uYyksMCksODIpKSx5RChyLGgpLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksZD11KFEoayxfaSksMTM3KSxRdihkLGsuby5hKSxYdihkLGsuby5iKSxtMShkLGsubi5hK3MuYSxrLm4uYitzLmIpLGJvKGQsKFh4KCksc2x0KSxSZShRKGssc2x0KSkpO3c9dShRKHQsKFRlKCksX28pKSw3NCksdz8oSm0odyxzKSxibyhvLF9vLHcpKTpibyhvLF9vLG51bGwpLGU9PShxMCgpLEg2KT9ibyhvLFgwLEg2KTpibyhvLFgwLG51bGwpfX1mdW5jdGlvbiBuNG4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2ZvcihIPWUuYy5sZW5ndGgsRj0wLE09bmV3IFModC5iKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwyOSksZ3Q9Qy5hLGd0LmMubGVuZ3RoIT0wKXtmb3IodHQ9bmV3IFMoZ3QpLGs9MCxMdD1udWxsLHM9dShKKHR0KSwxMCksbz1udWxsO3M7KXtpZihvPXUoRmUoZSxzLnApLDI1Nyksby5jPj0wKXtmb3Iodz1udWxsLGQ9bmV3IGhhKEMuYSxrKzEpO2QuYjxkLmQuZ2MoKSYmKGg9KFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxMCkpLHc9dShGZShlLGgucCksMjU3KSwhKHcuZD09by5kJiZ3LmM8by5jKSk7KXc9bnVsbDt3JiYoTHQmJihhaChyLHMucCxkZSh1KEZlKHIscy5wKSwxOSkuYS0xKSksdShGZShuLEx0LnApLDE1KS5NYyhvKSksbz1GZG4obyxzLEgrKyksZS5jW2UuYy5sZW5ndGhdPW8sdWUobixuZXcgbGUpLEx0Pyh1KEZlKG4sTHQucCksMTUpLkZjKG8pLHVlKHIsZGUoMSkpKTp1ZShyLGRlKDApKSl9Vj1udWxsLHR0LmE8dHQuYy5jLmxlbmd0aCYmKFY9dShKKHR0KSwxMCksWT11KEZlKGUsVi5wKSwyNTcpLHUoRmUobixzLnApLDE1KS5GYyhZKSxhaChyLFYucCxkZSh1KEZlKHIsVi5wKSwxOSkuYSsxKSkpLG8uZD1GLG8uYz1rKyssTHQ9cyxzPVZ9KytGfX1mdW5jdGlvbiBBYXQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O3JldHVybiB3PXQsQz1uYShuZXcgJGUoZS5hLGUuYiksdCksaz1uLE09bmEobmV3ICRlKHIuYSxyLmIpLG4pLEY9dy5hLHR0PXcuYixWPWsuYSxMdD1rLmIsSD1DLmEsZ3Q9Qy5iLFk9TS5hLF90PU0uYixzPVkqZ3QtSCpfdCx5MSgpLGdmKEVkKSxiLk1hdGguYWJzKDAtcyk8PUVkfHxzPT0wfHxpc05hTigwKSYmaXNOYU4ocyk/ITE6KGg9MS9zKigoRi1WKSpndC0odHQtTHQpKkgpLGQ9MS9zKi0oLShGLVYpKl90Kyh0dC1MdCkqWSksbz0oZ2YoRWQpLChiLk1hdGguYWJzKDAtaCk8PUVkfHxoPT0wfHxpc05hTigwKSYmaXNOYU4oaCk/MDowPGg/LTE6MD5oPzE6THYoaXNOYU4oMCksaXNOYU4oaCkpKTwwJiYoZ2YoRWQpLChiLk1hdGguYWJzKGgtMSk8PUVkfHxoPT0xfHxpc05hTihoKSYmaXNOYU4oMSk/MDpoPDE/LTE6aD4xPzE6THYoaXNOYU4oaCksaXNOYU4oMSkpKTwwKSYmKGdmKEVkKSwoYi5NYXRoLmFicygwLWQpPD1FZHx8ZD09MHx8aXNOYU4oMCkmJmlzTmFOKGQpPzA6MDxkPy0xOjA+ZD8xOkx2KGlzTmFOKDApLGlzTmFOKGQpKSk8MCkmJihnZihFZCksKGIuTWF0aC5hYnMoZC0xKTw9RWR8fGQ9PTF8fGlzTmFOKGQpJiZpc05hTigxKT8wOmQ8MT8tMTpkPjE/MTpMdihpc05hTihkKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiByNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihNPW5ldyB5d3QobmV3IE10KHQpKTtNLmIhPU0uYy5hLmQ7KWZvcihDPWh0ZShNKSxkPXUoQy5kLDU2KSxlPXUoQy5lLDU2KSxoPWQuVGcoKSxZPTAsQnQ9KGguaT09bnVsbCYmcGQoaCksaC5pKS5sZW5ndGg7WTxCdDsrK1kpaWYoaz0obz0oaC5pPT1udWxsJiZwZChoKSxoLmkpLFk+PTAmJlk8by5sZW5ndGg/b1tZXTpudWxsKSxrLklqKCkmJiFrLkpqKCkpe2lmKEV0KGssOTkpKXc9dShrLDE4KSwhKHcuQmImZGMpJiYoY2U9bm8odyksIShjZSYmY2UuQmImZGMpKSYmSG1uKHQsdyxkLGUpO2Vsc2UgaWYodG8oKSx1KGssNjYpLk9qKCkmJihuPShZdD1rLHUoWXQ/dShlLDQ5KS54aChZdCk6bnVsbCwxNTMpKSxuKSlmb3IoSD11KGQuYWgoayksMTUzKSxyPW4uZ2MoKSx0dD0wLFY9SC5nYygpO3R0PFY7Kyt0dClpZihGPUguaWwodHQpLEV0KEYsOTkpKXtpZihfdD1ILmpsKHR0KSxzPVd2KHQsX3QpLHM9PW51bGwmJl90IT1udWxsKXtpZihMdD11KEYsMTgpLCF0LmJ8fEx0LkJiJmRjfHxubyhMdCkpY29udGludWU7cz1fdH1pZighbi5kbChGLHMpKXtmb3IoZ3Q9MDtndDxyOysrZ3QpaWYobi5pbChndCk9PUYmJkd0KG4uamwoZ3QpKT09PUd0KHMpKXtuLmlpKG4uZ2MoKS0xLGd0KSwtLXI7YnJlYWt9fX1lbHNlIG4uZGwoSC5pbCh0dCksSC5qbCh0dCkpfX1mdW5jdGlvbiBpNG4odCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2lmKGd0PWN5bihlLG4sdC5nKSxzLm4mJnMubiYmbyYmaGYocyxmZihvKSwoQ2woKSxZbCkpLHQuYilmb3IodHQ9MDt0dDxndC5jLmxlbmd0aDt0dCsrKU09KEFuKHR0LGd0LmMubGVuZ3RoKSx1KGd0LmNbdHRdLDIwMCkpLHR0IT0wJiYoSD0oQW4odHQtMSxndC5jLmxlbmd0aCksdShndC5jW3R0LTFdLDIwMCkpLENyZShNLEguZitILmIrdC5nKSksdzVuKHR0LGd0LG4sdC5nKSx3MW4odCxNKSxzLm4mJm8mJmhmKHMsZmYobyksKENsKCksWWwpKTtlbHNlIGZvcihZPW5ldyBTKGd0KTtZLmE8WS5jLmMubGVuZ3RoOylmb3IoVj11KEooWSksMjAwKSxDPW5ldyBTKFYuYSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTg3KSxMdD1uZXcgUHd0KGsucyxrLnQsdC5nKSxjeXQoTHQsayksdWUoVi5kLEx0KTtyZXR1cm4gU2ZuKHQsZ3QpLHMubiYmcy5uJiZvJiZoZihzLGZmKG8pLChDbCgpLFlsKSksX3Q9Yi5NYXRoLm1heCh0LmQsci5hLShoLmIraC5jKSksRj1iLk1hdGgubWF4KHQuYyxyLmItKGguZCtoLmEpKSxkPUYtdC5jLHQuZSYmdC5mJiYodz1fdC9GLHc8dC5hP190PUYqdC5hOmQrPV90L3QuYS1GKSx0LmUmJkpsbihndCxfdCxkKSxzLm4mJnMubiYmbyYmaGYocyxmZihvKSwoQ2woKSxZbCkpLG5ldyBUbnQodC5hLF90LHQuYytkLCh5RSgpLEhTKSl9ZnVuY3Rpb24gczRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE07Zm9yKHQuaj1QdChUcixYciwyNSx0LmcsMTUsMSksdC5vPW5ldyBsZSx1cyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgWTUpLG5ldyBTJHQodCkpLHQuYT1QdChkbCxpMCwyNSx0LmIsMTYsMSkscUkobmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IEwkdCh0KSkscj0oTT1uZXcgbGUsdXMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IHdRKSxuZXcgQSR0KHQpKSxuZXcgZVZ0KHQsTSkpLE0pLHc9bmV3IFMocik7dy5hPHcuYy5jLmxlbmd0aDspaWYoZD11KEoodyksNTA4KSwhKGQuYy5sZW5ndGg8PTEpKXtpZihkLmMubGVuZ3RoPT0yKXtRcG4oZCkseGF0KChBbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDE3KSkuZC5pKXx8dWUodC5vLGQpO2NvbnRpbnVlfWlmKCEoRWRuKGQpfHxmZ24oZCxuZXcgUkYpKSlmb3Ioaz1uZXcgUyhkKSxzPW51bGw7ay5hPGsuYy5jLmxlbmd0aDspZT11KEooayksMTcpLG49dC5jW2UucF0sIXN8fGsuYT49ay5jLmMubGVuZ3RoP0M9dG10KChHbigpLERzKSxacyk6Qz10bXQoKEduKCksWnMpLFpzKSxDKj0yLG89bi5hLmcsbi5hLmc9Yi5NYXRoLm1heChvLG8rKEMtbykpLGg9bi5iLmcsbi5iLmc9Yi5NYXRoLm1heChoLGgrKEMtaCkpLHM9ZX19ZnVuY3Rpb24gYTRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3IoWXQ9U0t0KHQpLEM9bmV3IGxlLGQ9dC5jLmxlbmd0aCxNPWQtMSxGPWQrMTtZdC5hLmMhPTA7KXtmb3IoO24uYiE9MDspX3Q9KFFuKG4uYiE9MCksdShjaChuLG4uYS5hKSwxMTIpKSxJQyhZdC5hLF90KSE9bnVsbCxfdC5nPU0tLSxyeHQoX3QsZSxuLHIpO2Zvcig7ZS5iIT0wOylCdD0oUW4oZS5iIT0wKSx1KGNoKGUsZS5hLmEpLDExMikpLElDKFl0LmEsQnQpIT1udWxsLEJ0Lmc9RisrLHJ4dChCdCxlLG4scik7Zm9yKGs9X2EsZ3Q9KGg9bmV3IHZDKG5ldyBnQyhuZXcgeShZdC5hKS5hKS5iKSxuZXcgZyhoKSk7bU0oZ3QuYS5hKTspe2lmKHR0PShvPXdqKGd0LmEpLHUoby5jZCgpLDExMikpLCFyJiZ0dC5iPjAmJnR0LmE8PTApe0MuYz1QdChYbixJZSwxLDAsNSwxKSxDLmNbQy5jLmxlbmd0aF09dHQ7YnJlYWt9WT10dC5pLXR0LmQsWT49ayYmKFk+ayYmKEMuYz1QdChYbixJZSwxLDAsNSwxKSxrPVkpLEMuY1tDLmMubGVuZ3RoXT10dCl9Qy5jLmxlbmd0aCE9MCYmKHc9dShGZShDLHp6KHMsQy5jLmxlbmd0aCkpLDExMiksSUMoWXQuYSx3KSE9bnVsbCx3Lmc9RisrLHJ4dCh3LGUsbixyKSxDLmM9UHQoWG4sSWUsMSwwLDUsMSkpfWZvcihMdD10LmMubGVuZ3RoKzEsVj1uZXcgUyh0KTtWLmE8Vi5jLmMubGVuZ3RoOylIPXUoSihWKSwxMTIpLEguZzxkJiYoSC5nPUguZytMdCl9ZnVuY3Rpb24gX3EodCxlKXt2YXIgbjtpZih0LmUpdGhyb3cgcnQobmV3IEZvKChMMChNdXQpLGJvdCtNdXQuayt2b3QpKSk7aWYoIUFZZSh0LmEsZSkpdGhyb3cgcnQobmV3IEdvKG1mZStlK3lmZSkpO2lmKGU9PXQuZClyZXR1cm4gdDtzd2l0Y2gobj10LmQsdC5kPWUsbi5nKXtjYXNlIDA6c3dpdGNoKGUuZyl7Y2FzZSAyOm93KHQpO2JyZWFrO2Nhc2UgMTpXcCh0KSxvdyh0KTticmVhaztjYXNlIDQ6ZjQodCksb3codCk7YnJlYWs7Y2FzZSAzOmY0KHQpLFdwKHQpLG93KHQpfWJyZWFrO2Nhc2UgMjpzd2l0Y2goZS5nKXtjYXNlIDE6V3AodCkscmF0KHQpO2JyZWFrO2Nhc2UgNDpmNCh0KSxvdyh0KTticmVhaztjYXNlIDM6ZjQodCksV3AodCksb3codCl9YnJlYWs7Y2FzZSAxOnN3aXRjaChlLmcpe2Nhc2UgMjpXcCh0KSxyYXQodCk7YnJlYWs7Y2FzZSA0OldwKHQpLGY0KHQpLG93KHQpO2JyZWFrO2Nhc2UgMzpXcCh0KSxmNCh0KSxXcCh0KSxvdyh0KX1icmVhaztjYXNlIDQ6c3dpdGNoKGUuZyl7Y2FzZSAyOmY0KHQpLG93KHQpO2JyZWFrO2Nhc2UgMTpmNCh0KSxXcCh0KSxvdyh0KTticmVhaztjYXNlIDM6V3AodCkscmF0KHQpfWJyZWFrO2Nhc2UgMzpzd2l0Y2goZS5nKXtjYXNlIDI6V3AodCksZjQodCksb3codCk7YnJlYWs7Y2FzZSAxOldwKHQpLGY0KHQpLFdwKHQpLG93KHQpO2JyZWFrO2Nhc2UgNDpXcCh0KSxyYXQodCl9fXJldHVybiB0fWZ1bmN0aW9uIFQ0KHQsZSl7dmFyIG47aWYodC5kKXRocm93IHJ0KG5ldyBGbygoTDAoWnV0KSxib3QrWnV0Lmsrdm90KSkpO2lmKCFMWWUodC5hLGUpKXRocm93IHJ0KG5ldyBHbyhtZmUrZSt5ZmUpKTtpZihlPT10LmMpcmV0dXJuIHQ7c3dpdGNoKG49dC5jLHQuYz1lLG4uZyl7Y2FzZSAwOnN3aXRjaChlLmcpe2Nhc2UgMjpsMih0KTticmVhaztjYXNlIDE6VXAodCksbDIodCk7YnJlYWs7Y2FzZSA0OmQ0KHQpLGwyKHQpO2JyZWFrO2Nhc2UgMzpkNCh0KSxVcCh0KSxsMih0KX1icmVhaztjYXNlIDI6c3dpdGNoKGUuZyl7Y2FzZSAxOlVwKHQpLGlhdCh0KTticmVhaztjYXNlIDQ6ZDQodCksbDIodCk7YnJlYWs7Y2FzZSAzOmQ0KHQpLFVwKHQpLGwyKHQpfWJyZWFrO2Nhc2UgMTpzd2l0Y2goZS5nKXtjYXNlIDI6VXAodCksaWF0KHQpO2JyZWFrO2Nhc2UgNDpVcCh0KSxkNCh0KSxsMih0KTticmVhaztjYXNlIDM6VXAodCksZDQodCksVXAodCksbDIodCl9YnJlYWs7Y2FzZSA0OnN3aXRjaChlLmcpe2Nhc2UgMjpkNCh0KSxsMih0KTticmVhaztjYXNlIDE6ZDQodCksVXAodCksbDIodCk7YnJlYWs7Y2FzZSAzOlVwKHQpLGlhdCh0KX1icmVhaztjYXNlIDM6c3dpdGNoKGUuZyl7Y2FzZSAyOlVwKHQpLGQ0KHQpLGwyKHQpO2JyZWFrO2Nhc2UgMTpVcCh0KSxkNCh0KSxVcCh0KSxsMih0KTticmVhaztjYXNlIDQ6VXAodCksaWF0KHQpfX1yZXR1cm4gdH1mdW5jdGlvbiBvNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEM7Zm9yKHc9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7dy5lIT13LmkuZ2MoKTspZm9yKGQ9dShkcih3KSwzMykscz1uZXcgYXIobHIoRzAoZCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXtpZihyPXUoTHIocyksNzkpLCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksIShyLmIuaTw9MSYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmk8PTEpKSl0aHJvdyBydChuZXcgRjkoIkdyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4iKSk7aWYoIWdfKHIpJiZkIT1Nbyh1KFN0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSlmb3Ioaz1uZXcgUld0LExvKGssciksSnQoaywoR3AoKSxDNiksciksd3R0KGssdShlYyhBbyhuLmYsZCkpLDE0NCkpLHAxKGssdShKbihuLE1vKHUoU3QoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpKSwxNDQpKSx1ZShlLmMsayksaD1uZXcgZXIoKCFyLm4mJihyLm49bmV3IGhlKHFvLHIsMSw3KSksci5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz1uZXcgelp0KGssby5hKSxMbyhDLG8pLEp0KEMsQzYsbyksQy5lLmE9Yi5NYXRoLm1heChvLmcsMSksQy5lLmI9Yi5NYXRoLm1heChvLmYsMSksYXh0KEMpLHVlKGUuZCxDKX19ZnVuY3Rpb24gYzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3IoTT1uZXcgeXh0KHQpLGFybihNLCEoZT09KGFvKCksWjApfHxlPT1RMCkpLEM9TS5hLEY9bmV3IHd4LHM9KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLGg9MCx3PXMubGVuZ3RoO2g8dzsrK2gpbj1zW2hdLGs9dG50KEMsc2MsbiksayYmKEYuZD1iLk1hdGgubWF4KEYuZCxrLlJlKCkpKTtmb3Iocj1jdChvdChNeSwxKSxhZSwyMzIsMCxbc2MsdHUsYWNdKSxvPTAsZD1yLmxlbmd0aDtvPGQ7KytvKW49cltvXSxrPXRudChDLGFjLG4pLGsmJihGLmE9Yi5NYXRoLm1heChGLmEsay5SZSgpKSk7Zm9yKFk9Y3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSksZ3Q9MCxfdD1ZLmxlbmd0aDtndDxfdDsrK2d0KUg9WVtndF0saz10bnQoQyxILHNjKSxrJiYoRi5iPWIuTWF0aC5tYXgoRi5iLGsuU2UoKSkpO2ZvcihWPWN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pLHR0PTAsTHQ9Vi5sZW5ndGg7dHQ8THQ7Kyt0dClIPVZbdHRdLGs9dG50KEMsSCxhYyksayYmKEYuYz1iLk1hdGgubWF4KEYuYyxrLlNlKCkpKTtyZXR1cm4gRi5kPjAmJihGLmQrPUMubi5kLEYuZCs9Qy5kKSxGLmE+MCYmKEYuYSs9Qy5uLmEsRi5hKz1DLmQpLEYuYj4wJiYoRi5iKz1DLm4uYixGLmIrPUMuZCksRi5jPjAmJihGLmMrPUMubi5jLEYuYys9Qy5kKSxGfWZ1bmN0aW9uIGNoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihGPW4uZCxNPW4uYyxvPW5ldyAkZShuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksaD1vLmIsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWlmKGQ9dShKKGspLDEwKSxkLms9PShHbigpLHhzKSl7c3dpdGNoKHI9dShRKGQsKHNlKCksb2MpKSw2MSkscz11KFEoZCxRVHQpLDgpLEM9ZC5uLHIuZyl7Y2FzZSAyOkMuYT1uLmYuYStGLmMtTS5hO2JyZWFrO2Nhc2UgNDpDLmE9LU0uYS1GLmJ9c3dpdGNoKFY9MCxyLmcpe2Nhc2UgMjpjYXNlIDQ6ZT09KG9hKCksaDApPyhIPVh0KHllKFEoZCxEdykpKSxDLmI9by5iKkgtdShRKGQsKFRlKCksUHcpKSw4KS5iLFY9Qy5iK3MuYixmeihkLCExLCEwKSk6ZT09VmMmJihDLmI9WHQoeWUoUShkLER3KSkpLXUoUShkLChUZSgpLFB3KSksOCkuYixWPUMuYitzLmIsZnooZCwhMSwhMCkpfWg9Yi5NYXRoLm1heChoLFYpfWZvcihuLmYuYis9aC1vLmIsdz1uZXcgUyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHcpLDEwKSxkLms9PShHbigpLHhzKSlzd2l0Y2gocj11KFEoZCwoc2UoKSxvYykpLDYxKSxDPWQubixyLmcpe2Nhc2UgMTpDLmI9LU0uYi1GLmQ7YnJlYWs7Y2FzZSAzOkMuYj1uLmYuYitGLmEtTS5ifX1mdW5jdGlvbiB1NG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlO2ZvcihzPXUoUSh0LChmYygpLGpTKSksMzMpLGs9dmksQz12aSxkPV9hLHc9X2EsY2U9ZWkodC5iLDApO2NlLmIhPWNlLmQuYzspQnQ9dSh0aShjZSksODYpLFk9QnQuZSx0dD1CdC5mLGs9Yi5NYXRoLm1pbihrLFkuYS10dC5hLzIpLEM9Yi5NYXRoLm1pbihDLFkuYi10dC5iLzIpLGQ9Yi5NYXRoLm1heChkLFkuYSt0dC5hLzIpLHc9Yi5NYXRoLm1heCh3LFkuYit0dC5iLzIpO2ZvcihWPXUocWUocywoaHcoKSxveWUpKSwxMTYpLEg9bmV3ICRlKFYuYi1rLFYuZC1DKSxZdD1laSh0LmIsMCk7WXQuYiE9WXQuZC5jOylCdD11KHRpKFl0KSw4NiksRj1RKEJ0LGpTKSxFdChGLDIzOSkmJihvPXUoRiwzMyksTT1MaShCdC5lLEgpLG0xKG8sTS5hLW8uZy8yLE0uYi1vLmYvMikpO2ZvcihfdD1laSh0LmEsMCk7X3QuYiE9X3QuZC5jOylMdD11KHRpKF90KSwxODgpLHI9dShRKEx0LGpTKSw3OSksciYmKGU9THQuYSxndD1uZXcgeW8oTHQuYi5lKSxocyhlLGd0LGUuYSxlLmEuYSksU2U9bmV3IHlvKEx0LmMuZSksaHMoZSxTZSxlLmMuYixlLmMpLExhZShndCx1KFFmKGUsMSksOCksTHQuYi5mKSxMYWUoU2UsdShRZihlLGUuYi0yKSw4KSxMdC5jLmYpLG49bTQociwhMCwhMCkseUQoZSxuKSk7V2U9ZC1rKyhWLmIrVi5jKSxoPXctQysoVi5kK1YuYSksZ3cocyxXZSxoLCExLCExKX1mdW5jdGlvbiBsNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2ZvcihNPXQuYixDPW5ldyBoYShNLDApLFJtKEMsbmV3IENoKHQpKSxMdD0hMSxoPTE7Qy5iPEMuZC5nYygpOyl7Zm9yKGs9KFFuKEMuYjxDLmQuZ2MoKSksdShDLmQuWGIoQy5jPUMuYisrKSwyOSkpLFk9KEFuKGgsTS5jLmxlbmd0aCksdShNLmNbaF0sMjkpKSx0dD1HdihrLmEpLGd0PXR0LmMubGVuZ3RoLFY9bmV3IFModHQpO1YuYTxWLmMuYy5sZW5ndGg7KUY9dShKKFYpLDEwKSxrbyhGLFkpO2lmKEx0KXtmb3IoSD16d3QobmV3IG12KHR0KSwwKTtILmMuU2IoKTspZm9yKEY9dShnSnQoSCksMTApLG89bmV3IFMoR3Yoam8oRikpKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksZHcocywhMCksSnQodCwoc2UoKSx4TyksKEZuKCksITApKSxyPWpsZSh0LHMsZ3QpLG49dShRKEYsTHcpLDMwNSksX3Q9dShGZShyLHIuYy5sZW5ndGgtMSksMTcpLG4uaz1fdC5jLmksbi5uPV90LG4uYj1zLmQuaSxuLmM9cztMdD0hMX1lbHNlIHR0LmMubGVuZ3RoIT0wJiYoZT0oQW4oMCx0dC5jLmxlbmd0aCksdSh0dC5jWzBdLDEwKSksZS5rPT0oR24oKSxqMSkmJihMdD0hMCxoPS0xKSk7KytofWZvcihkPW5ldyBoYSh0LmIsMCk7ZC5iPGQuZC5nYygpOyl3PShRbihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKSx3LmEuYy5sZW5ndGg9PTAmJkVsKGQpfWZ1bmN0aW9uIGg0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7aWYoQz11KHUoQWkodC5yLGUpLDIxKSw4NCksQy5nYygpPD0yfHxlPT0oYmUoKSxIbil8fGU9PShiZSgpLEJuKSl7QWhlKHQsZSk7cmV0dXJufWZvcihZPXQudS5IYygoUXUoKSxHNikpLG49ZT09KGJlKCksTm4pPyh0dygpLGFPKToodHcoKSxzTyksZ3Q9ZT09Tm4/KHd1KCkseWYpOih3dSgpLGUxKSxyPWVidChtdnQobiksdC5zKSx0dD1lPT1Obj9zczpUcyxrPUMuS2MoKTtrLk9iKCk7KWQ9dShrLlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSYmKFY9ZC5iLnJmKCksSD1kLmUsTT1kLmMsRj1NLmksRi5iPShvPU0ubixNLmUuYStvLmIrby5jKSxGLmE9KGg9TS5uLE0uZS5iK2guZCtoLmEpLFk/KEYuYz1ILmEtKHM9TS5uLE0uZS5hK3MuYitzLmMpLXQucyxZPSExKTpGLmM9SC5hK1YuYSt0LnMsdEkoZ3QsWXh0KSxNLmY9Z3QsVWYoTSwoWHUoKSxtZikpLHVlKHIuZCxuZXcgRG50KEYsSnl0KHIsRikpKSx0dD1lPT1Obj9iLk1hdGgubWluKHR0LEguYik6Yi5NYXRoLm1heCh0dCxILmIrZC5iLnJmKCkuYikpO2Zvcih0dCs9ZT09Tm4/LXQudDp0LnQscDN0KChyLmU9dHQscikpLHc9Qy5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoRj1kLmMuaSxGLmMtPWQuZS5hLEYuZC09ZC5lLmIpfWZ1bmN0aW9uIGY0bih0LGUsbil7dmFyIHI7aWYod3IobiwiU3RyZXRjaFdpZHRoIGxheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IodC5jPWUsdC50PTAsdC51PTAsdC5pPXNzLHQuZz1Ucyx0LmQ9WHQoeWUoUShlLChUZSgpLHhmKSkpKSxxaG4odCksR3BuKHQpLEhwbih0KSxXMW4odCksWWxuKHQpLHQuaT1iLk1hdGgubWF4KDEsdC5pKSx0Lmc9Yi5NYXRoLm1heCgxLHQuZyksdC5kPXQuZC90LmksdC5mPXQuZy90LmksdC5zPXJmbih0KSxyPW5ldyBDaCh0LmMpLHVlKHQuYy5iLHIpLHQucj1Hdih0LnApLHQubj1sJCh0LmssdC5rLmxlbmd0aCk7dC5yLmMubGVuZ3RoIT0wOyl0Lm89dnVuKHQpLCF0Lm98fG5yZSh0KSYmdC5iLmEuZ2MoKSE9MD8od2RuKHQscikscj1uZXcgQ2godC5jKSx1ZSh0LmMuYixyKSxVYSh0LmEsdC5iKSx0LmIuYS4kYigpLHQudD10LnUsdC51PTApOm5yZSh0KT8odC5jLmIuYz1QdChYbixJZSwxLDAsNSwxKSxyPW5ldyBDaCh0LmMpLHVlKHQuYy5iLHIpLHQudD0wLHQudT0wLHQuYi5hLiRiKCksdC5hLmEuJGIoKSwrK3QuZix0LnI9R3YodC5wKSx0Lm49bCQodC5rLHQuay5sZW5ndGgpKTooa28odC5vLHIpLHZ1KHQucix0Lm8pLE5zKHQuYix0Lm8pLHQudD10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXSx0LnUrPXQuZVt0Lm8ucF0qdC5kKTtlLmEuYz1QdChYbixJZSwxLDAsNSwxKSxCc3QoZS5iKSxvcihuKX1mdW5jdGlvbiBkNG4odCl7dmFyIGUsbixyLHM7Zm9yKHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEuYiwxNikpLG5ldyB2WCksbmV3IHdYKSxzZG4odCksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYS5iLDE2KSksbmV3IG1YKSxuZXcgeVgpLHQuYz09KHEwKCksSDYpJiYodXMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKG5ldyBUbSh0LmYpLDEpKSxuZXcgeFgpLG5ldyBrWCksbmV3IER0dCh0KSksdXMoUmkocHUoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IHhGKSxuZXcgRVgpLG5ldyBrRiksbmV3IFRYKSxuZXcgTnR0KHQpKSkscz1uZXcgJGUoc3Msc3MpLGU9bmV3ICRlKFRzLFRzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1Nykscy5hPWIuTWF0aC5taW4ocy5hLG4uZC5jKSxzLmI9Yi5NYXRoLm1pbihzLmIsbi5kLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmQuYytuLmQuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZC5kK24uZC5hKTtMaShHZih0LmQuYyksbWoobmV3ICRlKHMuYSxzLmIpKSksTGkoR2YodC5kLmYpLG5hKG5ldyAkZShlLmEsZS5iKSxzKSkscDJuKHQscyxlKSxZdSh0LmYpLFl1KHQuYiksWXUodC5nKSxZdSh0LmUpLHQuYS5hLmM9UHQoWG4sSWUsMSwwLDUsMSksdC5hLmIuYz1QdChYbixJZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmQ9bnVsbH1mdW5jdGlvbiB1aGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90O2ZvcihzPW5ldyBsZSxZPW5ldyBTKGUuYSk7WS5hPFkuYy5jLmxlbmd0aDspaWYoVj11KEooWSksMTApLEg9Vi5lLEgmJihyPXVoZSh0LEgsViksQXMocyxyKSxTM24odCxILFYpLHUoUShILChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpKWZvcihMdD11KFEoViwoVGUoKSxvcykpLDk4KSxGPXUoUShWLHF5KSwxNzQpLkhjKChRdSgpLHRnKSksZ3Q9bmV3IFMoVi5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KWZvcih0dD11KEooZ3QpLDExKSxvPXUoSm4odC5iLHR0KSwxMCksb3x8KG89VEQodHQsTHQsdHQuaiwtKHR0LmUuYy5sZW5ndGgtdHQuZy5jLmxlbmd0aCksbnVsbCxuZXcgVGEsdHQubyx1KFEoSCxWbCksMTAzKSxIKSxKdChvLF9pLHR0KSxraSh0LmIsdHQsbyksdWUoSC5hLG8pKSxoPXUoRmUoby5qLDApLDExKSxDPW5ldyBTKHR0LmYpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDcwKSxkPW5ldyBjSHQsZC5vLmE9ay5vLmEsZC5vLmI9ay5vLmIsdWUoaC5mLGQpLEZ8fChfdD10dC5qLE09MCxUQyh1KFEoVixxeSksMjEpKSYmKE09dDV0KGsubixrLm8sdHQubywwLF90KSksTHQ9PShvYSgpLEgxKXx8KGJlKCksdXUpLkhjKF90KT9kLm8uYT1NOmQuby5iPU0pO3JldHVybiB3PW5ldyBsZSxSM24odCxlLG4scyx3KSxuJiZ0M24odCxlLG4sdyksd31mdW5jdGlvbiBteHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtpZighdC5jW2UuYy5wXVtlLnBdLmUpe2Zvcih0LmNbZS5jLnBdW2UucF0uZT0hMCx0LmNbZS5jLnBdW2UucF0uYj0wLHQuY1tlLmMucF1bZS5wXS5kPTAsdC5jW2UuYy5wXVtlLnBdLmE9bnVsbCxDPW5ldyBTKGUuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxNPW4/bmV3IFlzKGspOm5ldyBFcihrKSx3PU0uS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMTEpLGg9ZC5pLGguYz09ZS5jP2ghPWUmJihteHQodCxoLG4pLHQuY1tlLmMucF1bZS5wXS5iKz10LmNbaC5jLnBdW2gucF0uYix0LmNbZS5jLnBdW2UucF0uZCs9dC5jW2guYy5wXVtoLnBdLmQpOih0LmNbZS5jLnBdW2UucF0uZCs9dC5nW2QucF0sKyt0LmNbZS5jLnBdW2UucF0uYik7aWYobz11KFEoZSwoc2UoKSxXVHQpKSwxNSksbylmb3Iocz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxlLmM9PXIuYyYmKG14dCh0LHIsbiksdC5jW2UuYy5wXVtlLnBdLmIrPXQuY1tyLmMucF1bci5wXS5iLHQuY1tlLmMucF1bZS5wXS5kKz10LmNbci5jLnBdW3IucF0uZCk7dC5jW2UuYy5wXVtlLnBdLmI+MCYmKHQuY1tlLmMucF1bZS5wXS5kKz1vbCh0LmksMjQpKlBEKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsdC5jW2UuYy5wXVtlLnBdLmE9dC5jW2UuYy5wXVtlLnBdLmQvdC5jW2UuYy5wXVtlLnBdLmIpfX1mdW5jdGlvbiBnNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihWPW5ldyBTKHQpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3IoSD11KEooViksMTApLFRnKEgubiksVGcoSC5vKSx5bXQoSC5mKSxDdWUoSCksVnZuKEgpLHR0PW5ldyBTKEguaik7dHQuYTx0dC5jLmMubGVuZ3RoOyl7Zm9yKFk9dShKKHR0KSwxMSksVGcoWS5uKSxUZyhZLmEpLFRnKFkubyksRnMoWSxoc2UoWS5qKSksbz11KFEoWSwoVGUoKSxXZykpLDE5KSxvJiZKdChZLFdnLGRlKC1vLmEpKSxzPW5ldyBTKFkuZyk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoSihzKSwxNyksbj1laShyLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDgpLFRnKGUpO2lmKHc9dShRKHIsX28pLDc0KSx3KWZvcihkPWVpKHcsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDgpLFRnKGgpO2ZvcihNPW5ldyBTKHIuYik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksNzApLFRnKGsubiksVGcoay5vKX1mb3IoRj1uZXcgUyhZLmYpO0YuYTxGLmMuYy5sZW5ndGg7KWs9dShKKEYpLDcwKSxUZyhrLm4pLFRnKGsubyl9Zm9yKEguaz09KEduKCkseHMpJiYoSnQoSCwoc2UoKSxvYyksaHNlKHUoUShILG9jKSw2MSkpKSxldm4oSCkpLEM9bmV3IFMoSC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksQ3VlKGspLFRnKGsubyksVGcoay5uKX19ZnVuY3Rpb24gcDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZTtmb3IodC5lPWUsZD1wcG4oZSksY2U9bmV3IGxlLHI9bmV3IFMoZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwxNSksU2U9bmV3IGxlLGNlLmNbY2UuYy5sZW5ndGhdPVNlLHc9bmV3IHFzLFY9bi5LYygpO1YuT2IoKTspe2ZvcihIPXUoVi5QYigpLDMzKSxvPWJEKHQsSCwhMCwwLDApLFNlLmNbU2UuYy5sZW5ndGhdPW8sWT1ILmksdHQ9SC5qLEY9KCFILm4mJihILm49bmV3IGhlKHFvLEgsMSw3KSksSC5uKSxNPW5ldyBlcihGKTtNLmUhPU0uaS5nYygpOylrPXUoZHIoTSksMTM3KSxzPWJEKHQsaywhMSxZLHR0KSxTZS5jW1NlLmMubGVuZ3RoXT1zO2ZvcihZdD0oIUguYyYmKEguYz1uZXcgaGUoZmwsSCw5LDkpKSxILmMpLEx0PW5ldyBlcihZdCk7THQuZSE9THQuaS5nYygpOylmb3IoZ3Q9dShkcihMdCksMTE4KSxoPWJEKHQsZ3QsITEsWSx0dCksU2UuY1tTZS5jLmxlbmd0aF09aCxfdD1ndC5pK1ksQnQ9Z3Quait0dCxGPSghZ3QubiYmKGd0Lm49bmV3IGhlKHFvLGd0LDEsNykpLGd0Lm4pLEM9bmV3IGVyKEYpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwxMzcpLHM9YkQodCxrLCExLF90LEJ0KSxTZS5jW1NlLmMubGVuZ3RoXT1zO1VhKHcscyQoTDEoY3Qob3QoQjEsMSksSWUsMjAsMCxbRzAoSCksZkQoSCldKSkpKX1zMm4odCx3LFNlKX1yZXR1cm4gdC5mPW5ldyBzSHQoY2UpLExvKHQuZixlKSx0LmZ9ZnVuY3Rpb24gYjRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocjtSbj1Kbih0LmUsciksUm49PW51bGwmJihSbj1uZXcgbXgsSD11KFJuLDE4MyksTHQ9ZSsiX3MiLF90PUx0K3MsRj1uZXcgSG0oX3QpLFdmKEgsQ2QsRikpLFFlPXUoUm4sMTgzKSxCeChuLFFlKSxocj1uZXcgbXgsSmIoaHIsIngiLHIuaiksSmIoaHIsInkiLHIuayksV2YoUWUsX2RlLGhyKSxTZT1uZXcgbXgsSmIoU2UsIngiLHIuYiksSmIoU2UsInkiLHIuYyksV2YoUWUsImVuZFBvaW50IixTZSksTT1mTSgoIXIuYSYmKHIuYT1uZXcgU3MoSGgsciw1KSksci5hKSksVj0hTSxWJiYoY2U9bmV3IGJnLG89bmV3IGh6dChjZSksdmEoKCFyLmEmJihyLmE9bmV3IFNzKEhoLHIsNSkpLHIuYSksbyksV2YoUWUsd0gsY2UpKSx3PXNzdChyKSxCdD0hIXcsQnQmJlM0dCh0LmEsUWUsdzh0LEZzdCh0LHNzdChyKSkpLGd0PWFzdChyKSxZdD0hIWd0LFl0JiZTNHQodC5hLFFlLHY4dCxGc3QodCxhc3QocikpKSxrPSghci5lJiYoci5lPW5ldyBDbihaaSxyLDEwLDkpKSxyLmUpLmk9PTAsWT0hayxZJiYoV2U9bmV3IGJnLGg9bmV3IElWdCh0LFdlKSx2YSgoIXIuZSYmKHIuZT1uZXcgQ24oWmksciwxMCw5KSksci5lKSxoKSxXZihRZSx5OHQsV2UpKSxDPSghci5nJiYoci5nPW5ldyBDbihaaSxyLDksMTApKSxyLmcpLmk9PTAsdHQ9IUMsdHQmJih6bj1uZXcgYmcsZD1uZXcgRFZ0KHQsem4pLHZhKCghci5nJiYoci5nPW5ldyBDbihaaSxyLDksMTApKSxyLmcpLGQpLFdmKFFlLG04dCx6bikpfWZ1bmN0aW9uIHY0bih0KXtCbSgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihyPXQuZi5uLGg9Z3d0KHQucikuYS5uYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTExKSxzPTAsby5iLlhlKChjaSgpLGhsKSkmJihzPVh0KHllKG8uYi5XZShobCkpKSxzPDApKXN3aXRjaChvLmIuSGYoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1zKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1zKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1zKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1zKX1pZihUQyh0LnUpKXN3aXRjaChlPXpvbihvLmIscyksZD0hdSh0LmUuV2UodmIpLDE3NCkuSGMoKGNsKCksck4pKSxuPSExLG8uYi5IZigpLmcpe2Nhc2UgMTpuPWU+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCxlKSxkJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCtzKTticmVhaztjYXNlIDM6bj1lPnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsZSksZCYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErcyk7YnJlYWs7Y2FzZSAyOm49ZT5yLmMsci5jPWIuTWF0aC5tYXgoci5jLGUpLGQmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK3MpO2JyZWFrO2Nhc2UgNDpuPWU+ci5iLHIuYj1iLk1hdGgubWF4KHIuYixlKSxkJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYitzKX19fWZ1bmN0aW9uIHc0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNO2ZvcihrPW5ldyBTKHQpO2suYTxrLmMuYy5sZW5ndGg7KXtzd2l0Y2godz11KEooayksMTApLGg9dShRKHcsKFRlKCksY3UpKSwxNjMpLG89bnVsbCxoLmcpe2Nhc2UgMTpjYXNlIDI6bz0odTIoKSxHNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDpvPSh1MigpLHU3KX1pZihvKUp0KHcsKHNlKCksSEcpLCh1MigpLEc0KSksbz09dTc/bHEodyxoLChzbygpLEp1KSk6bz09RzQmJmxxKHcsaCwoc28oKSxldSkpO2Vsc2UgaWYoSDModShRKHcsb3MpLDk4KSkmJncuai5jLmxlbmd0aCE9MCl7Zm9yKGU9ITAsTT1uZXcgUyh3LmopO00uYTxNLmMuYy5sZW5ndGg7KXtpZihDPXUoSihNKSwxMSksIShDLmo9PShiZSgpLEhuKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PUJuJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXtlPSExO2JyZWFrfWZvcihzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspaWYobj11KEoocyksMTcpLGQ9dShRKG4uZC5pLGN1KSwxNjMpLGQ9PShoaCgpLHhTKXx8ZD09Rnkpe2U9ITE7YnJlYWt9Zm9yKHI9bmV3IFMoQy5lKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwxNyksZD11KFEobi5jLmksY3UpLDE2MyksZD09KGhoKCkseVMpfHxkPT1mYil7ZT0hMTticmVha319ZSYmbHEodyxoLChzbygpLE1TKSl9fX1mdW5jdGlvbiBtNG4odCxlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihjZT0wLEg9MCxNPW5ldyBTKGUuZSk7TS5hPE0uYy5jLmxlbmd0aDspe2ZvcihDPXUoSihNKSwxMCksRj0wLGQ9MCx3PW4/dShRKEMscFYpLDE5KS5hOl9hLGd0PXI/dShRKEMsYlYpLDE5KS5hOl9hLGs9Yi5NYXRoLm1heCh3LGd0KSxfdD1uZXcgUyhDLmopO190LmE8X3QuYy5jLmxlbmd0aDspe2lmKEx0PXUoSihfdCksMTEpLEJ0PUMubi5iK0x0Lm4uYitMdC5hLmIscilmb3IoaD1uZXcgUyhMdC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksWT1vLmQsVj1ZLmksZSE9dC5hW1YucF0mJih0dD1iLk1hdGgubWF4KHUoUShWLHBWKSwxOSkuYSx1KFEoVixiViksMTkpLmEpLFl0PXUoUShvLChUZSgpLEY2KSksMTkpLmEsWXQ+PWsmJll0Pj10dCYmKEYrPVYubi5iK1kubi5iK1kuYS5iLUJ0LCsrZCkpO2lmKG4pZm9yKGg9bmV3IFMoTHQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFk9by5jLFY9WS5pLGUhPXQuYVtWLnBdJiYodHQ9Yi5NYXRoLm1heCh1KFEoVixwViksMTkpLmEsdShRKFYsYlYpLDE5KS5hKSxZdD11KFEobywoVGUoKSxGNikpLDE5KS5hLFl0Pj1rJiZZdD49dHQmJihGKz1WLm4uYitZLm4uYitZLmEuYi1CdCwrK2QpKX1kPjAmJihjZSs9Ri9kLCsrSCl9SD4wPyhlLmE9cypjZS9ILGUuZz1IKTooZS5hPTAsZS5nPTApfWZ1bmN0aW9uIHk0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihuPXUoSihzKSwyOSksdz1uZXcgUyhuLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDEwKSxlLmpbZC5wXT1kLGUuaVtkLnBdPWUubz09KEUxKCksejEpP1RzOnNzO2ZvcihZdSh0LmMpLGg9dC5hLmIsZS5jPT0oZGQoKSxLZykmJihoPUV0KGgsMTUyKT9WeCh1KGgsMTUyKSk6RXQoaCwxMzEpP3UoaCwxMzEpLmE6RXQoaCw1NCk/bmV3IG12KGgpOm5ldyBNbShoKSksZGFuKHQuZSxlLHQuYikseU0oZS5wLG51bGwpLG89aC5LYygpO28uT2IoKTspZm9yKG49dShvLlBiKCksMjkpLGs9bi5hLGUubz09KEUxKCksejEpJiYoaz1FdChrLDE1Mik/VngodShrLDE1MikpOkV0KGssMTMxKT91KGssMTMxKS5hOkV0KGssNTQpP25ldyBtdihrKTpuZXcgTW0oaykpLEY9ay5LYygpO0YuT2IoKTspTT11KEYuUGIoKSwxMCksZS5nW00ucF09PU0mJk1oZSh0LE0sZSk7Zm9yKHUzbih0LGUpLHI9aC5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMjkpLEY9bmV3IFMobi5hKTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCksZS5wW00ucF09ZS5wW2UuZ1tNLnBdLnBdLE09PWUuZ1tNLnBdJiYoQz1YdChlLmlbZS5qW00ucF0ucF0pLChlLm89PShFMSgpLHoxKSYmQz5Uc3x8ZS5vPT1qMiYmQzxzcykmJihlLnBbTS5wXT1YdChlLnBbTS5wXSkrQykpO3QuZS5jZygpfWZ1bmN0aW9uIGxoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3O3JldHVybiBkPW5ldyB5eHQoZSkseDJuKGQscikscz0hMCx0JiZ0LlhlKChjaSgpLGp3KSkmJihvPXUodC5XZSgoY2koKSxqdykpLDEwMykscz1vPT0oYW8oKSxjMCl8fG89PWpofHxvPT1rZiksZ3VlKGQsITEpLG11KGQuZS53ZigpLG5ldyBidnQoZCwhMSxzKSksZnJ0KGQsZC5mLChLZigpLHNjKSwoYmUoKSxObikpLGZydChkLGQuZixhYyxtciksZnJ0KGQsZC5nLHNjLEJuKSxmcnQoZCxkLmcsYWMsSG4pLFppZShkLE5uKSxaaWUoZCxtciksdlh0KGQsSG4pLHZYdChkLEJuKSxCbSgpLGg9ZC5BLkhjKChfbCgpLFh5KSkmJmQuQi5IYygoY2woKSxpTikpP2xpZShkKTpudWxsLGgmJnFLZShkLmEsaCksdjRuKGQpLE9mbihkKSxOZm4oZCkscTNuKGQpLHh3bihkKSxhMW4oZCksUWl0KGQsTm4pLFFpdChkLG1yKSx0d24oZCkseXluKGQpLG4mJih3bG4oZCksbzFuKGQpLFFpdChkLEhuKSxRaXQoZCxCbiksdz1kLkIuSGMoKGNsKCksZUEpKSx1b2UoZCx3LE5uKSx1b2UoZCx3LG1yKSxsb2UoZCx3LEhuKSxsb2UoZCx3LEJuKSx1cyhuZXcgVG4obnVsbCxuZXcgX24obmV3IGIxKGQuaSksMCkpLG5ldyBnYSksdXMoUmkobmV3IFRuKG51bGwsZ3d0KGQucikuYS5vYygpKSxuZXcgTWEpLG5ldyBIYSksa2RuKGQpLGQuZS51ZihkLm8pLHVzKG5ldyBUbihudWxsLGd3dChkLnIpLmEub2MoKSksbmV3IF9jKSksZC5vfWZ1bmN0aW9uIHg0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKGs9c3Mscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksODEpLGs9Yi5NYXRoLm1pbihrLGUuZC5mLmcuYytlLmUuYSk7Zm9yKEg9bmV3IFFpLGg9bmV3IFModC5hLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4OSksby5pPWssby5lPT0wJiZocyhILG8sSC5jLmIsSC5jKTtmb3IoO0guYiE9MDspe2ZvcihvPXUoSC5iPT0wP251bGw6KFFuKEguYiE9MCksY2goSCxILmEuYSkpLDE4OSkscz1vLmYuZy5jLEY9by5hLmEuZWMoKS5LYygpO0YuT2IoKTspQz11KEYuUGIoKSw4MSksWT1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPFk/Qy5vPVk6Qy5vPUMuZy5jO2ZvcihzLT1vLmYubyxvLmIrPXMsdC5jPT0oYW8oKSxrZil8fHQuYz09UTA/by5jKz1zOm8uYy09cyxNPW8uYS5hLmVjKCkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDgxKSx3PUMuZi5LYygpO3cuT2IoKTspZD11KHcuUGIoKSw4MSksT3AodC5jKT9WPXQuZi5lZihDLGQpOlY9dC5mLmZmKEMsZCksZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxDLm8rQy5nLmIrVi1kLmUuYSksZC5rfHwoZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxkLmcuYy1kLmUuYSkpLC0tZC5kLmUsZC5kLmU9PTAmJm5pKEgsZC5kKX1mb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLGUuZy5jPWUub31mdW5jdGlvbiBrNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdztzd2l0Y2goZD10LmIsZT10LmEsdShRKHQsKEt6KCksJEV0KSksNDI3KS5nKXtjYXNlIDA6WHMoZCxuZXcgZnQobmV3IEVpKSk7YnJlYWs7Y2FzZSAxOmRlZmF1bHQ6WHMoZCxuZXcgZnQobmV3IEpvKSl9c3dpdGNoKHUoUSh0LFJFdCksNDI4KS5nKXtjYXNlIDE6WHMoZCxuZXcga3IpLFhzKGQsbmV3IHZjKSxYcyhkLG5ldyBKMSk7YnJlYWs7Y2FzZSAwOmRlZmF1bHQ6WHMoZCxuZXcga3IpLFhzKGQsbmV3IG9uKX1zd2l0Y2godShRKHQscUV0KSwyNTApLmcpe2Nhc2UgMDp3PW5ldyBYaTticmVhaztjYXNlIDE6dz1uZXcgZWY7YnJlYWs7Y2FzZSAyOnc9bmV3IG5mO2JyZWFrO2Nhc2UgMzp3PW5ldyBPYzticmVhaztjYXNlIDU6dz1uZXcgZnIobmV3IG5mKTticmVhaztjYXNlIDQ6dz1uZXcgZnIobmV3IGVmKTticmVhaztjYXNlIDc6dz1uZXcgRWJ0KG5ldyBmcihuZXcgZWYpLG5ldyBmcihuZXcgbmYpKTticmVhaztjYXNlIDg6dz1uZXcgRWJ0KG5ldyBmcihuZXcgT2MpLG5ldyBmcihuZXcgbmYpKTticmVhaztjYXNlIDY6ZGVmYXVsdDp3PW5ldyBmcihuZXcgT2MpfWZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTY3KSxyPTAscz0wLG49bmV3IGxhKGRlKHIpLGRlKHMpKTtvbW4oZSxvLHIscyk7KW49dSh3LkNlKG4sbyksNDYpLHI9dShuLmEsMTkpLmEscz11KG4uYiwxOSkuYTtzd24oZSxvLHIscyl9fWZ1bmN0aW9uIEU0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7Zm9yKG89dC5mLmIsRj1vLmEsQz1vLmIsVj10LmUuZyxIPXQuZS5mLHNqKHQuZSxvLmEsby5iKSxjZT1GL1YsU2U9Qy9ILGs9bmV3IGVyKFpqKHQuZSkpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSwxMzcpLHl1KHcsdy5pKmNlKSx4dSh3LHcuaipTZSk7Zm9yKEx0PW5ldyBlcihabnQodC5lKSk7THQuZSE9THQuaS5nYygpOylndD11KGRyKEx0KSwxMTgpLEJ0PWd0LmksWXQ9Z3QuaixCdD4wJiZ5dShndCxCdCpjZSksWXQ+MCYmeHUoZ3QsWXQqU2UpO2ZvcihVQyh0LmIsbmV3IGN2KSxlPW5ldyBsZSxkPW5ldyBoMihuZXcgd2codC5jKS5hKTtkLmI7KWg9WXYoZCkscj11KGguY2QoKSw3OSksbj11KGguZGQoKSwzOTUpLmEscz1tNChyLCExLCExKSxNPXVhZShaZChyKSxzRChzKSxuKSx5RChNLHMpLF90PXhhZShyKSxfdCYmUm8oZSxfdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09X3QsU1h0KF90LChRbihNLmIhPTApLHUoTS5hLmEuYyw4KSksbikpO2Zvcih0dD1uZXcgaDIobmV3IHdnKHQuZCkuYSk7dHQuYjspWT1Zdih0dCkscj11KFkuY2QoKSw3OSksbj11KFkuZGQoKSwzOTUpLmEscz1tNChyLCExLCExKSxNPXVhZShYcChyKSxCSShzRChzKSksbiksTT1CSShNKSx5RChNLHMpLF90PWthZShyKSxfdCYmUm8oZSxfdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09X3QsU1h0KF90LChRbihNLmIhPTApLHUoTS5jLmIuYyw4KSksbikpfWZ1bmN0aW9uIGhoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7aWYobi5jLmxlbmd0aCE9MCl7Zm9yKEg9bmV3IGxlLEY9bmV3IFMobik7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMzMpLHVlKEgsbmV3ICRlKE0uaSxNLmopKTtmb3Ioci5uJiZlJiZoZihyLGZmKGUpLChDbCgpLFlsKSk7STR0KHQsbik7KXNxKHQsbiwhMSk7Zm9yKHIubiYmZSYmaGYocixmZihlKSwoQ2woKSxZbCkpLGg9MCxkPTAscz1udWxsLG4uYy5sZW5ndGghPTAmJihzPShBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDMzKSksaD1zLmktKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmEsZD1zLmotKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmIpLG89Yi5NYXRoLnNxcnQoaCpoK2QqZCksQz1EcmUobik7Qy5hLmdjKCkhPTA7KXtmb3Ioaz1DLmEuZWMoKS5LYygpO2suT2IoKTspdz11KGsuUGIoKSwzMyksVj10LmYsWT1WLmkrVi5nLzIsdHQ9Vi5qK1YuZi8yLGd0PXcuaSt3LmcvMixMdD13Lmordy5mLzIsX3Q9Z3QtWSxCdD1MdC10dCxZdD1iLk1hdGguc3FydChfdCpfdCtCdCpCdCksY2U9X3QvWXQsU2U9QnQvWXQseXUodyx3LmkrY2UqbykseHUodyx3LmorU2Uqbyk7ci5uJiZlJiZoZihyLGZmKGUpLChDbCgpLFlsKSksQz1EcmUobmV3IFB1KEMpKX10LmEmJnQuYS5sZyhuZXcgUHUoQykpLHIubiYmZSYmaGYocixmZihlKSwoQ2woKSxZbCkpLGhoZSh0LGUsbmV3IFB1KEMpLHIpfX1mdW5jdGlvbiBUNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0O2lmKFk9dC5uLHR0PXQubyxGPXQuZCxNPVh0KHllKGl5KHQsKFRlKCksSmx0KSkpKSxlKXtmb3IoQz1NKihlLmdjKCktMSksSD0wLHc9ZS5LYygpO3cuT2IoKTspaD11KHcuUGIoKSwxMCksQys9aC5vLmEsSD1iLk1hdGgubWF4KEgsaC5vLmIpO2ZvcihndD1ZLmEtKEMtdHQuYSkvMixvPVkuYi1GLmQrSCxyPXR0LmEvKGUuZ2MoKSsxKSxzPXIsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLWguby5iLGd0Kz1oLm8uYStNLGs9RWNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9aC5vLmIsVj11KFEoaCwoc2UoKSx6RykpLDExKSxWLmUuYy5sZW5ndGgrVi5nLmMubGVuZ3RoPT0xJiYoVi5uLmE9cy1WLmEuYSxWLm4uYj0wLFVvKFYsdCkpLHMrPXJ9aWYobil7Zm9yKEM9TSoobi5nYygpLTEpLEg9MCx3PW4uS2MoKTt3Lk9iKCk7KWg9dSh3LlBiKCksMTApLEMrPWguby5hLEg9Yi5NYXRoLm1heChILGguby5iKTtmb3IoZ3Q9WS5hLShDLXR0LmEpLzIsbz1ZLmIrdHQuYitGLmEtSCxyPXR0LmEvKG4uZ2MoKSsxKSxzPXIsZD1uLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLGd0Kz1oLm8uYStNLGs9RWNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9MCxWPXUoUShoLChzZSgpLHpHKSksMTEpLFYuZS5jLmxlbmd0aCtWLmcuYy5sZW5ndGg9PTEmJihWLm4uYT1zLVYuYS5hLFYubi5iPXR0LmIsVW8oVix0KSkscys9cn19ZnVuY3Rpb24gQzRuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHUoUShlLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSkpe2ZvcihkPW5ldyBTKGUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTApLG8uaz09KEduKCksRHMpJiYocz11KFEobywoVGUoKSxlVikpLDE0MiksdC5jPWIuTWF0aC5taW4odC5jLG8ubi5hLXMuYiksdC5hPWIuTWF0aC5tYXgodC5hLG8ubi5hK28uby5hK3MuYyksdC5kPWIuTWF0aC5taW4odC5kLG8ubi5iLXMuZCksdC5iPWIuTWF0aC5tYXgodC5iLG8ubi5iK28uby5iK3MuYSkpO2ZvcihoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLG8uayE9KEduKCksRHMpKXN3aXRjaChvLmsuZyl7Y2FzZSAyOmlmKHI9dShRKG8sKFRlKCksY3UpKSwxNjMpLHI9PShoaCgpLGZiKSl7by5uLmE9dC5jLTEwLE5zZShvLG5ldyBMWSkuSmIobmV3IEphKG8pKTticmVha31pZihyPT1GeSl7by5uLmE9dC5hKzEwLE5zZShvLG5ldyBNWSkuSmIobmV3IHZsKG8pKTticmVha31pZihuPXUoUShvLE8yKSwzMDMpLG49PShCMCgpLFU0KSl7UGxlKG8pLkpiKG5ldyB6ZihvKSksby5uLmI9dC5kLTEwO2JyZWFrfWlmKG49PUE2KXtQbGUobykuSmIobmV3IHhwKG8pKSxvLm4uYj10LmIrMTA7YnJlYWt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIlRoZSBub2RlIHR5cGUgIitvLmsrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAiK2x4bikpfX19ZnVuY3Rpb24gXzRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3Iodz1uZXcgJGUoci5pK3IuZy8yLHIuaityLmYvMiksSD1JbGUociksVj11KHFlKGUsKFRlKCksb3MpKSw5OCksdHQ9dShxZShyLHY3KSw2MSksJFZ0KFZpZShyKSx6eSl8fChyLmk9PTAmJnIuaj09MD9ZPTA6WT1pMG4ocix0dCksYm8ocix6eSxZKSksaz1uZXcgJGUoZS5nLGUuZikscz1URChyLFYsdHQsSCxrLHcsbmV3ICRlKHIuZyxyLmYpLHUoUShuLFZsKSwxMDMpLG4pLEp0KHMsKHNlKCksX2kpLHIpLG89dShGZShzLmosMCksMTEpLHl0dChvLFF3bihyKSksSnQocyxxeSwoUXUoKSx1bih4YikpKSxNPXUocWUoZSxxeSksMTc0KS5IYyh0ZyksZD1uZXcgZXIoKCFyLm4mJihyLm49bmV3IGhlKHFvLHIsMSw3KSksci5uKSk7ZC5lIT1kLmkuZ2MoKTspaWYoaD11KGRyKGQpLDEzNyksIWplKFJlKHFlKGgsQjIpKSkmJmguYSYmKEY9T2l0KGgpLHVlKG8uZixGKSwhTSkpc3dpdGNoKEM9MCxUQyh1KHFlKGUscXkpLDIxKSkmJihDPXQ1dChuZXcgJGUoaC5pLGguaiksbmV3ICRlKGguZyxoLmYpLG5ldyAkZShyLmcsci5mKSwwLHR0KSksdHQuZyl7Y2FzZSAyOmNhc2UgNDpGLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6Ri5vLmI9Q31KdChzLG03LHllKHFlKHRzKGUpLG03KSkpLEp0KHMseTcseWUocWUodHMoZSkseTcpKSksSnQocyxHeSx5ZShxZSh0cyhlKSxHeSkpKSx1ZShuLmEscyksa2kodC5hLHIscyl9ZnVuY3Rpb24gZmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3Iod3IobiwiUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwiLDEpLEM9MCx2bigpLGU0KGUsbmV3IGJwdCgoZmMoKSxtVikpKSxvPWUuYixkPWVpKGUsZS5iKSxrPSEwO2smJmQuYi5iIT1kLmQuYTspZ3Q9dShrcnQoZCksODYpLHUoUShndCxtViksMTkpLmE9PTA/LS1vOms9ITE7aWYoWXQ9bmV3IEtkKGUsMCxvKSxoPW5ldyBibnQoWXQpLFl0PW5ldyBLZChlLG8sZS5iKSx3PW5ldyBibnQoWXQpLGguYj09MClmb3IoVj1laSh3LDApO1YuYiE9Vi5kLmM7KUg9dSh0aShWKSw4NiksSnQoSCxrVixkZShDKyspKTtlbHNlIGZvcihNPWguYixCdD1laShoLDApO0J0LmIhPUJ0LmQuYzspe2ZvcihfdD11KHRpKEJ0KSw4NiksSnQoX3Qsa1YsZGUoQysrKSkscj1ieXQoX3QpLGZoZSh0LHIsUmMobiwxL018MCkpLGU0KHIsRXd0KG5ldyBicHQoa1YpKSksRj1uZXcgUWksTHQ9ZWkociwwKTtMdC5iIT1MdC5kLmM7KWZvcihndD11KHRpKEx0KSw4NiksdHQ9ZWkoX3QuZCwwKTt0dC5iIT10dC5kLmM7KVk9dSh0aSh0dCksMTg4KSxZLmM9PWd0JiZocyhGLFksRi5jLmIsRi5jKTtmb3IoX2goX3QuZCksVWEoX3QuZCxGKSxkPWVpKHcsdy5iKSxzPV90LmQuYixrPSEwOzA8cyYmayYmZC5iLmIhPWQuZC5hOylndD11KGtydChkKSw4NiksdShRKGd0LG1WKSwxOSkuYT09MD8oSnQoZ3Qsa1YsZGUoQysrKSksLS1zLEgkKGQpKTprPSExfW9yKG4pfWZ1bmN0aW9uIFM0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKHdyKGUsIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz10LmIsaz1uZXcgaGEoQywwKSxuPW51bGwsX3Q9bmV3IGxlO2suYjxrLmQuZ2MoKTspe2ZvcihMdD1uLG49KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwyOSkpLEg9bmV3IFMoX3QpO0guYTxILmMuYy5sZW5ndGg7KU09dShKKEgpLDEwKSxrbyhNLEx0KTtmb3IoX3QuYz1QdChYbixJZSwxLDAsNSwxKSxWPW5ldyBTKG4uYSk7Vi5hPFYuYy5jLmxlbmd0aDspaWYoTT11KEooViksMTApLE0uaz09KEduKCksRHMpJiZIMyh1KFEoTSwoVGUoKSxvcykpLDk4KSkpe2ZvcihndD1qNXQoTSwoc28oKSxKdSksKGJlKCksSG4pKS5LYygpO2d0Lk9iKCk7KWZvcihZPXUoZ3QuUGIoKSwxMSksdz1ZLmUsZD11KEQxKHcsUHQodGx0LEZvdCwxNyx3LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFptbih0LFkscixfdCk7Zm9yKHR0PWo1dChNLGV1LEJuKS5LYygpO3R0Lk9iKCk7KWZvcihZPXUodHQuUGIoKSwxMSksdz1ZLmcsZD11KEQxKHcsUHQodGx0LEZvdCwxNyx3LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFFtbih0LFkscixfdCl9fWZvcihGPW5ldyBTKF90KTtGLmE8Ri5jLmMubGVuZ3RoOylNPXUoSihGKSwxMCksa28oTSxuKTtvcihlKX1mdW5jdGlvbiBBNG4odCxlLG4scixzLG8pe3ZhciBoLGQsdyxrLEMsTTtmb3Ioaz1uZXcgTWMsTG8oayxlKSxGcyhrLHUocWUoZSwoVGUoKSx2NykpLDYxKSksSnQoaywoc2UoKSxfaSksZSksVW8oayxuKSxNPWsubyxNLmE9ZS5nLE0uYj1lLmYsQz1rLm4sQy5hPWUuaSxDLmI9ZS5qLGtpKHQuYSxlLGspLGg9QTgocHUoV28obmV3IFRuKG51bGwsKCFlLmUmJihlLmU9bmV3IENuKFdzLGUsNyw0KSksbmV3IF9uKGUuZSwxNikpKSxuZXcgWFApLG5ldyB6NSksbmV3IGlyKGUpKSxofHwoaD1BOChwdShXbyhuZXcgVG4obnVsbCwoIWUuZCYmKGUuZD1uZXcgQ24oV3MsZSw4LDUpKSxuZXcgX24oZS5kLDE2KSkpLG5ldyBiayksbmV3IERUKSxuZXcgc3IoZSkpKSxofHwoaD1BOChuZXcgVG4obnVsbCwoIWUuZSYmKGUuZT1uZXcgQ24oV3MsZSw3LDQpKSxuZXcgX24oZS5lLDE2KSkpLG5ldyByWSkpLEp0KGssa08sKEZuKCksISFoKSksVnluKGssbyxzLHUocWUoZSxQdyksOCkpLHc9bmV3IGVyKCghZS5uJiYoZS5uPW5ldyBoZShxbyxlLDEsNykpLGUubikpO3cuZSE9dy5pLmdjKCk7KWQ9dShkcih3KSwxMzcpLCFqZShSZShxZShkLEIyKSkpJiZkLmEmJnVlKGsuZixPaXQoZCkpO3N3aXRjaChzLmcpe2Nhc2UgMjpjYXNlIDE6KGsuaj09KGJlKCksTm4pfHxrLmo9PW1yKSYmci5GYygob28oKSxWNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGsuaj09KGJlKCksSG4pfHxrLmo9PUJuKSYmci5GYygob28oKSxWNCkpfXJldHVybiBrfWZ1bmN0aW9uIExhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3Q7Zm9yKEY9bnVsbCxyPT0ocXYoKSxiYik/Rj1lOnI9PWU1JiYoRj1uKSxZPUYuYS5lYygpLktjKCk7WS5PYigpOyl7Zm9yKFY9dShZLlBiKCksMTEpLHR0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5iLF90PW5ldyBxcyxkPW5ldyBxcyxrPW5ldyBTMShWLmIpO1ZvKGsuYSl8fFZvKGsuYik7KWlmKHc9dShWbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLGplKFJlKFEodywoc2UoKSwkMSkpKSk9PXMmJlJvKG8sdywwKSE9LTEpe2lmKHcuZD09Vj9ndD13LmM6Z3Q9dy5kLEx0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbZ3QuaS5uLGd0Lm4sZ3QuYV0pKS5iLGIuTWF0aC5hYnMoTHQtdHQpPC4yKWNvbnRpbnVlO0x0PHR0P2UuYS5fYihndCk/TnMoX3QsbmV3IGxhKGJiLHcpKTpOcyhfdCxuZXcgbGEoZTUsdykpOmUuYS5fYihndCk/TnMoZCxuZXcgbGEoYmIsdykpOk5zKGQsbmV3IGxhKGU1LHcpKX1pZihfdC5hLmdjKCk+MSlmb3IoSD1uZXcgaHh0KFYsX3QsciksdmEoX3QsbmV3IGlWdCh0LEgpKSxoLmNbaC5jLmxlbmd0aF09SCxNPV90LmEuZWMoKS5LYygpO00uT2IoKTspQz11KE0uUGIoKSw0NiksdnUobyxDLmIpO2lmKGQuYS5nYygpPjEpZm9yKEg9bmV3IGh4dChWLGQsciksdmEoZCxuZXcgc1Z0KHQsSCkpLGguY1toLmMubGVuZ3RoXT1ILE09ZC5hLmVjKCkuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNDYpLHZ1KG8sQy5iKX19ZnVuY3Rpb24gZGhlKHQpe1N2KHQsbmV3IHcyKG1SKEV2KHl2KGt2KHh2KG5ldyBwZyxUZCksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBuWiksVGQpKSkseGUodCxUZCx1SCxEZShOeWUpKSx4ZSh0LFRkLGt5LERlKFB5ZSkpLHhlKHQsVGQsTDQsRGUoTXllKSkseGUodCxUZCx3NixEZShJeWUpKSx4ZSh0LFRkLHY2LERlKER5ZSkpLHhlKHQsVGQsUkUsRGUoTHllKSkseGUodCxUZCxGXyxEZShrX3QpKSx4ZSh0LFRkLGpFLERlKE95ZSkpLHhlKHQsVGQsRWN0LERlKEZodCkpLHhlKHQsVGQsa2N0LERlKEJodCkpLHhlKHQsVGQsVmt0LERlKEVfdCkpLHhlKHQsVGQsemt0LERlKF9WKSkseGUodCxUZCxxa3QsRGUoU1YpKSx4ZSh0LFRkLEhrdCxEZShCTykpLHhlKHQsVGQsR2t0LERlKFRfdCkpfWZ1bmN0aW9uIHl4dCh0KXt2YXIgZTtpZih0aGlzLnI9cm5uKG5ldyBiYyxuZXcgQ2MpLHRoaXMuYj1uZXcgZV8odShBcihYYSksMjkwKSksdGhpcy5wPW5ldyBlXyh1KEFyKFhhKSwyOTApKSx0aGlzLmk9bmV3IGVfKHUoQXIoRXBlKSwyOTApKSx0aGlzLmU9dCx0aGlzLm89bmV3IHlvKHQucmYoKSksdGhpcy5EPXQuRGYoKXx8amUoUmUodC5XZSgoY2koKSxXTykpKSksdGhpcy5BPXUodC5XZSgoY2koKSx6MikpLDIxKSx0aGlzLkI9dSh0LldlKHZiKSwyMSksdGhpcy5xPXUodC5XZShVUyksOTgpLHRoaXMudT11KHQuV2UoS3kpLDIxKSwhbDBuKHRoaXMudSkpdGhyb3cgcnQobmV3IEYzKCJJbnZhbGlkIHBvcnQgbGFiZWwgcGxhY2VtZW50OiAiK3RoaXMudSkpO2lmKHRoaXMudj1qZShSZSh0LldlKG5BdCkpKSx0aGlzLmo9dSh0LldlKHM1KSwyMSksIU5ibih0aGlzLmopKXRocm93IHJ0KG5ldyBGMygiSW52YWxpZCBub2RlIGxhYmVsIHBsYWNlbWVudDogIit0aGlzLmopKTt0aGlzLm49dShvXyh0LEhTdCksMTE2KSx0aGlzLms9WHQoeWUob18odCxxVikpKSx0aGlzLmQ9WHQoeWUob18odCxhQXQpKSksdGhpcy53PVh0KHllKG9fKHQsaEF0KSkpLHRoaXMucz1YdCh5ZShvXyh0LG9BdCkpKSx0aGlzLnQ9WHQoeWUob18odCxjQXQpKSksdGhpcy5DPXUob18odCx1QXQpLDE0MiksdGhpcy5jPTIqdGhpcy5kLGU9IXRoaXMuQi5IYygoY2woKSxyTikpLHRoaXMuZj1uZXcgcl8oMCxlLDApLHRoaXMuZz1uZXcgcl8oMSxlLDApLEp0dCh0aGlzLmYsKEtmKCksdHUpLHRoaXMuZyl9ZnVuY3Rpb24gTDRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtmb3IoX3Q9MCxWPTAsSD0wLEY9MSxMdD1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpKTtMdC5lIT1MdC5pLmdjKCk7KXR0PXUoZHIoTHQpLDMzKSxGKz1OMChuZXcgYXIobHIoRzAodHQpLmEuS2MoKSxuZXcgeikpKSxXZT10dC5nLFY9Yi5NYXRoLm1heChWLFdlKSxNPXR0LmYsSD1iLk1hdGgubWF4KEgsTSksX3QrPVdlKk07Zm9yKFk9KCF0LmEmJih0LmE9bmV3IGhlKG5zLHQsMTAsMTEpKSx0LmEpLmksaD1fdCsyKnIqcipGKlksbz1iLk1hdGguc3FydChoKSx3PWIuTWF0aC5tYXgobypuLFYpLGQ9Yi5NYXRoLm1heChvL24sSCksZ3Q9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7Z3QuZSE9Z3QuaS5nYygpOyl0dD11KGRyKGd0KSwzMyksUWU9cy5iKyhvbChlLDI2KSpMXytvbChlLDI3KSpNXykqKHctdHQuZyksUm49cy5iKyhvbChlLDI2KSpMXytvbChlLDI3KSpNXykqKGQtdHQuZikseXUodHQsUWUpLHh1KHR0LFJuKTtmb3IoU2U9dysocy5iK3MuYyksY2U9ZCsocy5kK3MuYSksWXQ9bmV3IGVyKCghdC5hJiYodC5hPW5ldyBoZShucyx0LDEwLDExKSksdC5hKSk7WXQuZSE9WXQuaS5nYygpOylmb3IoQnQ9dShkcihZdCksMzMpLEM9bmV3IGFyKGxyKEcwKEJ0KS5hLktjKCksbmV3IHopKTt6cihDKTspaz11KExyKEMpLDc5KSxnXyhrKXx8TTVuKGssZSxTZSxjZSk7U2UrPXMuYitzLmMsY2UrPXMuZCtzLmEsZ3codCxTZSxjZSwhMSwhMCl9ZnVuY3Rpb24gU3EodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTTtpZih0PT1udWxsKXRocm93IHJ0KG5ldyBvZChUdSkpO2lmKGs9dCxvPXQubGVuZ3RoLHc9ITEsbz4wJiYoZT0oUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSwoZT09NDV8fGU9PTQzKSYmKHQ9dC5zdWJzdHIoMSksLS1vLHc9ZT09NDUpKSxvPT0wKXRocm93IHJ0KG5ldyBvZCh2dytrKyciJykpO2Zvcig7dC5sZW5ndGg+MCYmKFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDgpOyl0PXQuc3Vic3RyKDEpLC0tbztpZihvPihlbGUoKSxFZ2UpWzEwXSl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtmb3Iocz0wO3M8bztzKyspaWYoTWllKChScihzLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocykpKT09LTEpdGhyb3cgcnQobmV3IG9kKHZ3K2srJyInKSk7Zm9yKE09MCxoPW9FdFsxMF0sQz1UdXRbMTBdLGQ9TzgoY0V0WzEwXSksbj0hMCxyPW8laCxyPjAmJihNPS1wYXJzZUludCh0LnN1YnN0cigwLHIpLDEwKSx0PXQuc3Vic3RyKHIpLG8tPXIsbj0hMSk7bz49aDspe2lmKHI9cGFyc2VJbnQodC5zdWJzdHIoMCxoKSwxMCksdD10LnN1YnN0cihoKSxvLT1oLG4pbj0hMTtlbHNle2lmKHljKE0sZCk8MCl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtNPUNhKE0sQyl9TT1ZcChNLHIpfWlmKHljKE0sMCk+MCl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtpZighdyYmKE09TzgoTSkseWMoTSwwKTwwKSl0aHJvdyBydChuZXcgb2QodncraysnIicpKTtyZXR1cm4gTX1mdW5jdGlvbiB4eHQodCxlKXtHS3QoKTt2YXIgbixyLHMsbyxoLGQsdztpZih0aGlzLmE9bmV3IGgydCh0aGlzKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmY9am50KEVvKChSdSgpLG1hKSxlKSksdGhpcy5mLmRjKCkpaWYoKGQ9YTR0KG1hLHQpKT09ZSlmb3IodGhpcy5lPSEwLHRoaXMuZD1uZXcgbGUsdGhpcy5mPW5ldyBDayx0aGlzLmYuRmMoTDIpLHUoRXEobUkobWEsRmwodCkpLCIiKSwyNik9PXQmJnRoaXMuZi5GYyhrQyhtYSxGbCh0KSkpLHM9b2F0KG1hLHQpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxNzApLCR2KEVvKG1hLHIpKSl7Y2FzZSA0Ont0aGlzLmQuRmMocik7YnJlYWt9Y2FzZSA1Ont0aGlzLmYuR2Moam50KEVvKG1hLHIpKSk7YnJlYWt9fWVsc2UgaWYodG8oKSx1KGUsNjYpLk9qKCkpZm9yKHRoaXMuZT0hMCx0aGlzLmY9bnVsbCx0aGlzLmQ9bmV3IGxlLGg9MCx3PSh0Lmk9PW51bGwmJnBkKHQpLHQuaSkubGVuZ3RoO2g8dzsrK2gpZm9yKHI9KG49KHQuaT09bnVsbCYmcGQodCksdC5pKSxoPj0wJiZoPG4ubGVuZ3RoP25baF06bnVsbCksbz1xeChFbyhtYSxyKSk7bztvPXF4KEVvKG1hLG8pKSlvPT1lJiZ0aGlzLmQuRmMocik7ZWxzZSAkdihFbyhtYSxlKSk9PTEmJmQ/KHRoaXMuZj1udWxsLHRoaXMuZD0oYTYoKSxoNWUpKToodGhpcy5mPW51bGwsdGhpcy5lPSEwLHRoaXMuZD0odm4oKSxuZXcgRChlKSkpO2Vsc2UgdGhpcy5lPSR2KEVvKG1hLGUpKT09NSx0aGlzLmYuRmIoTGZ0KSYmKHRoaXMuZj1MZnQpfWZ1bmN0aW9uIGdoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO2ZvcihuPTAscj1rZm4odCxlKSxGPXQucyxIPXQudCxrPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2suT2IoKTspaWYodz11KGsuUGIoKSwxMTEpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goVj13LmIucmYoKSxkPXcuYi5YZSgoY2koKSxobCkpP1h0KHllKHcuYi5XZShobCkpKTowLEM9dy5jLE09Qy5pLE0uYj0oaD1DLm4sQy5lLmEraC5iK2guYyksTS5hPShvPUMubixDLmUuYitvLmQrby5hKSxlLmcpe2Nhc2UgMTpNLmM9dy5hPyhWLmEtTS5iKS8yOlYuYStGLE0uZD1WLmIrZCtyLFVmKEMsKFh1KCksY2IpKSxsZChDLCh3dSgpLGUxKSk7YnJlYWs7Y2FzZSAzOk0uYz13LmE/KFYuYS1NLmIpLzI6Vi5hK0YsTS5kPS1kLXItTS5hLFVmKEMsKFh1KCksY2IpKSxsZChDLCh3dSgpLHlmKSk7YnJlYWs7Y2FzZSAyOk0uYz0tZC1yLU0uYix3LmE/KHM9dC52P00uYTp1KEZlKEMuZCwwKSwxODEpLnJmKCkuYixNLmQ9KFYuYi1zKS8yKTpNLmQ9Vi5iK0gsVWYoQywoWHUoKSxtZikpLGxkKEMsKHd1KCksdWIpKTticmVhaztjYXNlIDQ6TS5jPVYuYStkK3Isdy5hPyhzPXQudj9NLmE6dShGZShDLmQsMCksMTgxKS5yZigpLmIsTS5kPShWLmItcykvMik6TS5kPVYuYitILFVmKEMsKFh1KCksU2QpKSxsZChDLCh3dSgpLHViKSl9KGU9PShiZSgpLE5uKXx8ZT09bXIpJiYobj1iLk1hdGgubWF4KG4sTS5hKSl9bj4wJiYodShnbyh0LmIsZSksMTI0KS5hLmI9bil9ZnVuY3Rpb24gTTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IoZSwiQ29tbWVudCBwcmUtcHJvY2Vzc2luZyIsMSksbj0wLHc9bmV3IFModC5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihkPXUoSih3KSwxMCksamUoUmUoUShkLChUZSgpLGtTKSkpKSl7Zm9yKCsrbixzPTAscj1udWxsLGs9bnVsbCxWPW5ldyBTKGQuaik7Vi5hPFYuYy5jLmxlbmd0aDspRj11KEooViksMTEpLHMrPUYuZS5jLmxlbmd0aCtGLmcuYy5sZW5ndGgsRi5lLmMubGVuZ3RoPT0xJiYocj11KEZlKEYuZSwwKSwxNyksaz1yLmMpLEYuZy5jLmxlbmd0aD09MSYmKHI9dShGZShGLmcsMCksMTcpLGs9ci5kKTtpZihzPT0xJiZrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoPT0xJiYhamUoUmUoUShrLmksa1MpKSkpaTVuKGQscixrLGsuaSksX0Modyk7ZWxzZXtmb3IoZ3Q9bmV3IGxlLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOyl7Zm9yKEY9dShKKEgpLDExKSxNPW5ldyBTKEYuZyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTcpLEMuZC5nLmMubGVuZ3RoPT0wfHwoZ3QuY1tndC5jLmxlbmd0aF09Qyk7Zm9yKGg9bmV3IFMoRi5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksby5jLmUuYy5sZW5ndGg9PTB8fChndC5jW2d0LmMubGVuZ3RoXT1vKX1mb3IodHQ9bmV3IFMoZ3QpO3R0LmE8dHQuYy5jLmxlbmd0aDspWT11KEoodHQpLDE3KSxkdyhZLCEwKX19ZS5uJiZZYihlLCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksb3IoZSl9ZnVuY3Rpb24gSTRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWTtpZihGPVh0KHllKFEodCwoVGUoKSxtNykpKSksSD1YdCh5ZShRKHQseTcpKSksTT1YdCh5ZShRKHQsR3kpKSksZD10Lm8sbz11KEZlKHQuaiwwKSwxMSksaD1vLm4sWT1jZ24obyxNKSwhIVkpe2lmKGUuSGMoKFF1KCksdGcpKSlzd2l0Y2godShRKHQsKHNlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOlkuYz0oZC5hLVkuYikvMi1oLmEsWS5kPUg7YnJlYWs7Y2FzZSAzOlkuYz0oZC5hLVkuYikvMi1oLmEsWS5kPS1ILVkuYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9ZLmE6dShGZShvLmYsMCksNzApLm8uYixZLmQ9KGQuYi1DKS8yLWguYik6WS5kPWQuYitILWguYixZLmM9LUYtWS5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP1kuYTp1KEZlKG8uZiwwKSw3MCkuby5iLFkuZD0oZC5iLUMpLzItaC5iKTpZLmQ9ZC5iK0gtaC5iLFkuYz1GfWVsc2UgaWYoZS5IYyh4Yikpc3dpdGNoKHUoUSh0LChzZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpjYXNlIDM6WS5jPWguYStGO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP1kuYTp1KEZlKG8uZiwwKSw3MCkuby5iLFkuZD0oZC5iLUMpLzItaC5iKTpZLmQ9aC5iK0h9Zm9yKHM9WS5kLGs9bmV3IFMoby5mKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSw3MCksVj13Lm4sVi5hPVkuYyxWLmI9cyxzKz13Lm8uYitNfX1mdW5jdGlvbiBENG4oKXtyaShmTixuZXcgd0opLHJpKGNVLG5ldyBrSikscmkoZE4sbmV3IE9rKSxyaShwTHQsbmV3IFNKKSxyaShBZSxuZXcgRmspLHJpKG90KEh1LDEpLG5ldyBoOSkscmkoQnMsbmV3IExKKSxyaShFNixuZXcgYXgpLHJpKEFlLG5ldyBoMSkscmkoQWUsbmV3IHdCKSxyaShBZSxuZXcgbUIpLHJpKGNhLG5ldyB5QikscmkoQWUsbmV3IHhCKSxyaShwaCxuZXcga0IpLHJpKHBoLG5ldyBFQikscmkoQWUsbmV3IGpmKSxyaShYRSxuZXcgaHUpLHJpKEFlLG5ldyB2SikscmkoQWUsbmV3IG1KKSxyaShBZSxuZXcgZnUpLHJpKEFlLG5ldyBzOSkscmkoQWUsbmV3IFRCKSxyaShvdChIdSwxKSxuZXcgQ0IpLHJpKEFlLG5ldyBzeCkscmkoQWUsbmV3IHlKKSxyaShwaCxuZXcgRGspLHJpKHBoLG5ldyB4SikscmkoQWUsbmV3IF9CKSxyaShqYSxuZXcgRUopLHJpKEFlLG5ldyBhOSkscmkoVHcsbmV3IFNCKSxyaShBZSxuZXcgekwpLHJpKEFlLG5ldyBvOSkscmkoQWUsbmV3IFRKKSxyaShBZSxuZXcgQ0opLHJpKHBoLG5ldyBxTCkscmkocGgsbmV3IGM5KSxyaShBZSxuZXcgZjEpLHJpKEFlLG5ldyBfSikscmkoQWUsbmV3IE5rKSxyaShBZSxuZXcgSEwpLHJpKEFlLG5ldyBIYikscmkoQWUsbmV3IHU5KSxyaShDdyxuZXcgR0wpLHJpKEFlLG5ldyAkZikscmkoQWUsbmV3IGw5KSxyaShBZSxuZXcgZDEpLHJpKEN3LG5ldyBnMSkscmkoVHcsbmV3IEFKKSxyaShBZSxuZXcgQTMpLHJpKGphLG5ldyBQayl9ZnVuY3Rpb24ga3h0KHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtpZihGPWUubGVuZ3RoLEY+MCYmKHc9KFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKSksdyE9NjQpKXtpZih3PT0zNyYmKE09ZS5sYXN0SW5kZXhPZigiJSIpLGs9ITEsTSE9MCYmKE09PUYtMXx8KGs9KFJyKE0rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KE0rMSk9PTQ2KSkpKSl7aWYoaD1lLnN1YnN0cigxLE0tMSksX3Q9aG4oIiUiLGgpP251bGw6RXh0KGgpLHI9MCxrKXRyeXtyPSRsKGUuc3Vic3RyKE0rMiksX2EsdmkpfWNhdGNoKEJ0KXt0aHJvdyBCdD1XaShCdCksRXQoQnQsMTI3KT8oZD1CdCxydChuZXcgRiQoZCkpKTpydChCdCl9Zm9yKHR0PXJ5dCh0LldnKCkpO3R0Lk9iKCk7KWlmKFY9aHoodHQpLEV0KFYsNTEwKSYmKHM9dShWLDU5MCksTHQ9cy5kLChfdD09bnVsbD9MdD09bnVsbDpobihfdCxMdCkpJiZyLS09PTApKXJldHVybiBzO3JldHVybiBudWxsfWlmKEM9ZS5sYXN0SW5kZXhPZigiLiIpLEg9Qz09LTE/ZTplLnN1YnN0cigwLEMpLG49MCxDIT0tMSl0cnl7bj0kbChlLnN1YnN0cihDKzEpLF9hLHZpKX1jYXRjaChCdCl7aWYoQnQ9V2koQnQpLEV0KEJ0LDEyNykpSD1lO2Vsc2UgdGhyb3cgcnQoQnQpfWZvcihIPWhuKCIlIixIKT9udWxsOkV4dChIKSxZPXJ5dCh0LldnKCkpO1kuT2IoKTspaWYoVj1oeihZKSxFdChWLDE5MSkmJihvPXUoViwxOTEpLGd0PW8ubmUoKSwoSD09bnVsbD9ndD09bnVsbDpobihILGd0KSkmJm4tLT09MCkpcmV0dXJuIG87cmV0dXJuIG51bGx9cmV0dXJuIFJsZSh0LGUpfWZ1bmN0aW9uIE80bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKGNlPW5ldyBsZSxWPW5ldyBTKHQuYik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKEg9dShKKFYpLDI5KSxndD1uZXcgUyhILmEpO2d0LmE8Z3QuYy5jLmxlbmd0aDspaWYoWT11KEooZ3QpLDEwKSxZLms9PShHbigpLHhzKSYmVnMoWSwoc2UoKSxHRykpKXtmb3IoTHQ9bnVsbCxCdD1udWxsLF90PW51bGwsUWU9bmV3IFMoWS5qKTtRZS5hPFFlLmMuYy5sZW5ndGg7KXN3aXRjaChXZT11KEooUWUpLDExKSxXZS5qLmcpe2Nhc2UgNDpMdD1XZTticmVhaztjYXNlIDI6QnQ9V2U7YnJlYWs7ZGVmYXVsdDpfdD1XZX1mb3IoWXQ9dShGZShfdC5nLDApLDE3KSxDPW5ldyB5UihZdC5hKSxrPW5ldyB5byhfdC5uKSxMaShrLFkubiksTT1laShDLDApLFhNKE0sayksU2U9QkkoWXQuYSksRj1uZXcgeW8oX3QubiksTGkoRixZLm4pLGhzKFNlLEYsU2UuYy5iLFNlLmMpLFJuPXUoUShZLEdHKSwxMCksem49dShGZShSbi5qLDApLDExKSx3PXUoRDEoTHQuZSxQdCh0bHQsRm90LDE3LDAsMCwxKSksNDc0KSxyPXcsbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyllPXJbb10sc2EoZSx6biksQWl0KGUuYSxlLmEuYixDKTtmb3Iodz1nZChCdC5nKSxuPXcscz0wLGg9bi5sZW5ndGg7czxoOysrcyllPW5bc10sRGEoZSx6biksQWl0KGUuYSwwLFNlKTtEYShZdCxudWxsKSxzYShZdCxudWxsKSxjZS5jW2NlLmMubGVuZ3RoXT1ZfWZvcih0dD1uZXcgUyhjZSk7dHQuYTx0dC5jLmMubGVuZ3RoOylZPXUoSih0dCksMTApLGtvKFksbnVsbCl9ZnVuY3Rpb24gcGhlKCl7cGhlPVo7dmFyIHQsZSxuO2ZvcihuZXcga0koMSwwKSxuZXcga0koMTAsMCksbmV3IGtJKDAsMCksVGdlPVB0KEN1dCx0ZSwyNDAsMTEsMCwxKSxEMj1QdChtaCx2ZCwyNSwxMDAsMTUsMSksZkV0PWN0KG90KGlhLDEpLHZvLDI1LDE1LFsxLDUsMjUsMTI1LDYyNSwzMTI1LDE1NjI1LDc4MTI1LDM5MDYyNSwxOTUzMTI1LDk3NjU2MjUsNDg4MjgxMjUsMjQ0MTQwNjI1LDEyMjA3MDMxMjUsNjEwMzUxNTYyNSwzMDUxNzU3ODEyNSwxNTI1ODc4OTA2MjUsNzYyOTM5NDUzMTI1LDM4MTQ2OTcyNjU2MjUsMTkwNzM0ODYzMjgxMjUsOTUzNjc0MzE2NDA2MjUsNDc2ODM3MTU4MjAzMTI1LDB4ODc4Njc4MzI2ZWFjOV0pLGRFdD1QdChUcixYciwyNSxmRXQubGVuZ3RoLDE1LDEpLGdFdD1jdChvdChpYSwxKSx2bywyNSwxNSxbMSwxMCwxMDAsJGcsMWU0LG9vdCwxZTYsMWU3LDFlOCxOcSwxZTEwLDFlMTEsMWUxMiwxZTEzLDFlMTQsMWUxNSwxZTE2XSkscEV0PVB0KFRyLFhyLDI1LGdFdC5sZW5ndGgsMTUsMSksYkV0PVB0KEN1dCx0ZSwyNDAsMTEsMCwxKSx0PTA7dDxiRXQubGVuZ3RoO3QrKylUZ2VbdF09bmV3IGtJKHQsMCksYkV0W3RdPW5ldyBrSSgwLHQpLEQyW3RdPTQ4O2Zvcig7dDxEMi5sZW5ndGg7dCsrKUQyW3RdPTQ4O2ZvcihuPTA7bjxkRXQubGVuZ3RoO24rKylkRXRbbl09WjR0KGZFdFtuXSk7Zm9yKGU9MDtlPHBFdC5sZW5ndGg7ZSsrKXBFdFtlXT1aNHQoZ0V0W2VdKTtiRSgpfWZ1bmN0aW9uIE40bigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9iaj10aGlzLmNyZWF0ZU9iamVjdCgpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqW2VdPW59LHQucHJvdG90eXBlW2hvdF09ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMub2JqW2VdfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMub2JqKX0sdC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cygpLG49dGhpcyxyPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtpZihyPj1lLmxlbmd0aClyZXR1cm57ZG9uZTohMH07dmFyIHM9ZVtyKytdO3JldHVybnt2YWx1ZTpbcyxuLmdldChzKV0sZG9uZTohMX19fX0sUnZuKCl8fCh0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqWyI6IitlXT1ufSx0LnByb3RvdHlwZVtob3RdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdGhpcy5vYmopbi5jaGFyQ29kZUF0KDApPT01OCYmZS5wdXNoKG4uc3Vic3RyaW5nKDEpKTtyZXR1cm4gZX0pLHR9ZnVuY3Rpb24gUDRuKHQpe2V4dCgpO3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKE09dC5sZW5ndGgqOCxNPT0wKXJldHVybiIiO2ZvcihkPU0lMjQsSD1NLzI0fDAsRj1kIT0wP0grMTpILG89bnVsbCxvPVB0KG1oLHZkLDI1LEYqNCwxNSwxKSxrPTAsQz0wLGU9MCxuPTAscj0wLGg9MCxzPTAsdz0wO3c8SDt3KyspZT10W3MrK10sbj10W3MrK10scj10W3MrK10sQz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsVj1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxZPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LHR0PXImLTEyOD8ocj4+Nl4yNTIpPDwyND4+MjQ6cj4+Njw8MjQ+PjI0LG9baCsrXT1ycFtWXSxvW2grK109cnBbWXxrPDw0XSxvW2grK109cnBbQzw8Mnx0dF0sb1toKytdPXJwW3ImNjNdO3JldHVybiBkPT04PyhlPXRbc10saz0oZSYzKTw8MjQ+PjI0LFY9ZSYtMTI4PyhlPj4yXjE5Mik8PDI0Pj4yNDplPj4yPDwyND4+MjQsb1toKytdPXJwW1ZdLG9baCsrXT1ycFtrPDw0XSxvW2grK109NjEsb1toKytdPTYxKTpkPT0xNiYmKGU9dFtzXSxuPXRbcysxXSxDPShuJjE1KTw8MjQ+PjI0LGs9KGUmMyk8PDI0Pj4yNCxWPWUmLTEyOD8oZT4+Ml4xOTIpPDwyND4+MjQ6ZT4+Mjw8MjQ+PjI0LFk9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsb1toKytdPXJwW1ZdLG9baCsrXT1ycFtZfGs8PDRdLG9baCsrXT1ycFtDPDwyXSxvW2grK109NjEpLEFoKG8sMCxvLmxlbmd0aCl9ZnVuY3Rpb24gRjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHc7aWYodC5lPT0wJiZ0LnA+MCYmKHQucD0tKHQucC0xKSksdC5wPl9hJiZubXQoZSx0LnAtbmIpLGg9ZS5xLmdldERhdGUoKSxuSShlLDEpLHQuaz49MCYmd3JuKGUsdC5rKSx0LmM+PTA/bkkoZSx0LmMpOnQuaz49MD8odz1uZXcgRXl0KGUucS5nZXRGdWxsWWVhcigpLW5iLGUucS5nZXRNb250aCgpLDM1KSxyPTM1LXcucS5nZXREYXRlKCksbkkoZSxiLk1hdGgubWluKHIsaCkpKTpuSShlLGgpLHQuZjwwJiYodC5mPWUucS5nZXRIb3VycygpKSx0LmI+MCYmdC5mPDEyJiYodC5mKz0xMiksTFhlKGUsdC5mPT0yNCYmdC5nPzA6dC5mKSx0Lmo+PTAmJkxzbihlLHQuaiksdC5uPj0wJiZXc24oZSx0Lm4pLHQuaT49MCYmSFZ0KGUsT2EoQ2EoZUQoa3UoZS5xLmdldFRpbWUoKSksJGcpLCRnKSx0LmkpKSx0LmEmJihzPW5ldyBfUixubXQocyxzLnEuZ2V0RnVsbFllYXIoKS1uYi04MCksZ2V0KGt1KGUucS5nZXRUaW1lKCkpLGt1KHMucS5nZXRUaW1lKCkpKSYmbm10KGUscy5xLmdldEZ1bGxZZWFyKCktbmIrMTAwKSksdC5kPj0wKXtpZih0LmM9PS0xKW49KDcrdC5kLWUucS5nZXREYXkoKSklNyxuPjMmJihuLT03KSxkPWUucS5nZXRNb250aCgpLG5JKGUsZS5xLmdldERhdGUoKStuKSxlLnEuZ2V0TW9udGgoKSE9ZCYmbkkoZSxlLnEuZ2V0RGF0ZSgpKyhuPjA/LTc6NykpO2Vsc2UgaWYoZS5xLmdldERheSgpIT10LmQpcmV0dXJuITF9cmV0dXJuIHQubz5fYSYmKG89ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCksSFZ0KGUsT2Eoa3UoZS5xLmdldFRpbWUoKSksKHQuby1vKSo2MCokZykpKSwhMH1mdW5jdGlvbiBiaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2lmKHM9UShlLChzZSgpLF9pKSksISFFdChzLDIzOSkpe2ZvcihWPXUocywzMyksWT1lLmUsRj1uZXcgeW8oZS5jKSxvPWUuZCxGLmErPW8uYixGLmIrPW8uZCxCdD11KHFlKFYsKFRlKCksaVYpKSwxNzQpLE51KEJ0LChjbCgpLFZWKSkmJihIPXUocWUoVixhQ3QpLDExNiksZXB0KEgsby5hKSxtdHQoSCxvLmQpLG5wdChILG8uYiksb3B0KEgsby5jKSksbj1uZXcgbGUsQz1uZXcgUyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih3PXUoSihDKSwxMCksRXQoUSh3LF9pKSwyMzkpP3E0bih3LEYpOkV0KFEodyxfaSksMTg2KSYmIVkmJihyPXUoUSh3LF9pKSwxMTgpLEx0PW9sZShlLHcsci5nLHIuZiksbTEocixMdC5hLEx0LmIpKSxndD1uZXcgUyh3LmopO2d0LmE8Z3QuYy5jLmxlbmd0aDspdHQ9dShKKGd0KSwxMSksdXMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHR0LmcsMTYpKSxuZXcgSWEodykpLG5ldyAkcihuKSk7aWYoWSlmb3IoZ3Q9bmV3IFMoWS5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KXR0PXUoSihndCksMTEpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0dC5nLDE2KSksbmV3IEtpKFkpKSxuZXcgUG8obikpO2ZvcihfdD11KHFlKFYsWDApLDIxOCksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksZTRuKGgsX3QsRik7Zm9yKFl3bihlKSxrPW5ldyBTKGUuYSk7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTApLE09dy5lLE0mJmJoZSh0LE0pfX1mdW5jdGlvbiB2aGUodCl7U3YodCxuZXcgdzIocmJ0KG1SKEV2KHl2KGt2KHh2KG5ldyBwZyxxbCksIkVMSyBGb3JjZSIpLCJGb3JjZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gSW1wbGVtZW50cyBtZXRob2RzIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGZvcmNlcyB0aGF0IG1vdmUgdGhlIG5vZGVzIGludG8gYSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEN1cnJlbnRseSB0aGUgb3JpZ2luYWwgRWFkZXMgbW9kZWwgYW5kIHRoZSBGcnVjaHRlcm1hbiAtIFJlaW5nb2xkIG1vZGVsIGFyZSBzdXBwb3J0ZWQuIiksbmV3IEI1KSxxbCksamkoKHZFKCksdFUpLGN0KG90KGVVLDEpLGFlLDIzNywwLFtaVl0pKSkpKSx4ZSh0LHFsLGpELGRlKDEpKSx4ZSh0LHFsLGt5LDgwKSx4ZSh0LHFsLE9vdCw1KSx4ZSh0LHFsLGI2LEJFKSx4ZSh0LHFsLEhxLGRlKDEpKSx4ZSh0LHFsLFBfLChGbigpLCEwKSkseGUodCxxbCx3dyxnN3QpLHhlKHQscWwsJEQsRGUoaDd0KSkseGUodCxxbCxOb3QsRGUocDd0KSkseGUodCxxbCxHcSwhMSkseGUodCxxbCxGXyxEZShkN3QpKSx4ZSh0LHFsLHY2LERlKHRiZSkpLHhlKHQscWwsTDQsRGUoSnBlKSkseGUodCxxbCxSRSxEZShacGUpKSx4ZSh0LHFsLGpFLERlKG5iZSkpLHhlKHQscWwscXEsRGUoZjd0KSkseGUodCxxbCxJb3QsRGUoVnV0KSkseGUodCxxbCxjNnQsRGUoaUcpKSx4ZSh0LHFsLERvdCxEZShHdXQpKSx4ZSh0LHFsLHU2dCxEZShiN3QpKX1mdW5jdGlvbiB3aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUoZ28odC5iLGUpLDEyNCksdz1oLmksZD1oLm4sQz1Kc3QodCxlKSxyPXcuYi1kLmItZC5jLHM9aC5hLmEsbz13LmMrZC5iLEg9dC53LChDPT0oYzQoKSxtYil8fEM9PUpPKSYmdSh1KEFpKHQucixlKSwyMSksODQpLmdjKCk9PTEmJihzPUM9PW1iP3MtMip0Lnc6cyxDPVhTKSxyPHMmJiF0LkIuSGMoKGNsKCksVVYpKSlDPT1tYj8oSCs9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLG8rPUgpOkgrPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPHMmJihzPUM9PW1iP3MtMip0Lnc6cyxDPVhTKSxDLmcpe2Nhc2UgMzpvKz0oci1zKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLXM7YnJlYWs7Y2FzZSAwOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLEgrPWIuTWF0aC5tYXgoMCxuKSxvKz1IO2JyZWFrO2Nhc2UgMTpuPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKSxIKz1iLk1hdGgubWF4KDAsbil9Zm9yKEY9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7Ri5PYigpOylNPXUoRi5QYigpLDExMSksTS5lLmE9bytNLmQuYixNLmUuYj0oaz1NLmIsay5YZSgoY2koKSxobCkpP2suSGYoKT09KGJlKCksTm4pPy1rLnJmKCkuYi1YdCh5ZShrLldlKGhsKSkpOlh0KHllKGsuV2UoaGwpKSk6ay5IZigpPT0oYmUoKSxObik/LWsucmYoKS5iOjApLG8rPU0uZC5iK00uYi5yZigpLmErTS5kLmMrSH19ZnVuY3Rpb24gbWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUoZ28odC5iLGUpLDEyNCksdz1oLmksZD1oLm4sTT1Kc3QodCxlKSxyPXcuYS1kLmQtZC5hLHM9aC5hLmIsbz13LmQrZC5kLFY9dC53LGs9dC5vLmEsKE09PShjNCgpLG1iKXx8TT09Sk8pJiZ1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKT09MSYmKHM9TT09bWI/cy0yKnQudzpzLE09WFMpLHI8cyYmIXQuQi5IYygoY2woKSxVVikpKU09PW1iPyhWKz0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksbys9Vik6Vis9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpO2Vsc2Ugc3dpdGNoKHI8cyYmKHM9TT09bWI/cy0yKnQudzpzLE09WFMpLE0uZyl7Y2FzZSAzOm8rPShyLXMpLzI7YnJlYWs7Y2FzZSA0Om8rPXItczticmVhaztjYXNlIDA6bj0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksVis9Yi5NYXRoLm1heCgwLG4pLG8rPVY7YnJlYWs7Y2FzZSAxOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpLFYrPWIuTWF0aC5tYXgoMCxuKX1mb3IoSD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMTExKSxGLmUuYT0oQz1GLmIsQy5YZSgoY2koKSxobCkpP0MuSGYoKT09KGJlKCksQm4pPy1DLnJmKCkuYS1YdCh5ZShDLldlKGhsKSkpOmsrWHQoeWUoQy5XZShobCkpKTpDLkhmKCk9PShiZSgpLEJuKT8tQy5yZigpLmE6ayksRi5lLmI9bytGLmQuZCxvKz1GLmQuZCtGLmIucmYoKS5iK0YuZC5hK1Z9fWZ1bmN0aW9uIEI0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7Zm9yKHQubj1YdCh5ZShRKHQuZywoVGUoKSxCdykpKSksdC5lPVh0KHllKFEodC5nLFIyKSkpLHQuaT10LmcuYi5jLmxlbmd0aCxkPXQuaS0xLEY9MCx0Lmo9MCx0Lms9MCx0LmE9XzEoUHQoamEsdGUsMTksdC5pLDAsMSkpLHQuYj1fMShQdChjYSx0ZSwzMzMsdC5pLDcsMSkpLGg9bmV3IFModC5nLmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iocz11KEooaCksMjkpLHMucD1kLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksQy5wPUYsKytGOy0tZH1mb3IodC5mPVB0KFRyLFhyLDI1LEYsMTUsMSksdC5jPVhiKFRyLFt0ZSxYcl0sWzQ4LDI1XSwxNSxbRiwzXSwyKSx0Lm89bmV3IGxlLHQucD1uZXcgbGUsZT0wLHQuZD0wLG89bmV3IFModC5nLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9cy5wLHI9MCxZPTAsdz1zLmEuYy5sZW5ndGgsaz0wLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksRj1DLnAsdC5mW0ZdPUMuYy5wLGsrPUMuby5iK3QubixuPU4wKG5ldyBhcihscihqbyhDKS5hLktjKCksbmV3IHopKSksVj1OMChuZXcgYXIobHIoTXMoQykuYS5LYygpLG5ldyB6KSkpLHQuY1tGXVswXT1WLW4sdC5jW0ZdWzFdPW4sdC5jW0ZdWzJdPVYscis9bixZKz1WLG4+MCYmdWUodC5wLEMpLHVlKHQubyxDKTtlLT1yLEg9dytlLGsrPWUqdC5lLGFoKHQuYSxkLGRlKEgpKSxhaCh0LmIsZCxrKSx0Lmo9Yi5NYXRoLm1heCh0LmosSCksdC5rPWIuTWF0aC5tYXgodC5rLGspLHQuZCs9ZSxlKz1ZfX1mdW5jdGlvbiBiZSgpe2JlPVo7dmFyIHQ7Wm89bmV3IElNKE9fLDApLE5uPW5ldyBJTShScSwxKSxIbj1uZXcgSU0oeG90LDIpLG1yPW5ldyBJTShrb3QsMyksQm49bmV3IElNKEVvdCw0KSxHMT0odm4oKSxuZXcgUWsoKHQ9dShIZihYYSksOSksbmV3IHJoKHQsdSh1Zih0LHQubGVuZ3RoKSw5KSwwKSkpKSxTZj1EZyhqaShObixjdChvdChYYSwxKSx4Yyw2MSwwLFtdKSkpLHZoPURnKGppKEhuLGN0KG90KFhhLDEpLHhjLDYxLDAsW10pKSksV2w9RGcoamkobXIsY3Qob3QoWGEsMSkseGMsNjEsMCxbXSkpKSxxaD1EZyhqaShCbixjdChvdChYYSwxKSx4Yyw2MSwwLFtdKSkpLF91PURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW21yXSkpKSx1dT1EZyhqaShIbixjdChvdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksQWY9RGcoamkoTm4sY3Qob3QoWGEsMSkseGMsNjEsMCxbQm5dKSkpLHRsPURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huXSkpKSxLbD1EZyhqaShtcixjdChvdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksd2g9RGcoamkoSG4sY3Qob3QoWGEsMSkseGMsNjEsMCxbbXJdKSkpLGVsPURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huLEJuXSkpKSxDdT1EZyhqaShIbixjdChvdChYYSwxKSx4Yyw2MSwwLFttcixCbl0pKSksU3U9RGcoamkoTm4sY3Qob3QoWGEsMSkseGMsNjEsMCxbbXIsQm5dKSkpLHF1PURnKGppKE5uLGN0KG90KFhhLDEpLHhjLDYxLDAsW0huLG1yXSkpKSxVYz1EZyhqaShObixjdChvdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pKSl9ZnVuY3Rpb24geWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtpZihlLmIhPTApe2ZvcihIPW5ldyBRaSxkPW51bGwsVj1udWxsLHI9cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZS5iKSpiLk1hdGguTE9HMTBFKSsxKSx3PTAsX3Q9ZWkoZSwwKTtfdC5iIT1fdC5kLmM7KWZvcihndD11KHRpKF90KSw4NiksR3QoVikhPT1HdChRKGd0LChmYygpLFJTKSkpJiYoVj1CcihRKGd0LFJTKSksdz0wKSxWIT1udWxsP2Q9Vit6UXQodysrLHIpOmQ9elF0KHcrKyxyKSxKdChndCxSUyxkKSx0dD0ocz1laShuZXcgQ3AoZ3QpLmEuZCwwKSxuZXcgYngocykpO2tSKHR0LmEpOylZPXUodGkodHQuYSksMTg4KS5jLGhzKEgsWSxILmMuYixILmMpLEp0KFksUlMsZCk7Zm9yKEY9bmV3IENyLGg9MDtoPGQubGVuZ3RoLXI7aCsrKWZvcihMdD1laShlLDApO0x0LmIhPUx0LmQuYzspZ3Q9dSh0aShMdCksODYpLGs9RGwoQnIoUShndCwoZmMoKSxSUykpKSwwLGgrMSksbj0oaz09bnVsbD9lYyhBbyhGLmYsbnVsbCkpOlU5KEYuZyxrKSkhPW51bGw/dShrPT1udWxsP2VjKEFvKEYuZixudWxsKSk6VTkoRi5nLGspLDE5KS5hKzE6MSx4byhGLGssZGUobikpO2ZvcihNPW5ldyBoMihuZXcgd2coRikuYSk7TS5iOylDPVl2KE0pLG89ZGUoSm4odC5hLEMuY2QoKSkhPW51bGw/dShKbih0LmEsQy5jZCgpKSwxOSkuYTowKSx4byh0LmEsQnIoQy5jZCgpKSxkZSh1KEMuZGQoKSwxOSkuYStvLmEpKSxvPXUoSm4odC5iLEMuY2QoKSksMTkpLCghb3x8by5hPHUoQy5kZCgpLDE5KS5hKSYmeG8odC5iLEJyKEMuY2QoKSksdShDLmRkKCksMTkpKTt5aGUodCxIKX19ZnVuY3Rpb24gUjRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtmb3Iod3IobiwiSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZyIsMSkscj1uZXcgbGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KXtmb3IoTT11KEooSCksMTApLGs9TS5uLmEsdz1rK00uby5hLHc9Yi5NYXRoLm1heChrKzEsdyksZ3Q9bmV3IGhhKHIsMCkscz1udWxsO2d0LmI8Z3QuZC5nYygpOylpZihZPShRbihndC5iPGd0LmQuZ2MoKSksdShndC5kLlhiKGd0LmM9Z3QuYisrKSw1NjkpKSxZLmM+PXcpe1FuKGd0LmI+MCksZ3QuYS5YYihndC5jPS0tZ3QuYik7YnJlYWt9ZWxzZSBZLmE+ayYmKHM/KEFzKHMuYixZLmIpLHMuYT1iLk1hdGgubWF4KHMuYSxZLmEpLEVsKGd0KSk6KHVlKFkuYixNKSxZLmM9Yi5NYXRoLm1pbihZLmMsayksWS5hPWIuTWF0aC5tYXgoWS5hLHcpLHM9WSkpO3N8fChzPW5ldyBzcXQscy5jPWsscy5hPXcsUm0oZ3QscyksdWUocy5iLE0pKX1mb3IoZD1lLmIsQz0wLHR0PW5ldyBTKHIpO3R0LmE8dHQuYy5jLmxlbmd0aDspZm9yKFk9dShKKHR0KSw1NjkpLG89bmV3IENoKGUpLG8ucD1DKyssZC5jW2QuYy5sZW5ndGhdPW8sVj1uZXcgUyhZLmIpO1YuYTxWLmMuYy5sZW5ndGg7KU09dShKKFYpLDEwKSxrbyhNLG8pLE0ucD0wO2ZvcihGPW5ldyBTKGUuYSk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLE0ucD09MCYmbnVlKHQsTSxlKTtmb3IoaD1uZXcgaGEoZCwwKTtoLmI8aC5kLmdjKCk7KShRbihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZFbChoKTtlLmEuYz1QdChYbixJZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiBqNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGO2lmKGUuZS5jLmxlbmd0aCE9MCYmbi5lLmMubGVuZ3RoIT0wKXtpZihyPXUoRmUoZS5lLDApLDE3KS5jLmksaD11KEZlKG4uZSwwKSwxNykuYy5pLHI9PWgpcmV0dXJuIGR1KHUoUSh1KEZlKGUuZSwwKSwxNyksKHNlKCksVGMpKSwxOSkuYSx1KFEodShGZShuLmUsMCksMTcpLFRjKSwxOSkuYSk7Zm9yKEM9dC5hLE09MCxGPUMubGVuZ3RoO008RjsrK00pe2lmKGs9Q1tNXSxrPT1yKXJldHVybiAxO2lmKGs9PWgpcmV0dXJuLTF9fXJldHVybiBlLmcuYy5sZW5ndGghPTAmJm4uZy5jLmxlbmd0aCE9MD8obz11KFEoZSwoc2UoKSxGbHQpKSwxMCksdz11KFEobixGbHQpLDEwKSxzPTAsZD0wLFZzKHUoRmUoZS5nLDApLDE3KSxUYykmJihzPXUoUSh1KEZlKGUuZywwKSwxNyksVGMpLDE5KS5hKSxWcyh1KEZlKG4uZywwKSwxNyksVGMpJiYoZD11KFEodShGZShlLmcsMCksMTcpLFRjKSwxOSkuYSksbyYmbz09dz9qZShSZShRKHUoRmUoZS5nLDApLDE3KSwkMSkpKSYmIWplKFJlKFEodShGZShuLmcsMCksMTcpLCQxKSkpPzE6IWplKFJlKFEodShGZShlLmcsMCksMTcpLCQxKSkpJiZqZShSZShRKHUoRmUobi5nLDApLDE3KSwkMSkpKXx8czxkPy0xOnM+ZD8xOjA6KHQuYiYmKHQuYi5fYihvKSYmKHM9dSh0LmIueGMobyksMTkpLmEpLHQuYi5fYih3KSYmKGQ9dSh0LmIueGModyksMTkpLmEpKSxzPGQ/LTE6cz5kPzE6MCkpOmUuZS5jLmxlbmd0aCE9MCYmbi5nLmMubGVuZ3RoIT0wPzE6LTF9ZnVuY3Rpb24gJDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZTtmb3Iod3IoZSxsMWUsMSksWT1uZXcgbGUsY2U9bmV3IGxlLGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodz11KEooayksMjkpLGd0PS0xLFY9c0kody5hKSxNPVYsRj0wLEg9TS5sZW5ndGg7RjxIOysrRilpZihDPU1bRl0sKytndCwhIShDLms9PShHbigpLERzKSYmSDModShRKEMsKFRlKCksb3MpKSw5OCkpKSl7Zm9yKER4KHUoUShDLChUZSgpLG9zKSksOTgpKXx8TzJuKEMpLEp0KEMsKHNlKCksSXcpLEMpLFkuYz1QdChYbixJZSwxLDAsNSwxKSxjZS5jPVB0KFhuLEllLDEsMCw1LDEpLG49bmV3IGxlLEJ0PW5ldyBRaSxsaXQoQnQsUmcoQywoYmUoKSxObikpKSxPaGUodCxCdCxZLGNlLG4pLGQ9Z3QsU2U9QyxvPW5ldyBTKFkpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSxveShyLGQsdyksKytndCxKdChyLEl3LEMpLGg9dShGZShyLmosMCksMTEpLHR0PXUoUShoLF9pKSwxMSksamUoUmUoUSh0dCx6bHQpKSl8fHUoUShyLEk2KSwxNSkuRmMoU2UpO2ZvcihfaChCdCksX3Q9UmcoQyxtcikuS2MoKTtfdC5PYigpOylMdD11KF90LlBiKCksMTEpLGhzKEJ0LEx0LEJ0LmEsQnQuYS5hKTtmb3IoT2hlKHQsQnQsY2UsbnVsbCxuKSxZdD1DLHM9bmV3IFMoY2UpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxveShyLCsrZ3QsdyksSnQocixJdyxDKSxoPXUoRmUoci5qLDApLDExKSx0dD11KFEoaCxfaSksMTEpLGplKFJlKFEodHQsemx0KSkpfHx1KFEoWXQsSTYpLDE1KS5GYyhyKTtuLmMubGVuZ3RoPT0wfHxKdChDLFdUdCxuKX1vcihlKX1mdW5jdGlvbiB4aGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzO2ZvcihNPXUoUSh0LChHcCgpLEM2KSksMzMpLGd0PXZpLEx0PXZpLFk9X2EsdHQ9X2EsQnQ9bmV3IFModC5lKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KV90PXUoSihCdCksMTQ0KSxRZT1fdC5kLFJuPV90LmUsZ3Q9Yi5NYXRoLm1pbihndCxRZS5hLVJuLmEvMiksTHQ9Yi5NYXRoLm1pbihMdCxRZS5iLVJuLmIvMiksWT1iLk1hdGgubWF4KFksUWUuYStSbi5hLzIpLHR0PWIuTWF0aC5tYXgodHQsUWUuYitSbi5iLzIpO2ZvcihXZT11KHFlKE0sKFpmKCksZWJlKSksMTE2KSxTZT1uZXcgJGUoV2UuYi1ndCxXZS5kLUx0KSxkPW5ldyBTKHQuZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTQ0KSxjZT1RKGgsQzYpLEV0KGNlLDIzOSkmJihIPXUoY2UsMzMpLFl0PUxpKGguZCxTZSksbTEoSCxZdC5hLUguZy8yLFl0LmItSC5mLzIpKTtmb3Iocj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI4Miksaz11KFEobixDNiksNzkpLEM9bTQoaywhMCwhMCksem49KHBpPW5hKG5jKG4uZC5kKSxuLmMuZCksaEUocGksbi5jLmUuYSxuLmMuZS5iKSxMaShwaSxuLmMuZCkpLG9qKEMsem4uYSx6bi5iKSxlPShScz1uYShuYyhuLmMuZCksbi5kLmQpLGhFKFJzLG4uZC5lLmEsbi5kLmUuYiksTGkoUnMsbi5kLmQpKSxhaihDLGUuYSxlLmIpO2ZvcihvPW5ldyBTKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNDQ3KSxGPXUoUShzLEM2KSwxMzcpLFY9TGkocy5kLFNlKSxtMShGLFYuYSxWLmIpO2hyPVktZ3QrKFdlLmIrV2UuYyksdz10dC1MdCsoV2UuZCtXZS5hKSxndyhNLGhyLHcsITEsITApfWZ1bmN0aW9uIHo0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKG49bnVsbCx3PW51bGwscz11KFEodC5iLChUZSgpLFdsdCkpLDM3Nikscz09KGxJKCksRE8pJiYobj1uZXcgbGUsdz1uZXcgbGUpLGQ9bmV3IFModC5kKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMDEpLG89aC5pLCEhbylzd2l0Y2goaC5lLmcpe2Nhc2UgMDplPXUoRkMobmV3IEV4KGguYikpLDYxKSxzPT1ETyYmZT09KGJlKCksTm4pP24uY1tuLmMubGVuZ3RoXT1oOnM9PURPJiZlPT0oYmUoKSxtcik/dy5jW3cuYy5sZW5ndGhdPWg6X2ZuKGgsZSk7YnJlYWs7Y2FzZSAxOms9aC5hLmQuaixDPWguYy5kLmosaz09KGJlKCksTm4pP19nKGgsTm4sKE0xKCksaTcpLGguYSk6Qz09Tm4/X2coaCxObiwoTTEoKSxzNyksaC5jKTprPT1tcj9fZyhoLG1yLChNMSgpLHM3KSxoLmEpOkM9PW1yJiZfZyhoLG1yLChNMSgpLGk3KSxoLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1oLmIsTnUociwoYmUoKSxObikpP051KHIsbXIpP051KHIsQm4pP051KHIsSG4pfHxfZyhoLE5uLChNMSgpLHM3KSxoLmMpOl9nKGgsTm4sKE0xKCksaTcpLGguYSk6X2coaCxObiwoTTEoKSxfNiksbnVsbCk6X2coaCxtciwoTTEoKSxfNiksbnVsbCk7YnJlYWs7Y2FzZSA0Ok09aC5hLmQuaixGPWguYS5kLmosTT09KGJlKCksTm4pfHxGPT1Obj9fZyhoLG1yLChNMSgpLF82KSxudWxsKTpfZyhoLE5uLChNMSgpLF82KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8Z2xlKG4sKGJlKCksTm4pKSx3LmMubGVuZ3RoPT0wfHxnbGUodywoYmUoKSxtcikpKX1mdW5jdGlvbiBxNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2ZvcihyPXUoUSh0LChzZSgpLF9pKSksMzMpLFY9dShRKHQsKFRlKCksWEcpKSwxOSkuYSxvPXUoUSh0LHRWKSwxOSkuYSxibyhyLFhHLGRlKFYpKSxibyhyLHRWLGRlKG8pKSx5dShyLHQubi5hK2UuYSkseHUocix0Lm4uYitlLmIpLCh1KHFlKHIsRjIpLDE3NCkuZ2MoKSE9MHx8dC5lfHxHdChRKEZhKHQpLHJWKSk9PT1HdCgoYV8oKSxMUykpJiZ1VXQoKHN5KCksKHQucT90LnE6KHZuKCksdm4oKSxhMCkpLl9iKE53KT9GPXUoUSh0LE53KSwxOTcpOkY9dShRKEZhKHQpLENTKSwxOTcpLEYpKSkmJihRdihyLHQuby5hKSxYdihyLHQuby5iKSksTT1uZXcgUyh0LmopO00uYTxNLmMuYy5sZW5ndGg7KWs9dShKKE0pLDExKSxZPVEoayxfaSksRXQoWSwxODYpJiYocz11KFksMTE4KSxtMShzLGsubi5hLGsubi5iKSxibyhzLHY3LGsuaikpO2ZvcihIPXUoUSh0LE93KSwxNzQpLmdjKCkhPTAsdz1uZXcgUyh0LmIpO3cuYTx3LmMuYy5sZW5ndGg7KWg9dShKKHcpLDcwKSwoSHx8dShRKGgsT3cpLDE3NCkuZ2MoKSE9MCkmJihuPXUoUShoLF9pKSwxMzcpLHNqKG4saC5vLmEsaC5vLmIpLG0xKG4saC5uLmEsaC5uLmIpKTtpZighVEModShRKHQscXkpLDIxKSkpZm9yKEM9bmV3IFModC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGQ9bmV3IFMoay5mKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw3MCksbj11KFEoaCxfaSksMTM3KSxRdihuLGguby5hKSxYdihuLGguby5iKSxtMShuLGgubi5hLGgubi5iKX1mdW5jdGlvbiBING4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2godEkodCxPZGUpLCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSsoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkpe2Nhc2UgMDp0aHJvdyBydChuZXcgUG4oIlRoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4iKSk7Y2FzZSAxOnJldHVybighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MD90cyhNbyh1KFN0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSk6dHMoTW8odShTdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkpfWlmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MSYmKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0xKXtpZihzPU1vKHUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpLG89TW8odShTdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSksdHMocyk9PXRzKG8pKXJldHVybiB0cyhzKTtpZihzPT10cyhvKSlyZXR1cm4gcztpZihvPT10cyhzKSlyZXR1cm4gb31mb3Iocj1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpLGU9TW8odShMcihyKSw4MikpO3pyKHIpOylpZihuPU1vKHUoTHIociksODIpKSxuIT1lJiYhWm0obixlKSl7aWYodHMobik9PXRzKGUpKWU9dHMobik7ZWxzZSBpZihlPUFibihlLG4pLCFlKXJldHVybiBudWxsfXJldHVybiBlfWZ1bmN0aW9uIEc0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7Zm9yKHdyKG4sIlBvbHlsaW5lIGVkZ2Ugcm91dGluZyIsMSksdHQ9WHQoeWUoUShlLChUZSgpLHE5dCkpKSksSD1YdCh5ZShRKGUsWjQpKSkscz1YdCh5ZShRKGUsUTQpKSkscj1iLk1hdGgubWluKDEscy9IKSxfdD0wLHc9MCxlLmIuYy5sZW5ndGghPTAmJihCdD14Y2UodShGZShlLmIsMCksMjkpKSxfdD0uNCpyKkJ0KSxkPW5ldyBoYShlLmIsMCk7ZC5iPGQuZC5nYygpOyl7Zm9yKGg9KFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLG89ZWooaCxOTyksbyYmX3Q+MCYmKF90LT1IKSxmeHQoaCxfdCksQz0wLEY9bmV3IFMoaC5hKTtGLmE8Ri5jLmMubGVuZ3RoOyl7Zm9yKE09dShKKEYpLDEwKSxrPTAsWT1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoWSk7KVY9dShMcihZKSwxNyksZ3Q9VDEoVi5jKS5iLEx0PVQxKFYuZCkuYixoPT1WLmQuaS5jJiYhVmEoVikmJihncG4oVixfdCwuNCpyKmIuTWF0aC5hYnMoZ3QtTHQpKSxWLmMuaj09KGJlKCksQm4pJiYoZ3Q9MCxMdD0wKSksaz1iLk1hdGgubWF4KGssYi5NYXRoLmFicyhMdC1ndCkpO3N3aXRjaChNLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTpsM24odCxNLF90LHR0KX1DPWIuTWF0aC5tYXgoQyxrKX1kLmI8ZC5kLmdjKCkmJihCdD14Y2UoKFFuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpKSxDPWIuTWF0aC5tYXgoQyxCdCksUW4oZC5iPjApLGQuYS5YYihkLmM9LS1kLmIpKSx3PS40KnIqQywhbyYmZC5iPGQuZC5nYygpJiYodys9SCksX3QrPWguYy5hK3d9dC5hLmEuJGIoKSxlLmYuYT1fdCxvcihuKX1mdW5jdGlvbiBWNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2ZvcihDPW5ldyBDcix3PW5ldyBIdixyPW5ldyBTKHQuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKGU9dShKKHIpLDU3KSxrPVozKGUpLGspc3UoQy5mLGssZSk7ZWxzZSBpZihMdD1IeChlKSxMdClmb3Iobz1uZXcgUyhMdC5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksbG4odyxzLGUpO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDU3KSxrPVozKGUpLGspe2ZvcihkPW5ldyBhcihscihNcyhrKS5hLktjKCksbmV3IHopKTt6cihkKTspaWYoaD11KExyKGQpLDE3KSwhVmEoaCkmJihWPWguYyxndD1oLmQsISgoYmUoKSxfdSkuSGMoaC5jLmopJiZfdS5IYyhoLmQuaikpKSl7aWYoWT11KEpuKEMsaC5kLmkpLDU3KSx2ZihvZihhZihjZihzZihuZXcgRWgsMCksMTAwKSx0LmNbZS5hLmRdKSx0LmNbWS5hLmRdKSksVi5qPT1CbiYmU1l0KChCdSgpLFYpKSl7Zm9yKEY9dShBaSh3LGgpLDIxKS5LYygpO0YuT2IoKTspaWYoTT11KEYuUGIoKSw1NyksTS5kLmM8ZS5kLmMpe2lmKEg9dC5jW00uYS5kXSx0dD10LmNbZS5hLmRdLEg9PXR0KWNvbnRpbnVlO3ZmKG9mKGFmKGNmKHNmKG5ldyBFaCwxKSwxMDApLEgpLHR0KSl9fWlmKGd0Lmo9PUhuJiZfWXQoKEJ1KCksZ3QpKSl7Zm9yKEY9dShBaSh3LGgpLDIxKS5LYygpO0YuT2IoKTspaWYoTT11KEYuUGIoKSw1NyksTS5kLmM+ZS5kLmMpe2lmKEg9dC5jW2UuYS5kXSx0dD10LmNbTS5hLmRdLEg9PXR0KWNvbnRpbnVlO3ZmKG9mKGFmKGNmKHNmKG5ldyBFaCwxKSwxMDApLEgpLHR0KSl9fX19fWZ1bmN0aW9uIEV4dCh0KXtUYXQoKTt2YXIgZSxuLHIscyxvLGgsZCx3O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYocz1jZCh0LEV1KDM3KSksczwwKXJldHVybiB0O2Zvcih3PW5ldyBJbCh0LnN1YnN0cigwLHMpKSxlPVB0KEh1LE40LDI1LDQsMTUsMSksZD0wLHI9MCxoPXQubGVuZ3RoO3M8aDtzKyspaWYoUnIocyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMpPT0zNyYmdC5sZW5ndGg+cysyJiZiaXQoKFJyKHMrMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMSkpLFdBdCxLQXQpJiZiaXQoKFJyKHMrMix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMikpLFdBdCxLQXQpKWlmKG49ZHRuKChScihzKzEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKzEpKSwoUnIocysyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocysyKSkpLHMrPTIscj4wPyhuJjE5Mik9PTEyOD9lW2QrK109bjw8MjQ+PjI0OnI9MDpuPj0xMjgmJigobiYyMjQpPT0xOTI/KGVbZCsrXT1uPDwyND4+MjQscj0yKToobiYyNDApPT0yMjQ/KGVbZCsrXT1uPDwyND4+MjQscj0zKToobiYyNDgpPT0yNDAmJihlW2QrK109bjw8MjQ+PjI0LHI9NCkpLHI+MCl7aWYoZD09cil7c3dpdGNoKGQpe2Nhc2UgMjp7UnAodywoKGVbMF0mMzEpPDw2fGVbMV0mNjMpJm1zKTticmVha31jYXNlIDM6e1JwKHcsKChlWzBdJjE1KTw8MTJ8KGVbMV0mNjMpPDw2fGVbMl0mNjMpJm1zKTticmVha319ZD0wLHI9MH19ZWxzZXtmb3Iobz0wO288ZDsrK28pUnAodyxlW29dJm1zKTtkPTAsdy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pfWVsc2V7Zm9yKG89MDtvPGQ7KytvKVJwKHcsZVtvXSZtcyk7ZD0wLFJwKHcsKFJyKHMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKSkpfXJldHVybiB3LmF9ZnVuY3Rpb24ga2hlKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKEh0ZSh0LGUpLGg9ZVswXSxvPWJhKG4uYywwKSxkPS0xLEx5dChuKSlpZihyPjApe2lmKGgrcj50Lmxlbmd0aClyZXR1cm4hMTtkPXJxKHQuc3Vic3RyKDAsaCtyKSxlKX1lbHNlIGQ9cnEodCxlKTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZD1wNCh0LGgsY3Qob3QoQWUsMSksdGUsMiw2LFtuZmUscmZlXSksZSkscy5lPWQsITA7Y2FzZSA3NzpyZXR1cm4gU3ZuKHQsZSxzLGQsaCk7Y2FzZSA3NjpyZXR1cm4gQXZuKHQsZSxzLGQsaCk7Y2FzZSA2OTpyZXR1cm4gbWduKHQsZSxoLHMpO2Nhc2UgOTk6cmV0dXJuIHlnbih0LGUsaCxzKTtjYXNlIDk3OnJldHVybiBkPXA0KHQsaCxjdChvdChBZSwxKSx0ZSwyLDYsWyJBTSIsIlBNIl0pLGUpLHMuYj1kLCEwO2Nhc2UgMTIxOnJldHVybiBMdm4odCxlLGgsZCxuLHMpO2Nhc2UgMTAwOnJldHVybiBkPD0wPyExOihzLmM9ZCwhMCk7Y2FzZSA4MzpyZXR1cm4gZDwwPyExOk9sbihkLGgsZVswXSxzKTtjYXNlIDEwNDpkPT0xMiYmKGQ9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBkPDA/ITE6KHMuZj1kLHMuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGQ8MD8hMToocy5mPWQscy5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZDwwPyExOihzLmo9ZCwhMCk7Y2FzZSAxMTU6cmV0dXJuIGQ8MD8hMToocy5uPWQsITApO2Nhc2UgOTA6aWYoaDx0Lmxlbmd0aCYmKFJyKGgsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChoKT09OTApKXJldHVybisrZVswXSxzLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gR2RuKHQsaCxlLHMpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFU0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7aWYoRj11KHUoQWkodC5yLGUpLDIxKSw4NCksZT09KGJlKCksSG4pfHxlPT1Cbil7Z2hlKHQsZSk7cmV0dXJufWZvcihvPWU9PU5uPyh0dygpLHNPKToodHcoKSxhTyksQnQ9ZT09Tm4/KHd1KCksZTEpOih3dSgpLHlmKSxuPXUoZ28odC5iLGUpLDEyNCkscj1uLmkscz1yLmMrcjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW24ubi5iLHQuQy5iLHQua10pKSxndD1yLmMrci5iLXI0KGN0KG90KGlhLDEpLHZvLDI1LDE1LFtuLm4uYyx0LkMuYyx0LmtdKSksaD1lYnQobXZ0KG8pLHQudCksTHQ9ZT09Tm4/VHM6c3MsTT1GLktjKCk7TS5PYigpOylrPXUoTS5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJih0dD1rLmIucmYoKSxZPWsuZSxIPWsuYyxWPUguaSxWLmI9KHc9SC5uLEguZS5hK3cuYit3LmMpLFYuYT0oZD1ILm4sSC5lLmIrZC5kK2QuYSksdEkoQnQsWXh0KSxILmY9QnQsVWYoSCwoWHUoKSxtZikpLFYuYz1ZLmEtKFYuYi10dC5hKS8yLFl0PWIuTWF0aC5taW4ocyxZLmEpLGNlPWIuTWF0aC5tYXgoZ3QsWS5hK3R0LmEpLFYuYzxZdD9WLmM9WXQ6Vi5jK1YuYj5jZSYmKFYuYz1jZS1WLmIpLHVlKGguZCxuZXcgRG50KFYsSnl0KGgsVikpKSxMdD1lPT1Obj9iLk1hdGgubWF4KEx0LFkuYitrLmIucmYoKS5iKTpiLk1hdGgubWluKEx0LFkuYikpO2ZvcihMdCs9ZT09Tm4/dC50Oi10LnQsX3Q9cDN0KChoLmU9THQsaCkpLF90PjAmJih1KGdvKHQuYixlKSwxMjQpLmEuYj1fdCksQz1GLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJihWPWsuYy5pLFYuYy09ay5lLmEsVi5kLT1rLmUuYil9ZnVuY3Rpb24gVzRuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixIO2ZvcihlPW5ldyBDcix3PW5ldyBlcih0KTt3LmUhPXcuaS5nYygpOyl7Zm9yKGQ9dShkcih3KSwzMyksbj1uZXcgcXMsa2kocXV0LGQsbiksSD1uZXcgZG0scz11KFBsKG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoZkQoZCkuYS5LYygpLG5ldyB6KSkpKSxmWXQoSCxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbKEkxKCksR2wpXSkpKSksODMpLFBlZShuLHUocy54YygoRm4oKSwhMCkpLDE0KSxuZXcgcGspLHI9dShQbChSaSh1KHMueGMoITEpLDE1KS5MYygpLG5ldyB4MyksaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsW0dsXSkpKSwxNSksaD1yLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDc5KSxGPXhhZShvKSxGJiYoaz11KGVjKEFvKGUuZixGKSksMjEpLGt8fChrPXpjZShGKSxzdShlLmYsRixrKSksVWEobixrKSk7Zm9yKHM9dShQbChuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKEcwKGQpLmEuS2MoKSxuZXcgeikpKSksZll0KEgsaTIobmV3IF9lLG5ldyB3ZSxuZXcgbnIsY3Qob3QobGwsMSksYWUsMTMyLDAsW0dsXSkpKSksODMpLFBlZShuLHUocy54YyghMCksMTQpLG5ldyBNbCkscj11KFBsKFJpKHUocy54YyghMSksMTUpLkxjKCksbmV3IFQwKSxpMihuZXcgX2UsbmV3IHdlLG5ldyBucixjdChvdChsbCwxKSxhZSwxMzIsMCxbR2xdKSkpLDE1KSxNPXIuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNzkpLEY9a2FlKEMpLEYmJihrPXUoZWMoQW8oZS5mLEYpKSwyMSksa3x8KGs9emNlKEYpLHN1KGUuZixGLGspKSxVYShuLGspKX19ZnVuY3Rpb24gSzRuKHQsZSl7d2F0KCk7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWTtpZih3PXljKHQsMCk8MCx3JiYodD1POCh0KSkseWModCwwKT09MClzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIERFO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gSD1uZXcgX3AsZTwwP0guYSs9IjBFKyI6SC5hKz0iMEUiLEguYSs9ZT09X2E/IjIxNDc0ODM2NDgiOiIiKy1lLEguYX1DPTE4LE09UHQobWgsdmQsMjUsQysxLDE1LDEpLG49QyxZPXQ7ZG8gaz1ZLFk9ZUQoWSwxMCksTVstLW5dPVNyKE9hKDQ4LFlwKGssQ2EoWSwxMCkpKSkmbXM7d2hpbGUoeWMoWSwwKSE9MCk7aWYocz1ZcChZcChZcChDLG4pLGUpLDEpLGU9PTApcmV0dXJuIHcmJihNWy0tbl09NDUpLEFoKE0sbixDLW4pO2lmKGU+MCYmeWMocywtNik+PTApe2lmKHljKHMsMCk+PTApe2ZvcihvPW4rU3IocyksZD1DLTE7ZD49bztkLS0pTVtkKzFdPU1bZF07cmV0dXJuIE1bKytvXT00Nix3JiYoTVstLW5dPTQ1KSxBaChNLG4sQy1uKzEpfWZvcihoPTI7Z2V0KGgsT2EoTzgocyksMSkpO2grKylNWy0tbl09NDg7cmV0dXJuIE1bLS1uXT00NixNWy0tbl09NDgsdyYmKE1bLS1uXT00NSksQWgoTSxuLEMtbil9cmV0dXJuIFY9bisxLHI9QyxGPW5ldyBMbSx3JiYoRi5hKz0iLSIpLHItVj49MT8oUnAoRixNW25dKSxGLmErPSIuIixGLmErPUFoKE0sbisxLEMtbi0xKSk6Ri5hKz1BaChNLG4sQy1uKSxGLmErPSJFIix5YyhzLDApPjAmJihGLmErPSIrIiksRi5hKz0iIitFQyhzKSxGLmF9ZnVuY3Rpb24gWTRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixIO2lmKHQuZS5hLiRiKCksdC5mLmEuJGIoKSx0LmMuYz1QdChYbixJZSwxLDAsNSwxKSx0LmkuYz1QdChYbixJZSwxLDAsNSwxKSx0LmcuYS4kYigpLGUpZm9yKGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLE09UmcobywoYmUoKSxIbikpLktjKCk7TS5PYigpOylmb3IoQz11KE0uUGIoKSwxMSksTnModC5lLEMpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksIVZhKHIpJiYodWUodC5jLHIpLFdpZSh0LHIpLGQ9ci5jLmkuaywoZD09KEduKCksRHMpfHxkPT1IY3x8ZD09eHN8fGQ9PWoxKSYmdWUodC5qLHIpLEg9ci5kLEY9SC5pLmMsRj09bj9Ocyh0LmYsSCk6Rj09ZT9Ocyh0LmUsSCk6dnUodC5jLHIpKTtpZihuKWZvcihoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksaz1uZXcgUyhvLmopO2suYTxrLmMuYy5sZW5ndGg7KWZvcih3PXUoSihrKSwxMSkscz1uZXcgUyh3LmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxWYShyKSYmTnModC5nLHIpO2ZvcihNPVJnKG8sKGJlKCksQm4pKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLE5zKHQuZixDKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCFWYShyKSYmKHVlKHQuYyxyKSxXaWUodCxyKSxkPXIuYy5pLmssKGQ9PShHbigpLERzKXx8ZD09SGN8fGQ9PXhzfHxkPT1qMSkmJnVlKHQuaixyKSxIPXIuZCxGPUguaS5jLEY9PW4/TnModC5mLEgpOkY9PWU/TnModC5lLEgpOnZ1KHQuYyxyKSl9fWZ1bmN0aW9uIGd3KHQsZSxuLHIscyl7dmFyIG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZTtpZih0dD1uZXcgJGUodC5nLHQuZiksWT1HNHQodCksWS5hPWIuTWF0aC5tYXgoWS5hLGUpLFkuYj1iLk1hdGgubWF4KFkuYixuKSxjZT1ZLmEvdHQuYSxDPVkuYi90dC5iLEJ0PVkuYS10dC5hLHc9WS5iLXR0LmIscilmb3IoaD10cyh0KT91KHFlKHRzKHQpLChjaSgpLGp3KSksMTAzKTp1KHFlKHQsKGNpKCksancpKSwxMDMpLGQ9R3QocWUodCwoY2koKSxVUykpKT09PUd0KChvYSgpLFZjKSksTHQ9bmV3IGVyKCghdC5jJiYodC5jPW5ldyBoZShmbCx0LDksOSkpLHQuYykpO0x0LmUhPUx0LmkuZ2MoKTspc3dpdGNoKGd0PXUoZHIoTHQpLDExOCksX3Q9dShxZShndCxvNSksNjEpLF90PT0oYmUoKSxabykmJihfdD1ueHQoZ3QsaCksYm8oZ3QsbzUsX3QpKSxfdC5nKXtjYXNlIDE6ZHx8eXUoZ3QsZ3QuaSpjZSk7YnJlYWs7Y2FzZSAyOnl1KGd0LGd0LmkrQnQpLGR8fHh1KGd0LGd0LmoqQyk7YnJlYWs7Y2FzZSAzOmR8fHl1KGd0LGd0LmkqY2UpLHh1KGd0LGd0Lmordyk7YnJlYWs7Y2FzZSA0OmR8fHh1KGd0LGd0LmoqQyl9aWYoc2oodCxZLmEsWS5iKSxzKWZvcihGPW5ldyBlcigoIXQubiYmKHQubj1uZXcgaGUocW8sdCwxLDcpKSx0Lm4pKTtGLmUhPUYuaS5nYygpOylNPXUoZHIoRiksMTM3KSxIPU0uaStNLmcvMixWPU0uaitNLmYvMixZdD1IL3R0LmEsaz1WL3R0LmIsWXQraz49MSYmKFl0LWs+MCYmVj49MD8oeXUoTSxNLmkrQnQpLHh1KE0sTS5qK3cqaykpOll0LWs8MCYmSD49MCYmKHl1KE0sTS5pK0J0Kll0KSx4dShNLE0uait3KSkpO3JldHVybiBibyh0LChjaSgpLHoyKSwoX2woKSxvPXUoSGYodEEpLDkpLG5ldyByaChvLHUodWYobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgJGUoY2UsQyl9ZnVuY3Rpb24gRWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFY7aWYoSD10cyhNbyh1KFN0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSksVj10cyhNbyh1KFN0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSksTT1IPT1WLGQ9bmV3IFRhLGU9dShxZSh0LChieigpLG1BdCkpLDc0KSxlJiZlLmI+PTIpe2lmKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MCluPShUdigpLHM9bmV3IHJkLHMpLE1yKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksbik7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoRj1uZXcgTHgoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7Ri5lIT1GLmkuZ2MoKTspdV8oRik7eUQoZSx1KFN0KCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksMCksMjAyKSl9aWYoTSlmb3Iocj1uZXcgZXIoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspZm9yKG49dShkcihyKSwyMDIpLGs9bmV3IGVyKCghbi5hJiYobi5hPW5ldyBTcyhIaCxuLDUpKSxuLmEpKTtrLmUhPWsuaS5nYygpOyl3PXUoZHIoayksNDY5KSxkLmE9Yi5NYXRoLm1heChkLmEsdy5hKSxkLmI9Yi5NYXRoLm1heChkLmIsdy5iKTtmb3IoaD1uZXcgZXIoKCF0Lm4mJih0Lm49bmV3IGhlKHFvLHQsMSw3KSksdC5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz11KHFlKG8sS1MpLDgpLEMmJm0xKG8sQy5hLEMuYiksTSYmKGQuYT1iLk1hdGgubWF4KGQuYSxvLmkrby5nKSxkLmI9Yi5NYXRoLm1heChkLmIsby5qK28uZikpO3JldHVybiBkfWZ1bmN0aW9uIFg0bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2U7Zm9yKF90PWUuYy5sZW5ndGgscz1uZXcgeDQodC5hLG4sbnVsbCxudWxsKSxXZT1QdChpYSx2bywyNSxfdCwxNSwxKSxZPVB0KGlhLHZvLDI1LF90LDE1LDEpLFY9UHQoaWEsdm8sMjUsX3QsMTUsMSksdHQ9MCxkPTA7ZDxfdDtkKyspWVtkXT12aSxWW2RdPV9hO2Zvcih3PTA7dzxfdDt3KyspZm9yKHI9KEFuKHcsZS5jLmxlbmd0aCksdShlLmNbd10sMTgwKSksV2Vbd109V3N0KHIpLFdlW3R0XT5XZVt3XSYmKHR0PXcpLE09bmV3IFModC5hLmIpO00uYTxNLmMuYy5sZW5ndGg7KWZvcihDPXUoSihNKSwyOSksTHQ9bmV3IFMoQy5hKTtMdC5hPEx0LmMuYy5sZW5ndGg7KWd0PXUoSihMdCksMTApLGNlPVh0KHIucFtndC5wXSkrWHQoci5kW2d0LnBdKSxZW3ddPWIuTWF0aC5taW4oWVt3XSxjZSksVlt3XT1iLk1hdGgubWF4KFZbd10sY2UrZ3Quby5iKTtmb3IoU2U9UHQoaWEsdm8sMjUsX3QsMTUsMSksaz0wO2s8X3Q7aysrKShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDE4MCkpLm89PShFMSgpLGoyKT9TZVtrXT1ZW3R0XS1ZW2tdOlNlW2tdPVZbdHRdLVZba107Zm9yKG89UHQoaWEsdm8sMjUsX3QsMTUsMSksSD1uZXcgUyh0LmEuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDI5KSxZdD1uZXcgUyhGLmEpO1l0LmE8WXQuYy5jLmxlbmd0aDspe2ZvcihCdD11KEooWXQpLDEwKSxoPTA7aDxfdDtoKyspb1toXT1YdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5wW0J0LnBdKStYdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5kW0J0LnBdKStTZVtoXTtvLnNvcnQod2VlKHh0LnByb3RvdHlwZS50ZSx4dCxbXSkpLHMucFtCdC5wXT0ob1sxXStvWzJdKS8yLHMuZFtCdC5wXT0wfXJldHVybiBzfWZ1bmN0aW9uIFE0bih0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2gocj1lLmksbz10LmkubyxzPXQuaS5kLGQ9dC5uLGg9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtkLHQuYV0pKSx0LmouZyl7Y2FzZSAxOmxkKGUsKHd1KCkseWYpKSxyLmQ9LXMuZC1uLXIuYSx1KHUoRmUoZS5kLDApLDE4MSkuV2UoKHNlKCksRDYpKSwyODUpPT0oamwoKSx1MCk/KFVmKGUsKFh1KCksbWYpKSxyLmM9aC5hLVh0KHllKFEodCxXNCkpKS1uLXIuYik6KFVmKGUsKFh1KCksU2QpKSxyLmM9aC5hK1h0KHllKFEodCxXNCkpKStuKTticmVhaztjYXNlIDI6VWYoZSwoWHUoKSxTZCkpLHIuYz1vLmErcy5jK24sdSh1KEZlKGUuZCwwKSwxODEpLldlKChzZSgpLEQ2KSksMjg1KT09KGpsKCksdTApPyhsZChlLCh3dSgpLHlmKSksci5kPWguYi1YdCh5ZShRKHQsVzQpKSktbi1yLmEpOihsZChlLCh3dSgpLGUxKSksci5kPWguYitYdCh5ZShRKHQsVzQpKSkrbik7YnJlYWs7Y2FzZSAzOmxkKGUsKHd1KCksZTEpKSxyLmQ9by5iK3MuYStuLHUodShGZShlLmQsMCksMTgxKS5XZSgoc2UoKSxENikpLDI4NSk9PShqbCgpLHUwKT8oVWYoZSwoWHUoKSxtZikpLHIuYz1oLmEtWHQoeWUoUSh0LFc0KSkpLW4tci5iKTooVWYoZSwoWHUoKSxTZCkpLHIuYz1oLmErWHQoeWUoUSh0LFc0KSkpK24pO2JyZWFrO2Nhc2UgNDpVZihlLChYdSgpLG1mKSksci5jPS1zLmItbi1yLmIsdSh1KEZlKGUuZCwwKSwxODEpLldlKChzZSgpLEQ2KSksMjg1KT09KGpsKCksdTApPyhsZChlLCh3dSgpLHlmKSksci5kPWguYi1YdCh5ZShRKHQsVzQpKSktbi1yLmEpOihsZChlLCh3dSgpLGUxKSksci5kPWguYitYdCh5ZShRKHQsVzQpKSkrbil9fWZ1bmN0aW9uIFo0bih0LGUsbixyLHMsbyxoKXt2YXIgZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnM7Zm9yKEg9MCxSbj0wLHc9bmV3IFModCk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMzMpLGFoZShkKSxIPWIuTWF0aC5tYXgoSCxkLmcpLFJuKz1kLmcqZC5mO2ZvcihWPVJuL3QuYy5sZW5ndGgsUWU9dDFuKHQsViksUm4rPXQuYy5sZW5ndGgqUWUsSD1iLk1hdGgubWF4KEgsYi5NYXRoLnNxcnQoUm4qaCkpK24uYixwaT1uLmIsUnM9bi5kLEY9MCxDPW4uYituLmMsV2U9bmV3IFFpLG5pKFdlLGRlKDApKSxjZT1uZXcgUWksaz1uZXcgaGEodCwwKTtrLmI8ay5kLmdjKCk7KWQ9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLGhyPWQuZyxNPWQuZixwaStocj5IJiYobyYmKEtiKGNlLEYpLEtiKFdlLGRlKGsuYi0xKSkpLHBpPW4uYixScys9RitlLEY9MCxDPWIuTWF0aC5tYXgoQyxuLmIrbi5jK2hyKSkseXUoZCxwaSkseHUoZCxScyksQz1iLk1hdGgubWF4KEMscGkraHIrbi5jKSxGPWIuTWF0aC5tYXgoRixNKSxwaSs9aHIrZTtpZihDPWIuTWF0aC5tYXgoQyxyKSx6bj1ScytGK24uYSx6bjxzJiYoRis9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsaz1uZXcgaGEodCwwKSxLYihXZSxkZSh0LmMubGVuZ3RoKSksU2U9ZWkoV2UsMCksZ3Q9dSh0aShTZSksMTkpLmEsS2IoY2UsRiksWXQ9ZWkoY2UsMCksQnQ9MDtrLmI8ay5kLmdjKCk7KWsuYj09Z3QmJihwaT1uLmIsQnQ9WHQoeWUodGkoWXQpKSksZ3Q9dSh0aShTZSksMTkpLmEpLGQ9KFFuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLEx0PWQuZixYdihkLEJ0KSxZPUJ0LGsuYj09Z3QmJih0dD1DLXBpLW4uYyxfdD1kLmcsUXYoZCx0dCkscm9lKGQsbmV3ICRlKHR0LFkpLG5ldyAkZShfdCxMdCkpKSxwaSs9ZC5nK2U7cmV0dXJuIG5ldyAkZShDLHpuKX1mdW5jdGlvbiBKNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlO2Zvcih3cihlLCJDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yIiwxKSxuPWplKFJlKFEodCwoVGUoKSxuaHQpKSkpLGQ9dShRKHQsKHNlKCksWFR0KSksMjI0KSxDPW5ldyBxcyxndD1kLmVjKCkuS2MoKTtndC5PYigpOyl7Zm9yKHR0PXUoZ3QuUGIoKSwxNyksaD1uZXcgUHUoZC5jYyh0dCkpLHZuKCksWHMoaCxuZXcgU2kodCkpLFl0PVBvbigoQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwyNDMpKSksU2U9Zm5lKHUoRmUoaCxoLmMubGVuZ3RoLTEpLDI0MykpLF90PVl0LmksVjgoU2UuaSxfdCk/THQ9X3QuZTpMdD1GYShfdCksTT1SaG4odHQsaCksX2godHQuYSksRj1udWxsLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjQzKSxZPW5ldyBUYSx6NHQoWSxzLmEsTHQpLEg9cy5iLHI9bmV3IER1LEFpdChyLDAsSC5hKSxKbShyLFkpLEJ0PW5ldyB5byhUMShILmMpKSxjZT1uZXcgeW8oVDEoSC5kKSksTGkoQnQsWSksTGkoY2UsWSksRiYmKHIuYj09MD9WPWNlOlY9KFFuKHIuYiE9MCksdShyLmEuYS5jLDgpKSxXZT1iLk1hdGguYWJzKEYuYS1WLmEpPnlkLFFlPWIuTWF0aC5hYnMoRi5iLVYuYik+eWQsKCFuJiZXZSYmUWV8fG4mJihXZXx8UWUpKSYmbmkodHQuYSxCdCkpLFVhKHR0LmEsciksci5iPT0wP0Y9QnQ6Rj0oUW4oci5iIT0wKSx1KHIuYy5iLmMsOCkpLGdjbihILE0sWSksZm5lKHMpPT1TZSYmKEZhKFNlLmkpIT1zLmEmJihZPW5ldyBUYSx6NHQoWSxGYShTZS5pKSxMdCkpLEp0KHR0LCRsdCxZKSksUjBuKEgsdHQsTHQpLEMuYS56YyhILEMpO0RhKHR0LFl0KSxzYSh0dCxTZSl9Zm9yKGs9Qy5hLmVjKCkuS2MoKTtrLk9iKCk7KXc9dShrLlBiKCksMTcpLERhKHcsbnVsbCksc2EodyxudWxsKTtvcihlKX1mdW5jdGlvbiBUaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0O2lmKHQuZ2MoKT09MSlyZXR1cm4gdSh0LlhiKDApLDIzMSk7aWYodC5nYygpPD0wKXJldHVybiBuZXcgXyQ7Zm9yKHM9dC5LYygpO3MuT2IoKTspe2ZvcihuPXUocy5QYigpLDIzMSksVj0wLEM9dmksTT12aSx3PV9hLGs9X2EsSD1uZXcgUyhuLmUpO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDE0NCksVis9dShRKEYsKFpmKCksdDcpKSwxOSkuYSxDPWIuTWF0aC5taW4oQyxGLmQuYS1GLmUuYS8yKSxNPWIuTWF0aC5taW4oTSxGLmQuYi1GLmUuYi8yKSx3PWIuTWF0aC5tYXgodyxGLmQuYStGLmUuYS8yKSxrPWIuTWF0aC5tYXgoayxGLmQuYitGLmUuYi8yKTtKdChuLChaZigpLHQ3KSxkZShWKSksSnQobiwoR3AoKSxsUyksbmV3ICRlKEMsTSkpLEp0KG4sZE8sbmV3ICRlKHcsaykpfWZvcih2bigpLHQuYWQobmV3IGpiKSxZPW5ldyBfJCxMbyhZLHUodC5YYigwKSw5NCkpLGQ9MCxMdD0wLG89dC5LYygpO28uT2IoKTspbj11KG8uUGIoKSwyMzEpLHR0PW5hKG5jKHUoUShuLChHcCgpLGRPKSksOCkpLHUoUShuLGxTKSw4KSksZD1iLk1hdGgubWF4KGQsdHQuYSksTHQrPXR0LmEqdHQuYjtmb3IoZD1iLk1hdGgubWF4KGQsYi5NYXRoLnNxcnQoTHQpKlh0KHllKFEoWSwoWmYoKSxYcGUpKSkpKSxndD1YdCh5ZShRKFksc0cpKSksX3Q9MCxCdD0wLGg9MCxlPWd0LHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyMzEpLHR0PW5hKG5jKHUoUShuLChHcCgpLGRPKSksOCkpLHUoUShuLGxTKSw4KSksX3QrdHQuYT5kJiYoX3Q9MCxCdCs9aCtndCxoPTApLEZ3bihZLG4sX3QsQnQpLGU9Yi5NYXRoLm1heChlLF90K3R0LmEpLGg9Yi5NYXRoLm1heChoLHR0LmIpLF90Kz10dC5hK2d0O3JldHVybiBZfWZ1bmN0aW9uIENoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWO3N3aXRjaChDPW5ldyBEdSx0LmEuZyl7Y2FzZSAzOkY9dShRKGUuZSwoc2UoKSxOMikpLDE1KSxIPXUoUShlLmosTjIpLDE1KSxWPXUoUShlLmYsTjIpLDE1KSxuPXUoUShlLmUsWDQpLDE1KSxyPXUoUShlLmosWDQpLDE1KSxzPXUoUShlLmYsWDQpLDE1KSxoPW5ldyBsZSxBcyhoLEYpLEguSmMobmV3IFFYKSxBcyhoLEV0KEgsMTUyKT9WeCh1KEgsMTUyKSk6RXQoSCwxMzEpP3UoSCwxMzEpLmE6RXQoSCw1NCk/bmV3IG12KEgpOm5ldyBNbShIKSksQXMoaCxWKSxvPW5ldyBsZSxBcyhvLG4pLEFzKG8sRXQociwxNTIpP1Z4KHUociwxNTIpKTpFdChyLDEzMSk/dShyLDEzMSkuYTpFdChyLDU0KT9uZXcgbXYocik6bmV3IE1tKHIpKSxBcyhvLHMpLEp0KGUuZixOMixoKSxKdChlLmYsWDQsbyksSnQoZS5mLGk5dCxlLmYpLEp0KGUuZSxOMixudWxsKSxKdChlLmUsWDQsbnVsbCksSnQoZS5qLE4yLG51bGwpLEp0KGUuaixYNCxudWxsKTticmVhaztjYXNlIDE6VWEoQyxlLmUuYSksbmkoQyxlLmkubiksVWEoQyxhMihlLmouYSkpLG5pKEMsZS5hLm4pLFVhKEMsZS5mLmEpO2JyZWFrO2RlZmF1bHQ6VWEoQyxlLmUuYSksVWEoQyxhMihlLmouYSkpLFVhKEMsZS5mLmEpfV9oKGUuZi5hKSxVYShlLmYuYSxDKSxEYShlLmYsZS5lLmMpLGQ9dShRKGUuZSwoVGUoKSxfbykpLDc0KSxrPXUoUShlLmosX28pLDc0KSx3PXUoUShlLmYsX28pLDc0KSwoZHx8a3x8dykmJihNPW5ldyBEdSxsd3QoTSx3KSxsd3QoTSxrKSxsd3QoTSxkKSxKdChlLmYsX28sTSkpLERhKGUuaixudWxsKSxzYShlLmosbnVsbCksRGEoZS5lLG51bGwpLHNhKGUuZSxudWxsKSxrbyhlLmEsbnVsbCksa28oZS5pLG51bGwpLGUuZyYmQ2hlKHQsZS5nKX1mdW5jdGlvbiB0NW4odCl7ZXh0KCk7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKHQ9PW51bGx8fChvPVIkKHQpLFY9enVuKG8pLFYlNCE9MCkpcmV0dXJuIG51bGw7aWYoWT1WLzR8MCxZPT0wKXJldHVybiBQdChIdSxONCwyNSwwLDE1LDEpO2ZvcihNPW51bGwsZT0wLG49MCxyPTAscz0wLGg9MCxkPTAsdz0wLGs9MCxIPTAsRj0wLEM9MCxNPVB0KEh1LE40LDI1LFkqMywxNSwxKTtIPFktMTtIKyspe2lmKCFkTShoPW9bQysrXSl8fCFkTShkPW9bQysrXSl8fCFkTSh3PW9bQysrXSl8fCFkTShrPW9bQysrXSkpcmV0dXJuIG51bGw7ZT1VMVtoXSxuPVUxW2RdLHI9VTFbd10scz1VMVtrXSxNW0YrK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCxNW0YrK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LE1bRisrXT0ocjw8NnxzKTw8MjQ+PjI0fXJldHVybiFkTShoPW9bQysrXSl8fCFkTShkPW9bQysrXSk/bnVsbDooZT1VMVtoXSxuPVUxW2RdLHc9b1tDKytdLGs9b1tDKytdLFUxW3ddPT0tMXx8VTFba109PS0xP3c9PTYxJiZrPT02MT9uJjE1P251bGw6KHR0PVB0KEh1LE40LDI1LEgqMysxLDE1LDEpLEljKE0sMCx0dCwwLEgqMyksdHRbRl09KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dCk6dyE9NjEmJms9PTYxPyhyPVUxW3ddLHImMz9udWxsOih0dD1QdChIdSxONCwyNSxIKjMrMiwxNSwxKSxJYyhNLDAsdHQsMCxIKjMpLHR0W0YrK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dFtGXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdHQpKTpudWxsOihyPVUxW3ddLHM9VTFba10sTVtGKytdPShlPDwyfG4+PjQpPDwyND4+MjQsTVtGKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxNW0YrK109KHI8PDZ8cyk8PDI0Pj4yNCxNKSl9ZnVuY3Rpb24gZTVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdDtmb3Iod3IoZSxsMWUsMSksVj11KFEodCwoVGUoKSxYMCkpLDIxOCkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1zSShyLmEpLGg9ayxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKWlmKG89aFtkXSxvLms9PShHbigpLEhjKSl7aWYoVj09KHEwKCksSDYpKWZvcihNPW5ldyBTKG8uaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLEMuZS5jLmxlbmd0aD09MHx8eWhuKEMpLEMuZy5jLmxlbmd0aD09MHx8eGhuKEMpO2Vsc2UgaWYoRXQoUShvLChzZSgpLF9pKSksMTcpKXR0PXUoUShvLF9pKSwxNyksZ3Q9dShSZyhvLChiZSgpLEJuKSkuS2MoKS5QYigpLDExKSxMdD11KFJnKG8sSG4pLktjKCkuUGIoKSwxMSksX3Q9dShRKGd0LF9pKSwxMSksQnQ9dShRKEx0LF9pKSwxMSksRGEodHQsQnQpLHNhKHR0LF90KSxZdD1uZXcgeW8oTHQuaS5uKSxZdC5hPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbQnQuaS5uLEJ0Lm4sQnQuYV0pKS5hLG5pKHR0LmEsWXQpLFl0PW5ldyB5byhndC5pLm4pLFl0LmE9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtfdC5pLm4sX3QubixfdC5hXSkpLmEsbmkodHQuYSxZdCk7ZWxzZXtpZihvLmouYy5sZW5ndGg+PTIpe2ZvcihZPSEwLEY9bmV3IFMoby5qKSxuPXUoSihGKSwxMSksSD1udWxsO0YuYTxGLmMuYy5sZW5ndGg7KWlmKEg9bixuPXUoSihGKSwxMSksIXlpKFEoSCxfaSksUShuLF9pKSkpe1k9ITE7YnJlYWt9fWVsc2UgWT0hMTtmb3IoTT1uZXcgUyhvLmopO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDExKSxDLmUuYy5sZW5ndGg9PTB8fEsybihDLFkpLEMuZy5jLmxlbmd0aD09MHx8WTJuKEMsWSl9a28obyxudWxsKX1vcihlKX1mdW5jdGlvbiBfaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlO3JldHVybiBfdD10LmNbKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTcpKS5wXSxTZT10LmNbKEFuKDEsZS5jLmxlbmd0aCksdShlLmNbMV0sMTcpKS5wXSxfdC5hLmUuZS1fdC5hLmEtKF90LmIuZS5lLV90LmIuYSk9PTAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKT09MHx8KGd0PV90LmIuZS5mLCFFdChndCwxMCkpPyExOih0dD11KGd0LDEwKSxZdD10LmlbdHQucF0sY2U9dHQuYz9Sbyh0dC5jLmEsdHQsMCk6LTEsbz1zcyxjZT4wJiYocz11KEZlKHR0LmMuYSxjZS0xKSwxMCksaD10Lmlbcy5wXSxXZT1iLk1hdGguY2VpbChWMyh0Lm4scyx0dCkpLG89WXQuYS5lLXR0LmQuZC0oaC5hLmUrcy5vLmIrcy5kLmEpLVdlKSxrPXNzLGNlPHR0LmMuYS5jLmxlbmd0aC0xJiYodz11KEZlKHR0LmMuYSxjZSsxKSwxMCksQz10Lmlbdy5wXSxXZT1iLk1hdGguY2VpbChWMyh0Lm4sdyx0dCkpLGs9Qy5hLmUtdy5kLmQtKFl0LmEuZSt0dC5vLmIrdHQuZC5hKS1XZSksbiYmKHkxKCksZ2YoRWQpLGIuTWF0aC5hYnMoby1rKTw9RWR8fG89PWt8fGlzTmFOKG8pJiZpc05hTihrKSk/ITA6KHI9SG50KF90LmEpLGQ9LUhudChfdC5iKSxNPS1IbnQoU2UuYSksTHQ9SG50KFNlLmIpLFk9X3QuYS5lLmUtX3QuYS5hLShfdC5iLmUuZS1fdC5iLmEpPjAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKTwwLFY9X3QuYS5lLmUtX3QuYS5hLShfdC5iLmUuZS1fdC5iLmEpPDAmJlNlLmEuZS5lLVNlLmEuYS0oU2UuYi5lLmUtU2UuYi5hKT4wLEg9X3QuYS5lLmUrX3QuYi5hPFNlLmIuZS5lK1NlLmEuYSxGPV90LmEuZS5lK190LmIuYT5TZS5iLmUuZStTZS5hLmEsQnQ9MCwhWSYmIVYmJihGP28rTT4wP0J0PU06ay1yPjAmJihCdD1yKTpIJiYobytkPjA/QnQ9ZDprLUx0PjAmJihCdD1MdCkpKSxZdC5hLmUrPUJ0LFl0LmImJihZdC5kLmUrPUJ0KSwhMSkpfWZ1bmN0aW9uIFNoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEY7aWYocj1uZXcgaWgoZS5xZigpLmEsZS5xZigpLmIsZS5yZigpLmEsZS5yZigpLmIpLHM9bmV3IEF4LHQuYylmb3IoaD1uZXcgUyhlLndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MSkscy5jPW8ucWYoKS5hK2UucWYoKS5hLHMuZD1vLnFmKCkuYitlLnFmKCkuYixzLmI9by5yZigpLmEscy5hPW8ucmYoKS5iLGhfKHIscyk7Zm9yKGs9bmV3IFMoZS5DZigpKTtrLmE8ay5jLmMubGVuZ3RoOyl7aWYodz11KEooayksODM4KSxDPXcucWYoKS5hK2UucWYoKS5hLE09dy5xZigpLmIrZS5xZigpLmIsdC5lJiYocy5jPUMscy5kPU0scy5iPXcucmYoKS5hLHMuYT13LnJmKCkuYixoXyhyLHMpKSx0LmQpZm9yKGg9bmV3IFMody53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLHMuYz1vLnFmKCkuYStDLHMuZD1vLnFmKCkuYitNLHMuYj1vLnJmKCkuYSxzLmE9by5yZigpLmIsaF8ocixzKTtpZih0LmIpe2lmKEY9bmV3ICRlKC1uLC1uKSx1KGUuV2UoKGNpKCksS3kpKSwxNzQpLkhjKChRdSgpLHhiKSkpZm9yKGg9bmV3IFMody53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLEYuYSs9by5yZigpLmErbixGLmIrPW8ucmYoKS5iK247Ri5hPWIuTWF0aC5tYXgoRi5hLDApLEYuYj1iLk1hdGgubWF4KEYuYiwwKSxZdWUocix3LkJmKCksdy56ZigpLGUsdyxGLG4pfX10LmImJll1ZShyLGUuQmYoKSxlLnpmKCksZSxudWxsLG51bGwsbiksZD1uZXcgd250KGUuQWYoKSksZC5kPWIuTWF0aC5tYXgoMCxlLnFmKCkuYi1yLmQpLGQuYT1iLk1hdGgubWF4KDAsci5kK3IuYS0oZS5xZigpLmIrZS5yZigpLmIpKSxkLmI9Yi5NYXRoLm1heCgwLGUucWYoKS5hLXIuYyksZC5jPWIuTWF0aC5tYXgoMCxyLmMrci5iLShlLnFmKCkuYStlLnJmKCkuYSkpLGUuRWYoZCl9ZnVuY3Rpb24gbjVuKCl7dmFyIHQ9WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiXTtyZXR1cm4gdFszNF09J1xcIicsdFs5Ml09IlxcXFwiLHRbMTczXT0iXFx1MDBhZCIsdFsxNTM2XT0iXFx1MDYwMCIsdFsxNTM3XT0iXFx1MDYwMSIsdFsxNTM4XT0iXFx1MDYwMiIsdFsxNTM5XT0iXFx1MDYwMyIsdFsxNzU3XT0iXFx1MDZkZCIsdFsxODA3XT0iXFx1MDcwZiIsdFs2MDY4XT0iXFx1MTdiNCIsdFs2MDY5XT0iXFx1MTdiNSIsdFs4MjAzXT0iXFx1MjAwYiIsdFs4MjA0XT0iXFx1MjAwYyIsdFs4MjA1XT0iXFx1MjAwZCIsdFs4MjA2XT0iXFx1MjAwZSIsdFs4MjA3XT0iXFx1MjAwZiIsdFs4MjMyXT0iXFx1MjAyOCIsdFs4MjMzXT0iXFx1MjAyOSIsdFs4MjM0XT0iXFx1MjAyYSIsdFs4MjM1XT0iXFx1MjAyYiIsdFs4MjM2XT0iXFx1MjAyYyIsdFs4MjM3XT0iXFx1MjAyZCIsdFs4MjM4XT0iXFx1MjAyZSIsdFs4Mjg4XT0iXFx1MjA2MCIsdFs4Mjg5XT0iXFx1MjA2MSIsdFs4MjkwXT0iXFx1MjA2MiIsdFs4MjkxXT0iXFx1MjA2MyIsdFs4MjkyXT0iXFx1MjA2NCIsdFs4Mjk4XT0iXFx1MjA2YSIsdFs4Mjk5XT0iXFx1MjA2YiIsdFs4MzAwXT0iXFx1MjA2YyIsdFs4MzAxXT0iXFx1MjA2ZCIsdFs4MzAyXT0iXFx1MjA2ZSIsdFs4MzAzXT0iXFx1MjA2ZiIsdFs2NTI3OV09IlxcdWZlZmYiLHRbNjU1MjldPSJcXHVmZmY5Iix0WzY1NTMwXT0iXFx1ZmZmYSIsdFs2NTUzMV09IlxcdWZmZmIiLHR9ZnVuY3Rpb24gcjVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRjtmb3Iodz1uZXcgbGUsTT1lLmxlbmd0aCxoPUN5dChuKSxrPTA7azxNOysrayl7c3dpdGNoKEM9XzJ0KGUsRXUoNjEpLGspLHI9anVuKGgsZS5zdWJzdHIoayxDLWspKSxzPWRpdChyKSxvPXMuQWooKS5OaCgpLGJhKGUsKytDKSl7Y2FzZSAzOTp7ZD1sOChlLDM5LCsrQyksdWUodyxuZXcgSlIocixlcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpKSxrPWQrMTticmVha31jYXNlIDM0OntkPWw4KGUsMzQsKytDKSx1ZSh3LG5ldyBKUihyLGVydChlLnN1YnN0cihDLGQtQyksbyxzKSkpLGs9ZCsxO2JyZWFrfWNhc2UgOTE6e0Y9bmV3IGxlLHVlKHcsbmV3IEpSKHIsRikpO3Q6Zm9yKDs7KXtzd2l0Y2goYmEoZSwrK0MpKXtjYXNlIDM5OntkPWw4KGUsMzksKytDKSx1ZShGLGVydChlLnN1YnN0cihDLGQtQyksbyxzKSksQz1kKzE7YnJlYWt9Y2FzZSAzNDp7ZD1sOChlLDM0LCsrQyksdWUoRixlcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpLEM9ZCsxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKUYuY1tGLmMubGVuZ3RoXT1udWxsO2Vsc2UgdGhyb3cgcnQobmV3IEdvKG1kZSkpO0MrPTM7YnJlYWt9fWlmKEM8TSlzd2l0Y2goUnIoQyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KEMpKXtjYXNlIDQ0OmJyZWFrO2Nhc2UgOTM6YnJlYWsgdDtkZWZhdWx0OnRocm93IHJ0KG5ldyBHbygiRXhwZWN0aW5nICwgb3IgXSIpKX1lbHNlIGJyZWFrfWs9QysxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKXVlKHcsbmV3IEpSKHIsbnVsbCkpO2Vsc2UgdGhyb3cgcnQobmV3IEdvKG1kZSkpO2s9QyszO2JyZWFrfX1pZihrPE0pe2lmKFJyKGssZS5sZW5ndGgpLGUuY2hhckNvZGVBdChrKSE9NDQpdGhyb3cgcnQobmV3IEdvKCJFeHBlY3RpbmcgLCIpKX1lbHNlIGJyZWFrfXJldHVybiB4dm4odCx3LG4pfWZ1bmN0aW9uIEFoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKGs9dSh1KEFpKHQucixlKSwyMSksODQpLGg9cjBuKHQsZSksbj10LnUuSGMoKFF1KCksWlMpKSx3PWsuS2MoKTt3Lk9iKCk7KWlmKGQ9dSh3LlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKEY9ZC5iLnJmKCksQz1kLmMsTT1DLmksTS5iPShvPUMubixDLmUuYStvLmIrby5jKSxNLmE9KHM9Qy5uLEMuZS5iK3MuZCtzLmEpLGUuZyl7Y2FzZSAxOmQuYT8oTS5jPShGLmEtTS5iKS8yLFVmKEMsKFh1KCksY2IpKSk6aHx8bj8oTS5jPS1NLmItdC5zLFVmKEMsKFh1KCksbWYpKSk6KE0uYz1GLmErdC5zLFVmKEMsKFh1KCksU2QpKSksTS5kPS1NLmEtdC50LGxkKEMsKHd1KCkseWYpKTticmVhaztjYXNlIDM6ZC5hPyhNLmM9KEYuYS1NLmIpLzIsVWYoQywoWHUoKSxjYikpKTpofHxuPyhNLmM9LU0uYi10LnMsVWYoQywoWHUoKSxtZikpKTooTS5jPUYuYSt0LnMsVWYoQywoWHUoKSxTZCkpKSxNLmQ9Ri5iK3QudCxsZChDLCh3dSgpLGUxKSk7YnJlYWs7Y2FzZSAyOmQuYT8ocj10LnY/TS5hOnUoRmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oRi5iLXIpLzIsbGQoQywod3UoKSx1YikpKTpofHxuPyhNLmQ9LU0uYS10LnQsbGQoQywod3UoKSx5ZikpKTooTS5kPUYuYit0LnQsbGQoQywod3UoKSxlMSkpKSxNLmM9Ri5hK3QucyxVZihDLChYdSgpLFNkKSk7YnJlYWs7Y2FzZSA0OmQuYT8ocj10LnY/TS5hOnUoRmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oRi5iLXIpLzIsbGQoQywod3UoKSx1YikpKTpofHxuPyhNLmQ9LU0uYS10LnQsbGQoQywod3UoKSx5ZikpKTooTS5kPUYuYit0LnQsbGQoQywod3UoKSxlMSkpKSxNLmM9LU0uYi10LnMsVWYoQywoWHUoKSxtZikpfWg9ITF9fWZ1bmN0aW9uIHRiKHQsZSl7Z2koKTt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtpZigkOShPNyk9PTApe2ZvcihNPVB0KEV4bix0ZSwxMTcsTTVlLmxlbmd0aCwwLDEpLGg9MDtoPE0ubGVuZ3RoO2grKylNW2hdPW5ldyBObCg0KTtmb3Iocj1uZXcgQjksbz0wO288bUx0Lmxlbmd0aDtvKyspe2lmKEM9bmV3IE5sKDQpLG88ODQ/KGQ9byoyLEg9KFJyKGQsZnV0Lmxlbmd0aCksZnV0LmNoYXJDb2RlQXQoZCkpLEY9KFJyKGQrMSxmdXQubGVuZ3RoKSxmdXQuY2hhckNvZGVBdChkKzEpKSxqYyhDLEgsRikpOihkPShvLTg0KSoyLGpjKEMseUx0W2RdLHlMdFtkKzFdKSksdz1tTHRbb10saG4odywiU3BlY2lhbHMiKSYmamMoQyw2NTUyMCw2NTUzMyksaG4odyxyZ2UpJiYoamMoQyw5ODMwNDAsMTA0ODU3MyksamMoQywxMDQ4NTc2LDExMTQxMDkpKSx4byhPNyx3LEMpLHhvKGhBLHcsYnkoQykpLGs9ci5hLmxlbmd0aCwwPGs/ci5hPXIuYS5zdWJzdHIoMCwwKTowPmsmJihyLmErPURVdChQdChtaCx2ZCwyNSwtaywxNSwxKSkpLHIuYSs9IklzIixjZCh3LEV1KDMyKSk+PTApZm9yKHM9MDtzPHcubGVuZ3RoO3MrKylScihzLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQocykhPTMyJiZtOChyLChScihzLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQocykpKTtlbHNlIHIuYSs9IiIrdzt4M3Qoci5hLHcsITApfXgzdChodXQsIkNuIiwhMSkseDN0KEc4dCwiQ24iLCEwKSxuPW5ldyBObCg0KSxqYyhuLDAsV0UpLHhvKE83LCJBTEwiLG4pLHhvKGhBLCJBTEwiLGJ5KG4pKSwhbjMmJihuMz1uZXcgQ3IpLHhvKG4zLGh1dCxodXQpLCFuMyYmKG4zPW5ldyBDcikseG8objMsRzh0LEc4dCksIW4zJiYobjM9bmV3IENyKSx4byhuMywiQUxMIiwiQUxMIil9cmV0dXJuIFY9dShGYyhlP083OmhBLHQpLDEzNiksVn1mdW5jdGlvbiBpNW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O2lmKEY9ITEsTT0hMSxIMyh1KFEociwoVGUoKSxvcykpLDk4KSkpe2g9ITEsZD0hMTt0OmZvcihWPW5ldyBTKHIuaik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKEg9dShKKFYpLDExKSx0dD1CcChMMShjdChvdChCMSwxKSxJZSwyMCwwLFtuZXcgWXMoSCksbmV3IEVyKEgpXSkpKTt6cih0dCk7KWlmKFk9dShMcih0dCksMTEpLCFqZShSZShRKFkuaSxrUykpKSl7aWYoSC5qPT0oYmUoKSxObikpe2g9ITA7YnJlYWsgdH1pZihILmo9PW1yKXtkPSEwO2JyZWFrIHR9fUY9ZCYmIWgsTT1oJiYhZH1pZighRiYmIU0mJnIuYi5jLmxlbmd0aCE9MCl7Zm9yKEM9MCxrPW5ldyBTKHIuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksNzApLEMrPXcubi5iK3cuby5iLzI7Qy89ci5iLmMubGVuZ3RoLEx0PUM+PXIuby5iLzJ9ZWxzZSBMdD0hTTtMdD8oZ3Q9dShRKHIsKHNlKCksTjYpKSwxNSksZ3Q/Rj9vPWd0OihzPXUoUShyLEw2KSwxNSkscz9ndC5nYygpPD1zLmdjKCk/bz1ndDpvPXM6KG89bmV3IGxlLEp0KHIsTDYsbykpKToobz1uZXcgbGUsSnQocixONixvKSkpOihzPXUoUShyLChzZSgpLEw2KSksMTUpLHM/TT9vPXM6KGd0PXUoUShyLE42KSwxNSksZ3Q/cy5nYygpPD1ndC5nYygpP289czpvPWd0OihvPW5ldyBsZSxKdChyLE42LG8pKSk6KG89bmV3IGxlLEp0KHIsTDYsbykpKSxvLkZjKHQpLEp0KHQsKHNlKCksekcpLG4pLGUuZD09bj8oc2EoZSxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZVbyhuLG51bGwpLFljbihuKSk6KERhKGUsbnVsbCksbi5lLmMubGVuZ3RoK24uZy5jLmxlbmd0aD09MCYmVW8obixudWxsKSksX2goZS5hKX1mdW5jdGlvbiBzNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpO2ZvcihMdD1uZXcgaGEodC5iLDApLEM9ZS5LYygpLFY9MCxrPXUoQy5QYigpLDE5KS5hLFl0PTAsbj1uZXcgcXMsU2U9bmV3IEEwO0x0LmI8THQuZC5nYygpOyl7Zm9yKGd0PShRbihMdC5iPEx0LmQuZ2MoKSksdShMdC5kLlhiKEx0LmM9THQuYisrKSwyOSkpLEJ0PW5ldyBTKGd0LmEpO0J0LmE8QnQuYy5jLmxlbmd0aDspe2ZvcihfdD11KEooQnQpLDEwKSxIPW5ldyBhcihscihNcyhfdCkuYS5LYygpLG5ldyB6KSk7enIoSCk7KU09dShMcihIKSwxNyksU2UuYS56YyhNLFNlKTtmb3IoRj1uZXcgYXIobHIoam8oX3QpLmEuS2MoKSxuZXcgeikpO3pyKEYpOylNPXUoTHIoRiksMTcpLFNlLmEuQmMoTSkhPW51bGx9aWYoVisxPT1rKXtmb3Iocz1uZXcgQ2godCksUm0oTHQscyksbz1uZXcgQ2godCksUm0oTHQsbyksUWU9U2UuYS5lYygpLktjKCk7UWUuT2IoKTspV2U9dShRZS5QYigpLDE3KSxuLmEuX2IoV2UpfHwoKytZdCxuLmEuemMoV2UsbikpLGg9bmV3IEgwKHQpLEp0KGgsKFRlKCksb3MpLChvYSgpLEw3KSksa28oaCxzKSxfMChoLChHbigpLGoxKSksWT1uZXcgTWMsVW8oWSxoKSxGcyhZLChiZSgpLEJuKSksUm49bmV3IE1jLFVvKFJuLGgpLEZzKFJuLEhuKSxyPW5ldyBIMCh0KSxKdChyLG9zLEw3KSxrbyhyLG8pLF8wKHIsajEpLHR0PW5ldyBNYyxVbyh0dCxyKSxGcyh0dCxCbiksem49bmV3IE1jLFVvKHpuLHIpLEZzKHpuLEhuKSxjZT1uZXcgenYsRGEoY2UsV2UuYyksc2EoY2UsWSkscGk9bmV3IHp2LERhKHBpLFJuKSxzYShwaSx0dCksRGEoV2Usem4pLGQ9bmV3IFp3dChoLHIsY2UscGksV2UpLEp0KGgsKHNlKCksTHcpLGQpLEp0KHIsTHcsZCksaHI9Y2UuYy5pLGhyLms9PWoxJiYodz11KFEoaHIsTHcpLDMwNSksdy5kPWQsZC5nPXcpO2lmKEMuT2IoKSlrPXUoQy5QYigpLDE5KS5hO2Vsc2UgYnJlYWt9KytWfXJldHVybiBkZShZdCl9ZnVuY3Rpb24gYTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWTtmb3IoTT0wLHM9bmV3IGVyKCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxqZShSZShxZShyLChUZSgpLEIyKSkpKXx8KChHdChxZShlLGRiKSkhPT1HdCgoajAoKSxnYikpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxwUykpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxnUykpfHxqZShSZShxZShlLEJ5KSkpfHxHdChxZShlLFA2KSkhPT1HdCgoZXcoKSwkNCkpKSYmIWplKFJlKHFlKHIscWx0KSkpJiYoYm8ociwoc2UoKSxUYyksZGUoTSkpLCsrTSksb2hlKHQscixuKSk7Zm9yKE09MCxrPW5ldyBlcigoIWUuYiYmKGUuYj1uZXcgaGUoV3MsZSwxMiwzKSksZS5iKSk7ay5lIT1rLmkuZ2MoKTspZD11KGRyKGspLDc5KSwoR3QocWUoZSwoVGUoKSxkYikpKSE9PUd0KChqMCgpLGdiKSl8fEd0KHFlKGUsUnkpKT09PUd0KCh2MigpLHBTKSl8fEd0KHFlKGUsUnkpKT09PUd0KCh2MigpLGdTKSl8fGplKFJlKHFlKGUsQnkpKSl8fEd0KHFlKGUsUDYpKSE9PUd0KChldygpLCQ0KSkpJiYoYm8oZCwoc2UoKSxUYyksZGUoTSkpLCsrTSksVj1aZChkKSxZPVhwKGQpLEM9amUoUmUocWUoViwkeSkpKSxIPSFqZShSZShxZShkLEIyKSkpLEY9QyYmdXcoZCkmJmplKFJlKHFlKGQsUDIpKSksbz10cyhWKT09ZSYmdHMoVik9PXRzKFkpLGg9KHRzKFYpPT1lJiZZPT1lKV4odHMoWSk9PWUmJlY9PWUpLEgmJiFGJiYoaHx8bykmJlN4dCh0LGQsZSxuKTtpZih0cyhlKSlmb3Iodz1uZXcgZXIoX1h0KHRzKGUpKSk7dy5lIT13LmkuZ2MoKTspZD11KGRyKHcpLDc5KSxWPVpkKGQpLFY9PWUmJnV3KGQpJiYoRj1qZShSZShxZShWLChUZSgpLCR5KSkpKSYmamUoUmUocWUoZCxQMikpKSxGJiZTeHQodCxkLGUsbikpfWZ1bmN0aW9uIG81bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnM7Zm9yKHdyKG4sIk1pbldpZHRoIGxheWVyaW5nIiwxKSxIPWUuYixTZT1lLmEsUnM9dShRKGUsKFRlKCksWjl0KSksMTkpLmEsZD11KFEoZSxKOXQpLDE5KS5hLHQuYj1YdCh5ZShRKGUseGYpKSksdC5kPXNzLEJ0PW5ldyBTKFNlKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KUx0PXUoSihCdCksMTApLEx0Lms9PShHbigpLERzKSYmKFJuPUx0Lm8uYix0LmQ9Yi5NYXRoLm1pbih0LmQsUm4pKTtmb3IodC5kPWIuTWF0aC5tYXgoMSx0LmQpLFdlPVNlLmMubGVuZ3RoLHQuYz1QdChUcixYciwyNSxXZSwxNSwxKSx0LmY9UHQoVHIsWHIsMjUsV2UsMTUsMSksdC5lPVB0KGlhLHZvLDI1LFdlLDE1LDEpLGs9MCx0LmE9MCxZdD1uZXcgUyhTZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylMdD11KEooWXQpLDEwKSxMdC5wPWsrKyx0LmNbTHQucF09RXJlKGpvKEx0KSksdC5mW0x0LnBdPUVyZShNcyhMdCkpLHQuZVtMdC5wXT1MdC5vLmIvdC5kLHQuYSs9dC5lW0x0LnBdO2Zvcih0LmIvPXQuZCx0LmEvPVdlLGNlPVRwbihTZSksWHMoU2UsRXd0KG5ldyBFcCh0KSkpLFk9c3MsVj12aSxoPW51bGwscGk9UnMsaHI9UnMsbz1kLHM9ZCxSczwwJiYocGk9dShZQ3QuYS56ZCgpLDE5KS5hLGhyPXUoWUN0LmIuemQoKSwxOSkuYSksZDwwJiYobz11KEtDdC5hLnpkKCksMTkpLmEscz11KEtDdC5iLnpkKCksMTkpLmEpLHpuPXBpO3puPD1ocjt6bisrKWZvcihyPW87cjw9cztyKyspUWU9Sm1uKHQsem4scixTZSxjZSksZ3Q9WHQoeWUoUWUuYSkpLEY9dShRZS5iLDE1KSx0dD1GLmdjKCksKGd0PFl8fGd0PT1ZJiZ0dDxWKSYmKFk9Z3QsVj10dCxoPUYpO2ZvcihNPWguS2MoKTtNLk9iKCk7KXtmb3IoQz11KE0uUGIoKSwxNSksdz1uZXcgQ2goZSksX3Q9Qy5LYygpO190Lk9iKCk7KUx0PXUoX3QuUGIoKSwxMCksa28oTHQsdyk7SC5jW0guYy5sZW5ndGhdPXd9QnN0KEgpLFNlLmM9UHQoWG4sSWUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gYzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbjtmb3IodC5iPWUsdC5hPXUoUShlLChUZSgpLFU5dCkpLDE5KS5hLHQuYz11KFEoZSxLOXQpLDE5KS5hLHQuYz09MCYmKHQuYz12aSksdHQ9bmV3IGhhKGUuYiwwKTt0dC5iPHR0LmQuZ2MoKTspe2ZvcihZPShRbih0dC5iPHR0LmQuZ2MoKSksdSh0dC5kLlhiKHR0LmM9dHQuYisrKSwyOSkpLGQ9bmV3IGxlLEM9LTEsQnQ9LTEsX3Q9bmV3IFMoWS5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLE4wKChHTSgpLG5ldyBhcihscih6MChMdCkuYS5LYygpLG5ldyB6KSkpKT49dC5hJiYocj1HbW4odCxMdCksQz1iLk1hdGgubWF4KEMsci5iKSxCdD1iLk1hdGgubWF4KEJ0LHIuZCksdWUoZCxuZXcgbGEoTHQscikpKTtmb3IoV2U9bmV3IGxlLGs9MDtrPEM7KytrKSRtKFdlLDAsKFFuKHR0LmI+MCksdHQuYS5YYih0dC5jPS0tdHQuYiksUWU9bmV3IENoKHQuYiksUm0odHQsUWUpLFFuKHR0LmI8dHQuZC5nYygpKSx0dC5kLlhiKHR0LmM9dHQuYisrKSxRZSkpO2ZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWlmKHM9dShKKGgpLDQ2KSxIPXUocy5iLDU3MSkuYSwhIUgpZm9yKEY9bmV3IFMoSCk7Ri5hPEYuYy5jLmxlbmd0aDspTT11KEooRiksMTApLFkzdCh0LE0sY0csV2UpO2ZvcihuPW5ldyBsZSx3PTA7dzxCdDsrK3cpdWUobiwoUm49bmV3IENoKHQuYiksUm0odHQsUm4pLFJuKSk7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksNDYpLFNlPXUocy5iLDU3MSkuYywhIVNlKWZvcihjZT1uZXcgUyhTZSk7Y2UuYTxjZS5jLmMubGVuZ3RoOylZdD11KEooY2UpLDEwKSxZM3QodCxZdCx1RyxuKX1mb3IoZ3Q9bmV3IGhhKGUuYiwwKTtndC5iPGd0LmQuZ2MoKTspVj0oUW4oZ3QuYjxndC5kLmdjKCkpLHUoZ3QuZC5YYihndC5jPWd0LmIrKyksMjkpKSxWLmEuYy5sZW5ndGg9PTAmJkVsKGd0KX1mdW5jdGlvbiB1NW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyO2lmKHdyKG4sIlNwbGluZSBlZGdlIHJvdXRpbmciLDEpLGUuYi5jLmxlbmd0aD09MCl7ZS5mLmE9MCxvcihuKTtyZXR1cm59THQ9WHQoeWUoUShlLChUZSgpLFo0KSkpKSxkPVh0KHllKFEoZSxSMikpKSxoPVh0KHllKFEoZSxRNCkpKSxndD11KFEoZSxLbHQpLDMzNiksV2U9Z3Q9PSh0RSgpLElTKSxTZT1YdCh5ZShRKGUsRzl0KSkpLHQuZD1lLHQuai5jPVB0KFhuLEllLDEsMCw1LDEpLHQuYS5jPVB0KFhuLEllLDEsMCw1LDEpLFl1KHQuayksdz11KEZlKGUuYiwwKSwyOSksQz1laih3LmEsKGhxKCksTk8pKSxWPXUoRmUoZS5iLGUuYi5jLmxlbmd0aC0xKSwyOSksTT1laihWLmEsTk8pLFk9bmV3IFMoZS5iKSx0dD1udWxsLGhyPTA7ZG97Zm9yKF90PVkuYTxZLmMuYy5sZW5ndGg/dShKKFkpLDI5KTpudWxsLFk0bih0LHR0LF90KSxFbW4odCksUWU9SUtlKE5vbih0JChSaShuZXcgVG4obnVsbCxuZXcgX24odC5pLDE2KSksbmV3IGpRKSxuZXcgUlEpKSksem49MCxCdD1ocixGPSF0dHx8QyYmdHQ9PXcsSD0hX3R8fE0mJl90PT1WLFFlPjA/KGs9MCx0dCYmKGsrPWQpLGsrPShRZS0xKSpoLF90JiYoays9ZCksV2UmJl90JiYoaz1iLk1hdGgubWF4KGssSDJuKF90LGgsTHQsU2UpKSksazxMdCYmIUYmJiFIJiYoem49KEx0LWspLzIsaz1MdCksQnQrPWspOiFGJiYhSCYmKEJ0Kz1MdCksX3QmJmZ4dChfdCxCdCksY2U9bmV3IFModC5pKTtjZS5hPGNlLmMuYy5sZW5ndGg7KVl0PXUoSihjZSksMTI4KSxZdC5hLmM9aHIsWXQuYS5iPUJ0LWhyLFl0LkY9em4sWXQucD0hdHQ7QXModC5hLHQuaSksaHI9QnQsX3QmJihocis9X3QuYy5hKSx0dD1fdCxGPUh9d2hpbGUoX3QpO2ZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89c2NuKHQsciksSnQociwoc2UoKSxYNCksbyksUm49aHZuKHQsciksSnQocixOMixSbik7ZS5mLmE9aHIsdC5kPW51bGwsb3Iobil9ZnVuY3Rpb24gTGhlKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtpZihZPXQuaSE9MCxfdD0hMSxndD1udWxsLG1sKHQuZSkpe2lmKEM9ZS5nYygpLEM+MCl7Zm9yKEY9QzwxMDA/bnVsbDpuZXcgU3AoQyksaz1uZXcgb3l0KGUpLFY9ay5nLGd0PVB0KFRyLFhyLDI1LEMsMTUsMSkscj0wLEJ0PW5ldyBLdihDKSxzPTA7czx0Lmk7KytzKXtkPXQuZ1tzXSxIPWQ7dDpmb3IoTHQ9MDtMdDwyOysrTHQpe2Zvcih3PUM7LS13Pj0wOylpZihIIT1udWxsP3lpKEgsVlt3XSk6R3QoSCk9PT1HdChWW3ddKSl7Z3QubGVuZ3RoPD1yJiYodHQ9Z3QsZ3Q9UHQoVHIsWHIsMjUsMipndC5sZW5ndGgsMTUsMSksSWModHQsMCxndCwwLHIpKSxndFtyKytdPXMsTXIoQnQsVlt3XSk7YnJlYWsgdH1pZihIPUgsR3QoSCk9PT1HdChkKSlicmVha319aWYoaz1CdCxWPUJ0LmcsQz1yLHI+Z3QubGVuZ3RoJiYodHQ9Z3QsZ3Q9UHQoVHIsWHIsMjUsciwxNSwxKSxJYyh0dCwwLGd0LDAscikpLHI+MCl7Zm9yKF90PSEwLG89MDtvPHI7KytvKUg9VltvXSxGPW9LdCh0LHUoSCw3MiksRik7Zm9yKGg9cjstLWg+PTA7KXI2KHQsZ3RbaF0pO2lmKHIhPUMpe2ZvcihzPUM7LS1zPj1yOylyNihrLHMpO3R0PWd0LGd0PVB0KFRyLFhyLDI1LHIsMTUsMSksSWModHQsMCxndCwwLHIpfWU9a319fWVsc2UgZm9yKGU9emZuKHQsZSkscz10Lmk7LS1zPj0wOyllLkhjKHQuZ1tzXSkmJihyNih0LHMpLF90PSEwKTtpZihfdCl7aWYoZ3QhPW51bGwpe2ZvcihuPWUuZ2MoKSxNPW49PTE/REModCw0LGUuS2MoKS5QYigpLG51bGwsZ3RbMF0sWSk6REModCw2LGUsZ3QsZ3RbMF0sWSksRj1uPDEwMD9udWxsOm5ldyBTcChuKSxzPWUuS2MoKTtzLk9iKCk7KUg9cy5QYigpLEY9aHZ0KHQsdShILDcyKSxGKTtGPyhGLkVpKE0pLEYuRmkoKSk6bWkodC5lLE0pfWVsc2V7Zm9yKEY9dFplKGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylIPXMuUGIoKSxGPWh2dCh0LHUoSCw3MiksRik7RiYmRi5GaSgpfXJldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gbDVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdDtmb3Iobj1uZXcgZXNlKGUpLG4uYXx8V3duKGUpLGs9S3ZuKGUpLHc9bmV3IEh2LHR0PW5ldyBZY2UsWT1uZXcgUyhlLmEpO1kuYTxZLmMuYy5sZW5ndGg7KWZvcihWPXUoSihZKSwxMCkscz1uZXcgYXIobHIoTXMoVikuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShMcihzKSwxNyksKHIuYy5pLms9PShHbigpLHhzKXx8ci5kLmkuaz09eHMpJiYoQz1aM24odCxyLGssdHQpLGxuKHcsdHN0KEMuZCksQy5hKSk7Zm9yKGg9bmV3IGxlLF90PXUoUShuLmMsKHNlKCksTnkpKSwyMSkuS2MoKTtfdC5PYigpOyl7c3dpdGNoKEx0PXUoX3QuUGIoKSw2MSksSD10dC5jW0x0LmddLEY9dHQuYltMdC5nXSxkPXR0LmFbTHQuZ10sbz1udWxsLGd0PW51bGwsTHQuZyl7Y2FzZSA0Om89bmV3IGloKHQuZC5hLEgsay5iLmEtdC5kLmEsRi1IKSxndD1uZXcgaWgodC5kLmEsSCxkLEYtSCksTnYoayxuZXcgJGUoby5jK28uYixvLmQpKSxOdihrLG5ldyAkZShvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDI6bz1uZXcgaWgoay5hLmEsSCx0LmMuYS1rLmEuYSxGLUgpLGd0PW5ldyBpaCh0LmMuYS1kLEgsZCxGLUgpLE52KGssbmV3ICRlKG8uYyxvLmQpKSxOdihrLG5ldyAkZShvLmMsby5kK28uYSkpO2JyZWFrO2Nhc2UgMTpvPW5ldyBpaChILHQuZC5iLEYtSCxrLmIuYi10LmQuYiksZ3Q9bmV3IGloKEgsdC5kLmIsRi1ILGQpLE52KGssbmV3ICRlKG8uYyxvLmQrby5hKSksTnYoayxuZXcgJGUoby5jK28uYixvLmQrby5hKSk7YnJlYWs7Y2FzZSAzOm89bmV3IGloKEgsay5hLmIsRi1ILHQuYy5iLWsuYS5iKSxndD1uZXcgaWgoSCx0LmMuYi1kLEYtSCxkKSxOdihrLG5ldyAkZShvLmMsby5kKSksTnYoayxuZXcgJGUoby5jK28uYixvLmQpKX1vJiYoTT1uZXcgbnF0LE0uZD1MdCxNLmI9byxNLmM9Z3QsTS5hPXMkKHUoQWkodyx0c3QoTHQpKSwyMSkpLGguY1toLmMubGVuZ3RoXT1NKX1yZXR1cm4gQXMobi5iLGgpLG4uZD1ndW4odjNuKGspKSxufWZ1bmN0aW9uIE1oZSh0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFk7aWYobi5wW2UucF09PW51bGwpe2Q9ITAsbi5wW2UucF09MCxoPWUsWT1uLm89PShFMSgpLGoyKT9UczpzcztkbyBzPXQuYi5lW2gucF0sbz1oLmMuYS5jLmxlbmd0aCxuLm89PWoyJiZzPjB8fG4ubz09ejEmJnM8by0xPyh3PW51bGwsaz1udWxsLG4ubz09ejE/dz11KEZlKGguYy5hLHMrMSksMTApOnc9dShGZShoLmMuYSxzLTEpLDEwKSxrPW4uZ1t3LnBdLE1oZSh0LGssbiksWT10LmUuYmcoWSxlLGgpLG4ualtlLnBdPT1lJiYobi5qW2UucF09bi5qW2sucF0pLG4ualtlLnBdPT1uLmpbay5wXT8oVj1WMyh0LmQsaCx3KSxuLm89PXoxPyhyPVh0KG4ucFtlLnBdKSxNPVh0KG4ucFtrLnBdKStYdChuLmRbdy5wXSktdy5kLmQtVi1oLmQuYS1oLm8uYi1YdChuLmRbaC5wXSksZD8oZD0hMSxuLnBbZS5wXT1iLk1hdGgubWluKE0sWSkpOm4ucFtlLnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKE0sWSkpKToocj1YdChuLnBbZS5wXSksTT1YdChuLnBbay5wXSkrWHQobi5kW3cucF0pK3cuby5iK3cuZC5hK1YraC5kLmQtWHQobi5kW2gucF0pLGQ/KGQ9ITEsbi5wW2UucF09Yi5NYXRoLm1heChNLFkpKTpuLnBbZS5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChNLFkpKSkpOihWPVh0KHllKFEodC5hLChUZSgpLEJ3KSkpKSxIPWVuZSh0LG4ualtlLnBdKSxDPWVuZSh0LG4ualtrLnBdKSxuLm89PXoxPyhGPVh0KG4ucFtlLnBdKStYdChuLmRbaC5wXSkraC5vLmIraC5kLmErVi0oWHQobi5wW2sucF0pK1h0KG4uZFt3LnBdKS13LmQuZCksalF0KEgsQyxGKSk6KEY9WHQobi5wW2UucF0pK1h0KG4uZFtoLnBdKS1oLmQuZC1YdChuLnBbay5wXSktWHQobi5kW3cucF0pLXcuby5iLXcuZC5hLVYsalF0KEgsQyxGKSkpKTpZPXQuZS5iZyhZLGUsaCksaD1uLmFbaC5wXTt3aGlsZShoIT1lKTtjS2UodC5lLGUpfX1mdW5jdGlvbiBoNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyO2ZvcihfdD1lLEx0PW5ldyBIdixCdD1uZXcgSHYsQz1VdihfdCxiOHQpLHI9bmV3IExYdCh0LG4sTHQsQnQpLFkwbihyLmEsci5iLHIuYyxyLmQsQyksdz0oU2U9THQuaSxTZXx8KEx0Lmk9bmV3IFczKEx0LEx0LmMpKSksUWU9dy5LYygpO1FlLk9iKCk7KWZvcihXZT11KFFlLlBiKCksMjAyKSxzPXUoQWkoTHQsV2UpLDIxKSxZPXMuS2MoKTtZLk9iKCk7KWlmKFY9WS5QYigpLFl0PXUodDQodC5kLFYpLDIwMiksWXQpZD0oIVdlLmUmJihXZS5lPW5ldyBDbihaaSxXZSwxMCw5KSksV2UuZSksTXIoZCxZdCk7ZWxzZSB0aHJvdyBoPU8wKF90LENkKSxGPUFkZStWK0xkZStoLEg9RitWRSxydChuZXcgYWQoSCkpO2ZvcihrPShjZT1CdC5pLGNlfHwoQnQuaT1uZXcgVzMoQnQsQnQuYykpKSx6bj1rLktjKCk7em4uT2IoKTspZm9yKFJuPXUoem4uUGIoKSwyMDIpLG89dShBaShCdCxSbiksMjEpLGd0PW8uS2MoKTtndC5PYigpOylpZih0dD1ndC5QYigpLFl0PXUodDQodC5kLHR0KSwyMDIpLFl0KU09KCFSbi5nJiYoUm4uZz1uZXcgQ24oWmksUm4sOSwxMCkpLFJuLmcpLE1yKE0sWXQpO2Vsc2UgdGhyb3cgaD1PMChfdCxDZCksRj1BZGUrdHQrTGRlK2gsSD1GK1ZFLHJ0KG5ldyBhZChIKSk7IW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IGhlKFppLG4sNiw2KSksbi5hKS5pPT0xJiYoaHI9dShTdCgoIW4uYSYmKG4uYT1uZXcgaGUoWmksbiw2LDYpKSxuLmEpLDApLDIwMiksIXNzdChocikmJiFhc3QoaHIpJiYoWiQoaHIsdShTdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDgyKSksSiQoaHIsdShTdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSkpKX1mdW5jdGlvbiBmNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuO2ZvcihfdD10LmEsQnQ9MCxZdD1fdC5sZW5ndGg7QnQ8WXQ7KytCdCl7Zm9yKEx0PV90W0J0XSxrPXZpLEM9dmksVj1uZXcgUyhMdC5lKTtWLmE8Vi5jLmMubGVuZ3RoOylGPXUoSihWKSwxMCksaD1GLmM/Um8oRi5jLmEsRiwwKTotMSxoPjA/KE09dShGZShGLmMuYSxoLTEpLDEwKSxXZT1WMyh0LmIsRixNKSx0dD1GLm4uYi1GLmQuZC0oTS5uLmIrTS5vLmIrTS5kLmErV2UpKTp0dD1GLm4uYi1GLmQuZCxrPWIuTWF0aC5taW4odHQsayksaDxGLmMuYS5jLmxlbmd0aC0xPyhNPXUoRmUoRi5jLmEsaCsxKSwxMCksV2U9VjModC5iLEYsTSksZ3Q9TS5uLmItTS5kLmQtKEYubi5iK0Yuby5iK0YuZC5hK1dlKSk6Z3Q9MipGLm4uYixDPWIuTWF0aC5taW4oZ3QsQyk7Zm9yKHc9dmksbz0hMSxzPXUoRmUoTHQuZSwwKSwxMCksUm49bmV3IFMocy5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KWZvcihRZT11KEooUm4pLDExKSxZPXMubi5iK1FlLm4uYitRZS5hLmIscj1uZXcgUyhRZS5lKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksY2U9bi5jLGU9Y2UuaS5uLmIrY2Uubi5iK2NlLmEuYi1ZLGIuTWF0aC5hYnMoZSk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyhlKTwoZTwwP2s6QykmJih3PWUsbz0hMCk7Zm9yKGQ9dShGZShMdC5lLEx0LmUuYy5sZW5ndGgtMSksMTApLFNlPW5ldyBTKGQuaik7U2UuYTxTZS5jLmMubGVuZ3RoOylmb3IoY2U9dShKKFNlKSwxMSksWT1kLm4uYitjZS5uLmIrY2UuYS5iLHI9bmV3IFMoY2UuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLFFlPW4uZCxlPVFlLmkubi5iK1FlLm4uYitRZS5hLmItWSxiLk1hdGguYWJzKGUpPGIuTWF0aC5hYnModykmJmIuTWF0aC5hYnMoZSk8KGU8MD9rOkMpJiYodz1lLG89ITApO2lmKG8mJnchPTApZm9yKEg9bmV3IFMoTHQuZSk7SC5hPEguYy5jLmxlbmd0aDspRj11KEooSCksMTApLEYubi5iKz13fX1mdW5jdGlvbiBJaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKGtsKHQuYSxlKSl7aWYoUzAodShKbih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IHFzKTtpZihrbCh0LmEsbikpe2lmKFMwKHUoSm4odC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBxcyk7aWYoa2wodC5lLGUpKXtpZihTMCh1KEpuKHQuZSxlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmUsZSxuZXcgcXMpO2lmKGtsKHQuZSxuKSl7aWYoUzAodShKbih0LmEsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5lLG4sbmV3IHFzKTtpZih0LmM9PShqMCgpLGZodCl8fCFWcyhlLChzZSgpLFRjKSl8fCFWcyhuLChzZSgpLFRjKSkpe2lmKHc9dShTMnQoR1p0KG1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5qLDE2KSksbmV3IElMKSksbmV3IElGKSksMTEpLEM9dShTMnQoR1p0KG1pdChSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IEhYKSksbmV3IEdYKSksMTEpLHcmJkMpe2lmKGQ9dy5pLGs9Qy5pLGQmJmQ9PWspe2ZvcihGPW5ldyBTKGQuaik7Ri5hPEYuYy5jLmxlbmd0aDspe2lmKE09dShKKEYpLDExKSxNPT13KXJldHVybiB4RSh0LG4sZSksLTE7aWYoTT09QylyZXR1cm4geEUodCxlLG4pLDF9cmV0dXJuIGR1KFRzdCh0LGUpLFRzdCh0LG4pKX1mb3IoVj10LmQsWT0wLHR0PVYubGVuZ3RoO1k8dHQ7KytZKXtpZihIPVZbWV0sSD09ZClyZXR1cm4geEUodCxuLGUpLC0xO2lmKEg9PWspcmV0dXJuIHhFKHQsZSxuKSwxfX1pZighVnMoZSwoc2UoKSxUYykpfHwhVnMobixUYykpcmV0dXJuIHM9VHN0KHQsZSksaD1Uc3QodCxuKSxzPmg/eEUodCxlLG4pOnhFKHQsbixlKSxzPGg/LTE6cz5oPzE6MH1yZXR1cm4gcj11KFEoZSwoc2UoKSxUYykpLDE5KS5hLG89dShRKG4sVGMpLDE5KS5hLHI+bz94RSh0LGUsbik6eEUodCxuLGUpLHI8bz8tMTpyPm8/MTowfWZ1bmN0aW9uIFR4dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQ7aWYoamUoUmUocWUoZSwoY2koKSwkVikpKSkpcmV0dXJuIHZuKCksdm4oKSxpbztpZihrPSghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pIT0wLE09WmduKGUpLEM9IU0uZGMoKSxrfHxDKXtpZihzPXUocWUoZSxDNyksMTQ5KSwhcyl0aHJvdyBydChuZXcgRjMoIlJlc29sdmVkIGFsZ29yaXRobSBpcyBub3Qgc2V0OyBhcHBseSBhIExheW91dEFsZ29yaXRobVJlc29sdmVyIGJlZm9yZSBjb21wdXRpbmcgbGF5b3V0LiIpKTtpZihMdD1XYnQocywodkUoKSxKVikpLEZpZShlKSwhayYmQyYmIUx0KXJldHVybiB2bigpLHZuKCksaW87aWYodz1uZXcgbGUsR3QocWUoZSxyNSkpPT09R3QoKCQwKCksWmcpKSYmKFdidChzLFFWKXx8V2J0KHMsWFYpKSlmb3IoSD13dWUodCxlKSxWPW5ldyBRaSxVYShWLCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7Vi5iIT0wOylGPXUoVi5iPT0wP251bGw6KFFuKFYuYiE9MCksY2goVixWLmEuYSkpLDMzKSxGaWUoRiksZ3Q9R3QocWUoRixyNSkpPT09R3QoWVMpLGd0fHxyMihGLFZTKSYmIW9tdChzLHFlKEYsQzcpKT8oZD1UeHQodCxGLG4sciksQXModyxkKSxibyhGLHI1LFlTKSxQdWUoRikpOlVhKFYsKCFGLmEmJihGLmE9bmV3IGhlKG5zLEYsMTAsMTEpKSxGLmEpKTtlbHNlIGZvcihIPSghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pLGg9bmV3IGVyKCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDMzKSxkPVR4dCh0LG8sbixyKSxBcyh3LGQpLFB1ZShvKTtmb3IodHQ9bmV3IFModyk7dHQuYTx0dC5jLmMubGVuZ3RoOylZPXUoSih0dCksNzkpLGJvKFksJFYsKEZuKCksITApKTtyZXR1cm4gU2huKGUscyxSYyhyLEgpKSxVd24odyksQyYmTHQ/TToodm4oKSx2bigpLGlvKX1lbHNlIHJldHVybiB2bigpLHZuKCksaW99ZnVuY3Rpb24gVEQodCxlLG4scixzLG8saCxkLHcpe3ZhciBrLEMsTSxGLEgsVixZO3N3aXRjaChIPW4sQz1uZXcgSDAodyksXzAoQywoR24oKSx4cykpLEp0KEMsKHNlKCksUVR0KSxoKSxKdChDLChUZSgpLG9zKSwob2EoKSxWYykpLFk9WHQoeWUodC5XZSh6eSkpKSxKdChDLHp5LFkpLE09bmV3IE1jLFVvKE0sQyksZSE9SDEmJmUhPXlifHwocj49MD9IPUp4KGQpOkg9SEkoSngoZCkpLHQuWWUodjcsSCkpLGs9bmV3IFRhLEY9ITEsdC5YZShQdyk/KEYydChrLHUodC5XZShQdyksOCkpLEY9ITApOmpYZShrLGguYS8yLGguYi8yKSxILmcpe2Nhc2UgNDpKdChDLGN1LChoaCgpLGZiKSksSnQoQyxIRywodTIoKSxHNCkpLEMuby5iPWguYixZPDAmJihDLm8uYT0tWSksRnMoTSwoYmUoKSxIbikpLEZ8fChrLmE9aC5hKSxrLmEtPWguYTticmVhaztjYXNlIDI6SnQoQyxjdSwoaGgoKSxGeSkpLEp0KEMsSEcsKHUyKCksdTcpKSxDLm8uYj1oLmIsWTwwJiYoQy5vLmE9LVkpLEZzKE0sKGJlKCksQm4pKSxGfHwoay5hPTApO2JyZWFrO2Nhc2UgMTpKdChDLE8yLChCMCgpLFU0KSksQy5vLmE9aC5hLFk8MCYmKEMuby5iPS1ZKSxGcyhNLChiZSgpLG1yKSksRnx8KGsuYj1oLmIpLGsuYi09aC5iO2JyZWFrO2Nhc2UgMzpKdChDLE8yLChCMCgpLEE2KSksQy5vLmE9aC5hLFk8MCYmKEMuby5iPS1ZKSxGcyhNLChiZSgpLE5uKSksRnx8KGsuYj0wKX1pZihGMnQoTS5uLGspLEp0KEMsUHcsayksZT09RzJ8fGU9PWgwfHxlPT1WYyl7aWYoVj0wLGU9PUcyJiZ0LlhlKFdnKSlzd2l0Y2goSC5nKXtjYXNlIDE6Y2FzZSAyOlY9dSh0LldlKFdnKSwxOSkuYTticmVhaztjYXNlIDM6Y2FzZSA0OlY9LXUodC5XZShXZyksMTkpLmF9ZWxzZSBzd2l0Y2goSC5nKXtjYXNlIDQ6Y2FzZSAyOlY9by5iLGU9PWgwJiYoVi89cy5iKTticmVhaztjYXNlIDE6Y2FzZSAzOlY9by5hLGU9PWgwJiYoVi89cy5hKX1KdChDLER3LFYpfXJldHVybiBKdChDLG9jLEgpLEN9ZnVuY3Rpb24gZDVuKHQpe3ZhciBlLG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZTtpZihuPVh0KHllKFEodC5hLmosKFRlKCksUjl0KSkpKSxuPC0xfHwhdC5hLml8fER4KHUoUSh0LmEubyxvcyksOTgpKXx8WW8odC5hLm8sKGJlKCksSG4pKS5nYygpPDImJllvKHQuYS5vLEJuKS5nYygpPDIpcmV0dXJuITA7aWYodC5hLmMuUmYoKSlyZXR1cm4hMTtmb3IoWXQ9MCxCdD0wLF90PW5ldyBsZSx3PXQuYS5lLGs9MCxDPXcubGVuZ3RoO2s8QzsrK2spe2ZvcihkPXdba10sRj1kLEg9MCxZPUYubGVuZ3RoO0g8WTsrK0gpe2lmKE09RltIXSxNLms9PShHbigpLEhjKSl7X3QuY1tfdC5jLmxlbmd0aF09TTtjb250aW51ZX1mb3Iocj10LmJbTS5jLnBdW00ucF0sTS5rPT14cz8oci5iPTEsdShRKE0sKHNlKCksX2kpKSwxMSkuaj09KGJlKCksSG4pJiYoQnQrPXIuYSkpOihRZT1ZbyhNLChiZSgpLEJuKSksUWUuZGMoKXx8IUpldChRZSxuZXcgc1EpP3IuYz0xOihzPVlvKE0sSG4pLChzLmRjKCl8fCFKZXQocyxuZXcgaVEpKSYmKFl0Kz1yLmEpKSksaD1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShMcihoKSwxNyksWXQrPXIuYyxCdCs9ci5iLFdlPW8uZC5pLFRtdCh0LHIsV2UpO2ZvcihndD1MMShjdChvdChCMSwxKSxJZSwyMCwwLFtZbyhNLChiZSgpLE5uKSksWW8oTSxtcildKSksU2U9bmV3IGFyKG5ldyB3MnQoZ3QuYS5sZW5ndGgsZ3QuYSkpO3pyKFNlKTspY2U9dShMcihTZSksMTEpLEx0PXUoUShjZSwoc2UoKSxadSkpLDEwKSxMdCYmKFl0Kz1yLmMsQnQrPXIuYixUbXQodCxyLEx0KSl9Zm9yKFY9bmV3IFMoX3QpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihNPXUoSihWKSwxMCkscj10LmJbTS5jLnBdW00ucF0saD1uZXcgYXIobHIoTXMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShMcihoKSwxNyksWXQrPXIuYyxCdCs9ci5iLFdlPW8uZC5pLFRtdCh0LHIsV2UpO190LmM9UHQoWG4sSWUsMSwwLDUsMSl9cmV0dXJuIGU9WXQrQnQsdHQ9ZT09MD9zczooWXQtQnQpL2UsdHQ+PW59ZnVuY3Rpb24gZzVuKCl7YWJ0KCk7ZnVuY3Rpb24gdChyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24obyl7dmFyIGg9by5kYXRhO3N3aXRjaChoLmNtZCl7Y2FzZSJhbGdvcml0aG1zIjp2YXIgZD1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmIpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSJjYXRlZ29yaWVzIjp2YXIgdz1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTp3fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgaz1nM3QoKHZuKCksbmV3IFQobmV3IGIxKFRiLmQpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTprfSk7YnJlYWs7Y2FzZSJyZWdpc3RlciI6eDNuKGguYWxnb3JpdGhtcyksci5wb3N0TWVzc2FnZSh7aWQ6aC5pZH0pO2JyZWFrO2Nhc2UibGF5b3V0IjpleW4oaC5ncmFwaCxoLmxheW91dE9wdGlvbnN8fHt9LGgub3B0aW9uc3x8e30pLHIucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpoLmdyYXBofSk7YnJlYWt9fSx0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihvKXt0cnl7cy5kaXNwYXRjaChvKX1jYXRjaChoKXtyLnBvc3RNZXNzYWdlKHtpZDpvLmRhdGEuaWQsZXJyb3I6aH0pfX19ZnVuY3Rpb24gZShyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2hlcj1uZXcgdCh7cG9zdE1lc3NhZ2U6ZnVuY3Rpb24obyl7cy5vbm1lc3NhZ2Uoe2RhdGE6b30pfX0pLHRoaXMucG9zdE1lc3NhZ2U9ZnVuY3Rpb24obyl7c2V0VGltZW91dChmdW5jdGlvbigpe3MuZGlzcGF0Y2hlci5zYXZlRGlzcGF0Y2goe2RhdGE6b30pfSwwKX19aWYodHlwZW9mIGRvY3VtZW50PT09cG90JiZ0eXBlb2Ygc2VsZiE9PXBvdCl7dmFyIG49bmV3IHQoc2VsZik7c2VsZi5vbm1lc3NhZ2U9bi5zYXZlRGlzcGF0Y2h9ZWxzZSB0eXBlb2YgcCE9PXBvdCYmcC5leHBvcnRzJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz17ZGVmYXVsdDplLFdvcmtlcjplfSl9ZnVuY3Rpb24gcDVuKHQpe3QuTnx8KHQuTj0hMCx0LmI9aWModCwwKSxlcyh0LmIsMCksZXModC5iLDEpLGVzKHQuYiwyKSx0LmJiPWljKHQsMSksZXModC5iYiwwKSxlcyh0LmJiLDEpLHQuZmI9aWModCwyKSxlcyh0LmZiLDMpLGVzKHQuZmIsNCksUGkodC5mYiw1KSx0LnFiPWljKHQsMyksZXModC5xYiwwKSxQaSh0LnFiLDEpLFBpKHQucWIsMiksZXModC5xYiwzKSxlcyh0LnFiLDQpLFBpKHQucWIsNSksZXModC5xYiw2KSx0LmE9YWkodCw0KSx0LmM9YWkodCw1KSx0LmQ9YWkodCw2KSx0LmU9YWkodCw3KSx0LmY9YWkodCw4KSx0Lmc9YWkodCw5KSx0Lmk9YWkodCwxMCksdC5qPWFpKHQsMTEpLHQuaz1haSh0LDEyKSx0Lm49YWkodCwxMyksdC5vPWFpKHQsMTQpLHQucD1haSh0LDE1KSx0LnE9YWkodCwxNiksdC5zPWFpKHQsMTcpLHQucj1haSh0LDE4KSx0LnQ9YWkodCwxOSksdC51PWFpKHQsMjApLHQudj1haSh0LDIxKSx0Lnc9YWkodCwyMiksdC5CPWFpKHQsMjMpLHQuQT1haSh0LDI0KSx0LkM9YWkodCwyNSksdC5EPWFpKHQsMjYpLHQuRj1haSh0LDI3KSx0Lkc9YWkodCwyOCksdC5IPWFpKHQsMjkpLHQuSj1haSh0LDMwKSx0Lkk9YWkodCwzMSksdC5LPWFpKHQsMzIpLHQuTT1haSh0LDMzKSx0Lkw9YWkodCwzNCksdC5QPWFpKHQsMzUpLHQuUT1haSh0LDM2KSx0LlI9YWkodCwzNyksdC5TPWFpKHQsMzgpLHQuVD1haSh0LDM5KSx0LlU9YWkodCw0MCksdC5WPWFpKHQsNDEpLHQuWD1haSh0LDQyKSx0Llc9YWkodCw0MyksdC5ZPWFpKHQsNDQpLHQuWj1haSh0LDQ1KSx0LiQ9YWkodCw0NiksdC5fPWFpKHQsNDcpLHQuYWI9YWkodCw0OCksdC5jYj1haSh0LDQ5KSx0LmRiPWFpKHQsNTApLHQuZWI9YWkodCw1MSksdC5nYj1haSh0LDUyKSx0LmhiPWFpKHQsNTMpLHQuaWI9YWkodCw1NCksdC5qYj1haSh0LDU1KSx0LmtiPWFpKHQsNTYpLHQubGI9YWkodCw1NyksdC5tYj1haSh0LDU4KSx0Lm5iPWFpKHQsNTkpLHQub2I9YWkodCw2MCksdC5wYj1haSh0LDYxKSl9ZnVuY3Rpb24gYjVuKHQsZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdDtpZihMdD0wLGUuZi5hPT0wKWZvcih0dD1uZXcgUyh0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KVY9dShKKHR0KSwxMCksTHQ9Yi5NYXRoLm1heChMdCxWLm4uYStWLm8uYStWLmQuYyk7ZWxzZSBMdD1lLmYuYS1lLmMuYTtmb3IoTHQtPWUuYy5hLFk9bmV3IFModCk7WS5hPFkuYy5jLmxlbmd0aDspe3N3aXRjaChWPXUoSihZKSwxMCksQTkoVi5uLEx0LVYuby5hKSxMdnQoVi5mKSxrc2UoViksKFYucT9WLnE6KHZuKCksdm4oKSxhMCkpLl9iKChUZSgpLEh5KSkmJkE5KHUoUShWLEh5KSw4KSxMdC1WLm8uYSksdShRKFYsTGQpLDI0OCkuZyl7Y2FzZSAxOkp0KFYsTGQsKFFkKCksek8pKTticmVhaztjYXNlIDI6SnQoVixMZCwoUWQoKSwkTykpfWZvcihndD1WLm8sQnQ9bmV3IFMoVi5qKTtCdC5hPEJ0LmMuYy5sZW5ndGg7KXtmb3IoX3Q9dShKKEJ0KSwxMSksQTkoX3QubixndC5hLV90Lm8uYSksQTkoX3QuYSxfdC5vLmEpLEZzKF90LGJuZShfdC5qKSksaD11KFEoX3QsV2cpLDE5KSxoJiZKdChfdCxXZyxkZSgtaC5hKSksbz1uZXcgUyhfdC5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDE3KSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbi5hPUx0LW4uYTtpZihrPXUoUShzLF9vKSw3NCksaylmb3Iodz1laShrLDApO3cuYiE9dy5kLmM7KWQ9dSh0aSh3KSw4KSxkLmE9THQtZC5hO2ZvcihGPW5ldyBTKHMuYik7Ri5hPEYuYy5jLmxlbmd0aDspQz11KEooRiksNzApLEE5KEMubixMdC1DLm8uYSl9Zm9yKEg9bmV3IFMoX3QuZik7SC5hPEguYy5jLmxlbmd0aDspQz11KEooSCksNzApLEE5KEMubixfdC5vLmEtQy5vLmEpfWZvcihWLms9PShHbigpLHhzKSYmKEp0KFYsKHNlKCksb2MpLGJuZSh1KFEoVixvYyksNjEpKSksazBuKFYpKSxNPW5ldyBTKFYuYik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksNzApLGtzZShDKSxBOShDLm4sZ3QuYS1DLm8uYSl9fWZ1bmN0aW9uIHY1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7aWYoTHQ9MCxlLmYuYj09MClmb3IodHQ9bmV3IFModCk7dHQuYTx0dC5jLmMubGVuZ3RoOylWPXUoSih0dCksMTApLEx0PWIuTWF0aC5tYXgoTHQsVi5uLmIrVi5vLmIrVi5kLmEpO2Vsc2UgTHQ9ZS5mLmItZS5jLmI7Zm9yKEx0LT1lLmMuYixZPW5ldyBTKHQpO1kuYTxZLmMuYy5sZW5ndGg7KXtzd2l0Y2goVj11KEooWSksMTApLFM5KFYubixMdC1WLm8uYiksTXZ0KFYuZiksRXNlKFYpLChWLnE/Vi5xOih2bigpLHZuKCksYTApKS5fYigoVGUoKSxIeSkpJiZTOSh1KFEoVixIeSksOCksTHQtVi5vLmIpLHUoUShWLExkKSwyNDgpLmcpe2Nhc2UgMzpKdChWLExkLChRZCgpLE5WKSk7YnJlYWs7Y2FzZSA0Okp0KFYsTGQsKFFkKCksRlYpKX1mb3IoZ3Q9Vi5vLEJ0PW5ldyBTKFYuaik7QnQuYTxCdC5jLmMubGVuZ3RoOyl7Zm9yKF90PXUoSihCdCksMTEpLFM5KF90Lm4sZ3QuYi1fdC5vLmIpLFM5KF90LmEsX3Quby5iKSxGcyhfdCx2bmUoX3QuaikpLGg9dShRKF90LFdnKSwxOSksaCYmSnQoX3QsV2csZGUoLWguYSkpLG89bmV3IFMoX3QuZyk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwxNykscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG4uYj1MdC1uLmI7aWYoaz11KFEocyxfbyksNzQpLGspZm9yKHc9ZWkoaywwKTt3LmIhPXcuZC5jOylkPXUodGkodyksOCksZC5iPUx0LWQuYjtmb3IoRj1uZXcgUyhzLmIpO0YuYTxGLmMuYy5sZW5ndGg7KUM9dShKKEYpLDcwKSxTOShDLm4sTHQtQy5vLmIpfWZvcihIPW5ldyBTKF90LmYpO0guYTxILmMuYy5sZW5ndGg7KUM9dShKKEgpLDcwKSxTOShDLm4sX3Quby5iLUMuby5iKX1mb3IoVi5rPT0oR24oKSx4cykmJihKdChWLChzZSgpLG9jKSx2bmUodShRKFYsb2MpLDYxKSkpLEd1bihWKSksTT1uZXcgUyhWLmIpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDcwKSxFc2UoQyksUzkoQy5uLGd0LmItQy5vLmIpfX1mdW5jdGlvbiB3NW4odCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEg7Zm9yKE09ITEsaz10KzEsQz0oQW4odCxlLmMubGVuZ3RoKSx1KGUuY1t0XSwyMDApKSxoPUMuYSxkPW51bGwsbz0wO288Qy5hLmMubGVuZ3RoO28rKylpZihzPShBbihvLGguYy5sZW5ndGgpLHUoaC5jW29dLDE4NykpLCFzLmMpe2lmKHMuYi5jLmxlbmd0aD09MCl7cWQoKSx0RChDLHMpLC0tbyxNPSEwO2NvbnRpbnVlfWlmKHMua3x8KGQmJlZ6KGQpLGQ9bmV3IFB3dChkP2QuZStkLmQrcjowLEMuZixyKSxZSShzLGQuZStkLmQsQy5mKSx1ZShDLmQsZCksY3l0KGQscykscy5rPSEwKSx3PW51bGwsdz0oSD1udWxsLG88Qy5hLmMubGVuZ3RoLTE/SD11KEZlKEMuYSxvKzEpLDE4Nyk6azxlLmMubGVuZ3RoJiYoQW4oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwyMDApKS5hLmMubGVuZ3RoIT0wJiYoSD11KEZlKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEsMCksMTg3KSksSCksRj0hMSx3JiYoRj0heWkody5qLEMpKSx3KXtpZih3LmIuYy5sZW5ndGg9PTApe3REKEMsdyk7YnJlYWt9ZWxzZSBkSShzLG4tcy5zKSxWeihzLnEpLE09TXxFMG4oQyxzLHcsbixyKTtpZih3LmIuYy5sZW5ndGg9PTApZm9yKHREKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLHcpLHc9bnVsbDtlLmMubGVuZ3RoPmsmJihBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEuYy5sZW5ndGg9PTA7KXZ1KGUsKEFuKGssZS5jLmxlbmd0aCksZS5jW2tdKSk7aWYoIXcpey0tbztjb250aW51ZX1pZihubW4oZSxDLHMsdyxGLG4sayxyKSl7TT0hMDtjb250aW51ZX1pZihGKXtpZih1eW4oZSxDLHMsdyxuLGsscikpe009ITA7Y29udGludWV9ZWxzZSBpZih6eXQoQyxzKSl7cy5jPSEwLE09ITA7Y29udGludWV9fWVsc2UgaWYoenl0KEMscykpe3MuYz0hMCxNPSEwO2NvbnRpbnVlfWlmKE0pY29udGludWV9aWYoenl0KEMscykpe3MuYz0hMCxNPSEwLHcmJih3Lms9ITEpO2NvbnRpbnVlfWVsc2UgVnoocy5xKX1yZXR1cm4gTX1mdW5jdGlvbiBNYXQodCxlLG4scixzLG8saCl7dmFyIGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzO2ZvcihZPTAsUm49MCxrPW5ldyBTKHQuYik7ay5hPGsuYy5jLmxlbmd0aDspdz11KEooayksMTU3KSx3LmMmJmFoZSh3LmMpLFk9Yi5NYXRoLm1heChZLEZ1KHcpKSxSbis9RnUodykqeGwodyk7Zm9yKHR0PVJuL3QuYi5jLmxlbmd0aCxRZT1OMW4odC5iLHR0KSxSbis9dC5iLmMubGVuZ3RoKlFlLFk9Yi5NYXRoLm1heChZLGIuTWF0aC5zcXJ0KFJuKmgpKStuLmIscGk9bi5iLFJzPW4uZCxIPTAsTT1uLmIrbi5jLFdlPW5ldyBRaSxuaShXZSxkZSgwKSksY2U9bmV3IFFpLEM9bmV3IGhhKHQuYiwwKSxWPW51bGwsZD1uZXcgbGU7Qy5iPEMuZC5nYygpOyl3PShRbihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksaHI9RnUodyksRj14bCh3KSxwaStocj5ZJiYobyYmKEtiKGNlLEgpLEtiKFdlLGRlKEMuYi0xKSksdWUodC5kLFYpLGQuYz1QdChYbixJZSwxLDAsNSwxKSkscGk9bi5iLFJzKz1IK2UsSD0wLE09Yi5NYXRoLm1heChNLG4uYituLmMraHIpKSxkLmNbZC5jLmxlbmd0aF09dyxLaWUodyxwaSxScyksTT1iLk1hdGgubWF4KE0scGkraHIrbi5jKSxIPWIuTWF0aC5tYXgoSCxGKSxwaSs9aHIrZSxWPXc7aWYoQXModC5hLGQpLHVlKHQuZCx1KEZlKGQsZC5jLmxlbmd0aC0xKSwxNTcpKSxNPWIuTWF0aC5tYXgoTSxyKSx6bj1ScytIK24uYSx6bjxzJiYoSCs9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsQz1uZXcgaGEodC5iLDApLEtiKFdlLGRlKHQuYi5jLmxlbmd0aCkpLFNlPWVpKFdlLDApLEx0PXUodGkoU2UpLDE5KS5hLEtiKGNlLEgpLFl0PWVpKGNlLDApLEJ0PTA7Qy5iPEMuZC5nYygpOylDLmI9PUx0JiYocGk9bi5iLEJ0PVh0KHllKHRpKFl0KSkpLEx0PXUodGkoU2UpLDE5KS5hKSx3PShRbihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksQWllKHcsQnQpLEMuYj09THQmJihndD1NLXBpLW4uYyxfdD1GdSh3KSxTaWUodyxndCksUXJlKHcsKGd0LV90KS8yLDApKSxwaSs9RnUodykrZTtyZXR1cm4gbmV3ICRlKE0sem4pfWZ1bmN0aW9uIG01bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChlPXQuYyxvPW51bGwsZSl7Y2FzZSA2OnJldHVybiB0LlZsKCk7Y2FzZSAxMzpyZXR1cm4gdC5XbCgpO2Nhc2UgMjM6cmV0dXJuIHQuTmwoKTtjYXNlIDIyOnJldHVybiB0LlNsKCk7Y2FzZSAxODpyZXR1cm4gdC5QbCgpO2Nhc2UgODpmaSh0KSxvPShnaSgpLHhMdCk7YnJlYWs7Y2FzZSA5OnJldHVybiB0LnZsKCEwKTtjYXNlIDE5OnJldHVybiB0LndsKCk7Y2FzZSAxMDpzd2l0Y2godC5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpyZXR1cm4gbz10LnVsKHQuYSksZmkodCksbztjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDpuPXQudGwoKSxuPFlhP289KGdpKCksZ2koKSxuZXcgVmQoMCxuKSk6bz1UWXQocjN0KG4pKTticmVhaztjYXNlIDk5OnJldHVybiB0LkZsKCk7Y2FzZSA2NzpyZXR1cm4gdC5BbCgpO2Nhc2UgMTA1OnJldHVybiB0LklsKCk7Y2FzZSA3MzpyZXR1cm4gdC5CbCgpO2Nhc2UgMTAzOnJldHVybiB0LkdsKCk7Y2FzZSA4ODpyZXR1cm4gdC5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LnhsKCk7Y2FzZSA4MDpjYXNlIDExMjppZihvPW41dCh0LHQuYSksIW8pdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFFjdCkpKSk7YnJlYWs7ZGVmYXVsdDpvPUhLdCh0LmEpfWZpKHQpO2JyZWFrO2Nhc2UgMDppZih0LmE9PTkzfHx0LmE9PTEyM3x8dC5hPT0xMjUpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEM4dCkpKSk7bz1IS3QodC5hKSxyPXQuYSxmaSh0KSwociY2NDUxMik9PU9EJiZ0LmM9PTAmJih0LmEmNjQ1MTIpPT01NjMyMCYmKHM9UHQobWgsdmQsMjUsMiwxNSwxKSxzWzBdPXImbXMsc1sxXT10LmEmbXMsbz1SbnQoVFl0KEFoKHMsMCxzLmxlbmd0aCkpLDApLGZpKHQpKTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxDOHQpKSkpfXJldHVybiBvfWZ1bmN0aW9uIHk1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7aWYocj1uZXcgbGUscz12aSxvPXZpLGg9dmksbilmb3Iocz10LmYuYSxZPW5ldyBTKGUuaik7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDExKSx3PW5ldyBTKFYuZyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLGQuYS5iIT0wJiYoQz11KGFudChkLmEpLDgpLEMuYTxzJiYobz1zLUMuYSxoPXZpLHIuYz1QdChYbixJZSwxLDAsNSwxKSxzPUMuYSksQy5hPD1zJiYoci5jW3IuYy5sZW5ndGhdPWQsZC5hLmI+MSYmKGg9Yi5NYXRoLm1pbihoLGIuTWF0aC5hYnModShRZihkLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihZPW5ldyBTKGUuaik7WS5hPFkuYy5jLmxlbmd0aDspZm9yKFY9dShKKFkpLDExKSx3PW5ldyBTKFYuZSk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLGQuYS5iIT0wJiYoRj11KHZqKGQuYSksOCksRi5hPnMmJihvPUYuYS1zLGg9dmksci5jPVB0KFhuLEllLDEsMCw1LDEpLHM9Ri5hKSxGLmE+PXMmJihyLmNbci5jLmxlbmd0aF09ZCxkLmEuYj4xJiYoaD1iLk1hdGgubWluKGgsYi5NYXRoLmFicyh1KFFmKGQuYSxkLmEuYi0yKSw4KS5iLUYuYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+ZS5vLmEvMiYmaD5lLm8uYi8yKXtmb3IoSD1uZXcgTWMsVW8oSCxlKSxGcyhILChiZSgpLE5uKSksSC5uLmE9ZS5vLmEvMixndD1uZXcgTWMsVW8oZ3QsZSksRnMoZ3QsbXIpLGd0Lm4uYT1lLm8uYS8yLGd0Lm4uYj1lLm8uYix3PW5ldyBTKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDE3KSxuPyhrPXUoa250KGQuYSksOCksdHQ9ZC5hLmI9PTA/VDEoZC5kKTp1KGFudChkLmEpLDgpLHR0LmI+PWsuYj9EYShkLGd0KTpEYShkLEgpKTooaz11KGZ0bihkLmEpLDgpLHR0PWQuYS5iPT0wP1QxKGQuYyk6dSh2aihkLmEpLDgpLHR0LmI+PWsuYj9zYShkLGd0KTpzYShkLEgpKSxNPXUoUShkLChUZSgpLF9vKSksNzQpLE0mJnJ5KE0saywhMCk7ZS5uLmE9cy1lLm8uYS8yfX1mdW5jdGlvbiB4NW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoO2lmKFJuPW51bGwsaHI9ZSx6bj1QWnQodCxJWnQobiksaHIpLHFDKHpuLE8wKGhyLENkKSkscGk9dSh0NCh0LmcsczYoRDAoaHIsamN0KSkpLDMzKSxGPUQwKGhyLCJzb3VyY2VQb3J0Iikscj1udWxsLEYmJihyPXM2KEYpKSxScz11KHQ0KHQuaixyKSwxMTgpLCFwaSl0aHJvdyBkPW9FKGhyKSxWPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitkLFk9VitWRSxydChuZXcgYWQoWSkpO2lmKFJzJiYhZmQoazEoUnMpLHBpKSl0aHJvdyB3PU8wKGhyLENkKSx0dD0iVGhlIHNvdXJjZSBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrdyxndD10dCtWRSxydChuZXcgYWQoZ3QpKTtpZihXZT0oIXpuLmImJih6bi5iPW5ldyBDbihicix6biw0LDcpKSx6bi5iKSxvPW51bGwsUnM/bz1SczpvPXBpLE1yKFdlLG8pLFhsPXUodDQodC5nLHM2KEQwKGhyLEU4dCkpKSwzMyksSD1EMChociwidGFyZ2V0UG9ydCIpLHM9bnVsbCxIJiYocz1zNihIKSksS2g9dSh0NCh0LmoscyksMTE4KSwhWGwpdGhyb3cgTT1vRShociksTHQ9IkFuIGVkZ2UgbXVzdCBoYXZlIGEgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICciK00sX3Q9THQrVkUscnQobmV3IGFkKF90KSk7aWYoS2gmJiFmZChrMShLaCksWGwpKXRocm93IGs9TzAoaHIsQ2QpLEJ0PSJUaGUgdGFyZ2V0IHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitrLFl0PUJ0K1ZFLHJ0KG5ldyBhZChZdCkpO2lmKFFlPSghem4uYyYmKHpuLmM9bmV3IENuKGJyLHpuLDUsOCkpLHpuLmMpLGg9bnVsbCxLaD9oPUtoOmg9WGwsTXIoUWUsaCksKCF6bi5iJiYoem4uYj1uZXcgQ24oYnIsem4sNCw3KSksem4uYikuaT09MHx8KCF6bi5jJiYoem4uYz1uZXcgQ24oYnIsem4sNSw4KSksem4uYykuaT09MCl0aHJvdyBDPU8wKGhyLENkKSxjZT1TZGUrQyxTZT1jZStWRSxydChuZXcgYWQoU2UpKTtyZXR1cm4gSnooaHIsem4pLGhibihocix6biksUm49d2l0KHQsaHIsem4pLFJufWZ1bmN0aW9uIERoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm47cmV0dXJuIE09VG1uKGd1KHQsKGJlKCksRzEpKSxlKSxWPWg0KGd1KHQsU2YpLGUpLEJ0PWg0KGd1KHQsV2wpLGUpLFdlPVV6KGd1KHQscWgpLGUpLEY9VXooZ3UodCx2aCksZSksTHQ9aDQoZ3UodCxBZiksZSksWT1oNChndSh0LHRsKSxlKSxjZT1oNChndSh0LEtsKSxlKSxZdD1oNChndSh0LHdoKSxlKSxRZT1VeihndSh0LHV1KSxlKSxndD1oNChndSh0LF91KSxlKSxfdD1oNChndSh0LGVsKSxlKSxTZT1oNChndSh0LEN1KSxlKSxSbj1VeihndSh0LFN1KSxlKSxIPVV6KGd1KHQscXUpLGUpLHR0PWg0KGd1KHQsVWMpLGUpLG49cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW0x0LmEsV2UuYSxjZS5hLFJuLmFdKSkscj1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbVi5hLE0uYSxCdC5hLHR0LmFdKSkscz1ndC5hLG89cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW1kuYSxGLmEsWXQuYSxILmFdKSksaz1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbTHQuYixWLmIsWS5iLF90LmJdKSksdz1yNChjdChvdChpYSwxKSx2bywyNSwxNSxbV2UuYixNLmIsRi5iLHR0LmJdKSksQz1RZS5iLGQ9cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW2NlLmIsQnQuYixZdC5iLFNlLmJdKSksTWcoZ3UodCxHMSksbitzLGsrQyksTWcoZ3UodCxVYyksbitzLGsrQyksTWcoZ3UodCxTZiksbitzLDApLE1nKGd1KHQsV2wpLG4rcyxrK0MrdyksTWcoZ3UodCxxaCksMCxrK0MpLE1nKGd1KHQsdmgpLG4rcytyLGsrQyksTWcoZ3UodCx0bCksbitzK3IsMCksTWcoZ3UodCxLbCksMCxrK0MrdyksTWcoZ3UodCx3aCksbitzK3IsaytDK3cpLE1nKGd1KHQsdXUpLDAsayksTWcoZ3UodCxfdSksbiwwKSxNZyhndSh0LEN1KSwwLGsrQyt3KSxNZyhndSh0LHF1KSxuK3MrciwwKSxoPW5ldyBUYSxoLmE9cjQoY3Qob3QoaWEsMSksdm8sMjUsMTUsW24rcitzK28sUWUuYSxfdC5hLFNlLmFdKSksaC5iPXI0KGN0KG90KGlhLDEpLHZvLDI1LDE1LFtrK3crQytkLGd0LmIsUm4uYixILmJdKSksaH1mdW5jdGlvbiBrNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2ZvcihZPW5ldyBsZSxGPW5ldyBTKHQuZC5iKTtGLmE8Ri5jLmMubGVuZ3RoOylmb3IoTT11KEooRiksMjkpLFY9bmV3IFMoTS5hKTtWLmE8Vi5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKFYpLDEwKSxzPXUoSm4odC5mLEgpLDU3KSx3PW5ldyBhcihscihNcyhIKS5hLktjKCksbmV3IHopKTt6cih3KTspaWYoaD11KExyKHcpLDE3KSxyPWVpKGguYSwwKSxrPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IoZT11KHRpKHIpLDgpLG49bnVsbCxoLmMuaj09KGJlKCksTm4pJiYodHQ9bmV3IHhfKGUsbmV3ICRlKGUuYSxzLmQuZCkscyxoKSx0dC5mLmE9ITAsdHQuYT1oLmMsWS5jW1kuYy5sZW5ndGhdPXR0KSxoLmMuaj09bXImJih0dD1uZXcgeF8oZSxuZXcgJGUoZS5hLHMuZC5kK3MuZC5hKSxzLGgpLHR0LmYuZD0hMCx0dC5hPWguYyxZLmNbWS5jLmxlbmd0aF09dHQpO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxqbXQoZS5iLG4uYil8fChDPW5ldyB4XyhlLG4sbnVsbCxoKSxZLmNbWS5jLmxlbmd0aF09QyxrJiYoaz0hMSxuLmI8cy5kLmQ/Qy5mLmE9ITA6bi5iPnMuZC5kK3MuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYoZT1uKTtDJiYobz11KEpuKHQuZixoLmQuaSksNTcpLGUuYjxvLmQuZD9DLmYuYT0hMDplLmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGQ9bmV3IGFyKGxyKGpvKEgpLmEuS2MoKSxuZXcgeikpO3pyKGQpOyloPXUoTHIoZCksMTcpLGguYS5iIT0wJiYoZT11KHZqKGguYSksOCksaC5kLmo9PShiZSgpLE5uKSYmKHR0PW5ldyB4XyhlLG5ldyAkZShlLmEscy5kLmQpLHMsaCksdHQuZi5hPSEwLHR0LmE9aC5kLFkuY1tZLmMubGVuZ3RoXT10dCksaC5kLmo9PW1yJiYodHQ9bmV3IHhfKGUsbmV3ICRlKGUuYSxzLmQuZCtzLmQuYSkscyxoKSx0dC5mLmQ9ITAsdHQuYT1oLmQsWS5jW1kuYy5sZW5ndGhdPXR0KSl9cmV0dXJuIFl9ZnVuY3Rpb24gRTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07aWYod3IobiwiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSx0LmU9ZSx0Lm49dShRKGUsKHNlKCksWTQpKSwzMDQpLCR5bih0KSx5ZG4odCksdXMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IGZRKSxuZXcgQyR0KHQpKSx1cyhSaShXbyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgR1QpLG5ldyBrUSksbmV3IEVRKSxuZXcgVFEpLG5ldyBUJHQodCkpLGplKFJlKFEodC5lLChUZSgpLFRTKSkpKSYmKGg9UmMobiwxKSx3cihoLCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksczRuKHQpLG9yKGgpKSxlZm4odC5mKSxvPXUoUShlLFNTKSwxOSkuYSp0LmYuYS5jLmxlbmd0aCxjYXQoSnB0KHRidChtbnQodC5mKSxvKSwhMSksUmMobiwxKSksdC5kLmEuZ2MoKSE9MCl7Zm9yKGg9UmMobiwxKSx3cihoLCJGbGV4aWJsZSBXaGVyZSBTcGFjZSBQcm9jZXNzaW5nIiwxKSxkPXUoT3YoSGoocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IGRRKSxuZXcgYVEpKSwxOSkuYSx3PXUoT3YocWoocHUobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IGdRKSxuZXcgb1EpKSwxOSkuYSxrPXctZCxDPUR2KG5ldyBVYix0LmYpLE09RHYobmV3IFViLHQuZiksdmYob2YoYWYoc2YoY2YobmV3IEVoLDJlNCksayksQyksTSkpLHVzKFJpKFJpKCRudCh0LmkpLG5ldyBwUSksbmV3IGJRKSxuZXcga1h0KGQsQyxrLE0pKSxzPXQuZC5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjEzKSxyLmc9MTtjYXQoSnB0KHRidChtbnQodC5mKSxvKSwhMSksUmMoaCwxKSksb3IoaCl9amUoUmUoUShlLFRTKSkpJiYoaD1SYyhuLDEpLHdyKGgsIlN0cmFpZ2h0IEVkZ2VzIFBvc3QtUHJvY2Vzc2luZyIsMSksbGduKHQpLG9yKGgpKSxIM24odCksdC5lPW51bGwsdC5mPW51bGwsdC5pPW51bGwsdC5jPW51bGwsWXUodC5rKSx0Lmo9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LmQuYS4kYigpLG9yKG4pfWZ1bmN0aW9uIFQ1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQ7Zm9yKGQ9bmV3IFModC5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihvPXUoSihkKSwyOSksX3Q9bmV3IFMoby5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLGUuZ1tMdC5wXT1MdCxlLmFbTHQucF09THQsZS5kW0x0LnBdPTA7Zm9yKHc9dC5hLmIsZS5jPT0oZGQoKSxLZykmJih3PUV0KHcsMTUyKT9WeCh1KHcsMTUyKSk6RXQodywxMzEpP3UodywxMzEpLmE6RXQodyw1NCk/bmV3IG12KHcpOm5ldyBNbSh3KSksaD13LktjKCk7aC5PYigpOylmb3Iobz11KGguUGIoKSwyOSksSD0tMSxGPW8uYSxlLm89PShFMSgpLHoxKSYmKEg9dmksRj1FdChGLDE1Mik/VngodShGLDE1MikpOkV0KEYsMTMxKT91KEYsMTMxKS5hOkV0KEYsNTQpP25ldyBtdihGKTpuZXcgTW0oRikpLFl0PUYuS2MoKTtZdC5PYigpOylpZihCdD11KFl0LlBiKCksMTApLE09bnVsbCxlLmM9PUtnP009dShGZSh0LmIuZixCdC5wKSwxNSk6TT11KEZlKHQuYi5iLEJ0LnApLDE1KSxNLmdjKCk+MClpZihyPU0uZ2MoKSxrPXBzKGIuTWF0aC5mbG9vcigocisxKS8yKSktMSxzPXBzKGIuTWF0aC5jZWlsKChyKzEpLzIpKS0xLGUubz09ejEpZm9yKEM9cztDPj1rO0MtLSllLmFbQnQucF09PUJ0JiYoWT11KE0uWGIoQyksNDYpLFY9dShZLmEsMTApLCFTMChuLFkuYikmJkg+dC5iLmVbVi5wXSYmKGUuYVtWLnBdPUJ0LGUuZ1tCdC5wXT1lLmdbVi5wXSxlLmFbQnQucF09ZS5nW0J0LnBdLGUuZltlLmdbQnQucF0ucF09KEZuKCksISEoamUoZS5mW2UuZ1tCdC5wXS5wXSkmQnQuaz09KEduKCksWnMpKSksSD10LmIuZVtWLnBdKSk7ZWxzZSBmb3IoQz1rO0M8PXM7QysrKWUuYVtCdC5wXT09QnQmJihndD11KE0uWGIoQyksNDYpLHR0PXUoZ3QuYSwxMCksIVMwKG4sZ3QuYikmJkg8dC5iLmVbdHQucF0mJihlLmFbdHQucF09QnQsZS5nW0J0LnBdPWUuZ1t0dC5wXSxlLmFbQnQucF09ZS5nW0J0LnBdLGUuZltlLmdbQnQucF0ucF09KEZuKCksISEoamUoZS5mW2UuZ1tCdC5wXS5wXSkmQnQuaz09KEduKCksWnMpKSksSD10LmIuZVt0dC5wXSkpfWZ1bmN0aW9uIFpjKCl7WmM9WixkSHQoKSxPNGU9dGEuYSx1KFN0KFd0KHRhLmEpLDApLDE4KSxJNGU9dGEuZix1KFN0KFd0KHRhLmYpLDApLDE4KSx1KFN0KFd0KHRhLmYpLDEpLDM0KSxENGU9dGEubix1KFN0KFd0KHRhLm4pLDApLDM0KSx1KFN0KFd0KHRhLm4pLDEpLDM0KSx1KFN0KFd0KHRhLm4pLDIpLDM0KSx1KFN0KFd0KHRhLm4pLDMpLDM0KSxSQXQ9dGEuZyx1KFN0KFd0KHRhLmcpLDApLDE4KSx1KFN0KFd0KHRhLmcpLDEpLDM0KSxNNGU9dGEuYyx1KFN0KFd0KHRhLmMpLDApLDE4KSx1KFN0KFd0KHRhLmMpLDEpLDE4KSxqQXQ9dGEuaSx1KFN0KFd0KHRhLmkpLDApLDE4KSx1KFN0KFd0KHRhLmkpLDEpLDE4KSx1KFN0KFd0KHRhLmkpLDIpLDE4KSx1KFN0KFd0KHRhLmkpLDMpLDE4KSx1KFN0KFd0KHRhLmkpLDQpLDM0KSwkQXQ9dGEuaix1KFN0KFd0KHRhLmopLDApLDE4KSxCQXQ9dGEuZCx1KFN0KFd0KHRhLmQpLDApLDE4KSx1KFN0KFd0KHRhLmQpLDEpLDE4KSx1KFN0KFd0KHRhLmQpLDIpLDE4KSx1KFN0KFd0KHRhLmQpLDMpLDE4KSx1KFN0KFd0KHRhLmQpLDQpLDM0KSx1KFN0KFd0KHRhLmQpLDUpLDM0KSx1KFN0KFd0KHRhLmQpLDYpLDM0KSx1KFN0KFd0KHRhLmQpLDcpLDM0KSxMNGU9dGEuYix1KFN0KFd0KHRhLmIpLDApLDM0KSx1KFN0KFd0KHRhLmIpLDEpLDM0KSxZVj10YS5lLHUoU3QoV3QodGEuZSksMCksMzQpLHUoU3QoV3QodGEuZSksMSksMzQpLHUoU3QoV3QodGEuZSksMiksMzQpLHUoU3QoV3QodGEuZSksMyksMzQpLHUoU3QoV3QodGEuZSksNCksMTgpLHUoU3QoV3QodGEuZSksNSksMTgpLHUoU3QoV3QodGEuZSksNiksMTgpLHUoU3QoV3QodGEuZSksNyksMTgpLHUoU3QoV3QodGEuZSksOCksMTgpLHUoU3QoV3QodGEuZSksOSksMTgpLHUoU3QoV3QodGEuZSksMTApLDM0KSxFYj10YS5rLHUoU3QoV3QodGEuayksMCksMzQpLHUoU3QoV3QodGEuayksMSksMzQpfWZ1bmN0aW9uIEM1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKFFlPW5ldyBRaSxjZT1uZXcgUWksdHQ9LTEsdz1uZXcgUyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHcpLDEyOCksaC5zPXR0LS0sQz0wLF90PTAsbz1uZXcgUyhoLnQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDI2OCksX3QrPXIuYztmb3Iocz1uZXcgUyhoLmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksQys9ci5jO2gubj1DLGgudT1fdCxfdD09MD9ocyhjZSxoLGNlLmMuYixjZS5jKTpDPT0wJiZocyhRZSxoLFFlLmMuYixRZS5jKX1mb3Ioem49RSQodCksTT10LmMubGVuZ3RoLFk9TSsxLGd0PU0tMSxIPW5ldyBsZTt6bi5hLmdjKCkhPTA7KXtmb3IoO2NlLmIhPTA7KVl0PShRbihjZS5iIT0wKSx1KGNoKGNlLGNlLmEuYSksMTI4KSksem4uYS5CYyhZdCkhPW51bGwsWXQucz1ndC0tLHg1dChZdCxRZSxjZSk7Zm9yKDtRZS5iIT0wOylTZT0oUW4oUWUuYiE9MCksdShjaChRZSxRZS5hLmEpLDEyOCkpLHpuLmEuQmMoU2UpIT1udWxsLFNlLnM9WSsrLHg1dChTZSxRZSxjZSk7Zm9yKFY9X2Esaz16bi5hLmVjKCkuS2MoKTtrLk9iKCk7KWg9dShrLlBiKCksMTI4KSxMdD1oLnUtaC5uLEx0Pj1WJiYoTHQ+ViYmKEguYz1QdChYbixJZSwxLDAsNSwxKSxWPUx0KSxILmNbSC5jLmxlbmd0aF09aCk7SC5jLmxlbmd0aCE9MCYmKEY9dShGZShILHp6KGUsSC5jLmxlbmd0aCkpLDEyOCksem4uYS5CYyhGKSE9bnVsbCxGLnM9WSsrLHg1dChGLFFlLGNlKSxILmM9UHQoWG4sSWUsMSwwLDUsMSkpfWZvcihCdD10LmMubGVuZ3RoKzEsZD1uZXcgUyh0KTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMjgpLGguczxNJiYoaC5zKz1CdCk7Zm9yKFdlPW5ldyBTKHQpO1dlLmE8V2UuYy5jLmxlbmd0aDspZm9yKFNlPXUoSihXZSksMTI4KSxuPW5ldyBoYShTZS50LDApO24uYjxuLmQuZ2MoKTspcj0oUW4obi5iPG4uZC5nYygpKSx1KG4uZC5YYihuLmM9bi5iKyspLDI2OCkpLFJuPXIuYixTZS5zPlJuLnMmJihFbChuKSx2dShSbi5pLHIpLHIuYz4wJiYoci5hPVJuLHVlKFJuLnQsciksci5iPVNlLHVlKFNlLmkscikpKX1mdW5jdGlvbiBDeHQodCl7dmFyIGUsbixyLHMsbztzd2l0Y2goZT10LmMsZSl7Y2FzZSAxMTpyZXR1cm4gdC5NbCgpO2Nhc2UgMTI6cmV0dXJuIHQuT2woKTtjYXNlIDE0OnJldHVybiB0LlFsKCk7Y2FzZSAxNTpyZXR1cm4gdC5UbCgpO2Nhc2UgMTY6cmV0dXJuIHQuUmwoKTtjYXNlIDE3OnJldHVybiB0LlVsKCk7Y2FzZSAyMTpyZXR1cm4gZmkodCksZ2koKSxnaSgpLGZBO2Nhc2UgMTA6c3dpdGNoKHQuYSl7Y2FzZSA2NTpyZXR1cm4gdC55bCgpO2Nhc2UgOTA6cmV0dXJuIHQuRGwoKTtjYXNlIDEyMjpyZXR1cm4gdC5LbCgpO2Nhc2UgOTg6cmV0dXJuIHQuRWwoKTtjYXNlIDY2OnJldHVybiB0LnpsKCk7Y2FzZSA2MDpyZXR1cm4gdC5KbCgpO2Nhc2UgNjI6cmV0dXJuIHQuSGwoKX19c3dpdGNoKG89bTVuKHQpLGU9dC5jLGUpe2Nhc2UgMzpyZXR1cm4gdC5abChvKTtjYXNlIDQ6cmV0dXJuIHQuWGwobyk7Y2FzZSA1OnJldHVybiB0LllsKG8pO2Nhc2UgMDppZih0LmE9PTEyMyYmdC5kPHQuail7aWYocz10LmQscj0wLG49LTEsKGU9YmEodC5pLHMrKykpPj00OCYmZTw9NTcpe2ZvcihyPWUtNDg7czx0LmomJihlPWJhKHQuaSxzKyspKT49NDgmJmU8PTU3OylpZihyPXIqMTArZS00OCxyPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEw4dCkpKSl9ZWxzZSB0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZTBlKSkpKTtpZihuPXIsZT09NDQpe2lmKHM+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCkscjBlKSkpKTtpZigoZT1iYSh0LmkscysrKSk+PTQ4JiZlPD01Nyl7Zm9yKG49ZS00ODtzPHQuaiYmKGU9YmEodC5pLHMrKykpPj00OCYmZTw9NTc7KWlmKG49bioxMCtlLTQ4LG48MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksTDh0KSkpKTtpZihyPm4pdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGkwZSkpKSl9ZWxzZSBuPS0xfWlmKGUhPTEyNSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksbjBlKSkpKTt0LnNsKHMpPyhvPShnaSgpLGdpKCksbmV3IFdtKDksbykpLHQuZD1zKzEpOihvPShnaSgpLGdpKCksbmV3IFdtKDMsbykpLHQuZD1zKSxvLmRtKHIpLG8uY20obiksZmkodCl9fXJldHVybiBvfWZ1bmN0aW9uIE9oZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem47Zm9yKFk9bmV3IFljKGUuYiksQnQ9bmV3IFljKGUuYiksRj1uZXcgWWMoZS5iKSxXZT1uZXcgWWMoZS5iKSx0dD1uZXcgWWMoZS5iKSxTZT1laShlLDApO1NlLmIhPVNlLmQuYzspZm9yKFl0PXUodGkoU2UpLDExKSxkPW5ldyBTKFl0LmcpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKG89dShKKGQpLDE3KSxvLmMuaT09by5kLmkpe2lmKFl0Lmo9PW8uZC5qKXtXZS5jW1dlLmMubGVuZ3RoXT1vO2NvbnRpbnVlfWVsc2UgaWYoWXQuaj09KGJlKCksTm4pJiZvLmQuaj09bXIpe3R0LmNbdHQuYy5sZW5ndGhdPW87Y29udGludWV9fWZvcih3PW5ldyBTKHR0KTt3LmE8dy5jLmMubGVuZ3RoOylvPXUoSih3KSwxNyksYW1uKHQsbyxuLHIsKGJlKCksSG4pKTtmb3IoaD1uZXcgUyhXZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFFlPW5ldyBIMCh0KSxfMChRZSwoR24oKSxIYykpLEp0KFFlLChUZSgpLG9zKSwob2EoKSxWYykpLEp0KFFlLChzZSgpLF9pKSxvKSxSbj1uZXcgTWMsSnQoUm4sX2ksby5kKSxGcyhSbiwoYmUoKSxCbikpLFVvKFJuLFFlKSx6bj1uZXcgTWMsSnQoem4sX2ksby5jKSxGcyh6bixIbiksVW8oem4sUWUpLEp0KG8uYyxadSxRZSksSnQoby5kLFp1LFFlKSxEYShvLG51bGwpLHNhKG8sbnVsbCksbi5jW24uYy5sZW5ndGhdPVFlLEp0KFFlLHFHLGRlKDIpKTtmb3IoY2U9ZWkoZSwwKTtjZS5iIT1jZS5kLmM7KVl0PXUodGkoY2UpLDExKSxrPVl0LmUuYy5sZW5ndGg+MCxndD1ZdC5nLmMubGVuZ3RoPjAsayYmZ3Q/Ri5jW0YuYy5sZW5ndGhdPVl0Oms/WS5jW1kuYy5sZW5ndGhdPVl0Omd0JiYoQnQuY1tCdC5jLmxlbmd0aF09WXQpO2ZvcihWPW5ldyBTKFkpO1YuYTxWLmMuYy5sZW5ndGg7KUg9dShKKFYpLDExKSx1ZShzLG94dCh0LEgsbnVsbCxuKSk7Zm9yKF90PW5ldyBTKEJ0KTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTEpLHVlKHMsb3h0KHQsbnVsbCxMdCxuKSk7Zm9yKE09bmV3IFMoRik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLHVlKHMsb3h0KHQsQyxDLG4pKX1mdW5jdGlvbiBOaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuO2ZvcihMdD1uZXcgJGUoc3Msc3MpLGU9bmV3ICRlKFRzLFRzKSxXZT1uZXcgUyh0KTtXZS5hPFdlLmMuYy5sZW5ndGg7KVNlPXUoSihXZSksOCksTHQuYT1iLk1hdGgubWluKEx0LmEsU2UuYSksTHQuYj1iLk1hdGgubWluKEx0LmIsU2UuYiksZS5hPWIuTWF0aC5tYXgoZS5hLFNlLmEpLGUuYj1iLk1hdGgubWF4KGUuYixTZS5iKTtmb3IoRj1uZXcgJGUoZS5hLUx0LmEsZS5iLUx0LmIpLGs9bmV3ICRlKEx0LmEtNTAsTHQuYi1GLmEtNTApLEM9bmV3ICRlKEx0LmEtNTAsZS5iK0YuYSs1MCksTT1uZXcgJGUoZS5hK0YuYi8yKzUwLEx0LmIrRi5iLzIpLEg9bmV3IGl4dChrLEMsTSksY2U9bmV3IHFzLG89bmV3IGxlLG49bmV3IGxlLGNlLmEuemMoSCxjZSksUm49bmV3IFModCk7Um4uYTxSbi5jLmMubGVuZ3RoOyl7Zm9yKFFlPXUoSihSbiksOCksby5jPVB0KFhuLEllLDEsMCw1LDEpLFl0PWNlLmEuZWMoKS5LYygpO1l0Lk9iKCk7KV90PXUoWXQuUGIoKSwzMDgpLHI9X3QuZCxIcChyLF90LmEpLHJ3KEhwKF90LmQsUWUpLEhwKF90LmQsX3QuYSkpPDAmJihvLmNbby5jLmxlbmd0aF09X3QpO2ZvcihuLmM9UHQoWG4sSWUsMSwwLDUsMSksQnQ9bmV3IFMobyk7QnQuYTxCdC5jLmMubGVuZ3RoOylmb3IoX3Q9dShKKEJ0KSwzMDgpLHR0PW5ldyBTKF90LmUpO3R0LmE8dHQuYy5jLmxlbmd0aDspe2ZvcihWPXUoSih0dCksMTY4KSxoPSEwLHc9bmV3IFMobyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMzA4KSxkIT1fdCYmKFBjKFYsRmUoZC5lLDApKXx8UGMoVixGZShkLmUsMSkpfHxQYyhWLEZlKGQuZSwyKSkpJiYoaD0hMSk7aCYmKG4uY1tuLmMubGVuZ3RoXT1WKX1mb3IocGFlKGNlLG8pLHZhKGNlLG5ldyBMYSksWT1uZXcgUyhuKTtZLmE8WS5jLmMubGVuZ3RoOylWPXUoSihZKSwxNjgpLE5zKGNlLG5ldyBpeHQoUWUsVi5hLFYuYikpfWZvcihndD1uZXcgcXMsdmEoY2UsbmV3IFNuKGd0KSkscz1ndC5hLmVjKCkuS2MoKTtzLk9iKCk7KVY9dShzLlBiKCksMTY4KSwoQiQoSCxWLmEpfHxCJChILFYuYikpJiZzLlFiKCk7cmV0dXJuIHZhKGd0LG5ldyBHcyksZ3R9ZnVuY3Rpb24gXzVuKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKG49dShRKHQsKHNlKCksR2MpKSwyMSksZT1paih2YmUpLHM9dShRKHQsKFRlKCksankpKSwzMzQpLHM9PSgkMCgpLFpnKSYmUmwoZSx3YmUpLGplKFJlKFEodCxZbHQpKSk/YmkoZSwoV2EoKSxBZCksKHJvKCksaWx0KSk6YmkoZSwoV2EoKSxvdSksKHJvKCksaWx0KSksUSh0LChMJCgpLEdTKSkhPW51bGwmJlJsKGUsbWJlKSwoamUoUmUoUSh0LFk5dCkpKXx8amUoUmUoUSh0LFY5dCkpKSkmJkt1KGUsKFdhKCksSW8pLChybygpLEc3dCkpLHUoUSh0LFZsKSwxMDMpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0Okt1KGJpKGUsKFdhKCksQWQpLChybygpLFU3dCkpLElvLFY3dCl9c3dpdGNoKG4uSGMoKG9vKCksUkcpKSYmS3UoYmkoYmkoZSwoV2EoKSxBZCksKHJvKCksSDd0KSkscWMsejd0KSxJbyxxN3QpLEd0KFEodCxYbHQpKSE9PUd0KCh3NCgpLGhWKSkmJmJpKGUsKFdhKCksb3UpLChybygpLG9UdCkpLG4uSGMoJEcpJiYoYmkoZSwoV2EoKSxBZCksKHJvKCksaFR0KSksYmkoZSxsYix1VHQpLGJpKGUsb3UsbFR0KSksR3QoUSh0LEtHKSkhPT1HdCgoZ0UoKSxiUykpJiZHdChRKHQsWDApKSE9PUd0KChxMCgpLFhPKSkmJkt1KGUsKFdhKCksSW8pLChybygpLGVUdCkpLGplKFJlKFEodCxXOXQpKSkmJmJpKGUsKFdhKCksb3UpLChybygpLHRUdCkpLGplKFJlKFEodCxWbHQpKSkmJmJpKGUsKFdhKCksb3UpLChybygpLGZUdCkpLHIybih0KSYmKEd0KFEodCxqeSkpPT09R3QoWmcpP3I9dShRKHQsX08pLDI5Mik6cj11KFEodCxHbHQpLDI5Miksbz1yPT0oVzgoKSxMbHQpPyhybygpLGNUdCk6KHJvKCkscFR0KSxiaShlLChXYSgpLHFjKSxvKSksdShRKHQseEN0KSwzNzcpLmcpe2Nhc2UgMTpiaShlLChXYSgpLHFjKSwocm8oKSxkVHQpKTticmVhaztjYXNlIDI6S3UoYmkoYmkoZSwoV2EoKSxvdSksKHJvKCksQjd0KSkscWMsUjd0KSxJbyxqN3QpfXJldHVybiBHdChRKHQsZGIpKSE9PUd0KChqMCgpLGdiKSkmJmJpKGUsKFdhKCksb3UpLChybygpLGdUdCkpLGV9ZnVuY3Rpb24gUGhlKHQpe1N2KHQsbmV3IHcyKEV2KHl2KGt2KHh2KG5ldyBwZyxEaCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBhWikpKSx4ZSh0LERoLGI2LDEuMykseGUodCxEaCxnSCxEZShSX3QpKSx4ZSh0LERoLHd3LFZfdCkseGUodCxEaCxreSwxNSkseGUodCxEaCxjSCxEZShLeWUpKSx4ZSh0LERoLEw0LERlKFF5ZSkpLHhlKHQsRGgsdzYsRGUoWnllKSkseGUodCxEaCx2NixEZShKeWUpKSx4ZSh0LERoLFJFLERlKFh5ZSkpLHhlKHQsRGgsRl8sRGUocV90KSkseGUodCxEaCxqRSxEZShlM2UpKSx4ZSh0LERoLFdrdCxEZShHX3QpKSx4ZSh0LERoLEtrdCxEZSh6X3QpKSx4ZSh0LERoLFFrdCxEZShIX3QpKSx4ZSh0LERoLFprdCxEZShVX3QpKSx4ZSh0LERoLENjdCxEZShqX3QpKSx4ZSh0LERoLCRELERlKCRfdCkpLHhlKHQsRGgscGN0LERlKFl5ZSkpLHhlKHQsRGgsWGt0LERlKFJPKSkseGUodCxEaCxZa3QsRGUoQl90KSkseGUodCxEaCxKa3QsRGUoV190KSl9ZnVuY3Rpb24gcHcodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYodC5hIT1lLkFqKCkpdGhyb3cgcnQobmV3IFBuKEhFK2UubmUoKStrdykpO2lmKEV0KGUsNDU3KSl7aWYodHQ9T3ZuKHUoZSw2NzEpLG4pLCF0dCl0aHJvdyBydChuZXcgUG4oQmN0K24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIitlLm5lKCkrIiciKSk7cmV0dXJuIHR0fXN3aXRjaChPZygoUnUoKSxtYSksZSkuY2woKSl7Y2FzZSAyOntuPSRjKG4sITEpO2JyZWFrfWNhc2UgMzp7bj0kYyhuLCEwKTticmVha319aWYocj1PZyhtYSxlKS4kaygpLHIpcmV0dXJuIHIuQWooKS5OaCgpLktoKHIsbik7aWYoRj1PZyhtYSxlKS5hbCgpLEYpe2Zvcih0dD1uZXcgbGUsaz1raXQobiksQz0wLE09ay5sZW5ndGg7QzxNOysrQyl3PWtbQ10sdWUodHQsRi5BaigpLk5oKCkuS2goRix3KSk7cmV0dXJuIHR0fWlmKFk9T2cobWEsZSkuYmwoKSwhWS5kYygpKXtmb3IoVj1ZLktjKCk7Vi5PYigpOyl7SD11KFYuUGIoKSwxNDgpO3RyeXtpZih0dD1ILkFqKCkuTmgoKS5LaChILG4pLHR0IT1udWxsKXJldHVybiB0dH1jYXRjaChndCl7aWYoZ3Q9V2koZ3QpLCFFdChndCw2MCkpdGhyb3cgcnQoZ3QpfX10aHJvdyBydChuZXcgUG4oQmN0K24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrZS5uZSgpKyInIikpfWlmKHUoZSw4MzQpLkZqKCkscz1EdW4oZS5CaigpKSwhcylyZXR1cm4gbnVsbDtpZihzPT1hUyl7aD0wO3RyeXtoPSRsKG4sX2EsdmkpJm1zfWNhdGNoKGd0KXtpZihndD1XaShndCksRXQoZ3QsMTI3KSlvPVIkKG4pLGg9b1swXTtlbHNlIHRocm93IHJ0KGd0KX1yZXR1cm4gREkoaCl9aWYocz09SEgpe2ZvcihkPTA7ZDxyQS5sZW5ndGg7KytkKXRyeXtyZXR1cm4gVEd0KHJBW2RdLG4pfWNhdGNoKGd0KXtpZihndD1XaShndCksIUV0KGd0LDMyKSl0aHJvdyBydChndCl9dGhyb3cgcnQobmV3IFBuKEJjdCtuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgcnQobmV3IFBuKEJjdCtuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBTNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrO2lmKG49MCxoPTAsbz1lLmxlbmd0aCxkPW51bGwsaz1uZXcgTG0saDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT00MykmJigrK2gsKytuLGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDN8fChScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ1KSkpKXRocm93IHJ0KG5ldyBvZCh2dytlKyciJykpO2Zvcig7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT00NikmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTEwMSkmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTY5KTspKytoO2lmKGsuYSs9IiIrRGwoZT09bnVsbD9UdTooT24oZSksZSksbixoKSxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ2KSl7Zm9yKCsraCxuPWg7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT0xMDEpJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT02OSk7KSsraDt0LmU9aC1uLGsuYSs9IiIrRGwoZT09bnVsbD9UdTooT24oZSksZSksbixoKX1lbHNlIHQuZT0wO2lmKGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09MTAxfHwoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT02OSkpJiYoKytoLG49aCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQzKSYmKCsraCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTQ1KSYmKytuKSxkPWUuc3Vic3RyKG4sby1uKSx0LmU9dC5lLSRsKGQsX2EsdmkpLHQuZSE9cHModC5lKSkpdGhyb3cgcnQobmV3IG9kKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHc9ay5hLHcubGVuZ3RoPDE2KXtpZih0LmY9KHZFdD09bnVsbCYmKHZFdD1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksdkV0LnRlc3Qodyk/cGFyc2VJbnQodywxMCk6TmFOKSxpc05hTih0LmYpKXRocm93IHJ0KG5ldyBvZCh2dytlKyciJykpO3QuYT1aNHQodC5mKX1lbHNlIEtsbih0LG5ldyBOcCh3KSk7Zm9yKHQuZD1rLmEubGVuZ3RoLHM9MDtzPGsuYS5sZW5ndGgmJihyPWJhKGsuYSxzKSwhKHIhPTQ1JiZyIT00OCkpOysrcyktLXQuZDt0LmQ9PTAmJih0LmQ9MSl9ZnVuY3Rpb24gSWF0KCl7SWF0PVosTmk9bmV3IEh2LGxuKE5pLChiZSgpLEcxKSxVYyksbG4oTmkscWgsVWMpLGxuKE5pLHFoLFN1KSxsbihOaSx2aCxxdSksbG4oTmksdmgsVWMpLGxuKE5pLFNmLFVjKSxsbihOaSxTZixlbCksbG4oTmksV2wsQ3UpLGxuKE5pLFdsLFVjKSxsbihOaSxfdSx1dSksbG4oTmksX3UsVWMpLGxuKE5pLF91LGVsKSxsbihOaSxfdSxDdSksbG4oTmksdXUsX3UpLGxuKE5pLHV1LFN1KSxsbihOaSx1dSxxdSksbG4oTmksdXUsVWMpLGxuKE5pLEFmLEFmKSxsbihOaSxBZixlbCksbG4oTmksQWYsU3UpLGxuKE5pLHRsLHRsKSxsbihOaSx0bCxlbCksbG4oTmksdGwscXUpLGxuKE5pLEtsLEtsKSxsbihOaSxLbCxDdSksbG4oTmksS2wsU3UpLGxuKE5pLHdoLHdoKSxsbihOaSx3aCxDdSksbG4oTmksd2gscXUpLGxuKE5pLGVsLFNmKSxsbihOaSxlbCxfdSksbG4oTmksZWwsQWYpLGxuKE5pLGVsLHRsKSxsbihOaSxlbCxVYyksbG4oTmksZWwsZWwpLGxuKE5pLGVsLFN1KSxsbihOaSxlbCxxdSksbG4oTmksQ3UsV2wpLGxuKE5pLEN1LF91KSxsbihOaSxDdSxLbCksbG4oTmksQ3Usd2gpLGxuKE5pLEN1LEN1KSxsbihOaSxDdSxTdSksbG4oTmksQ3UscXUpLGxuKE5pLEN1LFVjKSxsbihOaSxTdSxxaCksbG4oTmksU3UsdXUpLGxuKE5pLFN1LEFmKSxsbihOaSxTdSxLbCksbG4oTmksU3UsZWwpLGxuKE5pLFN1LEN1KSxsbihOaSxTdSxTdSksbG4oTmksU3UsVWMpLGxuKE5pLHF1LHZoKSxsbihOaSxxdSx1dSksbG4oTmkscXUsdGwpLGxuKE5pLHF1LHdoKSxsbihOaSxxdSxlbCksbG4oTmkscXUsQ3UpLGxuKE5pLHF1LHF1KSxsbihOaSxxdSxVYyksbG4oTmksVWMsRzEpLGxuKE5pLFVjLHFoKSxsbihOaSxVYyx2aCksbG4oTmksVWMsU2YpLGxuKE5pLFVjLFdsKSxsbihOaSxVYyxfdSksbG4oTmksVWMsdXUpLGxuKE5pLFVjLGVsKSxsbihOaSxVYyxDdSksbG4oTmksVWMsU3UpLGxuKE5pLFVjLHF1KSxsbihOaSxVYyxVYyl9ZnVuY3Rpb24gX3h0KHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZTtmb3IodC5kPW5ldyAkZShzcyxzcyksdC5jPW5ldyAkZShUcyxUcyksRj1lLktjKCk7Ri5PYigpOylmb3IoQz11KEYuUGIoKSwzNyksX3Q9bmV3IFMoQy5hKTtfdC5hPF90LmMuYy5sZW5ndGg7KUx0PXUoSihfdCksMTApLHQuZC5hPWIuTWF0aC5taW4odC5kLmEsTHQubi5hLUx0LmQuYiksdC5kLmI9Yi5NYXRoLm1pbih0LmQuYixMdC5uLmItTHQuZC5kKSx0LmMuYT1iLk1hdGgubWF4KHQuYy5hLEx0Lm4uYStMdC5vLmErTHQuZC5jKSx0LmMuYj1iLk1hdGgubWF4KHQuYy5iLEx0Lm4uYitMdC5vLmIrTHQuZC5hKTtmb3IoZD1uZXcgSnp0LE09ZS5LYygpO00uT2IoKTspQz11KE0uUGIoKSwzNykscj1sNW4odCxDKSx1ZShkLmEsciksci5hPXIuYXwhdShRKHIuYywoc2UoKSxOeSkpLDIxKS5kYygpO2Zvcih0LmI9KElpdCgpLFdlPW5ldyBqNSxXZS5mPW5ldyBqZWUobiksV2UuYj13M24oV2UuZixkKSxXZSksXzNuKChWPXQuYixuZXcgWWssVikpLHQuZT1uZXcgVGEsdC5hPXQuYi5mLmUsaD1uZXcgUyhkLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihzPXUoSihoKSw4NDEpLEJ0PWxybih0LmIscyksZnduKHMuYyxCdC5hLEJ0LmIpLHR0PW5ldyBTKHMuYy5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KVk9dShKKHR0KSwxMCksWS5rPT0oR24oKSx4cykmJihndD1rNXQodCxZLm4sdShRKFksKHNlKCksb2MpKSw2MSkpLExpKEdmKFkubiksZ3QpKTtmb3Iobz1uZXcgUyhkLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSw4NDEpLGs9bmV3IFMocXVuKHMpKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodz11KEooayksMTcpLFNlPW5ldyB5Uih3LmEpLGg4KFNlLDAsVDEody5jKSksbmkoU2UsVDEody5kKSksSD1udWxsLGNlPWVpKFNlLDApO2NlLmIhPWNlLmQuYzspe2lmKFl0PXUodGkoY2UpLDgpLCFIKXtIPVl0O2NvbnRpbnVlfSRtdChILmEsWXQuYSk/KHQuZS5hPWIuTWF0aC5taW4odC5lLmEsSC5hKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLEguYSkpOiRtdChILmIsWXQuYikmJih0LmUuYj1iLk1hdGgubWluKHQuZS5iLEguYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixILmIpKSxIPVl0fW1qKHQuZSksTGkodC5hLHQuZSl9ZnVuY3Rpb24gQTVuKHQpe0lyKHQuYixQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxJcih0LmEsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksSXIodC5vLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksSXIodC5wLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksSXIodC52LFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLElyKHQuUixQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJXZWxsRm9ybWVkTmFtZSJdKSksSXIodC5ULFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLElyKHQuVSxQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxJcih0LlcsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLElyKHQuYmIsUGgsY3Qob3QoQWUsMSksdGUsMiw2LFtFdywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxJcih0LmViLFBoLGN0KG90KEFlLDEpLHRlLDIsNixbRXcsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLElyKHQuSCxQaCxjdChvdChBZSwxKSx0ZSwyLDYsW0V3LCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIEw1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWU7aWYoIWUuZGMoKSl7aWYocz1uZXcgRHUsZD1ufHx1KGUuWGIoMCksMTcpLFY9ZC5jLGJfKCksRj1WLmkuaywhKEY9PShHbigpLERzKXx8Rj09SGN8fEY9PXhzfHxGPT1qMSkpdGhyb3cgcnQobmV3IFBuKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihLYihzLEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKSksKGJlKCksX3UpLkhjKFYuaikmJih0dD1YdCh5ZShRKFYsKHNlKCksZzcpKSkpLE09bmV3ICRlKEtvKGN0KG90KFVzLDEpLHRlLDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5hLHR0KSxocyhzLE0scy5jLmIscy5jKSksQz1udWxsLHI9ITEsdz1lLktjKCk7dy5PYigpOyloPXUody5QYigpLDE3KSxvPWguYSxvLmIhPTAmJihyPyhrPXVkKExpKEMsKFFuKG8uYiE9MCksdShvLmEuYS5jLDgpKSksLjUpLGhzKHMsayxzLmMuYixzLmMpLHI9ITEpOnI9ITAsQz1uYygoUW4oby5iIT0wKSx1KG8uYy5iLmMsOCkpKSxVYShzLG8pLF9oKG8pKTtZPWQuZCxfdS5IYyhZLmopJiYodHQ9WHQoeWUoUShZLChzZSgpLGc3KSkpKSxNPW5ldyAkZShLbyhjdChvdChVcywxKSx0ZSw4LDAsW1kuaS5uLFkubixZLmFdKSkuYSx0dCksaHMocyxNLHMuYy5iLHMuYykpLEtiKHMsS28oY3Qob3QoVXMsMSksdGUsOCwwLFtZLmkubixZLm4sWS5hXSkpKSx0LmQ9PSh0RSgpLHZodCkmJihndD0oUW4ocy5iIT0wKSx1KHMuYS5hLmMsOCkpLEx0PXUoUWYocywxKSw4KSxfdD1uZXcgYnJ0KEl5dChWLmopKSxfdC5hKj01LF90LmIqPTUsQnQ9bmEobmV3ICRlKEx0LmEsTHQuYiksZ3QpLFl0PW5ldyAkZShkcnQoX3QuYSxCdC5hKSxkcnQoX3QuYixCdC5iKSksTGkoWXQsZ3QpLGNlPWVpKHMsMSksWE0oY2UsWXQpLFNlPShRbihzLmIhPTApLHUocy5jLmIuYyw4KSksV2U9dShRZihzLHMuYi0yKSw4KSxfdD1uZXcgYnJ0KEl5dChZLmopKSxfdC5hKj01LF90LmIqPTUsQnQ9bmEobmV3ICRlKFdlLmEsV2UuYiksU2UpLFFlPW5ldyAkZShkcnQoX3QuYSxCdC5hKSxkcnQoX3QuYixCdC5iKSksTGkoUWUsU2UpLGg4KHMscy5iLTEsUWUpKSxIPW5ldyBzeHQocyksVWEoZC5hLHNzZShIKSl9fWZ1bmN0aW9uIE01bih0LGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHIscGksUnMsWGwsS2gsVzEsaFUsYk4sZEEsdk47aWYoX3Q9dShTdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSxZdD1fdC5EZygpLGNlPV90LkVnKCksQnQ9X3QuQ2coKS8yLFk9X3QuQmcoKS8yLEV0KF90LDE4NikmJihMdD11KF90LDExOCksWXQrPWsxKEx0KS5pLFl0Kz1rMShMdCkuaSksWXQrPUJ0LGNlKz1ZLHpuPXUoU3QoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikscGk9em4uRGcoKSxScz16bi5FZygpLGhyPXpuLkNnKCkvMixTZT16bi5CZygpLzIsRXQoem4sMTg2KSYmKFJuPXUoem4sMTE4KSxwaSs9azEoUm4pLmkscGkrPWsxKFJuKS5pKSxwaSs9aHIsUnMrPVNlLCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaT09MClkPShUdigpLGs9bmV3IHJkLGspLE1yKCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksZCk7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoVj1uZXcgTHgoKCF0LmEmJih0LmE9bmV3IGhlKFppLHQsNiw2KSksdC5hKSk7Vi5lIT1WLmkuZ2MoKTspdV8oVik7Zm9yKGg9dShTdCgoIXQuYSYmKHQuYT1uZXcgaGUoWmksdCw2LDYpKSx0LmEpLDApLDIwMiksdHQ9cGkscGk+WXQrQnQ/dHQ9WXQrQnQ6cGk8WXQtQnQmJih0dD1ZdC1CdCksZ3Q9UnMsUnM+Y2UrWT9ndD1jZStZOlJzPGNlLVkmJihndD1jZS1ZKSx0dD5ZdC1CdCYmdHQ8WXQrQnQmJmd0PmNlLVkmJmd0PGNlK1kmJih0dD1ZdCtCdCksQjgoaCx0dCksajgoaCxndCksV2U9WXQsWXQ+cGkraHI/V2U9cGkraHI6WXQ8cGktaHImJihXZT1waS1ociksUWU9Y2UsY2U+UnMrU2U/UWU9UnMrU2U6Y2U8UnMtU2UmJihRZT1Scy1TZSksV2U+cGktaHImJldlPHBpK2hyJiZRZT5Scy1TZSYmUWU8UnMrU2UmJihRZT1ScytTZSksRjgoaCxXZSksUjgoaCxRZSkseHIoKCFoLmEmJihoLmE9bmV3IFNzKEhoLGgsNSkpLGguYSkpLG89enooZSw1KSxfdD09em4mJisrbyxXMT1XZS10dCxkQT1RZS1ndCxYbD1iLk1hdGguc3FydChXMSpXMStkQSpkQSksTT1YbCouMjAwMDAwMDAyOTgwMjMyMjQsaFU9VzEvKG8rMSksdk49ZEEvKG8rMSksS2g9dHQsYk49Z3QsQz0wO0M8bztDKyspS2grPWhVLGJOKz12TixGPUtoK29sKGUsMjQpKlBEKk0tTS8yLEY8MD9GPTE6Rj5uJiYoRj1uLTEpLEg9Yk4rb2woZSwyNCkqUEQqTS1NLzIsSDwwP0g9MTpIPnImJihIPXItMSkscz0oVHYoKSx3PW5ldyB2cCx3KSxXJChzLEYpLEskKHMsSCksTXIoKCFoLmEmJihoLmE9bmV3IFNzKEhoLGgsNSkpLGguYSkscyl9ZnVuY3Rpb24gVGUoKXtUZT1aLEpsdD0oY2koKSxaM2UpLGRDdD1KM2UsQU89aUF0LHhmPXQ0ZSxCNj1zQXQsRnc9ZTRlLEd5PWFBdCxtNz1vQXQseTc9Y0F0LHRodD1xVixCdz1IMixlaHQ9bjRlLF9TPWhBdCxzVj1xNixTTz0oQXh0KCksWXZlKSxRND1YdmUsUjI9UXZlLFo0PVp2ZSxQd2U9bmV3IGVvKHpWLGRlKDApKSx3Nz1VdmUsZkN0PVd2ZSxGNj1LdmUseEN0PXl3ZSxnQ3Q9ZXdlLHBDdD1pd2Uscmh0PWh3ZSxiQ3Q9b3dlLHZDdD11d2UsYVY9VHdlLGlodD14d2UsbUN0PWJ3ZSx3Q3Q9Z3dlLHlDdD13d2UsTnc9JHZlLENTPXp2ZSxLbHQ9aXZlLEc5dD1hdmUsb0N0PW5ldyBNdigxMiksYUN0PW5ldyBlbyhxMixvQ3QpLHo5dD0ocTAoKSxBNyksWDA9bmV3IGVvKE5TdCx6OXQpLHp5PW5ldyBlbyhobCwwKSxGd2U9bmV3IGVvKGZmdCxkZSgxKSksVUc9bmV3IGVvKCQ2LEJFKSxCMj0kVixvcz1VUyx2Nz1vNSxBd2U9VU8sTGQ9SDNlLGp5PXI1LEJ3ZT1uZXcgZW8oZGZ0LChGbigpLCEwKSksJHk9V08sUDI9c2Z0LEYyPXoyLGlWPXZiLFpsdD1qViwkOXQ9KGFvKCksYzApLFZsPW5ldyBlbyhqdywkOXQpLE93PXM1LG5WPUhTdCxxeT1LeSxOd2U9aGZ0LGxDdD1uQXQsdUN0PShjNCgpLEpPKSxuZXcgZW8oUVN0LHVDdCksSXdlPW9mdCxEd2U9Y2Z0LE93ZT11ZnQsTXdlPWFmdCxuaHQ9dHdlLGVDdD1BdmUsWGx0PVN2ZSxTUz1KdmUsY3U9eXZlLFJ5PVgyZSxFUz1ZMmUsQnk9RjJlLEI5dD1CMmUsR2x0PXoyZSxfTz1SMmUsVmx0PVcyZSxuQ3Q9THZlLHJDdD1NdmUsWDl0PWd2ZSxyVj1HdmUsUWx0PU92ZSxZbHQ9dXZlLHNDdD1SdmUsSDl0PW52ZSxXbHQ9cnZlLEhsdD1CVixpQ3Q9SXZlLEtHPUwyZSxOOXQ9QTJlLFdHPVMyZSxXOXQ9ZnZlLFU5dD1odmUsSzl0PWR2ZSxwNz1hNSxfbz1pNSxVZz1GU3QsTWQ9aWZ0LFVsdD1yZnQsUjl0PUgyZSxXZz1sZnQsa1M9VTNlLEpHPVczZSxQdz1KU3QsY0N0PUszZSxiNz1ZM2UsWjl0PWt2ZSxKOXQ9VHZlLEh5PXo2LHpsdD1fMmUsdEN0PV92ZSxaRz1KMmUsUUc9WjJlLGVWPUtPLFE5dD12dmUsVFM9UHZlLExPPXVBdCxqOXQ9UTJlLGhDdD1WdmUscTl0PXR2ZSxMd2U9bXZlLFN3ZT1WMmUsWTl0PSRTdCx0Vj14dmUsWEc9VTJlLGRiPVAyZSxGOXQ9TzJlLFlHPUkyZSxQOXQ9RDJlLHFsdD1OMmUsUDY9TTJlLFY5dD1sdmV9ZnVuY3Rpb24gRGF0KHQsZSl7d2F0KCk7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocixwaTtpZihXZT10LmUsVj10LmQscz10LmEsV2U9PTApc3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiBERTtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIGNlPW5ldyBfcCxlPDA/Y2UuYSs9IjBFKyI6Y2UuYSs9IjBFIixjZS5hKz0tZSxjZS5hfWlmKF90PVYqMTArMSs3LEJ0PVB0KG1oLHZkLDI1LF90KzEsMTUsMSksbj1fdCxWPT0xKWlmKGQ9c1swXSxkPDApe3BpPVBzKGQsY28pO2RvIFk9cGkscGk9ZUQocGksMTApLEJ0Wy0tbl09NDgrU3IoWXAoWSxDYShwaSwxMCkpKSZtczt3aGlsZSh5YyhwaSwwKSE9MCl9ZWxzZXtwaT1kO2RvIFk9cGkscGk9cGkvMTB8MCxCdFstLW5dPTQ4KyhZLXBpKjEwKSZtczt3aGlsZShwaSE9MCl9ZWxzZXtSbj1QdChUcixYciwyNSxWLDE1LDEpLGhyPVYsSWMocywwLFJuLDAsaHIpO3Q6Zm9yKDs7KXtmb3IoU2U9MCxrPWhyLTE7az49MDtrLS0pem49T2EoTTAoU2UsMzIpLFBzKFJuW2tdLGNvKSksZ3Q9UGRuKHpuKSxSbltrXT1TcihndCksU2U9U3IoRnAoZ3QsMzIpKTtMdD1TcihTZSksdHQ9bjtkbyBCdFstLW5dPTQ4K0x0JTEwJm1zO3doaWxlKChMdD1MdC8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10dCtuLHc9MDt3PHImJm4+MDt3KyspQnRbLS1uXT00ODtmb3IoTT1oci0xO1JuW01dPT0wO00tLSlpZihNPT0wKWJyZWFrIHQ7aHI9TSsxfWZvcig7QnRbbl09PTQ4OykrK259aWYoSD1XZTwwLGg9X3Qtbi1lLTEsZT09MClyZXR1cm4gSCYmKEJ0Wy0tbl09NDUpLEFoKEJ0LG4sX3Qtbik7aWYoZT4wJiZoPj0tNil7aWYoaD49MCl7Zm9yKEM9bitoLEY9X3QtMTtGPj1DO0YtLSlCdFtGKzFdPUJ0W0ZdO3JldHVybiBCdFsrK0NdPTQ2LEgmJihCdFstLW5dPTQ1KSxBaChCdCxuLF90LW4rMSl9Zm9yKE09MjtNPC1oKzE7TSsrKUJ0Wy0tbl09NDg7cmV0dXJuIEJ0Wy0tbl09NDYsQnRbLS1uXT00OCxIJiYoQnRbLS1uXT00NSksQWgoQnQsbixfdC1uKX1yZXR1cm4gUWU9bisxLG89X3QsWXQ9bmV3IExtLEgmJihZdC5hKz0iLSIpLG8tUWU+PTE/KFJwKFl0LEJ0W25dKSxZdC5hKz0iLiIsWXQuYSs9QWgoQnQsbisxLF90LW4tMSkpOll0LmErPUFoKEJ0LG4sX3QtbiksWXQuYSs9IkUiLGg+MCYmKFl0LmErPSIrIiksWXQuYSs9IiIraCxZdC5hfWZ1bmN0aW9uIEZoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7c3dpdGNoKHQuYz1lLHQuZz1uZXcgQ3Isbj0oSW0oKSxuZXcgU20odC5jKSkscj1uZXcgdHIobiksYzN0KHIpLF90PUJyKHFlKHQuYywockQoKSxyU3QpKSksdz11KHFlKHQuYyxLaHQpLDMxNiksWXQ9dShxZSh0LmMsWWh0KSw0MjkpLGg9dShxZSh0LmMsdFN0KSw0ODIpLEJ0PXUocWUodC5jLFdodCksNDMwKSx0Lmo9WHQoeWUocWUodC5jLGQzZSkpKSxkPXQuYSx3Lmcpe2Nhc2UgMDpkPXQuYTticmVhaztjYXNlIDE6ZD10LmI7YnJlYWs7Y2FzZSAyOmQ9dC5pO2JyZWFrO2Nhc2UgMzpkPXQuZTticmVhaztjYXNlIDQ6ZD10LmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4ocEgrKHcuZiE9bnVsbD93LmY6IiIrdy5nKSkpfWlmKHQuZD1uZXcgYVF0KGQsWXQsaCksSnQodC5kLChHOCgpLHVTKSxSZShxZSh0LmMsaDNlKSkpLHQuZC5jPWplKFJlKHFlKHQuYyxlU3QpKSksaSQodC5jKS5pPT0wKXJldHVybiB0LmQ7Zm9yKE09bmV3IGVyKGkkKHQuYykpO00uZSE9TS5pLmdjKCk7KXtmb3IoQz11KGRyKE0pLDMzKSxIPUMuZy8yLEY9Qy5mLzIsY2U9bmV3ICRlKEMuaStILEMuaitGKTtrbCh0LmcsY2UpOylGbShjZSwoYi5NYXRoLnJhbmRvbSgpLS41KSp5ZCwoYi5NYXRoLnJhbmRvbSgpLS41KSp5ZCk7WT11KHFlKEMsKGNpKCksS08pKSwxNDIpLHR0PW5ldyBFUXQoY2UsbmV3IGloKGNlLmEtSC10LmovMi1ZLmIsY2UuYi1GLXQuai8yLVkuZCxDLmcrdC5qKyhZLmIrWS5jKSxDLmYrdC5qKyhZLmQrWS5hKSkpLHVlKHQuZC5pLHR0KSxraSh0LmcsY2UsbmV3IGxhKHR0LEMpKX1zd2l0Y2goQnQuZyl7Y2FzZSAwOmlmKF90PT1udWxsKXQuZC5kPXUoRmUodC5kLmksMCksNjUpO2Vsc2UgZm9yKEx0PW5ldyBTKHQuZC5pKTtMdC5hPEx0LmMuYy5sZW5ndGg7KXR0PXUoSihMdCksNjUpLFY9dSh1KEpuKHQuZyx0dC5hKSw0NikuYiwzMykuemcoKSxWIT1udWxsJiZobihWLF90KSYmKHQuZC5kPXR0KTticmVhaztjYXNlIDE6Zm9yKHM9bmV3ICRlKHQuYy5nLHQuYy5mKSxzLmEqPS41LHMuYio9LjUsRm0ocyx0LmMuaSx0LmMuaiksbz1zcyxndD1uZXcgUyh0LmQuaSk7Z3QuYTxndC5jLmMubGVuZ3RoOyl0dD11KEooZ3QpLDY1KSxrPUhwKHR0LmEscyksazxvJiYobz1rLHQuZC5kPXR0KTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihwSCsoQnQuZiE9bnVsbD9CdC5mOiIiK0J0LmcpKSl9cmV0dXJuIHQuZH1mdW5jdGlvbiBCaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlO2ZvcihZdD11KFN0KCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSksMCksMjAyKSxDPW5ldyBEdSxCdD1uZXcgQ3IsY2U9SnVlKFl0KSxzdShCdC5mLFl0LGNlKSxGPW5ldyBDcixyPW5ldyBRaSxWPUJwKEwxKGN0KG90KEIxLDEpLEllLDIwLDAsWyghZS5kJiYoZS5kPW5ldyBDbihXcyxlLDgsNSkpLGUuZCksKCFlLmUmJihlLmU9bmV3IENuKFdzLGUsNyw0KSksZS5lKV0pKSk7enIoVik7KXtpZihIPXUoTHIoViksNzkpLCghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBydChuZXcgUG4obGRlKyghdC5hJiYodC5hPW5ldyBoZShaaSx0LDYsNikpLHQuYSkuaSkpO0ghPXQmJih0dD11KFN0KCghSC5hJiYoSC5hPW5ldyBoZShaaSxILDYsNikpLEguYSksMCksMjAyKSxocyhyLHR0LHIuYy5iLHIuYyksWT11KGVjKEFvKEJ0LmYsdHQpKSwxMiksWXx8KFk9SnVlKHR0KSxzdShCdC5mLHR0LFkpKSxNPW4/bmEobmV3IHlvKHUoRmUoY2UsY2UuYy5sZW5ndGgtMSksOCkpLHUoRmUoWSxZLmMubGVuZ3RoLTEpLDgpKTpuYShuZXcgeW8oKEFuKDAsY2UuYy5sZW5ndGgpLHUoY2UuY1swXSw4KSkpLChBbigwLFkuYy5sZW5ndGgpLHUoWS5jWzBdLDgpKSksc3UoRi5mLHR0LE0pKX1pZihyLmIhPTApZm9yKGd0PXUoRmUoY2Usbj9jZS5jLmxlbmd0aC0xOjApLDgpLGs9MTtrPGNlLmMubGVuZ3RoO2srKyl7Zm9yKEx0PXUoRmUoY2Usbj9jZS5jLmxlbmd0aC0xLWs6ayksOCkscz1laShyLDApO3MuYiE9cy5kLmM7KXR0PXUodGkocyksMjAyKSxZPXUoZWMoQW8oQnQuZix0dCkpLDEyKSxZLmMubGVuZ3RoPD1rP0gkKHMpOihfdD1MaShuZXcgeW8odShGZShZLG4/WS5jLmxlbmd0aC0xLWs6ayksOCkpLHUoZWMoQW8oRi5mLHR0KSksOCkpLChMdC5hIT1fdC5hfHxMdC5iIT1fdC5iKSYmKG89THQuYS1ndC5hLGQ9THQuYi1ndC5iLGg9X3QuYS1ndC5hLHc9X3QuYi1ndC5iLGgqZD09dypvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShoPT0wfHxpc05hTihoKT9oOmg8MD8tMToxKSYmKGQ9PTB8fGlzTmFOKGQpP2Q6ZDwwPy0xOjEpPT0odz09MHx8aXNOYU4odyk/dzp3PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhoKXx8Yi5NYXRoLmFicyhkKTxiLk1hdGguYWJzKHcpKSYmaHMoQyxMdCxDLmMuYixDLmMpOms+MSYmaHMoQyxndCxDLmMuYixDLmMpLEgkKHMpKSk7Z3Q9THR9cmV0dXJuIEN9ZnVuY3Rpb24gSTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dCxndCxMdCxfdCxCdCxZdCxjZSxTZSxXZSxRZSxSbix6bixocixwaSxScyxYbCxLaCxXMTtmb3Iod3IobiwiR3JlZWR5IGN5Y2xlIHJlbW92YWwiLDEpLF90PWUuYSxXMT1fdC5jLmxlbmd0aCx0LmE9UHQoVHIsWHIsMjUsVzEsMTUsMSksdC5jPVB0KFRyLFhyLDI1LFcxLDE1LDEpLHQuYj1QdChUcixYciwyNSxXMSwxNSwxKSxrPTAsZ3Q9bmV3IFMoX3QpO2d0LmE8Z3QuYy5jLmxlbmd0aDspe2ZvcihZPXUoSihndCksMTApLFkucD1rLFFlPW5ldyBTKFkuaik7UWUuYTxRZS5jLmMubGVuZ3RoOyl7Zm9yKGNlPXUoSihRZSksMTEpLGQ9bmV3IFMoY2UuZSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KEooZCksMTcpLHIuYy5pIT1ZJiYoaHI9dShRKHIsKFRlKCksdzcpKSwxOSkuYSx0LmFba10rPWhyPjA/aHIrMToxKTtmb3IoaD1uZXcgUyhjZS5nKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoSihoKSwxNyksci5kLmkhPVkmJihocj11KFEociwoVGUoKSx3NykpLDE5KS5hLHQuY1trXSs9aHI+MD9ocisxOjEpfXQuY1trXT09MD9uaSh0LmUsWSk6dC5hW2tdPT0wJiZuaSh0LmYsWSksKytrfWZvcihWPS0xLEg9MSxNPW5ldyBsZSx0LmQ9dShRKGUsKHNlKCksTzYpKSwyMzApO1cxPjA7KXtmb3IoO3QuZS5iIT0wOylScz11KGtudCh0LmUpLDEwKSx0LmJbUnMucF09Vi0tLEs1dCh0LFJzKSwtLVcxO2Zvcig7dC5mLmIhPTA7KVhsPXUoa250KHQuZiksMTApLHQuYltYbC5wXT1IKyssSzV0KHQsWGwpLC0tVzE7aWYoVzE+MCl7Zm9yKEY9X2EsTHQ9bmV3IFMoX3QpO0x0LmE8THQuYy5jLmxlbmd0aDspWT11KEooTHQpLDEwKSx0LmJbWS5wXT09MCYmKEJ0PXQuY1tZLnBdLXQuYVtZLnBdLEJ0Pj1GJiYoQnQ+RiYmKE0uYz1QdChYbixJZSwxLDAsNSwxKSxGPUJ0KSxNLmNbTS5jLmxlbmd0aF09WSkpO0M9dC5aZihNKSx0LmJbQy5wXT1IKyssSzV0KHQsQyksLS1XMX19Zm9yKHBpPV90LmMubGVuZ3RoKzEsaz0wO2s8X3QuYy5sZW5ndGg7aysrKXQuYltrXTwwJiYodC5iW2tdKz1waSk7Zm9yKHR0PW5ldyBTKF90KTt0dC5hPHR0LmMuYy5sZW5ndGg7KWZvcihZPXUoSih0dCksMTApLHpuPWJadChZLmopLFNlPXpuLFdlPTAsUm49U2UubGVuZ3RoO1dlPFJuOysrV2UpZm9yKGNlPVNlW1dlXSxZdD1nZChjZS5nKSxzPVl0LG89MCx3PXMubGVuZ3RoO288dzsrK28pcj1zW29dLEtoPXIuZC5pLnAsdC5iW1kucF0+dC5iW0toXSYmKGR3KHIsITApLEp0KGUseE8sKEZuKCksITApKSk7dC5hPW51bGwsdC5jPW51bGwsdC5iPW51bGwsX2godC5mKSxfaCh0LmUpLG9yKG4pfWZ1bmN0aW9uIFJoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7Zm9yKHI9bmV3IGxlLGQ9bmV3IGxlLHR0PWUvMixIPXQuZ2MoKSxzPXUodC5YYigwKSw4KSxndD11KHQuWGIoMSksOCksVj1Vc3Qocy5hLHMuYixndC5hLGd0LmIsdHQpLHVlKHIsKEFuKDAsVi5jLmxlbmd0aCksdShWLmNbMF0sOCkpKSx1ZShkLChBbigxLFYuYy5sZW5ndGgpLHUoVi5jWzFdLDgpKSksaz0yO2s8SDtrKyspWT1zLHM9Z3QsZ3Q9dSh0LlhiKGspLDgpLFY9VXN0KHMuYSxzLmIsWS5hLFkuYix0dCksdWUociwoQW4oMSxWLmMubGVuZ3RoKSx1KFYuY1sxXSw4KSkpLHVlKGQsKEFuKDAsVi5jLmxlbmd0aCksdShWLmNbMF0sOCkpKSxWPVVzdChzLmEscy5iLGd0LmEsZ3QuYix0dCksdWUociwoQW4oMCxWLmMubGVuZ3RoKSx1KFYuY1swXSw4KSkpLHVlKGQsKEFuKDEsVi5jLmxlbmd0aCksdShWLmNbMV0sOCkpKTtmb3IoVj1Vc3QoZ3QuYSxndC5iLHMuYSxzLmIsdHQpLHVlKHIsKEFuKDEsVi5jLmxlbmd0aCksdShWLmNbMV0sOCkpKSx1ZShkLChBbigwLFYuYy5sZW5ndGgpLHUoVi5jWzBdLDgpKSksbj1uZXcgRHUsaD1uZXcgbGUsbmkobiwoQW4oMCxyLmMubGVuZ3RoKSx1KHIuY1swXSw4KSkpLEM9MTtDPHIuYy5sZW5ndGgtMjtDKz0yKW89KEFuKEMsci5jLmxlbmd0aCksdShyLmNbQ10sOCkpLEY9UWFlKChBbihDLTEsci5jLmxlbmd0aCksdShyLmNbQy0xXSw4KSksbywoQW4oQysxLHIuYy5sZW5ndGgpLHUoci5jW0MrMV0sOCkpLChBbihDKzIsci5jLmxlbmd0aCksdShyLmNbQysyXSw4KSkpLCFpc0Zpbml0ZShGLmEpfHwhaXNGaW5pdGUoRi5iKT9ocyhuLG8sbi5jLmIsbi5jKTpocyhuLEYsbi5jLmIsbi5jKTtmb3Iobmkobix1KEZlKHIsci5jLmxlbmd0aC0xKSw4KSksdWUoaCwoQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSw4KSkpLE09MTtNPGQuYy5sZW5ndGgtMjtNKz0yKW89KEFuKE0sZC5jLmxlbmd0aCksdShkLmNbTV0sOCkpLEY9UWFlKChBbihNLTEsZC5jLmxlbmd0aCksdShkLmNbTS0xXSw4KSksbywoQW4oTSsxLGQuYy5sZW5ndGgpLHUoZC5jW00rMV0sOCkpLChBbihNKzIsZC5jLmxlbmd0aCksdShkLmNbTSsyXSw4KSkpLCFpc0Zpbml0ZShGLmEpfHwhaXNGaW5pdGUoRi5iKT9oLmNbaC5jLmxlbmd0aF09bzpoLmNbaC5jLmxlbmd0aF09Rjtmb3IodWUoaCx1KEZlKGQsZC5jLmxlbmd0aC0xKSw4KSksdz1oLmMubGVuZ3RoLTE7dz49MDt3LS0pbmkobiwoQW4odyxoLmMubGVuZ3RoKSx1KGguY1t3XSw4KSkpO3JldHVybiBufWZ1bmN0aW9uIEQ1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSDtpZihoPSEwLE09bnVsbCxyPW51bGwscz1udWxsLGU9ITEsSD1HNGUsaz1udWxsLG89bnVsbCxkPTAsdz1aaXQodCxkLFlBdCxYQXQpLHc8dC5sZW5ndGgmJihScih3LHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQodyk9PTU4KSYmKE09dC5zdWJzdHIoZCx3LWQpLGQ9dysxKSxuPU0hPW51bGwmJnBNKHJVLE0udG9Mb3dlckNhc2UoKSksbil7aWYodz10Lmxhc3RJbmRleE9mKCIhLyIpLHc9PS0xKXRocm93IHJ0KG5ldyBQbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7aD0hMCxyPURsKHQsZCwrK3cpLGQ9d31lbHNlIGQ+PTAmJmhuKHQuc3Vic3RyKGQsMiksIi8vIik/KGQrPTIsdz1aaXQodCxkLGlBLHNBKSxyPXQuc3Vic3RyKGQsdy1kKSxkPXcpOk0hPW51bGwmJihkPT10Lmxlbmd0aHx8KFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NDcpKSYmKGg9ITEsdz1fMnQodCxFdSgzNSksZCksdz09LTEmJih3PXQubGVuZ3RoKSxyPXQuc3Vic3RyKGQsdy1kKSxkPXcpO2lmKCFuJiZkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih3PVppdCh0LGQrMSxpQSxzQSksQz10LnN1YnN0cihkKzEsdy0oZCsxKSksQy5sZW5ndGg+MCYmYmEoQyxDLmxlbmd0aC0xKT09NTgmJihzPUMsZD13KSksZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKT09NDcpJiYoKytkLGU9ITApLGQ8dC5sZW5ndGgmJihScihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCkhPTYzKSYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9MzUpKXtmb3IoRj1uZXcgbGU7ZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NjMpJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT0zNSk7KXc9Wml0KHQsZCxpQSxzQSksdWUoRix0LnN1YnN0cihkLHctZCkpLGQ9dyxkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih5dW4odCwrK2QpfHwoRi5jW0YuYy5sZW5ndGhdPSIiKSk7SD1QdChBZSx0ZSwyLEYuYy5sZW5ndGgsNiwxKSxEMShGLEgpfXJldHVybiBkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT02MykmJih3PWw4KHQsMzUsKytkKSx3PT0tMSYmKHc9dC5sZW5ndGgpLGs9dC5zdWJzdHIoZCx3LWQpLGQ9dyksZDx0Lmxlbmd0aCYmKG89T00odCwrK2QpKSxrM24oaCxNLHIscyxILGspLG5ldyBlYXQoaCxNLHIscyxlLEgsayxvKX1mdW5jdGlvbiBPNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoO2ZvcihScz1uZXcgbGUsVj1uZXcgUyhlLmIpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihGPXUoSihWKSwyOSksWXQ9bmV3IFMoRi5hKTtZdC5hPFl0LmMuYy5sZW5ndGg7KXtmb3IoQnQ9dShKKFl0KSwxMCksQnQucD0tMSxNPV9hLFdlPV9hLFJuPW5ldyBTKEJ0LmopO1JuLmE8Um4uYy5jLmxlbmd0aDspe2ZvcihRZT11KEooUm4pLDExKSxzPW5ldyBTKFFlLmUpO3MuYTxzLmMuYy5sZW5ndGg7KW49dShKKHMpLDE3KSx6bj11KFEobiwoVGUoKSxGNikpLDE5KS5hLE09Yi5NYXRoLm1heChNLHpuKTtmb3Iocj1uZXcgUyhRZS5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksem49dShRKG4sKFRlKCksRjYpKSwxOSkuYSxXZT1iLk1hdGgubWF4KFdlLHpuKX1KdChCdCxwVixkZShNKSksSnQoQnQsYlYsZGUoV2UpKX1mb3IoZ3Q9MCxIPW5ldyBTKGUuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKEY9dShKKEgpLDI5KSxZdD1uZXcgUyhGLmEpO1l0LmE8WXQuYy5jLmxlbmd0aDspQnQ9dShKKFl0KSwxMCksQnQucDwwJiYocGk9bmV3IE5wdCxwaS5iPWd0KysseHVlKHQsQnQscGkpLFJzLmNbUnMuYy5sZW5ndGhdPXBpKTtmb3IoU2U9SGQoUnMuYy5sZW5ndGgpLEM9SGQoUnMuYy5sZW5ndGgpLGg9MDtoPFJzLmMubGVuZ3RoO2grKyl1ZShTZSxuZXcgbGUpLHVlKEMsZGUoMCkpO2ZvcihuNG4oZSxScyxTZSxDKSxYbD11KEQxKFJzLFB0KHltZSxTMWUsMjU3LFJzLmMubGVuZ3RoLDAsMSkpLDg0MCksY2U9dShEMShTZSxQdChwaCx4eSwxNSxTZS5jLmxlbmd0aCwwLDEpKSwxOTIpLGs9UHQoVHIsWHIsMjUsQy5jLmxlbmd0aCwxNSwxKSxkPTA7ZDxrLmxlbmd0aDtkKyspa1tkXT0oQW4oZCxDLmMubGVuZ3RoKSx1KEMuY1tkXSwxOSkpLmE7Zm9yKEx0PTAsX3Q9bmV3IGxlLHc9MDt3PFhsLmxlbmd0aDt3Kyspa1t3XT09MCYmdWUoX3QsWGxbd10pO2Zvcih0dD1QdChUcixYciwyNSxYbC5sZW5ndGgsMTUsMSk7X3QuYy5sZW5ndGghPTA7KWZvcihwaT11KEFnKF90LDApLDI1NyksdHRbcGkuYl09THQrKzshY2VbcGkuYl0uZGMoKTspS2g9dShjZVtwaS5iXS4kYygwKSwyNTcpLC0ta1tLaC5iXSxrW0toLmJdPT0wJiYoX3QuY1tfdC5jLmxlbmd0aF09S2gpO2Zvcih0LmE9UHQoeW1lLFMxZSwyNTcsWGwubGVuZ3RoLDAsMSksbz0wO288WGwubGVuZ3RoO28rKylmb3IoWT1YbFtvXSxocj10dFtvXSx0LmFbaHJdPVksWS5iPWhyLFl0PW5ldyBTKFkuZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylCdD11KEooWXQpLDEwKSxCdC5wPWhyO3JldHVybiB0LmF9ZnVuY3Rpb24gZmkodCl7dmFyIGUsbixyO2lmKHQuZD49dC5qKXt0LmE9LTEsdC5jPTE7cmV0dXJufWlmKGU9YmEodC5pLHQuZCsrKSx0LmE9ZSx0LmI9PTEpe3N3aXRjaChlKXtjYXNlIDkyOmlmKHI9MTAsdC5kPj10LmopdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTt0LmE9YmEodC5pLHQuZCsrKTticmVhaztjYXNlIDQ1Oih0LmUmNTEyKT09NTEyJiZ0LmQ8dC5qJiZiYSh0LmksdC5kKT09OTE/KCsrdC5kLHI9MjQpOnI9MDticmVhaztjYXNlIDkxOmlmKCh0LmUmNTEyKSE9NTEyJiZ0LmQ8dC5qJiZiYSh0LmksdC5kKT09NTgpeysrdC5kLHI9MjA7YnJlYWt9ZGVmYXVsdDooZSY2NDUxMik9PU9EJiZ0LmQ8dC5qJiYobj1iYSh0LmksdC5kKSwobiY2NDUxMik9PTU2MzIwJiYodC5hPVlhKyhlLU9EPDwxMCkrbi01NjMyMCwrK3QuZCkpLHI9MH10LmM9cjtyZXR1cm59c3dpdGNoKGUpe2Nhc2UgMTI0OnI9MjticmVhaztjYXNlIDQyOnI9MzticmVhaztjYXNlIDQzOnI9NDticmVhaztjYXNlIDYzOnI9NTticmVhaztjYXNlIDQxOnI9NzticmVhaztjYXNlIDQ2OnI9ODticmVhaztjYXNlIDkxOnI9OTticmVhaztjYXNlIDk0OnI9MTE7YnJlYWs7Y2FzZSAzNjpyPTEyO2JyZWFrO2Nhc2UgNDA6aWYocj02LHQuZD49dC5qfHxiYSh0LmksdC5kKSE9NjMpYnJlYWs7aWYoKyt0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksWGN0KSkpKTtzd2l0Y2goZT1iYSh0LmksdC5kKyspLGUpe2Nhc2UgNTg6cj0xMzticmVhaztjYXNlIDYxOnI9MTQ7YnJlYWs7Y2FzZSAzMzpyPTE1O2JyZWFrO2Nhc2UgOTE6cj0xOTticmVhaztjYXNlIDYyOnI9MTg7YnJlYWs7Y2FzZSA2MDppZih0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksWGN0KSkpKTtpZihlPWJhKHQuaSx0LmQrKyksZT09NjEpcj0xNjtlbHNlIGlmKGU9PTMzKXI9MTc7ZWxzZSB0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQmRlKSkpKTticmVhaztjYXNlIDM1OmZvcig7dC5kPHQuaiYmKGU9YmEodC5pLHQuZCsrKSxlIT00MSk7KTtpZihlIT00MSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUmRlKSkpKTtyPTIxO2JyZWFrO2RlZmF1bHQ6aWYoZT09NDV8fDk3PD1lJiZlPD0xMjJ8fDY1PD1lJiZlPD05MCl7LS10LmQscj0yMjticmVha31lbHNlIGlmKGU9PTQwKXtyPTIzO2JyZWFrfXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxYY3QpKSkpfWJyZWFrO2Nhc2UgOTI6aWYocj0xMCx0LmQ+PXQuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksa0gpKSkpO3QuYT1iYSh0LmksdC5kKyspO2JyZWFrO2RlZmF1bHQ6cj0wfXQuYz1yfWZ1bmN0aW9uIE41bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYoU2U9dShRKHQsKFRlKCksb3MpKSw5OCksU2UhPShvYSgpLEgxKSYmU2UhPXliKXtmb3IoVj10LmIsSD1WLmMubGVuZ3RoLEM9bmV3IFljKChCbChIKzIsQmF0KSxxJChPYShPYSg1LEgrMiksKEgrMikvMTB8MCkpKSksWT1uZXcgWWMoKEJsKEgrMixCYXQpLHEkKE9hKE9hKDUsSCsyKSwoSCsyKS8xMHwwKSkpKSx1ZShDLG5ldyBDciksdWUoQyxuZXcgQ3IpLHVlKFksbmV3IGxlKSx1ZShZLG5ldyBsZSksY2U9bmV3IGxlLGU9MDtlPEg7ZSsrKWZvcihuPShBbihlLFYuYy5sZW5ndGgpLHUoVi5jW2VdLDI5KSksV2U9KEFuKGUsQy5jLmxlbmd0aCksdShDLmNbZV0sODMpKSx0dD1uZXcgQ3IsQy5jW0MuYy5sZW5ndGhdPXR0LFJuPShBbihlLFkuYy5sZW5ndGgpLHUoWS5jW2VdLDE1KSksTHQ9bmV3IGxlLFkuY1tZLmMubGVuZ3RoXT1MdCxzPW5ldyBTKG4uYSk7cy5hPHMuYy5jLmxlbmd0aDspe2lmKHI9dShKKHMpLDEwKSxaeXQocikpe2NlLmNbY2UuYy5sZW5ndGhdPXI7Y29udGludWV9Zm9yKGs9bmV3IGFyKGxyKGpvKHIpLmEuS2MoKSxuZXcgeikpO3pyKGspOylkPXUoTHIoayksMTcpLHpuPWQuYy5pLFp5dCh6bikmJihRZT11KFdlLnhjKFEoem4sKHNlKCksX2kpKSksMTApLFFlfHwoUWU9d29lKHQsem4pLFdlLnpjKFEoem4sX2kpLFFlKSxSbi5GYyhRZSkpLERhKGQsdShGZShRZS5qLDEpLDExKSkpO2Zvcih3PW5ldyBhcihscihNcyhyKS5hLktjKCksbmV3IHopKTt6cih3KTspZD11KExyKHcpLDE3KSxocj1kLmQuaSxaeXQoaHIpJiYoZ3Q9dShKbih0dCxRKGhyLChzZSgpLF9pKSkpLDEwKSxndHx8KGd0PXdvZSh0LGhyKSxraSh0dCxRKGhyLF9pKSxndCksTHQuY1tMdC5jLmxlbmd0aF09Z3QpLHNhKGQsdShGZShndC5qLDApLDExKSkpfWZvcihNPTA7TTxZLmMubGVuZ3RoO00rKylpZihfdD0oQW4oTSxZLmMubGVuZ3RoKSx1KFkuY1tNXSwxNSkpLCFfdC5kYygpKWZvcihGPW51bGwsTT09MD8oRj1uZXcgQ2godCksVW0oMCxWLmMubGVuZ3RoKSxXOShWLmMsMCxGKSk6TT09Qy5jLmxlbmd0aC0xPyhGPW5ldyBDaCh0KSxWLmNbVi5jLmxlbmd0aF09Rik6Rj0oQW4oTS0xLFYuYy5sZW5ndGgpLHUoVi5jW00tMV0sMjkpKSxoPV90LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDEwKSxrbyhvLEYpO2ZvcihZdD1uZXcgUyhjZSk7WXQuYTxZdC5jLmMubGVuZ3RoOylCdD11KEooWXQpLDEwKSxrbyhCdCxudWxsKTtKdCh0LChzZSgpLE9sdCksY2UpfX1mdW5jdGlvbiBQNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0O2lmKHdyKG4sIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IoWXQ9dShRKGUsKFRlKCksUTl0KSksMTkpLmEsdz0wLGg9MCxGPW5ldyBTKGUuYSk7Ri5hPEYuYy5jLmxlbmd0aDspZm9yKE09dShKKEYpLDEwKSxNLnA9dysrLG89bmV3IGFyKGxyKE1zKE0pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLHMucD1oKys7Zm9yKHQuZD1QdChkbCxpMCwyNSx3LDE2LDEpLHQuYT1QdChkbCxpMCwyNSxoLDE2LDEpLHQuYj1QdChUcixYciwyNSx3LDE1LDEpLHQuZT1QdChUcixYciwyNSx3LDE1LDEpLHQuZj1QdChUcixYciwyNSx3LDE1LDEpLFEkKHQuYyksZWRuKHQsZSksVj1uZXcgVmoobmV3IGlSKHQpKSxCdD1uZXcgUyhlLmEpO0J0LmE8QnQuYy5jLmxlbmd0aDspe2ZvcihMdD11KEooQnQpLDEwKSxvPW5ldyBhcihscihqbyhMdCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXM9dShMcihvKSwxNyksdC5hW3MucF18fCsrdC5iW0x0LnBdO3QuYltMdC5wXT09MCYmTTgoZEUoVixMdCkpfWZvcihkPTA7Vi5iLmMubGVuZ3RoIT0wOylmb3IoTHQ9dShRcnQoViksMTApLHQuZltMdC5wXT1kKyssbz1uZXcgYXIobHIoTXMoTHQpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTHIobyksMTcpLCF0LmFbcy5wXSYmKHR0PXMuZC5pLC0tdC5iW3R0LnBdLGxuKHQuYyx0dCxkZSh0LmZbTHQucF0pKSx0LmJbdHQucF09PTAmJk04KGRFKFYsdHQpKSk7Zm9yKEg9bmV3IFZqKG5ldyBqdHQodCkpLF90PW5ldyBTKGUuYSk7X3QuYTxfdC5jLmMubGVuZ3RoOyl7Zm9yKEx0PXUoSihfdCksMTApLG89bmV3IGFyKGxyKE1zKEx0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KExyKG8pLDE3KSx0LmFbcy5wXXx8Kyt0LmVbTHQucF07dC5lW0x0LnBdPT0wJiZNOChkRShILEx0KSl9Zm9yKEM9bmV3IGxlLHI9T1F0KGUsQyk7SC5iLmMubGVuZ3RoIT0wOylmb3IoZ3Q9dShRcnQoSCksMTApLChyLmEuYy5sZW5ndGg+PVl0fHwhZWhuKGd0LHIpKSYmKHI9T1F0KGUsQykpLGtvKGd0LHIpLG89bmV3IGFyKGxyKGpvKGd0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KExyKG8pLDE3KSwhdC5hW3MucF0mJihZPXMuYy5pLC0tdC5lW1kucF0sdC5lW1kucF09PTAmJk04KGRFKEgsWSkpKTtmb3Ioaz1DLmMubGVuZ3RoLTE7az49MDstLWspdWUoZS5iLChBbihrLEMuYy5sZW5ndGgpLHUoQy5jW2tdLDI5KSkpO2UuYS5jPVB0KFhuLEllLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIGpoZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGs7Zm9yKHQuYj0xLGZpKHQpLGU9bnVsbCx0LmM9PTAmJnQuYT09OTQ/KGZpKHQpLGU9KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKGUsMCxXRSksZD1uZXcgTmwoNCkpOmQ9KGdpKCksZ2koKSxuZXcgTmwoNCkpLHM9ITA7KGs9dC5jKSE9MTspe2lmKGs9PTAmJnQuYT09OTMmJiFzKXtlJiYoX18oZSxkKSxkPWUpO2JyZWFrfWlmKG49dC5hLHI9ITEsaz09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOnZ5KGQsa0UobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0odnkoZCxrRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodz1uNXQodCxuKSwhdyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUWN0KSkpKTt2eShkLHcpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPUY1dCh0KX1lbHNlIGlmKGs9PTI0JiYhcyl7aWYoZSYmKF9fKGUsZCksZD1lKSxvPWpoZSh0KSxfXyhkLG8pLHQuYyE9MHx8dC5hIT05Myl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksV2RlKSkpKTticmVha31pZihmaSh0KSwhcil7aWYoaz09MCl7aWYobj09OTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFM4dCkpKSk7aWYobj09OTMpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEE4dCkpKSk7aWYobj09NDUmJiFzJiZ0LmEhPTkzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxaY3QpKSkpfWlmKHQuYyE9MHx8dC5hIT00NXx8bj09NDUmJnMpamMoZCxuLG4pO2Vsc2V7aWYoZmkodCksKGs9dC5jKT09MSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksRUgpKSkpO2lmKGs9PTAmJnQuYT09OTMpamMoZCxuLG4pLGpjKGQsNDUsNDUpO2Vsc2V7aWYoaz09MCYmdC5hPT05M3x8az09MjQpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFpjdCkpKSk7aWYoaD10LmEsaz09MCl7aWYoaD09OTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFM4dCkpKSk7aWYoaD09OTMpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEE4dCkpKSk7aWYoaD09NDUpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFpjdCkpKSl9ZWxzZSBrPT0xMCYmKGg9RjV0KHQpKTtpZihmaSh0KSxuPmgpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFhkZSkpKSk7amMoZCxuLGgpfX19cz0hMX1pZih0LmM9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtyZXR1cm4gYjQoZCksVF8oZCksdC5iPTAsZmkodCksZH1mdW5jdGlvbiBGNW4odCl7SXIodC5jLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwiXSkpLElyKHQuZCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnRlZ2VyIl0pKSxJcih0LmUsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYm9vbGVhbiJdKSksSXIodC5mLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVCb29sZWFuIixvaSwiRUJvb2xlYW46T2JqZWN0Il0pKSxJcih0LmksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYnl0ZSJdKSksSXIodC5nLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSJdKSksSXIodC5qLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVCeXRlIixvaSwiRUJ5dGU6T2JqZWN0Il0pKSxJcih0Lm4sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiRUNoYXIiLG9pLCJFQ2hhcjpPYmplY3QiXSkpLElyKHQudCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNkb3VibGUiXSkpLElyKHQudSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJFRG91YmxlIixvaSwiRURvdWJsZTpPYmplY3QiXSkpLElyKHQuRixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNmbG9hdCJdKSksSXIodC5HLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVGbG9hdCIsb2ksIkVGbG9hdDpPYmplY3QiXSkpLElyKHQuSSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnQiXSkpLElyKHQuSixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJFSW50IixvaSwiRUludDpPYmplY3QiXSkpLElyKHQuTixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNsb25nIl0pKSxJcih0Lk8sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtTYSwiRUxvbmciLG9pLCJFTG9uZzpPYmplY3QiXSkpLElyKHQuWixLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzaG9ydCJdKSksSXIodC4kLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbU2EsIkVTaG9ydCIsb2ksIkVTaG9ydDpPYmplY3QiXSkpLElyKHQuXyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW1NhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciXSkpfWZ1bmN0aW9uIEI1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYodC5jLmxlbmd0aD09MSlyZXR1cm4gQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMzUpO2lmKHQuYy5sZW5ndGg8PTApcmV0dXJuIG5ldyBBJDtmb3Iodz1uZXcgUyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHcpLDEzNSksTHQ9MCxWPXZpLFk9dmksRj1fYSxIPV9hLGd0PWVpKGguYiwwKTtndC5iIT1ndC5kLmM7KXR0PXUodGkoZ3QpLDg2KSxMdCs9dShRKHR0LChodygpLEVWKSksMTkpLmEsVj1iLk1hdGgubWluKFYsdHQuZS5hKSxZPWIuTWF0aC5taW4oWSx0dC5lLmIpLEY9Yi5NYXRoLm1heChGLHR0LmUuYSt0dC5mLmEpLEg9Yi5NYXRoLm1heChILHR0LmUuYit0dC5mLmIpO0p0KGgsKGh3KCksRVYpLGRlKEx0KSksSnQoaCwoZmMoKSxCUyksbmV3ICRlKFYsWSkpLEp0KGgsRk8sbmV3ICRlKEYsSCkpfWZvcih2bigpLFhzKHQsbmV3IFBRKSxZdD1uZXcgQSQsTG8oWXQsKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sOTQpKSksTT0wLFJuPTAsaz1uZXcgUyh0KTtrLmE8ay5jLmMubGVuZ3RoOyloPXUoSihrKSwxMzUpLGNlPW5hKG5jKHUoUShoLChmYygpLEZPKSksOCkpLHUoUShoLEJTKSw4KSksTT1iLk1hdGgubWF4KE0sY2UuYSksUm4rPWNlLmEqY2UuYjtmb3IoTT1iLk1hdGgubWF4KE0sYi5NYXRoLnNxcnQoUm4pKlh0KHllKFEoWXQsKGh3KCksbnllKSkpKSksU2U9WHQoeWUoUShZdCxvX3QpKSksem49MCxocj0wLEM9MCxlPVNlLGQ9bmV3IFModCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTM1KSxjZT1uYShuYyh1KFEoaCwoZmMoKSxGTykpLDgpKSx1KFEoaCxCUyksOCkpLHpuK2NlLmE+TSYmKHpuPTAsaHIrPUMrU2UsQz0wKSxXYm4oWXQsaCx6bixociksZT1iLk1hdGgubWF4KGUsem4rY2UuYSksQz1iLk1hdGgubWF4KEMsY2UuYiksem4rPWNlLmErU2U7Zm9yKEJ0PW5ldyBDcixuPW5ldyBDcixRZT1uZXcgUyh0KTtRZS5hPFFlLmMuYy5sZW5ndGg7KWZvcihXZT11KEooUWUpLDEzNSkscj1qZShSZShRKFdlLChjaSgpLFVPKSkpKSxfdD1XZS5xP1dlLnE6YTAsbz1fdC52YygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDQyKSxrbChCdCxzLmNkKCkpP0d0KHUocy5jZCgpLDE0Nikud2coKSkhPT1HdChzLmRkKCkpJiYociYma2wobixzLmNkKCkpPyhxZCgpLCIiK3Uocy5jZCgpLDE0NikudGcoKSk6KGtpKEJ0LHUocy5jZCgpLDE0Nikscy5kZCgpKSxKdChZdCx1KHMuY2QoKSwxNDYpLHMuZGQoKSksciYma2kobix1KHMuY2QoKSwxNDYpLHMuZGQoKSkpKTooa2koQnQsdShzLmNkKCksMTQ2KSxzLmRkKCkpLEp0KFl0LHUocy5jZCgpLDE0Nikscy5kZCgpKSk7cmV0dXJuIFl0fWZ1bmN0aW9uICRoZSgpeyRoZT1aLElhdCgpLFFyPW5ldyBIdixsbihRciwoYmUoKSxTZiksRzEpLGxuKFFyLHFoLEcxKSxsbihRcix0bCxHMSksbG4oUXIsQWYsRzEpLGxuKFFyLFN1LEcxKSxsbihRcixlbCxHMSksbG4oUXIsQWYsU2YpLGxuKFFyLEcxLHZoKSxsbihRcixTZix2aCksbG4oUXIscWgsdmgpLGxuKFFyLHRsLHZoKSxsbihRcixfdSx2aCksbG4oUXIsQWYsdmgpLGxuKFFyLFN1LHZoKSxsbihRcixlbCx2aCksbG4oUXIsdXUsdmgpLGxuKFFyLEcxLFdsKSxsbihRcixTZixXbCksbG4oUXIsdmgsV2wpLGxuKFFyLHFoLFdsKSxsbihRcix0bCxXbCksbG4oUXIsX3UsV2wpLGxuKFFyLEFmLFdsKSxsbihRcix1dSxXbCksbG4oUXIsS2wsV2wpLGxuKFFyLFN1LFdsKSxsbihRcixxdSxXbCksbG4oUXIsZWwsV2wpLGxuKFFyLFNmLHFoKSxsbihRcix0bCxxaCksbG4oUXIsQWYscWgpLGxuKFFyLGVsLHFoKSxsbihRcixTZix0bCksbG4oUXIscWgsdGwpLGxuKFFyLEFmLHRsKSxsbihRcix0bCx0bCksbG4oUXIsU3UsdGwpLGxuKFFyLEcxLHdoKSxsbihRcixTZix3aCksbG4oUXIsdmgsd2gpLGxuKFFyLFdsLHdoKSxsbihRcixxaCx3aCksbG4oUXIsdGwsd2gpLGxuKFFyLF91LHdoKSxsbihRcixBZix3aCksbG4oUXIsS2wsd2gpLGxuKFFyLHV1LHdoKSxsbihRcixlbCx3aCksbG4oUXIsU3Usd2gpLGxuKFFyLFVjLHdoKSxsbihRcixHMSxLbCksbG4oUXIsU2YsS2wpLGxuKFFyLHZoLEtsKSxsbihRcixxaCxLbCksbG4oUXIsdGwsS2wpLGxuKFFyLF91LEtsKSxsbihRcixBZixLbCksbG4oUXIsdXUsS2wpLGxuKFFyLGVsLEtsKSxsbihRcixxdSxLbCksbG4oUXIsVWMsS2wpLGxuKFFyLFNmLHV1KSxsbihRcixxaCx1dSksbG4oUXIsdGwsdXUpLGxuKFFyLEFmLHV1KSxsbihRcixLbCx1dSksbG4oUXIsZWwsdXUpLGxuKFFyLFN1LHV1KSxsbihRcixHMSxDdSksbG4oUXIsU2YsQ3UpLGxuKFFyLHZoLEN1KSxsbihRcixxaCxDdSksbG4oUXIsdGwsQ3UpLGxuKFFyLF91LEN1KSxsbihRcixBZixDdSksbG4oUXIsdXUsQ3UpLGxuKFFyLGVsLEN1KSxsbihRcixTZixTdSksbG4oUXIsdmgsU3UpLGxuKFFyLFdsLFN1KSxsbihRcix0bCxTdSksbG4oUXIsRzEscXUpLGxuKFFyLFNmLHF1KSxsbihRcixXbCxxdSksbG4oUXIscWgscXUpLGxuKFFyLHRsLHF1KSxsbihRcixfdSxxdSksbG4oUXIsQWYscXUpLGxuKFFyLEFmLFVjKSxsbihRcix0bCxVYyksbG4oUXIsdXUsRzEpLGxuKFFyLHV1LHFoKSxsbihRcix1dSx2aCksbG4oUXIsX3UsRzEpLGxuKFFyLF91LFNmKSxsbihRcixfdSxXbCl9ZnVuY3Rpb24gQXEodCxlKXtzd2l0Y2godC5lKXtjYXNlIDA6Y2FzZSAyOmNhc2UgNDpjYXNlIDY6Y2FzZSA0MjpjYXNlIDQ0OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDg6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTQ6Y2FzZSAxNjpjYXNlIDE4OmNhc2UgMjA6Y2FzZSAyMjpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAyODpjYXNlIDMwOmNhc2UgMzI6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzg6cmV0dXJuIG5ldyB6WHQodC5iLHQuYSxlLHQuYyk7Y2FzZSAxOnJldHVybiBuZXcgaGoodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNDM6cmV0dXJuIG5ldyBCVXQodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMzpyZXR1cm4gbmV3IFNzKHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDQ1OnJldHVybiBuZXcgT3UodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNDE6cmV0dXJuIG5ldyBUbCh1KExoKHQuYyksMjYpLHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDUwOnJldHVybiBuZXcgJGVlKHUoTGgodC5jKSwyNiksdC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgNTpyZXR1cm4gbmV3IGl2dCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0NzpyZXR1cm4gbmV3IEtXdCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA3OnJldHVybiBuZXcgaGUodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgNDk6cmV0dXJuIG5ldyBJeCh0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA5OnJldHVybiBuZXcgalV0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDExOnJldHVybiBuZXcgUlV0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDEzOnJldHVybiBuZXcgYjJ0KHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDE1OnJldHVybiBuZXcgU2oodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMTc6cmV0dXJuIG5ldyAkVXQodC5hLGUsVmkoZS5UZygpLHQuYykpO2Nhc2UgMTk6cmV0dXJuIG5ldyBVMyh0LmEsZSxWaShlLlRnKCksdC5jKSk7Y2FzZSAyMTpyZXR1cm4gbmV3IHAydCh0LmEsZSxWaShlLlRnKCksdC5jKSk7Y2FzZSAyMzpyZXR1cm4gbmV3IFdNKHQuYSxlLFZpKGUuVGcoKSx0LmMpKTtjYXNlIDI1OnJldHVybiBuZXcgUVd0KHQuYSxlLFZpKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDI3OnJldHVybiBuZXcgQ24odC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMjk6cmV0dXJuIG5ldyBYV3QodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzE6cmV0dXJuIG5ldyBZV3QodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzM6cmV0dXJuIG5ldyBhdnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzU6cmV0dXJuIG5ldyBzdnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzc6cmV0dXJuIG5ldyBmbnQodC5hLGUsVmkoZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzk6cmV0dXJuIG5ldyBVaih0LmEsZSxWaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0MDpyZXR1cm4gbmV3IGlzKGUsVmkoZS5UZygpLHQuYykpO2RlZmF1bHQ6dGhyb3cgcnQobmV3IEdvKCJVbmtub3duIGZlYXR1cmUgc3R5bGU6ICIrdC5lKSl9fWZ1bmN0aW9uIFI1bih0LGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2U7c3dpdGNoKHdyKG4sIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksdC5hPWUsdC5jPUltbihlKSxyPXUoUShlLChUZSgpLFFsdCkpLDI3NCksSD1qZShSZShRKGUsVFMpKSksdC5kPXI9PShuRCgpLEJHKSYmIUh8fHI9PVNsdCxiM24odCxlKSxZdD1udWxsLGNlPW51bGwsZ3Q9bnVsbCxMdD1udWxsLHR0PShCbCg0LG15KSxuZXcgWWMoNCkpLHUoUShlLFFsdCksMjc0KS5nKXtjYXNlIDM6Z3Q9bmV3IHg0KGUsdC5jLmQsKEUxKCksajIpLChkZCgpLEtnKSksdHQuY1t0dC5jLmxlbmd0aF09Z3Q7YnJlYWs7Y2FzZSAxOkx0PW5ldyB4NChlLHQuYy5kLChFMSgpLHoxKSwoZGQoKSxLZykpLHR0LmNbdHQuYy5sZW5ndGhdPUx0O2JyZWFrO2Nhc2UgNDpZdD1uZXcgeDQoZSx0LmMuZCwoRTEoKSxqMiksKGRkKCksUncpKSx0dC5jW3R0LmMubGVuZ3RoXT1ZdDticmVhaztjYXNlIDI6Y2U9bmV3IHg0KGUsdC5jLmQsKEUxKCksejEpLChkZCgpLFJ3KSksdHQuY1t0dC5jLmxlbmd0aF09Y2U7YnJlYWs7ZGVmYXVsdDpndD1uZXcgeDQoZSx0LmMuZCwoRTEoKSxqMiksKGRkKCksS2cpKSxMdD1uZXcgeDQoZSx0LmMuZCx6MSxLZyksWXQ9bmV3IHg0KGUsdC5jLmQsajIsUncpLGNlPW5ldyB4NChlLHQuYy5kLHoxLFJ3KSx0dC5jW3R0LmMubGVuZ3RoXT1ZdCx0dC5jW3R0LmMubGVuZ3RoXT1jZSx0dC5jW3R0LmMubGVuZ3RoXT1ndCx0dC5jW3R0LmMubGVuZ3RoXT1MdH1mb3Iocz1uZXcgblZ0KGUsdC5jKSxkPW5ldyBTKHR0KTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxODApLFQ1bihzLG8sdC5iKSxveW4obyk7Zm9yKEY9bmV3IFBzZShlLHQuYyksdz1uZXcgUyh0dCk7dy5hPHcuYy5jLmxlbmd0aDspbz11KEoodyksMTgwKSx5NG4oRixvKTtpZihuLm4pZm9yKGs9bmV3IFModHQpO2suYTxrLmMuYy5sZW5ndGg7KW89dShKKGspLDE4MCksWWIobixvKyIgc2l6ZSBpcyAiK1dzdChvKSk7aWYoTT1udWxsLHQuZCYmKEM9WDRuKHQsdHQsdC5jLmQpLHhsZShlLEMsbikmJihNPUMpKSwhTSlmb3Ioaz1uZXcgUyh0dCk7ay5hPGsuYy5jLmxlbmd0aDspbz11KEooayksMTgwKSx4bGUoZSxvLG4pJiYoIU18fFdzdChNKT5Xc3QobykpJiYoTT1vKTtmb3IoIU0mJihNPShBbigwLHR0LmMubGVuZ3RoKSx1KHR0LmNbMF0sMTgwKSkpLFk9bmV3IFMoZS5iKTtZLmE8WS5jLmMubGVuZ3RoOylmb3IoVj11KEooWSksMjkpLEJ0PW5ldyBTKFYuYSk7QnQuYTxCdC5jLmMubGVuZ3RoOylfdD11KEooQnQpLDEwKSxfdC5uLmI9WHQoTS5wW190LnBdKStYdChNLmRbX3QucF0pO2ZvcihuLm4mJihZYihuLCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTSksWWIobiwiQmxvY2tzOiAiK3pvZShNKSksWWIobiwiQ2xhc3NlczogIitacG4oTSxuKSksWWIobiwiTWFya2VkIGVkZ2VzOiAiK3QuYikpLGg9bmV3IFModHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MCksby5nPW51bGwsby5iPW51bGwsby5hPW51bGwsby5kPW51bGwsby5qPW51bGwsby5pPW51bGwsby5wPW51bGw7TG9uKHQuYyksdC5iLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBqNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuO2ZvcihoPW5ldyBRaSxZdD11KFEobiwoVGUoKSxWbCkpLDEwMyksVj0wLFVhKGgsKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtoLmIhPTA7KWs9dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMzMpLChHdChxZShlLGRiKSkhPT1HdCgoajAoKSxnYikpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxwUykpfHxHdChxZShlLFJ5KSk9PT1HdCgodjIoKSxnUykpfHxqZShSZShxZShlLEJ5KSkpfHxHdChxZShlLFA2KSkhPT1HdCgoZXcoKSwkNCkpKSYmIWplKFJlKHFlKGsscWx0KSkpJiZibyhrLChzZSgpLFRjKSxkZShWKyspKSx0dD0hamUoUmUocWUoayxCMikpKSx0dCYmKE09KCFrLmEmJihrLmE9bmV3IGhlKG5zLGssMTAsMTEpKSxrLmEpLmkhPTAsSD1xZG4oayksRj1HdChxZShrLGp5KSk9PT1HdCgoJDAoKSxaZykpLHpuPSFyMihrLChjaSgpLFZTKSl8fGhuKEJyKHFlKGssVlMpKSxWbiksX3Q9bnVsbCx6biYmRiYmKE18fEgpJiYoX3Q9Y2xlKGspLEp0KF90LFZsLFl0KSxWcyhfdCxTTykmJmpxdChuZXcgbDN0KFh0KHllKFEoX3QsU08pKSkpLF90KSx1KHFlKGssRjIpLDE3NCkuZ2MoKSE9MCYmKEM9X3QsdXMobmV3IFRuKG51bGwsKCFrLmMmJihrLmM9bmV3IGhlKGZsLGssOSw5KSksbmV3IF9uKGsuYywxNikpKSxuZXcgX3IoQykpLHR1ZShrLF90KSkpLGNlPW4sU2U9dShKbih0LmEsdHMoaykpLDEwKSxTZSYmKGNlPVNlLmUpLEx0PW9oZSh0LGssY2UpLF90JiYoTHQuZT1fdCxfdC5lPUx0LFVhKGgsKCFrLmEmJihrLmE9bmV3IGhlKG5zLGssMTAsMTEpKSxrLmEpKSkpO2ZvcihWPTAsaHMoaCxlLGguYy5iLGguYyk7aC5iIT0wOyl7Zm9yKG89dShoLmI9PTA/bnVsbDooUW4oaC5iIT0wKSxjaChoLGguYS5hKSksMzMpLHc9bmV3IGVyKCghby5iJiYoby5iPW5ldyBoZShXcyxvLDEyLDMpKSxvLmIpKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksNzkpLF91ZShkKSwoR3QocWUoZSxkYikpIT09R3QoKGowKCksZ2IpKXx8R3QocWUoZSxSeSkpPT09R3QoKHYyKCkscFMpKXx8R3QocWUoZSxSeSkpPT09R3QoKHYyKCksZ1MpKXx8amUoUmUocWUoZSxCeSkpKXx8R3QocWUoZSxQNikpIT09R3QoKGV3KCksJDQpKSkmJmJvKGQsKHNlKCksVGMpLGRlKFYrKykpLFFlPU1vKHUoU3QoKCFkLmImJihkLmI9bmV3IENuKGJyLGQsNCw3KSksZC5iKSwwKSw4MikpLFJuPU1vKHUoU3QoKCFkLmMmJihkLmM9bmV3IENuKGJyLGQsNSw4KSksZC5jKSwwKSw4MikpLCEoamUoUmUocWUoZCxCMikpKXx8amUoUmUocWUoUWUsQjIpKSl8fGplKFJlKHFlKFJuLEIyKSkpKSYmKFk9dXcoZCkmJmplKFJlKHFlKFFlLCR5KSkpJiZqZShSZShxZShkLFAyKSkpLEJ0PW8sWXx8Wm0oUm4sUWUpP0J0PVFlOlptKFFlLFJuKSYmKEJ0PVJuKSxjZT1uLFNlPXUoSm4odC5hLEJ0KSwxMCksU2UmJihjZT1TZS5lKSxndD1TeHQodCxkLEJ0LGNlKSxKdChndCwoc2UoKSxZVHQpLHV2bih0LGQsZSxuKSkpO2lmKEY9R3QocWUobyxqeSkpPT09R3QoKCQwKCksWmcpKSxGKWZvcihzPW5ldyBlcigoIW8uYSYmKG8uYT1uZXcgaGUobnMsbywxMCwxMSkpLG8uYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksem49IXIyKHIsKGNpKCksVlMpKXx8aG4oQnIocWUocixWUykpLFZuKSxXZT1HdChxZShyLGp5KSk9PT1HdChaZyksem4mJldlJiZocyhoLHIsaC5jLmIsaC5jKX19ZnVuY3Rpb24gJDVuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHcsayxDLE0sRixILFYsWSx0dCxndDtzd2l0Y2goZSl7Y2FzZSA3MTpkPXIucS5nZXRGdWxsWWVhcigpLW5iPj0tMTkwMD8xOjAsbj49ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbbmZlLHJmZV0pW2RdKTpWcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkJDIiwiQUQiXSlbZF0pO2JyZWFrO2Nhc2UgMTIxOklobih0LG4scik7YnJlYWs7Y2FzZSA3NzpQd24odCxuLHIpO2JyZWFrO2Nhc2UgMTA3Onc9cy5xLmdldEhvdXJzKCksdz09MD9YZCh0LDI0LG4pOlhkKHQsdyxuKTticmVhaztjYXNlIDgzOm4ybih0LG4scyk7YnJlYWs7Y2FzZSA2OTpDPXIucS5nZXREYXkoKSxuPT01P1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtDXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSlbQ10pOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pW0NdKTticmVhaztjYXNlIDk3OnMucS5nZXRIb3VycygpPj0xMiYmcy5xLmdldEhvdXJzKCk8MjQ/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJBTSIsIlBNIl0pWzFdKTpWcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkFNIiwiUE0iXSlbMF0pO2JyZWFrO2Nhc2UgMTA0Ok09cy5xLmdldEhvdXJzKCklMTIsTT09MD9YZCh0LDEyLG4pOlhkKHQsTSxuKTticmVhaztjYXNlIDc1OkY9cy5xLmdldEhvdXJzKCklMTIsWGQodCxGLG4pO2JyZWFrO2Nhc2UgNzI6SD1zLnEuZ2V0SG91cnMoKSxYZCh0LEgsbik7YnJlYWs7Y2FzZSA5OTpWPXIucS5nZXREYXkoKSxuPT01P1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtWXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbUWF0LFphdCxKYXQsdG90LGVvdCxub3Qscm90XSlbVl0pOm49PTM/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbVl0pOlhkKHQsViwxKTticmVhaztjYXNlIDc2Olk9ci5xLmdldE1vbnRoKCksbj09NT9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtZXSk6bj09ND9Wcih0LGN0KG90KEFlLDEpLHRlLDIsNixbJGF0LHphdCxxYXQsSGF0LGw2LEdhdCxWYXQsVWF0LFdhdCxLYXQsWWF0LFhhdF0pW1ldKTpuPT0zP1ZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixsNiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW1ldKTpYZCh0LFkrMSxuKTticmVhaztjYXNlIDgxOnR0PXIucS5nZXRNb250aCgpLzN8MCxuPDQ/VnIodCxjdChvdChBZSwxKSx0ZSwyLDYsWyJRMSIsIlEyIiwiUTMiLCJRNCJdKVt0dF0pOlZyKHQsY3Qob3QoQWUsMSksdGUsMiw2LFsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXSlbdHRdKTticmVhaztjYXNlIDEwMDpndD1yLnEuZ2V0RGF0ZSgpLFhkKHQsZ3Qsbik7YnJlYWs7Y2FzZSAxMDk6az1zLnEuZ2V0TWludXRlcygpLFhkKHQsayxuKTticmVhaztjYXNlIDExNTpoPXMucS5nZXRTZWNvbmRzKCksWGQodCxoLG4pO2JyZWFrO2Nhc2UgMTIyOm48ND9Wcih0LG8uY1swXSk6VnIodCxvLmNbMV0pO2JyZWFrO2Nhc2UgMTE4OlZyKHQsby5iKTticmVhaztjYXNlIDkwOm48Mz9Wcih0LFZnbihvKSk6bj09Mz9Wcih0LEtnbihvKSk6VnIodCxZZ24oby5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBTeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpO2lmKF91ZShlKSx3PXUoU3QoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MiksQz11KFN0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpLGQ9TW8odyksaz1NbyhDKSxoPSghZS5hJiYoZS5hPW5ldyBoZShaaSxlLDYsNikpLGUuYSkuaT09MD9udWxsOnUoU3QoKCFlLmEmJihlLmE9bmV3IGhlKFppLGUsNiw2KSksZS5hKSwwKSwyMDIpLFNlPXUoSm4odC5hLGQpLDEwKSx6bj11KEpuKHQuYSxrKSwxMCksV2U9bnVsbCxocj1udWxsLEV0KHcsMTg2KSYmKGNlPXUoSm4odC5hLHcpLDI5OSksRXQoY2UsMTEpP1dlPXUoY2UsMTEpOkV0KGNlLDEwKSYmKFNlPXUoY2UsMTApLFdlPXUoRmUoU2UuaiwwKSwxMSkpKSxFdChDLDE4NikmJihSbj11KEpuKHQuYSxDKSwyOTkpLEV0KFJuLDExKT9ocj11KFJuLDExKTpFdChSbiwxMCkmJih6bj11KFJuLDEwKSxocj11KEZlKHpuLmosMCksMTEpKSksIVNlfHwhem4pdGhyb3cgcnQobmV3IEY5KCJUaGUgc291cmNlIG9yIHRoZSB0YXJnZXQgb2YgZWRnZSAiK2UrIiBjb3VsZCBub3QgYmUgZm91bmQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gYW4gZWRnZSBjb25uZWN0cyBhIG5vZGUgbGFpZCBvdXQgYnkgRUxLIExheWVyZWQgdG8gYSBub2RlIGluIGFub3RoZXIgbGV2ZWwgb2YgaGllcmFyY2h5IGxhaWQgb3V0IGJ5IGVpdGhlciBhbm90aGVyIGluc3RhbmNlIG9mIEVMSyBMYXllcmVkIG9yIGFub3RoZXIgbGF5b3V0IGFsZ29yaXRobSBhbGx0b2dldGhlci4gVGhlIGZvcm1lciBjYW4gYmUgc29sdmVkIGJ5IHNldHRpbmcgdGhlIGhpZXJhcmNoeUhhbmRsaW5nIG9wdGlvbiB0byBJTkNMVURFX0NISUxEUkVOLiIpKTtmb3IoWT1uZXcgenYsTG8oWSxlKSxKdChZLChzZSgpLF9pKSxlKSxKdChZLChUZSgpLF9vKSxudWxsKSxIPXUoUShyLEdjKSwyMSksU2U9PXpuJiZILkZjKChvbygpLHdTKSksV2V8fChZdD0oc28oKSxldSksUWU9bnVsbCxoJiZIMyh1KFEoU2Usb3MpLDk4KSkmJihRZT1uZXcgJGUoaC5qLGguayksRlp0KFFlLHJJKGUpKSxmSnQoUWUsbiksWm0oayxkKSYmKFl0PUp1LExpKFFlLFNlLm4pKSksV2U9VGxlKFNlLFFlLFl0LHIpKSxocnx8KFl0PShzbygpLEp1KSxwaT1udWxsLGgmJkgzKHUoUSh6bixvcyksOTgpKSYmKHBpPW5ldyAkZShoLmIsaC5jKSxGWnQocGksckkoZSkpLGZKdChwaSxuKSksaHI9VGxlKHpuLHBpLFl0LEZhKHpuKSkpLERhKFksV2UpLHNhKFksaHIpLChXZS5lLmMubGVuZ3RoPjF8fFdlLmcuYy5sZW5ndGg+MXx8aHIuZS5jLmxlbmd0aD4xfHxoci5nLmMubGVuZ3RoPjEpJiZILkZjKChvbygpLHZTKSksRj1uZXcgZXIoKCFlLm4mJihlLm49bmV3IGhlKHFvLGUsMSw3KSksZS5uKSk7Ri5lIT1GLmkuZ2MoKTspaWYoTT11KGRyKEYpLDEzNyksIWplKFJlKHFlKE0sQjIpKSkmJk0uYSlzd2l0Y2godHQ9T2l0KE0pLHVlKFkuYix0dCksdShRKHR0LE1kKSwyNzIpLmcpe2Nhc2UgMTpjYXNlIDI6SC5GYygob28oKSxoNykpO2JyZWFrO2Nhc2UgMDpILkZjKChvbygpLGw3KSksSnQodHQsTWQsKEExKCksXzcpKX1pZihvPXUoUShyLEVTKSwzMTQpLGd0PXUoUShyLHJWKSwzMTUpLHM9bz09KFl4KCksd08pfHxndD09KGFfKCksbGh0KSxoJiYoIWguYSYmKGguYT1uZXcgU3MoSGgsaCw1KSksaC5hKS5pIT0wJiZzKXtmb3IoTHQ9c0QoaCksVj1uZXcgRHUsQnQ9ZWkoTHQsMCk7QnQuYiE9QnQuZC5jOylfdD11KHRpKEJ0KSw4KSxuaShWLG5ldyB5byhfdCkpO0p0KFksSlR0LFYpfXJldHVybiBZfWZ1bmN0aW9uIHo1bih0KXt0LmdifHwodC5nYj0hMCx0LmI9aWModCwwKSxlcyh0LmIsMTgpLFBpKHQuYiwxOSksdC5hPWljKHQsMSksZXModC5hLDEpLFBpKHQuYSwyKSxQaSh0LmEsMyksUGkodC5hLDQpLFBpKHQuYSw1KSx0Lm89aWModCwyKSxlcyh0Lm8sOCksZXModC5vLDkpLFBpKHQubywxMCksUGkodC5vLDExKSxQaSh0Lm8sMTIpLFBpKHQubywxMyksUGkodC5vLDE0KSxQaSh0Lm8sMTUpLFBpKHQubywxNiksUGkodC5vLDE3KSxQaSh0Lm8sMTgpLFBpKHQubywxOSksUGkodC5vLDIwKSxQaSh0Lm8sMjEpLFBpKHQubywyMiksUGkodC5vLDIzKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLFRvKHQubyksVG8odC5vKSxUbyh0Lm8pLHQucD1pYyh0LDMpLGVzKHQucCwyKSxlcyh0LnAsMyksZXModC5wLDQpLGVzKHQucCw1KSxQaSh0LnAsNiksUGkodC5wLDcpLFRvKHQucCksVG8odC5wKSx0LnE9aWModCw0KSxlcyh0LnEsOCksdC52PWljKHQsNSksUGkodC52LDkpLFRvKHQudiksVG8odC52KSxUbyh0LnYpLHQudz1pYyh0LDYpLGVzKHQudywyKSxlcyh0LncsMyksZXModC53LDQpLFBpKHQudyw1KSx0LkI9aWModCw3KSxQaSh0LkIsMSksVG8odC5CKSxUbyh0LkIpLFRvKHQuQiksdC5RPWljKHQsOCksUGkodC5RLDApLFRvKHQuUSksdC5SPWljKHQsOSksZXModC5SLDEpLHQuUz1pYyh0LDEwKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSxUbyh0LlMpLFRvKHQuUyksVG8odC5TKSx0LlQ9aWModCwxMSksUGkodC5ULDEwKSxQaSh0LlQsMTEpLFBpKHQuVCwxMiksUGkodC5ULDEzKSxQaSh0LlQsMTQpLFRvKHQuVCksVG8odC5UKSx0LlU9aWModCwxMiksZXModC5VLDIpLGVzKHQuVSwzKSxQaSh0LlUsNCksUGkodC5VLDUpLFBpKHQuVSw2KSxQaSh0LlUsNyksVG8odC5VKSx0LlY9aWModCwxMyksUGkodC5WLDEwKSx0Llc9aWModCwxNCksZXModC5XLDE4KSxlcyh0LlcsMTkpLGVzKHQuVywyMCksUGkodC5XLDIxKSxQaSh0LlcsMjIpLFBpKHQuVywyMyksdC5iYj1pYyh0LDE1KSxlcyh0LmJiLDEwKSxlcyh0LmJiLDExKSxlcyh0LmJiLDEyKSxlcyh0LmJiLDEzKSxlcyh0LmJiLDE0KSxlcyh0LmJiLDE1KSxlcyh0LmJiLDE2KSxQaSh0LmJiLDE3KSxUbyh0LmJiKSxUbyh0LmJiKSx0LmViPWljKHQsMTYpLGVzKHQuZWIsMiksZXModC5lYiwzKSxlcyh0LmViLDQpLGVzKHQuZWIsNSksZXModC5lYiw2KSxlcyh0LmViLDcpLFBpKHQuZWIsOCksUGkodC5lYiw5KSx0LmFiPWljKHQsMTcpLGVzKHQuYWIsMCksZXModC5hYiwxKSx0Lkg9aWModCwxOCksUGkodC5ILDApLFBpKHQuSCwxKSxQaSh0LkgsMiksUGkodC5ILDMpLFBpKHQuSCw0KSxQaSh0LkgsNSksVG8odC5IKSx0LmRiPWljKHQsMTkpLFBpKHQuZGIsMiksdC5jPWFpKHQsMjApLHQuZD1haSh0LDIxKSx0LmU9YWkodCwyMiksdC5mPWFpKHQsMjMpLHQuaT1haSh0LDI0KSx0Lmc9YWkodCwyNSksdC5qPWFpKHQsMjYpLHQuaz1haSh0LDI3KSx0Lm49YWkodCwyOCksdC5yPWFpKHQsMjkpLHQucz1haSh0LDMwKSx0LnQ9YWkodCwzMSksdC51PWFpKHQsMzIpLHQuZmI9YWkodCwzMyksdC5BPWFpKHQsMzQpLHQuQz1haSh0LDM1KSx0LkQ9YWkodCwzNiksdC5GPWFpKHQsMzcpLHQuRz1haSh0LDM4KSx0Lkk9YWkodCwzOSksdC5KPWFpKHQsNDApLHQuTD1haSh0LDQxKSx0Lk09YWkodCw0MiksdC5OPWFpKHQsNDMpLHQuTz1haSh0LDQ0KSx0LlA9YWkodCw0NSksdC5YPWFpKHQsNDYpLHQuWT1haSh0LDQ3KSx0Llo9YWkodCw0OCksdC4kPWFpKHQsNDkpLHQuXz1haSh0LDUwKSx0LmNiPWFpKHQsNTEpLHQuSz1haSh0LDUyKSl9ZnVuY3Rpb24gY2koKXtjaT1aO3ZhciB0LGU7VlM9bmV3IEdpKFUxZSksQzc9bmV3IEdpKFcxZSksTFN0PShRZCgpLFpodCksSDNlPW5ldyBtbihna3QsTFN0KSwkNj1uZXcgbW4oYjYsbnVsbCksRzNlPW5ldyBHaShjOHQpLElTdD0oY3koKSxqaShlZnQsY3Qob3QobmZ0LDEpLGFlLDI5MSwwLFt0ZnRdKSkpLEJWPW5ldyBtbihjSCxJU3QpLFVPPW5ldyBtbihLRCwoRm4oKSwhMSkpLERTdD0oYW8oKSxjMCksanc9bmV3IG1uKHZrdCxEU3QpLFBTdD0ocTAoKSxnZnQpLE5TdD1uZXcgbW4oVUQsUFN0KSxSU3Q9bmV3IG1uKGdILCExKSxqU3Q9KCQwKCksSFYpLHI1PW5ldyBtbihvSCxqU3QpLFlTdD1uZXcgTXYoMTIpLHEyPW5ldyBtbih3dyxZU3QpLFJWPW5ldyBtbigkRCwhMSksJFN0PW5ldyBtbihwY3QsITEpLFlPPW5ldyBtbihGXywhMSksdEF0PShvYSgpLHliKSxVUz1uZXcgbW4oTm90LHRBdCksejY9bmV3IEdpKHVIKSx6Vj1uZXcgR2koakQpLGZmdD1uZXcgR2koSHEpLGRmdD1uZXcgR2koUF8pLHpTdD1uZXcgRHUsaTU9bmV3IG1uKF9rdCx6U3QpLFUzZT1uZXcgbW4oTGt0LCExKSxXM2U9bmV3IG1uKE1rdCwhMSkscVN0PW5ldyBNOSxLTz1uZXcgbW4oRGt0LHFTdCksJFY9bmV3IG1uKGZrdCwhMSksUTNlPW5ldyBtbihLMWUsMSksbmV3IG1uKFkxZSwhMCksZGUoMCksbmV3IG1uKFgxZSxkZSgxMDApKSxuZXcgbW4oUTFlLCExKSxkZSgwKSxuZXcgbW4oWjFlLGRlKDRlMykpLGRlKDApLG5ldyBtbihKMWUsZGUoNDAwKSksbmV3IG1uKHRkZSwhMSksbmV3IG1uKGVkZSwhMSksbmV3IG1uKG5kZSwhMCksbmV3IG1uKHJkZSwhMSksTVN0PShBeigpLHdmdCksVjNlPW5ldyBtbihvOHQsTVN0KSxaM2U9bmV3IG1uKHRrdCwxMCksSjNlPW5ldyBtbihla3QsMTApLGlBdD1uZXcgbW4oQW90LDIwKSx0NGU9bmV3IG1uKG5rdCwxMCksc0F0PW5ldyBtbihPb3QsMiksZTRlPW5ldyBtbihya3QsMTApLGFBdD1uZXcgbW4oaWt0LDApLHFWPW5ldyBtbihva3QsNSksb0F0PW5ldyBtbihza3QsMSksY0F0PW5ldyBtbihha3QsMSksSDI9bmV3IG1uKGt5LDIwKSxuNGU9bmV3IG1uKGNrdCwxMCksaEF0PW5ldyBtbih1a3QsMTApLHE2PW5ldyBHaShsa3QpLGxBdD1uZXcgY1V0LHVBdD1uZXcgbW4oT2t0LGxBdCksWTNlPW5ldyBHaShnY3QpLFhTdD0hMSxLM2U9bmV3IG1uKGRjdCxYU3QpLEdTdD1uZXcgTXYoNSksSFN0PW5ldyBtbih3a3QsR1N0KSxWU3Q9KGZ5KCksZT11KEhmKGxvKSw5KSxuZXcgcmgoZSx1KHVmKGUsZS5sZW5ndGgpLDkpLDApKSxzNT1uZXcgbW4oUkUsVlN0KSxaU3Q9KGM0KCksbWIpLFFTdD1uZXcgbW4oeGt0LFpTdCksb2Z0PW5ldyBHaShra3QpLGNmdD1uZXcgR2koRWt0KSx1ZnQ9bmV3IEdpKFRrdCksYWZ0PW5ldyBHaShDa3QpLFVTdD0odD11KEhmKHRBKSw5KSxuZXcgcmgodCx1KHVmKHQsdC5sZW5ndGgpLDkpLDApKSx6Mj1uZXcgbW4oTDQsVVN0KSxLU3Q9dW4oKGNsKCksTTcpKSx2Yj1uZXcgbW4odjYsS1N0KSxXU3Q9bmV3ICRlKDAsMCksYTU9bmV3IG1uKHc2LFdTdCksalY9bmV3IG1uKGZjdCwhMSksT1N0PShBMSgpLF83KSxpZnQ9bmV3IG1uKFNrdCxPU3QpLHJmdD1uZXcgbW4oR3EsITEpLGRlKDEpLG5ldyBtbihpZGUsbnVsbCksSlN0PW5ldyBHaShJa3QpLGxmdD1uZXcgR2koQWt0KSxyQXQ9KGJlKCksWm8pLG81PW5ldyBtbihka3QsckF0KSxobD1uZXcgR2koaGt0KSxlQXQ9KFF1KCksdW4oeGIpKSxLeT1uZXcgbW4oakUsZUF0KSxoZnQ9bmV3IG1uKG1rdCwhMSksbkF0PW5ldyBtbih5a3QsITApLFdPPW5ldyBtbihwa3QsITEpLHNmdD1uZXcgbW4oYmt0LCExKSxGU3Q9bmV3IG1uKExvdCwxKSxCU3Q9KHRxKCksYmZ0KSxuZXcgbW4oc2RlLEJTdCksWDNlPSEwfWZ1bmN0aW9uIHNlKCl7c2U9Wjt2YXIgdCxlO19pPW5ldyBHaShsNnQpLFlUdD1uZXcgR2koImNvb3JkaW5hdGVPcmlnaW4iKSxSbHQ9bmV3IEdpKCJwcm9jZXNzb3JzIiksS1R0PW5ldyBPcygiY29tcG91bmROb2RlIiwoRm4oKSwhMSkpLGtPPW5ldyBPcygiaW5zaWRlQ29ubmVjdGlvbnMiLCExKSxKVHQ9bmV3IEdpKCJvcmlnaW5hbEJlbmRwb2ludHMiKSx0OXQ9bmV3IEdpKCJvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uIiksZTl0PW5ldyBHaSgib3JpZ2luYWxMYWJlbEVkZ2UiKSxUTz1uZXcgR2koInJlcHJlc2VudGVkTGFiZWxzIiksbVM9bmV3IEdpKCJlbmRMYWJlbHMiKSxNNj1uZXcgR2koImVuZExhYmVsLm9yaWdpbiIpLEQ2PW5ldyBPcygibGFiZWxTaWRlIiwoamwoKSxaTykpLFc0PW5ldyBPcygibWF4RWRnZVRoaWNrbmVzcyIsMCksJDE9bmV3IE9zKCJyZXZlcnNlZCIsITEpLE82PW5ldyBHaSh6ZmUpLG4xPW5ldyBPcygibG9uZ0VkZ2VTb3VyY2UiLG51bGwpLFJoPW5ldyBPcygibG9uZ0VkZ2VUYXJnZXQiLG51bGwpLFB5PW5ldyBPcygibG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMiLCExKSxFTz1uZXcgT3MoImxvbmdFZGdlQmVmb3JlTGFiZWxEdW1teSIsITEpLEhHPW5ldyBPcygiZWRnZUNvbnN0cmFpbnQiLCh1MigpLHhsdCkpLEl3PW5ldyBHaSgiaW5MYXllckxheW91dFVuaXQiKSxPMj1uZXcgT3MoImluTGF5ZXJDb25zdHJhaW50IiwoQjAoKSx5TykpLEk2PW5ldyBPcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQiLG5ldyBsZSksWlR0PW5ldyBPcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcyIsITEpLFp1PW5ldyBHaSgicG9ydER1bW15IikscUc9bmV3IE9zKCJjcm9zc2luZ0hpbnQiLGRlKDApKSxHYz1uZXcgT3MoImdyYXBoUHJvcGVydGllcyIsKGU9dShIZihBbHQpLDkpLG5ldyByaChlLHUodWYoZSxlLmxlbmd0aCksOSksMCkpKSxvYz1uZXcgT3MoImV4dGVybmFsUG9ydFNpZGUiLChiZSgpLFpvKSksUVR0PW5ldyBPcygiZXh0ZXJuYWxQb3J0U2l6ZSIsbmV3IFRhKSxPbHQ9bmV3IEdpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW1pZXMiKSxHRz1uZXcgR2koImV4dGVybmFsUG9ydFJlcGxhY2VkRHVtbXkiKSxOeT1uZXcgT3MoImV4dGVybmFsUG9ydENvbm5lY3Rpb25zIiwodD11KEhmKFhhKSw5KSxuZXcgcmgodCx1KHVmKHQsdC5sZW5ndGgpLDkpLDApKSksRHc9bmV3IE9zKE9mZSwwKSxXVHQ9bmV3IEdpKCJiYXJ5Y2VudGVyQXNzb2NpYXRlcyIpLE42PW5ldyBHaSgiVG9wU2lkZUNvbW1lbnRzIiksTDY9bmV3IEdpKCJCb3R0b21TaWRlQ29tbWVudHMiKSx6Rz1uZXcgR2koIkNvbW1lbnRDb25uZWN0aW9uUG9ydCIpLFBsdD1uZXcgT3MoImlucHV0Q29sbGVjdCIsITEpLEJsdD1uZXcgT3MoIm91dHB1dENvbGxlY3QiLCExKSx4Tz1uZXcgT3MoImN5Y2xpYyIsITEpLFhUdD1uZXcgR2koImNyb3NzSGllcmFyY2h5TWFwIiksJGx0PW5ldyBHaSgidGFyZ2V0T2Zmc2V0IiksbmV3IE9zKCJzcGxpbmVMYWJlbFNpemUiLG5ldyBUYSksWTQ9bmV3IEdpKCJzcGFjaW5ncyIpLFZHPW5ldyBPcygicGFydGl0aW9uQ29uc3RyYWludCIsITEpLEx3PW5ldyBHaSgiYnJlYWtpbmdQb2ludC5pbmZvIiksaTl0PW5ldyBHaSgic3BsaW5lcy5zdXJ2aXZpbmdFZGdlIiksTjI9bmV3IEdpKCJzcGxpbmVzLnJvdXRlLnN0YXJ0IiksWDQ9bmV3IEdpKCJzcGxpbmVzLmVkZ2VDaGFpbiIpLHI5dD1uZXcgR2koIm9yaWdpbmFsUG9ydENvbnN0cmFpbnRzIiksZDc9bmV3IEdpKCJzZWxmTG9vcEhvbGRlciIpLGc3PW5ldyBHaSgic3BsaW5lcy5uc1BvcnRZIiksVGM9bmV3IEdpKCJtb2RlbE9yZGVyIiksRmx0PW5ldyBHaSgibG9uZ0VkZ2VUYXJnZXROb2RlIiksTXc9bmV3IE9zKGcxZSwhMSksSzQ9bmV3IE9zKGcxZSwhMSksTmx0PW5ldyBHaSgibGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcyIpLG45dD1uZXcgR2koImxheWVyQ29uc3RyYWludHMub3Bwb3NpZGVQb3J0Iiksamx0PW5ldyBHaSgidGFyZ2V0Tm9kZS5tb2RlbE9yZGVyIil9ZnVuY3Rpb24gQXh0KCl7QXh0PVoscDl0PShUSSgpLE5HKSxRMmU9bmV3IG1uKHc2dCxwOXQpLHV2ZT1uZXcgbW4obTZ0LChGbigpLCExKSkseDl0PSh4JCgpLERsdCksZ3ZlPW5ldyBtbihLcSx4OXQpLEx2ZT1uZXcgbW4oeTZ0LCExKSxNdmU9bmV3IG1uKHg2dCwhMCksXzJlPW5ldyBtbihrNnQsITEpLEw5dD0oeUkoKSxkaHQpLFZ2ZT1uZXcgbW4oRTZ0LEw5dCksZGUoMSksSnZlPW5ldyBtbihUNnQsZGUoNykpLHR3ZT1uZXcgbW4oQzZ0LCExKSxsdmU9bmV3IG1uKF82dCwhMSksZzl0PSh2MigpLG1sdCksWDJlPW5ldyBtbigkb3QsZzl0KSxUOXQ9KFp6KCksYWh0KSxBdmU9bmV3IG1uKEdELFQ5dCksazl0PShoaCgpLENPKSx5dmU9bmV3IG1uKFM2dCxrOXQpLGRlKC0xKSxtdmU9bmV3IG1uKEE2dCxkZSgtMSkpLGRlKC0xKSx4dmU9bmV3IG1uKEw2dCxkZSgtMSkpLGRlKC0xKSxrdmU9bmV3IG1uKHpvdCxkZSg0KSksZGUoLTEpLFR2ZT1uZXcgbW4ocW90LGRlKDIpKSxFOXQ9KHc0KCksaFYpLFN2ZT1uZXcgbW4oSG90LEU5dCksZGUoMCksX3ZlPW5ldyBtbihHb3QsZGUoMCkpLHZ2ZT1uZXcgbW4oVm90LGRlKHZpKSksZDl0PShZeCgpLFM2KSxZMmU9bmV3IG1uKCRfLGQ5dCksRjJlPW5ldyBtbihNNnQsITEpLEgyZT1uZXcgbW4oVW90LC4xKSxXMmU9bmV3IG1uKFdvdCwhMSksZGUoLTEpLFYyZT1uZXcgbW4oSTZ0LGRlKC0xKSksZGUoLTEpLFUyZT1uZXcgbW4oRDZ0LGRlKC0xKSksZGUoMCksQjJlPW5ldyBtbihPNnQsZGUoNDApKSxmOXQ9KFc4KCksTWx0KSx6MmU9bmV3IG1uKEtvdCxmOXQpLGg5dD1tTyxSMmU9bmV3IG1uKFlxLGg5dCksQTl0PShhXygpLEFTKSxHdmU9bmV3IG1uKE00LEE5dCksUHZlPW5ldyBHaShYcSksQzl0PShiSSgpLEZHKSxJdmU9bmV3IG1uKFlvdCxDOXQpLF85dD0obkQoKSxCRyksT3ZlPW5ldyBtbihYb3QsXzl0KSxSdmU9bmV3IG1uKFFvdCwuMyksJHZlPW5ldyBHaShab3QpLFM5dD0oc3koKSxsViksenZlPW5ldyBtbihKb3QsUzl0KSx3OXQ9KHV6KCkscGh0KSxudmU9bmV3IG1uKE42dCx3OXQpLG05dD0obEkoKSxiaHQpLHJ2ZT1uZXcgbW4oUDZ0LG05dCkseTl0PSh0RSgpLElTKSxpdmU9bmV3IG1uKFFxLHk5dCksYXZlPW5ldyBtbihacSwuMiksdHZlPW5ldyBtbih0Y3QsMiksWXZlPW5ldyBtbihGNnQsbnVsbCksUXZlPW5ldyBtbihCNnQsMTApLFh2ZT1uZXcgbW4oUjZ0LDEwKSxadmU9bmV3IG1uKGo2dCwyMCksZGUoMCksVXZlPW5ldyBtbigkNnQsZGUoMCkpLGRlKDApLFd2ZT1uZXcgbW4oejZ0LGRlKDApKSxkZSgwKSxLdmU9bmV3IG1uKHE2dCxkZSgwKSksUzJlPW5ldyBtbihlY3QsITEpLG85dD0oZ0UoKSxiUyksTDJlPW5ldyBtbihINnQsbzl0KSxhOXQ9KEQkKCksdmx0KSxBMmU9bmV3IG1uKEc2dCxhOXQpLGZ2ZT1uZXcgbW4oSnEsITEpLGRlKDApLGh2ZT1uZXcgbW4obmN0LGRlKDE2KSksZGUoMCksZHZlPW5ldyBtbihyY3QsZGUoNSkpLEQ5dD0oZ3ooKSxtaHQpLHl3ZT1uZXcgbW4oWTAsRDl0KSxld2U9bmV3IG1uKHRILDEwKSxpd2U9bmV3IG1uKGVILDEpLEk5dD0oWCQoKSxPRyksaHdlPW5ldyBtbih6XyxJOXQpLG93ZT1uZXcgR2koaWN0KSxNOXQ9ZGUoMSksZGUoMCksdXdlPW5ldyBtbihzY3QsTTl0KSxPOXQ9KG96KCksd2h0KSxUd2U9bmV3IG1uKG5ILE85dCkseHdlPW5ldyBHaShySCksYndlPW5ldyBtbihpSCwhMCksZ3dlPW5ldyBtbihzSCwyKSx3d2U9bmV3IG1uKGFjdCwhMCksdjl0PShucSgpLFBHKSxKMmU9bmV3IG1uKFY2dCx2OXQpLGI5dD0oaTYoKSxvNyksWjJlPW5ldyBtbihVNnQsYjl0KSxsOXQ9KGowKCksZ2IpLFAyZT1uZXcgbW4oYUgsbDl0KSxOMmU9bmV3IG1uKFc2dCwhMSksYzl0PShldygpLCQ0KSxNMmU9bmV3IG1uKG9jdCxjOXQpLHU5dD0oWUMoKSxvaHQpLE8yZT1uZXcgbW4oSzZ0LHU5dCksSTJlPW5ldyBtbihjY3QsMCksRDJlPW5ldyBtbih1Y3QsMCksYnZlPXlsdCxwdmU9d08sRXZlPWNWLEN2ZT1jVix3dmU9c2h0LEcyZT0oJDAoKSxaZyksSzJlPVM2LHEyZT1TNixqMmU9UzYsJDJlPVpnLEZ2ZT1MUyxCdmU9QVMsRHZlPUFTLE52ZT1BUyxqdmU9aGh0LEh2ZT1MUyxxdmU9TFMsc3ZlPShxMCgpLEg2KSxvdmU9SDYsY3ZlPUlTLGV2ZT1YTyxud2U9eDcscndlPVZ5LHN3ZT14Nyxhd2U9VnksZndlPXg3LGR3ZT1WeSxjd2U9d2x0LGx3ZT1PRyxDd2U9eDcsX3dlPVZ5LGt3ZT14NyxFd2U9VnksdndlPVZ5LHB3ZT1WeSxtd2U9Vnl9ZnVuY3Rpb24gcm8oKXtybz1aLFU3dD1uZXcgd3MoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLEg3dD1uZXcgd3MoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxoUz1uZXcgd3MoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMikscmx0PW5ldyB3cygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxoVHQ9bmV3IHdzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxnRz1uZXcgd3MoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSxURz1uZXcgd3MoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLHI3PW5ldyB3cygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLHVUdD1uZXcgd3MoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLHRUdD1uZXcgd3MoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxvVHQ9bmV3IHdzKCJOT0RFX1BST01PVElPTiIsMTApLG43PW5ldyB3cygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksbFR0PW5ldyB3cygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSxRN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLGZUdD1uZXcgd3MoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksQjd0PW5ldyB3cygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSx3Rz1uZXcgd3MoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGlsdD1uZXcgd3MoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxmRz1uZXcgd3MoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCkseEc9bmV3IHdzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksZ1R0PW5ldyB3cygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLHlHPW5ldyB3cygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxSN3Q9bmV3IHdzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxjVHQ9bmV3IHdzKGExZSwyMykscFR0PW5ldyB3cyhvMWUsMjQpLGtHPW5ldyB3cygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxkVHQ9bmV3IHdzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksZEc9bmV3IHdzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEs3dD1uZXcgd3MoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxzVHQ9bmV3IHdzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLGlUdD1uZXcgd3MoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCksQ0c9bmV3IHdzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksejd0PW5ldyB3cygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksaEc9bmV3IHdzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksYkc9bmV3IHdzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLCQ3dD1uZXcgd3MoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLGU3PW5ldyB3cygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLG5UdD1uZXcgd3MoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSxaN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLGFUdD1uZXcgd3MoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksZlM9bmV3IHdzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxHN3Q9bmV3IHdzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSkscTd0PW5ldyB3cygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksclR0PW5ldyB3cygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLEo3dD1uZXcgd3MoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSx2Rz1uZXcgd3MoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSxFRz1uZXcgd3MoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0Niksajd0PW5ldyB3cygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLG1HPW5ldyB3cygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksZVR0PW5ldyB3cygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxwRz1uZXcgd3MoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxZN3Q9bmV3IHdzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksVzd0PW5ldyB3cygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGJPPW5ldyB3cygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLGxHPW5ldyB3cygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxYN3Q9bmV3IHdzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksVjd0PW5ldyB3cygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBxNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0LF90LEJ0LFl0LGNlLFNlLFdlLFFlLFJuLHpuLGhyLHBpLFJzLFhsLEtoLFcxLGhVLGJOLGRBLHZOLFA3LE5mdCx6NWUsUGZ0LGlwLFZ3LEY3LHdOLG1OLFk2LEZmdCxnQSxxNWUsTUx0LFV3LHBBLEJmdCxYNixiQSxpMyx2QSxSZnQsSDVlO2ZvcihNTHQ9MCxwaT1lLEtoPTAsYk49cGkubGVuZ3RoO0toPGJOOysrS2gpZm9yKHpuPXBpW0toXSxWdz1uZXcgUyh6bi5qKTtWdy5hPFZ3LmMuYy5sZW5ndGg7KXtmb3IoaXA9dShKKFZ3KSwxMSksd049MCxkPW5ldyBTKGlwLmcpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE3KSx6bi5jIT1oLmQuaS5jJiYrK3dOO3dOPjAmJih0LmFbaXAucF09TUx0KyspfWZvcihiQT0wLFJzPW4sVzE9MCxkQT1Scy5sZW5ndGg7VzE8ZEE7KytXMSl7Zm9yKHpuPVJzW1cxXSx2Tj0wLFZ3PW5ldyBTKHpuLmopO1Z3LmE8VncuYy5jLmxlbmd0aCYmKGlwPXUoSihWdyksMTEpLGlwLmo9PShiZSgpLE5uKSk7KWZvcihkPW5ldyBTKGlwLmUpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDE3KSx6bi5jIT1oLmMuaS5jKXsrK3ZOO2JyZWFrfWZvcihOZnQ9MCxtTj1uZXcgaGEoem4uaix6bi5qLmMubGVuZ3RoKTttTi5iPjA7KXtmb3IoaXA9KFFuKG1OLmI+MCksdShtTi5hLlhiKG1OLmM9LS1tTi5iKSwxMSkpLHdOPTAsZD1uZXcgUyhpcC5lKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksem4uYyE9aC5jLmkuYyYmKyt3Tjt3Tj4wJiYoaXAuaj09KGJlKCksTm4pPyh0LmFbaXAucF09YkEsKytiQSk6KHQuYVtpcC5wXT1iQSt2TitOZnQsKytOZnQpKX1iQSs9TmZ0fWZvcihGNz1uZXcgQ3IsVj1uZXcgQTAsaHI9ZSxYbD0wLGhVPWhyLmxlbmd0aDtYbDxoVTsrK1hsKWZvcih6bj1ocltYbF0sQmZ0PW5ldyBTKHpuLmopO0JmdC5hPEJmdC5jLmMubGVuZ3RoOylmb3IocEE9dShKKEJmdCksMTEpLGQ9bmV3IFMocEEuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTcpLHZBPWguZCx6bi5jIT12QS5pLmMpaWYoVXc9dShlYyhBbyhGNy5mLHBBKSksNDY3KSxpMz11KGVjKEFvKEY3LmYsdkEpKSw0NjcpLCFVdyYmIWkzKUg9bmV3IHFXdCxWLmEuemMoSCxWKSx1ZShILmEsaCksdWUoSC5kLHBBKSxzdShGNy5mLHBBLEgpLHVlKEguZCx2QSksc3UoRjcuZix2QSxIKTtlbHNlIGlmKCFVdyl1ZShpMy5hLGgpLHVlKGkzLmQscEEpLHN1KEY3LmYscEEsaTMpO2Vsc2UgaWYoIWkzKXVlKFV3LmEsaCksdWUoVXcuZCx2QSksc3UoRjcuZix2QSxVdyk7ZWxzZSBpZihVdz09aTMpdWUoVXcuYSxoKTtlbHNle2Zvcih1ZShVdy5hLGgpLFBmdD1uZXcgUyhpMy5kKTtQZnQuYTxQZnQuYy5jLmxlbmd0aDspejVlPXUoSihQZnQpLDExKSxzdShGNy5mLHo1ZSxVdyk7QXMoVXcuYSxpMy5hKSxBcyhVdy5kLGkzLmQpLFYuYS5CYyhpMykhPW51bGx9Zm9yKFk9dShYSShWLFB0KGZ4bix7MzoxLDQ6MSw1OjEsMTk0NjoxfSw0NjcsVi5hLmdjKCksMCwxKSksMTk0NiksUm49ZVswXS5jLHE1ZT1uWzBdLmMsQz1ZLE09MCxGPUMubGVuZ3RoO008RjsrK00pZm9yKGs9Q1tNXSxrLmU9TUx0LGsuZj1iQSxWdz1uZXcgUyhrLmQpO1Z3LmE8VncuYy5jLmxlbmd0aDspaXA9dShKKFZ3KSwxMSksWTY9dC5hW2lwLnBdLGlwLmkuYz09Um4/KFk2PGsuZSYmKGsuZT1ZNiksWTY+ay5iJiYoay5iPVk2KSk6aXAuaS5jPT1xNWUmJihZNjxrLmYmJihrLmY9WTYpLFk2PmsuYyYmKGsuYz1ZNikpO2ZvcihEOChZLDAsWS5sZW5ndGgsbnVsbCksWDY9UHQoVHIsWHIsMjUsWS5sZW5ndGgsMTUsMSkscj1QdChUcixYciwyNSxiQSsxLDE1LDEpLGd0PTA7Z3Q8WS5sZW5ndGg7Z3QrKylYNltndF09WVtndF0uZixyW1g2W2d0XV09MTtmb3Iobz0wLEx0PTA7THQ8ci5sZW5ndGg7THQrKylyW0x0XT09MT9yW0x0XT1vOi0tbztmb3IoRmZ0PTAsX3Q9MDtfdDxYNi5sZW5ndGg7X3QrKylYNltfdF0rPXJbWDZbX3RdXSxGZnQ9Yi5NYXRoLm1heChGZnQsWDZbX3RdKzEpO2Zvcih3PTE7dzxGZnQ7KXcqPTI7Zm9yKEg1ZT0yKnctMSx3LT0xLFJmdD1QdChUcixYciwyNSxINWUsMTUsMSkscz0wLFdlPTA7V2U8WDYubGVuZ3RoO1dlKyspZm9yKFNlPVg2W1dlXSt3LCsrUmZ0W1NlXTtTZT4wOylTZSUyPjAmJihzKz1SZnRbU2UrMV0pLFNlPShTZS0xKS8yfDAsKytSZnRbU2VdO2ZvcihRZT1QdChwbWUsSWUsMzYyLFkubGVuZ3RoKjIsMCwxKSxCdD0wO0J0PFkubGVuZ3RoO0J0KyspUWVbMipCdF09bmV3IGUkKFlbQnRdLFlbQnRdLmUsWVtCdF0uYiwoQkMoKSxOUykpLFFlWzIqQnQrMV09bmV3IGUkKFlbQnRdLFlbQnRdLmIsWVtCdF0uZSxPUyk7Zm9yKEQ4KFFlLDAsUWUubGVuZ3RoLG51bGwpLFA3PTAsWXQ9MDtZdDxRZS5sZW5ndGg7WXQrKylzd2l0Y2goUWVbWXRdLmQuZyl7Y2FzZSAwOisrUDc7YnJlYWs7Y2FzZSAxOi0tUDcscys9UDd9Zm9yKGdBPVB0KHBtZSxJZSwzNjIsWS5sZW5ndGgqMiwwLDEpLGNlPTA7Y2U8WS5sZW5ndGg7Y2UrKylnQVsyKmNlXT1uZXcgZSQoWVtjZV0sWVtjZV0uZixZW2NlXS5jLChCQygpLE5TKSksZ0FbMipjZSsxXT1uZXcgZSQoWVtjZV0sWVtjZV0uYyxZW2NlXS5mLE9TKTtmb3IoRDgoZ0EsMCxnQS5sZW5ndGgsbnVsbCksUDc9MCx0dD0wO3R0PGdBLmxlbmd0aDt0dCsrKXN3aXRjaChnQVt0dF0uZC5nKXtjYXNlIDA6KytQNzticmVhaztjYXNlIDE6LS1QNyxzKz1QN31yZXR1cm4gc31mdW5jdGlvbiBnaSgpe2dpPVosZkE9bmV3IHZ2KDcpLGtMdD1uZXcgVmQoOCw5NCksbmV3IFZkKDgsNjQpLEVMdD1uZXcgVmQoOCwzNiksRDVlPW5ldyBWZCg4LDY1KSxPNWU9bmV3IFZkKDgsMTIyKSxONWU9bmV3IFZkKDgsOTApLEY1ZT1uZXcgVmQoOCw5OCksSTVlPW5ldyBWZCg4LDY2KSxQNWU9bmV3IFZkKDgsNjApLEI1ZT1uZXcgVmQoOCw2MikseEx0PW5ldyB2digxMSksbFU9bmV3IE5sKDQpLGpjKGxVLDQ4LDU3KSxONz1uZXcgTmwoNCksamMoTjcsNDgsNTcpLGpjKE43LDY1LDkwKSxqYyhONyw5NSw5NSksamMoTjcsOTcsMTIyKSxLNj1uZXcgTmwoNCksamMoSzYsOSw5KSxqYyhLNiwxMCwxMCksamMoSzYsMTIsMTIpLGpjKEs2LDEzLDEzKSxqYyhLNiwzMiwzMiksVEx0PWJ5KGxVKSxfTHQ9YnkoTjcpLENMdD1ieShLNiksTzc9bmV3IENyLGhBPW5ldyBDcixNNWU9Y3Qob3QoQWUsMSksdGUsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLG1MdD1jdChvdChBZSwxKSx0ZSwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIixyZ2UsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLHlMdD1jdChvdChUciwxKSxYciwyNSwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiBMcSgpe0xxPVoseHBlPW5ldyB1aCgiT1VUX1RfTCIsMCwoWHUoKSxTZCksKHd1KCkseWYpLChLZigpLHNjKSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaSgoZnkoKSxDZiksY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsRWZdKSldKSkseXBlPW5ldyB1aCgiT1VUX1RfQyIsMSxjYix5ZixzYyx0dSxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtfZixKMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtfZixKMCwkaF0pKV0pKSxrcGU9bmV3IHVoKCJPVVRfVF9SIiwyLG1mLHlmLHNjLGFjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLFRmXSkpXSkpLGZwZT1uZXcgdWgoIk9VVF9CX0wiLDMsU2QsZTEsYWMsc2MsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsRWZdKSldKSksaHBlPW5ldyB1aCgiT1VUX0JfQyIsNCxjYixlMSxhYyx0dSxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFt6aCxKMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFt6aCxKMCwkaF0pKV0pKSxkcGU9bmV3IHVoKCJPVVRfQl9SIiw1LG1mLGUxLGFjLGFjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLFRmXSkpXSkpLGJwZT1uZXcgdWgoIk9VVF9MX1QiLDYsbWYsZTEsc2Msc2MsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbRWYsX2YsJGhdKSldKSkscHBlPW5ldyB1aCgiT1VUX0xfQyIsNyxtZix1Yix0dSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtFZixsMF0pKSxqaShDZixjdChvdChsbywxKSxhZSw5MywwLFtFZixsMCwkaF0pKV0pKSxncGU9bmV3IHVoKCJPVVRfTF9CIiw4LG1mLHlmLGFjLHNjLGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKENmLGN0KG90KGxvLDEpLGFlLDkzLDAsW0VmLHpoLCRoXSkpXSkpLG1wZT1uZXcgdWgoIk9VVF9SX1QiLDksU2QsZTEsc2MsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsX2YsJGhdKSldKSksd3BlPW5ldyB1aCgiT1VUX1JfQyIsMTAsU2QsdWIsdHUsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsbDBdKSksamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsbDAsJGhdKSldKSksdnBlPW5ldyB1aCgiT1VUX1JfQiIsMTEsU2QseWYsYWMsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoQ2YsY3Qob3QobG8sMSksYWUsOTMsMCxbVGYsemgsJGhdKSldKSksdXBlPW5ldyB1aCgiSU5fVF9MIiwxMixTZCxlMSxzYyxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtfZixFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtfZixFZiwkaF0pKV0pKSxjcGU9bmV3IHVoKCJJTl9UX0MiLDEzLGNiLGUxLHNjLHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW19mLEowLCRoXSkpXSkpLGxwZT1uZXcgdWgoIklOX1RfUiIsMTQsbWYsZTEsc2MsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbX2YsVGYsJGhdKSldKSksYXBlPW5ldyB1aCgiSU5fQ19MIiwxNSxTZCx1Yix0dSxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtsMCxFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFtsMCxFZiwkaF0pKV0pKSxzcGU9bmV3IHVoKCJJTl9DX0MiLDE2LGNiLHViLHR1LHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW2wwLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW2wwLEowLCRoXSkpXSkpLG9wZT1uZXcgdWgoIklOX0NfUiIsMTcsbWYsdWIsdHUsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbbDAsVGYsJGhdKSldKSkscnBlPW5ldyB1aCgiSU5fQl9MIiwxOCxTZCx5ZixhYyxzYyxjdChvdChCaCwxKSxJZSwyMSwwLFtqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFt6aCxFZl0pKSxqaShVbCxjdChvdChsbywxKSxhZSw5MywwLFt6aCxFZiwkaF0pKV0pKSxucGU9bmV3IHVoKCJJTl9CX0MiLDE5LGNiLHlmLGFjLHR1LGN0KG90KEJoLDEpLEllLDIxLDAsW2ppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLEowXSkpLGppKFVsLGN0KG90KGxvLDEpLGFlLDkzLDAsW3poLEowLCRoXSkpXSkpLGlwZT1uZXcgdWgoIklOX0JfUiIsMjAsbWYseWYsYWMsYWMsY3Qob3QoQmgsMSksSWUsMjEsMCxbamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsVGZdKSksamkoVWwsY3Qob3QobG8sMSksYWUsOTMsMCxbemgsVGYsJGhdKSldKSksUHV0PW5ldyB1aChPXywyMSxudWxsLG51bGwsbnVsbCxudWxsLGN0KG90KEJoLDEpLEllLDIxLDAsW10pKX1mdW5jdGlvbiBkbigpe2RuPVosdDM9KGpwKCksTG4pLmIsdShTdChXdChMbi5iKSwwKSwzNCksdShTdChXdChMbi5iKSwxKSwxOCksSmc9TG4uYSx1KFN0KFd0KExuLmEpLDApLDM0KSx1KFN0KFd0KExuLmEpLDEpLDE4KSx1KFN0KFd0KExuLmEpLDIpLDE4KSx1KFN0KFd0KExuLmEpLDMpLDE4KSx1KFN0KFd0KExuLmEpLDQpLDE4KSxDYj1Mbi5vLHUoU3QoV3QoTG4ubyksMCksMzQpLHUoU3QoV3QoTG4ubyksMSksMzQpLFg0ZT11KFN0KFd0KExuLm8pLDIpLDE4KSx1KFN0KFd0KExuLm8pLDMpLDE4KSx1KFN0KFd0KExuLm8pLDQpLDE4KSx1KFN0KFd0KExuLm8pLDUpLDE4KSx1KFN0KFd0KExuLm8pLDYpLDE4KSx1KFN0KFd0KExuLm8pLDcpLDE4KSx1KFN0KFd0KExuLm8pLDgpLDE4KSx1KFN0KFd0KExuLm8pLDkpLDE4KSx1KFN0KFd0KExuLm8pLDEwKSwxOCksdShTdChXdChMbi5vKSwxMSksMTgpLHUoU3QoV3QoTG4ubyksMTIpLDE4KSx1KFN0KFd0KExuLm8pLDEzKSwxOCksdShTdChXdChMbi5vKSwxNCksMTgpLHUoU3QoV3QoTG4ubyksMTUpLDE4KSx1KFN0KE1pKExuLm8pLDApLDU5KSx1KFN0KE1pKExuLm8pLDEpLDU5KSx1KFN0KE1pKExuLm8pLDIpLDU5KSx1KFN0KE1pKExuLm8pLDMpLDU5KSx1KFN0KE1pKExuLm8pLDQpLDU5KSx1KFN0KE1pKExuLm8pLDUpLDU5KSx1KFN0KE1pKExuLm8pLDYpLDU5KSx1KFN0KE1pKExuLm8pLDcpLDU5KSx1KFN0KE1pKExuLm8pLDgpLDU5KSx1KFN0KE1pKExuLm8pLDkpLDU5KSxZNGU9TG4ucCx1KFN0KFd0KExuLnApLDApLDM0KSx1KFN0KFd0KExuLnApLDEpLDM0KSx1KFN0KFd0KExuLnApLDIpLDM0KSx1KFN0KFd0KExuLnApLDMpLDM0KSx1KFN0KFd0KExuLnApLDQpLDE4KSx1KFN0KFd0KExuLnApLDUpLDE4KSx1KFN0KE1pKExuLnApLDApLDU5KSx1KFN0KE1pKExuLnApLDEpLDU5KSxRNGU9TG4ucSx1KFN0KFd0KExuLnEpLDApLDM0KSxfYj1Mbi52LHUoU3QoV3QoTG4udiksMCksMTgpLHUoU3QoTWkoTG4udiksMCksNTkpLHUoU3QoTWkoTG4udiksMSksNTkpLHUoU3QoTWkoTG4udiksMiksNTkpLHRwPUxuLncsdShTdChXdChMbi53KSwwKSwzNCksdShTdChXdChMbi53KSwxKSwzNCksdShTdChXdChMbi53KSwyKSwzNCksdShTdChXdChMbi53KSwzKSwxOCksU2I9TG4uQix1KFN0KFd0KExuLkIpLDApLDE4KSx1KFN0KE1pKExuLkIpLDApLDU5KSx1KFN0KE1pKExuLkIpLDEpLDU5KSx1KFN0KE1pKExuLkIpLDIpLDU5KSxaNGU9TG4uUSx1KFN0KFd0KExuLlEpLDApLDE4KSx1KFN0KE1pKExuLlEpLDApLDU5KSxKNGU9TG4uUix1KFN0KFd0KExuLlIpLDApLDM0KSxXaD1Mbi5TLHUoU3QoTWkoTG4uUyksMCksNTkpLHUoU3QoTWkoTG4uUyksMSksNTkpLHUoU3QoTWkoTG4uUyksMiksNTkpLHUoU3QoTWkoTG4uUyksMyksNTkpLHUoU3QoTWkoTG4uUyksNCksNTkpLHUoU3QoTWkoTG4uUyksNSksNTkpLHUoU3QoTWkoTG4uUyksNiksNTkpLHUoU3QoTWkoTG4uUyksNyksNTkpLHUoU3QoTWkoTG4uUyksOCksNTkpLHUoU3QoTWkoTG4uUyksOSksNTkpLHUoU3QoTWkoTG4uUyksMTApLDU5KSx1KFN0KE1pKExuLlMpLDExKSw1OSksdShTdChNaShMbi5TKSwxMiksNTkpLHUoU3QoTWkoTG4uUyksMTMpLDU5KSx1KFN0KE1pKExuLlMpLDE0KSw1OSksZXA9TG4uVCx1KFN0KFd0KExuLlQpLDApLDE4KSx1KFN0KFd0KExuLlQpLDIpLDE4KSx0NWU9dShTdChXdChMbi5UKSwzKSwxOCksdShTdChXdChMbi5UKSw0KSwxOCksdShTdChNaShMbi5UKSwwKSw1OSksdShTdChNaShMbi5UKSwxKSw1OSksdShTdChXdChMbi5UKSwxKSwxOCksbnA9TG4uVSx1KFN0KFd0KExuLlUpLDApLDM0KSx1KFN0KFd0KExuLlUpLDEpLDM0KSx1KFN0KFd0KExuLlUpLDIpLDE4KSx1KFN0KFd0KExuLlUpLDMpLDE4KSx1KFN0KFd0KExuLlUpLDQpLDE4KSx1KFN0KFd0KExuLlUpLDUpLDE4KSx1KFN0KE1pKExuLlUpLDApLDU5KSxlMz1Mbi5WLHUoU3QoV3QoTG4uViksMCksMTgpLGM1PUxuLlcsdShTdChXdChMbi5XKSwwKSwzNCksdShTdChXdChMbi5XKSwxKSwzNCksdShTdChXdChMbi5XKSwyKSwzNCksdShTdChXdChMbi5XKSwzKSwxOCksdShTdChXdChMbi5XKSw0KSwxOCksdShTdChXdChMbi5XKSw1KSwxOCksZTVlPUxuLmJiLHUoU3QoV3QoTG4uYmIpLDApLDM0KSx1KFN0KFd0KExuLmJiKSwxKSwzNCksdShTdChXdChMbi5iYiksMiksMzQpLHUoU3QoV3QoTG4uYmIpLDMpLDM0KSx1KFN0KFd0KExuLmJiKSw0KSwzNCksdShTdChXdChMbi5iYiksNSksMzQpLHUoU3QoV3QoTG4uYmIpLDYpLDM0KSx1KFN0KFd0KExuLmJiKSw3KSwxOCksdShTdChNaShMbi5iYiksMCksNTkpLHUoU3QoTWkoTG4uYmIpLDEpLDU5KSxuNWU9TG4uZWIsdShTdChXdChMbi5lYiksMCksMzQpLHUoU3QoV3QoTG4uZWIpLDEpLDM0KSx1KFN0KFd0KExuLmViKSwyKSwzNCksdShTdChXdChMbi5lYiksMyksMzQpLHUoU3QoV3QoTG4uZWIpLDQpLDM0KSx1KFN0KFd0KExuLmViKSw1KSwzNCksdShTdChXdChMbi5lYiksNiksMTgpLHUoU3QoV3QoTG4uZWIpLDcpLDE4KSxRYT1Mbi5hYix1KFN0KFd0KExuLmFiKSwwKSwzNCksdShTdChXdChMbi5hYiksMSksMzQpLHF3PUxuLkgsdShTdChXdChMbi5IKSwwKSwxOCksdShTdChXdChMbi5IKSwxKSwxOCksdShTdChXdChMbi5IKSwyKSwxOCksdShTdChXdChMbi5IKSwzKSwxOCksdShTdChXdChMbi5IKSw0KSwxOCksdShTdChXdChMbi5IKSw1KSwxOCksdShTdChNaShMbi5IKSwwKSw1OSksSHc9TG4uZGIsdShTdChXdChMbi5kYiksMCksMTgpLFYxPUxuLk19ZnVuY3Rpb24gSDVuKHQpe3ZhciBlO3QuT3x8KHQuTz0hMCxYYyh0LCJ0eXBlIiksc3oodCwiZWNvcmUueG1sLnR5cGUiKSxheih0LEwyKSxlPXUod0UoKE1wKCksVWgpLEwyKSwxOTQ1KSxNcihTbyh0LmZiKSx0LmIpLHJjKHQuYixmTiwiQW55VHlwZSIsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC53Yi5ELFpELG51bGwsMCwtMSxmTiwhMSwhMSwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmIpLDEpLDM0KSx0LndiLkQsImFueSIsbnVsbCwwLC0xLGZOLCEwLCEwLCEwLCExLCExLCEwKSxscyh1KFN0KFd0KHQuYiksMiksMzQpLHQud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsZk4sITEsITEsITAsITEsITEsITEpLHJjKHQuYmIsY1UsUjBlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuYmIpLDApLDM0KSx0LmdiLCJkYXRhIixudWxsLDAsMSxjVSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmJiKSwxKSwzNCksdC5nYixFOHQsbnVsbCwxLDEsY1UsITEsITEsITAsITEsITAsITEpLHJjKHQuZmIsZE4sajBlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuZmIpLDApLDM0KSxlLmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEsZE4sITAsITAsITAsITEsITAsITApLGxzKHUoU3QoV3QodC5mYiksMSksMzQpLGUuYSxZXyxudWxsLDAsMSxkTiwhMCwhMCwhMCwhMSwhMCwhMCksRmkodShTdChXdCh0LmZiKSwyKSwxOCksdC53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLGROLCExLCExLCEwLCExLCExLCExLCExKSxyYyh0LnFiLHBMdCwkMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5xYiksMCksMzQpLHQud2IuRCxaRCxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0LnFiKSwxKSwxOCksdC53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQucWIpLDIpLDE4KSx0LndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLGxzKHUoU3QoV3QodC5xYiksMyksMzQpLHQuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksbHModShTdChXdCh0LnFiKSw0KSwzNCksdC5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLEZpKHUoU3QoV3QodC5xYiksNSksMTgpLHQuYmIsbnVsbCxKMGUsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxscyh1KFN0KFd0KHQucWIpLDYpLDM0KSx0LmdiLEhjdCxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksc2kodC5hLFhuLCJBbnlTaW1wbGVUeXBlIiwhMCksc2kodC5jLEFlLCJBbnlVUkkiLCEwKSxzaSh0LmQsb3QoSHUsMSksIkJhc2U2NEJpbmFyeSIsITApLHNpKHQuZSxkbCwiQm9vbGVhbiIsITApLHNpKHQuZixCcywiQm9vbGVhbk9iamVjdCIsITApLHNpKHQuZyxIdSwiQnl0ZSIsITApLHNpKHQuaSxFNiwiQnl0ZU9iamVjdCIsITApLHNpKHQuaixBZSwiRGF0ZSIsITApLHNpKHQuayxBZSwiRGF0ZVRpbWUiLCEwKSxzaSh0Lm4sQ3V0LCJEZWNpbWFsIiwhMCksc2kodC5vLGlhLCJEb3VibGUiLCEwKSxzaSh0LnAsY2EsIkRvdWJsZU9iamVjdCIsITApLHNpKHQucSxBZSwiRHVyYXRpb24iLCEwKSxzaSh0LnMscGgsIkVOVElUSUVTIiwhMCksc2kodC5yLHBoLCJFTlRJVElFU0Jhc2UiLCEwKSxzaSh0LnQsQWUsajh0LCEwKSxzaSh0LnUscjMsIkZsb2F0IiwhMCksc2kodC52LFhFLCJGbG9hdE9iamVjdCIsITApLHNpKHQudyxBZSwiR0RheSIsITApLHNpKHQuQixBZSwiR01vbnRoIiwhMCksc2kodC5BLEFlLCJHTW9udGhEYXkiLCEwKSxzaSh0LkMsQWUsIkdZZWFyIiwhMCksc2kodC5ELEFlLCJHWWVhck1vbnRoIiwhMCksc2kodC5GLG90KEh1LDEpLCJIZXhCaW5hcnkiLCEwKSxzaSh0LkcsQWUsIklEIiwhMCksc2kodC5ILEFlLCJJRFJFRiIsITApLHNpKHQuSixwaCwiSURSRUZTIiwhMCksc2kodC5JLHBoLCJJRFJFRlNCYXNlIiwhMCksc2kodC5LLFRyLCJJbnQiLCEwKSxzaSh0Lk0sQjQsIkludGVnZXIiLCEwKSxzaSh0LkwsamEsIkludE9iamVjdCIsITApLHNpKHQuUCxBZSwiTGFuZ3VhZ2UiLCEwKSxzaSh0LlEsTGIsIkxvbmciLCEwKSxzaSh0LlIsVHcsIkxvbmdPYmplY3QiLCEwKSxzaSh0LlMsQWUsIk5hbWUiLCEwKSxzaSh0LlQsQWUsUEgsITApLHNpKHQuVSxCNCwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksc2kodC5WLEFlLHE4dCwhMCksc2kodC5YLHBoLCJOTVRPS0VOUyIsITApLHNpKHQuVyxwaCwiTk1UT0tFTlNCYXNlIiwhMCksc2kodC5ZLEI0LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxzaSh0LlosQjQsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLHNpKHQuJCxBZSwiTm9ybWFsaXplZFN0cmluZyIsITApLHNpKHQuXyxBZSwiTk9UQVRJT04iLCEwKSxzaSh0LmFiLEFlLCJQb3NpdGl2ZUludGVnZXIiLCEwKSxzaSh0LmNiLEFlLCJRTmFtZSIsITApLHNpKHQuZGIsZjUsIlNob3J0IiwhMCksc2kodC5lYixDdywiU2hvcnRPYmplY3QiLCEwKSxzaSh0LmdiLEFlLER4dCwhMCksc2kodC5oYixBZSwiVGltZSIsITApLHNpKHQuaWIsQWUsIlRva2VuIiwhMCksc2kodC5qYixmNSwiVW5zaWduZWRCeXRlIiwhMCksc2kodC5rYixDdywiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksc2kodC5sYixMYiwiVW5zaWduZWRJbnQiLCEwKSxzaSh0Lm1iLFR3LCJVbnNpZ25lZEludE9iamVjdCIsITApLHNpKHQubmIsQjQsIlVuc2lnbmVkTG9uZyIsITApLHNpKHQub2IsVHIsIlVuc2lnbmVkU2hvcnQiLCEwKSxzaSh0LnBiLGphLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCkscXl0KHQsTDIpLEc1bih0KSl9ZnVuY3Rpb24gemhlKHQpe1N2KHQsbmV3IHcyKHJidChtUihFdih5dihrdih4dihuZXcgcGcsVm4pLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBlUSksVm4pLGppKCh2RSgpLGtmdCksY3Qob3QoZVUsMSksYWUsMjM3LDAsW0pWLHRVLFpWLHhmdCxRVixYVl0pKSkpKSx4ZSh0LFZuLHRrdCxEZShKbHQpKSx4ZSh0LFZuLGVrdCxEZShkQ3QpKSx4ZSh0LFZuLEFvdCxEZShBTykpLHhlKHQsVm4sbmt0LERlKHhmKSkseGUodCxWbixPb3QsRGUoQjYpKSx4ZSh0LFZuLHJrdCxEZShGdykpLHhlKHQsVm4saWt0LERlKEd5KSkseGUodCxWbixza3QsRGUobTcpKSx4ZSh0LFZuLGFrdCxEZSh5NykpLHhlKHQsVm4sb2t0LERlKHRodCkpLHhlKHQsVm4sa3ksRGUoQncpKSx4ZSh0LFZuLGNrdCxEZShlaHQpKSx4ZSh0LFZuLHVrdCxEZShfUykpLHhlKHQsVm4sbGt0LERlKHNWKSkseGUodCxWbixGNnQsRGUoU08pKSx4ZSh0LFZuLFI2dCxEZShRNCkpLHhlKHQsVm4sQjZ0LERlKFIyKSkseGUodCxWbixqNnQsRGUoWjQpKSx4ZSh0LFZuLGpELGRlKDApKSx4ZSh0LFZuLCQ2dCxEZSh3NykpLHhlKHQsVm4sejZ0LERlKGZDdCkpLHhlKHQsVm4scTZ0LERlKEY2KSkseGUodCxWbixZMCxEZSh4Q3QpKSx4ZSh0LFZuLHRILERlKGdDdCkpLHhlKHQsVm4sZUgsRGUocEN0KSkseGUodCxWbix6XyxEZShyaHQpKSx4ZSh0LFZuLGljdCxEZShiQ3QpKSx4ZSh0LFZuLHNjdCxEZSh2Q3QpKSx4ZSh0LFZuLG5ILERlKGFWKSkseGUodCxWbixySCxEZShpaHQpKSx4ZSh0LFZuLGlILERlKG1DdCkpLHhlKHQsVm4sc0gsRGUod0N0KSkseGUodCxWbixhY3QsRGUoeUN0KSkseGUodCxWbixab3QsRGUoTncpKSx4ZSh0LFZuLEpvdCxEZShDUykpLHhlKHQsVm4sUXEsRGUoS2x0KSkseGUodCxWbixacSxEZShHOXQpKSx4ZSh0LFZuLHd3LG9DdCkseGUodCxWbixVRCx6OXQpLHhlKHQsVm4saGt0LDApLHhlKHQsVm4sSHEsZGUoMSkpLHhlKHQsVm4sYjYsQkUpLHhlKHQsVm4sZmt0LERlKEIyKSkseGUodCxWbixOb3QsRGUob3MpKSx4ZSh0LFZuLGRrdCxEZSh2NykpLHhlKHQsVm4sS0QsRGUoQXdlKSkseGUodCxWbixna3QsRGUoTGQpKSx4ZSh0LFZuLG9ILERlKGp5KSkseGUodCxWbixQXywoRm4oKSwhMCkpLHhlKHQsVm4scGt0LERlKCR5KSkseGUodCxWbixia3QsRGUoUDIpKSx4ZSh0LFZuLEw0LERlKEYyKSkseGUodCxWbix2NixEZShpVikpLHhlKHQsVm4sZmN0LERlKFpsdCkpLHhlKHQsVm4sdmt0LCQ5dCkseGUodCxWbixSRSxEZShPdykpLHhlKHQsVm4sd2t0LERlKG5WKSkseGUodCxWbixqRSxEZShxeSkpLHhlKHQsVm4sbWt0LERlKE53ZSkpLHhlKHQsVm4seWt0LERlKGxDdCkpLHhlKHQsVm4seGt0LHVDdCkseGUodCxWbixra3QsRGUoSXdlKSkseGUodCxWbixFa3QsRGUoRHdlKSkseGUodCxWbixUa3QsRGUoT3dlKSkseGUodCxWbixDa3QsRGUoTXdlKSkseGUodCxWbixDNnQsRGUobmh0KSkseGUodCxWbixHRCxEZShlQ3QpKSx4ZSh0LFZuLEhvdCxEZShYbHQpKSx4ZSh0LFZuLFQ2dCxEZShTUykpLHhlKHQsVm4sUzZ0LERlKGN1KSkseGUodCxWbiwkb3QsRGUoUnkpKSx4ZSh0LFZuLCRfLERlKEVTKSkseGUodCxWbixNNnQsRGUoQnkpKSx4ZSh0LFZuLE82dCxEZShCOXQpKSx4ZSh0LFZuLEtvdCxEZShHbHQpKSx4ZSh0LFZuLFlxLERlKF9PKSkseGUodCxWbixXb3QsRGUoVmx0KSkseGUodCxWbix5NnQsRGUobkN0KSkseGUodCxWbix4NnQsRGUockN0KSkseGUodCxWbixLcSxEZShYOXQpKSx4ZSh0LFZuLE00LERlKHJWKSkseGUodCxWbixYb3QsRGUoUWx0KSkseGUodCxWbixtNnQsRGUoWWx0KSkseGUodCxWbixRb3QsRGUoc0N0KSkseGUodCxWbixONnQsRGUoSDl0KSkseGUodCxWbixQNnQsRGUoV2x0KSkseGUodCxWbixjSCxEZShIbHQpKSx4ZSh0LFZuLFlvdCxEZShpQ3QpKSx4ZSh0LFZuLEg2dCxEZShLRykpLHhlKHQsVm4sRzZ0LERlKE45dCkpLHhlKHQsVm4sZWN0LERlKFdHKSkseGUodCxWbixKcSxEZShXOXQpKSx4ZSh0LFZuLG5jdCxEZShVOXQpKSx4ZSh0LFZuLHJjdCxEZShLOXQpKSx4ZSh0LFZuLHc2LERlKHA3KSkseGUodCxWbixfa3QsRGUoX28pKSx4ZSh0LFZuLExvdCxEZShVZykpLHhlKHQsVm4sU2t0LERlKE1kKSkseGUodCxWbixHcSxEZShVbHQpKSx4ZSh0LFZuLFVvdCxEZShSOXQpKSx4ZSh0LFZuLEFrdCxEZShXZykpLHhlKHQsVm4sTGt0LERlKGtTKSkseGUodCxWbixNa3QsRGUoSkcpKSx4ZSh0LFZuLElrdCxEZShQdykpLHhlKHQsVm4sZGN0LERlKGNDdCkpLHhlKHQsVm4sZ2N0LERlKGI3KSkseGUodCxWbix6b3QsRGUoWjl0KSkseGUodCxWbixxb3QsRGUoSjl0KSkseGUodCxWbix1SCxEZShIeSkpLHhlKHQsVm4sazZ0LERlKHpsdCkpLHhlKHQsVm4sR290LERlKHRDdCkpLHhlKHQsVm4sVjZ0LERlKFpHKSkseGUodCxWbixVNnQsRGUoUUcpKSx4ZSh0LFZuLERrdCxEZShlVikpLHhlKHQsVm4sVm90LERlKFE5dCkpLHhlKHQsVm4sWHEsRGUoVFMpKSx4ZSh0LFZuLE9rdCxEZShMTykpLHhlKHQsVm4sdzZ0LERlKGo5dCkpLHhlKHQsVm4sRTZ0LERlKGhDdCkpLHhlKHQsVm4sdGN0LERlKHE5dCkpLHhlKHQsVm4sQTZ0LERlKEx3ZSkpLHhlKHQsVm4sSTZ0LERlKFN3ZSkpLHhlKHQsVm4scGN0LERlKFk5dCkpLHhlKHQsVm4sTDZ0LERlKHRWKSkseGUodCxWbixENnQsRGUoWEcpKSx4ZSh0LFZuLGFILERlKGRiKSkseGUodCxWbixLNnQsRGUoRjl0KSkseGUodCxWbixjY3QsRGUoWUcpKSx4ZSh0LFZuLHVjdCxEZShQOXQpKSx4ZSh0LFZuLFc2dCxEZShxbHQpKSx4ZSh0LFZuLG9jdCxEZShQNikpLHhlKHQsVm4sXzZ0LERlKFY5dCkpfWZ1bmN0aW9uIEM0KHQsZSl7dmFyIG4scjtyZXR1cm4gaDV8fChoNT1uZXcgQ3IsRDc9bmV3IENyLHI9KGdpKCksZ2koKSxuZXcgTmwoNCkpLFdJKHIsYAkKXHJcciAgYCkseG8oaDUsY3V0LHIpLHhvKEQ3LGN1dCxieShyKSkscj1uZXcgTmwoNCksV0kocixlZ2UpLHhvKGg1LGlTLHIpLHhvKEQ3LGlTLGJ5KHIpKSxyPW5ldyBObCg0KSxXSShyLGVnZSkseG8oaDUsaVMscikseG8oRDcsaVMsYnkocikpLHI9bmV3IE5sKDQpLFdJKHIsbmdlKSx2eShyLHUoRmMoaDUsaVMpLDExNykpLHhvKGg1LG91dCxyKSx4byhENyxvdXQsYnkocikpLHI9bmV3IE5sKDQpLFdJKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIikseG8oaDUsdXV0LHIpLHhvKEQ3LHV1dCxieShyKSkscj1uZXcgTmwoNCksV0kocixuZ2UpLGpjKHIsOTUsOTUpLGpjKHIsNTgsNTgpLHhvKGg1LGx1dCxyKSx4byhENyxsdXQsYnkocikpKSxuPXUoRmMoZT9oNTpENyx0KSwxMzYpLG59ZnVuY3Rpb24gRzVuKHQpe0lyKHQuYSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJhbnlTaW1wbGVUeXBlIl0pKSxJcih0LmIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiYW55VHlwZSIsTmgsWkRdKSksSXIodShTdChXdCh0LmIpLDApLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLG51dCxvaSwiOm1peGVkIl0pKSxJcih1KFN0KFd0KHQuYiksMSksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsbnV0LEI4dCxpdXQsb2ksIjoxIix6MGUsImxheCJdKSksSXIodShTdChXdCh0LmIpLDIpLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLEIwZSxCOHQsaXV0LG9pLCI6MiIsejBlLCJsYXgiXSkpLElyKHQuYyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJhbnlVUkkiLEZoLHQxXSkpLElyKHQuZCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJiYXNlNjRCaW5hcnkiLEZoLHQxXSkpLElyKHQuZSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLHU2LEZoLHQxXSkpLElyKHQuZixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJib29sZWFuOk9iamVjdCIsU2EsdTZdKSksSXIodC5nLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksUV9dKSksSXIodC5pLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImJ5dGU6T2JqZWN0IixTYSxRX10pKSxJcih0LmosS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiZGF0ZSIsRmgsdDFdKSksSXIodC5rLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImRhdGVUaW1lIixGaCx0MV0pKSxJcih0Lm4sS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiZGVjaW1hbCIsRmgsdDFdKSksSXIodC5vLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWl8sRmgsdDFdKSksSXIodC5wLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImRvdWJsZTpPYmplY3QiLFNhLFpfXSkpLElyKHQucSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJkdXJhdGlvbiIsRmgsdDFdKSksSXIodC5zLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIkVOVElUSUVTIixTYSxxMGUsUjh0LCIxIl0pKSxJcih0LnIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxxMGUscnV0LGo4dF0pKSxJcih0LnQsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxqOHQsU2EsUEhdKSksSXIodC51LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksSl8sRmgsdDFdKSksSXIodC52LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImZsb2F0Ok9iamVjdCIsU2EsSl9dKSksSXIodC53LEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImdEYXkiLEZoLHQxXSkpLElyKHQuQixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnTW9udGgiLEZoLHQxXSkpLElyKHQuQSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnTW9udGhEYXkiLEZoLHQxXSkpLElyKHQuQyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJnWWVhciIsRmgsdDFdKSksSXIodC5ELEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksImdZZWFyTW9udGgiLEZoLHQxXSkpLElyKHQuRixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJoZXhCaW5hcnkiLEZoLHQxXSkpLElyKHQuRyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJJRCIsU2EsUEhdKSksSXIodC5ILEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIklEUkVGIixTYSxQSF0pKSxJcih0LkosS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiSURSRUZTIixTYSxIMGUsUjh0LCIxIl0pKSxJcih0LkksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxIMGUscnV0LCJJRFJFRiJdKSksSXIodC5LLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksdFNdKSksSXIodC5NLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksJDh0XSkpLElyKHQuTCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJpbnQ6T2JqZWN0IixTYSx0U10pKSxJcih0LlAsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwibGFuZ3VhZ2UiLFNhLHN1dCxhdXQsRzBlXSkpLElyKHQuUSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLGVTXSkpLElyKHQuUixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJsb25nOk9iamVjdCIsU2EsZVNdKSksSXIodC5TLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIk5hbWUiLFNhLHN1dCxhdXQsejh0XSkpLElyKHQuVCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFBILFNhLCJOYW1lIixhdXQsVjBlXSkpLElyKHQuVSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJuZWdhdGl2ZUludGVnZXIiLFNhLFUwZSxyTywiLTEiXSkpLElyKHQuVixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLHE4dCxTYSxzdXQsYXV0LCJcXGMrIl0pKSxJcih0LlgsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiTk1UT0tFTlMiLFNhLFcwZSxSOHQsIjEiXSkpLElyKHQuVyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFcwZSxydXQscTh0XSkpLElyKHQuWSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLEg4dCxTYSwkOHQsaU8sIjAiXSkpLElyKHQuWixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFUwZSxTYSwkOHQsck8sIjAiXSkpLElyKHQuJCxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLEswZSxTYSxPYXQsRmgsInJlcGxhY2UiXSkpLElyKHQuXyxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJOT1RBVElPTiIsRmgsdDFdKSksSXIodC5hYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJwb3NpdGl2ZUludGVnZXIiLFNhLEg4dCxpTywiMSJdKSksSXIodC5iYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixOaCwiZW1wdHkiXSkpLElyKHUoU3QoV3QodC5iYiksMCksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksImRhdGEiXSkpLElyKHUoU3QoV3QodC5iYiksMSksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksRTh0XSkpLElyKHQuY2IsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiUU5hbWUiLEZoLHQxXSkpLElyKHQuZGIsS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSxuU10pKSxJcih0LmViLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInNob3J0Ok9iamVjdCIsU2EsblNdKSksSXIodC5mYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJzaW1wbGVBbnlUeXBlIixOaCxKRF0pKSxJcih1KFN0KFd0KHQuZmIpLDApLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCI6MyIsTmgsSkRdKSksSXIodShTdChXdCh0LmZiKSwxKSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtvaSwiOjQiLE5oLEpEXSkpLElyKHUoU3QoV3QodC5mYiksMiksMTgpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksIjo1IixOaCxKRF0pKSxJcih0LmdiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksT2F0LEZoLCJwcmVzZXJ2ZSJdKSksSXIodC5oYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJ0aW1lIixGaCx0MV0pKSxJcih0LmliLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksc3V0LFNhLEswZSxGaCx0MV0pKSxJcih0LmpiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWTBlLHJPLCIyNTUiLGlPLCIwIl0pKSxJcih0LmtiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLFNhLFkwZV0pKSxJcih0LmxiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksWDBlLHJPLCI0Mjk0OTY3Mjk1IixpTywiMCJdKSksSXIodC5tYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCJ1bnNpZ25lZEludDpPYmplY3QiLFNhLFgwZV0pKSxJcih0Lm5iLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkTG9uZyIsU2EsSDh0LHJPLFEwZSxpTywiMCJdKSksSXIodC5vYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLFowZSxyTywiNjU1MzUiLGlPLCIwIl0pKSxJcih0LnBiLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbb2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixTYSxaMGVdKSksSXIodC5xYixLcixjdChvdChBZSwxKSx0ZSwyLDYsW29pLCIiLE5oLFpEXSkpLElyKHUoU3QoV3QodC5xYiksMCksMzQpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsbnV0LG9pLCI6bWl4ZWQiXSkpLElyKHUoU3QoV3QodC5xYiksMSksMTgpLEtyLGN0KG90KEFlLDEpLHRlLDIsNixbTmgsSUgsb2ksInhtbG5zOnByZWZpeCJdKSksSXIodShTdChXdCh0LnFiKSwyKSwxOCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxJSCxvaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxJcih1KFN0KFd0KHQucWIpLDMpLDM0KSxLcixjdChvdChBZSwxKSx0ZSwyLDYsW05oLERILG9pLCJjREFUQSIsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw0KSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSwiY29tbWVudCIsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw1KSwxOCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSxKMGUsT0gsdE9dKSksSXIodShTdChXdCh0LnFiKSw2KSwzNCksS3IsY3Qob3QoQWUsMSksdGUsMiw2LFtOaCxESCxvaSxIY3QsT0gsdE9dKSl9ZnVuY3Rpb24gcXIodCl7cmV0dXJuIGhuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLHQpPyJFTUYgUHJvYmxlbSI6aG4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLHQpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjpobihQZGUsdCk/Ildyb25nIGNoYXJhY3Rlci4iOmhuKEZkZSx0KT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6aG4oa0gsdCk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6aG4oWGN0LHQpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/IjpobihCZGUsdCk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOmhuKFJkZSx0KT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6aG4oQTIsdCk/IicpJyBpcyBleHBlY3RlZC4iOmhuKFQ4dCx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOmhuKGpkZSx0KT8iJzonIGlzIGV4cGVjdGVkLiI6aG4oJGRlLHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6aG4oemRlLHQpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOmhuKHFkZSx0KT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjpobihIZGUsdCk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6aG4oR2RlLHQpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjpobihWZGUsdCk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOmhuKEM4dCx0KT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOmhuKFFjdCx0KT8iVW5rbm93biBwcm9wZXJ0eS4iOmhuKF84dCx0KT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOmhuKEVILHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOmhuKFVkZSx0KT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOmhuKCJwYXJzZXIuY2MuNCIsdCk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjpobihXZGUsdCk/IiddJyBpcyBleHBlY3RlZC4iOmhuKFM4dCx0KT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOmhuKEE4dCx0KT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOmhuKFpjdCx0KT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOmhuKEtkZSx0KT8iJ1snIGlzIGV4cGVjdGVkLiI6aG4oWWRlLHQpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjpobihYZGUsdCk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjpobihHZyx0KT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOmhuKFFkZSx0KT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjpobihaZGUsdCk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjpobihKZGUsdCk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6aG4odDBlLHQpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOmhuKGdoLHQpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOmhuKGUwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6aG4objBlLHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOmhuKHIwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOmhuKGkwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6aG4oTDh0LHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6aG4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6aG4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5IjpobigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5IjpobigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5IjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6aG4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOmhuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6aG4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOmhuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsdCk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0IjpobigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6aG4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOmhuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6aG4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjpobigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLHQpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjpobigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOmhuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOmhuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjpobigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjpobigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjpobigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIix0KT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6dH1mdW5jdGlvbiBWNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO3Qucnx8KHQucj0hMCxYYyh0LCJncmFwaCIpLHN6KHQsImdyYXBoIiksYXoodCxHRSksTUkodC5vLCJUIiksTXIoU28odC5hKSx0LnApLE1yKFNvKHQuZiksdC5hKSxNcihTbyh0Lm4pLHQuZiksTXIoU28odC5nKSx0Lm4pLE1yKFNvKHQuYyksdC5uKSxNcihTbyh0LmkpLHQuYyksTXIoU28odC5qKSx0LmMpLE1yKFNvKHQuZCksdC5mKSxNcihTbyh0LmUpLHQuYSkscmModC5wLG94bixOZmUsITAsITAsITEpLFY9aTQodC5wLHQucCwic2V0UHJvcGVydHkiKSxZPUhuZShWKSxrPUkwKHQubyksQz0obj0ocj1uZXcgd3YsciksbiksTXIoKCFrLmQmJihrLmQ9bmV3IFNzKGhvLGssMSkpLGsuZCksQyksTT1ucnQoWSkscDR0KEMsTSksWHooVixrLGc4dCksaz1ucnQoWSksWHooVixrLFlfKSxWPWk0KHQucCxudWxsLCJnZXRQcm9wZXJ0eSIpLFk9SG5lKFYpLGs9STAodC5vKSxDPW5ydChZKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxYeihWLGssZzh0KSxrPW5ydChZKSxIPU8xKFYsayxudWxsKSxIJiZILkZpKCksVj1pNCh0LnAsdC53Yi5lLCJoYXNQcm9wZXJ0eSIpLGs9STAodC5vKSxDPShzPShvPW5ldyB3dixvKSxzKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxYeihWLGssZzh0KSxWPWk0KHQucCx0LnAsImNvcHlQcm9wZXJ0aWVzIiksQ28oVix0LnAsamN0KSxWPWk0KHQucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksaz1JMCh0LndiLlApLEM9STAodC5vKSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxNPShoPShkPW5ldyB3dixkKSxoKSxNcigoIUMuZCYmKEMuZD1uZXcgU3MoaG8sQywxKSksQy5kKSxNKSxDPUkwKHQud2IuTSksTXIoKCFrLmQmJihrLmQ9bmV3IFNzKGhvLGssMSkpLGsuZCksQyksRj1PMShWLGssbnVsbCksRiYmRi5GaSgpLHJjKHQuYSxJNyxoZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5hKSwwKSwxOCksdC5rLG51bGwsRWRlLDAsLTEsSTcsITEsITEsITAsITAsITEsITEsITEpLHJjKHQuZixzTixkZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5mKSwwKSwxOCksdC5nLHUoU3QoV3QodC5nKSwwKSwxOCksImxhYmVscyIsMCwtMSxzTiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmYpLDEpLDM0KSx0LndiLl8sVGRlLG51bGwsMCwxLHNOLCExLCExLCEwLCExLCEwLCExKSxyYyh0Lm4sYU4sIkVsa1NoYXBlIiwhMCwhMSwhMCksbHModShTdChXdCh0Lm4pLDApLDM0KSx0LndiLnQsJGN0LERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDEpLDM0KSx0LndiLnQsemN0LERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDIpLDM0KSx0LndiLnQsIngiLERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm4pLDMpLDM0KSx0LndiLnQsInkiLERFLDEsMSxhTiwhMSwhMSwhMCwhMSwhMCwhMSksVj1pNCh0Lm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLENvKFYsdC53Yi50LHpjdCksQ28oVix0LndiLnQsJGN0KSxWPWk0KHQubixudWxsLCJzZXRMb2NhdGlvbiIpLENvKFYsdC53Yi50LCJ4IiksQ28oVix0LndiLnQsInkiKSxyYyh0LmcscW8saDh0LCExLCExLCEwKSxGaSh1KFN0KFd0KHQuZyksMCksMTgpLHQuZix1KFN0KFd0KHQuZiksMCksMTgpLHFjdCwwLDEscW8sITEsITEsITAsITEsITEsITEsITEpLGxzKHUoU3QoV3QodC5nKSwxKSwzNCksdC53Yi5fLEhjdCwiIiwwLDEscW8sITEsITEsITAsITEsITAsITEpLHJjKHQuYyxicixnZGUsITAsITEsITApLEZpKHUoU3QoV3QodC5jKSwwKSwxOCksdC5kLHUoU3QoV3QodC5kKSwxKSwxOCksIm91dGdvaW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5jKSwxKSwxOCksdC5kLHUoU3QoV3QodC5kKSwyKSwxOCksImluY29taW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQuaSxucyxmOHQsITEsITEsITApLEZpKHUoU3QoV3QodC5pKSwwKSwxOCksdC5qLHUoU3QoV3QodC5qKSwwKSwxOCksInBvcnRzIiwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQuaSksMSksMTgpLHQuaSx1KFN0KFd0KHQuaSksMiksMTgpLEdjdCwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQuaSksMiksMTgpLHQuaSx1KFN0KFd0KHQuaSksMSksMTgpLHFjdCwwLDEsbnMsITEsITEsITAsITEsITEsITEsITEpLEZpKHUoU3QoV3QodC5pKSwzKSwxOCksdC5kLHUoU3QoV3QodC5kKSwwKSwxOCksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLG5zLCExLCExLCEwLCEwLCExLCExLCExKSxscyh1KFN0KFd0KHQuaSksNCksMzQpLHQud2IuZSxDZGUsbnVsbCwwLDEsbnMsITAsITAsITEsITEsITAsITApLHJjKHQuaixmbCxkOHQsITEsITEsITApLEZpKHUoU3QoV3QodC5qKSwwKSwxOCksdC5pLHUoU3QoV3QodC5pKSwwKSwxOCkscWN0LDAsMSxmbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSkscmModC5kLFdzLGw4dCwhMSwhMSwhMCksRmkodShTdChXdCh0LmQpLDApLDE4KSx0LmksdShTdChXdCh0LmkpLDMpLDE4KSwiY29udGFpbmluZ05vZGUiLDAsMSxXcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmQpLDEpLDE4KSx0LmMsdShTdChXdCh0LmMpLDApLDE4KSxwOHQsMCwtMSxXcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LmQpLDIpLDE4KSx0LmMsdShTdChXdCh0LmMpLDEpLDE4KSxWY3QsMCwtMSxXcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LmQpLDMpLDE4KSx0LmUsdShTdChXdCh0LmUpLDUpLDE4KSxiOHQsMCwtMSxXcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksbHModShTdChXdCh0LmQpLDQpLDM0KSx0LndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsV3MsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5kKSw1KSwzNCksdC53Yi5lLENkZSxudWxsLDAsMSxXcywhMCwhMCwhMSwhMSwhMCwhMCksbHModShTdChXdCh0LmQpLDYpLDM0KSx0LndiLmUsInNlbGZsb29wIixudWxsLDAsMSxXcywhMCwhMCwhMSwhMSwhMCwhMCksbHModShTdChXdCh0LmQpLDcpLDM0KSx0LndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsV3MsITAsITAsITEsITEsITAsITApLHJjKHQuYixIaCxmZGUsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC53Yi50LCJ4IixERSwxLDEsSGgsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iKSwxKSwzNCksdC53Yi50LCJ5IixERSwxLDEsSGgsITEsITEsITAsITEsITAsITEpLFY9aTQodC5iLG51bGwsInNldCIpLENvKFYsdC53Yi50LCJ4IiksQ28oVix0LndiLnQsInkiKSxyYyh0LmUsWmkscGRlLCExLCExLCEwKSxscyh1KFN0KFd0KHQuZSksMCksMzQpLHQud2IudCwic3RhcnRYIixudWxsLDAsMSxaaSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmUpLDEpLDM0KSx0LndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsWmksITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5lKSwyKSwzNCksdC53Yi50LCJlbmRYIixudWxsLDAsMSxaaSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmUpLDMpLDM0KSx0LndiLnQsImVuZFkiLG51bGwsMCwxLFppLCExLCExLCEwLCExLCEwLCExKSxGaSh1KFN0KFd0KHQuZSksNCksMTgpLHQuYixudWxsLHdILDAsLTEsWmksITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5lKSw1KSwxOCksdC5kLHUoU3QoV3QodC5kKSwzKSwxOCkscWN0LDAsMSxaaSwhMSwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmUpLDYpLDE4KSx0LmMsbnVsbCx2OHQsMCwxLFppLCExLCExLCEwLCExLCEwLCExLCExKSxGaSh1KFN0KFd0KHQuZSksNyksMTgpLHQuYyxudWxsLHc4dCwwLDEsWmksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5lKSw4KSwxOCksdC5lLHUoU3QoV3QodC5lKSw5KSwxOCksbTh0LDAsLTEsWmksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5lKSw5KSwxOCksdC5lLHUoU3QoV3QodC5lKSw4KSwxOCkseTh0LDAsLTEsWmksITEsITEsITAsITEsITAsITEsITEpLGxzKHUoU3QoV3QodC5lKSwxMCksMzQpLHQud2IuXyxUZGUsbnVsbCwwLDEsWmksITEsITEsITAsITEsITAsITEpLFY9aTQodC5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxDbyhWLHQud2IudCwieCIpLENvKFYsdC53Yi50LCJ5IiksVj1pNCh0LmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxDbyhWLHQud2IudCwieCIpLENvKFYsdC53Yi50LCJ5IikscmModC5rLE0yLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLGs9STAodC5vKSxDPSh3PShlPW5ldyB3dixlKSx3KSxNcigoIWsuZCYmKGsuZD1uZXcgU3MoaG8saywxKSksay5kKSxDKSxIb2UodShTdChXdCh0LmspLDApLDM0KSxrLCJrZXkiLE0yLCExLCExLCEwLCExKSxscyh1KFN0KFd0KHQuayksMSksMzQpLHQucyxZXyxudWxsLDAsMSxNMiwhMSwhMSwhMCwhMSwhMCwhMSksc2kodC5vLFFodCwiSVByb3BlcnR5IiwhMCksc2kodC5zLFhuLCJQcm9wZXJ0eVZhbHVlIiwhMCkscXl0KHQsR0UpKX1mdW5jdGlvbiBxaGUoKXtxaGU9Wix2dD1QdChIdSxONCwyNSxZYSwxNSwxKSx2dFs5XT0zNSx2dFsxMF09MTksdnRbMTNdPTE5LHZ0WzMyXT01MSx2dFszM109NDksdnRbMzRdPTMzLFJ0KHZ0LDM1LDM4LDQ5KSx2dFszOF09MSxSdCh2dCwzOSw0NSw0OSksUnQodnQsNDUsNDcsLTcxKSx2dFs0N109NDksUnQodnQsNDgsNTgsLTcxKSx2dFs1OF09NjEsdnRbNTldPTQ5LHZ0WzYwXT0xLHZ0WzYxXT00OSx2dFs2Ml09MzMsUnQodnQsNjMsNjUsNDkpLFJ0KHZ0LDY1LDkxLC0zKSxSdCh2dCw5MSw5MywzMyksdnRbOTNdPTEsdnRbOTRdPTMzLHZ0Wzk1XT0tMyx2dFs5Nl09MzMsUnQodnQsOTcsMTIzLC0zKSxSdCh2dCwxMjMsMTgzLDMzKSx2dFsxODNdPS04NyxSdCh2dCwxODQsMTkyLDMzKSxSdCh2dCwxOTIsMjE1LC0xOSksdnRbMjE1XT0zMyxSdCh2dCwyMTYsMjQ3LC0xOSksdnRbMjQ3XT0zMyxSdCh2dCwyNDgsMzA2LC0xOSksUnQodnQsMzA2LDMwOCwzMyksUnQodnQsMzA4LDMxOSwtMTkpLFJ0KHZ0LDMxOSwzMjEsMzMpLFJ0KHZ0LDMyMSwzMjksLTE5KSx2dFszMjldPTMzLFJ0KHZ0LDMzMCwzODMsLTE5KSx2dFszODNdPTMzLFJ0KHZ0LDM4NCw0NTIsLTE5KSxSdCh2dCw0NTIsNDYxLDMzKSxSdCh2dCw0NjEsNDk3LC0xOSksUnQodnQsNDk3LDUwMCwzMyksUnQodnQsNTAwLDUwMiwtMTkpLFJ0KHZ0LDUwMiw1MDYsMzMpLFJ0KHZ0LDUwNiw1MzYsLTE5KSxSdCh2dCw1MzYsNTkyLDMzKSxSdCh2dCw1OTIsNjgxLC0xOSksUnQodnQsNjgxLDY5OSwzMyksUnQodnQsNjk5LDcwNiwtMTkpLFJ0KHZ0LDcwNiw3MjAsMzMpLFJ0KHZ0LDcyMCw3MjIsLTg3KSxSdCh2dCw3MjIsNzY4LDMzKSxSdCh2dCw3NjgsODM4LC04NyksUnQodnQsODM4LDg2NCwzMyksUnQodnQsODY0LDg2NiwtODcpLFJ0KHZ0LDg2Niw5MDIsMzMpLHZ0WzkwMl09LTE5LHZ0WzkwM109LTg3LFJ0KHZ0LDkwNCw5MDcsLTE5KSx2dFs5MDddPTMzLHZ0WzkwOF09LTE5LHZ0WzkwOV09MzMsUnQodnQsOTEwLDkzMCwtMTkpLHZ0WzkzMF09MzMsUnQodnQsOTMxLDk3NSwtMTkpLHZ0Wzk3NV09MzMsUnQodnQsOTc2LDk4MywtMTkpLFJ0KHZ0LDk4Myw5ODYsMzMpLHZ0Wzk4Nl09LTE5LHZ0Wzk4N109MzMsdnRbOTg4XT0tMTksdnRbOTg5XT0zMyx2dFs5OTBdPS0xOSx2dFs5OTFdPTMzLHZ0Wzk5Ml09LTE5LHZ0Wzk5M109MzMsUnQodnQsOTk0LDEwMTIsLTE5KSxSdCh2dCwxMDEyLDEwMjUsMzMpLFJ0KHZ0LDEwMjUsMTAzNywtMTkpLHZ0WzEwMzddPTMzLFJ0KHZ0LDEwMzgsMTEwNCwtMTkpLHZ0WzExMDRdPTMzLFJ0KHZ0LDExMDUsMTExNywtMTkpLHZ0WzExMTddPTMzLFJ0KHZ0LDExMTgsMTE1NCwtMTkpLHZ0WzExNTRdPTMzLFJ0KHZ0LDExNTUsMTE1OSwtODcpLFJ0KHZ0LDExNTksMTE2OCwzMyksUnQodnQsMTE2OCwxMjIxLC0xOSksUnQodnQsMTIyMSwxMjIzLDMzKSxSdCh2dCwxMjIzLDEyMjUsLTE5KSxSdCh2dCwxMjI1LDEyMjcsMzMpLFJ0KHZ0LDEyMjcsMTIyOSwtMTkpLFJ0KHZ0LDEyMjksMTIzMiwzMyksUnQodnQsMTIzMiwxMjYwLC0xOSksUnQodnQsMTI2MCwxMjYyLDMzKSxSdCh2dCwxMjYyLDEyNzAsLTE5KSxSdCh2dCwxMjcwLDEyNzIsMzMpLFJ0KHZ0LDEyNzIsMTI3NCwtMTkpLFJ0KHZ0LDEyNzQsMTMyOSwzMyksUnQodnQsMTMyOSwxMzY3LC0xOSksUnQodnQsMTM2NywxMzY5LDMzKSx2dFsxMzY5XT0tMTksUnQodnQsMTM3MCwxMzc3LDMzKSxSdCh2dCwxMzc3LDE0MTUsLTE5KSxSdCh2dCwxNDE1LDE0MjUsMzMpLFJ0KHZ0LDE0MjUsMTQ0MiwtODcpLHZ0WzE0NDJdPTMzLFJ0KHZ0LDE0NDMsMTQ2NiwtODcpLHZ0WzE0NjZdPTMzLFJ0KHZ0LDE0NjcsMTQ3MCwtODcpLHZ0WzE0NzBdPTMzLHZ0WzE0NzFdPS04Nyx2dFsxNDcyXT0zMyxSdCh2dCwxNDczLDE0NzUsLTg3KSx2dFsxNDc1XT0zMyx2dFsxNDc2XT0tODcsUnQodnQsMTQ3NywxNDg4LDMzKSxSdCh2dCwxNDg4LDE1MTUsLTE5KSxSdCh2dCwxNTE1LDE1MjAsMzMpLFJ0KHZ0LDE1MjAsMTUyMywtMTkpLFJ0KHZ0LDE1MjMsMTU2OSwzMyksUnQodnQsMTU2OSwxNTk1LC0xOSksUnQodnQsMTU5NSwxNjAwLDMzKSx2dFsxNjAwXT0tODcsUnQodnQsMTYwMSwxNjExLC0xOSksUnQodnQsMTYxMSwxNjE5LC04NyksUnQodnQsMTYxOSwxNjMyLDMzKSxSdCh2dCwxNjMyLDE2NDIsLTg3KSxSdCh2dCwxNjQyLDE2NDgsMzMpLHZ0WzE2NDhdPS04NyxSdCh2dCwxNjQ5LDE3MjAsLTE5KSxSdCh2dCwxNzIwLDE3MjIsMzMpLFJ0KHZ0LDE3MjIsMTcyNywtMTkpLHZ0WzE3MjddPTMzLFJ0KHZ0LDE3MjgsMTc0MywtMTkpLHZ0WzE3NDNdPTMzLFJ0KHZ0LDE3NDQsMTc0OCwtMTkpLHZ0WzE3NDhdPTMzLHZ0WzE3NDldPS0xOSxSdCh2dCwxNzUwLDE3NjUsLTg3KSxSdCh2dCwxNzY1LDE3NjcsLTE5KSxSdCh2dCwxNzY3LDE3NjksLTg3KSx2dFsxNzY5XT0zMyxSdCh2dCwxNzcwLDE3NzQsLTg3KSxSdCh2dCwxNzc0LDE3NzYsMzMpLFJ0KHZ0LDE3NzYsMTc4NiwtODcpLFJ0KHZ0LDE3ODYsMjMwNSwzMyksUnQodnQsMjMwNSwyMzA4LC04NyksdnRbMjMwOF09MzMsUnQodnQsMjMwOSwyMzYyLC0xOSksUnQodnQsMjM2MiwyMzY0LDMzKSx2dFsyMzY0XT0tODcsdnRbMjM2NV09LTE5LFJ0KHZ0LDIzNjYsMjM4MiwtODcpLFJ0KHZ0LDIzODIsMjM4NSwzMyksUnQodnQsMjM4NSwyMzg5LC04NyksUnQodnQsMjM4OSwyMzkyLDMzKSxSdCh2dCwyMzkyLDI0MDIsLTE5KSxSdCh2dCwyNDAyLDI0MDQsLTg3KSxSdCh2dCwyNDA0LDI0MDYsMzMpLFJ0KHZ0LDI0MDYsMjQxNiwtODcpLFJ0KHZ0LDI0MTYsMjQzMywzMyksUnQodnQsMjQzMywyNDM2LC04NyksdnRbMjQzNl09MzMsUnQodnQsMjQzNywyNDQ1LC0xOSksUnQodnQsMjQ0NSwyNDQ3LDMzKSxSdCh2dCwyNDQ3LDI0NDksLTE5KSxSdCh2dCwyNDQ5LDI0NTEsMzMpLFJ0KHZ0LDI0NTEsMjQ3MywtMTkpLHZ0WzI0NzNdPTMzLFJ0KHZ0LDI0NzQsMjQ4MSwtMTkpLHZ0WzI0ODFdPTMzLHZ0WzI0ODJdPS0xOSxSdCh2dCwyNDgzLDI0ODYsMzMpLFJ0KHZ0LDI0ODYsMjQ5MCwtMTkpLFJ0KHZ0LDI0OTAsMjQ5MiwzMyksdnRbMjQ5Ml09LTg3LHZ0WzI0OTNdPTMzLFJ0KHZ0LDI0OTQsMjUwMSwtODcpLFJ0KHZ0LDI1MDEsMjUwMywzMyksUnQodnQsMjUwMywyNTA1LC04NyksUnQodnQsMjUwNSwyNTA3LDMzKSxSdCh2dCwyNTA3LDI1MTAsLTg3KSxSdCh2dCwyNTEwLDI1MTksMzMpLHZ0WzI1MTldPS04NyxSdCh2dCwyNTIwLDI1MjQsMzMpLFJ0KHZ0LDI1MjQsMjUyNiwtMTkpLHZ0WzI1MjZdPTMzLFJ0KHZ0LDI1MjcsMjUzMCwtMTkpLFJ0KHZ0LDI1MzAsMjUzMiwtODcpLFJ0KHZ0LDI1MzIsMjUzNCwzMyksUnQodnQsMjUzNCwyNTQ0LC04NyksUnQodnQsMjU0NCwyNTQ2LC0xOSksUnQodnQsMjU0NiwyNTYyLDMzKSx2dFsyNTYyXT0tODcsUnQodnQsMjU2MywyNTY1LDMzKSxSdCh2dCwyNTY1LDI1NzEsLTE5KSxSdCh2dCwyNTcxLDI1NzUsMzMpLFJ0KHZ0LDI1NzUsMjU3NywtMTkpLFJ0KHZ0LDI1NzcsMjU3OSwzMyksUnQodnQsMjU3OSwyNjAxLC0xOSksdnRbMjYwMV09MzMsUnQodnQsMjYwMiwyNjA5LC0xOSksdnRbMjYwOV09MzMsUnQodnQsMjYxMCwyNjEyLC0xOSksdnRbMjYxMl09MzMsUnQodnQsMjYxMywyNjE1LC0xOSksdnRbMjYxNV09MzMsUnQodnQsMjYxNiwyNjE4LC0xOSksUnQodnQsMjYxOCwyNjIwLDMzKSx2dFsyNjIwXT0tODcsdnRbMjYyMV09MzMsUnQodnQsMjYyMiwyNjI3LC04NyksUnQodnQsMjYyNywyNjMxLDMzKSxSdCh2dCwyNjMxLDI2MzMsLTg3KSxSdCh2dCwyNjMzLDI2MzUsMzMpLFJ0KHZ0LDI2MzUsMjYzOCwtODcpLFJ0KHZ0LDI2MzgsMjY0OSwzMyksUnQodnQsMjY0OSwyNjUzLC0xOSksdnRbMjY1M109MzMsdnRbMjY1NF09LTE5LFJ0KHZ0LDI2NTUsMjY2MiwzMyksUnQodnQsMjY2MiwyNjc0LC04NyksUnQodnQsMjY3NCwyNjc3LC0xOSksUnQodnQsMjY3NywyNjg5LDMzKSxSdCh2dCwyNjg5LDI2OTIsLTg3KSx2dFsyNjkyXT0zMyxSdCh2dCwyNjkzLDI3MDAsLTE5KSx2dFsyNzAwXT0zMyx2dFsyNzAxXT0tMTksdnRbMjcwMl09MzMsUnQodnQsMjcwMywyNzA2LC0xOSksdnRbMjcwNl09MzMsUnQodnQsMjcwNywyNzI5LC0xOSksdnRbMjcyOV09MzMsUnQodnQsMjczMCwyNzM3LC0xOSksdnRbMjczN109MzMsUnQodnQsMjczOCwyNzQwLC0xOSksdnRbMjc0MF09MzMsUnQodnQsMjc0MSwyNzQ2LC0xOSksUnQodnQsMjc0NiwyNzQ4LDMzKSx2dFsyNzQ4XT0tODcsdnRbMjc0OV09LTE5LFJ0KHZ0LDI3NTAsMjc1OCwtODcpLHZ0WzI3NThdPTMzLFJ0KHZ0LDI3NTksMjc2MiwtODcpLHZ0WzI3NjJdPTMzLFJ0KHZ0LDI3NjMsMjc2NiwtODcpLFJ0KHZ0LDI3NjYsMjc4NCwzMyksdnRbMjc4NF09LTE5LFJ0KHZ0LDI3ODUsMjc5MCwzMyksUnQodnQsMjc5MCwyODAwLC04NyksUnQodnQsMjgwMCwyODE3LDMzKSxSdCh2dCwyODE3LDI4MjAsLTg3KSx2dFsyODIwXT0zMyxSdCh2dCwyODIxLDI4MjksLTE5KSxSdCh2dCwyODI5LDI4MzEsMzMpLFJ0KHZ0LDI4MzEsMjgzMywtMTkpLFJ0KHZ0LDI4MzMsMjgzNSwzMyksUnQodnQsMjgzNSwyODU3LC0xOSksdnRbMjg1N109MzMsUnQodnQsMjg1OCwyODY1LC0xOSksdnRbMjg2NV09MzMsUnQodnQsMjg2NiwyODY4LC0xOSksUnQodnQsMjg2OCwyODcwLDMzKSxSdCh2dCwyODcwLDI4NzQsLTE5KSxSdCh2dCwyODc0LDI4NzYsMzMpLHZ0WzI4NzZdPS04Nyx2dFsyODc3XT0tMTksUnQodnQsMjg3OCwyODg0LC04NyksUnQodnQsMjg4NCwyODg3LDMzKSxSdCh2dCwyODg3LDI4ODksLTg3KSxSdCh2dCwyODg5LDI4OTEsMzMpLFJ0KHZ0LDI4OTEsMjg5NCwtODcpLFJ0KHZ0LDI4OTQsMjkwMiwzMyksUnQodnQsMjkwMiwyOTA0LC04NyksUnQodnQsMjkwNCwyOTA4LDMzKSxSdCh2dCwyOTA4LDI5MTAsLTE5KSx2dFsyOTEwXT0zMyxSdCh2dCwyOTExLDI5MTQsLTE5KSxSdCh2dCwyOTE0LDI5MTgsMzMpLFJ0KHZ0LDI5MTgsMjkyOCwtODcpLFJ0KHZ0LDI5MjgsMjk0NiwzMyksUnQodnQsMjk0NiwyOTQ4LC04NyksdnRbMjk0OF09MzMsUnQodnQsMjk0OSwyOTU1LC0xOSksUnQodnQsMjk1NSwyOTU4LDMzKSxSdCh2dCwyOTU4LDI5NjEsLTE5KSx2dFsyOTYxXT0zMyxSdCh2dCwyOTYyLDI5NjYsLTE5KSxSdCh2dCwyOTY2LDI5NjksMzMpLFJ0KHZ0LDI5NjksMjk3MSwtMTkpLHZ0WzI5NzFdPTMzLHZ0WzI5NzJdPS0xOSx2dFsyOTczXT0zMyxSdCh2dCwyOTc0LDI5NzYsLTE5KSxSdCh2dCwyOTc2LDI5NzksMzMpLFJ0KHZ0LDI5NzksMjk4MSwtMTkpLFJ0KHZ0LDI5ODEsMjk4NCwzMyksUnQodnQsMjk4NCwyOTg3LC0xOSksUnQodnQsMjk4NywyOTkwLDMzKSxSdCh2dCwyOTkwLDI5OTgsLTE5KSx2dFsyOTk4XT0zMyxSdCh2dCwyOTk5LDMwMDIsLTE5KSxSdCh2dCwzMDAyLDMwMDYsMzMpLFJ0KHZ0LDMwMDYsMzAxMSwtODcpLFJ0KHZ0LDMwMTEsMzAxNCwzMyksUnQodnQsMzAxNCwzMDE3LC04NyksdnRbMzAxN109MzMsUnQodnQsMzAxOCwzMDIyLC04NyksUnQodnQsMzAyMiwzMDMxLDMzKSx2dFszMDMxXT0tODcsUnQodnQsMzAzMiwzMDQ3LDMzKSxSdCh2dCwzMDQ3LDMwNTYsLTg3KSxSdCh2dCwzMDU2LDMwNzMsMzMpLFJ0KHZ0LDMwNzMsMzA3NiwtODcpLHZ0WzMwNzZdPTMzLFJ0KHZ0LDMwNzcsMzA4NSwtMTkpLHZ0WzMwODVdPTMzLFJ0KHZ0LDMwODYsMzA4OSwtMTkpLHZ0WzMwODldPTMzLFJ0KHZ0LDMwOTAsMzExMywtMTkpLHZ0WzMxMTNdPTMzLFJ0KHZ0LDMxMTQsMzEyNCwtMTkpLHZ0WzMxMjRdPTMzLFJ0KHZ0LDMxMjUsMzEzMCwtMTkpLFJ0KHZ0LDMxMzAsMzEzNCwzMyksUnQodnQsMzEzNCwzMTQxLC04NyksdnRbMzE0MV09MzMsUnQodnQsMzE0MiwzMTQ1LC04NyksdnRbMzE0NV09MzMsUnQodnQsMzE0NiwzMTUwLC04NyksUnQodnQsMzE1MCwzMTU3LDMzKSxSdCh2dCwzMTU3LDMxNTksLTg3KSxSdCh2dCwzMTU5LDMxNjgsMzMpLFJ0KHZ0LDMxNjgsMzE3MCwtMTkpLFJ0KHZ0LDMxNzAsMzE3NCwzMyksUnQodnQsMzE3NCwzMTg0LC04NyksUnQodnQsMzE4NCwzMjAyLDMzKSxSdCh2dCwzMjAyLDMyMDQsLTg3KSx2dFszMjA0XT0zMyxSdCh2dCwzMjA1LDMyMTMsLTE5KSx2dFszMjEzXT0zMyxSdCh2dCwzMjE0LDMyMTcsLTE5KSx2dFszMjE3XT0zMyxSdCh2dCwzMjE4LDMyNDEsLTE5KSx2dFszMjQxXT0zMyxSdCh2dCwzMjQyLDMyNTIsLTE5KSx2dFszMjUyXT0zMyxSdCh2dCwzMjUzLDMyNTgsLTE5KSxSdCh2dCwzMjU4LDMyNjIsMzMpLFJ0KHZ0LDMyNjIsMzI2OSwtODcpLHZ0WzMyNjldPTMzLFJ0KHZ0LDMyNzAsMzI3MywtODcpLHZ0WzMyNzNdPTMzLFJ0KHZ0LDMyNzQsMzI3OCwtODcpLFJ0KHZ0LDMyNzgsMzI4NSwzMyksUnQodnQsMzI4NSwzMjg3LC04NyksUnQodnQsMzI4NywzMjk0LDMzKSx2dFszMjk0XT0tMTksdnRbMzI5NV09MzMsUnQodnQsMzI5NiwzMjk4LC0xOSksUnQodnQsMzI5OCwzMzAyLDMzKSxSdCh2dCwzMzAyLDMzMTIsLTg3KSxSdCh2dCwzMzEyLDMzMzAsMzMpLFJ0KHZ0LDMzMzAsMzMzMiwtODcpLHZ0WzMzMzJdPTMzLFJ0KHZ0LDMzMzMsMzM0MSwtMTkpLHZ0WzMzNDFdPTMzLFJ0KHZ0LDMzNDIsMzM0NSwtMTkpLHZ0WzMzNDVdPTMzLFJ0KHZ0LDMzNDYsMzM2OSwtMTkpLHZ0WzMzNjldPTMzLFJ0KHZ0LDMzNzAsMzM4NiwtMTkpLFJ0KHZ0LDMzODYsMzM5MCwzMyksUnQodnQsMzM5MCwzMzk2LC04NyksUnQodnQsMzM5NiwzMzk4LDMzKSxSdCh2dCwzMzk4LDM0MDEsLTg3KSx2dFszNDAxXT0zMyxSdCh2dCwzNDAyLDM0MDYsLTg3KSxSdCh2dCwzNDA2LDM0MTUsMzMpLHZ0WzM0MTVdPS04NyxSdCh2dCwzNDE2LDM0MjQsMzMpLFJ0KHZ0LDM0MjQsMzQyNiwtMTkpLFJ0KHZ0LDM0MjYsMzQzMCwzMyksUnQodnQsMzQzMCwzNDQwLC04NyksUnQodnQsMzQ0MCwzNTg1LDMzKSxSdCh2dCwzNTg1LDM2MzEsLTE5KSx2dFszNjMxXT0zMyx2dFszNjMyXT0tMTksdnRbMzYzM109LTg3LFJ0KHZ0LDM2MzQsMzYzNiwtMTkpLFJ0KHZ0LDM2MzYsMzY0MywtODcpLFJ0KHZ0LDM2NDMsMzY0OCwzMyksUnQodnQsMzY0OCwzNjU0LC0xOSksUnQodnQsMzY1NCwzNjYzLC04NyksdnRbMzY2M109MzMsUnQodnQsMzY2NCwzNjc0LC04NyksUnQodnQsMzY3NCwzNzEzLDMzKSxSdCh2dCwzNzEzLDM3MTUsLTE5KSx2dFszNzE1XT0zMyx2dFszNzE2XT0tMTksUnQodnQsMzcxNywzNzE5LDMzKSxSdCh2dCwzNzE5LDM3MjEsLTE5KSx2dFszNzIxXT0zMyx2dFszNzIyXT0tMTksUnQodnQsMzcyMywzNzI1LDMzKSx2dFszNzI1XT0tMTksUnQodnQsMzcyNiwzNzMyLDMzKSxSdCh2dCwzNzMyLDM3MzYsLTE5KSx2dFszNzM2XT0zMyxSdCh2dCwzNzM3LDM3NDQsLTE5KSx2dFszNzQ0XT0zMyxSdCh2dCwzNzQ1LDM3NDgsLTE5KSx2dFszNzQ4XT0zMyx2dFszNzQ5XT0tMTksdnRbMzc1MF09MzMsdnRbMzc1MV09LTE5LFJ0KHZ0LDM3NTIsMzc1NCwzMyksUnQodnQsMzc1NCwzNzU2LC0xOSksdnRbMzc1Nl09MzMsUnQodnQsMzc1NywzNzU5LC0xOSksdnRbMzc1OV09MzMsdnRbMzc2MF09LTE5LHZ0WzM3NjFdPS04NyxSdCh2dCwzNzYyLDM3NjQsLTE5KSxSdCh2dCwzNzY0LDM3NzAsLTg3KSx2dFszNzcwXT0zMyxSdCh2dCwzNzcxLDM3NzMsLTg3KSx2dFszNzczXT0tMTksUnQodnQsMzc3NCwzNzc2LDMzKSxSdCh2dCwzNzc2LDM3ODEsLTE5KSx2dFszNzgxXT0zMyx2dFszNzgyXT0tODcsdnRbMzc4M109MzMsUnQodnQsMzc4NCwzNzkwLC04NyksUnQodnQsMzc5MCwzNzkyLDMzKSxSdCh2dCwzNzkyLDM4MDIsLTg3KSxSdCh2dCwzODAyLDM4NjQsMzMpLFJ0KHZ0LDM4NjQsMzg2NiwtODcpLFJ0KHZ0LDM4NjYsMzg3MiwzMyksUnQodnQsMzg3MiwzODgyLC04NyksUnQodnQsMzg4MiwzODkzLDMzKSx2dFszODkzXT0tODcsdnRbMzg5NF09MzMsdnRbMzg5NV09LTg3LHZ0WzM4OTZdPTMzLHZ0WzM4OTddPS04NyxSdCh2dCwzODk4LDM5MDIsMzMpLFJ0KHZ0LDM5MDIsMzkwNCwtODcpLFJ0KHZ0LDM5MDQsMzkxMiwtMTkpLHZ0WzM5MTJdPTMzLFJ0KHZ0LDM5MTMsMzk0NiwtMTkpLFJ0KHZ0LDM5NDYsMzk1MywzMyksUnQodnQsMzk1MywzOTczLC04NyksdnRbMzk3M109MzMsUnQodnQsMzk3NCwzOTgwLC04NyksUnQodnQsMzk4MCwzOTg0LDMzKSxSdCh2dCwzOTg0LDM5OTAsLTg3KSx2dFszOTkwXT0zMyx2dFszOTkxXT0tODcsdnRbMzk5Ml09MzMsUnQodnQsMzk5Myw0MDE0LC04NyksUnQodnQsNDAxNCw0MDE3LDMzKSxSdCh2dCw0MDE3LDQwMjQsLTg3KSx2dFs0MDI0XT0zMyx2dFs0MDI1XT0tODcsUnQodnQsNDAyNiw0MjU2LDMzKSxSdCh2dCw0MjU2LDQyOTQsLTE5KSxSdCh2dCw0Mjk0LDQzMDQsMzMpLFJ0KHZ0LDQzMDQsNDM0MywtMTkpLFJ0KHZ0LDQzNDMsNDM1MiwzMyksdnRbNDM1Ml09LTE5LHZ0WzQzNTNdPTMzLFJ0KHZ0LDQzNTQsNDM1NiwtMTkpLHZ0WzQzNTZdPTMzLFJ0KHZ0LDQzNTcsNDM2MCwtMTkpLHZ0WzQzNjBdPTMzLHZ0WzQzNjFdPS0xOSx2dFs0MzYyXT0zMyxSdCh2dCw0MzYzLDQzNjUsLTE5KSx2dFs0MzY1XT0zMyxSdCh2dCw0MzY2LDQzNzEsLTE5KSxSdCh2dCw0MzcxLDQ0MTIsMzMpLHZ0WzQ0MTJdPS0xOSx2dFs0NDEzXT0zMyx2dFs0NDE0XT0tMTksdnRbNDQxNV09MzMsdnRbNDQxNl09LTE5LFJ0KHZ0LDQ0MTcsNDQyOCwzMyksdnRbNDQyOF09LTE5LHZ0WzQ0MjldPTMzLHZ0WzQ0MzBdPS0xOSx2dFs0NDMxXT0zMyx2dFs0NDMyXT0tMTksUnQodnQsNDQzMyw0NDM2LDMzKSxSdCh2dCw0NDM2LDQ0MzgsLTE5KSxSdCh2dCw0NDM4LDQ0NDEsMzMpLHZ0WzQ0NDFdPS0xOSxSdCh2dCw0NDQyLDQ0NDcsMzMpLFJ0KHZ0LDQ0NDcsNDQ1MCwtMTkpLHZ0WzQ0NTBdPTMzLHZ0WzQ0NTFdPS0xOSx2dFs0NDUyXT0zMyx2dFs0NDUzXT0tMTksdnRbNDQ1NF09MzMsdnRbNDQ1NV09LTE5LHZ0WzQ0NTZdPTMzLHZ0WzQ0NTddPS0xOSxSdCh2dCw0NDU4LDQ0NjEsMzMpLFJ0KHZ0LDQ0NjEsNDQ2MywtMTkpLFJ0KHZ0LDQ0NjMsNDQ2NiwzMyksUnQodnQsNDQ2Niw0NDY4LC0xOSksdnRbNDQ2OF09MzMsdnRbNDQ2OV09LTE5LFJ0KHZ0LDQ0NzAsNDUxMCwzMyksdnRbNDUxMF09LTE5LFJ0KHZ0LDQ1MTEsNDUyMCwzMyksdnRbNDUyMF09LTE5LFJ0KHZ0LDQ1MjEsNDUyMywzMyksdnRbNDUyM109LTE5LFJ0KHZ0LDQ1MjQsNDUyNiwzMyksUnQodnQsNDUyNiw0NTI4LC0xOSksUnQodnQsNDUyOCw0NTM1LDMzKSxSdCh2dCw0NTM1LDQ1MzcsLTE5KSx2dFs0NTM3XT0zMyx2dFs0NTM4XT0tMTksdnRbNDUzOV09MzMsUnQodnQsNDU0MCw0NTQ3LC0xOSksUnQodnQsNDU0Nyw0NTg3LDMzKSx2dFs0NTg3XT0tMTksUnQodnQsNDU4OCw0NTkyLDMzKSx2dFs0NTkyXT0tMTksUnQodnQsNDU5Myw0NjAxLDMzKSx2dFs0NjAxXT0tMTksUnQodnQsNDYwMiw3NjgwLDMzKSxSdCh2dCw3NjgwLDc4MzYsLTE5KSxSdCh2dCw3ODM2LDc4NDAsMzMpLFJ0KHZ0LDc4NDAsNzkzMCwtMTkpLFJ0KHZ0LDc5MzAsNzkzNiwzMyksUnQodnQsNzkzNiw3OTU4LC0xOSksUnQodnQsNzk1OCw3OTYwLDMzKSxSdCh2dCw3OTYwLDc5NjYsLTE5KSxSdCh2dCw3OTY2LDc5NjgsMzMpLFJ0KHZ0LDc5NjgsODAwNiwtMTkpLFJ0KHZ0LDgwMDYsODAwOCwzMyksUnQodnQsODAwOCw4MDE0LC0xOSksUnQodnQsODAxNCw4MDE2LDMzKSxSdCh2dCw4MDE2LDgwMjQsLTE5KSx2dFs4MDI0XT0zMyx2dFs4MDI1XT0tMTksdnRbODAyNl09MzMsdnRbODAyN109LTE5LHZ0WzgwMjhdPTMzLHZ0WzgwMjldPS0xOSx2dFs4MDMwXT0zMyxSdCh2dCw4MDMxLDgwNjIsLTE5KSxSdCh2dCw4MDYyLDgwNjQsMzMpLFJ0KHZ0LDgwNjQsODExNywtMTkpLHZ0WzgxMTddPTMzLFJ0KHZ0LDgxMTgsODEyNSwtMTkpLHZ0WzgxMjVdPTMzLHZ0WzgxMjZdPS0xOSxSdCh2dCw4MTI3LDgxMzAsMzMpLFJ0KHZ0LDgxMzAsODEzMywtMTkpLHZ0WzgxMzNdPTMzLFJ0KHZ0LDgxMzQsODE0MSwtMTkpLFJ0KHZ0LDgxNDEsODE0NCwzMyksUnQodnQsODE0NCw4MTQ4LC0xOSksUnQodnQsODE0OCw4MTUwLDMzKSxSdCh2dCw4MTUwLDgxNTYsLTE5KSxSdCh2dCw4MTU2LDgxNjAsMzMpLFJ0KHZ0LDgxNjAsODE3MywtMTkpLFJ0KHZ0LDgxNzMsODE3OCwzMyksUnQodnQsODE3OCw4MTgxLC0xOSksdnRbODE4MV09MzMsUnQodnQsODE4Miw4MTg5LC0xOSksUnQodnQsODE4OSw4NDAwLDMzKSxSdCh2dCw4NDAwLDg0MTMsLTg3KSxSdCh2dCw4NDEzLDg0MTcsMzMpLHZ0Wzg0MTddPS04NyxSdCh2dCw4NDE4LDg0ODYsMzMpLHZ0Wzg0ODZdPS0xOSxSdCh2dCw4NDg3LDg0OTAsMzMpLFJ0KHZ0LDg0OTAsODQ5MiwtMTkpLFJ0KHZ0LDg0OTIsODQ5NCwzMyksdnRbODQ5NF09LTE5LFJ0KHZ0LDg0OTUsODU3NiwzMyksUnQodnQsODU3Niw4NTc5LC0xOSksUnQodnQsODU3OSwxMjI5MywzMyksdnRbMTIyOTNdPS04Nyx2dFsxMjI5NF09MzMsdnRbMTIyOTVdPS0xOSxSdCh2dCwxMjI5NiwxMjMyMSwzMyksUnQodnQsMTIzMjEsMTIzMzAsLTE5KSxSdCh2dCwxMjMzMCwxMjMzNiwtODcpLHZ0WzEyMzM2XT0zMyxSdCh2dCwxMjMzNywxMjM0MiwtODcpLFJ0KHZ0LDEyMzQyLDEyMzUzLDMzKSxSdCh2dCwxMjM1MywxMjQzNywtMTkpLFJ0KHZ0LDEyNDM3LDEyNDQxLDMzKSxSdCh2dCwxMjQ0MSwxMjQ0MywtODcpLFJ0KHZ0LDEyNDQzLDEyNDQ1LDMzKSxSdCh2dCwxMjQ0NSwxMjQ0NywtODcpLFJ0KHZ0LDEyNDQ3LDEyNDQ5LDMzKSxSdCh2dCwxMjQ0OSwxMjUzOSwtMTkpLHZ0WzEyNTM5XT0zMyxSdCh2dCwxMjU0MCwxMjU0MywtODcpLFJ0KHZ0LDEyNTQzLDEyNTQ5LDMzKSxSdCh2dCwxMjU0OSwxMjU4OSwtMTkpLFJ0KHZ0LDEyNTg5LDE5OTY4LDMzKSxSdCh2dCwxOTk2OCw0MDg3MCwtMTkpLFJ0KHZ0LDQwODcwLDQ0MDMyLDMzKSxSdCh2dCw0NDAzMiw1NTIwNCwtMTkpLFJ0KHZ0LDU1MjA0LE9ELDMzKSxSdCh2dCw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gVTVuKHQpe3ZhciBlLG4scixzLG8saCxkO3QuaGJ8fCh0LmhiPSEwLFhjKHQsImVjb3JlIiksc3oodCwiZWNvcmUiKSxheih0LFBoKSxNSSh0LmZiLCJFIiksTUkodC5MLCJUIiksTUkodC5QLCJLIiksTUkodC5QLCJWIiksTUkodC5jYiwiRSIpLE1yKFNvKHQuYiksdC5iYiksTXIoU28odC5hKSx0LlEpLE1yKFNvKHQubyksdC5wKSxNcihTbyh0LnApLHQuUiksTXIoU28odC5xKSx0LnApLE1yKFNvKHQudiksdC5xKSxNcihTbyh0LncpLHQuUiksTXIoU28odC5CKSx0LlEpLE1yKFNvKHQuUiksdC5RKSxNcihTbyh0LlQpLHQuZWIpLE1yKFNvKHQuVSksdC5SKSxNcihTbyh0LlYpLHQuZWIpLE1yKFNvKHQuVyksdC5iYiksTXIoU28odC5iYiksdC5lYiksTXIoU28odC5lYiksdC5SKSxNcihTbyh0LmRiKSx0LlIpLHJjKHQuYixaeSxnMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5iKSwwKSwzNCksdC5lLCJpRCIsbnVsbCwwLDEsWnksITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5iKSwxKSwxOCksdC5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsWnksITAsITAsITEsITEsITAsITEsITApLHJjKHQuYSxacixoMGUsITEsITEsITApLGxzKHUoU3QoV3QodC5hKSwwKSwzNCksdC5fLGpjdCxudWxsLDAsMSxaciwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LmEpLDEpLDE4KSx0LmFiLG51bGwsImRldGFpbHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5hKSwyKSwxOCksdC5RLHUoU3QoV3QodC5RKSwwKSwxOCksImVNb2RlbEVsZW1lbnQiLDAsMSxaciwhMCwhMSwhMCwhMSwhMSwhMSwhMSksRmkodShTdChXdCh0LmEpLDMpLDE4KSx0LlMsbnVsbCwiY29udGVudHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5hKSw0KSwxOCksdC5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsWnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQubyxHaCwiRUNsYXNzIiwhMSwhMSwhMCksbHModShTdChXdCh0Lm8pLDApLDM0KSx0LmUsImFic3RyYWN0IixudWxsLDAsMSxHaCwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0Lm8pLDEpLDM0KSx0LmUsImludGVyZmFjZSIsbnVsbCwwLDEsR2gsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5vKSwyKSwxOCksdC5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLEdoLCExLCExLCEwLCExLCEwLCEwLCExKSxGaSh1KFN0KFd0KHQubyksMyksMTgpLHQuVCx1KFN0KFd0KHQuVCksMCksMTgpLCJlT3BlcmF0aW9ucyIsMCwtMSxHaCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0Lm8pLDQpLDE4KSx0LmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw1KSwxOCksdC5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxGaSh1KFN0KFd0KHQubyksNiksMTgpLHQuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxHaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksRmkodShTdChXdCh0Lm8pLDcpLDE4KSx0LmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw4KSwxOCksdC5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSw5KSwxOCksdC5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxGaSh1KFN0KFd0KHQubyksMTApLDE4KSx0LmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsR2gsITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5vKSwxMSksMTgpLHQubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxHaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksRmkodShTdChXdCh0Lm8pLDEyKSwxOCksdC5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLEdoLCEwLCEwLCExLCExLCExLCExLCEwKSxGaSh1KFN0KFd0KHQubyksMTMpLDE4KSx0LmJiLHUoU3QoV3QodC5iYiksNyksMTgpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLEdoLCExLCExLCEwLCEwLCExLCExLCExKSxGaSh1KFN0KFd0KHQubyksMTQpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLEdoLCExLCExLCEwLCEwLCExLCEwLCExKSxGaSh1KFN0KFd0KHQubyksMTUpLDE4KSx0LkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLEdoLCEwLCEwLCExLCExLCEwLCExLCEwKSxkPXBvKHUoU3QoTWkodC5vKSwwKSw1OSksdC5lLCJpc1N1cGVyVHlwZU9mIiksQ28oZCx0Lm8sInNvbWVDbGFzcyIpLHBvKHUoU3QoTWkodC5vKSwxKSw1OSksdC5JLCJnZXRGZWF0dXJlQ291bnQiKSxkPXBvKHUoU3QoTWkodC5vKSwyKSw1OSksdC5iYixfMGUpLENvKGQsdC5JLCJmZWF0dXJlSUQiKSxkPXBvKHUoU3QoTWkodC5vKSwzKSw1OSksdC5JLFMwZSksQ28oZCx0LmJiLHJTKSxkPXBvKHUoU3QoTWkodC5vKSw0KSw1OSksdC5iYixfMGUpLENvKGQsdC5fLCJmZWF0dXJlTmFtZSIpLHBvKHUoU3QoTWkodC5vKSw1KSw1OSksdC5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGQ9cG8odShTdChNaSh0Lm8pLDYpLDU5KSx0LlQsImdldEVPcGVyYXRpb24iKSxDbyhkLHQuSSwib3BlcmF0aW9uSUQiKSxkPXBvKHUoU3QoTWkodC5vKSw3KSw1OSksdC5JLEEwZSksQ28oZCx0LlQsUDh0KSxkPXBvKHUoU3QoTWkodC5vKSw4KSw1OSksdC5ULCJnZXRPdmVycmlkZSIpLENvKGQsdC5ULFA4dCksZD1wbyh1KFN0KE1pKHQubyksOSksNTkpLHQuSCwiZ2V0RmVhdHVyZVR5cGUiKSxDbyhkLHQuYmIsclMpLHJjKHQucCxpMSxwMGUsITAsITEsITApLGxzKHUoU3QoV3QodC5wKSwwKSwzNCksdC5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsaTEsITEsITAsITAsITAsITAsITEpLGU9STAodC5MKSxuPVd3dCgpLE1yKCghZS5kJiYoZS5kPW5ldyBTcyhobyxlLDEpKSxlLmQpLG4pLEhvZSh1KFN0KFd0KHQucCksMSksMzQpLGUsImluc3RhbmNlQ2xhc3MiLGkxLCEwLCEwLCExLCEwKSxscyh1KFN0KFd0KHQucCksMiksMzQpLHQuTSxMMGUsbnVsbCwwLDEsaTEsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5wKSwzKSwzNCksdC5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxpMSwhMSwhMCwhMCwhMCwhMCwhMSksRmkodShTdChXdCh0LnApLDQpLDE4KSx0LlUsdShTdChXdCh0LlUpLDMpLDE4KSwiZVBhY2thZ2UiLDAsMSxpMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksRmkodShTdChXdCh0LnApLDUpLDE4KSx0LmRiLG51bGwsTTBlLDAsLTEsaTEsITEsITEsITAsITAsITAsITEsITEpLGQ9cG8odShTdChNaSh0LnApLDApLDU5KSx0LmUsSTBlKSxDbyhkLHQuTSxDRCkscG8odShTdChNaSh0LnApLDEpLDU5KSx0LkksImdldENsYXNzaWZpZXJJRCIpLHJjKHQucSxDZnQsIkVEYXRhVHlwZSIsITEsITEsITApLGxzKHUoU3QoV3QodC5xKSwwKSwzNCksdC5lLCJzZXJpYWxpemFibGUiLHFFLDAsMSxDZnQsITEsITEsITAsITEsITAsITEpLHJjKHQudixpVSwiRUVudW0iLCExLCExLCEwKSxGaSh1KFN0KFd0KHQudiksMCksMTgpLHQudyx1KFN0KFd0KHQudyksMyksMTgpLCJlTGl0ZXJhbHMiLDAsLTEsaVUsITEsITEsITAsITAsITEsITEsITEpLGQ9cG8odShTdChNaSh0LnYpLDApLDU5KSx0LncsRDBlKSxDbyhkLHQuXyxvaSksZD1wbyh1KFN0KE1pKHQudiksMSksNTkpLHQudyxEMGUpLENvKGQsdC5JLFlfKSxkPXBvKHUoU3QoTWkodC52KSwyKSw1OSksdC53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxDbyhkLHQuXywibGl0ZXJhbCIpLHJjKHQudyxlZyxiMGUsITEsITEsITApLGxzKHUoU3QoV3QodC53KSwwKSwzNCksdC5JLFlfLG51bGwsMCwxLGVnLCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQudyksMSksMzQpLHQuQSwiaW5zdGFuY2UiLG51bGwsMCwxLGVnLCEwLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQudyksMiksMzQpLHQuXywibGl0ZXJhbCIsbnVsbCwwLDEsZWcsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC53KSwzKSwxOCksdC52LHUoU3QoV3QodC52KSwwKSwxOCksImVFbnVtIiwwLDEsZWcsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuQixuQSwiRUZhY3RvcnkiLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuQiksMCksMTgpLHQuVSx1KFN0KFd0KHQuVSksMiksMTgpLCJlUGFja2FnZSIsMSwxLG5BLCEwLCExLCEwLCExLCExLCExLCExKSxkPXBvKHUoU3QoTWkodC5CKSwwKSw1OSksdC5TLCJjcmVhdGUiKSxDbyhkLHQubywiZUNsYXNzIiksZD1wbyh1KFN0KE1pKHQuQiksMSksNTkpLHQuTSwiY3JlYXRlRnJvbVN0cmluZyIpLENvKGQsdC5xLCJlRGF0YVR5cGUiKSxDbyhkLHQuXywibGl0ZXJhbFZhbHVlIiksZD1wbyh1KFN0KE1pKHQuQiksMiksNTkpLHQuXywiY29udmVydFRvU3RyaW5nIiksQ28oZCx0LnEsImVEYXRhVHlwZSIpLENvKGQsdC5NLCJpbnN0YW5jZVZhbHVlIikscmModC5RLG9OLGJkZSwhMCwhMSwhMCksRmkodShTdChXdCh0LlEpLDApLDE4KSx0LmEsdShTdChXdCh0LmEpLDIpLDE4KSwiZUFubm90YXRpb25zIiwwLC0xLG9OLCExLCExLCEwLCEwLCExLCExLCExKSxkPXBvKHUoU3QoTWkodC5RKSwwKSw1OSksdC5hLCJnZXRFQW5ub3RhdGlvbiIpLENvKGQsdC5fLGpjdCkscmModC5SLG1mdCx2ZGUsITAsITEsITApLGxzKHUoU3QoV3QodC5SKSwwKSwzNCksdC5fLG9pLG51bGwsMCwxLG1mdCwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5TLGtiLCJFT2JqZWN0IiwhMSwhMSwhMCkscG8odShTdChNaSh0LlMpLDApLDU5KSx0Lm8sImVDbGFzcyIpLHBvKHUoU3QoTWkodC5TKSwxKSw1OSksdC5lLCJlSXNQcm94eSIpLHBvKHUoU3QoTWkodC5TKSwyKSw1OSksdC5YLCJlUmVzb3VyY2UiKSxwbyh1KFN0KE1pKHQuUyksMyksNTkpLHQuUywiZUNvbnRhaW5lciIpLHBvKHUoU3QoTWkodC5TKSw0KSw1OSksdC5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIikscG8odShTdChNaSh0LlMpLDUpLDU5KSx0LlcsImVDb250YWlubWVudEZlYXR1cmUiKSxkPXBvKHUoU3QoTWkodC5TKSw2KSw1OSksbnVsbCwiZUNvbnRlbnRzIiksZT1JMCh0LmZiKSxuPUkwKHQuUyksTXIoKCFlLmQmJihlLmQ9bmV3IFNzKGhvLGUsMSkpLGUuZCksbikscz1PMShkLGUsbnVsbCkscyYmcy5GaSgpLGQ9cG8odShTdChNaSh0LlMpLDcpLDU5KSxudWxsLCJlQWxsQ29udGVudHMiKSxlPUkwKHQuY2IpLG49STAodC5TKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxvPU8xKGQsZSxudWxsKSxvJiZvLkZpKCksZD1wbyh1KFN0KE1pKHQuUyksOCksNTkpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSxlPUkwKHQuZmIpLG49STAodC5TKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxoPU8xKGQsZSxudWxsKSxoJiZoLkZpKCksZD1wbyh1KFN0KE1pKHQuUyksOSksNTkpLHQuTSwiZUdldCIpLENvKGQsdC5iYixyUyksZD1wbyh1KFN0KE1pKHQuUyksMTApLDU5KSx0Lk0sImVHZXQiKSxDbyhkLHQuYmIsclMpLENvKGQsdC5lLCJyZXNvbHZlIiksZD1wbyh1KFN0KE1pKHQuUyksMTEpLDU5KSxudWxsLCJlU2V0IiksQ28oZCx0LmJiLHJTKSxDbyhkLHQuTSwibmV3VmFsdWUiKSxkPXBvKHUoU3QoTWkodC5TKSwxMiksNTkpLHQuZSwiZUlzU2V0IiksQ28oZCx0LmJiLHJTKSxkPXBvKHUoU3QoTWkodC5TKSwxMyksNTkpLG51bGwsImVVbnNldCIpLENvKGQsdC5iYixyUyksZD1wbyh1KFN0KE1pKHQuUyksMTQpLDU5KSx0Lk0sImVJbnZva2UiKSxDbyhkLHQuVCxQOHQpLGU9STAodC5mYiksbj1Xd3QoKSxNcigoIWUuZCYmKGUuZD1uZXcgU3MoaG8sZSwxKSksZS5kKSxuKSxYeihkLGUsImFyZ3VtZW50cyIpLFZlbihkLHQuSykscmModC5ULFZoLHcwZSwhMSwhMSwhMCksRmkodShTdChXdCh0LlQpLDApLDE4KSx0Lm8sdShTdChXdCh0Lm8pLDMpLDE4KSxPMGUsMCwxLFZoLCEwLCExLCExLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuVCksMSksMTgpLHQuZGIsbnVsbCxNMGUsMCwtMSxWaCwhMSwhMSwhMCwhMCwhMCwhMSwhMSksRmkodShTdChXdCh0LlQpLDIpLDE4KSx0LlYsdShTdChXdCh0LlYpLDApLDE4KSwiZVBhcmFtZXRlcnMiLDAsLTEsVmgsITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5UKSwzKSwxOCksdC5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFZoLCExLCExLCEwLCExLCEwLCEwLCExKSxGaSh1KFN0KFd0KHQuVCksNCksMTgpLHQuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsVmgsITEsITEsITAsITAsITEsITAsITEpLHBvKHUoU3QoTWkodC5UKSwwKSw1OSksdC5JLEEwZSksZD1wbyh1KFN0KE1pKHQuVCksMSksNTkpLHQuZSwiaXNPdmVycmlkZU9mIiksQ28oZCx0LlQsInNvbWVPcGVyYXRpb24iKSxyYyh0LlUscjEsIkVQYWNrYWdlIiwhMSwhMSwhMCksbHModShTdChXdCh0LlUpLDApLDM0KSx0Ll8sIm5zVVJJIixudWxsLDAsMSxyMSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LlUpLDEpLDM0KSx0Ll8sIm5zUHJlZml4IixudWxsLDAsMSxyMSwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LlUpLDIpLDE4KSx0LkIsdShTdChXdCh0LkIpLDApLDE4KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLHIxLCEwLCExLCEwLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuVSksMyksMTgpLHQucCx1KFN0KFd0KHQucCksNCksMTgpLCJlQ2xhc3NpZmllcnMiLDAsLTEscjEsITEsITEsITAsITAsITAsITEsITEpLEZpKHUoU3QoV3QodC5VKSw0KSwxOCksdC5VLHUoU3QoV3QodC5VKSw1KSwxOCksImVTdWJwYWNrYWdlcyIsMCwtMSxyMSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksRmkodShTdChXdCh0LlUpLDUpLDE4KSx0LlUsdShTdChXdCh0LlUpLDQpLDE4KSwiZVN1cGVyUGFja2FnZSIsMCwxLHIxLCEwLCExLCExLCExLCEwLCExLCExKSxkPXBvKHUoU3QoTWkodC5VKSwwKSw1OSksdC5wLCJnZXRFQ2xhc3NpZmllciIpLENvKGQsdC5fLG9pKSxyYyh0LlYsencsbTBlLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuViksMCksMTgpLHQuVCx1KFN0KFd0KHQuVCksMiksMTgpLCJlT3BlcmF0aW9uIiwwLDEsencsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuVyxKeSx5MGUsITEsITEsITApLGxzKHUoU3QoV3QodC5XKSwwKSwzNCksdC5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsSnksITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5XKSwxKSwzNCksdC5lLCJjb250YWluZXIiLG51bGwsMCwxLEp5LCEwLCEwLCExLCExLCEwLCEwKSxscyh1KFN0KFd0KHQuVyksMiksMzQpLHQuZSwicmVzb2x2ZVByb3hpZXMiLHFFLDAsMSxKeSwhMSwhMSwhMCwhMSwhMCwhMSksRmkodShTdChXdCh0LlcpLDMpLDE4KSx0LlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsSnksITEsITEsITAsITEsITAsITEsITEpLEZpKHUoU3QoV3QodC5XKSw0KSwxOCksdC5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsSnksITAsITAsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5XKSw1KSwxOCksdC5iLG51bGwsImVLZXlzIiwwLC0xLEp5LCExLCExLCEwLCExLCEwLCExLCExKSxyYyh0LmJiLEF1LGQwZSwhMCwhMSwhMCksbHModShTdChXdCh0LmJiKSwwKSwzNCksdC5lLCJjaGFuZ2VhYmxlIixxRSwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksMSksMzQpLHQuZSwidm9sYXRpbGUiLG51bGwsMCwxLEF1LCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQuYmIpLDIpLDM0KSx0LmUsInRyYW5zaWVudCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksMyksMzQpLHQuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksNCksMzQpLHQuTSxMMGUsbnVsbCwwLDEsQXUsITAsITAsITEsITEsITAsITApLGxzKHUoU3QoV3QodC5iYiksNSksMzQpLHQuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5iYiksNiksMzQpLHQuZSwiZGVyaXZlZCIsbnVsbCwwLDEsQXUsITEsITEsITAsITEsITAsITEpLEZpKHUoU3QoV3QodC5iYiksNyksMTgpLHQubyx1KFN0KFd0KHQubyksMTMpLDE4KSxPMGUsMCwxLEF1LCEwLCExLCExLCExLCExLCExLCExKSxwbyh1KFN0KE1pKHQuYmIpLDApLDU5KSx0LkksUzBlKSxkPXBvKHUoU3QoTWkodC5iYiksMSksNTkpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksZT1JMCh0LkwpLG49V3d0KCksTXIoKCFlLmQmJihlLmQ9bmV3IFNzKGhvLGUsMSkpLGUuZCksbikscj1PMShkLGUsbnVsbCksciYmci5GaSgpLHJjKHQuZWIsUXksZjBlLCEwLCExLCEwKSxscyh1KFN0KFd0KHQuZWIpLDApLDM0KSx0LmUsIm9yZGVyZWQiLHFFLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwxKSwzNCksdC5lLCJ1bmlxdWUiLHFFLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwyKSwzNCksdC5JLCJsb3dlckJvdW5kIixudWxsLDAsMSxReSwhMSwhMSwhMCwhMSwhMCwhMSksbHModShTdChXdCh0LmViKSwzKSwzNCksdC5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLFF5LCExLCExLCEwLCExLCEwLCExKSxscyh1KFN0KFd0KHQuZWIpLDQpLDM0KSx0LmUsIm1hbnkiLG51bGwsMCwxLFF5LCEwLCEwLCExLCExLCEwLCEwKSxscyh1KFN0KFd0KHQuZWIpLDUpLDM0KSx0LmUsInJlcXVpcmVkIixudWxsLDAsMSxReSwhMCwhMCwhMSwhMSwhMCwhMCksRmkodShTdChXdCh0LmViKSw2KSwxOCksdC5wLG51bGwsImVUeXBlIiwwLDEsUXksITEsITAsITAsITEsITAsITAsITEpLEZpKHUoU3QoV3QodC5lYiksNyksMTgpLHQuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSxReSwhMSwhMCwhMCwhMCwhMSwhMCwhMSkscmModC5hYixNMiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxscyh1KFN0KFd0KHQuYWIpLDApLDM0KSx0Ll8sImtleSIsbnVsbCwwLDEsTTIsITEsITEsITAsITEsITAsITEpLGxzKHUoU3QoV3QodC5hYiksMSksMzQpLHQuXyxZXyxudWxsLDAsMSxNMiwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5ILGhvLHYwZSwhMSwhMSwhMCksRmkodShTdChXdCh0LkgpLDApLDE4KSx0LkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxobywhMSwhMSwhMCwhMCwhMSwhMSwhMSksRmkodShTdChXdCh0LkgpLDEpLDE4KSx0LkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsaG8sITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5IKSwyKSwxOCksdC5wLG51bGwsImVSYXdUeXBlIiwxLDEsaG8sITAsITEsITEsITEsITAsITEsITApLEZpKHUoU3QoV3QodC5IKSwzKSwxOCksdC5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsaG8sITEsITEsITAsITAsITEsITEsITEpLEZpKHUoU3QoV3QodC5IKSw0KSwxOCksdC5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLGhvLCExLCExLCEwLCExLCExLCExLCExKSxGaSh1KFN0KFd0KHQuSCksNSksMTgpLHQucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLGhvLCExLCExLCEwLCExLCEwLCExLCExKSxkPXBvKHUoU3QoTWkodC5IKSwwKSw1OSksdC5lLEkwZSksQ28oZCx0Lk0sQ0QpLHJjKHQuZGIsbHUseDBlLCExLCExLCEwKSxGaSh1KFN0KFd0KHQuZGIpLDApLDE4KSx0LkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxsdSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksc2kodC5jLEN1dCwiRUJpZ0RlY2ltYWwiLCEwKSxzaSh0LmQsQjQsIkVCaWdJbnRlZ2VyIiwhMCksc2kodC5lLGRsLCJFQm9vbGVhbiIsITApLHNpKHQuZixCcywiRUJvb2xlYW5PYmplY3QiLCEwKSxzaSh0LmksSHUsIkVCeXRlIiwhMCksc2kodC5nLG90KEh1LDEpLCJFQnl0ZUFycmF5IiwhMCksc2kodC5qLEU2LCJFQnl0ZU9iamVjdCIsITApLHNpKHQuayxtaCwiRUNoYXIiLCEwKSxzaSh0Lm4sYVMsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxzaSh0LnIsSEgsIkVEYXRlIiwhMCksc2kodC5zLFNMdCwiRURpYWdub3N0aWNDaGFpbiIsITEpLHNpKHQudCxpYSwiRURvdWJsZSIsITApLHNpKHQudSxjYSwiRURvdWJsZU9iamVjdCIsITApLHNpKHQuZmIscUF0LCJFRUxpc3QiLCExKSxzaSh0LkEsVkF0LCJFRW51bWVyYXRvciIsITEpLHNpKHQuQyxnTHQsIkVGZWF0dXJlTWFwIiwhMSksc2kodC5ELHNVLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksc2kodC5GLHIzLCJFRmxvYXQiLCEwKSxzaSh0LkcsWEUsIkVGbG9hdE9iamVjdCIsITApLHNpKHQuSSxUciwiRUludCIsITApLHNpKHQuSixqYSwiRUludGVnZXJPYmplY3QiLCEwKSxzaSh0LkwsVTh0LCJFSmF2YUNsYXNzIiwhMCksc2kodC5NLFhuLCJFSmF2YU9iamVjdCIsITApLHNpKHQuTixMYiwiRUxvbmciLCEwKSxzaSh0Lk8sVHcsIkVMb25nT2JqZWN0IiwhMCksc2kodC5QLFc4dCwiRU1hcCIsITEpLHNpKHQuWCxsTHQsIkVSZXNvdXJjZSIsITEpLHNpKHQuWSxBTHQsIkVSZXNvdXJjZVNldCIsITEpLHNpKHQuWixmNSwiRVNob3J0IiwhMCksc2kodC4kLEN3LCJFU2hvcnRPYmplY3QiLCEwKSxzaSh0Ll8sQWUsIkVTdHJpbmciLCEwKSxzaSh0LmNiLEdBdCwiRVRyZWVJdGVyYXRvciIsITEpLHNpKHQuSyxMTHQsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSkscXl0KHQsUGgpKX12YXIgQ0Q9Im9iamVjdCIsdTY9ImJvb2xlYW4iLEx4dD0ibnVtYmVyIixPYXQ9InN0cmluZyIsTmF0PSJmdW5jdGlvbiIsdmk9MjE0NzQ4MzY0NyxYbz0iamF2YS5sYW5nIixfRD17MzoxfSxTRD0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsS2E9IiwgIixIaGU9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLEllPXszOjEsNDoxLDU6MX0sR2hlPSJuZWdhdGl2ZSBzaXplOiAiLFZoZT0iT3B0aW9uYWwub2YoIixUdT0ibnVsbCIsU0U9ezE5ODoxLDQ3OjF9LFllPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0IixBRT17MTk4OjEsNDc6MSwxMjU6MX0seTI9ezIyNDoxLDM6MX0scmE9ezQ3OjF9LHByPSJqYXZhLnV0aWwiLGJ3PXs4MzoxfSx3eT17MjA6MSwyODoxLDE0OjF9LE4xPTE5NjUsanU9ezIwOjEsMjg6MSwxNDoxLDIxOjF9LFVoZT17ODM6MSwxNzE6MSwxNjE6MX0sV2hlPXsyMDoxLDI4OjEsMTQ6MSwyMToxLDg0OjF9LE14dD17MjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxfSxKZD17NDc6MSwxMjU6MX0sTXE9ezM0NToxLDQyOjF9LEtoZT0iQWJzdHJhY3RNYXBFbnRyeSIsWWhlPSJleHBlY3RlZFZhbHVlc1BlcktleSIsdGU9ezM6MSw2OjEsNDoxLDU6MX0sYmQ9MTYzODQsTWg9ezE2NDoxfSxVbj17Mzg6MX0sSXE9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LEFEPXsxOTY6MX0sUGF0PXsyNDU6MSwzOjEsMzU6MX0sWGhlPSJyYW5nZSB1bmJvdW5kZWQgb24gdGhpcyBzaWRlIix0MD17MjA6MX0sUWhlPXsyMDoxLDE0OjF9LEl4dD17MzoxLDIwOjEsMjg6MSwxNDoxfSxTXz17MTUyOjEsMzoxLDIwOjEsMjg6MSwxNDoxLDE1OjEsNTQ6MX0sRHE9ezM6MSw0OjEsNToxLDE2NToxfSxMRT17MzoxLDgzOjF9LEZhdD17MjA6MSwxNDoxLDIxOjF9LE1FPXszOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0sWmhlPXsyMDoxLDE0OjEsMjE6MSw4NDoxfSxlMD00NjE4NDU5MDcsbjA9LTg2MjA0ODk0MyxMRD17MzoxLDY6MSw0OjEsNToxLDE2NToxfSxKaGU9ImV4cGVjdGVkU2l6ZSIsQV89MTA3Mzc0MTgyNCxteT0iaW5pdGlhbEFycmF5U2l6ZSIsYWU9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LElFPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LEJhdD0iYXJyYXlTaXplIix0ZmU9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSx1aT17NDU6MX0sT3E9ezM2NToxfSxlYj0xZS00LF9hPS0yMTQ3NDgzNjQ4LGVmZT0iX19ub2luaXRfXyIsVTA9ezM6MSwxMDI6MSw2MDoxLDc4OjF9LE1EPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixEeHQ9IlN0cmluZyIsT3h0PSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsUmF0PSJhbm9ueW1vdXMiLGphdD0iZm5TdGFjayIsTnh0PSJVbmtub3duIix2ZD17MTk1OjEsMzoxLDQ6MX0sJGc9MWUzLG1zPTY1NTM1LCRhdD0iSmFudWFyeSIsemF0PSJGZWJydWFyeSIscWF0PSJNYXJjaCIsSGF0PSJBcHJpbCIsbDY9Ik1heSIsR2F0PSJKdW5lIixWYXQ9Ikp1bHkiLFVhdD0iQXVndXN0IixXYXQ9IlNlcHRlbWJlciIsS2F0PSJPY3RvYmVyIixZYXQ9Ik5vdmVtYmVyIixYYXQ9IkRlY2VtYmVyIixuYj0xOTAwLFhyPXs0ODoxLDM6MSw0OjF9LG5mZT0iQmVmb3JlIENocmlzdCIscmZlPSJBbm5vIERvbWluaSIsUWF0PSJTdW5kYXkiLFphdD0iTW9uZGF5IixKYXQ9IlR1ZXNkYXkiLHRvdD0iV2VkbmVzZGF5Iixlb3Q9IlRodXJzZGF5Iixub3Q9IkZyaWRheSIscm90PSJTYXR1cmRheSIsUHh0PSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIsaWZlPSJEYXRlVGltZUZvcm1hdCIsaW90PSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsc2ZlPSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixhZmU9ezM6MSw0OjEsMzU6MSwxOTk6MX0saDY9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50Iix1bD00MTk0MzAzLFcwPTEwNDg1NzUsSUQ9NTI0Mjg4LGY2PTQxOTQzMDQseDI9MTc1OTIxODYwNDQ0MTYsTnE9MWU5LEREPS0xNzU5MjE4NjA0NDQxNixGeHQ9ImphdmEuaW8iLHNvdD17MzoxLDEwMjoxLDczOjEsNjA6MSw3ODoxfSxvZmU9ezM6MSwyODk6MSw3ODoxfSx2dz0nRm9yIGlucHV0IHN0cmluZzogIicsc3M9MS8wLFRzPS0xLzAseXk9NDA5Nixhb3Q9ezM6MSw0OjEsMzY0OjF9LFlhPTY1NTM2LE9EPTU1Mjk2LHZvPXsxMDQ6MSwzOjEsNDoxfSxvb3Q9MWU1LGNmZT0uMzAxMDI5OTk1NjYzOTgxMixjbz00Mjk0OTY3Mjk1LGNvdD00Mjk0OTY3Mjk2LERFPSIwLjAiLHVvdD17NDI6MX0sdWZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjF9LGxmZT17MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxoZmU9ezIwOjEsMTQ6MSwxNToxfSxsb3Q9ezM6MSw2MjoxfSxORD17MTgyOjF9LF80PXszOjEsNDoxLDgzOjF9LEJ4dD17MzoxLDQ6MSwyMDoxLDI4OjEsMTQ6MSw1MzoxLDIxOjF9LGhvdD0iZGVsZXRlIixMXz0xNDkwMTE2MTE5Mzg0NzY1NmUtMjQsTV89MTExMDIyMzAyNDYyNTE1NjVlLTMyLGZvdD0xNTUyNTQ4NSxQRD01OTYwNDY0NDc3NTM5MDYzZS0yMyxSeHQ9MTY3NzcyMTYsUHE9MTY3NzcyMTUsanh0PSIsIGxlbmd0aDogIixmZmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LGRvdD17MzoxLDM1OjEsMjI6MSwyOTc6MX0sZ290PSJqYXZhLnV0aWwuZnVuY3Rpb24iLElfPSJqYXZhLnV0aWwubG9nZ2luZyIsZGZlPXszOjEsNDoxLDU6MSw4NDI6MX0scG90PSJ1bmRlZmluZWQiLElzPSJqYXZhLnV0aWwuc3RyZWFtIiwkeHQ9ezUyNToxLDY3MDoxfSxGcT0iZnJvbUluZGV4OiAiLGdmZT0iID4gdG9JbmRleDogIix6eHQ9IiwgdG9JbmRleDogIixxeHQ9IkluZGV4OiAiLEh4dD0iLCBTaXplOiAiLE9FPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbiIsT2k9ezYyOjF9LHBmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbiIsYmZlPSJTY2FubGluZS9FdmVudEhhbmRsZXIiLHIwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQiLHZmZT0iQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4iLHdmZT0iSVNwYWNpbmdzSGFuZGxlci8xIixib3Q9IlRoZSAiLHZvdD0iIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuIixtZmU9IlRoZSBkaXJlY3Rpb24gIix5ZmU9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuIix4ZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yIixrZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUiLEVmZT0iUXVhZHJ1cGxldCIsVGZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yIixDZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXIiLF9mZT0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIixTZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wIixBZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsd2Q9ezE2OToxLDQ1OjF9LHdvdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbi5vcHRpb25zIixRbz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuZGF0YSIsR3h0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLnRyYXZlcnNhbFN0cmF0ZWd5IixWeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8ubG93TGV2ZWxTb3J0IixVeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uaGlnaExldmVsU29ydCIsV3h0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmZpbGwiLEloPXsxMzA6MX0sbW90PSJwb2x5b21pbm8iLERfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5uZXR3b3Jrc2ltcGxleCIsaTA9ezE3NzoxLDM6MSw0OjF9LExmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmciLGsyPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5jZWxsc3lzdGVtIixORT0iQ0VOVEVSIixNZmU9ezIxMjoxLDMyNjoxfSxLeHQ9ezM6MSw0OjEsNToxLDU5NToxfSxkNj0iTEVGVCIsZzY9IlJJR0hUIixZeHQ9IlZlcnRpY2FsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIsWHh0PSJCT1RUT00iLEJxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbCIsT189IlVOREVGSU5FRCIsUDE9LjAxLEZEPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbC5hbGdvcml0aG0iLElmZT0iTGFiZWxQbGFjZXIvbGFtYmRhJDAkVHlwZSIsRGZlPSJMYWJlbFBsYWNlci9sYW1iZGEkMSRUeXBlIixPZmU9InBvcnRSYXRpb09yUG9zaXRpb24iLFBFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5vdmVybGFwcyIseW90PSJET1dOIixtZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vIixScT0iTk9SVEgiLHhvdD0iRUFTVCIsa290PSJTT1VUSCIsRW90PSJXRVNUIixqcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vLnN0cnVjdHVyZXMiLFF4dD0iRGlyZWN0aW9uIixUb3Q9IkdyaWQgaXMgb25seSBvZiBzaXplICIsQ290PSIuIFJlcXVlc3RlZCBwb2ludCAoIixfb3Q9IikgaXMgb3V0IG9mIGJvdW5kcy4iLCRxPSIgR2l2ZW4gY2VudGVyIGJhc2VkIGNvb3JkaW5hdGVzIHdlcmUgKCIsQkQ9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5wcm9wZXJ0aWVzIixOZmU9IklQcm9wZXJ0eUhvbGRlciIsWnh0PXszOjEsOTQ6MSwxMzQ6MX0scDY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnNwb3JlIixQZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzIixFMj17MjA5OjF9LFM0PSJvcmcuZWNsaXBzZS5lbGsuY29yZSIsRmZlPSJDb25uZWN0ZWQgQ29tcG9uZW50cyBDb21wYWN0aW9uIixCZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28iLHpxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLmdyYXBoIixTb3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28ub3B0aW9ucyIsSnh0PSJDb21wYWN0aW9uU3RyYXRlZ3kiLHQ2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uc3RyYXRlZ3kiLGU2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uY29tcG9uZW50TGF5b3V0QWxnb3JpdGhtIixuNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb0dyYXBoIixyNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb1BvbHlzIixSZmU9ImNvbXBvbmVudENvbXBhY3Rpb24iLFQyPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28iLEFvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tcG9uZW50Q29tcG9uZW50IixMb3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnRoaWNrbmVzcyIsYjY9Im9yZy5lY2xpcHNlLmVsay5hc3BlY3RSYXRpbyIsd3c9Im9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIixBND0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby50cmFuc2Zvcm0iLE1vdD0xLjU3MDc5NjMyNjc5NDg5NjYsRkU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLHh5PXszOjEsNDoxLDU6MSwxOTI6MX0saTZ0PXszOjEsNjoxLDQ6MSw1OjEsMTA2OjEsMTIwOjF9LHM2dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZSIsYTZ0PSJDb21wb25lbnRzUHJvY2Vzc29yIixqZmU9IkNvbXBvbmVudHNQcm9jZXNzb3IvMSIsUkQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLCRmZT0iQ29tcG9uZW50IExheW91dCIsbzZ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixxcT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixjNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIix1NnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIsSW90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLHlkPS4wMDEsRG90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIixOXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixCRT0xLjYwMDAwMDAyMzg0MTg1OCxxbD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixqRD0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixreT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLE9vdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIixIcT0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLFBfPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIiwkRD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixOb3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLEdxPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLEZfPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsdjY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIixMND0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixSRT0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixqRT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50IixsNnQ9Im9yaWdpbiIsemZlPSJyYW5kb20iLHFmZT0iYm91bmRpbmdCb3gudXBMZWZ0IixIZmU9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0IixoNnQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLGY2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIsZDZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIsZzZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLHA2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIscmI9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLEdmZT0iRUxLIFN0cmVzcyIsdzY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIixWcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLFZmZT0iTGF5ZXJlZCBsYXlvdXQiLG02PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLHpEPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIixCXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsVXE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIsQzI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIix4ZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLEswPSJOT05FIix4Yz17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjI6MX0sVWZlPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTA2OjEsMTIwOjF9LFdxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLGFzPXs1MToxfSxKYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixQb3Q9IiAtPiAiLFdmZT0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLGI2dD0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsRm90PXszOjEsNjoxLDQ6MSw1OjEsNDc0OjEsMTQxOjEsMTA2OjEsMTIwOjF9LHpnPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTkzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LEtmZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5NDM6MSwyMDM6MSwxMDY6MSwxMjA6MX0sWWZlPWAoW3siJyAJXHIKYCxYZmU9YCldfSInIAlccgpgLFFmZT0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLHFEPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixaZmU9ezM6MSw0OjEsMTQyOjEsMjA3OjEsNDE0OjF9LEpmZT17MzoxLDQ6MSwxMTY6MSwyMDc6MSw0MTQ6MX0sVm49Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkIixxZz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoLnRyYW5zZm9ybSIsdDFlPSJFbGtHcmFwaEltcG9ydGVyIixlMWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsbjFlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLHIxZT0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIixpMWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsczFlPSJOb2RlIG1hcmdpbiBjYWxjdWxhdGlvbiIsJG49Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLGExZT0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLG8xZT0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLEJvdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLHY2dD0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLFJvdD0iTm9kZSAnIixjMWU9IkZJUlNUX1NFUEFSQVRFIix1MWU9IkxBU1RfU0VQQVJBVEUiLGwxZT0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixDcz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixSXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLHMwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIsSEQ9ezIyNToxfSx5Nj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsSGw9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLGliPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLGpfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLnByZXNlcnZlb3JkZXIiLGtkPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLndyYXBwaW5nIixrYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLm9wdGlvbnMiLGpvdD0iSU5URVJBQ1RJVkUiLGgxZT0iREVQVEhfRklSU1QiLGYxZT0iRURHRV9MRU5HVEgiLGQxZT0iU0VMRl9MT09QUyIsZzFlPSJmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXIiLHc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeSIsbTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzIixLcT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIseTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUVkZ2VzIix4NnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlSGllcmFyY2h5RWRnZXMiLGs2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuYWxsb3dOb25GbG93UG9ydHNUb1N3aXRjaFNpZGVzIixFNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnBvcnRTb3J0aW5nU3RyYXRlZ3kiLFQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudGhvcm91Z2huZXNzIixDNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnVubmVjZXNzYXJ5QmVuZHBvaW50cyIsXzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5nZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMiLCRvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3ljbGVCcmVha2luZy5zdHJhdGVneSIsR0Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLnN0cmF0ZWd5IixTNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ29uc3RyYWludCIsQTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllckNob2ljZUNvbnN0cmFpbnQiLEw2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJJZCIsem90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckJvdW5kT25XaWR0aCIscW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckxheWVyRXN0aW1hdGlvblNjYWxpbmdGYWN0b3IiLEhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubm9kZVByb21vdGlvbi5zdHJhdGVneSIsR290PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLm1heEl0ZXJhdGlvbnMiLFZvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuY29mZm1hbkdyYWhhbS5sYXllckJvdW5kIiwkXz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3kiLE02dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlciIsVW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzIixXb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZSIsSTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLEQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsTzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsS290PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsWXE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixNND0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsWHE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixZb3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLFhvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsUW90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLFpvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLEpvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsTjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIsUDZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixRcT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIixacT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIix0Y3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLEY2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLEI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLFI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLGo2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLCQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIix6NnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIscTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLGVjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixINnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLEc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsSnE9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLG5jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIscmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsWTA9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5Iix0SD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIixlSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsel89Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLGljdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixzY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLG5IPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIsckg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLGlIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLHNIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5IixhY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIixWNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIsVTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLGFIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLFc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlciIsb2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cyIsSzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneSIsY2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZSIsdWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZSIsbGN0PSJsYXllcmluZyIscDFlPSJsYXllcmluZy5taW5XaWR0aCIsYjFlPSJsYXllcmluZy5ub2RlUHJvbW90aW9uIixWRD0iY3Jvc3NpbmdNaW5pbWl6YXRpb24iLG9IPSJvcmcuZWNsaXBzZS5lbGsuaGllcmFyY2h5SGFuZGxpbmciLHYxZT0iY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoIix3MWU9Im5vZGVQbGFjZW1lbnQiLG0xZT0ibm9kZVBsYWNlbWVudC5iayIseTFlPSJlZGdlUm91dGluZyIsVUQ9Im9yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZyIsRjE9InNwYWNpbmciLFk2dD0icHJpb3JpdHkiLFg2dD0iY29tcGFjdGlvbiIseDFlPSJjb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uIixrMWU9IlNwZWNpZmllcyB3aGV0aGVyIGFuZCBob3cgcG9zdC1wcm9jZXNzIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iLFE2dD0iaGlnaERlZ3JlZU5vZGVzIixaNnQ9IndyYXBwaW5nIixFMWU9IndyYXBwaW5nLmN1dHRpbmciLFQxZT0id3JhcHBpbmcudmFsaWRpZnkiLEo2dD0id3JhcHBpbmcubXVsdGlFZGdlIixoY3Q9ImVkZ2VMYWJlbHMiLFdEPSJjb25zaWRlck1vZGVsT3JkZXIiLHRrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudENvbW1lbnQiLGVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudE5vZGUiLG5rdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUVkZ2UiLHJrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZU5vZGUiLGlrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxMYWJlbCIsc2t0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRIb3Jpem9udGFsIixha3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydFZlcnRpY2FsIixva3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTm9kZSIsY2t0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5ub2RlU2VsZkxvb3AiLHVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydFBvcnQiLGxrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuaW5kaXZpZHVhbCIsaGt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5ib3JkZXJPZmZzZXQiLGZrdD0ib3JnLmVjbGlwc2UuZWxrLm5vTGF5b3V0Iixka3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LnNpZGUiLEtEPSJvcmcuZWNsaXBzZS5lbGsuZGVidWdNb2RlIixna3Q9Im9yZy5lY2xpcHNlLmVsay5hbGlnbm1lbnQiLHBrdD0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy5hY3RpdmF0ZSIsYmt0PSJvcmcuZWNsaXBzZS5lbGsuaW5zaWRlU2VsZkxvb3BzLnlvIixmY3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsdmt0PSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIix3a3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLG1rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLHlrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIix4a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLGtrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLEVrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLFRrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsQ2t0PSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixjSD0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLF9rdD0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixTa3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsQWt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsTGt0PSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsTWt0PSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixJa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIsZGN0PSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixnY3Q9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIix1SD0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixEa3Q9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIixPa3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLHBjdD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlTGF5b3V0IixFYz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbCIsTmt0PXszOjEsNDoxLDU6MSw1OTM6MX0sQzFlPSJORVRXT1JLX1NJTVBMRVgiLHpjPXsxMjM6MSw1MToxfSxsSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixFeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIixQa3Q9ezQwMjoxLDIyNToxfSxfMWU9ezgzMjoxLDM6MSw0OjF9LCR1PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsdW89Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixTMWU9ezM6MSw0OjEsNToxLDg0MDoxfSxFZD0xZS01LHNiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsYmN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsSmY9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLHZjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLHdjdD0xZS02LFR5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIixtY3Q9LjA5OTk5OTk5OTk5OTk5OTk4LGhIPTFlLTgsQTFlPTQuNzEyMzg4OTgwMzg0NjksTDFlPTMuMTQxNTkyNjUzNTg5NzkzLHFfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIsSF89Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIix4Nj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixNMWU9IlNldCBuZWlnaGJvcnMgaW4gbGV2ZWwiLEkxZT0iREVTQ0VOREFOVFMiLEZrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS53ZWlnaHRpbmciLEJrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5zZWFyY2hPcmRlciIsZkg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMiLEhnPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixEMWU9Im9yZy5lY2xpcHNlLmVsay50cmVlIixSa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsIixJND02LjI4MzE4NTMwNzE3OTU4Nixqa3Q9NWUtMzI0LE8xZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlIix5Y3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixOMWU9ezM6MSw0OjEsNToxLDEwNjoxfSwka3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vcHRpbWl6YXRpb24iLHhjdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IG9wdGlvbiAiLEdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5vcHRpb25zIix6a3Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwub3JkZXJJZCIscWt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJhZGl1cyIsa2N0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsRWN0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsSGt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsR2t0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLFZrdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsVGQ9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwiLFAxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZSIsVWt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nIixGMWU9NS40OTc3ODcxNDM3ODIxMzgsQjFlPTMuOTI2OTkwODE2OTg3MjQxNCxSMWU9Mi4zNTYxOTQ0OTAxOTIzNDUsajFlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nIixkSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5maXJzdGl0ZXJhdGlvbiIsVGN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLm9wdGlvbnMiLFdrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9wdGltaXphdGlvbkdvYWwiLEtrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmxhc3RQbGFjZVNoaWZ0IixZa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLFhrdD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsUWt0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcub25seUZpcnN0SXRlcmF0aW9uIixaa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5yb3dDb21wYWN0aW9uIixDY3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5leHBhbmRUb0FzcGVjdFJhdGlvIixKa3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy50YXJnZXRXaWR0aCIsZ0g9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsRGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsWUQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcudXRpbCIscEg9Ik5vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBmb3IgIixDeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZSIsX3k9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUub3B0aW9ucyIsbXc9Im9yZy5lY2xpcHNlLmVsay5zcG9yZUNvbXBhY3Rpb24iLF9jdD0ib3JnLmVjbGlwc2UuZWxrLnVuZGVybHlpbmdMYXlvdXRBbGdvcml0aG0iLHQ4dD0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci50cmVlQ29uc3RydWN0aW9uIixlOHQ9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIuc3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIixTY3Q9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIucHJlZmVycmVkUm9vdCIsQWN0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnJvb3RTZWxlY3Rpb24iLExjdD0ib3JnLmVjbGlwc2UuZWxrLnN0cnVjdHVyZS5zdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLG44dD0ib3JnLmVjbGlwc2UuZWxrLmNvbXBhY3Rpb24uY29tcGFjdGlvblN0cmF0ZWd5IixyOHQ9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLm9ydGhvZ29uYWwiLGk4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLm1heEl0ZXJhdGlvbnMiLHM4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLnJ1blNjYW5saW5lIixNY3Q9InByb2Nlc3NpbmdPcmRlciIsJDFlPSJvdmVybGFwUmVtb3ZhbCIsJEU9Im9yZy5lY2xpcHNlLmVsay5zcG9yZU92ZXJsYXAiLHoxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMXN0cnVjdHVyZSIsSWN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAycHJvY2Vzc2luZ29yZGVyIixEY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDNleGVjdXRpb24iLHExZT0iSW52YWxpZCBpbmRleDogIix6RT0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuYWxnIixEND17MzMxOjF9LFN5PXsyODg6MX0sSDFlPSJNYWtlIHN1cmUgaXRzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiLGE4dD0iIHV0aWxpdHkgY2xhc3MuIixxRT0idHJ1ZSIsT2N0PSJmYWxzZSIsRzFlPSJDb3VsZG4ndCBjbG9uZSBwcm9wZXJ0eSAnIix5dz0uMDUsT2g9Im9yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMiLFYxZT0xLjI5OTk5OTk1MjMxNjI4NDIseHc9Im9yZy5lY2xpcHNlLmVsay5ib3giLG84dD0ib3JnLmVjbGlwc2UuZWxrLmJveC5wYWNraW5nTW9kZSIsVTFlPSJvcmcuZWNsaXBzZS5lbGsuYWxnb3JpdGhtIixXMWU9Im9yZy5lY2xpcHNlLmVsay5yZXNvbHZlZEFsZ29yaXRobSIsYzh0PSJvcmcuZWNsaXBzZS5lbGsuYmVuZFBvaW50cyIsVzVuPSJvcmcuZWNsaXBzZS5lbGsubGFiZWxNYW5hZ2VyIixLMWU9Im9yZy5lY2xpcHNlLmVsay5zY2FsZUZhY3RvciIsWTFlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbWF0ZSIsWDFlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbVRpbWVGYWN0b3IiLFExZT0ib3JnLmVjbGlwc2UuZWxrLmxheW91dEFuY2VzdG9ycyIsWjFlPSJvcmcuZWNsaXBzZS5lbGsubWF4QW5pbVRpbWUiLEoxZT0ib3JnLmVjbGlwc2UuZWxrLm1pbkFuaW1UaW1lIix0ZGU9Im9yZy5lY2xpcHNlLmVsay5wcm9ncmVzc0JhciIsZWRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVHcmFwaCIsbmRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVPcHRpb25zIixyZGU9Im9yZy5lY2xpcHNlLmVsay56b29tVG9GaXQiLEs1bj0ib3JnLmVjbGlwc2UuZWxrLmZvbnQubmFtZSIsaWRlPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5zaXplIixzZGU9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnR5cGUiLGFkZT0icGFydGl0aW9uaW5nIixvZGU9Im5vZGVMYWJlbHMiLGJIPSJwb3J0QWxpZ25tZW50IixOY3Q9Im5vZGVTaXplIixQY3Q9InBvcnQiLHU4dD0icG9ydExhYmVscyIsY2RlPSJpbnNpZGVTZWxmTG9vcHMiLFZfPSJvcmcuZWNsaXBzZS5lbGsuZml4ZWQiLHZIPSJvcmcuZWNsaXBzZS5lbGsucmFuZG9tIix1ZGU9InBvcnQgbXVzdCBoYXZlIGEgcGFyZW50IG5vZGUgdG8gY2FsY3VsYXRlIHRoZSBwb3J0IHNpZGUiLGxkZT0iVGhlIGVkZ2UgbmVlZHMgdG8gaGF2ZSBleGFjdGx5IG9uZSBlZGdlIHNlY3Rpb24uIEZvdW5kOiAiLFVfPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsLmFkYXB0ZXJzIixkaD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIixPND0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoIixoZGU9IkVNYXBQcm9wZXJ0eUhvbGRlciIsZmRlPSJFbGtCZW5kUG9pbnQiLGRkZT0iRWxrR3JhcGhFbGVtZW50IixnZGU9IkVsa0Nvbm5lY3RhYmxlU2hhcGUiLGw4dD0iRWxrRWRnZSIscGRlPSJFbGtFZGdlU2VjdGlvbiIsYmRlPSJFTW9kZWxFbGVtZW50Iix2ZGU9IkVOYW1lZEVsZW1lbnQiLGg4dD0iRWxrTGFiZWwiLGY4dD0iRWxrTm9kZSIsZDh0PSJFbGtQb3J0Iix3ZGU9ezkyOjEsOTA6MX0sazY9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwiLGFiPSJUaGUgZmVhdHVyZSAnIixXXz0iJyBpcyBub3QgYSB2YWxpZCBjaGFuZ2VhYmxlIGZlYXR1cmUiLG1kZT0iRXhwZWN0aW5nIG51bGwiLEZjdD0iJyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIix5ZGU9IlRoZSBmZWF0dXJlIElEIix4ZGU9IiBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIElEIixkYz0zMjc2OCxrZGU9ezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MX0sTW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsIixfMj0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmltcGwiLEtfPSJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIsSEU9IlRoZSBkYXRhdHlwZSAnIixrdz0iJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIixCY3Q9IlRoZSB2YWx1ZSAnIixOND17MTkwOjEsMzoxLDQ6MX0sUmN0PSJUaGUgY2xhc3MgJyIsR0U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWxrL0Vsa0dyYXBoIix3Zj0xMDI0LGc4dD0icHJvcGVydHkiLFlfPSJ2YWx1ZSIsamN0PSJzb3VyY2UiLEVkZT0icHJvcGVydGllcyIsVGRlPSJpZGVudGlmaWVyIiwkY3Q9ImhlaWdodCIsemN0PSJ3aWR0aCIscWN0PSJwYXJlbnQiLEhjdD0idGV4dCIsR2N0PSJjaGlsZHJlbiIsQ2RlPSJoaWVyYXJjaGljYWwiLHA4dD0ic291cmNlcyIsVmN0PSJ0YXJnZXRzIixiOHQ9InNlY3Rpb25zIix3SD0iYmVuZFBvaW50cyIsdjh0PSJvdXRnb2luZ1NoYXBlIix3OHQ9ImluY29taW5nU2hhcGUiLG04dD0ib3V0Z29pbmdTZWN0aW9ucyIseTh0PSJpbmNvbWluZ1NlY3Rpb25zIixSYT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIix4OHQ9IlNldmVyZSBpbXBsZW1lbnRhdGlvbiBlcnJvciBpbiB0aGUgSnNvbiB0byBFbGtHcmFwaCBpbXBvcnRlci4iLENkPSJpZCIsd2E9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5qc29uIixrOHQ9IlVuaGFuZGxlZCBwYXJhbWV0ZXIgdHlwZXM6ICIsX2RlPSJzdGFydFBvaW50IixTZGU9IkFuIGVkZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzb3VyY2UgYW5kIG9uZSB0YXJnZXQgKGVkZ2UgaWQ6ICciLFZFPSInKS4iLEFkZT0iUmVmZXJlbmNlZCBlZGdlIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIsTGRlPSIgKGVkZ2UgaWQ6ICciLEU4dD0idGFyZ2V0IixNZGU9InNvdXJjZVBvaW50IixJZGU9InRhcmdldFBvaW50IixtSD0iZ3JvdXAiLG9pPSJuYW1lIixEZGU9ImNvbm5lY3RhYmxlU2hhcGUgY2Fubm90IGJlIG51bGwiLE9kZT0iZWRnZSBjYW5ub3QgYmUgbnVsbCIsVWN0PSJQYXNzZWQgZWRnZSBpcyBub3QgJ3NpbXBsZScuIix5SD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnV0aWwiLFhEPSJUaGUgJ25vIGR1cGxpY2F0ZXMnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLFdjdD0idGFyZ2V0SW5kZXg9IixTMj0iLCBzaXplPSIsS2N0PSJzb3VyY2VJbmRleD0iLF9kPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxfSxZY3Q9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw0NzoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw1ODg6MX0seEg9ImxvZ2dpbmciLE5kZT0ibWVhc3VyZUV4ZWN1dGlvblRpbWUiLFBkZT0icGFyc2VyLnBhcnNlLjEiLEZkZT0icGFyc2VyLnBhcnNlLjIiLGtIPSJwYXJzZXIubmV4dC4xIixYY3Q9InBhcnNlci5uZXh0LjIiLEJkZT0icGFyc2VyLm5leHQuMyIsUmRlPSJwYXJzZXIubmV4dC40IixBMj0icGFyc2VyLmZhY3Rvci4xIixUOHQ9InBhcnNlci5mYWN0b3IuMiIsamRlPSJwYXJzZXIuZmFjdG9yLjMiLCRkZT0icGFyc2VyLmZhY3Rvci40Iix6ZGU9InBhcnNlci5mYWN0b3IuNSIscWRlPSJwYXJzZXIuZmFjdG9yLjYiLEhkZT0icGFyc2VyLmF0b20uMSIsR2RlPSJwYXJzZXIuYXRvbS4yIixWZGU9InBhcnNlci5hdG9tLjMiLEM4dD0icGFyc2VyLmF0b20uNCIsUWN0PSJwYXJzZXIuYXRvbS41IixfOHQ9InBhcnNlci5jYy4xIixFSD0icGFyc2VyLmNjLjIiLFVkZT0icGFyc2VyLmNjLjMiLFdkZT0icGFyc2VyLmNjLjUiLFM4dD0icGFyc2VyLmNjLjYiLEE4dD0icGFyc2VyLmNjLjciLFpjdD0icGFyc2VyLmNjLjgiLEtkZT0icGFyc2VyLm9wZS4xIixZZGU9InBhcnNlci5vcGUuMiIsWGRlPSJwYXJzZXIub3BlLjMiLEdnPSJwYXJzZXIuZGVzY2FwZS4xIixRZGU9InBhcnNlci5kZXNjYXBlLjIiLFpkZT0icGFyc2VyLmRlc2NhcGUuMyIsSmRlPSJwYXJzZXIuZGVzY2FwZS40Iix0MGU9InBhcnNlci5kZXNjYXBlLjUiLGdoPSJwYXJzZXIucHJvY2Vzcy4xIixlMGU9InBhcnNlci5xdWFudGlmaWVyLjEiLG4wZT0icGFyc2VyLnF1YW50aWZpZXIuMiIscjBlPSJwYXJzZXIucXVhbnRpZmllci4zIixpMGU9InBhcnNlci5xdWFudGlmaWVyLjQiLEw4dD0icGFyc2VyLnF1YW50aWZpZXIuNSIsczBlPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSIsTTh0PXs0MTU6MSw2NzI6MX0sYTBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9LFFEPXszNjY6MSwxNDM6MX0sWF89ImluZGV4PSIsSmN0PXszOjEsNDoxLDU6MSwxMjY6MX0sbzBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNTg6MX0sSTh0PXszOjEsNjoxLDQ6MSw1OjEsMTkyOjF9LGMwZT17MzoxLDQ6MSw1OjEsMTY1OjEsMzY3OjF9LHUwZT0iOy8/OkAmPSskLCIsbDBlPSJpbnZhbGlkIGF1dGhvcml0eTogIixoMGU9IkVBbm5vdGF0aW9uIixmMGU9IkVUeXBlZEVsZW1lbnQiLGQwZT0iRVN0cnVjdHVyYWxGZWF0dXJlIixnMGU9IkVBdHRyaWJ1dGUiLHAwZT0iRUNsYXNzaWZpZXIiLGIwZT0iRUVudW1MaXRlcmFsIix2MGU9IkVHZW5lcmljVHlwZSIsdzBlPSJFT3BlcmF0aW9uIixtMGU9IkVQYXJhbWV0ZXIiLHkwZT0iRVJlZmVyZW5jZSIseDBlPSJFVHlwZVBhcmFtZXRlciIsJGk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsIix0dXQ9ezc2OjF9LEQ4dD17MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjEsNzY6MSw2OToxLDk1OjF9LGswZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcCRFbnRyeSIsenU9ODE5MixBeT0yMDQ4LFFfPSJieXRlIixUSD0iY2hhciIsWl89ImRvdWJsZSIsSl89ImZsb2F0Iix0Uz0iaW50IixlUz0ibG9uZyIsblM9InNob3J0IixFMGU9ImphdmEubGFuZy5PYmplY3QiLFA0PXszOjEsNDoxLDU6MSwyNDc6MX0sTzh0PXszOjEsNDoxLDU6MSw2NzM6MX0sVDBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDY5OjF9LHpvPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxaRD0ibWl4ZWQiLEtyPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiLE5oPSJraW5kIixDMGU9ezM6MSw0OjEsNToxLDY3NDoxfSxOOHQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sQ0g9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDY5OjF9LF9IPXs0NzoxLDEyNToxLDI3OToxfSxTSD17NzI6MSwzMzI6MX0sQUg9IlRoZSB2YWx1ZSBvZiB0eXBlICciLExIPSInIG11c3QgYmUgb2YgdHlwZSAnIixGND0xMzE2LFBoPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIixNSD0tMzI3NjgsRXc9ImNvbnN0cmFpbnRzIixTYT0iYmFzZVR5cGUiLF8wZT0iZ2V0RVN0cnVjdHVyYWxGZWF0dXJlIixTMGU9ImdldEZlYXR1cmVJRCIsclM9ImZlYXR1cmUiLEEwZT0iZ2V0T3BlcmF0aW9uSUQiLFA4dD0ib3BlcmF0aW9uIixMMGU9ImRlZmF1bHRWYWx1ZSIsTTBlPSJlVHlwZVBhcmFtZXRlcnMiLEkwZT0iaXNJbnN0YW5jZSIsRDBlPSJnZXRFRW51bUxpdGVyYWwiLE8wZT0iZUNvbnRhaW5pbmdDbGFzcyIsaWk9ezU1OjF9LE4wZT17MzoxLDQ6MSw1OjEsMTE5OjF9LFAwZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlIixGMGU9ezkyOjEsOTA6MSw1OTE6MSwxOTM1OjF9LGV1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwiLEY4dD0idW5zcGVjaWZpZWQiLEpEPSJzaW1wbGUiLElIPSJhdHRyaWJ1dGUiLEIwZT0iYXR0cmlidXRlV2lsZGNhcmQiLERIPSJlbGVtZW50IixudXQ9ImVsZW1lbnRXaWxkY2FyZCIsdDE9ImNvbGxhcHNlIixydXQ9Iml0ZW1UeXBlIixPSD0ibmFtZXNwYWNlIix0Tz0iIyN0YXJnZXROYW1lc3BhY2UiLEZoPSJ3aGl0ZVNwYWNlIixCOHQ9IndpbGRjYXJkcyIsTDI9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSIsaXV0PSIjI2FueSIsVUU9InVuaW5pdGlhbGl6ZWQiLGVPPSJUaGUgbXVsdGlwbGljaXR5IGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLE5IPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUiLFIwZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIixqMGU9IlNpbXBsZUFueVR5cGUiLCQwZT0iWE1MVHlwZURvY3VtZW50Um9vdCIseXM9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsIixuTz0iSU5GIix6MGU9InByb2Nlc3NpbmciLHEwZT0iRU5USVRJRVNfLl9iYXNlIixSOHQ9Im1pbkxlbmd0aCIsajh0PSJFTlRJVFkiLFBIPSJOQ05hbWUiLEgwZT0iSURSRUZTXy5fYmFzZSIsJDh0PSJpbnRlZ2VyIixzdXQ9InRva2VuIixhdXQ9InBhdHRlcm4iLEcwZT0iW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqIix6OHQ9IlxcaVxcYyoiLFYwZT0iW1xcaS1bOl1dW1xcYy1bOl1dKiIsVTBlPSJub25Qb3NpdGl2ZUludGVnZXIiLHJPPSJtYXhJbmNsdXNpdmUiLHE4dD0iTk1UT0tFTiIsVzBlPSJOTVRPS0VOU18uX2Jhc2UiLEg4dD0ibm9uTmVnYXRpdmVJbnRlZ2VyIixpTz0ibWluSW5jbHVzaXZlIixLMGU9Im5vcm1hbGl6ZWRTdHJpbmciLFkwZT0idW5zaWduZWRCeXRlIixYMGU9InVuc2lnbmVkSW50IixRMGU9IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IixaMGU9InVuc2lnbmVkU2hvcnQiLEowZT0icHJvY2Vzc2luZ0luc3RydWN0aW9uIixWZz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmludGVybmFsIixXRT0xMTE0MTExLHRnZT0iSW50ZXJuYWwgRXJyb3I6IHNob3J0aGFuZHM6IFxcdSIsaVM9InhtbDppc0RpZ2l0IixvdXQ9InhtbDppc1dvcmQiLGN1dD0ieG1sOmlzU3BhY2UiLHV1dD0ieG1sOmlzTmFtZUNoYXIiLGx1dD0ieG1sOmlzSW5pdGlhbE5hbWVDaGFyIixlZ2U9IjA52aDZqduw27ngpabgpa/gp6bgp6/gqabgqa/gq6bgq6/grabgra/gr6fgr6/gsabgsa/gs6bgs6/gtabgta/guZDguZngu5Dgu5ngvKDgvKkiLG5nZT0iQVphesOAw5bDmMO2w7jEscS0xL7FgcWIxYrFvsaAx4PHjcewx7THtce6yJfJkMqoyrvLgc6GzobOiM6KzozOjM6OzqHOo8+Oz5DPls+az5rPnM+cz57Pns+gz6DPos+z0IHQjNCO0Y/RkdGc0Z7SgdKQ04TTh9OI04vTjNOQ06vTrtO107jTudSx1ZbVmdWZ1aHWhteQ16rXsNey2KHYutmB2YrZsdq32rravtuA247bkNuT25Xbldul26bgpIXgpLngpL3gpL3gpZjgpaHgpoXgpozgpo/gppDgppPgpqjgpqrgprDgprLgprLgprbgprngp5zgp53gp5/gp6Hgp7Dgp7HgqIXgqIrgqI/gqJDgqJPgqKjgqKrgqLDgqLLgqLPgqLXgqLbgqLjgqLngqZngqZzgqZ7gqZ7gqbLgqbTgqoXgqovgqo3gqo3gqo/gqpHgqpPgqqjgqqrgqrDgqrLgqrPgqrXgqrngqr3gqr3gq6Dgq6DgrIXgrIzgrI/grJDgrJPgrKjgrKrgrLDgrLLgrLPgrLbgrLngrL3grL3grZzgrZ3grZ/graHgroXgrorgro7grpDgrpLgrpXgrpngrprgrpzgrpzgrp7grp/grqPgrqTgrqjgrqrgrq7grrXgrrfgrrngsIXgsIzgsI7gsJDgsJLgsKjgsKrgsLPgsLXgsLngsaDgsaHgsoXgsozgso7gspDgspLgsqjgsqrgsrPgsrXgsrngs57gs57gs6Dgs6HgtIXgtIzgtI7gtJDgtJLgtKjgtKrgtLngtaDgtaHguIHguK7guLDguLDguLLguLPguYDguYXguoHguoLguoTguoTguofguojguorguorguo3guo3gupTgupfgupngup/guqHguqPguqXguqXguqfguqfguqrguqvguq3guq7gurDgurDgurLgurPgur3gur3gu4Dgu4TgvYDgvYfgvYngvanhgqDhg4Xhg5Dhg7bhhIDhhIDhhILhhIPhhIXhhIfhhInhhInhhIvhhIzhhI7hhJLhhLzhhLzhhL7hhL7hhYDhhYDhhYzhhYzhhY7hhY7hhZDhhZDhhZThhZXhhZnhhZnhhZ/hhaHhhaPhhaPhhaXhhaXhhafhhafhhanhhanhha3hha7hhbLhhbPhhbXhhbXhhp7hhp7hhqjhhqjhhqvhhqvhhq7hhq/hhrfhhrjhhrrhhrrhhrzhh4Lhh6vhh6vhh7Dhh7Dhh7nhh7nhuIDhupvhuqDhu7nhvIDhvJXhvJjhvJ3hvKDhvYXhvYjhvY3hvZDhvZfhvZnhvZnhvZvhvZvhvZ3hvZ3hvZ/hvb3hvoDhvrThvrbhvrzhvr7hvr7hv4Lhv4Thv4bhv4zhv5Dhv5Phv5bhv5vhv6Dhv6zhv7Lhv7Thv7bhv7zihKbihKbihKrihKvihK7ihK7ihoDihoLjgIfjgIfjgKHjgKnjgYHjgpTjgqHjg7rjhIXjhKzkuIDpvqXqsIDtnqMiLHJnZT0iUHJpdmF0ZSBVc2UiLGh1dD0iQVNTSUdORUQiLGZ1dD0iXDB/woDDv8SAxb/GgMmPyZDKr8qwy7/MgM2vzbDPv9CA07/UsNaP1pDXv9iA27/cgN2P3oDev+CkgOClv+CmgOCnv+CogOCpv+CqgOCrv+CsgOCtv+CugOCvv+CwgOCxv+CygOCzv+C0gOC1v+C2gOC3v+C4gOC5v+C6gOC7v+C8gOC/v+GAgOGCn+GCoOGDv+GEgOGHv+GIgOGNv+GOoOGPv+GQgOGZv+GagOGan+GaoOGbv+GegOGfv+GggOGir+G4gOG7v+G8gOG/v+KAgOKBr+KBsOKCn+KCoOKDj+KDkOKDv+KEgOKFj+KFkOKGj+KGkOKHv+KIgOKLv+KMgOKPv+KQgOKQv+KRgOKRn+KRoOKTv+KUgOKVv+KWgOKWn+KWoOKXv+KYgOKbv+KcgOKev+KggOKjv+K6gOK7v+K8gOK/n+K/sOK/v+OAgOOAv+OBgOOCn+OCoOODv+OEgOOEr+OEsOOGj+OGkOOGn+OGoOOGv+OIgOOLv+OMgOOPv+OQgOS2teS4gOm/v+qAgOqSj+qSkOqTj+qwgO2eo+6AgO+jv++kgO+rv++sgO+tj++tkO+3v++4oO+4r++4sO+5j++5kO+5r++5sO+7vlx1RkVGRlx1RkVGRu+8gO+/ryIsRzh0PSJVTkFTU0lHTkVEIixLRT17MzoxLDExNzoxfSxpZ2U9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS51dGlsIixGSD17MzoxLDQ6MSw1OjEsMzY4OjF9LFY4dD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIixzZ2U9IkNhbm5vdCBhZGQgZWxlbWVudHMgdG8gYSBSYW5nZSIsYWdlPSJDYW5ub3Qgc2V0IGVsZW1lbnRzIGluIGEgUmFuZ2UiLG9nZT0iQ2Fubm90IHJlbW92ZSBlbGVtZW50cyBmcm9tIGEgUmFuZ2UiLEJIPSJsb2NhbGUiLFJIPSJkZWZhdWx0IixqSD0idXNlci5hZ2VudCIsbCwkSCxkdXQ7Yi5nb29nPWIuZ29vZ3x8e30sYi5nb29nLmdsb2JhbD1iLmdvb2cuZ2xvYmFsfHxiLHkwbigpLEkoMSxudWxsLHt9LF8pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5VdCh0aGlzLGUpfSxsLkdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ219LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSXYodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gQXAoc2wodGhpcykpKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpfSxsLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5GYih0KX0sbC5oYXNoQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhiKCl9LGwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5JYigpfTt2YXIgY2dlLHVnZSxsZ2U7SSgyOTAsMSx7MjkwOjEsMjAyNjoxfSxreXQpLGwubGU9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49bmV3IGt5dCxuLmk9NCxlPjE/bi5jPW1RdCh0aGlzLGUtMSk6bi5jPXRoaXMsbn0sbC5tZT1mdW5jdGlvbigpe3JldHVybiBMMCh0aGlzKSx0aGlzLmJ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gQXAodGhpcyl9LGwub2U9ZnVuY3Rpb24oKXtyZXR1cm4gTDAodGhpcyksdGhpcy5rfSxsLnBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSY0KSE9MH0sbC5xZT1mdW5jdGlvbigpe3JldHVybih0aGlzLmkmMSkhPTB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gQm10KHRoaXMpfSxsLmk9MDt2YXIgWG49UChYbywiT2JqZWN0IiwxKSxVOHQ9UChYbywiQ2xhc3MiLDI5MCk7SSgxOTk4LDEsX0QpLFAoU0QsIk9wdGlvbmFsIiwxOTk4KSxJKDExNzAsMTk5OCxfRCxMKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpc30sbC5IYj1mdW5jdGlvbigpe3JldHVybiAyMDQwNzMyMzMyfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk9wdGlvbmFsLmFic2VudCgpIn0sbC5KYj1mdW5jdGlvbihlKXtyZXR1cm4gQXIoZSksSTkoKSxndXR9O3ZhciBndXQ7UChTRCwiQWJzZW50IiwxMTcwKSxJKDYyOCwxLHt9LGFldCksUChTRCwiSm9pbmVyIiw2MjgpO3ZhciBZNW49WWkoU0QsIlByZWRpY2F0ZSIpO0koNTgyLDEsezE2OToxLDU4MjoxLDM6MSw0NToxfSxiOSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gc3JlKHRoaXMsZSl9LGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHNyZSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDU4Mik/KG49dShlLDU4MikscDV0KHRoaXMuYSxuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQodGhpcy5hKSszMDY2NTQyNTJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gYWduKHRoaXMuYSl9LFAoU0QsIlByZWRpY2F0ZXMvQW5kUHJlZGljYXRlIiw1ODIpLEkoNDA4LDE5OTgsezQwODoxLDM6MX0samspLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDA4KT8obj11KGUsNDA4KSx5aSh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gMTUwMjQ3NjU3MitIaSh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFZoZSt0aGlzLmErIikifSxsLkpiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgamsociQoZS5LYih0aGlzLmEpLCJ0aGUgRnVuY3Rpb24gcGFzc2VkIHRvIE9wdGlvbmFsLnRyYW5zZm9ybSgpIG11c3Qgbm90IHJldHVybiBudWxsLiIpKX0sUChTRCwiUHJlc2VudCIsNDA4KSxJKDE5OCwxLFNFKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUWI9ZnVuY3Rpb24oKXtVcXQoKX0sUChZZSwiVW5tb2RpZmlhYmxlSXRlcmF0b3IiLDE5OCksSSgxOTc4LDE5OCxBRSksbC5RYj1mdW5jdGlvbigpe1VxdCgpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiVW5tb2RpZmlhYmxlTGlzdEl0ZXJhdG9yIiwxOTc4KSxJKDM4NiwxOTc4LEFFKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYzx0aGlzLmR9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPjB9LGwuUGI9ZnVuY3Rpb24oKXtpZih0aGlzLmM+PXRoaXMuZCl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0aGlzLlhiKHRoaXMuYysrKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVWI9ZnVuY3Rpb24oKXtpZih0aGlzLmM8PTApdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gdGhpcy5YYigtLXRoaXMuYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLTF9LGwuYz0wLGwuZD0wLFAoWWUsIkFic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvciIsMzg2KSxJKDY5OSwxOTgsU0UpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gc2l0KHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEltdCh0aGlzKX0sbC5lPTEsUChZZSwiQWJzdHJhY3RJdGVyYXRvciIsNjk5KSxJKDE5ODYsMSx7MjI0OjF9KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLGV8fCh0aGlzLmY9dGhpcy5hYygpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRWl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5aYigpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gUHgodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5aYigpKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcCIsMTk4NiksSSg3MjYsMTk4Nix5MiksbC4kYj1mdW5jdGlvbigpe1EkKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBoSHQodGhpcyxlKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbjgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhjKCl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFczKHRoaXMsdGhpcy5jKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExxdCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBNc3QodGhpcy5jLnZjKCkuTmMoKSxuZXcgQiw2NCx0aGlzLmQpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiBBaSh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiAkSSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gdm4oKSxuZXcgVChlKX0sbC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQXF0KHRoaXMpfSxsLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIE1zdCh0aGlzLmMuQ2MoKS5OYygpLG5ldyBOLDY0LHRoaXMuZCl9LGwucGM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEkkKHRoaXMsZSxuLG51bGwpfSxsLmQ9MCxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDcyNiksSSgxNjMxLDcyNix5MiksbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWWModGhpcy5hKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHZuKCksaW99LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwxNSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoJEkodGhpcyxlKSwxNSl9LGwuWmI9ZnVuY3Rpb24oKXtyZXR1cm4gJHgodGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEVpdCh0aGlzLGUpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEFpKHRoaXMsZSksMTUpfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiB1KCRJKHRoaXMsZSksMTUpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBKTSh1KGUsMTUpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiBUWnQodGhpcyxlLHUobiwxNSksbnVsbCl9LFAoWWUsIkFic3RyYWN0TGlzdE11bHRpbWFwIiwxNjMxKSxJKDczMiwxLHJhKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLk9iKCl8fHRoaXMuZS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuZS5PYigpfHwoZT11KHRoaXMuYy5QYigpLDQyKSx0aGlzLmI9ZS5jZCgpLHRoaXMuYT11KGUuZGQoKSwxNCksdGhpcy5lPXRoaXMuYS5LYygpKSx0aGlzLnNjKHRoaXMuYix0aGlzLmUuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmUuUWIoKSx0aGlzLmEuZGMoKSYmdGhpcy5jLlFiKCksLS10aGlzLmQuZH0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0ciIsNzMyKSxJKDEwOTksNzMyLHJhLEFxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBufSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMSIsMTA5OSksSSgxMTAwLDEse30sTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE0KS5OYygpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMW1ldGhvZHJlZiRzcGxpdGVyYXRvciRUeXBlIiwxMTAwKSxJKDExMDEsNzMyLHJhLExxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgX3YoZSxuKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzIiLDExMDEpO3ZhciBXOHQ9WWkocHIsIk1hcCIpO0koMTk2NywxLGJ3KSxsLndjPWZ1bmN0aW9uKGUpe1VDKHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLnZjKCkuJGIoKX0sbC50Yz1mdW5jdGlvbihlKXtyZXR1cm4gZHN0KHRoaXMsZSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuISF3NHQodGhpcyxlLCExKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyLHM7Zm9yKHI9dGhpcy52YygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQyKSxzPW4uZGQoKSxHdChlKT09PUd0KHMpfHxlIT1udWxsJiZ5aShlLHMpKXJldHVybiEwO3JldHVybiExfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihlPT09dGhpcylyZXR1cm4hMDtpZighRXQoZSw4Myl8fChzPXUoZSw4MyksdGhpcy5nYygpIT1zLmdjKCkpKXJldHVybiExO2ZvcihyPXMudmMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0MiksIXRoaXMudGMobikpcmV0dXJuITE7cmV0dXJuITB9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjKHc0dCh0aGlzLGUsITEpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB2eXQodGhpcy52YygpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRtKHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCIpKX0sbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBlYyh3NHQodGhpcyxlLCEwKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YygpLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb2FlKHRoaXMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiMSh0aGlzKX0sUChwciwiQWJzdHJhY3RNYXAiLDE5NjcpLEkoMTk4NywxOTY3LGJ3KSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUUih0aGlzKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBFWXQodGhpcyl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmcsZXx8KHRoaXMuZz10aGlzLmJjKCkpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5pLGV8fCh0aGlzLmk9bmV3IHJHdCh0aGlzKSl9LFAoWWUsIk1hcHMvVmlld0NhY2hpbmdBYnN0cmFjdE1hcCIsMTk4NyksSSgzODksMTk4NyxidyxuOCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gcWFuKHRoaXMsZSl9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGl1bih0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTpPaihuZXcganZ0KHRoaXMpKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gUnJlKHRoaXMuZCxlKX0sbC5FYz1mdW5jdGlvbigpe3JldHVybiBuZXcgJGsodGhpcyl9LGwuRGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8eWkodGhpcy5kLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuZCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5kKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwIiwzODkpO3ZhciBCMT1ZaShYbywiSXRlcmFibGUiKTtJKDI4LDEsd3kpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMCl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgeWcoIkFkZCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sbGVjdGlvbiIpKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gVWEodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe1R3dCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcnkodGhpcyxlLCExKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gSUkodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJ5KHRoaXMsZSwhMCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWnZ0KHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBYSSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFFwKHRoaXMpfSxQKHByLCJBYnN0cmFjdENvbGxlY3Rpb24iLDI4KTt2YXIgQmg9WWkocHIsIlNldCIpO0koTjEsMjgsanUpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIElpZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ5dCh0aGlzKX0sUChwciwiQWJzdHJhY3RTZXQiLE4xKSxJKDE5NzAsTjEsanUpLFAoWWUsIlNldHMvSW1wcm92ZWRBYnN0cmFjdFNldCIsMTk3MCksSSgxOTcxLDE5NzAsanUpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLlJjKCkuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZmllKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SYygpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuSGMoZSk/KG49dShlLDQyKSx0aGlzLlJjKCkuZWMoKS5NYyhuLmNkKCkpKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sUChZZSwiTWFwcy9FbnRyeVNldCIsMTk3MSksSSgxMDk3LDE5NzEsanUsJGspLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFV5dCh0aGlzLmEuZC52YygpLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqdnQodGhpcy5hKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIFV5dCh0aGlzLmEuZC52YygpLGUpPyhuPXUoZSw0MiksQXNuKHRoaXMuYS5lLG4uY2QoKSksITApOiExfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFZNKHRoaXMuYS5kLnZjKCkuTmMoKSxuZXcgVkIodGhpcy5hKSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMiLDEwOTcpLEkoMTA5OCwxLHt9LFZCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkSnQodGhpcy5hLHUoZSw0MikpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzLzBtZXRob2RyZWYkd3JhcEVudHJ5JFR5cGUiLDEwOTgpLEkoNzMwLDEscmEsanZ0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYi5QYigpLDQyKSx0aGlzLmE9dShlLmRkKCksMTQpLGRKdCh0aGlzLmMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUWI9ZnVuY3Rpb24oKXtuNCghIXRoaXMuYSksdGhpcy5iLlFiKCksdGhpcy5jLmUuZC09dGhpcy5hLmdjKCksdGhpcy5hLiRiKCksdGhpcy5hPW51bGx9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEl0ZXJhdG9yIiw3MzApLEkoNTMyLDE5NzAsanUsVFIpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmIuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHRoaXMuYi53YyhuZXcgZ3R0KGUpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRDkodGhpcy5iLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5fYihlKT8odGhpcy5iLkJjKGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sUChZZSwiTWFwcy9LZXlTZXQiLDUzMiksSSgzMTgsNTMyLGp1LFczKSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGU7T2ooKGU9dGhpcy5iLnZjKCkuS2MoKSxuZXcgaGJ0KHRoaXMsZSkpKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLmVjKCkuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHx5aSh0aGlzLmIuZWMoKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuZWMoKSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIudmMoKS5LYygpLG5ldyBoYnQodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiByPTAsbj11KHRoaXMuYi5CYyhlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMxOCksSSg3MzEsMSxyYSxoYnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9dSh0aGlzLmMuUGIoKSw0MiksdGhpcy5hLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt2YXIgZTtuNCghIXRoaXMuYSksZT11KHRoaXMuYS5kZCgpLDE0KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT1lLmdjKCksZS4kYigpLHRoaXMuYT1udWxsfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDczMSksSSg0OTEsMzg5LHs4MzoxLDE2MToxfSxSTSksbC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5UYygpfSxsLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnTSh0aGlzLmMsdGhpcy5VYygpKX0sbC5UYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYixlfHwodGhpcy5iPXRoaXMuU2MoKSl9LGwuVWM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmQsMTYxKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw0OTEpLEkoNTQyLDQ5MSxVaGUseWopLGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIsdShlfHwodGhpcy5iPW5ldyBlOCh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpKSwyNzEpfSxsLlRjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLHUoZXx8KHRoaXMuYj1uZXcgZTgodGhpcy5hLHUodSh0aGlzLmQsMTYxKSwxNzEpKSksMjcxKX0sbC5VYz1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5kLDE2MSksMTcxKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUFzTWFwIiw1NDIpLEkoNDkwLDMxOCxXaGUsZ00pLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmVjKCkuTmMoKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEtleVNldCIsNDkwKSxJKDM4OCw0OTAsTXh0LGU4KSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlS2V5U2V0IiwzODgpLEkoNTQxLDI4LHd5LEkkKSxsLkZjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIGFsKHRoaXMpLHI9dGhpcy5kLmRjKCksbj10aGlzLmQuRmMoZSksbiYmKCsrdGhpcy5mLmQsciYmcU0odGhpcykpLG59LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBlLmRjKCk/ITE6KHM9KGFsKHRoaXMpLHRoaXMuZC5nYygpKSxuPXRoaXMuZC5HYyhlKSxuJiYocj10aGlzLmQuZ2MoKSx0aGlzLmYuZCs9ci1zLHM9PTAmJnFNKHRoaXMpKSxuKX0sbC4kYj1mdW5jdGlvbigpe3ZhciBlO2U9KGFsKHRoaXMpLHRoaXMuZC5nYygpKSxlIT0wJiYodGhpcy5kLiRiKCksdGhpcy5mLmQtPWUsUmoodGhpcykpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBhbCh0aGlzKSx0aGlzLmQuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLHRoaXMuZC5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXM/ITA6KGFsKHRoaXMpLHlpKHRoaXMuZCxlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksSGkodGhpcy5kKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBhbCh0aGlzKSxuZXcgQ3Z0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBhbCh0aGlzKSxuPXRoaXMuZC5NYyhlKSxuJiYoLS10aGlzLmYuZCxSaih0aGlzKSksbn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB6VnQodGhpcyl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksJG8odGhpcy5kKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uIiw1NDEpO3ZhciBwaD1ZaShwciwiTGlzdCIpO0koNzI4LDU0MSx7MjA6MSwyODoxLDE0OjEsMTU6MX0sdHd0KSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LGwuVmM9ZnVuY3Rpb24oZSxuKXt2YXIgcjthbCh0aGlzKSxyPXRoaXMuZC5kYygpLHUodGhpcy5kLDE1KS5WYyhlLG4pLCsrdGhpcy5hLmQsciYmcU0odGhpcyl9LGwuV2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIG4uZGMoKT8hMToobz0oYWwodGhpcyksdGhpcy5kLmdjKCkpLHI9dSh0aGlzLmQsMTUpLldjKGUsbiksciYmKHM9dGhpcy5kLmdjKCksdGhpcy5hLmQrPXMtbyxvPT0wJiZxTSh0aGlzKSkscil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLHUodGhpcy5kLDE1KS5YYihlKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gYWwodGhpcyksdSh0aGlzLmQsMTUpLlhjKGUpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKHRoaXMpLG5ldyB5VXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsKHRoaXMpLG5ldyBPWHQodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gYWwodGhpcyksbj11KHRoaXMuZCwxNSkuJGMoZSksLS10aGlzLmEuZCxSaih0aGlzKSxufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFsKHRoaXMpLHUodGhpcy5kLDE1KS5fYyhlLG4pfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFsKHRoaXMpLFRadCh0aGlzLmEsdGhpcy5lLHUodGhpcy5kLDE1KS5iZChlLG4pLHRoaXMuYj90aGlzLmI6dGhpcyl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdCIsNzI4KSxJKDEwOTYsNzI4LHsyMDoxLDI4OjEsMTQ6MSwxNToxLDU0OjF9LGxXdCksUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1JhbmRvbUFjY2Vzc1dyYXBwZWRMaXN0IiwxMDk2KSxJKDYyMCwxLHJhLEN2dCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEU4KHRoaXMpLHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEU4KHRoaXMpLHRoaXMuYi5QYigpfSxsLlFiPWZ1bmN0aW9uKCl7V1V0KHRoaXMpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24vV3JhcHBlZEl0ZXJhdG9yIiw2MjApLEkoNzI5LDYyMCxKZCx5VXQsT1h0KSxsLlFiPWZ1bmN0aW9uKCl7V1V0KHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe3ZhciBuO249elZ0KHRoaXMuYSk9PTAsKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlJiKGUpLCsrdGhpcy5hLmEuZCxuJiZxTSh0aGlzLmEpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlNiKCl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4oRTgodGhpcyksdSh0aGlzLmIsMTI1KSkuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybihFOCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5VYigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuKEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlZiKCl9LGwuV2I9ZnVuY3Rpb24oZSl7KEU4KHRoaXMpLHUodGhpcy5iLDEyNSkpLldiKGUpfSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QvV3JhcHBlZExpc3RJdGVyYXRvciIsNzI5KSxJKDcyNyw1NDEsV2hlLFUydCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBhbCh0aGlzKSx0aGlzLmQuTmMoKX0sUChZZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTb3J0ZWRTZXQiLDcyNyksSSgxMDk1LDcyNyxNeHQsZlV0KSxQKFllLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZE5hdmlnYWJsZVNldCIsMTA5NSksSSgxMDk0LDU0MSxqdSxUV3QpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcyksdGhpcy5kLk5jKCl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU2V0IiwxMDk0KSxJKDExMDMsMSx7fSxCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBOc24odShlLDQyKSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMSRUeXBlIiwxMTAzKSxJKDExMDIsMSx7fSxldHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBfdih0aGlzLmEsZSl9LFAoWWUsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMiRUeXBlIiwxMTAyKTt2YXIgTTI9WWkocHIsIk1hcC9FbnRyeSIpO0koMzQ1LDEsTXEpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksZmQodGhpcy5jZCgpLG4uY2QoKSkmJmZkKHRoaXMuZGQoKSxuLmRkKCkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5jZCgpLG49dGhpcy5kZCgpLChlPT1udWxsPzA6SGkoZSkpXihuPT1udWxsPzA6SGkobikpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZCgpKyI9Iit0aGlzLmRkKCl9LFAoWWUsS2hlLDM0NSksSSgxOTg4LDI4LHd5KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5mZCgpLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksZ2luKHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDIpPyhuPXUoZSw0MiksaVp0KHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgpLmR9LFAoWWUsIk11bHRpbWFwcy9FbnRyaWVzIiwxOTg4KSxJKDczMywxOTg4LHd5LFFMKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxsLmZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3MzMpLEkoNzM0LDczMyxqdSx6cHQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEY0dCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHNuZSh0aGlzKX0sUChZZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzM0KSxJKDczNSwyOCx3eSxNMyksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBaY24odGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxQKFllLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzM1KSxJKDE5ODksMjgsezgzNToxLDIwOjEsMjg6MSwxNDoxfSksbC5KYz1mdW5jdGlvbihlKXtBcihlKSxZMyh0aGlzKS5KYyhuZXcgZHR0KGUpKX0sbC5OYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVkzKHRoaXMpLk5jKCksTXN0KGUsbmV3IHd0LDY0fGUucWQoKSYxMjk2LHRoaXMuYS5kKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gWHB0KCksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKHRoaXMpLEFyKGUpLEV0KGUsNTQzKT9taW4odShlLDgzNSkpOiFlLmRjKCkmJlhydCh0aGlzLGUuS2MoKSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShueSgkeCh0aGlzLmEpLGUpLDE0KSwobj9uLmdjKCk6MCk+MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZmJuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkoWTModGhpcykpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFkzKHRoaXMpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRvZSh0aGlzLGUsMSk+MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyhZMyh0aGlzKSl9LFAoWWUsIkFic3RyYWN0TXVsdGlzZXQiLDE5ODkpLEkoMTk5MSwxOTcwLGp1KSxsLiRiPWZ1bmN0aW9uKCl7USQodGhpcy5hLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIEV0KGUsNDkyKT8ocj11KGUsNDE2KSx1KHIuYS5kZCgpLDE0KS5nYygpPD0wPyExOihuPU5RdCh0aGlzLmEsci5hLmNkKCkpLG49PXUoci5hLmRkKCksMTQpLmdjKCkpKTohMX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gRXQoZSw0OTIpJiYocj11KGUsNDE2KSxuPXIuYS5jZCgpLHM9dShyLmEuZGQoKSwxNCkuZ2MoKSxzIT0wKT8obz10aGlzLmEsdHBuKG8sbixzKSk6ITF9LFAoWWUsIk11bHRpc2V0cy9FbnRyeVNldCIsMTk5MSksSSgxMTA5LDE5OTEsanUsWkwpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJxdChFWXQoJHgodGhpcy5hLmEpKS5LYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAkeCh0aGlzLmEuYSkuZ2MoKX0sUChZZSwiQWJzdHJhY3RNdWx0aXNldC9FbnRyeVNldCIsMTEwOSksSSg2MTksNzI2LHkyKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2QoKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhkKCl9LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuamQoZSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMua2QoZSl9LGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj10aGlzLmFjKCkpfSxsLmhkPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksdm4oKSxVSH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRWl0KHRoaXMsZSl9LGwuamQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwyMSl9LGwua2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoJEkodGhpcyxlKSwyMSl9LGwubWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKCksbmV3IFFrKHUoZSwyMSkpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBUV3QodGhpcyxlLHUobiwyMSkpfSxQKFllLCJBYnN0cmFjdFNldE11bHRpbWFwIiw2MTkpLEkoMTY1Nyw2MTkseTIpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExwKHRoaXMuYil9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExwKHRoaXMuYil9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4gcHd0KG5ldyBMcCh0aGlzLmIpKX0sbC5oZD1mdW5jdGlvbigpe3JldHVybiBwd3QobmV3IExwKHRoaXMuYikpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmpkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoJEkodGhpcyxlKSwyMSksODQpfSxsLmtkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoJEkodGhpcyxlKSwyMSksODQpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI3MSk/cHd0KHUoZSwyNzEpKToodm4oKSxuZXcgQzJ0KHUoZSw4NCkpKX0sbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEV0KG4sMjcxKT9uZXcgZlV0KHRoaXMsZSx1KG4sMjcxKSk6bmV3IFUydCh0aGlzLGUsdShuLDg0KSl9LFAoWWUsIkFic3RyYWN0U29ydGVkU2V0TXVsdGltYXAiLDE2NTcpLEkoMTY1OCwxNjU3LHkyKSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1FdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpfSxQKFllLCJBYnN0cmFjdFNvcnRlZEtleVNvcnRlZFNldE11bHRpbWFwIiwxNjU4KSxJKDIwMTAsMSx7MTk0NzoxfSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSDFuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdnl0KChlPXRoaXMuZyxlfHwodGhpcy5nPW5ldyB2OSh0aGlzKSkpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBvYWUoKGU9dGhpcy5mLGV8fCh0aGlzLmY9bmV3IHYydCh0aGlzKSkpKX0sUChZZSwiQWJzdHJhY3RUYWJsZSIsMjAxMCksSSg2NjUsTjEsanUsdjkpLGwuJGI9ZnVuY3Rpb24oKXtXcXQoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBFdChlLDQ2OCk/KG49dShlLDY4Mikscj11KG55KFVZdCh0aGlzLmEpLERwKG4uYy5lLG4uYikpLDgzKSwhIXImJlV5dChyLnZjKCksbmV3IF92KERwKG4uYy5jLG4uYSksV3gobi5jLG4uYixuLmEpKSkpOiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFNubih0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIEV0KGUsNDY4KT8obj11KGUsNjgyKSxyPXUobnkoVVl0KHRoaXMuYSksRHAobi5jLmUsbi5iKSksODMpLCEhciYmQ3VuKHIudmMoKSxuZXcgX3YoRHAobi5jLmMsbi5hKSxXeChuLmMsbi5iLG4uYSkpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaVl0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4ga2luKHRoaXMuYSl9LFAoWWUsIkFic3RyYWN0VGFibGUvQ2VsbFNldCIsNjY1KSxJKDE5MjgsMjgsd3ksbnR0KSxsLiRiPWZ1bmN0aW9uKCl7V3F0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5kbih0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQW5uKHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaVl0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gb1p0KHRoaXMuYSl9LFAoWWUsIkFic3RyYWN0VGFibGUvVmFsdWVzIiwxOTI4KSxJKDE2MzIsMTYzMSx5MiksUChZZSwiQXJyYXlMaXN0TXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxNjMyKSxJKDUxMywxNjMyLHkyLHNldCwkd3QpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFljKHRoaXMuYSl9LGwuYT0wLFAoWWUsIkFycmF5TGlzdE11bHRpbWFwIiw1MTMpLEkoNjY0LDIwMTAsezY2NDoxLDE5NDc6MSwzOjF9LE5vZSksUChZZSwiQXJyYXlUYWJsZSIsNjY0KSxJKDE5MjQsMzg2LEFFLHpVdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHh5dCh0aGlzLmEsZSl9LFAoWWUsIkFycmF5VGFibGUvMSIsMTkyNCksSSgxOTI1LDEse30sR0IpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB4eXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlLzFtZXRob2RyZWYkZ2V0Q2VsbCRUeXBlIiwxOTI1KSxJKDIwMTEsMSx7NjgyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpFdChlLDQ2OCk/KG49dShlLDY4MiksZmQoRHAodGhpcy5jLmUsdGhpcy5iKSxEcChuLmMuZSxuLmIpKSYmZmQoRHAodGhpcy5jLmMsdGhpcy5hKSxEcChuLmMuYyxuLmEpKSYmZmQoV3godGhpcy5jLHRoaXMuYix0aGlzLmEpLFd4KG4uYyxuLmIsbi5hKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbRHAodGhpcy5jLmUsdGhpcy5iKSxEcCh0aGlzLmMuYyx0aGlzLmEpLFd4KHRoaXMuYyx0aGlzLmIsdGhpcy5hKV0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIitEcCh0aGlzLmMuZSx0aGlzLmIpKyIsIitEcCh0aGlzLmMuYyx0aGlzLmEpKyIpPSIrV3godGhpcy5jLHRoaXMuYix0aGlzLmEpfSxQKFllLCJUYWJsZXMvQWJzdHJhY3RDZWxsIiwyMDExKSxJKDQ2OCwyMDExLHs0Njg6MSw2ODI6MX0seHl0KSxsLmE9MCxsLmI9MCxsLmQ9MCxQKFllLCJBcnJheVRhYmxlLzIiLDQ2OCksSSgxOTI3LDEse30sb3gpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHd0ZSh0aGlzLmEsZSl9LFAoWWUsIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxOTI3KSxJKDE5MjYsMzg2LEFFLHFVdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gd3RlKHRoaXMuYSxlKX0sUChZZSwiQXJyYXlUYWJsZS8zIiwxOTI2KSxJKDE5NzksMTk2NyxidyksbC4kYj1mdW5jdGlvbigpe09qKHRoaXMua2MoKSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHV4KHRoaXMpfSxsLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5WHQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LFAoWWUsIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwxOTc5KSxJKDgyOCwxOTc5LGJ3KSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZkh0KHRoaXMuYyxlKX0sbC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSFV0KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBfbnQodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBkdih0aGlzKSl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dSh3Qyh0aGlzLmMsZSksMTkpLG4/dGhpcy5uZChuLmEpOm51bGx9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE5udCh0aGlzLmMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dmFyIHI7aWYocj11KHdDKHRoaXMuYyxlKSwxOSksIXIpdGhyb3cgcnQobmV3IFBuKHRoaXMubWQoKSsiICIrZSsiIG5vdCBpbiAiK05udCh0aGlzLmMpKSk7cmV0dXJuIHRoaXMub2Qoci5hLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4MjgpLEkoMTkyMywxLHt9LGR2KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBLWXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMTkyMyksSSgxOTIxLDM0NSxNcSxVSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gSFhlKHRoaXMuYSx0aGlzLmIpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uZCh0aGlzLmIpfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEub2QodGhpcy5iLGUpfSxsLmI9MCxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzEiLDE5MjEpLEkoMTkyMiwzODYsQUUsSFV0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBLWXQodGhpcy5hLGUpfSxQKFllLCJBcnJheVRhYmxlL0FycmF5TWFwLzIiLDE5MjIpLEkoMTkyMCw4MjgsYncsUFl0KSxsLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIkNvbHVtbiJ9LGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFd4KHRoaXMuYix0aGlzLmEsZSl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR25lKHRoaXMuYix0aGlzLmEsZSxuKX0sbC5hPTAsUChZZSwiQXJyYXlUYWJsZS9Sb3ciLDE5MjApLEkoODI5LDgyOCxidyx2MnQpLGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQWXQodGhpcy5hLGUpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUobiw4MyksX0tlKCl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShuLDgzKSxTS2UoKX0sbC5tZD1mdW5jdGlvbigpe3JldHVybiJSb3cifSxQKFllLCJBcnJheVRhYmxlL1Jvd01hcCIsODI5KSxJKDExMjAsMSxNaCxXSHQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnFkKCkmLTI2Mn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucmQoKX0sbC5OYj1mdW5jdGlvbihlKXt0aGlzLmEuTmIobmV3IHFIdChlLHRoaXMuYikpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuc2QobmV3IHpIdChlLHRoaXMuYikpfSxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzEiLDExMjApLEkoMTEyMSwxLFVuLHpIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUiLDExMjEpLEkoMTEyMiwxLFVuLHFIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUiLDExMjIpLEkoMTEyMywxLE1oLHdadCksbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kJiYodGhpcy5iPWtVdCh0aGlzLmIsdGhpcy5kLnJkKCkpKSxrVXQodGhpcy5iLDApfSxsLk5iPWZ1bmN0aW9uKGUpe3RoaXMuZCYmKHRoaXMuZC5OYihlKSx0aGlzLmQ9bnVsbCksdGhpcy5jLk5iKG5ldyAkSHQodGhpcy5lLGUpKSx0aGlzLmI9MH0sbC5zZD1mdW5jdGlvbihlKXtmb3IoOzspe2lmKHRoaXMuZCYmdGhpcy5kLnNkKGUpKXJldHVybiBhQyh0aGlzLmIsSXEpJiYodGhpcy5iPVlwKHRoaXMuYiwxKSksITA7aWYodGhpcy5kPW51bGwsIXRoaXMuYy5zZChuZXcgSEh0KHRoaXMsdGhpcy5lKSkpcmV0dXJuITF9fSxsLmE9MCxsLmI9MCxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3IiLDExMjMpLEkoMTEyNCwxLFVuLEhIdCksbC50ZD1mdW5jdGlvbihlKXtVUWUodGhpcy5hLHRoaXMuYixlKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDExMjQpLEkoMTEyNSwxLFVuLCRIdCksbC50ZD1mdW5jdGlvbihlKXtNWGUodGhpcy5iLHRoaXMuYSxlKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExMjUpLEkoMTExNywxLE1oLHRLdCksbC5xZD1mdW5jdGlvbigpe3JldHVybiAxNjQ2NHx0aGlzLmJ9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnJkKCl9LGwuTmI9ZnVuY3Rpb24oZSl7dGhpcy5hLnhlKG5ldyBWSHQoZSx0aGlzLmMpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnllKG5ldyBHSHQoZSx0aGlzLmMpKX0sbC5iPTAsUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcyIsMTExNyksSSgxMTE4LDEsQUQsR0h0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZCh0aGlzLmIubGQoZSkpfSxQKFllLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQwJFR5cGUiLDExMTgpLEkoMTExOSwxLEFELFZIdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLmxkKGUpKX0sUChZZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMSRUeXBlIiwxMTE5KSxJKDI0NSwxLFBhdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52ZCh1KGUsMjQ1KSl9LGwudmQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PShYdHQoKSxidXQpPzE6ZT09KFF0dCgpLHB1dCk/LTE6KG49KE1qKCksU0kodGhpcy5hLGUuYSkpLG4hPTA/bjpFdCh0aGlzLDUxOSk9PUV0KGUsNTE5KT8wOkV0KHRoaXMsNTE5KT8xOi0xKX0sbC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFQzdCh0aGlzLGUpfSxQKFllLCJDdXQiLDI0NSksSSgxNzYxLDI0NSxQYXQsWHF0KSxsLnZkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT10aGlzPzA6MX0sbC54ZD1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgRXB0KX0sbC55ZD1mdW5jdGlvbihlKXtlLmErPSIr4oieKSJ9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRm8oWGhlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcWQoKSxPM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iK+KIniJ9O3ZhciBwdXQ7UChZZSwiQ3V0L0Fib3ZlQWxsIiwxNzYxKSxJKDUxOSwyNDUsezI0NToxLDUxOToxLDM6MSwzNToxfSxLVXQpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IigiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7UnAoaGMoZSx0aGlzLmEpLDkzKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybn5IaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiBNaigpLFNJKHRoaXMuYSxlKTwwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi8iK3RoaXMuYSsiXFwifSxQKFllLCJDdXQvQWJvdmVWYWx1ZSIsNTE5KSxJKDE3NjAsMjQ1LFBhdCxRcXQpLGwudmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXRoaXM/MDotMX0sbC54ZD1mdW5jdGlvbihlKXtlLmErPSIoLeKIniJ9LGwueWQ9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IEVwdCl9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRm8oWGhlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcWQoKSxPM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iLeKIniJ9O3ZhciBidXQ7UChZZSwiQ3V0L0JlbG93QWxsIiwxNzYwKSxJKDE3NjIsMjQ1LFBhdCxZVXQpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IlsiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7UnAoaGMoZSx0aGlzLmEpLDQxKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiBNaigpLFNJKHRoaXMuYSxlKTw9MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJcXCIrdGhpcy5hKyIvIn0sUChZZSwiQ3V0L0JlbG93VmFsdWUiLDE3NjIpLEkoNTM3LDEsdDApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBlbG4odShyJCh0aGlzLCJ1c2UgT3B0aW9uYWwub3JOdWxsKCkgaW5zdGVhZCBvZiBPcHRpb25hbC5vcihudWxsKSIpLDIwKS5LYygpKX0sUChZZSwiRmx1ZW50SXRlcmFibGUiLDUzNyksSSg0MzMsNTM3LHQwLHVDKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcihscih0aGlzLmEuS2MoKSxuZXcgeikpfSxQKFllLCJGbHVlbnRJdGVyYWJsZS8yIiw0MzMpLEkoMTA0Niw1MzcsdDAsSlZ0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIEJwKHRoaXMpfSxQKFllLCJGbHVlbnRJdGVyYWJsZS8zIiwxMDQ2KSxJKDcwOCwzODYsQUUsdzJ0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbZV0uS2MoKX0sUChZZSwiRmx1ZW50SXRlcmFibGUvMy8xIiw3MDgpLEkoMTk3MiwxLHt9KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuQmQoKS5iKX0sUChZZSwiRm9yd2FyZGluZ09iamVjdCIsMTk3MiksSSgxOTczLDE5NzIsUWhlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCksYkh0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKSx2SHQoKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuQ2QoKSx3SHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLG1IdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKS5RYyhlKX0sUChZZSwiRm9yd2FyZGluZ0NvbGxlY3Rpb24iLDE5NzMpLEkoMTk4MCwyOCxJeHQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FZCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnJ5KHRoaXMsZSwhMSl9LGwuRGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nYygpKXtjYXNlIDA6cmV0dXJuIEdtKCksR20oKSx2dXQ7Y2FzZSAxOnJldHVybiBHbSgpLG5ldyBTbnQoQXIodGhpcy5FZCgpLlBiKCkpKTtkZWZhdWx0OnJldHVybiBuZXcgRll0KHRoaXMsdGhpcy5QYygpKX19LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiSW1tdXRhYmxlQ29sbGVjdGlvbiIsMTk4MCksSSg3MTIsMTk4MCxJeHQseHB0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIEt4KHRoaXMuYS5LYygpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdGhpcy5hLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gS3godGhpcy5hLktjKCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUNvbGxlY3Rpb24iLDcxMiksSSgxNTIsMTk4MCxTXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVkKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GZCgwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5GZChlKX0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLkdkKGUsbil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWHBuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gb2NuKHRoaXMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPy0xOnlmbih0aGlzLGUpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmQoMCl9LGwuRmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE8ydCh0aGlzLGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLkdkPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHl6KChyPW5ldyBpR3QodGhpcyksbmV3IEtkKHIsZSxuKSkpfTt2YXIgdnV0O1AoWWUsIkltbXV0YWJsZUxpc3QiLDE1MiksSSgyMDA2LDE1MixTXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiBLeCh0aGlzLkhkKCkuS2MoKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXoodGhpcy5IZCgpLmJkKGUsbikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ0aGlzLkhkKCkuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5IZCgpLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBEcCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuSGQoKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5YYyhlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhkKCkuZGMoKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBLeCh0aGlzLkhkKCkuS2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IZCgpLmdjKCl9LGwuR2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXoodGhpcy5IZCgpLmJkKGUsbikpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGQoKS5RYyhQdChYbixJZSwxLHRoaXMuSGQoKS5nYygpLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5IZCgpKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUxpc3QiLDIwMDYpLEkoNzE0LDEsTEUpLGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gUHYodGhpcyl9LGwud2M9ZnVuY3Rpb24oZSl7VUModGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBObnQodGhpcyl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54YyhlKSE9bnVsbH0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MZCgpLkhjKGUpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6enQodGhpcyl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHF6dCh0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSmNuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHYodGhpcykuSGIoKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQUtlKCl9LGwuQmM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBJMG4odGhpcyl9LGwuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lP3RoaXMuZTp0aGlzLmU9dGhpcy5LZCgpfSxsLmM9bnVsbCxsLmQ9bnVsbCxsLmU9bnVsbDt2YXIgaGdlO1AoWWUsIkltbXV0YWJsZU1hcCIsNzE0KSxJKDcxNSw3MTQsTEUpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZIdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBjR3QodGhpcy5iLGUpfSxsLklkPWZ1bmN0aW9uKCl7cmV0dXJuIEJyZShuZXcgbTkodGhpcykpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIEJyZShiWHQodGhpcy5iKSl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHB0KHBYdCh0aGlzLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdUd0KHRoaXMuYixlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gd0ModGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMuZGMoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYi5jKX0sUChZZSwiRm9yd2FyZGluZ0ltbXV0YWJsZU1hcCIsNzE1KSxJKDE5NzQsMTk3MyxGYXQpLGwuQmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZCgpfSxsLkNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXN8fHRoaXMuTWQoKS5GYihlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLk1kKCkuSGIoKX0sUChZZSwiRm9yd2FyZGluZ1NldCIsMTk3NCksSSgxMDY5LDE5NzQsRmF0LG05KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMuYS5iKX0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB4OCh0aGlzLmEuYil9LGwuSGM9ZnVuY3Rpb24oZSl7aWYoRXQoZSw0MikmJnUoZSw0MikuY2QoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIG9HdCh4OCh0aGlzLmEuYiksZSl9Y2F0Y2gobil7aWYobj1XaShuKSxFdChuLDIwNSkpcmV0dXJuITE7dGhyb3cgcnQobil9fSxsLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMuYS5iKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1RWHQoeDgodGhpcy5hLmIpLGUpLHg4KHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJkppKG4seDgodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxQKFllLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwNjkpLEkoMTk4MSwxOTgwLE1FKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRjR0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gc25lKHRoaXMpfSxQKFllLCJJbW11dGFibGVTZXQiLDE5ODEpLEkoNzAzLDE5ODEsTUUpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gS3gobmV3IEEodGhpcy5hLmIuS2MoKSkpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZwTSh0aGlzLmEsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHNHdCh0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hLmIpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gS3gobmV3IEEodGhpcy5hLmIuS2MoKSkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gYUd0KHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyh0aGlzLmEuYil9LFAoWWUsIkZvcndhcmRpbmdJbW11dGFibGVTZXQiLDcwMyksSSgxOTc1LDE5NzQsWmhlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sUChZZSwiRm9yd2FyZGluZ1NvcnRlZFNldCIsMTk3NSksSSg1MzMsMTk3OSxMRSxIeiksbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBRZXQoZXx8KHRoaXMuZD1uZXcgY3godGhpcykpKX0sbC4kYj1mdW5jdGlvbigpe2NJKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiEhSEModGhpcyxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gcGVlKHRoaXMsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdVdCh0aGlzLHRoaXMpfSxsLndjPWZ1bmN0aW9uKGUpe2NRdCh0aGlzLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0NCh0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnEodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhDKHRoaXMsZSxTcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSksbj8odjQodGhpcyxuKSxuLmU9bnVsbCxuLmM9bnVsbCxuLmkpOm51bGx9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLnBkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBRZXQoZXx8KHRoaXMuZD1uZXcgY3godGhpcykpKX0sbC5mPTAsbC5nPTAsbC5pPTAsUChZZSwiSGFzaEJpTWFwIiw1MzMpLEkoNTM0LDEscmEpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBTWnQodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZighU1p0KHRoaXMpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIGU9dGhpcy5jLHRoaXMuYz1lLmMsdGhpcy5mPWUsLS10aGlzLmQsdGhpcy5OZChlKX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZS5nIT10aGlzLmIpdGhyb3cgcnQobmV3IGVoKTtuNCghIXRoaXMuZiksdjQodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxsLmI9MCxsLmQ9MCxsLmY9bnVsbCxQKFllLCJIYXNoQmlNYXAvSXRyIiw1MzQpLEkoMTAxMSw1MzQscmEsR1V0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWEh0KHRoaXMsZSl9LFAoWWUsIkhhc2hCaU1hcC8xIiwxMDExKSxJKDEwMTIsMzQ1LE1xLFhIdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuaX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIHI9dGhpcy5hLmkscz1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxzPT10aGlzLmEuZiYmKEd0KGUpPT09R3Qocil8fGUhPW51bGwmJnlpKGUscikpP2U6KCRuZSghR0ModGhpcy5iLmEsZSxzKSxlKSx2NCh0aGlzLmIuYSx0aGlzLmEpLG49bmV3IFhqKHRoaXMuYS5nLHRoaXMuYS5hLGUscyksb0QodGhpcy5iLmEsbix0aGlzLmEpLHRoaXMuYS5lPW51bGwsdGhpcy5hLmM9bnVsbCx0aGlzLmIuYj10aGlzLmIuYS5nLHRoaXMuYi5mPT10aGlzLmEmJih0aGlzLmIuZj1uKSx0aGlzLmE9bixyKX0sUChZZSwiSGFzaEJpTWFwLzEvTWFwRW50cnkiLDEwMTIpLEkoMjM4LDM0NSx7MzQ1OjEsMjM4OjEsMzoxLDQyOjF9LF92KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiSW1tdXRhYmxlRW50cnkiLDIzOCksSSgzMTcsMjM4LHszNDU6MSwzMTc6MSwyMzg6MSwzOjEsNDI6MX0sWGopLGwuYT0wLGwuZj0wO3ZhciB3dXQ9UChZZSwiSGFzaEJpTWFwL0JpRW50cnkiLDMxNyk7SSg2MTAsMTk3OSxMRSxjeCksbC5BYz1mdW5jdGlvbihlKXtWQyh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcy5hKX0sbC4kYj1mdW5jdGlvbigpe2NJKHRoaXMuYSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHBlZSh0aGlzLmEsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZVdCh0aGlzLHRoaXMuYSl9LGwud2M9ZnVuY3Rpb24oZSl7QXIoZSksY1F0KHRoaXMuYSxuZXcgSkwoZSkpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0eih0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRZXQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZW1uKHRoaXMuYSxlLG4sITEpfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUdDKHRoaXMuYSxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKSxuPyh2NCh0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxsLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaZXQodGhpcy5hKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UiLDYxMCksSSgxMDA4LDUzNCxyYSxWVXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRSHQodGhpcyxlKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAwOCksSSgxMDA5LDM0NSxNcSxRSHQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLml9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmd9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBzPXRoaXMuYS5nLG49U3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSksbj09dGhpcy5hLmEmJihHdChlKT09PUd0KHMpfHxlIT1udWxsJiZ5aShlLHMpKT9lOigkbmUoIUhDKHRoaXMuYi5hLmEsZSxuKSxlKSx2NCh0aGlzLmIuYS5hLHRoaXMuYSkscj1uZXcgWGooZSxuLHRoaXMuYS5pLHRoaXMuYS5mKSx0aGlzLmE9cixvRCh0aGlzLmIuYS5hLHIsbnVsbCksdGhpcy5iLmI9dGhpcy5iLmEuYS5nLHMpfSxQKFllLCJIYXNoQmlNYXAvSW52ZXJzZS8xL0ludmVyc2VFbnRyeSIsMTAwOSksSSg2MTEsNTMyLGp1LFFldCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTnF0KHRoaXMuYS5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1HQyh0aGlzLmEuYSxlLFNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpKSxuPyh2NCh0aGlzLmEuYSxuKSwhMCk6ITF9LFAoWWUsIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQiLDYxMSksSSgxMDA3LDUzNCxyYSxOcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldC8xIiwxMDA3KSxJKDEwMTAsMSx7fSxKTCksbC5PZD1mdW5jdGlvbihlLG4pe2FLZSh0aGlzLmEsZSxuKX0sUChZZSwiSGFzaEJpTWFwL0ludmVyc2UvbGFtYmRhJDAkVHlwZSIsMTAxMCksSSg2MDksNTMyLGp1LFpldCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUHF0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49SEModGhpcy5hLGUsU3IoQ2EoZTAsV2QoU3IoQ2EoZT09bnVsbD8wOkhpKGUpLG4wKSksMTUpKSkpLG4/KHY0KHRoaXMuYSxuKSxuLmU9bnVsbCxuLmM9bnVsbCwhMCk6ITF9LFAoWWUsIkhhc2hCaU1hcC9LZXlTZXQiLDYwOSksSSgxMDA2LDUzNCxyYSxQcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ30sUChZZSwiSGFzaEJpTWFwL0tleVNldC8xIiwxMDA2KSxJKDEwOTMsNjE5LHkyKSxQKFllLCJIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxMDkzKSxJKDI2NSwxMDkzLHkyLEh2KSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4UihRbSh0aGlzLmEpKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgeFIoUW0odGhpcy5hKSl9LGwuYT0yLFAoWWUsIkhhc2hNdWx0aW1hcCIsMjY1KSxJKDE5OTksMTUyLFNfKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBkKCkuSGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmdjKCl9LFAoWWUsIkltbXV0YWJsZUFzTGlzdCIsMTk5OSksSSgxOTMxLDcxNSxMRSksbC5MZD1mdW5jdGlvbigpe3JldHVybiBoZCgpLG5ldyB4eCh0aGlzLmEpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGhkKCksbmV3IHh4KHRoaXMuYSl9LGwucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHgodGhpcy5hKX0sUChZZSwiSW1tdXRhYmxlQmlNYXAiLDE5MzEpLEkoMTk3NywxLHt9KSxQKFllLCJJbW11dGFibGVDb2xsZWN0aW9uL0J1aWxkZXIiLDE5NzcpLEkoMTAyMiw3MDMsTUUsRnF0KSxQKFllLCJJbW11dGFibGVFbnVtU2V0IiwxMDIyKSxJKDk2OSwzODYsQUUsSld0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LFAoWWUsIkltbXV0YWJsZUxpc3QvMSIsOTY5KSxJKDk2OCwxOTc3LHt9LE9XdCksUChZZSwiSW1tdXRhYmxlTGlzdC9CdWlsZGVyIiw5NjgpLEkoNjE0LDE5OCxTRSx0TSksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5jZCgpfSxQKFllLCJJbW11dGFibGVNYXAvMSIsNjE0KSxJKDEwNDEsMSx7fSxqKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmNkKCl9LFAoWWUsIkltbXV0YWJsZU1hcC8ybWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMDQxKSxJKDEwNDAsMSx7fSxOV3QpLFAoWWUsIkltbXV0YWJsZU1hcC9CdWlsZGVyIiwxMDQwKSxJKDJlMywxOTgxLE1FKSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UHYodGhpcy5hKS5FZCgpLG5ldyB0TShlKX0sbC5EZD1mdW5jdGlvbigpe3JldHVybiBuZXcga3B0KHRoaXMpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKEFyKGUpLHI9dGhpcy5nYygpLG49MDtuPHI7bisrKWUudGQodShld3QoUHYodGhpcy5hKSkuWGIobiksNDIpLmNkKCkpfSxsLkVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5jLGV8fCh0aGlzLmM9bmV3IGtwdCh0aGlzKSkpLkVkKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gX250KHRoaXMuZ2MoKSwxMjk2LG5ldyBpdHQodGhpcykpfSxQKFllLCJJbmRleGVkSW1tdXRhYmxlU2V0IiwyZTMpLEkoMTE4MCwyZTMsTUUsenp0KSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UHYodGhpcy5hKS5FZCgpLG5ldyB0TShlKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLFVDKHRoaXMuYSxuZXcgcnR0KGUpKX0sbC5FZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVB2KHRoaXMuYSkuRWQoKSxuZXcgdE0oZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gVk0oUHYodGhpcy5hKS5OYygpLG5ldyBqKX0sUChZZSwiSW1tdXRhYmxlTWFwS2V5U2V0IiwxMTgwKSxJKDExODEsMSx7fSxydHQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtoZCgpLHRoaXMuYS50ZChlKX0sUChZZSwiSW1tdXRhYmxlTWFwS2V5U2V0L2xhbWJkYSQwJFR5cGUiLDExODEpLEkoMTE3OCwxOTgwLEl4dCxxenQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVudCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcTFuKG5ldyBFbnQodGhpcyksZSl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVudCh0aGlzKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBWTShQdih0aGlzLmEpLk5jKCksbmV3IFIpfSxQKFllLCJJbW11dGFibGVNYXBWYWx1ZXMiLDExNzgpLEkoMTE3OSwxLHt9LFIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sUChZZSwiSW1tdXRhYmxlTWFwVmFsdWVzLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTE3OSksSSg2MjYsMTk4LFNFLEVudCksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5kZCgpfSxQKFllLCJJbW11dGFibGVNYXBWYWx1ZXMvMSIsNjI2KSxJKDExODIsMSx7fSxpdHQpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFJZdCh0aGlzLmEsZSl9LFAoWWUsIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTE4MiksSSg3NTIsMTk5OSxTXyxrcHQpLGwuUGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBSWXQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LFAoWWUsIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNzUyKSxJKDQ0LDEse30seiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIwKS5LYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUChZZSwiSXRlcmFibGVzLzEwIiw0NCksSSgxMDQyLDUzNyx0MCxqS3QpLGwuSmM9ZnVuY3Rpb24oZSl7QXIoZSksdGhpcy5iLkpjKG5ldyBaSHQodGhpcy5hLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBpMnQodGhpcyl9LFAoWWUsIkl0ZXJhYmxlcy80IiwxMDQyKSxJKDEwNDMsMSxVbixaSHQpLGwudGQ9ZnVuY3Rpb24oZSl7U1llKHRoaXMuYix0aGlzLmEsZSl9LFAoWWUsIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNDMpLEkoMTA0NCw1MzcsdDAsJEt0KSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHZhKHRoaXMuYSxuZXcgS0h0KGUsdGhpcy5iKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbHIobmV3IGVyKHRoaXMuYSksdGhpcy5iKX0sUChZZSwiSXRlcmFibGVzLzUiLDEwNDQpLEkoMTA0NSwxLFVuLEtIdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQobFV0KGUpKX0sUChZZSwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA0NSksSSgxMDcxLDE5OCxTRSxzdHQpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBiKCl9LFAoWWUsIkl0ZXJhdG9ycy8xIiwxMDcxKSxJKDEwNzIsNjk5LFNFLFlIdCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTt0aGlzLmIuT2IoKTspaWYoZT10aGlzLmIuUGIoKSx0aGlzLmEuTGIoZSkpcmV0dXJuIGU7cmV0dXJuIHRoaXMuZT0yLG51bGx9LFAoWWUsIkl0ZXJhdG9ycy81IiwxMDcyKSxJKDQ4NywxLHJhKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5RZCh0aGlzLmIuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmIuUWIoKX0sUChZZSwiVHJhbnNmb3JtZWRJdGVyYXRvciIsNDg3KSxJKDEwNzMsNDg3LHJhLFVVdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLktiKGUpfSxQKFllLCJJdGVyYXRvcnMvNiIsMTA3MyksSSg3MTcsMTk4LFNFLFVCKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYX0sbC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYSl0aHJvdyBydChuZXcgbGMpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5ifSxsLmE9ITEsUChZZSwiSXRlcmF0b3JzLzkiLDcxNyksSSgxMDcwLDM4NixBRSx1WXQpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYVt0aGlzLmIrZV19LGwuYj0wO3ZhciBmZ2U7UChZZSwiSXRlcmF0b3JzL0FycmF5SXRyIiwxMDcwKSxJKDM5LDEsezM5OjEsNDc6MX0sYXIpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB6cih0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBMcih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe240KCEhdGhpcy5jKSx0aGlzLmMuUWIoKSx0aGlzLmM9bnVsbH0sUChZZSwiSXRlcmF0b3JzL0NvbmNhdGVuYXRlZEl0ZXJhdG9yIiwzOSksSSgyMiwxLHszOjEsMzU6MSwyMjoxfSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gJHF0KHRoaXMsdShlLDIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEl2KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNudCh0aGlzKX0sbC5nPTA7dmFyIEhyPVAoWG8sIkVudW0iLDIyKTtJKDUzOCwyMix7NTM4OjEsMzoxLDM1OjEsMjI6MSw0NzoxfSxYVXQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5RYj1mdW5jdGlvbigpe240KCExKX07dmFyIG11dCxkZ2U9anIoWWUsIkl0ZXJhdG9ycy9FbXB0eU1vZGlmaWFibGVJdGVyYXRvciIsNTM4LEhyLHhlbixuUWUpLGdnZTtJKDE4MzQsNjE5LHkyKSxQKFllLCJMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxODM0KSxJKDE4MzUsMTgzNCx5MixTcmUpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5udChRbSh0aGlzLmIpKX0sbC4kYj1mdW5jdGlvbigpe1EkKHRoaXMpLGNNKHRoaXMuYSx0aGlzLmEpfSxsLmdkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBubnQoUW0odGhpcy5iKSl9LGwuaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmcmUodGhpcyxlLHRoaXMuYil9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkydCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBuZXcgX24oKGU9dGhpcy5nLHUoZXx8KHRoaXMuZz1uZXcgenB0KHRoaXMpKSwyMSkpLDE3KX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSxlfHwodGhpcy5pPW5ldyBXMyh0aGlzLHRoaXMuYykpfSxsLm5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVcHQobmV3IHkydCh0aGlzKSl9LGwub2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gVk0obmV3IF9uKChlPXRoaXMuZyx1KGV8fCh0aGlzLmc9bmV3IHpwdCh0aGlzKSksMjEpKSwxNyksbmV3IEspfSxsLmI9MixQKFllLCJMaW5rZWRIYXNoTXVsdGltYXAiLDE4MzUpLEkoMTgzOCwxLHt9LEspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sUChZZSwiTGlua2VkSGFzaE11bHRpbWFwLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTgzOCksSSg4MjQsMSxyYSx5MnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB6YW4odGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX0sbC5RYj1mdW5jdGlvbigpe240KCEhdGhpcy5jKSxpWnQodGhpcy5iLHRoaXMuYy5nLHRoaXMuYy5pKSx0aGlzLmM9bnVsbH0sUChZZSwiTGlua2VkSGFzaE11bHRpbWFwLzEiLDgyNCksSSgzMzAsMjM4LHszNDU6MSwyMzg6MSwzMzA6MSwyMDIwOjEsMzoxLDQyOjF9LGt3dCksbC5SZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuU2Q9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuVGQ9ZnVuY3Rpb24oZSl7dGhpcy5mPWV9LGwuZD0wO3ZhciBwZ2U9UChZZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnkiLDMzMCk7SSgxODM2LDE5NzAsezIwMjA6MSwyMDoxLDI4OjEsMTQ6MSwyMToxfSxmcmUpLGwuRmM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtmb3IoaD1TcihDYShlMCxXZChTcihDYShlPT1udWxsPzA6SGkoZSksbjApKSwxNSkpKSxuPWgmdGhpcy5iLmxlbmd0aC0xLG89dGhpcy5iW25dLHI9bztyO3I9ci5hKWlmKHIuZD09aCYmZmQoci5pLGUpKXJldHVybiExO3JldHVybiBzPW5ldyBrd3QodGhpcy5jLGUsaCxvKSxLcXQodGhpcy5kLHMpLHMuZj10aGlzLHRoaXMuZD1zLGNNKHRoaXMuZy5hLmIscyksY00ocyx0aGlzLmcuYSksdGhpcy5iW25dPXMsKyt0aGlzLmYsKyt0aGlzLmUsajFuKHRoaXMpLCEwfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoeU0odGhpcy5iLG51bGwpLHRoaXMuZj0wLGU9dGhpcy5hO2UhPXRoaXM7ZT1lLlJkKCkpbj11KGUsMzMwKSxjTShuLmIsbi5lKTt0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcywrK3RoaXMuZX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPVNyKENhKGUwLFdkKFNyKENhKGU9PW51bGw/MDpIaShlKSxuMCkpLDE1KSkpLG49dGhpcy5iW3ImdGhpcy5iLmxlbmd0aC0xXTtuO249bi5hKWlmKG4uZD09ciYmZmQobi5pLGUpKXJldHVybiEwO3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihBcihlKSxuPXRoaXMuYTtuIT10aGlzO249bi5SZCgpKWUudGQodShuLDMzMCkuaSl9LGwuUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpWHQodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjZSh0aGlzLGUpfSxsLlNkPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLlRkPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5lPTAsbC5mPTAsUChZZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlU2V0IiwxODM2KSxJKDE4MzcsMSxyYSxpWHQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBHdnQodGhpcyksdGhpcy5iIT10aGlzLmN9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKEd2dCh0aGlzKSx0aGlzLmI9PXRoaXMuYyl0aHJvdyBydChuZXcgbGMpO3JldHVybiBlPXUodGhpcy5iLDMzMCksbj1lLmksdGhpcy5kPWUsdGhpcy5iPWUuZixufSxsLlFiPWZ1bmN0aW9uKCl7R3Z0KHRoaXMpLG40KCEhdGhpcy5kKSxlY2UodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGwuYT0wLFAoWWUsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxODM3KSxJKDc2NiwxOTg2LHkyLFhWdCksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPW5ldyB3YnQodGhpcykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFaXQodGhpcyxlKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhldCh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBlbXQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3FZdCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gbEd0KHRoaXMsZSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdidCh0aGlzKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcHR0KHRoaXMpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGV0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiBlbXQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuYz0wLGwuZD0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcCIsNzY2KSxJKDUyLDI4LElFKSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmModGhpcy5nYygpLGUpLCEwfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO2ZvcihPbihuKSxyPSExLG89bi5LYygpO28uT2IoKTspcz1vLlBiKCksdGhpcy5WYyhlKysscykscj0hMDtyZXR1cm4gcn0sbC4kYj1mdW5jdGlvbigpe3RoaXMuVWQoMCx0aGlzLmdjKCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBwNXQodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQodGhpcyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmeCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlpjKDApfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaGEodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgeWcoIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0sbC5VZD1mdW5jdGlvbihlLG4pe3ZhciByLHM7Zm9yKHM9dGhpcy5aYyhlKSxyPWU7cjxuOysrcilzLlBiKCkscy5RYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IHlnKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEtkKHRoaXMsZSxuKX0sbC5qPTAsUChwciwiQWJzdHJhY3RMaXN0Iiw1MiksSSgxOTY0LDUyLElFKSxsLlZjPWZ1bmN0aW9uKGUsbil7aDgodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGdyZSh0aGlzLGUsbil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFFmKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aYygwKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4geXN0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3I9dGhpcy5aYyhlKTt0cnl7cmV0dXJuIHM9ci5QYigpLHIuV2Iobiksc31jYXRjaChvKXt0aHJvdyBvPVdpKG8pLEV0KG8sMTA5KT9ydChuZXcgbW8oIkNhbid0IHNldCBlbGVtZW50ICIrZSkpOnJ0KG8pfX0sUChwciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMTk2NCksSSg2MzYsMTk2NCxJRSxoZXQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRXdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShKbih0aGlzLmEuYix0aGlzLmIpLDI4MyksZT9lLmE6MH0sUChZZSwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDYzNiksSSgxMjk3LDE5NzAsanUscHR0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBsR3QodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0bmUodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4hZW10KHRoaXMuYSxlKS5hLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hLmIpfSxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEyOTcpLEkoMTI5NiwxLHJhLHRuZSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEh2dCh0aGlzKSwhIXRoaXMuY30sbC5QYj1mdW5jdGlvbigpe0h2dCh0aGlzKSxFMnQodGhpcy5jKSx0aGlzLmE9dGhpcy5jLE5zKHRoaXMuZCx0aGlzLmEuYSk7ZG8gdGhpcy5jPXRoaXMuYy5iO3doaWxlKHRoaXMuYyYmIU5zKHRoaXMuZCx0aGlzLmMuYSkpO3JldHVybiB0aGlzLmEuYX0sbC5RYj1mdW5jdGlvbigpe0h2dCh0aGlzKSxuNCghIXRoaXMuYSksT2oobmV3IFZydCh0aGlzLmUsdGhpcy5hLmEpKSx0aGlzLmE9bnVsbCx0aGlzLmI9dGhpcy5lLmN9LGwuYj0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yIiwxMjk2KSxJKDI4MywxLHsyODM6MX0sSXd0KSxsLmE9MCxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvS2V5TGlzdCIsMjgzKSxJKDEyOTUsMzQ1LE1xLEpIdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuZix0aGlzLmY9ZSxufSxQKFllLCJMaW5rZWRMaXN0TXVsdGltYXAvTm9kZSIsMTI5NSksSSg1NjAsMSxKZCxWcnQsS2FlKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhpcy5lPUc1dCh0aGlzLmYsdGhpcy5iLGUsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQnd0KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB5UXQodGhpcyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGwuUWI9ZnVuY3Rpb24oKXtuNCghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLEdnbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0sbC5XYj1mdW5jdGlvbihlKXtrMnQoISF0aGlzLmEpLHRoaXMuYS5mPWV9LGwuZD0wLFAoWWUsIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjApLEkoMTAxOCw1MixJRSksbC5WYz1mdW5jdGlvbihlLG4pe3RoaXMuYS5WYyhlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5XYyhlLG4pfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSGMoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLiRjKGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxQKFllLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDE4KSxJKDEwMTksMTAxOCx0ZmUpLFAoWWUsIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDE5KSxJKDEwMjEsMTAxOSx0ZmUsaUd0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWmMoZSl9LFAoWWUsIkxpc3RzLzEiLDEwMjEpLEkoMTMxLDUyLHsxMzE6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE1tKSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhpcy5hLlZjKHY4KHRoaXMsZSksbil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhiKGJ3dCh0aGlzLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB6d3QodGhpcywwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gend0KHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS4kYyhid3QodGhpcyxlKSl9LGwuVWQ9ZnVuY3Rpb24oZSxuKXsoaFp0KGUsbix0aGlzLmEuZ2MoKSksYTIodGhpcy5hLmJkKHY4KHRoaXMsbiksdjgodGhpcyxlKSkpKS4kYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhid3QodGhpcyxlKSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBoWnQoZSxuLHRoaXMuYS5nYygpKSxhMih0aGlzLmEuYmQodjgodGhpcyxuKSx2OCh0aGlzLGUpKSl9LFAoWWUsIkxpc3RzL1JldmVyc2VMaXN0IiwxMzEpLEkoMjgwLDEzMSx7MTMxOjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LG12KSxQKFllLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMjgwKSxJKDEwMjAsMSxKZCx0R3QpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aGlzLmMuUmIoZSksdGhpcy5jLlViKCksdGhpcy5hPSExfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5TYigpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGdKdCh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB2OCh0aGlzLmIsdGhpcy5jLlRiKCkpfSxsLlViPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYy5PYigpKXRocm93IHJ0KG5ldyBsYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmMuUGIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB2OCh0aGlzLmIsdGhpcy5jLlRiKCkpLTF9LGwuUWI9ZnVuY3Rpb24oKXtuNCh0aGlzLmEpLHRoaXMuYy5RYigpLHRoaXMuYT0hMX0sbC5XYj1mdW5jdGlvbihlKXtrMnQodGhpcy5hKSx0aGlzLmMuV2IoZSl9LGwuYT0hMSxQKFllLCJMaXN0cy9SZXZlcnNlTGlzdC8xIiwxMDIwKSxJKDQzMiw0ODcscmEsRDkpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFBSKGUpfSxQKFllLCJNYXBzLzEiLDQzMiksSSg2OTgsNDg3LHJhLFVwdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQyKS5kZCgpfSxQKFllLCJNYXBzLzIiLDY5OCksSSg5NjIsNDg3LHJhLEpVdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IF92KGUsZVV0KHRoaXMuYSxlKSl9LFAoWWUsIk1hcHMvMyIsOTYyKSxJKDk1OSwxOTcxLGp1LHV4KSxsLkpjPWZ1bmN0aW9uKGUpe2hLZSh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmtjKCl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5sYygpfSxQKFllLCJNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcC8xIiw5NTkpLEkoOTYwLDEse30sZ3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKGUpfSxQKFllLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NjApLEkoOTU4LDI4LHd5LHJHdCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuSmM9ZnVuY3Rpb24oZSl7QXIoZSksdGhpcy5hLndjKG5ldyBjdHQoZSkpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVcHQodGhpcy5hLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scjt0cnl7cmV0dXJuIHJ5KHRoaXMsZSwhMCl9Y2F0Y2gocyl7aWYocz1XaShzKSxFdChzLDQxKSl7Zm9yKHI9dGhpcy5hLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDIpLGZkKGUsbi5kZCgpKSlyZXR1cm4gdGhpcy5hLkJjKG4uY2QoKSksITA7cmV0dXJuITF9ZWxzZSB0aHJvdyBydChzKX19LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LFAoWWUsIk1hcHMvVmFsdWVzIiw5NTgpLEkoOTYxLDEse30sY3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKG4pfSxQKFllLCJNYXBzL1ZhbHVlcy9sYW1iZGEkMCRUeXBlIiw5NjEpLEkoNzM2LDE5ODcsYncsd2J0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/dGhpcy5hLmNjKGUpOm51bGx9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKT90aGlzLmEuZmMoZSk6bnVsbH0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSl9LGwuRWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG90dCh0aGlzKX0sbC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sUChZZSwiTXVsdGltYXBzL0FzTWFwIiw3MzYpLEkoMTEwNCwxOTcxLGp1LG90dCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBBWGUodGhpcy5hLmEuZWMoKSxuZXcgdXR0KHRoaXMpKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGZpZSh0aGlzLGUpPyhuPXUoZSw0MiksTEtlKHRoaXMuYSxuLmNkKCkpLCEwKTohMX0sUChZZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0IiwxMTA0KSxJKDExMDgsMSx7fSx1dHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGVVdCh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUChZZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0LzEiLDExMDgpLEkoNTQzLDE5ODksezU0MzoxLDgzNToxLDIwOjEsMjg6MSwxNDoxfSxsdHQpLGwuJGI9ZnVuY3Rpb24oKXtRJCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBoSHQodGhpcy5hLGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0FyKGUpLHZhKFNDKHRoaXMuYSksbmV3IGZ0dChlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEQ5KFNDKHRoaXMuYSkuYS5rYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBWTShTQyh0aGlzLmEpLk5jKCksbmV3IGl0KX0sUChZZSwiTXVsdGltYXBzL0tleXMiLDU0MyksSSgxMTA2LDEse30saXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuY2QoKX0sUChZZSwiTXVsdGltYXBzL0tleXMvMG1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTEwNiksSSgxMTA1LDQ4NyxyYSxCcXQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBodHQodShlLDQyKSl9LFAoWWUsIk11bHRpbWFwcy9LZXlzLzEiLDExMDUpLEkoMTk5MCwxLHs0MTY6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNDkyKT8obj11KGUsNDE2KSx1KHRoaXMuYS5kZCgpLDE0KS5nYygpPT11KG4uYS5kZCgpLDE0KS5nYygpJiZmZCh0aGlzLmEuY2QoKSxuLmEuY2QoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5hLmNkKCksKGU9PW51bGw/MDpIaShlKSledSh0aGlzLmEuZGQoKSwxNCkuZ2MoKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49ZEModGhpcy5hLmNkKCkpLGU9dSh0aGlzLmEuZGQoKSwxNCkuZ2MoKSxlPT0xP246bisiIHggIitlfSxQKFllLCJNdWx0aXNldHMvQWJzdHJhY3RFbnRyeSIsMTk5MCksSSg0OTIsMTk5MCx7NDkyOjEsNDE2OjF9LGh0dCksUChZZSwiTXVsdGltYXBzL0tleXMvMS8xIiw0OTIpLEkoMTEwNywxLFVuLGZ0dCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodShlLDQyKS5jZCgpKX0sUChZZSwiTXVsdGltYXBzL0tleXMvbGFtYmRhJDEkVHlwZSIsMTEwNyksSSgxMTEwLDEsVW4sc3QpLGwudGQ9ZnVuY3Rpb24oZSl7THRuKHUoZSw0MTYpKX0sUChZZSwiTXVsdGlzZXQvbGFtYmRhJDAkVHlwZSIsMTExMCksSSg3MzcsMSxVbixkdHQpLGwudGQ9ZnVuY3Rpb24oZSl7VWFuKHRoaXMuYSx1KGUsNDE2KSl9LFAoWWUsIk11bHRpc2V0L2xhbWJkYSQxJFR5cGUiLDczNyksSSgxMTExLDEse30saHQpLFAoWWUsIk11bHRpc2V0cy8wbWV0aG9kcmVmJGFkZCRUeXBlIiwxMTExKSxJKDczOCwxLHt9LHd0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGaW4odShlLDQxNikpfSxQKFllLCJNdWx0aXNldHMvbGFtYmRhJDMkVHlwZSIsNzM4KSxJKDIwMDgsMSxfRCksUChZZSwiUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwyMDA4KSxJKDUxNCwyMDA4LHsxNjk6MSw1MTQ6MSwzOjEsNDU6MX0sTjN0KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBDWXQodGhpcyx1KGUsMzUpKX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQ1l0KHRoaXMsdShlLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEV0KGUsNTE0KT8obj11KGUsNTE0KSxUM3QodGhpcy5hLG4uYSkmJlQzdCh0aGlzLmIsbi5iKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gT1p0KHRoaXMuYSx0aGlzLmIpfSxQKFllLCJSYW5nZSIsNTE0KSxJKDc3OCwxOTk5LFNfLEZZdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gTzJ0KHRoaXMuYixlKX0sbC5QZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIERwKHRoaXMuYixlKX0sbC5GZD1mdW5jdGlvbihlKXtyZXR1cm4gTzJ0KHRoaXMuYixlKX0sUChZZSwiUmVndWxhckltbXV0YWJsZUFzTGlzdCIsNzc4KSxJKDY0NiwyMDA2LFNfLG9ydCksbC5IZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LFAoWWUsIlJlZ3VsYXJJbW11dGFibGVMaXN0Iiw2NDYpLEkoNjE2LDcxNSxMRSxadHQpLFAoWWUsIlJlZ3VsYXJJbW11dGFibGVNYXAiLDYxNiksSSg3MTYsNzAzLE1FLHlidCk7dmFyIEs4dDtQKFllLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MTYpLEkoMTk3NixOMSxqdSksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ3d0KHRoaXMuYSx0aGlzLmIpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sUChZZSwiU2V0cy9TZXRWaWV3IiwxOTc2KSxJKDk2MywxOTc2LGp1LGVHdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ3d0KHRoaXMuYSx0aGlzLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBNbnQodGhpcy5hLGUpJiZ0aGlzLmIuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIElJKHRoaXMuYSxlKSYmdGhpcy5iLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLmIsdGhpcy5hKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5hLDEpKSxuZXcga2godGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gQUkodGhpcyl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gUmkobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYSwxKSksbmV3IHprKHRoaXMuYikpfSxQKFllLCJTZXRzLzIiLDk2MyksSSg3MDAsNjk5LFNFLEN3dCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTtjMnQodGhpcy5hKTspaWYoZT1GQyh0aGlzLmEpLHRoaXMuYy5IYyhlKSlyZXR1cm4gZTtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sUChZZSwiU2V0cy8yLzEiLDcwMCksSSg5NjQsMSx1aSx6ayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxQKFllLCJTZXRzLzIvNG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NjQpLEkoOTY1LDEsdWksa2gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5IYyhlKX0sUChZZSwiU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTY1KSxJKDYwNywxOTc1LHs2MDc6MSwzOjEsMjA6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sblF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkpjPWZ1bmN0aW9uKGUpe3RoaXMuYS5KYyhlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sUChZZSwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYwNyksSSgxOTMyLDE5MzEsTEUsbFh0KSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIGhkKCksbmV3IHh4KHRoaXMuYSl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gaGQoKSxuZXcgeHgodGhpcy5hKX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBoZCgpLG5ldyB4eCh0aGlzLmEpfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMTkzMiksSSg2NDcsMjAwNixTXyxTbnQpLGwuSGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NDcpLEkoMzUwLDE5ODEsTUUseHgpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVCKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlpKHRoaXMuYSxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBuZXcgVUIodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxQKFllLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM1MCksSSgxMTE1LDEse30sWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE2NCl9LFAoWWUsIlN0cmVhbXMvbGFtYmRhJDAkVHlwZSIsMTExNSksSSgxMTE2LDEsT3EsYnR0KSxsLlZkPWZ1bmN0aW9uKCl7U3NuKHRoaXMuYSl9LFAoWWUsIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTExNiksSSgxNjU5LDE2NTgseTIsS1h0KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPUV0KHRoaXMuYywxNzEpP25ldyB5aih0aGlzLHUodGhpcy5jLDE3MSkpOkV0KHRoaXMuYywxNjEpP25ldyBSTSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBuOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTHAodGhpcy5iKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTHAodGhpcy5iKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1FdCh0aGlzLmMsMTcxKT9uZXcgZTgodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgZ00odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgVzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmMsMTcxKT9uZXcgeWoodGhpcyx1KHRoaXMuYywxNzEpKTpFdCh0aGlzLmMsMTYxKT9uZXcgUk0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgbjgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsJiZ0aGlzLmEudWUoZSxlKSxuZXcgTHAodGhpcy5iKX0sUChZZSwiVHJlZU11bHRpbWFwIiwxNjU5KSxJKDc4LDEsezM6MSw3ODoxfSksbC5XZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEVycm9yKGUpfSxsLlhkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5ZZD1mdW5jdGlvbigpe3JldHVybiAkbG4ocHUoJG50KCh0aGlzLms9PW51bGwmJih0aGlzLms9UHQoeXV0LHRlLDc4LDAsMCwxKSksdGhpcy5rKSksbmV3IGtlKSl9LGwuWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5fZD1mdW5jdGlvbigpe2JLZSh0aGlzLHlpbih0aGlzLldkKGNydCh0aGlzLHRoaXMuZykpKSksSHp0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGNydCh0aGlzLHRoaXMuJGQoKSl9LGwuZT1lZmUsbC5pPSExLGwubj0hMDt2YXIgeXV0PVAoWG8sIlRocm93YWJsZSIsNzgpO0koMTAyLDc4LHszOjEsMTAyOjEsNzg6MX0pLFAoWG8sIkV4Y2VwdGlvbiIsMTAyKSxJKDYwLDEwMixVMCxWYixHbyksUChYbywiUnVudGltZUV4Y2VwdGlvbiIsNjApLEkoNTk4LDYwLFUwKSxQKFhvLCJKc0V4Y2VwdGlvbiIsNTk4KSxJKDg2Myw1OTgsVTApLFAoTUQsIkphdmFTY3JpcHRFeGNlcHRpb25CYXNlIiw4NjMpLEkoNDc3LDg2Myx7NDc3OjEsMzoxLDEwMjoxLDYwOjEsNzg6MX0sX3JlKSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHVkbih0aGlzKSx0aGlzLmN9LGwuYWU9ZnVuY3Rpb24oKXtyZXR1cm4gR3QodGhpcy5iKT09PUd0KFk4dCk/bnVsbDp0aGlzLmJ9O3ZhciBZOHQ7UChPeHQsIkphdmFTY3JpcHRFeGNlcHRpb24iLDQ3Nyk7dmFyIGJnZT1QKE94dCwiSmF2YVNjcmlwdE9iamVjdCQiLDApLHh1dDtJKDE5NDgsMSx7fSksUChPeHQsIlNjaGVkdWxlciIsMTk0OCk7dmFyIHpIPTAsdmdlPTAscUg9LTE7SSg4OTAsMTk0OCx7fSxwdCk7dmFyIFg4dDtQKE1ELCJTY2hlZHVsZXJJbXBsIiw4OTApO3ZhciBrdXQ7SSgxOTYwLDEse30pLFAoTUQsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvciIsMTk2MCksSSg4NjQsMTk2MCx7fSxVKSxsLmJlPWZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9W107ZVtqYXRdPXI7Zm9yKHZhciBzPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO3M7KXt2YXIgbz0oVDgoKSxzLm5hbWV8fChzLm5hbWU9Y29uKHMudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGg9IjoiK28sZD1uW2hdO2lmKGQpe3ZhciB3LGs7Zm9yKHc9MCxrPWQubGVuZ3RoO3c8azt3KyspaWYoZFt3XT09PXMpcmV0dXJufShkfHwobltoXT1bXSkpLnB1c2gocykscz1zLmNhbGxlcn19LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9KFQ4KCksZSYmZVtqYXRdP2VbamF0XTpbXSkscj1zLmxlbmd0aCxvPVB0KGxFdCx0ZSwzMTAsciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IEpudChzW25dLG51bGwsLTEpO3JldHVybiBvfSxQKE1ELCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg2NCksSSgxOTYxLDE5NjAse30pLGwuYmU9ZnVuY3Rpb24oZSl7fSxsLmRlPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBuZXcgSm50KG4sZSsiQCIrcyxyPDA/LTE6cil9LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkO2lmKG89UGZuKGUpLGg9UHQobEV0LHRlLDMxMCwwLDAsMSksbj0wLHM9by5sZW5ndGgscz09MClyZXR1cm4gaDtmb3IoZD1CbGUodGhpcyxvWzBdKSxobihkLmQsUmF0KXx8KGhbbisrXT1kKSxyPTE7cjxzO3IrKyloW24rK109QmxlKHRoaXMsb1tyXSk7cmV0dXJuIGh9LFAoTUQsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMTk2MSksSSg4NjUsMTk2MSx7fSxidCksbC5kZT1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gbmV3IEpudChuLGUsLTEpfSxQKE1ELCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODY1KSxJKDEwNTAsMSx7fSksUChQeHQsaWZlLDEwNTApLEkoNjE1LDEwNTAsezYxNToxfSxaWXQpO3ZhciBROHQ7UChpb3QsaWZlLDYxNSksSSgyMDAxLDEse30pLFAoUHh0LHNmZSwyMDAxKSxJKDIwMDIsMjAwMSx7fSksUChpb3Qsc2ZlLDIwMDIpLEkoMTA5MCwxLHt9LG10KTt2YXIgc1M7UChpb3QsIkxvY2FsZUluZm8iLDEwOTApLEkoMTkxOCwxLHt9LHl0KSxsLmE9MCxQKGlvdCwiVGltZVpvbmUiLDE5MTgpLEkoMTI1OCwyMDAyLHt9LHV0KSxQKCJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5pbXBsLmNsZHIiLCJEYXRlVGltZUZvcm1hdEluZm9JbXBsIiwxMjU4KSxJKDQzNCwxLHs0MzQ6MX0sQUt0KSxsLmE9ITEsbC5iPTAsUChQeHQsIkRhdGVUaW1lRm9ybWF0L1BhdHRlcm5QYXJ0Iiw0MzQpLEkoMTk5LDEsYWZlLF9SLEV5dCxIMnQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHZpbih0aGlzLHUoZSwxOTkpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTkpJiZBdihrdSh0aGlzLnEuZ2V0VGltZSgpKSxrdSh1KGUsMTk5KS5xLmdldFRpbWUoKSkpfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9a3UodGhpcy5xLmdldFRpbWUoKSksU3IoeXJ0KGUsem0oZSwzMikpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gcj0tdGhpcy5xLmdldFRpbWV6b25lT2Zmc2V0KCksZT0ocj49MD8iKyI6IiIpKyhyLzYwfDApLG49cmooYi5NYXRoLmFicyhyKSU2MCksKHZhZSgpLFNnZSlbdGhpcy5xLmdldERheSgpXSsiICIrQWdlW3RoaXMucS5nZXRNb250aCgpXSsiICIrcmoodGhpcy5xLmdldERhdGUoKSkrIiAiK3JqKHRoaXMucS5nZXRIb3VycygpKSsiOiIrcmoodGhpcy5xLmdldE1pbnV0ZXMoKSkrIjoiK3JqKHRoaXMucS5nZXRTZWNvbmRzKCkpKyIgR01UIitlK24rIiAiK3RoaXMucS5nZXRGdWxsWWVhcigpfTt2YXIgSEg9UChwciwiRGF0ZSIsMTk5KTtJKDE5MTUsMTk5LGFmZSxHc2UpLGwuYT0hMSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9ITEsbC5pPTAsbC5qPTAsbC5rPTAsbC5uPTAsbC5vPTAsbC5wPTAsUCgiY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQuaW1wbCIsIkRhdGVSZWNvcmQiLDE5MTUpLEkoMTk2NiwxLHt9KSxsLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5oZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuamU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUChoNiwiSlNPTlZhbHVlIiwxOTY2KSxJKDIxNiwxOTY2LHsyMTY6MX0sYmcsbHgpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjE2KT9Id3QodGhpcy5hLHUoZSwyMTYpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFhXZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBNd3QodGhpcy5hKX0sbC5mZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihyPW5ldyBJbCgiWyIpLG49MCxlPXRoaXMuYS5sZW5ndGg7bjxlO24rKyluPjAmJihyLmErPSIsIiksaGMocixYbSh0aGlzLG4pKTtyZXR1cm4gci5hKz0iXSIsci5hfSxQKGg2LCJKU09OQXJyYXkiLDIxNiksSSg0ODMsMTk2Nix7NDgzOjF9LHFrKSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFFXZX0sbC5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEZuKCksIiIrdGhpcy5hfSxsLmE9ITE7dmFyIHdnZSxtZ2U7UChoNiwiSlNPTkJvb2xlYW4iLDQ4MyksSSg5ODUsNjAsVTAsUnF0KSxQKGg2LCJKU09ORXhjZXB0aW9uIiw5ODUpLEkoMTAyMywxOTY2LHt9LGR0KSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5LZX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBUdX07dmFyIHlnZTtQKGg2LCJKU09OTnVsbCIsMTAyMyksSSgyNTgsMTk2Nix7MjU4OjF9LHk5KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI1OCk/dGhpcy5hPT11KGUsMjU4KS5hOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFpXZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBvOCh0aGlzLmEpfSxsLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIifSxsLmE9MCxQKGg2LCJKU09OTnVtYmVyIiwyNTgpLEkoMTgzLDE5NjYsezE4MzoxfSxteCxIayksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODMpP0h3dCh0aGlzLmEsdShlLDE4MykuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gSldlfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE13dCh0aGlzLmEpfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgSWwoInsiKSxlPSEwLGg9dWl0KHRoaXMsUHQoQWUsdGUsMiwwLDYsMSkpLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlP2U9ITE6ZC5hKz1LYSxWcihkLFBvZShuKSksZC5hKz0iOiIsaGMoZCxEMCh0aGlzLG4pKTtyZXR1cm4gZC5hKz0ifSIsZC5hfSxQKGg2LCJKU09OT2JqZWN0IiwxODMpLEkoNTk2LE4xLGp1LGZldCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSkmJlBLZSh0aGlzLmEsQnIoZSkpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmeChuZXcgd2wodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmxlbmd0aH0sUChoNiwiSlNPTk9iamVjdC8xIiw1OTYpO3ZhciBFdXQ7SSgyMDQsMTk2Nix7MjA0OjF9LEhtKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIwNCk/aG4odGhpcy5hLHUoZSwyMDQpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRLZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCZyh0aGlzLmEpfSxsLmplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUG9lKHRoaXMuYSl9LFAoaDYsIkpTT05TdHJpbmciLDIwNCk7dmFyIG9iLFo4dCx4Z2UsSjh0LHRFdDtJKDE5NjIsMSx7NTI1OjF9KSxQKEZ4dCwiT3V0cHV0U3RyZWFtIiwxOTYyKSxJKDE5NjMsMTk2Mix7NTI1OjF9KSxQKEZ4dCwiRmlsdGVyT3V0cHV0U3RyZWFtIiwxOTYzKSxJKDg2NiwxOTYzLHs1MjU6MX0sVHQpLFAoRnh0LCJQcmludFN0cmVhbSIsODY2KSxJKDQxOCwxLHs0NzU6MX0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKFhvLCJBYnN0cmFjdFN0cmluZ0J1aWxkZXIiLDQxOCksSSg1MjksNjAsVTAscFIpLFAoWG8sIkFyaXRobWV0aWNFeGNlcHRpb24iLDUyOSksSSg3Myw2MCxzb3QsVHB0LG1vKSxQKFhvLCJJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MyksSSgzMjAsNzMsezM6MSwzMjA6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sX3B0LFFwdCksUChYbywiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwzMjApLEkoNTI4LDYwLFUwLEh0dCx6cXQpLFAoWG8sIkFycmF5U3RvcmVFeGNlcHRpb24iLDUyOCksSSgyODksNzgsb2ZlLHRldCksUChYbywiRXJyb3IiLDI4OSksSSgxOTQsMjg5LG9mZSxFcHQsYW10KSxQKFhvLCJBc3NlcnRpb25FcnJvciIsMTk0KSxjZ2U9ezM6MSw0NzY6MSwzNToxfTt2YXIgSTIsWUUsQnM9UChYbywiQm9vbGVhbiIsNDc2KTtJKDIzNiwxLHszOjEsMjM2OjF9KTt2YXIgZUV0O1AoWG8sIk51bWJlciIsMjM2KSxJKDIxNywyMzYsezM6MSwyMTc6MSwzNToxLDIzNjoxfSxJdHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIERLZSh0aGlzLHUoZSwyMTcpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjE3KSYmdShlLDIxNykuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIEU2PVAoWG8sIkJ5dGUiLDIxNyksbkV0O0koMTcyLDEsezM6MSwxNzI6MSwzNToxfSx0UiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gT0tlKHRoaXMsdShlLDE3MikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE3MikmJnUoZSwxNzIpLmE9PXRoaXMuYX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxsLmE9MDt2YXIgckV0LGFTPVAoWG8sIkNoYXJhY3RlciIsMTcyKSxpRXQ7SSgyMDUsNjAsezM6MSwyMDU6MSwxMDI6MSw2MDoxLDc4OjF9LEd6dCxYayksUChYbywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMDUpLHVnZT17MzoxLDM1OjEsMzMzOjEsMjM2OjF9O3ZhciBjYT1QKFhvLCJEb3VibGUiLDMzMyk7SSgxNTUsMjM2LHszOjEsMzU6MSwxNTU6MSwyMzY6MX0sRDMsU3B0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiB6WWUodGhpcyx1KGUsMTU1KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE1NSkmJmVLdCh0aGlzLmEsdShlLDE1NSkuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIFhFPVAoWG8sIkZsb2F0IiwxNTUpO0koMzIsNjAsezM6MSwxMDI6MSwzMjoxLDYwOjEsNzg6MX0sdU0sUG4sd3JlKSxQKFhvLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMyKSxJKDcxLDYwLFUwLEl1LEZvKSxQKFhvLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDcxKSxJKDE5LDIzNix7MzoxLDM1OjEsMTk6MSwyMzY6MX0saU0pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHFZZSh0aGlzLHUoZSwxOSkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOSkmJnUoZSwxOSkuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGphPVAoWG8sIkludGVnZXIiLDE5KSxzRXQsa2dlO0koMTYyLDIzNix7MzoxLDM1OjEsMTYyOjEsMjM2OjF9LENtKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBIWWUodGhpcyx1KGUsMTYyKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gVnYodGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpJiZBdih1KGUsMTYyKS5hLHRoaXMuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gU3IodGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK0VDKHRoaXMuYSl9LGwuYT0wO3ZhciBUdz1QKFhvLCJMb25nIiwxNjIpLGFFdDtJKDIwMzksMSx7fSksSSgxODMxLDYwLFUwLEhxdCksUChYbywiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24iLDE4MzEpLEkoMTczLDU5OCx7MzoxLDEwMjoxLDE3MzoxLDYwOjEsNzg6MX0sTDkseXgpLGwuV2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoZSl9LFAoWG8sIk51bGxQb2ludGVyRXhjZXB0aW9uIiwxNzMpO3ZhciBvRXQsVHV0LEVnZSxjRXQ7SSgxMjcsMzIsezM6MSwxMDI6MSwzMjoxLDEyNzoxLDYwOjEsNzg6MX0sb2QpLFAoWG8sIk51bWJlckZvcm1hdEV4Y2VwdGlvbiIsMTI3KSxJKDE4NCwyMzYsezM6MSwzNToxLDIzNjoxLDE4NDoxfSxlUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gTktlKHRoaXMsdShlLDE4NCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpJiZ1KGUsMTg0KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgQ3c9UChYbywiU2hvcnQiLDE4NCksdUV0O0koMzEwLDEsezM6MSwzMTA6MX0sSm50KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDMxMCk/KG49dShlLDMxMCksdGhpcy5jPT1uLmMmJnRoaXMuZD09bi5kJiZ0aGlzLmE9PW4uYSYmdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbZGUodGhpcy5jKSx0aGlzLmEsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIi4iK3RoaXMuZCsiKCIrKHRoaXMuYiE9bnVsbD90aGlzLmI6IlVua25vd24gU291cmNlIikrKHRoaXMuYz49MD8iOiIrdGhpcy5jOiIiKSsiKSJ9LGwuYz0wO3ZhciBsRXQ9UChYbywiU3RhY2tUcmFjZUVsZW1lbnQiLDMxMCk7bGdlPXszOjEsNDc1OjEsMzU6MSwyOjF9O3ZhciBBZT1QKFhvLER4dCwyKTtJKDEwNyw0MTgsezQ3NToxfSx4ZyxCOSxUaCksUChYbywiU3RyaW5nQnVmZmVyIiwxMDcpLEkoMTAwLDQxOCx7NDc1OjF9LF9wLExtLElsKSxQKFhvLCJTdHJpbmdCdWlsZGVyIiwxMDApLEkoNjg3LDczLHNvdCxacHQpLFAoWG8sIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDY4NyksSSgyMDQzLDEse30pO3ZhciBoRXQ7SSg4NDQsMSx7fSxrZSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDc4KS5lfSxQKFhvLCJUaHJvd2FibGUvbGFtYmRhJDAkVHlwZSIsODQ0KSxJKDQxLDYwLHszOjEsMTAyOjEsNjA6MSw3ODoxLDQxOjF9LE9yLHlnKSxQKFhvLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsNDEpLEkoMjQwLDIzNix7MzoxLDM1OjEsMjM2OjEsMjQwOjF9LGtJLG9idCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gUXVlKHRoaXMsdShlLDI0MCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIGx5KE9sZSh0aGlzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXM9PT1lPyEwOkV0KGUsMjQwKT8obj11KGUsMjQwKSx0aGlzLmU9PW4uZSYmUXVlKHRoaXMsbik9PTApOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYiE9MD90aGlzLmI6dGhpcy5hPDU0PyhlPWt1KHRoaXMuZiksdGhpcy5iPVNyKFBzKGUsLTEpKSx0aGlzLmI9MzMqdGhpcy5iK1NyKFBzKEZwKGUsMzIpLC0xKSksdGhpcy5iPTE3KnRoaXMuYitwcyh0aGlzLmUpLHRoaXMuYik6KHRoaXMuYj0xNypJcmUodGhpcy5jKStwcyh0aGlzLmUpLHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gT2xlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmQ9MCxsLmU9MCxsLmY9MDt2YXIgVGdlLEQyLGZFdCxkRXQsZ0V0LHBFdCxiRXQsdkV0LEN1dD1QKCJqYXZhLm1hdGgiLCJCaWdEZWNpbWFsIiwyNDApO0koOTEsMjM2LHszOjEsMzU6MSwyMzY6MSw5MToxfSxEM3QsTGcsSzMsZzR0LE5pZSxOcCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gTGllKHRoaXMsdShlLDkxKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gbHkoRGF0KHRoaXMsMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBoM3QodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJcmUodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0KHRoaXMsMCl9LGwuYj0tMixsLmM9MCxsLmQ9MCxsLmU9MDt2YXIgX3V0LEdILHdFdCxTdXQsVkgsUUUsQjQ9UCgiamF2YS5tYXRoIiwiQmlnSW50ZWdlciIsOTEpLENnZSxfZ2UsVDYsb1M7SSg0ODgsMTk2NyxidyksbC4kYj1mdW5jdGlvbigpe1l1KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBrbCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBwcmUodGhpcyxlLHRoaXMuZyl8fHByZSh0aGlzLGUsdGhpcy5mKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgd2codGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEpuKHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga2kodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBVeCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuICQ5KHRoaXMpfSxQKHByLCJBYnN0cmFjdEhhc2hNYXAiLDQ4OCksSSgyNjEsTjEsanUsd2cpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZFp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgyKHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGRadCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSx0aGlzLmEuQmMobiksITApOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxQKHByLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXQiLDI2MSksSSgyNjIsMSxyYSxoMiksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFl2KHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5RYj1mdW5jdGlvbigpe2x0ZSh0aGlzKX0sbC5iPSExLFAocHIsIkFic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yIiwyNjIpLEkoNDE3LDEscmEsZngpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBtTSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBQWHQodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtFbCh0aGlzKX0sbC5iPTAsbC5jPS0xLFAocHIsIkFic3RyYWN0TGlzdC9JdGVyYXRvckltcGwiLDQxNyksSSg5Niw0MTcsSmQsaGEpLGwuUWI9ZnVuY3Rpb24oKXtFbCh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXtSbSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBRbih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuV2I9ZnVuY3Rpb24oZSl7UG0odGhpcy5jIT0tMSksdGhpcy5hLl9jKHRoaXMuYyxlKX0sUChwciwiQWJzdHJhY3RMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk2KSxJKDIxOSw1MixJRSxLZCksbC5WYz1mdW5jdGlvbihlLG4pe1VtKGUsdGhpcy5iKSx0aGlzLmMuVmModGhpcy5hK2UsbiksKyt0aGlzLmJ9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEFuKGUsdGhpcy5iKSx0aGlzLmMuWGIodGhpcy5hK2UpfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBBbihlLHRoaXMuYiksbj10aGlzLmMuJGModGhpcy5hK2UpLC0tdGhpcy5iLG59LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQW4oZSx0aGlzLmIpLHRoaXMuYy5fYyh0aGlzLmErZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYT0wLGwuYj0wLFAocHIsIkFic3RyYWN0TGlzdC9TdWJMaXN0IiwyMTkpLEkoMzg0LE4xLGp1LFRtKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS52YygpLktjKCksbmV3IHJNKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/KHRoaXMuYS5CYyhlKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LFAocHIsIkFic3RyYWN0TWFwLzEiLDM4NCksSSg2OTEsMSxyYSxyTSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmEuUGIoKSw0MiksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LFAocHIsIkFic3RyYWN0TWFwLzEvMSIsNjkxKSxJKDIyNiwyOCx3eSxiMSksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmEudmMoKS5LYygpLG5ldyB2MShlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sUChwciwiQWJzdHJhY3RNYXAvMiIsMjI2KSxJKDI5NCwxLHJhLHYxKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYS5QYigpLDQyKSxlLmRkKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sUChwciwiQWJzdHJhY3RNYXAvMi8xIiwyOTQpLEkoNDg0LDEsezQ4NDoxLDQyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDQyKT8obj11KGUsNDIpLFBjKHRoaXMuZCxuLmNkKCkpJiZQYyh0aGlzLmUsbi5kZCgpKSk6ITF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBHMyh0aGlzLmQpXkczKHRoaXMuZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEoydCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZCsiPSIrdGhpcy5lfSxQKHByLCJBYnN0cmFjdE1hcC9BYnN0cmFjdEVudHJ5Iiw0ODQpLEkoMzgzLDQ4NCx7NDg0OjEsMzgzOjEsNDI6MX0sUlIpLFAocHIsIkFic3RyYWN0TWFwL1NpbXBsZUVudHJ5IiwzODMpLEkoMTk4NCwxLHVvdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxQYyh0aGlzLmNkKCksbi5jZCgpKSYmUGModGhpcy5kZCgpLG4uZGQoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuY2QoKSleRzModGhpcy5kZCgpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNkKCkrIj0iK3RoaXMuZGQoKX0sUChwcixLaGUsMTk4NCksSSgxOTkyLDE5NjcsVWhlKSxsLnRjPWZ1bmN0aW9uKGUpe3JldHVybiB4SnQodGhpcyxlKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49ZSxlYyhEeXQodGhpcyxuKSl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkodGhpcyl9LFAocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwIiwxOTkyKSxJKDczOSxOMSxqdSx4KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDQyKSYmeEp0KHRoaXMuYix1KGUsNDIpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgdkModGhpcy5iKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSxjdGUodGhpcy5iLG4pKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuY30sUChwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvRW50cnlTZXQiLDczOSksSSg0OTMsTjEsTXh0LHkpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZSKHRoaXMpfSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB2QyhuZXcgZ0ModGhpcy5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKT8oSUModGhpcy5hLGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sUChwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0Iiw0OTMpLEkoNDk0LDEscmEsZyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIG1NKHRoaXMuYS5hKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXdqKHRoaXMuYSksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7aEt0KHRoaXMuYSl9LFAocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwL05hdmlnYWJsZUtleVNldC8xIiw0OTQpLEkoMjAwNCwyOCx3eSksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gTTgoZEUodGhpcyxlKSksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIE9uKGUpLF9qKGUhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLFVhKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtmb3IoO1FydCh0aGlzKSE9bnVsbDspO30sUChwciwiQWJzdHJhY3RRdWV1ZSIsMjAwNCksSSgzMDIsMjgsezQ6MSwyMDoxLDI4OjEsMTQ6MX0sUDMsUlF0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBRd3QodGhpcyxlKSwhMH0sbC4kYj1mdW5jdGlvbigpe3JtdCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm5lKG5ldyBNQyh0aGlzKSxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBOOSh0aGlzKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTUModGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZybihuZXcgTUModGhpcyksZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMjcyKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSxlLmxlbmd0aDxuJiYoZT13UihuZXcgQXJyYXkobiksZSkpLFhlZSh0aGlzLGUsbiksZS5sZW5ndGg+biYmSmkoZSxuLG51bGwpLGV9LGwuYj0wLGwuYz0wLFAocHIsIkFycmF5RGVxdWUiLDMwMiksSSg0NDYsMSxyYSxNQyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIG16KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7RmVlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmM9LTEsUChwciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ0NiksSSgxMiw1Mix1ZmUsbGUsWWMsUHUpLGwuVmM9ZnVuY3Rpb24oZSxuKXskbSh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHVlKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnl0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gQXModGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYz1QdChYbixJZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcyxlLDApIT0tMX0sbC5KYz1mdW5jdGlvbihlKXttdSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBGZSh0aGlzLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLGUsMCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gQWcodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdnUodGhpcyxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe0JRdCh0aGlzLGUsbil9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYWgodGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGwuYWQ9ZnVuY3Rpb24oZSl7WHModGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBpbnQodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEQxKHRoaXMsZSl9O3ZhciBYNW49UChwciwiQXJyYXlMaXN0IiwxMik7SSg3LDEscmEsUyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEoodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzKX0sbC5hPTAsbC5iPS0xLFAocHIsIkFycmF5TGlzdC8xIiw3KSxJKDIwMTMsYi5GdW5jdGlvbix7fSx4dCksbC50ZT1mdW5jdGlvbihlLG4pe3JldHVybiBMcyhlLG4pfSxJKDE1NCw1MixsZmUsd2wpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZSh0aGlzLGUpIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3IoT24oZSkscj10aGlzLmEscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS50ZChuKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gZVl0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj0oQW4oZSx0aGlzLmEubGVuZ3RoKSx0aGlzLmFbZV0pLEppKHRoaXMuYSxlLG4pLHJ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sbC5hZD1mdW5jdGlvbihlKXtMbnQodGhpcy5hLHRoaXMuYS5sZW5ndGgsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gcWllKHRoaXMsUHQoWG4sSWUsMSx0aGlzLmEubGVuZ3RoLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBxaWUodGhpcyxlKX0sUChwciwiQXJyYXlzL0FycmF5TGlzdCIsMTU0KTt2YXIgaW8sYTAsVUg7SSg5NDAsNTIsbGZlLE90KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBaYnQoZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSxyOCgpLFpFfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCkscjgoKSxaRX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxQKHByLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3QiLDk0MCksSSg5NDEsMSxKZCxOdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxsLlViPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEl1KX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgSXUpfTt2YXIgWkU7UChwciwiQ29sbGVjdGlvbnMvRW1wdHlMaXN0SXRlcmF0b3IiLDk0MSksSSg5NDMsMTk2NyxMRSxxdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB2bigpLFVIfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksVUh9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB2bigpLGlvfSxQKHByLCJDb2xsZWN0aW9ucy9FbXB0eU1hcCIsOTQzKSxJKDk0MixOMSxNRSxudCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sUChwciwiQ29sbGVjdGlvbnMvRW1wdHlTZXQiLDk0MiksSSg1OTksNTIsezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LEQpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBjKHRoaXMuYSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQW4oZSwxKSx0aGlzLmF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sUChwciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNTk5KSxJKDM3MiwxLFFoZSxUKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBiSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gdkh0KCl9LGwuJGI9ZnVuY3Rpb24oKXt3SHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcE0odGhpcyxlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gc0d0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEodGhpcy5iLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBtSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gYUd0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5iKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbiIsMzcyKSxJKDM3MSwxLHJhLEEpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0sbC5RYj1mdW5jdGlvbigpe3lIdCgpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM3MSksSSg1MzEsMzcyLGhmZSxmaiksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhjKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUMnQodGhpcy5hLlpjKDApKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQydCh0aGlzLmEuWmMoZSkpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLmFkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IGZqKHRoaXMuYS5iZChlLG4pKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTMxKSxJKDY5MCwzNzEsSmQsVDJ0KSxsLlFiPWZ1bmN0aW9uKCl7eUh0KCl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDY5MCksSSg2MDAsMSxidyxxKSxsLndjPWZ1bmN0aW9uKGUpe1VDKHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuX2IoZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNHdCh0aGlzLGUpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIHg4KHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB1R3QodGhpcyxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLnhjKGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gYlh0KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5CYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYyl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gcFh0KHRoaXMpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAiLDYwMCksSSgzODIsMzcyLEZhdCxRayksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5iLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYil9LFAocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNldCIsMzgyKSxJKDk0NCwzODIsRmF0LFlxdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gb0d0KHRoaXMsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5JYyhlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYi5LYygpLG5ldyBPKGUpfSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLlBjKCkscVp0KGUsZS5sZW5ndGgpLGV9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFYdCh0aGlzLGUpfSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQiLDk0NCksSSg5NDUsMSxyYSxPKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICQodSh0aGlzLmEuUGIoKSw0MikpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0LzEiLDk0NSksSSg2ODgsMSx1b3QsJCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkZiKGUpfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jZCgpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kZCgpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5IYigpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sUChwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0L1VubW9kaWZpYWJsZUVudHJ5Iiw2ODgpLEkoNjAxLDUzMSx7MjA6MSwxNDoxLDE1OjEsNTQ6MX0sb2V0KSxQKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0Iiw2MDEpLEkoNjg5LDM4MixaaGUsQzJ0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYSl9LFAocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNvcnRlZFNldCIsNjg5KSxJKDg0NywxLGxvdCxwbiksbC51ZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPUhadCh1KGUsMTEpLHUobiwxMSkpLHIhPTA/cjpadWUodShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHByLCJDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDg0Nyk7dmFyIG1FdCx5RXQseEV0O0koNzUxLDEsbG90LE1lKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEl0bih1KGUsMzUpLHUobiwzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBYMygpLHhFdH0sUChwciwiQ29tcGFyYXRvcnMvTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsNzUxKSxJKDExNzcsMSxsb3QsdmUpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHRuKHUoZSwzNSksdShuLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIFgzKCkseUV0fSxQKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsMTE3NyksSSg2NCwxLGxvdCxmdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5hLnVlKG4sZSl9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlZENvbXBhcmF0b3IiLDY0KSxJKDE2Niw2MCxVMCxlaCksUChwciwiQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiIsMTY2KTt2YXIgU2dlLEFnZTtJKDE5MDQsMSxORCxHZSksbC53ZT1mdW5jdGlvbihlKXtwaWUodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJEb3VibGVTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrRUModGhpcy5hKSsiLCBhdmcgPSAiKyhMR3QodGhpcy5hLDApP19KdCh0aGlzKS9Wdih0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrX0p0KHRoaXMpKyJdIn0sbC5hPTAsbC5iPVRzLGwuYz1zcyxsLmQ9MCxsLmU9MCxsLmY9MCxQKHByLCJEb3VibGVTdW1tYXJ5U3RhdGlzdGljcyIsMTkwNCksSSgxODA1LDYwLFUwLFZ6dCksUChwciwiRW1wdHlTdGFja0V4Y2VwdGlvbiIsMTgwNSksSSg0NTEsMTk2NyxidyxlXyksbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBaMnQodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7YVh0KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBBR3QodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPW5ldyBFeCh0aGlzLmEpO3IuYTxyLmMuYS5sZW5ndGg7KWlmKG49RkMociksUGMoZSx0aGlzLmJbbi5nXSkpcmV0dXJuITA7cmV0dXJuITF9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEF0KHRoaXMpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBnbyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBSd3QodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sUChwciwiRW51bU1hcCIsNDUxKSxJKDEzNTIsTjEsanUsQXQpLGwuJGI9ZnVuY3Rpb24oKXthWHQodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZlp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpLdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksUnd0KHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmEuY30sUChwciwiRW51bU1hcC9FbnRyeVNldCIsMTM1MiksSSgxMzUzLDEscmEsSkt0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPUZDKHRoaXMuYSksbmV3IElHdCh0aGlzLmMsdGhpcy5iKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBjMnQodGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe1BtKCEhdGhpcy5iKSxSd3QodGhpcy5jLHRoaXMuYiksdGhpcy5iPW51bGx9LFAocHIsIkVudW1NYXAvRW50cnlTZXRJdGVyYXRvciIsMTM1MyksSSgxMzU0LDE5ODQsdW90LElHdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmJbdGhpcy5hLmddfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBjd3QodGhpcy5iLHRoaXMuYS5nLGUpfSxQKHByLCJFbnVtTWFwL01hcEVudHJ5IiwxMzU0KSxJKDE3NCxOMSx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMjE6MX0pO3ZhciBMZ2U9UChwciwiRW51bVNldCIsMTc0KTtJKDE1NiwxNzQsezIwOjEsMjg6MSwxNDoxLDE3NDoxLDE1NjoxLDIxOjF9LHJoKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBwZih0aGlzLHUoZSwyMikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBNbnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRXgodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGRZdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5jPTAsUChwciwiRW51bVNldC9FbnVtU2V0SW1wbCIsMTU2KSxJKDM0MywxLHJhLEV4KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRkModGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gYzJ0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7UG0odGhpcy5iIT0tMSksSmkodGhpcy5jLmIsdGhpcy5iLG51bGwpLC0tdGhpcy5jLmMsdGhpcy5iPS0xfSxsLmE9LTEsbC5iPS0xLFAocHIsIkVudW1TZXQvRW51bVNldEltcGwvSXRlcmF0b3JJbXBsIiwzNDMpLEkoNDMsNDg4LF80LENyLGt4LFVWdCksbC5yZT1mdW5jdGlvbihlLG4pe3JldHVybiBHdChlKT09PUd0KG4pfHxlIT1udWxsJiZ5aShlLG4pfSxsLnNlPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhpKGUpLG58MH0sUChwciwiSGFzaE1hcCIsNDMpLEkoNTMsTjEsQnh0LHFzLHhSLHlDKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBOcyh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFMwKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCk9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZjJ0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBRNW49UChwciwiSGFzaFNldCIsNTMpO0koMTc4MSwxLEFELEtlKSxsLnVkPWZ1bmN0aW9uKGUpe19uZSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkludFN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitFQyh0aGlzLmEpKyIsIGF2ZyA9ICIrKExHdCh0aGlzLmEsMCk/VnYodGhpcy5kKS9Wdih0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrRUModGhpcy5kKSsiXSJ9LGwuYT0wLGwuYj1fYSxsLmM9dmksbC5kPTAsUChwciwiSW50U3VtbWFyeVN0YXRpc3RpY3MiLDE3ODEpLEkoMTA0OSwxLHQwLHNVdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLd3QodGhpcyl9LGwuYz0wLFAocHIsIkludGVybmFsSGFzaENvZGVNYXAiLDEwNDkpLEkoNzExLDEscmEsS3d0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kPXRoaXMuYVt0aGlzLmMrK10sdGhpcy5kfSxsLk9iPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYzx0aGlzLmEubGVuZ3RoPyEwOihlPXRoaXMuYi5uZXh0KCksZS5kb25lPyExOih0aGlzLmE9ZS52YWx1ZVsxXSx0aGlzLmM9MCwhMCkpfSxsLlFiPWZ1bmN0aW9uKCl7dTV0KHRoaXMuZSx0aGlzLmQuY2QoKSksdGhpcy5jIT0wJiYtLXRoaXMuY30sbC5jPTAsbC5kPW51bGwsUChwciwiSW50ZXJuYWxIYXNoQ29kZU1hcC8xIiw3MTEpO3ZhciBNZ2U7SSgxMDQ3LDEsdDAsYVV0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGltdCh0aGlzKX0sbC5jPTAsbC5kPTAsUChwciwiSW50ZXJuYWxTdHJpbmdNYXAiLDEwNDcpLEkoNzEwLDEscmEsaW10KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPXRoaXMuYSx0aGlzLmE9dGhpcy5iLm5leHQoKSxuZXcgdUt0KHRoaXMuZCx0aGlzLmMsdGhpcy5kLmQpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYS5kb25lfSxsLlFiPWZ1bmN0aW9uKCl7UG5lKHRoaXMuZCx0aGlzLmMudmFsdWVbMF0pfSxQKHByLCJJbnRlcm5hbFN0cmluZ01hcC8xIiw3MTApLEkoMTA0OCwxOTg0LHVvdCx1S3QpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLnZhbHVlWzBdfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kIT10aGlzLmM/VTkodGhpcy5hLHRoaXMuYi52YWx1ZVswXSk6dGhpcy5iLnZhbHVlWzFdfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudyh0aGlzLmEsdGhpcy5iLnZhbHVlWzBdLGUpfSxsLmM9MCxQKHByLCJJbnRlcm5hbFN0cmluZ01hcC8yIiwxMDQ4KSxJKDIyOCw0MyxfNCxuMixFbXQpLGwuJGI9ZnVuY3Rpb24oKXtCV3QodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE1HdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihuPXRoaXMuZC5hO24hPXRoaXMuZDspe2lmKFBjKG4uZSxlKSlyZXR1cm4hMDtuPW4uYX1yZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXQodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFd2KHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcDIodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBQdGUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAkOSh0aGlzLmUpfSxsLmM9ITEsUChwciwiTGlua2VkSGFzaE1hcCIsMjI4KSxJKDM4NywzODMsezQ4NDoxLDM4MzoxLDM4NzoxLDQyOjF9LGNXdCxfdnQpLFAocHIsIkxpbmtlZEhhc2hNYXAvQ2hhaW5FbnRyeSIsMzg3KSxJKDcwMSxOMSxqdSxNdCksbC4kYj1mdW5jdGlvbigpe0JXdCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBnWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeXd0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBnWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksUHRlKHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hLmUpfSxQKHByLCJMaW5rZWRIYXNoTWFwL0VudHJ5U2V0Iiw3MDEpLEkoNzAyLDEscmEseXd0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gaHRlKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9dGhpcy5jLmEuZH0sbC5RYj1mdW5jdGlvbigpe1BtKCEhdGhpcy5hKSxUcnQodGhpcy5jLmEuZSx0aGlzKSxGdnQodGhpcy5hKSxVeCh0aGlzLmMuYS5lLHRoaXMuYS5kKSx6MnQodGhpcy5jLmEuZSx0aGlzKSx0aGlzLmE9bnVsbH0sUChwciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldC9FbnRyeUl0ZXJhdG9yIiw3MDIpLEkoMTc4LDUzLEJ4dCxBMCxubnQsJHZ0KTt2YXIgWjVuPVAocHIsIkxpbmtlZEhhc2hTZXQiLDE3OCk7SSg2OCwxOTY0LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxfSxRaSxibnQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5pKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtfaCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gZWkodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYj0wO3ZhciBKNW49UChwciwiTGlua2VkTGlzdCIsNjgpO0koOTcwLDEsSmQsbEt0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7WE0odGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBrUih0aGlzKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYiE9dGhpcy5kLmF9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGkodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIGtydCh0aGlzKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe0gkKHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe1BtKCEhdGhpcy5jKSx0aGlzLmMuYz1lfSxsLmE9MCxsLmM9bnVsbCxQKHByLCJMaW5rZWRMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk3MCksSSg2MDgsMSx7fSxIdCksUChwciwiTGlua2VkTGlzdC9Ob2RlIiw2MDgpLEkoMTk1OSwxLHt9KTt2YXIga0V0LElnZTtQKHByLCJMb2NhbGUiLDE5NTkpLEkoODYxLDE5NTkse30sSXQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sUChwciwiTG9jYWxlLzEiLDg2MSksSSg4NjIsMTk1OSx7fSxGdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sUChwciwiTG9jYWxlLzQiLDg2MiksSSgxMDksNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsMTA5OjF9LGxjLHdYdCksUChwciwiTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiIsMTA5KSxJKDQwNCwxLHs0MDQ6MX0sZ1IpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PT10aGlzPyEwOkV0KGUsNDA0KT8obj11KGUsNDA0KSxQYyh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/VmhlK2RDKHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIFdIO1AocHIsIk9wdGlvbmFsIiw0MDQpLEkoNDYzLDEsezQ2MzoxfSxRVnQsTjJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpFdChlLDQ2Myk/KG49dShlLDQ2MyksdGhpcy5hPT1uLmEmJkxzKHRoaXMuYixuLmIpPT0wKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/cHModGhpcy5iKTowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxEb3VibGUub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsRG91YmxlLmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIEVFdDtQKHByLCJPcHRpb25hbERvdWJsZSIsNDYzKSxJKDUxNywxLHs1MTc6MX0sWlZ0LHNXdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6RXQoZSw1MTcpPyhuPXUoZSw1MTcpLHRoaXMuYT09bi5hJiZkdSh0aGlzLmIsbi5iKT09MCk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYjowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxJbnQub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsSW50LmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIERnZTtQKHByLCJPcHRpb25hbEludCIsNTE3KSxJKDUwMywyMDA0LHd5LFZqKSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBLM3QodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYi5jPVB0KFhuLEllLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybihlPT1udWxsPy0xOlJvKHRoaXMuYixlLDApKSE9LTF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFFlZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywyNTYpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGludCh0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBEMSh0aGlzLmIsZSl9LFAocHIsIlByaW9yaXR5UXVldWUiLDUwMyksSSgxMjc3LDEscmEsRyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aH0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBRbih0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGgpLHRoaXMuYj10aGlzLmErKyxGZSh0aGlzLmMuYix0aGlzLmIpfSxsLlFiPWZ1bmN0aW9uKCl7UG0odGhpcy5iIT0tMSksb2l0KHRoaXMuYyx0aGlzLmE9dGhpcy5iKSx0aGlzLmI9LTF9LGwuYT0wLGwuYj0tMSxQKHByLCJQcmlvcml0eVF1ZXVlLzEiLDEyNzcpLEkoMjMwLDEsezIzMDoxfSx6aXQsVCQpLGwuYT0wLGwuYj0wO3ZhciBURXQsQ0V0LHR4bj0wO1AocHIsIlJhbmRvbSIsMjMwKSxJKDI3LDEsTWgsX24sRnYseVh0KSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5yZD1mdW5jdGlvbigpe3JldHVybiBud3QodGhpcyksdGhpcy5jfSxsLk5iPWZ1bmN0aW9uKGUpe253dCh0aGlzKSx0aGlzLmQuTmIoZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHNlZSh0aGlzLGUpfSxsLmE9MCxsLmM9MCxQKHByLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjcpLEkoNDg1LDI3LE1oLEZSKSxQKHByLCJTb3J0ZWRTZXQvMSIsNDg1KSxJKDYwMiwxLE5ELFcpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxQKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8wbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDIpLEkoNjAzLDEsTkQsZXQpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxQKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8xbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDMpLEkoNjA0LDEsQUQsYXQpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGRlKGUpKX0sUChwciwiU3BsaXRlcmF0b3IvT2ZJbnQvMm1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjA0KSxJKDYwNSwxLEFELGx0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZChkZShlKSl9LFAocHIsIlNwbGl0ZXJhdG9yL09mSW50LzNtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwNSksSSg2MTcsMSxNaCksbC5OYj1mdW5jdGlvbihlKXtjYnQodGhpcyxlKX0sbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLmQ9MCxsLmU9MCxQKHByLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MTcpLEkoNzIxLDYxNyxNaCksbC54ZT1mdW5jdGlvbihlKXtCMyh0aGlzLGUpfSxsLk5iPWZ1bmN0aW9uKGUpe0V0KGUsMTgyKT9CMyh0aGlzLHUoZSwxODIpKTpCMyh0aGlzLG5ldyBldChlKSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTgyKT90aGlzLnllKHUoZSwxODIpKTp0aGlzLnllKG5ldyBXKGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0RG91YmxlU3BsaXRlcmF0b3IiLDcyMSksSSg3MjAsNjE3LE1oKSxsLnhlPWZ1bmN0aW9uKGUpe0IzKHRoaXMsZSl9LGwuTmI9ZnVuY3Rpb24oZSl7RXQoZSwxOTYpP0IzKHRoaXMsdShlLDE5NikpOkIzKHRoaXMsbmV3IGx0KGUpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTYpP3RoaXMueWUodShlLDE5NikpOnRoaXMueWUobmV3IGF0KGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0SW50U3BsaXRlcmF0b3IiLDcyMCksSSg1NDAsNjE3LE1oKSxQKHByLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3RTcGxpdGVyYXRvciIsNTQwKSxJKDY5MiwxLE1oKSxsLk5iPWZ1bmN0aW9uKGUpe2NidCh0aGlzLGUpfSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxsLmI9MCxsLmM9MCxsLmQ9MCxQKHByLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDY5MiksSSg5NDcsNjkyLE1oLHpLdCksbC56ZT1mdW5jdGlvbihlLG4pe0hLZSh0aGlzLHUoZSwzOCksbil9LGwuTmI9ZnVuY3Rpb24oZSl7WW50KHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE0kKHRoaXMsZSl9LFAocHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NDcpLEkoNjkzLDY5MixNaCxhS3QpLGwuemU9ZnVuY3Rpb24oZSxuKXtHS2UodGhpcyx1KGUsMTgyKSxuKX0sbC54ZT1mdW5jdGlvbihlKXtZbnQodGhpcyxlKX0sbC5OYj1mdW5jdGlvbihlKXtFdChlLDE4Mik/WW50KHRoaXMsdShlLDE4MikpOlludCh0aGlzLG5ldyBldChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE0kKHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTgyKT9NJCh0aGlzLHUoZSwxODIpKTpNJCh0aGlzLG5ldyBXKGUpKX0sUChwciwiU3BsaXRlcmF0b3JzL0RvdWJsZUFycmF5U3BsaXRlcmF0b3IiLDY5MyksSSgxOTY4LDEsTWgpLGwuTmI9ZnVuY3Rpb24oZSl7Y2J0KHRoaXMsZSl9LGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTY0NDh9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIE9nZTtQKHByLCJTcGxpdGVyYXRvcnMvRW1wdHlTcGxpdGVyYXRvciIsMTk2OCksSSg5NDYsMTk2OCxNaCxpZSksbC54ZT1mdW5jdGlvbihlKXtSayhlKX0sbC5OYj1mdW5jdGlvbihlKXtFdChlLDE5Nik/UmsodShlLDE5NikpOlJrKG5ldyBsdChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG1idChlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTYpP21idCh1KGUsMTk2KSk6bWJ0KG5ldyBhdChlKSl9LFAocHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Iiw5NDYpLEkoNTgwLDUyLGZmZSxmUiksbC5WYz1mdW5jdGlvbihlLG4pe2I4KGUsdGhpcy5hLmMubGVuZ3RoKzEpLCRtKHRoaXMuYSxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB1ZSh0aGlzLmEsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYjgoZSx0aGlzLmEuYy5sZW5ndGgrMSksUnl0KHRoaXMuYSxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBBcyh0aGlzLmEsZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYz1QdChYbixJZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcy5hLGUsMCkhPS0xfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBJSSh0aGlzLmEsZSl9LGwuSmM9ZnVuY3Rpb24oZSl7bXUodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBiOChlLHRoaXMuYS5jLmxlbmd0aCksRmUodGhpcy5hLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLmEsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gYjgoZSx0aGlzLmEuYy5sZW5ndGgpLEFnKHRoaXMuYSxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe0JRdCh0aGlzLmEsZSxuKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBiOChlLHRoaXMuYS5jLmxlbmd0aCksYWgodGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmFkPWZ1bmN0aW9uKGUpe1hzKHRoaXMuYSxlKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgS2QodGhpcy5hLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gaW50KHRoaXMuYSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEQxKHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCh0aGlzLmEpfSxQKHByLCJWZWN0b3IiLDU4MCksSSg4MDksNTgwLGZmZSxQcHQpLFAocHIsIlN0YWNrIiw4MDkpLEkoMjA2LDEsezIwNjoxfSxjMiksbC5JYj1mdW5jdGlvbigpe3JldHVybiBhWnQodGhpcyl9LFAocHIsIlN0cmluZ0pvaW5lciIsMjA2KSxJKDU0NCwxOTkyLHszOjEsODM6MSwxNzE6MSwxNjE6MX0sZkd0LEJudCksbC4kYj1mdW5jdGlvbigpe085KHRoaXMpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnQyh0aGlzKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBweih0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIElDKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmM9MCxQKHByLCJUcmVlTWFwIiw1NDQpLEkoMzkwLDEscmEsdkMpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB3aih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBtTSh0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7aEt0KHRoaXMpfSxQKHByLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDM5MCksSSg0MzUsNzM5LGp1LGdDKSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sUChwciwiVHJlZU1hcC9FbnRyeVNldCIsNDM1KSxJKDQzNiwzODMsezQ4NDoxLDM4MzoxLDQyOjEsNDM2OjF9LCRydCksbC5iPSExO3ZhciBleG49UChwciwiVHJlZU1hcC9Ob2RlIiw0MzYpO0koNjIxLDEse30sJHQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iU3RhdGU6IG12PSIrdGhpcy5jKyIgdmFsdWU9Iit0aGlzLmQrIiBkb25lPSIrdGhpcy5hKyIgZm91bmQ9Iit0aGlzLmJ9LGwuYT0hMSxsLmI9ITEsbC5jPSExLFAocHIsIlRyZWVNYXAvU3RhdGUiLDYyMSksSSgyOTcsMjIsZG90LEJSKSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIEF1dCxfRXQsU0V0LEFFdCxLSD1qcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlIiwyOTcsSHIsQWluLHNaZSk7SSgxMTEyLDI5Nyxkb3QsZFV0KSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMSIsMTExMixLSCxudWxsLG51bGwpLEkoMTExMywyOTcsZG90LENVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMiIsMTExMyxLSCxudWxsLG51bGwpLEkoMTExNCwyOTcsZG90LGdVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxqcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlLzMiLDExMTQsS0gsbnVsbCxudWxsKTt2YXIgTmdlO0koMjA4LE4xLHszOjEsMjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxLDIwODoxfSxNcHQsTHApLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZSKHRoaXMpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBZTSh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7TzkodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcG50KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB2QyhuZXcgZ0MobmV3IHkodGhpcy5hKS5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZW50KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBueG49UChwciwiVHJlZVNldCIsMjA4KTtJKDk2NiwxLHt9LER0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVRZSh0aGlzLmEsZSxuKX0sUChnb3QsIkJpbmFyeU9wZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk2NiksSSg5NjcsMSx7fSxqdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBUUWUodGhpcy5hLGUsbil9LFAoZ290LCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiw5NjcpLEkoODQ2LDEse30scmUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFAoZ290LCJGdW5jdGlvbi9sYW1iZGEkMCRUeXBlIiw4NDYpLEkoNDMxLDEsdWksWnQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYS5NYihlKX0sUChnb3QsIlByZWRpY2F0ZS9sYW1iZGEkMiRUeXBlIiw0MzEpLEkoNTcyLDEsezU3MjoxfSk7dmFyIFBnZT1QKElfLCJIYW5kbGVyIiw1NzIpO0koMjAwNywxLF9EKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIkRVTU1ZIn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lKCl9O3ZhciBMRXQ7UChJXywiTGV2ZWwiLDIwMDcpLEkoMTYyMSwyMDA3LF9ELE9lKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIklORk8ifSxQKElfLCJMZXZlbC9MZXZlbEluZm8iLDE2MjEpLEkoMTY0MCwxLHt9LFh6dCk7dmFyIEx1dDtQKElfLCJMb2dNYW5hZ2VyIiwxNjQwKSxJKDE3ODAsMSxfRCxmS3QpLGwuYj1udWxsLFAoSV8sIkxvZ1JlY29yZCIsMTc4MCksSSg1MTIsMSx7NTEyOjF9LElydCksbC5lPSExO3ZhciBGZ2U9ITEsQmdlPSExLFIxPSExLFJnZT0hMSxqZ2U9ITE7UChJXywiTG9nZ2VyIiw1MTIpLEkoODE5LDU3Mix7NTcyOjF9LG9lKSxQKElfLCJTaW1wbGVDb25zb2xlTG9nSGFuZGxlciIsODE5KSxJKDEzMiwyMix7MzoxLDM1OjEsMjI6MSwxMzI6MX0scGV0KTt2YXIgTUV0LEdsLEx5LGxsPWpyKElzLCJDb2xsZWN0b3IvQ2hhcmFjdGVyaXN0aWNzIiwxMzIsSHIsQ3JuLGFaZSksJGdlO0koNzQ0LDEse30sb3d0KSxQKElzLCJDb2xsZWN0b3JJbXBsIiw3NDQpLEkoMTA2MCwxLHt9LE5lKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE11bih1KGUsMjA2KSx1KG4sMjA2KSl9LFAoSXMsIkNvbGxlY3RvcnMvMTBtZXRob2RyZWYkbWVyZ2UkVHlwZSIsMTA2MCksSSgxMDYxLDEse30sbWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFadCh1KGUsMjA2KSl9LFAoSXMsIkNvbGxlY3RvcnMvMTFtZXRob2RyZWYkdG9TdHJpbmckVHlwZSIsMTA2MSksSSgxMDYyLDEse30sS3QpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZuKCksISFKYnQoZSl9LFAoSXMsIkNvbGxlY3RvcnMvMTJtZXRob2RyZWYkdGVzdCRUeXBlIiwxMDYyKSxJKDI1MSwxLHt9LHdlKSxsLk9kPWZ1bmN0aW9uKGUsbil7dShlLDE0KS5GYyhuKX0sUChJcywiQ29sbGVjdG9ycy8yMG1ldGhvZHJlZiRhZGQkVHlwZSIsMjUxKSxJKDI1MywxLHt9LF9lKSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsZX0sUChJcywiQ29sbGVjdG9ycy8yMW1ldGhvZHJlZiRjdG9yJFR5cGUiLDI1MyksSSgzNDYsMSx7fSxjbiksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcXN9LFAoSXMsIkNvbGxlY3RvcnMvMjNtZXRob2RyZWYkY3RvciRUeXBlIiwzNDYpLEkoMzQ3LDEse30sbGkpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtOcyh1KGUsNTMpLG4pfSxQKElzLCJDb2xsZWN0b3JzLzI0bWV0aG9kcmVmJGFkZCRUeXBlIiwzNDcpLEkoMTA1NSwxLHt9LHlhKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGRHdCh1KGUsMTUpLHUobiwxNCkpfSxQKElzLCJDb2xsZWN0b3JzLzRtZXRob2RyZWYkYWRkQWxsJFR5cGUiLDEwNTUpLEkoMTA1OSwxLHt9LGRhKSxsLk9kPWZ1bmN0aW9uKGUsbil7UDAodShlLDIwNiksdShuLDQ3NSkpfSxQKElzLCJDb2xsZWN0b3JzLzltZXRob2RyZWYkYWRkJFR5cGUiLDEwNTkpLEkoMTA1OCwxLHt9LExLdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYzIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQxNSRUeXBlIiwxMDU4KSxJKDEwNjMsMSx7fSxPbyksbC5FZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBuMixwMihlLChGbigpLCExKSxuZXcgbGUpLHAyKGUsITAsbmV3IGxlKSxlfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyMiRUeXBlIiwxMDYzKSxJKDEwNjQsMSx7fSx6dCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBjdChvdChYbiwxKSxJZSwxLDUsW3RoaXMuYV0pfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNSRUeXBlIiwxMDY0KSxJKDEwNjUsMSx7fSxlZSksbC5PZD1mdW5jdGlvbihlLG4pe090bih0aGlzLmEsczIoZSkpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNiRUeXBlIiwxMDY1KSxJKDEwNjYsMSx7fSxWdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBzZW4odGhpcy5hLHMyKGUpLHMyKG4pKX0sUChJcywiQ29sbGVjdG9ycy9sYW1iZGEkMjckVHlwZSIsMTA2NiksSSgxMDY3LDEse30sZHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHMyKGUpWzBdfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyOCRUeXBlIiwxMDY3KSxJKDcxMywxLHt9LERyKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHp2dChlLG4pfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ0JFR5cGUiLDcxMyksSSgyNTIsMSx7fSxuciksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBsWWUodShlLDE0KSx1KG4sMTQpKX0sUChJcywiQ29sbGVjdG9ycy9sYW1iZGEkNDIkVHlwZSIsMjUyKSxJKDM0OCwxLHt9LGRpKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhZZSh1KGUsNTMpLHUobiw1MykpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MCRUeXBlIiwzNDgpLEkoMzQ5LDEse30sRWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1Myl9LFAoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDUxJFR5cGUiLDM0OSksSSgxMDU0LDEse30sZmUpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtXY24odGhpcy5hLHUoZSw4Myksbil9LFAoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDckVHlwZSIsMTA1NCksSSgxMDU2LDEse30sWW4pLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geGNuKHUoZSw4MyksdShuLDgzKSxuZXcgeWEpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ4JFR5cGUiLDEwNTYpLEkoMTA1NywxLHt9LGdlKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsbG4odGhpcy5hLHUoZSw4MykpfSxQKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ5JFR5cGUiLDEwNTcpLEkoNTM5LDEse30pLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5kPSExLFAoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbSIsNTM5KSxJKDgxMiw1MzksJHh0LEcydCksbC5IZT1mdW5jdGlvbigpe0xDKHRoaXMpfSxQKElzLCJEb3VibGVTdHJlYW1JbXBsIiw4MTIpLEkoMTc4NCw3MjEsTWgsTUt0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiB3Zm4odGhpcyx1KGUsMTgyKSl9LGwuYT1udWxsLFAoSXMsIkRvdWJsZVN0cmVhbUltcGwvMiIsMTc4NCksSSgxNzg1LDEsTkQsbmUpLGwud2U9ZnVuY3Rpb24oZSl7clhlKHRoaXMuYSxlKX0sUChJcywiRG91YmxlU3RyZWFtSW1wbC8yL2xhbWJkYSQwJFR5cGUiLDE3ODUpLEkoMTc4MiwxLE5ELFBlKSxsLndlPWZ1bmN0aW9uKGUpe25YZSh0aGlzLmEsZSl9LFAoSXMsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDAkVHlwZSIsMTc4MiksSSgxNzgzLDEsTkQscGUpLGwud2U9ZnVuY3Rpb24oZSl7cGllKHRoaXMuYSxlKX0sUChJcywiRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMiRUeXBlIiwxNzgzKSxJKDEzNTgsNzIwLE1oLHZKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4geGluKHRoaXMsdShlLDE5NikpfSxsLmE9MCxsLmI9MCxsLmM9MCxQKElzLCJJbnRTdHJlYW0vNSIsMTM1OCksSSg3ODcsNTM5LCR4dCxWMnQpLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiAkcCh0aGlzKSx0aGlzLmF9LFAoSXMsIkludFN0cmVhbUltcGwiLDc4NyksSSg3ODgsNTM5LCR4dCxmYnQpLGwuSGU9ZnVuY3Rpb24oKXtMQyh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiAkcCh0aGlzKSxkMnQoKSxPZ2V9LFAoSXMsIkludFN0cmVhbUltcGwvRW1wdHkiLDc4OCksSSgxNDYzLDEsQUQsYm4pLGwudWQ9ZnVuY3Rpb24oZSl7X25lKHRoaXMuYSxlKX0sUChJcywiSW50U3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxNDYzKTt2YXIgcnhuPVlpKElzLCJTdHJlYW0iKTtJKDMwLDUzOSx7NTI1OjEsNjcwOjEsODMzOjF9LFRuKSxsLkhlPWZ1bmN0aW9uKCl7TEModGhpcyl9O3ZhciBKRTtQKElzLCJTdHJlYW1JbXBsIiwzMCksSSg4NDUsMSx7fSxIZSksbC5sZD1mdW5jdGlvbihlKXtyZXR1cm4gREt0KGUpfSxQKElzLCJTdHJlYW1JbXBsLzBtZXRob2RyZWYkbGFtYmRhJDIkVHlwZSIsODQ1KSxJKDEwODQsNTQwLE1oLHNLdCksbC5zZD1mdW5jdGlvbihlKXtmb3IoO2hhbih0aGlzKTspe2lmKHRoaXMuYS5zZChlKSlyZXR1cm4hMDtMQyh0aGlzLmIpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsfXJldHVybiExfSxQKElzLCJTdHJlYW1JbXBsLzEiLDEwODQpLEkoMTA4NSwxLFVuLHplKSxsLnRkPWZ1bmN0aW9uKGUpe290bih0aGlzLmEsdShlLDgzMykpfSxQKElzLCJTdHJlYW1JbXBsLzEvbGFtYmRhJDAkVHlwZSIsMTA4NSksSSgxMDg2LDEsdWksVmUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE5zKHRoaXMuYSxlKX0sUChJcywiU3RyZWFtSW1wbC8xbWV0aG9kcmVmJGFkZCRUeXBlIiwxMDg2KSxJKDEwODcsNTQwLE1oLE5YdCksbC5zZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5hfHwobj1uZXcgbGUsdGhpcy5iLmEuTmIobmV3IEVuKG4pKSx2bigpLFhzKG4sdGhpcy5jKSx0aGlzLmE9bmV3IF9uKG4sMTYpKSxzZWUodGhpcy5hLGUpfSxsLmE9bnVsbCxQKElzLCJTdHJlYW1JbXBsLzUiLDEwODcpLEkoMTA4OCwxLFVuLEVuKSxsLnRkPWZ1bmN0aW9uKGUpe3VlKHRoaXMuYSxlKX0sUChJcywiU3RyZWFtSW1wbC81LzJtZXRob2RyZWYkYWRkJFR5cGUiLDEwODgpLEkoNzIyLDU0MCxNaCxMbXQpLGwuc2Q9ZnVuY3Rpb24oZSl7Zm9yKHRoaXMuYj0hMTshdGhpcy5iJiZ0aGlzLmMuc2QobmV3IE9HdCh0aGlzLGUpKTspO3JldHVybiB0aGlzLmJ9LGwuYj0hMSxQKElzLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yIiw3MjIpLEkoMTA3OSwxLFVuLE9HdCksbC50ZD1mdW5jdGlvbihlKXtpZW4odGhpcy5hLHRoaXMuYixlKX0sUChJcywiU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc5KSxJKDEwNzUsNzIxLE1oLExKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gV1FlKHRoaXMsdShlLDE4MikpfSxQKElzLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IiLDEwNzUpLEkoMTA3OCwxLFVuLE5HdCksbC50ZD1mdW5jdGlvbihlKXtDWWUodGhpcy5hLHRoaXMuYixlKX0sUChJcywiU3RyZWFtSW1wbC9NYXBUb0RvdWJsZVNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzgpLEkoMTA3NCw3MjAsTWgsTUp0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiBLUWUodGhpcyx1KGUsMTk2KSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvciIsMTA3NCksSSgxMDc3LDEsVW4sUEd0KSxsLnRkPWZ1bmN0aW9uKGUpe1RZZSh0aGlzLmEsdGhpcy5iLGUpfSxQKElzLCJTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA3NyksSSg3MTksNTQwLE1oLHZtdCksbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gbkt0KHRoaXMsZSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvciIsNzE5KSxJKDEwNzYsMSxVbixGR3QpLGwudGQ9ZnVuY3Rpb24oZSl7X1llKHRoaXMuYSx0aGlzLmIsZSl9LFAoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc2KSxJKDYxOCwxLFVuLFRpKSxsLnRkPWZ1bmN0aW9uKGUpe3Z0dCh0aGlzLGUpfSxQKElzLCJTdHJlYW1JbXBsL1ZhbHVlQ29uc3VtZXIiLDYxOCksSSgxMDgwLDEsVW4sZ24pLGwudGQ9ZnVuY3Rpb24oZSl7V2IoKX0sUChJcywiU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlIiwxMDgwKSxJKDEwODEsMSxVbixrcyksbC50ZD1mdW5jdGlvbihlKXtXYigpfSxQKElzLCJTdHJlYW1JbXBsL2xhbWJkYSQxJFR5cGUiLDEwODEpLEkoMTA4MiwxLHt9LERuKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFRaZSh0aGlzLmEsZSxuKX0sUChJcywiU3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxMDgyKSxJKDEwODMsMSxVbixER3QpLGwudGQ9ZnVuY3Rpb24oZSl7TlFlKHRoaXMuYix0aGlzLmEsZSl9LFAoSXMsIlN0cmVhbUltcGwvbGFtYmRhJDUkVHlwZSIsMTA4MyksSSgxMDg5LDEsVW4sS24pLGwudGQ9ZnVuY3Rpb24oZSl7JGNuKHRoaXMuYSx1KGUsMzY1KSl9LFAoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbS9sYW1iZGEkMCRUeXBlIiwxMDg5KSxJKDIwNDEsMSx7fSksSSgxOTE0LDEse30scWEpLFAoImphdmFlbXVsLmludGVybmFsIiwiQ29uc29sZUxvZ2dlciIsMTkxNCksSSgyMDM4LDEse30pO3ZhciBpeG49MCxJRXQsREV0PTAsWUg7SSgxNzY4LDEsVW4sTGEpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDMwOCl9LFAoT0UsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2OCksSSgxNzY5LDEsVW4sU24pLGwudGQ9ZnVuY3Rpb24oZSl7VWEodGhpcy5hLHUoZSwzMDgpLmUpfSxQKE9FLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQxJFR5cGUiLDE3NjkpLEkoMTc3MCwxLFVuLEdzKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxNjgpfSxQKE9FLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NzApLEkoMTc2NSwxLE9pLFduKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRzbih0aGlzLmEsdShlLDE2OCksdShuLDE2OCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoT0UsIk5haXZlTWluU1QvbGFtYmRhJDAkVHlwZSIsMTc2NSksSSg0OTksMSx7fSxyciksUChPRSwiTm9kZU1pY3JvTGF5b3V0Iiw0OTkpLEkoMTY4LDEsezE2ODoxfSxUeCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwxNjgpPyhuPXUoZSwxNjgpLFBjKHRoaXMuYSxuLmEpJiZQYyh0aGlzLmIsbi5iKXx8UGModGhpcy5hLG4uYikmJlBjKHRoaXMuYixuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBHMyh0aGlzLmEpK0czKHRoaXMuYil9O3ZhciBzeG49UChPRSwiVEVkZ2UiLDE2OCk7SSgzMDgsMSx7MzA4OjF9LGl4dCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwzMDgpPyhuPXUoZSwzMDgpLEIkKHRoaXMsbi5hKSYmQiQodGhpcyxuLmIpJiZCJCh0aGlzLG4uYykpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEczKHRoaXMuYSkrRzModGhpcy5iKStHMyh0aGlzLmMpfSxQKE9FLCJUVHJpYW5nbGUiLDMwOCksSSgyMjEsMSx7MjIxOjF9LGNqKSxQKE9FLCJUcmVlIiwyMjEpLEkoMTI1NCwxLHt9LHhRdCksUChwZmUsIlNjYW5saW5lIiwxMjU0KTt2YXIgemdlPVlpKHBmZSxiZmUpO0koMTY5MiwxLHt9LHVlZSksUChyMCwiQ0dyYXBoIiwxNjkyKSxJKDMwNywxLHszMDc6MX0sYlF0KSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmc9MCxsLmk9MCxsLms9VHMsUChyMCwiQ0dyb3VwIiwzMDcpLEkoODE1LDEse30sSXB0KSxQKHIwLCJDR3JvdXAvQ0dyb3VwQnVpbGRlciIsODE1KSxJKDU3LDEsezU3OjF9LCRXdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmo/QnIodGhpcy5qLktiKHRoaXMpKTooTDAoWEgpLFhILm8rIkAiKyhlPUl2KHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkpfSxsLmY9MCxsLmk9VHM7dmFyIFhIPVAocjAsIkNOb2RlIiw1Nyk7SSg4MTQsMSx7fSxEcHQpLFAocjAsIkNOb2RlL0NOb2RlQnVpbGRlciIsODE0KTt2YXIgcWdlO0koMTUyNSwxLHt9LE5vKSxsLk9lPWZ1bmN0aW9uKGUsbil7cmV0dXJuIDB9LGwuUGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gMH0sUChyMCx3ZmUsMTUyNSksSSgxNzkwLDEse30sdnMpLGwuTGU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtmb3IoQz1zcyxzPW5ldyBTKGUuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSw1NyksQz1iLk1hdGgubWluKEMsbi5hLmouZC5jK24uYi5hKTtmb3IoVj1uZXcgUWksZD1uZXcgUyhlLmEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzA3KSxoLms9QyxoLmc9PTAmJmhzKFYsaCxWLmMuYixWLmMpO2Zvcig7Vi5iIT0wOyl7Zm9yKGg9dShWLmI9PTA/bnVsbDooUW4oVi5iIT0wKSxjaChWLFYuYS5hKSksMzA3KSxvPWguai5kLmMsSD1oLmEuYS5lYygpLktjKCk7SC5PYigpOylNPXUoSC5QYigpLDU3KSx0dD1oLmsrTS5iLmEsIWJ1bihlLGgsZS5kKXx8TS5kLmM8dHQ/TS5pPXR0Ok0uaT1NLmQuYztmb3Ioby09aC5qLmksaC5iKz1vLGUuZD09KGFvKCksa2YpfHxlLmQ9PVEwP2guYys9bzpoLmMtPW8sRj1oLmEuYS5lYygpLktjKCk7Ri5PYigpOylmb3IoTT11KEYuUGIoKSw1Nyksaz1NLmMuS2MoKTtrLk9iKCk7KXc9dShrLlBiKCksNTcpLE9wKGUuZCk/WT1lLmcuT2UoTSx3KTpZPWUuZy5QZShNLHcpLHcuYS5rPWIuTWF0aC5tYXgody5hLmssTS5pK00uZC5iK1ktdy5iLmEpLHFYdChlLHcsZS5kKSYmKHcuYS5rPWIuTWF0aC5tYXgody5hLmssdy5kLmMtdy5iLmEpKSwtLXcuYS5nLHcuYS5nPT0wJiZuaShWLHcuYSl9Zm9yKHI9bmV3IFMoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmQuYz1uLml9LFAocjAsIkxvbmdlc3RQYXRoQ29tcGFjdGlvbiIsMTc5MCksSSgxNjkwLDEse30sRm9lKSxsLmU9ITE7dmFyIEhnZSxHZ2UsVmdlLE11dD1QKHIwLHhmZSwxNjkwKTtJKDE2OTEsMSxVbix2ciksbC50ZD1mdW5jdGlvbihlKXt3Y24odGhpcy5hLHUoZSw0NikpfSxQKHIwLGtmZSwxNjkxKSxJKDE3OTEsMSx7fSxudSksbC5NZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdztmb3Iocj1uZXcgUyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uYy4kYigpO2ZvcihvPW5ldyBTKGUuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksNTcpLGQ9bmV3IFMoZS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDU3KSxzIT1oJiYocy5hJiZzLmE9PWguYXx8KE9wKGUuZCk/dz1lLmcuUGUocyxoKTp3PWUuZy5PZShzLGgpLChoLmQuYz5zLmQuY3x8cy5kLmM9PWguZC5jJiZzLmQuYjxoLmQuYikmJnJobihoLmQuZCtoLmQuYSt3LHMuZC5kKSYmQzN0KGguZC5kLHMuZC5kK3MuZC5hK3cpJiZzLmMuRmMoaCkpKX0sUChyMCwiUXVhZHJhdGljQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzkxKSxJKDUyMiwxLHs1MjI6MX0scXR0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsUChyMCxFZmUsNTIyKSxJKDgwMywxLHt9LFd2dCksbC5NZT1mdW5jdGlvbihlKXt0aGlzLmM9ZSxhRCh0aGlzLG5ldyBmbSl9LFAocjAsVGZlLDgwMyksSSgxNzE4LDEsezY3OToxfSxHWHQpLGwuS2U9ZnVuY3Rpb24oZSl7ZGduKHRoaXMsdShlLDQ2NCkpfSxQKHIwLENmZSwxNzE4KSxJKDE3MTksMSxPaSwkcyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBnbm4odShlLDU3KSx1KG4sNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHIwLF9mZSwxNzE5KSxJKDQ2NCwxLHs0NjQ6MX0sa2J0KSxsLmE9ITEsUChyMCxTZmUsNDY0KSxJKDE3MjAsMSxPaSxMdSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBDMW4odShlLDQ2NCksdShuLDQ2NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAocjAsQWZlLDE3MjApLEkoMTcyMSwxLHdkLGZtKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sUChyMCwiU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNzIxKSxJKDQyOCwyMix7MzoxLDM1OjEsMjI6MSw0Mjg6MX0sQ2J0KTt2YXIgT0V0LEl1dCxORXQ9anIod290LCJIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MjgsSHIsdHJuLG9aZSksVWdlO0koNDI3LDIyLHszOjEsMzU6MSwyMjoxLDQyNzoxfSxfYnQpO3ZhciBQRXQsRHV0LEZFdD1qcih3b3QsIkxvd0xldmVsU29ydGluZ0NyaXRlcmlvbiIsNDI3LEhyLGVybixjWmUpLFdnZSxSND1ZaShRbywiSUxheW91dE1ldGFEYXRhUHJvdmlkZXIiKTtJKDg1MywxLEloLFVMKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHeHQpLG1vdCksIlBvbHlvbWlubyBUcmF2ZXJzYWwgU3RyYXRlZ3kiKSwiVHJhdmVyc2FsIHN0cmF0ZWd5IGZvciB0cnlpbmcgZGlmZmVyZW50IGNhbmRpZGF0ZSBwb3NpdGlvbnMgZm9yIHBvbHlvbWlub2VzLiIpLEhFdCksKGpnKCksY3MpKSxaRXQpLHVuKChYZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFZ4dCksbW90KSwiUG9seW9taW5vIFNlY29uZGFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBzZWNvbmRhcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIFRoZXkgYXJlIHVzZWQgd2hlbiBwb2x5b21pbm9lcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uIEhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24uIiksekV0KSxjcyksRkV0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFV4dCksbW90KSwiUG9seW9taW5vIFByaW1hcnkgU29ydGluZyBDcml0ZXJpb24iKSwiUG9zc2libGUgcHJpbWFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4iKSxqRXQpLGNzKSxORXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsV3h0KSxtb3QpLCJGaWxsIFBvbHlvbWlub2VzIiksIlVzZSB0aGUgUHJvZmlsZSBGaWxsIGFsZ29yaXRobSB0byBmaWxsIHBvbHlvbWlub2VzIHRvIHByZXZlbnQgc21hbGwgcG9seW9taW5vZXMgZnJvbSBiZWluZyBwbGFjZWQgaW5zaWRlIG9mIGJpZyBwb2x5b21pbm9lcyB3aXRoIGxhcmdlIGhvbGVzLiBNaWdodCBpbmNyZWFzZSBwYWNraW5nIGFyZWEuIiksKEZuKCksITApKSxBYSksQnMpLHVuKHFuKSkpKX07dmFyIEJFdCxSRXQsakV0LCRFdCx6RXQscUV0LEhFdDtQKHdvdCwiUG9seW9taW5vT3B0aW9ucyIsODUzKSxJKDI1MCwyMix7MzoxLDM1OjEsMjI6MSwyNTA6MX0sajMpO3ZhciBHRXQsVkV0LFVFdCxXRXQsS0V0LFlFdCxPdXQsWEV0LFFFdCxaRXQ9anIod290LCJUcmF2ZXJzYWxTdHJhdGVneSIsMjUwLEhyLGdvbix1WmUpLEtnZTtJKDIxMywxLHsyMTM6MX0sYXYpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTkVkZ2VbaWQ9Iit0aGlzLmIrIiB3PSIrdGhpcy5nKyIgZD0iK3RoaXMuYSsiXSJ9LGwuYT0xLGwuYj0wLGwuYz0wLGwuZj0hMSxsLmc9MDt2YXIgWWdlPVAoRF8sIk5FZGdlIiwyMTMpO0koMTc2LDEse30sRWgpLFAoRF8sIk5FZGdlL05FZGdlQnVpbGRlciIsMTc2KSxJKDY1MywxLHt9LEd0dCksUChEXywiTkdyYXBoIiw2NTMpLEkoMTIxLDEsezEyMToxfSxTSnQpLGwuYz0tMSxsLmQ9MCxsLmU9MCxsLmk9LTEsbC5qPSExO3ZhciBKRXQ9UChEXywiTk5vZGUiLDEyMSk7SSg3OTUsMSxoZmUsQXB0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLlZjPWZ1bmN0aW9uKGUsbil7Kyt0aGlzLmIsJG0odGhpcy5hLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHBqKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4rK3RoaXMuYixSeXQodGhpcy5hLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuKyt0aGlzLmIsQXModGhpcy5hLGUpfSxsLiRiPWZ1bmN0aW9uKCl7Kyt0aGlzLmIsdGhpcy5hLmM9UHQoWG4sSWUsMSwwLDUsMSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApIT0tMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gSUkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBGZSh0aGlzLmEsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBLeChuZXcgUyh0aGlzLmEpKX0sbC5ZYz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuWmM9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4rK3RoaXMuYixBZyh0aGlzLmEsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEwydCh0aGlzLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuKyt0aGlzLmIsYWgodGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLmEsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBpbnQodGhpcy5hKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRDEodGhpcy5hLGUpfSxsLmI9MCxQKERfLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsNzk1KSxJKDI2OSwxLHt9LFViKSxQKERfLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI2OSksSSgxNjMwLDEse30sVXUpLGwuYT0hMSxsLmY9dmksbC5qPTAsUChEXywiTmV0d29ya1NpbXBsZXgiLDE2MzApLEkoMTI5NCwxLFVuLHVyKSxsLnRkPWZ1bmN0aW9uKGUpe2xoZSh0aGlzLmEsdShlLDY4MCksITAsITEpfSxQKExmZSwiTm9kZUxhYmVsQW5kU2l6ZUNhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTI5NCksSSg1NTgsMSx7fSx0ciksbC5iPSEwLGwuYz0hMCxsLmQ9ITAsbC5lPSEwLFAoTGZlLCJOb2RlTWFyZ2luQ2FsY3VsYXRvciIsNTU4KSxJKDIxMiwxLHsyMTI6MX0pLGwuaj0hMSxsLms9ITE7dmFyIFhnZT1QKGsyLCJDZWxsIiwyMTIpO0koMTI0LDIxMix7MTI0OjEsMjEyOjF9LFVXdCksbC5SZT1mdW5jdGlvbigpe3JldHVybiBMaih0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMubix0aGlzLmEuYStlLmIrZS5jfSxQKGsyLCJBdG9taWNDZWxsIiwxMjQpLEkoMjMyLDIyLHszOjEsMzU6MSwyMjoxLDIzMjoxfSxiZXQpO3ZhciBzYyx0dSxhYyxNeT1qcihrMiwiQ29udGFpbmVyQXJlYSIsMjMyLEhyLF9ybixsWmUpLFFnZTtJKDMyNiwyMTIsTWZlKSxQKGsyLCJDb250YWluZXJDZWxsIiwzMjYpLEkoMTQ3MywzMjYsTWZlLHVpZSksbC5SZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPTAsdGhpcy5lP3RoaXMuYj9lPXRoaXMuYi5iOnRoaXMuYVsxXVsxXSYmKGU9dGhpcy5hWzFdWzFdLlJlKCkpOmU9YTN0KHRoaXMseHNlKHRoaXMsITApKSxlPjA/ZSt0aGlzLm4uZCt0aGlzLm4uYTowfSxsLlNlPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZihvPTAsdGhpcy5lKXRoaXMuYj9vPXRoaXMuYi5hOnRoaXMuYVsxXVsxXSYmKG89dGhpcy5hWzFdWzFdLlNlKCkpO2Vsc2UgaWYodGhpcy5nKW89YTN0KHRoaXMseHN0KHRoaXMsbnVsbCwhMCkpO2Vsc2UgZm9yKG49KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89Yi5NYXRoLm1heChvLGEzdCh0aGlzLHhzdCh0aGlzLGUsITApKSk7cmV0dXJuIG8+MD9vK3RoaXMubi5iK3RoaXMubi5jOjB9LGwuVGU9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuZylmb3IoZT14c3QodGhpcyxudWxsLCExKSxyPShLZigpLGN0KG90KE15LDEpLGFlLDIzMiwwLFtzYyx0dSxhY10pKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxLY2UodGhpcyxuLGUpO2Vsc2UgZm9yKHI9KEtmKCksY3Qob3QoTXksMSksYWUsMjMyLDAsW3NjLHR1LGFjXSkpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGU9eHN0KHRoaXMsbiwhMSksS2NlKHRoaXMsbixlKX0sbC5VZT1mdW5jdGlvbigpe3ZhciBlLG4scixzO249dGhpcy5pLGU9dGhpcy5uLHM9eHNlKHRoaXMsITEpLGxtdCh0aGlzLChLZigpLHNjKSxuLmQrZS5kLHMpLGxtdCh0aGlzLGFjLG4uZCtuLmEtZS5hLXNbMl0scykscj1uLmEtZS5kLWUuYSxzWzBdPjAmJihzWzBdKz10aGlzLmQsci09c1swXSksc1syXT4wJiYoc1syXSs9dGhpcy5kLHItPXNbMl0pLHRoaXMuYy5hPWIuTWF0aC5tYXgoMCxyKSx0aGlzLmMuZD1uLmQrZS5kKyh0aGlzLmMuYS1yKS8yLHNbMV09Yi5NYXRoLm1heChzWzFdLHIpLGxtdCh0aGlzLHR1LG4uZCtlLmQrc1swXS0oc1sxXS1yKS8yLHMpfSxsLmI9bnVsbCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0hMTt2YXIgTnV0PTAsUUg9MDtQKGsyLCJHcmlkQ29udGFpbmVyQ2VsbCIsMTQ3MyksSSg0NjEsMjIsezM6MSwzNToxLDIyOjEsNDYxOjF9LHZldCk7dmFyIGNiLFNkLG1mLFpnZT1qcihrMiwiSG9yaXpvbnRhbExhYmVsQWxpZ25tZW50Iiw0NjEsSHIsU3JuLGhaZSksSmdlO0koMzA2LDIxMix7MjEyOjEsMzA2OjF9LGlRdCxoZWUsZVF0KSxsLlJlPWZ1bmN0aW9uKCl7cmV0dXJuIHFLdCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBCdnQodGhpcyl9LGwuYT0wLGwuYz0hMTt2YXIgYXhuPVAoazIsIkxhYmVsQ2VsbCIsMzA2KTtJKDI0NCwzMjYsezIxMjoxLDMyNjoxLDI0NDoxfSxyXyksbC5SZT1mdW5jdGlvbigpe3JldHVybiBjRCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiB1RCh0aGlzKX0sbC5UZT1mdW5jdGlvbigpe2ZhdCh0aGlzKX0sbC5VZT1mdW5jdGlvbigpe2RhdCh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPSExLFAoazIsIlN0cmlwQ29udGFpbmVyQ2VsbCIsMjQ0KSxJKDE2MjYsMSx1aSxabCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVEtlKHUoZSwyMTIpKX0sUChrMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQwJFR5cGUiLDE2MjYpLEkoMTYyNywxLHt9LFBhKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjEyKS5TZSgpfSxQKGsyLCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDEkVHlwZSIsMTYyNyksSSgxNjI4LDEsdWksQWwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIENLZSh1KGUsMjEyKSl9LFAoazIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMiRUeXBlIiwxNjI4KSxJKDE2MjksMSx7fSx1YSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIxMikuUmUoKX0sUChrMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQzJFR5cGUiLDE2MjkpLEkoNDYyLDIyLHszOjEsMzU6MSwyMjoxLDQ2MjoxfSx3ZXQpO3ZhciB5Zix1YixlMSx0cGU9anIoazIsIlZlcnRpY2FsTGFiZWxBbGlnbm1lbnQiLDQ2MixIcixBcm4sZlplKSxlcGU7SSg3ODksMSx7fSx5eHQpLGwuYz0wLGwuZD0wLGwuaz0wLGwucz0wLGwudD0wLGwudj0hMSxsLnc9MCxsLkQ9ITEsUChCcSwiTm9kZUNvbnRleHQiLDc4OSksSSgxNDcxLDEsT2ksYmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaVV0KHUoZSw2MSksdShuLDYxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChCcSwiTm9kZUNvbnRleHQvMG1ldGhvZHJlZiRjb21wYXJlUG9ydFNpZGVzJFR5cGUiLDE0NzEpLEkoMTQ3MiwxLE9pLENjKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpkbih1KGUsMTExKSx1KG4sMTExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChCcSwiTm9kZUNvbnRleHQvMW1ldGhvZHJlZiRjb21wYXJlUG9ydENvbnRleHRzJFR5cGUiLDE0NzIpLEkoMTU5LDIyLHszOjEsMzU6MSwyMjoxLDE1OToxfSx1aCk7dmFyIG5wZSxycGUsaXBlLHNwZSxhcGUsb3BlLGNwZSx1cGUsbHBlLGhwZSxmcGUsZHBlLGdwZSxwcGUsYnBlLHZwZSx3cGUsbXBlLHlwZSx4cGUsa3BlLFB1dCxFcGU9anIoQnEsIk5vZGVMYWJlbExvY2F0aW9uIiwxNTksSHIsSml0LGRaZSksVHBlO0koMTExLDEsezExMToxfSxCb2UpLGwuYT0hMSxQKEJxLCJQb3J0Q29udGV4dCIsMTExKSxJKDE0NzYsMSxVbixnYSksbC50ZD1mdW5jdGlvbihlKXtFSHQodShlLDMwNikpfSxQKEZELElmZSwxNDc2KSxJKDE0NzcsMSx1aSxNYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMTEpLmN9LFAoRkQsRGZlLDE0NzcpLEkoMTQ3OCwxLFVuLEhhKSxsLnRkPWZ1bmN0aW9uKGUpe0VIdCh1KGUsMTExKS5jKX0sUChGRCwiTGFiZWxQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQ3OCk7dmFyIHQ3dDtJKDE0NzUsMSxVbixfYyksbC50ZD1mdW5jdGlvbihlKXtCbSgpLGlLZSh1KGUsMTExKSl9LFAoRkQsIk5vZGVMYWJlbEFuZFNpemVVdGlsaXRpZXMvbGFtYmRhJDAkVHlwZSIsMTQ3NSksSSg3OTAsMSxVbixidnQpLGwudGQ9ZnVuY3Rpb24oZSl7YlllKHRoaXMuYix0aGlzLmMsdGhpcy5hLHUoZSwxODEpKX0sbC5hPSExLGwuYz0hMSxQKEZELCJOb2RlTGFiZWxDZWxsQ3JlYXRvci9sYW1iZGEkMCRUeXBlIiw3OTApLEkoMTQ3NCwxLFVuLHduKSxsLnRkPWZ1bmN0aW9uKGUpe29LZSh0aGlzLmEsdShlLDE4MSkpfSxQKEZELCJQb3J0Q29udGV4dENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsMTQ3NCk7dmFyIFpIO0koMTgyOSwxLHt9LG92KSxQKFBFLCJHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyIiwxODI5KSxJKDE4MzAsMSxPaSxMbCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBLWGUodShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoUEUsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlQnlZQ29vcmRpbmF0ZSRUeXBlIiwxODMwKSxJKDE3ODYsMSx7fSxlcXQpLGwuYT01LGwuZT0wLFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE3ODYpLEkoMTc4NywxLE9pLFoxKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFlYZSh1KGUsMjIyKSx1KG4sMjIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChQRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVMZWZ0UmVjdGFuZ2xlQm9yZGVycyRUeXBlIiwxNzg3KSxJKDE3ODksMSxPaSxGZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBtZW4odShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMW1ldGhvZHJlZiRjb21wYXJlUmlnaHRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE3ODkpLEkoNDA2LDIyLHszOjEsMzU6MSwyMjoxLDQwNjoxfSx6Uik7dmFyIHNPLEZ1dCxCdXQsYU8sQ3BlPWpyKFBFLCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL092ZXJsYXBSZW1vdmFsRGlyZWN0aW9uIiw0MDYsSHIsU2luLGdaZSksX3BlO0koMjIyLDEsezIyMjoxfSxEbnQpLFAoUEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvUmVjdGFuZ2xlTm9kZSIsMjIyKSxJKDE3ODgsMSxVbixnciksbC50ZD1mdW5jdGlvbihlKXtFZm4odGhpcy5hLHUoZSwyMjIpKX0sUChQRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxNzg4KSxJKDEzMDQsMSxPaSxKMSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBMeW4odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAobWQsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDQpLEkoMTMwNywxLHt9LEJkKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMDcpLEkoMTMwOCwxLHVpLEUwKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMDgpLEkoMTMwOSwxLHVpLEJpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMDkpLEkoMTMwMiwxLE9pLG9uKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHV3bih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChtZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMDIpLEkoMTMwNSwxLHt9LEpsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzA1KSxJKDc2NywxLE9pLGtyKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhjbih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChtZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc2NyksSSgxMzAwLDEsT2ksRWkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geW9uKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMwMCksSSgxMzAxLDEsT2ksSm8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWGhuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMwMSksSSgxMzAzLDEsT2ksdmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHduKHUoZSwxNjcpLHUobiwxNjcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDMpLEkoMTMwNiwxLHt9LHRmKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxQKG1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMwNiksSSg3NzcsMSx7fSxFYnQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRWluKHRoaXMsdShlLDQ2KSx1KG4sMTY3KSl9LFAobWQsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3NzcpLEkoNjQ0LDEse30sT2MpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gZnBuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxQKG1kLCJTdWNjZXNzb3JKaXR0ZXIiLDY0NCksSSg2NDMsMSx7fSxlZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiB0dm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0MyksSSg1NjgsMSx7fSxuZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBkYm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTY4KSxJKDEzNTYsMSx7fSxYaSksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBUMm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LFAobWQsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNTYpLEkoNDAwLDEse30sZnIpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaHd0KHRoaXMsZSxuKX0sbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPSExLFAobWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwMCksSSgxMzU3LDEse30sRXMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMjQpLmF9LFAobWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM1NyksSSgzMjMsMjIsezM6MSwzNToxLDIyOjEsMzIzOjF9LCRSKSxsLmE9ITE7dmFyIG9PLGNPLHVPLGxPLFNwZT1qcihqcSxReHQsMzIzLEhyLE1pbixwWmUpLEFwZTtJKDEyOTgsMSx7fSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3Iocj0iICIsZT1kZSgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK2UuYSxlPWRlKFBXdChlLmEpKTtmb3Iocis9YApgLGU9ZGUoMCksaD0wO2g8dGhpcy5wO2grKyl7Zm9yKHIrPSIiK2UuYSxlPWRlKFBXdChlLmEpKSxzPTA7czx0aGlzLm87cysrKW49YWl0KHRoaXMscyxoKSx5YyhuLDApPT0wP3IrPSJfIjp5YyhuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiBEbChyLDAsci5sZW5ndGgtMSl9LGwubz0wLGwucD0wLFAoanEsIlR3b0JpdEdyaWQiLDEyOTgpLEkoMzIxLDEyOTgsezMyMToxfSx3M3QpLGwuaj0wLGwuaz0wLFAoanEsIlBsYW5hckdyaWQiLDMyMSksSSgxNjcsMzIxLHszMjE6MSwxNjc6MX0pLGwuZz0wLGwuaT0wLFAoanEsIlBvbHlvbWlubyIsMTY3KTt2YXIgb3huPVlpKEJELE5mZSk7SSgxMzQsMSxaeHQseGEpLGwuWWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRkkodGhpcyxlLG4pfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIHJZdCh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh0aGlzLGUpfSxQKEJELCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM0KSxJKDEyOTksMTM0LFp4dCxGY2UpLFAoanEsIlBvbHlvbWlub2VzIiwxMjk5KTt2YXIgTHBlPSExLGNTLGU3dDtJKDE3NjYsMSxVbix4aSksbC50ZD1mdW5jdGlvbihlKXtObGUodShlLDIyMSkpfSxQKHA2LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE3NjYpLEkoODEwLDEsVW4sSnIpLGwudGQ9ZnVuY3Rpb24oZSl7R2VuKHRoaXMuYSx1KGUsMjIxKSl9LFAocDYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgxMCksSSgxNzY3LDEsVW4sYkt0KSxsLnRkPWZ1bmN0aW9uKGUpe2dobih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LFAocDYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NjcpO3ZhciB1UyxuN3Q7SSg2NSwxLHs2NToxfSxFUXQpLFAocDYsIk5vZGUiLDY1KSxJKDEyNTAsMSx7fSxUVXQpLFAocDYsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjUwKSxJKDEyNTEsMSx7Njc5OjF9LEhYdCksbC5LZT1mdW5jdGlvbihlKXtTUWUodGhpcyx1KGUsNDQwKSl9LFAocDYsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjUxKSxJKDEyNTIsMSxPaSxXYyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBYdW4odShlLDY1KSx1KG4sNjUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHA2LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjUyKSxJKDQ0MCwxLHs0NDA6MX0sVGJ0KSxsLmE9ITEsUChwNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NDApLEkoMTI1MywxLE9pLENlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF8xbih1KGUsNDQwKSx1KG4sNDQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChwNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTI1MyksSSg1NTAsMSx7fSxncCksUChQZmUsIlNWR0ltYWdlIiw1NTApLEkoMzI0LDEsezMyNDoxfSx2dnQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0thK3RoaXMuYitLYSt0aGlzLmMrIikifSxQKFBmZSwiVW5pcXVlVHJpcGxlIiwzMjQpLEkoMjA5LDEsRTIpLFAoUzQsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwOSksSSgxMTMyLDIwOSxFMixCZSksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3N3aXRjaCh3cihuLEZmZSwxKSx0aGlzLmE9WHQoeWUocWUoZSwoaV8oKSxjN3QpKSkpLHIyKGUsanV0KSYmKG89QnIocWUoZSxqdXQpKSxyPXNhdCh6OCgpLG8pLHImJihzPXUobHJ0KHIuZiksMjA5KSxzLlplKGUsUmMobiwxKSkpKSxoPW5ldyBqWnQodGhpcy5hKSx0aGlzLmI9cDRuKGgsZSksdShxZShlLChTaXQoKSxpN3QpKSw0ODEpLmcpe2Nhc2UgMDpJcG4obmV3IEZmLHRoaXMuYiksYm8oZSxlRyxRKHRoaXMuYixlRykpO2JyZWFrO2RlZmF1bHQ6cWQoKX1FNG4oaCksYm8oZSxhN3QsdGhpcy5iKSxvcihuKX0sbC5hPTAsUChCZmUsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMzIpLEkoMTI0NCwxLHt9LEZmKSxsLmM9ITEsbC5lPTAsbC5mPTAsUChCZmUsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjQ0KSxJKDU2MSwxLHs1NjE6MX0sY1l0KSxsLmI9ITAsUCh6cSwiRENDb21wb25lbnQiLDU2MSksSSgzOTQsMjIsezM6MSwzNToxLDIyOjEsMzk0OjF9LGpSKSxsLmE9ITE7dmFyIEpILGhPLHRHLGZPLE1wZT1qcih6cSwiRENEaXJlY3Rpb24iLDM5NCxIcixMaW4sYlplKSxJcGU7SSgyNjYsMTM0LHszOjEsMjY2OjEsOTQ6MSwxMzQ6MX0sVnN0KSxQKHpxLCJEQ0VsZW1lbnQiLDI2NiksSSgzOTUsMSx7Mzk1OjF9LHEzdCksbC5jPTAsUCh6cSwiRENFeHRlbnNpb24iLDM5NSksSSg3NTUsMTM0LFp4dCxzSHQpLFAoenEsIkRDR3JhcGgiLDc1NSksSSg0ODEsMjIsezM6MSwzNToxLDIyOjEsNDgxOjF9LHVXdCk7dmFyIFJ1dCxyN3Q9anIoU290LEp4dCw0ODEsSHIsc25uLHZaZSksRHBlO0koODU0LDEsSWgsSUopLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHQ2dCksUmZlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLHM3dCksKGpnKCksY3MpKSxyN3QpLHVuKChYZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGU2dCksUmZlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLFQ3KSxBZSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxuNnQpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIikscTEpLFhuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHI2dCksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIikscTEpLFhuKSx1bihxbikpKSksa2xlKChuZXcgTEIsZSkpfTt2YXIgT3BlLGk3dCxzN3QsTnBlLFBwZTtQKFNvdCwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NTQpLEkoOTk4LDEsSWgsTEIpLGwuUWU9ZnVuY3Rpb24oZSl7a2xlKGUpfTt2YXIgRnBlLGp1dCxCcGUsYTd0LGVHLCR1dCxvN3QsUnBlLGpwZSwkcGUsenBlLGM3dDtQKFNvdCwiRGlzQ29PcHRpb25zIiw5OTgpLEkoOTk5LDEse30sZGcpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQmUsZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoU290LCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5Iiw5OTkpLEkoNTYyLDE2Nyx7MzIxOjEsMTY3OjEsNTYyOjF9LG1jZSksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsUCgib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5zdHJ1Y3R1cmVzIiwiRENQb2x5b21pbm8iLDU2Mik7dmFyIHp1dCxxdXQsbkc7SSgxMjY4LDEsdWksZG0pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpidChlKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjgpLEkoMTI2OSwxLHt9LHBrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBqeCgpLFpkKHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTI2OSksSSgxMjcwLDEsdWkseDMpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJ0bih1KGUsNzkpKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDEyNzApLEkoMTI3MSwxLHt9LE1sKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBqeCgpLFhwKHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTI3MSksSSgxMjcyLDEsdWksVDApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZ0bih1KGUsNzkpKX0sUChBNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDEyNzIpLEkoMTI3MywxLHVpLHdpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBvcm4odGhpcy5hLHUoZSw3OSkpfSxQKEE0LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTI3MyksSSgxMjc0LDEse30sS3MpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIENlbih0aGlzLmEsdShlLDc5KSl9LFAoQTQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxMjc0KSxJKDEyNDEsMSx7fSxqWnQpLGwuYT0wLFAoQTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIiLDEyNDEpLEkoMTI0MiwxLHt9LGN2KSxsLk9kPWZ1bmN0aW9uKGUsbil7YnBuKHRoaXMsdShlLDE2MCksdShuLDI2NikpfSxQKEE0LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIiLDEyNDIpLEkoMTI0MywxLFVuLGthKSxsLnRkPWZ1bmN0aW9uKGUpe3pYZSh0aGlzLHUoZSw4KSl9LFAoQTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllci9PZmZTZXRUb0NoYWluQXBwbGllciIsMTI0MyksSSg3NTMsMSx7fSxGNSksUChzNnQsYTZ0LDc1MyksSSgxMjMyLDEsT2ksamIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnBuKHUoZSwyMzEpLHUobiwyMzEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHM2dCxqZmUsMTIzMiksSSg3NDAsMjA5LEUyLExwdCksbC5aZT1mdW5jdGlvbihlLG4pe2tjZSh0aGlzLGUsbil9LFAoczZ0LCJGb3JjZUxheW91dFByb3ZpZGVyIiw3NDApLEkoMzU3LDEzNCx7MzoxLDM1NzoxLDk0OjEsMTM0OjF9KSxQKFJELCJGUGFydGljbGUiLDM1NyksSSg1NTksMzU3LHszOjEsNTU5OjEsMzU3OjEsOTQ6MSwxMzQ6MX0sSFl0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT8oZT1Sbyh0aGlzLmEuYSx0aGlzLDApLGU+PTA/ImIiK2UrIlsiK01ydCh0aGlzLmEpKyJdIjoiYlsiK01ydCh0aGlzLmEpKyJdIik6ImJfIitJdih0aGlzKX0sUChSRCwiRkJlbmRwb2ludCIsNTU5KSxJKDI4MiwxMzQsezM6MSwyODI6MSw5NDoxLDEzNDoxfSxSV3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gTXJ0KHRoaXMpfSxQKFJELCJGRWRnZSIsMjgyKSxJKDIzMSwxMzQsezM6MSwyMzE6MSw5NDoxLDEzNDoxfSxfJCk7dmFyIGN4bj1QKFJELCJGR3JhcGgiLDIzMSk7SSg0NDcsMzU3LHszOjEsNDQ3OjEsMzU3OjEsOTQ6MSwxMzQ6MX0selp0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbHx8dGhpcy5iLmxlbmd0aD09MD8ibFsiK01ydCh0aGlzLmEpKyJdIjoibF8iK3RoaXMuYn0sUChSRCwiRkxhYmVsIiw0NDcpLEkoMTQ0LDM1Nyx7MzoxLDE0NDoxLDM1NzoxLDk0OjEsMTM0OjF9LFFZdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBxd3QodGhpcyl9LGwuYj0wLFAoUkQsIkZOb2RlIiwxNDQpLEkoMjAwMywxLHt9KSxsLmJmPWZ1bmN0aW9uKGUpe0o1dCh0aGlzLGUpfSxsLmNmPWZ1bmN0aW9uKCl7eXNlKHRoaXMpfSxsLmQ9MCxQKG82dCwiQWJzdHJhY3RGb3JjZU1vZGVsIiwyMDAzKSxJKDYzMSwyMDAzLHs2MzE6MX0sTW5lKSxsLmFmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gYm9lKHRoaXMuZixlLG4pLG89bmEobmMobi5kKSxlLmQpLGQ9Yi5NYXRoLnNxcnQoby5hKm8uYStvLmIqby5iKSxzPWIuTWF0aC5tYXgoMCxkLUFDKGUuZSkvMi1BQyhuLmUpLzIpLHI9YXJlKHRoaXMuZSxlLG4pLHI+MD9oPS1iZW4ocyx0aGlzLmMpKnI6aD1jUWUocyx0aGlzLmIpKnUoUShlLChaZigpLHQ3KSksMTkpLmEsdWQobyxoL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7SjV0KHRoaXMsZSksdGhpcy5hPXUoUShlLChaZigpLGlHKSksMTkpLmEsdGhpcy5jPVh0KHllKFEoZSxzRykpKSx0aGlzLmI9WHQoeWUoUShlLEd1dCkpKX0sbC5kZj1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmF9LGwuYT0wLGwuYj0wLGwuYz0wLFAobzZ0LCJFYWRlc01vZGVsIiw2MzEpLEkoNjMyLDIwMDMsezYzMjoxfSxJS3QpLGwuYWY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBib2UodGhpcy5mLGUsbiksbz1uYShuYyhuLmQpLGUuZCksZD1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLHM9Yi5NYXRoLm1heCgwLGQtQUMoZS5lKS8yLUFDKG4uZSkvMiksaD1vUWUocyx0aGlzLmEpKnUoUShlLChaZigpLHQ3KSksMTkpLmEscj1hcmUodGhpcy5lLGUsbikscj4wJiYoaC09eUtlKHMsdGhpcy5hKSpyKSx1ZChvLGgqdGhpcy5iL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKEo1dCh0aGlzLGUpLHRoaXMuYj1YdCh5ZShRKGUsKFpmKCksVnV0KSkpKSx0aGlzLmM9dGhpcy5iL3UoUShlLGlHKSwxOSkuYSxzPWUuZS5jLmxlbmd0aCxoPTAsbz0wLHc9bmV3IFMoZS5lKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNDQpLGgrPWQuZS5hLG8rPWQuZS5iO249aCpvLHI9WHQoeWUoUShlLHNHKSkpKlAxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKnMpKSpyfSxsLmNmPWZ1bmN0aW9uKCl7eXNlKHRoaXMpLHRoaXMuYi09dGhpcy5jfSxsLmRmPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI+MH0sbC5hPTAsbC5iPTAsbC5jPTAsUChvNnQsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjMyKSxJKDg0OSwxLEloLERKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxcSksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksdTd0KSwoamcoKSxjcykpLGw3dCksdW4oKFhmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYzZ0KSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxkZSgzMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdTZ0KSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxkZSgwKSksZ2MpLGphKSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLElvdCksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLHlkKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLElvdCxxcSxLcGUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxEb3QpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksRG8pLGNhKSx1bihxbikpKSksYWEoZSxEb3QscXEsVnBlKSx2aGUoKG5ldyBkOSxlKSl9O3ZhciBxcGUsSHBlLHU3dCxHcGUsVnBlLFVwZSxXcGUsS3BlO1AoTl8sIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODQ5KSxJKDQyNCwyMix7MzoxLDM1OjEsMjI6MSw0MjQ6MX0sU2J0KTt2YXIgSHV0LHJHLGw3dD1qcihOXywiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MjQsSHIsbnJuLHdaZSksWXBlO0koOTg4LDEsSWgsZDkpLGwuUWU9ZnVuY3Rpb24oZSl7dmhlKGUpfTt2YXIgWHBlLFFwZSxoN3QsaUcsZjd0LFpwZSxKcGUsdGJlLGQ3dCxlYmUsZzd0LHA3dCxuYmUsdDcscmJlLEd1dCxiN3QsaWJlLHNiZSxzRyxWdXQ7UChOXywiRm9yY2VPcHRpb25zIiw5ODgpLEkoOTg5LDEse30sQjUpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgTHB0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKE5fLCJGb3JjZU9wdGlvbnMvRm9yY2VGYWN0b3J5Iiw5ODkpO3ZhciBkTyxsUyxDNixhRztJKDg1MCwxLEloLE9KKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoNnQpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChGbigpLCExKSksKGpnKCksQWEpKSxCcyksdW4oKFhmKCksSnMpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZjZ0KSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksRG8pLGNhKSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSWRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGQ2dCksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSx2N3QpLGNzKSxUN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZzZ0KSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLHlkKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscDZ0KSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIiksZGUodmkpKSxnYyksamEpLHVuKHFuKSkpKSxlaGUoKG5ldyBOSixlKSl9O3ZhciBhYmUsb2JlLHY3dCxjYmUsdWJlLGxiZTtQKE5fLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NTApLEkoOTkyLDEsSWgsTkopLGwuUWU9ZnVuY3Rpb24oZSl7ZWhlKGUpfTt2YXIgb0csdzd0LG03dCx5N3QseDd0LGs3dCxoYmUsZmJlLGRiZSxnYmUsRTd0LHBiZTtQKE5fLCJTdHJlc3NPcHRpb25zIiw5OTIpLEkoOTkzLDEse30sbDEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgald0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKE5fLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDk5MyksSSgxMTI4LDIwOSxFMixqV3QpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2Zvcih3cihuLEdmZSwxKSxqZShSZShxZShlLChKSSgpLHg3dCkpKSk/amUoUmUocWUoZSxFN3QpKSl8fHUkKChyPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxyKSk6a2NlKG5ldyBMcHQsZSxSYyhuLDEpKSxvPVpuZShlKSxzPWhsZSh0aGlzLmEsbyksZD1zLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDIzMSksIShoLmUuYy5sZW5ndGg8PTEpJiYoU3luKHRoaXMuYixoKSxzYm4odGhpcy5iKSxtdShoLmQsbmV3IHRkKSk7bz1UaGUocykseGhlKG8pLG9yKG4pfSxQKFZxLCJTdHJlc3NMYXlvdXRQcm92aWRlciIsMTEyOCksSSgxMTI5LDEsVW4sdGQpLGwudGQ9ZnVuY3Rpb24oZSl7YXh0KHUoZSw0NDcpKX0sUChWcSwiU3RyZXNzTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEyOSksSSg5OTAsMSx7fSxLenQpLGwuYz0wLGwuZT0wLGwuZz0wLFAoVnEsIlN0cmVzc01ham9yaXphdGlvbiIsOTkwKSxJKDM3OSwyMix7MzoxLDM1OjEsMjI6MSwzNzk6MX0sbWV0KTt2YXIgVXV0LFd1dCxLdXQsVDd0PWpyKFZxLCJTdHJlc3NNYWpvcml6YXRpb24vRGltZW5zaW9uIiwzNzksSHIsTXJuLG1aZSksYmJlO0koOTkxLDEsT2ksQ2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWVFlKHRoaXMuYSx1KGUsMTQ0KSx1KG4sMTQ0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChWcSwiU3RyZXNzTWFqb3JpemF0aW9uL2xhbWJkYSQwJFR5cGUiLDk5MSksSSgxMjI5LDEse30sdFp0KSxQKG02LCJFbGtMYXllcmVkIiwxMjI5KSxJKDEyMzAsMSxVbixlZCksbC50ZD1mdW5jdGlvbihlKXthcG4odShlLDM3KSl9LFAobTYsIkVsa0xheWVyZWQvbGFtYmRhJDAkVHlwZSIsMTIzMCksSSgxMjMxLDEsVW4saGkpLGwudGQ9ZnVuY3Rpb24oZSl7WFFlKHRoaXMuYSx1KGUsMzcpKX0sUChtNiwiRWxrTGF5ZXJlZC9sYW1iZGEkMSRUeXBlIiwxMjMxKSxJKDEyNjMsMSx7fSxfVXQpO3ZhciB2YmUsd2JlLG1iZTtQKG02LCJHcmFwaENvbmZpZ3VyYXRvciIsMTI2MyksSSg3NTksMSxVbixncyksbC50ZD1mdW5jdGlvbihlKXtBYWUodGhpcy5hLHUoZSwxMCkpfSxQKG02LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw3NTkpLEkoNzYwLDEse30sUjUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHI0dCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUChtNiwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZSIsNzYwKSxJKDc2MSwxLFVuLHFpKSxsLnRkPWZ1bmN0aW9uKGUpe0FhZSh0aGlzLmEsdShlLDEwKSl9LFAobTYsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUiLDc2MSksSSgxMTI3LDIwOSxFMixRenQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPUttbihuZXcgcnF0LGUpLEd0KHFlKGUsKFRlKCksankpKSk9PT1HdCgoJDAoKSxaZykpP19sbih0aGlzLmEscixuKTprcG4odGhpcy5hLHIsbiksYmhlKG5ldyBGSixyKX0sUChtNiwiTGF5ZXJlZExheW91dFByb3ZpZGVyIiwxMTI3KSxJKDM1NiwyMix7MzoxLDM1OjEsMjI6MSwzNTY6MX0seE0pO3ZhciBBZCxsYixvdSxxYyxJbyxDN3Q9anIobTYsIkxheWVyZWRQaGFzZXMiLDM1NixIcixkc24seVplKSx5YmU7SSgxNjUxLDEse30samVlKSxsLmk9MDt2YXIgeGJlO1AoekQsIkNvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjUxKTt2YXIga2JlO0koMTY1MiwxLHt9LHV2KSxsLmVmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxsLmZmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxQKHpELCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci8xIiwxNjUyKSxJKDgxLDEsezgxOjF9KSxsLmk9MCxsLms9ITAsbC5vPVRzO3ZhciBZdXQ9UChCXywiQ05vZGUiLDgxKTtJKDQ2MCw4MSx7NDYwOjEsODE6MX0sQTJ0LEwzdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxQKHpELCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci9DUmVjdE5vZGUiLDQ2MCksSSgxNjIzLDEse30sajUpO3ZhciBYdXQsUXV0O1AoekQsIk9uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24iLDE2MjMpLEkoMTYyNCwxLHt9LHBwKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB4cm4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKHpELCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQwJFR5cGUiLDE2MjQpLEkoMTYyNSwxLHt9LCQ1KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBObG4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKHpELCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDE2MjUpLEkoMTY1NCwxLHt9LFhZdCksUChCXywiQ0dyYXBoIiwxNjU0KSxJKDE4OSwxLHsxODk6MX0sWGl0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmc9ITAsbC5pPVRzLFAoQl8sIkNHcm91cCIsMTg5KSxJKDE2NTMsMSx7fSx3TCksbC5lZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sbC5mZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sUChCXyx3ZmUsMTY1MyksSSgxNjU1LDEse30sTG9lKSxsLmQ9ITE7dmFyIEViZSxadXQ9UChCXyx4ZmUsMTY1NSk7SSgxNjU2LDEse30sYmwpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGdidCgpLEZuKCksdSh1KGUsNDYpLmEsODEpLmQuZSE9MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoQl8sa2ZlLDE2NTYpLEkoODIzLDEse30sUnZ0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsUChCXyxFZmUsODIzKSxJKDE4MjUsMSx7fSxnWXQpLFAoVXEsVGZlLDE4MjUpO3ZhciBnTz1ZaShDMixiZmUpO0koMTgyNiwxLHszNjk6MX0sVlh0KSxsLktlPWZ1bmN0aW9uKGUpe3B2bih0aGlzLHUoZSw0NjYpKX0sUChVcSxDZmUsMTgyNiksSSgxODI3LDEsT2ksV1ApLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcG5uKHUoZSw4MSksdShuLDgxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChVcSxfZmUsMTgyNyksSSg0NjYsMSx7NDY2OjF9LExidCksbC5hPSExLFAoVXEsU2ZlLDQ2NiksSSgxODI4LDEsT2ksU2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUzFuKHUoZSw0NjYpLHUobiw0NjYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKFVxLEFmZSwxODI4KSxJKDE0MCwxLHsxNDA6MX0sYTgsT3Z0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHx1eG4hPXNsKGUpPyExOihuPXUoZSwxNDApLFBjKHRoaXMuYyxuLmMpJiZQYyh0aGlzLmQsbi5kKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdnooY3Qob3QoWG4sMSksSWUsMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytLYSt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxsLmE9ITAsbC5jPTAsbC5kPTA7dmFyIHV4bj1QKEMyLCJQb2ludCIsMTQwKTtJKDQwNSwyMix7MzoxLDM1OjEsMjI6MSw0MDU6MX0scVIpO3ZhciBfdyxJeSxqNCxEeSxUYmU9anIoQzIsIlBvaW50L1F1YWRyYW50Iiw0MDUsSHIsSWluLHhaZSksQ2JlO0koMTY0MiwxLHt9LFp6dCksbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsbC5mPW51bGw7dmFyIF9iZSxTYmUsQWJlLExiZSxNYmU7UChDMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNjQyKSxJKDU3NCwxLHszNjk6MX0sQnopLGwuS2U9ZnVuY3Rpb24oZSl7Z2FuKHRoaXMsdShlLDE0MCkpfSxsLmI9MDt2YXIgXzd0O1AoQzIsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU3NCksSSgxNjQ0LDEsT2ksZ20pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaW5uKHllKGUpLHllKG4pKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE2NDQpLEkoMTY0MywxLHszNjk6MX0sY2VlKSxsLktlPWZ1bmN0aW9uKGUpe0Eybih0aGlzLHUoZSwxNDApKX0sbC5hPTAsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsUChDMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTY0MyksSSgxNjQ1LDEsT2ksZ2cpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb2luKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTY0NSksSSgxNjQ2LDEsT2ksazMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY2luKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTY0NiksSSgxNjQ3LDEsT2ksUUspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGluKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTY0NyksSSgxNjQ4LDEsT2ksJGIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdWluKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTY0OCksSSgxNjQ5LDEsT2ksWkspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZjBuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEMyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTY0OSksSSgxNjUwLDEse30sa1F0KSxQKEMyLCJTY2FubGluZSIsMTY1MCksSSgyMDA1LDEse30pLFAoeGQsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIwMDUpLEkoMzI1LDEsezMyNToxfSxnV3QpLGwubWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmYoZSk/KGxuKHRoaXMuYix1KFEoZSwoc2UoKSxOeSkpLDIxKSxlKSwhMCk6ITF9LGwubmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG49dShRKGUsKHNlKCksTnkpKSwyMSksbz11KEFpKE5pLG4pLDIxKSxzPW8uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIE5pO1AoeGQsIkNvbXBvbmVudEdyb3VwIiwzMjUpLEkoNzY1LDIwMDUse30sT3B0KSxsLm9mPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFModGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMjUpLG4ubWYoZSkpcmV0dXJuO3VlKHRoaXMuYSxuZXcgZ1d0KGUpKX0sbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZO2lmKHRoaXMuYS5jPVB0KFhuLEllLDEsMCw1LDEpLG4uYS5jPVB0KFhuLEllLDEsMCw1LDEpLGUuZGMoKSl7bi5mLmE9MCxuLmYuYj0wO3JldHVybn1mb3IoZD11KGUuWGIoMCksMzcpLExvKG4sZCksbz1lLktjKCk7by5PYigpOylzPXUoby5QYigpLDM3KSx0aGlzLm9mKHMpO2ZvcihZPW5ldyBUYSxoPVh0KHllKFEoZCwoVGUoKSxBTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXc9dShKKEMpLDMyNSksTT1EaGUodyxoKSxNZyhZaih3LmIpLFkuYSxZLmIpLFkuYSs9TS5hLFkuYis9TS5iO2lmKG4uZi5hPVkuYS1oLG4uZi5iPVkuYi1oLGplKFJlKFEoZCxXRykpKSYmR3QoUShkLFgwKSk9PT1HdCgocTAoKSxBNykpKXtmb3IoVj1lLktjKCk7Vi5PYigpOylGPXUoVi5QYigpLDM3KSx3XyhGLEYuYy5hLEYuYy5iKTtmb3Iocj1uZXcgSVQsX3h0KHIsZSxoKSxIPWUuS2MoKTtILk9iKCk7KUY9dShILlBiKCksMzcpLExpKEdmKEYuYyksci5lKTtMaShHZihuLmYpLHIuYSl9Zm9yKGs9bmV3IFModGhpcy5hKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwzMjUpLF9tdChuLFlqKHcuYikpfSxQKHhkLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NjUpLEkoMTI5Myw3NjUse30sbHF0KSxsLm9mPWZ1bmN0aW9uKGUpe2pyZSh0aGlzLGUpfSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQ7aWYodGhpcy5hLmM9UHQoWG4sSWUsMSwwLDUsMSksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksZS5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihkPXUoZS5YYigwKSwzNyksTG8obixkKSxvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzcpLGpyZSh0aGlzLHMpO2ZvcihCdD1uZXcgVGEsX3Q9bmV3IFRhLHR0PW5ldyBUYSxZPW5ldyBUYSxoPVh0KHllKFEoZCwoVGUoKSxBTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih3PXUoSihDKSwzMjUpLE9wKHUoUShuLChjaSgpLGp3KSksMTAzKSkpe2Zvcih0dC5hPUJ0LmEsTHQ9bmV3IEQ5KFNDKFdudCh3LmIpLmEpLmEua2MoKSk7THQuYi5PYigpOylpZihndD11KFBSKEx0LmIuUGIoKSksMjEpLGd0LkhjKChiZSgpLE5uKSkpe3R0LmE9X3QuYTticmVha319ZWxzZSBpZihjOCh1KFEobixqdyksMTAzKSkpe2Zvcih0dC5iPUJ0LmIsTHQ9bmV3IEQ5KFNDKFdudCh3LmIpLmEpLmEua2MoKSk7THQuYi5PYigpOylpZihndD11KFBSKEx0LmIuUGIoKSksMjEpLGd0LkhjKChiZSgpLEJuKSkpe3R0LmI9X3QuYjticmVha319aWYoTT1EaGUodSh3LDU3MCksaCksTWcoWWoody5iKSx0dC5hLHR0LmIpLE9wKHUoUShuLGp3KSwxMDMpKSl7Zm9yKF90LmE9dHQuYStNLmEsWS5hPWIuTWF0aC5tYXgoWS5hLF90LmEpLEx0PW5ldyBEOShTQyhXbnQody5iKS5hKS5hLmtjKCkpO0x0LmIuT2IoKTspaWYoZ3Q9dShQUihMdC5iLlBiKCkpLDIxKSxndC5IYygoYmUoKSxtcikpKXtCdC5hPXR0LmErTS5hO2JyZWFrfV90LmI9dHQuYitNLmIsdHQuYj1fdC5iLFkuYj1iLk1hdGgubWF4KFkuYix0dC5iKX1lbHNlIGlmKGM4KHUoUShuLGp3KSwxMDMpKSl7Zm9yKF90LmI9dHQuYitNLmIsWS5iPWIuTWF0aC5tYXgoWS5iLF90LmIpLEx0PW5ldyBEOShTQyhXbnQody5iKS5hKS5hLmtjKCkpO0x0LmIuT2IoKTspaWYoZ3Q9dShQUihMdC5iLlBiKCkpLDIxKSxndC5IYygoYmUoKSxIbikpKXtCdC5iPXR0LmIrTS5iO2JyZWFrfV90LmE9dHQuYStNLmEsdHQuYT1fdC5hLFkuYT1iLk1hdGgubWF4KFkuYSx0dC5hKX19aWYobi5mLmE9WS5hLWgsbi5mLmI9WS5iLWgsamUoUmUoUShkLFdHKSkpJiZHdChRKGQsWDApKT09PUd0KChxMCgpLEE3KSkpe2ZvcihWPWUuS2MoKTtWLk9iKCk7KUY9dShWLlBiKCksMzcpLHdfKEYsRi5jLmEsRi5jLmIpO2ZvcihyPW5ldyBJVCxfeHQocixlLGgpLEg9ZS5LYygpO0guT2IoKTspRj11KEguUGIoKSwzNyksTGkoR2YoRi5jKSxyLmUpO0xpKEdmKG4uZiksci5hKX1mb3Ioaz1uZXcgUyh0aGlzLmEpO2suYTxrLmMuYy5sZW5ndGg7KXc9dShKKGspLDMyNSksX210KG4sWWoody5iKSl9LFAoeGQsIkNvbXBvbmVudEdyb3VwTW9kZWxPcmRlckdyYXBoUGxhY2VyIiwxMjkzKSxJKDQyMywyMix7MzoxLDM1OjEsMjI6MSw0MjM6MX0seWV0KTt2YXIgSnV0LFM3dCwkNCxBN3Q9anIoeGQsIkNvbXBvbmVudE9yZGVyaW5nU3RyYXRlZ3kiLDQyMyxIcixMcm4sa1plKSxJYmU7SSg2NTAsMSx7fSxJVCksUCh4ZCwiQ29tcG9uZW50c0NvbXBhY3RvciIsNjUwKSxJKDE0NjgsMTIsdWZlLGJKdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gbF8odGhpcyx1KGUsMTQwKSl9LFAoeGQsIkNvbXBvbmVudHNDb21wYWN0b3IvSHVsbHBvaW50cyIsMTQ2OCksSSgxNDY1LDEsezg0MToxfSxlc2UpLGwuYT0hMSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29tcG9uZW50IiwxNDY1KSxJKDE0NjQsMSx0MCxKenQpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29ubmVjdGVkQ29tcG9uZW50cyIsMTQ2NCksSSgxNDY3LDEsezU5NDoxfSxJb2UpLGwuaGY9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5qZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdHN0KHRoaXMuZCl9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsRXh0ZXJuYWxFeHRlbnNpb24iLDE0NjcpLEkoMTQ2NiwxLHs1OTQ6MX0sbnF0KSxsLmpmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5nZj1mdW5jdGlvbigpe3JldHVybiB0c3QodGhpcy5kKX0sbC5oZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsVW5pb25FeHRlcm5hbEV4dGVuc2lvbiIsMTQ2NiksSSgxNDcwLDEse30sWWNlKSxQKHhkLCJDb21wb25lbnRzQ29tcGFjdG9yL091dGVyU2VnbWVudHMiLDE0NzApLEkoMTQ2OSwxLHt9LHRxdCksUCh4ZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9TZWdtZW50cyIsMTQ2OSksSSgxMjY0LDEse30sVVh0KSxQKHhkLGE2dCwxMjY0KSxJKDEyNjUsMSxPaSxKSyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkaW4odShlLDM3KSx1KG4sMzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHhkLCJDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjUpLEkoNTcwLDMyNSx7MzI1OjEsNTcwOjF9LHBKdCksbC5tZj1mdW5jdGlvbihlKXtyZXR1cm4gT3l0KHRoaXMsZSl9LGwubmY9ZnVuY3Rpb24oZSl7cmV0dXJuIExjZSh0aGlzLGUpfTt2YXIgUXI7UCh4ZCwiTW9kZWxPcmRlckNvbXBvbmVudEdyb3VwIiw1NzApLEkoMTI5MSwyMDA1LHt9LEtQKSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2U7aWYoZS5nYygpPT0xKXtCdD11KGUuWGIoMCksMzcpLEJ0IT1uJiYobi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksTnVlKG4sQnQsMCwwKSxMbyhuLEJ0KSxTd3Qobi5kLEJ0LmQpLG4uZi5hPUJ0LmYuYSxuLmYuYj1CdC5mLmIpO3JldHVybn1lbHNlIGlmKGUuZGMoKSl7bi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksbi5mLmE9MCxuLmYuYj0wO3JldHVybn1pZihHdChRKG4sKFRlKCksUDYpKSk9PT1HdCgoZXcoKSwkNCkpKXtmb3Ioaz1lLktjKCk7ay5PYigpOyl7Zm9yKGQ9dShrLlBiKCksMzcpLEx0PTAsdHQ9bmV3IFMoZC5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KVk9dShKKHR0KSwxMCksTHQrPXUoUShZLFB3ZSksMTkpLmE7ZC5wPUx0fXZuKCksZS5hZChuZXcgQmYpfWZvcihoPXUoZS5YYigwKSwzNyksbi5hLmM9UHQoWG4sSWUsMSwwLDUsMSksTG8obixoKSxWPTAsWXQ9MCxDPWUuS2MoKTtDLk9iKCk7KWQ9dShDLlBiKCksMzcpLF90PWQuZixWPWIuTWF0aC5tYXgoVixfdC5hKSxZdCs9X3QuYSpfdC5iO2ZvcihWPWIuTWF0aC5tYXgoVixiLk1hdGguc3FydChZdCkqWHQoeWUoUShuLFVHKSkpKSxvPVh0KHllKFEobixBTykpKSxjZT0wLFNlPTAsSD0wLHI9byx3PWUuS2MoKTt3Lk9iKCk7KWQ9dSh3LlBiKCksMzcpLF90PWQuZixjZStfdC5hPlYmJihjZT0wLFNlKz1IK28sSD0wKSxndD1kLmMsd18oZCxjZStndC5hLFNlK2d0LmIpLEdmKGd0KSxyPWIuTWF0aC5tYXgocixjZStfdC5hKSxIPWIuTWF0aC5tYXgoSCxfdC5iKSxjZSs9X3QuYStvO2lmKG4uZi5hPXIsbi5mLmI9U2UrSCxqZShSZShRKGgsV0cpKSkpe2ZvcihzPW5ldyBJVCxfeHQocyxlLG8pLEY9ZS5LYygpO0YuT2IoKTspTT11KEYuUGIoKSwzNyksTGkoR2YoTS5jKSxzLmUpO0xpKEdmKG4uZikscy5hKX1fbXQobixlKX0sUCh4ZCwiU2ltcGxlUm93R3JhcGhQbGFjZXIiLDEyOTEpLEkoMTI5MiwxLE9pLEJmKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxjbih1KGUsMzcpLHUobiwzNykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoeGQsIlNpbXBsZVJvd0dyYXBoUGxhY2VyLzEiLDEyOTIpO3ZhciBEYmU7SSgxMjYyLDEsd2QscG0pLGwuTGI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShRKHUoZSwyNDMpLmIsKFRlKCksX28pKSw3NCksISFuJiZuLmIhPTB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoUSh1KGUsMjQzKS5iLChUZSgpLF9vKSksNzQpLCEhbiYmbi5iIT0wfSxQKFdxLCJDb21wb3VuZEdyYXBoUG9zdHByb2Nlc3Nvci8xIiwxMjYyKSxJKDEyNjEsMSxhcyxpcXQpLGwucGY9ZnVuY3Rpb24oZSxuKXtyc2UodGhpcyx1KGUsMzcpLG4pfSxQKFdxLCJDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yIiwxMjYxKSxJKDQ0MSwxLHs0NDE6MX0sR3JlKSxsLmM9ITEsUChXcSwiQ29tcG91bmRHcmFwaFByZXByb2Nlc3Nvci9FeHRlcm5hbFBvcnQiLDQ0MSksSSgyNDMsMSx7MjQzOjF9LFRqKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNudCh0aGlzLmMpKyI6IitDb2UodGhpcy5iKX0sUChXcSwiQ3Jvc3NIaWVyYXJjaHlFZGdlIiwyNDMpLEkoNzYzLDEsT2ksU2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSmZuKHRoaXMsdShlLDI0MyksdShuLDI0MykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoV3EsIkNyb3NzSGllcmFyY2h5RWRnZUNvbXBhcmF0b3IiLDc2MyksSSgyOTksMTM0LHszOjEsMjk5OjEsOTQ6MSwxMzQ6MX0pLGwucD0wLFAoSmMsIkxHcmFwaEVsZW1lbnQiLDI5OSksSSgxNywyOTksezM6MSwxNzoxLDI5OToxLDk0OjEsMTM0OjF9LHp2KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIENvZSh0aGlzKX07dmFyIHRsdD1QKEpjLCJMRWRnZSIsMTcpO0koMzcsMjk5LHszOjEsMjA6MSwzNzoxLDI5OToxLDk0OjEsMTM0OjF9LEttdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RoPT0wPyJHLXVubGF5ZXJlZCIrUXAodGhpcy5hKTp0aGlzLmEuYy5sZW5ndGg9PTA/IkctbGF5ZXJlZCIrUXAodGhpcy5iKToiR1tsYXllcmxlc3MiK1FwKHRoaXMuYSkrIiwgbGF5ZXJzIitRcCh0aGlzLmIpKyJdIn07dmFyIE9iZT1QKEpjLCJMR3JhcGgiLDM3KSxOYmU7SSg2NTcsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUubn0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLmUsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm99LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLnB9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHRoaXMuZSxlKX0sbC50Zj1mdW5jdGlvbihlKXt0aGlzLmUubi5hPWUuYSx0aGlzLmUubi5iPWUuYn0sbC51Zj1mdW5jdGlvbihlKXt0aGlzLmUuby5hPWUuYSx0aGlzLmUuby5iPWUuYn0sbC52Zj1mdW5jdGlvbihlKXt0aGlzLmUucD1lfSxQKEpjLCJMR3JhcGhBZGFwdGVycy9BYnN0cmFjdExTaGFwZUFkYXB0ZXIiLDY1NyksSSg1NzcsMSx7ODM5OjF9LFVpKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9SGQodGhpcy5hLmIuYy5sZW5ndGgpLG49bmV3IFModGhpcy5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmIsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLmI9bnVsbCxQKEpjLCJMR3JhcGhBZGFwdGVycy9MRWRnZUFkYXB0ZXIiLDU3NyksSSg2NTYsMSx7fSx0cnQpLGwueGY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYoIXRoaXMuYil7Zm9yKHRoaXMuYj1uZXcgbGUscz1uZXcgUyh0aGlzLmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLHRoaXMuYy5NYihvKSYmKHVlKHRoaXMuYixuZXcgQ2oodGhpcyxvLHRoaXMuZSkpLHRoaXMuZCkpe2lmKFZzKG8sKHNlKCksTjYpKSlmb3Iobj11KFEobyxONiksMTUpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDEwKSx1ZSh0aGlzLmIsbmV3IENqKHRoaXMsZSwhMSkpO2lmKFZzKG8sTDYpKWZvcihuPXUoUShvLEw2KSwxNSkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTApLHVlKHRoaXMuYixuZXcgQ2oodGhpcyxlLCExKSl9fXJldHVybiB0aGlzLmJ9LGwucWY9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgeWcoV2ZlKSl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEodGhpcy5hLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5wfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh0aGlzLmEsZSl9LGwudGY9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IHlnKFdmZSkpfSxsLnVmPWZ1bmN0aW9uKGUpe3RoaXMuYS5mLmE9ZS5hLHRoaXMuYS5mLmI9ZS5ifSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuYS5wPWV9LGwuYj1udWxsLGwuZD0hMSxsLmU9ITEsUChKYywiTEdyYXBoQWRhcHRlcnMvTEdyYXBoQWRhcHRlciIsNjU2KSxJKDU3Niw2NTcsezE4MToxfSxHYSksUChKYywiTEdyYXBoQWRhcHRlcnMvTExhYmVsQWRhcHRlciIsNTc2KSxJKDU3NSw2NTcsezY4MDoxfSxDaiksbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuemY9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGlvfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9SGQodSh0aGlzLmUsMTApLmIuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTApLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmEsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmUsMTApLmQsbmV3IG52dChlLmQsZS5jLGUuYSxlLmIpfSxsLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIHZuKCksdm4oKSxpb30sbC5DZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPUhkKHUodGhpcy5lLDEwKS5qLmMubGVuZ3RoKSxuPW5ldyBTKHUodGhpcy5lLDEwKS5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksdWUodGhpcy5jLG5ldyBZR3QoZSx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxsLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTApLChzZSgpLEtUdCkpKSl9LGwuRWY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmQuYj1lLmIsdSh0aGlzLmUsMTApLmQuZD1lLmQsdSh0aGlzLmUsMTApLmQuYz1lLmMsdSh0aGlzLmUsMTApLmQuYT1lLmF9LGwuRmY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmYuYj1lLmIsdSh0aGlzLmUsMTApLmYuZD1lLmQsdSh0aGlzLmUsMTApLmYuYz1lLmMsdSh0aGlzLmUsMTApLmYuYT1lLmF9LGwuR2Y9ZnVuY3Rpb24oKXtLYW4odGhpcywoejkoKSxOYmUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLFAoSmMsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTc1KSxJKDE3MjIsNjU3LHs4Mzg6MX0sWUd0KSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oR24oKSxIYykpcmV0dXJuIHZuKCksdm4oKSxpbztpZighdGhpcy5hKXtmb3IodGhpcy5hPW5ldyBsZSxyPW5ldyBTKHUodGhpcy5lLDExKS5lKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksdWUodGhpcy5hLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChzZSgpLFp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSx1ZSh0aGlzLmEsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5hfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9SGQodSh0aGlzLmUsMTEpLmYuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTEpLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSx1ZSh0aGlzLmIsbmV3IEdhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oR24oKSxIYykpcmV0dXJuIHZuKCksdm4oKSxpbztpZighdGhpcy5jKXtmb3IodGhpcy5jPW5ldyBsZSxyPW5ldyBTKHUodGhpcy5lLDExKS5nKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksdWUodGhpcy5jLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChzZSgpLFp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihNcyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KExyKG4pLDE3KSx1ZSh0aGlzLmMsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5jfSxsLkhmPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5lLDExKS5qfSxsLklmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTEpLChzZSgpLGtPKSkpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLFAoSmMsIkxHcmFwaEFkYXB0ZXJzL0xQb3J0QWRhcHRlciIsMTcyMiksSSgxNzIzLDEsT2ksbUwpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4genZuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChKYywiTEdyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDE3MjMpLEkoODA0LDEsdWksWVApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCksejkoKSwhMH0sUChKYywiTEdyYXBoQWRhcHRlcnMvbGFtYmRhJDAkVHlwZSIsODA0KSxJKDM5MiwyOTksezM6MSwyOTk6MSwzOTI6MSw5NDoxLDEzNDoxfSksUChKYywiTFNoYXBlIiwzOTIpLEkoNzAsMzkyLHszOjEsMjk5OjEsNzA6MSwzOTI6MSw5NDoxLDEzNDoxfSxjSHQsdTJ0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bXRuKHRoaXMpLGU9PW51bGw/ImxhYmVsIjoibF8iK2V9LFAoSmMsIkxMYWJlbCIsNzApLEkoMjA3LDEsezM6MSw0OjEsMjA3OjEsNDE0OjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDIwNyk/KG49dShlLDIwNyksdGhpcy5kPT1uLmQmJnRoaXMuYT09bi5hJiZ0aGlzLmI9PW4uYiYmdGhpcy5jPT1uLmMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT1vOCh0aGlzLmIpPDwxNixlfD1vOCh0aGlzLmEpJm1zLG49bzgodGhpcy5jKTw8MTYsbnw9bzgodGhpcy5kKSZtcyxlXm59LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtmb3IoaD0wO2g8ZS5sZW5ndGgmJk1yZSgoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpKSxZZmUpOykrK2g7Zm9yKG49ZS5sZW5ndGg7bj4wJiZNcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLFhmZSk7KS0tbjtpZihoPG4pe009cHkoZS5zdWJzdHIoaCxuLWgpLCIsfDsiKTt0cnl7Zm9yKHc9TSxrPTAsQz13Lmxlbmd0aDtrPEM7KytrKXtpZihkPXdba10sbz1weShkLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgcnQobmV3IFBuKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7cz11eShvWzBdKSxGPWx5KHV5KG9bMV0pKSxobihzLCJ0b3AiKT90aGlzLmQ9RjpobihzLCJsZWZ0Iik/dGhpcy5iPUY6aG4ocywiYm90dG9tIik/dGhpcy5hPUY6aG4ocywicmlnaHQiKSYmKHRoaXMuYz1GKX19Y2F0Y2goSCl7dGhyb3cgSD1XaShIKSxFdChILDEyNyk/KHI9SCxydChuZXcgUG4oUWZlK3IpKSk6cnQoSCl9fX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsUChxRCwiU3BhY2luZyIsMjA3KSxJKDE0MiwyMDcsWmZlLE05LGNVdCxudnQsd250KTt2YXIgTDd0PVAocUQsIkVsa01hcmdpbiIsMTQyKTtJKDY1MSwxNDIsWmZlLFZ0dCksUChKYywiTE1hcmdpbiIsNjUxKSxJKDEwLDM5Mix7MzoxLDI5OToxLDEwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sSDApLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWGllKHRoaXMpfSxsLmk9ITE7dmFyIG8wPVAoSmMsIkxOb2RlIiwxMCk7SSgyNjcsMjIsezM6MSwzNToxLDIyOjEsMjY3OjF9LEs5KTt2YXIgajEseHMsU2wsWnMsRHMsSGMsZWx0PWpyKEpjLCJMTm9kZS9Ob2RlVHlwZSIsMjY3LEhyLGlhbixFWmUpLFBiZTtJKDExNiwyMDcsSmZlLHd4LE12LHB2dCk7dmFyIE03dD1QKHFELCJFbGtQYWRkaW5nIiwxMTYpO0koNzY0LDExNixKZmUsRnB0KSxQKEpjLCJMUGFkZGluZyIsNzY0KSxJKDExLDM5Mix7MzoxLDI5OToxLDExOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sTWMpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9bmV3IF9wLFZyKChlLmErPSJwXyIsZSksV3oodGhpcykpLHRoaXMuaSYmVnIoaGMoKGUuYSs9IlsiLGUpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmdShGZSh0aGlzLmUsMCksMTcpLmMhPXRoaXMmJihuPXUoRmUodGhpcy5lLDApLDE3KS5jLFZyKChlLmErPSIgPDwgIixlKSxXeihuKSksVnIoaGMoKGUuYSs9IlsiLGUpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJnUoRmUodGhpcy5nLDApLDE3KS5kIT10aGlzJiYocj11KEZlKHRoaXMuZywwKSwxNykuZCxWcigoZS5hKz0iID4+ICIsZSksV3oocikpLFZyKGhjKChlLmErPSJbIixlKSxyLmkpLCJdIikpLGUuYX0sbC5jPSEwLGwuZD0hMTt2YXIgSTd0LEQ3dCxPN3QsTjd0LFA3dCxGN3QsRmJlPVAoSmMsIkxQb3J0IiwxMSk7SSgzOTcsMSx0MCxZcyksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFModGhpcy5hLmUpLG5ldyB6cyhlKX0sUChKYywiTFBvcnQvMSIsMzk3KSxJKDEyOTAsMSxyYSx6cyksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzLmEpfSxQKEpjLCJMUG9ydC8xLzEiLDEyOTApLEkoMzU5LDEsdDAsRXIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBTKHRoaXMuYS5nKSxuZXcgUXQoZSl9LFAoSmMsIkxQb3J0LzIiLDM1OSksSSg3NjIsMSxyYSxRdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5kfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFZvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtfQyh0aGlzLmEpfSxQKEpjLCJMUG9ydC8yLzEiLDc2MiksSSgxMjgzLDEsdDAsVkd0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFMxKHRoaXMpfSxQKEpjLCJMUG9ydC9Db21iaW5lSXRlciIsMTI4MyksSSgyMDEsMSxyYSxTMSksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlFiPWZ1bmN0aW9uKCl7cEh0KCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcEModGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gVm8odGhpcy5hKT9KKHRoaXMuYSk6Sih0aGlzLmIpfSxQKEpjLCJMUG9ydC9Db21iaW5lSXRlci8xIiwyMDEpLEkoMTI4NSwxLHdkLGJwKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfWXQoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sUChKYywiTFBvcnQvbGFtYmRhJDAkVHlwZSIsMTI4NSksSSgxMjg0LDEsd2QsYm0pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFNZdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5nLmMubGVuZ3RoIT0wfSxQKEpjLCJMUG9ydC9sYW1iZGEkMSRUeXBlIiwxMjg0KSxJKDEyODYsMSx3ZCx0WSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLE5uKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxObil9LFAoSmMsIkxQb3J0L2xhbWJkYSQyJFR5cGUiLDEyODYpLEkoMTI4NywxLHdkLHpiKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuaj09KGJlKCksSG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLEhuKX0sUChKYywiTFBvcnQvbGFtYmRhJDMkVHlwZSIsMTI4NyksSSgxMjg4LDEsd2QsZVkpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxtcil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBCdSgpLHUoZSwxMSkuaj09KGJlKCksbXIpfSxQKEpjLCJMUG9ydC9sYW1iZGEkNCRUeXBlIiwxMjg4KSxJKDEyODksMSx3ZCxuWSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gQnUoKSx1KGUsMTEpLmo9PShiZSgpLEJuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1KCksdShlLDExKS5qPT0oYmUoKSxCbil9LFAoSmMsIkxQb3J0L2xhbWJkYSQ1JFR5cGUiLDEyODkpLEkoMjksMjk5LHszOjEsMjA6MSwyOTk6MSwyOToxLDk0OjEsMTM0OjF9LENoKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMXyIrUm8odGhpcy5iLmIsdGhpcywwKStRcCh0aGlzLmEpfSxQKEpjLCJMYXllciIsMjkpLEkoMTM0MiwxLHt9LHJxdCksUChxZyx0MWUsMTM0MiksSSgxMzQ2LDEse30sejUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE1vKHUoZSw4MikpfSxQKHFnLCJFbGtHcmFwaEltcG9ydGVyLzBtZXRob2RyZWYkY29ubmVjdGFibGVTaGFwZVRvTm9kZSRUeXBlIiwxMzQ2KSxJKDEzNDksMSx7fSxEVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTW8odShlLDgyKSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvMW1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzNDkpLEkoMTM0MywxLFVuLGpuKSxsLnRkPWZ1bmN0aW9uKGUpe2pvZSh0aGlzLmEsdShlLDExOCkpfSxQKHFnLGUxZSwxMzQzKSxJKDEzNDQsMSxVbixfciksbC50ZD1mdW5jdGlvbihlKXtqb2UodGhpcy5hLHUoZSwxMTgpKX0sUChxZyxuMWUsMTM0NCksSSgxMzQ1LDEse30sWFApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbihKZW4odShlLDc5KSksMTYpKX0sUChxZyxyMWUsMTM0NSksSSgxMzQ3LDEsdWksaXIpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRYZSh0aGlzLmEsdShlLDMzKSl9LFAocWcsaTFlLDEzNDcpLEkoMTM0OCwxLHt9LGJrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odG5uKHUoZSw3OSkpLDE2KSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsMTM0OCksSSgxMzUwLDEsdWksc3IpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGVYZSh0aGlzLmEsdShlLDMzKSl9LFAocWcsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTM1MCksSSgxMzUxLDEsdWksclkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZubih1KGUsNzkpKX0sUChxZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzUxKSxJKDEyNzgsMSx7fSxGSik7dmFyIEJiZTtQKHFnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjc4KSxJKDEyNzksMSx1aSxJYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gSFFlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMCRUeXBlIiwxMjc5KSxJKDEyODAsMSxVbiwkciksbC50ZD1mdW5jdGlvbihlKXt2TSgpLHVlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMSRUeXBlIiwxMjgwKSxJKDEyODEsMSx1aSxLaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gQVFlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMjgxKSxJKDEyODIsMSxVbixQbyksbC50ZD1mdW5jdGlvbihlKXt2TSgpLHVlKHRoaXMuYSx1KGUsMTcpKX0sUChxZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMyRUeXBlIiwxMjgyKSxJKDE0ODUsMSxhcyx2ayksbC5wZj1mdW5jdGlvbihlLG4pe01vbih1KGUsMzcpLG4pfSxQKCRuLCJDb21tZW50Tm9kZU1hcmdpbkNhbGN1bGF0b3IiLDE0ODUpLEkoMTQ4NiwxLHt9LGlZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIiwxNDg2KSxJKDE0ODcsMSxVbixzWSksbC50ZD1mdW5jdGlvbihlKXtseW4odShlLDEwKSl9LFAoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNDg3KSxJKDE0ODgsMSxhcyxhWSksbC5wZj1mdW5jdGlvbihlLG4pe0V2bih1KGUsMzcpLG4pfSxQKCRuLCJDb21tZW50UG9zdHByb2Nlc3NvciIsMTQ4OCksSSgxNDg5LDEsYXMsb1kpLGwucGY9ZnVuY3Rpb24oZSxuKXtNNG4odShlLDM3KSxuKX0sUCgkbiwiQ29tbWVudFByZXByb2Nlc3NvciIsMTQ4OSksSSgxNDkwLDEsYXMsY1kpLGwucGY9ZnVuY3Rpb24oZSxuKXtVYm4odShlLDM3KSxuKX0sUCgkbiwiQ29uc3RyYWludHNQb3N0cHJvY2Vzc29yIiwxNDkwKSxJKDE0OTEsMSxhcyx1WSksbC5wZj1mdW5jdGlvbihlLG4pe0pvbih1KGUsMzcpLG4pfSxQKCRuLCJFZGdlQW5kTGF5ZXJDb25zdHJhaW50RWRnZVJldmVyc2VyIiwxNDkxKSxJKDE0OTIsMSxhcyxsWSksbC5wZj1mdW5jdGlvbihlLG4pe3psbih1KGUsMzcpLG4pfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IiLDE0OTIpLEkoMTQ5MywxLHt9LGhZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNDkzKSxJKDE0OTQsMSx1aSxmWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUG5uKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTQ5NCksSSgxNDk1LDEsVW4sZFkpLGwudGQ9ZnVuY3Rpb24oZSl7QTFuKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5NSksSSgxNDk2LDEsYXMsZ1kpLGwucGY9ZnVuY3Rpb24oZSxuKXt2Z24odShlLDM3KSxuKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IiLDE0OTYpLEkoMTQ5NywxLHt9LHlMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEkoMTQ5OCwxLFVuLHZLdCksbC50ZD1mdW5jdGlvbihlKXt2WWUodGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDEwKSl9LGwuYT0wLGwuYj0wLGwuYz0hMSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNDk4KSxJKDE0OTksMSx1aSxwWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksUzcpKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5OSksSSgxNTAwLDEsVW4sTmMpLGwudGQ9ZnVuY3Rpb24oZSl7bmkodGhpcy5hLHUoZSw3MCkpfSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTAwKSxJKDE1MDEsMSx1aSxiWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksWXkpKX0sUCgkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTUwMSksSSgxNTAyLDEsVW4sWmEpLGwudGQ9ZnVuY3Rpb24oZSl7bmkodGhpcy5hLHUoZSw3MCkpfSxQKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlIiwxNTAyKSxJKDE1NTEsMSxhcyxQSiksbC5wZj1mdW5jdGlvbihlLG4pe1l1bih1KGUsMzcpLG4pfTt2YXIgUmJlO1AoJG4sIkVuZExhYmVsU29ydGVyIiwxNTUxKSxJKDE1NTIsMSxPaSxPVCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBDaG4odShlLDQ1NiksdShuLDQ1NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIkVuZExhYmVsU29ydGVyLzEiLDE1NTIpLEkoNDU2LDEsezQ1NjoxfSxCWHQpLFAoJG4sIkVuZExhYmVsU29ydGVyL0xhYmVsR3JvdXAiLDQ1NiksSSgxNTUzLDEse30sUVApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHdNKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTUzKSxJKDE1NTQsMSx1aSxxNSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSx1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDEkVHlwZSIsMTU1NCksSSgxNTU1LDEsVW4sdlkpLGwudGQ9ZnVuY3Rpb24oZSl7QTBuKHUoZSwxMCkpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlIiwxNTU1KSxJKDE1NTYsMSx1aSx3WSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSxHdChRKHUoZSw3MCksKFRlKCksTWQpKSk9PT1HdCgoQTEoKSxZeSkpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMyRUeXBlIiwxNTU2KSxJKDE1NTcsMSx1aSxtWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd00oKSxHdChRKHUoZSw3MCksKFRlKCksTWQpKSk9PT1HdCgoQTEoKSxTNykpfSxQKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkNCRUeXBlIiwxNTU3KSxJKDE1MDMsMSxhcyx5WSksbC5wZj1mdW5jdGlvbihlLG4pe3h5bih0aGlzLHUoZSwzNykpfSxsLmI9MCxsLmM9MCxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yIiwxNTAzKSxJKDE1MDQsMSx7fSx4WSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1MDQpLEkoMTUwNSwxLHt9LE5UKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKE1zKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZSIsMTUwNSksSSgxNTA2LDEsdWkseEwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIVZhKHUoZSwxNykpfSxQKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQyJFR5cGUiLDE1MDYpLEkoMTUwNywxLHVpLFpQKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh1KGUsMTcpLChzZSgpLE4yKSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDMkVHlwZSIsMTUwNyksSSgxNTA4LDEsVW4sbWMpLGwudGQ9ZnVuY3Rpb24oZSl7TnduKHRoaXMuYSx1KGUsMTI4KSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTUwOCksSSgxNTA5LDEsVW4sRTMpLGwudGQ9ZnVuY3Rpb24oZSl7QnN0KHUoZSwxNykuYSl9LFAoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDUkVHlwZSIsMTUwOSksSSg3OTIsMSxhcyxFYSksbC5wZj1mdW5jdGlvbihlLG4pe2czbih0aGlzLHUoZSwzNyksbil9LFAoJG4sIkdyYXBoVHJhbnNmb3JtZXIiLDc5MiksSSg1MTEsMjIsezM6MSwzNToxLDIyOjEsNTExOjF9LEFidCk7dmFyIG5sdCxwTyxqYmU9anIoJG4sIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTExLEhyLHJybixQSmUpLCRiZTtJKDE1MTAsMSxhcyxUMyksbC5wZj1mdW5jdGlvbihlLG4pe0cybih1KGUsMzcpLG4pfSxQKCRuLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1MTApLEkoMTUxMSwxLGFzLGtZKSxsLnBmPWZ1bmN0aW9uKGUsbil7Q29uKHUoZSwzNyksbil9LFAoJG4sIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTExKSxJKDE1MTIsMSxPaSxyZiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBGaG4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTUxMiksSSgxNTEzLDEsYXMsSDUpLGwucGY9ZnVuY3Rpb24oZSxuKXtWbW4odShlLDM3KSxuKX0sUCgkbiwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTUxMyksSSgxNTE0LDEsYXMsRVkpLGwucGY9ZnVuY3Rpb24oZSxuKXtxdm4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxQKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1MTQpLEkoMTUxNSwxLE9pLHdrKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFdYZSh1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTE1KSxJKDE1MTYsMSxPaSxSZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvYW4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTUxNiksSSgxNTE3LDEsYXMsVFkpLGwucGY9ZnVuY3Rpb24oZSxuKXtkMG4odShlLDM3KSxuKX0sUCgkbiwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTE3KSxJKDE1MTgsMSxhcyxCSiksbC5wZj1mdW5jdGlvbihlLG4pe2M1bih0aGlzLHUoZSwzNykpfSxsLmE9MCxsLmM9MDt2YXIgY0csdUc7UCgkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTUxOCksSSg1NzEsMSx7NTcxOjF9LENZKSxsLmI9LTEsbC5kPS0xLFAoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTcxKSxJKDE1MTksMSx7fSxfWSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gR00oKSxqbyh1KGUsMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTUxOSksSSgxNTIwLDEse30sU1kpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEdNKCksTXModShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1MjApLEkoMTUyNiwxLGFzLFBUKSxsLnBmPWZ1bmN0aW9uKGUsbil7bW1uKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1MjYpLEkoNzkzLDEse30sd3Z0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxQKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw3OTMpLEkoMTUyNywxLHt9LGtMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1MjcpLEkoMTUyOCwxLHt9LEpQKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDEwKS5qLDE2KSl9LFAoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1MjgpLEkoMTUyOSwxLFVuLEVMKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMSkucD0tMX0sUCgkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTUyOSksSSgxNTMwLDEsYXMsRzUpLGwucGY9ZnVuY3Rpb24oZSxuKXt2bW4odShlLDM3KSxuKX0sUCgkbiwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTUzMCksSSgxNTMxLDEsYXMsQVkpLGwucGY9ZnVuY3Rpb24oZSxuKXt3bW4odShlLDM3KSxuKX0sUCgkbiwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1MzEpLEkoMTUzMiwxLGFzLHRGKSxsLnBmPWZ1bmN0aW9uKGUsbil7S29uKHUoZSwzNyksbil9LFAoJG4sIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTMyKSxJKDE1MzMsMSxhcyxlRiksbC5wZj1mdW5jdGlvbihlLG4pe0M0bih0aGlzLHUoZSwzNykpfSxsLmE9VHMsbC5iPVRzLGwuYz1zcyxsLmQ9c3M7dmFyIGx4bj1QKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1MzMpO0koMTUzNCwxLHt9LExZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTM0KSxJKDE1MzUsMSx7fSxKYSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWFhlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDEkVHlwZSIsMTUzNSksSSgxNTM2LDEse30sTVkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNykuYy5pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQyJFR5cGUiLDE1MzYpLEkoMTUzNywxLHt9LHZsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBRWGUodGhpcy5hLHllKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LFAoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMyRUeXBlIiwxNTM3KSxJKDE1MzgsMSx7fSx6ZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gJFFlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTUzOCksSSgxNTM5LDEse30seHApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHpRZSh0aGlzLmEseWUoZSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQ1JFR5cGUiLDE1MzkpLEkoNzcsMjIsezM6MSwzNToxLDIyOjEsNzc6MSwyMzQ6MX0sd3MpLGwuS2Y9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nKXtjYXNlIDE1OnJldHVybiBuZXcgVVg7Y2FzZSAyMjpyZXR1cm4gbmV3IFdYO2Nhc2UgNDc6cmV0dXJuIG5ldyBYWDtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBDMztjYXNlIDMyOnJldHVybiBuZXcgdms7Y2FzZSA0MjpyZXR1cm4gbmV3IGFZO2Nhc2UgMTpyZXR1cm4gbmV3IG9ZO2Nhc2UgNDE6cmV0dXJuIG5ldyBjWTtjYXNlIDU2OnJldHVybiBuZXcgRWEoKHE4KCkscE8pKTtjYXNlIDA6cmV0dXJuIG5ldyBFYSgocTgoKSxubHQpKTtjYXNlIDI6cmV0dXJuIG5ldyB1WTtjYXNlIDU0OnJldHVybiBuZXcgbFk7Y2FzZSAzMzpyZXR1cm4gbmV3IGdZO2Nhc2UgNTE6cmV0dXJuIG5ldyB5WTtjYXNlIDU1OnJldHVybiBuZXcgVDM7Y2FzZSAxMzpyZXR1cm4gbmV3IGtZO2Nhc2UgMzg6cmV0dXJuIG5ldyBINTtjYXNlIDQ0OnJldHVybiBuZXcgRVk7Y2FzZSA0MDpyZXR1cm4gbmV3IFRZO2Nhc2UgOTpyZXR1cm4gbmV3IEJKO2Nhc2UgNDk6cmV0dXJuIG5ldyByV3Q7Y2FzZSAzNzpyZXR1cm4gbmV3IFBUO2Nhc2UgNDM6cmV0dXJuIG5ldyBHNTtjYXNlIDI3OnJldHVybiBuZXcgQVk7Y2FzZSAzMDpyZXR1cm4gbmV3IHRGO2Nhc2UgMzpyZXR1cm4gbmV3IGVGO2Nhc2UgMTg6cmV0dXJuIG5ldyBEWTtjYXNlIDI5OnJldHVybiBuZXcgT1k7Y2FzZSA1OnJldHVybiBuZXcgTUI7Y2FzZSA1MDpyZXR1cm4gbmV3IElZO2Nhc2UgMzQ6cmV0dXJuIG5ldyBSSjtjYXNlIDM2OnJldHVybiBuZXcgbWs7Y2FzZSA1MjpyZXR1cm4gbmV3IFBKO2Nhc2UgMTE6cmV0dXJuIG5ldyB2bTtjYXNlIDc6cmV0dXJuIG5ldyAkSjtjYXNlIDM5OnJldHVybiBuZXcgeWs7Y2FzZSA0NTpyZXR1cm4gbmV3IEJZO2Nhc2UgMTY6cmV0dXJuIG5ldyBGVDtjYXNlIDEwOnJldHVybiBuZXcgbmQ7Y2FzZSA0ODpyZXR1cm4gbmV3IENMO2Nhc2UgMjE6cmV0dXJuIG5ldyB4aztjYXNlIDIzOnJldHVybiBuZXcgZWV0KChadigpLERTKSk7Y2FzZSA4OnJldHVybiBuZXcgc0Y7Y2FzZSAxMjpyZXR1cm4gbmV3IFNMO2Nhc2UgNDpyZXR1cm4gbmV3IGpZO2Nhc2UgMTk6cmV0dXJuIG5ldyBnOTtjYXNlIDE3OnJldHVybiBuZXcgR1k7Y2FzZSA1MzpyZXR1cm4gbmV3IFZZO2Nhc2UgNjpyZXR1cm4gbmV3IGZGO2Nhc2UgMjU6cmV0dXJuIG5ldyBvcXQ7Y2FzZSA0NjpyZXR1cm4gbmV3IFlZO2Nhc2UgMzE6cmV0dXJuIG5ldyB6V3Q7Y2FzZSAxNDpyZXR1cm4gbmV3IExMO2Nhc2UgMjY6cmV0dXJuIG5ldyBKWDtjYXNlIDIwOnJldHVybiBuZXcgclg7Y2FzZSAyNDpyZXR1cm4gbmV3IGVldCgoWnYoKSxkVikpO2RlZmF1bHQ6dGhyb3cgcnQobmV3IFBuKEJvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgQjd0LFI3dCxqN3QsJDd0LHo3dCxxN3QsSDd0LEc3dCxWN3QsVTd0LGhTLGxHLGhHLFc3dCxLN3QsWTd0LFg3dCxRN3QsWjd0LEo3dCxmUyx0VHQsZVR0LG5UdCxyVHQsaVR0LHJsdCxmRyxkRyxzVHQsZ0cscEcsYkcsZTcsbjcscjcsYVR0LHZHLHdHLG9UdCxtRyx5RyxjVHQsdVR0LGxUdCxoVHQseEcsaWx0LGJPLGtHLEVHLFRHLENHLGZUdCxkVHQsZ1R0LHBUdCxoeG49anIoJG4sdjZ0LDc3LEhyLEljZSxOSmUpLHpiZTtJKDE1NDAsMSxhcyxEWSksbC5wZj1mdW5jdGlvbihlLG4pe1M0bih1KGUsMzcpLG4pfSxQKCRuLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE1NDApLEkoMTU0MSwxLGFzLE9ZKSxsLnBmPWZ1bmN0aW9uKGUsbil7U3duKHUoZSwzNyksbil9LFAoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE1NDEpLEkoMTU0MiwxLHVpLE5ZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTQyKSxJKDE1NDMsMSx1aSxqZCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oR24oKSx4cyl9LFAoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU0MyksSSgxNTQ0LDEsVW4sd0t0KSxsLnRkPWZ1bmN0aW9uKGUpe3dZZSh0aGlzLmIsdGhpcy5hLHRoaXMuYyx1KGUsMTApKX0sbC5hPSExLGwuYz0hMSxQKCRuLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NDQpLEkoMTU0NSwxLGFzLE1CKSxsLnBmPWZ1bmN0aW9uKGUsbil7UTNuKHUoZSwzNyksbil9O3ZhciBxYmU7UCgkbiwiTGFiZWxEdW1teUluc2VydGVyIiwxNTQ1KSxJKDE1NDYsMSx3ZCxsdiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gR3QoUSh1KGUsNzApLChUZSgpLE1kKSkpPT09R3QoKEExKCksXzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KFEodShlLDcwKSwoVGUoKSxNZCkpKT09PUd0KChBMSgpLF83KSl9LFAoJG4sIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNTQ2KSxJKDE1NDcsMSxhcyxJWSksbC5wZj1mdW5jdGlvbihlLG4pe0p5bih1KGUsMzcpLG4pfSxQKCRuLCJMYWJlbER1bW15UmVtb3ZlciIsMTU0NyksSSgxNTQ4LDEsdWksUFkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGplKFJlKFEodShlLDcwKSwoVGUoKSxVbHQpKSkpfSxQKCRuLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNTQ4KSxJKDEzNTksMSxhcyxSSiksbC5wZj1mdW5jdGlvbihlLG4pe0Ezbih0aGlzLHUoZSwzNyksbil9LGwuYT1udWxsO3ZhciBzbHQ7UCgkbiwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzU5KSxJKDI4NiwxLHsyODY6MX0sTHVlKSxsLmM9MCxsLmQ9bnVsbCxsLmY9MCxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI4NiksSSgxMzYwLDEse30sbkYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFh4KCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM2MCksSSgxMzYxLDEsdWksckYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFh4KCksdShlLDEwKS5rPT0oR24oKSxTbCl9LFAoJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzYxKSxJKDEzNjIsMSx7fSxtZyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTFFlKHRoaXMuYSx1KGUsMTApKX0sUCgkbiwiTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQyJFR5cGUiLDEzNjIpLEkoMTM2MywxLFVuLHNkKSxsLnRkPWZ1bmN0aW9uKGUpe0Flbih0aGlzLmEsdShlLDI4NikpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZSIsMTM2MyksSSgxMzY0LDEsT2ksRlkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmVuKHUoZSwyODYpLHUobiwyODYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDQkVHlwZSIsMTM2NCksSSg3OTEsMSxhcyxDMyksbC5wZj1mdW5jdGlvbihlLG4pe2pzbih1KGUsMzcpLG4pfSxQKCRuLCJMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3IiLDc5MSksSSgxNTQ5LDEsYXMsbWspLGwucGY9ZnVuY3Rpb24oZSxuKXtsdm4odShlLDM3KSxuKX0sUCgkbiwiTGFiZWxTaWRlU2VsZWN0b3IiLDE1NDkpLEkoMTU1MCwxLHVpLFRMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqZShSZShRKHUoZSw3MCksKFRlKCksVWx0KSkpKX0sUCgkbiwiTGFiZWxTaWRlU2VsZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU1MCksSSgxNTU4LDEsYXMsdm0pLGwucGY9ZnVuY3Rpb24oZSxuKXtVbW4odShlLDM3KSxuKX0sUCgkbiwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTU1OCksSSgxNTU5LDEsYXMsJEopLGwucGY9ZnVuY3Rpb24oZSxuKXthYm4odShlLDM3KSxuKX07dmFyIGJUdDtQKCRuLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IiLDE1NTkpLEkoMzYwLDIyLHszOjEsMzU6MSwyMjoxLDM2MDoxfSxIUik7dmFyIHZPLF9HLFNHLGFsdCxIYmU9anIoJG4sIkxheWVyQ29uc3RyYWludFByZXByb2Nlc3Nvci9IaWRkZW5Ob2RlQ29ubmVjdGlvbnMiLDM2MCxIcixEaW4sQ1plKSxHYmU7SSgxNTYwLDEsYXMseWspLGwucGY9ZnVuY3Rpb24oZSxuKXtYeW4odShlLDM3KSxuKX0sUCgkbiwiTGF5ZXJTaXplQW5kR3JhcGhIZWlnaHRDYWxjdWxhdG9yIiwxNTYwKSxJKDE1NjEsMSxhcyxCWSksbC5wZj1mdW5jdGlvbihlLG4pe0pibih1KGUsMzcpLG4pfSxQKCRuLCJMb25nRWRnZUpvaW5lciIsMTU2MSksSSgxNTYyLDEsYXMsRlQpLGwucGY9ZnVuY3Rpb24oZSxuKXtJeW4odShlLDM3KSxuKX0sUCgkbiwiTG9uZ0VkZ2VTcGxpdHRlciIsMTU2MiksSSgxNTYzLDEsYXMsbmQpLGwucGY9ZnVuY3Rpb24oZSxuKXtJM24odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmU9MCxsLmk9MCxsLmo9MCxsLms9MCxsLm49MCxQKCRuLCJOb2RlUHJvbW90aW9uIiwxNTYzKSxJKDE1NjQsMSx7fSxpRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQ2KSxGbigpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sUCgkbiwiTm9kZVByb21vdGlvbi9sYW1iZGEkMCRUeXBlIiwxNTY0KSxJKDE1NjUsMSx7fSxrcCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWWVuKHRoaXMuYSx1KGUsNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuYT0wLFAoJG4sIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTU2NSksSSgxNTY2LDEse30scWYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFhlbih0aGlzLmEsdShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmE9MCxQKCRuLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUiLDE1NjYpLEkoMTU2NywxLGFzLENMKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZTVuKHUoZSwzNyksbil9LFAoJG4sIk5vcnRoU291dGhQb3J0UG9zdHByb2Nlc3NvciIsMTU2NyksSSgxNTY4LDEsYXMseGspLGwucGY9ZnVuY3Rpb24oZSxuKXskNG4odShlLDM3KSxuKX0sUCgkbiwiTm9ydGhTb3V0aFBvcnRQcmVwcm9jZXNzb3IiLDE1NjgpLEkoMTU2OSwxLE9pLF9MKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBjbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NjkpLEkoMTU3MCwxLGFzLHNGKSxsLnBmPWZ1bmN0aW9uKGUsbil7cm1uKHUoZSwzNyksbil9LFAoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3NvciIsMTU3MCksSSgxNTcxLDEsdWksUlkpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKFRlKCksYjcpKX0sUCgkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NzEpLEkoMTU3MiwxLFVuLGJ2KSxsLnRkPWZ1bmN0aW9uKGUpe3dubih0aGlzLmEsdShlLDEwKSl9LFAoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTcyKSxJKDE1NzMsMSxhcyxTTCksbC5wZj1mdW5jdGlvbihlLG4pe20ybih1KGUsMzcpLG4pfSxQKCRuLCJQYXJ0aXRpb25Qb3N0cHJvY2Vzc29yIiwxNTczKSxJKDE1NzQsMSxhcyxqWSksbC5wZj1mdW5jdGlvbihlLG4pe0xwbih1KGUsMzcpLG4pfSxQKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IiLDE1NzQpLEkoMTU3NSwxLHVpLCRZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBWcyh1KGUsMTApLChUZSgpLGI3KSl9LFAoJG4sIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTc1KSxJKDE1NzYsMSx7fSxhRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU3NiksSSgxNTc3LDEsdWksVjUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGtobih1KGUsMTcpKX0sUCgkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NzcpLEkoMTU3OCwxLFVuLG9GKSxsLnRkPWZ1bmN0aW9uKGUpe0Njbih1KGUsMTcpKX0sUCgkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDE1NzgpLEkoMTU3OSwxLGFzLGc5KSxsLnBmPWZ1bmN0aW9uKGUsbil7enduKHUoZSwzNyksbil9O3ZhciB2VHQsVmJlLFViZSxXYmUsd1R0LG1UdDtQKCRuLCJQb3J0TGlzdFNvcnRlciIsMTU3OSksSSgxNTgwLDEse30sVTUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEo4KCksdShlLDExKS5lfSxQKCRuLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTgwKSxJKDE1ODEsMSx7fSx6WSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gSjgoKSx1KGUsMTEpLmd9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQxJFR5cGUiLDE1ODEpLEkoMTU4MiwxLE9pLEFMKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEhadCh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE1ODIpLEkoMTU4MywxLE9pLHFZKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVmbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQzJFR5cGUiLDE1ODMpLEkoMTU4NCwxLE9pLEhZKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFp1ZSh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE1ODQpLEkoMTU4NSwxLGFzLEdZKSxsLnBmPWZ1bmN0aW9uKGUsbil7dGJuKHUoZSwzNyksbil9LFAoJG4sIlBvcnRTaWRlUHJvY2Vzc29yIiwxNTg1KSxJKDE1ODYsMSxhcyxWWSksbC5wZj1mdW5jdGlvbihlLG4pe2V3bih1KGUsMzcpLG4pfSxQKCRuLCJSZXZlcnNlZEVkZ2VSZXN0b3JlciIsMTU4NiksSSgxNTkxLDEsYXMsb3F0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TWZuKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIiLDE1OTEpLEkoMTU5MiwxLHt9LGNGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEkoMTU5MywxLHVpLFVZKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTU5MyksSSgxNTk0LDEsdWksV1kpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKHNlKCksZDcpKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksSSgxNTk1LDEse30sS1kpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChzZSgpLGQ3KSksNDAzKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTU5NSksSSgxNTk2LDEsVW4sX20pLGwudGQ9ZnVuY3Rpb24oZSl7ajBuKHRoaXMuYSx1KGUsNDAzKSl9LFAoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE1OTYpLEkoNzk0LDEsVW4sdUYpLGwudGQ9ZnVuY3Rpb24oZSl7dGduKHUoZSwxMDEpKX0sUCgkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsNzk0KSxJKDE1OTcsMSxhcyxZWSksbC5wZj1mdW5jdGlvbihlLG4pe2pobih1KGUsMzcpLG4pfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE1OTcpLEkoMTU5OCwxLHt9LFhZKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTk4KSxJKDE1OTksMSx1aSxRWSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oR24oKSxEcyl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTk5KSxJKDE2MDAsMSx1aSxsRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnModShlLDEwKSwoc2UoKSxkNykpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTYwMCksSSgxNjAxLDEsVW4sWlkpLGwudGQ9ZnVuY3Rpb24oZSl7VTFuKHUoZSwxMCkpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYwMSksSSgxNjAyLDEse30sSlkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sUCgkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2MDIpLEkoMTYwMywxLFVuLGd4KSxsLnRkPWZ1bmN0aW9uKGUpe1Bpbih0aGlzLmEsdShlLDQwOSkpfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTYwMyksSSgxNjA0LDEsdWksaEYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTAxKS5pfSxQKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTYwNCksSSgxNjA1LDEsVW4sTzMpLGwudGQ9ZnVuY3Rpb24oZSl7bUtlKHRoaXMuYSx1KGUsMTAxKSl9LFAoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxNjA1KSxJKDE1ODcsMSxhcyxmRiksbC5wZj1mdW5jdGlvbihlLG4pe0Ribih1KGUsMzcpLG4pfSxQKCRuLCJTZWxmTG9vcFByZVByb2Nlc3NvciIsMTU4NyksSSgxNTg4LDEse30sZEYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sUCgkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksSSgxNTg5LDEse30sdFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MDkpLmF9LFAoJG4sIlNlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEkoMTU5MCwxLFVuLGVYKSxsLnRkPWZ1bmN0aW9uKGUpe1RYZSh1KGUsMTcpKX0sUCgkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU5MCksSSgxNjA2LDEsYXMseld0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TDBuKHRoaXMsdShlLDM3KSxuKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIiLDE2MDYpLEkoMTYwNywxLHt9LGtrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAoJG4sIlNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE2MDcpLEkoMTYwOCwxLHVpLFc1KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTYwOCksSSgxNjA5LDEsdWksQlQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZzKHUoZSwxMCksKHNlKCksZDcpKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTYwOSksSSgxNjEwLDEse30sblgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChzZSgpLGQ3KSksNDAzKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTYxMCksSSgxNjExLDEsVW4sQkd0KSxsLnRkPWZ1bmN0aW9uKGUpe3Vubih0aGlzLmEsdGhpcy5iLHUoZSw0MDMpKX0sUCgkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTYxMSksSSgxNjEyLDEsYXMsTEwpLGwucGY9ZnVuY3Rpb24oZSxuKXtaMm4odShlLDM3KSxuKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IiLDE2MTIpLEkoMTYxMywxLHVpLFJUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShHbigpLERzKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTYxMyksSSgxNjE0LDEsdWksTUwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJZdCh1KGUsMTApKS5fYigoVGUoKSxIeSkpfSxQKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjE0KSxJKDE2MTUsMSxPaSxnRiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBTb24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjE1KSxJKDE2MTYsMSx7fSxwRiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBfbm4odShlLDEwKSx1KG4sMTApKX0sUCgkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYxNiksSSgxNjE4LDEsYXMsclgpLGwucGY9ZnVuY3Rpb24oZSxuKXtXbW4odShlLDM3KSxuKX0sUCgkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3NvciIsMTYxOCksSSgxNjE5LDEsdWksaVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZy5jLmxlbmd0aCE9MH0sUCgkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjE5KSxJKDE2MjAsMSxVbixweCksbC50ZD1mdW5jdGlvbihlKXtzZ24odGhpcy5hLHUoZSwxMSkpfSxQKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MjApLEkoMTY5Myw4MDMse30sWmVlKSxsLk1lPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3N3aXRjaCh0aGlzLmM9ZSx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGxlLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IG1GKSxuZXcgcUd0KHRoaXMsbikpLGFEKHRoaXMsbmV3IHZGKSxtdShuLG5ldyBhWCksbi5jPVB0KFhuLEllLDEsMCw1LDEpLHVzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IG9YKSxuZXcgTjMobikpLGFEKHRoaXMsbmV3IGNYKSxtdShuLG5ldyB1WCksbi5jPVB0KFhuLEllLDEsMCw1LDEpLHI9eFV0KGhuZShKaihuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyAkZCh0aGlzKSkpLG5ldyBsWCksdXMobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYy5hLmEsMTYpKSxuZXcgakd0KHIsbikpLGFEKHRoaXMsbmV3IGhYKSxtdShuLG5ldyBzWCksbi5jPVB0KFhuLEllLDEsMCw1LDEpO2JyZWFrO2Nhc2UgMzpzPW5ldyBsZSxhRCh0aGlzLG5ldyBiRiksbz14VXQoaG5lKEpqKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IFQ5KHRoaXMpKSksbmV3IHdGKSx1cyhSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBmWCksbmV3IHpHdChvLHMpKSxhRCh0aGlzLG5ldyBkWCksbXUocyxuZXcgZ1gpLHMuYz1QdChYbixJZSwxLDAsNSwxKTticmVhaztkZWZhdWx0OnRocm93IHJ0KG5ldyBVenQpfX0sbC5iPTAsUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE2OTMpLEkoMTY5NCwxLHdkLGJGKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KHUoZSw1NykuZywxNDUpfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjk0KSxJKDE2OTUsMSx7fSxUOSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gUmduKHRoaXMuYSx1KGUsNTcpKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEkVHlwZSIsMTY5NSksSSgxNzAzLDEsT3EsUkd0KSxsLlZkPWZ1bmN0aW9uKCl7Y18odGhpcy5hLHRoaXMuYiwtMSl9LGwuYj0wLFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMCRUeXBlIiwxNzAzKSxJKDE3MDUsMSx3ZCx2RiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDE0NSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDExJFR5cGUiLDE3MDUpLEkoMTcwNiwxLFVuLGFYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMiRUeXBlIiwxNzA2KSxJKDE3MDcsMSx1aSxvWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDEwKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEzJFR5cGUiLDE3MDcpLEkoMTcwOSwxLFVuLE4zKSxsLnRkPWZ1bmN0aW9uKGUpe2hsbih0aGlzLmEsdShlLDU3KSl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzA5KSxJKDE3MDgsMSxPcSxVR3QpLGwuVmQ9ZnVuY3Rpb24oKXtjXyh0aGlzLmIsdGhpcy5hLC0xKX0sbC5hPTAsUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3MDgpLEkoMTcxMCwxLHdkLGNYKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTApfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRXQodShlLDU3KS5nLDEwKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3MTApLEkoMTcxMSwxLFVuLHVYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzExKSxJKDE3MTIsMSx7fSwkZCksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gamduKHRoaXMuYSx1KGUsNTcpKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE4JFR5cGUiLDE3MTIpLEkoMTcxMywxLHt9LGxYKSxsLkRlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOSRUeXBlIiwxNzEzKSxJKDE2OTYsMSx7fSx3RiksbC5EZT1mdW5jdGlvbigpe3JldHVybiAwfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjk2KSxJKDE3MTUsMSxVbixqR3QpLGwudGQ9ZnVuY3Rpb24oZSl7VXRuKHRoaXMuYSx0aGlzLmIsdShlLDMwNykpfSxsLmE9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjAkVHlwZSIsMTcxNSksSSgxNzE0LDEsT3EsJEd0KSxsLlZkPWZ1bmN0aW9uKCl7Y2NlKHRoaXMuYSx0aGlzLmIsLTEpfSxsLmI9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjEkVHlwZSIsMTcxNCksSSgxNzE2LDEsd2QsaFgpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjIkVHlwZSIsMTcxNiksSSgxNzE3LDEsVW4sc1gpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIzJFR5cGUiLDE3MTcpLEkoMTY5NywxLHVpLGZYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTApfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMyRUeXBlIiwxNjk3KSxJKDE2OTksMSxVbix6R3QpLGwudGQ9ZnVuY3Rpb24oZSl7V3RuKHRoaXMuYSx0aGlzLmIsdShlLDU3KSl9LGwuYT0wLFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ0JFR5cGUiLDE2OTkpLEkoMTY5OCwxLE9xLFdHdCksbC5WZD1mdW5jdGlvbigpe2NfKHRoaXMuYix0aGlzLmEsLTEpfSxsLmE9MCxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNSRUeXBlIiwxNjk4KSxJKDE3MDAsMSx3ZCxkWCksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3MDApLEkoMTcwMSwxLFVuLGdYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LFAoQ3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ3JFR5cGUiLDE3MDEpLEkoMTcwMiwxLHVpLG1GKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFdCh1KGUsNTcpLmcsMTQ1KX0sUChDcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZSIsMTcwMiksSSgxNzA0LDEsVW4scUd0KSxsLnRkPWZ1bmN0aW9uKGUpe0dhbih0aGlzLmEsdGhpcy5iLHUoZSw1NykpfSxQKENzLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlIiwxNzA0KSxJKDE1MjEsMSxhcyxyV3QpLGwucGY9ZnVuY3Rpb24oZSxuKXtSeW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgS2JlO1AoQ3MsIkhvcml6b250YWxHcmFwaENvbXBhY3RvciIsMTUyMSksSSgxNTIyLDEse30sdzEpLGwuT2U9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIFBtdChlLG4pfHwocj1aMyhlKSxzPVozKG4pLHImJnIuaz09KEduKCkseHMpfHxzJiZzLms9PShHbigpLHhzKSk/MDoobz11KFEodGhpcy5hLmEsKHNlKCksWTQpKSwzMDQpLFpYZShvLHI/ci5rOihHbigpLFpzKSxzP3MuazooR24oKSxacykpKX0sbC5QZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztyZXR1cm4gUG10KGUsbik/MToocj1aMyhlKSxzPVozKG4pLG89dShRKHRoaXMuYS5hLChzZSgpLFk0KSksMzA0KSxNMnQobyxyP3IuazooR24oKSxacykscz9zLms6KEduKCksWnMpKSl9LFAoQ3MsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTIyKSxJKDE1MjMsMSx7fSxqVCksbC5OZT1mdW5jdGlvbihlLG4pe3JldHVybiBxOSgpLGUuYS5pPT0wfSxQKENzLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTUyMyksSSgxNTI0LDEse30semQpLGwuTmU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga25uKHRoaXMuYSxlLG4pfSxQKENzLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZSIsMTUyNCksSSgxNjY0LDEse30sQnRlKTt2YXIgWWJlLFhiZTtQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjY0KSxJKDE2NzIsMSx1aSxwWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZSIsMTY3MiksSSgxNjY1LDEse30sYlgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksJG8oUSh1KHUoZSw1NykuZywxMCksKHNlKCksX2kpKSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDAkVHlwZSIsMTY2NSksSSgxNjY2LDEse30seUYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksJHJlKHUodShlLDU3KS5nLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE2NjYpLEkoMTY3NSwxLHVpLHZYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLEV0KHUoZSw1NykuZywxMCl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE2NzUpLEkoMTY3NiwxLFVuLHdYKSxsLnRkPWZ1bmN0aW9uKGUpe3hubih1KGUsNTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTEkVHlwZSIsMTY3NiksSSgxNjc3LDEsdWksbVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksRXQodShlLDU3KS5nLDE0NSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEyJFR5cGUiLDE2NzcpLEkoMTY4MSwxLFVuLHlYKSxsLnRkPWZ1bmN0aW9uKGUpe191bih1KGUsNTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTY4MSksSSgxNjc4LDEsVW4sQzkpLGwudGQ9ZnVuY3Rpb24oZSl7WFllKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNCRUeXBlIiwxNjc4KSxJKDE2NzksMSxVbixHYiksbC50ZD1mdW5jdGlvbihlKXtaWWUodGhpcy5hLHUoZSwxMTApKX0sbC5hPTAsUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTUkVHlwZSIsMTY3OSksSSgxNjgwLDEsVW4sblIpLGwudGQ9ZnVuY3Rpb24oZSl7UVllKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNjgwKSxJKDE2ODIsMSx7fSx4WCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSxuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKE1zKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE3JFR5cGUiLDE2ODIpLEkoMTY4MywxLHVpLGtYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLFZhKHUoZSwxNykpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOCRUeXBlIiwxNjgzKSxJKDE2ODQsMSxVbixEdHQpLGwudGQ9ZnVuY3Rpb24oZSl7RGFuKHRoaXMuYSx1KGUsMTcpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTkkVHlwZSIsMTY4NCksSSgxNjY4LDEsVW4sT3R0KSxsLnRkPWZ1bmN0aW9uKGUpe2Zpbih0aGlzLmEsdShlLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyJFR5cGUiLDE2NjgpLEkoMTY4NSwxLHt9LHhGKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTY4NSksSSgxNjg2LDEse30sRVgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNjg2KSxJKDE2ODcsMSx7fSxrRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSx1KFEodShlLDE3KSwoc2UoKSxOMikpLDE1KX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjIkVHlwZSIsMTY4NyksSSgxNjg4LDEsdWksVFgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRRZSh1KGUsMTUpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjMkVHlwZSIsMTY4OCksSSgxNjg5LDEsVW4sTnR0KSxsLnRkPWZ1bmN0aW9uKGUpe0xnbih0aGlzLmEsdShlLDE1KSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDI0JFR5cGUiLDE2ODkpLEkoMTY2NywxLFVuLEhHdCksbC50ZD1mdW5jdGlvbihlKXtKaW4odGhpcy5hLHRoaXMuYix1KGUsMTQ1KSl9LFAoQ3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDMkVHlwZSIsMTY2NyksSSgxNjY5LDEse30sQ1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGxmKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ0JFR5cGUiLDE2NjkpLEkoMTY3MCwxLHt9LF9YKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsZigpLG5ldyBUbihudWxsLG5ldyBGdihuZXcgYXIobHIoTXModShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNjcwKSxJKDE2NzEsMSx7fSwkVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbGYoKSx1KFEodShlLDE3KSwoc2UoKSxOMikpLDE1KX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNiRUeXBlIiwxNjcxKSxJKDE2NzMsMSxVbixQdHQpLGwudGQ9ZnVuY3Rpb24oZSl7b3BuKHRoaXMuYSx1KGUsMTUpKX0sUChDcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOCRUeXBlIiwxNjczKSxJKDE2NzQsMSxVbixHR3QpLGwudGQ9ZnVuY3Rpb24oZSl7eVhlKHRoaXMuYSx0aGlzLmIsdShlLDE0NSkpfSxQKENzLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ5JFR5cGUiLDE2NzQpLEkoMTY2MywxLHt9LFNYKSxsLkxlPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7Zm9yKHRoaXMuYT1lLHRoaXMuZD1uZXcgR3R0LHRoaXMuYz1QdChKRXQsSWUsMTIxLHRoaXMuYS5hLmEuYy5sZW5ndGgsMCwxKSx0aGlzLmI9MCxyPW5ldyBTKHRoaXMuYS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMwNyksbi5kPXRoaXMuYixoPUR2KGJNKG5ldyBVYixuKSx0aGlzLmQpLHRoaXMuY1t0aGlzLmJdPWgsKyt0aGlzLmI7Zm9yKEczbih0aGlzKSxWNG4odGhpcyksdTJuKHRoaXMpLGNhdChtbnQodGhpcy5kKSxuZXcgWWspLG89bmV3IFModGhpcy5hLmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTcpLHMuZC5jPXRoaXMuY1tzLmEuZF0uZStzLmIuYX0sbC5iPTAsUChDcywiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNjYzKSxJKDE0NSwxLHszNToxLDE0NToxfSx4XyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRmFuKHRoaXMsdShlLDE0NSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRyZSh0aGlzKX0sUChDcywiVmVydGljYWxTZWdtZW50IiwxNDUpLEkoODI3LDEse30seTR0KSxsLmM9MCxsLmU9MCxsLmk9MCxQKFJfLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDgyNyksSSg2NjMsMSx7NjYzOjF9LGduZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGwuYj0wLGwuYz0wLGwuZj0wLFAoUl8sIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NjMpLEkoMjg3LDEsezM1OjEsMjg3OjF9LGhXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRXRuKHRoaXMsdShlLDI4NykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsUChSXywiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyODcpLEkoMTkyOSwxLHt9LEZhZSksbC5iPTAsbC5lPSExLFAoUl8sIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwxOTI5KTt2YXIgUWJlPVlpKHMwLCJJSW5pdGlhbGl6YWJsZSIpO0koMTgwNCwxLEhELFFHdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oWnYoKSxEUyl9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmU9UHQoVHIsWHIsMjUsdGhpcy5kLDE1LDEpfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXsrK3RoaXMuZH0sbC5SZj1mdW5jdGlvbigpe3JldHVybiEwfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBPcmUodGhpcyxlLG4sciksaHNuKHRoaXMsbil9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj1LS2UobixlLmxlbmd0aCksT3JlKHRoaXMsZSxyLG4pLEpuZSh0aGlzLHIpfSxsLmQ9MCxQKFJfLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4MDQpLEkoMTkzMCwxLHt9LGxZdCksbC5iPTAsbC5kPTAsUChSXywiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMTkzMCksSSgxOTE3LDEse30sZHVlKSxsLmE9ITEsUChSXywiU3dpdGNoRGVjaWRlciIsMTkxNyksSSgxMDEsMSx7MTAxOjF9LEdhZSksbC5hPW51bGwsbC5jPW51bGwsbC5pPW51bGwsUCh5NiwiU2VsZkh5cGVyTG9vcCIsMTAxKSxJKDE5MTYsMSx7fSxIaWUpLGwuYz0wLGwuZT0wLFAoeTYsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDE5MTYpLEkoNDExLDIyLHszOjEsMzU6MSwyMjoxLDQxMToxfSxHUik7dmFyIF82LGk3LHM3LG9sdCxaYmU9anIoeTYsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MTEsSHIsT2luLF9aZSksSmJlO0koNDA5LDEsezQwOToxfSxBSnQpLFAoeTYsIlNlbGZMb29wRWRnZSIsNDA5KSxJKDQwMywxLHs0MDM6MX0sUGllKSxsLmE9ITEsUCh5NiwiU2VsZkxvb3BIb2xkZXIiLDQwMyksSSgxNzI0LDEsdWksTEYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZhKHUoZSwxNykpfSxQKHk2LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzI0KSxJKDExMywxLHsxMTM6MX0sR2llKSxsLmE9ITEsbC5jPSExLFAoeTYsIlNlbGZMb29wUG9ydCIsMTEzKSxJKDE3OTIsMSx1aSxNRiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVmEodShlLDE3KSl9LFAoeTYsIlNlbGZMb29wUG9ydC9sYW1iZGEkMCRUeXBlIiwxNzkyKSxJKDM2MywyMix7MzoxLDM1OjEsMjI6MSwzNjM6MX0sa00pO3ZhciBBRyxMRyxNRyxJRyxERyx0MmU9anIoeTYsIlNlbGZMb29wVHlwZSIsMzYzLEhyLFRzbixJWmUpLGUyZTtJKDE3MzIsMSx7fSxISik7dmFyIG4yZSxyMmUsaTJlLHMyZTtQKEhsLCJQb3J0UmVzdG9yZXIiLDE3MzIpLEkoMzYxLDIyLHszOjEsMzU6MSwyMjoxLDM2MToxfSx4ZXQpO3ZhciBTdyxoYixBdyxjbHQ9anIoSGwsIlBvcnRSZXN0b3Jlci9Qb3J0U2lkZUFyZWEiLDM2MSxIcixQcm4sRFplKSxhMmU7SSgxNzMzLDEse30sXzMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDE1KS5PYygpfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTczMyksSSgxNzM0LDEsVW4sTVgpLGwudGQ9ZnVuY3Rpb24oZSl7WnAoKSx1KGUsMTEzKS5jPSExfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTczNCksSSgxNzQzLDEsdWksSVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxCbil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZSIsMTc0MyksSSgxNzQ0LDEse30sSFQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExMykuZH0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMSRUeXBlIiwxNzQ0KSxJKDE3NDUsMSxVbixGdHQpLGwudGQ9ZnVuY3Rpb24oZSl7SktlKHRoaXMuYSx1KGUsMTEpKX0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMiRUeXBlIiwxNzQ1KSxJKDE3MzUsMSxVbixCdHQpLGwudGQ9ZnVuY3Rpb24oZSl7c1FlKHRoaXMuYSx1KGUsMTAxKSl9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNzM1KSxJKDE3MzYsMSxPaSxEWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBzb24odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNzM2KSxJKDE3MzcsMSx1aSxPWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gWnAoKSx1KGUsMTEzKS5jfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTczNyksSSgxNzM4LDEsdWksQVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVvbih1KGUsMTEpKX0sUChIbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUiLDE3MzgpLEkoMTczOSwxLHVpLHpUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBacCgpLHUoZSwxMSkuaj09KGJlKCksTm4pfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDYkVHlwZSIsMTczOSksSSgxNzQwLDEsdWksRUYpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxIbil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNyRUeXBlIiwxNzQwKSxJKDE3NDEsMSx1aSxURiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gTmluKHUoZSwxMSkpfSxQKEhsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDgkVHlwZSIsMTc0MSksSSgxNzQyLDEsdWksQ0YpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpwKCksdShlLDExKS5qPT0oYmUoKSxtcil9LFAoSGwsIlBvcnRSZXN0b3Jlci9sYW1iZGEkOSRUeXBlIiwxNzQyKSxJKDI3MCwyMix7MzoxLDM1OjEsMjI6MSwyNzA6MX0sUngpO3ZhciB1bHQsbGx0LGhsdCxmbHQsZGx0LGdsdCxwbHQsYmx0LHlUdD1qcihIbCwiUG9ydFNpZGVBc3NpZ25lci9UYXJnZXQiLDI3MCxIcixRYW4sU1plKSxvMmU7SSgxNzI1LDEse30sX0YpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFJpKG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5qLDE2KSksbmV3IHFUKX0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMSRUeXBlIiwxNzI1KSxJKDE3MjYsMSx7fSxodiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExMykuZH0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMiRUeXBlIiwxNzI2KSxJKDE3MjcsMSxVbixTRiksbC50ZD1mdW5jdGlvbihlKXtGcyh1KGUsMTEpLChiZSgpLE5uKSl9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDMkVHlwZSIsMTcyNyksSSgxNzI4LDEse30sQUYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMTMpLmR9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZSIsMTcyOCksSSgxNzI5LDEsVW4sUnR0KSxsLnRkPWZ1bmN0aW9uKGUpe3NLZSh0aGlzLmEsdShlLDExKSl9LFAoSGwsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZSIsMTcyOSksSSgxNzMwLDEsT2ksTFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUGVuKHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEhsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUiLDE3MzApLEkoMTczMSwxLE9pLEs1KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN0bih1KGUsMTEzKSx1KG4sMTEzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChIbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNyRUeXBlIiwxNzMxKSxJKDgwNSwxLHVpLHFUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEzKS5jfSxQKEhsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUiLDgwNSksSSgyMDA5LDEse30pLFAoaWIsIkFic3RyYWN0U2VsZkxvb3BSb3V0ZXIiLDIwMDkpLEkoMTc1MCwxLE9pLE5YKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpRZSh1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChpYixJZmUsMTc1MCksSSgxNzUxLDEsT2ksUFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUVFlKHUoZSwxMDEpLHUobiwxMDEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKGliLERmZSwxNzUxKSxJKDE3OTMsMjAwOSx7fSxGWCksbC5VZj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LFAoaWIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlciIsMTc5MyksSSgxNzk1LDEsVW4sS0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0EzdCh0aGlzLmIsdGhpcy5hLHUoZSw4KSl9LFAoaWIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNzk1KSxJKDE3OTQsMTc5Myx7fSxCWCksbC5VZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gcz1lLmMuZCxoOChyLDAsTGkobmMocy5uKSxzLmEpKSxvPWUuZC5kLG5pKHIsTGkobmMoby5uKSxvLmEpKSxad24ocil9LFAoaWIsIlBvbHlsaW5lU2VsZkxvb3BSb3V0ZXIiLDE3OTQpLEkoMTc0NiwxLHt9LGpKKSxsLmE9bnVsbDt2YXIgejQ7UChpYiwiUm91dGluZ0RpcmVjdG9yIiwxNzQ2KSxJKDE3NDcsMSxPaSxSWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBodG4odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoaWIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMCRUeXBlIiwxNzQ3KSxJKDE3NDgsMSx7fSxqWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gTFIoKSx1KGUsMTAxKS5qfSxQKGliLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTc0OCksSSgxNzQ5LDEsVW4sJFgpLGwudGQ9ZnVuY3Rpb24oZSl7TFIoKSx1KGUsMTUpLmFkKHo0KX0sUChpYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQyJFR5cGUiLDE3NDkpLEkoMTc1MiwxLHt9LHpYKSxQKGliLCJSb3V0aW5nU2xvdEFzc2lnbmVyIiwxNzUyKSxJKDE3NTMsMSx1aSxVayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gTVllKHRoaXMuYSx1KGUsMTAxKSl9LFAoaWIsIlJvdXRpbmdTbG90QXNzaWduZXIvbGFtYmRhJDAkVHlwZSIsMTc1MyksSSgxNzU0LDEsT2ksc00pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTnRuKHRoaXMuYSx1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChpYiwiUm91dGluZ1Nsb3RBc3NpZ25lci9sYW1iZGEkMSRUeXBlIiwxNzU0KSxJKDE3OTYsMTc5Myx7fSxxWCksbC5VZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQ7cmV0dXJuIHM9WHQoeWUoRnooZS5iLmcuYiwoVGUoKSxCNikpKSksZD1uZXcgZFd0KGN0KG90KFVzLDEpLHRlLDgsMCxbKGg9ZS5jLmQsTGkobmV3IHlvKGgubiksaC5hKSldKSksT2JuKGUsbixyLGQscyksbmkoZCwobz1lLmQuZCxMaShuZXcgeW8oby5uKSxvLmEpKSksc3NlKG5ldyBzeHQoZCkpfSxQKGliLCJTcGxpbmVTZWxmTG9vcFJvdXRlciIsMTc5NiksSSg1NzgsMSxPaSxvbmUsT0t0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEloZSh0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChqXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yIiw1NzgpLEkoMTc1NSwxLHVpLElMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEpLmUuYy5sZW5ndGghPTB9LFAoal8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxNzU1KSxJKDE3NTYsMSx7fSxJRiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShGZSh1KGUsMTEpLmUsMCksMTcpLmN9LFAoal8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMSRUeXBlIiwxNzU2KSxJKDE3NTcsMSx1aSxIWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5lLmMubGVuZ3RoIT0wfSxQKGpfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDIkVHlwZSIsMTc1NyksSSgxNzU4LDEse30sR1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoRmUodShlLDExKS5lLDApLDE3KS5jfSxQKGpfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDMkVHlwZSIsMTc1OCksSSgxNzU5LDEsdWksVlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sUChqXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQ0JFR5cGUiLDE3NTkpLEkoODA2LDEsT2ksUnRlLFhHdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBBWXQodGhpcyxlLG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoal8sIk1vZGVsT3JkZXJQb3J0Q29tcGFyYXRvciIsODA2KSxJKDgwMSwxLHt9LERGKSxsLlZmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGg7Zm9yKG89RGFlKG4pLHI9bmV3IGxlLGg9bi5mL28scz0xO3M8bzsrK3MpdWUocixkZShTcihrdShiLk1hdGgucm91bmQocypoKSkpKSk7cmV0dXJuIHJ9LGwuV2Y9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUChrZCwiQVJEQ3V0SW5kZXhIZXVyaXN0aWMiLDgwMSksSSgxNDc5LDEsYXMsVVgpLGwucGY9ZnVuY3Rpb24oZSxuKXtnd24odShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludEluc2VydGVyIiwxNDc5KSxJKDMwNSwxLHszMDU6MX0sWnd0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IF9wLGUuYSs9IkJQSW5mb1siLGUuYSs9YAoJc3RhcnQ9YCxoYyhlLHRoaXMuaSksZS5hKz1gCgllbmQ9YCxoYyhlLHRoaXMuYSksZS5hKz1gCglub2RlU3RhcnRFZGdlPWAsaGMoZSx0aGlzLmUpLGUuYSs9YAoJc3RhcnRFbmRFZGdlPWAsaGMoZSx0aGlzLmopLGUuYSs9YAoJb3JpZ2luYWxFZGdlPWAsaGMoZSx0aGlzLmYpLGUuYSs9YAoJc3RhcnRJbkxheWVyRHVtbXk9YCxoYyhlLHRoaXMuayksZS5hKz1gCglzdGFydEluTGF5ZXJFZGdlPWAsaGMoZSx0aGlzLm4pLGUuYSs9YAoJZW5kSW5MYXllckR1bW15PWAsaGMoZSx0aGlzLmIpLGUuYSs9YAoJZW5kSW5MYXllckVkZ2U9YCxoYyhlLHRoaXMuYyksZS5hfSxQKGtkLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvIiwzMDUpLEkoNjUyLDEsezY1MjoxfSxUcCksbC5hPSExLGwuYj0wLGwuYz0wLFAoa2QsIkJyZWFraW5nUG9pbnRJbnNlcnRlci9DdXQiLDY1MiksSSgxNDgwLDEsYXMsV1gpLGwucGY9ZnVuY3Rpb24oZSxuKXtHYm4odShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludFByb2Nlc3NvciIsMTQ4MCksSSgxNDgxLDEsdWksS1gpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJlZSh1KGUsMTApKX0sUChrZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8wbWV0aG9kcmVmJGlzRW5kJFR5cGUiLDE0ODEpLEkoMTQ4MiwxLHVpLFlYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBpZWUodShlLDEwKSl9LFAoa2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IvMW1ldGhvZHJlZiRpc1N0YXJ0JFR5cGUiLDE0ODIpLEkoMTQ4MywxLGFzLFhYKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZDJuKHRoaXMsdShlLDM3KSxuKX0sUChrZCwiQnJlYWtpbmdQb2ludFJlbW92ZXIiLDE0ODMpLEkoMTQ4NCwxLFVuLFFYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMjgpLms9ITB9LFAoa2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE0ODQpLEkoNzk3LDEse30sZjV0KSxsLmI9MCxsLmU9MCxsLmY9MCxsLmo9MCxQKGtkLCJHcmFwaFN0YXRzIiw3OTcpLEkoNzk4LDEse30sT0YpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChYdCh5ZShlKSksWHQoeWUobikpKX0sUChrZCwiR3JhcGhTdGF0cy8wbWV0aG9kcmVmJG1heCRUeXBlIiw3OTgpLEkoNzk5LDEse30sTkYpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYi5NYXRoLm1heChYdCh5ZShlKSksWHQoeWUobikpKX0sUChrZCwiR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlIiw3OTkpLEkoMTY2MCwxLHt9LFpYKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpKZSh5ZShlKSx5ZShuKSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDEkVHlwZSIsMTY2MCksSSgxNjYxLDEse30sXzkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFVpZSh0aGlzLmEsdShlLDI5KSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDIkVHlwZSIsMTY2MSksSSgxNjYyLDEse30sclIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFNjZSh0aGlzLmEsdShlLDI5KSl9LFAoa2QsIkdyYXBoU3RhdHMvbGFtYmRhJDYkVHlwZSIsMTY2MiksSSg4MDAsMSx7fSxQRiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoUShlLChUZSgpLGJDdCkpLDE1KSxyfHwodm4oKSx2bigpLGlvKX0sbC5XZj1mdW5jdGlvbigpe3JldHVybiExfSxQKGtkLCJJQ3V0SW5kZXhDYWxjdWxhdG9yL01hbnVhbEN1dEluZGV4Q2FsY3VsYXRvciIsODAwKSxJKDgwMiwxLHt9LEZGKSxsLlZmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQ7Zm9yKFl0PShuLm49PW51bGwmJmJzZShuKSxuLm4pLGs9KG4uZD09bnVsbCYmYnNlKG4pLG4uZCksQnQ9UHQoaWEsdm8sMjUsWXQubGVuZ3RoLDE1LDEpLEJ0WzBdPVl0WzBdLEx0PVl0WzBdLEM9MTtDPFl0Lmxlbmd0aDtDKyspQnRbQ109QnRbQy0xXStZdFtDXSxMdCs9WXRbQ107Zm9yKG89RGFlKG4pLTEsZD11KFEoZSwoVGUoKSx2Q3QpKSwxOSkuYSxzPVRzLHI9bmV3IGxlLEg9Yi5NYXRoLm1heCgwLG8tZCk7SDw9Yi5NYXRoLm1pbihuLmYtMSxvK2QpO0grKyl7aWYodHQ9THQvKEgrMSksZ3Q9MCxNPTEsaD1uZXcgbGUsX3Q9VHMsRj0wLHc9MCxZPWtbMF0sSD09MClfdD1MdCx3PShuLmc9PW51bGwmJihuLmc9dW5lKG4sbmV3IE5GKSksWHQobi5nKSk7ZWxzZXtmb3IoO008bi5mOylCdFtNLTFdLWd0Pj10dCYmKHVlKGgsZGUoTSkpLF90PWIuTWF0aC5tYXgoX3QsQnRbTS0xXS1GKSx3Kz1ZLGd0Kz1CdFtNLTFdLWd0LEY9QnRbTS0xXSxZPWtbTV0pLFk9Yi5NYXRoLm1heChZLGtbTV0pLCsrTTt3Kz1ZfVY9Yi5NYXRoLm1pbigxL190LDEvbi5iL3cpLFY+cyYmKHM9VixyPWgpfXJldHVybiByfSxsLldmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoa2QsIk1TREN1dEluZGV4SGV1cmlzdGljIiw4MDIpLEkoMTYxNywxLGFzLEpYKSxsLnBmPWZ1bmN0aW9uKGUsbil7am1uKHUoZSwzNyksbil9LFAoa2QsIlNpbmdsZUVkZ2VHcmFwaFdyYXBwZXIiLDE2MTcpLEkoMjI3LDIyLHszOjEsMzU6MSwyMjoxLDIyNzoxfSxZOSk7dmFyIHE0LGE3LG83LE95LGRTLEg0LGM3PWpyKGtjLCJDZW50ZXJFZGdlTGFiZWxQbGFjZW1lbnRTdHJhdGVneSIsMjI3LEhyLFhzbixBWmUpLGMyZTtJKDQyMiwyMix7MzoxLDM1OjEsMjI6MSw0MjI6MX0sTWJ0KTt2YXIgeFR0LHZsdCxrVHQ9anIoa2MsIkNvbnN0cmFpbnRDYWxjdWxhdGlvblN0cmF0ZWd5Iiw0MjIsSHIsJG5uLExaZSksdTJlO0koMzE0LDIyLHszOjEsMzU6MSwyMjoxLDMxNDoxLDI0NjoxLDIzNDoxfSxrZXQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbW9lKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIG1vZSh0aGlzKX07dmFyIHdPLFM2LEVUdCxUVHQ9anIoa2MsIkNyb3NzaW5nTWluaW1pemF0aW9uU3RyYXRlZ3kiLDMxNCxIcixEcm4sTVplKSxsMmU7SSgzMzcsMjIsezM6MSwzNToxLDIyOjEsMzM3OjF9LEVldCk7dmFyIENUdCx3bHQsT0csX1R0PWpyKGtjLCJDdXR0aW5nU3RyYXRlZ3kiLDMzNyxIcixPcm4sT1plKSxoMmU7SSgzMzUsMjIsezM6MSwzNToxLDIyOjEsMzM1OjEsMjQ2OjEsMjM0OjF9LEVNKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHNjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBzY2UodGhpcyl9O3ZhciBTVHQsbWx0LGdTLHlsdCxwUyxBVHQ9anIoa2MsIkN5Y2xlQnJlYWtpbmdTdHJhdGVneSIsMzM1LEhyLGtzbixOWmUpLGYyZTtJKDQxOSwyMix7MzoxLDM1OjEsMjI6MSw0MTk6MX0sSWJ0KTt2YXIgTkcsTFR0LE1UdD1qcihrYywiRGlyZWN0aW9uQ29uZ3J1ZW5jeSIsNDE5LEhyLGpubixQWmUpLGQyZTtJKDQ1MCwyMix7MzoxLDM1OjEsMjI6MSw0NTA6MX0sVGV0KTt2YXIgdTcseGx0LEc0LGcyZT1qcihrYywiRWRnZUNvbnN0cmFpbnQiLDQ1MCxIcixOcm4sRlplKSxwMmU7SSgyNzYsMjIsezM6MSwzNToxLDIyOjEsMjc2OjF9LFg5KTt2YXIga2x0LEVsdCxUbHQsQ2x0LFBHLF9sdCxJVHQ9anIoa2MsIkVkZ2VMYWJlbFNpZGVTZWxlY3Rpb24iLDI3NixIcix0YW4sQlplKSxiMmU7SSg0NzksMjIsezM6MSwzNToxLDIyOjEsNDc5OjF9LERidCk7dmFyIEZHLERUdCxPVHQ9anIoa2MsIkVkZ2VTdHJhaWdodGVuaW5nU3RyYXRlZ3kiLDQ3OSxIcixSbm4sUlplKSx2MmU7SSgyNzQsMjIsezM6MSwzNToxLDIyOjEsMjc0OjF9LFE5KTt2YXIgU2x0LE5UdCxQVHQsQkcsRlR0LEJUdCxSVHQ9anIoa2MsIkZpeGVkQWxpZ25tZW50IiwyNzQsSHIsWnNuLGpaZSksdzJlO0koMjc1LDIyLHszOjEsMzU6MSwyMjoxLDI3NToxfSxaOSk7dmFyIGpUdCwkVHQselR0LHFUdCxiUyxIVHQsR1R0PWpyKGtjLCJHcmFwaENvbXBhY3Rpb25TdHJhdGVneSIsMjc1LEhyLFFzbiwkWmUpLG0yZTtJKDI1NiwyMix7MzoxLDM1OjEsMjI6MSwyNTY6MX0sRG0pO3ZhciBsNyxSRyxoNyxiaCx2UyxqRyxmNyxWNCwkRyx3UyxBbHQ9anIoa2MsIkdyYXBoUHJvcGVydGllcyIsMjU2LEhyLGpvbix6WmUpLHkyZTtJKDI5MiwyMix7MzoxLDM1OjEsMjI6MSwyOTI6MX0sQ2V0KTt2YXIgbU8sTGx0LE1sdCxJbHQ9anIoa2MsIkdyZWVkeVN3aXRjaFR5cGUiLDI5MixIcixCcm4scVplKSx4MmU7SSgzMDMsMjIsezM6MSwzNToxLDIyOjEsMzAzOjF9LF9ldCk7dmFyIEE2LHlPLFU0LGsyZT1qcihrYywiSW5MYXllckNvbnN0cmFpbnQiLDMwMyxIcixGcm4sSFplKSxFMmU7SSg0MjAsMjIsezM6MSwzNToxLDIyOjEsNDIwOjF9LE9idCk7dmFyIERsdCxWVHQsVVR0PWpyKGtjLCJJbnRlcmFjdGl2ZVJlZmVyZW5jZVBvaW50Iiw0MjAsSHIsem5uLEdaZSksVDJlLFdUdCxMNixMdyx6RyxLVHQsWVR0LHFHLFhUdCx4TyxIRyxtUyxNNixOeSxPbHQsR0csb2MsUVR0LE13LEdjLE5sdCxQbHQsa08sTzIsSXcsSTYsWlR0LEQ2LEVPLFB5LG4xLFJoLEZsdCxXNCxUYyxfaSxKVHQsdDl0LGU5dCxuOXQscjl0LEJsdCxWRyxadSxEdyxSbHQsTzYsVE8sJDEsSzQsZDcsWTQsWDQsZzcsTjIsaTl0LGpsdCwkbHQsTjY7SSgxNjMsMjIsezM6MSwzNToxLDIyOjEsMTYzOjF9LENNKTt2YXIgeVMsZmIseFMsRnksQ08sczl0PWpyKGtjLCJMYXllckNvbnN0cmFpbnQiLDE2MyxIcixDc24sVlplKSxDMmU7SSg4NDgsMSxJaCxVSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdzZ0KSwiIiksIkRpcmVjdGlvbiBDb25ncnVlbmN5IiksIlNwZWNpZmllcyBob3cgZHJhd2luZ3Mgb2YgdGhlIHNhbWUgZ3JhcGggd2l0aCBkaWZmZXJlbnQgbGF5b3V0IGRpcmVjdGlvbnMgY29tcGFyZSB0byBlYWNoIG90aGVyOiBlaXRoZXIgYSBuYXR1cmFsIHJlYWRpbmcgZGlyZWN0aW9uIGlzIHByZXNlcnZlZCBvciB0aGUgZHJhd2luZ3MgYXJlIHJvdGF0ZWQgdmVyc2lvbnMgb2YgZWFjaCBvdGhlci4iKSxwOXQpLChqZygpLGNzKSksTVR0KSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxtNnQpLCIiKSwiRmVlZGJhY2sgRWRnZXMiKSwiV2hldGhlciBmZWVkYmFjayBlZGdlcyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgYnkgcm91dGluZyBhcm91bmQgdGhlIG5vZGVzLiIpLChGbigpLCExKSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEtxKSwiIiksIkludGVyYWN0aXZlIFJlZmVyZW5jZSBQb2ludCIpLCJEZXRlcm1pbmVzIHdoaWNoIHBvaW50IG9mIGEgbm9kZSBpcyBjb25zaWRlcmVkIGJ5IGludGVyYWN0aXZlIGxheW91dCBwaGFzZXMuIikseDl0KSxjcyksVVR0KSx1bihxbikpKSksYWEoZSxLcSwkb3QsYnZlKSxhYShlLEtxLCRfLHB2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHk2dCksIiIpLCJNZXJnZSBFZGdlcyIpLCJFZGdlcyB0aGF0IGhhdmUgbm8gcG9ydHMgYXJlIG1lcmdlZCBzbyB0aGV5IHRvdWNoIHRoZSBjb25uZWN0ZWQgbm9kZXMgYXQgdGhlIHNhbWUgcG9pbnRzLiBXaGVuIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCBvbmUgcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGEgbm9kZS4gV2hlbiBpdCBpcyBlbmFibGVkLCBhbGwgc3VjaCBpbmNvbWluZyBlZGdlcyBzaGFyZSBhbiBpbnB1dCBwb3J0LCBhbmQgYWxsIG91dGdvaW5nIGVkZ2VzIHNoYXJlIGFuIG91dHB1dCBwb3J0LiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseDZ0KSwiIiksIk1lcmdlIEhpZXJhcmNoeS1Dcm9zc2luZyBFZGdlcyIpLCJJZiBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGFjdGl2ZSwgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHVzZSBhcyBmZXcgaGllcmFyY2hpY2FsIHBvcnRzIGFzIHBvc3NpYmxlLiBUaGV5IGFyZSBicm9rZW4gYnkgdGhlIGFsZ29yaXRobSwgd2l0aCBoaWVyYXJjaGljYWwgcG9ydHMgaW5zZXJ0ZWQgYXMgcmVxdWlyZWQuIFVzdWFsbHksIG9uZSBzdWNoIHBvcnQgaXMgY3JlYXRlZCBmb3IgZWFjaCBlZGdlIGF0IGVhY2ggaGllcmFyY2h5IGNyb3NzaW5nIHBvaW50LiBXaXRoIHRoaXMgb3B0aW9uIHNldCB0byB0cnVlLCB3ZSB0cnkgdG8gY3JlYXRlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUgaW4gdGhlIHByb2Nlc3MuIEluIHBhcnRpY3VsYXIsIGFsbCBlZGdlcyB0aGF0IGZvcm0gYSBoeXBlcmVkZ2UgY2FuIHNoYXJlIGEgcG9ydC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUoUUtlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrNnQpLCIiKSwiQWxsb3cgTm9uLUZsb3cgUG9ydHMgVG8gU3dpdGNoIFNpZGVzIiksIlNwZWNpZmllcyB3aGV0aGVyIG5vbi1mbG93IHBvcnRzIG1heSBzd2l0Y2ggc2lkZXMgaWYgdGhlaXIgbm9kZSdzIHBvcnQgY29uc3RyYWludHMgYXJlIGVpdGhlciBGSVhFRF9TSURFIG9yIEZJWEVEX09SREVSLiBBIG5vbi1mbG93IHBvcnQgaXMgYSBwb3J0IG9uIGEgc2lkZSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBsYXlvdXQgZmxvdy4gRm9yIGluc3RhbmNlLCBnaXZlbiBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbiwgbm9ydGggYW5kIHNvdXRoIHBvcnRzIHdvdWxkIGJlIGNvbnNpZGVyZWQgbm9uLWZsb3cgcG9ydHMuIEZ1cnRoZXIgbm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNyaXRlcml1bSB3aGV0aGVyIHRvIHN3aXRjaCBzaWRlcyBvciBub3Qgc29sZWx5IHJlbGllcyBvbiB0aGUgbWluaW1pemF0aW9uIG9mIGVkZ2UgY3Jvc3NpbmdzLiBIZW5jZSwgZWRnZSBsZW5ndGggYW5kIG90aGVyIGFlc3RoZXRpY3MgY3JpdGVyaWEgYXJlIG5vdCBhZGRyZXNzZWQuIiksITEpLEFhKSxCcyksdW4oJDIpKSxjdChvdChBZSwxKSx0ZSwyLDYsWyJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub3J0aE9yU291dGhQb3J0Il0pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxFNnQpLCIiKSwiUG9ydCBTb3J0aW5nIFN0cmF0ZWd5IiksIk9ubHkgcmVsZXZhbnQgZm9yIG5vZGVzIHdpdGggRklYRURfU0lERSBwb3J0IGNvbnN0cmFpbnRzLiBEZXRlcm1pbmVzIHRoZSB3YXkgYSBub2RlJ3MgcG9ydHMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBzaWRlcyBvZiBhIG5vZGUgaWYgdGhlaXIgb3JkZXIgaXMgbm90IHByZXNjcmliZWQuIFRoZSBvcHRpb24gaXMgc2V0IG9uIHBhcmVudCBub2Rlcy4iKSxMOXQpLGNzKSxCQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVDZ0KSwiIiksIlRob3JvdWdobmVzcyIpLCJIb3cgbXVjaCBlZmZvcnQgc2hvdWxkIGJlIHNwZW50IHRvIHByb2R1Y2UgYSBuaWNlIGxheW91dC4iKSxkZSg3KSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEM2dCksIiIpLCJBZGQgVW5uZWNlc3NhcnkgQmVuZHBvaW50cyIpLCJBZGRzIGJlbmQgcG9pbnRzIGV2ZW4gaWYgYW4gZWRnZSBkb2VzIG5vdCBjaGFuZ2UgZGlyZWN0aW9uLiBJZiB0cnVlLCBlYWNoIGxvbmcgZWRnZSBkdW1teSB3aWxsIGNvbnRyaWJ1dGUgYSBiZW5kIHBvaW50IHRvIGl0cyBlZGdlcyBhbmQgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzIHdpbGwgYWx3YXlzIGdldCBhIGJlbmQgcG9pbnQgd2hlcmUgdGhleSBjcm9zcyBoaWVyYXJjaHkgYm91bmRhcmllcy4gQnkgZGVmYXVsdCwgYmVuZCBwb2ludHMgYXJlIG9ubHkgYWRkZWQgd2hlcmUgYW4gZWRnZSBjaGFuZ2VzIGRpcmVjdGlvbi4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLF82dCksIiIpLCJHZW5lcmF0ZSBQb3NpdGlvbiBhbmQgTGF5ZXIgSURzIiksIklmIGVuYWJsZWQgcG9zaXRpb24gaWQgYW5kIGxheWVyIGlkIGFyZSBnZW5lcmF0ZWQsIHdoaWNoIGFyZSB1c3VhbGx5IG9ubHkgdXNlZCBpbnRlcm5hbGx5IHdoZW4gc2V0dGluZyB0aGUgaW50ZXJhY3RpdmVMYXlvdXQgb3B0aW9uLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIG9uIHRoZSByb290IG5vZGUuIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkb3QpLCJjeWNsZUJyZWFraW5nIiksIkN5Y2xlIEJyZWFraW5nIFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBjeWNsZSBicmVha2luZy4gQ3ljbGUgYnJlYWtpbmcgbG9va3MgZm9yIGN5Y2xlcyBpbiB0aGUgZ3JhcGggYW5kIGRldGVybWluZXMgd2hpY2ggZWRnZXMgdG8gcmV2ZXJzZSB0byBicmVhayB0aGUgY3ljbGVzLiBSZXZlcnNlZCBlZGdlcyB3aWxsIGVuZCB1cCBwb2ludGluZyB0byB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHJlZ3VsYXIgZWRnZXMgKHRoYXQgaXMsIHJldmVyc2VkIGVkZ2VzIHdpbGwgcG9pbnQgbGVmdCBpZiBlZGdlcyB1c3VhbGx5IHBvaW50IHJpZ2h0KS4iKSxnOXQpLGNzKSxBVHQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR0QpLGxjdCksIk5vZGUgTGF5ZXJpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIG5vZGUgbGF5ZXJpbmcuIiksVDl0KSxjcyksQ0N0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFM2dCksbGN0KSwiTGF5ZXIgQ29uc3RyYWludCIpLCJEZXRlcm1pbmVzIGEgY29uc3RyYWludCBvbiB0aGUgcGxhY2VtZW50IG9mIHRoZSBub2RlIHJlZ2FyZGluZyB0aGUgbGF5ZXJpbmcuIiksazl0KSxjcyksczl0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEE2dCksbGN0KSwiTGF5ZXIgQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBsYXllciBwbGFjZW1lbnQgb2YgYSBub2RlLiBMZXQgaSBiZSB0aGUgdmFsdWUgb2YgdGVoIGNvbnN0cmFpbnQuIEFzc3VtZWQgdGhlIGRyYXdpbmcgaGFzIG4gbGF5ZXJzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gaS10aCBsYXllci4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBpbiB0aGUgbGFzdCBsYXllciBvZiB0aGUgZHJhd2luZy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG5vdCBwYXJ0IG9mIGFueSBvZiBFTEsgTGF5ZXJlZCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYnV0IGlzIG9ubHkgZXZhbHVhdGVkIGFzIHBhcnQgb2YgdGhlIGBJbnRlcmFjdGl2ZUxheWVyZWRHcmFwaFZpc2l0b3JgLCB3aGljaCBtdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgb3IgdXNlZCB2aWEgdGhlIGBEaWFncmFtTGF5b3V0RW5naW5lLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw2dCksbGN0KSwiTGF5ZXIgSUQiKSwiTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHpvdCkscDFlKSwiVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdIiksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIiksZGUoNCkpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUsem90LEdELEV2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHFvdCkscDFlKSwiVXBwZXIgTGF5ZXIgRXN0aW1hdGlvbiBTY2FsaW5nIEZhY3RvciBbTWluV2lkdGggTGF5ZXJlcl0iKSwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIiksZGUoMikpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUscW90LEdELEN2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEhvdCksYjFlKSwiTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3kiKSwiUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4iKSxFOXQpLGNzKSxOQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR290KSxiMWUpLCJNYXggTm9kZSBQcm9tb3Rpb24gSXRlcmF0aW9ucyIpLCJMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBub2RlIHByb21vdGlvbi4iKSxkZSgwKSksZ2MpLGphKSx1bihxbikpKSksYWEoZSxHb3QsSG90LG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWb3QpLCJsYXllcmluZy5jb2ZmbWFuR3JhaGFtIiksIkxheWVyIEJvdW5kIiksIlRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4iKSxkZSh2aSkpLGdjKSxqYSksdW4ocW4pKSkpLGFhKGUsVm90LEdELHd2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCRfKSxWRCksIkNyb3NzaW5nIE1pbmltaXphdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiIpLGQ5dCksY3MpLFRUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxNNnQpLFZEKSwiRm9yY2UgTm9kZSBNb2RlbCBPcmRlciIpLCJUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFVvdCksVkQpLCJIaWVyYXJjaGljYWwgU3dlZXBpbmVzcyIpLCJIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLiIpLC4xKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLFVvdCxvSCxHMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXb3QpLFZEKSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyB3aXRoaW4gYSBsYXllciBidXQgc3RpbGwgbWluaW1pemVzIGNyb3NzaW5ncyBiZXR3ZWVuIGVkZ2VzIGNvbm5lY3RpbmcgbG9uZyBlZGdlIGR1bW1pZXMuIERlcml2ZXMgdGhlIGRlc2lyZWQgb3JkZXIgZnJvbSBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSAnb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyBsYXlvdXQgb3B0aW9uLiBSZXF1aXJlcyBhIGNyb3NzaW5nIG1pbmltaXphdGlvbiBzdHJhdGVneSB0aGF0IGlzIGFibGUgdG8gcHJvY2VzcyAnaW4tbGF5ZXInIGNvbnN0cmFpbnRzLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLFdvdCwkXyxLMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxJNnQpLFZEKSwiUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksZGUoLTEpKSxnYyksamEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRDZ0KSxWRCksIlBvc2l0aW9uIElEIiksIlBvc2l0aW9uIHdpdGhpbiBhIGxheWVyIHRoYXQgd2FzIGRldGVybWluZWQgYnkgRUxLIExheWVyZWQgZm9yIGEgbm9kZS4gVGhpcyBpcyBvbmx5IGdlbmVyYXRlZCBpZiBpbnRlcmFjdGl2ZUxheW90IG9yIGdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyBpcyBzZXQuIiksZGUoLTEpKSxnYyksamEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTzZ0KSx2MWUpLCJHcmVlZHkgU3dpdGNoIEFjdGl2YXRpb24gVGhyZXNob2xkIiksIkJ5IGRlZmF1bHQgaXQgaXMgZGVjaWRlZCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBncmVlZHkgc3dpdGNoIGlzIGFjdGl2YXRlZCBvciBub3QuIFRoZSBkZWNpc2lvbiBpcyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBncmFwaCAod2l0aG91dCBkdW1teSBub2RlcykgaXMgc21hbGxlciB0aGFuIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gQSAnMCcgZW5mb3JjZXMgdGhlIGFjdGl2YXRpb24uIiksZGUoNDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsS290KSx2MWUpLCJHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbiIpLCJHcmVlZHkgU3dpdGNoIHN0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpcyBleGVjdXRlZCBhZnRlciB0aGUgcmVndWxhciBjcm9zc2luZyBtaW5pbWl6YXRpb24gYXMgYSBwb3N0LXByb2Nlc3Nvci4gTm90ZSB0aGF0IGlmICdoaWVyYXJjaHlIYW5kbGluZycgaXMgc2V0IHRvICdJTkNMVURFX0NISUxEUkVOJywgdGhlICdncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwudHlwZScgb3B0aW9uIG11c3QgYmUgdXNlZC4iKSxmOXQpLGNzKSxJbHQpLHVuKHFuKSkpKSxhYShlLEtvdCwkXyxxMmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZcSksImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbCIpLCJHcmVlZHkgU3dpdGNoIENyb3NzaW5nIE1pbmltaXphdGlvbiAoaGllcmFyY2hpY2FsKSIpLCJBY3RpdmF0ZXMgdGhlIGdyZWVkeSBzd2l0Y2ggaGV1cmlzdGljIGluIGNhc2UgaGllcmFyY2hpY2FsIGxheW91dCBpcyB1c2VkLiBUaGUgZGlmZmVyZW5jZXMgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgY2FzZSAoc2VlICdncmVlZHlTd2l0Y2gudHlwZScpIGFyZTogMSkgZ3JlZWR5IHN3aXRjaCBpcyBpbmFjdGl2ZSBieSBkZWZhdWx0LCAzKSBvbmx5IHRoZSBvcHRpb24gdmFsdWUgc2V0IG9uIHRoZSBub2RlIGF0IHdoaWNoIGhpZXJhcmNoaWNhbCBsYXlvdXQgc3RhcnRzIGlzIHJlbGV2YW50LCBhbmQgMikgaWYgaXQncyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIsIGl0IHByb3Blcmx5IGFkZHJlc3NlcyBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMuIiksaDl0KSxjcyksSWx0KSx1bihxbikpKSksYWEoZSxZcSwkXyxqMmUpLGFhKGUsWXEsb0gsJDJlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTTQpLHcxZSksIk5vZGUgUGxhY2VtZW50IFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBub2RlIHBsYWNlbWVudC4iKSxBOXQpLGNzKSxMQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsWHEpLHcxZSksIkZhdm9yIFN0cmFpZ2h0IEVkZ2VzIE92ZXIgQmFsYW5jaW5nIiksIkZhdm9yIHN0cmFpZ2h0IGVkZ2VzIG92ZXIgYSBiYWxhbmNlZCBub2RlIHBsYWNlbWVudC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSB1c2VkICdlZGdlUm91dGluZycuIEZvciBhbiBvcnRob2dvbmFsIHN0eWxlIGl0IGlzIHNldCB0byB0cnVlLCBmb3IgYWxsIG90aGVyIHN0eWxlcyB0byBmYWxzZS4iKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLFhxLE00LEZ2ZSksYWEoZSxYcSxNNCxCdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZb3QpLG0xZSksIkJLIEVkZ2UgU3RyYWlnaHRlbmluZyIpLCJTcGVjaWZpZXMgd2hldGhlciB0aGUgQnJhbmRlcyBLb2VwZiBub2RlIHBsYWNlciB0cmllcyB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHN0cmFpZ2h0IGVkZ2VzIGF0IHRoZSBleHBlbnNlIG9mIGRpYWdyYW0gc2l6ZS4gVGhlcmUgaXMgYSBzdWJ0bGUgZGlmZmVyZW5jZSB0byB0aGUgJ2Zhdm9yU3RyYWlnaHRFZGdlcycgb3B0aW9uLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYSBiYWxhbmNlZCBwbGFjZW1lbnQgb2YgdGhlIG5vZGVzIGlzIGRlc2lyZWQsIG9yIG5vdC4gSW4gYmsgdGVybXMgdGhpcyBtZWFucyBjb21iaW5pbmcgdGhlIGZvdXIgYWxpZ25tZW50cyBpbnRvIGEgc2luZ2xlIGJhbGFuY2VkIG9uZSwgb3Igbm90LiBUaGlzIG9wdGlvbiBvbiB0aGUgb3RoZXIgaGFuZCB0cmllcyB0byBzdHJhaWdodGVuIGFkZGl0aW9uYWwgZWRnZXMgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBlYWNoIG9mIHRoZSBmb3VyIGFsaWdubWVudHMuIiksQzl0KSxjcyksT1R0KSx1bihxbikpKSksYWEoZSxZb3QsTTQsRHZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWG90KSxtMWUpLCJCSyBGaXhlZCBBbGlnbm1lbnQiKSwiVGVsbHMgdGhlIEJLIG5vZGUgcGxhY2VyIHRvIHVzZSBhIGNlcnRhaW4gYWxpZ25tZW50IChvdXQgb2YgaXRzIGZvdXIpIGluc3RlYWQgb2YgdGhlIG9uZSBwcm9kdWNpbmcgdGhlIHNtYWxsZXN0IGhlaWdodCwgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBmb3VyLiIpLF85dCksY3MpLFJUdCksdW4ocW4pKSkpLGFhKGUsWG90LE00LE52ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFvdCksIm5vZGVQbGFjZW1lbnQubGluZWFyU2VnbWVudHMiKSwiTGluZWFyIFNlZ21lbnRzIERlZmxlY3Rpb24gRGFtcGVuaW5nIiksIkRhbXBlbnMgdGhlIG1vdmVtZW50IG9mIG5vZGVzIHRvIGtlZXAgdGhlIGRpYWdyYW0gZnJvbSBnZXR0aW5nIHRvbyBsYXJnZS4iKSwuMyksRG8pLGNhKSx1bihxbikpKSksYWEoZSxRb3QsTTQsanZlKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsWm90KSwibm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleCIpLCJOb2RlIEZsZXhpYmlsaXR5IiksIkFpbXMgYXQgc2hvcnRlciBhbmQgc3RyYWlnaHRlciBlZGdlcy4gVHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBwb3NzaWJsZTogKGEpIGFsbG93IHBvcnRzIHRvIG1vdmUgZnJlZWx5IG9uIHRoZSBzaWRlIHRoZXkgYXJlIGFzc2lnbmVkIHRvICh0aGUgb3JkZXIgaXMgYWx3YXlzIGRlZmluZWQgYmVmb3JlaGFuZCksIChiKSBhZGRpdGlvbmFsbHkgYWxsb3cgdG8gZW5sYXJnZSBhIG5vZGUgd2hlcmV2ZXIgaXQgaGVscHMuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBjb25maWd1cmVkIGZvciBhIG5vZGUsIHRoZSAnbm9kZUZsZXhpYmlsaXR5LmRlZmF1bHQnIHZhbHVlIGlzIHVzZWQsIHdoaWNoIGlzIHNwZWNpZmllZCBmb3IgdGhlIG5vZGUncyBwYXJlbnQuIiksY3MpLHVodCksdW4oSnMpKSkpLGFhKGUsWm90LE00LEh2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEpvdCksIm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5IiksIk5vZGUgRmxleGliaWxpdHkgRGVmYXVsdCIpLCJEZWZhdWx0IHZhbHVlIG9mIHRoZSAnbm9kZUZsZXhpYmlsaXR5JyBvcHRpb24gZm9yIHRoZSBjaGlsZHJlbiBvZiBhIGhpZXJhcmNoaWNhbCBub2RlLiIpLFM5dCksY3MpLHVodCksdW4ocW4pKSkpLGFhKGUsSm90LE00LHF2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE42dCkseTFlKSwiU2VsZi1Mb29wIERpc3RyaWJ1dGlvbiIpLCJBbHRlciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBsb29wcyBhcm91bmQgdGhlIG5vZGUuIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGZvciBQb3J0Q29uc3RyYWludHMuRlJFRS4iKSx3OXQpLGNzKSwkQ3QpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUDZ0KSx5MWUpLCJTZWxmLUxvb3AgT3JkZXJpbmciKSwiQWx0ZXIgdGhlIG9yZGVyaW5nIG9mIHRoZSBsb29wcyB0aGV5IGNhbiBlaXRoZXIgYmUgc3RhY2tlZCBvciBzZXF1ZW5jZWQuIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGZvciBQb3J0Q29uc3RyYWludHMuRlJFRS4iKSxtOXQpLGNzKSx6Q3QpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUXEpLCJlZGdlUm91dGluZy5zcGxpbmVzIiksIlNwbGluZSBSb3V0aW5nIE1vZGUiKSwiU3BlY2lmaWVzIHRoZSB3YXkgY29udHJvbCBwb2ludHMgYXJlIGFzc2VtYmxlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIGVkZ2UuIENPTlNFUlZBVElWRSBlbnN1cmVzIHRoYXQgZWRnZXMgYXJlIHByb3Blcmx5IHJvdXRlZCBhcm91bmQgdGhlIG5vZGVzIGJ1dCBmZWVscyByYXRoZXIgb3J0aG9nb25hbCBhdCB0aW1lcy4gU0xPUFBZIHVzZXMgZmV3ZXIgY29udHJvbCBwb2ludHMgdG8gb2J0YWluIGN1cnZpZXIgZWRnZSByb3V0ZXMgYnV0IG1heSByZXN1bHQgaW4gZWRnZXMgb3ZlcmxhcHBpbmcgbm9kZXMuIikseTl0KSxjcyksSEN0KSx1bihxbikpKSksYWEoZSxRcSxVRCxzdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxacSksImVkZ2VSb3V0aW5nLnNwbGluZXMuc2xvcHB5IiksIlNsb3BweSBTcGxpbmUgTGF5ZXIgU3BhY2luZyBGYWN0b3IiKSwiU3BhY2luZyBmYWN0b3IgZm9yIHJvdXRpbmcgYXJlYSBiZXR3ZWVuIGxheWVycyB3aGVuIHVzaW5nIHNsb3BweSBzcGxpbmUgcm91dGluZy4iKSwuMiksRG8pLGNhKSx1bihxbikpKSksYWEoZSxacSxVRCxvdmUpLGFhKGUsWnEsUXEsY3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdGN0KSwiZWRnZVJvdXRpbmcucG9seWxpbmUiKSwiU2xvcGVkIEVkZ2UgWm9uZSBXaWR0aCIpLCJXaWR0aCBvZiB0aGUgc3RyaXAgdG8gdGhlIGxlZnQgYW5kIHRvIHRoZSByaWdodCBvZiBlYWNoIGxheWVyIHdoZXJlIHRoZSBwb2x5bGluZSBlZGdlIHJvdXRlciBpcyBhbGxvd2VkIHRvIHJlZnJhaW4gZnJvbSBlbnN1cmluZyB0aGF0IGVkZ2VzIGFyZSByb3V0ZWQgaG9yaXpvbnRhbGx5LiBUaGlzIHByZXZlbnRzIGF3a3dhcmQgYmVuZCBwb2ludHMgZm9yIG5vZGVzIHRoYXQgZXh0ZW50IGFsbW9zdCB0byB0aGUgZWRnZSBvZiB0aGVpciBsYXllci4iKSwyKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLHRjdCxVRCxldmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxGNnQpLEYxKSwiU3BhY2luZyBCYXNlIFZhbHVlIiksIkFuIG9wdGlvbmFsIGJhc2UgdmFsdWUgZm9yIGFsbCBvdGhlciBsYXlvdXQgb3B0aW9ucyBvZiB0aGUgJ3NwYWNpbmcnIGdyb3VwLiBJdCBjYW4gYmUgdXNlZCB0byBjb252ZW5pZW50bHkgYWx0ZXIgdGhlIG92ZXJhbGwgJ3NwYWNpb3VzbmVzcycgb2YgdGhlIGRyYXdpbmcuIFdoZW5ldmVyIGFuIGV4cGxpY2l0IHZhbHVlIGlzIHNldCBmb3IgdGhlIG90aGVyIGxheW91dCBvcHRpb25zLCB0aGlzIGJhc2UgdmFsdWUgd2lsbCBoYXZlIG5vIGVmZmVjdC4gVGhlIGJhc2UgdmFsdWUgaXMgbm90IGluaGVyaXRlZCwgaS5lLiBpdCBtdXN0IGJlIHNldCBmb3IgZWFjaCBoaWVyYXJjaGljYWwgbm9kZS4iKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQjZ0KSxGMSksIkVkZ2UgTm9kZSBCZXR3ZWVuIExheWVycyBTcGFjaW5nIiksIlRoZSBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGFyZSByb3V0ZWQgbmV4dCB0byB0aGUgbm9kZSdzIGxheWVyLiBGb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBjcm9zcyB0aGUgbm9kZSdzIGxheWVyICdzcGFjaW5nLmVkZ2VOb2RlJyBpcyB1c2VkLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUjZ0KSxGMSksIkVkZ2UgRWRnZSBCZXR3ZWVuIExheWVyIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyB0aGF0IGFyZSByb3V0ZWQgYmV0d2VlbiB0aGUgc2FtZSBwYWlyIG9mIGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLmVkZ2VFZGdlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIGNyb3NzaW5nIHRoZSBzYW1lIGxheWVyLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsajZ0KSxGMSksIk5vZGUgTm9kZSBCZXR3ZWVuIExheWVycyBTcGFjaW5nIiksIlRoZSBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGFueSBwYWlyIG9mIG5vZGVzIG9mIHR3byBhZGphY2VudCBsYXllcnMuIE5vdGUgdGhhdCAnc3BhY2luZy5ub2RlTm9kZScgaXMgdXNlZCBmb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBub2RlcyB3aXRoaW4gdGhlIGxheWVyIGl0c2VsZi4iKSwyMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCQ2dCksWTZ0KSwiRGlyZWN0aW9uIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBoYXZlIGEgY2VydGFpbiBlZGdlIHBvaW50IGludG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgb3ZlcmFsbCBsYXlvdXQuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGN5Y2xlIGJyZWFraW5nIHBoYXNlLiIpLGRlKDApKSxnYyksamEpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsejZ0KSxZNnQpLCJTaG9ydG5lc3MgUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBhcyBzaG9ydCBhcyBwb3NzaWJsZS4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgbGF5ZXJpbmcgcGhhc2UuIiksZGUoMCkpLGdjKSxqYSksdW4oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxNnQpLFk2dCksIlN0cmFpZ2h0bmVzcyBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIHN0cmFpZ2h0LCBpLmUuIGFsaWduZWQgd2l0aCBvbmUgb2YgdGhlIHR3byBheGVzLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIG5vZGUgcGxhY2VtZW50LiIpLGRlKDApKSxnYyksamEpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWN0KSxYNnQpLEZmZSksIlRyaWVzIHRvIGZ1cnRoZXIgY29tcGFjdCBjb21wb25lbnRzIChkaXNjb25uZWN0ZWQgc3ViLWdyYXBocykuIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFhKGUsZWN0LFBfLCEwKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSDZ0KSx4MWUpLCJQb3N0IENvbXBhY3Rpb24gU3RyYXRlZ3kiKSxrMWUpLG85dCksY3MpLEdUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHNnQpLHgxZSksIlBvc3QgQ29tcGFjdGlvbiBDb25zdHJhaW50IENhbGN1bGF0aW9uIiksazFlKSxhOXQpLGNzKSxrVHQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSnEpLFE2dCksIkhpZ2ggRGVncmVlIE5vZGUgVHJlYXRtZW50IiksIk1ha2VzIHJvb20gYXJvdW5kIGhpZ2ggZGVncmVlIG5vZGVzIHRvIHBsYWNlIGxlYWZzIGFuZCB0cmVlcy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5jdCksUTZ0KSwiSGlnaCBEZWdyZWUgTm9kZSBUaHJlc2hvbGQiKSwiV2hldGhlciBhIG5vZGUgaXMgY29uc2lkZXJlZCB0byBoYXZlIGEgaGlnaCBkZWdyZWUuIiksZGUoMTYpKSxnYyksamEpLHVuKHFuKSkpKSxhYShlLG5jdCxKcSwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJjdCksUTZ0KSwiSGlnaCBEZWdyZWUgTm9kZSBNYXhpbXVtIFRyZWUgSGVpZ2h0IiksIk1heGltdW0gaGVpZ2h0IG9mIGEgc3VidHJlZSBjb25uZWN0ZWQgdG8gYSBoaWdoIGRlZ3JlZSBub2RlIHRvIGJlIG1vdmVkIHRvIHNlcGFyYXRlIGxheWVycy4iKSxkZSg1KSksZ2MpLGphKSx1bihxbikpKSksYWEoZSxyY3QsSnEsITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZMCksWjZ0KSwiR3JhcGggV3JhcHBpbmcgU3RyYXRlZ3kiKSwiRm9yIGNlcnRhaW4gZ3JhcGhzIGFuZCBjZXJ0YWluIHByZXNjcmliZWQgZHJhd2luZyBhcmVhcyBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIHNwbGl0IHRoZSBsYWlkIG91dCBncmFwaCBpbnRvIGNodW5rcyB0aGF0IGFyZSBwbGFjZWQgc2lkZSBieSBzaWRlLiBUaGUgZWRnZXMgdGhhdCBjb25uZWN0IGRpZmZlcmVudCBjaHVua3MgYXJlICd3cmFwcGVkJyBhcm91bmQgZnJvbSB0aGUgZW5kIG9mIG9uZSBjaHVuayB0byB0aGUgc3RhcnQgb2YgdGhlIG90aGVyIGNodW5rLiBUaGUgcG9pbnRzIGJldHdlZW4gdGhlIGNodW5rcyBhcmUgcmVmZXJyZWQgdG8gYXMgJ2N1dHMnLiIpLEQ5dCksY3MpLFdDdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0SCksWjZ0KSwiQWRkaXRpb25hbCBXcmFwcGVkIEVkZ2VzIFNwYWNpbmciKSwiVG8gdmlzdWFsbHkgc2VwYXJhdGUgZWRnZXMgdGhhdCBhcmUgd3JhcHBlZCBmcm9tIHJlZ3VsYXJseSByb3V0ZWQgZWRnZXMgYW4gYWRkaXRpb25hbCBzcGFjaW5nIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybSBvZiB0aGlzIGxheW91dCBvcHRpb24uIFRoZSBzcGFjaW5nIGlzIGFkZGVkIHRvIHRoZSByZWd1bGFyIGVkZ2VOb2RlIHNwYWNpbmcuIiksMTApLERvKSxjYSksdW4ocW4pKSkpLGFhKGUsdEgsWTAsbndlKSxhYShlLHRILFkwLHJ3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGVIKSxaNnQpLCJDb3JyZWN0aW9uIEZhY3RvciBmb3IgV3JhcHBpbmciKSwiQXQgdGltZXMgYW5kIGZvciBjZXJ0YWluIHR5cGVzIG9mIGdyYXBocyB0aGUgZXhlY3V0ZWQgd3JhcHBpbmcgbWF5IHByb2R1Y2UgcmVzdWx0cyB0aGF0IGFyZSBjb25zaXN0ZW50bHkgYmlhc2VkIGluIHRoZSBzYW1lIGZhc2hpb246IGVpdGhlciB3cmFwcGluZyB0byBvZnRlbiBvciB0byByYXJlbHkuIFRoaXMgZmFjdG9yIGNhbiBiZSB1c2VkIHRvIGNvcnJlY3QgdGhlIGJpYXMuIEludGVybmFsbHksIGl0IGlzIHNpbXBseSBtdWx0aXBsaWVkIHdpdGggdGhlICdhc3BlY3QgcmF0aW8nIGxheW91dCBvcHRpb24uIiksMSksRG8pLGNhKSx1bihxbikpKSksYWEoZSxlSCxZMCxzd2UpLGFhKGUsZUgsWTAsYXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsel8pLEUxZSksIkN1dHRpbmcgU3RyYXRlZ3kiKSwiVGhlIHN0cmF0ZWd5IGJ5IHdoaWNoIHRoZSBsYXllciBpbmRleGVzIGFyZSBkZXRlcm1pbmVkIGF0IHdoaWNoIHRoZSBsYXllcmluZyBjcnVtYmxlcyBpbnRvIGNodW5rcy4iKSxJOXQpLGNzKSxfVHQpLHVuKHFuKSkpKSxhYShlLHpfLFkwLGZ3ZSksYWEoZSx6XyxZMCxkd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxpY3QpLEUxZSksIk1hbnVhbGx5IFNwZWNpZmllZCBDdXRzIiksIkFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGhlciBvd24gY3V0cyBmb3IgYSBjZXJ0YWluIGdyYXBoLiIpLHExKSxwaCksdW4ocW4pKSkpLGFhKGUsaWN0LHpfLGN3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHNjdCksIndyYXBwaW5nLmN1dHRpbmcubXNkIiksIk1TRCBGcmVlZG9tIiksIlRoZSBNU0QgY3V0dGluZyBzdHJhdGVneSBzdGFydHMgd2l0aCBhbiBpbml0aWFsIGd1ZXNzIG9uIHRoZSBudW1iZXIgb2YgY2h1bmtzIHRoZSBncmFwaCBzaG91bGQgYmUgc3BsaXQgaW50by4gVGhlIGZyZWVkb20gc3BlY2lmaWVzIGhvdyBtdWNoIHRoZSBzdHJhdGVneSBtYXkgZGV2aWF0ZSBmcm9tIHRoaXMgZ3Vlc3MuIEUuZy4gaWYgYW4gaW5pdGlhbCBudW1iZXIgb2YgMyBpcyBjb21wdXRlZCwgYSBmcmVlZG9tIG9mIDEgYWxsb3dzIDIsIDMsIGFuZCA0IGN1dHMuIiksTTl0KSxnYyksamEpLHVuKHFuKSkpKSxhYShlLHNjdCx6Xyxsd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxuSCksVDFlKSwiVmFsaWRpZmljYXRpb24gU3RyYXRlZ3kiKSwiV2hlbiB3cmFwcGluZyBncmFwaHMsIG9uZSBjYW4gc3BlY2lmeSBpbmRpY2VzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGFzIHNwbGl0IHBvaW50cy4gVGhlIHZhbGlkaWZpY2F0aW9uIHN0cmF0ZWd5IG1ha2VzIHN1cmUgZXZlcnkgY29tcHV0ZWQgc3BsaXQgcG9pbnQgaXMgYWxsb3dlZC4iKSxPOXQpLGNzKSxVQ3QpLHVuKHFuKSkpKSxhYShlLG5ILFkwLEN3ZSksYWEoZSxuSCxZMCxfd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxySCksVDFlKSwiVmFsaWQgSW5kaWNlcyBmb3IgV3JhcHBpbmciKSxudWxsKSxxMSkscGgpLHVuKHFuKSkpKSxhYShlLHJILFkwLGt3ZSksYWEoZSxySCxZMCxFd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxpSCksSjZ0KSwiSW1wcm92ZSBDdXRzIiksIkZvciBnZW5lcmFsIGdyYXBocyBpdCBpcyBpbXBvcnRhbnQgdGhhdCBub3QgdG9vIG1hbnkgZWRnZXMgd3JhcCBiYWNrd2FyZHMuIFRodXMgYSBjb21wcm9taXNlIGJldHdlZW4gZXZlbmx5LWRpc3RyaWJ1dGVkIGN1dHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgY3V0IGVkZ2VzIGlzIHNvdWdodC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYWEoZSxpSCxZMCx2d2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzSCksSjZ0KSwiRGlzdGFuY2UgUGVuYWx0eSBXaGVuIEltcHJvdmluZyBDdXRzIiksbnVsbCksMiksRG8pLGNhKSx1bihxbikpKSksYWEoZSxzSCxZMCxwd2UpLGFhKGUsc0gsaUgsITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxhY3QpLEo2dCksIkltcHJvdmUgV3JhcHBlZCBFZGdlcyIpLCJUaGUgaW5pdGlhbCB3cmFwcGluZyBpcyBwZXJmb3JtZWQgaW4gYSB2ZXJ5IHNpbXBsZSB3YXkuIEFzIGEgY29uc2VxdWVuY2UsIGVkZ2VzIHRoYXQgd3JhcCBmcm9tIG9uZSBjaHVuayB0byBhbm90aGVyIG1heSBiZSB1bm5lY2Vzc2FyaWx5IGxvbmcuIEFjdGl2YXRpbmcgdGhpcyBvcHRpb24gdHJpZXMgdG8gc2hvcnRlbiBzdWNoIGVkZ2VzLiIpLCEwKSxBYSksQnMpLHVuKHFuKSkpKSxhYShlLGFjdCxZMCxtd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWNnQpLGhjdCksIkVkZ2UgTGFiZWwgU2lkZSBTZWxlY3Rpb24iKSwiTWV0aG9kIHRvIGRlY2lkZSBvbiBlZGdlIGxhYmVsIHNpZGVzLiIpLHY5dCksY3MpLElUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxVNnQpLGhjdCksIkVkZ2UgQ2VudGVyIExhYmVsIFBsYWNlbWVudCBTdHJhdGVneSIpLCJEZXRlcm1pbmVzIGluIHdoaWNoIGxheWVyIGNlbnRlciBsYWJlbHMgb2YgbG9uZyBlZGdlcyBzaG91bGQgYmUgcGxhY2VkLiIpLGI5dCksY3MpLGM3KSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFIKSxXRCksIkNvbnNpZGVyIE1vZGVsIE9yZGVyIiksIlByZXNlcnZlcyB0aGUgb3JkZXIgb2Ygbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBtb2RlbCBmaWxlIGlmIHRoaXMgZG9lcyBub3QgbGVhZCB0byBhZGRpdGlvbmFsIGVkZ2UgY3Jvc3NpbmdzLiBEZXBlbmRpbmcgb24gdGhlIHN0cmF0ZWd5IHRoaXMgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSBzaW5jZSB0aGUgbm9kZSBhbmQgZWRnZSBvcmRlciBtaWdodCBiZSBjb25mbGljdGluZy4iKSxsOXQpLGNzKSxGQ3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVzZ0KSxXRCksIk5vIE1vZGVsIE9yZGVyIiksIlNldCBvbiBhIG5vZGUgdG8gbm90IHNldCBhIG1vZGVsIG9yZGVyIGZvciB0aGlzIG5vZGUgZXZlbiB0aG91Z2ggaXQgaXMgYSByZWFsIG5vZGUuIiksITEpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvY3QpLFdEKSwiQ29uc2lkZXIgTW9kZWwgT3JkZXIgZm9yIENvbXBvbmVudHMiKSwiSWYgc2V0IHRvIE5PTkUgdGhlIHVzdWFsIG9yZGVyaW5nIHN0cmF0ZWd5IChieSBjdW11bGF0aXZlIG5vZGUgcHJpb3JpdHkgYW5kIHNpemUgb2Ygbm9kZXMpIGlzIHVzZWQuIElOU0lERV9QT1JUX1NJREVTIG9yZGVycyB0aGUgY29tcG9uZW50cyB3aXRoIGV4dGVybmFsIHBvcnRzIG9ubHkgaW5zaWRlIHRoZSBncm91cHMgd2l0aCB0aGUgc2FtZSBwb3J0IHNpZGUuIEZPUkNFX01PREVMX09SREVSIGVuZm9yY2VzIHRoZSBtb2RlIG9yZGVyIG9uIGNvbXBvbmVudHMuIFRoaXMgb3B0aW9uIG1pZ2h0IHByb2R1Y2UgYmFkIGFsaWdubWVudHMgYW5kIHN1YiBvcHRpbWFsIGRyYXdpbmdzIGluIHRlcm1zIG9mIHVzZWQgYXJlYSBzaW5jZSB0aGUgb3JkZXJpbmcgc2hvdWxkIGJlIHJlc3BlY3RlZC4iKSxjOXQpLGNzKSxBN3QpLHVuKHFuKSkpKSxhYShlLG9jdCxQXyxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSzZ0KSxXRCksIkxvbmcgRWRnZSBPcmRlcmluZyBTdHJhdGVneSIpLCJJbmRpY2F0ZXMgd2hldGhlciBsb25nIGVkZ2VzIGFyZSBzb3J0ZWQgdW5kZXIsIG92ZXIsIG9yIGVxdWFsIHRvIG5vZGVzIHRoYXQgaGF2ZSBubyBjb25uZWN0aW9uIHRvIGEgcHJldmlvdXMgbGF5ZXIgaW4gYSBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQgbGF5b3V0LiBVbmRlciBhbmQgb3ZlciBjaGFuZ2VzIHRvIHJpZ2h0IGFuZCBsZWZ0IGluIGEgdmVydGljYWwgbGF5b3V0LiIpLHU5dCksY3MpLFNDdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjY3QpLFdEKSwiQ3Jvc3NpbmcgQ291bnRlciBOb2RlIE9yZGVyIEluZmx1ZW5jZSIpLCJJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIG5vZGUgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIG5vZGUgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuIiksMCksRG8pLGNhKSx1bihxbikpKSksYWEoZSxjY3QsYUgsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHVjdCksV0QpLCJDcm9zc2luZyBDb3VudGVyIFBvcnQgT3JkZXIgSW5mbHVlbmNlIiksIkluZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgcG9ydCBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgcG9ydCBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4iKSwwKSxEbyksY2EpLHVuKHFuKSkpKSxhYShlLHVjdCxhSCxudWxsKSx6aGUoKG5ldyBEQixlKSl9O3ZhciBfMmUsUzJlLEEyZSxhOXQsTDJlLG85dCxNMmUsYzl0LEkyZSxEMmUsTzJlLHU5dCxOMmUsUDJlLGw5dCxGMmUsQjJlLFIyZSxoOXQsajJlLCQyZSx6MmUsZjl0LHEyZSxIMmUsRzJlLFYyZSxVMmUsVzJlLEsyZSxZMmUsZDl0LFgyZSxnOXQsUTJlLHA5dCxaMmUsYjl0LEoyZSx2OXQsdHZlLGV2ZSxudmUsdzl0LHJ2ZSxtOXQsaXZlLHk5dCxzdmUsYXZlLG92ZSxjdmUsdXZlLGx2ZSxodmUsZnZlLGR2ZSxndmUseDl0LHB2ZSxidmUsdnZlLHd2ZSxtdmUseXZlLGs5dCx4dmUsa3ZlLEV2ZSxUdmUsQ3ZlLF92ZSxTdmUsRTl0LEF2ZSxUOXQsTHZlLE12ZSxJdmUsQzl0LER2ZSxPdmUsXzl0LE52ZSxQdmUsRnZlLEJ2ZSxSdmUsanZlLCR2ZSx6dmUsUzl0LHF2ZSxIdmUsR3ZlLEE5dCxWdmUsTDl0LFV2ZSxXdmUsS3ZlLFl2ZSxYdmUsUXZlLFp2ZSxKdmUsdHdlLGV3ZSxud2UscndlLGl3ZSxzd2UsYXdlLG93ZSxjd2UsdXdlLE05dCxsd2UsaHdlLEk5dCxmd2UsZHdlLGd3ZSxwd2UsYndlLHZ3ZSx3d2UsbXdlLHl3ZSxEOXQseHdlLGt3ZSxFd2UsVHdlLE85dCxDd2UsX3dlO1Aoa2MsIkxheWVyZWRNZXRhRGF0YVByb3ZpZGVyIiw4NDgpLEkoOTg2LDEsSWgsREIpLGwuUWU9ZnVuY3Rpb24oZSl7emhlKGUpfTt2YXIgTGQsemx0LFVHLGtTLFdHLE45dCxLRyxQNixZRyxQOXQsRjl0LHFsdCxkYixIbHQsQnksQjl0LF9PLEdsdCxSOXQsU3dlLFhHLFZsdCxFUyxSeSxBd2UsVmwsajl0LCQ5dCxRRyxVbHQsTWQsWkcsWDAsejl0LHE5dCxIOXQsV2x0LEtsdCxHOXQsVWcsWWx0LFY5dCxqeSxVOXQsVzl0LEs5dCxKRywkeSxQMixZOXQsWDl0LF9vLFE5dCxMd2UsY3UsdFYsWjl0LEo5dCx0Q3QsWGx0LGVDdCxlVixuQ3QsckN0LG5WLE93LGlDdCxRbHQsVFMsc0N0LE53LENTLHJWLEYyLFpsdCxwNyxpVixCMixhQ3Qsb0N0LGNDdCxiNyx1Q3QsTXdlLEl3ZSxEd2UsT3dlLFB3LHp5LG9zLFdnLE53ZSxxeSxsQ3QsdjcsaEN0LEh5LFB3ZSx3NyxmQ3QsRjYsRndlLEJ3ZSxTTyxKbHQsZEN0LEFPLHhmLFE0LEI2LEZ3LFIyLHNWLEd5LHRodCxtNyx5NyxCdyxaNCxlaHQsTE8sX1MsU1Msbmh0LGdDdCxwQ3QsYkN0LHZDdCxyaHQsd0N0LG1DdCx5Q3QseEN0LGlodCxhVjtQKGtjLCJMYXllcmVkT3B0aW9ucyIsOTg2KSxJKDk4NywxLHt9LGVRKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFF6dCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChrYywiTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnkiLDk4NyksSSgxMzcyLDEse30pLGwuYT0wO3ZhciBSd2U7UChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIiLDEzNzIpLEkoNzc5LDEzNzIse30sbDN0KTt2YXIgb1YsandlO1Aoa2MsIkxheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyIiw3NzkpLEkoMzEzLDIyLHszOjEsMzU6MSwyMjoxLDMxMzoxLDI0NjoxLDIzNDoxfSxKOSksbC5LZj1mdW5jdGlvbigpe3JldHVybiB5Y2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4geWNlKHRoaXMpfTt2YXIgc2h0LGtDdCxFQ3QsY1YsYWh0LFRDdCxDQ3Q9anIoa2MsIkxheWVyaW5nU3RyYXRlZ3kiLDMxMyxIcixKc24sVVplKSwkd2U7SSgzNzgsMjIsezM6MSwzNToxLDIyOjEsMzc4OjF9LEFldCk7dmFyIG9odCxfQ3QsdVYsU0N0PWpyKGtjLCJMb25nRWRnZU9yZGVyaW5nU3RyYXRlZ3kiLDM3OCxIcixJcm4sV1plKSx6d2U7SSgxOTcsMjIsezM6MSwzNToxLDIyOjEsMTk3OjF9LFZSKTt2YXIgSjQsdDUsbFYsY2h0LHVodD1qcihrYywiTm9kZUZsZXhpYmlsaXR5IiwxOTcsSHIsUmluLEtaZSkscXdlO0koMzE1LDIyLHszOjEsMzU6MSwyMjoxLDMxNToxLDI0NjoxLDIzNDoxfSxUTSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBpY2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gaWNlKHRoaXMpfTt2YXIgQVMsbGh0LGhodCxMUyxBQ3QsTEN0PWpyKGtjLCJOb2RlUGxhY2VtZW50U3RyYXRlZ3kiLDMxNSxIcix4c24sdEplKSxId2U7SSgyNjAsMjIsezM6MSwzNToxLDIyOjEsMjYwOjF9LEN4KTt2YXIgTUN0LE1PLElDdCxEQ3QsSU8sT0N0LGhWLGZWLE5DdD1qcihrYywiTm9kZVByb21vdGlvblN0cmF0ZWd5IiwyNjAsSHIsWmFuLFhaZSksR3dlO0koMzM5LDIyLHszOjEsMzU6MSwyMjoxLDMzOToxfSxMZXQpO3ZhciBQQ3QsZ2IsZmh0LEZDdD1qcihrYywiT3JkZXJpbmdTdHJhdGVneSIsMzM5LEhyLGpybixRWmUpLFZ3ZTtJKDQyMSwyMix7MzoxLDM1OjEsMjI6MSw0MjE6MX0sTmJ0KTt2YXIgZGh0LGdodCxCQ3Q9anIoa2MsIlBvcnRTb3J0aW5nU3RyYXRlZ3kiLDQyMSxIcixxbm4sWlplKSxVd2U7SSg0NTIsMjIsezM6MSwzNToxLDIyOjEsNDUyOjF9LE1ldCk7dmFyIEp1LGV1LE1TLFd3ZT1qcihrYywiUG9ydFR5cGUiLDQ1MixIcixScm4sWVplKSxLd2U7SSgzNzUsMjIsezM6MSwzNToxLDIyOjEsMzc1OjF9LElldCk7dmFyIFJDdCxwaHQsakN0LCRDdD1qcihrYywiU2VsZkxvb3BEaXN0cmlidXRpb25TdHJhdGVneSIsMzc1LEhyLCRybixKWmUpLFl3ZTtJKDM3NiwyMix7MzoxLDM1OjEsMjI6MSwzNzY6MX0sUGJ0KTt2YXIgRE8sYmh0LHpDdD1qcihrYywiU2VsZkxvb3BPcmRlcmluZ1N0cmF0ZWd5IiwzNzYsSHIsQm5uLGVKZSksWHdlO0koMzA0LDEsezMwNDoxfSxIbGUpLFAoa2MsIlNwYWNpbmdzIiwzMDQpLEkoMzM2LDIyLHszOjEsMzU6MSwyMjoxLDMzNjoxfSxEZXQpO3ZhciB2aHQscUN0LElTLEhDdD1qcihrYywiU3BsaW5lUm91dGluZ01vZGUiLDMzNixIcixxcm4sbkplKSxRd2U7SSgzMzgsMjIsezM6MSwzNToxLDIyOjEsMzM4OjF9LE9ldCk7dmFyIHdodCxHQ3QsVkN0LFVDdD1qcihrYywiVmFsaWRpZnlTdHJhdGVneSIsMzM4LEhyLEhybixySmUpLFp3ZTtJKDM3NywyMix7MzoxLDM1OjEsMjI6MSwzNzc6MX0sTmV0KTt2YXIgVnksbWh0LHg3LFdDdD1qcihrYywiV3JhcHBpbmdTdHJhdGVneSIsMzc3LEhyLHpybixpSmUpLEp3ZTtJKDEzODMsMSx6YyxZSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSx0bWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtPeW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgdG1lO1AobEgsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzODMpLEkoNzgyLDEsemMsS3Z0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGVtZX0sbC5wZj1mdW5jdGlvbihlLG4pe0k1bih0aGlzLHUoZSwzNyksbil9LGwuWmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoRmUoZSx6eih0aGlzLmQsZS5jLmxlbmd0aCkpLDEwKX07dmFyIGVtZTtQKGxILCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc4MiksSSgxMzg2LDc4Mix6YyxNVnQpLGwuWmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG89bnVsbCxuPXZpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLFZzKHIsKHNlKCksVGMpKSYmdShRKHIsVGMpLDE5KS5hPG4mJihuPXUoUShyLFRjKSwxOSkuYSxvPXIpO3JldHVybiBvfHx1KEZlKGUsenoodGhpcy5kLGUuYy5sZW5ndGgpKSwxMCl9LFAobEgsIkdyZWVkeU1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDEzODYpLEkoMTM4NCwxLHpjLHpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLG5tZX0sbC5wZj1mdW5jdGlvbihlLG4pe2Uzbih0aGlzLHUoZSwzNyksbil9O3ZhciBubWU7UChsSCwiSW50ZXJhY3RpdmVDeWNsZUJyZWFrZXIiLDEzODQpLEkoMTM4NSwxLHpjLHFKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHJtZX0sbC5wZj1mdW5jdGlvbihlLG4pe24zbih0aGlzLHUoZSwzNyksbil9LGwuYT0wLGwuYj0wO3ZhciBybWU7UChsSCwiTW9kZWxPcmRlckN5Y2xlQnJlYWtlciIsMTM4NSksSSgxMzg5LDEsemMsa0d0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGltZX0sbC5wZj1mdW5jdGlvbihlLG4pe1A1bih0aGlzLHUoZSwzNyksbil9O3ZhciBpbWU7UChFeSwiQ29mZm1hbkdyYWhhbUxheWVyZXIiLDEzODkpLEkoMTM5MCwxLE9pLGlSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHVwbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEV5LCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxMzkwKSxJKDEzOTEsMSxPaSxqdHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWXRuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRXksIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDEzOTEpLEkoMTM5MiwxLHpjLERMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCkscmx0KSksbGIscjcpLG91LG43KX0sbC5wZj1mdW5jdGlvbihlLG4pe1I0bih0aGlzLHUoZSwzNyksbil9LFAoRXksIkludGVyYWN0aXZlTGF5ZXJlciIsMTM5MiksSSg1NjksMSx7NTY5OjF9LHNxdCksbC5hPTAsbC5jPTAsUChFeSwiSW50ZXJhY3RpdmVMYXllcmVyL0xheWVyU3BhbiIsNTY5KSxJKDEzODgsMSx6YyxJQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxzbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtndm4odGhpcyx1KGUsMzcpLG4pfTt2YXIgc21lO1AoRXksIkxvbmdlc3RQYXRoTGF5ZXJlciIsMTM4OCksSSgxMzk1LDEsemMsVkopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksYmkoYmkoYmkobmV3IEhzLChXYSgpLEFkKSwocm8oKSxoUykpLGxiLHI3KSxvdSxuNyl9LGwucGY9ZnVuY3Rpb24oZSxuKXtvNW4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxsLmI9MCxsLmQ9MDt2YXIgS0N0LFlDdDtQKEV5LCJNaW5XaWR0aExheWVyZXIiLDEzOTUpLEkoMTM5NiwxLE9pLEVwKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5jbih0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChFeSwiTWluV2lkdGhMYXllcmVyL01pbk91dGdvaW5nRWRnZXNDb21wYXJhdG9yIiwxMzk2KSxJKDEzODcsMSx6YyxHSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxhbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtDM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgYW1lO1AoRXksIk5ldHdvcmtTaW1wbGV4TGF5ZXJlciIsMTM4NyksSSgxMzkzLDEsemMsSFd0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBIcywoV2EoKSxBZCksKHJvKCksaFMpKSxsYixyNyksb3UsbjcpfSxsLnBmPWZ1bmN0aW9uKGUsbil7ZjRuKHRoaXMsdShlLDM3KSxuKX0sbC5kPTAsbC5mPTAsbC5nPTAsbC5pPTAsbC5zPTAsbC50PTAsbC51PTAsUChFeSwiU3RyZXRjaFdpZHRoTGF5ZXJlciIsMTM5MyksSSgxMzk0LDEsT2ksblEpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT3NuKHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChFeSwiU3RyZXRjaFdpZHRoTGF5ZXJlci8xIiwxMzk0KSxJKDQwMiwxLFBrdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLl9mPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4ganVlKHRoaXMsZSxuLHIpfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5nPVB0KHIzLF8xZSwyNSx0aGlzLmQsMTUsMSksdGhpcy5mPVB0KHIzLF8xZSwyNSx0aGlzLmQsMTUsMSl9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt0aGlzLmVbZV09UHQoVHIsWHIsMjUsbltlXS5sZW5ndGgsMTUsMSl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9cltlXVtuXSxzLnA9bix0aGlzLmVbZV1bbl09bn0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt1KEZlKHNbZV1bbl0uaixyKSwxMSkucD10aGlzLmQrK30sbC5iPTAsbC5jPTAsbC5kPTAsUCgkdSwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yIiw0MDIpLEkoMTYzMywxLE9pLGFNKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF9obih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3IvbGFtYmRhJDAkVHlwZSIsMTYzMyksSSg4MTcsMSxIRCxYd3QpLGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5QZj1mdW5jdGlvbihlLG4scil7fSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe30sbC5MZj1mdW5jdGlvbigpe3JldHVybiExfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5jPXRoaXMuZS5hLHRoaXMuZz10aGlzLmYuZ30sbC5PZj1mdW5jdGlvbihlLG4pe25bZV1bMF0uYy5wPWV9LGwuUmY9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5hZz1mdW5jdGlvbihlLG4scixzKXtyP1VzZSh0aGlzLGUpOihYc2UodGhpcyxlLHMpLHJoZSh0aGlzLGUsbikpLGUuYy5sZW5ndGg+MSYmKGplKFJlKFEoRmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksKFRlKCksQnkpKSkpP2djZShlLHRoaXMuZCx1KHRoaXMsNjYwKSk6KHZuKCksWHMoZSx0aGlzLmQpKSxObmUodGhpcy5lLGUpKX0sbC5TZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdyxrLEMsTTtmb3IobiE9c1l0KHIsZS5sZW5ndGgpJiYoaD1lW24tKHI/MTotMSldLG1tdCh0aGlzLmYsaCxyPyhzbygpLGV1KTooc28oKSxKdSkpKSxvPWVbbl1bMF0sTT0hc3x8by5rPT0oR24oKSx4cyksQz1fMShlW25dKSx0aGlzLmFnKEMsTSwhMSxyKSxkPTAsaz1uZXcgUyhDKTtrLmE8ay5jLmMubGVuZ3RoOyl3PXUoSihrKSwxMCksZVtuXVtkKytdPXc7cmV0dXJuITF9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPXNZdChuLGUubGVuZ3RoKSxoPV8xKGVbZF0pLHRoaXMuYWcoaCwhMSwhMCxuKSxyPTAsbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksZVtkXVtyKytdPXM7cmV0dXJuITF9LFAoJHUsIkJhcnljZW50ZXJIZXVyaXN0aWMiLDgxNyksSSg2NTgsMSx7NjU4OjF9LFdrKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkJhcnljZW50ZXJTdGF0ZSBbbm9kZT0iK3RoaXMuYysiLCBzdW1tZWRXZWlnaHQ9Iit0aGlzLmQrIiwgZGVncmVlPSIrdGhpcy5iKyIsIGJhcnljZW50ZXI9Iit0aGlzLmErIiwgdmlzaXRlZD0iK3RoaXMuZSsiXSJ9LGwuYj0wLGwuZD0wLGwuZT0hMTt2YXIgb21lPVAoJHUsIkJhcnljZW50ZXJIZXVyaXN0aWMvQmFyeWNlbnRlclN0YXRlIiw2NTgpO0koMTgwMiwxLE9pLHNSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZkbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJCYXJ5Y2VudGVySGV1cmlzdGljL2xhbWJkYSQwJFR5cGUiLDE4MDIpLEkoODE2LDEsSEQseDR0KSxsLk1mPWZ1bmN0aW9uKCl7fSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7dGhpcy5hW2VdPVB0KG9tZSx7MzoxLDQ6MSw1OjEsMjAxODoxfSw2NTgsbltlXS5sZW5ndGgsMCwxKSx0aGlzLmJbZV09UHQoY21lLHszOjEsNDoxLDU6MSwyMDE5OjF9LDIzMyxuW2VdLmxlbmd0aCwwLDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXtCaWUodGhpcyxyW2VdW25dLCEwKX0sbC5jPSExLFAoJHUsIkZvcnN0ZXJDb25zdHJhaW50UmVzb2x2ZXIiLDgxNiksSSgyMzMsMSx7MjMzOjF9LHRRdCxxbGUpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihuPW5ldyBfcCxuLmErPSJbIixlPTA7ZTx0aGlzLmQubGVuZ3RoO2UrKylWcihuLFhpZSh0aGlzLmRbZV0pKSx4MSh0aGlzLmcsdGhpcy5kWzBdKS5hIT1udWxsJiZWcihWcigobi5hKz0iPCIsbiksRlllKHgxKHRoaXMuZyx0aGlzLmRbMF0pLmEpKSwiPiIpLGU8dGhpcy5kLmxlbmd0aC0xJiYobi5hKz1LYSk7cmV0dXJuKG4uYSs9Il0iLG4pLmF9LGwuYT0wLGwuYz0wLGwuZj0wO3ZhciBjbWU9UCgkdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9Db25zdHJhaW50R3JvdXAiLDIzMyk7SSgxNzk3LDEsVW4sJHR0KSxsLnRkPWZ1bmN0aW9uKGUpe0JpZSh0aGlzLmEsdShlLDEwKSwhMSl9LFAoJHUsIkZvcnN0ZXJDb25zdHJhaW50UmVzb2x2ZXIvbGFtYmRhJDAkVHlwZSIsMTc5NyksSSgyMTQsMSx7MjE0OjEsMjI1OjF9LEtsZSksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7fSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5yPVB0KFRyLFhyLDI1LHRoaXMubiwxNSwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbztvPXJbZV1bbl0scz1vLmUscyYmdWUodGhpcy5iLHMpfSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpeysrdGhpcy5ufSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGloZSh0aGlzLmUsbmV3IHFzKX0sbC5nPSExLGwuaT0hMSxsLm49MCxsLnM9ITEsUCgkdSwiR3JhcGhJbmZvSG9sZGVyIiwyMTQpLEkoMTgzMiwxLEhELHRRKSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLl9mPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gciYmbj4wP2dydCh0aGlzLmEsZVtuLTFdLGVbbl0pOiFyJiZuPGUubGVuZ3RoLTE/Z3J0KHRoaXMuYSxlW25dLGVbbisxXSk6Y2l0KHRoaXMuYSxlW25dLHI/KGJlKCksQm4pOihiZSgpLEhuKSksemJuKHRoaXMsZSxuLHIpfSxsLk1mPWZ1bmN0aW9uKCl7dGhpcy5kPVB0KFRyLFhyLDI1LHRoaXMuYywxNSwxKSx0aGlzLmE9bmV3IEhNKHRoaXMuZCl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9cltlXVtuXSx0aGlzLmMrPXMuai5jLmxlbmd0aH0sbC5jPTAsUCgkdSwiR3JlZWR5UG9ydERpc3RyaWJ1dG9yIiwxODMyKSxJKDE0MDEsMSx6YyxPQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gd3VuKHUoZSwzNykpfSxsLnBmPWZ1bmN0aW9uKGUsbil7ejNuKHUoZSwzNyksbil9O3ZhciB1bWU7UCgkdSwiSW50ZXJhY3RpdmVDcm9zc2luZ01pbmltaXplciIsMTQwMSksSSgxNDAyLDEsT2ksbCR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFkxbih0aGlzLHUoZSwxMCksdShuLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUCgkdSwiSW50ZXJhY3RpdmVDcm9zc2luZ01pbmltaXplci8xIiwxNDAyKSxJKDUwNywxLHs1MDc6MSwxMjM6MSw1MToxfSxlZXQpLGwuWWY9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHUoZSwzNyksbj1paihsbWUpLGJpKG4sKFdhKCksb3UpLChybygpLHhHKSksbn0sbC5wZj1mdW5jdGlvbihlLG4pe3Rtbih0aGlzLHUoZSwzNyksbil9LGwuZT0wO3ZhciBsbWU7UCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyIiw1MDcpLEkoMTM5OCwxLFVuLGgkdCksbC50ZD1mdW5jdGlvbihlKXskbW4odGhpcy5hLHUoZSwyMTQpKX0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzBtZXRob2RyZWYkY29tcGFyZURpZmZlcmVudFJhbmRvbWl6ZWRMYXlvdXRzJFR5cGUiLDEzOTgpLEkoMTM5OSwxLFVuLGYkdCksbC50ZD1mdW5jdGlvbihlKXtodW4odGhpcy5hLHUoZSwyMTQpKX0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzFtZXRob2RyZWYkbWluaW1pemVDcm9zc2luZ3NOb0NvdW50ZXIkVHlwZSIsMTM5OSksSSgxNDAwLDEsVW4sZCR0KSxsLnRkPWZ1bmN0aW9uKGUpe2lsZSh0aGlzLmEsdShlLDIxNCkpfSxQKCR1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMm1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc1dpdGhDb3VudGVyJFR5cGUiLDE0MDApLEkoNDU0LDIyLHszOjEsMzU6MSwyMjoxLDQ1NDoxfSxQZXQpO3ZhciBPTyxEUyxkVixobWU9anIoJHUsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci9Dcm9zc01pblR5cGUiLDQ1NCxIcixHcm4sc0plKSxmbWU7SSgxMzk3LDEsdWksRWspLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGx5dCgpLHUoZSwyOSkuYS5jLmxlbmd0aD09MH0sUCgkdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyL2xhbWJkYSQwJFR5cGUiLDEzOTcpLEkoMTc5OSwxLEhELHZRdCksbC5NZj1mdW5jdGlvbigpe30sbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe30sbC5PZj1mdW5jdGlvbihlLG4pe25bZV1bMF0uYy5wPWUsdGhpcy5iW2VdPVB0KGRtZSx7MzoxLDQ6MSw1OjEsMTk0NDoxfSw2NTksbltlXS5sZW5ndGgsMCwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHMucD1uLEppKHRoaXMuYltlXSxuLG5ldyByUSl9LFAoJHUsIkxheWVyU3dlZXBUeXBlRGVjaWRlciIsMTc5OSksSSg2NTksMSx7NjU5OjF9LHJRKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk5vZGVJbmZvIFtjb25uZWN0ZWRFZGdlcz0iK3RoaXMuYSsiLCBoaWVyYXJjaGljYWxJbmZsdWVuY2U9Iit0aGlzLmIrIiwgcmFuZG9tSW5mbHVlbmNlPSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTA7dmFyIGRtZT1QKCR1LCJMYXllclN3ZWVwVHlwZURlY2lkZXIvTm9kZUluZm8iLDY1OSk7SSgxODAwLDEsd2QsaVEpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBDKG5ldyBTMSh1KGUsMTEpLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBDKG5ldyBTMSh1KGUsMTEpLmIpKX0sUCgkdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQwJFR5cGUiLDE4MDApLEkoMTgwMSwxLHdkLHNRKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBwQyhuZXcgUzEodShlLDExKS5iKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBwQyhuZXcgUzEodShlLDExKS5iKSl9LFAoJHUsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9sYW1iZGEkMSRUeXBlIiwxODAxKSxJKDE4MzMsNDAyLFBrdCxpSHQpLGwuJGY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2goQz10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihzPTAsbz0wLGs9bmV3IFMoZS5qKTtrLmE8ay5jLmMubGVuZ3RoOylkPXUoSihrKSwxMSksZC5lLmMubGVuZ3RoIT0wJiYoKytzLGQuaj09KGJlKCksTm4pJiYrK28pO2ZvcihoPW4rbyxGPW4rcyx3PWl3KGUsKHNvKCksSnUpKS5LYygpO3cuT2IoKTspZD11KHcuUGIoKSwxMSksZC5qPT0oYmUoKSxObik/KENbZC5wXT1oLC0taCk6KENbZC5wXT1GLC0tRik7cmV0dXJuIHN9Y2FzZSAyOntmb3IoTT0wLHc9aXcoZSwoc28oKSxldSkpLktjKCk7dy5PYigpOylkPXUody5QYigpLDExKSwrK00sQ1tkLnBdPW4rTTtyZXR1cm4gTX1kZWZhdWx0OnRocm93IHJ0KG5ldyB1TSl9fSxQKCR1LCJMYXllclRvdGFsUG9ydERpc3RyaWJ1dG9yIiwxODMzKSxJKDY2MCw4MTcsezY2MDoxLDIyNToxfSxKZWUpLGwuYWc9ZnVuY3Rpb24oZSxuLHIscyl7cj9Vc2UodGhpcyxlKTooWHNlKHRoaXMsZSxzKSxyaGUodGhpcyxlLG4pKSxlLmMubGVuZ3RoPjEmJihqZShSZShRKEZhKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDEwKSkpLChUZSgpLEJ5KSkpKT9nY2UoZSx0aGlzLmQsdGhpcyk6KHZuKCksWHMoZSx0aGlzLmQpKSxqZShSZShRKEZhKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDEwKSkpLEJ5KSkpfHxObmUodGhpcy5lLGUpKX0sUCgkdSwiTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMiLDY2MCksSSgxODAzLDEsT2ksZyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFcwbih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKCR1LCJNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYy9sYW1iZGEkMCRUeXBlIiwxODAzKSxJKDE0MDMsMSx6YyxKSiksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPWlqKGdtZSksYmkobiwoV2EoKSxvdSksKHJvKCkseEcpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7RG5uKCh1KGUsMzcpLG4pKX07dmFyIGdtZTtQKCR1LCJOb0Nyb3NzaW5nTWluaW1pemVyIiwxNDAzKSxJKDc5Niw0MDIsUGt0LGlidCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtzd2l0Y2goRj10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihvPTAsaD0wLE09bmV3IFMoZS5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMSksay5lLmMubGVuZ3RoIT0wJiYoKytvLGsuaj09KGJlKCksTm4pJiYrK2gpO2ZvcihzPTEvKG8rMSksZD1uK2gqcyxWPW4rMS1zLEM9aXcoZSwoc28oKSxKdSkpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExKSxrLmo9PShiZSgpLE5uKT8oRltrLnBdPWQsZC09cyk6KEZbay5wXT1WLFYtPXMpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxNPW5ldyBTKGUuaik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksMTEpLGsuZy5jLmxlbmd0aD09MHx8Kyt3O2ZvcihzPTEvKHcrMSksSD1uK3MsQz1pdyhlLChzbygpLGV1KSkuS2MoKTtDLk9iKCk7KWs9dShDLlBiKCksMTEpLEZbay5wXT1ILEgrPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oIlBvcnQgdHlwZSBpcyB1bmRlZmluZWQiKSl9cmV0dXJuIDF9LFAoJHUsIk5vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvciIsNzk2KSxJKDgwNywxLHt9LElZdCxDYWUpLFAoJHUsIlN3ZWVwQ29weSIsODA3KSxJKDE3OTgsMSxIRCxiaWUpLGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt2YXIgZTtlPVB0KFRyLFhyLDI1LHRoaXMuZiwxNSwxKSx0aGlzLmQ9bmV3IGskdChlKSx0aGlzLmE9bmV3IEhNKGUpfSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt2YXIgZDtkPXUoRmUoaFtlXVtuXS5qLHIpLDExKSxvLmM9PWQmJm8uYy5pLmM9PW8uZC5pLmMmJisrdGhpcy5lW2VdfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0sdGhpcy5jW2VdPXRoaXMuY1tlXXxzLms9PShHbigpLEhjKX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoRmUoc1tlXVtuXS5qLHIpLDExKSxvLnA9dGhpcy5mKyssby5nLmMubGVuZ3RoK28uZS5jLmxlbmd0aD4xJiYoby5qPT0oYmUoKSxIbik/dGhpcy5iW2VdPSEwOm8uaj09Qm4mJmU+MCYmKHRoaXMuYltlLTFdPSEwKSl9LGwuZj0wLFAoczAsIkFsbENyb3NzaW5nc0NvdW50ZXIiLDE3OTgpLEkoNTg3LDEse30scnopLGwuYj0wLGwuZD0wLFAoczAsIkJpbmFyeUluZGV4ZWRUcmVlIiw1ODcpLEkoNTI0LDEse30sSE0pO3ZhciBYQ3QsZ1Y7UChzMCwiQ3Jvc3NpbmdzQ291bnRlciIsNTI0KSxJKDE5MDYsMSxPaSxwJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUHRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZSIsMTkwNiksSSgxOTA3LDEsT2ksYiR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZ0bih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUiLDE5MDcpLEkoMTkwOCwxLE9pLHYkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBCdG4odGhpcy5hLHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMiRUeXBlIiwxOTA4KSxJKDE5MDksMSxPaSx3JHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnRuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZSIsMTkwOSksSSgxOTEwLDEsVW4sbSR0KSxsLnRkPWZ1bmN0aW9uKGUpe21hbih0aGlzLmEsdShlLDExKSl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZSIsMTkxMCksSSgxOTExLDEsdWkseSR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPWWUodGhpcy5hLHUoZSwxMSkpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUiLDE5MTEpLEkoMTkxMiwxLFVuLHgkdCksbC50ZD1mdW5jdGlvbihlKXtfVnQodGhpcyxlKX0sUChzMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNiRUeXBlIiwxOTEyKSxJKDE5MTMsMSxVbixaR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dmFyIG47ZzgoKSxxcCh0aGlzLmIsKG49dGhpcy5hLHUoZSwxMSksbikpfSxQKHMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ3JFR5cGUiLDE5MTMpLEkoODI2LDEsd2QsQkYpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGc4KCksVnModShlLDExKSwoc2UoKSxadSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZzgoKSxWcyh1KGUsMTEpLChzZSgpLFp1KSl9LFAoczAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDgkVHlwZSIsODI2KSxJKDE5MDUsMSx7fSxrJHQpLFAoczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIiLDE5MDUpLEkoNDY3LDEsezM1OjEsNDY3OjF9LHFXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gYmhuKHRoaXMsdShlLDQ2NykpfSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MDt2YXIgZnhuPVAoczAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlIiw0NjcpO0koMzYyLDEsezM1OjEsMzYyOjF9LGUkKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBnYm4odGhpcyx1KGUsMzYyKSl9LGwuYj0wLGwuYz0wO3ZhciBwbWU9UChzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIiLDM2Mik7SSg1MjMsMjIsezM6MSwzNToxLDIyOjEsNTIzOjF9LEZidCk7dmFyIE9TLE5TLGJtZT1qcihzMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIvVHlwZSIsNTIzLEhyLEhubixhSmUpLHZtZTtJKDE0MDUsMSx6YyxLSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKT93bWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe1Axbih0aGlzLHUoZSwzNyksbil9O3ZhciB3bWU7UCh1bywiSW50ZXJhY3RpdmVOb2RlUGxhY2VyIiwxNDA1KSxJKDE0MDYsMSx6YyxXSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKHNlKCksR2MpKSwyMSkuSGMoKG9vKCksYmgpKT9tbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe21mbih0aGlzLHUoZSwzNyksbil9O3ZhciBtbWUscFYsYlY7UCh1bywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDA2KSxJKDI1NywxLHszNToxLDI1NzoxfSxOcHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIFZLZSh0aGlzLHUoZSwyNTcpKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSwyNTcpPyhuPXUoZSwyNTcpLHRoaXMuYj09bi5iKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK1FwKHRoaXMuZSl9LGwuYT0wLGwuYj0wLGwuYz0tMSxsLmQ9LTEsbC5nPTA7dmFyIHltZT1QKHVvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjU3KTtJKDE0MDgsMSx6YyxwWXQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/eG1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtFNW4odGhpcyx1KGUsMzcpLG4pfSxsLmI9MCxsLmc9MDt2YXIgeG1lO1AodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDA4KSxJKDE0MjcsMSxPaSxhUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkdSh1KGUsMTkpLmEsdShuLDE5KS5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8wbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQyNyksSSgxNDI5LDEsT2ksb1EpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZHUodShlLDE5KS5hLHUobiwxOSkuYSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMW1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0MjkpLEkoNjQ5LDEsezY0OToxfSxKR3QpO3ZhciBkeG49UCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvRWRnZVJlcCIsNjQ5KTtJKDQwMSwxLHs0MDE6MX0sX3d0KSxsLmI9ITE7dmFyIGd4bj1QKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9Ob2RlUmVwIiw0MDEpO0koNTA4LDEyLHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjEsNTA4OjF9LGNxdCksUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aCIsNTA4KSxJKDE0MDksMSx7fSxjUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLmkua30sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDA5KSxJKDE0MTAsMSx1aSx1USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDI2Nyk9PShHbigpLFpzKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMSRUeXBlIiwxNDEwKSxJKDE0MTEsMSx7fSxsUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE3KS5kLml9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDIkVHlwZSIsMTQxMSksSSgxNDEyLDEsdWksRSR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfV3QoaGllKHUoZSwxMCkpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMyRUeXBlIiwxNDEyKSxJKDE0MTMsMSx1aSxoUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVHRuKHUoZSwxMSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDEzKSxJKDE0MTQsMSxVbix0VnQpLGwudGQ9ZnVuY3Rpb24oZSl7eFhlKHRoaXMuYSx0aGlzLmIsdShlLDExKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MTQpLEkoMTQyMywxLFVuLFQkdCksbC50ZD1mdW5jdGlvbihlKXt6Z24odGhpcy5hLHUoZSwxNykpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQyMyksSSgxNDI0LDEse30sZlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTEkVHlwZSIsMTQyNCksSSgxNDI1LDEsVW4sQyR0KSxsLnRkPWZ1bmN0aW9uKGUpe0J2bih0aGlzLmEsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMiRUeXBlIiwxNDI1KSxJKDE0MjYsMSx7fSxkUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxkZSh1KGUsMTIxKS5lKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEzJFR5cGUiLDE0MjYpLEkoMTQyOCwxLHt9LGdRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLGRlKHUoZSwxMjEpLmUpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQyOCksSSgxNDMwLDEsdWkscFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksdShlLDQwMSkuYy5rPT0oR24oKSxEcyl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNyRUeXBlIiwxNDMwKSxJKDE0MzEsMSx1aSxiUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSx1KGUsNDAxKS5jLmouYy5sZW5ndGg+MX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE4JFR5cGUiLDE0MzEpLEkoMTQzMiwxLFVuLGtYdCksbC50ZD1mdW5jdGlvbihlKXtTbG4odGhpcy5jLHRoaXMuYix0aGlzLmQsdGhpcy5hLHUoZSw0MDEpKX0sbC5jPTAsbC5kPTAsUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE5JFR5cGUiLDE0MzIpLEkoMTQxNSwxLHt9LHZRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQxNSksSSgxNDMzLDEsVW4sXyR0KSxsLnRkPWZ1bmN0aW9uKGUpe21YZSh0aGlzLmEsdShlLDExKSl9LGwuYT0wLFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDMzKSxJKDE0MzQsMSx7fSxZNSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMSRUeXBlIiwxNDM0KSxJKDE0MzUsMSxVbixTJHQpLGwudGQ9ZnVuY3Rpb24oZSl7TlhlKHRoaXMuYSx1KGUsMTApKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIyJFR5cGUiLDE0MzUpLEkoMTQzNiwxLHVpLFJGKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfV3QoZSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMyRUeXBlIiwxNDM2KSxJKDE0MzcsMSx7fSx3USksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDM3KSxJKDE0MzgsMSx1aSxBJHQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuICRZZSh0aGlzLmEsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDM4KSxJKDE0MzksMSxVbixlVnQpLGwudGQ9ZnVuY3Rpb24oZSl7dWduKHRoaXMuYSx0aGlzLmIsdShlLDEwKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDM5KSxJKDE0NDAsMSx1aSxtUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSwhVmEodShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDQwKSxJKDE0NDEsMSx1aSx5USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSwhVmEodShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDQxKSxJKDE0NDIsMSx7fSxMJHQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSVhlKHRoaXMuYSx1KGUsMjkpLHUobiwyOSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ0MiksSSgxNDE2LDEse30sakYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE9sKCksbmV3IFRuKG51bGwsbmV3IEZ2KG5ldyBhcihscihNcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMyRUeXBlIiwxNDE2KSxJKDE0MTcsMSx1aSx4USksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSx3aW4odShlLDE3KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ0JFR5cGUiLDE0MTcpLEkoMTQxOCwxLFVuLE0kdCksbC50ZD1mdW5jdGlvbihlKXtGbW4odGhpcy5hLHUoZSwxNykpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNSRUeXBlIiwxNDE4KSxJKDE0MTksMSx7fSxHVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MTkpLEkoMTQyMCwxLHVpLGtRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLHUoZSwxMCkuaz09KEduKCksRHMpfSxQKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDIwKSxJKDE0MjEsMSx7fSxFUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gT2woKSxuZXcgVG4obnVsbCxuZXcgRnYobmV3IGFyKGxyKHowKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LFAodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ4JFR5cGUiLDE0MjEpLEkoMTQyMiwxLHVpLFRRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBPbCgpLHd0bih1KGUsMTcpKX0sUCh1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDkkVHlwZSIsMTQyMiksSSgxNDA0LDEsemMscDkpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/a21lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXt2eW4odShlLDM3KSxuKX07dmFyIGttZTtQKHVvLCJTaW1wbGVOb2RlUGxhY2VyIiwxNDA0KSxJKDE4MCwxLHsxODA6MX0seDQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0iIix0aGlzLmM9PShkZCgpLFJ3KT9lKz1nNjp0aGlzLmM9PUtnJiYoZSs9ZDYpLHRoaXMubz09KEUxKCksajIpP2UrPXlvdDp0aGlzLm89PXoxP2UrPSJVUCI6ZSs9IkJBTEFOQ0VEIixlfSxQKHNiLCJCS0FsaWduZWRMYXlvdXQiLDE4MCksSSg1MTYsMjIsezM6MSwzNToxLDIyOjEsNTE2OjF9LFJidCk7dmFyIEtnLFJ3LEVtZT1qcihzYiwiQktBbGlnbmVkTGF5b3V0L0hEaXJlY3Rpb24iLDUxNixIcixWbm4sb0plKSxUbWU7SSg1MTUsMjIsezM6MSwzNToxLDIyOjEsNTE1OjF9LEJidCk7dmFyIGoyLHoxLENtZT1qcihzYiwiQktBbGlnbmVkTGF5b3V0L1ZEaXJlY3Rpb24iLDUxNSxIcixVbm4sY0plKSxfbWU7SSgxNjM0LDEse30sblZ0KSxQKHNiLCJCS0FsaWduZXIiLDE2MzQpLEkoMTYzNywxLHt9LFBzZSksUChzYiwiQktDb21wYWN0b3IiLDE2MzcpLEkoNjU0LDEsezY1NDoxfSxDUSksbC5hPTAsUChzYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NTQpLEkoNDU4LDEsezQ1ODoxfSxhcXQpLGwuYT1udWxsLGwuYj0wLFAoc2IsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDU4KSxJKDE0MDcsMSx6YyxBVnQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChzZSgpLEdjKSksMjEpLkhjKChvbygpLGJoKSk/U21lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtSNW4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9ITE7dmFyIFNtZTtQKHNiLCJCS05vZGVQbGFjZXIiLDE0MDcpLEkoMTYzNSwxLHt9LF9RKSxsLmQ9MCxQKHNiLCJOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbiIsMTYzNSksSSgxNjM2LDEsT2ksSSR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFZhbih0aGlzLHUoZSw0NiksdShuLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sUChzYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24vTmVpZ2hib3JDb21wYXJhdG9yIiwxNjM2KSxJKDgwOCwxLHt9KSxQKHNiLCJUaHJlc2hvbGRTdHJhdGVneSIsODA4KSxJKDE3NjMsODA4LHt9LGhxdCksbC5iZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYS5vPT0oRTEoKSx6MSk/c3M6VHN9LGwuY2c9ZnVuY3Rpb24oKXt9LFAoc2IsIlRocmVzaG9sZFN0cmF0ZWd5L051bGxUaHJlc2hvbGRTdHJhdGVneSIsMTc2MyksSSg1NzksMSx7NTc5OjF9LHJWdCksbC5jPSExLGwuZD0hMSxQKHNiLCJUaHJlc2hvbGRTdHJhdGVneS9Qb3N0cHJvY2Vzc2FibGUiLDU3OSksSSgxNzY0LDgwOCx7fSxmcXQpLGwuYmc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gbz1uPT1yLHM9dGhpcy5hLmFbci5wXT09bixvfHxzPyhoPWUsdGhpcy5hLmM9PShkZCgpLFJ3KT8obyYmKGg9eWF0KHRoaXMsbiwhMCkpLCFpc05hTihoKSYmIWlzRmluaXRlKGgpJiZzJiYoaD15YXQodGhpcyxyLCExKSkpOihvJiYoaD15YXQodGhpcyxuLCEwKSksIWlzTmFOKGgpJiYhaXNGaW5pdGUoaCkmJnMmJihoPXlhdCh0aGlzLHIsITEpKSksaCk6ZX0sbC5jZz1mdW5jdGlvbigpe2Zvcih2YXIgZSxuLHIscyxvO3RoaXMuZC5iIT0wOylvPXUoY3JuKHRoaXMuZCksNTc5KSxzPW5sZSh0aGlzLG8pLHMuYSYmKGU9cy5hLHI9amUodGhpcy5hLmZbdGhpcy5hLmdbby5iLnBdLnBdKSwhKCFyJiYhVmEoZSkmJmUuYy5pLmM9PWUuZC5pLmMpJiYobj11Y2UodGhpcyxvKSxufHxLWWUodGhpcy5lLG8pKSk7Zm9yKDt0aGlzLmUuYS5jLmxlbmd0aCE9MDspdWNlKHRoaXMsdShtcmUodGhpcy5lKSw1NzkpKX0sUChzYiwiVGhyZXNob2xkU3RyYXRlZ3kvU2ltcGxlVGhyZXNob2xkU3RyYXRlZ3kiLDE3NjQpLEkoNjM1LDEsezYzNToxLDI0NjoxLDIzNDoxfSxTUSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBMbmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gTG5lKHRoaXMpfTt2YXIgeWh0O1AoYmN0LCJFZGdlUm91dGVyRmFjdG9yeSIsNjM1KSxJKDE0NTgsMSx6YyxpZCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gYnZuKHUoZSwzNykpfSxsLnBmPWZ1bmN0aW9uKGUsbil7VHluKHUoZSwzNyksbil9O3ZhciBBbWUsTG1lLE1tZSxJbWUsRG1lLFFDdCxPbWUsTm1lO1AoYmN0LCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ1OCksSSgxNDUxLDEsemMsTFZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiAkMW4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtHNG4odGhpcyx1KGUsMzcpLG4pfTt2YXIgUG1lLEZtZSxCbWUsUm1lLE5PLGptZTtQKGJjdCwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDUxKSxJKDE0NTIsMSx3ZCxBUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gZHl0KHUoZSwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZHl0KHUoZSwxMCkpfSxQKGJjdCwiUG9seWxpbmVFZGdlUm91dGVyLzEiLDE0NTIpLEkoMTgwOSwxLHVpLExRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5jPT0oVmYoKSxwYil9LFAoSmYsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTgwOSksSSgxODEwLDEse30sTVEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmR9LFAoSmYsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTgxMCksSSgxODExLDEsdWksSVEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmM9PShWZigpLHBiKX0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMiRUeXBlIiwxODExKSxJKDE4MTIsMSx7fSxYNSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMyRUeXBlIiwxODEyKSxJKDE4MTMsMSx7fSxEUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODEzKSxJKDE4MTQsMSx7fSxPUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sUChKZiwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNSRUeXBlIiwxODE0KSxJKDExMiwxLHszNToxLDExMjoxfSxMSSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVUtlKHRoaXMsdShlLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDExMik/KG49dShlLDExMiksdGhpcy5nPT1uLmcpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzO2ZvcihlPW5ldyBJbCgieyIpLHM9bmV3IFModGhpcy5uKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksbj1aSShyLmkpLG49PW51bGwmJihuPSJuIityS3Qoci5pKSksZS5hKz0iIituLHMuYTxzLmMuYy5sZW5ndGgmJihlLmErPSIsIik7cmV0dXJuIGUuYSs9In0iLGUuYX0sbC5hPTAsbC5iPTAsbC5jPU5hTixsLmQ9MCxsLmc9MCxsLmk9MCxsLm89MCxsLnM9TmFOLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnQiLDExMiksSSgxMjksMSx7MTI5OjF9LHQyKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiLT4iK3RoaXMuYisiICgiK3JRZSh0aGlzLmMpKyIpIn0sbC5kPTAsUChKZiwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kiLDEyOSksSSg1MjAsMjIsezM6MSwzNToxLDIyOjEsNTIwOjF9LGpidCk7dmFyIHBiLFV5LCRtZT1qcihKZiwiSHlwZXJFZGdlU2VnbWVudERlcGVuZGVuY3kvRGVwZW5kZW5jeVR5cGUiLDUyMCxIcixHbm4sdUplKSx6bWU7SSgxODE1LDEse30sRCR0KSxQKEpmLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIiLDE4MTUpLEkoMTgxNiwxLHt9LHVIdCksbC5hPTAsbC5iPTAsUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0FyZWFSYXRpbmciLDE4MTYpLEkoMzI5LDEsezMyOToxfSx5bnQpLGwuYT0wLGwuYj0wLGwuYz0wLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9GcmVlQXJlYSIsMzI5KSxJKDE4MTcsMSxPaSwkUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKUWUodShlLDExMiksdShuLDExMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMCRUeXBlIiwxODE3KSxJKDE4MTgsMSxVbixFWHQpLGwudGQ9ZnVuY3Rpb24oZSl7aXNuKHRoaXMuYSx0aGlzLmQsdGhpcy5jLHRoaXMuYix1KGUsMTEyKSl9LGwuYj0wLFAoSmYsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMSRUeXBlIiwxODE4KSxJKDE4MTksMSx7fSx6USksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmUsMTYpKX0sUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4MTkpLEkoMTgyMCwxLHt9LHFRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuaiwxNikpfSxQKEpmLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDMkVHlwZSIsMTgyMCksSSgxODIxLDEse30sSFEpLGwuRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFh0KHllKGUpKX0sUChKZiwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQ0JFR5cGUiLDE4MjEpLEkoNjU1LDEse30sR250KSxsLmE9MCxsLmI9MCxsLmM9MCxQKEpmLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvciIsNjU1KSxJKDE2MzgsMSx7fSxHUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmUsMTYpKX0sUChKZiwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTYzOCksSSgxNjM5LDEse30sVlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTEyKS5qLDE2KSl9LFAoSmYsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDE2MzkpLEkoNjYxLDEse30pLFAodmN0LCJCYXNlUm91dGluZ0RpcmVjdGlvblN0cmF0ZWd5Iiw2NjEpLEkoMTgwNyw2NjEse30sZHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQ7aWYoIShlLnImJiFlLnEpKWZvcihNPW4rZS5vKnIsQz1uZXcgUyhlLm4pO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSksRj1LbyhjdChvdChVcywxKSx0ZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYSx3PW5ldyBTKGsuZyk7dy5hPHcuYy5jLmxlbmd0aDspZD11KEoodyksMTcpLFZhKGQpfHwoWT1kLmQsdHQ9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtZLmkubixZLm4sWS5hXSkpLmEsYi5NYXRoLmFicyhGLXR0KT55ZCYmKGg9TSxvPWUscz1uZXcgJGUoRixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSksSD1lLnIsSCYmKFY9WHQoeWUoUWYoSC5lLDApKSkscz1uZXcgJGUoVixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSksaD1uK0gubypyLG89SCxzPW5ldyAkZShWLGgpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkscz1uZXcgJGUodHQsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpKSl9LGwuZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaS5uLmErZS5uLmErZS5hLmF9LGwuZmc9ZnVuY3Rpb24oKXtyZXR1cm4gYmUoKSxtcn0sbC5nZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLE5ufSxQKHZjdCwiTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5IiwxODA3KSxJKDE4MDgsNjYxLHt9LGdxdCksbC5kZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0O2lmKCEoZS5yJiYhZS5xKSlmb3IoTT1uLWUubypyLEM9bmV3IFMoZS5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLEY9S28oY3Qob3QoVXMsMSksdGUsOCwwLFtrLmkubixrLm4say5hXSkpLmEsdz1uZXcgUyhrLmcpO3cuYTx3LmMuYy5sZW5ndGg7KWQ9dShKKHcpLDE3KSxWYShkKXx8KFk9ZC5kLHR0PUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbWS5pLm4sWS5uLFkuYV0pKS5hLGIuTWF0aC5hYnMoRi10dCk+eWQmJihoPU0sbz1lLHM9bmV3ICRlKEYsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpLEg9ZS5yLEgmJihWPVh0KHllKFFmKEguZSwwKSkpLHM9bmV3ICRlKFYsaCksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITEpLGg9bi1ILm8qcixvPUgscz1uZXcgJGUoVixoKSxuaShkLmEscyksZncodGhpcyxkLG8scywhMSkpLHM9bmV3ICRlKHR0LGgpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCExKSkpfSxsLmVnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmkubi5hK2Uubi5hK2UuYS5hfSxsLmZnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksTm59LGwuZ2c9ZnVuY3Rpb24oKXtyZXR1cm4gYmUoKSxtcn0sUCh2Y3QsIlNvdXRoVG9Ob3J0aFJvdXRpbmdTdHJhdGVneSIsMTgwOCksSSgxODA2LDY2MSx7fSxwcXQpLGwuZGc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsayxDLE0sRixILFYsWSx0dDtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixDPW5ldyBTKGUubik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxGPUtvKGN0KG90KFVzLDEpLHRlLDgsMCxbay5pLm4say5uLGsuYV0pKS5iLHc9bmV3IFMoay5nKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwxNyksVmEoZCl8fChZPWQuZCx0dD1LbyhjdChvdChVcywxKSx0ZSw4LDAsW1kuaS5uLFkubixZLmFdKSkuYixiLk1hdGguYWJzKEYtdHQpPnlkJiYoaD1NLG89ZSxzPW5ldyAkZShoLEYpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCEwKSxIPWUucixIJiYoVj1YdCh5ZShRZihILmUsMCkpKSxzPW5ldyAkZShoLFYpLG5pKGQuYSxzKSxmdyh0aGlzLGQsbyxzLCEwKSxoPW4rSC5vKnIsbz1ILHM9bmV3ICRlKGgsViksbmkoZC5hLHMpLGZ3KHRoaXMsZCxvLHMsITApKSxzPW5ldyAkZShoLHR0KSxuaShkLmEscyksZncodGhpcyxkLG8scywhMCkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYitlLm4uYitlLmEuYn0sbC5mZz1mdW5jdGlvbigpe3JldHVybiBiZSgpLEhufSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIGJlKCksQm59LFAodmN0LCJXZXN0VG9FYXN0Um91dGluZ1N0cmF0ZWd5IiwxODA2KSxJKDgxMywxLHt9LHN4dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCh0aGlzLmEpfSxsLmI9MCxsLmM9ITEsbC5kPSExLGwuZj0wLFAoVHksIk51YlNwbGluZSIsODEzKSxJKDQwNywxLHs0MDc6MX0sUmNlLHJRdCksUChUeSwiTnViU3BsaW5lL1BvbGFyQ1AiLDQwNyksSSgxNDUzLDEsemMsU3NlKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiBMZG4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXt1NW4odGhpcyx1KGUsMzcpLG4pfTt2YXIgcW1lLEhtZSxHbWUsVm1lLFVtZTtQKFR5LCJTcGxpbmVFZGdlUm91dGVyIiwxNDUzKSxJKDI2OCwxLHsyNjg6MX0sUyQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgLT4oIit0aGlzLmMrIikgIit0aGlzLmJ9LGwuYz0wLFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvRGVwZW5kZW5jeSIsMjY4KSxJKDQ1NSwyMix7MzoxLDM1OjEsMjI6MSw0NTU6MX0sJGJ0KTt2YXIgYmIsZTUsV21lPWpyKFR5LCJTcGxpbmVFZGdlUm91dGVyL1NpZGVUb1Byb2Nlc3MiLDQ1NSxIcixXbm4sbEplKSxLbWU7SSgxNDU0LDEsdWksalEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJfKCksIXUoZSwxMjgpLm99LFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTQ1NCksSSgxNDU1LDEse30sUlEpLGwuR2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGJfKCksdShlLDEyOCkudisxfSxQKFR5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0NTUpLEkoMTQ1NiwxLFVuLGlWdCksbC50ZD1mdW5jdGlvbihlKXt5dG4odGhpcy5hLHRoaXMuYix1KGUsNDYpKX0sUChUeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDU2KSxJKDE0NTcsMSxVbixzVnQpLGwudGQ9ZnVuY3Rpb24oZSl7eHRuKHRoaXMuYSx0aGlzLmIsdShlLDQ2KSl9LFAoVHksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ1NyksSSgxMjgsMSx7MzU6MSwxMjg6MX0sZW9lLGh4dCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gV0tlKHRoaXMsdShlLDEyOCkpfSxsLmI9MCxsLmU9ITEsbC5mPTAsbC5nPTAsbC5qPSExLGwuaz0hMSxsLm49MCxsLm89ITEsbC5wPSExLGwucT0hMSxsLnM9MCxsLnU9MCxsLnY9MCxsLkY9MCxQKFR5LCJTcGxpbmVTZWdtZW50IiwxMjgpLEkoNDU5LDEsezQ1OToxfSxWVCksbC5hPTAsbC5iPSExLGwuYz0hMSxsLmQ9ITEsbC5lPSExLGwuZj0wLFAoVHksIlNwbGluZVNlZ21lbnQvRWRnZUluZm9ybWF0aW9uIiw0NTkpLEkoMTIzNCwxLHt9LE5RKSxQKHFfLGE2dCwxMjM0KSxJKDEyMzUsMSxPaSxQUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBycG4odShlLDEzNSksdShuLDEzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAocV8samZlLDEyMzUpLEkoMTIzMywxLHt9LENIdCksUChxXywiTXJUcmVlIiwxMjMzKSxJKDM5MywyMix7MzoxLDM1OjEsMjI6MSwzOTM6MSwyNDY6MSwyMzQ6MX0sVVIpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gX29lKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIF9vZSh0aGlzKX07dmFyIHZWLFBTLFBPLEZTLFpDdD1qcihxXywiVHJlZUxheW91dFBoYXNlcyIsMzkzLEhyLGppbixoSmUpLFltZTtJKDExMzAsMjA5LEUyLFZXdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrO2ZvcihqZShSZShxZShlLChodygpLGlfdCkpKSl8fHUkKChyPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxyKSksZD0odz1uZXcgQSQsTG8odyxlKSxKdCh3LChmYygpLGpTKSxlKSxrPW5ldyBDcixLd24oZSx3LGspLGhtbihlLHcsayksdyksaD1pbW4odGhpcy5hLGQpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTM1KSxUZG4odGhpcy5iLHMsUmMobiwxL2guYy5sZW5ndGgpKTtkPUI1bihoKSx1NG4oZCl9LFAocV8sIlRyZWVMYXlvdXRQcm92aWRlciIsMTEzMCksSSgxODQ3LDEsdDAsRlEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAocV8sIlRyZWVVdGlsLzEiLDE4NDcpLEkoMTg0OCwxLHQwLEJRKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSxyOCgpLFpFfSxQKHFfLCJUcmVlVXRpbC8yIiwxODQ4KSxJKDUwMiwxMzQsezM6MSw1MDI6MSw5NDoxLDEzNDoxfSksbC5nPTAsUChIXywiVEdyYXBoRWxlbWVudCIsNTAyKSxJKDE4OCw1MDIsezM6MSwxODg6MSw1MDI6MSw5NDoxLDEzNDoxfSxMd3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iJiZ0aGlzLmM/YiQodGhpcy5iKSsiLT4iK2IkKHRoaXMuYyk6ImVfIitIaSh0aGlzKX0sUChIXywiVEVkZ2UiLDE4OCksSSgxMzUsMTM0LHszOjEsMTM1OjEsOTQ6MSwxMzQ6MX0sQSQpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihvPW51bGwscz1laSh0aGlzLmIsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDg2KSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49ZWkodGhpcy5hLDApO24uYiE9bi5kLmM7KWU9dSh0aShuKSwxODgpLG8rPShlLmImJmUuYz9iJChlLmIpKyItPiIrYiQoZS5jKToiZV8iK0hpKGUpKStgCmA7cmV0dXJuIG99O3ZhciBweG49UChIXywiVEdyYXBoIiwxMzUpO0koNjMzLDUwMix7MzoxLDUwMjoxLDYzMzoxLDk0OjEsMTM0OjF9KSxQKEhfLCJUU2hhcGUiLDYzMyksSSg4Niw2MzMsezM6MSw1MDI6MSw4NjoxLDYzMzoxLDk0OjEsMTM0OjF9LHlpdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX07dmFyIGJ4bj1QKEhfLCJUTm9kZSIsODYpO0koMjU1LDEsdDAsQ3ApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPWVpKHRoaXMuYS5kLDApLG5ldyBieChlKX0sUChIXywiVE5vZGUvMiIsMjU1KSxJKDM1OCwxLHJhLGJ4KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aSh0aGlzLmEpLDE4OCkuY30sbC5PYj1mdW5jdGlvbigpe3JldHVybiBrUih0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7SCQodGhpcy5hKX0sUChIXywiVE5vZGUvMi8xIiwzNTgpLEkoMTg0MCwxLGFzLEdXdCksbC5wZj1mdW5jdGlvbihlLG4pe1Ntbih0aGlzLHUoZSwxMzUpLG4pfSxQKHg2LCJGYW5Qcm9jZXNzb3IiLDE4NDApLEkoMzI3LDIyLHszOjEsMzU6MSwyMjoxLDMyNzoxLDIzNDoxfSx0QyksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IE1xdDtjYXNlIDE6cmV0dXJuIG5ldyBHV3Q7Y2FzZSAyOnJldHVybiBuZXcgUTU7Y2FzZSAzOnJldHVybiBuZXcgVVE7Y2FzZSA0OnJldHVybiBuZXcgS1E7Y2FzZSA1OnJldHVybiBuZXcgT0w7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oQm90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciB4aHQsa2h0LEVodCxUaHQsQ2h0LHdWLFhtZT1qcih4Nix2NnQsMzI3LEhyLGVhbixmSmUpLFFtZTtJKDE4NDMsMSxhcyxVUSksbC5wZj1mdW5jdGlvbihlLG4pe3Vibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxQKHg2LCJMZXZlbEhlaWdodFByb2Nlc3NvciIsMTg0MyksSSgxODQ0LDEsdDAsV1EpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAoeDYsIkxldmVsSGVpZ2h0UHJvY2Vzc29yLzEiLDE4NDQpLEkoMTg0MSwxLGFzLFE1KSxsLnBmPWZ1bmN0aW9uKGUsbil7YmduKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLFAoeDYsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTg0MSksSSgxODQyLDEsdDAsJEYpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB2bigpLHI4KCksWkV9LFAoeDYsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxODQyKSxJKDE4NDUsMSxhcyxLUSksbC5wZj1mdW5jdGlvbihlLG4pe2Nibih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MCxQKHg2LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE4NDUpLEkoMTgzOSwxLGFzLE1xdCksbC5wZj1mdW5jdGlvbihlLG4pe055bih0aGlzLHUoZSwxMzUpKX0sUCh4NiwiUm9vdFByb2Nlc3NvciIsMTgzOSksSSgxODQ2LDEsYXMsT0wpLGwucGY9ZnVuY3Rpb24oZSxuKXtIdW4odShlLDEzNSkpfSxQKHg2LCJVbnRyZWVpZnllciIsMTg0Nik7dmFyIEZPLEJTLFptZSxfaHQsbVYsUlMsU2h0LHlWLHhWLGs3LGpTLGtWLFlnLEpDdCxKbWUsQWh0LFd5LExodCx0X3Q7SSg4NTEsMSxJaCxMMyksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRmt0KSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxuX3QpLChqZygpLGNzKSksdV90KSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxCa3QpLCIiKSwiU2VhcmNoIE9yZGVyIiksIldoaWNoIHNlYXJjaCBvcmRlciB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBzcGFubmluZyB0cmVlLiIpLGVfdCksY3MpLGhfdCksdW4ocW4pKSkpLFpsZSgobmV3IEtMLGUpKX07dmFyIHR5ZSxlX3QsZXllLG5fdDtQKGZILCJNclRyZWVNZXRhRGF0YVByb3ZpZGVyIiw4NTEpLEkoOTk0LDEsSWgsS0wpLGwuUWU9ZnVuY3Rpb24oZSl7WmxlKGUpfTt2YXIgbnllLHJfdCxyeWUsaXllLHN5ZSxheWUsaV90LG95ZSxzX3QsY3llLEVWLGFfdCx1eWUsb190LGx5ZTtQKGZILCJNclRyZWVPcHRpb25zIiw5OTQpLEkoOTk1LDEse30sWVEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgVld0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKGZILCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDk5NSksSSg0ODAsMjIsezM6MSwzNToxLDIyOjEsNDgwOjF9LHpidCk7dmFyIE1odCxjX3QsdV90PWpyKGZILCJPcmRlcldlaWdodGluZyIsNDgwLEhyLFlubixkSmUpLGh5ZTtJKDQyNSwyMix7MzoxLDM1OjEsMjI6MSw0MjU6MX0scWJ0KTt2YXIgbF90LElodCxoX3Q9anIoZkgsIlRyZWVpZnlpbmdPcmRlciIsNDI1LEhyLEtubixwSmUpLGZ5ZTtJKDE0NTksMSx6YyxXTCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7cW9uKHRoaXMsdShlLDEzNSksbil9O3ZhciBkeWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDF0cmVlaWZ5IiwiREZTVHJlZWlmeWVyIiwxNDU5KSxJKDE0NjAsMSx6YyxRSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksZ3llfSxsLnBmPWZ1bmN0aW9uKGUsbil7X2duKHRoaXMsdShlLDEzNSksbil9O3ZhciBneWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsIk5vZGVPcmRlcmVyIiwxNDYwKSxJKDE0NjEsMSx6YyxYSiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSkscHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7SHZuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wO3ZhciBweWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDNwbGFjZSIsIk5vZGVQbGFjZXIiLDE0NjEpLEkoMTQ2MiwxLHpjLE5CKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTM1KSxieWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtwMW4odShlLDEzNSksbil9O3ZhciBieWU7UCgib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDRyb3V0ZSIsIkVkZ2VSb3V0ZXIiLDE0NjIpO3ZhciAkUztJKDQ5NSwyMix7MzoxLDM1OjEsMjI6MSw0OTU6MSwyNDY6MSwyMzQ6MX0sSGJ0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIGlpZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBpaWUodGhpcyl9O3ZhciBUVixFNyxmX3Q9anIoUmt0LCJSYWRpYWxMYXlvdXRQaGFzZXMiLDQ5NSxIcixYbm4sZ0plKSx2eWU7SSgxMTMxLDIwOSxFMixUSHQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHc7aWYocj1vb2UodGhpcyxlKSx3cihuLCJSYWRpYWwgbGF5b3V0IixyLmMubGVuZ3RoKSxqZShSZShxZShlLChheSgpLGtfdCkpKSl8fHUkKChzPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxzKSksdz1EZG4oZSksYm8oZSwoYkMoKSwkUyksdyksIXcpdGhyb3cgcnQobmV3IFBuKCJUaGUgZ2l2ZW4gZ3JhcGggaXMgbm90IGEgdHJlZSEiKSk7Zm9yKG89WHQoeWUocWUoZSxTVikpKSxvPT0wJiYobz14b2UoZSkpLGJvKGUsU1YsbyksZD1uZXcgUyhvb2UodGhpcyxlKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksNTEpLGgucGYoZSxSYyhuLDEpKTtvcihuKX0sUChSa3QsIlJhZGlhbExheW91dFByb3ZpZGVyIiwxMTMxKSxJKDU0OSwxLE9pLEVSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGl3bih0aGlzLmEsdGhpcy5iLHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sbC5hPTAsbC5iPTAsUChSa3QsIlJhZGlhbFV0aWwvbGFtYmRhJDAkVHlwZSIsNTQ5KSxJKDEzNzUsMSxhcyxRUSksbC5wZj1mdW5jdGlvbihlLG4pe0Uzbih1KGUsMzMpLG4pfSxQKE8xZSwiQ2FsY3VsYXRlR3JhcGhTaXplIiwxMzc1KSxJKDQ0MiwyMix7MzoxLDM1OjEsMjI6MSw0NDI6MSwyMzQ6MX0sRmV0KSxsLktmPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgekY7Y2FzZSAxOnJldHVybiBuZXcgWFE7Y2FzZSAyOnJldHVybiBuZXcgUVE7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oQm90Kyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBEaHQsT2h0LE5odCx3eWU9anIoTzFlLHY2dCw0NDIsSHIsVnJuLGJKZSksbXllO0koNjQ1LDEse30pLGwuZT0xLGwuZz0wLFAoeWN0LCJBYnN0cmFjdFJhZGl1c0V4dGVuc2lvbkNvbXBhY3Rpb24iLDY0NSksSSgxNzcyLDY0NSx7fSxrV3QpLGwuaGc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2Zvcih0aGlzLmM9dShxZShlLChiQygpLCRTKSksMzMpLGt0dCh0aGlzLHRoaXMuYyksdGhpcy5kPWlzdCh1KHFlKGUsKGF5KCksQk8pKSwyOTMpKSxrPXUocWUoZSxGaHQpLDE5KSxrJiZwdih0aGlzLGsuYSksdz15ZShxZShlLChjaSgpLEgyKSkpLGs5KHRoaXMsKE9uKHcpLHcpKSxDPWd5KHRoaXMuYyksdGhpcy5kJiZ0aGlzLmQubGcoQyksbXduKHRoaXMsQyksZD1uZXcgd2woY3Qob3QobnMsMSksTjFlLDMzLDAsW3RoaXMuY10pKSxyPTA7cjwyO3IrKylmb3Iobj0wO248Qy5jLmxlbmd0aDtuKyspbz1uZXcgd2woY3Qob3QobnMsMSksTjFlLDMzLDAsWyhBbihuLEMuYy5sZW5ndGgpLHUoQy5jW25dLDMzKSldKSksaD1uPEMuYy5sZW5ndGgtMT8oQW4obisxLEMuYy5sZW5ndGgpLHUoQy5jW24rMV0sMzMpKTooQW4oMCxDLmMubGVuZ3RoKSx1KEMuY1swXSwzMykpLHM9bj09MD91KEZlKEMsQy5jLmxlbmd0aC0xKSwzMyk6KEFuKG4tMSxDLmMubGVuZ3RoKSx1KEMuY1tuLTFdLDMzKSksZ2FlKHRoaXMsKEFuKG4sQy5jLmxlbmd0aCksdShDLmNbbl0sMzMpLGQpLHMsaCxvKX0sUCh5Y3QsIkFubnVsdXNXZWRnZUNvbXBhY3Rpb24iLDE3NzIpLEkoMTM3NCwxLGFzLFhRKSxsLnBmPWZ1bmN0aW9uKGUsbil7RjFuKHUoZSwzMyksbil9LFAoeWN0LCJHZW5lcmFsQ29tcGFjdG9yIiwxMzc0KSxJKDE3NzEsNjQ1LHt9LFpRKSxsLmhnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3I9dShxZShlLChiQygpLCRTKSksMzMpLHRoaXMuZj1yLHRoaXMuYj1pc3QodShxZShlLChheSgpLEJPKSksMjkzKSksbz11KHFlKGUsRmh0KSwxOSksbyYmcHYodGhpcyxvLmEpLHM9eWUocWUoZSwoY2koKSxIMikpKSxrOSh0aGlzLChPbihzKSxzKSksbj1neShyKSx0aGlzLmImJnRoaXMuYi5sZyhuKSxWYWUodGhpcyxuKX0sbC5hPTAsUCh5Y3QsIlJhZGlhbENvbXBhY3Rpb24iLDE3NzEpLEkoMTc3OSwxLHt9LEpRKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodGhpcy5hPWUsbj0wLGQ9Z3koZSkscz0wLGg9bmV3IFMoZCk7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDMzKSwrK3Mscj1zO3I8ZC5jLmxlbmd0aDtyKyspT21uKHRoaXMsbywoQW4ocixkLmMubGVuZ3RoKSx1KGQuY1tyXSwzMykpKSYmKG4rPTEpO3JldHVybiBufSxQKCRrdCwiQ3Jvc3NpbmdNaW5pbWl6YXRpb25Qb3NpdGlvbiIsMTc3OSksSSgxNzc3LDEse30sdFopLGwuaWc9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixILFY7Zm9yKHM9MCxyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSx3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLEM9dy5pK3cuZy8yLE09dy5qK3cuZi8yLG89ZS5pK2UuZy8yLGg9ZS5qK2UuZi8yLEY9bmV3IFRhLEYuYT1DLW8sRi5iPU0taCxkPW5ldyAkZShGLmEsRi5iKSxoRShkLGUuZyxlLmYpLEYuYS09ZC5hLEYuYi09ZC5iLG89Qy1GLmEsaD1NLUYuYixrPW5ldyAkZShGLmEsRi5iKSxoRShrLHcuZyx3LmYpLEYuYS09ay5hLEYuYi09ay5iLEM9bytGLmEsTT1oK0YuYixIPUMtbyxWPU0taCxzKz1iLk1hdGguc3FydChIKkgrVipWKTtyZXR1cm4gc30sUCgka3QsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE3NzcpLEkoMTc3OCwxLHt9LGVaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEY7Zm9yKHM9MCxyPW5ldyBhcihscihHMChlKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KExyKHIpLDc5KSx3PU1vKHUoU3QoKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jKSwwKSw4MikpLGs9dy5pK3cuZy8yLEM9dy5qK3cuZi8yLG89dShxZSh3LChjaSgpLHo2KSksOCksaD1lLmkrby5hK2UuZy8yLGQ9ZS5qK28uYitlLmYsTT1rLWgsRj1DLWQscys9Yi5NYXRoLnNxcnQoTSpNK0YqRik7cmV0dXJuIHN9LFAoJGt0LCJFZGdlTGVuZ3RoUG9zaXRpb25PcHRpbWl6YXRpb24iLDE3NzgpLEkoMTM3Myw2NDUsYXMsekYpLGwucGY9ZnVuY3Rpb24oZSxuKXskYm4odGhpcyx1KGUsMzMpLG4pfSxQKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3ZlcmxhcHMiLCJSYWRpdXNFeHRlbnNpb25PdmVybGFwUmVtb3ZhbCIsMTM3MyksSSg0MjYsMjIsezM6MSwzNToxLDIyOjEsNDI2OjF9LEdidCk7dmFyIGRfdCxQaHQsZ190PWpyKEdfLCJBbm51bHVzV2VkZ2VDcml0ZXJpYSIsNDI2LEhyLFFubix2SmUpLHl5ZTtJKDM4MCwyMix7MzoxLDM1OjEsMjI6MSwzODA6MX0sQmV0KTt2YXIgQ1YscF90LGJfdCx2X3Q9anIoR18sSnh0LDM4MCxIcixVcm4sd0plKSx4eWU7SSg4NTIsMSxJaCxaSiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsemt0KSwiIiksIk9yZGVyIElEIiksIlRoZSBpZCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3JkZXIgZm9yIG5vZGVzIG9mIG9uZSByYWRpdXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc29ydCB0aGVtIGluIHRoZSBsYXllciBhY2NvcmRpbmdseS4iKSxkZSgwKSksKGpnKCksZ2MpKSxqYSksdW4oKFhmKCksSnMpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscWt0KSwiIiksIlJhZGl1cyIpLCJUaGUgcmFkaXVzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwgcmFkaXVzIGZvciB0aGUgcmFkaWFsIGxheW91dGVyLiIpLDApLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrY3QpLCIiKSwiQ29tcGFjdGlvbiIpLCJXaXRoIHRoZSBjb21wYWN0ZXIgb3B0aW9uIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGhvdyBjb21wYWN0aW9uIG9uIHRoZSBncmFwaCBpcyBkb25lLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gbm9uZSwgdGhlIHJhZGlhbCBjb21wYWN0aW9uIG9yIHRoZSBjb21wYWN0aW9uIG9mIHdlZGdlcyBzZXBhcmF0ZWx5LiIpLHdfdCksY3MpLHZfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxFY3QpLCIiKSwiQ29tcGFjdGlvbiBTdGVwIFNpemUiKSwiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLiIpLGRlKDEpKSxnYyksamEpLHVuKHFuKSkpKSxhYShlLEVjdCxrY3QsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEhrdCksIiIpLCJTb3J0ZXIiKSwiU29ydCB0aGUgbm9kZXMgcGVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgYWxnb3JpdGhtLiBUaGUgc3RyYXRlZ2llcyBhcmUgbm9uZSwgYnkgdGhlIGdpdmVuIG9yZGVyIGlkLCBvciBzb3J0aW5nIHRoZW0gYnkgcG9sYXIgY29vcmRpbmF0ZXMuIikseV90KSxjcyksSV90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEdrdCksIiIpLCJBbm51bHVzIFdlZGdlIENyaXRlcmlhIiksIkRldGVybWluZSBob3cgdGhlIHdlZGdlIGZvciB0aGUgbm9kZSBwbGFjZW1lbnQgaXMgY2FsY3VsYXRlZC4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHdlZGdlIGRldGVybWluYXRpb24gYnkgdGhlIG51bWJlciBvZiBsZWF2ZXMgb3IgYnkgdGhlIG1heGltdW0gc3VtIG9mIGRpYWdvbmFscy4iKSx4X3QpLGNzKSxnX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVmt0KSwiIiksIlRyYW5zbGF0aW9uIE9wdGltaXphdGlvbiIpLCJGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuIiksbV90KSxjcyksQV90KSx1bihxbikpKSksZGhlKChuZXcgUEIsZSkpfTt2YXIga3llLEV5ZSx3X3QsVHllLG1fdCxDeWUsX3llLFN5ZSx5X3QsQXllLHhfdDtQKEdfLCJSYWRpYWxNZXRhRGF0YVByb3ZpZGVyIiw4NTIpLEkoOTk2LDEsSWgsUEIpLGwuUWU9ZnVuY3Rpb24oZSl7ZGhlKGUpfTt2YXIgRmh0LEJodCxMeWUsTXllLEl5ZSxEeWUsa190LEVfdCxfVixPeWUsTnllLFNWLEJPLFB5ZSxUX3Q7UChHXywiUmFkaWFsT3B0aW9ucyIsOTk2KSxJKDk5NywxLHt9LG5aKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFRIdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChHXywiUmFkaWFsT3B0aW9ucy9SYWRpYWxGYWN0b3J5Iiw5OTcpLEkoMzQwLDIyLHszOjEsMzU6MSwyMjoxLDM0MDoxfSxXUik7dmFyIENfdCxfX3QsU190LFJodCxBX3Q9anIoR18sIlJhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3kiLDM0MCxIciwkaW4sbUplKSxGeWU7SSgyOTMsMjIsezM6MSwzNToxLDIyOjEsMjkzOjF9LFJldCk7dmFyIExfdCxqaHQsTV90LElfdD1qcihHXywiU29ydGluZ1N0cmF0ZWd5IiwyOTMsSHIsS3JuLHlKZSksQnllO0koMTQ0OSwxLHpjLHFGKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzMpLG51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtZYm4odGhpcyx1KGUsMzMpLG4pfSxsLmM9MCxQKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMXBvc2l0aW9uIiwiRWFkZXNSYWRpYWwiLDE0NDkpLEkoMTc3NSwxLHt9LHJaKSxsLmpnPWZ1bmN0aW9uKGUpe3JldHVybiBKaWUoZSl9LFAoUDFlLCJBbm51bHVzV2VkZ2VCeUxlYWZzIiwxNzc1KSxJKDE3NzYsMSx7fSxIRiksbC5qZz1mdW5jdGlvbihlKXtyZXR1cm4gYWFlKHRoaXMsZSl9LFAoUDFlLCJBbm51bHVzV2VkZ2VCeU5vZGVTcGFjZSIsMTc3NiksSSgxNDUwLDEsemMsR0YpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMyksbnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe29kbih0aGlzLHUoZSwzMyksbil9LFAoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAycm91dGluZyIsIlN0cmFpZ2h0TGluZUVkZ2VSb3V0ZXIiLDE0NTApLEkoODExLDEse30sVnB0KSxsLmtnPWZ1bmN0aW9uKGUpe30sbC5sZz1mdW5jdGlvbihlKXskenQodGhpcyxlKX0sUChVa3QsIklEU29ydGVyIiw4MTEpLEkoMTc3NCwxLE9pLFZGKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIElvbih1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoVWt0LCJJRFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNzc0KSxJKDE3NzMsMSx7fSxybmUpLGwua2c9ZnVuY3Rpb24oZSl7bFp0KHRoaXMsZSl9LGwubGc9ZnVuY3Rpb24oZSl7dmFyIG47ZS5kYygpfHwodGhpcy5lfHwobj1hWXQodShlLlhiKDApLDMzKSksbFp0KHRoaXMsbikpLCR6dCh0aGlzLmUsZSkpfSxQKFVrdCwiUG9sYXJDb29yZGluYXRlU29ydGVyIiwxNzczKSxJKDExMzYsMjA5LEUyLGlaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWUsUm4sem4saHI7aWYod3IobiwiUmVjdGFuZ2xlIFBhY2tpbmciLDEpLG4ubiYmbi5uJiZlJiZoZihuLGZmKGUpLChDbCgpLFlsKSkscj1YdCh5ZShxZShlLChLc3QoKSxXeWUpKSkpLHR0PXUocWUoZSxHX3QpLDM4MSksX3Q9amUoUmUocWUoZSx6X3QpKSksU2U9amUoUmUocWUoZSxIX3QpKSksRj1qZShSZShxZShlLFJfdCkpKSxXZT11KHFlKGUsdDNlKSwxMTYpLGNlPVh0KHllKHFlKGUsbjNlKSkpLG89amUoUmUocWUoZSxVX3QpKSksSD1qZShSZShxZShlLGpfdCkpKSxMdD1qZShSZShxZShlLCRfdCkpKSxocj1YdCh5ZShxZShlLFdfdCkpKSxSbj0oIWUuYSYmKGUuYT1uZXcgaGUobnMsZSwxMCwxMSkpLGUuYSksbm5lKFJuKSxMdCl7Zm9yKFk9bmV3IGxlLGs9bmV3IGVyKFJuKTtrLmUhPWsuaS5nYygpOylkPXUoZHIoayksMzMpLHIyKGQsUk8pJiYoWS5jW1kuYy5sZW5ndGhdPWQpO2ZvcihDPW5ldyBTKFkpO0MuYTxDLmMuYy5sZW5ndGg7KWQ9dShKKEMpLDMzKSxqJChSbixkKTtmb3Iodm4oKSxYcyhZLG5ldyBzWiksTT1uZXcgUyhZKTtNLmE8TS5jLmMubGVuZ3RoOylkPXUoSihNKSwzMyksUWU9dShxZShkLFJPKSwxOSkuYSxRZT1iLk1hdGgubWluKFFlLFJuLmkpLEpDKFJuLFFlLGQpO2ZvcihndD0wLHc9bmV3IGVyKFJuKTt3LmUhPXcuaS5nYygpOylkPXUoZHIodyksMzMpLGJvKGQsQl90LGRlKGd0KSksKytndH1ZdD1HNHQoZSksWXQuYS09V2UuYitXZS5jLFl0LmItPVdlLmQrV2UuYSxCdD1ZdC5hLGhyPDB8fGhyPFl0LmE/KFY9bmV3IG1LdChyLHR0LF90KSxoPV93bihWLFJuLGNlLFdlKSxuLm4mJm4ubiYmZSYmaGYobixmZihlKSwoQ2woKSxZbCkpKTpoPW5ldyBUbnQocixociwwLCh5RSgpLEhTKSksWXQuYSs9V2UuYitXZS5jLFl0LmIrPVdlLmQrV2UuYSxTZXx8KG5uZShSbiksem49bmV3IE1adChyLEYsSCxvLGNlKSxCdD1iLk1hdGgubWF4KFl0LmEsaC5jKSxoPWk0bih6bixSbixCdCxZdCxuLGUsV2UpKSxyY24oUm4sV2UpLGd3KGUsaC5jKyhXZS5iK1dlLmMpLGguYisoV2UuZCtXZS5hKSwhMSwhMCksamUoUmUocWUoZSxxX3QpKSl8fHUkKChzPW5ldyBycigoSW0oKSxuZXcgU20oZSkpKSxzKSksbi5uJiZuLm4mJmUmJmhmKG4sZmYoZSksKENsKCksWWwpKSxvcihuKX0sUChqMWUsIlJlY3RQYWNraW5nTGF5b3V0UHJvdmlkZXIiLDExMzYpLEkoMTEzNywxLE9pLHNaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEtjbih1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoajFlLCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDExMzcpLEkoMTI1NiwxLHt9LG1LdCksbC5hPTAsbC5jPSExLFAoZEgsIkFyZWFBcHByb3hpbWF0aW9uIiwxMjU2KTt2YXIgRF90PVlpKGRILCJCZXN0Q2FuZGlkYXRlRmlsdGVyIik7SSg2MzgsMSx7NTI2OjF9LFVUKSxsLm1nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKGs9bmV3IGxlLGg9c3Msdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwyMjApLGg9Yi5NYXRoLm1pbihoLChkLmMrKHIuYityLmMpKSooZC5iKyhyLmQrci5hKSkpO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMCksKHMuYysoci5iK3IuYykpKihzLmIrKHIuZCtyLmEpKT09aCYmKGsuY1trLmMubGVuZ3RoXT1zKTtyZXR1cm4ga30sUChkSCwiQXJlYUZpbHRlciIsNjM4KSxJKDYzOSwxLHs1MjY6MX0sTkwpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHcsaztmb3Iodz1uZXcgbGUsaz1zcyxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDIyMCksaz1iLk1hdGgubWluKGssYi5NYXRoLmFicygoaC5jKyhyLmIrci5jKSkvKGguYisoci5kK3IuYSkpLW4pKTtmb3Iobz1uZXcgUyhlKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyMjApLGIuTWF0aC5hYnMoKHMuYysoci5iK3IuYykpLyhzLmIrKHIuZCtyLmEpKS1uKT09ayYmKHcuY1t3LmMubGVuZ3RoXT1zKTtyZXR1cm4gd30sUChkSCwiQXNwZWN0UmF0aW9GaWx0ZXIiLDYzOSksSSg2MzcsMSx7NTI2OjF9LFdUKSxsLm1nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx3LGs7Zm9yKGs9bmV3IGxlLGg9VHMsdz1uZXcgUyhlKTt3LmE8dy5jLmMubGVuZ3RoOylkPXUoSih3KSwyMjApLGg9Yi5NYXRoLm1heChoLHF2dChkLmMrKHIuYityLmMpLGQuYisoci5kK3IuYSksZC5hKSk7Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIwKSxxdnQocy5jKyhyLmIrci5jKSxzLmIrKHIuZCtyLmEpLHMuYSk9PWgmJihrLmNbay5jLmxlbmd0aF09cyk7cmV0dXJuIGt9LFAoZEgsIlNjYWxlTWVhc3VyZUZpbHRlciIsNjM3KSxJKDM4MSwyMix7MzoxLDM1OjEsMjI6MSwzODE6MX0samV0KTt2YXIgT190LE5fdCwkaHQsUF90PWpyKFRjdCwiT3B0aW1pemF0aW9uR29hbCIsMzgxLEhyLFdybix4SmUpLFJ5ZTtJKDg1NiwxLEloLGpCKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXa3QpLCIiKSwiT3B0aW1pemF0aW9uIEdvYWwiKSwiT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4iKSxGX3QpLChqZygpLGNzKSksUF90KSx1bigoWGYoKSxKcykpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLa3QpLCIiKSwiU2hpZnQgTGFzdCBQbGFjZWQuIiksIldoZW4gcGxhY2luZyBhIHJlY3RhbmdsZSBiZWhpbmQgb3IgYmVsb3cgdGhlIGxhc3QgcGxhY2VkIHJlY3RhbmdsZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCBpdCBpcyBzb21ldGltZXMgcG9zc2libGUgdG8gc2hpZnQgdGhlIHJlY3RhbmdsZSBmdXJ0aGVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LCByZXN1bHRpbmcgaW4gbGVzcyB3aGl0ZXNwYWNlLiBUcnVlIChkZWZhdWx0KSBlbmFibGVzIHRoZSBzaGlmdCBhbmQgZmFsc2UgZGlzYWJsZXMgaXQuIERpc2FibGluZyB0aGUgc2hpZnQgcHJvZHVjZXMgYSBncmVhdGVyIGFwcHJveGltYXRlZCBhcmVhIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24gYW5kIGEgbGF5b3V0LCB3aGVuIHVzaW5nIE9OTFkgdGhlIGZpcnN0IGl0ZXJhdGlvbiAoZGVmYXVsdCBub3QgdGhlIGNhc2UpLCB3aGVyZSBpdCBpcyBzb21ldGltZXMgaW1wb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBzaXplIHRyYW5zZm9ybWF0aW9uIG9mIHJlY3RhbmdsZXMgdGhhdCB3aWxsIGZpbGwgdGhlIGJvdW5kaW5nIGJveCBhbmQgZWxpbWluYXRlIGVtcHR5IHNwYWNlcy4iKSwoRm4oKSwhMCkpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZa3QpLCIiKSwiQ3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUgaW4gdGhlIG9yZGVyIG9mIG5vZGVzIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFhrdCksIiIpLCJEZXNpcmVkIGluZGV4IG9mIG5vZGUiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgZGVzaXJlZCBwb3NpdGlvbiB0aGF0IGhhcyBwcmVmZXJlbmNlIG92ZXIgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLiIpLGRlKC0xKSksZ2MpLGphKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFrdCksIiIpLCJPbmx5IEFyZWEgQXBwcm94aW1hdGlvbiIpLCJJZiBlbmFibGVkIG9ubHkgdGhlIHdpZHRoIGFwcHJveGltYXRpb24gc3RlcCBpcyBleGVjdXRlZCBhbmQgdGhlIG5vZGVzIGFyZSBwbGFjZWQgYWNjb3JkaW5nbHkuIFRoZSBub2RlcyBhcmUgbGF5b3V0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwYWNraW5nU3RyYXRlZ3kuIElmIHNldCB0byB0cnVlIG5vdCBleHBhbnNpb24gb2Ygbm9kZXMgaXMgdGFraW5nIHBsYWNlLiIpLCExKSxBYSksQnMpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWmt0KSwiIiksIkNvbXBhY3QgUm93cyIpLCJFbmFibGVzIGNvbXBhY3Rpb24uIENvbXBhY3RzIGJsb2NrcyBpZiB0aGV5IGRvIG5vdCB1c2UgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSByb3cuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBoYXZlIGEgc21hbGxlciBkcmF3aW5nLiBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBhbGwgbm9kZXMgYXJlIHBsYWNlZCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcm93cy4iKSwhMCksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLENjdCksIiIpLCJGaXQgQXNwZWN0IFJhdGlvIiksIkV4cGFuZHMgbm9kZXMgaWYgZXhwYW5kTm9kZXMgaXMgdHJ1ZSB0byBmaXQgdGhlIGFzcGVjdCByYXRpbyBpbnN0ZWFkIG9mIG9ubHkgaW4gdGhlaXIgYm91bmRzLiBUaGUgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSB1c2VkIHBhY2tpbmdTdHJhdGVneSBpcyBBU1BFQ1RfUkFUSU9fRFJJVkVOLCBvdGhlcndpc2UgdGhpcyBtYXkgcmVzdWx0IGluIHVucmVhc29uYWJsZSBuZG9lIGV4cGFuc2lvbi4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYWEoZSxDY3QsZ0gsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEprdCksIiIpLCJUYXJnZXQgV2lkdGgiKSwiT3B0aW9uIHRvIHBsYWNlIHRoZSByZWN0YW5nbGVzIGluIHRoZSBnaXZlbiB0YXJnZXQgd2lkdGggaW5zdGVhZCBvZiBhcHByb3hpbWF0aW5nIHRoZSB3aWR0aCB1c2luZyB0aGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8uIFRoZSBwYWRkaW5nIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzLiBNZWFuaW5nIGEgZHJhd2luZyB3aWxsIGhhdmUgd2lkdGggb2YgdGFyZ2V0d2lkdGggKyBob3Jpem9udGFsIHBhZGRpbmcuIiksLTEpLERvKSxjYSksdW4oSnMpKSkpLFBoZSgobmV3IEJrLGUpKX07dmFyIGp5ZSwkeWUsenllLHF5ZSxIeWUsR3llLEZfdCxWeWUsVXllO1AoVGN0LCJSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXIiLDg1NiksSSgxMDA0LDEsSWgsQmspLGwuUWU9ZnVuY3Rpb24oZSl7UGhlKGUpfTt2YXIgV3llLEt5ZSxCX3QsUk8sUl90LGpfdCwkX3QsWXllLHpfdCxYeWUsUXllLFp5ZSxKeWUscV90LEhfdCxHX3QsdDNlLFZfdCxlM2UsVV90LG4zZSxXX3Q7UChUY3QsIlJlY3RQYWNraW5nT3B0aW9ucyIsMTAwNCksSSgxMDA1LDEse30sYVopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgaVosZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoVGN0LCJSZWN0UGFja2luZ09wdGlvbnMvUmVjdHBhY2tpbmdGYWN0b3J5IiwxMDA1KSxJKDEyNTcsMSx7fSxNWnQpLGwuYT0wLGwuYj0hMSxsLmM9MCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0wLFAoIm9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuc2Vjb25kaXRlcmF0aW9uIiwiUm93RmlsbGluZ0FuZENvbXBhY3Rpb24iLDEyNTcpLEkoMTg3LDEsezE4NzoxfSx4aXQpLGwuYT0wLGwuYz0hMSxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9MCxsLmk9MCxsLms9ITEsbC5vPXNzLGwucD1zcyxsLnI9MCxsLnM9MCxsLnQ9MCxQKFlELCJCbG9jayIsMTg3KSxJKDIxMSwxLHsyMTE6MX0sZiQpLGwuYT0wLGwuYj0wLGwuZD0wLGwuZT0wLGwuZj0wLFAoWUQsIkJsb2NrUm93IiwyMTEpLEkoNDQzLDEsezQ0MzoxfSxQd3QpLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wLGwuZj0wLFAoWUQsIkJsb2NrU3RhY2siLDQ0MyksSSgyMjAsMSx7MjIwOjF9LFRudCx1M3QpLGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wO3ZhciB2eG49UChZRCwiRHJhd2luZ0RhdGEiLDIyMCk7SSgzNTUsMjIsezM6MSwzNToxLDIyOjEsMzU1OjF9LF9NKTt2YXIgUjYsbjUselMscVMsSFMscjNlPWpyKFlELCJEcmF3aW5nRGF0YURlc2NyaXB0b3IiLDM1NSxIcixFc24sa0plKSxpM2U7SSgyMDAsMSx7MjAwOjF9LFZ3dCksbC5iPTAsbC5jPTAsbC5lPTAsbC5mPTAsUChZRCwiUmVjdFJvdyIsMjAwKSxJKDc1NiwxLHt9LCR5dCksbC5qPTAsUChDeSx0MWUsNzU2KSxJKDEyNDUsMSx7fSxvWiksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gSHAoZS5hLGUuYil9LFAoQ3ksZTFlLDEyNDUpLEkoMTI0NiwxLHt9LE8kdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gTXNuKHRoaXMuYSxlKX0sUChDeSxuMWUsMTI0NiksSSgxMjQ3LDEse30sTiR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBCaG4odGhpcy5hLGUpfSxQKEN5LHIxZSwxMjQ3KSxJKDEyNDgsMSx7fSxQJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9jbih0aGlzLmEsZSl9LFAoQ3ksIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTI0OCksSSgxMjQ5LDEse30sRiR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiB2cG4odGhpcy5hLGUpfSxQKEN5LGkxZSwxMjQ5KSxJKDExMzMsMjA5LEUyLF9IdCksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVjtmb3IocjIoZSwockQoKSxEVikpJiYoVj1CcihxZShlLCh1c3QoKSxnU3QpKSksaD1zYXQoejgoKSxWKSxoJiYoZD11KGxydChoLmYpLDIwOSksZC5aZShlLFJjKG4sMSkpKSksYm8oZSxXaHQsKGhJKCksSVYpKSxibyhlLEtodCwoaUQoKSxVaHQpKSxibyhlLFlodCwoTkkoKSxPVikpLHc9dShxZShlLCh1c3QoKSxoU3QpKSwxOSkuYSx3cihuLCJPdmVybGFwIHJlbW92YWwiLDEpLGplKFJlKHFlKGUsVDNlKSkpLGs9bmV3IHFzLEM9bmV3IEIkdChrKSxzPW5ldyAkeXQscj1GaGUocyxlKSxNPSEwLG89MDtvPHcmJk07KXtpZihqZShSZShxZShlLGZTdCkpKSl7aWYoay5hLiRiKCksZ2duKG5ldyBUVXQoQyksci5pKSxrLmEuZ2MoKT09MClicmVhaztyLmU9a31mb3IodyQodGhpcy5iKSxVZCh0aGlzLmIsKEdJKCksQVYpLChIOSgpLGpPKSksVWQodGhpcy5iLExWLHIuZyksVWQodGhpcy5iLE1WLChJUigpLEhodCkpLHRoaXMuYT1UcSh0aGlzLmIsciksSD1uZXcgUyh0aGlzLmEpO0guYTxILmMuYy5sZW5ndGg7KUY9dShKKEgpLDUxKSxGLnBmKHIsUmMobiwxKSk7STFuKHMsciksTT1qZShSZShRKHIsKEc4KCksbjd0KSkpKSwrK299UWxlKHMsciksb3Iobil9LFAoQ3ksIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIiLDExMzMpLEkoMTEzNCwxLHt9LEIkdCksUChDeSwiT3ZlcmxhcFJlbW92YWxMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTM0KSxJKDQzNywyMix7MzoxLDM1OjEsMjI6MSw0Mzc6MX0sJGV0KTt2YXIgQVYsTFYsTVYsemh0PWpyKEN5LCJTUE9yRVBoYXNlcyIsNDM3LEhyLFlybixFSmUpLHMzZTtJKDEyNTUsMSx7fSxTSHQpLFAoQ3ksIlNocmlua1RyZWUiLDEyNTUpLEkoMTEzNSwyMDksRTIsRHF0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyMihlLChyRCgpLERWKSkmJihkPUJyKHFlKGUsRFYpKSxvPXNhdCh6OCgpLGQpLG8mJihoPXUobHJ0KG8uZiksMjA5KSxoLlplKGUsUmMobiwxKSkpKSxzPW5ldyAkeXQscj1GaGUocyxlKSx0Mm4odGhpcy5hLHIsUmMobiwxKSksUWxlKHMscil9LFAoQ3ksIlNocmlua1RyZWVMYXlvdXRQcm92aWRlciIsMTEzNSksSSgzMDAsMTM0LHszOjEsMzAwOjEsOTQ6MSwxMzQ6MX0sYVF0KSxsLmM9ITEsUCgib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCIsIkdyYXBoIiwzMDApLEkoNDgyLDIyLHszOjEsMzU6MSwyMjoxLDQ4MjoxLDI0NjoxLDIzNDoxfSxFR3QpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdXJlKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHVyZSh0aGlzKX07dmFyIHFodCxLX3Q9anIoX3ksSnh0LDQ4MixIcixhbm4sVEplKSxhM2U7SSg1NTEsMjIsezM6MSwzNToxLDIyOjEsNTUxOjEsMjQ2OjEsMjM0OjF9LEVXdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBuZXcgVUZ9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVGfTt2YXIgSGh0LG8zZT1qcihfeSwiT3ZlcmxhcFJlbW92YWxTdHJhdGVneSIsNTUxLEhyLG9ubixDSmUpLGMzZTtJKDQzMCwyMix7MzoxLDM1OjEsMjI6MSw0MzA6MX0sVmJ0KTt2YXIgSVYsR2h0LFlfdD1qcihfeSwiUm9vdFNlbGVjdGlvbiIsNDMwLEhyLEpubixfSmUpLHUzZTtJKDMxNiwyMix7MzoxLDM1OjEsMjI6MSwzMTY6MX0sU00pO3ZhciBYX3QsVmh0LFVodCxRX3QsWl90LEpfdD1qcihfeSwiU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIiwzMTYsSHIseXNuLFNKZSksbDNlO0koMTAwMiwxLEloLEZCKSxsLlFlPWZ1bmN0aW9uKGUpe1NsZShlKX07dmFyIHRTdCxlU3QsaDNlLGYzZSxuU3QsclN0LFdodCxLaHQsWWh0LGQzZSxnM2UsRFY7UChfeSwiU3BvcmVDb21wYWN0aW9uT3B0aW9ucyIsMTAwMiksSSgxMDAzLDEse30sUEwpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgRHF0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxQKF95LCJTcG9yZUNvbXBhY3Rpb25PcHRpb25zL1Nwb3JlQ29tcGFjdGlvbkZhY3RvcnkiLDEwMDMpLEkoODU1LDEsSWgsQkIpLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLF9jdCksIiIpLCJVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uIiksKGpnKCksVDcpKSxBZSksdW4oKFhmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTGN0KSwic3RydWN0dXJlIiksIlN0cnVjdHVyZSBFeHRyYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgd2hhdCBraW5kIG9mIHRyaWFuZ3VsYXRpb24gb3Igb3RoZXIgcGFydGl0aW9uaW5nIG9mIHRoZSBwbGFuZSBpcyBhcHBsaWVkIHRvIHRoZSB2ZXJ0aWNlcy4iKSx1U3QpLGNzKSxwU3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdDh0KSxNY3QpLCJUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneSIpLCJXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4iKSxvU3QpLGNzKSx2U3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZTh0KSxNY3QpLCJDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlIiksIlRoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLiIpLGFTdCksY3MpLEpfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxTY3QpLE1jdCksIlJvb3Qgbm9kZSBmb3Igc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iKSwiVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUgdGhhdCBpcyBwcmVmZXJyZWQgYXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUuIElmIHRoaXMgaXMgbnVsbCwgdGhlIGZpcnN0IG5vZGUgaXMgY2hvc2VuLiIpLG51bGwpLFQ3KSxBZSksdW4ocW4pKSkpLGFhKGUsU2N0LEFjdCx5M2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxBY3QpLE1jdCksIlJvb3Qgc2VsZWN0aW9uIGZvciBzcGFubmluZyB0cmVlIiksIlRoaXMgc2V0cyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VsZWN0IGEgcm9vdCBub2RlIGZvciB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3Bhbm5pbmcgdHJlZSIpLHNTdCksY3MpLFlfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxuOHQpLFg2dCksIkNvbXBhY3Rpb24gU3RyYXRlZ3kiKSwiVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iKSxpU3QpLGNzKSxLX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscjh0KSxYNnQpLCJPcnRob2dvbmFsIENvbXBhY3Rpb24iKSwiUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuIiksKEZuKCksITEpKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaTh0KSwkMWUpLCJVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwiKSxudWxsKSxkZSg2NCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzOHQpLCQxZSksIldoZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLiIpLG51bGwpLCEwKSxBYSksQnMpLHVuKHFuKSkpKSxPdWUoKG5ldyBSQixlKSksU2xlKChuZXcgRkIsZSkpfTt2YXIgcDNlLGlTdCxiM2UsdjNlLHczZSxtM2UseTNlLHgzZSxzU3QsazNlLGFTdCxFM2Usb1N0LGNTdCx1U3QsbFN0O1AoX3ksIlNwb3JlTWV0YURhdGFQcm92aWRlciIsODU1KSxJKCRnLDEsSWgsUkIpLGwuUWU9ZnVuY3Rpb24oZSl7T3VlKGUpfTt2YXIgVDNlLGhTdCxmU3QsZFN0LEMzZSxnU3Q7UChfeSwiU3BvcmVPdmVybGFwUmVtb3ZhbE9wdGlvbnMiLCRnKSxJKDEwMDEsMSx7fSxjWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBfSHQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoX3ksIlNwb3JlT3ZlcmxhcFJlbW92YWxPcHRpb25zL1Nwb3JlT3ZlcmxhcEZhY3RvcnkiLDEwMDEpLEkoNTMwLDIyLHszOjEsMzU6MSwyMjoxLDUzMDoxLDI0NjoxLDIzNDoxfSxkWHQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gbHJlKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIGxyZSh0aGlzKX07dmFyIGpPLHBTdD1qcihfeSwiU3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5Iiw1MzAsSHIsY25uLEFKZSksXzNlO0koNDI5LDIyLHszOjEsMzU6MSwyMjoxLDQyOToxLDI0NjoxLDIzNDoxfSxVYnQpLGwuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gc2llKHRoaXMpfSxsLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHNpZSh0aGlzKX07dmFyIGJTdCxPVix2U3Q9anIoX3ksIlRyZWVDb25zdHJ1Y3Rpb25TdHJhdGVneSIsNDI5LEhyLFpubixMSmUpLFMzZTtJKDE0NDMsMSx6Yyx1WiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IEhzfSxsLnBmPWZ1bmN0aW9uKGUsbil7ejFuKHUoZSwzMDApLG4pfSxQKHoxZSwiRGVsYXVuYXlUcmlhbmd1bGF0aW9uUGhhc2UiLDE0NDMpLEkoMTQ0NCwxLFVuLFIkdCksbC50ZD1mdW5jdGlvbihlKXt1ZSh0aGlzLmEsdShlLDY1KS5hKX0sUCh6MWUsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDQpLEkoNzgzLDEsemMsR3B0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgSHN9LGwucGY9ZnVuY3Rpb24oZSxuKXt0aGlzLm5nKHUoZSwzMDApLG4pfSxsLm5nPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO3dyKG4sIk1pbmltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLGUuZD9zPWUuZC5hOnM9dShGZShlLmksMCksNjUpLmEsamUoUmUoUShlLChHOCgpLHVTKSkpKT9vPUNhdChlLmUscywocj1lLmIscikpOm89Q2F0KGUuZSxzLGUuYiksVm5lKHRoaXMsbyxlKSxvcihuKX0sUChJY3QsIk1pblNUUGhhc2UiLDc4MyksSSgxNDQ2LDc4Myx6YyxicXQpLGwubmc9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDt3cihuLCJNYXhpbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSxyPW5ldyBqJHQoZSksZS5kP289ZS5kLmM6bz11KEZlKGUuaSwwKSw2NSkuYyxqZShSZShRKGUsKEc4KCksdVMpKSkpP2g9Q2F0KGUuZSxvLChzPXIscykpOmg9Q2F0KGUuZSxvLHIpLFZuZSh0aGlzLGgsZSksb3Iobil9LFAoSWN0LCJNYXhTVFBoYXNlIiwxNDQ2KSxJKDE0NDcsMSx7fSxqJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIElZZSh0aGlzLmEsZSl9LFAoSWN0LCJNYXhTVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDcpLEkoMTQ0NSwxLFVuLCQkdCksbC50ZD1mdW5jdGlvbihlKXtrWGUodGhpcy5hLHUoZSw2NSkpfSxQKEljdCwiTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDQ1KSxJKDc4NSwxLHpjLFVGKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgSHN9LGwucGY9ZnVuY3Rpb24oZSxuKXt0MG4odGhpcyx1KGUsMzAwKSxuKX0sbC5hPSExLFAoRGN0LCJHcm93VHJlZVBoYXNlIiw3ODUpLEkoNzg2LDEsVW4seXZ0KSxsLnRkPWZ1bmN0aW9uKGUpe3Zjbih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LFAoRGN0LCJHcm93VHJlZVBoYXNlL2xhbWJkYSQwJFR5cGUiLDc4NiksSSgxNDQ4LDEsemMsbFopLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBIc30sbC5wZj1mdW5jdGlvbihlLG4pe3Vmbih0aGlzLHUoZSwzMDApLG4pfSxQKERjdCwiU2hyaW5rVHJlZUNvbXBhY3Rpb25QaGFzZSIsMTQ0OCksSSg3ODQsMSxVbix4dnQpLGwudGQ9ZnVuY3Rpb24oZSl7enBuKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHUoZSwyMjEpKX0sUChEY3QsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UvbGFtYmRhJDAkVHlwZSIsNzg0KTt2YXIgd1N0PVlpKEVjLCJJR3JhcGhFbGVtZW50VmlzaXRvciIpO0koODYwLDEsezUyNzoxfSxlWnQpLGwub2c9ZnVuY3Rpb24oZSl7dmFyIG47bj1Xdm4odGhpcyxlKSxMbyhuLHUoSm4odGhpcy5iLGUpLDk0KSksVmJuKHRoaXMsZSxuKX07dmFyIEEzZSxMM2U7UChTNCwiTGF5b3V0Q29uZmlndXJhdG9yIiw4NjApO3ZhciB3eG49WWkoUzQsIkxheW91dENvbmZpZ3VyYXRvci9JUHJvcGVydHlIb2xkZXJPcHRpb25GaWx0ZXIiKTtJKDkzMiwxLHsxOTMzOjF9LGhaKSxsLnBnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFF4KCksIWUuWGUobil9LFAoUzQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw5MzIpLEkoOTMzLDEsezE5MzM6MX0sZlopLGwucGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga0h0KGUsbil9LFAoUzQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw5MzMpLEkoOTMxLDEsezgzMToxfSxkWiksbC5xZz1mdW5jdGlvbihlLG4pe3JldHVybiBReCgpLCFlLlhlKG4pfSxQKFM0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDIkVHlwZSIsOTMxKSxJKDkzNCwxLHVpLGFWdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gV2VuKHRoaXMuYSx0aGlzLmIsdShlLDE5MzMpKX0sUChTNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQzJFR5cGUiLDkzNCksSSg4NTgsMSx7fSxnWiksUChTNCwiUmVjdXJzaXZlR3JhcGhMYXlvdXRFbmdpbmUiLDg1OCksSSgyOTYsNjAsVTAsVXp0LEYzKSxQKFM0LCJVbnN1cHBvcnRlZENvbmZpZ3VyYXRpb25FeGNlcHRpb24iLDI5NiksSSg0NTMsNjAsVTAsRjkpLFAoUzQsIlVuc3VwcG9ydGVkR3JhcGhFeGNlcHRpb24iLDQ1MyksSSg3NTQsMSx7fSksUChFYywiQWJzdHJhY3RSYW5kb21MaXN0QWNjZXNzb3IiLDc1NCksSSg1MDAsNzU0LHt9LGREKSxsLnJnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZD0hMCxsLmU9ITAsbC5mPTAsUCh6RSwiQWxnb3JpdGhtQXNzZW1ibGVyIiw1MDApLEkoMTIzNiwxLHVpLHBaKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiEhdShlLDEyMyl9LFAoekUsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMCRUeXBlIiwxMjM2KSxJKDEyMzcsMSx7fSx6JHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFhLZSh0aGlzLmEsdShlLDEyMykpfSxQKHpFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDEkVHlwZSIsMTIzNyksSSgxMjM4LDEsdWksYlopLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsODApfSxQKHpFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDIkVHlwZSIsMTIzOCksSSgxMjM5LDEsVW4scSR0KSxsLnRkPWZ1bmN0aW9uKGUpe1JsKHRoaXMuYSx1KGUsODApKX0sUCh6RSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQzJFR5cGUiLDEyMzkpLEkoMTI0MCwxLFVuLG9WdCksbC50ZD1mdW5jdGlvbihlKXt1UWUodGhpcy5hLHRoaXMuYix1KGUsMjM0KSl9LFAoekUsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkNCRUeXBlIiwxMjQwKSxJKDEzNTUsMSxPaSx2WiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBFbm4odShlLDIzNCksdShuLDIzNCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoekUsIkVudW1CYXNlZEZhY3RvcnlDb21wYXJhdG9yIiwxMzU1KSxJKDgwLDc1NCx7ODA6MX0sSHMpLGwucmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFzfSxsLmE9MCxQKHpFLCJMYXlvdXRQcm9jZXNzb3JDb25maWd1cmF0aW9uIiw4MCksSSgxMDEzLDEsezUyNzoxfSxZTCksbC5vZz1mdW5jdGlvbihlKXtVQyhJM2UsbmV3IEgkdChlKSl9O3ZhciBNM2UsSTNlLEQzZTtQKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIiLDEwMTMpLEkoMTAxNCwxLFVuLHdaKSxsLnRkPWZ1bmN0aW9uKGUpe2Zhbih1KGUsMTYwKSl9LFAoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlIiwxMDE0KSxJKDEwMTUsMSxVbixtWiksbC50ZD1mdW5jdGlvbihlKXtQbG4odShlLDE2MCkpfSxQKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTAxNSksSSgxMDE2LDEse30sSCR0KSxsLk9kPWZ1bmN0aW9uKGUsbil7bFFlKHRoaXMuYSx1KGUsMTQ2KSx1KG4sMzgpKX0sUChRbywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQyJFR5cGUiLDEwMTYpLEkoMTQ5LDEsezY4NjoxLDE0OToxfSx3MiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gb210KHRoaXMsZSl9LGwuc2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5jKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgQWxnb3JpdGhtOiAiK3RoaXMuY307dmFyIG14bj1QKFFvLCJMYXlvdXRBbGdvcml0aG1EYXRhIiwxNDkpO0koMjYzLDEse30scGcpLFAoUW8sIkxheW91dEFsZ29yaXRobURhdGEvQnVpbGRlciIsMjYzKSxJKDEwMTcsMSx7NTI3OjF9LHlaKSxsLm9nPWZ1bmN0aW9uKGUpe0V0KGUsMjM5KSYmIWplKFJlKGUuV2UoKGNpKCksJFYpKSkpJiZNbW4odShlLDMzKSl9LFAoUW8sIkxheW91dEFsZ29yaXRobVJlc29sdmVyIiwxMDE3KSxJKDIyOSwxLHs2ODY6MSwyMjk6MX0sengpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMjI5KT9obih0aGlzLmIsdShlLDIyOSkuYik6ITF9LGwuc2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgVHlwZTogIit0aGlzLmJ9LFAoUW8sIkxheW91dENhdGVnb3J5RGF0YSIsMjI5KSxJKDM0NCwxLHt9LHdtKSxQKFFvLCJMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlciIsMzQ0KSxJKDg2NywxLHt9LGt1ZSk7dmFyIFhodDtQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UiLDg2NyksSSg4NjgsMSx7fSxKWXQpLFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeSIsODY4KSxJKDQ3OCwxLHs0Nzg6MX0sV0YpLFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUiLDQ3OCksSSg4NjksMSxENCx4WiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgVGF9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMCRUeXBlIiw4NjkpLEkoODcwLDEsU3ksa1opLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5jKHUoZSw4KSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMSRUeXBlIiw4NzApLEkoODc5LDEsRDQsRVopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxlfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEwJFR5cGUiLDg3OSksSSg4ODAsMSxTeSxUWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFB1KHUoZSwxMikpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDExJFR5cGUiLDg4MCksSSg4ODEsMSxENCxDWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgUWl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTIkVHlwZSIsODgxKSxJKDg4MiwxLFN5LF9aKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBVTSh1KGUsNjgpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMyRUeXBlIiw4ODIpLEkoODgzLDEsRDQsU1opLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFzfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE0JFR5cGUiLDg4MyksSSg4ODQsMSxTeSxBWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gcyQodShlLDUzKSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTUkVHlwZSIsODg0KSxJKDg4NSwxLEQ0LExaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBMH0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNiRUeXBlIiw4ODUpLEkoODg2LDEsU3ksQWMpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIEUkKHUoZSw1MykpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE3JFR5cGUiLDg4NiksSSg4ODcsMSxENCxNWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXB0fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE4JFR5cGUiLDg4NyksSSg4ODgsMSxTeSxLVCksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gU0t0KHUoZSwyMDgpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxOSRUeXBlIiw4ODgpLEkoODcxLDEsRDQsdGMpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IER1fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDIkVHlwZSIsODcxKSxJKDg3MiwxLFN5LEtjKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeVIodShlLDc0KSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMyRUeXBlIiw4NzIpLEkoODczLDEsRDQsemkpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE05fSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDQkVHlwZSIsODczKSxJKDg3NCwxLFN5LEZMKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd250KHUoZSwxNDIpKX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ1JFR5cGUiLDg3NCksSSg4NzUsMSxENCxEWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgd3h9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlIiw4NzUpLEkoODc2LDEsU3ksT1opLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwdnQodShlLDExNikpfSxQKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDckVHlwZSIsODc2KSxJKDg3NywxLEQ0LFo1KSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXdX0sUChRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ4JFR5cGUiLDg3NyksSSg4NzgsMSxTeSxtbSksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3ICR0ZSh1KGUsMzczKSl9LFAoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOSRUeXBlIiw4NzgpO3ZhciBRaHQ9WWkoQkQsIklQcm9wZXJ0eSIpO0koMjMsMSx7MzU6MSw2ODY6MSwyMzoxLDE0NjoxfSxYZSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gUFhlKHRoaXMsdShlLDE0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIzKT9obih0aGlzLmYsdShlLDIzKS5mKTpFdChlLDE0NikmJmhuKHRoaXMuZix1KGUsMTQ2KS50ZygpKX0sbC53Zz1mdW5jdGlvbigpe3ZhciBlO2lmKEV0KHRoaXMuYiw0KSl7aWYoZT1fM3QodGhpcy5iKSxlPT1udWxsKXRocm93IHJ0KG5ldyBGbyhHMWUrdGhpcy5mKyInLiBNYWtlIHN1cmUgaXQncyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIisoTDAodU4pLHVOLmspK2E4dCkpO3JldHVybiBlfWVsc2UgcmV0dXJuIHRoaXMuYn0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCZyh0aGlzLmYpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBPcHRpb246ICIrdGhpcy5mfSxQKFFvLCJMYXlvdXRPcHRpb25EYXRhIiwyMyksSSgyNCwxLHt9LFVlKSxQKFFvLCJMYXlvdXRPcHRpb25EYXRhL0J1aWxkZXIiLDI0KSxJKDE3NSwyMix7MzoxLDM1OjEsMjI6MSwxNzU6MX0sQU0pO3ZhciBJZCxYZyxKcyxxbiwkMixRZz1qcihRbywiTGF5b3V0T3B0aW9uRGF0YS9UYXJnZXQiLDE3NSxIcixtc24sTUplKSxPM2U7SSgyNzcsMjIsezM6MSwzNToxLDIyOjEsMjc3OjF9LF94KTt2YXIgQWEsRG8sY3MsajYsZ2MscTEsVDcsbVN0LE4zZT1qcihRbywiTGF5b3V0T3B0aW9uRGF0YS9UeXBlIiwyNzcsSHIsWGFuLElKZSksUDNlLEdTLHlTdDtJKDExMCwxLHsxMTA6MX0sQXgsaWgsbyQpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PW51bGx8fCFFdChlLDExMCk/ITE6KG49dShlLDExMCksUGModGhpcy5jLG4uYykmJlBjKHRoaXMuZCxuLmQpJiZQYyh0aGlzLmIsbi5iKSYmUGModGhpcy5hLG4uYSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHZ6KGN0KG90KFhuLDEpLEllLDEsNSxbdGhpcy5jLHRoaXMuZCx0aGlzLmIsdGhpcy5hXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlJlY3RbeD0iK3RoaXMuYysiLHk9Iit0aGlzLmQrIix3PSIrdGhpcy5iKyIsaD0iK3RoaXMuYSsiXSJ9LGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLFAocUQsIkVsa1JlY3RhbmdsZSIsMTEwKSxJKDgsMSx7MzoxLDQ6MSw4OjEsNDE0OjF9LFRhLGJydCwkZSx5byksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWWVlKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gbzgodGhpcy5hKStGZm4obzgodGhpcy5iKSl9LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MDtzPGUubGVuZ3RoJiZMcmUoKFJyKHMsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChzKSksWWZlKTspKytzO2ZvcihuPWUubGVuZ3RoO24+MCYmTHJlKChScihuLTEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuLTEpKSxYZmUpOyktLW47aWYocz49bil0aHJvdyBydChuZXcgUG4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgbnVtYmVycy4iKSk7aWYobz1weShlLnN1YnN0cihzLG4tcyksYCx8O3xccnwKYCksby5sZW5ndGghPTIpdGhyb3cgcnQobmV3IFBuKCJFeGFjdGx5IHR3byBudW1iZXJzIGFyZSBleHBlY3RlZCwgIitvLmxlbmd0aCsiIHdlcmUgZm91bmQuIikpO3RyeXt0aGlzLmE9bHkodXkob1swXSkpLHRoaXMuYj1seSh1eShvWzFdKSl9Y2F0Y2goaCl7dGhyb3cgaD1XaShoKSxFdChoLDEyNyk/KHI9aCxydChuZXcgUG4oUWZlK3IpKSk6cnQoaCl9fSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYSsiLCIrdGhpcy5iKyIpIn0sbC5hPTAsbC5iPTA7dmFyIFVzPVAocUQsIktWZWN0b3IiLDgpO0koNzQsNjgsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw2ODoxLDE1OjEsNzQ6MSw0MTQ6MX0sRHUseVIsZFd0KSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGV1bih0aGlzKX0sbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQ7cz1weShlLGAsfDt8XFwofFxcKXxcXFt8XFxdfFxce3xcXH18IHwJfApgKSxfaCh0aGlzKTt0cnl7Zm9yKHI9MCxoPTAsbz0wLGQ9MDtyPHMubGVuZ3RoOylzW3JdIT1udWxsJiZ1eShzW3JdKS5sZW5ndGg+MCYmKGglMj09MD9vPWx5KHNbcl0pOmQ9bHkoc1tyXSksaD4wJiZoJTIhPTAmJm5pKHRoaXMsbmV3ICRlKG8sZCkpLCsraCksKytyfWNhdGNoKHcpe3Rocm93IHc9V2kodyksRXQodywxMjcpPyhuPXcscnQobmV3IFBuKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQgZm9yIHZlY3RvcnMuIituKSkpOnJ0KHcpfX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtmb3IoZT1uZXcgSWwoIigiKSxuPWVpKHRoaXMsMCk7bi5iIT1uLmQuYzspcj11KHRpKG4pLDgpLFZyKGUsci5hKyIsIityLmIpLG4uYiE9bi5kLmMmJihlLmErPSI7ICIpO3JldHVybihlLmErPSIpIixlKS5hfTt2YXIgeFN0PVAocUQsIktWZWN0b3JDaGFpbiIsNzQpO0koMjQ4LDIyLHszOjEsMzU6MSwyMjoxLDI0ODoxfSxlQyk7dmFyIFpodCxOVixQViwkTyx6TyxGVixrU3Q9anIoT2gsIkFsaWdubWVudCIsMjQ4LEhyLFlzbixESmUpLEYzZTtJKDk3OSwxLEloLHR0dCksbC5RZT1mdW5jdGlvbihlKXtXdWUoZSl9O3ZhciBFU3QsSmh0LEIzZSxUU3QsQ1N0LFIzZSxfU3QsajNlLCQzZSxTU3QsQVN0LHozZTtQKE9oLCJCb3hMYXlvdXRlck9wdGlvbnMiLDk3OSksSSg5ODAsMSx7fSxJWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBCWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChPaCwiQm94TGF5b3V0ZXJPcHRpb25zL0JveEZhY3RvcnkiLDk4MCksSSgyOTEsMjIsezM6MSwzNToxLDIyOjEsMjkxOjF9LG5DKTt2YXIgcU8sdGZ0LEhPLEdPLFZPLGVmdCxuZnQ9anIoT2gsIkNvbnRlbnRBbGlnbm1lbnQiLDI5MSxIcixLc24sT0plKSxxM2U7SSg2ODQsMSxJaCx5cCksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVTFlKSwiIiksIkxheW91dCBBbGdvcml0aG0iKSwiU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4iKSwoamcoKSxUNykpLEFlKSx1bigoWGYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxXMWUpLCIiKSwiUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobSIpLCJNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uIikscTEpLG14biksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxna3QpLCIiKSwiQWxpZ25tZW50IiksIkFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uIiksTFN0KSxjcyksa1N0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGI2KSwiIiksIkFzcGVjdCBSYXRpbyIpLCJUaGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRyYXdpbmcsIHRoYXQgaXMgdGhlIHF1b3RpZW50IG9mIHdpZHRoIGJ5IGhlaWdodC4iKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsYzh0KSwiIiksIkJlbmQgUG9pbnRzIiksIkEgZml4ZWQgbGlzdCBvZiBiZW5kIHBvaW50cyBmb3IgdGhlIGVkZ2UuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCByb3V0aW5nIGZvciBhbiBlZGdlLiBUaGUgdmVjdG9yIGNoYWluIG11c3QgaW5jbHVkZSB0aGUgc291cmNlIHBvaW50LCBhbnkgYmVuZCBwb2ludHMsIGFuZCB0aGUgdGFyZ2V0IHBvaW50LCBzbyBpdCBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHBvaW50cy4iKSxxMSkseFN0KSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGNIKSwiIiksIkNvbnRlbnQgQWxpZ25tZW50IiksIlNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgb2YgYSBub2RlIGFyZSBhbGlnbmVkLiBFYWNoIG5vZGUgY2FuIGluZGl2aWR1YWxseSBjb250cm9sIHRoZSBhbGlnbm1lbnQgb2YgaXRzIGNvbnRlbnRzLiBJLmUuIGlmIGEgbm9kZSBzaG91bGQgYmUgYWxpZ25lZCB0b3AgbGVmdCBpbiBpdHMgcGFyZW50IG5vZGUsIHRoZSBwYXJlbnQgbm9kZSBzaG91bGQgc3BlY2lmeSB0aGF0IG9wdGlvbi4iKSxJU3QpLGo2KSxuZnQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsS0QpLCIiKSwiRGVidWcgTW9kZSIpLCJXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiIpLChGbigpLCExKSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHZrdCksIiIpLFF4dCksIk92ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLiIpLERTdCksY3MpLFdTKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFVEKSwiIiksIkVkZ2UgUm91dGluZyIpLCJXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuIiksUFN0KSxjcykscGZ0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGdIKSwiIiksIkV4cGFuZCBOb2RlcyIpLCJJZiBhY3RpdmUsIG5vZGVzIGFyZSBleHBhbmRlZCB0byBmaWxsIHRoZSBhcmVhIG9mIHRoZWlyIHBhcmVudC4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG9IKSwiIiksIkhpZXJhcmNoeSBIYW5kbGluZyIpLCJEZXRlcm1pbmVzIHdoZXRoZXIgc2VwYXJhdGUgbGF5b3V0IHJ1bnMgYXJlIHRyaWdnZXJlZCBmb3IgZGlmZmVyZW50IGNvbXBvdW5kIG5vZGVzIGluIGEgaGllcmFyY2hpY2FsIGdyYXBoLiBTZXR0aW5nIGEgbm9kZSdzIGhpZXJhcmNoeSBoYW5kbGluZyB0byBgSU5DTFVERV9DSElMRFJFTmAgd2lsbCBsYXkgb3V0IHRoYXQgbm9kZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuLCB1bnRpbCBhIGRlc2NlbmRhbnQgaXMgZW5jb3VudGVyZWQgd2hpY2ggaGFzIGl0cyBoaWVyYXJjaHkgaGFuZGxpbmcgc2V0IHRvIGBTRVBBUkFURV9DSElMRFJFTmAuIEluIGdlbmVyYWwsIGBTRVBBUkFURV9DSElMRFJFTmAgd2lsbCBlbnN1cmUgdGhhdCBhIG5ldyBsYXlvdXQgcnVuIGlzIHRyaWdnZXJlZCBmb3IgYSBub2RlIHdpdGggdGhhdCBzZXR0aW5nLiBJbmNsdWRpbmcgbXVsdGlwbGUgbGV2ZWxzIG9mIGhpZXJhcmNoeSBpbiBhIHNpbmdsZSBsYXlvdXQgcnVuIG1heSBhbGxvdyBjcm9zcy1oaWVyYXJjaGljYWwgZWRnZXMgdG8gYmUgbGFpZCBvdXQgcHJvcGVybHkuIElmIHRoZSByb290IG5vZGUgaXMgc2V0IHRvIGBJTkhFUklUYCAob3Igbm90IHNldCBhdCBhbGwpLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyBgU0VQQVJBVEVfQ0hJTERSRU5gLiIpLGpTdCksY3MpLFRBdCksamkocW4sY3Qob3QoUWcsMSksYWUsMTc1LDAsW0pzXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx3dyksIiIpLCJQYWRkaW5nIiksIlRoZSBwYWRkaW5nIHRvIGJlIGxlZnQgdG8gYSBwYXJlbnQgZWxlbWVudCdzIGJvcmRlciB3aGVuIHBsYWNpbmcgY2hpbGQgZWxlbWVudHMuIFRoaXMgY2FuIGFsc28gc2VydmUgYXMgYW4gb3V0cHV0IG9wdGlvbiBvZiBhIGxheW91dCBhbGdvcml0aG0gaWYgbm9kZSBzaXplIGNhbGN1bGF0aW9uIGlzIHNldHVwIGFwcHJvcHJpYXRlbHkuIiksWVN0KSxxMSksTTd0KSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSnNdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCREKSwiIiksIkludGVyYWN0aXZlIiksIldoZXRoZXIgdGhlIGFsZ29yaXRobSBzaG91bGQgYmUgcnVuIGluIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIFdoYXQgdGhpcyBtZWFucyBleGFjdGx5IGRlcGVuZHMgb24gaG93IHRoZSBzcGVjaWZpYyBhbGdvcml0aG0gaW50ZXJwcmV0cyB0aGlzIG9wdGlvbi4gVXN1YWxseSBpbiB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbGdvcml0aG1zIHRyeSB0byBtb2RpZnkgdGhlIGN1cnJlbnQgbGF5b3V0IGFzIGxpdHRsZSBhcyBwb3NzaWJsZS4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBjdCksIiIpLCJpbnRlcmFjdGl2ZSBMYXlvdXQiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hvdWxkIGJlIGNoYW5nZWFibGUgaW50ZXJhY3RpdmVseSBhbmQgYnkgc2V0dGluZyBjb25zdHJhaW50cyIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRl8pLCIiKSwiT21pdCBOb2RlIE1pY3JvIExheW91dCIpLCJOb2RlIG1pY3JvIGxheW91dCBjb21wcmlzZXMgdGhlIGNvbXB1dGF0aW9uIG9mIG5vZGUgZGltZW5zaW9ucyAoaWYgcmVxdWVzdGVkKSwgdGhlIHBsYWNlbWVudCBvZiBwb3J0cyBhbmQgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIHBsYWNlbWVudCBvZiBub2RlIGxhYmVscy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHNob3VsZG4ndCBoYXZlIGFueSBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIGxheW91dCBhbGdvcml0aG0ncyBwZXJmb3JtYW5jZSBpdHNlbGYuIFlldCwgaWYgYW55IHVuZm9yZXNlZW4gYmVoYXZpb3Igb2NjdXJzLCB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gZGVhY3RpdmF0ZSB0aGUgbWljcm8gbGF5b3V0LiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTm90KSwiIiksIlBvcnQgQ29uc3RyYWludHMiKSwiRGVmaW5lcyBjb25zdHJhaW50cyBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcnRzIG9mIGEgbm9kZS4iKSx0QXQpLGNzKSxTQXQpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsdUgpLCIiKSwiUG9zaXRpb24iKSwiVGhlIHBvc2l0aW9uIG9mIGEgbm9kZSwgcG9ydCwgb3IgbGFiZWwuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCBwb3NpdGlvbi4iKSxxMSksVXMpLGppKEpzLGN0KG90KFFnLDEpLGFlLDE3NSwwLFskMixYZ10pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsakQpLCIiKSwiUHJpb3JpdHkiKSwiRGVmaW5lcyB0aGUgcHJpb3JpdHkgb2YgYW4gb2JqZWN0OyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCB0aGUgY29udGV4dCB3aGVyZSBpdCBpcyB1c2VkLiIpLGdjKSxqYSksamkoSnMsY3Qob3QoUWcsMSksYWUsMTc1LDAsW0lkXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxIcSksIiIpLCJSYW5kb21pemF0aW9uIFNlZWQiKSwiU2VlZCB1c2VkIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHRvIGNvbnRyb2wgdGhlIGxheW91dCBhbGdvcml0aG0uIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgc2VlZCBzaGFsbCBiZSBkZXRlcm1pbmVkIHBzZXVkby1yYW5kb21seSAoZS5nLiBmcm9tIHRoZSBzeXN0ZW0gdGltZSkuIiksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFBfKSwiIiksIlNlcGFyYXRlIENvbm5lY3RlZCBDb21wb25lbnRzIiksIldoZXRoZXIgZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwYXJhdGVseS4iKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2t0KSwiIiksIkp1bmN0aW9uIFBvaW50cyIpLCJUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuIikselN0KSxxMSkseFN0KSx1bihJZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLExrdCksIiIpLCJDb21tZW50IEJveCIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIGNvbW1lbnQgYm94IGluc3RlYWQgb2YgYSByZWd1bGFyIG5vZGUuIEluIHRoYXQgY2FzZSBpdHMgcGxhY2VtZW50IHNob3VsZCBiZSBzaW1pbGFyIHRvIGhvdyBsYWJlbHMgYXJlIGhhbmRsZWQuIEFueSBlZGdlcyBpbmNpZGVudCB0byBhIGNvbW1lbnQgYm94IHNwZWNpZnkgdG8gd2hpY2ggZ3JhcGggZWxlbWVudHMgdGhlIGNvbW1lbnQgaXMgcmVsYXRlZC4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE1rdCksIiIpLCJIeXBlcm5vZGUiKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFc1biksIiIpLCJMYWJlbCBNYW5hZ2VyIiksIkxhYmVsIG1hbmFnZXJzIGNhbiBzaG9ydGVuIGxhYmVscyB1cG9uIGEgbGF5b3V0IGFsZ29yaXRobSdzIHJlcXVlc3QuIikscTEpLFR4biksamkocW4sY3Qob3QoUWcsMSksYWUsMTc1LDAsW1hnXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxEa3QpLCIiKSwiTWFyZ2lucyIpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIikscVN0KSxxMSksTDd0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGZrdCksIiIpLCJObyBMYXlvdXQiKSwiTm8gbGF5b3V0IGlzIGRvbmUgZm9yIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBtYXJrIHBhcnRzIG9mIGEgZGlhZ3JhbSB0byBhdm9pZCB0aGVpciBpbmNsdXNpb24gaW4gdGhlIGxheW91dCBncmFwaCwgb3IgdG8gbWFyayBwYXJ0cyBvZiB0aGUgbGF5b3V0IGdyYXBoIHRvIHByZXZlbnQgbGF5b3V0IGVuZ2luZXMgZnJvbSBwcm9jZXNzaW5nIHRoZW0uIElmIHlvdSB3aXNoIHRvIGV4Y2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGEgY29tcG91bmQgbm9kZSBmcm9tIGF1dG9tYXRpYyBsYXlvdXQsIHdoaWxlIHRoZSBub2RlIGl0c2VsZiBpcyBzdGlsbCBjb25zaWRlcmVkIG9uIGl0cyBvd24gbGF5ZXIsIHVzZSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIGZvciB0aGF0IG5vZGUuIiksITEpLEFhKSxCcyksamkoSnMsY3Qob3QoUWcsMSksYWUsMTc1LDAsW0lkLCQyLFhnXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLMWUpLCIiKSwiU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC4iKSwxKSxEbyksY2EpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWTFlKSwiIiksIkFuaW1hdGUiKSwiV2hldGhlciB0aGUgc2hpZnQgZnJvbSB0aGUgb2xkIGxheW91dCB0byB0aGUgbmV3IGNvbXB1dGVkIGxheW91dCBzaGFsbCBiZSBhbmltYXRlZC4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFgxZSksIiIpLCJBbmltYXRpb24gVGltZSBGYWN0b3IiKSwiRmFjdG9yIGZvciBjb21wdXRhdGlvbiBvZiBhbmltYXRpb24gdGltZS4gVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBsb25nZXIgdGhlIGFuaW1hdGlvbiB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgMCwgdGhlIHJlc3VsdGluZyB0aW1lIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWluaW11bSBkZWZpbmVkIGJ5ICdNaW5pbWFsIEFuaW1hdGlvbiBUaW1lJy4iKSxkZSgxMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUTFlKSwiIiksIkxheW91dCBBbmNlc3RvcnMiKSwiV2hldGhlciB0aGUgaGllcmFyY2h5IGxldmVscyBvbiB0aGUgcGF0aCBmcm9tIHRoZSBzZWxlY3RlZCBlbGVtZW50IHRvIHRoZSByb290IG9mIHRoZSBkaWFncmFtIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsYXlvdXQgcHJvY2Vzcy4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFoxZSksIiIpLCJNYXhpbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtYXhpbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxkZSg0ZTMpKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSjFlKSwiIiksIk1pbmltYWwgQW5pbWF0aW9uIFRpbWUiKSwiVGhlIG1pbmltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLiIpLGRlKDQwMCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0ZGUpLCIiKSwiUHJvZ3Jlc3MgQmFyIiksIldoZXRoZXIgYSBwcm9ncmVzcyBiYXIgc2hhbGwgYmUgZGlzcGxheWVkIGR1cmluZyBsYXlvdXQgY29tcHV0YXRpb25zLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWRlKSwiIiksIlZhbGlkYXRlIEdyYXBoIiksIldoZXRoZXIgdGhlIGdyYXBoIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLiIpLCExKSxBYSksQnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbmRlKSwiIiksIlZhbGlkYXRlIE9wdGlvbnMiKSwiV2hldGhlciBsYXlvdXQgb3B0aW9ucyBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMCksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJkZSksIiIpLCJab29tIHRvIEZpdCIpLCJXaGV0aGVyIHRoZSB6b29tIGxldmVsIHNoYWxsIGJlIHNldCB0byB2aWV3IHRoZSB3aG9sZSBkaWFncmFtIGFmdGVyIGxheW91dC4iKSwhMSksQWEpLEJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG84dCksImJveCIpLCJCb3ggTGF5b3V0IE1vZGUiKSwiQ29uZmlndXJlcyB0aGUgcGFja2luZyBtb2RlIHVzZWQgYnkgdGhlIHtAbGluayBCb3hMYXlvdXRQcm92aWRlcn0uIElmIFNJTVBMRSBpcyBub3QgcmVxdWlyZWQgKG5laXRoZXIgcHJpb3JpdGllcyBhcmUgdXNlZCBub3IgdGhlIGludGVyYWN0aXZlIG1vZGUpLCBHUk9VUF9ERUMgY2FuIGltcHJvdmUgdGhlIHBhY2tpbmcgYW5kIGRlY3JlYXNlIHRoZSBhcmVhLiBHUk9VUF9NSVhFRCBhbmQgR1JPVVBfSU5DIG1heSwgaW4gdmVyeSBzcGVjaWZpYyBzY2VuYXJpb3MsIHdvcmsgYmV0dGVyLiIpLE1TdCksY3MpLE9BdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0a3QpLEYxKSwiQ29tbWVudCBDb21tZW50IFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGNvbW1lbnQgYm94IGFuZCBvdGhlciBjb21tZW50IGJveGVzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGNvbW1lbnQgYm94ZXMgb2YgZGlmZmVyZW50IG5vZGVzIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZWt0KSxGMSksIkNvbW1lbnQgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgY29ubmVjdGVkIGNvbW1lbnQgYm94ZXMuIFRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gYSBub2RlIGFuZCB0aGUgY29tbWVudHMgb2YgYW5vdGhlciBub2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIG5vZGUtbm9kZSBzcGFjaW5nLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQW90KSxGMSksIkNvbXBvbmVudHMgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGNvbm5lY3RlZCBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGlmICdzZXBhcmF0ZUNvbm5lY3RlZENvbXBvbmVudHMnIGlzIGFjdGl2YXRlZC4iKSwyMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5rdCksRjEpLCJFZGdlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhbnkgdHdvIGVkZ2VzLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyBjYW4gc29tZXdoYXQgZWFzaWx5IGJlIHNhdGlzZmllZCBmb3IgdGhlIHNlZ21lbnRzIG9mIG9ydGhvZ29uYWxseSBkcmF3biBlZGdlcywgaXQgaXMgaGFyZGVyIGZvciBnZW5lcmFsIHBvbHlsaW5lcyBvciBzcGxpbmVzLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsT290KSxGMSksIkVkZ2UgTGFiZWwgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIGxhYmVsIGFuZCB0aGUgZWRnZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ2VkZ2VsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMiksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHJrdCksRjEpLCJFZGdlIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcy4iKSwxMCksRG8pLGNhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGlrdCksRjEpLCJMYWJlbCBTcGFjaW5nIiksIkRldGVybWluZXMgdGhlIGFtb3VudCBvZiBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gdHdvIGxhYmVscyBvZiB0aGUgc2FtZSBncmFwaCBlbGVtZW50LiIpLDApLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxva3QpLEYxKSwiTGFiZWwgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgYm9yZGVyIG9mIG5vZGUgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdub2RlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDUpLERvKSxjYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxza3QpLEYxKSwiSG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiSG9yaXpvbnRhbCBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIHBvcnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAncG9ydGxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwxKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYWt0KSxGMSksIlZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBMYWJlbCBhbmQgUG9ydCIpLCJWZXJ0aWNhbCBzcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIHBvcnRzIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAncG9ydGxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwxKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsa3kpLEYxKSwiTm9kZSBTcGFjaW5nIiksIlRoZSBtaW5pbWFsIGRpc3RhbmNlIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGVhY2ggdHdvIG5vZGVzLiIpLDIwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsY2t0KSxGMSksIk5vZGUgU2VsZiBMb29wIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIG5vZGUgYW5kIGl0cyBzZWxmIGxvb3BzLiIpLDEwKSxEbyksY2EpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdWt0KSxGMSksIlBvcnQgU3BhY2luZyIpLCJTcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgcG9ydHMgb2YgdGhlIHNhbWUgbm9kZS4iKSwxMCksRG8pLGNhKSxqaShxbixjdChvdChRZywxKSxhZSwxNzUsMCxbSnNdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGxrdCksRjEpLCJJbmRpdmlkdWFsIFNwYWNpbmciKSwiQWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzcGFjaW5nIHZhbHVlcyBmb3IgZ3JhcGggZWxlbWVudHMgdGhhdCBzaGFsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgZWxlbWVudCdzIHBhcmVudC4iKSxxMSksRTRlKSxqaShKcyxjdChvdChRZywxKSxhZSwxNzUsMCxbSWQsJDIsWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE9rdCksRjEpLCJBZGRpdGlvbmFsIFBvcnQgU3BhY2UiKSwiQWRkaXRpb25hbCBzcGFjZSBhcm91bmQgdGhlIHNldHMgb2YgcG9ydHMgb24gZWFjaCBub2RlIHNpZGUuIEZvciBlYWNoIHNpZGUgb2YgYSBub2RlLCB0aGlzIG9wdGlvbiBjYW4gcmVzZXJ2ZSBhZGRpdGlvbmFsIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvcnRzIG9uIGVhY2ggc2lkZS4gRm9yIGV4YW1wbGUsIGEgdG9wIHNwYWNpbmcgb2YgMjAgbWFrZXMgc3VyZSB0aGF0IHRoZSBmaXJzdCBwb3J0IG9uIHRoZSB3ZXN0ZXJuIGFuZCBlYXN0ZXJuIHNpZGUgaXMgMjAgdW5pdHMgYXdheSBmcm9tIHRoZSBub3J0aGVybiBib3JkZXIuIiksbEF0KSxxMSksTDd0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGdjdCksYWRlKSwiTGF5b3V0IFBhcnRpdGlvbiIpLCJQYXJ0aXRpb24gdG8gd2hpY2ggdGhlIG5vZGUgYmVsb25ncy4gVGhpcyByZXF1aXJlcyBMYXlvdXQgUGFydGl0aW9uaW5nIHRvIGJlIGFjdGl2ZS4gTm9kZXMgd2l0aCBsb3dlciBwYXJ0aXRpb24gSURzIHdpbGwgYXBwZWFyIHRvIHRoZSBsZWZ0IG9mIG5vZGVzIHdpdGggaGlnaGVyIHBhcnRpdGlvbiBJRHMgKGFzc3VtaW5nIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uKS4iKSxnYyksamEpLGppKHFuLGN0KG90KFFnLDEpLGFlLDE3NSwwLFtKc10pKSkpKSxhYShlLGdjdCxkY3QsWDNlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGN0KSxhZGUpLCJMYXlvdXQgUGFydGl0aW9uaW5nIiksIldoZXRoZXIgdG8gYWN0aXZhdGUgcGFydGl0aW9uZWQgbGF5b3V0LiBUaGlzIHdpbGwgYWxsb3cgdG8gZ3JvdXAgbm9kZXMgdGhyb3VnaCB0aGUgTGF5b3V0IFBhcnRpdGlvbiBvcHRpb24uIGEgcGFpciBvZiBub2RlcyB3aXRoIGRpZmZlcmVudCBwYXJ0aXRpb24gaW5kaWNlcyBpcyB0aGVuIHBsYWNlZCBzdWNoIHRoYXQgdGhlIG5vZGUgd2l0aCBsb3dlciBpbmRleCBpcyBwbGFjZWQgdG8gdGhlIGxlZnQgb2YgdGhlIG90aGVyIG5vZGUgKHdpdGggbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uKS4gRGVwZW5kaW5nIG9uIHRoZSBsYXlvdXQgYWxnb3JpdGhtLCB0aGlzIG1heSBvbmx5IGJlIGd1YXJhbnRlZWQgdG8gd29yayBpZiBhbGwgbm9kZXMgaGF2ZSBhIGxheW91dCBwYXJ0aXRpb24gY29uZmlndXJlZCwgb3IgYXQgbGVhc3QgaWYgZWRnZXMgdGhhdCBjcm9zcyBwYXJ0aXRpb25zIGFyZSBub3QgcGFydCBvZiBhIHBhcnRpdGlvbi1jcm9zc2luZyBjeWNsZS4iKSxYU3QpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx3a3QpLG9kZSksIk5vZGUgTGFiZWwgUGFkZGluZyIpLCJEZWZpbmUgcGFkZGluZyBmb3Igbm9kZSBsYWJlbHMgdGhhdCBhcmUgcGxhY2VkIGluc2lkZSBvZiBhIG5vZGUuIiksR1N0KSxxMSksTTd0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFJFKSxvZGUpLCJOb2RlIExhYmVsIFBsYWNlbWVudCIpLCJIaW50cyBmb3Igd2hlcmUgbm9kZSBsYWJlbHMgYXJlIHRvIGJlIHBsYWNlZDsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLFZTdCksajYpLGxvKSxqaShKcyxjdChvdChRZywxKSxhZSwxNzUsMCxbWGddKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHhrdCksYkgpLCJQb3J0IEFsaWdubWVudCIpLCJEZWZpbmVzIHRoZSBkZWZhdWx0IHBvcnQgZGlzdHJpYnV0aW9uIGZvciBhIG5vZGUuIE1heSBiZSBvdmVycmlkZGVuIGZvciBlYWNoIHNpZGUgaW5kaXZpZHVhbGx5LiIpLFpTdCksY3MpLFFTKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGtrdCksYkgpLCJQb3J0IEFsaWdubWVudCAoTm9ydGgpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBub3J0aGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLGNzKSxRUyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxFa3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQgKFNvdXRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgc291dGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxjcyksUVMpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVGt0KSxiSCksIlBvcnQgQWxpZ25tZW50IChXZXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgd2VzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLGNzKSxRUyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxDa3QpLGJIKSwiUG9ydCBBbGlnbm1lbnQgKEVhc3QpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBlYXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksY3MpLFFTKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw0KSxOY3QpLCJOb2RlIFNpemUgQ29uc3RyYWludHMiKSwiV2hhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgYSBub2RlJ3Mgc2l6ZS4gRW1wdHkgc2l6ZSBjb25zdHJhaW50cyBzcGVjaWZ5IHRoYXQgYSBub2RlJ3Mgc2l6ZSBpcyBhbHJlYWR5IGZpeGVkIGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuIiksVVN0KSxqNiksdEEpLHVuKEpzKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdjYpLE5jdCksIk5vZGUgU2l6ZSBPcHRpb25zIiksIk9wdGlvbnMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc2l6ZSBjb25zdHJhaW50cyBzZXQgb24gYSBub2RlLiBFYWNoIG1lbWJlciBvZiB0aGUgc2V0IHNwZWNpZmllcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBzaXplcy4gVGhlIGVtcHR5IHNldCBjb3JyZXNwb25kcyB0byBubyBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuIiksS1N0KSxqNiksTEF0KSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHc2KSxOY3QpLCJOb2RlIFNpemUgTWluaW11bSIpLCJUaGUgbWluaW1hbCBzaXplIHRvIHdoaWNoIGEgbm9kZSBjYW4gYmUgcmVkdWNlZC4iKSxXU3QpLHExKSxVcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmY3QpLE5jdCksIkZpeGVkIEdyYXBoIFNpemUiKSwiQnkgZGVmYXVsdCwgdGhlIGZpeGVkIGxheW91dCBwcm92aWRlciB3aWxsIGVubGFyZ2UgYSBncmFwaCB1bnRpbCBpdCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBpdHMgY2hpbGRyZW4uIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgd29uJ3QgZG8gc28uIiksITEpLEFhKSxCcyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxTa3QpLGhjdCksIkVkZ2UgTGFiZWwgUGxhY2VtZW50IiksIkdpdmVzIGEgaGludCBvbiB3aGVyZSB0byBwdXQgZWRnZSBsYWJlbHMuIiksT1N0KSxjcyksZkF0KSx1bihYZykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEdxKSxoY3QpLCJJbmxpbmUgRWRnZSBMYWJlbHMiKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksITEpLEFhKSxCcyksdW4oWGcpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxLNW4pLCJmb250IiksIkZvbnQgTmFtZSIpLCJGb250IG5hbWUgdXNlZCBmb3IgYSBsYWJlbC4iKSxUNyksQWUpLHVuKFhnKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsaWRlKSwiZm9udCIpLCJGb250IFNpemUiKSwiRm9udCBzaXplIHVzZWQgZm9yIGEgbGFiZWwuIiksZ2MpLGphKSx1bihYZykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLElrdCksUGN0KSwiUG9ydCBBbmNob3IgT2Zmc2V0IiksIlRoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuIikscTEpLFVzKSx1bigkMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLEFrdCksUGN0KSwiUG9ydCBJbmRleCIpLCJUaGUgaW5kZXggb2YgYSBwb3J0IGluIHRoZSBmaXhlZCBvcmRlciBhcm91bmQgYSBub2RlLiBUaGUgb3JkZXIgaXMgYXNzdW1lZCBhcyBjbG9ja3dpc2UsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnRtb3N0IHBvcnQgb24gdGhlIHRvcCBzaWRlLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIEFkZGl0aW9uYWxseSwgdGhlIG9wdGlvbiAnUG9ydCBTaWRlJyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYXNlLiIpLGdjKSxqYSksdW4oJDIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxka3QpLFBjdCksIlBvcnQgU2lkZSIpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxyQXQpLGNzKSxYYSksdW4oJDIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxoa3QpLFBjdCksIlBvcnQgQm9yZGVyIE9mZnNldCIpLCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci4iKSxEbyksY2EpLHVuKCQyKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsakUpLHU4dCksIlBvcnQgTGFiZWwgUGxhY2VtZW50IiksIkRlY2lkZXMgb24gYSBwbGFjZW1lbnQgbWV0aG9kIGZvciBwb3J0IGxhYmVsczsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLGVBdCksajYpLEdWKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG1rdCksdTh0KSwiUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0IiksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksITEpLEFhKSxCcyksdW4oSnMpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx5a3QpLHU4dCksIlRyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwIiksIklmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4iKSwhMCksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBrdCksY2RlKSwiQWN0aXZhdGUgSW5zaWRlIFNlbGYgTG9vcHMiKSwiV2hldGhlciB0aGlzIG5vZGUgYWxsb3dzIHRvIHJvdXRlIHNlbGYgbG9vcHMgaW5zaWRlIG9mIGl0IGluc3RlYWQgb2YgYXJvdW5kIGl0LiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIG1ha2UgdGhlIG5vZGUgYSBjb21wb3VuZCBub2RlIGlmIGl0IGlzbid0IGFscmVhZHksIGFuZCB3aWxsIHJlcXVpcmUgdGhlIGxheW91dCBhbGdvcml0aG0gdG8gc3VwcG9ydCBjb21wb3VuZCBub2RlcyB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cy4iKSwhMSksQWEpLEJzKSx1bihKcykpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGJrdCksY2RlKSwiSW5zaWRlIFNlbGYgTG9vcCIpLCJXaGV0aGVyIGEgc2VsZiBsb29wIHNob3VsZCBiZSByb3V0ZWQgaW5zaWRlIGEgbm9kZSBpbnN0ZWFkIG9mIGFyb3VuZCB0aGF0IG5vZGUuIiksITEpLEFhKSxCcyksdW4oSWQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxMb3QpLCJlZGdlIiksIkVkZ2UgVGhpY2tuZXNzIiksIlRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4iKSwxKSxEbyksY2EpLHVuKElkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsc2RlKSwiZWRnZSIpLCJFZGdlIFR5cGUiKSwiVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4iKSxCU3QpLGNzKSx3QXQpLHVuKElkKSkpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sVm4pLCJMYXllcmVkIiksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkICJoaWVyYXJjaGllcyIsIGFuZCB0aGVuIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBlZGdlIGNyb3NzaW5ncyBpcyBtaW5pbWl6ZWQuIEFmdGVyd2FyZHMsIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGFyZSBjb21wdXRlZCBmb3IgdGhlIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLicpKSksRzkoZSxuZXcgengoUjkoSmsoWmsobmV3IHdtLCJvcmcuZWNsaXBzZS5lbGsub3J0aG9nb25hbCIpLCJPcnRob2dvbmFsIiksYE9ydGhvZ29uYWwgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGUgInRvcG9sb2d5LXNoYXBlLW1ldHJpY3MiIGFwcHJvYWNoIGJ5IEJhdGluaSwgTmFyZGVsbGkgYW5kIFRhbWFzc2lhICc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuYCkpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20scWwpLCJGb3JjZSIpLCJMYXlvdXQgYWxnb3JpdGhtcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBhIHN5c3RlbSBvZiBhdHRyYWN0aXZlIGFuZCByZXB1bHNpdmUgZm9yY2VzLiBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2Qgb2YgdGhpcyBraW5kIHdhcyBwcm9wb3NlZCBieSBFYWRlcyBpbiAxOTg0LiIpKSksRzkoZSxuZXcgengoUjkoSmsoWmsobmV3IHdtLCJvcmcuZWNsaXBzZS5lbGsuY2lyY2xlIiksIkNpcmNsZSIpLCJDaXJjdWxhciBsYXlvdXQgYWxnb3JpdGhtcyBlbXBoYXNpemUgY3ljbGVzIG9yIGJpY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncmFwaCBieSBhcnJhbmdpbmcgdGhlbSBpbiBjaXJjbGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiBhIGRyYXdpbmcgaXMgZGVzaXJlZCB3aGVyZSBzdWNoIGNvbXBvbmVudHMgYXJlIGNsZWFybHkgZ3JvdXBlZCwgb3Igd2hlcmUgY3ljbGVzIGFyZSBzaG93biBhcyBwcm9taW5lbnQgT1BUSU9OUyBvZiB0aGUgZ3JhcGguIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sRDFlKSwiVHJlZSIpLCJTcGVjaWFsaXplZCBsYXlvdXQgbWV0aG9kcyBmb3IgdHJlZXMsIGkuZS4gYWN5Y2xpYyBncmFwaHMuIFRoZSByZWd1bGFyIHN0cnVjdHVyZSBvZiBncmFwaHMgdGhhdCBoYXZlIG5vIHVuZGlyZWN0ZWQgY3ljbGVzIGNhbiBiZSBlbXBoYXNpemVkIHVzaW5nIGFuIGFsZ29yaXRobSBvZiB0aGlzIHR5cGUuIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sIm9yZy5lY2xpcHNlLmVsay5wbGFuYXIiKSwiUGxhbmFyIiksIkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGEgcGxhbmFyIG9yIHVwd2FyZCBwbGFuYXIgZ3JhcGguIE1vc3Qgb2YgdGhlc2UgYWxnb3JpdGhtcyBhcmUgdGhlb3JldGljYWxseSBpbnRlcmVzdGluZywgYnV0IG5vdCBwcmFjdGljYWxseSB1c2FibGUuIikpKSxHOShlLG5ldyB6eChSOShKayhaayhuZXcgd20sVGQpLCJSYWRpYWwiKSwiUmFkaWFsIGxheW91dCBhbGdvcml0aG1zIHVzdWFsbHkgcG9zaXRpb24gdGhlIG5vZGVzIG9mIHRoZSBncmFwaCBvbiBjb25jZW50cmljIGNpcmNsZXMuIikpKSxEdWUoKG5ldyAkQixlKSksV3VlKChuZXcgdHR0LGUpKSxjdWUoKG5ldyB6QixlKSl9O3ZhciBWUyxIM2UsTFN0LCQ2LEczZSxWM2UsTVN0LFUzZSxCVixJU3QsVU8sancsRFN0LHJmdCxpZnQsT1N0LE5TdCxQU3QsRlN0LEJTdCxSU3QscjUsalN0LFczZSxXTyxzZnQsUlYsJFN0LGk1LHpTdCxLTyxxU3QsSFN0LEdTdCxzNSxWU3QsejIsVVN0LGpWLGE1LFdTdCx2YixLU3QsJFYsWU8scTIsWVN0LEszZSxYU3QsWTNlLFgzZSxRU3QsWlN0LGFmdCxvZnQsY2Z0LHVmdCxKU3QsaGwsVVMsdEF0LGxmdCxoZnQsS3ksZUF0LG5BdCxvNSxyQXQsejYselYsZmZ0LEM3LFEzZSxkZnQsWjNlLEozZSxpQXQsdDRlLHNBdCxlNGUscTYsYUF0LHFWLG9BdCxjQXQsSDIsbjRlLHVBdCxsQXQsaEF0O1AoT2gsIkNvcmVPcHRpb25zIiw2ODQpLEkoMTAzLDIyLHszOjEsMzU6MSwyMjoxLDEwMzoxfSxMTSk7dmFyIFEwLGpoLGtmLGMwLFowLFdTPWpyKE9oLFF4dCwxMDMsSHIsdnNuLEZKZSkscjRlO0koMjcyLDIyLHszOjEsMzU6MSwyMjoxLDI3MjoxfSx6ZXQpO3ZhciBfNyxZeSxTNyxmQXQ9anIoT2gsIkVkZ2VMYWJlbFBsYWNlbWVudCIsMjcyLEhyLFFybixCSmUpLGk0ZTtJKDIxOCwyMix7MzoxLDM1OjEsMjI6MSwyMTg6MX0sS1IpO3ZhciBBNyxYTyxINixnZnQscGZ0PWpyKE9oLCJFZGdlUm91dGluZyIsMjE4LEhyLEhpbixSSmUpLHM0ZTtJKDMxMiwyMix7MzoxLDM1OjEsMjI6MSwzMTI6MX0sckMpO3ZhciBkQXQsZ0F0LHBBdCxiQXQsYmZ0LHZBdCx3QXQ9anIoT2gsIkVkZ2VUeXBlIiwzMTIsSHIscmFuLGpKZSksYTRlO0koOTc3LDEsSWgsJEIpLGwuUWU9ZnVuY3Rpb24oZSl7RHVlKGUpfTt2YXIgbUF0LHlBdCx4QXQsa0F0LG80ZSxFQXQsS1M7UChPaCwiRml4ZWRMYXlvdXRlck9wdGlvbnMiLDk3NyksSSg5NzgsMSx7fSxCTCksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBQWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sUChPaCwiRml4ZWRMYXlvdXRlck9wdGlvbnMvRml4ZWRGYWN0b3J5Iiw5NzgpLEkoMzM0LDIyLHszOjEsMzU6MSwyMjoxLDMzNDoxfSxxZXQpO3ZhciBaZyxIVixZUyxUQXQ9anIoT2gsIkhpZXJhcmNoeUhhbmRsaW5nIiwzMzQsSHIsWHJuLCRKZSksYzRlO0koMjg1LDIyLHszOjEsMzU6MSwyMjoxLDI4NToxfSxZUik7dmFyIHUwLHdiLFFPLFpPLHU0ZT1qcihPaCwiTGFiZWxTaWRlIiwyODUsSHIscWluLHpKZSksbDRlO0koOTMsMjIsezM6MSwzNToxLDIyOjEsOTM6MX0sJDMpO3ZhciBKMCxFZiwkaCxUZixVbCxDZix6aCxsMCxfZixsbz1qcihPaCwiTm9kZUxhYmVsUGxhY2VtZW50Iiw5MyxIcixhb24scUplKSxoNGU7SSgyNDksMjIsezM6MSwzNToxLDIyOjEsMjQ5OjF9LE1NKTt2YXIgQ0F0LFhTLG1iLF9BdCxKTyxRUz1qcihPaCwiUG9ydEFsaWdubWVudCIsMjQ5LEhyLHdzbixISmUpLGY0ZTtJKDk4LDIyLHszOjEsMzU6MSwyMjoxLDk4OjF9LGlDKTt2YXIgRzIsVmMsaDAsTDcsSDEseWIsU0F0PWpyKE9oLCJQb3J0Q29uc3RyYWludHMiLDk4LEhyLCRzbixHSmUpLGQ0ZTtJKDI3MywyMix7MzoxLDM1OjEsMjI6MSwyNzM6MX0sc0MpO3ZhciBaUyxKUyx0Zyx0Tix4YixHNixHVj1qcihPaCwiUG9ydExhYmVsUGxhY2VtZW50IiwyNzMsSHIsbmFuLFZKZSksZzRlO0koNjEsMjIsezM6MSwzNToxLDIyOjEsNjE6MX0sSU0pO3ZhciBIbixObix2aCx3aCxDdSx1dSxHMSxTZix0bCxxdSxVYyxlbCxfdSxTdSxBZixXbCxLbCxxaCxtcixabyxCbixYYT1qcihPaCwiUG9ydFNpZGUiLDYxLEhyLGdzbixLSmUpLHA0ZTtJKDk4MSwxLEloLHpCKSxsLlFlPWZ1bmN0aW9uKGUpe2N1ZShlKX07dmFyIGI0ZSx2NGUsQUF0LHc0ZSxtNGU7UChPaCwiUmFuZG9tTGF5b3V0ZXJPcHRpb25zIiw5ODEpLEkoOTgyLDEse30selopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgSFosZX0sbC5fZT1mdW5jdGlvbihlKXt9LFAoT2gsIlJhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Iiw5ODIpLEkoMzc0LDIyLHszOjEsMzU6MSwyMjoxLDM3NDoxfSxYUik7dmFyIFh5LGVOLG5OLFYyLHRBPWpyKE9oLCJTaXplQ29uc3RyYWludCIsMzc0LEhyLHppbixVSmUpLHk0ZTtJKDI1OSwyMix7MzoxLDM1OjEsMjI6MSwyNTk6MX0sejMpO3ZhciByTixWVixNNyx2ZnQsaU4sZUEsVVYsV1YsS1YsTEF0PWpyKE9oLCJTaXplT3B0aW9ucyIsMjU5LEhyLGRvbixXSmUpLHg0ZTtJKDM3MCwxLHsxOTQ5OjF9LFlrKSxsLmI9ITEsbC5jPTAsbC5kPS0xLGwuZT1udWxsLGwuZj1udWxsLGwuZz0tMSxsLmo9ITEsbC5rPSExLGwubj0hMSxsLm89MCxsLnE9MCxsLnI9MCxQKEVjLCJCYXNpY1Byb2dyZXNzTW9uaXRvciIsMzcwKSxJKDk3MiwyMDksRTIsQlopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHcsayxDLE07c3dpdGNoKHdyKG4sIkJveCBsYXlvdXQiLDIpLG89bE0oeWUocWUoZSwoZXEoKSx6M2UpKSkpLGg9dShxZShlLCQzZSksMTE2KSxyPWplKFJlKHFlKGUsVFN0KSkpLHM9amUoUmUocWUoZSxDU3QpKSksdShxZShlLEpodCksMzExKS5nKXtjYXNlIDA6ZD0odz1uZXcgUHUoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKSx2bigpLFhzKHcsbmV3IEckdChzKSksdyksaz1HNHQoZSksQz15ZShxZShlLEVTdCkpLChDPT1udWxsfHwoT24oQyksQzw9MCkpJiYoQz0xLjMpLE09WjRuKGQsbyxoLGsuYSxrLmIsciwoT24oQyksQykpLGd3KGUsTS5hLE0uYiwhMSwhMCk7YnJlYWs7ZGVmYXVsdDpLeW4oZSxvLGgscil9b3Iobil9LFAoRWMsIkJveExheW91dFByb3ZpZGVyIiw5NzIpLEkoOTczLDEsT2ksRyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIybih0aGlzLHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmdCh0aGlzKX0sbC5hPSExLFAoRWMsIkJveExheW91dFByb3ZpZGVyLzEiLDk3MyksSSgxNTcsMSx7MTU3OjF9LFUkLGZXdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM/SDV0KHRoaXMuYyk6UXAodGhpcy5iKX0sUChFYywiQm94TGF5b3V0UHJvdmlkZXIvR3JvdXAiLDE1NyksSSgzMTEsMjIsezM6MSwzNToxLDIyOjEsMzExOjF9LFFSKTt2YXIgTUF0LElBdCxEQXQsd2Z0LE9BdD1qcihFYywiQm94TGF5b3V0UHJvdmlkZXIvUGFja2luZ01vZGUiLDMxMSxIcixHaW4sWUplKSxrNGU7SSg5NzQsMSxPaSxSWiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBtbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDk3NCksSSg5NzUsMSxPaSxLRiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBmbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUiLDk3NSksSSg5NzYsMSxPaSxqWiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkbm4odShlLDE1NyksdShuLDE1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZnQodGhpcyl9LFAoRWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQyJFR5cGUiLDk3NiksSSgxMzY1LDEsezgzMToxfSwkWiksbC5xZz1mdW5jdGlvbihlLG4pe3JldHVybiBEUigpLCFFdChuLDE2MCl8fGtIdCgoUXgoKSx1KGUsMTYwKSksbil9LFAoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQwJFR5cGUiLDEzNjUpLEkoMTM2NiwxLFVuLFYkdCksbC50ZD1mdW5jdGlvbihlKXtydW4odGhpcy5hLHUoZSwxNDYpKX0sUChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDEkVHlwZSIsMTM2NiksSSgxMzY3LDEsVW4sRlopLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDk0KSxEUigpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMiRUeXBlIiwxMzY3KSxJKDEzNzEsMSxVbixVJHQpLGwudGQ9ZnVuY3Rpb24oZSl7QW9uKHRoaXMuYSx1KGUsOTQpKX0sUChFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDMkVHlwZSIsMTM3MSksSSgxMzY5LDEsdWksY1Z0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBIY24odGhpcy5hLHRoaXMuYix1KGUsMTQ2KSl9LFAoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ0JFR5cGUiLDEzNjkpLEkoMTM2OCwxLHVpLHVWdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gYVFlKHRoaXMuYSx0aGlzLmIsdShlLDgzMSkpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNSRUeXBlIiwxMzY4KSxJKDEzNzAsMSxVbixsVnQpLGwudGQ9ZnVuY3Rpb24oZSl7YWVuKHRoaXMuYSx0aGlzLmIsdShlLDE0NikpfSxQKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNiRUeXBlIiwxMzcwKSxJKDkzNSwxLHt9LE5aKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBsVXQoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxQKEVjLCJFbGtVdGlsL2xhbWJkYSQwJFR5cGUiLDkzNSksSSg5MzYsMSxVbixoVnQpLGwudGQ9ZnVuY3Rpb24oZSl7d3BuKHRoaXMuYSx0aGlzLmIsdShlLDc5KSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDEkVHlwZSIsOTM2KSxJKDkzNywxLFVuLGZWdCksbC50ZD1mdW5jdGlvbihlKXt3S2UodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDIkVHlwZSIsOTM3KSxJKDkzOCwxLFVuLGRWdCksbC50ZD1mdW5jdGlvbihlKXt1WGUodGhpcy5hLHRoaXMuYix1KGUsMTM3KSl9LGwuYT0wLGwuYj0wLFAoRWMsIkVsa1V0aWwvbGFtYmRhJDMkVHlwZSIsOTM4KSxJKDkzOSwxLFVuLFckdCksbC50ZD1mdW5jdGlvbihlKXtrdG4odGhpcy5hLHUoZSw0NjkpKX0sUChFYywiRWxrVXRpbC9sYW1iZGEkNCRUeXBlIiw5MzkpLEkoMzQyLDEsezM1OjEsMzQyOjF9LEtXZSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gQlhlKHRoaXMsdShlLDIzNikpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBFdChlLDM0Mik/KG49dShlLDM0MiksdGhpcy5hPT1uLmEpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHBzKHRoaXMuYSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgKGV4Y2x1c2l2ZSkifSxsLmE9MCxQKEVjLCJFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCIsMzQyKSxJKDExMzgsMjA5LEUyLFBaKSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3QsTHQsX3QsQnQsWXQsY2UsU2UsV2UsUWU7Zm9yKHdyKG4sIkZpeGVkIExheW91dCIsMSksaD11KHFlKGUsKGNpKCksTlN0KSksMjE4KSxGPTAsSD0wLF90PW5ldyBlcigoIWUuYSYmKGUuYT1uZXcgaGUobnMsZSwxMCwxMSkpLGUuYSkpO190LmUhPV90LmkuZ2MoKTspe2ZvcihndD11KGRyKF90KSwzMyksUWU9dShxZShndCwoYnooKSxLUykpLDgpLFFlJiYobTEoZ3QsUWUuYSxRZS5iKSx1KHFlKGd0LHlBdCksMTc0KS5IYygoX2woKSxYeSkpJiYoVj11KHFlKGd0LGtBdCksOCksVi5hPjAmJlYuYj4wJiZndyhndCxWLmEsVi5iLCEwLCEwKSkpLEY9Yi5NYXRoLm1heChGLGd0LmkrZ3QuZyksSD1iLk1hdGgubWF4KEgsZ3QuaitndC5mKSxDPW5ldyBlcigoIWd0Lm4mJihndC5uPW5ldyBoZShxbyxndCwxLDcpKSxndC5uKSk7Qy5lIT1DLmkuZ2MoKTspdz11KGRyKEMpLDEzNyksUWU9dShxZSh3LEtTKSw4KSxRZSYmbTEodyxRZS5hLFFlLmIpLEY9Yi5NYXRoLm1heChGLGd0Lmkrdy5pK3cuZyksSD1iLk1hdGgubWF4KEgsZ3Quait3Lmordy5mKTtmb3IoY2U9bmV3IGVyKCghZ3QuYyYmKGd0LmM9bmV3IGhlKGZsLGd0LDksOSkpLGd0LmMpKTtjZS5lIT1jZS5pLmdjKCk7KWZvcihZdD11KGRyKGNlKSwxMTgpLFFlPXUocWUoWXQsS1MpLDgpLFFlJiZtMShZdCxRZS5hLFFlLmIpLFNlPWd0LmkrWXQuaSxXZT1ndC5qK1l0LmosRj1iLk1hdGgubWF4KEYsU2UrWXQuZyksSD1iLk1hdGgubWF4KEgsV2UrWXQuZiksaz1uZXcgZXIoKCFZdC5uJiYoWXQubj1uZXcgaGUocW8sWXQsMSw3KSksWXQubikpO2suZSE9ay5pLmdjKCk7KXc9dShkcihrKSwxMzcpLFFlPXUocWUodyxLUyksOCksUWUmJm0xKHcsUWUuYSxRZS5iKSxGPWIuTWF0aC5tYXgoRixTZSt3Lmkrdy5nKSxIPWIuTWF0aC5tYXgoSCxXZSt3Lmordy5mKTtmb3Iobz1uZXcgYXIobHIoRzAoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylyPXUoTHIobyksNzkpLE09RWhlKHIpLEY9Yi5NYXRoLm1heChGLE0uYSksSD1iLk1hdGgubWF4KEgsTS5iKTtmb3Iocz1uZXcgYXIobHIoZkQoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksNzkpLHRzKFpkKHIpKSE9ZSYmKE09RWhlKHIpLEY9Yi5NYXRoLm1heChGLE0uYSksSD1iLk1hdGgubWF4KEgsTS5iKSl9aWYoaD09KHEwKCksQTcpKWZvcihMdD1uZXcgZXIoKCFlLmEmJihlLmE9bmV3IGhlKG5zLGUsMTAsMTEpKSxlLmEpKTtMdC5lIT1MdC5pLmdjKCk7KWZvcihndD11KGRyKEx0KSwzMykscz1uZXcgYXIobHIoRzAoZ3QpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTHIocyksNzkpLGQ9cG1uKHIpLGQuYj09MD9ibyhyLGk1LG51bGwpOmJvKHIsaTUsZCk7amUoUmUocWUoZSwoYnooKSx4QXQpKSkpfHwoQnQ9dShxZShlLG80ZSksMTE2KSx0dD1GK0J0LmIrQnQuYyxZPUgrQnQuZCtCdC5hLGd3KGUsdHQsWSwhMCwhMCkpLG9yKG4pfSxQKEVjLCJGaXhlZExheW91dFByb3ZpZGVyIiwxMTM4KSxJKDM3MywxMzQsezM6MSw0MTQ6MSwzNzM6MSw5NDoxLDEzNDoxfSxXdSwkdGUpLGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2lmKGUpdHJ5e2ZvcihrPXB5KGUsIjssOyIpLGg9ayxkPTAsdz1oLmxlbmd0aDtkPHc7KytkKXtpZihvPWhbZF0scj1weShvLCJcXDoiKSxzPWJ4dCh6OCgpLHJbMF0pLCFzKXRocm93IHJ0KG5ldyBQbigiSW52YWxpZCBvcHRpb24gaWQ6ICIrclswXSkpO2lmKEM9Z3h0KHMsclsxXSksQz09bnVsbCl0aHJvdyBydChuZXcgUG4oIkludmFsaWQgb3B0aW9uIHZhbHVlOiAiK3JbMV0pKTtDPT1udWxsPyghdGhpcy5xJiYodGhpcy5xPW5ldyBDciksVXgodGhpcy5xLHMpKTooIXRoaXMucSYmKHRoaXMucT1uZXcgQ3IpLGtpKHRoaXMucSxzLEMpKX19Y2F0Y2goTSl7dGhyb3cgTT1XaShNKSxFdChNLDEwMik/KG49TSxydChuZXcgd3JlKG4pKSk6cnQoTSl9fSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9QnIoUGwocHUoKHRoaXMucT90aGlzLnE6KHZuKCksdm4oKSxhMCkpLnZjKCkuT2MoKSxuZXcgTXUpLFltKG5ldyBMS3QsbmV3IGRhLG5ldyBOZSxuZXcgbWUsY3Qob3QobGwsMSksYWUsMTMyLDAsW10pKSkpLGV9O3ZhciBFNGU9UChFYywiSW5kaXZpZHVhbFNwYWNpbmdzIiwzNzMpO0koOTcxLDEse30sTXUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHlubih1KGUsNDIpKX0sUChFYywiSW5kaXZpZHVhbFNwYWNpbmdzL2xhbWJkYSQwJFR5cGUiLDk3MSksSSg3MDksMSx7fSxvWXQpLGwuYz0wLFAoRWMsIkluc3RhbmNlUG9vbCIsNzA5KSxJKDEyNzUsMSx7fSxxWiksUChFYywiTG9nZ2VkR3JhcGgiLDEyNzUpLEkoMzk2LDIyLHszOjEsMzU6MSwyMjoxLDM5NjoxfSxaUik7dmFyIE5BdCxZbCxQQXQsRkF0LFQ0ZT1qcihFYywiTG9nZ2VkR3JhcGgvVHlwZSIsMzk2LEhyLFZpbixYSmUpLEM0ZTtJKDQ2LDEsezIwOjEsNDY6MX0sbGEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5GYj1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIEV0KGUsNDYpPyhyPXUoZSw0Niksbj10aGlzLmE9PW51bGw/ci5hPT1udWxsOnlpKHRoaXMuYSxyLmEpLHM9dGhpcy5iPT1udWxsP3IuYj09bnVsbDp5aSh0aGlzLmIsci5iKSxuJiZzKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtyZXR1cm4gcj10aGlzLmE9PW51bGw/MDpIaSh0aGlzLmEpLGU9ciZtcyxuPXImLTY1NTM2LGg9dGhpcy5iPT1udWxsPzA6SGkodGhpcy5iKSxzPWgmbXMsbz1oJi02NTUzNixlXm8+PjE2Jm1zfG5eczw8MTZ9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEskdCh0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PW51bGwmJnRoaXMuYj09bnVsbD8icGFpcihudWxsLG51bGwpIjp0aGlzLmE9PW51bGw/InBhaXIobnVsbCwiKyRvKHRoaXMuYikrIikiOnRoaXMuYj09bnVsbD8icGFpcigiKyRvKHRoaXMuYSkrIixudWxsKSI6InBhaXIoIiskbyh0aGlzLmEpKyIsIiskbyh0aGlzLmIpKyIpIn0sUChFYywiUGFpciIsNDYpLEkoOTgzLDEscmEsSyR0KSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jJiYoIXRoaXMuYiYmdGhpcy5hLmEhPW51bGx8fHRoaXMuYS5iIT1udWxsKX0sbC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXJldHVybiB0aGlzLmI9ITAsdGhpcy5hLmE7aWYoIXRoaXMuYyYmdGhpcy5hLmIhPW51bGwpcmV0dXJuIHRoaXMuYz0hMCx0aGlzLmEuYjt0aHJvdyBydChuZXcgbGMpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbD90aGlzLmEuYj1udWxsOnRoaXMuYiYmdGhpcy5hLmEhPW51bGwmJih0aGlzLmEuYT1udWxsKSxydChuZXcgSXUpfSxsLmI9ITEsbC5jPSExLFAoRWMsIlBhaXIvMSIsOTgzKSxJKDQ0OCwxLHs0NDg6MX0sVFh0KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBQYyh0aGlzLmEsdShlLDQ0OCkuYSkmJlBjKHRoaXMuYyx1KGUsNDQ4KS5jKSYmUGModGhpcy5kLHUoZSw0NDgpLmQpJiZQYyh0aGlzLmIsdShlLDQ0OCkuYil9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdnooY3Qob3QoWG4sMSksSWUsMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0thK3RoaXMuYytLYSt0aGlzLmQrS2ErdGhpcy5iKyIpIn0sUChFYywiUXVhZHJ1cGxlIiw0NDgpLEkoMTEyNiwyMDksRTIsSFopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2lmKHdyKG4sIlJhbmRvbSBMYXlvdXQiLDEpLCghZS5hJiYoZS5hPW5ldyBoZShucyxlLDEwLDExKSksZS5hKS5pPT0wKXtvcihuKTtyZXR1cm59aD11KHFlKGUsKHkzdCgpLHc0ZSkpLDE5KSxoJiZoLmEhPTA/bz1uZXcgVCQoaC5hKTpvPW5ldyB6aXQscj1sTSh5ZShxZShlLGI0ZSkpKSxkPWxNKHllKHFlKGUsbTRlKSkpLHM9dShxZShlLHY0ZSksMTE2KSxMNG4oZSxvLHIsZCxzKSxvcihuKX0sUChFYywiUmFuZG9tTGF5b3V0UHJvdmlkZXIiLDExMjYpO3ZhciBfNGU7SSg1NTMsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiBuZXcgJGUodGhpcy5mLmksdGhpcy5mLmopfSxsLldlPWZ1bmN0aW9uKGUpe3JldHVybiBYWHQoZSwoY2koKSxobCkpP3FlKHRoaXMuZixTNGUpOnFlKHRoaXMuZixlKX0sbC5yZj1mdW5jdGlvbigpe3JldHVybiBuZXcgJGUodGhpcy5mLmcsdGhpcy5mLmYpfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gcjIodGhpcy5mLGUpfSxsLnRmPWZ1bmN0aW9uKGUpe3l1KHRoaXMuZixlLmEpLHh1KHRoaXMuZixlLmIpfSxsLnVmPWZ1bmN0aW9uKGUpe1F2KHRoaXMuZixlLmEpLFh2KHRoaXMuZixlLmIpfSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuZz1lfSxsLmc9MDt2YXIgUzRlO1AoVV8sIkVsa0dyYXBoQWRhcHRlcnMvQWJzdHJhY3RFbGtHcmFwaEVsZW1lbnRBZGFwdGVyIiw1NTMpLEkoNTU0LDEsezgzOToxfSxhUiksbC53Zj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYilmb3IodGhpcy5iPXkkKFpqKHRoaXMuYSkuaSksbj1uZXcgZXIoWmoodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDEzNyksdWUodGhpcy5iLG5ldyBuZXQoZSkpO3JldHVybiB0aGlzLmJ9LGwuYj1udWxsLFAoVV8sIkVsa0dyYXBoQWRhcHRlcnMvRWxrRWRnZUFkYXB0ZXIiLDU1NCksSSgzMDEsNTUzLHt9LFNtKSxsLnhmPWZ1bmN0aW9uKCl7cmV0dXJuIFRzZSh0aGlzKX0sbC5hPW51bGwsUChVXywiRWxrR3JhcGhBZGFwdGVycy9FbGtHcmFwaEFkYXB0ZXIiLDMwMSksSSg2MzAsNTUzLHsxODE6MX0sbmV0KSxQKFVfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0xhYmVsQWRhcHRlciIsNjMwKSxJKDYyOSw1NTMsezY4MDoxfSxybnQpLGwud2Y9ZnVuY3Rpb24oKXtyZXR1cm4gSWZuKHRoaXMpfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShxZSh0aGlzLmYsKGNpKCksS08pKSwxNDIpLCFlJiYoZT1uZXcgTTkpLGV9LGwuQ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gRGZuKHRoaXMpfSxsLkVmPWZ1bmN0aW9uKGUpe3ZhciBuO249bmV3IHdudChlKSxibyh0aGlzLmYsKGNpKCksS08pLG4pfSxsLkZmPWZ1bmN0aW9uKGUpe2JvKHRoaXMuZiwoY2koKSxxMiksbmV3IHB2dChlKSl9LGwueWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9bmV3IGxlLG49bmV3IGFyKGxyKGZEKHUodGhpcy5mLDMzKSkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShMcihuKSw3OSksdWUodGhpcy5hLG5ldyBhUihlKSk7cmV0dXJuIHRoaXMuYX0sbC5CZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPW5ldyBsZSxuPW5ldyBhcihscihHMCh1KHRoaXMuZiwzMykpLmEuS2MoKSxuZXcgeikpO3pyKG4pOyllPXUoTHIobiksNzkpLHVlKHRoaXMuYyxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmN9LGwuRGY9ZnVuY3Rpb24oKXtyZXR1cm4gaSQodSh0aGlzLmYsMzMpKS5pIT0wfHxqZShSZSh1KHRoaXMuZiwzMykuV2UoKGNpKCksV08pKSkpfSxsLkdmPWZ1bmN0aW9uKCl7a2FuKHRoaXMsKEltKCksXzRlKSl9LGwuYT1udWxsLGwuYj1udWxsLGwuYz1udWxsLGwuZD1udWxsLGwuZT1udWxsLFAoVV8sIkVsa0dyYXBoQWRhcHRlcnMvRWxrTm9kZUFkYXB0ZXIiLDYyOSksSSgxMjY2LDU1Myx7ODM4OjF9LEV6dCksbC53Zj1mdW5jdGlvbigpe3JldHVybiAkZm4odGhpcyl9LGwuemY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmEpZm9yKHRoaXMuYT1IZCh1KHRoaXMuZiwxMTgpLnhnKCkuaSksbj1uZXcgZXIodSh0aGlzLmYsMTE4KS54ZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNzkpLHVlKHRoaXMuYSxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmF9LGwuQmY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1IZCh1KHRoaXMuZiwxMTgpLnlnKCkuaSksbj1uZXcgZXIodSh0aGlzLmYsMTE4KS55ZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNzkpLHVlKHRoaXMuYyxuZXcgYVIoZSkpO3JldHVybiB0aGlzLmN9LGwuSGY9ZnVuY3Rpb24oKXtyZXR1cm4gdSh1KHRoaXMuZiwxMTgpLldlKChjaSgpLG81KSksNjEpfSxsLklmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQsdztmb3Iocz1rMSh1KHRoaXMuZiwxMTgpKSxyPW5ldyBlcih1KHRoaXMuZiwxMTgpLnlnKCkpO3IuZSE9ci5pLmdjKCk7KWZvcihlPXUoZHIociksNzkpLHc9bmV3IGVyKCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYykpO3cuZSE9dy5pLmdjKCk7KXtpZihkPXUoZHIodyksODIpLFptKE1vKGQpLHMpKXJldHVybiEwO2lmKE1vKGQpPT1zJiZqZShSZShxZShlLChjaSgpLHNmdCkpKSkpcmV0dXJuITB9Zm9yKG49bmV3IGVyKHUodGhpcy5mLDExOCkueGcoKSk7bi5lIT1uLmkuZ2MoKTspZm9yKGU9dShkcihuKSw3OSksaD1uZXcgZXIoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDgyKSxabShNbyhvKSxzKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsUChVXywiRWxrR3JhcGhBZGFwdGVycy9FbGtQb3J0QWRhcHRlciIsMTI2NiksSSgxMjY3LDEsT2ksR1opLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY3duKHUoZSwxMTgpLHUobiwxMTgpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKFVfLCJFbGtHcmFwaEFkYXB0ZXJzL1BvcnRDb21wYXJhdG9yIiwxMjY3KTt2YXIga2I9WWkoZGgsIkVPYmplY3QiKSxJNz1ZaShPNCxoZGUpLEhoPVlpKE80LGZkZSksc049WWkoTzQsZGRlKSxhTj1ZaShPNCwiRWxrU2hhcGUiKSxicj1ZaShPNCxnZGUpLFdzPVlpKE80LGw4dCksWmk9WWkoTzQscGRlKSxvTj1ZaShkaCxiZGUpLG5BPVlpKGRoLCJFRmFjdG9yeSIpLEE0ZSxtZnQ9WWkoZGgsdmRlKSxyMT1ZaShkaCwiRVBhY2thZ2UiKSx0YSxMNGUsTTRlLEJBdCxZVixJNGUsUkF0LGpBdCwkQXQsRWIsRDRlLE80ZSxxbz1ZaShPNCxoOHQpLG5zPVlpKE80LGY4dCksZmw9WWkoTzQsZDh0KTtJKDkwLDEsd2RlKSxsLkpnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS2coKSxudWxsfSxsLktnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuTGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LZygpLCExfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuTmc9ZnVuY3Rpb24oZSl7bWkodGhpcyxlKX0sUChrNiwiQmFzaWNOb3RpZmllckltcGwiLDkwKSxJKDk3LDkwLGtkZSksbC5uaD1mdW5jdGlvbigpe3JldHVybiBtbCh0aGlzKX0sbC5PZz1mdW5jdGlvbihlLG4pe3JldHVybiBlfSxsLlBnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5RZz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1ubyh1KHluKHRoaXMuVGcoKSx0aGlzLlZnKCkpLDE4KSksdGhpcy5laCgpLmloKHRoaXMsbi5uLG4uZixlKX0sbC5SZz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuU2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB6bCh0aGlzLGUsbixyKX0sbC5UZz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLlBnKCkmJihlPXRoaXMuUGcoKS5jaygpLGUpP2U6dGhpcy56aCgpfSxsLlVnPWZ1bmN0aW9uKCl7cmV0dXJuIEdzdCh0aGlzKX0sbC5WZz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXRoaXMucGgoKS5kaygpLCFuJiZ0aGlzLlBnKCkuaWsobj0oVjkoKSxlPUR3dChwZCh0aGlzLlRnKCkpKSxlPT1udWxsP1NmdDpuZXcgTk0odGhpcyxlKSkpLG59LGwuWGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZX0sbC5ZZz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1lLkdqKCksbj9lLmFqKCk6VmkodGhpcy5UZygpLGUpfSxsLlpnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5QZygpLGU/ZS5maygpOm51bGx9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZygpP3RoaXMuUGcoKS5jaygpOm51bGx9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBqeih0aGlzLGUsbixyKX0sbC5haD1mdW5jdGlvbihlKXtyZXR1cm4gSTgodGhpcyxlKX0sbC5iaD1mdW5jdGlvbihlLG4pe3JldHVybiBQcnQodGhpcyxlLG4pfSxsLmRoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5QZygpLCEhZSYmZS5naygpfSxsLmVoPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5maD1mdW5jdGlvbigpe3JldHVybiBEeih0aGlzKX0sbC5naD1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gZTYodGhpcyxlLG4scyl9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoeW4odGhpcy5UZygpLG4pLDY2KSxzLk5qKCkuUWoodGhpcyx0aGlzLnloKCksbi10aGlzLkFoKCksZSxyKX0sbC5paD1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gYyQodGhpcyxlLG4scyl9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoeW4odGhpcy5UZygpLG4pLDY2KSxzLk5qKCkuUmoodGhpcyx0aGlzLnloKCksbi10aGlzLkFoKCksZSxyKX0sbC5raD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5QZygpJiYhIXRoaXMuUGcoKS5laygpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBlc3QodGhpcyxlKX0sbC5taD1mdW5jdGlvbihlKXtyZXR1cm4gZFF0KHRoaXMsZSl9LGwub2g9ZnVuY3Rpb24oZSl7cmV0dXJuIFJsZSh0aGlzLGUpfSxsLnBoPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5xaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBnKCk/dGhpcy5QZygpLmVrKCk6bnVsbH0sbC5yaD1mdW5jdGlvbigpe3JldHVybiBEeih0aGlzKX0sbC5zaD1mdW5jdGlvbihlLG4pe2pzdCh0aGlzLGUsbil9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmhrKGUpfSxsLnVoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5rayhlKX0sbC52aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuamsoZSl9LGwud2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gaD10aGlzLlpnKCksaCYmZSYmKG49QmEoaC5WaygpLHRoaXMsbiksaC5aayh0aGlzKSkscz10aGlzLmVoKCkscyYmKGFhdCh0aGlzLHRoaXMuZWgoKSx0aGlzLlZnKCkpLkJiJllhPyhvPXMuZmgoKSxvJiYoZT8haCYmby5aayh0aGlzKTpvLllrKHRoaXMpKSk6KG49KHI9dGhpcy5WZygpLHI+PTA/dGhpcy5RZyhuKTp0aGlzLmVoKCkuaWgodGhpcywtMS1yLG51bGwsbikpLG49dGhpcy5TZyhudWxsLC0xLG4pKSksdGhpcy51aChlKSxufSxsLnhoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYocj10aGlzLlRnKCksaD1WaShyLGUpLG49dGhpcy5BaCgpLGg+PW4pcmV0dXJuIHUoZSw2NikuTmooKS5Vaih0aGlzLHRoaXMueWgoKSxoLW4pO2lmKGg8PS0xKWlmKGQ9RTQoKFJ1KCksbWEpLHIsZSksZCl7aWYodG8oKSx1KGQsNjYpLk9qKCl8fChkPXF4KEVvKG1hLGQpKSksbz0ocz10aGlzLllnKGQpLHUocz49MD90aGlzLl9nKHMsITAsITApOmx3KHRoaXMsZCwhMCksMTUzKSksaz1kLlpqKCksaz4xfHxrPT0tMSlyZXR1cm4gdSh1KG8sMjE1KS5obChlLCExKSw3Nil9ZWxzZSB0aHJvdyBydChuZXcgUG4oYWIrZS5uZSgpK0ZjdCkpO2Vsc2UgaWYoZS4kaigpKXJldHVybiBzPXRoaXMuWWcoZSksdShzPj0wP3RoaXMuX2cocywhMSwhMCk6bHcodGhpcyxlLCExKSw3Nik7cmV0dXJuIHc9bmV3IE9WdCh0aGlzLGUpLHd9LGwueWg9ZnVuY3Rpb24oKXtyZXR1cm4gT210KHRoaXMpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuKGpwKCksTG4pLlN9LGwuQWg9ZnVuY3Rpb24oKXtyZXR1cm4gWm4odGhpcy56aCgpKX0sbC5CaD1mdW5jdGlvbihlKXtOc3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBiZih0aGlzKX0sUChNbiwiQmFzaWNFT2JqZWN0SW1wbCIsOTcpO3ZhciBONGU7SSgxMTQsOTcsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MX0pLGwuQ2g9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49Tm10KHRoaXMpLG5bZV19LGwuRGg9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPU5tdCh0aGlzKSxKaShyLGUsbil9LGwuRWg9ZnVuY3Rpb24oZSl7dmFyIG47bj1ObXQodGhpcyksSmkobixlLG51bGwpfSxsLkpnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcyw0KSwxMjYpfSxsLktnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5MZz1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjQpIT0wfSxsLlBnPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5GaD1mdW5jdGlvbihlKXt0Nih0aGlzLDIsZSl9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuRmgoZSl9LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gYnUodGhpcyl9LGwuVmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EYj4+MTZ9LGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBWOSgpLG49RHd0KHBkKChlPXUoSW4odGhpcywxNiksMjYpLGV8fHRoaXMuemgoKSkpKSxuPT1udWxsP1NmdDpuZXcgTk0odGhpcyxuKX0sbC5NZz1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjEpPT0wfSxsLlpnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywxMjgpLDE5MzUpfSxsLiRnPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywxNiksMjYpfSxsLmRoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMzIpIT0wfSxsLmVoPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcywyKSw0OSl9LGwua2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiY2NCkhPTB9LGwucGg9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLnFoPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcyw2NCksMjgxKX0sbC50aD1mdW5jdGlvbihlKXt0Nih0aGlzLDE2LGUpfSxsLnVoPWZ1bmN0aW9uKGUpe3Q2KHRoaXMsMTI4LGUpfSxsLnZoPWZ1bmN0aW9uKGUpe3Q2KHRoaXMsNjQsZSl9LGwueWg9ZnVuY3Rpb24oKXtyZXR1cm4gaXUodGhpcyl9LGwuRGI9MCxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwiLDExNCksSSgxMTUsMTE0LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLkZoPWZ1bmN0aW9uKGUpe3RoaXMuQ2I9ZX0sbC5laD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNifSxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvQ29udGFpbmVyIiwxMTUpLEkoMTk4NSwxMTUsezEwNToxLDQxMzoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFYzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIE80dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gR3d0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtNeXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksTzRlfSxsLkJoPWZ1bmN0aW9uKGUpe215dCh0aGlzLGUpfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIFZpZSh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gcWUodGhpcyxlKX0sbC5YZT1mdW5jdGlvbihlKXtyZXR1cm4gcjIodGhpcyxlKX0sbC5ZZT1mdW5jdGlvbihlLG4pe3JldHVybiBibyh0aGlzLGUsbil9LFAoXzIsIkVNYXBQcm9wZXJ0eUhvbGRlckltcGwiLDE5ODUpLEkoNTY3LDExNSx7MTA1OjEsNDY5OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSx2cCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiBqeih0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTB9cmV0dXJuIGVzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpXJCh0aGlzLFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgMTpLJCh0aGlzLFh0KHllKG4pKSk7cmV0dXJufWpzdCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gWmMoKSxMNGV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpXJCh0aGlzLDApO3JldHVybjtjYXNlIDE6SyQodGhpcywwKTtyZXR1cm59TnN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgVGgoYmYodGhpcykpLGUuYSs9IiAoeDogIixSMyhlLHRoaXMuYSksZS5hKz0iLCB5OiAiLFIzKGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxsLmE9MCxsLmI9MCxQKF8yLCJFbGtCZW5kUG9pbnRJbXBsIiw1NjcpLEkoNzIzLDE5ODUsezEwNToxLDQxMzoxLDE2MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFl5dCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIEFzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGZpdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gaHl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtsNHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksSTRlfSxsLkJoPWZ1bmN0aW9uKGUpe1Z5dCh0aGlzLGUpfSxsLnpnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30sbC5BZz1mdW5jdGlvbigpe3JldHVybiBaaih0aGlzKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBqaXQodGhpcyl9LGwuaz1udWxsLFAoXzIsIkVsa0dyYXBoRWxlbWVudEltcGwiLDcyMyksSSg3MjQsNzIzLHsxMDU6MSw0MTM6MSwxNjA6MSw0NzA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBzM3QodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGYzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7aDR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLEQ0ZX0sbC5CaD1mdW5jdGlvbihlKXt2M3QodGhpcyxlKX0sbC5CZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuQ2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLkRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5FZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9LGwuRmc9ZnVuY3Rpb24oZSxuKXtzaih0aGlzLGUsbil9LGwuR2c9ZnVuY3Rpb24oZSxuKXttMSh0aGlzLGUsbil9LGwuSGc9ZnVuY3Rpb24oZSl7eXUodGhpcyxlKX0sbC5JZz1mdW5jdGlvbihlKXt4dSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE9zdCh0aGlzKX0sbC5mPTAsbC5nPTAsbC5pPTAsbC5qPTAsUChfMiwiRWxrU2hhcGVJbXBsIiw3MjQpLEkoNzI1LDcyNCx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSw0NzA6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBqM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBpNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBzNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIEF5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7ZzV0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLE00ZX0sbC5CaD1mdW5jdGlvbihlKXtJM3QodGhpcyxlKX0sbC54Zz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IENuKFdzLHRoaXMsOCw1KSksdGhpcy5kfSxsLnlnPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oV3MsdGhpcyw3LDQpKSx0aGlzLmV9LFAoXzIsIkVsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsIiw3MjUpLEkoMzUyLDcyMyx7MTA1OjEsNDEzOjEsNzk6MSwxNjA6MSwzNTI6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sZnYpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiBySSh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShaaSx0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEZuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gRm4oKSwhIWdfKHRoaXMpO2Nhc2UgOTpyZXR1cm4gRm4oKSwhIXV3KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIEZuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiBZeXQodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/dDR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLFcydCh0aGlzLHUoZSwzMykscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSksUWModGhpcy5iLGUscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksUWModGhpcy5jLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKFppLHRoaXMsNiw2KSksUWModGhpcy5hLGUscil9cmV0dXJuIEFzdCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gVzJ0KHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxCYSh0aGlzLmIsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxCYSh0aGlzLmMsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoWmksdGhpcyw2LDYpKSxCYSh0aGlzLmEsZSxyKX1yZXR1cm4gZml0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuISFySSh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDc6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gZ18odGhpcyk7Y2FzZSA5OnJldHVybiB1dyh0aGlzKTtjYXNlIDEwOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gaHl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAzOlhzdCh0aGlzLHUobiwzMykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx4cih0aGlzLmIpLCF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSkscnModGhpcy5iLHUobiwxNCkpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSkscnModGhpcy5jLHUobiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoWmksdGhpcyw2LDYpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKFppLHRoaXMsNiw2KSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybn1sNHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksQkF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDM6WHN0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHhyKHRoaXMuYik7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShaaSx0aGlzLDYsNikpLHhyKHRoaXMuYSk7cmV0dXJufVZ5dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEVsZSh0aGlzKX0sUChfMiwiRWxrRWRnZUltcGwiLDM1MiksSSg0MzksMTk4NSx7MTA1OjEsNDEzOjEsMjAyOjEsNDM5OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHJkKSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBYM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qO2Nhc2UgMjpyZXR1cm4gdGhpcy5rO2Nhc2UgMzpyZXR1cm4gdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhIaCx0aGlzLDUpKSx0aGlzLmE7Y2FzZSA2OnJldHVybiBsUXQodGhpcyk7Y2FzZSA3OnJldHVybiBuP2FzdCh0aGlzKTp0aGlzLmk7Y2FzZSA4OnJldHVybiBuP3NzdCh0aGlzKTp0aGlzLmY7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLHRoaXMuZztjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKFppLHRoaXMsMTAsOSkpLHRoaXMuZTtjYXNlIDExOnJldHVybiB0aGlzLmR9cmV0dXJuIFYzdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/WDN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEsydCh0aGlzLHUoZSw3OSkscik7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLFFjKHRoaXMuZyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSksUWModGhpcy5lLGUscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoWmMoKSxZVikpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChaYygpLFlWKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7c3dpdGNoKG4pe2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhIaCx0aGlzLDUpKSxCYSh0aGlzLmEsZSxyKTtjYXNlIDY6cmV0dXJuIEsydCh0aGlzLG51bGwscik7Y2FzZSA5OnJldHVybiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLEJhKHRoaXMuZyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSksQmEodGhpcy5lLGUscil9cmV0dXJuIE80dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiB0aGlzLmohPTA7Y2FzZSAyOnJldHVybiB0aGlzLmshPTA7Y2FzZSAzOnJldHVybiB0aGlzLmIhPTA7Y2FzZSA0OnJldHVybiB0aGlzLmMhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDY6cmV0dXJuISFsUXQodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5pO2Nhc2UgODpyZXR1cm4hIXRoaXMuZjtjYXNlIDk6cmV0dXJuISF0aGlzLmcmJnRoaXMuZy5pIT0wO2Nhc2UgMTA6cmV0dXJuISF0aGlzLmUmJnRoaXMuZS5pIT0wO2Nhc2UgMTE6cmV0dXJuIHRoaXMuZCE9bnVsbH1yZXR1cm4gR3d0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOkI4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAyOmo4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAzOkY4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSA0OlI4KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKEhoLHRoaXMsNSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgU3MoSGgsdGhpcyw1KSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDY6VGNlKHRoaXMsdShuLDc5KSk7cmV0dXJuO2Nhc2UgNzpKJCh0aGlzLHUobiw4MikpO3JldHVybjtjYXNlIDg6WiQodGhpcyx1KG4sODIpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IENuKFppLHRoaXMsOSwxMCkpLHhyKHRoaXMuZyksIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oWmksdGhpcyw5LDEwKSkscnModGhpcy5nLHUobiwxNCkpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKFppLHRoaXMsMTAsOSkpLHhyKHRoaXMuZSksIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oWmksdGhpcywxMCw5KSkscnModGhpcy5lLHUobiwxNCkpO3JldHVybjtjYXNlIDExOm55dCh0aGlzLEJyKG4pKTtyZXR1cm59TXl0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLFlWfSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6QjgodGhpcywwKTtyZXR1cm47Y2FzZSAyOmo4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMzpGOCh0aGlzLDApO3JldHVybjtjYXNlIDQ6UjgodGhpcywwKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKEhoLHRoaXMsNSkpLHhyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgNjpUY2UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OkokKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgODpaJCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6IXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oWmksdGhpcyw5LDEwKSkseHIodGhpcy5nKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBDbihaaSx0aGlzLDEwLDkpKSx4cih0aGlzLmUpO3JldHVybjtjYXNlIDExOm55dCh0aGlzLG51bGwpO3JldHVybn1teXQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBxb2UodGhpcyl9LGwuYj0wLGwuYz0wLGwuZD1udWxsLGwuaj0wLGwuaz0wLFAoXzIsIkVsa0VkZ2VTZWN0aW9uSW1wbCIsNDM5KSxJKDE1MCwxMTUsezEwNToxLDkyOjEsOTA6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0pLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBlPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYik6b2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpKToobz11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4odGhpcy56aCgpKSxlLHIpKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKSk6KG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKSl9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PTA/ISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA6c2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwub2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGt4dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwudWg9ZnVuY3Rpb24oZSl7dDYodGhpcywxMjgsZSl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxaNGV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dGhpcy5CYnw9MX0sbC5IaD1mdW5jdGlvbihlKXtyZXR1cm4gbV8odGhpcyxlKX0sbC5CYj0wLFAoTW4sIkVNb2RlbEVsZW1lbnRJbXBsIiwxNTApLEkoNzA0LDE1MCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxxQiksbC5JaD1mdW5jdGlvbihlLG4pe3JldHVybiBKbGUodGhpcyxlLG4pfSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYodGhpcy5hIT1GbChlKXx8ZS5CYiYyNTYpdGhyb3cgcnQobmV3IFBuKFJjdCtlLnpiK2t3KSk7Zm9yKHM9U28oZSk7TGMocy5hKS5pIT0wOyl7aWYocj11KEVEKHMsMCwobj11KFN0KExjKHMuYSksMCksODcpLGg9bi5jLEV0KGgsODgpP3UoaCwyNik6KGRuKCksV2gpKSksMjYpLGN3KHIpKXJldHVybiBvPUZsKHIpLk5oKCkuSmgociksdShvLDQ5KS50aChlKSxvO3M9U28ocil9cmV0dXJuKGUuRCE9bnVsbD9lLkQ6ZS5CKT09ImphdmEudXRpbC5NYXAkRW50cnkiP25ldyBLS3QoZSk6bmV3IE52dChlKX0sbC5LaD1mdW5jdGlvbihlLG4pe3JldHVybiBwdyh0aGlzLGUsbil9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1abigoZG4oKSxTYikpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fFNiKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLFFjKHRoaXMuQWIsZSxyKTtjYXNlIDE6cmV0dXJuIHRoaXMuYSYmKHI9dSh0aGlzLmEsNDkpLmloKHRoaXMsNCxyMSxyKSksSHl0KHRoaXMsdShlLDIzNSkscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxTYikpLG4pLDY2KSxvLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLFNiKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSAxOnJldHVybiBIeXQodGhpcyxudWxsLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksU2IpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxTYikpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuISF0aGlzLmF9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxTYikpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fFNiKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlRhZSh0aGlzLHUobiwyMzUpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLFNiKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8U2IpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksU2J9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpUYWUodGhpcyxudWxsKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLFNiKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8U2IpLGUpKX07dmFyIHJBLHpBdCxQNGU7UChNbiwiRUZhY3RvcnlJbXBsIiw3MDQpLEkod2YsNzA0LHsxMDU6MSwyMDE0OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxKNSksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMTI6cmV0dXJuIHUobiwxNDYpLnRnKCk7Y2FzZSAxMzpyZXR1cm4gJG8obik7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7c3dpdGNoKGUuRz09LTEmJihlLkc9KG49RmwoZSksbj9GZyhuLk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgNDpyZXR1cm4gaD1uZXcgWVQsaDtjYXNlIDY6cmV0dXJuIGQ9bmV3IEJwdCxkO2Nhc2UgNzpyZXR1cm4gdz1uZXcgUnB0LHc7Y2FzZSA4OnJldHVybiBzPW5ldyBmdixzO2Nhc2UgOTpyZXR1cm4gcj1uZXcgdnAscjtjYXNlIDEwOnJldHVybiBvPW5ldyByZCxvO2Nhc2UgMTE6cmV0dXJuIGs9bmV3IFlGLGs7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oUmN0K2UuemIra3cpKX19LGwuS2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDEzOmNhc2UgMTI6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxQKF8yLCJFbGtHcmFwaEZhY3RvcnlJbXBsIix3ZiksSSg0MzgsMTUwLHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9KSxsLldnPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj0oZT11KEluKHRoaXMsMTYpLDI2KSxEd3QocGQoZXx8dGhpcy56aCgpKSkpLG49PW51bGw/KFY5KCksVjkoKSxTZnQpOm5ldyBwV3QodGhpcyxuKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMubmUoKX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChCcihuKSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxKNGV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKG51bGwpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSxsLkxoPWZ1bmN0aW9uKGUpe1hjKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWEModGhpcyl9LGwuemI9bnVsbCxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbCIsNDM4KSxJKDE3OSw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sWVh0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBSc2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLnliO2Nhc2UgMzpyZXR1cm4gdGhpcy54YjtjYXNlIDQ6cmV0dXJuIHRoaXMuc2I7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSksdGhpcy5yYjtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHRoaXMudmI7Y2FzZSA3OnJldHVybiBuP3RoaXMuRGI+PjE2PT03P3UodGhpcy5DYiwyMzUpOm51bGw6aFF0KHRoaXMpfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxucCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLFFjKHRoaXMuQWIsZSxyKTtjYXNlIDQ6cmV0dXJuIHRoaXMuc2ImJihyPXUodGhpcy5zYiw0OSkuaWgodGhpcywxLG5BLHIpKSxXeXQodGhpcyx1KGUsNDcxKSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSxRYyh0aGlzLnJiLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgSXgocjEsdGhpcyw2LDcpKSxRYyh0aGlzLnZiLGUscik7Y2FzZSA3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1JzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNyxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLG5wKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksbnApKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDQ6cmV0dXJuIFd5dCh0aGlzLG51bGwscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSksQmEodGhpcy5yYixlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IEl4KHIxLHRoaXMsNiw3KSksQmEodGhpcy52YixlLHIpO2Nhc2UgNzpyZXR1cm4gemwodGhpcyxudWxsLDcscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxucCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLG5wKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMueWIhPW51bGw7Y2FzZSAzOnJldHVybiB0aGlzLnhiIT1udWxsO2Nhc2UgNDpyZXR1cm4hIXRoaXMuc2I7Y2FzZSA1OnJldHVybiEhdGhpcy5yYiYmdGhpcy5yYi5pIT0wO2Nhc2UgNjpyZXR1cm4hIXRoaXMudmImJnRoaXMudmIuaSE9MDtjYXNlIDc6cmV0dXJuISFoUXQodGhpcyl9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxucCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fG5wKSxlKSl9LGwub2g9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49TTJuKHRoaXMsZSksbnx8a3h0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlhjKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6YXoodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMzpzeih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA0OkRzdCh0aGlzLHUobiw0NzEpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgcW0odGhpcyxpMSx0aGlzKSkseHIodGhpcy5yYiksIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSxycyh0aGlzLnJiLHUobiwxNCkpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHhyKHRoaXMudmIpLCF0aGlzLnZiJiYodGhpcy52Yj1uZXcgSXgocjEsdGhpcyw2LDcpKSxycyh0aGlzLnZiLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxucCksZSksbil9LGwudmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihlJiZ0aGlzLnJiKWZvcihyPW5ldyBlcih0aGlzLnJiKTtyLmUhPXIuaS5nYygpOyluPWRyKHIpLEV0KG4sMzUxKSYmKHUobiwzNTEpLnc9bnVsbCk7dDYodGhpcyw2NCxlKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG5wfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmF6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMzpzeih0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6RHN0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHFtKHRoaXMsaTEsdGhpcykpLHhyKHRoaXMucmIpO3JldHVybjtjYXNlIDY6IXRoaXMudmImJih0aGlzLnZiPW5ldyBJeChyMSx0aGlzLDYsNykpLHhyKHRoaXMudmIpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksbnApKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxucCksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7bXN0KHRoaXMpfSxsLk1oPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBxbSh0aGlzLGkxLHRoaXMpKSx0aGlzLnJifSxsLk5oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2J9LGwuT2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51Yn0sbC5QaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnhifSxsLlFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWJ9LGwuUmg9ZnVuY3Rpb24oZSl7dGhpcy51Yj1lfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/WEModGhpcyk6KGU9bmV3IFRoKFhDKHRoaXMpKSxlLmErPSIgKG5zVVJJOiAiLGZvKGUsdGhpcy55YiksZS5hKz0iLCBuc1ByZWZpeDogIixmbyhlLHRoaXMueGIpLGUuYSs9IikiLGUuYSl9LGwueGI9bnVsbCxsLnliPW51bGwsUChNbiwiRVBhY2thZ2VJbXBsIiwxNzkpLEkoNTU1LDE3OSx7MTA1OjEsMjAxNjoxLDU1NToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sUW9lKSxsLnE9ITEsbC5yPSExO3ZhciBGNGU9ITE7UChfMiwiRWxrR3JhcGhQYWNrYWdlSW1wbCIsNTU1KSxJKDM1NCw3MjQsezEwNToxLDQxMzoxLDE2MDoxLDEzNzoxLDQ3MDoxLDM1NDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxZVCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gUTN0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuIGZRdCh0aGlzKTtjYXNlIDg6cmV0dXJuIHRoaXMuYX1yZXR1cm4gczN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA3OnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1EzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSxZdnQodGhpcyx1KGUsMTYwKSxyKX1yZXR1cm4gQXN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbj09Nz9ZdnQodGhpcyxudWxsLHIpOmZpdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA3OnJldHVybiEhZlF0KHRoaXMpO2Nhc2UgODpyZXR1cm4haG4oIiIsdGhpcy5hKX1yZXR1cm4gZjN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA3OkE1dCh0aGlzLHUobiwxNjApKTtyZXR1cm47Y2FzZSA4OlltdCh0aGlzLEJyKG4pKTtyZXR1cm59aDR0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLFJBdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA3OkE1dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6WW10KHRoaXMsIiIpO3JldHVybn12M3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBSYWUodGhpcyl9LGwuYT0iIixQKF8yLCJFbGtMYWJlbEltcGwiLDM1NCksSSgyMzksNzI1LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDMzOjEsNDcwOjEsMjM5OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LEJwdCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gZTR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoZmwsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSksdGhpcy5hO2Nhc2UgMTE6cmV0dXJuIHRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgaGUoV3MsdGhpcywxMiwzKSksdGhpcy5iO2Nhc2UgMTM6cmV0dXJuIEZuKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIGozdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBoZShmbCx0aGlzLDksOSkpLFFjKHRoaXMuYyxlLHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLFFjKHRoaXMuYSxlLHIpO2Nhc2UgMTE6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/ZTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLHJ2dCh0aGlzLHUoZSwzMykscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSxRYyh0aGlzLmIsZSxyKX1yZXR1cm4gaTR0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKGZsLHRoaXMsOSw5KSksQmEodGhpcy5jLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSksQmEodGhpcy5hLGUscik7Y2FzZSAxMTpyZXR1cm4gcnZ0KHRoaXMsbnVsbCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IGhlKFdzLHRoaXMsMTIsMykpLEJhKHRoaXMuYixlLHIpfXJldHVybiBzNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxMTpyZXR1cm4hIXRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEF5dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBoZShmbCx0aGlzLDksOSkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoZmwsdGhpcyw5LDkpKSxycyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUobnMsdGhpcywxMCwxMSkpLHJzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMTpDNXQodGhpcyx1KG4sMzMpKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSx4cih0aGlzLmIpLCF0aGlzLmImJih0aGlzLmI9bmV3IGhlKFdzLHRoaXMsMTIsMykpLHJzKHRoaXMuYix1KG4sMTQpKTtyZXR1cm59ZzV0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLGpBdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA5OiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKGZsLHRoaXMsOSw5KSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShucyx0aGlzLDEwLDExKSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxMTpDNXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBoZShXcyx0aGlzLDEyLDMpKSx4cih0aGlzLmIpO3JldHVybn1JM3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBINXQodGhpcyl9LFAoXzIsIkVsa05vZGVJbXBsIiwyMzkpLEkoMTg2LDcyNSx7MTA1OjEsNDEzOjEsODI6MSwxNjA6MSwxMTg6MSw0NzA6MSwxODY6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sUnB0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBaM3QodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIGU9PTk/azEodGhpcyk6ajN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA5OnJldHVybiB0aGlzLkNiJiYocj0ocz10aGlzLkRiPj4xNixzPj0wP1ozdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1zLG51bGwscikpKSxZMnQodGhpcyx1KGUsMzMpLHIpfXJldHVybiBpNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPT05P1kydCh0aGlzLG51bGwscik6czR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBlPT05PyEhazEodGhpcyk6QXl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA5OlQ1dCh0aGlzLHUobiwzMykpO3JldHVybn1nNXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIFpjKCksJEF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDk6VDV0KHRoaXMsbnVsbCk7cmV0dXJufUkzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFR1ZSh0aGlzKX0sUChfMiwiRWxrUG9ydEltcGwiLDE4Nik7dmFyIEI0ZT1ZaShSYSwiQmFzaWNFTWFwL0VudHJ5Iik7SSgxMDkyLDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LFlGKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSXYodGhpcyl9LGwuVWg9ZnVuY3Rpb24oZSl7WG10KHRoaXMsdShlLDE0NikpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmN9cmV0dXJuIGp6KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGx9cmV0dXJuIGVzdCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpYbXQodGhpcyx1KG4sMTQ2KSk7cmV0dXJuO2Nhc2UgMTpKbXQodGhpcyxuKTtyZXR1cm59anN0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBaYygpLEVifSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6WG10KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpKbXQodGhpcyxudWxsKTtyZXR1cm59TnN0KHRoaXMsZSl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9dGhpcy5iLHRoaXMuYT1lP0hpKGUpOjApLHRoaXMuYX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5jLEptdCh0aGlzLGUpLG59LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgX3AsVnIoVnIoVnIoZSx0aGlzLmI/dGhpcy5iLnRnKCk6VHUpLFBvdCksZEModGhpcy5jKSksZS5hKX0sbC5hPS0xLGwuYz1udWxsO3ZhciAkdz1QKF8yLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeUltcGwiLDEwOTIpO0koOTg0LDEse30sWEYpLFAod2EsIkpzb25BZGFwdGVyIiw5ODQpLEkoMjEwLDYwLFUwLGFkKSxQKHdhLCJKc29uSW1wb3J0RXhjZXB0aW9uIiwyMTApLEkoODU3LDEse30sanNlKSxQKHdhLCJKc29uSW1wb3J0ZXIiLDg1NyksSSg4OTEsMSx7fSxnVnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMCRUeXBlIiw4OTEpLEkoODkyLDEse30scFZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEkVHlwZSIsODkyKSxJKDkwMCwxLHt9LFkkdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMCRUeXBlIiw5MDApLEkoOTAyLDEse30sYlZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDExJFR5cGUiLDkwMiksSSg5MDMsMSx7fSx2VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTIkVHlwZSIsOTAzKSxJKDkwOSwxLHt9LExYdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMyRUeXBlIiw5MDkpLEkoOTA4LDEse30sQVh0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE0JFR5cGUiLDkwOCksSSg5MDQsMSx7fSx3VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTUkVHlwZSIsOTA0KSxJKDkwNSwxLHt9LG1WdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNiRUeXBlIiw5MDUpLEkoOTA2LDEse30seVZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE3JFR5cGUiLDkwNiksSSg5MDcsMSx7fSx4VnQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMTgkVHlwZSIsOTA3KSxJKDkxMiwxLHt9LFgkdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxOSRUeXBlIiw5MTIpLEkoODkzLDEse30sUSR0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIkVHlwZSIsODkzKSxJKDkxMCwxLHt9LFokdCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMCRUeXBlIiw5MTApLEkoOTExLDEse30sSiR0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIxJFR5cGUiLDkxMSksSSg5MTUsMSx7fSx0enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjIkVHlwZSIsOTE1KSxJKDkxMywxLHt9LGV6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMyRUeXBlIiw5MTMpLEkoOTE0LDEse30sbnp0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI0JFR5cGUiLDkxNCksSSg5MTcsMSx7fSxyenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMjUkVHlwZSIsOTE3KSxJKDkxNiwxLHt9LGl6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNiRUeXBlIiw5MTYpLEkoOTE4LDEsVW4sa1Z0KSxsLnRkPWZ1bmN0aW9uKGUpe3Nhbih0aGlzLmIsdGhpcy5hLEJyKGUpKX0sUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNyRUeXBlIiw5MTgpLEkoOTE5LDEsVW4sRVZ0KSxsLnRkPWZ1bmN0aW9uKGUpe2Fhbih0aGlzLmIsdGhpcy5hLEJyKGUpKX0sUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyOCRUeXBlIiw5MTkpLEkoOTIwLDEse30sVFZ0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI5JFR5cGUiLDkyMCksSSg4OTYsMSx7fSxzenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMyRUeXBlIiw4OTYpLEkoOTIxLDEse30sQ1Z0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMwJFR5cGUiLDkyMSksSSg5MjIsMSx7fSxhenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzEkVHlwZSIsOTIyKSxJKDkyMywxLHt9LG96dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMiRUeXBlIiw5MjMpLEkoOTI0LDEse30sY3p0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMzJFR5cGUiLDkyNCksSSg5MjUsMSx7fSx1enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzQkVHlwZSIsOTI1KSxJKDg1OSwxLHt9LGx6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNSRUeXBlIiw4NTkpLEkoOTI5LDEse30seUt0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM2JFR5cGUiLDkyOSksSSg5MjYsMSxVbixoenQpLGwudGQ9ZnVuY3Rpb24oZSl7dXNuKHRoaXMuYSx1KGUsNDY5KSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzckVHlwZSIsOTI2KSxJKDkyNywxLFVuLElWdCksbC50ZD1mdW5jdGlvbihlKXtCWWUodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzgkVHlwZSIsOTI3KSxJKDkyOCwxLFVuLERWdCksbC50ZD1mdW5jdGlvbihlKXtSWWUodGhpcy5hLHRoaXMuYix1KGUsMjAyKSl9LFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkMzkkVHlwZSIsOTI4KSxJKDg5NCwxLHt9LGZ6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ0JFR5cGUiLDg5NCksSSg5MzAsMSxVbixkenQpLGwudGQ9ZnVuY3Rpb24oZSl7bHNuKHRoaXMuYSx1KGUsOCkpfSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDQwJFR5cGUiLDkzMCksSSg4OTUsMSx7fSxnenQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkNSRUeXBlIiw4OTUpLEkoODk5LDEse30scHp0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDYkVHlwZSIsODk5KSxJKDg5NywxLHt9LGJ6dCksUCh3YSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ3JFR5cGUiLDg5NyksSSg4OTgsMSx7fSx2enQpLFAod2EsIkpzb25JbXBvcnRlci9sYW1iZGEkOCRUeXBlIiw4OTgpLEkoOTAxLDEse30sd3p0KSxQKHdhLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDkkVHlwZSIsOTAxKSxJKDk0OCwxLFVuLG16dCksbC50ZD1mdW5jdGlvbihlKXtCeCh0aGlzLmEsbmV3IEhtKEJyKGUpKSl9LFAod2EsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMCRUeXBlIiw5NDgpLEkoOTQ5LDEsVW4seXp0KSxsLnRkPWZ1bmN0aW9uKGUpe19lbih0aGlzLmEsdShlLDIzNykpfSxQKHdhLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDEkVHlwZSIsOTQ5KSxJKDk1MCwxLFVuLHh6dCksbC50ZD1mdW5jdGlvbihlKXtFcm4odGhpcy5hLHUoZSwxNDkpKX0sUCh3YSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQyJFR5cGUiLDk1MCksSSg5NTEsMSxVbixrenQpLGwudGQ9ZnVuY3Rpb24oZSl7U2VuKHRoaXMuYSx1KGUsMTc1KSl9LFAod2EsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMyRUeXBlIiw5NTEpLEkoMjM3LDIyLHszOjEsMzU6MSwyMjoxLDIzNzoxfSxTeCk7dmFyIFhWLFFWLHlmdCxaVixKVix0VSx4ZnQsa2Z0LGVVPWpyKEJELCJHcmFwaEZlYXR1cmUiLDIzNyxIcixZYW4sUUplKSxSNGU7SSgxMywxLHszNToxLDE0NjoxfSxHaSxPcyxtbixlbyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRlhlKHRoaXMsdShlLDE0NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBYWHQodGhpcyxlKX0sbC53Zz1mdW5jdGlvbigpe3JldHVybiBEZSh0aGlzKX0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQmcodGhpcy5iKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LFAoQkQsIlByb3BlcnR5IiwxMyksSSg4MTgsMSxPaSxicHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGxuKHRoaXMsdShlLDk0KSx1KG4sOTQpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZ0KHRoaXMpfSxQKEJELCJQcm9wZXJ0eUhvbGRlckNvbXBhcmF0b3IiLDgxOCksSSg2OTUsMSxyYSx2cHQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBsYW4odGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtwSHQoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hfSxQKHlILCJFbGtHcmFwaFV0aWwvQW5jZXN0b3JJdGVyYXRvciIsNjk1KTt2YXIgcUF0PVlpKFJhLCJFTGlzdCIpO0koNjcsNTIsezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9KSxsLlZjPWZ1bmN0aW9uKGUsbil7SkModGhpcyxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBNcih0aGlzLGUpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHl5dCh0aGlzLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHJzKHRoaXMsZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmJpPWZ1bmN0aW9uKGUsbil7fSxsLmNpPWZ1bmN0aW9uKCl7fSxsLmRpPWZ1bmN0aW9uKGUsbil7QnJ0KHRoaXMsZSxuKX0sbC5laT1mdW5jdGlvbihlLG4scil7fSxsLmZpPWZ1bmN0aW9uKGUsbil7fSxsLmdpPWZ1bmN0aW9uKGUsbixyKXt9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGx1ZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHB5dCh0aGlzKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlcih0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTHgodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG47aWYobj10aGlzLmdjKCksZTwwfHxlPm4pdGhyb3cgcnQobmV3IGptKGUsbikpO3JldHVybiBuZXcgcW50KHRoaXMsZSl9LGwuamk9ZnVuY3Rpb24oZSxuKXt0aGlzLmlpKGUsdGhpcy5YYyhuKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGokKHRoaXMsZSl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB1NCh0aGlzLGUsbil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbzN0KHRoaXMpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUTgodGhpcyxuKX0sUChSYSwiQWJzdHJhY3RFTGlzdCIsNjcpLEkoNjMsNjcsX2QsdHgsS3Ysb3l0KSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExzdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGZzZSh0aGlzLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7ekkodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3VJKHRoaXMsZSl9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIEFtdCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7UkModGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZFKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0KHRoaXMsZSl9LGwucWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzOysrdGhpcy5qLHI9dGhpcy5nPT1udWxsPzA6dGhpcy5nLmxlbmd0aCxlPnImJihzPXRoaXMuZyxuPXIrKHIvMnwwKSs0LG48ZSYmKG49ZSksdGhpcy5nPXRoaXMucmkobikscyE9bnVsbCYmSWMocywwLHRoaXMuZywwLHRoaXMuaSkpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBPc2UodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmk9PTB9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcXN0KHRoaXMsZSxuKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoWG4sSWUsMSxlLDUsMSl9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ1tlXX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gcjYodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiBLcnQodGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBKd3QodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG0zdCh0aGlzLGUpfSxsLmk9MDt2YXIgSEF0PVAoUmEsIkJhc2ljRUxpc3QiLDYzKSxHQXQ9WWkoUmEsIlRyZWVJdGVyYXRvciIpO0koNjk0LDYzLFljdCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZz09bnVsbCYmIXRoaXMuYz9Gd3QodGhpcyk6dGhpcy5nPT1udWxsfHx0aGlzLmkhPTAmJnUodGhpcy5nW3RoaXMuaS0xXSw0NykuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBhcSh0aGlzKX0sbC5RYj1mdW5jdGlvbigpe2lmKCF0aGlzLmUpdGhyb3cgcnQobmV3IEZvKCJUaGVyZSBpcyBubyB2YWxpZCBvYmplY3QgdG8gcmVtb3ZlLiIpKTt0aGlzLmUuUWIoKX0sbC5jPSExLFAoUmEsIkFic3RyYWN0VHJlZUl0ZXJhdG9yIiw2OTQpLEkoNjg1LDY5NCxZY3QscjJ0KSxsLnNpPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoZSw1NikuV2coKS5LYygpLEV0KG4sMjc5KSYmdShuLDI3OSkuTmsobmV3IFVaKSxufSxQKHlILCJFbGtHcmFwaFV0aWwvUHJvcGVydGllc1NraXBwaW5nVHJlZUl0ZXJhdG9yIiw2ODUpLEkoOTUyLDEse30sVVopLFAoeUgsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMSIsOTUyKTt2YXIgY04sRWZ0LHVOPVAoeUgsIkVsa1JlZmxlY3QiLG51bGwpO0koODg5LDEsU3ksWFQpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGckKCksUHNuKHUoZSwxNzQpKX0sUCh5SCwiRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlIiw4ODkpO3ZhciBUYjtZaShSYSwiUmVzb3VyY2VMb2NhdG9yIiksSSgxMDUxLDEse30pLFAoUmEsIkRlbGVnYXRpbmdSZXNvdXJjZUxvY2F0b3IiLDEwNTEpLEkoMTA1MiwxMDUxLHt9KSxQKCJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiwiRU1GUGx1Z2luIiwxMDUyKTt2YXIgVGZ0PVlpKHMwZSwiQWRhcHRlciIpLHl4bj1ZaShzMGUsIk5vdGlmaWNhdGlvbiIpO0koMTE1MywxLE04dCksbC50aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwudWk9ZnVuY3Rpb24oZSl7fSxsLnZpPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLndpPWZ1bmN0aW9uKGUpe3RoaXMuZD09ZSYmKHRoaXMuZD1udWxsKX0sbC5kPW51bGwsUChrNiwiQWRhcHRlckltcGwiLDExNTMpLEkoMTk5NSw2NyxhMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZDN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoKyt0aGlzLmosZS5kYygpKXJldHVybiExO2ZvcihuPXRoaXMuVmkoKSxzPWUuS2MoKTtzLk9iKCk7KXI9cy5QYigpLHRoaXMuSWkodGhpcy5vaShuLHIpKSwrK247cmV0dXJuITB9LGwuWGg9ZnVuY3Rpb24oZSxuKXtBV3QodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe25YdCh0aGlzLGUpfSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSmkoKX0sbC4kYj1mdW5jdGlvbigpe2pNKHRoaXMsdGhpcy5WaSgpLHRoaXMuV2koKSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTGkoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTWkoZSl9LGwuSGk9ZnVuY3Rpb24oZSxuKXt0aGlzLlNpKCkuam0oKX0sbC5JaT1mdW5jdGlvbihlKXt0aGlzLlNpKCkuam0oKX0sbC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCl9LGwuS2k9ZnVuY3Rpb24oKXt0aGlzLlNpKCkuam0oKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuTWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLk5pPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5PaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlJpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlRpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5WaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5XaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5YaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuWWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTmkoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGkoZSx0aGlzLk9pKGUpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBpKCl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuUWkoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SaSgpfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE00dCh0aGlzLGUsbil9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuT2koZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIERqKHRoaXMsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dGhpcy5YYyhlKSxuPj0wPyh0aGlzLiRjKG4pLCEwKTohMX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLlVpKGUsdGhpcy5vaShlLG4pKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlZpKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XaSgpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlhpKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWkoKX0sUChSYSwiRGVsZWdhdGluZ0VMaXN0IiwxOTk1KSxJKDE5OTYsMTk5NSxhMGUpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjV0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5WaCh0aGlzLlZpKCksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtZb2UodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpeyRvZSh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYmooKX0sbC4kYj1mdW5jdGlvbigpe0NfKHRoaXMpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBaWHQodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuQWkoKSxlKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5laj1mdW5jdGlvbigpe3JldHVybiExfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuUmkoKX0sbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHRoaXMuZWooKT8ocz10aGlzLmZqKCkscj1NNHQodGhpcyxlLG4pLHRoaXMuJGkodGhpcy5aaSg3LGRlKG4pLHIsZSxzKSkscik6TTR0KHRoaXMsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gdGhpcy5laigpPyhyPW51bGwscz10aGlzLmZqKCksbj10aGlzLlppKDQsbz1Eaih0aGlzLGUpLG51bGwsZSxzKSx0aGlzLmJqKCkmJm8/KHI9dGhpcy5kaihvLHIpLHI/KHIuRWkobiksci5GaSgpKTp0aGlzLiRpKG4pKTpyPyhyLkVpKG4pLHIuRmkoKSk6dGhpcy4kaShuKSxvKToobz1Eaih0aGlzLGUpLHRoaXMuYmooKSYmbyYmKHI9dGhpcy5kaihvLG51bGwpLHImJnIuRmkoKSksbyl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmxlKHRoaXMsZSxuKX0sUChrNiwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsIiwxOTk2KSxJKDE0MywxLFFEKSxsLkVpPWZ1bmN0aW9uKGUpe3JldHVybiB2NHQodGhpcyxlKX0sbC5GaT1mdW5jdGlvbigpe1VydCh0aGlzKX0sbC54aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5naj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybi0xfSxsLnppPWZ1bmN0aW9uKCl7cmV0dXJuIEhjZSh0aGlzKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLkJpPWZ1bmN0aW9uKCl7cmV0dXJuIE81dCh0aGlzKX0sbC5DaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vfSxsLmhqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOnN3aXRjaChvPWUueGkoKSxvKXtjYXNlIDE6Y2FzZSAyOmlmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5nPWUuemkoKSxlLnhpKCk9PTEmJih0aGlzLmQ9MSksITB9Y2FzZSA0Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIEM9cHh0KHRoaXMpLGs9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyxkPWUuQ2koKSx0aGlzLmQ9NixGPW5ldyBLdigyKSxrPD1kPyhNcihGLHRoaXMubiksTXIoRixlLkJpKCkpLHRoaXMuZz1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vPWssZCsxXSkpOihNcihGLGUuQmkoKSksTXIoRix0aGlzLm4pLHRoaXMuZz1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vPWQsa10pKSx0aGlzLm49RixDfHwodGhpcy5vPS0yLXRoaXMuby0xKSwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuQWkoKSkmJnRoaXMueWkobnVsbCk9PWUueWkobnVsbCkpe2ZvcihDPXB4dCh0aGlzKSxkPWUuQ2koKSxNPXUodGhpcy5nLDQ4KSxzPVB0KFRyLFhyLDI1LE0ubGVuZ3RoKzEsMTUsMSksbj0wO248TS5sZW5ndGgmJih3PU1bbl0sdzw9ZCk7KXNbbisrXT13LCsrZDtmb3Iocj11KHRoaXMubiwxNSksci5WYyhuLGUuQmkoKSksc1tuXT1kOysrbjxzLmxlbmd0aDspc1tuXT1NW24tMV07cmV0dXJuIHRoaXMuZz1zLEN8fCh0aGlzLm89LTItc1swXSksITB9YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzO3N3aXRjaChzPW5ldyBUaChBcCh0aGlzLmdtKSsiQCIrKG49SGkodGhpcyk+Pj4wLG4udG9TdHJpbmcoMTYpKSkscy5hKz0iIChldmVudFR5cGU6ICIsdGhpcy5kKXtjYXNlIDE6e3MuYSs9IlNFVCI7YnJlYWt9Y2FzZSAyOntzLmErPSJVTlNFVCI7YnJlYWt9Y2FzZSAzOntzLmErPSJBREQiO2JyZWFrfWNhc2UgNTp7cy5hKz0iQUREX01BTlkiO2JyZWFrfWNhc2UgNDp7cy5hKz0iUkVNT1ZFIjticmVha31jYXNlIDY6e3MuYSs9IlJFTU9WRV9NQU5ZIjticmVha31jYXNlIDc6e3MuYSs9Ik1PVkUiO2JyZWFrfWNhc2UgODp7cy5hKz0iUkVNT1ZJTkdfQURBUFRFUiI7YnJlYWt9Y2FzZSA5OntzLmErPSJSRVNPTFZFIjticmVha31kZWZhdWx0Ont1ZXQocyx0aGlzLmQpO2JyZWFrfX1pZihJdWUodGhpcykmJihzLmErPSIsIHRvdWNoOiB0cnVlIikscy5hKz0iLCBwb3NpdGlvbjogIix1ZXQocyx0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vKSxzLmErPSIsIG5vdGlmaWVyOiAiLG9DKHMsdGhpcy5BaSgpKSxzLmErPSIsIGZlYXR1cmU6ICIsb0Mocyx0aGlzLl9pKCkpLHMuYSs9Iiwgb2xkVmFsdWU6ICIsb0MocyxPNXQodGhpcykpLHMuYSs9IiwgbmV3VmFsdWU6ICIsdGhpcy5kPT02JiZFdCh0aGlzLmcsNDgpKXtmb3Iocj11KHRoaXMuZyw0OCkscy5hKz0iWyIsZT0wO2U8ci5sZW5ndGg7KXMuYSs9cltlXSwrK2U8ci5sZW5ndGgmJihzLmErPUthKTtzLmErPSJdIn1lbHNlIG9DKHMsSGNlKHRoaXMpKTtyZXR1cm4gcy5hKz0iLCBpc1RvdWNoOiAiLGtnKHMsSXVlKHRoaXMpKSxzLmErPSIsIHdhc1NldDogIixrZyhzLHB4dCh0aGlzKSkscy5hKz0iKSIscy5hfSxsLmQ9MCxsLmU9MCxsLmY9MCxsLmo9MCxsLms9MCxsLm89MCxsLnA9MCxQKGs2LCJOb3RpZmljYXRpb25JbXBsIiwxNDMpLEkoMTE2NywxNDMsUUQsWlh0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5faSgpfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuYWooKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuQWkoKX0sUChrNiwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEiLDExNjcpLEkoMjQyLDYzLF9kLGV4LFNwKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBvaWUodGhpcyx1KGUsMzY2KSl9LGwuRWk9ZnVuY3Rpb24oZSl7cmV0dXJuIG9pZSh0aGlzLGUpfSxsLkZpPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihlPTA7ZTx0aGlzLmk7KytlKW49dSh0aGlzLmdbZV0sMzY2KSxyPW4uQWkoKSxyIT1udWxsJiZuLnhpKCkhPS0xJiZ1KHIsOTIpLk5nKG4pfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBQdCh5eG4sSWUsMzY2LGUsMCwxKX0sUChrNiwiTm90aWZpY2F0aW9uQ2hhaW5JbXBsIiwyNDIpLEkoMTM3OCw5MCx3ZGUpLGwuS2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZiYxKSE9MH0sbC5mPTEsUChrNiwiTm90aWZpZXJJbXBsIiwxMzc4KSxJKDE5OTMsNjMsX2QpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaGF0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5WaCh0aGlzLmksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXthNXQodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe0hzdCh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYmooKX0sbC4kYj1mdW5jdGlvbigpe3hyKHRoaXMpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBKWHQodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuQWkoKSxlKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRfKHRoaXMsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gZHkodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB3bGUodGhpcyxlLG4pfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LFAoazYsIk5vdGlmeWluZ0xpc3RJbXBsIiwxOTkzKSxJKDExNjYsMTQzLFFELEpYdCksbC5faT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuX2koKX0sbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLmFqKCl9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkFpKCl9LFAoazYsIk5vdGlmeWluZ0xpc3RJbXBsLzEiLDExNjYpLEkoOTUzLDYzLF9kLElXdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pPjEwPygoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSkmJih0aGlzLmI9bmV3IHlDKHRoaXMpLHRoaXMuYT10aGlzLmopLFMwKHRoaXMuYixlKSk6ZkUodGhpcyxlKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmE9MCxQKFJhLCJBYnN0cmFjdEVMaXN0LzEiLDk1MyksSSgyOTUsNzMsc290LGptKSxQKFJhLCJBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMjk1KSxJKDQwLDEscmEsZXIpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuaS5qIT10aGlzLmYpdGhyb3cgcnQobmV3IGVoKX0sbC5uaj1mdW5jdGlvbigpe3JldHVybiBkcih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmooKX0sbC5RYj1mdW5jdGlvbigpe3VfKHRoaXMpfSxsLmU9MCxsLmY9MCxsLmc9LTEsUChSYSwiQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3IiLDQwKSxJKDI3OCw0MCxKZCxMeCxxbnQpLGwuUWI9ZnVuY3Rpb24oKXt1Xyh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXtnaWUodGhpcyxlKX0sbC5vaj1mdW5jdGlvbigpe3ZhciBlO3RyeXtyZXR1cm4gZT10aGlzLmQuWGIoLS10aGlzLmUpLHRoaXMubWooKSx0aGlzLmc9dGhpcy5lLGV9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxFdChuLDczKT8odGhpcy5taigpLHJ0KG5ldyBsYykpOnJ0KG4pfX0sbC5waj1mdW5jdGlvbihlKXtwc2UodGhpcyxlKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPTB9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2ooKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUtMX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLnBqKGUpfSxQKFJhLCJBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3IiLDI3OCksSSgzNDEsNDAscmEsTXgpLGwubmo9ZnVuY3Rpb24oKXtyZXR1cm4gbnN0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sUChSYSwiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDM0MSksSSgzODUsMjc4LEpkLFBNLGx2dCksbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLm5qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuYy5raSh0aGlzLmUpLHRoaXMubWooKSx0aGlzLmc9dGhpcy5lKyssZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0aGlzLm1qKCkscnQobmV3IGxjKSk6cnQobil9fSxsLm9qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuYy5raSgtLXRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUsZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLEV0KG4sNzMpPyh0aGlzLm1qKCkscnQobmV3IGxjKSk6cnQobil9fSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxQKFJhLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDM4NSksSSgxOTgyLDY3LG8wZSksbC5WaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEg7aWYobz1uLmdjKCksbyE9MCl7Zm9yKEM9dShJbih0aGlzLmEsNCksMTI2KSxNPUM9PW51bGw/MDpDLmxlbmd0aCxIPU0rbyxzPVRpdCh0aGlzLEgpLEY9TS1lLEY+MCYmSWMoQyxlLHMsZStvLEYpLGs9bi5LYygpLGQ9MDtkPG87KytkKXc9ay5QYigpLHI9ZStkLFhldChzLHIsUTgodGhpcyx3KSk7Zm9yKGNFKHRoaXMscyksaD0wO2g8bzsrK2gpdz1zW2VdLHRoaXMuYmkoZSx3KSwrK2U7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0sbC5XaD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYocz1lLmdjKCkscyE9MCl7Zm9yKGs9KHI9dShJbih0aGlzLmEsNCksMTI2KSxyPT1udWxsPzA6ci5sZW5ndGgpLEM9aytzLG49VGl0KHRoaXMsQyksdz1lLktjKCksaD1rO2g8QzsrK2gpZD13LlBiKCksWGV0KG4saCxROCh0aGlzLGQpKTtmb3IoY0UodGhpcyxuKSxvPWs7bzxDOysrbylkPW5bb10sdGhpcy5iaShvLGQpO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGwuWGg9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saDtzPXUoSW4odGhpcy5hLDQpLDEyNiksbz1zPT1udWxsPzA6cy5sZW5ndGgscj1UaXQodGhpcyxvKzEpLGg9UTgodGhpcyxuKSxlIT1vJiZJYyhzLGUscixlKzEsby1lKSxKaShyLGUsaCksY0UodGhpcyxyKSx0aGlzLmJpKGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3M9KHI9dShJbih0aGlzLmEsNCksMTI2KSxyPT1udWxsPzA6ci5sZW5ndGgpLG49VGl0KHRoaXMscysxKSxYZXQobixzLFE4KHRoaXMsZSkpLGNFKHRoaXMsbiksdGhpcy5iaShzLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtSnQodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9ZdCh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXt2YXIgbixyO2lmKHI9KG49dShJbih0aGlzLmEsNCksMTI2KSxuPT1udWxsPzA6bi5sZW5ndGgpLGU8MHx8ZT5yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtyZXR1cm4gbmV3IHVYdCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjsrK3RoaXMuaixlPXUoSW4odGhpcy5hLDQpLDEyNiksbj1lPT1udWxsPzA6ZS5sZW5ndGgsY0UodGhpcyxudWxsKSxCcnQodGhpcyxuLGUpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYobj11KEluKHRoaXMuYSw0KSwxMjYpLG4hPW51bGwpe2lmKGUhPW51bGwpe2ZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10seWkoZSxyKSlyZXR1cm4hMH1lbHNlIGZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10sR3Qocik9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4hMX0sbC5YYj1mdW5jdGlvbihlKXt2YXIgbixyO2lmKG49dShJbih0aGlzLmEsNCksMTI2KSxyPW49PW51bGw/MDpuLmxlbmd0aCxlPj1yKXRocm93IHJ0KG5ldyBqbShlLHIpKTtyZXR1cm4gbltlXX0sbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYobj11KEluKHRoaXMuYSw0KSwxMjYpLG4hPW51bGwpe2lmKGUhPW51bGwpe2ZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKHlpKGUsbltyXSkpcmV0dXJuIHJ9ZWxzZSBmb3Iocj0wLHM9bi5sZW5ndGg7cjxzOysrcilpZihHdChuW3JdKT09PUd0KGUpKXJldHVybiByfXJldHVybi0xfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSW4odGhpcy5hLDQpLDEyNik9PW51bGx9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdKdCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRFl0KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYocj0obj11KEluKHRoaXMuYSw0KSwxMjYpLG49PW51bGw/MDpuLmxlbmd0aCksZTwwfHxlPnIpdGhyb3cgcnQobmV3IGptKGUscikpO3JldHVybiBuZXcgY1h0KHRoaXMsZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87aWYocj1raWUodGhpcyksbz1yPT1udWxsPzA6ci5sZW5ndGgsZT49byl0aHJvdyBydChuZXcgbW8oV2N0K2UrUzIrbykpO2lmKG4+PW8pdGhyb3cgcnQobmV3IG1vKEtjdCtuK1MyK28pKTtyZXR1cm4gcz1yW25dLGUhPW4mJihlPG4/SWMocixlLHIsZSsxLG4tZSk6SWMocixuKzEscixuLGUtbiksSmkocixlLHMpLGNFKHRoaXMscikpLHN9LGwua2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoSW4odGhpcy5hLDQpLDEyNilbZV19LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIENwbih0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcj1raWUodGhpcykscz1yW2VdLFhldChyLGUsUTgodGhpcyxuKSksY0UodGhpcyxyKSxzfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dShJbih0aGlzLmEsNCksMTI2KSxlPT1udWxsPzA6ZS5sZW5ndGh9LGwuUGM9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9dShJbih0aGlzLmEsNCksMTI2KSxyPWU9PW51bGw/MDplLmxlbmd0aCxuPVB0KFRmdCxKY3QsNDE1LHIsMCwxKSxyPjAmJkljKGUsMCxuLDAsciksbn0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIG49dShJbih0aGlzLmEsNCksMTI2KSxzPW49PW51bGw/MDpuLmxlbmd0aCxzPjAmJihlLmxlbmd0aDxzJiYocj1DSShzbChlKS5jLHMpLGU9ciksSWMobiwwLGUsMCxzKSksZS5sZW5ndGg+cyYmSmkoZSxzLG51bGwpLGV9O3ZhciBqNGU7UChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QiLDE5ODIpLEkoMTAzOCw0MCxyYSx3SnQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxHdCh1KEluKHRoaXMuYi5hLDQpLDEyNikpIT09R3QodGhpcy5hKSl0aHJvdyBydChuZXcgZWgpfSxsLlFiPWZ1bmN0aW9uKCl7dV8odGhpcyksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX0sUChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yIiwxMDM4KSxJKDcwNiwyNzgsSmQsRFl0LGNYdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fEd0KHUoSW4odGhpcy5iLmEsNCksMTI2KSkhPT1HdCh0aGlzLmEpKXRocm93IHJ0KG5ldyBlaCl9LGwucGo9ZnVuY3Rpb24oZSl7cHNlKHRoaXMsZSksdGhpcy5hPXUoSW4odGhpcy5iLmEsNCksMTI2KX0sbC5RYj1mdW5jdGlvbigpe3VfKHRoaXMpLHRoaXMuYT11KEluKHRoaXMuYi5hLDQpLDEyNil9LFAoUmEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3IiLDcwNiksSSgxMDM5LDM0MSxyYSxtSnQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxHdCh1KEluKHRoaXMuYi5hLDQpLDEyNikpIT09R3QodGhpcy5hKSl0aHJvdyBydChuZXcgZWgpfSxQKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDEwMzkpLEkoNzA3LDM4NSxKZCxPWXQsdVh0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8R3QodShJbih0aGlzLmIuYSw0KSwxMjYpKSE9PUd0KHRoaXMuYSkpdGhyb3cgcnQobmV3IGVoKX0sUChSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsNzA3KSxJKDYwNiwyOTUsc290LFZldCksUChSYSwiQmFzaWNFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDYwNiksSSg2OTYsNjMsX2QsWWJ0KSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5HYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5xaT1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmgoKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoKCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2goZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxsLmppPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLk1jPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBydChuZXcgT3IpfSxQKFJhLCJCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Iiw2OTYpLEkoNzA1LDEsezM6MSwyMDoxLDE0OjEsMTU6MSw1ODoxLDU4OToxfSksbC5WYz1mdW5jdGlvbihlLG4pe19YZSh0aGlzLGUsdShuLDQyKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZRZSh0aGlzLHUoZSw0MikpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoU3QodGhpcy5jLGUpLDEzMyl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdSh0aGlzLmMuaWkoZSxuKSw0Mil9LGwuamk9ZnVuY3Rpb24oZSxuKXtTWGUodGhpcyxlLHUobiw0MikpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcy5jLiRjKGUpLDQyKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB5ZW4odGhpcyxlLHUobiw0MikpfSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5jLldjKGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5HYyhlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIElJKHRoaXMuYyxlKX0sbC5xaj1mdW5jdGlvbigpe3ZhciBlLG4scjtpZih0aGlzLmQ9PW51bGwpe2Zvcih0aGlzLmQ9UHQoSEF0LEk4dCw2MywyKnRoaXMuZisxLDAsMSkscj10aGlzLmUsdGhpcy5mPTAsbj10aGlzLmMuS2MoKTtuLmUhPW4uaS5nYygpOyllPXUobi5uaigpLDEzMykscXoodGhpcyxlKTt0aGlzLmU9cn19LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGlLdCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHB5dCh0aGlzLmMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuWGMoZSl9LGwucmo9ZnVuY3Rpb24oKXt0aGlzLmM9bmV3IFR6dCh0aGlzKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmY9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLktjKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLlljKCl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5aYyhlKX0sbC5zaj1mdW5jdGlvbigpe3JldHVybiBmSSh0aGlzKX0sbC50aj1mdW5jdGlvbihlLG4scil7cmV0dXJuIG5ldyB4S3QoZSxuLHIpfSxsLnVqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3cH0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gQmVlKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBLZCh0aGlzLmMsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLlFjKGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG8zdCh0aGlzLmMpfSxsLmU9MCxsLmY9MCxQKFJhLCJCYXNpY0VNYXAiLDcwNSksSSgxMDMzLDYzLF9kLFR6dCksbC5iaT1mdW5jdGlvbihlLG4pe3VLZSh0aGlzLHUobiwxMzMpKX0sbC5laT1mdW5jdGlvbihlLG4scil7dmFyIHM7Kysocz10aGlzLHUobiwxMzMpLHMpLmEuZX0sbC5maT1mdW5jdGlvbihlLG4pe2xLZSh0aGlzLHUobiwxMzMpKX0sbC5naT1mdW5jdGlvbihlLG4scil7SlhlKHRoaXMsdShuLDEzMyksdShyLDEzMykpfSxsLmRpPWZ1bmN0aW9uKGUsbil7U25lKHRoaXMuYSl9LFAoUmEsIkJhc2ljRU1hcC8xIiwxMDMzKSxJKDEwMzQsNjMsX2Qsd3ApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHh4bixjMGUsNjEyLGUsMCwxKX0sUChSYSwiQmFzaWNFTWFwLzIiLDEwMzQpLEkoMTAzNSxOMSxqdSxDenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBXaXQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhmOCgpLGxOLmEpOm5ldyBhSHQodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmEuZixJeih0aGlzLmEsZSksdGhpcy5hLmYhPW59LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LFAoUmEsIkJhc2ljRU1hcC8zIiwxMDM1KSxJKDEwMzYsMjgsd3ksX3p0KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gaHVlKHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oZjgoKSxsTi5hKTpuZXcgb0h0KHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LFAoUmEsIkJhc2ljRU1hcC80IiwxMDM2KSxJKDEwMzcsTjEsanUsU3p0KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdyxrLEM7aWYodGhpcy5hLmY+MCYmRXQoZSw0MikmJih0aGlzLmEucWooKSxrPXUoZSw0Miksdz1rLmNkKCksbz13PT1udWxsPzA6SGkodyksaD1YMnQodGhpcy5hLG8pLG49dGhpcy5hLmRbaF0sbikpe2ZvcihyPXUobi5nLDM2NyksQz1uLmksZD0wO2Q8QzsrK2QpaWYocz1yW2RdLHMuU2goKT09byYmcy5GYihrKSlyZXR1cm4hMH1yZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oZjgoKSxsTi5hKTpuZXcgaXJ0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJjZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxQKFJhLCJCYXNpY0VNYXAvNSIsMTAzNyksSSg2MTMsMSxyYSxpcnQpLGwuTmI9ZnVuY3Rpb24oZSl7cGEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIhPS0xfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyBydChuZXcgZWgpO2lmKHRoaXMuYj09LTEpdGhyb3cgcnQobmV3IGxjKTtyZXR1cm4gdGhpcy5kPXRoaXMuYSx0aGlzLmU9dGhpcy5iLFZzZSh0aGlzKSxlPXUodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTMzKSx0aGlzLnZqKGUpfSxsLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyBydChuZXcgZWgpO2lmKHRoaXMuZT09LTEpdGhyb3cgcnQobmV3IEl1KTt0aGlzLmYuYy5NYyhTdCh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpLHRoaXMuYz10aGlzLmYuZSx0aGlzLmU9LTEsdGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifSxsLnZqPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxsLmE9MCxsLmI9LTEsbC5jPTAsbC5kPTAsbC5lPTAsUChSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcEl0ZXJhdG9yIiw2MTMpLEkoMTAzMSw2MTMscmEsYUh0KSxsLnZqPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNkKCl9LFAoUmEsIkJhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvciIsMTAzMSksSSgxMDMyLDYxMyxyYSxvSHQpLGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGQoKX0sUChSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3IiLDEwMzIpLEkoMTAzMCwxLGJ3LEF6dCksbC53Yz1mdW5jdGlvbihlKXtVQyh0aGlzLGUpfSxsLnljPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gJGl0KHRoaXMsZSxuLHIpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gJFZ0KHRoaXMsZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGh1ZSh0aGlzLmEsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gcXNuKHRoaXMuYSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGlLdCh0aGlzLmEsZSl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFlmKHRoaXMuYSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBweXQodGhpcy5hLmMpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIEhzbih0aGlzLmEpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFl6KHRoaXMuYSxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBJeih0aGlzLmEsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbzN0KHRoaXMuYS5jKX0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB6c24odGhpcy5hKX0sUChSYSwiQmFzaWNFTWFwL0RlbGVnYXRpbmdNYXAiLDEwMzApLEkoNjEyLDEsezQyOjEsMTMzOjEsNjEyOjF9LHhLdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gRXQoZSw0Mik/KG49dShlLDQyKSwodGhpcy5iIT1udWxsP3lpKHRoaXMuYixuLmNkKCkpOkd0KHRoaXMuYik9PT1HdChuLmNkKCkpKSYmKHRoaXMuYyE9bnVsbD95aSh0aGlzLmMsbi5kZCgpKTpHdCh0aGlzLmMpPT09R3Qobi5kZCgpKSkpOiExfSxsLlNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYV4odGhpcy5jPT1udWxsPzA6SGkodGhpcy5jKSl9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuVWg9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IFZiKX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsdGhpcy5jPWUsbn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIrIi0+Iit0aGlzLmN9LGwuYT0wO3ZhciB4eG49UChSYSwiQmFzaWNFTWFwL0VudHJ5SW1wbCIsNjEyKTtJKDUzNiwxLHt9LFRrKSxQKFJhLCJCYXNpY0VNYXAvVmlldyIsNTM2KTt2YXIgbE47SSg3NjgsMSx7fSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gcDV0KCh2bigpLGlvKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBTeXQoKHZuKCksaW8pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBRcCgodm4oKSxpbykpfSxQKFJhLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Iiw3NjgpLEkoMTMxMiwxLEpkLFFGKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuUGI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgbGMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuVWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LFAoUmEsIkVDb2xsZWN0aW9ucy9CYXNpY0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QvMSIsMTMxMiksSSgxMzEwLDc2OCx7MjA6MSwxNDoxLDE1OjEsNTg6MX0sdnF0KSxsLlZjPWZ1bmN0aW9uKGUsbil7QUh0KCl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIExIdCgpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1IdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBJSHQoKX0sbC4kYj1mdW5jdGlvbigpe0RIdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpidCgodm4oKSxlKSksbnVsbH0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4tMX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiEwfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBPSHQoKX0sbC5qaT1mdW5jdGlvbihlLG4pe05IdCgpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBIdCgpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBGSHQoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBCSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFkPWZ1bmN0aW9uKGUpe2U0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm4oKSxuZXcgS2QoaW8sZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBadnQoKHZuKCksaW8pKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gdm4oKSxYSShpbyxlKX0sUChSYSwiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QiLDEzMTApLEkoMTMxMSw3NjgsezIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjF9LHdxdCksbC5WYz1mdW5jdGlvbihlLG4pe0FIdCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBMSHQoKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiBNSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gSUh0KCl9LGwuJGI9ZnVuY3Rpb24oKXtESHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBaYnQoKHZuKCksZSkpLG51bGx9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT0h0KCl9LGwuamk9ZnVuY3Rpb24oZSxuKXtOSHQoKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBQSHQoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gRkh0KCl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQkh0KCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hZD1mdW5jdGlvbihlKXtlNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZuKCksbmV3IEtkKGlvLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gWnZ0KCh2bigpLGlvKSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZuKCksWEkoaW8sZSl9LGwuc2o9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGEwfSxQKFJhLCJFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTWFwIiwxMzExKTt2YXIgVkF0PVlpKFJhLCJFbnVtZXJhdG9yIiksblU7SSgyODEsMSx7MjgxOjF9LGVhdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcz09PWU/ITA6RXQoZSwyODEpPyhuPXUoZSwyODEpLHRoaXMuZj09bi5mJiZ6dG4odGhpcy5pLG4uaSkmJkFudCh0aGlzLmEsdGhpcy5mJjI1Nj9uLmYmMjU2P24uYTpudWxsOm4uZiYyNTY/bnVsbDpuLmEpJiZBbnQodGhpcy5kLG4uZCkmJkFudCh0aGlzLmcsbi5nKSYmQW50KHRoaXMuZSxuLmUpJiZQaG4odGhpcyxuKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHF1ZSh0aGlzKX0sbC5mPTA7dmFyICQ0ZT0wLHo0ZT0wLHE0ZT0wLEg0ZT0wLFVBdD0wLFdBdD0wLEtBdD0wLFlBdD0wLFhBdD0wLEc0ZSxpQT0wLHNBPTAsVjRlPTAsVTRlPTAsclUsUUF0O1AoUmEsIlVSSSIsMjgxKSxJKDEwOTEsNDMsXzQsbXF0KSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUoeG8odGhpcyxCcihlKSx1KG4sMjgxKSksMjgxKX0sUChSYSwiVVJJL1VSSUNhY2hlIiwxMDkxKSxJKDQ5Nyw2MyxfZCxDayxOaiksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKFJhLCJVbmlxdWVFTGlzdCIsNDk3KSxJKDU4MSw2MCxVMCxGJCksUChSYSwiV3JhcHBlZEV4Y2VwdGlvbiIsNTgxKTt2YXIgWnI9WWkoZGgsaDBlKSxReT1ZaShkaCxmMGUpLEF1PVlpKGRoLGQwZSksWnk9WWkoZGgsZzBlKSxpMT1ZaShkaCxwMGUpLEdoPVlpKGRoLCJFQ2xhc3MiKSxDZnQ9WWkoZGgsIkVEYXRhVHlwZSIpLFc0ZTtJKDExODMsNDMsXzQseXF0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9GYyh0aGlzLGUpOmVjKEFvKHRoaXMuZixlKSl9LFAoZGgsIkVEYXRhVHlwZS9JbnRlcm5hbC9Db252ZXJzaW9uRGVsZWdhdGUvRmFjdG9yeS9SZWdpc3RyeS9JbXBsIiwxMTgzKTt2YXIgaVU9WWkoZGgsIkVFbnVtIiksZWc9WWkoZGgsYjBlKSxobz1ZaShkaCx2MGUpLFZoPVlpKGRoLHcwZSksVWgsenc9WWkoZGgsbTBlKSxKeT1ZaShkaCx5MGUpO0koMTAyOSwxLHt9LFZaKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk5JTCJ9LFAoZGgsIkVTdHJ1Y3R1cmFsRmVhdHVyZS9JbnRlcm5hbC9EeW5hbWljVmFsdWVIb2xkZXIvMSIsMTAyOSk7dmFyIEs0ZTtJKDEwMjgsNDMsXzQseHF0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9GYyh0aGlzLGUpOmVjKEFvKHRoaXMuZixlKSl9LFAoZGgsIkVTdHJ1Y3R1cmFsRmVhdHVyZS9JbnRlcm5hbC9TZXR0aW5nRGVsZWdhdGUvRmFjdG9yeS9SZWdpc3RyeS9JbXBsIiwxMDI4KTt2YXIgbHU9WWkoZGgseDBlKSxWNj1ZaShkaCwiRVZhbGlkYXRvci9QYXR0ZXJuTWF0Y2hlciIpLFpBdCxKQXQsTG4sSmcsdDMsQ2IsWTRlLFg0ZSxRNGUsX2IsdHAsU2IscXcsVjEsWjRlLEo0ZSxXaCxlcCx0NWUsbnAsZTMsYzUsUWEsZTVlLG41ZSxIdyxzVT1ZaSgkaSwiRmVhdHVyZU1hcC9FbnRyeSIpO0koNTM1LDEsezcyOjF9LEpSKSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvMSIsNTM1KSxJKDEwMjcsMSx0dXQsT1Z0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiBQcnQodGhpcy5hLHRoaXMuYixlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBkUXQodGhpcy5hLHRoaXMuYil9LGwuV2I9ZnVuY3Rpb24oZSl7Tnd0KHRoaXMuYSx0aGlzLmIsZSl9LGwuWGo9ZnVuY3Rpb24oKXtCZW4odGhpcy5hLHRoaXMuYil9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvNCIsMTAyNyksSSgxOTgzLDEsezEwODoxfSksbC5iaz1mdW5jdGlvbihlKXt0aGlzLmU9ZT09MD9yNWU6UHQoWG4sSWUsMSxlLDUsMSl9LGwuQ2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZVtlXX0sbC5EaD1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1ufSxsLkVoPWZ1bmN0aW9uKGUpe3RoaXMuZVtlXT1udWxsfSxsLmNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5kaz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuZWs9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLmZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5naz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPW51bGx9LGwuaGs9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuaWs9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5qaz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgT3IpfSxsLmtrPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfTt2YXIgcjVlO1AoTW4sIkJhc2ljRU9iamVjdEltcGwvRVByb3BlcnRpZXNIb2xkZXJCYXNlSW1wbCIsMTk4MyksSSgxODUsMTk4Myx7MTA4OjF9LHRoKSxsLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5laz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuaWs9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuams9ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LFAoTW4sIkJhc2ljRU9iamVjdEltcGwvRVByb3BlcnRpZXNIb2xkZXJJbXBsIiwxODUpLEkoNTA2LDk3LGtkZSxfayksbC5LZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuUGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhpcy5nPWUsdGhpcy5pPW59LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qJjI/dGhpcy5waCgpLmNrKCk6dGhpcy56aCgpfSxsLlZnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0sbC5NZz1mdW5jdGlvbigpe3JldHVybih0aGlzLmomMSkhPTB9LGwuZWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLmtoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiY0KSE9MH0sbC5waD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmt9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmhrKGUpLGU/dGhpcy5qfD0yOnRoaXMuaiY9LTN9LGwudmg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmprKGUpLGU/dGhpcy5qfD00OnRoaXMuaiY9LTV9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4oanAoKSxMbikuU30sbC5pPTAsbC5qPTEsUChNbiwiRU9iamVjdEltcGwiLDUwNiksSSg3ODAsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjF9LE52dCksbC5DaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lW2VdfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhpcy5lW2VdPW59LGwuRWg9ZnVuY3Rpb24oZSl7dGhpcy5lW2VdPW51bGx9LGwuVGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLllnPWZ1bmN0aW9uKGUpe3JldHVybiBWaSh0aGlzLmQsZSl9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0sbC5waD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmsmJih0aGlzLms9bmV3IFpGKSx0aGlzLmt9LGwudGg9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9LGwueWg9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5lPT1udWxsJiYoZT1abih0aGlzLmQpLHRoaXMuZT1lPT0wP2k1ZTpQdChYbixJZSwxLGUsNSwxKSksdGhpc30sbC5BaD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgaTVlO1AoTW4sIkR5bmFtaWNFT2JqZWN0SW1wbCIsNzgwKSxJKDEzNzYsNzgwLHsxMDU6MSw0MjoxLDkyOjEsOTA6MSwxMzM6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MX0sS0t0KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJdih0aGlzKX0sbC50aD1mdW5jdGlvbihlKXt0aGlzLmQ9ZSx0aGlzLmI9Z0QoZSwia2V5IiksdGhpcy5jPWdEKGUsWV8pfSxsLlNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT09LTEmJihlPVdydCh0aGlzLHRoaXMuYiksdGhpcy5hPWU9PW51bGw/MDpIaShlKSksdGhpcy5hfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIFdydCh0aGlzLHRoaXMuYil9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gV3J0KHRoaXMsdGhpcy5jKX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5VaD1mdW5jdGlvbihlKXtOd3QodGhpcyx0aGlzLmIsZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49V3J0KHRoaXMsdGhpcy5jKSxOd3QodGhpcyx0aGlzLmMsZSksbn0sbC5hPTAsUChNbiwiRHluYW1pY0VPYmplY3RJbXBsL0Jhc2ljRU1hcEVudHJ5IiwxMzc2KSxJKDEzNzcsMSx7MTA4OjF9LFpGKSxsLmJrPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuQ2g9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5EaD1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuRWg9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5jaz1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBPcil9LGwuZGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuZ2s9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxsLmhrPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuaWs9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuams9ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LGwua2s9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LFAoTW4sIkR5bmFtaWNFT2JqZWN0SW1wbC9EeW5hbWljRVByb3BlcnRpZXNIb2xkZXJJbXBsIiwxMzc3KSxJKDUxMCwxNTAsezEwNToxLDkyOjEsOTA6MSw1OTA6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw1MTA6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sSkYpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIEozdCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5kO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHRoaXMpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyB5bCgoZG4oKSxRYSksY2MsdGhpcykpLGZJKHRoaXMuYikpO2Nhc2UgMzpyZXR1cm4gd1F0KHRoaXMpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhrYix0aGlzLDQpKSx0aGlzLmE7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHRoaXMuY31yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLEpnKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8SmcpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAzOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0ozdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxYdnQodGhpcyx1KGUsMTQ3KSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLEpnKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksSmcpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgeWwoKGRuKCksUWEpLGNjLHRoaXMpKSxraih0aGlzLmIsZSxyKTtjYXNlIDM6cmV0dXJuIFh2dCh0aGlzLG51bGwscik7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFNzKGtiLHRoaXMsNCkpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksSmcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxKZykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuZCE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5mIT0wO2Nhc2UgMzpyZXR1cm4hIXdRdCh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTB9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxKZykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fEpnKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl90bih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHlsKChkbigpLFFhKSxjYyx0aGlzKSksbHoodGhpcy5iLG4pO3JldHVybjtjYXNlIDM6RGNlKHRoaXMsdShuLDE0NykpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgU3Moa2IsdGhpcyw0KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBTcyhrYix0aGlzLDQpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBVMyhrYix0aGlzLDUpKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHJzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLEpnKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8SmcpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksSmd9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTp0eXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IHlsKChkbigpLFFhKSxjYyx0aGlzKSksdGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAzOkRjZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgU3Moa2IsdGhpcyw0KSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IFUzKGtiLHRoaXMsNSkpLHhyKHRoaXMuYyk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxKZykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fEpnKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gV3JlKHRoaXMpfSxsLmQ9bnVsbCxQKE1uLCJFQW5ub3RhdGlvbkltcGwiLDUxMCksSSgxNTEsNzA1LEQ4dCxUbCksbC5YaD1mdW5jdGlvbihlLG4pe2NYZSh0aGlzLGUsdShuLDQyKSl9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gblplKHRoaXMsdShlLDQyKSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gdSh1KHRoaXMuYyw2OSkucGkoZSksMTMzKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYyw2OSkuWmgoKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYyw2OSkuJGgoKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMsNjkpLl9oKGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtqKHRoaXMsZSxuKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMsNzYpLldqKGUpfSxsLnJqPWZ1bmN0aW9uKCl7fSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDc2KS5maigpfSxsLnRqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz11KEZsKHRoaXMuYikuTmgoKS5KaCh0aGlzLmIpLDEzMykscy5UaChlKSxzLlVoKG4pLHMuZWQociksc30sbC51aj1mdW5jdGlvbigpe3JldHVybiBuZXcgbXB0KHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe2x6KHRoaXMsZSl9LGwuWGo9ZnVuY3Rpb24oKXt1KHRoaXMuYyw3NikuWGooKX0sUCgkaSwiRWNvcmVFTWFwIiwxNTEpLEkoMTU4LDE1MSxEOHQseWwpLGwucWo9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYodGhpcy5kPT1udWxsKXtmb3IoaD1QdChIQXQsSTh0LDYzLDIqdGhpcy5mKzEsMCwxKSxyPXRoaXMuYy5LYygpO3IuZSE9ci5pLmdjKCk7KW49dShyLm5qKCksMTMzKSxzPW4uU2goKSxvPShzJnZpKSVoLmxlbmd0aCxlPWhbb10sIWUmJihlPWhbb109bmV3IG1wdCh0aGlzKSksZS5GYyhuKTt0aGlzLmQ9aH19LFAoTW4sIkVBbm5vdGF0aW9uSW1wbC8xIiwxNTgpLEkoMjg0LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDI4NDoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksISF0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDk6cmV0dXJuIFZudCh0aGlzLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCl9cmV0dXJuIHNoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgoQnIobikpO3JldHVybjtjYXNlIDI6TmcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6UGcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6SWcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6dGhpcy5vayh1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPU8xKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxuNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgobnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMub2soMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpe0xoKHRoaXMpLHRoaXMuQmJ8PTF9LGwuWWo9ZnVuY3Rpb24oKXtyZXR1cm4gTGgodGhpcyl9LGwuWmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50fSxsLiRqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy50LGU+MXx8ZT09LTF9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiY1MTIpIT0wfSxsLm5rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEt5dCh0aGlzLGUsbil9LGwub2s9ZnVuY3Rpb24oZSl7dHkodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBzNXQodGhpcyl9LGwucz0wLGwudD0xLFAoTW4sIkVUeXBlZEVsZW1lbnRJbXBsIiwyODQpLEkoNDQ5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBMc2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksISF0aGlzLiRqKCk7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBGbigpLCEhKHRoaXMuQmImd2YpO2Nhc2UgMTE6cmV0dXJuIEZuKCksISEodGhpcy5CYiZBeSk7Y2FzZSAxMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnl5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnp1KTtjYXNlIDE2OnJldHVybiBGbigpLCEhKHRoaXMuQmImYmQpO2Nhc2UgMTc6cmV0dXJuIFZtKHRoaXMpfXJldHVybiBvaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9Mc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDE3LHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxNzpyZXR1cm4gemwodGhpcyxudWxsLDE3LHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abih0aGlzLnpoKCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4odGhpcy5CYiZ3Zik9PTA7Y2FzZSAxMTpyZXR1cm4odGhpcy5CYiZBeSkhPTA7Y2FzZSAxMjpyZXR1cm4odGhpcy5CYiZ5eSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuKHRoaXMuQmImenUpIT0wO2Nhc2UgMTY6cmV0dXJuKHRoaXMuQmImYmQpIT0wO2Nhc2UgMTc6cmV0dXJuISFWbSh0aGlzKX1yZXR1cm4gc2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6bXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6TmcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6UGcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6SWcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6dGhpcy5vayh1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPU8xKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bkUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDExOnNFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMjpyRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTM6WGJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE1OmlFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxNjphRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJufWZoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxlNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkV0KHRoaXMuQ2IsODgpJiZoeShybCh1KHRoaXMuQ2IsODgpKSw0KSxYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6TmcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpQZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKDEpO3JldHVybjtjYXNlIDg6ZjIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9TzEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMDpuRSh0aGlzLCEwKTtyZXR1cm47Y2FzZSAxMTpzRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMjpyRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmk9bnVsbCxleih0aGlzLG51bGwpO3JldHVybjtjYXNlIDE1OmlFKHRoaXMsITEpO3JldHVybjtjYXNlIDE2OmFFKHRoaXMsITEpO3JldHVybn1saCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpe2s4KEVvKChSdSgpLG1hKSx0aGlzKSksTGgodGhpcyksdGhpcy5CYnw9MX0sbC5Haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuemo9ZnVuY3Rpb24oKXtyZXR1cm4gbUUodGhpcyl9LGwuSGo9ZnVuY3Rpb24oKXtyZXR1cm4gVm0odGhpcyl9LGwuTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5waz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSxsLk1qPWZ1bmN0aW9uKCl7cmV0dXJuIFF6KHRoaXMpfSxsLk5qPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQsdyxrO3JldHVybiB0aGlzLnB8fChyPVZtKHRoaXMpLChyLmk9PW51bGwmJnBkKHIpLHIuaSkubGVuZ3RoLHM9dGhpcy5MaigpLHMmJlpuKFZtKHMpKSxvPUxoKHRoaXMpLGQ9by5CaigpLGU9ZD9kLmkmMT9kPT1kbD9CczpkPT1Ucj9qYTpkPT1yMz9YRTpkPT1pYT9jYTpkPT1MYj9UdzpkPT1mNT9DdzpkPT1IdT9FNjphUzpkOm51bGwsbj1tRSh0aGlzKSx3PW8uemooKSxhbG4odGhpcyksdGhpcy5CYiZiZCYmKChoPWE0dCgoUnUoKSxtYSkscikpJiZoIT10aGlzfHwoaD1xeChFbyhtYSx0aGlzKSkpKT90aGlzLnA9bmV3IFBWdCh0aGlzLGgpOnRoaXMuJGooKT90aGlzLnJrKCk/cz90aGlzLkJiJnp1P2U/dGhpcy5zaygpP3RoaXMucD1uZXcgWmIoNDcsZSx0aGlzLHMpOnRoaXMucD1uZXcgWmIoNSxlLHRoaXMscyk6dGhpcy5zaygpP3RoaXMucD1uZXcgZTIoNDYsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDQsdGhpcyxzKTplP3RoaXMuc2soKT90aGlzLnA9bmV3IFpiKDQ5LGUsdGhpcyxzKTp0aGlzLnA9bmV3IFpiKDcsZSx0aGlzLHMpOnRoaXMuc2soKT90aGlzLnA9bmV3IGUyKDQ4LHRoaXMscyk6dGhpcy5wPW5ldyBlMig2LHRoaXMscyk6dGhpcy5CYiZ6dT9lP2U9PU0yP3RoaXMucD1uZXcgQ2coNTAsQjRlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IENnKDQzLGUsdGhpcyk6dGhpcy5wPW5ldyBDZygxLGUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgU2coNDIsdGhpcyk6dGhpcy5wPW5ldyBTZygwLHRoaXMpOmU/ZT09TTI/dGhpcy5wPW5ldyBDZyg0MSxCNGUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgQ2coNDUsZSx0aGlzKTp0aGlzLnA9bmV3IENnKDMsZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBTZyg0NCx0aGlzKTp0aGlzLnA9bmV3IFNnKDIsdGhpcyk6RXQobywxNDgpP2U9PXNVP3RoaXMucD1uZXcgU2coNDAsdGhpcyk6dGhpcy5CYiY1MTI/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coOSxlLHRoaXMpOnRoaXMucD1uZXcgU2coOCx0aGlzKTplP3RoaXMucD1uZXcgQ2coMTEsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDEwLHRoaXMpOnRoaXMuQmImenU/ZT90aGlzLnA9bmV3IENnKDEzLGUsdGhpcyk6dGhpcy5wPW5ldyBTZygxMix0aGlzKTplP3RoaXMucD1uZXcgQ2coMTUsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDE0LHRoaXMpOnM/KGs9cy50LGs+MXx8az09LTE/dGhpcy5zaygpP3RoaXMuQmImenU/ZT90aGlzLnA9bmV3IFpiKDI1LGUsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDI0LHRoaXMscyk6ZT90aGlzLnA9bmV3IFpiKDI3LGUsdGhpcyxzKTp0aGlzLnA9bmV3IGUyKDI2LHRoaXMscyk6dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgWmIoMjksZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMjgsdGhpcyxzKTplP3RoaXMucD1uZXcgWmIoMzEsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzAsdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgWmIoMzMsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzIsdGhpcyxzKTplP3RoaXMucD1uZXcgWmIoMzUsZSx0aGlzLHMpOnRoaXMucD1uZXcgZTIoMzQsdGhpcyxzKTp0aGlzLkJiJnp1P2U/dGhpcy5wPW5ldyBaYigzNyxlLHRoaXMscyk6dGhpcy5wPW5ldyBlMigzNix0aGlzLHMpOmU/dGhpcy5wPW5ldyBaYigzOSxlLHRoaXMscyk6dGhpcy5wPW5ldyBlMigzOCx0aGlzLHMpKTp0aGlzLnNrKCk/dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coMTcsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDE2LHRoaXMpOmU/dGhpcy5wPW5ldyBDZygxOSxlLHRoaXMpOnRoaXMucD1uZXcgU2coMTgsdGhpcyk6dGhpcy5CYiZ6dT9lP3RoaXMucD1uZXcgQ2coMjEsZSx0aGlzKTp0aGlzLnA9bmV3IFNnKDIwLHRoaXMpOmU/dGhpcy5wPW5ldyBDZygyMyxlLHRoaXMpOnRoaXMucD1uZXcgU2coMjIsdGhpcyk6dGhpcy5xaygpP3RoaXMuc2soKT90aGlzLnA9bmV3IGtLdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBPd3QodShvLDI2KSx0aGlzLHMpOkV0KG8sMTQ4KT9lPT1zVT90aGlzLnA9bmV3IFNnKDQwLHRoaXMpOnRoaXMuQmImenU/ZT90aGlzLnA9bmV3IHlZdChuLHcsdGhpcywoVWl0KCksZD09VHI/YUx0OmQ9PWRsP2VMdDpkPT1MYj9vTHQ6ZD09cjM/c0x0OmQ9PWlhP2lMdDpkPT1mNT9jTHQ6ZD09SHU/bkx0OmQ9PW1oP3JMdDpBZnQpKTp0aGlzLnA9bmV3IERYdCh1KG8sMTQ4KSxuLHcsdGhpcyk6ZT90aGlzLnA9bmV3IG1ZdChuLHcsdGhpcywoVWl0KCksZD09VHI/YUx0OmQ9PWRsP2VMdDpkPT1MYj9vTHQ6ZD09cjM/c0x0OmQ9PWlhP2lMdDpkPT1mNT9jTHQ6ZD09SHU/bkx0OmQ9PW1oP3JMdDpBZnQpKTp0aGlzLnA9bmV3IElYdCh1KG8sMTQ4KSxuLHcsdGhpcyk6dGhpcy5yaygpP3M/dGhpcy5CYiZ6dT90aGlzLnNrKCk/dGhpcy5wPW5ldyBUS3QodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgVHZ0KHUobywyNiksdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBFS3QodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgeG50KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJnp1P3RoaXMuc2soKT90aGlzLnA9bmV3IG1XdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgUjJ0KHUobywyNiksdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgd1d0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBvbnQodShvLDI2KSx0aGlzKTp0aGlzLnNrKCk/cz90aGlzLkJiJnp1P3RoaXMucD1uZXcgQ0t0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IGt2dCh1KG8sMjYpLHRoaXMscyk6dGhpcy5CYiZ6dT90aGlzLnA9bmV3IHlXdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgajJ0KHUobywyNiksdGhpcyk6cz90aGlzLkJiJnp1P3RoaXMucD1uZXcgX0t0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3IEV2dCh1KG8sMjYpLHRoaXMscyk6dGhpcy5CYiZ6dT90aGlzLnA9bmV3IHhXdCh1KG8sMjYpLHRoaXMpOnRoaXMucD1uZXcgUGoodShvLDI2KSx0aGlzKSksdGhpcy5wfSxsLklqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImd2YpIT0wfSxsLnFrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Kaj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJmJkKSE9MH0sbC5Paj1mdW5jdGlvbigpe3JldHVybiBZcnQodGhpcyl9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Laj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJnp1KSE9MH0sbC50az1mdW5jdGlvbihlKXt0aGlzLms9ZX0sbC5MaD1mdW5jdGlvbihlKXttcnQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBwcSh0aGlzKX0sbC5lPSExLGwubj0wLFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwiLDQ0OSksSSgzMjIsNDQ5LHsxMDU6MSw5MjoxLDkwOjEsMzQ6MSwxNDc6MSwxOTE6MSw1NjoxLDE3MDoxLDY2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDMyMjoxLDE1MDoxLDQ0OToxLDI4NDoxLDExNDoxLDExNToxLDY3NzoxfSxVdHQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLCEhZTV0KHRoaXMpO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9MaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJndmKTtjYXNlIDExOnJldHVybiBGbigpLCEhKHRoaXMuQmImQXkpO2Nhc2UgMTI6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ5eSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpO2Nhc2UgMTU6cmV0dXJuIEZuKCksISEodGhpcy5CYiZ6dSk7Y2FzZSAxNjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJmJkKTtjYXNlIDE3OnJldHVybiBWbSh0aGlzKTtjYXNlIDE4OnJldHVybiBGbigpLCEhKHRoaXMuQmImZGMpO2Nhc2UgMTk6cmV0dXJuIG4/ZGl0KHRoaXMpOkRKdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHQzKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dDMpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGU1dCh0aGlzKTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4odGhpcy5CYiZ3Zik9PTA7Y2FzZSAxMTpyZXR1cm4odGhpcy5CYiZBeSkhPTA7Y2FzZSAxMjpyZXR1cm4odGhpcy5CYiZ5eSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIG1FKHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuKHRoaXMuQmImenUpIT0wO2Nhc2UgMTY6cmV0dXJuKHRoaXMuQmImYmQpIT0wO2Nhc2UgMTc6cmV0dXJuISFWbSh0aGlzKTtjYXNlIDE4OnJldHVybih0aGlzLkJiJmRjKSE9MDtjYXNlIDE5OnJldHVybiEhREp0KHRoaXMpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0MyksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOm1ydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OmxIdCh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9TzEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMDpuRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTE6c0UodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMzpYYnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE2OmFFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxODpSaXQodGhpcyxqZShSZShuKSkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0MyksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSx0M30sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiw4OCkmJmh5KHJsKHUodGhpcy5DYiw4OCkpLDQpLFhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuYj0wLHR5KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsITApO3JldHVybjtjYXNlIDExOnNFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6Uml0KHRoaXMsITEpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksdDMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0MyksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7ZGl0KHRoaXMpLGs4KEVvKChSdSgpLG1hKSx0aGlzKSksTGgodGhpcyksdGhpcy5CYnw9MX0sbC4kaj1mdW5jdGlvbigpe3JldHVybiBlNXQodGhpcyl9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5iPTAsdGhpcy5hPW51bGwsS3l0KHRoaXMsZSxuKX0sbC5vaz1mdW5jdGlvbihlKXtsSHQodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P3BxKHRoaXMpOihlPW5ldyBUaChwcSh0aGlzKSksZS5hKz0iIChpRDogIixrZyhlLCh0aGlzLkJiJmRjKSE9MCksZS5hKz0iKSIsZS5hKX0sbC5iPTAsUChNbiwiRUF0dHJpYnV0ZUltcGwiLDMyMiksSSgzNTEsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9KSxsLnVrPWZ1bmN0aW9uKGUpe3JldHVybiBlLlRnKCk9PXRoaXN9LGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHdzdCh0aGlzLGUpfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhpcy53PW51bGwsdGhpcy5EYj1uPDwxNnx0aGlzLkRiJjI1NSx0aGlzLkNiPWV9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBjdyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/RmwodGhpcyk6QzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHRoaXMuQX1yZXR1cm4gb2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93c3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDYscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB6bCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksQmEodGhpcy5BLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFDOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpLZXQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkscnModGhpcy5BLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksWTRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnlqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRz09LTEmJih0aGlzLkc9KGU9RmwodGhpcyksZT9GZyhlLk1oKCksdGhpcyk6LTEpKSx0aGlzLkd9LGwuemo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5Baj1mdW5jdGlvbigpe3JldHVybiBGbCh0aGlzKX0sbC52az1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZ9LGwuQmo9ZnVuY3Rpb24oKXtyZXR1cm4gY3codGhpcyl9LGwuQ2o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkJ9LGwuRGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBsYXQodGhpcyxlKX0sbC53az1mdW5jdGlvbihlKXt0aGlzLnY9ZX0sbC54az1mdW5jdGlvbihlKXtjbmUodGhpcyxlKX0sbC55az1mdW5jdGlvbihlKXt0aGlzLkM9ZX0sbC5MaD1mdW5jdGlvbihlKXtwJCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFN6KHRoaXMpfSxsLkM9bnVsbCxsLkQ9bnVsbCxsLkc9LTEsUChNbiwiRUNsYXNzaWZpZXJJbXBsIiwzNTEpLEkoODgsMzUxLHsxMDU6MSw5MjoxLDkwOjEsMjY6MSwxMzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSw4ODoxLDM1MToxLDE1MDoxLDQ3MzoxLDExNDoxLDExNToxLDY3NjoxfSxYTCksbC51az1mdW5jdGlvbihlKXtyZXR1cm4gcVFlKHRoaXMsZS5UZygpKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gbnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/RmwodGhpcyk6QzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgOTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSAxMDpyZXR1cm4gU28odGhpcyk7Y2FzZSAxMTpyZXR1cm4hdGhpcy5xJiYodGhpcy5xPW5ldyBoZShWaCx0aGlzLDExLDEwKSksdGhpcy5xO2Nhc2UgMTI6cmV0dXJuIGs0KHRoaXMpO2Nhc2UgMTM6cmV0dXJuIGtfKHRoaXMpO2Nhc2UgMTQ6cmV0dXJuIGtfKHRoaXMpLHRoaXMucjtjYXNlIDE1OnJldHVybiBrNCh0aGlzKSx0aGlzLms7Y2FzZSAxNjpyZXR1cm4gVjR0KHRoaXMpO2Nhc2UgMTc6cmV0dXJuIHBhdCh0aGlzKTtjYXNlIDE4OnJldHVybiBwZCh0aGlzKTtjYXNlIDE5OnJldHVybiBjcSh0aGlzKTtjYXNlIDIwOnJldHVybiBrNCh0aGlzKSx0aGlzLm87Y2FzZSAyMTpyZXR1cm4hdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSksdGhpcy5zO2Nhc2UgMjI6cmV0dXJuIExjKHRoaXMpO2Nhc2UgMjM6cmV0dXJuIHRhdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLENiKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8Q2IpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3dzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNixyKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFZoLHRoaXMsMTEsMTApKSxRYyh0aGlzLnEsZSxyKTtjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGhlKEF1LHRoaXMsMjEsMTcpKSxRYyh0aGlzLnMsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLENiKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksQ2IpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHpsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGhlKFZoLHRoaXMsMTEsMTApKSxCYSh0aGlzLnEsZSxyKTtjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGhlKEF1LHRoaXMsMjEsMTcpKSxCYSh0aGlzLnMsZSxyKTtjYXNlIDIyOnJldHVybiBCYShMYyh0aGlzKSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksQ2IpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxDYikpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4hIWN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIUM4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybih0aGlzLkJiJjI1NikhPTA7Y2FzZSA5OnJldHVybih0aGlzLkJiJjUxMikhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMudSYmTGModGhpcy51LmEpLmkhPTAmJiEodGhpcy5uJiZvc3QodGhpcy5uKSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMucSYmdGhpcy5xLmkhPTA7Y2FzZSAxMjpyZXR1cm4gazQodGhpcykuaSE9MDtjYXNlIDEzOnJldHVybiBrXyh0aGlzKS5pIT0wO2Nhc2UgMTQ6cmV0dXJuIGtfKHRoaXMpLHRoaXMuci5pIT0wO2Nhc2UgMTU6cmV0dXJuIGs0KHRoaXMpLHRoaXMuay5pIT0wO2Nhc2UgMTY6cmV0dXJuIFY0dCh0aGlzKS5pIT0wO2Nhc2UgMTc6cmV0dXJuIHBhdCh0aGlzKS5pIT0wO2Nhc2UgMTg6cmV0dXJuIHBkKHRoaXMpLmkhPTA7Y2FzZSAxOTpyZXR1cm4gY3EodGhpcykuaSE9MDtjYXNlIDIwOnJldHVybiBrNCh0aGlzKSwhIXRoaXMubztjYXNlIDIxOnJldHVybiEhdGhpcy5zJiZ0aGlzLnMuaSE9MDtjYXNlIDIyOnJldHVybiEhdGhpcy5uJiZvc3QodGhpcy5uKTtjYXNlIDIzOnJldHVybiB0YXQodGhpcykuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLENiKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8Q2IpLGUpKX0sbC5vaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmk9PW51bGx8fHRoaXMucSYmdGhpcy5xLmkhPTA/bnVsbDpnRCh0aGlzLGUpLG58fGt4dCh0aGlzLGUpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpwJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOktldCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1OkNFKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxycyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODpYeXQodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDk6UXl0KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMDpDXyhTbyh0aGlzKSkscnMoU28odGhpcyksdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHhyKHRoaXMucSksIXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHJzKHRoaXMucSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSkseHIodGhpcy5zKSwhdGhpcy5zJiYodGhpcy5zPW5ldyBoZShBdSx0aGlzLDIxLDE3KSkscnModGhpcy5zLHUobiwxNCkpO3JldHVybjtjYXNlIDIyOnhyKExjKHRoaXMpKSxycyhMYyh0aGlzKSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLENiKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8Q2IpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksQ2J9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpFdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6WjgodGhpcyxudWxsKSwkOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Olh5dCh0aGlzLCExKTtyZXR1cm47Y2FzZSA5OlF5dCh0aGlzLCExKTtyZXR1cm47Y2FzZSAxMDp0aGlzLnUmJkNfKHRoaXMudSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgaGUoVmgsdGhpcywxMSwxMCkpLHhyKHRoaXMucSk7cmV0dXJuO2Nhc2UgMjE6IXRoaXMucyYmKHRoaXMucz1uZXcgaGUoQXUsdGhpcywyMSwxNykpLHhyKHRoaXMucyk7cmV0dXJuO2Nhc2UgMjI6dGhpcy5uJiZ4cih0aGlzLm4pO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksQ2IpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxDYiksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZihrNCh0aGlzKSxrXyh0aGlzKSxWNHQodGhpcykscGF0KHRoaXMpLHBkKHRoaXMpLGNxKHRoaXMpLHRhdCh0aGlzKSxSQyhzdG4ocmwodGhpcykpKSx0aGlzLnMpZm9yKGU9MCxuPXRoaXMucy5pO2U8bjsrK2UpRk0oU3QodGhpcy5zLGUpKTtpZih0aGlzLnEpZm9yKGU9MCxuPXRoaXMucS5pO2U8bjsrK2UpRk0oU3QodGhpcy5xLGUpKTtPZygoUnUoKSxtYSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGQ0dCh0aGlzKX0sbC5rPW51bGwsbC5yPW51bGw7dmFyIGFBLHM1ZSxfZnQ7UChNbiwiRUNsYXNzSW1wbCIsODgpLEkoMTk5NCwxOTkzLFQwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBoYXQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBoYXQodGhpcyx0aGlzLmksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXthNXQodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe0hzdCh0aGlzLGUpfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFFjKHRoaXMsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gQW10KHRoaXMsZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmEodGhpcyxlLG4pfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHdsZSh0aGlzLGUsbil9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sUCgkaSwiTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwiLDE5OTQpLEkoNjIyLDE5OTQsem8pLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsZSh0aGlzLGUpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIERDKHRoaXMsZSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXtLayh0aGlzLGUpfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHluKHRoaXMuZS5UZygpLHRoaXMuYWooKSl9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5haygpfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIFZpKHRoaXMuZS5UZygpLHRoaXMuYWsoKSl9LGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmFrKCkuWWooKSwyNikuQmooKX0sbC5Baz1mdW5jdGlvbigpe3JldHVybiBubyh1KHRoaXMuYWsoKSwxOCkpLm59LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZnKHRoaXMsZSl9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5naCh0aGlzLmUsdGhpcy5BaygpLHRoaXMuemsoKSxuKTpyLmdoKHRoaXMuZSxWaShyLlRnKCksbm8odSh0aGlzLmFrKCksMTgpKSksbnVsbCxuKTpyLmdoKHRoaXMuZSwtMS10aGlzLmFqKCksbnVsbCxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmloKHRoaXMuZSx0aGlzLkFrKCksdGhpcy56aygpLG4pOnIuaWgodGhpcy5lLFZpKHIuVGcoKSxubyh1KHRoaXMuYWsoKSwxOCkpKSxudWxsLG4pOnIuaWgodGhpcy5lLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRFp0KHRoaXMuZCxlKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiBtbCh0aGlzLmUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaSE9MH0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gQ0kodGhpcy5kLGUpfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuRmsoKSYmdGhpcy5FaygpP282KHRoaXMsZSx1KG4sNTYpKTpufSxsLkdrPWZ1bmN0aW9uKGUpe3JldHVybiBlLmtoKCk/S3AodGhpcy5lLHUoZSw0OSkpOmV9LGwuV2I9ZnVuY3Rpb24oZSl7SVV0KHRoaXMsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYnRlKHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKHRoaXMuRWsoKSlmb3Iobj10aGlzLmktMTtuPj0wOy0tbilTdCh0aGlzLG4pO3JldHVybiBtM3QodGhpcyxlKX0sbC5Yaj1mdW5jdGlvbigpe3hyKHRoaXMpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEllZSh0aGlzLGUsbil9LFAoJGksIkVjb3JlRUxpc3QiLDYyMiksSSg0OTYsNjIyLHpvLFdNKSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5jPTAsUCgkaSwiRU9iamVjdEVMaXN0Iiw0OTYpLEkoODUsNDk2LHpvLFNzKSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdCIsODUpLEkoNTQ1LDg1LHpvLGhqKSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5iPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5iLHRoaXMuYj0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYj0hMX0sbC5iPSExLFAoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUiLDU0NSksSSgxMTQwLDU0NSx6byx2WXQpLGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPXUodF8odGhpcyxlLG4pLDg3KSxtbCh0aGlzLmUpJiZLayh0aGlzLG5ldyBnSSh0aGlzLmEsNywoZG4oKSxYNGUpLGRlKG4pLChzPXIuYyxFdChzLDg4KT91KHMsMjYpOldoKSxlKSkscn0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBXbG4odGhpcyx1KGUsODcpLG4pfSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVsbih0aGlzLHUoZSw4Nyksbil9LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBLMW4odGhpcyx1KGUsODcpLHUobiw4Nykscil9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiBEQyh0aGlzLGUsbixyLHMsdGhpcy5pPjEpO2Nhc2UgNTpyZXR1cm4gREModGhpcyxlLG4scixzLHRoaXMuaS11KHIsMTUpLmdjKCk+MCk7ZGVmYXVsdDpyZXR1cm4gbmV3IEYwKHRoaXMuZSxlLHRoaXMuYyxuLHIscywhMCl9fSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gb3N0KHRoaXMpfSxsLlhqPWZ1bmN0aW9uKCl7eHIodGhpcyl9LFAoTW4sIkVDbGFzc0ltcGwvMSIsMTE0MCksSSgxMTU0LDExNTMsTTh0KSxsLnVpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2lmKHI9ZS54aSgpLHIhPTgpe2lmKHM9TWhuKGUpLHM9PTApc3dpdGNoKHIpe2Nhc2UgMTpjYXNlIDk6e3c9ZS5CaSgpLHchPW51bGwmJihuPXJsKHUodyw0NzMpKSwhbi5jJiYobi5jPW5ldyB4bSksaiQobi5jLGUuQWkoKSkpLGQ9ZS56aSgpLGQhPW51bGwmJihvPXUoZCw0NzMpLG8uQmImMXx8KG49cmwobyksIW4uYyYmKG4uYz1uZXcgeG0pLE1yKG4uYyx1KGUuQWkoKSwyNikpKSk7YnJlYWt9Y2FzZSAzOntkPWUuemkoKSxkIT1udWxsJiYobz11KGQsNDczKSxvLkJiJjF8fChuPXJsKG8pLCFuLmMmJihuLmM9bmV3IHhtKSxNcihuLmMsdShlLkFpKCksMjYpKSkpO2JyZWFrfWNhc2UgNTp7aWYoZD1lLnppKCksZCE9bnVsbClmb3IoaD11KGQsMTQpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ3Myksby5CYiYxfHwobj1ybChvKSwhbi5jJiYobi5jPW5ldyB4bSksTXIobi5jLHUoZS5BaSgpLDI2KSkpO2JyZWFrfWNhc2UgNDp7dz1lLkJpKCksdyE9bnVsbCYmKG89dSh3LDQ3Myksby5CYiYxfHwobj1ybChvKSwhbi5jJiYobi5jPW5ldyB4bSksaiQobi5jLGUuQWkoKSkpKTticmVha31jYXNlIDY6e2lmKHc9ZS5CaSgpLHchPW51bGwpZm9yKGg9dSh3LDE0KS5LYygpO2guT2IoKTspbz11KGguUGIoKSw0NzMpLG8uQmImMXx8KG49cmwobyksIW4uYyYmKG4uYz1uZXcgeG0pLGokKG4uYyxlLkFpKCkpKTticmVha319dGhpcy5IayhzKX19LGwuSGs9ZnVuY3Rpb24oZSl7YnVlKHRoaXMsZSl9LGwuYj02MyxQKE1uLCJFU3VwZXJBZGFwdGVyIiwxMTU0KSxJKDExNTUsMTE1NCxNOHQsTHp0KSxsLkhrPWZ1bmN0aW9uKGUpe2h5KHRoaXMsZSl9LFAoTW4sIkVDbGFzc0ltcGwvMTAiLDExNTUpLEkoMTE0NCw2OTYsem8pLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTHN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gZnNlKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXt6SSh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dUkodGhpcyxlKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gQW10KHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gS3J0KHRoaXMsZSxuKX0sbC5saz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE14KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sbC5taz1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuWGo9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgT3IpfSxQKCRpLCJFY29yZUVMaXN0L1VubW9kaWZpYWJsZUVMaXN0IiwxMTQ0KSxJKDMxOSwxMTQ0LHpvLHEzKSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoJGksIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QvRmFzdENvbXBhcmUiLDMxOSksSSgxMTQ3LDMxOSx6byx0cmUpLGwuWGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKEV0KGUsMTcwKSYmKG49dShlLDE3MCkscj1uLmFqKCksciE9LTEpKXtmb3Iocz10aGlzLmk7cjxzOysrcilpZihHdCh0aGlzLmdbcl0pPT09R3QoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LFAoTW4sIkVDbGFzc0ltcGwvMUVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXNMaXN0IiwxMTQ3KSxJKDExNDEsNDk3LF9kLG54KSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBQdChobyxDMGUsODcsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVDbGFzc0ltcGwvMUVHZW5lcmljU3VwZXJUeXBlRUxpc3QiLDExNDEpLEkoNjIzLDQ5NyxfZCxxYiksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQXUsUDQsMTcwLGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzFFU3RydWN0dXJhbEZlYXR1cmVVbmlxdWVFTGlzdCIsNjIzKSxJKDc0MSw0OTcsX2QsQzApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzFSZWZlcmVuY2VMaXN0Iiw3NDEpLEkoMTE0Miw0OTcsX2QsTXp0KSxsLmJpPWZ1bmN0aW9uKGUsbil7WHRuKHRoaXMsdShuLDM0KSl9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzIiLDExNDIpLEkoMTE0Myw0OTcsX2QsbXApLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzMiLDExNDMpLEkoMTE0NSwzMTksem8sTkt0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBKSmUodGhpcyx1KGUsMzQpKX0sbC5ZaD1mdW5jdGlvbihlKXtvWWUodGhpcyx1KGUsMzQpKX0sUChNbiwiRUNsYXNzSW1wbC80IiwxMTQ1KSxJKDExNDYsMzE5LHpvLFBLdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gdHRuKHRoaXMsdShlLDE4KSl9LGwuWWg9ZnVuY3Rpb24oZSl7Y1llKHRoaXMsdShlLDE4KSl9LFAoTW4sIkVDbGFzc0ltcGwvNSIsMTE0NiksSSgxMTQ4LDQ5NyxfZCxTMyksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gUHQoVmgsTzh0LDU5LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzYiLDExNDgpLEkoMTE0OSw0OTcsX2QsU2spLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFQ2xhc3NJbXBsLzciLDExNDkpLEkoMTk5NywxOTk2LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjEsNjk6MX0pLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjV0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gWjV0KHRoaXMsdGhpcy5WaSgpLGUpfSxsLlhoPWZ1bmN0aW9uKGUsbil7WW9lKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXskb2UodGhpcyxlKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBiZm4odGhpcyxlLG4pfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuICRobih0aGlzLGUsbil9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmxlKHRoaXMsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5PaShlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgTXgodGhpcyl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5KaSgpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQTSh0aGlzKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcyxlKX0sUCgkaSwiRGVsZWdhdGluZ05vdGlmeWluZ0ludGVybmFsRUxpc3RJbXBsIiwxOTk3KSxJKDc0MiwxOTk3LE44dCksbC5haT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLEV0KGUsMTQ4KSYmIUV0KGUsNDU3KSYmKGUuQmooKS5pJjEpPT0wfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGs7aWYodGhpcy5GaygpKXtpZihrPXRoaXMuVmkoKSxrPjQpaWYodGhpcy53aihlKSl7aWYodGhpcy5yaygpKXtpZihzPXUoZSw0OSkscj1zLlVnKCksdz1yPT10aGlzLmImJih0aGlzLkRrKCk/cy5PZyhzLlZnKCksdSh5bihidSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKSwyNikuQmooKSk9PW5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubjotMS1zLlZnKCk9PXRoaXMuYWooKSksdGhpcy5FaygpJiYhdyYmIXImJnMuWmcoKSl7Zm9yKG89MDtvPGs7KytvKWlmKG49Rm50KHRoaXMsdGhpcy5PaShvKSksR3Qobik9PT1HdChlKSlyZXR1cm4hMH1yZXR1cm4gd31lbHNlIGlmKHRoaXMuRGsoKSYmIXRoaXMuQ2soKSl7aWYoaD11KGUsNTYpLmFoKG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLEd0KGgpPT09R3QodGhpcy5iKSlyZXR1cm4hMDtpZihoPT1udWxsfHwhdShoLDU2KS5raCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGQ9dGhpcy5MaShlKSx0aGlzLkVrKCkmJiFkKXtmb3Iobz0wO288azsrK28paWYocz1GbnQodGhpcyx0aGlzLk9pKG8pKSxHdChzKT09PUd0KGUpKXJldHVybiEwfXJldHVybiBkfWVsc2UgcmV0dXJuIHRoaXMuTGkoZSl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IEYwKHRoaXMuYixlLHRoaXMuYWooKSxuLHIscyxvKX0sbC4kaT1mdW5jdGlvbihlKXttaSh0aGlzLmIsZSl9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpfSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIFZpKGJ1KHRoaXMuYikseW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hIXluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLkJqKCl9LGwuYmo9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKSxFdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJmRjKSE9MHx8ISFubyh1KG4sMTgpKSk6ITF9LGwuQ2s9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSxyPW5vKGUpLCEhciYmKHM9ci50LHM+MXx8cz09LTEpKTohMX0sbC5Eaz1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSxyPW5vKGUpLCEhcik6ITF9LGwuRWs9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKGJ1KHRoaXMuYiksdGhpcy5haigpKSxFdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJllhKSE9MCk6ITF9LGwuWGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87aWYocz10aGlzLlFpKGUpLHM+PTApcmV0dXJuIHM7aWYodGhpcy5GaygpKXtmb3Iocj0wLG89dGhpcy5WaSgpO3I8bzsrK3IpaWYobj1GbnQodGhpcyx0aGlzLk9pKHIpKSxHdChuKT09PUd0KGUpKXJldHVybiByfXJldHVybi0xfSxsLmNqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuZ2godGhpcy5iLG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubix1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpLG4pOnIuZ2godGhpcy5iLFZpKHIuVGcoKSxubyh1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxudWxsLG4pOnIuZ2godGhpcy5iLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuaWgodGhpcy5iLG5vKHUoeW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkubix1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpLG4pOnIuaWgodGhpcy5iLFZpKHIuVGcoKSxubyh1KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKSwxOCkpKSxudWxsLG4pOnIuaWgodGhpcy5iLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLnJrPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gbj15bihidSh0aGlzLmIpLHRoaXMuYWooKSksRXQobiw5OSk/KGU9dShuLDE4KSwoZS5CYiZkYykhPTApOiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuIEV0KHluKGJ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDg4KX0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCkud2ooZSl9LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4gbWwodGhpcy5iKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiF0aGlzLlJpKCl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4geW4oYnUodGhpcy5iKSx0aGlzLmFqKCkpLmhpKCl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRUQodGhpcyxlLG4pfSxsLldiPWZ1bmN0aW9uKGUpe0NfKHRoaXMpLHJzKHRoaXMsdShlLDE1KSl9LGwuUGM9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLkVrKCkpZm9yKGU9dGhpcy5WaSgpLTE7ZT49MDstLWUpRUQodGhpcyxlLHRoaXMuT2koZSkpO3JldHVybiB0aGlzLldpKCl9LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG47aWYodGhpcy5FaygpKWZvcihuPXRoaXMuVmkoKS0xO24+PTA7LS1uKUVEKHRoaXMsbix0aGlzLk9pKG4pKTtyZXR1cm4gdGhpcy5YaShlKX0sbC5Yaj1mdW5jdGlvbigpe0NfKHRoaXMpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHB0ZSh0aGlzLGUsbil9LFAoJGksIkRlbGVnYXRpbmdFY29yZUVMaXN0Iiw3NDIpLEkoMTE1MCw3NDIsTjh0LERXdCksbC5IaT1mdW5jdGlvbihlLG4pe2JRZSh0aGlzLGUsdShuLDI2KSl9LGwuSWk9ZnVuY3Rpb24oZSl7bFhlKHRoaXMsdShlLDI2KSl9LGwuT2k9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KFN0KExjKHRoaXMuYSksZSksODcpLHI9bi5jLEV0KHIsODgpP3UociwyNik6KGRuKCksV2gpfSxsLlRpPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShkeShMYyh0aGlzLmEpLGUpLDg3KSxyPW4uYyxFdChyLDg4KT91KHIsMjYpOihkbigpLFdoKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiB2Zm4odGhpcyxlLHUobiwyNikpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbnVsbH0sbC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSXp0KHRoaXMpfSxsLktpPWZ1bmN0aW9uKCl7eHIoTGModGhpcy5hKSl9LGwuTGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFZyZSh0aGlzLGUpfSxsLk1pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIVZyZSh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxsLk5pPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihFdChlLDE1KSYmKHM9dShlLDE1KSxzLmdjKCk9PUxjKHRoaXMuYSkuaSkpe2ZvcihuPXMuS2MoKSxyPW5ldyBlcih0aGlzKTtuLk9iKCk7KWlmKEd0KG4uUGIoKSkhPT1HdChkcihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGwuUGk9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2ZvcihyPTEsbj1uZXcgZXIoTGModGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxzPShvPWUuYyxFdChvLDg4KT91KG8sMjYpOihkbigpLFdoKSkscj0zMSpyKyhzP0l2KHMpOjApO3JldHVybiByfSxsLlFpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihzPTAscj1uZXcgZXIoTGModGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49dShkcihyKSw4NyksR3QoZSk9PT1HdCgobz1uLmMsRXQobyw4OCk/dShvLDI2KTooZG4oKSxXaCkpKSlyZXR1cm4gczsrK3N9cmV0dXJuLTF9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKS5pPT0wfSxsLlNpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuVmk9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKS5pfSxsLldpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPUxjKHRoaXMuYSkuaSxvPVB0KFhuLEllLDEsaCw1LDEpLHI9MCxuPW5ldyBlcihMYyh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLG9bcisrXT0ocz1lLmMsRXQocyw4OCk/dShzLDI2KTooZG4oKSxXaCkpO3JldHVybiBvfSxsLlhpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3O2Zvcih3PUxjKHRoaXMuYSkuaSxlLmxlbmd0aDx3JiYobz1DSShzbChlKS5jLHcpLGU9byksZS5sZW5ndGg+dyYmSmkoZSx3LG51bGwpLHM9MCxyPW5ldyBlcihMYyh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksODcpLGg9KGQ9bi5jLEV0KGQsODgpP3UoZCwyNik6KGRuKCksV2gpKSxKaShlLHMrKyxoKTtyZXR1cm4gZX0sbC5ZaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IHhnLG8uYSs9IlsiLGU9TGModGhpcy5hKSxuPTAscz1MYyh0aGlzLmEpLmk7bjxzOylmbyhvLGRDKChyPXUoU3QoZSxuKSw4NykuYyxFdChyLDg4KT91KHIsMjYpOihkbigpLFdoKSkpKSwrK248cyYmKG8uYSs9S2EpO3JldHVybiBvLmErPSJdIixvLmF9LGwuJGk9ZnVuY3Rpb24oZSl7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDEwfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsODgpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIGJpbih0aGlzLmEpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRUNsYXNzSW1wbC84IiwxMTUwKSxJKDExNTEsMTk2NCxJRSxJenQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIF9JKHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEuYSkuaX0sUChNbiwiRUNsYXNzSW1wbC84LzEiLDExNTEpLEkoMTE1Miw0OTcsX2QsUVQpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGkxLEllLDEzOCxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUChNbiwiRUNsYXNzSW1wbC85IiwxMTUyKSxJKDExMzksNTMsQnh0LGtxdCksUChNbiwiRUNsYXNzSW1wbC9NeUhhc2hTZXQiLDExMzkpLEkoNTY2LDM1MSx7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0ODoxLDgzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSxsUiksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGN3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9GbCh0aGlzKTpDOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nil9cmV0dXJuIG9oKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFDOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wfXJldHVybiBzaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6cCQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpLZXQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNTpDRSh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkscnModGhpcy5BLHUobiwxNCkpO3JldHVybjtjYXNlIDg6eHoodGhpcyxqZShSZShuKSkpO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0aGlzLnpoKCkpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksUTRlfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLCEwKTtyZXR1cm59bGgodGhpcyxlLVpuKHRoaXMuemgoKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtPZygoUnUoKSxtYSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLkZqPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2lmKCF0aGlzLmMmJihlPXZjZShGbCh0aGlzKSksIWUuZGMoKSkpZm9yKHI9ZS5LYygpO3IuT2IoKTspbj1CcihyLlBiKCkpLG1fKHRoaXMsbikmJlp1bih0aGlzKTtyZXR1cm4gdGhpcy5ifSxsLnpqPWZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuZSl7ZT1udWxsO3RyeXtlPWN3KHRoaXMpfWNhdGNoKG4pe2lmKG49V2kobiksIUV0KG4sMTAyKSl0aHJvdyBydChuKX10aGlzLmQ9bnVsbCxlJiZlLmkmMSYmKGU9PWRsP3RoaXMuZD0oRm4oKSxJMik6ZT09VHI/dGhpcy5kPWRlKDApOmU9PXIzP3RoaXMuZD1uZXcgRDMoMCk6ZT09aWE/dGhpcy5kPTA6ZT09TGI/dGhpcy5kPWcyKDApOmU9PWY1P3RoaXMuZD1lRSgwKTplPT1IdT90aGlzLmQ9RUkoMCk6dGhpcy5kPURJKDApKSx0aGlzLmU9ITB9cmV0dXJuIHRoaXMuZH0sbC5Faj1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjI1NikhPTB9LGwuSWs9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMuRD0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvciIpfSxsLnhrPWZ1bmN0aW9uKGUpe2NuZSh0aGlzLGUpLHRoaXMuSWsoZSl9LGwueWs9ZnVuY3Rpb24oZSl7dGhpcy5DPWUsdGhpcy5lPSExfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/U3oodGhpcyk6KGU9bmV3IFRoKFN6KHRoaXMpKSxlLmErPSIgKHNlcmlhbGl6YWJsZTogIixrZyhlLCh0aGlzLkJiJjI1NikhPTApLGUuYSs9IikiLGUuYSl9LGwuYz0hMSxsLmQ9bnVsbCxsLmU9ITEsUChNbiwiRURhdGFUeXBlSW1wbCIsNTY2KSxJKDQ1Nyw1NjYsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDg6MSw4MzQ6MSw2NzE6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSw0NTc6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0sRXF0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gY3codGhpcyk7Y2FzZSA0OnJldHVybiBGeXQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP0ZsKHRoaXMpOkM4KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZWcsdGhpcyw5LDUpKSx0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1abigoZG4oKSxfYikpLHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fF9iKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksUWModGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93c3QodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDYscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksUWModGhpcy5hLGUscil9cmV0dXJuIGg9dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxfYikpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLF9iKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB6bCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSksQmEodGhpcy5BLGUscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxfYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLF9iKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhY3codGhpcyk7Y2FzZSA0OnJldHVybiEhRnl0KHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhQzgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksX2IpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxfYiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpwJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOktldCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1OkNFKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgT3UobHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBPdShsdSx0aGlzLDcpKSxycyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBoZShlZyx0aGlzLDksNSkpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaGUoZWcsdGhpcyw5LDUpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufWZoKHRoaXMsZS1abigoZG4oKSxfYikpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fF9iKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLF9ifSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiwxNzkpJiYodSh0aGlzLkNiLDE3OSkudGI9bnVsbCksWGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlo4KHRoaXMsbnVsbCksJDgodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6Q0UodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IE91KGx1LHRoaXMsNykpLHhyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODp4eih0aGlzLCEwKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IGhlKGVnLHRoaXMsOSw1KSkseHIodGhpcy5hKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLF9iKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8X2IpLGUpKX0sbC5HaD1mdW5jdGlvbigpe3ZhciBlLG47aWYodGhpcy5hKWZvcihlPTAsbj10aGlzLmEuaTtlPG47KytlKUZNKFN0KHRoaXMuYSxlKSk7T2coKFJ1KCksbWEpLHRoaXMpLm5lKCksdGhpcy5CYnw9MX0sbC56aj1mdW5jdGlvbigpe3JldHVybiBGeXQodGhpcyl9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LGwuSWs9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFRW51bUltcGwiLDQ1NyksSSg1NzMsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTk0MDoxLDY3ODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDU3MzoxLDE1MDoxLDExNDoxLDExNToxfSxXenQpLGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0sbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gQnNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBkZSh0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBvPXRoaXMuYyxvPz90aGlzLnpiO2Nhc2UgNTpyZXR1cm4gdGhpcy5EYj4+MTY9PTU/dSh0aGlzLkNiLDY3MSk6bnVsbH1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHRwKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8dHApLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSA1OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0JzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSx6bCh0aGlzLGUsNSxyKX1yZXR1cm4gaD11KHluKChzPXUoSW4odGhpcywxNiksMjYpLHN8fChkbigpLHRwKSksbiksNjYpLGguTmooKS5Raih0aGlzLGl1KHRoaXMpLG4tWm4oKGRuKCksdHApKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDU6cmV0dXJuIHpsKHRoaXMsbnVsbCw1LHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksdHApKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSx0cCkpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4hISh0aGlzLkRiPj4xNj09NSYmdSh0aGlzLkNiLDY3MSkpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksdHApKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHx0cCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHJzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpYYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnRpdCh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgMzpEb2UodGhpcyx1KG4sMTk0MCkpO3JldHVybjtjYXNlIDQ6bml0KHRoaXMsQnIobikpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksdHApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHx0cCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSx0cH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp0aXQodGhpcywwKTtyZXR1cm47Y2FzZSAzOkRvZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6bml0KHRoaXMsbnVsbCk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSx0cCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHRwKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmMsZT8/dGhpcy56Yn0sbC5iPW51bGwsbC5jPW51bGwsbC5kPTAsUChNbiwiRUVudW1MaXRlcmFsSW1wbCIsNTczKTt2YXIga3huPVlpKE1uLCJFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiKTtJKDQ4OSwxLHsyMDE1OjF9LG9NKSxQKE1uLCJFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Iiw0ODkpLEkoMjQxLDExNSx7MTA1OjEsOTI6MSw5MDoxLDg3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMjQxOjEsMTE0OjEsMTE1OjF9LHd2KSxsLlNnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcj16bCh0aGlzLGUsbixyKSx0aGlzLmUmJkV0KGUsMTcwKSYmKHM9b3EodGhpcyx0aGlzLmUpLHMhPXRoaXMuYyYmKHI9X0UodGhpcyxzLHIpKSkscn0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx0aGlzLmQ7Y2FzZSAyOnJldHVybiBuP3dxKHRoaXMpOnRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6cmV0dXJuIG4/bHN0KHRoaXMpOnRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLHF3KSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8cXcpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gUHJlKHRoaXMsbnVsbCxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgU3MoaG8sdGhpcywxKSksQmEodGhpcy5kLGUscik7Y2FzZSAzOnJldHVybiBOcmUodGhpcyxudWxsLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCkscXcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxxdykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuZjtjYXNlIDE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYztjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLHF3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8cXcpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6ZWFlKHRoaXMsdShuLDg3KSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx4cih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IFNzKGhvLHRoaXMsMSkpLHJzKHRoaXMuZCx1KG4sMTQpKTtyZXR1cm47Y2FzZSAzOnA0dCh0aGlzLHUobiw4NykpO3JldHVybjtjYXNlIDQ6RDR0KHRoaXMsdShuLDgzNikpO3JldHVybjtjYXNlIDU6UDgodGhpcyx1KG4sMTM4KSk7cmV0dXJufWZoKHRoaXMsZS1abigoZG4oKSxxdykpLHluKChyPXUoSW4odGhpcywxNiksMjYpLHJ8fHF3KSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHF3fSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6ZWFlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBTcyhobyx0aGlzLDEpKSx4cih0aGlzLmQpO3JldHVybjtjYXNlIDM6cDR0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpENHQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OlA4KHRoaXMsbnVsbCk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxxdykpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fHF3KSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgSWwoYmYodGhpcykpLGUuYSs9IiAoZXhwcmVzc2lvbjogIixtYXQodGhpcyxlKSxlLmErPSIpIixlLmF9O3ZhciB0THQ7UChNbiwiRUdlbmVyaWNUeXBlSW1wbCIsMjQxKSxJKDE5NjksMTk2NCxDSCksbC5YaD1mdW5jdGlvbihlLG4pe0xXdCh0aGlzLGUsbil9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTFd0KHRoaXMsdGhpcy5nYygpLGUpLG59LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFFmKHRoaXMuR2koKSxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoKCl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB6dCh0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oKDApfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkdpKCkuWmMoZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcnkodGhpcyxlLCEwKSxufSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcz15c3QodGhpcyxuKSxyPXRoaXMuWmMoZSksci5SYihzKSxzfSxsLmppPWZ1bmN0aW9uKGUsbil7dmFyIHI7cnkodGhpcyxuLCEwKSxyPXRoaXMuWmMoZSksci5SYihuKX0sUCgkaSwiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCIsMTk2OSksSSg0ODYsMTk2OSxDSCxOTSksbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gUWYodGhpcy5HaSgpLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oRWcoKSxFZygpLGhOKTp0aGlzLkprKCl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRVdCh0aGlzLmEsdGhpcy5iKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KEVnKCksRWcoKSxoTik6dGhpcy5KaygpfSxsLl9oPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZihlPDB8fGU+MSl0aHJvdyBydChuZXcgbW8oWF8rZSsiLCBzaXplPTAiKSk7cmV0dXJuIEVnKCksRWcoKSxoTn1mb3Iocj10aGlzLkprKCksbj0wO248ZTsrK24paHoocik7cmV0dXJuIHJ9LGwuZGM9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYodGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYoZT10aGlzLmJbcl0sIXRoaXMuTWsoKXx8dGhpcy5hLm1oKGUpKXtpZihoPXRoaXMuYS5iaChlLCExKSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKG49dShoLDE1Mykscz0wLG89bi5nYygpO3M8bzsrK3MpaWYoVll0KG4uaWwocykpJiZuLmpsKHMpIT1udWxsKXJldHVybiExfWVsc2UgaWYoZS4kaigpKXtpZighdShoLDE0KS5kYygpKXJldHVybiExfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4hMX19cmV0dXJuITB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcnl0KHRoaXMpfSxsLlpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZihlIT0wKXRocm93IHJ0KG5ldyBtbyhYXytlKyIsIHNpemU9MCIpKTtyZXR1cm4gRWcoKSxFZygpLGhOfWZvcihyPXRoaXMuTGsoKT90aGlzLktrKCk6dGhpcy5KaygpLG49MDtuPGU7KytuKWh6KHIpO3JldHVybiByfSxsLmlpPWZ1bmN0aW9uKGUsbil7dGhyb3cgcnQobmV3IE9yKX0sbC5qaT1mdW5jdGlvbihlLG4pe3Rocm93IHJ0KG5ldyBPcil9LGwuSms9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJqKHRoaXMuYSx0aGlzLmIpfSxsLktrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCMnQodGhpcy5hLHRoaXMuYil9LGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5nYz1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saCxkO2lmKG89MCx0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZihlPXRoaXMuYltyXSwhdGhpcy5NaygpfHx0aGlzLmEubWgoZSkpaWYoZD10aGlzLmEuYmgoZSwhMSksdG8oKSx1KGUsNjYpLk9qKCkpZm9yKG49dShkLDE1Mykscz0wLGg9bi5nYygpO3M8aDsrK3MpVll0KG4uaWwocykpJiZuLmpsKHMpIT1udWxsJiYrK287ZWxzZSBlLiRqKCk/bys9dShkLDE0KS5nYygpOmQhPW51bGwmJisrb31yZXR1cm4gb30sbC5Naz1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgU2Z0O1AoJGksIkVDb250ZW50c0VMaXN0Iiw0ODYpLEkoMTE1Niw0ODYsQ0gscFd0KSxsLkprPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiV3QodGhpcy5hLHRoaXMuYil9LGwuS2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZXdCh0aGlzLmEsdGhpcy5iKX0sbC5Naz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbC8xIiwxMTU2KSxJKDI3OSwxLF9ILGJqKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IE9yKX0sbC5Oaz1mdW5jdGlvbihlKXtpZih0aGlzLmchPTB8fHRoaXMuZSl0aHJvdyBydChuZXcgRm8oIkl0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQiKSk7dGhpcy5lPWV9LGwuT2I9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7c3dpdGNoKHRoaXMuZyl7Y2FzZSAzOmNhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0zOnRoaXMucD90aGlzLnAuUGIoKTorK3RoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IVVhZSh0aGlzLHRoaXMucCk6IU9vZSh0aGlzKSkpe2Zvcig7dGhpcy5kPHRoaXMuYy5sZW5ndGg7KWlmKG49dGhpcy5jW3RoaXMuZCsrXSwoIXRoaXMuZXx8bi5HaigpIT1JN3x8bi5haigpIT0wKSYmKCF0aGlzLk1rKCl8fHRoaXMuYi5taChuKSkpe2lmKGg9dGhpcy5iLmJoKG4sdGhpcy5MaygpKSx0aGlzLmY9KHRvKCksdShuLDY2KS5PaigpKSx0aGlzLmZ8fG4uJGooKSl7aWYodGhpcy5MaygpPyhzPXUoaCwxNSksdGhpcy5rPXMpOihzPXUoaCw2OSksdGhpcy5rPXRoaXMuaj1zKSxFdCh0aGlzLmssNTQpPyh0aGlzLnA9bnVsbCx0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPTApOnRoaXMucD10aGlzLmo/dGhpcy5qLiRoKCk6dGhpcy5rLlljKCksdGhpcy5wP1VhZSh0aGlzLHRoaXMucCk6T29lKHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLnBpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9ZWxzZSBpZihoIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWgsdGhpcy5pPXIsdGhpcy5nPTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZj0hMSx0aGlzLmc9MSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLnBpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9fSxsLlNiPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO3N3aXRjaCh0aGlzLmcpe2Nhc2UtMzpjYXNlLTI6cmV0dXJuITA7Y2FzZS0xOnJldHVybiExO2Nhc2UgMzp0aGlzLnA/dGhpcy5wLlViKCk6LS10aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyFXYWUodGhpcyx0aGlzLnApOiFzb2UodGhpcykpKXtmb3IoO3RoaXMuZD4wOylpZihuPXRoaXMuY1stLXRoaXMuZF0sKCF0aGlzLmV8fG4uR2ooKSE9STd8fG4uYWooKSE9MCkmJighdGhpcy5NaygpfHx0aGlzLmIubWgobikpKXtpZihoPXRoaXMuYi5iaChuLHRoaXMuTGsoKSksdGhpcy5mPSh0bygpLHUobiw2NikuT2ooKSksdGhpcy5mfHxuLiRqKCkpe2lmKHRoaXMuTGsoKT8ocz11KGgsMTUpLHRoaXMuaz1zKToocz11KGgsNjkpLHRoaXMuaz10aGlzLmo9cyksRXQodGhpcy5rLDU0KT8odGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj10aGlzLm8pOnRoaXMucD10aGlzLmo/dGhpcy5qLl9oKHRoaXMuay5nYygpKTp0aGlzLmsuWmModGhpcy5rLmdjKCkpLHRoaXMucD9XYWUodGhpcyx0aGlzLnApOnNvZSh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai5waSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KGU9dShvLDcyKSxlLmFrKCkscj1lLmRkKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH1lbHNlIGlmKGghPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9aCx0aGlzLmk9cix0aGlzLmc9LTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZz0tMSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLnBpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBoeih0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuVWI9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSlyZXR1cm4tLXRoaXMuYSx0aGlzLmc9MCxlPXRoaXMuaSx0aGlzLlNiKCksZTt0aHJvdyBydChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IE9yKX0sbC5Maz1mdW5jdGlvbigpe3JldHVybiExfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IHJ0KG5ldyBPcil9LGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5hPTAsbC5kPTAsbC5mPSExLGwuZz0wLGwubj0wLGwubz0wO3ZhciBoTjtQKCRpLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsIiwyNzkpLEkoNjk3LDI3OSxfSCxCMnQpLGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCIsNjk3KSxJKDExNTcsNjk3LF9ILHZXdCksbC5Naz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFTmFtZWRFbGVtZW50SW1wbC8xLzEiLDExNTcpLEkoMTE1OCwyNzksX0gsYld0KSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMiIsMTE1OCksSSgzNiwxNDMsUUQsS20sU3J0LFFzLHFydCxGMCxkZix6bXQsVlF0LHFtdCxVUXQsZm10LFdRdCxWbXQsS1F0LGRtdCxZUXQsSG10LFhRdCxDQyxnSSxzcnQsR210LFFRdCxnbXQsWlF0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIENtdCh0aGlzKX0sbC5naj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUNtdCh0aGlzKSxlP2UuemooKTpudWxsfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI9PS0xJiZ0aGlzLmEmJih0aGlzLmI9dGhpcy5jLlhnKHRoaXMuYS5haigpLHRoaXMuYS5HaigpKSksdGhpcy5jLk9nKHRoaXMuYixlKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuaGo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1DbXQodGhpcyksZT9lLktqKCk6ITF9LGwuYj0tMSxQKE1uLCJFTm90aWZpY2F0aW9uSW1wbCIsMzYpLEkoMzk5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsNTk6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsMzk5OjEsMjg0OjEsMTE0OjEsMTE1OjF9LFd0dCksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gJHNlKHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEZuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBkZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gZGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIEZuKCksaD10aGlzLnQsaD4xfHxoPT0tMTtjYXNlIDc6cmV0dXJuIEZuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/TGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD91KHRoaXMuQ2IsMjYpOm51bGw7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3ICRNKHRoaXMsdGhpcykpLHRoaXMuYTtjYXNlIDE0OnJldHVybiBpbCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGVwKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8ZXApLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD8kc2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDEwLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLFFjKHRoaXMuYyxlLHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gemwodGhpcyxudWxsLDEwLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgT3UobHUsdGhpcywxMSkpLEJhKHRoaXMuZCxlLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLEJhKHRoaXMuYyxlLHIpO2Nhc2UgMTQ6cmV0dXJuIEJhKGlsKHRoaXMpLGUscil9cmV0dXJuIG89dSh5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxlcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxpdSh0aGlzKSxuLVpuKChkbigpLGVwKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBzPXRoaXMudCxzPjF8fHM9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmdSh0aGlzLkNiLDI2KSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4hIXRoaXMuYSYmaWwodGhpcy5hLmEpLmkhPTAmJiEodGhpcy5iJiZjc3QodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4hIXRoaXMuYiYmY3N0KHRoaXMuYil9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxlcCkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fGVwKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6WGModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpQZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpJZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0eSh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9TzEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSkseHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBPdShsdSx0aGlzLDExKSkscnModGhpcy5kLHUobiwxNCkpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSx4cih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IGhlKHp3LHRoaXMsMTIsMTApKSxycyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgJE0odGhpcyx0aGlzKSksQ18odGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyAkTSh0aGlzLHRoaXMpKSxycyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTQ6eHIoaWwodGhpcykpLHJzKGlsKHRoaXMpLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksZXApKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxlcCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxlcH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsITApO3JldHVybjtjYXNlIDM6UGcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpJZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dHkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmYyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPU8xKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgT3UobHUsdGhpcywxMSkpLHhyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgaGUoencsdGhpcywxMiwxMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5hJiZDXyh0aGlzLmEpO3JldHVybjtjYXNlIDE0OnRoaXMuYiYmeHIodGhpcy5iKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLGVwKSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8ZXApLGUpKX0sbC5HaD1mdW5jdGlvbigpe3ZhciBlLG47aWYodGhpcy5jKWZvcihlPTAsbj10aGlzLmMuaTtlPG47KytlKUZNKFN0KHRoaXMuYyxlKSk7TGgodGhpcyksdGhpcy5CYnw9MX0sUChNbiwiRU9wZXJhdGlvbkltcGwiLDM5OSksSSg1MDUsNzQyLE44dCwkTSksbC5IaT1mdW5jdGlvbihlLG4pe3BRZSh0aGlzLGUsdShuLDEzOCkpfSxsLklpPWZ1bmN0aW9uKGUpe2hYZSh0aGlzLHUoZSwxMzgpKX0sbC5PaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoU3QoaWwodGhpcy5hKSxlKSw4Nykscj1uLmMscnx8KGRuKCksVjEpfSxsLlRpPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShkeShpbCh0aGlzLmEpLGUpLDg3KSxyPW4uYyxyfHwoZG4oKSxWMSl9LGwuVWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZmhuKHRoaXMsZSx1KG4sMTM4KSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBudWxsfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEenQodGhpcyl9LGwuS2k9ZnVuY3Rpb24oKXt4cihpbCh0aGlzLmEpKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gS3JlKHRoaXMsZSl9LGwuTWk9ZnVuY3Rpb24oZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhS3JlKHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGwuTmk9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKEV0KGUsMTUpJiYocz11KGUsMTUpLHMuZ2MoKT09aWwodGhpcy5hKS5pKSl7Zm9yKG49cy5LYygpLHI9bmV3IGVyKHRoaXMpO24uT2IoKTspaWYoR3Qobi5QYigpKSE9PUd0KGRyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0sbC5QaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKHI9MSxuPW5ldyBlcihpbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLHM9KG89ZS5jLG98fChkbigpLFYxKSkscj0zMSpyKyhzP0hpKHMpOjApO3JldHVybiByfSxsLlFpPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO2ZvcihzPTAscj1uZXcgZXIoaWwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49dShkcihyKSw4NyksR3QoZSk9PT1HdCgobz1uLmMsb3x8KGRuKCksVjEpKSkpcmV0dXJuIHM7KytzfXJldHVybi0xfSxsLlJpPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYSkuaT09MH0sbC5TaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLlZpPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYSkuaX0sbC5XaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3IoaD1pbCh0aGlzLmEpLmksbz1QdChYbixJZSwxLGgsNSwxKSxyPTAsbj1uZXcgZXIoaWwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspZT11KGRyKG4pLDg3KSxvW3IrK109KHM9ZS5jLHN8fChkbigpLFYxKSk7cmV0dXJuIG99LGwuWGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7Zm9yKHc9aWwodGhpcy5hKS5pLGUubGVuZ3RoPHcmJihvPUNJKHNsKGUpLmMsdyksZT1vKSxlLmxlbmd0aD53JiZKaShlLHcsbnVsbCkscz0wLHI9bmV3IGVyKGlsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4NyksaD0oZD1uLmMsZHx8KGRuKCksVjEpKSxKaShlLHMrKyxoKTtyZXR1cm4gZX0sbC5ZaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bmV3IHhnLG8uYSs9IlsiLGU9aWwodGhpcy5hKSxuPTAscz1pbCh0aGlzLmEpLmk7bjxzOylmbyhvLGRDKChyPXUoU3QoZSxuKSw4NykuYyxyfHwoZG4oKSxWMSkpKSksKytuPHMmJihvLmErPUthKTtyZXR1cm4gby5hKz0iXSIsby5hfSxsLiRpPWZ1bmN0aW9uKGUpe30sbC5haj1mdW5jdGlvbigpe3JldHVybiAxM30sbC5Caz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDEzOCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gcGluKHRoaXMuYSl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFT3BlcmF0aW9uSW1wbC8xIiw1MDUpLEkoMTM0MCwxOTY0LElFLER6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gX0kodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIGlsKHRoaXMuYS5hKS5pfSxQKE1uLCJFT3BlcmF0aW9uSW1wbC8xLzEiLDEzNDApLEkoMTM0MSw1NDUsem8sd1l0KSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gcj11KHRfKHRoaXMsZSxuKSw4NyksbWwodGhpcy5lKSYmS2sodGhpcyxuZXcgZ0kodGhpcy5hLDcsKGRuKCksdDVlKSxkZShuKSwocz1yLmMsc3x8VjEpLGUpKSxyfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEF1bih0aGlzLHUoZSw4Nyksbil9LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTHVuKHRoaXMsdShlLDg3KSxuKX0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIEFobih0aGlzLHUoZSw4NyksdShuLDg3KSxyKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIERDKHRoaXMsZSxuLHIscyx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiBEQyh0aGlzLGUsbixyLHMsdGhpcy5pLXUociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgRjAodGhpcy5lLGUsdGhpcy5jLG4scixzLCEwKX19LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiBjc3QodGhpcyl9LGwuWGo9ZnVuY3Rpb24oKXt4cih0aGlzKX0sUChNbiwiRU9wZXJhdGlvbkltcGwvMiIsMTM0MSksSSg0OTgsMSx7MTkzODoxLDQ5ODoxfSxOVnQpLFAoTW4sIkVQYWNrYWdlSW1wbC8xIiw0OTgpLEkoMTYsODUsem8saGUpLGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmI9MCxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0IiwxNiksSSgzNTMsMTYsem8sSXgpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nIiwzNTMpLEkoMjk4LDM1Myx6byxxbSksbC5jaT1mdW5jdGlvbigpe3RoaXMuYS50Yj1udWxsfSxQKE1uLCJFUGFja2FnZUltcGwvMiIsMjk4KSxJKDEyMjgsMSx7fSx0QiksUChNbiwiRVBhY2thZ2VJbXBsLzMiLDEyMjgpLEkoNzE4LDQzLF80LGpwdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSk/YXJ0KHRoaXMsZSk6ISFBbyh0aGlzLmYsZSl9LFAoTW4sIkVQYWNrYWdlUmVnaXN0cnlJbXBsIiw3MTgpLEkoNTA5LDI4NCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjAxNzoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw1MDk6MSwyODQ6MSwxMTQ6MSwxMTU6MX0sS3R0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiB6c2UodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBGbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIGRlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBkZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gRm4oKSxoPXRoaXMudCxoPjF8fGg9PS0xO2Nhc2UgNzpyZXR1cm4gRm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9MaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5EYj4+MTY9PTEwP3UodGhpcy5DYiw1OSk6bnVsbH1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGUzKSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8ZTMpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxRYyh0aGlzLkFiLGUscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD96c2UodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksemwodGhpcyxlLDEwLHIpfXJldHVybiBoPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZTMpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlMykpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gVm50KHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gemwodGhpcyxudWxsLDEwLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksZTMpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxlMykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gcz10aGlzLnQscz4xfHxzPT0tMTtjYXNlIDc6cmV0dXJuIHI9dGhpcy5zLHI+PTE7Y2FzZSA4OnJldHVybiEhdGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLnEmJiEodGhpcy5yJiYhdGhpcy5xLmUmJmp2KHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4hISh0aGlzLkRiPj4xNj09MTAmJnUodGhpcy5DYiw1OSkpfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksZTMpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxlMyksZSkpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksZTN9LFAoTW4sIkVQYXJhbWV0ZXJJbXBsIiw1MDkpLEkoOTksNDQ5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxODoxLDE3MDoxLDY2OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDk5OjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9LHEydCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQ7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBGbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEZuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gZGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGRlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBGbigpLGQ9dGhpcy50LGQ+MXx8ZD09LTE7Y2FzZSA3OnJldHVybiBGbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0xoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBGbigpLCEhKHRoaXMuQmImd2YpO2Nhc2UgMTE6cmV0dXJuIEZuKCksISEodGhpcy5CYiZBeSk7Y2FzZSAxMjpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnl5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gRm4oKSwhISh0aGlzLkJiJnp1KTtjYXNlIDE2OnJldHVybiBGbigpLCEhKHRoaXMuQmImYmQpO2Nhc2UgMTc6cmV0dXJuIFZtKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEZuKCksISEodGhpcy5CYiZkYyk7Y2FzZSAxOTpyZXR1cm4gRm4oKSxoPW5vKHRoaXMpLCEhKGgmJmguQmImZGMpO2Nhc2UgMjA6cmV0dXJuIEZuKCksISEodGhpcy5CYiZZYSk7Y2FzZSAyMTpyZXR1cm4gbj9ubyh0aGlzKTp0aGlzLmI7Y2FzZSAyMjpyZXR1cm4gbj9DeXQodGhpcyk6eUp0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgVTMoWnksdGhpcywyMykpLHRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChkbigpLGM1KSkseW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8YzUpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBvPXRoaXMudCxvPjF8fG89PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmanYodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJndmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkF5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJnl5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gbUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZ6dSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZiZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVZtKHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZGMpIT0wO2Nhc2UgMTk6cmV0dXJuIHM9bm8odGhpcyksISFzJiYocy5CYiZkYykhPTA7Y2FzZSAyMDpyZXR1cm4odGhpcy5CYiZZYSk9PTA7Y2FzZSAyMTpyZXR1cm4hIXRoaXMuYjtjYXNlIDIyOnJldHVybiEheUp0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBzaCh0aGlzLGUtWm4oKGRuKCksYzUpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxjNSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHIscztzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkscnModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOm1ydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOk5nKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OklnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnR5KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmYyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1PMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMTpzRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTI6ckUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEzOlhidCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxNTppRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE4Omtybih0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMjA6bjN0KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAyMTpleXQodGhpcyx1KG4sMTgpKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyBVMyhaeSx0aGlzLDIzKSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBVMyhaeSx0aGlzLDIzKSkscnModGhpcy5hLHUobiwxNCkpO3JldHVybn1maCh0aGlzLGUtWm4oKGRuKCksYzUpKSx5bigocj11KEluKHRoaXMsMTYpLDI2KSxyfHxjNSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxjNX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RXQodGhpcy5DYiw4OCkmJmh5KHJsKHUodGhpcy5DYiw4OCkpLDQpLFhjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpOZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOlBnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6SWcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnR5KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpmMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1PMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOm5FKHRoaXMsITApO3JldHVybjtjYXNlIDExOnNFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOnJFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6aUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6YUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6ZTN0KHRoaXMsITEpLEV0KHRoaXMuQ2IsODgpJiZoeShybCh1KHRoaXMuQ2IsODgpKSwyKTtyZXR1cm47Y2FzZSAyMDpuM3QodGhpcywhMCk7cmV0dXJuO2Nhc2UgMjE6ZXl0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgVTMoWnksdGhpcywyMykpLHhyKHRoaXMuYSk7cmV0dXJufWxoKHRoaXMsZS1abigoZG4oKSxjNSkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fGM1KSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtDeXQodGhpcyksazgoRW8oKFJ1KCksbWEpLHRoaXMpKSxMaCh0aGlzKSx0aGlzLkJifD0xfSxsLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIG5vKHRoaXMpfSxsLnFrPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bm8odGhpcyksISFlJiYoZS5CYiZkYykhPTB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZkYykhPTB9LGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZZYSkhPTB9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5jPW51bGwsS3l0KHRoaXMsZSxuKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P3BxKHRoaXMpOihlPW5ldyBUaChwcSh0aGlzKSksZS5hKz0iIChjb250YWlubWVudDogIixrZyhlLCh0aGlzLkJiJmRjKSE9MCksZS5hKz0iLCByZXNvbHZlUHJveGllczogIixrZyhlLCh0aGlzLkJiJllhKSE9MCksZS5hKz0iKSIsZS5hKX0sUChNbiwiRVJlZmVyZW5jZUltcGwiLDk5KSxJKDU0OCwxMTUsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDU0ODoxLDExNDoxLDExNToxfSxXWiksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5IYj1mdW5jdGlvbigpe3JldHVybiBJdih0aGlzKX0sbC5VaD1mdW5jdGlvbihlKXtTdG4odGhpcyxCcihlKSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHB0bih0aGlzLEJyKGUpKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksUWEpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxRYSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmIhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGx9cmV0dXJuIHNoKHRoaXMsZS1abigoZG4oKSxRYSkpLHluKChuPXUoSW4odGhpcywxNiksMjYpLG58fFFhKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOkF0bih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxOlptdCh0aGlzLEJyKG4pKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLFFhKSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8UWEpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksUWF9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpRbXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOlptdCh0aGlzLG51bGwpO3JldHVybn1saCh0aGlzLGUtWm4oKGRuKCksUWEpKSx5bigobj11KEluKHRoaXMsMTYpLDI2KSxufHxRYSksZSkpfSxsLlNoPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT09LTEmJihlPXRoaXMuYix0aGlzLmE9ZT09bnVsbD8wOkJnKGUpKSx0aGlzLmF9LGwuVGg9ZnVuY3Rpb24oZSl7dGhpcy5hPWV9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9iZih0aGlzKTooZT1uZXcgVGgoYmYodGhpcykpLGUuYSs9IiAoa2V5OiAiLGZvKGUsdGhpcy5iKSxlLmErPSIsIHZhbHVlOiAiLGZvKGUsdGhpcy5jKSxlLmErPSIpIixlLmEpfSxsLmE9LTEsbC5iPW51bGwsbC5jPW51bGw7dmFyIGNjPVAoTW4sIkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5SW1wbCIsNTQ4KSxhNWU9WWkoJGksIkZlYXR1cmVNYXAvRW50cnkvSW50ZXJuYWwiKTtJKDU2NSwxLFNIKSxsLk9rPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBrKHUoZSw0OSkpfSxsLlBrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk9rKGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIHRoaXM9PT1lPyEwOkV0KGUsNzIpPyhuPXUoZSw3Miksbi5haygpPT10aGlzLmM/KHI9dGhpcy5kZCgpLHI9PW51bGw/bi5kZCgpPT1udWxsOnlpKHIsbi5kZCgpKSk6ITEpOiExfSxsLmFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5IYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZGQoKSxIaSh0aGlzLmMpXihlPT1udWxsPzA6SGkoZSkpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT10aGlzLmMsbj1GbChlLkhqKCkpLlBoKCksZS5uZSgpLChuIT1udWxsJiZuLmxlbmd0aCE9MD9uKyI6IitlLm5lKCk6ZS5uZSgpKSsiPSIrdGhpcy5kZCgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0Jhc2ljRmVhdHVyZU1hcEVudHJ5Iiw1NjUpLEkoNzc2LDU2NSxTSCxRMnQpLGwuUGs9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRMnQodGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIEdvbih0aGlzLGUsdGhpcy5hLG4scil9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBWb24odGhpcyxlLHRoaXMuYSxuLHIpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0NvbnRhaW5tZW50VXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc3NiksSSgxMzE0LDEse30sUFZ0KSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9dShJOChlLHRoaXMuYiksMjE1KSxoLm5sKHRoaXMuYSkuV2oocyl9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KEk4KGUsdGhpcy5iKSwyMTUpLGguZWwodGhpcy5hLHMsbyl9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KEk4KGUsdGhpcy5iKSwyMTUpLGguZmwodGhpcy5hLHMsbyl9LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoSTgoZSx0aGlzLmIpLDIxNSkscy5ubCh0aGlzLmEpLmZqKCl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG87bz11KEk4KGUsdGhpcy5iKSwyMTUpLG8ubmwodGhpcy5hKS5XYihzKX0sbC5Vaj1mdW5jdGlvbihlLG4scil7cmV0dXJuIHUoSTgoZSx0aGlzLmIpLDIxNSkubmwodGhpcy5hKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz11KEk4KGUsdGhpcy5iKSwyMTUpLHMubmwodGhpcy5hKS5YaigpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlRmVhdHVyZU1hcERlbGVnYXRvciIsMTMxNCksSSg4OSwxLHt9LENnLFpiLFNnLGUyKSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7aWYoaD1uLkNoKHIpLGg9PW51bGwmJm4uRGgocixoPUFxKHRoaXMsZSkpLCFvKXN3aXRjaCh0aGlzLmUpe2Nhc2UgNTA6Y2FzZSA0MTpyZXR1cm4gdShoLDU4OSkuc2ooKTtjYXNlIDQwOnJldHVybiB1KGgsMjE1KS5rbCgpfXJldHVybiBofSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZD1uLkNoKHIpLGQ9PW51bGwmJm4uRGgocixkPUFxKHRoaXMsZSkpLGg9dShkLDY5KS5sayhzLG8pLGh9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1uLkNoKHIpLGghPW51bGwmJihvPXUoaCw2OSkubWsocyxvKSksb30sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9bi5DaChyKSxzIT1udWxsJiZ1KHMsNzYpLmZqKCl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG87bz11KG4uQ2gociksNzYpLCFvJiZuLkRoKHIsbz1BcSh0aGlzLGUpKSxvLldiKHMpfSxsLlVqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBvPW4uQ2gociksbz09bnVsbCYmbi5EaChyLG89QXEodGhpcyxlKSksRXQobyw3Nik/dShvLDc2KToocz11KG4uQ2gociksMTUpLG5ldyBOenQocykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXUobi5DaChyKSw3NiksIXMmJm4uRGgocixzPUFxKHRoaXMsZSkpLHMuWGooKX0sbC5iPTAsbC5lPTAsUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZU1hbnkiLDg5KSxJKDUwNCwxLHt9KSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dGhyb3cgcnQobmV3IE9yKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3Rocm93IHJ0KG5ldyBPcil9LGwuVWo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuZXcgTVh0KHRoaXMsZSxuLHIpfTt2YXIgZjA7UChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZSIsNTA0KSxJKDEzMzEsMSx0dXQsTVh0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUGoodGhpcy5jLHRoaXMuZCx0aGlzLmIsZSwhMCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlNqKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLmEuVGoodGhpcy5jLHRoaXMuZCx0aGlzLmIsZSl9LGwuWGo9ZnVuY3Rpb24oKXt0aGlzLmEuVmoodGhpcy5jLHRoaXMuZCx0aGlzLmIpfSxsLmI9MCxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlLzEiLDEzMzEpLEkoNzY5LDUwNCx7fSxPd3QpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gYWF0KGUsZS5laCgpLGUuVmcoKSk9PXRoaXMuYj90aGlzLnNrKCkmJnM/R3N0KGUpOmUuZWgoKTpudWxsfSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZS5laCgpJiYobz0oaD1lLlZnKCksaD49MD9lLlFnKG8pOmUuZWgoKS5paChlLC0xLWgsbnVsbCxvKSkpLGQ9VmkoZS5UZygpLHRoaXMuZSksZS5TZyhzLGQsbyl9LGwuUmo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1WaShlLlRnKCksdGhpcy5lKSxlLlNnKG51bGwsaCxvKX0sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9VmkoZS5UZygpLHRoaXMuZSksISFlLmVoKCkmJmUuVmcoKT09c30sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdyxrO2lmKHMhPW51bGwmJiFsYXQodGhpcy5hLHMpKXRocm93IHJ0KG5ldyBYayhBSCsoRXQocyw1Nik/ZDR0KHUocyw1NikuVGcoKSk6Qm10KHNsKHMpKSkrTEgrdGhpcy5hKyInIikpO2lmKG89ZS5laCgpLGQ9VmkoZS5UZygpLHRoaXMuZSksR3QocykhPT1HdChvKXx8ZS5WZygpIT1kJiZzIT1udWxsKXtpZihsRShlLHUocyw1NikpKXRocm93IHJ0KG5ldyBQbihLXytlLkliKCkpKTtrPW51bGwsbyYmKGs9KGg9ZS5WZygpLGg+PTA/ZS5RZyhrKTplLmVoKCkuaWgoZSwtMS1oLG51bGwsaykpKSx3PXUocyw0OSksdyYmKGs9dy5naChlLFZpKHcuVGcoKSx0aGlzLmIpLG51bGwsaykpLGs9ZS5TZyh3LGQsayksayYmay5GaSgpfWVsc2UgZS5MZygpJiZlLk1nKCkmJm1pKGUsbmV3IFFzKGUsMSxkLHMscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZDtzPWUuZWgoKSxzPyhkPShvPWUuVmcoKSxvPj0wP2UuUWcobnVsbCk6ZS5laCgpLmloKGUsLTEtbyxudWxsLG51bGwpKSxoPVZpKGUuVGcoKSx0aGlzLmUpLGQ9ZS5TZyhudWxsLGgsZCksZCYmZC5GaSgpKTplLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgQ0MoZSwxLHRoaXMuZSxudWxsLG51bGwpKX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyIiw3NjkpLEkoMTMxNSw3Njkse30sa0t0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXJSZXNvbHZpbmciLDEzMTUpLEkoNTYzLDUwNCx7fSksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksaD09bnVsbD90aGlzLmI6R3QoaCk9PT1HdChmMCk/bnVsbDpofSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGwmJihHdChzKT09PUd0KGYwKXx8IXlpKHMsdGhpcy5iKSl9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saDtlLkxnKCkmJmUuTWcoKT8obz0oaD1uLkNoKHIpLGg9PW51bGw/dGhpcy5iOkd0KGgpPT09R3QoZjApP251bGw6aCkscz09bnVsbD90aGlzLmMhPW51bGw/KG4uRGgocixudWxsKSxzPXRoaXMuYik6dGhpcy5iIT1udWxsP24uRGgocixmMCk6bi5EaChyLG51bGwpOih0aGlzLlNrKHMpLG4uRGgocixzKSksbWkoZSx0aGlzLmQuVGsoZSwxLHRoaXMuZSxvLHMpKSk6cz09bnVsbD90aGlzLmMhPW51bGw/bi5EaChyLG51bGwpOnRoaXMuYiE9bnVsbD9uLkRoKHIsZjApOm4uRGgocixudWxsKToodGhpcy5TayhzKSxuLkRoKHIscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO2UuTGcoKSYmZS5NZygpPyhzPShvPW4uQ2gociksbz09bnVsbD90aGlzLmI6R3Qobyk9PT1HdChmMCk/bnVsbDpvKSxuLkVoKHIpLG1pKGUsdGhpcy5kLlRrKGUsMSx0aGlzLmUscyx0aGlzLmIpKSk6bi5FaChyKX0sbC5Taz1mdW5jdGlvbihlKXt0aHJvdyBydChuZXcgR3p0KX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEiLDU2MyksSShGNCwxLHt9LGVCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBDQyhlLG4scixzLG8pfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IHNydChlLG4scixzLG8saCl9O3ZhciBlTHQsbkx0LHJMdCxpTHQsc0x0LGFMdCxvTHQsQWZ0LGNMdDtQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yIixGNCksSSgxMzMyLEY0LHt9LG5CKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBnbXQoZSxuLHIsamUoUmUocykpLGplKFJlKG8pKSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgWlF0KGUsbixyLGplKFJlKHMpKSxqZShSZShvKSksaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMSIsMTMzMiksSSgxMzMzLEY0LHt9LHJCKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyB6bXQoZSxuLHIsdShzLDIxNykuYSx1KG8sMjE3KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBWUXQoZSxuLHIsdShzLDIxNykuYSx1KG8sMjE3KS5hLGgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzIiLDEzMzMpLEkoMTMzNCxGNCx7fSxBayksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgcW10KGUsbixyLHUocywxNzIpLmEsdShvLDE3MikuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgVVF0KGUsbixyLHUocywxNzIpLmEsdShvLDE3MikuYSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8zIiwxMzM0KSxJKDEzMzUsRjQse30saUIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IGZtdChlLG4scixYdCh5ZShzKSksWHQoeWUobykpKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBXUXQoZSxuLHIsWHQoeWUocykpLFh0KHllKG8pKSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci80IiwxMzM1KSxJKDEzMzYsRjQse30sc0IpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFZtdChlLG4scix1KHMsMTU1KS5hLHUobywxNTUpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IEtRdChlLG4scix1KHMsMTU1KS5hLHUobywxNTUpLmEsaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNSIsMTMzNiksSSgxMzM3LEY0LHt9LEtaKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBkbXQoZSxuLHIsdShzLDE5KS5hLHUobywxOSkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgWVF0KGUsbixyLHUocywxOSkuYSx1KG8sMTkpLmEsaCl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNiIsMTMzNyksSSgxMzM4LEY0LHt9LExrKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBIbXQoZSxuLHIsdShzLDE2MikuYSx1KG8sMTYyKS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBYUXQoZSxuLHIsdShzLDE2MikuYSx1KG8sMTYyKS5hLGgpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzciLDEzMzgpLEkoMTMzOSxGNCx7fSxNayksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgR210KGUsbixyLHUocywxODQpLmEsdShvLDE4NCkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgUVF0KGUsbixyLHUocywxODQpLmEsdShvLDE4NCkuYSxoKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci84IiwxMzM5KSxJKDEzMTcsNTYzLHt9LElYdCksbC5Taz1mdW5jdGlvbihlKXtpZighdGhpcy5hLndqKGUpKXRocm93IHJ0KG5ldyBYayhBSCtzbChlKStMSCt0aGlzLmErIiciKSl9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhRHluYW1pYyIsMTMxNyksSSgxMzE4LDU2Myx7fSxtWXQpLGwuU2s9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVN0YXRpYyIsMTMxOCksSSg3NzAsNTYzLHt9KSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGx9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saDtlLkxnKCkmJmUuTWcoKT8obz0hMCxoPW4uQ2gociksaD09bnVsbD8obz0hMSxoPXRoaXMuYik6R3QoaCk9PT1HdChmMCkmJihoPW51bGwpLHM9PW51bGw/dGhpcy5jIT1udWxsPyhuLkRoKHIsbnVsbCkscz10aGlzLmIpOm4uRGgocixmMCk6KHRoaXMuU2socyksbi5EaChyLHMpKSxtaShlLHRoaXMuZC5VayhlLDEsdGhpcy5lLGgscywhbykpKTpzPT1udWxsP3RoaXMuYyE9bnVsbD9uLkRoKHIsbnVsbCk6bi5EaChyLGYwKToodGhpcy5TayhzKSxuLkRoKHIscykpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO2UuTGcoKSYmZS5NZygpPyhzPSEwLG89bi5DaChyKSxvPT1udWxsPyhzPSExLG89dGhpcy5iKTpHdChvKT09PUd0KGYwKSYmKG89bnVsbCksbi5FaChyKSxtaShlLHRoaXMuZC5VayhlLDIsdGhpcy5lLG8sdGhpcy5iLHMpKSk6bi5FaChyKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlIiw3NzApLEkoMTMxOSw3NzAse30sRFh0KSxsLlNrPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmEud2ooZSkpdGhyb3cgcnQobmV3IFhrKEFIK3NsKGUpK0xIK3RoaXMuYSsiJyIpKX0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFVbnNldHRhYmxlRHluYW1pYyIsMTMxOSksSSgxMzIwLDc3MCx7fSx5WXQpLGwuU2s9ZnVuY3Rpb24oZSl7fSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVTdGF0aWMiLDEzMjApLEkoMzk4LDUwNCx7fSxQaiksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQsdyxrLEM7aWYoQz1uLkNoKHIpLHRoaXMuS2ooKSYmR3QoQyk9PT1HdChmMCkpcmV0dXJuIG51bGw7aWYodGhpcy5zaygpJiZzJiZDIT1udWxsKXtpZih3PXUoQyw0OSksdy5raCgpJiYoaz1LcChlLHcpLHchPWspKXtpZighbGF0KHRoaXMuYSxrKSl0aHJvdyBydChuZXcgWGsoQUgrc2woaykrTEgrdGhpcy5hKyInIikpO24uRGgocixDPWspLHRoaXMucmsoKSYmKGg9dShrLDQ5KSxkPXcuaWgoZSx0aGlzLmI/Vmkody5UZygpLHRoaXMuYik6LTEtVmkoZS5UZygpLHRoaXMuZSksbnVsbCxudWxsKSwhaC5laCgpJiYoZD1oLmdoKGUsdGhpcy5iP1ZpKGguVGcoKSx0aGlzLmIpOi0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpLGQmJmQuRmkoKSksZS5MZygpJiZlLk1nKCkmJm1pKGUsbmV3IENDKGUsOSx0aGlzLmUsdyxrKSl9cmV0dXJuIEN9ZWxzZSByZXR1cm4gQ30sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoLGQ7cmV0dXJuIGQ9bi5DaChyKSxHdChkKT09PUd0KGYwKSYmKGQ9bnVsbCksbi5EaChyLHMpLHRoaXMuYmooKT9HdChkKSE9PUd0KHMpJiZkIT1udWxsJiYoaD11KGQsNDkpLG89aC5paChlLFZpKGguVGcoKSx0aGlzLmIpLG51bGwsbykpOnRoaXMucmsoKSYmZCE9bnVsbCYmKG89dShkLDQ5KS5paChlLC0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsbykpLGUuTGcoKSYmZS5NZygpJiYoIW8mJihvPW5ldyBTcCg0KSksby5FaShuZXcgQ0MoZSwxLHRoaXMuZSxkLHMpKSksb30sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksR3QoaCk9PT1HdChmMCkmJihoPW51bGwpLG4uRWgociksZS5MZygpJiZlLk1nKCkmJighbyYmKG89bmV3IFNwKDQpKSx0aGlzLktqKCk/by5FaShuZXcgQ0MoZSwyLHRoaXMuZSxoLG51bGwpKTpvLkVpKG5ldyBDQyhlLDEsdGhpcy5lLGgsbnVsbCkpKSxvfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGx9LGwuVGo9ZnVuY3Rpb24oZSxuLHIscyl7dmFyIG8saCxkLHcsaztpZihzIT1udWxsJiYhbGF0KHRoaXMuYSxzKSl0aHJvdyBydChuZXcgWGsoQUgrKEV0KHMsNTYpP2Q0dCh1KHMsNTYpLlRnKCkpOkJtdChzbChzKSkpK0xIK3RoaXMuYSsiJyIpKTtrPW4uQ2gociksdz1rIT1udWxsLHRoaXMuS2ooKSYmR3Qoayk9PT1HdChmMCkmJihrPW51bGwpLGQ9bnVsbCx0aGlzLmJqKCk/R3QoaykhPT1HdChzKSYmKGshPW51bGwmJihvPXUoayw0OSksZD1vLmloKGUsVmkoby5UZygpLHRoaXMuYiksbnVsbCxkKSkscyE9bnVsbCYmKG89dShzLDQ5KSxkPW8uZ2goZSxWaShvLlRnKCksdGhpcy5iKSxudWxsLGQpKSk6dGhpcy5yaygpJiZHdChrKSE9PUd0KHMpJiYoayE9bnVsbCYmKGQ9dShrLDQ5KS5paChlLC0xLVZpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpLHMhPW51bGwmJihkPXUocyw0OSkuZ2goZSwtMS1WaShlLlRnKCksdGhpcy5lKSxudWxsLGQpKSkscz09bnVsbCYmdGhpcy5LaigpP24uRGgocixmMCk6bi5EaChyLHMpLGUuTGcoKSYmZS5NZygpPyhoPW5ldyBzcnQoZSwxLHRoaXMuZSxrLHMsdGhpcy5LaigpJiYhdyksZD8oZC5FaShoKSxkLkZpKCkpOm1pKGUsaCkpOmQmJmQuRmkoKX0sbC5Waj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdzt3PW4uQ2gociksZD13IT1udWxsLHRoaXMuS2ooKSYmR3Qodyk9PT1HdChmMCkmJih3PW51bGwpLGg9bnVsbCx3IT1udWxsJiYodGhpcy5iaigpPyhzPXUodyw0OSksaD1zLmloKGUsVmkocy5UZygpLHRoaXMuYiksbnVsbCxoKSk6dGhpcy5yaygpJiYoaD11KHcsNDkpLmloKGUsLTEtVmkoZS5UZygpLHRoaXMuZSksbnVsbCxoKSkpLG4uRWgociksZS5MZygpJiZlLk1nKCk/KG89bmV3IHNydChlLHRoaXMuS2ooKT8yOjEsdGhpcy5lLHcsbnVsbCxkKSxoPyhoLkVpKG8pLGguRmkoKSk6bWkoZSxvKSk6aCYmaC5GaSgpfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0IiwzOTgpLEkoNTY0LDM5OCx7fSxvbnQpLGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudCIsNTY0KSxJKDEzMjMsNTY0LHt9LHdXdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50UmVzb2x2aW5nIiwxMzIzKSxJKDc3Miw1NjQse30sUjJ0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRVbnNldHRhYmxlIiw3NzIpLEkoMTMyNSw3NzIse30sbVd0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRVbnNldHRhYmxlUmVzb2x2aW5nIiwxMzI1KSxJKDY0MCw1NjQse30seG50KSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZSIsNjQwKSxJKDEzMjQsNjQwLHt9LEVLdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VSZXNvbHZpbmciLDEzMjQpLEkoNzczLDY0MCx7fSxUdnQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlVW5zZXR0YWJsZSIsNzczKSxJKDEzMjYsNzczLHt9LFRLdCksbC5zaz1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlUmVzb2x2aW5nIiwxMzI2KSxJKDY0MSwzOTgse30sajJ0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nIiw2NDEpLEkoMTMyNyw2NDEse30seVd0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nVW5zZXR0YWJsZSIsMTMyNyksSSg3NzQsNjQxLHt9LGt2dCksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1dpdGhJbnZlcnNlIiw3NzQpLEkoMTMyOCw3NzQse30sQ0t0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzI4KSxJKDEzMjEsMzk4LHt9LHhXdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFVuc2V0dGFibGUiLDEzMjEpLEkoNzcxLDM5OCx7fSxFdnQpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUChNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RXaXRoSW52ZXJzZSIsNzcxKSxJKDEzMjIsNzcxLHt9LF9LdCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlVW5zZXR0YWJsZSIsMTMyMiksSSg3NzUsNTY1LFNILG13dCksbC5Qaz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG13dCh0aGlzLmEsdGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFZzbih0aGlzLGUsdGhpcy5iLHIpfSxsLlJrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVXNuKHRoaXMsZSx0aGlzLmIscil9LFAoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW52ZXJzZVVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3NzUpLEkoMTMyOSwxLHR1dCxOenQpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBFdCh0aGlzLmEsOTUpP3UodGhpcy5hLDk1KS5maigpOiF0aGlzLmEuZGMoKX0sbC5XYj1mdW5jdGlvbihlKXt0aGlzLmEuJGIoKSx0aGlzLmEuR2ModShlLDE1KSl9LGwuWGo9ZnVuY3Rpb24oKXtFdCh0aGlzLmEsOTUpP3UodGhpcy5hLDk1KS5YaigpOnRoaXMuYS4kYigpfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NldHRpbmdNYW55IiwxMzI5KSxJKDEzMzAsNTY1LFNILCRadCksbC5Paz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGxudCgoRGkoKSx1QSksdGhpcy5iLkloKHRoaXMuYSxlKSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NpbXBsZUNvbnRlbnRGZWF0dXJlTWFwRW50cnkiLDEzMzApLEkoNjQyLDU2NSxTSCxsbnQpLGwuT2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBsbnQodGhpcy5jLGUpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Raz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxQKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL1NpbXBsZUZlYXR1cmVNYXBFbnRyeSIsNjQyKSxJKDM5MSw0OTcsX2QseG0pLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEdoLEllLDI2LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKE1uLCJFU3VwZXJBZGFwdGVyLzEiLDM5MSksSSg0NDQsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw4MzY6MSw0OToxLDk3OjEsMTUwOjEsNDQ0OjEsMTE0OjEsMTE1OjF9LFJMKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgeEModGhpcyxobyx0aGlzKSksdGhpcy5hfXJldHVybiBvaCh0aGlzLGUtWm4oKGRuKCksSHcpKSx5bigocz11KEluKHRoaXMsMTYpLDI2KSxzfHxIdyksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHhDKHRoaXMsaG8sdGhpcykpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBvPXUoeW4oKHM9dShJbih0aGlzLDE2KSwyNiksc3x8KGRuKCksSHcpKSxuKSw2Niksby5OaigpLlJqKHRoaXMsaXUodGhpcyksbi1abigoZG4oKSxIdykpLGUscil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKChkbigpLEh3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8SHcpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBoZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgaGUoWnIsdGhpcywwLDMpKSxycyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6WGModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyB4Qyh0aGlzLGhvLHRoaXMpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHhDKHRoaXMsaG8sdGhpcykpLHJzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChkbigpLEh3KSkseW4oKHI9dShJbih0aGlzLDE2KSwyNikscnx8SHcpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksSHd9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGhlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpYYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYSYmKHRoaXMuYT1uZXcgeEModGhpcyxobyx0aGlzKSkseHIodGhpcy5hKTtyZXR1cm59bGgodGhpcyxlLVpuKChkbigpLEh3KSkseW4oKG49dShJbih0aGlzLDE2KSwyNiksbnx8SHcpLGUpKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsIiw0NDQpLEkoNDQ1LDg1LHpvLHhDKSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVkbih0aGlzLHUoZSw4Nyksbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV2RuKHRoaXMsdShlLDg3KSxuKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzEiLDQ0NSksSSg2MzQsNDMsXzQsWXR0KSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjUih0aGlzKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIiLDYzNCksSSg1NTYsTjEsanUsY1IpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFdXdCh0aGlzLHUoZSw4NykpfSxsLkdjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztmb3Iocz0hMSxyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksODcpLGtpKHRoaXMuYSxuLCIiKT09bnVsbCYmKHM9ITApO3JldHVybiBzfSxsLiRiPWZ1bmN0aW9uKCl7WXUodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4ga2wodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IGgyKG5ldyB3Zyh0aGlzLmEpLmEpLG5ldyB1UihlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gT0p0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gJDkodGhpcy5hKX0sUChNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMSIsNTU2KSxJKDU1NywxLHJhLHVSKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdShZdih0aGlzLmEpLmNkKCksODcpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5ifSxsLlFiPWZ1bmN0aW9uKCl7bHRlKHRoaXMuYSl9LFAoTW4sIkVUeXBlUGFyYW1ldGVySW1wbC8yLzEvMSIsNTU3KSxJKDEyNzYsNDMsXzQsVHF0KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKT9hcnQodGhpcyxlKTohIUFvKHRoaXMuZixlKX0sbC54Yz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPWVhKGUpP0ZjKHRoaXMsZSk6ZWMoQW8odGhpcy5mLGUpKSxFdChuLDgzNyk/KHI9dShuLDgzNyksbj1yLl9qKCksa2kodGhpcyx1KGUsMjM1KSxuKSxuKTpuPz8oZT09bnVsbD8oZGV0KCksYzVlKTpudWxsKX0sUChNbiwiRVZhbGlkYXRvclJlZ2lzdHJ5SW1wbCIsMTI3NiksSSgxMzEzLDcwNCx7MTA1OjEsOTI6MSw5MDoxLDQ3MToxLDE0NzoxLDU2OjEsMTA4OjEsMTk0MToxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0sWVopLGwuSWg9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS55aigpKXtjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAzMTpjYXNlIDMyOmNhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDg6Y2FzZSA0OTpjYXNlIDIwOnJldHVybiBuPT1udWxsP251bGw6JG8obik7Y2FzZSAyNTpyZXR1cm4gdG9uKG4pO2Nhc2UgMjc6cmV0dXJuIHZhbihuKTtjYXNlIDI4OnJldHVybiB3YW4obik7Y2FzZSAyOTpyZXR1cm4gbj09bnVsbD9udWxsOlNVdChyQVswXSx1KG4sMTk5KSk7Y2FzZSA0MTpyZXR1cm4gbj09bnVsbD8iIjpBcCh1KG4sMjkwKSk7Y2FzZSA0MjpyZXR1cm4gJG8obik7Y2FzZSA1MDpyZXR1cm4gQnIobik7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx3LGssQyxNLEYsSCxWLFksdHQsZ3Q7c3dpdGNoKGUuRz09LTEmJihlLkc9KEg9RmwoZSksSD9GZyhILk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgMDpyZXR1cm4gcj1uZXcgVXR0LHI7Y2FzZSAxOnJldHVybiBuPW5ldyBKRixuO2Nhc2UgMjpyZXR1cm4gcz1uZXcgWEwscztjYXNlIDQ6cmV0dXJuIG89bmV3IGxSLG87Y2FzZSA1OnJldHVybiBoPW5ldyBFcXQsaDtjYXNlIDY6cmV0dXJuIGQ9bmV3IFd6dCxkO2Nhc2UgNzpyZXR1cm4gdz1uZXcgcUIsdztjYXNlIDEwOnJldHVybiBDPW5ldyBfayxDO2Nhc2UgMTE6cmV0dXJuIE09bmV3IFd0dCxNO2Nhc2UgMTI6cmV0dXJuIEY9bmV3IFlYdCxGO2Nhc2UgMTM6cmV0dXJuIFY9bmV3IEt0dCxWO2Nhc2UgMTQ6cmV0dXJuIFk9bmV3IHEydCxZO2Nhc2UgMTc6cmV0dXJuIHR0PW5ldyBXWix0dDtjYXNlIDE4OnJldHVybiBrPW5ldyB3dixrO2Nhc2UgMTk6cmV0dXJuIGd0PW5ldyBSTCxndDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihSY3QrZS56YitrdykpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2J0KG4pO2Nhc2UgMjE6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgTnAobik7Y2FzZSAyMzpjYXNlIDIyOnJldHVybiBuPT1udWxsP251bGw6c2huKG4pO2Nhc2UgMjY6Y2FzZSAyNDpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKG4sLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMjU6cmV0dXJuIGJibihuKTtjYXNlIDI3OnJldHVybiBxZm4obik7Y2FzZSAyODpyZXR1cm4gSGZuKG4pO2Nhc2UgMjk6cmV0dXJuIGgwbihuKTtjYXNlIDMyOmNhc2UgMzE6cmV0dXJuIG49PW51bGw/bnVsbDpseShuKTtjYXNlIDM4OmNhc2UgMzc6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgU3B0KG4pO2Nhc2UgNDA6Y2FzZSAzOTpyZXR1cm4gbj09bnVsbD9udWxsOmRlKCRsKG4sX2EsdmkpKTtjYXNlIDQxOnJldHVybiBudWxsO2Nhc2UgNDI6cmV0dXJuIG49PW51bGwsbnVsbDtjYXNlIDQ0OmNhc2UgNDM6cmV0dXJuIG49PW51bGw/bnVsbDpnMihTcShuKSk7Y2FzZSA0OTpjYXNlIDQ4OnJldHVybiBuPT1udWxsP251bGw6ZUUoJGwobixNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MDpyZXR1cm4gbjtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihIRStlLm5lKCkra3cpKX19LFAoTW4sIkVjb3JlRmFjdG9yeUltcGwiLDEzMTMpLEkoNTQ3LDE3OSx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsMTkzOToxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSw1NDc6MSwxMTQ6MSwxMTU6MSw2NzU6MX0sZlh0KSxsLmdiPSExLGwuaGI9ITE7dmFyIHVMdCxvNWU9ITE7UChNbiwiRWNvcmVQYWNrYWdlSW1wbCIsNTQ3KSxJKDExODQsMSx7ODM3OjF9LFhaKSxsLl9qPWZ1bmN0aW9uKCl7cmV0dXJuIFFVdCgpLHU1ZX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xIiwxMTg0KSxJKDExOTMsMSxpaSxRWiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNDcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChvTixJZSwxNDcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzEwIiwxMTkzKSxJKDExOTQsMSxpaSxaWiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChtZnQsSWUsMTkxLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMSIsMTE5NCksSSgxMTk1LDEsaWksSlopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTYpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChrYixJZSw1NixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTIiLDExOTUpLEkoMTE5NiwxLGlpLHRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDM5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFZoLE84dCw1OSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTMiLDExOTYpLEkoMTE5NywxLGlpLGVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIzNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHIxLEllLDIzNSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTQiLDExOTcpLEkoMTE5OCwxLGlpLG5KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDUwOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHp3LEllLDIwMTcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE1IiwxMTk4KSxJKDExOTksMSxpaSxhQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEp5LFA0LDE4LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNiIsMTE5OSksSSgxMjAwLDEsaWksckopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTcwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQXUsUDQsMTcwLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNyIsMTIwMCksSSgxMjAxLDEsaWksaUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoUXksSWUsNDcyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8xOCIsMTIwMSksSSgxMjAyLDEsaWksc0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTQ4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoY2MsYzBlLDU0OCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMTkiLDEyMDIpLEkoMTE4NSwxLGlpLG9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDMyMil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFp5LFA0LDM0LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8yIiwxMTg1KSxJKDEyMDMsMSxpaSxJayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwyNDEpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChobyxDMGUsODcsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIwIiwxMjAzKSxJKDEyMDQsMSxpaSxaVCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw0NDQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChsdSxJZSw4MzYsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIxIiwxMjA0KSxJKDEyMDUsMSxpaSxjQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gT20oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEJzLHRlLDQ3NixlLDgsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjIiLDEyMDUpLEkoMTIwNiwxLGlpLGFKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEh1LHRlLDE5MCxlLDAsMil9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjMiLDEyMDYpLEkoMTIwNywxLGlpLHVCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDIxNyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEU2LHRlLDIxNyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjQiLDEyMDcpLEkoMTIwOCwxLGlpLGxCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE3Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGFTLHRlLDE3MixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjUiLDEyMDgpLEkoMTIwOSwxLGlpLG9KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEhILHRlLDE5OSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjYiLDEyMDkpLEkoMTIxMCwxLGlpLEpUKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChTTHQsSWUsMjExMCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMjciLDEyMTApLEkoMTIxMSwxLGlpLGttKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoY2EsdGUsMzMzLGUsNywxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8yOCIsMTIxMSksSSgxMjEyLDEsaWksaEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChxQXQseHksNTgsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzI5IiwxMjEyKSxJKDExODYsMSxpaSxmQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1MTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChacix7MzoxLDQ6MSw1OjEsMTkzNDoxfSw1OTAsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMiLDExODYpLEkoMTIxMywxLGlpLGNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDU3Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFZBdCxJZSwxOTQwLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMCIsMTIxMyksSSgxMjE0LDEsaWksdUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUzKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoZ0x0LHh5LDE1MyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzEiLDEyMTQpLEkoMTIxNSwxLGlpLHQ5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoc1UsTjBlLDcyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMiIsMTIxNSksSSgxMjE2LDEsaWksZEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTU1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoWEUsdGUsMTU1LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMyIsMTIxNiksSSgxMjE3LDEsaWksZ0IpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzQiLDEyMTcpLEkoMTIxOCwxLGlpLHVjKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDI5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFU4dCxJZSwyOTAsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM1IiwxMjE4KSxJKDEyMTksMSxpaSxsSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM2IiwxMjE5KSxJKDEyMjAsMSxpaSxwQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFc4dCxJZSw4MyxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvMzciLDEyMjApLEkoMTIyMSwxLGlpLGU5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDU5MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGxMdCxJZSw1OTEsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM4IiwxMjIxKSxJKDEyMjIsMSxpaSxoSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQUx0LEllLDIxMTEsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzM5IiwxMjIyKSxJKDExODcsMSxpaSxmSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEdoLEllLDI2LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80IiwxMTg3KSxJKDEyMjMsMSxpaSxuOSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQwIiwxMjIzKSxJKDEyMjQsMSxpaSxiQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQxIiwxMjI0KSxJKDEyMjUsMSxpaSxyOSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1ODgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChHQXQsSWUsNTg4LGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80MiIsMTIyNSksSSgxMjI2LDEsaWksaTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KExMdCx0ZSwyMTEyLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC80MyIsMTIyNiksSSgxMjI3LDEsaWksUmYpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChNMixEcSw0MixlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNDQiLDEyMjcpLEkoMTE4OCwxLGlpLGpMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDEzOCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGkxLEllLDEzOCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNSIsMTE4OCksSSgxMTg5LDEsaWksJEwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTQ4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQ2Z0LEllLDE0OCxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvNiIsMTE4OSksSSgxMTkwLDEsaWkscngpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNDU3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoaVUsSWUsNjcxLGUsMCwxKX0sUChNbiwiRWNvcmVQYWNrYWdlSW1wbC83IiwxMTkwKSxJKDExOTEsMSxpaSxkSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw1NzMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChlZyxJZSw2NzgsZSwwLDEpfSxQKE1uLCJFY29yZVBhY2thZ2VJbXBsLzgiLDExOTEpLEkoMTE5MiwxLGlpLGdKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDQ3MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KG5BLEllLDQ3MSxlLDAsMSl9LFAoTW4sIkVjb3JlUGFja2FnZUltcGwvOSIsMTE5MiksSSgxMDI1LDE5ODIsbzBlLHFxdCksbC5iaT1mdW5jdGlvbihlLG4pe0l1bih0aGlzLHUobiw0MTUpKX0sbC5maT1mdW5jdGlvbihlLG4pe25vZSh0aGlzLGUsdShuLDQxNSkpfSxQKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0IiwxMDI1KSxJKDEwMjYsMTQzLFFELHJYdCksbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYX0sUChNbiwiTWluaW1hbEVPYmplY3RJbXBsLzFBcnJheURlbGVnYXRpbmdBZGFwdGVyTGlzdC8xIiwxMDI2KSxJKDEwNTMsMTA1Mix7fSxtVXQpLFAoIm9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4iLCJFY29yZVBsdWdpbiIsMTA1Myk7dmFyIGxMdD1ZaShQMGUsIlJlc291cmNlIik7SSg3ODEsMTM3OCxGMGUpLGwuWWs9ZnVuY3Rpb24oZSl7fSxsLlprPWZ1bmN0aW9uKGUpe30sbC5Waz1mdW5jdGlvbigpe3JldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHp0dCh0aGlzKSksdGhpcy5hfSxsLldrPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYocz1lLmxlbmd0aCxzPjApaWYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Nyl7Zm9yKGg9bmV3IFljKDQpLG89MSxuPTE7bjxzOysrbilScihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobik9PTQ3JiYodWUoaCxvPT1uPyIiOmUuc3Vic3RyKG8sbi1vKSksbz1uKzEpO3JldHVybiB1ZShoLGUuc3Vic3RyKG8pKSxPMW4odGhpcyxoKX1lbHNlIFJyKHMtMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHMtMSk9PTYzJiYocj11dnQoZSxFdSg2Mykscy0yKSxyPjAmJihlPWUuc3Vic3RyKDAscikpKTtyZXR1cm4gSmduKHRoaXMsZSl9LGwuWGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEFwKHRoaXMuZ20pKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpKyIgdXJpPSciK3RoaXMuZCsiJyJ9LGwuYj0hMSxQKGV1dCwiUmVzb3VyY2VJbXBsIiw3ODEpLEkoMTM3OSw3ODEsRjBlLEZ6dCksUChldXQsIkJpbmFyeVJlc291cmNlSW1wbCIsMTM3OSksSSgxMTY5LDY5NCxZY3QpLGwuc2k9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsNTYpP05ubih0aGlzLHUoZSw1NikpOkV0KGUsNTkxKT9uZXcgZXIodShlLDU5MSkuVmsoKSk6R3QoZSk9PT1HdCh0aGlzLmYpP3UoZSwxNCkuS2MoKTooZjgoKSxsTi5hKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBpNXQodGhpcyl9LGwuYT0hMSxQKCRpLCJFY29yZVV0aWwvQ29udGVudFRyZWVJdGVyYXRvciIsMTE2OSksSSgxMzgwLDExNjksWWN0LE5ZdCksbC5zaT1mdW5jdGlvbihlKXtyZXR1cm4gR3QoZSk9PT1HdCh0aGlzLmYpP3UoZSwxNSkuS2MoKTpuZXcgdlp0KHUoZSw1NikpfSxQKGV1dCwiUmVzb3VyY2VJbXBsLzUiLDEzODApLEkoNjQ4LDE5OTQsVDBlLHp0dCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pPD00P2ZFKHRoaXMsZSk6RXQoZSw0OSkmJnUoZSw0OSkuWmcoKT09dGhpcy5hfSxsLmJpPWZ1bmN0aW9uKGUsbil7ZT09dGhpcy5pLTEmJih0aGlzLmEuYnx8KHRoaXMuYS5iPSEwKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtlPT0wP3RoaXMuYS5ifHwodGhpcy5hLmI9ITApOkJydCh0aGlzLGUsbil9LGwuZmk9ZnVuY3Rpb24oZSxuKXt9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe30sbC5haj1mdW5jdGlvbigpe3JldHVybiAyfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmNqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSxuPXIud2godGhpcy5hLG4pLG59LGwuZGo9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHIud2gobnVsbCxuKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiExfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGtiLEllLDU2LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxQKGV1dCwiUmVzb3VyY2VJbXBsL0NvbnRlbnRzRUxpc3QiLDY0OCksSSg5NTcsMTk2NCxJRSxQenQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5faChlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sUCgkaSwiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdC8xIiw5NTcpO3ZhciBoTHQsZkx0LG1hLGRMdDtJKDYyNCwxLHt9LEZLdCk7dmFyIGFVLG9VO1AoJGksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YSIsNjI0KSxJKDExNjAsMSx7fSxGVnQpLGwuJGs9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5faz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PS0yJiZ2Zyh0aGlzLGEwbih0aGlzLmQsdGhpcy5iKSksdGhpcy5hfSxsLmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdm4oKSx2bigpLGlvfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz09VUUmJkkzKHRoaXMsT2llKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmN9LGwuY2w9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hPS0yLGwuYz1VRSxQKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRUNsYXNzRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjApLEkoMTE2MSwxLHt9LHJadCksbC4kaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PShMOCgpLGFVKSYmZHB0KHRoaXMsazJuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmF9LGwuX2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM9PShMOCgpLGFVKSYmVHR0KHRoaXMsRTJuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmN9LGwuYmw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiZDdHQodGhpcyxrd24odGhpcy5mLHRoaXMuYikpLHRoaXMuZH0sbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmU9PVVFJiZRQih0aGlzLE9pZSh0aGlzLmYsdGhpcy5iKSksdGhpcy5lfSxsLmNsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZz09LTImJlpCKHRoaXMsQ2RuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmd9LGwuZT1VRSxsLmc9LTIsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VEYXRhVHlwZUV4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTYxKSxJKDExNTksMSx7fSxSVnQpLGwuYj0hMSxsLmM9ITEsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VQYWNrYWdlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNTkpLEkoMTE2MiwxLHt9LG5adCksbC5jPS0yLGwuZT1VRSxsLmY9VUUsUCgkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhL0VTdHJ1Y3R1cmFsRmVhdHVyZUV4dGVuZGVkTWV0YURhdGFJbXBsIiwxMTYyKSxJKDU4NSw2MjIsem8sU2opLGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5jPTAsUCgkaSwiRURhdGFUeXBlRUxpc3QiLDU4NSk7dmFyIGdMdD1ZaSgkaSwiRmVhdHVyZU1hcCIpO0koNzUsNTg1LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsMTUzOjEsMjE1OjEsMTkzNzoxLDY5OjEsOTU6MX0saXMpLGwuVmM9ZnVuY3Rpb24oZSxuKXt3Mm4odGhpcyxlLHUobiw3MikpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBCYm4odGhpcyx1KGUsNzIpKX0sbC5ZaD1mdW5jdGlvbihlKXtFZW4odGhpcyx1KGUsNzIpKX0sbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiByWmUodGhpcyx1KGUsNzIpLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGh2dCh0aGlzLHUoZSw3Miksbil9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHduKHRoaXMsZSxuKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBtM24odGhpcyxlLHUobiw3MikpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGN2bih0aGlzLGUsdShuLDcyKSl9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaVplKHRoaXMsdShlLDcyKSxuKX0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBvS3QodGhpcyx1KGUsNzIpLG4pfSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gY2RuKHRoaXMsdShlLDcyKSx1KG4sNzIpLHIpfSxsLm9pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNzdCh0aGlzLGUsdShuLDcyKSl9LGwuZGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVTV0KHRoaXMsZSxuKX0sbC5XYz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTTtmb3IoQz1uZXcgS3Yobi5nYygpKSxvPW4uS2MoKTtvLk9iKCk7KWlmKHM9dShvLlBiKCksNzIpLGg9cy5haygpLFYwKHRoaXMuZSxoKSkoIWguaGkoKXx8IWskKHRoaXMsaCxzLmRkKCkpJiYhZkUoQyxzKSkmJk1yKEMscyk7ZWxzZXtmb3IoTT1hdSh0aGlzLmUuVGcoKSxoKSxyPXUodGhpcy5nLDExOSksZD0hMCx3PTA7dzx0aGlzLmk7Kyt3KWlmKGs9clt3XSxNLnJsKGsuYWsoKSkpe3UodTQodGhpcyx3LHMpLDcyKSxkPSExO2JyZWFrfWQmJk1yKEMscyl9cmV0dXJuIHl5dCh0aGlzLGUsQyl9LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDO2ZvcihrPW5ldyBLdihlLmdjKCkpLHM9ZS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSw3Miksbz1yLmFrKCksVjAodGhpcy5lLG8pKSghby5oaSgpfHwhayQodGhpcyxvLHIuZGQoKSkmJiFmRShrLHIpKSYmTXIoayxyKTtlbHNle2ZvcihDPWF1KHRoaXMuZS5UZygpLG8pLG49dSh0aGlzLmcsMTE5KSxoPSEwLGQ9MDtkPHRoaXMuaTsrK2QpaWYodz1uW2RdLEMucmwody5haygpKSl7dSh1NCh0aGlzLGQsciksNzIpLGg9ITE7YnJlYWt9aCYmTXIoayxyKX1yZXR1cm4gcnModGhpcyxrKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5qPS0xLGhhdCh0aGlzLHRoaXMuaSxlKX0sbC5lbD1mdW5jdGlvbihlLG4scil7cmV0dXJuICQ1dCh0aGlzLGUsbixyKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiB3RCh0aGlzLGUsbil9LGwuZmw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1eHQodGhpcyxlLG4scil9LGwuZ2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5obD1mdW5jdGlvbihlLG4pe3JldHVybiBrRCh0aGlzLGUsbil9LGwuaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoU3QodGhpcyxlKSw3MikuYWsoKX0sbC5qbD1mdW5jdGlvbihlKXtyZXR1cm4gdShTdCh0aGlzLGUpLDcyKS5kZCgpfSxsLmtsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmlqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGw9ZnVuY3Rpb24oZSl7cmV0dXJuIVZJKHRoaXMsZSl9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGE1ZSxOMGUsMzMyLGUsMCwxKX0sbC5Haz1mdW5jdGlvbihlKXtyZXR1cm4gY250KHRoaXMsZSl9LGwuV2I9ZnVuY3Rpb24oZSl7UU0odGhpcyxlKX0sbC5tbD1mdW5jdGlvbihlLG4pe2txKHRoaXMsZSxuKX0sbC5ubD1mdW5jdGlvbihlKXtyZXR1cm4gV2VlKHRoaXMsZSl9LGwub2w9ZnVuY3Rpb24oZSl7dnNlKHRoaXMsZSl9LFAoJGksIkJhc2ljRmVhdHVyZU1hcCIsNzUpLEkoMTg1MSwxLEpkKSxsLk5iPWZ1bmN0aW9uKGUpe3BhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7aWYodGhpcy5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3pqKHRoaXMpO3RyeXtxY2UodGhpcy5lLHRoaXMuYix0aGlzLmEsZSksdGhpcy5kPXRoaXMuZS5qLCR6KHRoaXMpfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/cnQobmV3IGVoKTpydChuKX19LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gX2l0KHRoaXMpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHZyZSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiAkeih0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuVWI9ZnVuY3Rpb24oKXt2YXIgZTtpZih2cmUodGhpcykpcmV0dXJuIHpqKHRoaXMpLHRoaXMuZz0tLXRoaXMuYSx0aGlzLkxrKCkmJihlPWRfKHRoaXMuZSx0aGlzLmIsdGhpcy5jLHRoaXMuYSx0aGlzLmopLHRoaXMuaj1lKSx0aGlzLmk9MCx0aGlzLmo7dGhyb3cgcnQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZz09LTEpdGhyb3cgcnQobmV3IEl1KTt6aih0aGlzKTt0cnl7amFlKHRoaXMuZSx0aGlzLmIsdGhpcy5nKSx0aGlzLmQ9dGhpcy5lLmosdGhpcy5nPHRoaXMuYSYmKC0tdGhpcy5hLC0tdGhpcy5jKSwtLXRoaXMuZ31jYXRjaChlKXt0aHJvdyBlPVdpKGUpLEV0KGUsNzMpP3J0KG5ldyBlaCk6cnQoZSl9fSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuV2I9ZnVuY3Rpb24oZSl7aWYodGhpcy5nPT0tMSl0aHJvdyBydChuZXcgSXUpO3pqKHRoaXMpO3RyeXtmbGUodGhpcy5lLHRoaXMuYix0aGlzLmcsZSksdGhpcy5kPXRoaXMuZS5qfWNhdGNoKG4pe3Rocm93IG49V2kobiksRXQobiw3Myk/cnQobmV3IGVoKTpydChuKX19LGwuYT0wLGwuYz0wLGwuZD0wLGwuZj0hMSxsLmc9MCxsLmk9MCxQKCRpLCJGZWF0dXJlTWFwVXRpbC9CYXNpY0ZlYXR1cmVFSXRlcmF0b3IiLDE4NTEpLEkoNDEwLDE4NTEsSmQsVTgpLGwucGw9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKHI9dGhpcy5lLmksZT11KHRoaXMuZS5nLDExOSk7dGhpcy5jPHI7KXtpZihuPWVbdGhpcy5jXSx0aGlzLmsucmwobi5haygpKSlyZXR1cm4gdGhpcy5qPXRoaXMuZj9uOm4uZGQoKSx0aGlzLmk9MiwhMDsrK3RoaXMuY31yZXR1cm4gdGhpcy5pPTEsdGhpcy5nPS0xLCExfSxsLnFsPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoZT11KHRoaXMuZS5nLDExOSk7LS10aGlzLmM+PTA7KWlmKG49ZVt0aGlzLmNdLHRoaXMuay5ybChuLmFrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5kZCgpLHRoaXMuaT0tMiwhMDtyZXR1cm4gdGhpcy5pPS0xLHRoaXMuZz0tMSwhMX0sUCgkaSwiQmFzaWNGZWF0dXJlTWFwL0ZlYXR1cmVFSXRlcmF0b3IiLDQxMCksSSg2NjIsNDEwLEpkLFVldCksbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJCYXNpY0ZlYXR1cmVNYXAvUmVzb2x2aW5nRmVhdHVyZUVJdGVyYXRvciIsNjYyKSxJKDk1NSw0ODYsQ0gsTFV0KSxsLkdpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFAoJGksIkVDb250ZW50c0VMaXN0LzEiLDk1NSksSSg5NTYsNDg2LENILHRVdCksbC5Maz1mdW5jdGlvbigpe3JldHVybiExfSxQKCRpLCJFQ29udGVudHNFTGlzdC8yIiw5NTYpLEkoOTU0LDI3OSxfSCxNVXQpLGwuTms9ZnVuY3Rpb24oZSl7fSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sUCgkaSwiRUNvbnRlbnRzRUxpc3QvRmVhdHVyZUl0ZXJhdG9ySW1wbC8xIiw5NTQpLEkoODI1LDU4NSx6byxiMnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksbWwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgZGYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsUCgkaSwiRURhdGFUeXBlRUxpc3QvVW5zZXR0YWJsZSIsODI1KSxJKDE4NDksNTg1LHpvLFJVdCksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxQKCRpLCJFRGF0YVR5cGVVbmlxdWVFTGlzdCIsMTg0OSksSSgxODUwLDgyNSx6byxqVXQpLGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRURhdGFUeXBlVW5pcXVlRUxpc3QvVW5zZXR0YWJsZSIsMTg1MCksSSgxMzksODUsem8sT3UpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0L1Jlc29sdmluZyIsMTM5KSxJKDExNjMsNTQ1LHpvLEJVdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG82KHRoaXMsZSx1KG4sNTYpKX0sUCgkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZS9SZXNvbHZpbmciLDExNjMpLEkoNzQ4LDE2LHpvLGl2dCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSxtbCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBkZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxQKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDc0OCksSSgxMTczLDc0OCx6byxLV3QpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9SZXNvbHZpbmciLDExNzMpLEkoNzQzLDQ5Nix6byxwMnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksbWwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgZGYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsUCgkaSwiRU9iamVjdEVMaXN0L1Vuc2V0dGFibGUiLDc0MyksSSgzMjgsNDk2LHpvLFUzKSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbzYodGhpcyxlLHUobiw1NikpfSxQKCRpLCJFT2JqZWN0UmVzb2x2aW5nRUxpc3QiLDMyOCksSSgxNjQxLDc0Myx6bywkVXQpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBvNih0aGlzLGUsdShuLDU2KSl9LFAoJGksIkVPYmplY3RSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiwxNjQxKSxJKDEzODEsMSx7fSxwSik7dmFyIGM1ZTtQKCRpLCJFT2JqZWN0VmFsaWRhdG9yIiwxMzgxKSxJKDU0Niw0OTYsem8sVWopLGwuems9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYj0wLFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0Iiw1NDYpLEkoMTE3Niw1NDYsem8sWVd0KSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L01hbnlJbnZlcnNlIiwxMTc2KSxJKDYyNSw1NDYsem8sZm50KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDYyNSksSSgxMTc1LDYyNSx6byxYV3QpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTE3NSksSSg3NDksNTQ2LHpvLHN2dCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG82KHRoaXMsZSx1KG4sNTYpKX0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QiLDc0OSksSSgzMSw3NDksem8sQ24pLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUCgkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UiLDMxKSxJKDc1MCw2MjUsem8sYXZ0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbzYodGhpcyxlLHUobiw1NikpfSxQKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiw3NTApLEkoMTE3NCw3NTAsem8sUVd0KSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LFAoJGksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDExNzQpLEkoMTE2NCw2MjIsem8pLGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE3OTIpPT0wfSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5ifD0xfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0KSE9MH0sbC5iaj1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNDApIT0wfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNikhPTB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjgpIT0wfSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZBeSkhPTB9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjMyKSE9MH0sbC5Gaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImd2YpIT0wfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmQ/RFp0KHRoaXMuZCxlKTp0aGlzLmFrKCkuWWooKS53aihlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImMj8odGhpcy5iJjEpIT0wOnRoaXMuaSE9MH0sbC5oaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTI4KSE9MH0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLHRoaXMuYiYyJiYobWwodGhpcy5lKT8oZT0odGhpcy5iJjEpIT0wLHRoaXMuYiY9LTIsS2sodGhpcyxuZXcgZGYodGhpcy5lLDIsVmkodGhpcy5lLlRnKCksdGhpcy5haygpKSxlLCExKSkpOnRoaXMuYiY9LTIpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNTM2KT09MH0sbC5iPTAsUCgkaSwiRWNvcmVFTGlzdC9HZW5lcmljIiwxMTY0KSxJKDExNjUsMTE2NCx6byx6WHQpLGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxQKCRpLCJFY29yZUVMaXN0L0R5bmFtaWMiLDExNjUpLEkoNzQ3LDYzLF9kLG1wdCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gQ0kodGhpcy5hLmEsZSl9LFAoJGksIkVjb3JlRU1hcC8xIiw3NDcpLEkoNzQ2LDg1LHpvLGl3dCksbC5iaT1mdW5jdGlvbihlLG4pe3F6KHRoaXMuYix1KG4sMTMzKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtTbmUodGhpcy5iKX0sbC5laT1mdW5jdGlvbihlLG4scil7dmFyIHM7Kysocz10aGlzLmIsdShuLDEzMykscykuZX0sbC5maT1mdW5jdGlvbihlLG4pe0ZpdCh0aGlzLmIsdShuLDEzMykpfSxsLmdpPWZ1bmN0aW9uKGUsbixyKXtGaXQodGhpcy5iLHUociwxMzMpKSxHdChyKT09PUd0KG4pJiZ1KHIsMTMzKS5UaChmWGUodShuLDEzMykuY2QoKSkpLHF6KHRoaXMuYix1KG4sMTMzKSl9LFAoJGksIkVjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Iiw3NDYpLEkoMTE3MSwxNTEsRDh0LCRlZSksUCgkaSwiRWNvcmVFTWFwL1Vuc2V0dGFibGUiLDExNzEpLEkoMTE3Miw3NDYsem8sWld0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLG1sKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGRmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLFAoJGksIkVjb3JlRU1hcC9VbnNldHRhYmxlL1Vuc2V0dGFibGVEZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0IiwxMTcyKSxJKDExNjgsMjI4LF80LEdZdCksbC5hPSExLGwuYj0hMSxQKCRpLCJFY29yZVV0aWwvQ29waWVyIiwxMTY4KSxJKDc0NSwxLHJhLHZadCksbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGRpZSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBkaWUodGhpcyksZT10aGlzLmIsdGhpcy5iPW51bGwsZX0sbC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxQKCRpLCJFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yIiw3NDUpLEkoMTM4MiwxMzgxLHt9LEhCKTt2YXIgdTVlO1AoJGksIkVjb3JlVmFsaWRhdG9yIiwxMzgyKTt2YXIgbDVlO1lpKCRpLCJGZWF0dXJlTWFwVXRpbC9WYWxpZGF0b3IiKSxJKDEyNjAsMSx7MTk0MjoxfSxiSiksbC5ybD1mdW5jdGlvbihlKXtyZXR1cm4hMH0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvMSIsMTI2MCksSSg3NTcsMSx7MTk0MjoxfSx4eHQpLGwucmw9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuYz09ZT8hMDoobj1SZShKbih0aGlzLmEsZSkpLG49PW51bGw/cnduKHRoaXMsZSk/KENKdCh0aGlzLmEsZSwoRm4oKSxZRSkpLCEwKTooQ0p0KHRoaXMuYSxlLChGbigpLEkyKSksITEpOm49PShGbigpLFlFKSl9LGwuZT0hMTt2YXIgTGZ0O1AoJGksIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yIiw3NTcpLEkoNzU4LDQzLF80LGgydCksUCgkaSwiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUiLDc1OCksSSg1MDEsNTIsezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxETSksbC5WYz1mdW5jdGlvbihlLG4pe3FjZSh0aGlzLmMsdGhpcy5iLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFU1dCh0aGlzLmMsdGhpcy5iLGUpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHd5bih0aGlzLmMsdGhpcy5iLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIGhDKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtqYW4odGhpcy5jLHRoaXMuYixlLG4pfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuICQ1dCh0aGlzLmMsdGhpcy5iLGUsbil9LGwucGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHhxKHRoaXMuYyx0aGlzLmIsZSwhMSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gaFV0KHRoaXMuYyx0aGlzLmIpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIEpZZSh0aGlzLmMsdGhpcy5iKX0sbC5faD1mdW5jdGlvbihlKXtyZXR1cm4gR3NuKHRoaXMuYyx0aGlzLmIsZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTVd0KHRoaXMsZSxuKX0sbC4kYj1mdW5jdGlvbigpe3Z4KHRoaXMpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBrJCh0aGlzLmMsdGhpcy5iLGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBIb24odGhpcy5jLHRoaXMuYixlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4geHEodGhpcy5jLHRoaXMuYixlLCEwKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gZXNuKHRoaXMuYyx0aGlzLmIsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGoodGhpcyl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hVkkodGhpcy5jLHRoaXMuYil9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gU2FuKHRoaXMuYyx0aGlzLmIpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIEFhbih0aGlzLmMsdGhpcy5iKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gJHVuKHRoaXMuYyx0aGlzLmIsZSl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYWxlKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5qaT1mdW5jdGlvbihlLG4pe1Jzbih0aGlzLmMsdGhpcy5iLGUsbil9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGphZSh0aGlzLmMsdGhpcy5iLGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBUd24odGhpcy5jLHRoaXMuYixlKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBmbGUodGhpcy5jLHRoaXMuYixlLG4pfSxsLldiPWZ1bmN0aW9uKGUpe2lxKHRoaXMuYyx0aGlzLmIpLGhDKHRoaXMsdShlLDE1KSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSnVuKHRoaXMuYyx0aGlzLmIpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIFpybih0aGlzLmMsdGhpcy5iKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gbnNuKHRoaXMuYyx0aGlzLmIsZSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihuPW5ldyB4ZyxuLmErPSJbIixlPWhVdCh0aGlzLmMsdGhpcy5iKTtfaXQoZSk7KWZvKG4sZEMoJHooZSkpKSxfaXQoZSkmJihuLmErPUthKTtyZXR1cm4gbi5hKz0iXSIsbi5hfSxsLlhqPWZ1bmN0aW9uKCl7aXEodGhpcy5jLHRoaXMuYil9LFAoJGksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTGlzdCIsNTAxKSxJKDYyNywzNixRRCxBcnQpLGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIFpDKHRoaXMsZSl9LGwuRGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHc7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7aWYoaD1lLkFpKCksR3QoaCk9PT1HdCh0aGlzLmMpJiZaQyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmc9ZS56aSgpLGUueGkoKT09MSYmKHRoaXMuZD0xKSwhMDticmVha31jYXNlIDM6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5jKSYmWkModGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTUsbj1uZXcgS3YoMiksTXIobix0aGlzLmcpLE1yKG4sZS56aSgpKSx0aGlzLmc9biwhMDticmVha319YnJlYWt9Y2FzZSA1Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAzOntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHI9dSh0aGlzLmcsMTQpLHIuRmMoZS56aSgpKSwhMDticmVha319YnJlYWt9Y2FzZSA0Ontzd2l0Y2gobz1lLnhpKCksbyl7Y2FzZSAzOntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZD0xLHRoaXMuZz1lLnppKCksITA7YnJlYWt9Y2FzZSA0OntpZihoPWUuQWkoKSxHdChoKT09PUd0KHRoaXMuYykmJlpDKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZD02LHc9bmV3IEt2KDIpLE1yKHcsdGhpcy5uKSxNcih3LGUuQmkoKSksdGhpcy5uPXcsZD1jdChvdChUciwxKSxYciwyNSwxNSxbdGhpcy5vLGUuQ2koKV0pLHRoaXMuZz1kLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLEd0KGgpPT09R3QodGhpcy5jKSYmWkModGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gcj11KHRoaXMubiwxNCksci5GYyhlLkJpKCkpLGQ9dSh0aGlzLmcsNDgpLHM9UHQoVHIsWHIsMjUsZC5sZW5ndGgrMSwxNSwxKSxJYyhkLDAscywwLGQubGVuZ3RoKSxzW2QubGVuZ3RoXT1lLkNpKCksdGhpcy5nPXMsITA7YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVOb3RpZmljYXRpb25JbXBsIiw2MjcpLEkoNTUyLDUwMSx7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSwxNTM6MSwyMTU6MSwxOTM3OjEsNjk6MSw5NToxfSxJaiksbC5kbD1mdW5jdGlvbihlLG4pe3JldHVybiBVNXQodGhpcy5jLGUsbil9LGwuZWw9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiAkNXQodGhpcy5jLGUsbixyKX0sbC5mbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIHV4dCh0aGlzLmMsZSxuLHIpfSxsLmdsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuaGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga0QodGhpcy5jLGUsbil9LGwuaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoeHEodGhpcy5jLHRoaXMuYixlLCExKSw3MikuYWsoKX0sbC5qbD1mdW5jdGlvbihlKXtyZXR1cm4gdSh4cSh0aGlzLmMsdGhpcy5iLGUsITEpLDcyKS5kZCgpfSxsLmtsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5sbD1mdW5jdGlvbihlKXtyZXR1cm4hVkkodGhpcy5jLGUpfSxsLm1sPWZ1bmN0aW9uKGUsbil7a3EodGhpcy5jLGUsbil9LGwubmw9ZnVuY3Rpb24oZSl7cmV0dXJuIFdlZSh0aGlzLmMsZSl9LGwub2w9ZnVuY3Rpb24oZSl7dnNlKHRoaXMuYyxlKX0sUCgkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUZlYXR1cmVNYXAiLDU1MiksSSgxMjU5LDEsdHV0LGpWdCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4geHEodGhpcy5iLHRoaXMuYSwtMSxlKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiFWSSh0aGlzLmIsdGhpcy5hKX0sbC5XYj1mdW5jdGlvbihlKXtrcSh0aGlzLmIsdGhpcy5hLGUpfSxsLlhqPWZ1bmN0aW9uKCl7aXEodGhpcy5iLHRoaXMuYSl9LFAoJGksIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZSIsMTI1OSk7dmFyIFU2LE1mdCxJZnQsVzYsaDVlLGZOPVlpKE5ILCJBbnlUeXBlIik7SSg2NjYsNjAsVTAscmV0KSxQKE5ILCJJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiIsNjY2KTt2YXIgY1U9WWkoTkgsUjBlKSxkTj1ZaShOSCxqMGUpLHBMdD1ZaShOSCwkMGUpLGY1ZSxwYyxiTHQsVTIsZDVlLGc1ZSxwNWUsYjVlLHY1ZSx3NWUsbTVlLHk1ZSx4NWUsazVlLEU1ZSx1NSxUNWUsbDUsb0EsQzVlLEd3LGdOLHBOLF81ZSxjQSx1QTtJKDgzMCw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSw4NDM6MX0sJHB0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5rbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iLmIpfXJldHVybiBvaCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx3RCh0aGlzLmMsZSxyKTtjYXNlIDE6cmV0dXJuKCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKERpKCksVTIpKSwxNTMpLDY5KSkubWsoZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksd0QodGhpcy5iLGUscil9cmV0dXJuIHM9dSh5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksbiksNjYpLHMuTmooKS5Saih0aGlzLE9tdCh0aGlzKSxuLVpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MH1yZXR1cm4gc2godGhpcyxlLVpuKHRoaXMuemgoKSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksUU0odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKERpKCksVTIpKSwxNTMpLDIxNSkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksUU0odGhpcy5iLG4pO3JldHVybn1maCh0aGlzLGUtWm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gRGkoKSxiTHR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLHhyKHRoaXMuYik7cmV0dXJufWxoKHRoaXMsZS1abih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKG1peGVkOiAiLG9DKGUsdGhpcy5jKSxlLmErPSIsIGFueUF0dHJpYnV0ZTogIixvQyhlLHRoaXMuYiksZS5hKz0iKSIsZS5hKX0sUCh5cywiQW55VHlwZUltcGwiLDgzMCksSSg2NjcsNTA2LHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsMjAyMToxLDY2NzoxfSx2QiksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiBvaCh0aGlzLGUtWm4oKERpKCksdTUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp1NSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9bnVsbH1yZXR1cm4gc2godGhpcyxlLVpuKChEaSgpLHU1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6dTUsZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDpMdHQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTpwcHQodGhpcyxCcihuKSk7cmV0dXJufWZoKHRoaXMsZS1abigoRGkoKSx1NSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOnU1LGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIERpKCksdTV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDp0aGlzLmE9bnVsbDtyZXR1cm47Y2FzZSAxOnRoaXMuYj1udWxsO3JldHVybn1saCh0aGlzLGUtWm4oKERpKCksdTUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTp1NSxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKGRhdGE6ICIsZm8oZSx0aGlzLmEpLGUuYSs9IiwgdGFyZ2V0OiAiLGZvKGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxsLmE9bnVsbCxsLmI9bnVsbCxQKHlzLCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsIiw2NjcpLEkoNjY4LDgzMCx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDg0MzoxLDIwMjI6MSw2Njg6MX0sX3F0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5rbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgaXModGhpcywyKSksdGhpcy5iLmIpO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxCcihrRCh0aGlzLmMsKERpKCksb0EpLCEwKSk7Y2FzZSA0OnJldHVybiBvdnQodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxCcihrRCh0aGlzLmMsKERpKCksb0EpLCEwKSkpKTtjYXNlIDU6cmV0dXJuIHRoaXMuYX1yZXR1cm4gb2godGhpcyxlLVpuKChEaSgpLGw1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6bDUsZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KEJjKHRoaXMuYywoRGkoKSxVMikpLDE1MykpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksQnIoa0QodGhpcy5jLChEaSgpLG9BKSwhMCkpIT1udWxsO2Nhc2UgNDpyZXR1cm4gb3Z0KHRoaXMuYSwoIXRoaXMuYyYmKHRoaXMuYz1uZXcgaXModGhpcywwKSksQnIoa0QodGhpcy5jLChEaSgpLG9BKSwhMCkpKSkhPW51bGw7Y2FzZSA1OnJldHVybiEhdGhpcy5hfXJldHVybiBzaCh0aGlzLGUtWm4oKERpKCksbDUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpsNSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLFFNKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx1KHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSwyMTUpKS5XYihuKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLFFNKHRoaXMuYixuKTtyZXR1cm47Y2FzZSAzOlV3dCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA0OlV3dCh0aGlzLGN2dCh0aGlzLmEsbikpO3JldHVybjtjYXNlIDU6d2ModGhpcyx1KG4sMTQ4KSk7cmV0dXJufWZoKHRoaXMsZS1abigoRGkoKSxsNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOmw1LGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIERpKCksbDV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IGlzKHRoaXMsMCkpLHUoQmModGhpcy5jLChEaSgpLFUyKSksMTUzKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGlzKHRoaXMsMikpLHhyKHRoaXMuYik7cmV0dXJuO2Nhc2UgMzohdGhpcy5jJiYodGhpcy5jPW5ldyBpcyh0aGlzLDApKSxrcSh0aGlzLmMsKERpKCksb0EpLG51bGwpO3JldHVybjtjYXNlIDQ6VXd0KHRoaXMsY3Z0KHRoaXMuYSxudWxsKSk7cmV0dXJuO2Nhc2UgNTp0aGlzLmE9bnVsbDtyZXR1cm59bGgodGhpcyxlLVpuKChEaSgpLGw1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6bDUsZSkpfSxQKHlzLCJTaW1wbGVBbnlUeXBlSW1wbCIsNjY4KSxJKDY2OSw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSwyMDIzOjEsNjY5OjF9LENxdCksbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gcj8oIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdGhpcy5hKTooIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdGhpcy5hLmIpO2Nhc2UgMTpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgVGwoKGRuKCksUWEpLGNjLHRoaXMsMSkpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDEpKSxmSSh0aGlzLmIpKTtjYXNlIDI6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywyKSksZkkodGhpcy5jKSk7Y2FzZSAzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLEJjKHRoaXMuYSwoRGkoKSxnTikpO2Nhc2UgNDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSxCYyh0aGlzLmEsKERpKCkscE4pKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksQmModGhpcy5hLChEaSgpLGNBKSk7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLEJjKHRoaXMuYSwoRGkoKSx1QSkpfXJldHVybiBvaCh0aGlzLGUtWm4oKERpKCksR3cpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpHdyxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHdEKHRoaXMuYSxlLHIpO2Nhc2UgMTpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywxKSksa2oodGhpcy5iLGUscik7Y2FzZSAyOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSxraih0aGlzLmMsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksTVd0KEJjKHRoaXMuYSwoRGkoKSxjQSkpLGUscil9cmV0dXJuIHM9dSh5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTooRGkoKSxHdyksbiksNjYpLHMuTmooKS5Saih0aGlzLE9tdCh0aGlzKSxuLVpuKChEaSgpLEd3KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDE6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5mIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmYhPTA7Y2FzZSAzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksZ04pKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCkscE4pKSk7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksY0EpKSk7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLCF0aihCYyh0aGlzLmEsKERpKCksdUEpKSl9cmV0dXJuIHNoKHRoaXMsZS1abigoRGkoKSxHdykpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyB0aCksdGhpcy5rKS5jaygpOkd3LGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksUU0odGhpcy5hLG4pO3JldHVybjtjYXNlIDE6IXRoaXMuYiYmKHRoaXMuYj1uZXcgVGwoKGRuKCksUWEpLGNjLHRoaXMsMSkpLGx6KHRoaXMuYixuKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSxseih0aGlzLmMsbik7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSx2eChCYyh0aGlzLmEsKERpKCksZ04pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksaEMoQmModGhpcy5hLGdOKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHZ4KEJjKHRoaXMuYSwoRGkoKSxwTikpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSxoQyhCYyh0aGlzLmEscE4pLHUobiwxNCkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGNBKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLGhDKEJjKHRoaXMuYSxjQSksdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBpcyh0aGlzLDApKSx2eChCYyh0aGlzLmEsKERpKCksdUEpKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksaEMoQmModGhpcy5hLHVBKSx1KG4sMTQpKTtyZXR1cm59ZmgodGhpcyxlLVpuKChEaSgpLEd3KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IHRoKSx0aGlzLmspLmNrKCk6R3csZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gRGkoKSxHd30sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmEmJih0aGlzLmE9bmV3IGlzKHRoaXMsMCkpLHhyKHRoaXMuYSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyBUbCgoZG4oKSxRYSksY2MsdGhpcywxKSksdGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmMmJih0aGlzLmM9bmV3IFRsKChkbigpLFFhKSxjYyx0aGlzLDIpKSx0aGlzLmMuYy4kYigpO3JldHVybjtjYXNlIDM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGdOKSkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLHBOKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLGNBKSkpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgaXModGhpcywwKSksdngoQmModGhpcy5hLChEaSgpLHVBKSkpO3JldHVybn1saCh0aGlzLGUtWm4oKERpKCksR3cpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgdGgpLHRoaXMuaykuY2soKTpHdyxlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5qJjQ/YmYodGhpcyk6KGU9bmV3IFRoKGJmKHRoaXMpKSxlLmErPSIgKG1peGVkOiAiLG9DKGUsdGhpcy5hKSxlLmErPSIpIixlLmEpfSxQKHlzLCJYTUxUeXBlRG9jdW1lbnRSb290SW1wbCIsNjY5KSxJKDE5MTksNzA0LHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjEsMjAyNDoxfSxFbSksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxNjpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMjY6Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgNDQ6Y2FzZSA0NTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MzpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDU4OmNhc2UgNjA6Y2FzZSA2MTpjYXNlIDQ6cmV0dXJuIG49PW51bGw/bnVsbDokbyhuKTtjYXNlIDE5OmNhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA1MjpjYXNlIDU0OmNhc2UgNTpyZXR1cm4gQnIobik7Y2FzZSA2OnJldHVybiB2UWUodShuLDE5MCkpO2Nhc2UgMTI6Y2FzZSA0NzpjYXNlIDQ5OmNhc2UgMTE6cmV0dXJuIEpsZSh0aGlzLGUsbik7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOml5bih1KG4sMjQwKSk7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiBuPT1udWxsP251bGw6Z2VuKFh0KHllKG4pKSk7Y2FzZSAxNzpyZXR1cm4gbmFlKChEaSgpLG4pKTtjYXNlIDE4OnJldHVybiBuYWUobik7Y2FzZSAyMTpjYXNlIDIwOnJldHVybiBuPT1udWxsP251bGw6cGVuKHUobiwxNTUpLmEpO2Nhc2UgMjc6cmV0dXJuIHdRZSh1KG4sMTkwKSk7Y2FzZSAzMDpyZXR1cm4gd3NlKChEaSgpLHUobiwxNSkpKTtjYXNlIDMxOnJldHVybiB3c2UodShuLDE1KSk7Y2FzZSA0MDpyZXR1cm4geVFlKChEaSgpLG4pKTtjYXNlIDQyOnJldHVybiByYWUoKERpKCksbikpO2Nhc2UgNDM6cmV0dXJuIHJhZShuKTtjYXNlIDU5OmNhc2UgNDg6cmV0dXJuIG1RZSgoRGkoKSxuKSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fSxsLkpoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7c3dpdGNoKGUuRz09LTEmJihlLkc9KHI9RmwoZSkscj9GZyhyLk1oKCksZSk6LTEpKSxlLkcpe2Nhc2UgMDpyZXR1cm4gbj1uZXcgJHB0LG47Y2FzZSAxOnJldHVybiBzPW5ldyB2QixzO2Nhc2UgMjpyZXR1cm4gbz1uZXcgX3F0LG87Y2FzZSAzOnJldHVybiBoPW5ldyBDcXQsaDtkZWZhdWx0OnRocm93IHJ0KG5ldyBQbihSY3QrZS56YitrdykpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdyxrLEMsTSxGLEgsVixZLHR0LGd0LEx0O3N3aXRjaChlLnlqKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIE5obihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6eGRuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKChzPSRjKG4sITApLHMubGVuZ3RoPjAmJihScigwLHMubGVuZ3RoKSxzLmNoYXJDb2RlQXQoMCk9PTQzKT9zLnN1YnN0cigxKTpzKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMDpyZXR1cm4gbj09bnVsbD9udWxsOkVJKCRsKChvPSRjKG4sITApLG8ubGVuZ3RoPjAmJihScigwLG8ubGVuZ3RoKSxvLmNoYXJDb2RlQXQoMCk9PTQzKT9vLnN1YnN0cigxKTpvKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMTpyZXR1cm4gQnIocHcodGhpcywoRGkoKSxwNWUpLG4pKTtjYXNlIDEyOnJldHVybiBCcihwdyh0aGlzLChEaSgpLGI1ZSksbikpO2Nhc2UgMTM6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2J0KCRjKG4sITApKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIHFibihuKTtjYXNlIDE2OnJldHVybiBCcihwdyh0aGlzLChEaSgpLHY1ZSksbikpO2Nhc2UgMTc6cmV0dXJuIFRpZSgoRGkoKSxuKSk7Y2FzZSAxODpyZXR1cm4gVGllKG4pO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNTQ6Y2FzZSAxOTpyZXR1cm4gJGMobiwhMCk7Y2FzZSAyMTpjYXNlIDIwOnJldHVybiBRYm4obik7Y2FzZSAyMjpyZXR1cm4gQnIocHcodGhpcywoRGkoKSx3NWUpLG4pKTtjYXNlIDIzOnJldHVybiBCcihwdyh0aGlzLChEaSgpLG01ZSksbikpO2Nhc2UgMjQ6cmV0dXJuIEJyKHB3KHRoaXMsKERpKCkseTVlKSxuKSk7Y2FzZSAyNTpyZXR1cm4gQnIocHcodGhpcywoRGkoKSx4NWUpLG4pKTtjYXNlIDI2OnJldHVybiBCcihwdyh0aGlzLChEaSgpLGs1ZSksbikpO2Nhc2UgMjc6cmV0dXJuIExobihuKTtjYXNlIDMwOnJldHVybiBDaWUoKERpKCksbikpO2Nhc2UgMzE6cmV0dXJuIENpZShuKTtjYXNlIDMyOnJldHVybiBuPT1udWxsP251bGw6ZGUoJGwoKE09JGMobiwhMCksTS5sZW5ndGg+MCYmKFJyKDAsTS5sZW5ndGgpLE0uY2hhckNvZGVBdCgwKT09NDMpP00uc3Vic3RyKDEpOk0pLF9hLHZpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBOcCgoRj0kYyhuLCEwKSxGLmxlbmd0aD4wJiYoUnIoMCxGLmxlbmd0aCksRi5jaGFyQ29kZUF0KDApPT00Myk/Ri5zdWJzdHIoMSk6RikpO2Nhc2UgMzQ6cmV0dXJuIG49PW51bGw/bnVsbDpkZSgkbCgoSD0kYyhuLCEwKSxILmxlbmd0aD4wJiYoUnIoMCxILmxlbmd0aCksSC5jaGFyQ29kZUF0KDApPT00Myk/SC5zdWJzdHIoMSk6SCksX2EsdmkpKTtjYXNlIDM2OnJldHVybiBuPT1udWxsP251bGw6ZzIoU3EoKFY9JGMobiwhMCksVi5sZW5ndGg+MCYmKFJyKDAsVi5sZW5ndGgpLFYuY2hhckNvZGVBdCgwKT09NDMpP1Yuc3Vic3RyKDEpOlYpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmcyKFNxKChZPSRjKG4sITApLFkubGVuZ3RoPjAmJihScigwLFkubGVuZ3RoKSxZLmNoYXJDb2RlQXQoMCk9PTQzKT9ZLnN1YnN0cigxKTpZKSkpO2Nhc2UgNDA6cmV0dXJuIFZsbigoRGkoKSxuKSk7Y2FzZSA0MjpyZXR1cm4gX2llKChEaSgpLG4pKTtjYXNlIDQzOnJldHVybiBfaWUobik7Y2FzZSA0NDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBOcCgodHQ9JGMobiwhMCksdHQubGVuZ3RoPjAmJihScigwLHR0Lmxlbmd0aCksdHQuY2hhckNvZGVBdCgwKT09NDMpP3R0LnN1YnN0cigxKTp0dCkpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgTnAoKGd0PSRjKG4sITApLGd0Lmxlbmd0aD4wJiYoUnIoMCxndC5sZW5ndGgpLGd0LmNoYXJDb2RlQXQoMCk9PTQzKT9ndC5zdWJzdHIoMSk6Z3QpKTtjYXNlIDQ2OnJldHVybiAkYyhuLCExKTtjYXNlIDQ3OnJldHVybiBCcihwdyh0aGlzLChEaSgpLEU1ZSksbikpO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gR2xuKChEaSgpLG4pKTtjYXNlIDQ5OnJldHVybiBCcihwdyh0aGlzLChEaSgpLFQ1ZSksbikpO2Nhc2UgNTA6cmV0dXJuIG49PW51bGw/bnVsbDplRSgkbCgoTHQ9JGMobiwhMCksTHQubGVuZ3RoPjAmJihScigwLEx0Lmxlbmd0aCksTHQuY2hhckNvZGVBdCgwKT09NDMpP0x0LnN1YnN0cigxKTpMdCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTE6cmV0dXJuIG49PW51bGw/bnVsbDplRSgkbCgoaD0kYyhuLCEwKSxoLmxlbmd0aD4wJiYoUnIoMCxoLmxlbmd0aCksaC5jaGFyQ29kZUF0KDApPT00Myk/aC5zdWJzdHIoMSk6aCksTUgsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTM6cmV0dXJuIEJyKHB3KHRoaXMsKERpKCksQzVlKSxuKSk7Y2FzZSA1NTpyZXR1cm4gbj09bnVsbD9udWxsOmVFKCRsKChkPSRjKG4sITApLGQubGVuZ3RoPjAmJihScigwLGQubGVuZ3RoKSxkLmNoYXJDb2RlQXQoMCk9PTQzKT9kLnN1YnN0cigxKTpkKSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOmVFKCRsKCh3PSRjKG4sITApLHcubGVuZ3RoPjAmJihScigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT93LnN1YnN0cigxKTp3KSxNSCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NzpyZXR1cm4gbj09bnVsbD9udWxsOmcyKFNxKChrPSRjKG4sITApLGsubGVuZ3RoPjAmJihScigwLGsubGVuZ3RoKSxrLmNoYXJDb2RlQXQoMCk9PTQzKT9rLnN1YnN0cigxKTprKSkpO2Nhc2UgNTg6cmV0dXJuIG49PW51bGw/bnVsbDpnMihTcSgoQz0kYyhuLCEwKSxDLmxlbmd0aD4wJiYoUnIoMCxDLmxlbmd0aCksQy5jaGFyQ29kZUF0KDApPT00Myk/Qy5zdWJzdHIoMSk6QykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6ZGUoJGwoKHI9JGMobiwhMCksci5sZW5ndGg+MCYmKFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpP3Iuc3Vic3RyKDEpOnIpLF9hLHZpKSk7Y2FzZSA2MTpyZXR1cm4gbj09bnVsbD9udWxsOmRlKCRsKCRjKG4sITApLF9hLHZpKSk7ZGVmYXVsdDp0aHJvdyBydChuZXcgUG4oSEUrZS5uZSgpK2t3KSl9fTt2YXIgUzVlLHZMdCxBNWUsd0x0O1AoeXMsIlhNTFR5cGVGYWN0b3J5SW1wbCIsMTkxOSksSSg1ODYsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTc5OjEsMTE0OjEsMTE1OjEsNjc1OjEsMTk0NToxLDU4NjoxfSxoWHQpLGwuTj0hMSxsLk89ITE7dmFyIEw1ZT0hMTtQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwiLDU4NiksSSgxODUyLDEsezgzNzoxfSxpeCksbC5faj1mdW5jdGlvbigpe3JldHVybiB0eHQoKSxSNWV9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xIiwxODUyKSxJKDE4NjEsMSxpaSxoMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMTAiLDE4NjEpLEkoMTg2MiwxLGlpLHdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMSIsMTg2MiksSSgxODYzLDEsaWksbUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxODYzKSxJKDE4NjQsMSxpaSx5QiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gTm0oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGNhLHRlLDMzMyxlLDcsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTg2NCksSSgxODY1LDEsaWkseEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxODY1KSxJKDE4NjYsMSxpaSxrQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxODY2KSxJKDE4NjcsMSxpaSxFQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE2IiwxODY3KSxJKDE4NjgsMSxpaSxqZiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMTciLDE4NjgpLEkoMTg2OSwxLGlpLGh1KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE1NSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KFhFLHRlLDE1NSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOCIsMTg2OSksSSgxODcwLDEsaWksdkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE5IiwxODcwKSxJKDE4NTMsMSxpaSx3SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw4NDMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChmTixJZSw4NDMsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMiIsMTg1MyksSSgxODcxLDEsaWksbUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIwIiwxODcxKSxJKDE4NzIsMSxpaSxmdSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE4NzIpLEkoMTg3MywxLGlpLHM5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yMiIsMTg3MyksSSgxODc0LDEsaWksVEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIzIiwxODc0KSxJKDE4NzUsMSxpaSxDQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxOTApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChIdSx0ZSwxOTAsZSwwLDIpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE4NzUpLEkoMTg3NiwxLGlpLHN4KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNSIsMTg3NiksSSgxODc3LDEsaWkseUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI2IiwxODc3KSxJKDE4NzgsMSxpaSxEayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI3IiwxODc4KSxJKDE4NzksMSxpaSx4SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHBoLHh5LDE1LGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxODc5KSxJKDE4ODAsMSxpaSxfQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMjkiLDE4ODApLEkoMTg1NCwxLGlpLGtKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDY2Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KGNVLEllLDIwMjEsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMyIsMTg1NCksSSgxODgxLDEsaWksRUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMCIsMTg4MSksSSgxODgyLDEsaWksYTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxODgyKSxJKDE4ODMsMSxpaSxTQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE4ODMpLEkoMTg4NCwxLGlpLHpMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMyIsMTg4NCksSSgxODg1LDEsaWksbzkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM0IiwxODg1KSxJKDE4ODYsMSxpaSxUSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE4ODYpLEkoMTg4NywxLGlpLENKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNiIsMTg4NyksSSgxODg4LDEsaWkscUwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwaCx4eSwxNSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNyIsMTg4OCksSSgxODg5LDEsaWksYzkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwaCx4eSwxNSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTg4OSksSSgxODkwLDEsaWksZjEpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxODkwKSxJKDE4NTUsMSxpaSxPayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw2NjgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChkTixJZSwyMDIyLGUsMCwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQiLDE4NTUpLEkoMTg5MSwxLGlpLF9KKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMTg5MSksSSgxODkyLDEsaWksTmspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwxODkyKSxJKDE4OTMsMSxpaSxITCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDE4OTMpLEkoMTg5NCwxLGlpLEhiKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MyIsMTg5NCksSSgxODk1LDEsaWksdTkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ0IiwxODk1KSxJKDE4OTYsMSxpaSxHTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDUiLDE4OTYpLEkoMTg5NywxLGlpLCRmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC80NiIsMTg5NyksSSgxODk4LDEsaWksbDkpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwxODk4KSxJKDE4OTksMSxpaSxkMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZWEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEFlLHRlLDIsZSw2LDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDE4OTkpLEkobmIsMSxpaSxnMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxODQpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChDdyx0ZSwxODQsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNDkiLG5iKSxJKDE4NTYsMSxpaSxTSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSw2NjkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChwTHQsSWUsMjAyMyxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81IiwxODU2KSxJKDE5MDEsMSxpaSxBSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwxNjIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChUdyx0ZSwxNjIsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvNTAiLDE5MDEpLEkoMTkwMiwxLGlpLEEzKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBlYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gUHQoQWUsdGUsMixlLDYsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MSIsMTkwMiksSSgxOTAzLDEsaWksUGspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEV0KGUsMTkpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChqYSx0ZSwxOSxlLDAsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MiIsMTkwMyksSSgxODU3LDEsaWksRmspLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChBZSx0ZSwyLGUsNiwxKX0sUCh5cywiWE1MVHlwZVBhY2thZ2VJbXBsLzYiLDE4NTcpLEkoMTg1OCwxLGlpLGg5KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBFdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEh1LHRlLDE5MCxlLDAsMil9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC83IiwxODU4KSxJKDE4NTksMSxpaSxMSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gT20oZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0KEJzLHRlLDQ3NixlLDgsMSl9LFAoeXMsIlhNTFR5cGVQYWNrYWdlSW1wbC84IiwxODU5KSxJKDE4NjAsMSxpaSxheCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gRXQoZSwyMTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBQdChFNix0ZSwyMTcsZSwwLDEpfSxQKHlzLCJYTUxUeXBlUGFja2FnZUltcGwvOSIsMTg2MCk7dmFyIFUxLHJwLGxBLHVVLHZ0O0koNTAsNjAsVTAsRnIpLFAoVmcsIlJlZ0V4L1BhcnNlRXhjZXB0aW9uIiw1MCksSSg4MjAsMSx7fSxWTCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmomJmJhKHRoaXMuaSxlKT09NjN9LGwudGw9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuYyE9MTApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGtIKSkpKTtzd2l0Y2goZT10aGlzLmEsZSl7Y2FzZSAxMDE6ZT0yNzticmVhaztjYXNlIDEwMjplPTEyO2JyZWFrO2Nhc2UgMTEwOmU9MTA7YnJlYWs7Y2FzZSAxMTQ6ZT0xMzticmVhaztjYXNlIDExNjplPTk7YnJlYWs7Y2FzZSAxMjA6aWYoZmkodGhpcyksdGhpcy5jIT0wKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYodGhpcy5hPT0xMjMpe289MCxyPTA7ZG97aWYoZmkodGhpcyksdGhpcy5jIT0wKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYoKG89YjIodGhpcy5hKSk8MClicmVhaztpZihyPnIqMTYpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFFkZSkpKSk7cj1yKjE2K299d2hpbGUoITApO2lmKHRoaXMuYSE9MTI1KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxaZGUpKSkpO2lmKHI+V0UpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEpkZSkpKSk7ZT1yfWVsc2V7aWYobz0wLHRoaXMuYyE9MHx8KG89YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKHI9byxmaSh0aGlzKSx0aGlzLmMhPTB8fChvPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtyPXIqMTYrbyxlPXJ9YnJlYWs7Y2FzZSAxMTc6aWYocz0wLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49cyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtpZihuPW4qMTYrcyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtpZihuPW4qMTYrcyxmaSh0aGlzKSx0aGlzLmMhPTB8fChzPWIyKHRoaXMuYSkpPDApdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEdnKSkpKTtuPW4qMTYrcyxlPW47YnJlYWs7Y2FzZSAxMTg6aWYoZmkodGhpcyksdGhpcy5jIT0wfHwocz1iMih0aGlzLmEpKTwwKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxHZykpKSk7aWYobj1zLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9YjIodGhpcy5hKSk8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksR2cpKSkpO2lmKG49bioxNitzLG4+V0UpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLCJwYXJzZXIuZGVzY2FwcGUuNCIpKSkpO2U9bjticmVhaztjYXNlIDY1OmNhc2UgOTA6Y2FzZSAxMjI6dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLHQwZSkpKSl9cmV0dXJuIGV9LGwudWw9ZnVuY3Rpb24oZSl7dmFyIG4scjtzd2l0Y2goZSl7Y2FzZSAxMDA6cj0odGhpcy5lJjMyKT09MzI/dGIoIk5kIiwhMCk6KGdpKCksbFUpO2JyZWFrO2Nhc2UgNjg6cj0odGhpcy5lJjMyKT09MzI/dGIoIk5kIiwhMSk6KGdpKCksVEx0KTticmVhaztjYXNlIDExOTpyPSh0aGlzLmUmMzIpPT0zMj90YigiSXNXb3JkIiwhMCk6KGdpKCksTjcpO2JyZWFrO2Nhc2UgODc6cj0odGhpcy5lJjMyKT09MzI/dGIoIklzV29yZCIsITEpOihnaSgpLF9MdCk7YnJlYWs7Y2FzZSAxMTU6cj0odGhpcy5lJjMyKT09MzI/dGIoIklzU3BhY2UiLCEwKTooZ2koKSxLNik7YnJlYWs7Y2FzZSA4MzpyPSh0aGlzLmUmMzIpPT0zMj90YigiSXNTcGFjZSIsITEpOihnaSgpLENMdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgR28oKG49ZSx0Z2Urbi50b1N0cmluZygxNikpKSl9cmV0dXJuIHJ9LGwudmw9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHcsayxDLE0sRixIO2Zvcih0aGlzLmI9MSxmaSh0aGlzKSxuPW51bGwsdGhpcy5jPT0wJiZ0aGlzLmE9PTk0PyhmaSh0aGlzKSxlP009KGdpKCksZ2koKSxuZXcgTmwoNSkpOihuPShnaSgpLGdpKCksbmV3IE5sKDQpKSxqYyhuLDAsV0UpLE09bmV3IE5sKDQpKSk6TT0oZ2koKSxnaSgpLG5ldyBObCg0KSksbz0hMDsoSD10aGlzLmMpIT0xJiYhKEg9PTAmJnRoaXMuYT09OTMmJiFvKTspe2lmKG89ITEscj10aGlzLmEscz0hMSxIPT0xMClzd2l0Y2gocil7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6dnkoTSx0aGlzLnVsKHIpKSxzPSEwO2JyZWFrO2Nhc2UgMTA1OmNhc2UgNzM6Y2FzZSA5OTpjYXNlIDY3OnI9dGhpcy5MbChNLHIpLHI8MCYmKHM9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYoRj1uNXQodGhpcyxyKSwhRil0aHJvdyBydChuZXcgRnIocXIoKE5yKCksUWN0KSkpKTt2eShNLEYpLHM9ITA7YnJlYWs7ZGVmYXVsdDpyPXRoaXMudGwoKX1lbHNlIGlmKEg9PTIwKXtpZihkPWw4KHRoaXMuaSw1OCx0aGlzLmQpLGQ8MCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksXzh0KSkpKTtpZih3PSEwLGJhKHRoaXMuaSx0aGlzLmQpPT05NCYmKCsrdGhpcy5kLHc9ITEpLGg9RGwodGhpcy5pLHRoaXMuZCxkKSxrPWZ0ZShoLHcsKHRoaXMuZSY1MTIpPT01MTIpLCFrKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxVZGUpKSkpO2lmKHZ5KE0saykscz0hMCxkKzE+PXRoaXMuanx8YmEodGhpcy5pLGQrMSkhPTkzKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxfOHQpKSkpO3RoaXMuZD1kKzJ9aWYoZmkodGhpcyksIXMpaWYodGhpcy5jIT0wfHx0aGlzLmEhPTQ1KWpjKE0scixyKTtlbHNle2lmKGZpKHRoaXMpLChIPXRoaXMuYyk9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtIPT0wJiZ0aGlzLmE9PTkzPyhqYyhNLHIsciksamMoTSw0NSw0NSkpOihDPXRoaXMuYSxIPT0xMCYmKEM9dGhpcy50bCgpKSxmaSh0aGlzKSxqYyhNLHIsQykpfSh0aGlzLmUmd2YpPT13ZiYmdGhpcy5jPT0wJiZ0aGlzLmE9PTQ0JiZmaSh0aGlzKX1pZih0aGlzLmM9PTEpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEVIKSkpKTtyZXR1cm4gbiYmKF9fKG4sTSksTT1uKSxiNChNKSxUXyhNKSx0aGlzLmI9MCxmaSh0aGlzKSxNfSxsLndsPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7Zm9yKHI9dGhpcy52bCghMSk7KHM9dGhpcy5jKSE9NzspaWYoZT10aGlzLmEscz09MCYmKGU9PTQ1fHxlPT0zOCl8fHM9PTQpe2lmKGZpKHRoaXMpLHRoaXMuYyE9OSl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksS2RlKSkpKTtpZihuPXRoaXMudmwoITEpLHM9PTQpdnkocixuKTtlbHNlIGlmKGU9PTQ1KV9fKHIsbik7ZWxzZSBpZihlPT0zOClXbGUocixuKTtlbHNlIHRocm93IHJ0KG5ldyBHbygiQVNTRVJUIikpfWVsc2UgdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLFlkZSkpKSk7cmV0dXJuIGZpKHRoaXMpLHJ9LGwueGw9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuYS00OCxuPShnaSgpLGdpKCksbmV3IGhydCgxMixudWxsLGUpKSwhdGhpcy5nJiYodGhpcy5nPW5ldyBmUiksaFIodGhpcy5nLG5ldyB5cHQoZSkpLGZpKHRoaXMpLG59LGwueWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxENWV9LGwuemw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxJNWV9LGwuQWw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkJsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5DbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxVY24oKX0sbC5EbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLE41ZX0sbC5FbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEY1ZX0sbC5GbD1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZD49dGhpcy5qfHwoKGU9YmEodGhpcy5pLHRoaXMuZCsrKSkmNjU1MDQpIT02NCl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksSGRlKSkpKTtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBWZCgwLGUtNjQpfSxsLkdsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLExtbigpfSxsLkhsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksQjVlfSxsLklsPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9KGdpKCksZ2koKSxuZXcgVmQoMCwxMDUpKSxmaSh0aGlzKSxlfSxsLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksUDVlfSxsLktsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTzVlfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMudGwoKX0sbC5NbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLGtMdH0sbC5ObD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYodGhpcy5kKzE+PXRoaXMuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksJGRlKSkpKTtpZihzPS0xLG49bnVsbCxlPWJhKHRoaXMuaSx0aGlzLmQpLDQ5PD1lJiZlPD01Nyl7aWYocz1lLTQ4LCF0aGlzLmcmJih0aGlzLmc9bmV3IGZSKSxoUih0aGlzLmcsbmV3IHlwdChzKSksKyt0aGlzLmQsYmEodGhpcy5pLHRoaXMuZCkhPTQxKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7Kyt0aGlzLmR9ZWxzZSBzd2l0Y2goZT09NjMmJi0tdGhpcy5kLGZpKHRoaXMpLG49Q3h0KHRoaXMpLG4uZSl7Y2FzZSAyMDpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpicmVhaztjYXNlIDg6aWYodGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBydChuZXcgRnIocXIoKE5yKCksemRlKSkpKX1pZihmaSh0aGlzKSxvPXN3KHRoaXMpLHI9bnVsbCxvLmU9PTIpe2lmKG8uZW0oKSE9Mil0aHJvdyBydChuZXcgRnIocXIoKE5yKCkscWRlKSkpKTtyPW8uYW0oMSksbz1vLmFtKDApfWlmKHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxnaSgpLGdpKCksbmV3IEd0ZShzLG4sbyxyKX0sbC5PbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEVMdH0sbC5QbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9V2ooMjQsc3codGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlFsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1XaigyMCxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuUmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVdqKDIyLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5TbD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKGU9MCxyPTAsbj0tMTt0aGlzLmQ8dGhpcy5qJiYobj1iYSh0aGlzLmksdGhpcy5kKSxvPW81dChuKSxvIT0wKTspZXw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyBydChuZXcgRnIocXIoKE5yKCksVDh0KSkpKTtpZihuPT00NSl7Zm9yKCsrdGhpcy5kO3RoaXMuZDx0aGlzLmomJihuPWJhKHRoaXMuaSx0aGlzLmQpLG89bzV0KG4pLG8hPTApOylyfD1vLCsrdGhpcy5kO2lmKHRoaXMuZD49dGhpcy5qKXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxUOHQpKSkpfWlmKG49PTU4KXtpZigrK3RoaXMuZCxmaSh0aGlzKSxzPVlZdChzdyh0aGlzKSxlLHIpLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO2ZpKHRoaXMpfWVsc2UgaWYobj09NDEpKyt0aGlzLmQsZmkodGhpcykscz1ZWXQoc3codGhpcyksZSxyKTtlbHNlIHRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxqZGUpKSkpO3JldHVybiBzfSxsLlRsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1XaigyMSxzdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHJ0KG5ldyBGcihxcigoTnIoKSxBMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuVWw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVdqKDIzLHN3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5WbD1mdW5jdGlvbigpe3ZhciBlLG47aWYoZmkodGhpcyksZT10aGlzLmYrKyxuPVJudChzdyh0aGlzKSxlKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksbn0sbC5XbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9Um50KHN3KHRoaXMpLDApLHRoaXMuYyE9Nyl0aHJvdyBydChuZXcgRnIocXIoKE5yKCksQTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlhsPWZ1bmN0aW9uKGUpe3JldHVybiBmaSh0aGlzKSx0aGlzLmM9PTU/KGZpKHRoaXMpLEJqKGUsKGdpKCksZ2koKSxuZXcgV20oOSxlKSkpKTpCaihlLChnaSgpLGdpKCksbmV3IFdtKDMsZSkpKX0sbC5ZbD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZmkodGhpcyksbj0oZ2koKSxnaSgpLG5ldyBsQygyKSksdGhpcy5jPT01PyhmaSh0aGlzKSxtMihuLGZBKSxtMihuLGUpKToobTIobixlKSxtMihuLGZBKSksbn0sbC5abD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksdGhpcy5jPT01PyhmaSh0aGlzKSxnaSgpLGdpKCksbmV3IFdtKDksZSkpOihnaSgpLGdpKCksbmV3IFdtKDMsZSkpfSxsLmE9MCxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MSxsLmc9bnVsbCxsLmo9MCxQKFZnLCJSZWdFeC9SZWdleFBhcnNlciIsODIwKSxJKDE4MjQsODIwLHt9LFNxdCksbC5zbD1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC50bD1mdW5jdGlvbigpe3JldHVybiBGNXQodGhpcyl9LGwudWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGtFKGUpfSxsLnZsPWZ1bmN0aW9uKGUpe3JldHVybiBqaGUodGhpcyl9LGwud2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLnhsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC55bD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuemw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGtFKDY3KX0sbC5CbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxrRSg3Myl9LGwuQ2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkRsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5FbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuRmw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksa0UoOTkpfSxsLkdsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5IbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuSWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksa0UoMTA1KX0sbC5KbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuS2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLkxsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZ5KGUsa0UobikpLC0xfSxsLk1sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgVmQoMCw5NCl9LGwuTmw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLk9sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgVmQoMCwzNil9LGwuUGw9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLlFsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5SbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuU2w9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgRnIocXIoKE5yKCksZ2gpKSkpfSxsLlRsPWZ1bmN0aW9uKCl7dGhyb3cgcnQobmV3IEZyKHFyKChOcigpLGdoKSkpKX0sbC5VbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuVmw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPVJudChzdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgcnQobmV3IEZyKHFyKChOcigpLEEyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5XbD1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyBGcihxcigoTnIoKSxnaCkpKSl9LGwuWGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLEJqKGUsKGdpKCksZ2koKSxuZXcgV20oMyxlKSkpfSxsLllsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmaSh0aGlzKSxuPShnaSgpLGdpKCksbmV3IGxDKDIpKSxtMihuLGUpLG0yKG4sZkEpLG59LGwuWmw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgV20oMyxlKX07dmFyIGg1PW51bGwsRDc9bnVsbDtQKFZnLCJSZWdFeC9QYXJzZXJGb3JYTUxTY2hlbWEiLDE4MjQpLEkoMTE3LDEsS0UsdnYpLGwuJGw9ZnVuY3Rpb24oZSl7dGhyb3cgcnQobmV3IEdvKCJOb3Qgc3VwcG9ydGVkLiIpKX0sbC5fbD1mdW5jdGlvbigpe3JldHVybi0xfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmJtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuY209ZnVuY3Rpb24oZSl7fSxsLmRtPWZ1bmN0aW9uKGUpe30sbC5lbT1mdW5jdGlvbigpe3JldHVybiAwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm0oMCl9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTE/Ii4iOiIifSxsLmU9MDt2YXIgbUx0LE83LGhBLE01ZSx5THQsbjM9bnVsbCxsVSxEZnQ9bnVsbCx4THQsZkEsT2Z0PW51bGwsa0x0LEVMdCxUTHQsQ0x0LF9MdCxJNWUsSzYsRDVlLE81ZSxONWUsUDVlLE43LEY1ZSxCNWUsRXhuPVAoVmcsIlJlZ0V4L1Rva2VuIiwxMTcpO0koMTM2LDExNyx7MzoxLDEzNjoxLDExNzoxfSxObCksbC5mbT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYodGhpcy5lPT00KWlmKHRoaXM9PXhMdClyPSIuIjtlbHNlIGlmKHRoaXM9PWxVKXI9IlxcZCI7ZWxzZSBpZih0aGlzPT1ONylyPSJcXHciO2Vsc2UgaWYodGhpcz09SzYpcj0iXFxzIjtlbHNle2ZvcihzPW5ldyB4ZyxzLmErPSJbIixuPTA7bjx0aGlzLmIubGVuZ3RoO24rPTIpZSZ3ZiYmbj4wJiYocy5hKz0iLCIpLHRoaXMuYltuXT09PXRoaXMuYltuKzFdP2ZvKHMseEQodGhpcy5iW25dKSk6KGZvKHMseEQodGhpcy5iW25dKSkscy5hKz0iLSIsZm8ocyx4RCh0aGlzLmJbbisxXSkpKTtzLmErPSJdIixyPXMuYX1lbHNlIGlmKHRoaXM9PVRMdClyPSJcXEQiO2Vsc2UgaWYodGhpcz09X0x0KXI9IlxcVyI7ZWxzZSBpZih0aGlzPT1DTHQpcj0iXFxTIjtlbHNle2ZvcihzPW5ldyB4ZyxzLmErPSJbXiIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKWUmd2YmJm4+MCYmKHMuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT9mbyhzLHhEKHRoaXMuYltuXSkpOihmbyhzLHhEKHRoaXMuYltuXSkpLHMuYSs9Ii0iLGZvKHMseEQodGhpcy5iW24rMV0pKSk7cy5hKz0iXSIscj1zLmF9cmV0dXJuIHJ9LGwuYT0hMSxsLmM9ITEsUChWZywiUmVnRXgvUmFuZ2VUb2tlbiIsMTM2KSxJKDU4NCwxLHs1ODQ6MX0seXB0KSxsLmE9MCxQKFZnLCJSZWdFeC9SZWdleFBhcnNlci9SZWZlcmVuY2VQb3NpdGlvbiIsNTg0KSxJKDU4MywxLHszOjEsNTgzOjF9LFJIdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8IUV0KGUsNTgzKT8hMToobj11KGUsNTgzKSxobih0aGlzLmIsbi5iKSYmdGhpcy5hPT1uLmEpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEJnKHRoaXMuYisiLyIrTTV0KHRoaXMuYSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5mbSh0aGlzLmEpfSxsLmE9MCxQKFZnLCJSZWdFeC9SZWd1bGFyRXhwcmVzc2lvbiIsNTgzKSxJKDIyMywxMTcsS0UsVmQpLGwuX2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2godGhpcy5lKXtjYXNlIDA6c3dpdGNoKHRoaXMuYSl7Y2FzZSAxMjQ6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNjM6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA5MTpjYXNlIDEyMzpjYXNlIDkyOnM9IlxcIitobnQodGhpcy5hJm1zKTticmVhaztjYXNlIDEyOnM9IlxcZiI7YnJlYWs7Y2FzZSAxMDpzPSJcXG4iO2JyZWFrO2Nhc2UgMTM6cz0iXFxyIjticmVhaztjYXNlIDk6cz0iXFx0IjticmVhaztjYXNlIDI3OnM9IlxcZSI7YnJlYWs7ZGVmYXVsdDp0aGlzLmE+PVlhPyhyPShuPXRoaXMuYT4+PjAsIjAiK24udG9TdHJpbmcoMTYpKSxzPSJcXHYiK0RsKHIsci5sZW5ndGgtNixyLmxlbmd0aCkpOnM9IiIraG50KHRoaXMuYSZtcyl9YnJlYWs7Y2FzZSA4OnRoaXM9PWtMdHx8dGhpcz09RUx0P3M9IiIraG50KHRoaXMuYSZtcyk6cz0iXFwiK2hudCh0aGlzLmEmbXMpO2JyZWFrO2RlZmF1bHQ6cz1udWxsfXJldHVybiBzfSxsLmE9MCxQKFZnLCJSZWdFeC9Ub2tlbi9DaGFyVG9rZW4iLDIyMyksSSgzMDksMTE3LEtFLFdtKSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmF9LGwuY209ZnVuY3Rpb24oZSl7dGhpcy5iPWV9LGwuZG09ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLmU9PTMpaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqIjtlbHNlIGlmKHRoaXMuYz09dGhpcy5iKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIn0iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0iO2Vsc2UgdGhyb3cgcnQobmV3IEdvKCJUb2tlbiN0b1N0cmluZygpOiBDTE9TVVJFICIrdGhpcy5jK0thK3RoaXMuYikpO2Vsc2UgaWYodGhpcy5jPDAmJnRoaXMuYjwwKW49dGhpcy5hLmZtKGUpKyIqPyI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsIit0aGlzLmIrIn0/IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysiLH0/IjtlbHNlIHRocm93IHJ0KG5ldyBHbygiVG9rZW4jdG9TdHJpbmcoKTogTk9OR1JFRURZQ0xPU1VSRSAiK3RoaXMuYytLYSt0aGlzLmIpKTtyZXR1cm4gbn0sbC5iPTAsbC5jPTAsUChWZywiUmVnRXgvVG9rZW4vQ2xvc3VyZVRva2VuIiwzMDkpLEkoODIxLDExNyxLRSxmd3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PTA/dGhpcy5hOnRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAyfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmIuZT09MyYmdGhpcy5iLmFtKDApPT10aGlzLmE/bj10aGlzLmEuZm0oZSkrIisiOnRoaXMuYi5lPT05JiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT9uPXRoaXMuYS5mbShlKSsiKz8iOm49dGhpcy5hLmZtKGUpKygiIit0aGlzLmIuZm0oZSkpLG59LFAoVmcsIlJlZ0V4L1Rva2VuL0NvbmNhdFRva2VuIiw4MjEpLEkoMTgyMiwxMTcsS0UsR3RlKSxsLmFtPWZ1bmN0aW9uKGUpe2lmKGU9PTApcmV0dXJuIHRoaXMuZDtpZihlPT0xKXJldHVybiB0aGlzLmI7dGhyb3cgcnQobmV3IEdvKCJJbnRlcm5hbCBFcnJvcjogIitlKSl9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPzI6MX0sbC5mbT1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5jPjA/bj0iKD8oIit0aGlzLmMrIikiOnRoaXMuYS5lPT04P249Iig/KCIrdGhpcy5hKyIpIjpuPSIoPyIrdGhpcy5hLHRoaXMuYj9uKz10aGlzLmQrInwiK3RoaXMuYisiKSI6bis9dGhpcy5kKyIpIixufSxsLmM9MCxQKFZnLCJSZWdFeC9Ub2tlbi9Db25kaXRpb25Ub2tlbiIsMTgyMiksSSgxODIzLDExNyxLRSxHUXQpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYn0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3JldHVybiIoPyIrKHRoaXMuYT09MD8iIjpNNXQodGhpcy5hKSkrKHRoaXMuYz09MD8iIjpNNXQodGhpcy5jKSkrIjoiK3RoaXMuYi5mbShlKSsiKSJ9LGwuYT0wLGwuYz0wLFAoVmcsIlJlZ0V4L1Rva2VuL01vZGlmaWVyVG9rZW4iLDE4MjMpLEkoODIyLDExNyxLRSx3d3QpLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChuPW51bGwsdGhpcy5lKXtjYXNlIDY6dGhpcy5iPT0wP249Iig/OiIrdGhpcy5hLmZtKGUpKyIpIjpuPSIoIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjA6bj0iKD89Iit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjE6bj0iKD8hIit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjI6bj0iKD88PSIrdGhpcy5hLmZtKGUpKyIpIjticmVhaztjYXNlIDIzOm49Iig/PCEiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyNDpuPSIoPz4iK3RoaXMuYS5mbShlKSsiKSJ9cmV0dXJuIG59LGwuYj0wLFAoVmcsIlJlZ0V4L1Rva2VuL1BhcmVuVG9rZW4iLDgyMiksSSg1MjEsMTE3LHszOjEsMTE3OjEsNTIxOjF9LGhydCksbC5ibT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZT09MTI/IlxcIit0aGlzLmE6QnBuKHRoaXMuYil9LGwuYT0wLFAoVmcsIlJlZ0V4L1Rva2VuL1N0cmluZ1Rva2VuIiw1MjEpLEkoNDY1LDExNyxLRSxsQyksbC4kbD1mdW5jdGlvbihlKXttMih0aGlzLGUpfSxsLmFtPWZ1bmN0aW9uKGUpe3JldHVybiB1KFJ2KHRoaXMuYSxlKSwxMTcpfSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmEuYS5jLmxlbmd0aDowfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7aWYodGhpcy5lPT0xKXtpZih0aGlzLmEuYS5jLmxlbmd0aD09MiluPXUoUnYodGhpcy5hLDApLDExNykscj11KFJ2KHRoaXMuYSwxKSwxMTcpLHIuZT09MyYmci5hbSgwKT09bj9vPW4uZm0oZSkrIisiOnIuZT09OSYmci5hbSgwKT09bj9vPW4uZm0oZSkrIis/IjpvPW4uZm0oZSkrKCIiK3IuZm0oZSkpO2Vsc2V7Zm9yKGg9bmV3IHhnLHM9MDtzPHRoaXMuYS5hLmMubGVuZ3RoO3MrKylmbyhoLHUoUnYodGhpcy5hLHMpLDExNykuZm0oZSkpO289aC5hfXJldHVybiBvfWlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwxKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKyI/IjtlbHNlIGlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZ1KFJ2KHRoaXMuYSwwKSwxMTcpLmU9PTcpbz11KFJ2KHRoaXMuYSwxKSwxMTcpLmZtKGUpKyI/PyI7ZWxzZXtmb3IoaD1uZXcgeGcsZm8oaCx1KFJ2KHRoaXMuYSwwKSwxMTcpLmZtKGUpKSxzPTE7czx0aGlzLmEuYS5jLmxlbmd0aDtzKyspaC5hKz0ifCIsZm8oaCx1KFJ2KHRoaXMuYSxzKSwxMTcpLmZtKGUpKTtvPWguYX1yZXR1cm4gb30sUChWZywiUmVnRXgvVG9rZW4vVW5pb25Ub2tlbiIsNDY1KSxJKDUxOCwxLHs1OTI6MX0saE0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LFAoaWdlLCJYTUxUeXBlVXRpbC9QYXR0ZXJuTWF0Y2hlckltcGwiLDUxOCksSSgxNjIyLDEzODEse30sQUIpO3ZhciBSNWU7UChpZ2UsIlhNTFR5cGVWYWxpZGF0b3IiLDE2MjIpLEkoMjY0LDEsdDAsUWIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybih0aGlzLmItdGhpcy5hKSp0aGlzLmM8MD9BYjpuZXcgUHAodGhpcyl9LGwuYT0wLGwuYj0wLGwuYz0wO3ZhciBBYjtQKFY4dCwiRXhjbHVzaXZlUmFuZ2UiLDI2NCksSSgxMDY4LDEsSmQsTUopLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxkWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlZZSgpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHNZZSgpfSxsLldiPWZ1bmN0aW9uKGUpe3UoZSwxOSkscFhlKCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IHJ0KG5ldyB5ZyhvZ2UpKX0sUChWOHQsIkV4Y2x1c2l2ZVJhbmdlLzEiLDEwNjgpLEkoMjU0LDEsSmQsUHApLGwuUmI9ZnVuY3Rpb24oZSl7dShlLDE5KSxnWGUoKX0sbC5OYj1mdW5jdGlvbihlKXtwYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGR1bih0aGlzKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB1YW4odGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7dShlLDE5KSxiWGUoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuYzwwP3RoaXMuYT49dGhpcy5jLmI6dGhpcy5hPD10aGlzLmMuYn0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI+MH0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBydChuZXcgeWcob2dlKSl9LGwuYT0wLGwuYj0wLFAoVjh0LCJFeGNsdXNpdmVSYW5nZS9SYW5nZUl0ZXJhdG9yIiwyNTQpO3ZhciBtaD15OChUSCwiQyIpLFRyPXk4KHRTLCJJIiksZGw9eTgodTYsIloiKSxMYj15OChlUywiSiIpLEh1PXk4KFFfLCJCIiksaWE9eTgoWl8sIkQiKSxyMz15OChKXywiRiIpLGY1PXk4KG5TLCJTIiksVHhuPVlpKCJvcmcuZWNsaXBzZS5lbGsuY29yZS5sYWJlbHMiLCJJTGFiZWxNYW5hZ2VyIiksU0x0PVlpKFJhLCJEaWFnbm9zdGljQ2hhaW4iKSxBTHQ9WWkoUDBlLCJSZXNvdXJjZVNldCIpLExMdD1QKFJhLCJJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIixudWxsKSxqNWU9KHZSKCkscHNuKSwkNWU9JDVlPWlkbjtsb24ocktlKSxGb24oInBlcm1Qcm9wcyIsW1tbQkgsUkhdLFtqSCwiZ2Vja28xXzgiXV0sW1tCSCxSSF0sW2pILCJpZTEwIl1dLFtbQkgsUkhdLFtqSCwiaWU4Il1dLFtbQkgsUkhdLFtqSCwiaWU5Il1dLFtbQkgsUkhdLFtqSCwic2FmYXJpIl1dXSksJDVlKG51bGwsImVsayIsbnVsbCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBkMDwidSI/ZDA6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM6W2Z1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKE4sQil7aWYoIShOIGluc3RhbmNlb2YgQikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYihOLEIpe2lmKCFOKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIEImJih0eXBlb2YgQj09Im9iamVjdCJ8fHR5cGVvZiBCPT0iZnVuY3Rpb24iKT9COk59ZnVuY3Rpb24gRShOLEIpe2lmKHR5cGVvZiBCIT0iZnVuY3Rpb24iJiZCIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIEIpO04ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQiYmQi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpOLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEImJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKE4sQik6Ti5fX3Byb3RvX189Qil9dmFyIF89ZigiLi9lbGstYXBpLmpzIikuZGVmYXVsdCxMPWZ1bmN0aW9uKE4pe0UoQixOKTtmdW5jdGlvbiBCKCl7dmFyIGo9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O20odGhpcyxCKTt2YXIgUj1PYmplY3QuYXNzaWduKHt9LGopLHo9ITE7dHJ5e2YucmVzb2x2ZSgid2ViLXdvcmtlciIpLHo9ITB9Y2F0Y2h7fWlmKGoud29ya2VyVXJsKWlmKHope3ZhciBLPWYoIndlYi13b3JrZXIiKTtSLndvcmtlckZhY3Rvcnk9ZnVuY3Rpb24odXQpe3JldHVybiBuZXcgSyh1dCl9fWVsc2UgY29uc29sZS53YXJuKGBXZWIgd29ya2VyIHJlcXVlc3RlZCBidXQgJ3dlYi13b3JrZXInIHBhY2thZ2Ugbm90IGluc3RhbGxlZC4gCkNvbnNpZGVyIGluc3RhbGxpbmcgdGhlIHBhY2thZ2Ugb3IgcGFzcyB5b3VyIG93biAnd29ya2VyRmFjdG9yeScgdG8gRUxLJ3MgY29uc3RydWN0b3IuCi4uLiBGYWxsaW5nIGJhY2sgdG8gbm9uLXdlYiB3b3JrZXIgdmVyc2lvbi5gKTtpZighUi53b3JrZXJGYWN0b3J5KXt2YXIgaXQ9ZigiLi9lbGstd29ya2VyLm1pbi5qcyIpLHN0PWl0LldvcmtlcjtSLndvcmtlckZhY3Rvcnk9ZnVuY3Rpb24odXQpe3JldHVybiBuZXcgc3QodXQpfX1yZXR1cm4gYih0aGlzLChCLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKEIpKS5jYWxsKHRoaXMsUikpfXJldHVybiBCfShfKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocC5leHBvcnRzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxwLmV4cG9ydHM9TCxMLmRlZmF1bHQ9TH0seyIuL2Vsay1hcGkuanMiOjEsIi4vZWxrLXdvcmtlci5taW4uanMiOjIsIndlYi13b3JrZXIiOjR9XSw0OltmdW5jdGlvbihmLHAsdil7cC5leHBvcnRzPVdvcmtlcn0se31dfSx7fSxbM10pKDMpfSl9KShranQpO3ZhciBjVWU9a2p0LmV4cG9ydHM7Y29uc3QgdVVlPUI3KGNVZSksRWp0PW5ldyB1VWU7bGV0IGl2PXt9O2NvbnN0IGxVZT17fTtsZXQgUDU9e307Y29uc3QgaFVlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHAsdixtLGIpe2NvbnN0IF89Zi5zZWxlY3QoYFtpZD0iJHthfSJdYCkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLEw9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKEwubWFwKGFzeW5jIGZ1bmN0aW9uKE4pe2NvbnN0IEI9aVtOXTtsZXQgaj0iZGVmYXVsdCI7Qi5jbGFzc2VzLmxlbmd0aD4wJiYoaj1CLmNsYXNzZXMuam9pbigiICIpKSxqPWorIiBmbG93Y2hhcnQtbGFiZWwiO2NvbnN0IFI9ZW0oQi5zdHlsZXMpO2xldCB6PUIudGV4dCE9PXZvaWQgMD9CLnRleHQ6Qi5pZDtjb25zdCBLPXt3aWR0aDowLGhlaWdodDowfSxpdD1be2lkOkIuaWQrIi13ZXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiV0VTVCJ9fSx7aWQ6Qi5pZCsiLWVhc3QiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJFQVNUIn19LHtpZDpCLmlkKyItc291dGgiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJTT1VUSCJ9fSx7aWQ6Qi5pZCsiLW5vcnRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiTk9SVEgifX1dO2xldCBzdD0wLHV0PSIiLGJ0PXt9O3N3aXRjaChCLnR5cGUpe2Nhc2Uicm91bmQiOnN0PTUsdXQ9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjp1dD0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjp1dD0icXVlc3Rpb24iLGJ0PXtwb3J0Q29uc3RyYWludHM6IkZJWEVEX1NJREUifTticmVhaztjYXNlImhleGFnb24iOnV0PSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6dXQ9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6dXQ9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0Ijp1dD0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6dXQ9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjp1dD0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOnV0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6dXQ9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjp1dD0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjp1dD0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjp1dD0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6dXQ9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjp1dD0icmVjdCI7YnJlYWs7Y2FzZSJkb3VibGVjaXJjbGUiOnV0PSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6dXQ9InJlY3QifWNvbnN0IG10PXtsYWJlbFN0eWxlOlIubGFiZWxTdHlsZSxzaGFwZTp1dCxsYWJlbFRleHQ6eixsYWJlbFR5cGU6Qi5sYWJlbFR5cGUscng6c3Qscnk6c3QsY2xhc3M6aixzdHlsZTpSLnN0eWxlLGlkOkIuaWQsbGluazpCLmxpbmssbGlua1RhcmdldDpCLmxpbmtUYXJnZXQsdG9vbHRpcDp2LmRiLmdldFRvb2x0aXAoQi5pZCl8fCIiLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoQi5pZCksaGF2ZUNhbGxiYWNrOkIuaGF2ZUNhbGxiYWNrLHdpZHRoOkIudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6Qi5kaXIsdHlwZTpCLnR5cGUscHJvcHM6Qi5wcm9wcyxwYWRkaW5nOkxlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9O2xldCB5dCxkdDtpZihtdC50eXBlIT09Imdyb3VwIilkdD1hd2FpdCB4QnQoXyxtdCxCLmRpcikseXQ9ZHQubm9kZSgpLmdldEJCb3goKTtlbHNle3AuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2Zzp3dCxiYm94Olh9PWF3YWl0IE9kKF8sbXQsdm9pZCAwLCEwKTtLLndpZHRoPVgud2lkdGgsSy53cmFwcGluZ1dpZHRoPUxlKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsSy5oZWlnaHQ9WC5oZWlnaHQsSy5sYWJlbE5vZGU9d3Qubm9kZSgpLG10LmxhYmVsRGF0YT1LfWNvbnN0IGh0PXtpZDpCLmlkLHBvcnRzOkIudHlwZT09PSJkaWFtb25kIj9pdDpbXSxsYXlvdXRPcHRpb25zOmJ0LGxhYmVsVGV4dDp6LGxhYmVsRGF0YTpLLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoQi5pZCksd2lkdGg6eXQ9PW51bGw/dm9pZCAwOnl0LndpZHRoLGhlaWdodDp5dD09bnVsbD92b2lkIDA6eXQuaGVpZ2h0LHR5cGU6Qi50eXBlLGVsOmR0LHBhcmVudDptLnBhcmVudEJ5SWRbQi5pZF19O1A1W210LmlkXT1odH0pKSxifSxUanQ9KGksYSxmKT0+e2NvbnN0IHA9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBwLlREPXAuVEIsVXQuaW5mbygiYWJjODgiLGYsYSxpKSxwW2ZdW2FdW2ldfSxDanQ9KGksYSxmKT0+e2lmKFV0LmluZm8oImdldE5leHRQb3J0IGFiYzg4Iix7bm9kZTppLGVkZ2VEaXJlY3Rpb246YSxncmFwaERpcmVjdGlvbjpmfSksIWl2W2ldKXN3aXRjaChmKXtjYXNlIlRCIjpjYXNlIlREIjppdltpXT17aW5Qb3NpdGlvbjoibm9ydGgiLG91dFBvc2l0aW9uOiJzb3V0aCJ9O2JyZWFrO2Nhc2UiQlQiOml2W2ldPXtpblBvc2l0aW9uOiJzb3V0aCIsb3V0UG9zaXRpb246Im5vcnRoIn07YnJlYWs7Y2FzZSJSTCI6aXZbaV09e2luUG9zaXRpb246ImVhc3QiLG91dFBvc2l0aW9uOiJ3ZXN0In07YnJlYWs7Y2FzZSJMUiI6aXZbaV09e2luUG9zaXRpb246Indlc3QiLG91dFBvc2l0aW9uOiJlYXN0In07YnJlYWt9Y29uc3QgcD1hPT09ImluIj9pdltpXS5pblBvc2l0aW9uOml2W2ldLm91dFBvc2l0aW9uO3JldHVybiBhPT09ImluIj9pdltpXS5pblBvc2l0aW9uPVRqdChpdltpXS5pblBvc2l0aW9uLGEsZik6aXZbaV0ub3V0UG9zaXRpb249VGp0KGl2W2ldLm91dFBvc2l0aW9uLGEsZikscH0sZlVlPShpLGEpPT57bGV0IGY9aS5zdGFydCxwPWkuZW5kO2NvbnN0IHY9ZixtPXAsYj1QNVtmXSxFPVA1W3BdO3JldHVybiFifHwhRT97c291cmNlOmYsdGFyZ2V0OnB9OihiLnR5cGU9PT0iZGlhbW9uZCImJihmPWAke2Z9LSR7Q2p0KGYsIm91dCIsYSl9YCksRS50eXBlPT09ImRpYW1vbmQiJiYocD1gJHtwfS0ke0NqdChwLCJpbiIsYSl9YCkse3NvdXJjZTpmLHRhcmdldDpwLHNvdXJjZUlkOnYsdGFyZ2V0SWQ6bX0pfSxkVWU9ZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2NvbnN0IHY9cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKTtsZXQgbT17fSxiPWEuZGIuZ2V0RGlyZWN0aW9uKCksRSxfO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBMPWVtKGkuZGVmYXVsdFN0eWxlKTtFPUwuc3R5bGUsXz1MLmxhYmVsU3R5bGV9cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihMKXtjb25zdCBOPSJMLSIrTC5zdGFydCsiLSIrTC5lbmQ7bVtOXT09PXZvaWQgMD8obVtOXT0wLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsTixtW05dKSk6KG1bTl0rKyxVdC5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLE4sbVtOXSkpO2xldCBCPU4rIi0iK21bTl07VXQuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsTixCLG1bTl0pO2NvbnN0IGo9IkxTLSIrTC5zdGFydCxSPSJMRS0iK0wuZW5kLHo9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaCh6Lm1pbmxlbj1MLmxlbmd0aHx8MSxMLnR5cGU9PT0iYXJyb3dfb3BlbiI/ei5hcnJvd2hlYWQ9Im5vbmUiOnouYXJyb3doZWFkPSJub3JtYWwiLHouYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLHouYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIixMLnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6ei5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6ei5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOnouYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjp6LmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgSz0iIixpdD0iIjtzd2l0Y2goTC5zdHJva2Upe2Nhc2Uibm9ybWFsIjpLPSJmaWxsOm5vbmU7IixFIT09dm9pZCAwJiYoSz1FKSxfIT09dm9pZCAwJiYoaXQ9Xyksei50aGlja25lc3M9Im5vcm1hbCIsei5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOnoudGhpY2tuZXNzPSJub3JtYWwiLHoucGF0dGVybj0iZG90dGVkIix6LnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjp6LnRoaWNrbmVzcz0idGhpY2siLHoucGF0dGVybj0ic29saWQiLHouc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWt9aWYoTC5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgZHQ9ZW0oTC5zdHlsZSk7Sz1kdC5zdHlsZSxpdD1kdC5sYWJlbFN0eWxlfXouc3R5bGU9ei5zdHlsZSs9Syx6LmxhYmVsU3R5bGU9ei5sYWJlbFN0eWxlKz1pdCxMLmludGVycG9sYXRlIT09dm9pZCAwP3ouY3VydmU9WDIoTC5pbnRlcnBvbGF0ZSxpZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/ei5jdXJ2ZT1YMihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxpZyk6ei5jdXJ2ZT1YMihsVWUuY3VydmUsaWcpLEwudGV4dD09PXZvaWQgMD9MLnN0eWxlIT09dm9pZCAwJiYoei5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih6LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix6LmxhYmVscG9zPSJjIiksei5sYWJlbFR5cGU9TC5sYWJlbFR5cGUsei5sYWJlbD1MLnRleHQucmVwbGFjZShZci5saW5lQnJlYWtSZWdleCxgCmApLEwuc3R5bGU9PT12b2lkIDAmJih6LnN0eWxlPXouc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLHoubGFiZWxTdHlsZT16LmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSx6LmlkPUIsei5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK2orIiAiK1I7Y29uc3Qgc3Q9Q0J0KHYseikse3NvdXJjZTp1dCx0YXJnZXQ6YnQsc291cmNlSWQ6bXQsdGFyZ2V0SWQ6eXR9PWZVZShMLGIpO1V0LmRlYnVnKCJhYmM3OCBzb3VyY2UgYW5kIHRhcmdldCIsdXQsYnQpLGYuZWRnZXMucHVzaCh7aWQ6ImUiK0wuc3RhcnQrTC5lbmQsc291cmNlczpbdXRdLHRhcmdldHM6W2J0XSxzb3VyY2VJZDptdCx0YXJnZXRJZDp5dCxsYWJlbEVsOnN0LGxhYmVsczpbe3dpZHRoOnoud2lkdGgsaGVpZ2h0OnouaGVpZ2h0LG9yZ1dpZHRoOnoud2lkdGgsb3JnSGVpZ2h0OnouaGVpZ2h0LHRleHQ6ei5sYWJlbCxsYXlvdXRPcHRpb25zOnsiZWRnZUxhYmVscy5pbmxpbmUiOiJ0cnVlIiwiZWRnZUxhYmVscy5wbGFjZW1lbnQiOiJDRU5URVIifX1dLGVkZ2VEYXRhOnp9KX0pLGZ9LGdVZT1mdW5jdGlvbihpLGEsZixwLHYpe2xldCBtPSIiO3N3aXRjaChwJiYobT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxtPW0ucmVwbGFjZSgvXCgvZywiXFwoIiksbT1tLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItbG9sbGlwb3BTdGFydCkiKTticmVha31zd2l0Y2goYS5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit2KyJfIitmKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3YrIl8iK2YrIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdisiXyIrZisiLWxvbGxpcG9wRW5kKSIpO2JyZWFrfX0scFVlPWZ1bmN0aW9uKGksYSl7cmV0dXJuIFV0LmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLGEuZGIuZ2V0Q2xhc3NlcygpfSxiVWU9ZnVuY3Rpb24oaSl7Y29uc3QgYT17cGFyZW50QnlJZDp7fSxjaGlsZHJlbkJ5SWQ6e319LGY9aS5nZXRTdWJHcmFwaHMoKTtyZXR1cm4gVXQuaW5mbygiU3ViZ3JhcGhzIC0gIixmKSxmLmZvckVhY2goZnVuY3Rpb24ocCl7cC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHYpe2EucGFyZW50QnlJZFt2XT1wLmlkLGEuY2hpbGRyZW5CeUlkW3AuaWRdPT09dm9pZCAwJiYoYS5jaGlsZHJlbkJ5SWRbcC5pZF09W10pLGEuY2hpbGRyZW5CeUlkW3AuaWRdLnB1c2godil9KX0pLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLmlkLGEucGFyZW50QnlJZFtwLmlkXSE9PXZvaWQgMCYmYS5wYXJlbnRCeUlkW3AuaWRdfSksYX0sdlVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPW9VZShpLGEsZik7aWYocD09PXZvaWQgMHx8cD09PSJyb290IilyZXR1cm57eDowLHk6MH07Y29uc3Qgdj1QNVtwXS5vZmZzZXQ7cmV0dXJue3g6di5wb3NYLHk6di5wb3NZfX0sd1VlPWZ1bmN0aW9uKGksYSxmLHAsdixtKXtjb25zdCBiPXZVZShhLnNvdXJjZUlkLGEudGFyZ2V0SWQsdiksRT1hLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsXz1hLnNlY3Rpb25zWzBdLmVuZFBvaW50LE49KGEuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9hLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChidD0+W2J0LngrYi54LGJ0LnkrYi55XSksQj1bW0UueCtiLngsRS55K2IueV0sLi4uTixbXy54K2IueCxfLnkrYi55XV0se3g6aix5OlJ9PVRCdChhLmVkZ2VEYXRhKSx6PVo3KCkueChqKS55KFIpLmN1cnZlKGlnKSxLPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIseihCKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrZi5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLGl0PWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxzdD15cihpdC5ub2RlKCkuYXBwZW5kQ2hpbGQoYS5sYWJlbEVsKSksdXQ9c3Qubm9kZSgpLmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7c3QuYXR0cigid2lkdGgiLHV0LndpZHRoKSxzdC5hdHRyKCJoZWlnaHQiLHV0LmhlaWdodCksaXQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7YS5sYWJlbHNbMF0ueCtiLnh9LCAke2EubGFiZWxzWzBdLnkrYi55fSlgKSxnVWUoSyxmLHAudHlwZSxwLmFycm93TWFya2VyQWJzb2x1dGUsbSl9LF9qdD0oaSxhKT0+e2kuZm9yRWFjaChmPT57Zi5jaGlsZHJlbnx8KGYuY2hpbGRyZW49W10pO2NvbnN0IHA9YS5jaGlsZHJlbkJ5SWRbZi5pZF07cCYmcC5mb3JFYWNoKHY9PntmLmNoaWxkcmVuLnB1c2goUDVbdl0pfSksX2p0KGYuY2hpbGRyZW4sYSl9KX0sbVVlPWFzeW5jIGZ1bmN0aW9uKGksYSxmLHApe3ZhciBodDtwLmRiLmNsZWFyKCksUDU9e30saXY9e30scC5kYi5zZXRHZW4oImdlbi0yIikscC5wYXJzZXIucGFyc2UoaSk7Y29uc3Qgdj15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigic3R5bGUiLCJoZWlnaHQ6NDAwcHgiKS5hdHRyKCJpZCIsImN5Iik7bGV0IG09e2lkOiJyb290IixsYXlvdXRPcHRpb25zOnsiZWxrLmhpZXJhcmNoeUhhbmRsaW5nIjoiSU5DTFVERV9DSElMRFJFTiIsIm9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIjoiW3RvcD0xMDAsIGxlZnQ9MTAwLCBib3R0b209MTEwLCByaWdodD0xMTBdIiwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiOiIzMCIsImVsay5kaXJlY3Rpb24iOiJET1dOIn0sY2hpbGRyZW46W10sZWRnZXM6W119O3N3aXRjaChVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlciIsRWp0KSxwLmRiLmdldERpcmVjdGlvbigpKXtjYXNlIkJUIjptLmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iVVAiO2JyZWFrO2Nhc2UiVEIiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJET1dOIjticmVhaztjYXNlIkxSIjptLmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iUklHSFQiO2JyZWFrO2Nhc2UiUkwiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJMRUZUIjticmVha31jb25zdHtzZWN1cml0eUxldmVsOkUsZmxvd2NoYXJ0Ol99PUxlKCk7bGV0IEw7RT09PSJzYW5kYm94IiYmKEw9eXIoIiNpIithKSk7Y29uc3QgTj15cihFPT09InNhbmRib3giP0wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEI9RT09PSJzYW5kYm94Ij9MLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LGo9Ti5zZWxlY3QoYFtpZD0iJHthfSJdYCk7SUZ0KGosWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0scC50eXBlLGEpO2NvbnN0IHo9cC5kYi5nZXRWZXJ0aWNlcygpO2xldCBLO2NvbnN0IGl0PXAuZGIuZ2V0U3ViR3JhcGhzKCk7VXQuaW5mbygiU3ViZ3JhcGhzIC0gIixpdCk7Zm9yKGxldCB3dD1pdC5sZW5ndGgtMTt3dD49MDt3dC0tKUs9aXRbd3RdLHAuZGIuYWRkVmVydGV4KEsuaWQse3RleHQ6Sy50aXRsZSx0eXBlOksubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxLLmNsYXNzZXMsSy5kaXIpO2NvbnN0IHN0PWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSx1dD1iVWUocC5kYik7bT1hd2FpdCBoVWUoeixhLE4sQixwLHV0LG0pO2NvbnN0IGJ0PWouaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLG10PXAuZGIuZ2V0RWRnZXMoKTttPWRVZShtdCxwLG0saiksT2JqZWN0LmtleXMoUDUpLmZvckVhY2god3Q9Pntjb25zdCBYPVA1W3d0XTtYLnBhcmVudHx8bS5jaGlsZHJlbi5wdXNoKFgpLHV0LmNoaWxkcmVuQnlJZFt3dF0hPT12b2lkIDAmJihYLmxhYmVscz1be3RleHQ6WC5sYWJlbFRleHQsbGF5b3V0T3B0aW9uczp7Im5vZGVMYWJlbHMucGxhY2VtZW50IjoiW0hfQ0VOVEVSLCBWX1RPUCwgSU5TSURFXSJ9LHdpZHRoOlgubGFiZWxEYXRhLndpZHRoLGhlaWdodDpYLmxhYmVsRGF0YS5oZWlnaHR9XSxkZWxldGUgWC54LGRlbGV0ZSBYLnksZGVsZXRlIFgud2lkdGgsZGVsZXRlIFguaGVpZ2h0KX0pLF9qdChtLmNoaWxkcmVuLHV0KSxVdC5pbmZvKCJhZnRlciBsYXlvdXQiLEpTT04uc3RyaW5naWZ5KG0sbnVsbCwyKSk7Y29uc3QgZHQ9YXdhaXQgRWp0LmxheW91dChtKTtTanQoMCwwLGR0LmNoaWxkcmVuLGosc3QscCwwKSxVdC5pbmZvKCJhZnRlciBsYXlvdXQiLGR0KSwoaHQ9ZHQuZWRnZXMpPT1udWxsfHxodC5tYXAod3Q9Pnt3VWUoYnQsd3Qsd3QuZWRnZURhdGEscCx1dCxhKX0pLGNUKHt9LGosXy5kaWFncmFtUGFkZGluZyxfLnVzZU1heFdpZHRoKSx2LnJlbW92ZSgpfSxTanQ9KGksYSxmLHAsdixtLGIpPT57Zi5mb3JFYWNoKGZ1bmN0aW9uKEUpe2lmKEUpaWYoUDVbRS5pZF0ub2Zmc2V0PXtwb3NYOkUueCtpLHBvc1k6RS55K2EseDppLHk6YSxkZXB0aDpiLHdpZHRoOkUud2lkdGgsaGVpZ2h0OkUuaGVpZ2h0fSxFLnR5cGU9PT0iZ3JvdXAiKXtjb25zdCBfPXYuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCIpO18uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCBzdWJncmFwaC1sdmwtIitiJTUrIiBub2RlIikuYXR0cigieCIsRS54K2kpLmF0dHIoInkiLEUueSthKS5hdHRyKCJ3aWR0aCIsRS53aWR0aCkuYXR0cigiaGVpZ2h0IixFLmhlaWdodCk7Y29uc3QgTD1fLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxOPUxlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/RS5sYWJlbERhdGEud2lkdGgvMjowO0wuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RS5sYWJlbHNbMF0ueCtpK0UueCtOfSwgJHtFLmxhYmVsc1swXS55K2ErRS55KzN9KWApLEwubm9kZSgpLmFwcGVuZENoaWxkKEUubGFiZWxEYXRhLmxhYmVsTm9kZSksVXQuaW5mbygiSWQgKFVHSCk9ICIsRS50eXBlLEUubGFiZWxzKX1lbHNlIFV0LmluZm8oIklkIChVR0gpPSAiLEUuaWQpLEUuZWwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RS54K2krRS53aWR0aC8yfSwgJHtFLnkrYStFLmhlaWdodC8yfSlgKX0pLGYuZm9yRWFjaChmdW5jdGlvbihFKXtFJiZFLnR5cGU9PT0iZ3JvdXAiJiZTanQoaStFLngsYStFLnksRS5jaGlsZHJlbixwLHYsbSxiKzEpfSl9LHlVZT17Z2V0Q2xhc3NlczpwVWUsZHJhdzptVWV9LHhVZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7Zjw1O2YrKylhKz1gCiAgICAgIC5zdWJncmFwaC1sdmwtJHtmfSB7CiAgICAgICAgZmlsbDogJHtpW2BzdXJmYWNlJHtmfWBdfTsKICAgICAgICBzdHJva2U6ICR7aVtgc3VyZmFjZVBlZXIke2Z9YF19OwogICAgICB9CiAgICBgO3JldHVybiBhfSxrVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOmpJZSxyZW5kZXJlcjp5VWUscGFyc2VyOiRkdCxzdHlsZXM6aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9CiAgLnN1YmdyYXBoIHsKICAgIHN0cm9rZS13aWR0aDoyOwogICAgcng6MzsKICB9CiAgLy8gLnN1YmdyYXBoLWx2bC0xIHsKICAvLyAgIGZpbGw6I2NjYzsKICAvLyAgIC8vIHN0cm9rZTpibGFjazsKICAvLyB9CgogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KCiAgJHt4VWUoaSl9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihqLFIseixLKXtmb3Ioej16fHx7fSxLPWoubGVuZ3RoO0stLTt6W2pbS11dPVIpO3JldHVybiB6fSxhPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMjAsMjFdLGY9WzEsOV0scD1bMSwxMF0sdj1bMSwxMV0sbT1bMSwxMl0sYj1bMSwxM10sRT1bMSwxNl0sXz1bMSwxN10sTD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIseixLLGl0LHN0LHV0LGJ0KXt2YXIgbXQ9dXQubGVuZ3RoLTE7c3dpdGNoKHN0KXtjYXNlIDE6cmV0dXJuIHV0W210LTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOnV0W210LTFdLnB1c2godXRbbXRdKSx0aGlzLiQ9dXRbbXQtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9dXRbbXRdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODppdC5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZSh1dFttdF0uc3Vic3RyKDYpKSx0aGlzLiQ9dXRbbXRdLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPXV0W210XS50cmltKCksaXQuZ2V0Q29tbW9uRGIoKS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMTp0aGlzLiQ9dXRbbXRdLnRyaW0oKSxpdC5nZXRDb21tb25EYigpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjppdC5hZGRTZWN0aW9uKHV0W210XS5zdWJzdHIoOCkpLHRoaXMuJD11dFttdF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6aXQuYWRkVGFzayh1dFttdF0sMCwiIiksdGhpcy4kPXV0W210XTticmVhaztjYXNlIDE2Oml0LmFkZEV2ZW50KHV0W210XS5zdWJzdHIoMikpLHRoaXMuJD11dFttdF07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOmYsMTI6cCwxNDp2LDE2Om0sMTc6YiwxODoxNCwxOToxNSwyMDpFLDIxOl99LGkoYSxbMiw3XSx7MTpbMiwxXX0pLGkoYSxbMiwzXSksezk6MTgsMTE6ZiwxMjpwLDE0OnYsMTY6bSwxNzpiLDE4OjE0LDE5OjE1LDIwOkUsMjE6X30saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0saShhLFsyLDExXSksaShhLFsyLDEyXSksaShhLFsyLDEzXSksaShhLFsyLDE0XSksaShhLFsyLDE1XSksaShhLFsyLDE2XSksaShhLFsyLDRdKSxpKGEsWzIsOV0pLGkoYSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOmZ1bmN0aW9uKFIseil7aWYoei5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFIpO2Vsc2V7dmFyIEs9bmV3IEVycm9yKFIpO3Rocm93IEsuaGFzaD16LEt9fSxwYXJzZTpmdW5jdGlvbihSKXt2YXIgej10aGlzLEs9WzBdLGl0PVtdLHN0PVtudWxsXSx1dD1bXSxidD10aGlzLnRhYmxlLG10PSIiLHl0PTAsZHQ9MCxodD0yLHd0PTEsWD11dC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwdD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFU9e3l5Ont9fTtmb3IodmFyIHh0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseHQpJiYoVS55eVt4dF09dGhpcy55eVt4dF0pO3B0LnNldElucHV0KFIsVS55eSksVS55eS5sZXhlcj1wdCxVLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBwdC55eWxsb2M+InUiJiYocHQueXlsbG9jPXt9KTt2YXIgbnQ9cHQueXlsbG9jO3V0LnB1c2gobnQpO3ZhciBPdD1wdC5vcHRpb25zJiZwdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgVS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1VLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE50KCl7dmFyIHZlO3JldHVybiB2ZT1pdC5wb3AoKXx8cHQubGV4KCl8fHd0LHR5cGVvZiB2ZSE9Im51bWJlciImJih2ZSBpbnN0YW5jZW9mIEFycmF5JiYoaXQ9dmUsdmU9aXQucG9wKCkpLHZlPXouc3ltYm9sc19bdmVdfHx2ZSksdmV9Zm9yKHZhciBxdCxDdCxaLFR0LEh0PXt9LEl0LEZ0LGtlLHBuOzspe2lmKEN0PUtbSy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tDdF0/Wj10aGlzLmRlZmF1bHRBY3Rpb25zW0N0XTooKHF0PT09bnVsbHx8dHlwZW9mIHF0PiJ1IikmJihxdD1OdCgpKSxaPWJ0W0N0XSYmYnRbQ3RdW3F0XSksdHlwZW9mIFo+InUifHwhWi5sZW5ndGh8fCFaWzBdKXt2YXIgTWU9IiI7cG49W107Zm9yKEl0IGluIGJ0W0N0XSl0aGlzLnRlcm1pbmFsc19bSXRdJiZJdD5odCYmcG4ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0l0XSsiJyIpO3B0LnNob3dQb3NpdGlvbj9NZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5dCsxKStgOgpgK3B0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcG4uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txdF18fHF0KSsiJyI6TWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeXQrMSkrIjogVW5leHBlY3RlZCAiKyhxdD09d3Q/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcXRdfHxxdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWUse3RleHQ6cHQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3F0XXx8cXQsbGluZTpwdC55eWxpbmVubyxsb2M6bnQsZXhwZWN0ZWQ6cG59KX1pZihaWzBdaW5zdGFuY2VvZiBBcnJheSYmWi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0N0KyIsIHRva2VuOiAiK3F0KTtzd2l0Y2goWlswXSl7Y2FzZSAxOksucHVzaChxdCksc3QucHVzaChwdC55eXRleHQpLHV0LnB1c2gocHQueXlsbG9jKSxLLnB1c2goWlsxXSkscXQ9bnVsbCxkdD1wdC55eWxlbmcsbXQ9cHQueXl0ZXh0LHl0PXB0Lnl5bGluZW5vLG50PXB0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoRnQ9dGhpcy5wcm9kdWN0aW9uc19bWlsxXV1bMV0sSHQuJD1zdFtzdC5sZW5ndGgtRnRdLEh0Ll8kPXtmaXJzdF9saW5lOnV0W3V0Lmxlbmd0aC0oRnR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp1dFt1dC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp1dFt1dC5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnV0W3V0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sT3QmJihIdC5fJC5yYW5nZT1bdXRbdXQubGVuZ3RoLShGdHx8MSldLnJhbmdlWzBdLHV0W3V0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShIdCxbbXQsZHQseXQsVS55eSxaWzFdLHN0LHV0XS5jb25jYXQoWCkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O0Z0JiYoSz1LLnNsaWNlKDAsLTEqRnQqMiksc3Q9c3Quc2xpY2UoMCwtMSpGdCksdXQ9dXQuc2xpY2UoMCwtMSpGdCkpLEsucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1taWzFdXVswXSksc3QucHVzaChIdC4kKSx1dC5wdXNoKEh0Ll8kKSxrZT1idFtLW0subGVuZ3RoLTJdXVtLW0subGVuZ3RoLTFdXSxLLnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxOPWZ1bmN0aW9uKCl7dmFyIGo9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oeixLKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHosSyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3Ioeil9LHNldElucHV0OmZ1bmN0aW9uKFIseil7cmV0dXJuIHRoaXMueXk9enx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Uix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Uix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Uix0aGlzLm1hdGNoZWQrPVI7dmFyIHo9Ui5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHo/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFJ9LHVucHV0OmZ1bmN0aW9uKFIpe3ZhciB6PVIubGVuZ3RoLEs9Ui5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVIrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXopLHRoaXMub2Zmc2V0LT16O3ZhciBpdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxLLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Sy5sZW5ndGgtMSk7dmFyIHN0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLPyhLLmxlbmd0aD09PWl0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkraXRbaXQubGVuZ3RoLUsubGVuZ3RoXS5sZW5ndGgtS1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXp9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bc3RbMF0sc3RbMF0rdGhpcy55eWxlbmctel0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShSKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUi5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Iuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm1hdGNoO3JldHVybiBSLmxlbmd0aDwyMCYmKFIrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVIubGVuZ3RoKSksKFIuc3Vic3RyKDAsMjApKyhSLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUj10aGlzLnBhc3RJbnB1dCgpLHo9bmV3IEFycmF5KFIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUit0aGlzLnVwY29taW5nSW5wdXQoKStgCmAreisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oUix6KXt2YXIgSyxpdCxzdDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoc3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoc3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaXQ9UlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaXQmJih0aGlzLnl5bGluZW5vKz1pdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjppdD9pdFtpdC5sZW5ndGgtMV0ubGVuZ3RoLWl0W2l0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9UlswXSx0aGlzLm1hdGNoKz1SWzBdLHRoaXMubWF0Y2hlcz1SLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVJbMF0sSz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyx6LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEspcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHV0IGluIHN0KXRoaXNbdXRdPXN0W3V0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBSLHosSyxpdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBzdD10aGlzLl9jdXJyZW50UnVsZXMoKSx1dD0wO3V0PHN0Lmxlbmd0aDt1dCsrKWlmKEs9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzdFt1dF1dKSxLJiYoIXp8fEtbMF0ubGVuZ3RoPnpbMF0ubGVuZ3RoKSl7aWYoej1LLGl0PXV0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFI9dGhpcy50ZXN0X21hdGNoKEssc3RbdXRdKSxSIT09ITEpcmV0dXJuIFI7aWYodGhpcy5fYmFja3RyYWNrKXt6PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHo/KFI9dGhpcy50ZXN0X21hdGNoKHosc3RbaXRdKSxSIT09ITE/UjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5uZXh0KCk7cmV0dXJuIHp8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh6KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgej10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB6PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oeil7cmV0dXJuIHo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh6fHwwKSx6Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbel06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeil7dGhpcy5iZWdpbih6KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih6LEssaXQsc3Qpe3N3aXRjaChpdCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGp9KCk7TC5sZXhlcj1OO2Z1bmN0aW9uIEIoKXt0aGlzLnl5PXt9fXJldHVybiBCLnByb3RvdHlwZT1MLEwuUGFyc2VyPUIsbmV3IEJ9KCk7amd0LnBhcnNlcj1qZ3Q7Y29uc3QgRVVlPWpndDtsZXQgcEw9IiIsQWp0PTA7Y29uc3QgJGd0PVtdLEdLPVtdLGJMPVtdLExqdD0oKT0+TE90LE1qdD1mdW5jdGlvbigpeyRndC5sZW5ndGg9MCxHSy5sZW5ndGg9MCxwTD0iIixiTC5sZW5ndGg9MCxhcCgpfSxJanQ9ZnVuY3Rpb24oaSl7cEw9aSwkZ3QucHVzaChpKX0sRGp0PWZ1bmN0aW9uKCl7cmV0dXJuICRndH0sT2p0PWZ1bmN0aW9uKCl7bGV0IGk9Qmp0KCk7Y29uc3QgYT0xMDA7bGV0IGY9MDtmb3IoOyFpJiZmPGE7KWk9Qmp0KCksZisrO3JldHVybiBHSy5wdXNoKC4uLmJMKSxHS30sTmp0PWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPXtpZDpBanQrKyxzZWN0aW9uOnBMLHR5cGU6cEwsdGFzazppLHNjb3JlOmF8fDAsZXZlbnRzOmY/W2ZdOltdfTtiTC5wdXNoKHApfSxQanQ9ZnVuY3Rpb24oaSl7YkwuZmluZChmPT5mLmlkPT09QWp0LTEpLmV2ZW50cy5wdXNoKGkpfSxGanQ9ZnVuY3Rpb24oaSl7Y29uc3QgYT17c2VjdGlvbjpwTCx0eXBlOnBMLGRlc2NyaXB0aW9uOmksdGFzazppLGNsYXNzZXM6W119O0dLLnB1c2goYSl9LEJqdD1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24oZil7cmV0dXJuIGJMW2ZdLnByb2Nlc3NlZH07bGV0IGE9ITA7Zm9yKGNvbnN0W2YscF1vZiBiTC5lbnRyaWVzKCkpaShmKSxhPWEmJnAucHJvY2Vzc2VkO3JldHVybiBhfSxUVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZEV2ZW50OlBqdCxhZGRTZWN0aW9uOklqdCxhZGRUYXNrOk5qdCxhZGRUYXNrT3JnOkZqdCxjbGVhcjpNanQsZGVmYXVsdDp7Y2xlYXI6TWp0LGdldENvbW1vbkRiOkxqdCxhZGRTZWN0aW9uOklqdCxnZXRTZWN0aW9uczpEanQsZ2V0VGFza3M6T2p0LGFkZFRhc2s6Tmp0LGFkZFRhc2tPcmc6Rmp0LGFkZEV2ZW50OlBqdH0sZ2V0Q29tbW9uRGI6TGp0LGdldFNlY3Rpb25zOkRqdCxnZXRUYXNrczpPanR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQ1VlPTEyLFZLPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1pLmFwcGVuZCgicmVjdCIpO3JldHVybiBmLmF0dHIoIngiLGEueCksZi5hdHRyKCJ5IixhLnkpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigid2lkdGgiLGEud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixhLmhlaWdodCksZi5hdHRyKCJyeCIsYS5yeCksZi5hdHRyKCJyeSIsYS5yeSksYS5jbGFzcyE9PXZvaWQgMCYmZi5hdHRyKCJjbGFzcyIsYS5jbGFzcyksZn0sX1VlPWZ1bmN0aW9uKGksYSl7Y29uc3QgcD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gpLmF0dHIoImN5IixhLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSx2PWkuYXBwZW5kKCJnIik7di5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixhLmN4LTE1LzMpLmF0dHIoImN5IixhLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSx2LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3grMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIG0oXyl7Y29uc3QgTD1MQSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krMikrIikiKX1mdW5jdGlvbiBiKF8pe2NvbnN0IEw9TEEoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7Xy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsTCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5jeCsiLCIrKGEuY3krNykrIikiKX1mdW5jdGlvbiBFKF8pe18uYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGEuY3gtNSkuYXR0cigieTEiLGEuY3krNykuYXR0cigieDIiLGEuY3grNSkuYXR0cigieTIiLGEuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gYS5zY29yZT4zP20odik6YS5zY29yZTwzP2Iodik6RSh2KSxwfSxTVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gZi5hdHRyKCJjeCIsYS5jeCksZi5hdHRyKCJjeSIsYS5jeSksZi5hdHRyKCJjbGFzcyIsImFjdG9yLSIrYS5wb3MpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigiciIsYS5yKSxmLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixmLmNsYXNzKSxhLnRpdGxlIT09dm9pZCAwJiZmLmFwcGVuZCgidGl0bGUiKS50ZXh0KGEudGl0bGUpLGZ9LFJqdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixhLngpLHAuYXR0cigieSIsYS55KSxwLmF0dHIoImNsYXNzIiwibGVnZW5kIikscC5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSxhLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCB2PXAuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiB2LmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksdi50ZXh0KGYpLHB9LEFVZT1mdW5jdGlvbihpLGEpe2Z1bmN0aW9uIGYodixtLGIsRSxfKXtyZXR1cm4gdisiLCIrbSsiICIrKHYrYikrIiwiK20rIiAiKyh2K2IpKyIsIisobStFLV8pKyIgIisoditiLV8qMS4yKSsiLCIrKG0rRSkrIiAiK3YrIiwiKyhtK0UpfWNvbnN0IHA9aS5hcHBlbmQoInBvbHlnb24iKTtwLmF0dHIoInBvaW50cyIsZihhLngsYS55LDUwLDIwLDcpKSxwLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxhLnk9YS55K2EubGFiZWxNYXJnaW4sYS54PWEueCsuNSphLmxhYmVsTWFyZ2luLFJqdChpLGEpfSxMVWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoImciKSx2PXpndCgpO3YueD1hLngsdi55PWEueSx2LmZpbGw9YS5maWxsLHYud2lkdGg9Zi53aWR0aCx2LmhlaWdodD1mLmhlaWdodCx2LmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW0sdi5yeD0zLHYucnk9MyxWSyhwLHYpLCRqdChmKShhLnRleHQscCx2Lngsdi55LHYud2lkdGgsdi5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW19LGYsYS5jb2xvdXIpfTtsZXQgamp0PS0xO2NvbnN0IE1VZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1hLngrZi53aWR0aC8yLHY9aS5hcHBlbmQoImciKTtqanQrKztjb25zdCBtPTMwMCs1KjMwO3YuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIitqanQpLmF0dHIoIngxIixwKS5hdHRyKCJ5MSIsYS55KS5hdHRyKCJ4MiIscCkuYXR0cigieTIiLG0pLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxfVWUodix7Y3g6cCxjeTozMDArKDUtYS5zY29yZSkqMzAsc2NvcmU6YS5zY29yZX0pO2NvbnN0IGI9emd0KCk7Yi54PWEueCxiLnk9YS55LGIuZmlsbD1hLmZpbGwsYi53aWR0aD1mLndpZHRoLGIuaGVpZ2h0PWYuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrYS5udW0sYi5yeD0zLGIucnk9MyxWSyh2LGIpLGEueCsxNCwkanQoZikoYS50YXNrLHYsYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LHtjbGFzczoidGFzayJ9LGYsYS5jb2xvdXIpfSxJVWU9ZnVuY3Rpb24oaSxhKXtWSyhpLHt4OmEuc3RhcnR4LHk6YS5zdGFydHksd2lkdGg6YS5zdG9weC1hLnN0YXJ0eCxoZWlnaHQ6YS5zdG9weS1hLnN0YXJ0eSxmaWxsOmEuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxEVWU9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LHpndD1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LCRqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrTC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixCKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHYpO3AoaixOKX1mdW5jdGlvbiBhKHYsbSxiLEUsXyxMLE4sQixqKXtjb25zdHt0YXNrRm9udFNpemU6Uix0YXNrRm9udEZhbWlseTp6fT1CLEs9di5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBpdD0wO2l0PEsubGVuZ3RoO2l0Kyspe2NvbnN0IHN0PWl0KlItUiooSy5sZW5ndGgtMSkvMix1dD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixqKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLHopO3V0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK18vMikuYXR0cigiZHkiLHN0KS50ZXh0KEtbaXRdKSx1dC5hdHRyKCJ5IixFK0wvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAodXQsTil9fWZ1bmN0aW9uIGYodixtLGIsRSxfLEwsTixCKXtjb25zdCBqPW0uYXBwZW5kKCJzd2l0Y2giKSx6PWouYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsTCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHYpLGEodixqLGIsRSxfLEwsTixCKSxwKHosTil9ZnVuY3Rpb24gcCh2LG0pe2Zvcihjb25zdCBiIGluIG0pYiBpbiBtJiZ2LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIHYudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp2LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLE9VZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07ZnVuY3Rpb24gemp0KGksYSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9eXIodGhpcykscD1mLnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSx2LG09W10sYj0xLjEsRT1mLmF0dHIoInkiKSxfPXBhcnNlRmxvYXQoZi5hdHRyKCJkeSIpKSxMPWYudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsRSkuYXR0cigiZHkiLF8rImVtIik7Zm9yKGxldCBOPTA7TjxwLmxlbmd0aDtOKyspdj1wW3AubGVuZ3RoLTEtTl0sbS5wdXNoKHYpLEwudGV4dChtLmpvaW4oIiAiKS50cmltKCkpLChMLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5hfHx2PT09Ijxicj4iKSYmKG0ucG9wKCksTC50ZXh0KG0uam9pbigiICIpLnRyaW0oKSksdj09PSI8YnI+Ij9tPVsiIl06bT1bdl0sTD1mLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixFKS5hdHRyKCJkeSIsYisiZW0iKS50ZXh0KHYpKX0pfWNvbnN0IE5VZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB2PWYlQ1VlLTEsbT1pLmFwcGVuZCgiZyIpO2Euc2VjdGlvbj12LG0uYXR0cigiY2xhc3MiLChhLmNsYXNzP2EuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK3YpKTtjb25zdCBiPW0uYXBwZW5kKCJnIiksRT1tLmFwcGVuZCgiZyIpLEw9RS5hcHBlbmQoInRleHQiKS50ZXh0KGEuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoemp0LGEud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksTj1wLmZvbnRTaXplJiZwLmZvbnRTaXplLnJlcGxhY2U/cC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnAuZm9udFNpemU7cmV0dXJuIGEuaGVpZ2h0PUwuaGVpZ2h0K04qMS4xKi41K2EucGFkZGluZyxhLmhlaWdodD1NYXRoLm1heChhLmhlaWdodCxhLm1heEhlaWdodCksYS53aWR0aD1hLndpZHRoKzIqYS5wYWRkaW5nLEUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS53aWR0aC8yKyIsICIrYS5wYWRkaW5nLzIrIikiKSxGVWUoYixhLHYpLGF9LFBVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLG09cC5hcHBlbmQoInRleHQiKS50ZXh0KGEuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoemp0LGEud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksYj1mLmZvbnRTaXplJiZmLmZvbnRTaXplLnJlcGxhY2U/Zi5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOmYuZm9udFNpemU7cmV0dXJuIHAucmVtb3ZlKCksbS5oZWlnaHQrYioxLjEqLjUrYS5wYWRkaW5nfSxGVWU9ZnVuY3Rpb24oaSxhLGYpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrYS50eXBlKS5hdHRyKCJkIixgTTAgJHthLmhlaWdodC01fSB2JHstYS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Eud2lkdGgtMio1fSBxNSwwIDUsNSB2JHthLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK2YpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsYS5oZWlnaHQpLmF0dHIoIngyIixhLndpZHRoKS5hdHRyKCJ5MiIsYS5oZWlnaHQpfSxBVD17ZHJhd1JlY3Q6VkssZHJhd0NpcmNsZTpTVWUsZHJhd1NlY3Rpb246TFVlLGRyYXdUZXh0OlJqdCxkcmF3TGFiZWw6QVVlLGRyYXdUYXNrOk1VZSxkcmF3QmFja2dyb3VuZFJlY3Q6SVVlLGdldFRleHRPYmo6RFVlLGdldE5vdGVSZWN0OnpndCxpbml0R3JhcGhpY3M6T1VlLGRyYXdOb2RlOk5VZSxnZXRWaXJ0dWFsTm9kZUhlaWdodDpQVWV9LEJVZT1mdW5jdGlvbihpLGEsZixwKXt2YXIgWCxwdDtjb25zdCB2PUxlKCksbT12LmxlZnRNYXJnaW4/PzUwO1V0LmRlYnVnKCJ0aW1lbGluZSIscC5kYik7Y29uc3QgYj12LnNlY3VyaXR5TGV2ZWw7bGV0IEU7Yj09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgTD15cihiPT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrYSk7TC5hcHBlbmQoImciKTtjb25zdCBOPXAuZGIuZ2V0VGFza3MoKSxCPXAuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtVdC5kZWJ1ZygidGFzayIsTiksQVQuaW5pdEdyYXBoaWNzKEwpO2NvbnN0IGo9cC5kYi5nZXRTZWN0aW9ucygpO1V0LmRlYnVnKCJzZWN0aW9ucyIsaik7bGV0IFI9MCx6PTAsSz0wLGl0PTAsc3Q9NTArbSx1dD01MDtpdD01MDtsZXQgYnQ9MCxtdD0hMDtqLmZvckVhY2goZnVuY3Rpb24oVSl7Y29uc3QgeHQ9e251bWJlcjpidCxkZXNjcjpVLHNlY3Rpb246YnQsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OlJ9LG50PUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwseHQsdik7VXQuZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG50KSxSPU1hdGgubWF4KFIsbnQrMjApfSk7bGV0IHl0PTAsZHQ9MDtVdC5kZWJ1ZygidGFza3MubGVuZ3RoIixOLmxlbmd0aCk7Zm9yKGNvbnN0W1UseHRdb2YgTi5lbnRyaWVzKCkpe2NvbnN0IG50PXtudW1iZXI6VSxkZXNjcjp4dCxzZWN0aW9uOnh0LnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Onp9LE90PUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwsbnQsdik7VXQuZGVidWcoInRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLE90KSx6PU1hdGgubWF4KHosT3QrMjApLHl0PU1hdGgubWF4KHl0LHh0LmV2ZW50cy5sZW5ndGgpO2xldCBOdD0wO2ZvcihsZXQgcXQ9MDtxdDx4dC5ldmVudHMubGVuZ3RoO3F0Kyspe2NvbnN0IFo9e2Rlc2NyOnh0LmV2ZW50c1txdF0sc2VjdGlvbjp4dC5zZWN0aW9uLG51bWJlcjp4dC5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07TnQrPUFULmdldFZpcnR1YWxOb2RlSGVpZ2h0KEwsWix2KX1kdD1NYXRoLm1heChkdCxOdCl9VXQuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLFIpLFV0LmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3Iix6KSxqJiZqLmxlbmd0aD4wP2ouZm9yRWFjaChVPT57Y29uc3QgeHQ9Ti5maWx0ZXIocXQ9PnF0LnNlY3Rpb249PT1VKSxudD17bnVtYmVyOmJ0LGRlc2NyOlUsc2VjdGlvbjpidCx3aWR0aDoyMDAqTWF0aC5tYXgoeHQubGVuZ3RoLDEpLTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OlJ9O1V0LmRlYnVnKCJzZWN0aW9uTm9kZSIsbnQpO2NvbnN0IE90PUwuYXBwZW5kKCJnIiksTnQ9QVQuZHJhd05vZGUoT3QsbnQsYnQsdik7VXQuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsTnQpLE90LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N0fSwgJHtpdH0pYCksdXQrPVIrNTAseHQubGVuZ3RoPjAmJnFqdChMLHh0LGJ0LHN0LHV0LHosdix5dCxkdCxSLCExKSxzdCs9MjAwKk1hdGgubWF4KHh0Lmxlbmd0aCwxKSx1dD1pdCxidCsrfSk6KG10PSExLHFqdChMLE4sYnQsc3QsdXQseix2LHl0LGR0LFIsITApKTtjb25zdCBodD1MLm5vZGUoKS5nZXRCQm94KCk7VXQuZGVidWcoImJvdW5kcyIsaHQpLEImJkwuYXBwZW5kKCJ0ZXh0IikudGV4dChCKS5hdHRyKCJ4IixodC53aWR0aC8yLW0pLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSxLPW10P1IreisxNTA6eisxMDAsTC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG0pLmF0dHIoInkxIixLKS5hdHRyKCJ4MiIsaHQud2lkdGgrMyptKS5hdHRyKCJ5MiIsSykuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxjVCh2b2lkIDAsTCwoKFg9di50aW1lbGluZSk9PW51bGw/dm9pZCAwOlgucGFkZGluZyk/PzUwLCgocHQ9di50aW1lbGluZSk9PW51bGw/dm9pZCAwOnB0LnVzZU1heFdpZHRoKT8/ITEpfSxxanQ9ZnVuY3Rpb24oaSxhLGYscCx2LG0sYixFLF8sTCxOKXt2YXIgQjtmb3IoY29uc3QgaiBvZiBhKXtjb25zdCBSPXtkZXNjcjpqLnRhc2ssc2VjdGlvbjpmLG51bWJlcjpmLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDptfTtVdC5kZWJ1ZygidGFza05vZGUiLFIpO2NvbnN0IHo9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIiksaXQ9QVQuZHJhd05vZGUoeixSLGYsYikuaGVpZ2h0O2lmKFV0LmRlYnVnKCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXciLGl0KSx6LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3B9LCAke3Z9KWApLG09TWF0aC5tYXgobSxpdCksai5ldmVudHMpe2NvbnN0IHN0PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCB1dD1tO3YrPTEwMCx1dD11dCtSVWUoaSxqLmV2ZW50cyxmLHAsdixiKSx2LT0xMDAsc3QuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHArMTkwLzIpLmF0dHIoInkxIix2K20pLmF0dHIoIngyIixwKzE5MC8yKS5hdHRyKCJ5MiIsdittKyhOP206TCkrXysxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfXA9cCsyMDAsTiYmISgoQj1iLnRpbWVsaW5lKSE9bnVsbCYmQi5kaXNhYmxlTXVsdGljb2xvcikmJmYrK312PXYtMTB9LFJVZT1mdW5jdGlvbihpLGEsZixwLHYsbSl7bGV0IGI9MDtjb25zdCBFPXY7dj12KzEwMDtmb3IoY29uc3QgXyBvZiBhKXtjb25zdCBMPXtkZXNjcjpfLHNlY3Rpb246ZixudW1iZXI6Zix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1V0LmRlYnVnKCJldmVudE5vZGUiLEwpO2NvbnN0IE49aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLGo9QVQuZHJhd05vZGUoTixMLGYsbSkuaGVpZ2h0O2I9YitqLE4uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cH0sICR7dn0pYCksdj12KzEwK2p9cmV0dXJuIHY9RSxifSxqVWU9e3NldENvbmY6KCk9Pnt9LGRyYXc6QlVlfSwkVWU9aT0+e2xldCBhPSIiO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspaVsibGluZUNvbG9yIitmXT1pWyJsaW5lQ29sb3IiK2ZdfHxpWyJjU2NhbGVJbnYiK2ZdLEo3KGlbImxpbmVDb2xvciIrZl0pP2lbImxpbmVDb2xvciIrZl09YnMoaVsibGluZUNvbG9yIitmXSwyMCk6aVsibGluZUNvbG9yIitmXT1qcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTtmb3IobGV0IGY9MDtmPGkuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXtjb25zdCBwPSIiKygxNy0zKmYpO2ErPWAKICAgIC5zZWN0aW9uLSR7Zi0xfSByZWN0LCAuc2VjdGlvbi0ke2YtMX0gcGF0aCwgLnNlY3Rpb24tJHtmLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtmLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7Zi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtmLTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke2YtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtwfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrZl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGF9LHpVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6VFVlLHJlbmRlcmVyOmpVZSxwYXJzZXI6RVVlLHN0eWxlczppPT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAkeyRVZShpKX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBxZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihtdCx5dCxkdCxodCl7Zm9yKGR0PWR0fHx7fSxodD1tdC5sZW5ndGg7aHQtLTtkdFttdFtodF1dPXl0KTtyZXR1cm4gZHR9LGE9WzEsNF0sZj1bMSwxM10scD1bMSwxMl0sdj1bMSwxNV0sbT1bMSwxNl0sYj1bMSwyMF0sRT1bMSwxOV0sXz1bNiw3LDhdLEw9WzEsMjZdLE49WzEsMjRdLEI9WzEsMjVdLGo9WzYsNywxMV0sUj1bMSw2LDEzLDE1LDE2LDE5LDIyXSx6PVsxLDMzXSxLPVsxLDM0XSxpdD1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLHN0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGR0LGh0LHd0LFgscHQsVSl7dmFyIHh0PXB0Lmxlbmd0aC0xO3N3aXRjaChYKXtjYXNlIDY6Y2FzZSA3OnJldHVybiB3dDtjYXNlIDg6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5Ond0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOnd0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOnd0LmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTp3dC5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLHB0W3h0XS5pZCksd3QuYWRkTm9kZShwdFt4dC0xXS5sZW5ndGgscHRbeHRdLmlkLHB0W3h0XS5kZXNjcixwdFt4dF0udHlwZSk7YnJlYWs7Y2FzZSAxNjp3dC5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixwdFt4dF0pLHd0LmRlY29yYXRlTm9kZSh7aWNvbjpwdFt4dF19KTticmVhaztjYXNlIDE3OmNhc2UgMjE6d3QuZGVjb3JhdGVOb2RlKHtjbGFzczpwdFt4dF19KTticmVhaztjYXNlIDE4Ond0LmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5Ond0LmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLHB0W3h0XS5pZCksd3QuYWRkTm9kZSgwLHB0W3h0XS5pZCxwdFt4dF0uZGVzY3IscHRbeHRdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6d3QuZGVjb3JhdGVOb2RlKHtpY29uOnB0W3h0XX0pO2JyZWFrO2Nhc2UgMjU6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLHB0W3h0LTJdKSx0aGlzLiQ9e2lkOnB0W3h0LTFdLGRlc2NyOnB0W3h0LTFdLHR5cGU6d3QuZ2V0VHlwZShwdFt4dC0yXSxwdFt4dF0pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6cHRbeHRdLGRlc2NyOnB0W3h0XSx0eXBlOnd0Lm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6d3QuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLHB0W3h0LTNdKSx0aGlzLiQ9e2lkOnB0W3h0LTNdLGRlc2NyOnB0W3h0LTFdLHR5cGU6d3QuZ2V0VHlwZShwdFt4dC0yXSxwdFt4dF0pfTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OmF9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6YX0sezY6Ziw3OlsxLDEwXSw5OjksMTI6MTEsMTM6cCwxNDoxNCwxNTp2LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSxpKF8sWzIsM10pLHsxOlsyLDJdfSxpKF8sWzIsNF0pLGkoXyxbMiw1XSksezE6WzIsNl0sNjpmLDEyOjIxLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0sezY6Ziw5OjIyLDEyOjExLDEzOnAsMTQ6MTQsMTU6diwxNjptLDE3OjE3LDE4OjE4LDE5OmIsMjI6RX0sezY6TCw3Ok4sMTA6MjMsMTE6Qn0saShqLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpiLDIyOkV9KSxpKGosWzIsMThdKSxpKGosWzIsMTldKSxpKGosWzIsMjBdKSxpKGosWzIsMjFdKSxpKGosWzIsMjNdKSxpKGosWzIsMjRdKSxpKGosWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpMLDc6TiwxMDozMiwxMTpCfSx7MTpbMiw3XSw2OmYsMTI6MjEsMTM6cCwxNDoxNCwxNTp2LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSxpKFIsWzIsMTRdLHs3OnosMTE6S30pLGkoaXQsWzIsOF0pLGkoaXQsWzIsOV0pLGkoaXQsWzIsMTBdKSxpKGosWzIsMTVdKSxpKGosWzIsMTZdKSxpKGosWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSxpKFIsWzIsMTNdLHs3OnosMTE6S30pLGkoaXQsWzIsMTFdKSxpKGl0LFsyLDEyXSksezIxOlsxLDM3XX0saShqLFsyLDI1XSksaShqLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeXQsZHQpe2lmKGR0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoeXQpO2Vsc2V7dmFyIGh0PW5ldyBFcnJvcih5dCk7dGhyb3cgaHQuaGFzaD1kdCxodH19LHBhcnNlOmZ1bmN0aW9uKHl0KXt2YXIgZHQ9dGhpcyxodD1bMF0sd3Q9W10sWD1bbnVsbF0scHQ9W10sVT10aGlzLnRhYmxlLHh0PSIiLG50PTAsT3Q9MCxOdD0yLHF0PTEsQ3Q9cHQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFR0PXt5eTp7fX07Zm9yKHZhciBIdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEh0KSYmKFR0Lnl5W0h0XT10aGlzLnl5W0h0XSk7Wi5zZXRJbnB1dCh5dCxUdC55eSksVHQueXkubGV4ZXI9WixUdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgWi55eWxsb2M+InUiJiYoWi55eWxsb2M9e30pO3ZhciBJdD1aLnl5bGxvYztwdC5wdXNoKEl0KTt2YXIgRnQ9Wi5vcHRpb25zJiZaLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBUdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1UdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrZSgpe3ZhciBPZTtyZXR1cm4gT2U9d3QucG9wKCl8fFoubGV4KCl8fHF0LHR5cGVvZiBPZSE9Im51bWJlciImJihPZSBpbnN0YW5jZW9mIEFycmF5JiYod3Q9T2UsT2U9d3QucG9wKCkpLE9lPWR0LnN5bWJvbHNfW09lXXx8T2UpLE9lfWZvcih2YXIgcG4sTWUsdmUsR2UsS2U9e30sd2UsX2UsJHQscmU7Oyl7aWYoTWU9aHRbaHQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdP3ZlPXRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdOigocG49PT1udWxsfHx0eXBlb2YgcG4+InUiKSYmKHBuPWtlKCkpLHZlPVVbTWVdJiZVW01lXVtwbl0pLHR5cGVvZiB2ZT4idSJ8fCF2ZS5sZW5ndGh8fCF2ZVswXSl7dmFyIGllPSIiO3JlPVtdO2Zvcih3ZSBpbiBVW01lXSl0aGlzLnRlcm1pbmFsc19bd2VdJiZ3ZT5OdCYmcmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3dlXSsiJyIpO1ouc2hvd1Bvc2l0aW9uP2llPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG50KzEpK2A6CmArWi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3JlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcG5dfHxwbikrIiciOmllPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG50KzEpKyI6IFVuZXhwZWN0ZWQgIisocG49PXF0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3BuXXx8cG4pKyInIiksdGhpcy5wYXJzZUVycm9yKGllLHt0ZXh0OloubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3BuXXx8cG4sbGluZTpaLnl5bGluZW5vLGxvYzpJdCxleHBlY3RlZDpyZX0pfWlmKHZlWzBdaW5zdGFuY2VvZiBBcnJheSYmdmUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitNZSsiLCB0b2tlbjogIitwbik7c3dpdGNoKHZlWzBdKXtjYXNlIDE6aHQucHVzaChwbiksWC5wdXNoKFoueXl0ZXh0KSxwdC5wdXNoKFoueXlsbG9jKSxodC5wdXNoKHZlWzFdKSxwbj1udWxsLE90PVoueXlsZW5nLHh0PVoueXl0ZXh0LG50PVoueXlsaW5lbm8sSXQ9Wi55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKF9lPXRoaXMucHJvZHVjdGlvbnNfW3ZlWzFdXVsxXSxLZS4kPVhbWC5sZW5ndGgtX2VdLEtlLl8kPXtmaXJzdF9saW5lOnB0W3B0Lmxlbmd0aC0oX2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpwdFtwdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpwdFtwdC5sZW5ndGgtKF9lfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnB0W3B0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihLZS5fJC5yYW5nZT1bcHRbcHQubGVuZ3RoLShfZXx8MSldLnJhbmdlWzBdLHB0W3B0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEdlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShLZSxbeHQsT3QsbnQsVHQueXksdmVbMV0sWCxwdF0uY29uY2F0KEN0KSksdHlwZW9mIEdlPCJ1IilyZXR1cm4gR2U7X2UmJihodD1odC5zbGljZSgwLC0xKl9lKjIpLFg9WC5zbGljZSgwLC0xKl9lKSxwdD1wdC5zbGljZSgwLC0xKl9lKSksaHQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t2ZVsxXV1bMF0pLFgucHVzaChLZS4kKSxwdC5wdXNoKEtlLl8kKSwkdD1VW2h0W2h0Lmxlbmd0aC0yXV1baHRbaHQubGVuZ3RoLTFdXSxodC5wdXNoKCR0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sdXQ9ZnVuY3Rpb24oKXt2YXIgbXQ9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oZHQsaHQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoZHQsaHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGR0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oeXQsZHQpe3JldHVybiB0aGlzLnl5PWR0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD15dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXl0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz15dCx0aGlzLm1hdGNoZWQrPXl0O3ZhciBkdD15dC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGR0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx5dH0sdW5wdXQ6ZnVuY3Rpb24oeXQpe3ZhciBkdD15dC5sZW5ndGgsaHQ9eXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD15dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZHQpLHRoaXMub2Zmc2V0LT1kdDt2YXIgd3Q9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksaHQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1odC5sZW5ndGgtMSk7dmFyIFg9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmh0PyhodC5sZW5ndGg9PT13dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3d0W3d0Lmxlbmd0aC1odC5sZW5ndGhdLmxlbmd0aC1odFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWR0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1hbMF0sWFswXSt0aGlzLnl5bGVuZy1kdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHl0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oeXQubGVuZ3RoPjIwPyIuLi4iOiIiKSt5dC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm1hdGNoO3JldHVybiB5dC5sZW5ndGg8MjAmJih5dCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAteXQubGVuZ3RoKSksKHl0LnN1YnN0cigwLDIwKSsoeXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB5dD10aGlzLnBhc3RJbnB1dCgpLGR0PW5ldyBBcnJheSh5dC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB5dCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZHQrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHl0LGR0KXt2YXIgaHQsd3QsWDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoWD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihYLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHd0PXl0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx3dCYmKHRoaXMueXlsaW5lbm8rPXd0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnd0P3d0W3d0Lmxlbmd0aC0xXS5sZW5ndGgtd3Rbd3QubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4reXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9eXRbMF0sdGhpcy5tYXRjaCs9eXRbMF0sdGhpcy5tYXRjaGVzPXl0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHl0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz15dFswXSxodD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxkdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxodClyZXR1cm4gaHQ7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHB0IGluIFgpdGhpc1twdF09WFtwdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeXQsZHQsaHQsd3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWD10aGlzLl9jdXJyZW50UnVsZXMoKSxwdD0wO3B0PFgubGVuZ3RoO3B0KyspaWYoaHQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tYW3B0XV0pLGh0JiYoIWR0fHxodFswXS5sZW5ndGg+ZHRbMF0ubGVuZ3RoKSl7aWYoZHQ9aHQsd3Q9cHQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeXQ9dGhpcy50ZXN0X21hdGNoKGh0LFhbcHRdKSx5dCE9PSExKXJldHVybiB5dDtpZih0aGlzLl9iYWNrdHJhY2spe2R0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGR0Pyh5dD10aGlzLnRlc3RfbWF0Y2goZHQsWFt3dF0pLHl0IT09ITE/eXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBkdD10aGlzLm5leHQoKTtyZXR1cm4gZHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGR0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBkdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBkdD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhkdHx8MCksZHQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tkdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oZHQpe3RoaXMuYmVnaW4oZHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGR0LGh0LHd0LFgpe3N3aXRjaCh3dCl7Y2FzZSAwOnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsaHQueXl0ZXh0KSw2O2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpkdC5nZXRMb2dnZXIoKS50cmFjZSgiQmVnaW4gaWNvbiIpLHRoaXMuYmVnaW4oIklDT04iKTticmVhaztjYXNlIDY6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2Nhc2UgNzpyZXR1cm4gNztjYXNlIDg6cmV0dXJuIDE1O2Nhc2UgOTpkdC5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvZGluZyBub2RlIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTE6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEyOnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMzpyZXR1cm4gZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNDpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTg6cmV0dXJuIDEzO2Nhc2UgMTk6cmV0dXJuIDIyO2Nhc2UgMjA6cmV0dXJuIDExO2Nhc2UgMjE6dGhpcy5iZWdpbigiTlNUUjIiKTticmVhaztjYXNlIDIyOnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OmR0LmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLGh0Lnl5dGV4dCksIk5PREVfREVTQ1IiO2Nhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxkdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjtjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kIC4uLiIsaHQueXl0ZXh0KSwiTk9ERV9ERU5EIjtjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGR0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxkdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjtjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZHQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGR0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2Nhc2UgMzU6cmV0dXJuIGR0LmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsaHQueXl0ZXh0KSwyMDtjYXNlIDM2OnJldHVybiBkdC5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLGh0Lnl5dGV4dCksMjB9fSxydWxlczpbL14oPzpccyolJS4qKS9pLC9eKD86bWluZG1hcFxiKS9pLC9eKD86Ojo6KS9pLC9eKD86LispL2ksL14oPzpcbikvaSwvXig/Ojo6aWNvblwoKS9pLC9eKD86W1xzXStbXG5dKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXlwpXSspL2ksL14oPzpcKSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoLSkvaSwvXig/OlwpXCkpL2ksL14oPzpcKSkvaSwvXig/OlwoXCgpL2ksL14oPzpce1x7KS9pLC9eKD86XCgpL2ksL14oPzpcWykvaSwvXig/Oltcc10rKS9pLC9eKD86W15cKFxbXG5cKVx7XH1dKykvaSwvXig/OiQpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKykvaSwvXig/OlsiXSkvaSwvXig/OltcKV1cKSkvaSwvXig/OltcKV0pL2ksL14oPzpbXF1dKS9pLC9eKD86XH1cfSkvaSwvXig/OlwoLSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoXCgpL2ksL14oPzpcKCkvaSwvXig/OlteXClcXVwoXH1dKykvaSwvXig/Oi4rKD8hXChcKCkpL2ldLGNvbmRpdGlvbnM6e0NMQVNTOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElDT046e3J1bGVzOls4LDldLGluY2x1c2l2ZTohMX0sTlNUUjI6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxOU1RSOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzIxLDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiw1LDYsNywxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBtdH0oKTtzdC5sZXhlcj11dDtmdW5jdGlvbiBidCgpe3RoaXMueXk9e319cmV0dXJuIGJ0LnByb3RvdHlwZT1zdCxzdC5QYXJzZXI9YnQsbmV3IGJ0fSgpO3FndC5wYXJzZXI9cWd0O2NvbnN0IHFVZT1xZ3QsVVA9aT0+RGQoaSxMZSgpKTtsZXQgc3Y9W10sSGp0PTAsSGd0PXt9O2NvbnN0IEhVZT0oKT0+e3N2PVtdLEhqdD0wLEhndD17fX0sR1VlPWZ1bmN0aW9uKGkpe2ZvcihsZXQgYT1zdi5sZW5ndGgtMTthPj0wO2EtLSlpZihzdlthXS5sZXZlbDxpKXJldHVybiBzdlthXTtyZXR1cm4gbnVsbH0sVlVlPSgpPT5zdi5sZW5ndGg+MD9zdlswXTpudWxsLFVVZT0oaSxhLGYscCk9PntVdC5pbmZvKCJhZGROb2RlIixpLGEsZixwKTtjb25zdCB2PUxlKCksbT17aWQ6SGp0Kyssbm9kZUlkOlVQKGEpLGxldmVsOmksZGVzY3I6VVAoZiksdHlwZTpwLGNoaWxkcmVuOltdLHdpZHRoOkxlKCkubWluZG1hcC5tYXhOb2RlV2lkdGh9O3N3aXRjaChtLnR5cGUpe2Nhc2UgVnUuUk9VTkRFRF9SRUNUOm0ucGFkZGluZz0yKnYubWluZG1hcC5wYWRkaW5nO2JyZWFrO2Nhc2UgVnUuUkVDVDptLnBhZGRpbmc9Mip2Lm1pbmRtYXAucGFkZGluZzticmVhaztjYXNlIFZ1LkhFWEFHT046bS5wYWRkaW5nPTIqdi5taW5kbWFwLnBhZGRpbmc7YnJlYWs7ZGVmYXVsdDptLnBhZGRpbmc9di5taW5kbWFwLnBhZGRpbmd9Y29uc3QgYj1HVWUoaSk7aWYoYiliLmNoaWxkcmVuLnB1c2gobSksc3YucHVzaChtKTtlbHNlIGlmKHN2Lmxlbmd0aD09PTApc3YucHVzaChtKTtlbHNle2xldCBFPW5ldyBFcnJvcignVGhlcmUgY2FuIGJlIG9ubHkgb25lIHJvb3QuIE5vIHBhcmVudCBjb3VsZCBiZSBmb3VuZCBmb3IgKCInK20uZGVzY3IrJyIpJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJicmFuY2ggIituYW1lLHRva2VuOiJicmFuY2ggIituYW1lLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsnImNoZWNrb3V0ICcrbmFtZSsnIiddfSxFfX0sVnU9e0RFRkFVTFQ6MCxOT19CT1JERVI6MCxST1VOREVEX1JFQ1Q6MSxSRUNUOjIsQ0lSQ0xFOjMsQ0xPVUQ6NCxCQU5HOjUsSEVYQUdPTjo2fSxXVWU9KGksYSk9Pntzd2l0Y2goVXQuZGVidWcoIkluIGdldCB0eXBlIixpLGEpLGkpe2Nhc2UiWyI6cmV0dXJuIFZ1LlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gYT09PSIpIj9WdS5ST1VOREVEX1JFQ1Q6VnUuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIFZ1LkNJUkNMRTtjYXNlIikiOnJldHVybiBWdS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gVnUuQkFORztjYXNlInt7IjpyZXR1cm4gVnUuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBWdS5ERUZBVUxUfX0sR2p0PShpLGEpPT57SGd0W2ldPWF9LEtVZT1pPT57Y29uc3QgYT1zdltzdi5sZW5ndGgtMV07aSYmaS5pY29uJiYoYS5pY29uPVVQKGkuaWNvbikpLGkmJmkuY2xhc3MmJihhLmNsYXNzPVVQKGkuY2xhc3MpKX0sTFQ9aT0+e3N3aXRjaChpKXtjYXNlIFZ1LkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSBWdS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIFZ1LlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIFZ1LkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIFZ1LkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSBWdS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIFZ1LkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19O2xldCBWanQ7Y29uc3QgWVVlPWk9PntWanQ9aX0sWFVlPSgpPT5VdCxRVWU9aT0+c3ZbaV0sR2d0PWk9PkhndFtpXSxaVWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZE5vZGU6VVVlLGNsZWFyOkhVZSxkZWNvcmF0ZU5vZGU6S1VlLGdldEVsZW1lbnRCeUlkOkdndCxnZXRMb2dnZXI6WFVlLGdldE1pbmRtYXA6VlVlLGdldE5vZGVCeUlkOlFVZSxnZXRUeXBlOldVZSxub2RlVHlwZTpWdSxnZXQgcGFyc2VFcnJvcigpe3JldHVybiBWanR9LHNhbml0aXplVGV4dDpVUCxzZXRFbGVtZW50Rm9ySWQ6R2p0LHNldEVycm9ySGFuZGxlcjpZVWUsdHlwZTJTdHI6TFR9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVWp0PTEyLEpVZT1mdW5jdGlvbihpLGEsZil7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitMVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgJHthLmhlaWdodC01fSB2JHstYS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Eud2lkdGgtMio1fSBxNSwwIDUsNSB2JHthLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK2YpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsYS5oZWlnaHQpLmF0dHIoIngyIixhLndpZHRoKS5hdHRyKCJ5MiIsYS5oZWlnaHQpfSx0V2U9ZnVuY3Rpb24oaSxhKXtpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0xUKGEudHlwZSkpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLmF0dHIoIndpZHRoIixhLndpZHRoKX0sZVdlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLndpZHRoLHA9YS5oZWlnaHQsdj0uMTUqZixtPS4yNSpmLGI9LjM1KmYsRT0uMipmO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7dn0sJHt2fSAwIDAsMSAke2YqLjI1fSwkey0xKmYqLjF9CiAgICAgIGEke2J9LCR7Yn0gMSAwLDEgJHtmKi40fSwkey0xKmYqLjF9CiAgICAgIGEke219LCR7bX0gMSAwLDEgJHtmKi4zNX0sJHsxKmYqLjJ9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7ZiouMTV9LCR7MSpwKi4zNX0KICAgICAgYSR7RX0sJHtFfSAxIDAsMSAkey0xKmYqLjE1fSwkezEqcCouNjV9CgogICAgICBhJHttfSwke3Z9IDEgMCwxICR7LTEqZiouMjV9LCR7ZiouMTV9CiAgICAgIGEke2J9LCR7Yn0gMSAwLDEgJHstMSpmKi41fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDEgJHstMSpmKi4yNX0sJHstMSpmKi4xNX0KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDEgJHstMSpmKi4xfSwkey0xKnAqLjM1fQogICAgICBhJHtFfSwke0V9IDEgMCwxICR7ZiouMX0sJHstMSpwKi42NX0KCiAgICBIMCBWMCBaYCl9LG5XZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS53aWR0aCxwPWEuaGVpZ2h0LHY9LjE1KmY7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitMVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHt2fSwke3Z9IDEgMCwwICR7ZiouMjV9LCR7LTEqcCouMX0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtmKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZiouMjV9LCR7MSpwKi4xfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjE1fSwkezEqcCouMzN9CiAgICAgIGEke3YqLjh9LCR7diouOH0gMSAwLDAgMCwkezEqcCouMzR9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4xNX0sJHsxKnAqLjMzfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmYqLjI1fSwke3AqLjE1fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZiouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmYqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4yNX0sJHstMSpwKi4xNX0KCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpmKi4xfSwkey0xKnAqLjMzfQogICAgICBhJHt2Ki44fSwke3YqLjh9IDEgMCwwIDAsJHstMSpwKi4zNH0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2YqLjF9LCR7LTEqcCouMzN9CgogICAgSDAgVjAgWmApfSxyV2U9ZnVuY3Rpb24oaSxhKXtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiciIsYS53aWR0aC8yKX07ZnVuY3Rpb24gaVdlKGksYSxmLHAsdil7cmV0dXJuIGkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixwLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gbS54KyIsIittLnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh2LndpZHRoLWEpLzIrIiwgIitmKyIpIil9Y29uc3Qgc1dlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLmhlaWdodCx2PWYvNCxtPWEud2lkdGgtYS5wYWRkaW5nKzIqdixiPVt7eDp2LHk6MH0se3g6bS12LHk6MH0se3g6bSx5Oi1mLzJ9LHt4Om0tdix5Oi1mfSx7eDp2LHk6LWZ9LHt4OjAseTotZi8yfV07aVdlKGksbSxmLGIsYSl9LGFXZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrTFQoYS50eXBlKSkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigicngiLGEucGFkZGluZykuYXR0cigicnkiLGEucGFkZGluZykuYXR0cigid2lkdGgiLGEud2lkdGgpfSxXanQ9e2RyYXdOb2RlOmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHY9cC5odG1sTGFiZWxzLG09ZiUoVWp0LTEpLGI9aS5hcHBlbmQoImciKTthLnNlY3Rpb249bTtsZXQgRT0ic2VjdGlvbi0iK207bTwwJiYoRSs9IiBzZWN0aW9uLXJvb3QiKSxiLmF0dHIoImNsYXNzIiwoYS5jbGFzcz9hLmNsYXNzKyIgIjoiIikrIm1pbmRtYXAtbm9kZSAiK0UpO2NvbnN0IF89Yi5hcHBlbmQoImciKSxMPWIuYXBwZW5kKCJnIiksTj1hLmRlc2NyLnJlcGxhY2UoLyg8YnJcLyo+KS9nLGAKYCk7ZEsoTCxOLHt1c2VIdG1sTGFiZWxzOnYsd2lkdGg6YS53aWR0aCxjbGFzc2VzOiJtaW5kbWFwLW5vZGUtbGFiZWwifSksdnx8TC5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKTtjb25zdCBCPUwubm9kZSgpLmdldEJCb3goKSxqPXAuZm9udFNpemUucmVwbGFjZT9wLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6cC5mb250U2l6ZTtpZihhLmhlaWdodD1CLmhlaWdodCtqKjEuMSouNSthLnBhZGRpbmcsYS53aWR0aD1CLndpZHRoKzIqYS5wYWRkaW5nLGEuaWNvbilpZihhLnR5cGU9PT1WdS5DSVJDTEUpYS5oZWlnaHQrPTUwLGEud2lkdGgrPTUwLGIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigiaGVpZ2h0IiwiNTBweCIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK20rIiAiK2EuaWNvbiksTC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIisoYS5oZWlnaHQvMi0xLjUqYS5wYWRkaW5nKSsiKSIpO2Vsc2V7YS53aWR0aCs9NTA7Y29uc3QgUj1hLmhlaWdodDthLmhlaWdodD1NYXRoLm1heChSLDYwKTtjb25zdCB6PU1hdGguYWJzKGEuaGVpZ2h0LVIpO2IuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCI2MHB4IikuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDoiK3ovMisicHg7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIittKyIgIithLmljb24pLEwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKDI1K2Eud2lkdGgvMikrIiwgIisoei8yK2EucGFkZGluZy8yKSsiKSIpfWVsc2UgaWYodil7Y29uc3QgUj0oYS53aWR0aC1CLndpZHRoKS8yLHo9KGEuaGVpZ2h0LUIuaGVpZ2h0KS8yO0wuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUisiLCAiK3orIikiKX1lbHNle2NvbnN0IFI9YS53aWR0aC8yLHo9YS5wYWRkaW5nLzI7TC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSKyIsICIreisiKSIpfXN3aXRjaChhLnR5cGUpe2Nhc2UgVnUuREVGQVVMVDpKVWUoXyxhLG0pO2JyZWFrO2Nhc2UgVnUuUk9VTkRFRF9SRUNUOmFXZShfLGEpO2JyZWFrO2Nhc2UgVnUuUkVDVDp0V2UoXyxhKTticmVhaztjYXNlIFZ1LkNJUkNMRTpfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Eud2lkdGgvMisiLCAiKyArYS5oZWlnaHQvMisiKSIpLHJXZShfLGEpO2JyZWFrO2Nhc2UgVnUuQ0xPVUQ6ZVdlKF8sYSk7YnJlYWs7Y2FzZSBWdS5CQU5HOm5XZShfLGEpO2JyZWFrO2Nhc2UgVnUuSEVYQUdPTjpzV2UoXyxhKTticmVha31yZXR1cm4gR2p0KGEuaWQsYiksYS5oZWlnaHR9LHBvc2l0aW9uTm9kZTpmdW5jdGlvbihpKXtjb25zdCBhPUdndChpLmlkKSxmPWkueHx8MCxwPWkueXx8MDthLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2YrIiwiK3ArIikiKX0sZHJhd0VkZ2U6ZnVuY3Rpb24oYSxmLHAsdixtKXtjb25zdCBiPW0lKFVqdC0xKSxFPXAueCtwLndpZHRoLzIsXz1wLnkrcC5oZWlnaHQvMixMPWYueCtmLndpZHRoLzIsTj1mLnkrZi5oZWlnaHQvMixCPUw+RT9FK01hdGguYWJzKEUtTCkvMjpFLU1hdGguYWJzKEUtTCkvMixqPU4+Xz9fK01hdGguYWJzKF8tTikvMjpfLU1hdGguYWJzKF8tTikvMixSPUw+RT9NYXRoLmFicyhFLUIpLzIrRTotTWF0aC5hYnMoRS1CKS8yK0Usej1OPl8/TWF0aC5hYnMoXy1qKS8yK186LU1hdGguYWJzKF8taikvMitfO2EuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5kaXJlY3Rpb249PT0iVEIifHxwLmRpcmVjdGlvbj09PSJCVCI/YE0ke0V9LCR7X30gUSR7RX0sJHt6fSAke0J9LCR7an0gVCR7TH0sJHtOfWA6YE0ke0V9LCR7X30gUSR7Un0sJHtffSAke0J9LCR7an0gVCR7TH0sJHtOfWApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIitiKyIgZWRnZS1kZXB0aC0iK3YpfX07dmFyIEtqdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGQwLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZih5KXtyZXR1cm4gZj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIGd9OmZ1bmN0aW9uKGcpe3JldHVybiBnJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZnLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZnIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZ30sZih5KX1mdW5jdGlvbiBwKHksZyl7aWYoISh5IGluc3RhbmNlb2YgZykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO1QuZW51bWVyYWJsZT1ULmVudW1lcmFibGV8fCExLFQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBUJiYoVC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksVC5rZXksVCl9fWZ1bmN0aW9uIG0oeSxnLHgpe3JldHVybiBnJiZ2KHkucHJvdG90eXBlLGcpLHgmJnYoeSx4KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx5fWZ1bmN0aW9uIGIoeSxnLHgpe3JldHVybiBnIGluIHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHksZyx7dmFsdWU6eCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnlbZ109eCx5fWZ1bmN0aW9uIEUoeSxnKXtyZXR1cm4gXyh5KXx8TCh5LGcpfHxOKHksZyl8fGooKX1mdW5jdGlvbiBfKHkpe2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIHl9ZnVuY3Rpb24gTCh5LGcpe3ZhciB4PXk9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmeVtTeW1ib2wuaXRlcmF0b3JdfHx5WyJAQGl0ZXJhdG9yIl07aWYoeCE9bnVsbCl7dmFyIFQ9W10sQT0hMCxEPSExLE8sJDt0cnl7Zm9yKHg9eC5jYWxsKHkpOyEoQT0oTz14Lm5leHQoKSkuZG9uZSkmJihULnB1c2goTy52YWx1ZSksIShnJiZULmxlbmd0aD09PWcpKTtBPSEwKTt9Y2F0Y2gocSl7RD0hMCwkPXF9ZmluYWxseXt0cnl7IUEmJngucmV0dXJuIT1udWxsJiZ4LnJldHVybigpfWZpbmFsbHl7aWYoRCl0aHJvdyAkfX1yZXR1cm4gVH19ZnVuY3Rpb24gTih5LGcpe2lmKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nIilyZXR1cm4gQih5LGcpO3ZhciB4PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh5KS5zbGljZSg4LC0xKTtpZih4PT09Ik9iamVjdCImJnkuY29uc3RydWN0b3ImJih4PXkuY29uc3RydWN0b3IubmFtZSkseD09PSJNYXAifHx4PT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20oeSk7aWYoeD09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh4KSlyZXR1cm4gQih5LGcpfX1mdW5jdGlvbiBCKHksZyl7KGc9PW51bGx8fGc+eS5sZW5ndGgpJiYoZz15Lmxlbmd0aCk7Zm9yKHZhciB4PTAsVD1uZXcgQXJyYXkoZyk7eDxnO3grKylUW3hdPXlbeF07cmV0dXJuIFR9ZnVuY3Rpb24gaigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgUj10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyx6PVI/Ui5uYXZpZ2F0b3I6bnVsbDtSJiZSLmRvY3VtZW50O3ZhciBLPWYoIiIpLGl0PWYoe30pLHN0PWYoZnVuY3Rpb24oKXt9KSx1dD10eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyJ1bmRlZmluZWQiOmYoSFRNTEVsZW1lbnQpLGJ0PWZ1bmN0aW9uKGcpe3JldHVybiBnJiZnLmluc3RhbmNlU3RyaW5nJiZ5dChnLmluc3RhbmNlU3RyaW5nKT9nLmluc3RhbmNlU3RyaW5nKCk6bnVsbH0sbXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PUt9LHl0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09c3R9LGR0PWZ1bmN0aW9uKGcpe3JldHVybiF4dChnKSYmKEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShnKTpnIT1udWxsJiZnIGluc3RhbmNlb2YgQXJyYXkpfSxodD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PWl0JiYhZHQoZykmJmcuY29uc3RydWN0b3I9PT1PYmplY3R9LHd0PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09aXR9LFg9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1mKDEpJiYhaXNOYU4oZyl9LHB0PWZ1bmN0aW9uKGcpe3JldHVybiBYKGcpJiZNYXRoLmZsb29yKGcpPT09Z30sVT1mdW5jdGlvbihnKXtpZih1dCE9PSJ1bmRlZmluZWQiKXJldHVybiBnIT1udWxsJiZnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LHh0PWZ1bmN0aW9uKGcpe3JldHVybiBudChnKXx8T3QoZyl9LG50PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJjb2xsZWN0aW9uIiYmZy5fcHJpdmF0ZS5zaW5nbGV9LE90PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJjb2xsZWN0aW9uIiYmIWcuX3ByaXZhdGUuc2luZ2xlfSxOdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29yZSJ9LHF0PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJzdHlsZXNoZWV0In0sQ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGJ0KGcpPT09ImV2ZW50In0sWj1mdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD8hMDohIShnPT09IiJ8fGcubWF0Y2goL15ccyskLykpfSxUdD1mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8hMTpnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LEh0PWZ1bmN0aW9uKGcpe3JldHVybiBodChnKSYmWChnLngxKSYmWChnLngyKSYmWChnLnkxKSYmWChnLnkyKX0sSXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHd0KGcpJiZ5dChnLnRoZW4pfSxGdD1mdW5jdGlvbigpe3JldHVybiB6JiZ6LnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LGtlPWZ1bmN0aW9uKGcseCl7eHx8KHg9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgRD1bXSxPPTA7Tzxhcmd1bWVudHMubGVuZ3RoO08rKylELnB1c2goYXJndW1lbnRzW09dKTtyZXR1cm4gRC5qb2luKCIkIil9KTt2YXIgVD1mdW5jdGlvbiBBKCl7dmFyIEQ9dGhpcyxPPWFyZ3VtZW50cywkLHE9eC5hcHBseShELE8pLFM9QS5jYWNoZTtyZXR1cm4oJD1TW3FdKXx8KCQ9U1txXT1nLmFwcGx5KEQsTykpLCR9O3JldHVybiBULmNhY2hlPXt9LFR9LHBuPWtlKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihnKXtyZXR1cm4iLSIrZy50b0xvd2VyQ2FzZSgpfSl9KSxNZT1rZShmdW5jdGlvbih5KXtyZXR1cm4geS5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnRvVXBwZXJDYXNlKCl9KX0pLHZlPWtlKGZ1bmN0aW9uKHksZyl7cmV0dXJuIHkrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih5LGcpe3JldHVybiB5KyIkIitnfSksR2U9ZnVuY3Rpb24oZyl7cmV0dXJuIFooZyk/ZzpnLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyaW5nKDEpfSxLZT0iKD86Wy0rXT8oPzooPzpcXGQrfFxcZCpcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCspPykpIix3ZT0icmdiW2FdP1xcKCgiK0tlKyJbJV0/KVxccyosXFxzKigiK0tlKyJbJV0/KVxccyosXFxzKigiK0tlKyJbJV0/KSg/OlxccyosXFxzKigiK0tlKyIpKT9cXCkiLF9lPSJyZ2JbYV0/XFwoKD86IitLZSsiWyVdPylcXHMqLFxccyooPzoiK0tlKyJbJV0/KVxccyosXFxzKig/OiIrS2UrIlslXT8pKD86XFxzKixcXHMqKD86IitLZSsiKSk/XFwpIiwkdD0iaHNsW2FdP1xcKCgiK0tlKyIpXFxzKixcXHMqKCIrS2UrIlslXSlcXHMqLFxccyooIitLZSsiWyVdKSg/OlxccyosXFxzKigiK0tlKyIpKT9cXCkiLHJlPSJoc2xbYV0/XFwoKD86IitLZSsiKVxccyosXFxzKig/OiIrS2UrIlslXSlcXHMqLFxccyooPzoiK0tlKyJbJV0pKD86XFxzKixcXHMqKD86IitLZSsiKSk/XFwpIixpZT0iXFwjWzAtOWEtZkEtRl17M30iLE9lPSJcXCNbMC05YS1mQS1GXXs2fSIsb2U9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZzx4Py0xOmc+eD8xOjB9LE5lPWZ1bmN0aW9uKGcseCl7cmV0dXJuLTEqb2UoZyx4KX0sbWU9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih5KXtmb3IodmFyIGc9YXJndW1lbnRzLHg9MTt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtpZihUIT1udWxsKWZvcih2YXIgQT1PYmplY3Qua2V5cyhUKSxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF07eVtPXT1UW09dfX1yZXR1cm4geX0sY249ZnVuY3Rpb24oZyl7aWYoISghKGcubGVuZ3RoPT09NHx8Zy5sZW5ndGg9PT03KXx8Z1swXSE9PSIjIikpe3ZhciB4PWcubGVuZ3RoPT09NCxULEEsRCxPPTE2O3JldHVybiB4PyhUPXBhcnNlSW50KGdbMV0rZ1sxXSxPKSxBPXBhcnNlSW50KGdbMl0rZ1syXSxPKSxEPXBhcnNlSW50KGdbM10rZ1szXSxPKSk6KFQ9cGFyc2VJbnQoZ1sxXStnWzJdLE8pLEE9cGFyc2VJbnQoZ1szXStnWzRdLE8pLEQ9cGFyc2VJbnQoZ1s1XStnWzZdLE8pKSxbVCxBLERdfX0sbGk9ZnVuY3Rpb24oZyl7dmFyIHgsVCxBLEQsTywkLHEsUztmdW5jdGlvbiBHKGx0LGZ0LEF0KXtyZXR1cm4gQXQ8MCYmKEF0Kz0xKSxBdD4xJiYoQXQtPTEpLEF0PDEvNj9sdCsoZnQtbHQpKjYqQXQ6QXQ8MS8yP2Z0OkF0PDIvMz9sdCsoZnQtbHQpKigyLzMtQXQpKjY6bHR9dmFyIFc9bmV3IFJlZ0V4cCgiXiIrJHQrIiQiKS5leGVjKGcpO2lmKFcpe2lmKFQ9cGFyc2VJbnQoV1sxXSksVDwwP1Q9KDM2MC0gLTEqVCUzNjApJTM2MDpUPjM2MCYmKFQ9VCUzNjApLFQvPTM2MCxBPXBhcnNlRmxvYXQoV1syXSksQTwwfHxBPjEwMHx8KEE9QS8xMDAsRD1wYXJzZUZsb2F0KFdbM10pLEQ8MHx8RD4xMDApfHwoRD1ELzEwMCxPPVdbNF0sTyE9PXZvaWQgMCYmKE89cGFyc2VGbG9hdChPKSxPPDB8fE8+MSkpKXJldHVybjtpZihBPT09MCkkPXE9Uz1NYXRoLnJvdW5kKEQqMjU1KTtlbHNle3ZhciBldD1EPC41P0QqKDErQSk6RCtBLUQqQSxhdD0yKkQtZXQ7JD1NYXRoLnJvdW5kKDI1NSpHKGF0LGV0LFQrMS8zKSkscT1NYXRoLnJvdW5kKDI1NSpHKGF0LGV0LFQpKSxTPU1hdGgucm91bmQoMjU1KkcoYXQsZXQsVC0xLzMpKX14PVskLHEsUyxPXX1yZXR1cm4geH0seWE9ZnVuY3Rpb24oZyl7dmFyIHgsVD1uZXcgUmVnRXhwKCJeIit3ZSsiJCIpLmV4ZWMoZyk7aWYoVCl7eD1bXTtmb3IodmFyIEE9W10sRD0xO0Q8PTM7RCsrKXt2YXIgTz1UW0RdO2lmKE9bTy5sZW5ndGgtMV09PT0iJSImJihBW0RdPSEwKSxPPXBhcnNlRmxvYXQoTyksQVtEXSYmKE89Ty8xMDAqMjU1KSxPPDB8fE8+MjU1KXJldHVybjt4LnB1c2goTWF0aC5mbG9vcihPKSl9dmFyICQ9QVsxXXx8QVsyXXx8QVszXSxxPUFbMV0mJkFbMl0mJkFbM107aWYoJCYmIXEpcmV0dXJuO3ZhciBTPVRbNF07aWYoUyE9PXZvaWQgMCl7aWYoUz1wYXJzZUZsb2F0KFMpLFM8MHx8Uz4xKXJldHVybjt4LnB1c2goUyl9fXJldHVybiB4fSxkYT1mdW5jdGlvbihnKXtyZXR1cm4gZHNbZy50b0xvd2VyQ2FzZSgpXX0sT289ZnVuY3Rpb24oZyl7cmV0dXJuKGR0KGcpP2c6bnVsbCl8fGRhKGcpfHxjbihnKXx8eWEoZyl8fGxpKGcpfSxkcz17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmV5OlsxMjgsMTI4LDEyOF0sZ3JlZW46WzAsMTI4LDBdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX0sRHI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWcubWFwLFQ9Zy5rZXlzLEE9VC5sZW5ndGgsRD0wO0Q8QTtEKyspe3ZhciBPPVRbRF07aWYoaHQoTykpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIHNldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7RDxULmxlbmd0aC0xPyh4W09dPT1udWxsJiYoeFtPXT17fSkseD14W09dKTp4W09dPWcudmFsdWV9fSxucj1mdW5jdGlvbihnKXtmb3IodmFyIHg9Zy5tYXAsVD1nLmtleXMsQT1ULmxlbmd0aCxEPTA7RDxBO0QrKyl7dmFyIE89VFtEXTtpZihodChPKSl0aHJvdyBFcnJvcigiVHJpZWQgdG8gZ2V0IG1hcCB3aXRoIG9iamVjdCBrZXkiKTtpZih4PXhbT10seD09bnVsbClyZXR1cm4geH1yZXR1cm4geH07ZnVuY3Rpb24gZGkoeSl7dmFyIGc9dHlwZW9mIHk7cmV0dXJuIHkhPW51bGwmJihnPT0ib2JqZWN0Inx8Zz09ImZ1bmN0aW9uIil9dmFyIEVlPWRpLFluPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZDA8InUiP2QwOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEhlKHksZyl7cmV0dXJuIGc9e2V4cG9ydHM6e319LHkoZyxnLmV4cG9ydHMpLGcuZXhwb3J0c312YXIgVGk9dHlwZW9mIFluPT0ib2JqZWN0IiYmWW4mJlluLk9iamVjdD09PU9iamVjdCYmWW4sZ249VGksa3M9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixxYT1nbnx8a3N8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksTGE9cWEsR3M9ZnVuY3Rpb24oKXtyZXR1cm4gTGEuRGF0ZS5ub3coKX0sTm89R3MsdnM9L1xzLztmdW5jdGlvbiBudSh5KXtmb3IodmFyIGc9eS5sZW5ndGg7Zy0tJiZ2cy50ZXN0KHkuY2hhckF0KGcpKTspO3JldHVybiBnfXZhciAkcz1udSxMdT0vXlxzKy87ZnVuY3Rpb24gZm0oeSl7cmV0dXJuIHkmJnkuc2xpY2UoMCwkcyh5KSsxKS5yZXBsYWNlKEx1LCIiKX12YXIgYXY9Zm0sVXU9TGEuU3ltYm9sLFpsPVV1LFBhPU9iamVjdC5wcm90b3R5cGUsQWw9UGEuaGFzT3duUHJvcGVydHksdWE9UGEudG9TdHJpbmcsYmM9Wmw/WmwudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIENjKHkpe3ZhciBnPUFsLmNhbGwoeSxiYykseD15W2JjXTt0cnl7eVtiY109dm9pZCAwO3ZhciBUPSEwfWNhdGNoe312YXIgQT11YS5jYWxsKHkpO3JldHVybiBUJiYoZz95W2JjXT14OmRlbGV0ZSB5W2JjXSksQX12YXIgZ2E9Q2MsTWE9T2JqZWN0LnByb3RvdHlwZSxIYT1NYS50b1N0cmluZztmdW5jdGlvbiBMbCh5KXtyZXR1cm4gSGEuY2FsbCh5KX12YXIgX2M9TGwsb3Y9IltvYmplY3QgTnVsbF0iLEpsPSJbb2JqZWN0IFVuZGVmaW5lZF0iLFoxPVpsP1psLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBGZCh5KXtyZXR1cm4geT09bnVsbD95PT09dm9pZCAwP0psOm92OloxJiZaMSBpbiBPYmplY3QoeSk/Z2EoeSk6X2MoeSl9dmFyIEoxPUZkO2Z1bmN0aW9uIEJkKHkpe3JldHVybiB5IT1udWxsJiZ0eXBlb2YgeT09Im9iamVjdCJ9dmFyIEUwPUJkLEJpPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG9uKHkpe3JldHVybiB0eXBlb2YgeT09InN5bWJvbCJ8fEUwKHkpJiZKMSh5KT09Qml9dmFyIGtyPW9uLEVpPTAvMCxKbz0vXlstK10weFswLTlhLWZdKyQvaSx2Yz0vXjBiWzAxXSskL2ksdGY9L14wb1swLTddKyQvaSxPYz1wYXJzZUludDtmdW5jdGlvbiBlZih5KXtpZih0eXBlb2YgeT09Im51bWJlciIpcmV0dXJuIHk7aWYoa3IoeSkpcmV0dXJuIEVpO2lmKEVlKHkpKXt2YXIgZz10eXBlb2YgeS52YWx1ZU9mPT0iZnVuY3Rpb24iP3kudmFsdWVPZigpOnk7eT1FZShnKT9nKyIiOmd9aWYodHlwZW9mIHkhPSJzdHJpbmciKXJldHVybiB5PT09MD95Oit5O3k9YXYoeSk7dmFyIHg9dmMudGVzdCh5KTtyZXR1cm4geHx8dGYudGVzdCh5KT9PYyh5LnNsaWNlKDIpLHg/Mjo4KTpKby50ZXN0KHkpP0VpOit5fXZhciBuZj1lZixYaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsRXM9TWF0aC5tYXgseGE9TWF0aC5taW47ZnVuY3Rpb24geGkoeSxnLHgpe3ZhciBULEEsRCxPLCQscSxTPTAsRz0hMSxXPSExLGV0PSEwO2lmKHR5cGVvZiB5IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoWGkpO2c9bmYoZyl8fDAsRWUoeCkmJihHPSEheC5sZWFkaW5nLFc9Im1heFdhaXQiaW4geCxEPVc/RXMobmYoeC5tYXhXYWl0KXx8MCxnKTpELGV0PSJ0cmFpbGluZyJpbiB4PyEheC50cmFpbGluZzpldCk7ZnVuY3Rpb24gYXQoS3Qpe3ZhciB6dD1ULGVlPUE7cmV0dXJuIFQ9QT12b2lkIDAsUz1LdCxPPXkuYXBwbHkoZWUsenQpLE99ZnVuY3Rpb24gbHQoS3Qpe3JldHVybiBTPUt0LCQ9c2V0VGltZW91dChrdCxnKSxHP2F0KEt0KTpPfWZ1bmN0aW9uIGZ0KEt0KXt2YXIgenQ9S3QtcSxlZT1LdC1TLFZ0PWctenQ7cmV0dXJuIFc/eGEoVnQsRC1lZSk6VnR9ZnVuY3Rpb24gQXQoS3Qpe3ZhciB6dD1LdC1xLGVlPUt0LVM7cmV0dXJuIHE9PT12b2lkIDB8fHp0Pj1nfHx6dDwwfHxXJiZlZT49RH1mdW5jdGlvbiBrdCgpe3ZhciBLdD1ObygpO2lmKEF0KEt0KSlyZXR1cm4gTXQoS3QpOyQ9c2V0VGltZW91dChrdCxmdChLdCkpfWZ1bmN0aW9uIE10KEt0KXtyZXR1cm4gJD12b2lkIDAsZXQmJlQ/YXQoS3QpOihUPUE9dm9pZCAwLE8pfWZ1bmN0aW9uIER0KCl7JCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KCQpLFM9MCxUPXE9QT0kPXZvaWQgMH1mdW5jdGlvbiBqdCgpe3JldHVybiAkPT09dm9pZCAwP086TXQoTm8oKSl9ZnVuY3Rpb24gWnQoKXt2YXIgS3Q9Tm8oKSx6dD1BdChLdCk7aWYoVD1hcmd1bWVudHMsQT10aGlzLHE9S3QsenQpe2lmKCQ9PT12b2lkIDApcmV0dXJuIGx0KHEpO2lmKFcpcmV0dXJuIGNsZWFyVGltZW91dCgkKSwkPXNldFRpbWVvdXQoa3QsZyksYXQocSl9cmV0dXJuICQ9PT12b2lkIDAmJigkPXNldFRpbWVvdXQoa3QsZykpLE99cmV0dXJuIFp0LmNhbmNlbD1EdCxadC5mbHVzaD1qdCxadH12YXIgV2M9eGksQ2U9Uj9SLnBlcmZvcm1hbmNlOm51bGwsZ3A9Q2UmJkNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBDZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sQmU9ZnVuY3Rpb24oKXtpZihSKXtpZihSLnJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9O2lmKFIubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSh5KX07aWYoUi53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHkpe1Iud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfTtpZihSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfX1yZXR1cm4gZnVuY3Rpb24oeSl7eSYmc2V0VGltZW91dChmdW5jdGlvbigpe3koZ3AoKSl9LDFlMy82MCl9fSgpLEZmPWZ1bmN0aW9uKGcpe3JldHVybiBCZShnKX0sZGc9Z3AsZG09OTI2MSxwaz02NTU5OSx4Mz01MzgxLE1sPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZG0sVD14LEE7QT1nLm5leHQoKSwhQS5kb25lOylUPVQqcGsrQS52YWx1ZXwwO3JldHVybiBUfSxUMD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZG07cmV0dXJuIHgqcGsrZ3wwfSxjdj1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06eDM7cmV0dXJuKHg8PDUpK3grZ3wwfSxGNT1mdW5jdGlvbihnLHgpe3JldHVybiBnKjIwOTcxNTIreH0samI9ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMF0qMjA5NzE1MitnWzFdfSxCNT1mdW5jdGlvbihnLHgpe3JldHVybltUMChnWzBdLHhbMF0pLGN2KGdbMV0seFsxXSldfSxsMT1mdW5jdGlvbihnLHgpe3ZhciBUPXt2YWx1ZTowLGRvbmU6ITF9LEE9MCxEPWcubGVuZ3RoLE89e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gQTxEP1QudmFsdWU9Z1tBKytdOlQuZG9uZT0hMCxUfX07cmV0dXJuIE1sKE8seCl9LHRkPWZ1bmN0aW9uKGcseCl7dmFyIFQ9e3ZhbHVlOjAsZG9uZTohMX0sQT0wLEQ9Zy5sZW5ndGgsTz17bmV4dDpmdW5jdGlvbigpe3JldHVybiBBPEQ/VC52YWx1ZT1nLmNoYXJDb2RlQXQoQSsrKTpULmRvbmU9ITAsVH19O3JldHVybiBNbChPLHgpfSxlZD1mdW5jdGlvbigpe3JldHVybiBSNShhcmd1bWVudHMpfSxSNT1mdW5jdGlvbihnKXtmb3IodmFyIHgsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgQT1nW1RdO1Q9PT0wP3g9dGQoQSk6eD10ZChBLHgpfXJldHVybiB4fSx1dj0hMCxqNT1jb25zb2xlLndhcm4hPW51bGwscHA9Y29uc29sZS50cmFjZSE9bnVsbCwkNT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUnx8OTAwNzE5OTI1NDc0MDk5MSxrMz1mdW5jdGlvbigpe3JldHVybiEwfSxnbT1mdW5jdGlvbigpe3JldHVybiExfSxnZz1mdW5jdGlvbigpe3JldHVybiAwfSx3TD1mdW5jdGlvbigpe30sYmw9ZnVuY3Rpb24oZyl7dGhyb3cgbmV3IEVycm9yKGcpfSxXUD1mdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXV2PSEhZztlbHNlIHJldHVybiB1dn0sU2M9ZnVuY3Rpb24oZyl7V1AoKSYmKGo1P2NvbnNvbGUud2FybihnKTooY29uc29sZS5sb2coZykscHAmJmNvbnNvbGUudHJhY2UoKSkpfSxRSz1mdW5jdGlvbihnKXtyZXR1cm4gbWUoe30sZyl9LCRiPWZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6ZHQoZyk/Zy5zbGljZSgpOmh0KGcpP1FLKGcpOmd9LFpLPWZ1bmN0aW9uKGcpe3JldHVybiBnLnNsaWNlKCl9LElUPWZ1bmN0aW9uKGcseCl7Zm9yKHg9Zz0iIjtnKys8MzY7eCs9Zyo1MSY1Mj8oZ14xNT84Xk1hdGgucmFuZG9tKCkqKGdeMjA/MTY6NCk6NCkudG9TdHJpbmcoMTYpOiItIik7cmV0dXJuIHh9LEpLPXt9LEtQPWZ1bmN0aW9uKCl7cmV0dXJuIEpLfSxCZj1mdW5jdGlvbihnKXt2YXIgeD1PYmplY3Qua2V5cyhnKTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKHZhciBBPXt9LEQ9MDtEPHgubGVuZ3RoO0QrKyl7dmFyIE89eFtEXSwkPVQ9PW51bGw/dm9pZCAwOlRbT107QVtPXT0kPT09dm9pZCAwP2dbT106JH1yZXR1cm4gQX19LHBtPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9Zy5sZW5ndGgtMTtBPj0wJiYhKGdbQV09PT14JiYoZy5zcGxpY2UoQSwxKSxUKSk7QS0tKTt9LG1MPWZ1bmN0aW9uKGcpe2cuc3BsaWNlKDAsZy5sZW5ndGgpfSxZUD1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXt2YXIgQT14W1RdO2cucHVzaChBKX19LGJwPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gVCYmKHg9dmUoVCx4KSksZ1t4XX0sYm09ZnVuY3Rpb24oZyx4LFQsQSl7VCYmKHg9dmUoVCx4KSksZ1t4XT1BfSx0WT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoKXtwKHRoaXMseSksdGhpcy5fb2JqPXt9fXJldHVybiBtKHksW3trZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxUKXtyZXR1cm4gdGhpcy5fb2JqW3hdPVQsdGhpc319LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XT12b2lkIDAsdGhpc319LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj17fX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XSE9PXZvaWQgMH19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX29ialt4XX19XSkseX0oKSx6Yj10eXBlb2YgTWFwPCJ1Ij9NYXA6dFksZVk9InVuZGVmaW5lZCIsblk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe2lmKHAodGhpcyx5KSx0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnNpemU9MCxnIT1udWxsKXt2YXIgeDtnLmluc3RhbmNlU3RyaW5nIT1udWxsJiZnLmluc3RhbmNlU3RyaW5nKCk9PT10aGlzLmluc3RhbmNlU3RyaW5nKCk/eD1nLnRvQXJyYXkoKTp4PWc7Zm9yKHZhciBUPTA7VDx4Lmxlbmd0aDtUKyspdGhpcy5hZGQoeFtUXSl9fXJldHVybiBtKHksW3trZXk6Imluc3RhbmNlU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiJzZXQifX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XSE9PTEmJihUW3hdPTEsdGhpcy5zaXplKyspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD10aGlzLl9vYmo7VFt4XT09PTEmJihUW3hdPTAsdGhpcy5zaXplLS0pfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF09PT0xfX0se2tleToidG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4geC5oYXMoVCl9KX19LHtrZXk6ImZvckVhY2giLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2goeCxUKX19XSkseX0oKSx6NT0odHlwZW9mIFNldD4idSI/InVuZGVmaW5lZCI6ZihTZXQpKSE9PWVZP1NldDpuWSxEVD1mdW5jdGlvbihnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMDtpZihnPT09dm9pZCAwfHx4PT09dm9pZCAwfHwhTnQoZykpe2JsKCJBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldCIpO3JldHVybn12YXIgQT14Lmdyb3VwO2lmKEE9PW51bGwmJih4LmRhdGEmJnguZGF0YS5zb3VyY2UhPW51bGwmJnguZGF0YS50YXJnZXQhPW51bGw/QT0iZWRnZXMiOkE9Im5vZGVzIiksQSE9PSJub2RlcyImJkEhPT0iZWRnZXMiKXtibCgiQW4gZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgYG5vZGVzYCBvciBgZWRnZXNgOyB5b3Ugc3BlY2lmaWVkIGAiK0ErImAiKTtyZXR1cm59dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXM7dmFyIEQ9dGhpcy5fcHJpdmF0ZT17Y3k6ZyxzaW5nbGU6ITAsZGF0YTp4LmRhdGF8fHt9LHBvc2l0aW9uOngucG9zaXRpb258fHt4OjAseTowfSxhdXRvV2lkdGg6dm9pZCAwLGF1dG9IZWlnaHQ6dm9pZCAwLGF1dG9QYWRkaW5nOnZvaWQgMCxjb21wb3VuZEJvdW5kc0NsZWFuOiExLGxpc3RlbmVyczpbXSxncm91cDpBLHN0eWxlOnt9LHJzdHlsZTp7fSxzdHlsZUN4dHM6W10sc3R5bGVLZXlzOnt9LHJlbW92ZWQ6ITAsc2VsZWN0ZWQ6ISF4LnNlbGVjdGVkLHNlbGVjdGFibGU6eC5zZWxlY3RhYmxlPT09dm9pZCAwPyEwOiEheC5zZWxlY3RhYmxlLGxvY2tlZDohIXgubG9ja2VkLGdyYWJiZWQ6ITEsZ3JhYmJhYmxlOnguZ3JhYmJhYmxlPT09dm9pZCAwPyEwOiEheC5ncmFiYmFibGUscGFubmFibGU6eC5wYW5uYWJsZT09PXZvaWQgMD9BPT09ImVkZ2VzIjohIXgucGFubmFibGUsYWN0aXZlOiExLGNsYXNzZXM6bmV3IHo1LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0scnNjcmF0Y2g6e30sc2NyYXRjaDp4LnNjcmF0Y2h8fHt9LGVkZ2VzOltdLGNoaWxkcmVuOltdLHBhcmVudDp4LnBhcmVudCYmeC5wYXJlbnQuaXNOb2RlKCk/eC5wYXJlbnQ6bnVsbCx0cmF2ZXJzYWxDYWNoZTp7fSxiYWNrZ3JvdW5kaW5nOiExLGJiQ2FjaGU6bnVsbCxiYkNhY2hlU2hpZnQ6e3g6MCx5OjB9LGJvZHlCb3VuZHM6bnVsbCxvdmVybGF5Qm91bmRzOm51bGwsbGFiZWxCb3VuZHM6e2FsbDpudWxsLHNvdXJjZTpudWxsLHRhcmdldDpudWxsLG1haW46bnVsbH0sYXJyb3dCb3VuZHM6e3NvdXJjZTpudWxsLHRhcmdldDpudWxsLCJtaWQtc291cmNlIjpudWxsLCJtaWQtdGFyZ2V0IjpudWxsfX07aWYoRC5wb3NpdGlvbi54PT1udWxsJiYoRC5wb3NpdGlvbi54PTApLEQucG9zaXRpb24ueT09bnVsbCYmKEQucG9zaXRpb24ueT0wKSx4LnJlbmRlcmVkUG9zaXRpb24pe3ZhciBPPXgucmVuZGVyZWRQb3NpdGlvbiwkPWcucGFuKCkscT1nLnpvb20oKTtELnBvc2l0aW9uPXt4OihPLngtJC54KS9xLHk6KE8ueS0kLnkpL3F9fXZhciBTPVtdO2R0KHguY2xhc3Nlcyk/Uz14LmNsYXNzZXM6bXQoeC5jbGFzc2VzKSYmKFM9eC5jbGFzc2VzLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBHPTAsVz1TLmxlbmd0aDtHPFc7RysrKXt2YXIgZXQ9U1tHXTshZXR8fGV0PT09IiJ8fEQuY2xhc3Nlcy5hZGQoZXQpfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBhdD14LnN0eWxlfHx4LmNzczthdCYmKFNjKCJTZXR0aW5nIGEgYHN0eWxlYCBieXBhc3MgYXQgZWxlbWVudCBjcmVhdGlvbiBzaG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuICBUcnkgdG8gdXNlIHRoZSBzdHlsZXNoZWV0IGluc3RlYWQuIiksdGhpcy5zdHlsZShhdCkpLChUPT09dm9pZCAwfHxUKSYmdGhpcy5yZXN0b3JlKCl9LFhQPWZ1bmN0aW9uKGcpe3JldHVybiBnPXtiZnM6Zy5iZnN8fCFnLmRmcyxkZnM6Zy5kZnN8fCFnLmJmc30sZnVuY3Rpb24oVCxBLEQpe3ZhciBPO2h0KFQpJiYheHQoVCkmJihPPVQsVD1PLnJvb3RzfHxPLnJvb3QsQT1PLnZpc2l0LEQ9Ty5kaXJlY3RlZCksRD1hcmd1bWVudHMubGVuZ3RoPT09MiYmIXl0KEEpP0E6RCxBPXl0KEEpP0E6ZnVuY3Rpb24oKXt9O2Zvcih2YXIgJD10aGlzLl9wcml2YXRlLmN5LHE9VD1tdChUKT90aGlzLmZpbHRlcihUKTpULFM9W10sRz1bXSxXPXt9LGV0PXt9LGF0PXt9LGx0PTAsZnQsQXQ9dGhpcy5ieUdyb3VwKCksa3Q9QXQubm9kZXMsTXQ9QXQuZWRnZXMsRHQ9MDtEdDxxLmxlbmd0aDtEdCsrKXt2YXIganQ9cVtEdF0sWnQ9anQuaWQoKTtqdC5pc05vZGUoKSYmKFMudW5zaGlmdChqdCksZy5iZnMmJihhdFtadF09ITAsRy5wdXNoKGp0KSksZXRbWnRdPTApfWZvcih2YXIgS3Q9ZnVuY3Rpb24oKXt2YXIgUGU9Zy5iZnM/Uy5zaGlmdCgpOlMucG9wKCkscGU9UGUuaWQoKTtpZihnLmRmcyl7aWYoYXRbcGVdKXJldHVybiJjb250aW51ZSI7YXRbcGVdPSEwLEcucHVzaChQZSl9dmFyIGJuPWV0W3BlXSx6ZT1XW3BlXSxWZT16ZSE9bnVsbD96ZS5zb3VyY2UoKTpudWxsLEVuPXplIT1udWxsP3plLnRhcmdldCgpOm51bGwsRG49emU9PW51bGw/dm9pZCAwOlBlLnNhbWUoVmUpP0VuWzBdOlZlWzBdLEtuPXZvaWQgMDtpZihLbj1BKFBlLHplLERuLGx0KyssYm4pLEtuPT09ITApcmV0dXJuIGZ0PVBlLCJicmVhayI7aWYoS249PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgU249UGUuY29ubmVjdGVkRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24odHIpe3JldHVybighRHx8dHIuc291cmNlKCkuc2FtZShQZSkpJiZNdC5oYXModHIpfSksV249MDtXbjxTbi5sZW5ndGg7V24rKyl7dmFyIHJyPVNuW1duXSx2cj1yci5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbih0cil7cmV0dXJuIXRyLnNhbWUoUGUpJiZrdC5oYXModHIpfSksdXI9dnIuaWQoKTt2ci5sZW5ndGghPT0wJiYhYXRbdXJdJiYodnI9dnJbMF0sUy5wdXNoKHZyKSxnLmJmcyYmKGF0W3VyXT0hMCxHLnB1c2godnIpKSxXW3VyXT1ycixldFt1cl09ZXRbcGVdKzEpfX07Uy5sZW5ndGghPT0wOyl7dmFyIHp0PUt0KCk7aWYoenQhPT0iY29udGludWUiJiZ6dD09PSJicmVhayIpYnJlYWt9Zm9yKHZhciBlZT0kLmNvbGxlY3Rpb24oKSxWdD0wO1Z0PEcubGVuZ3RoO1Z0Kyspe3ZhciBmZT1HW1Z0XSxnZT1XW2ZlLmlkKCldO2dlIT1udWxsJiZlZS5wdXNoKGdlKSxlZS5wdXNoKGZlKX1yZXR1cm57cGF0aDokLmNvbGxlY3Rpb24oZWUpLGZvdW5kOiQuY29sbGVjdGlvbihmdCl9fX0sYms9e2JyZWFkdGhGaXJzdFNlYXJjaDpYUCh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDpYUCh7ZGZzOiEwfSl9O2JrLmJmcz1iay5icmVhZHRoRmlyc3RTZWFyY2gsYmsuZGZzPWJrLmRlcHRoRmlyc3RTZWFyY2g7dmFyIHJZPUhlKGZ1bmN0aW9uKHksZyl7KGZ1bmN0aW9uKCl7dmFyIHgsVCxBLEQsTywkLHEsUyxHLFcsZXQsYXQsbHQsZnQsQXQ7QT1NYXRoLmZsb29yLFc9TWF0aC5taW4sVD1mdW5jdGlvbihrdCxNdCl7cmV0dXJuIGt0PE10Py0xOmt0Pk10PzE6MH0sRz1mdW5jdGlvbihrdCxNdCxEdCxqdCxadCl7dmFyIEt0O2lmKER0PT1udWxsJiYoRHQ9MCksWnQ9PW51bGwmJihadD1UKSxEdDwwKXRocm93IG5ldyBFcnJvcigibG8gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtmb3IoanQ9PW51bGwmJihqdD1rdC5sZW5ndGgpO0R0PGp0OylLdD1BKChEdCtqdCkvMiksWnQoTXQsa3RbS3RdKTwwP2p0PUt0OkR0PUt0KzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KGt0LFtEdCxEdC1EdF0uY29uY2F0KE10KSksTXR9LCQ9ZnVuY3Rpb24oa3QsTXQsRHQpe3JldHVybiBEdD09bnVsbCYmKER0PVQpLGt0LnB1c2goTXQpLGZ0KGt0LDAsa3QubGVuZ3RoLTEsRHQpfSxPPWZ1bmN0aW9uKGt0LE10KXt2YXIgRHQsanQ7cmV0dXJuIE10PT1udWxsJiYoTXQ9VCksRHQ9a3QucG9wKCksa3QubGVuZ3RoPyhqdD1rdFswXSxrdFswXT1EdCxBdChrdCwwLE10KSk6anQ9RHQsanR9LFM9ZnVuY3Rpb24oa3QsTXQsRHQpe3ZhciBqdDtyZXR1cm4gRHQ9PW51bGwmJihEdD1UKSxqdD1rdFswXSxrdFswXT1NdCxBdChrdCwwLER0KSxqdH0scT1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0O3JldHVybiBEdD09bnVsbCYmKER0PVQpLGt0Lmxlbmd0aCYmRHQoa3RbMF0sTXQpPDAmJihqdD1ba3RbMF0sTXRdLE10PWp0WzBdLGt0WzBdPWp0WzFdLEF0KGt0LDAsRHQpKSxNdH0sRD1mdW5jdGlvbihrdCxNdCl7dmFyIER0LGp0LFp0LEt0LHp0LGVlO2ZvcihNdD09bnVsbCYmKE10PVQpLEt0PWZ1bmN0aW9uKCl7ZWU9W107Zm9yKHZhciBWdD0wLGZlPUEoa3QubGVuZ3RoLzIpOzA8PWZlP1Z0PGZlOlZ0PmZlOzA8PWZlP1Z0Kys6VnQtLSllZS5wdXNoKFZ0KTtyZXR1cm4gZWV9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSx6dD1bXSxqdD0wLFp0PUt0Lmxlbmd0aDtqdDxadDtqdCsrKUR0PUt0W2p0XSx6dC5wdXNoKEF0KGt0LER0LE10KSk7cmV0dXJuIHp0fSxsdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0O2lmKER0PT1udWxsJiYoRHQ9VCksanQ9a3QuaW5kZXhPZihNdCksanQhPT0tMSlyZXR1cm4gZnQoa3QsMCxqdCxEdCksQXQoa3QsanQsRHQpfSxldD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlO2lmKER0PT1udWxsJiYoRHQ9VCksWnQ9a3Quc2xpY2UoMCxNdCksIVp0Lmxlbmd0aClyZXR1cm4gWnQ7Zm9yKEQoWnQsRHQpLGVlPWt0LnNsaWNlKE10KSxLdD0wLHp0PWVlLmxlbmd0aDtLdDx6dDtLdCsrKWp0PWVlW0t0XSxxKFp0LGp0LER0KTtyZXR1cm4gWnQuc29ydChEdCkucmV2ZXJzZSgpfSxhdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlLFZ0LGZlLGdlLG5lO2lmKER0PT1udWxsJiYoRHQ9VCksTXQqMTA8PWt0Lmxlbmd0aCl7aWYoS3Q9a3Quc2xpY2UoMCxNdCkuc29ydChEdCksIUt0Lmxlbmd0aClyZXR1cm4gS3Q7Zm9yKFp0PUt0W0t0Lmxlbmd0aC0xXSxmZT1rdC5zbGljZShNdCksenQ9MCxWdD1mZS5sZW5ndGg7enQ8VnQ7enQrKylqdD1mZVt6dF0sRHQoanQsWnQpPDAmJihHKEt0LGp0LDAsbnVsbCxEdCksS3QucG9wKCksWnQ9S3RbS3QubGVuZ3RoLTFdKTtyZXR1cm4gS3R9Zm9yKEQoa3QsRHQpLG5lPVtdLGVlPTAsZ2U9VyhNdCxrdC5sZW5ndGgpOzA8PWdlP2VlPGdlOmVlPmdlOzA8PWdlPysrZWU6LS1lZSluZS5wdXNoKE8oa3QsRHQpKTtyZXR1cm4gbmV9LGZ0PWZ1bmN0aW9uKGt0LE10LER0LGp0KXt2YXIgWnQsS3QsenQ7Zm9yKGp0PT1udWxsJiYoanQ9VCksWnQ9a3RbRHRdO0R0Pk10Oyl7aWYoenQ9RHQtMT4+MSxLdD1rdFt6dF0sanQoWnQsS3QpPDApe2t0W0R0XT1LdCxEdD16dDtjb250aW51ZX1icmVha31yZXR1cm4ga3RbRHRdPVp0fSxBdD1mdW5jdGlvbihrdCxNdCxEdCl7dmFyIGp0LFp0LEt0LHp0LGVlO2ZvcihEdD09bnVsbCYmKER0PVQpLFp0PWt0Lmxlbmd0aCxlZT1NdCxLdD1rdFtNdF0sanQ9MipNdCsxO2p0PFp0Oyl6dD1qdCsxLHp0PFp0JiYhKER0KGt0W2p0XSxrdFt6dF0pPDApJiYoanQ9enQpLGt0W010XT1rdFtqdF0sTXQ9anQsanQ9MipNdCsxO3JldHVybiBrdFtNdF09S3QsZnQoa3QsZWUsTXQsRHQpfSx4PWZ1bmN0aW9uKCl7a3QucHVzaD0kLGt0LnBvcD1PLGt0LnJlcGxhY2U9UyxrdC5wdXNocG9wPXEsa3QuaGVhcGlmeT1ELGt0LnVwZGF0ZUl0ZW09bHQsa3Qubmxhcmdlc3Q9ZXQsa3QubnNtYWxsZXN0PWF0O2Z1bmN0aW9uIGt0KE10KXt0aGlzLmNtcD1NdD8/VCx0aGlzLm5vZGVzPVtdfXJldHVybiBrdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihNdCl7cmV0dXJuICQodGhpcy5ub2RlcyxNdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sa3QucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKE10KXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKE10KSE9PS0xfSxrdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihNdCl7cmV0dXJuIFModGhpcy5ub2RlcyxNdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKE10KXtyZXR1cm4gcSh0aGlzLm5vZGVzLE10LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oTXQpe3JldHVybiBsdCh0aGlzLm5vZGVzLE10LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LGt0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LGt0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxrdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTXQ7cmV0dXJuIE10PW5ldyBrdCxNdC5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLE10fSxrdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxrdC5wcm90b3R5cGUuaW5zZXJ0PWt0LnByb3RvdHlwZS5wdXNoLGt0LnByb3RvdHlwZS50b3A9a3QucHJvdG90eXBlLnBlZWssa3QucHJvdG90eXBlLmZyb250PWt0LnByb3RvdHlwZS5wZWVrLGt0LnByb3RvdHlwZS5oYXM9a3QucHJvdG90eXBlLmNvbnRhaW5zLGt0LnByb3RvdHlwZS5jb3B5PWt0LnByb3RvdHlwZS5jbG9uZSxrdH0oKSxmdW5jdGlvbihrdCxNdCl7cmV0dXJuIHkuZXhwb3J0cz1NdCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KX0pLmNhbGwoWW4pfSksdms9clksaVk9QmYoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksc1k9e2RpamtzdHJhOmZ1bmN0aW9uKGcpe2lmKCFodChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSx3ZWlnaHQ6eFsxXSxkaXJlY3RlZDp4WzJdfX12YXIgVD1pWShnKSxBPVQucm9vdCxEPVQud2VpZ2h0LE89VC5kaXJlY3RlZCwkPXRoaXMscT1ELFM9bXQoQSk/dGhpcy5maWx0ZXIoQSlbMF06QVswXSxHPXt9LFc9e30sZXQ9e30sYXQ9dGhpcy5ieUdyb3VwKCksbHQ9YXQubm9kZXMsZnQ9YXQuZWRnZXM7ZnQudW5tZXJnZUJ5KGZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4uaXNMb29wKCl9KTtmb3IodmFyIEF0PWZ1bmN0aW9uKHplKXtyZXR1cm4gR1t6ZS5pZCgpXX0sa3Q9ZnVuY3Rpb24oemUsVmUpe0dbemUuaWQoKV09VmUsTXQudXBkYXRlSXRlbSh6ZSl9LE10PW5ldyB2ayhmdW5jdGlvbihibix6ZSl7cmV0dXJuIEF0KGJuKS1BdCh6ZSl9KSxEdD0wO0R0PGx0Lmxlbmd0aDtEdCsrKXt2YXIganQ9bHRbRHRdO0dbanQuaWQoKV09anQuc2FtZShTKT8wOjEvMCxNdC5wdXNoKGp0KX1mb3IodmFyIFp0PWZ1bmN0aW9uKHplLFZlKXtmb3IodmFyIEVuPShPP3plLmVkZ2VzVG8oVmUpOnplLmVkZ2VzV2l0aChWZSkpLmludGVyc2VjdChmdCksRG49MS8wLEtuLFNuPTA7U248RW4ubGVuZ3RoO1NuKyspe3ZhciBXbj1FbltTbl0scnI9cShXbik7KHJyPERufHwhS24pJiYoRG49cnIsS249V24pfXJldHVybntlZGdlOktuLGRpc3Q6RG59fTtNdC5zaXplKCk+MDspe3ZhciBLdD1NdC5wb3AoKSx6dD1BdChLdCksZWU9S3QuaWQoKTtpZihldFtlZV09enQsenQhPT0xLzApZm9yKHZhciBWdD1LdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobHQpLGZlPTA7ZmU8VnQubGVuZ3RoO2ZlKyspe3ZhciBnZT1WdFtmZV0sbmU9Z2UuaWQoKSxQZT1adChLdCxnZSkscGU9enQrUGUuZGlzdDtwZTxBdChnZSkmJihrdChnZSxwZSksV1tuZV09e25vZGU6S3QsZWRnZTpQZS5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKHplKXt2YXIgVmU9bXQoemUpP2x0LmZpbHRlcih6ZSlbMF06emVbMF07cmV0dXJuIGV0W1ZlLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oemUpe3ZhciBWZT1tdCh6ZSk/bHQuZmlsdGVyKHplKVswXTp6ZVswXSxFbj1bXSxEbj1WZSxLbj1Ebi5pZCgpO2lmKFZlLmxlbmd0aD4wKWZvcihFbi51bnNoaWZ0KFZlKTtXW0tuXTspe3ZhciBTbj1XW0tuXTtFbi51bnNoaWZ0KFNuLmVkZ2UpLEVuLnVuc2hpZnQoU24ubm9kZSksRG49U24ubm9kZSxLbj1Ebi5pZCgpfXJldHVybiAkLnNwYXduKEVuKX19fX0sYVk9e2tydXNrYWw6ZnVuY3Rpb24oZyl7Zz1nfHxmdW5jdGlvbihEdCl7cmV0dXJuIDF9O2Zvcih2YXIgeD10aGlzLmJ5R3JvdXAoKSxUPXgubm9kZXMsQT14LmVkZ2VzLEQ9VC5sZW5ndGgsTz1uZXcgQXJyYXkoRCksJD1ULHE9ZnVuY3Rpb24oanQpe2Zvcih2YXIgWnQ9MDtadDxPLmxlbmd0aDtadCsrKXt2YXIgS3Q9T1tadF07aWYoS3QuaGFzKGp0KSlyZXR1cm4gWnR9fSxTPTA7UzxEO1MrKylPW1NdPXRoaXMuc3Bhd24oVFtTXSk7Zm9yKHZhciBHPUEuc29ydChmdW5jdGlvbihEdCxqdCl7cmV0dXJuIGcoRHQpLWcoanQpfSksVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXSxhdD1ldC5zb3VyY2UoKVswXSxsdD1ldC50YXJnZXQoKVswXSxmdD1xKGF0KSxBdD1xKGx0KSxrdD1PW2Z0XSxNdD1PW0F0XTtmdCE9PUF0JiYoJC5tZXJnZShldCksa3QubWVyZ2UoTXQpLE8uc3BsaWNlKEF0LDEpKX1yZXR1cm4gJH19LG9ZPUJmKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGcpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLGNZPXthU3RhcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD1vWShnKSxBPVQucm9vdCxEPVQuZ29hbCxPPVQuaGV1cmlzdGljLCQ9VC5kaXJlY3RlZCxxPVQud2VpZ2h0O0E9eC5jb2xsZWN0aW9uKEEpWzBdLEQ9eC5jb2xsZWN0aW9uKEQpWzBdO3ZhciBTPUEuaWQoKSxHPUQuaWQoKSxXPXt9LGV0PXt9LGF0PXt9LGx0PW5ldyB2ayhmdW5jdGlvbihLbixTbil7cmV0dXJuIGV0W0tuLmlkKCldLWV0W1NuLmlkKCldfSksZnQ9bmV3IHo1LEF0PXt9LGt0PXt9LE10PWZ1bmN0aW9uKFNuLFduKXtsdC5wdXNoKFNuKSxmdC5hZGQoV24pfSxEdCxqdCxadD1mdW5jdGlvbigpe0R0PWx0LnBvcCgpLGp0PUR0LmlkKCksZnQuZGVsZXRlKGp0KX0sS3Q9ZnVuY3Rpb24oU24pe3JldHVybiBmdC5oYXMoU24pfTtNdChBLFMpLFdbU109MCxldFtTXT1PKEEpO2Zvcih2YXIgenQ9MDtsdC5zaXplKCk+MDspe2lmKFp0KCksenQrKyxqdD09PUcpe2Zvcih2YXIgZWU9W10sVnQ9RCxmZT1HLGdlPWt0W2ZlXTtlZS51bnNoaWZ0KFZ0KSxnZSE9bnVsbCYmZWUudW5zaGlmdChnZSksVnQ9QXRbZmVdLFZ0IT1udWxsOylmZT1WdC5pZCgpLGdlPWt0W2ZlXTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6V1tqdF0scGF0aDp0aGlzLnNwYXduKGVlKSxzdGVwczp6dH19YXRbanRdPSEwO2Zvcih2YXIgbmU9RHQuX3ByaXZhdGUuZWRnZXMsUGU9MDtQZTxuZS5sZW5ndGg7UGUrKyl7dmFyIHBlPW5lW1BlXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQocGUuaWQoKSkmJiEoJCYmcGUuZGF0YSgic291cmNlIikhPT1qdCkpe3ZhciBibj1wZS5zb3VyY2UoKSx6ZT1wZS50YXJnZXQoKSxWZT1ibi5pZCgpIT09anQ/Ym46emUsRW49VmUuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRW4pJiYhYXRbRW5dKXt2YXIgRG49V1tqdF0rcShwZSk7aWYoIUt0KEVuKSl7V1tFbl09RG4sZXRbRW5dPURuK08oVmUpLE10KFZlLEVuKSxBdFtFbl09RHQsa3RbRW5dPXBlO2NvbnRpbnVlfURuPFdbRW5dJiYoV1tFbl09RG4sZXRbRW5dPURuK08oVmUpLEF0W0VuXT1EdCxrdFtFbl09cGUpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6enR9fX0sdVk9QmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxsWT17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9dVkoZyksQT1ULndlaWdodCxEPVQuZGlyZWN0ZWQsTz1BLCQ9dGhpcy5ieUdyb3VwKCkscT0kLm5vZGVzLFM9JC5lZGdlcyxHPXEubGVuZ3RoLFc9RypHLGV0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gcS5pbmRleE9mKHJyKX0sYXQ9ZnVuY3Rpb24ocnIpe3JldHVybiBxW3JyXX0sbHQ9bmV3IEFycmF5KFcpLGZ0PTA7ZnQ8VztmdCsrKXt2YXIgQXQ9ZnQlRyxrdD0oZnQtQXQpL0c7a3Q9PT1BdD9sdFtmdF09MDpsdFtmdF09MS8wfWZvcih2YXIgTXQ9bmV3IEFycmF5KFcpLER0PW5ldyBBcnJheShXKSxqdD0wO2p0PFMubGVuZ3RoO2p0Kyspe3ZhciBadD1TW2p0XSxLdD1adC5zb3VyY2UoKVswXSx6dD1adC50YXJnZXQoKVswXTtpZihLdCE9PXp0KXt2YXIgZWU9ZXQoS3QpLFZ0PWV0KHp0KSxmZT1lZSpHK1Z0LGdlPU8oWnQpO2lmKGx0W2ZlXT5nZSYmKGx0W2ZlXT1nZSxNdFtmZV09VnQsRHRbZmVdPVp0KSwhRCl7dmFyIG5lPVZ0KkcrZWU7IUQmJmx0W25lXT5nZSYmKGx0W25lXT1nZSxNdFtuZV09ZWUsRHRbbmVdPVp0KX19fWZvcih2YXIgUGU9MDtQZTxHO1BlKyspZm9yKHZhciBwZT0wO3BlPEc7cGUrKylmb3IodmFyIGJuPXBlKkcrUGUsemU9MDt6ZTxHO3plKyspe3ZhciBWZT1wZSpHK3plLEVuPVBlKkcremU7bHRbYm5dK2x0W0VuXTxsdFtWZV0mJihsdFtWZV09bHRbYm5dK2x0W0VuXSxNdFtWZV09TXRbYm5dKX12YXIgRG49ZnVuY3Rpb24ocnIpe3JldHVybihtdChycik/eC5maWx0ZXIocnIpOnJyKVswXX0sS249ZnVuY3Rpb24ocnIpe3JldHVybiBldChEbihycikpfSxTbj17ZGlzdGFuY2U6ZnVuY3Rpb24ocnIsdnIpe3ZhciB1cj1LbihyciksdHI9S24odnIpO3JldHVybiBsdFt1cipHK3RyXX0scGF0aDpmdW5jdGlvbihycix2cil7dmFyIHVyPUtuKHJyKSx0cj1Lbih2ciksd249YXQodXIpO2lmKHVyPT09dHIpcmV0dXJuIHduLmNvbGxlY3Rpb24oKTtpZihNdFt1cipHK3RyXT09bnVsbClyZXR1cm4geC5jb2xsZWN0aW9uKCk7dmFyIGdyPXguY29sbGVjdGlvbigpLGZyPXVyLEpyO2Zvcihnci5tZXJnZSh3bik7dXIhPT10cjspZnI9dXIsdXI9TXRbdXIqRyt0cl0sSnI9RHRbZnIqRyt1cl0sZ3IubWVyZ2UoSnIpLGdyLm1lcmdlKGF0KHVyKSk7cmV0dXJuIGdyfX07cmV0dXJuIFNufX0saFk9QmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksZlk9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD1oWShnKSxBPVQud2VpZ2h0LEQ9VC5kaXJlY3RlZCxPPVQucm9vdCwkPUEscT10aGlzLFM9dGhpcy5jeSgpLEc9dGhpcy5ieUdyb3VwKCksVz1HLmVkZ2VzLGV0PUcubm9kZXMsYXQ9ZXQubGVuZ3RoLGx0PW5ldyB6YixmdD0hMSxBdD1bXTtPPVMuY29sbGVjdGlvbihPKVswXSxXLnVubWVyZ2VCeShmdW5jdGlvbihxaSl7cmV0dXJuIHFpLmlzTG9vcCgpfSk7Zm9yKHZhciBrdD1XLmxlbmd0aCxNdD1mdW5jdGlvbihTaSl7dmFyIFVpPWx0LmdldChTaS5pZCgpKTtyZXR1cm4gVWl8fChVaT17fSxsdC5zZXQoU2kuaWQoKSxVaSkpLFVpfSxEdD1mdW5jdGlvbihTaSl7cmV0dXJuKG10KFNpKT9TLiQoU2kpOlNpKVswXX0sanQ9ZnVuY3Rpb24oU2kpe3JldHVybiBNdChEdChTaSkpLmRpc3R9LFp0PWZ1bmN0aW9uKFNpKXtmb3IodmFyIFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpPLEdhPUR0KFNpKSxZcz1bXSx6cz1HYTs7KXtpZih6cz09bnVsbClyZXR1cm4geC5zcGF3bigpO3ZhciBFcj1NdCh6cyksUXQ9RXIuZWRnZSxqbj1Fci5wcmVkO2lmKFlzLnVuc2hpZnQoenNbMF0pLHpzLnNhbWUoVWkpJiZZcy5sZW5ndGg+MClicmVhaztRdCE9bnVsbCYmWXMudW5zaGlmdChRdCksenM9am59cmV0dXJuIHEuc3Bhd24oWXMpfSxLdD0wO0t0PGF0O0t0Kyspe3ZhciB6dD1ldFtLdF0sZWU9TXQoenQpO3p0LnNhbWUoTyk/ZWUuZGlzdD0wOmVlLmRpc3Q9MS8wLGVlLnByZWQ9bnVsbCxlZS5lZGdlPW51bGx9Zm9yKHZhciBWdD0hMSxmZT1mdW5jdGlvbihTaSxVaSxHYSxZcyx6cyxFcil7dmFyIFF0PVlzLmRpc3QrRXI7UXQ8enMuZGlzdCYmIUdhLnNhbWUoWXMuZWRnZSkmJih6cy5kaXN0PVF0LHpzLnByZWQ9U2ksenMuZWRnZT1HYSxWdD0hMCl9LGdlPTE7Z2U8YXQ7Z2UrKyl7VnQ9ITE7Zm9yKHZhciBuZT0wO25lPGt0O25lKyspe3ZhciBQZT1XW25lXSxwZT1QZS5zb3VyY2UoKSxibj1QZS50YXJnZXQoKSx6ZT0kKFBlKSxWZT1NdChwZSksRW49TXQoYm4pO2ZlKHBlLGJuLFBlLFZlLEVuLHplKSxEfHxmZShibixwZSxQZSxFbixWZSx6ZSl9aWYoIVZ0KWJyZWFrfWlmKFZ0KWZvcih2YXIgRG49W10sS249MDtLbjxrdDtLbisrKXt2YXIgU249V1tLbl0sV249U24uc291cmNlKCkscnI9U24udGFyZ2V0KCksdnI9JChTbiksdXI9TXQoV24pLmRpc3QsdHI9TXQocnIpLmRpc3Q7aWYodXIrdnI8dHJ8fCFEJiZ0cit2cjx1cilpZihmdHx8KFNjKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIiksZnQ9ITApLGcuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciB3bj1bXTt1cit2cjx0ciYmd24ucHVzaChXbiksIUQmJnRyK3ZyPHVyJiZ3bi5wdXNoKHJyKTtmb3IodmFyIGdyPXduLmxlbmd0aCxmcj0wO2ZyPGdyO2ZyKyspe3ZhciBKcj13bltmcl0sd2k9W0pyXTt3aS5wdXNoKE10KEpyKS5lZGdlKTtmb3IodmFyIEtzPU10KEpyKS5wcmVkO3dpLmluZGV4T2YoS3MpPT09LTE7KXdpLnB1c2goS3MpLHdpLnB1c2goTXQoS3MpLmVkZ2UpLEtzPU10KEtzKS5wcmVkO3dpPXdpLnNsaWNlKHdpLmluZGV4T2YoS3MpKTtmb3IodmFyIGthPXdpWzBdLmlkKCksQ2k9MCxoaT0yO2hpPHdpLmxlbmd0aDtoaSs9Mil3aVtoaV0uaWQoKTxrYSYmKGthPXdpW2hpXS5pZCgpLENpPWhpKTt3aT13aS5zbGljZShDaSkuY29uY2F0KHdpLnNsaWNlKDAsQ2kpKSx3aS5wdXNoKHdpWzBdKTt2YXIgZ3M9d2kubWFwKGZ1bmN0aW9uKHFpKXtyZXR1cm4gcWkuaWQoKX0pLmpvaW4oIiwiKTtEbi5pbmRleE9mKGdzKT09PS0xJiYoQXQucHVzaChxLnNwYXduKHdpKSksRG4ucHVzaChncykpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOmp0LHBhdGhUbzpadCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOmZ0LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOkF0fX19LGRZPU1hdGguc3FydCgyKSxnWT1mdW5jdGlvbihnLHgsVCl7VC5sZW5ndGg9PT0wJiZibCgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIEE9VFtnXSxEPUFbMV0sTz1BWzJdLCQ9eFtEXSxxPXhbT10sUz1ULEc9Uy5sZW5ndGgtMTtHPj0wO0ctLSl7dmFyIFc9U1tHXSxldD1XWzFdLGF0PVdbMl07KHhbZXRdPT09JCYmeFthdF09PT1xfHx4W2V0XT09PXEmJnhbYXRdPT09JCkmJlMuc3BsaWNlKEcsMSl9Zm9yKHZhciBsdD0wO2x0PFMubGVuZ3RoO2x0Kyspe3ZhciBmdD1TW2x0XTtmdFsxXT09PXE/KFNbbHRdPWZ0LnNsaWNlKCksU1tsdF1bMV09JCk6ZnRbMl09PT1xJiYoU1tsdF09ZnQuc2xpY2UoKSxTW2x0XVsyXT0kKX1mb3IodmFyIEF0PTA7QXQ8eC5sZW5ndGg7QXQrKyl4W0F0XT09PXEmJih4W0F0XT0kKTtyZXR1cm4gU30seUw9ZnVuY3Rpb24oZyx4LFQsQSl7Zm9yKDtUPkE7KXt2YXIgRD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpO3g9Z1koRCxnLHgpLFQtLX1yZXR1cm4geH0scFk9e2thcmdlclN0ZWluOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXRoaXMuYnlHcm91cCgpLFQ9eC5ub2RlcyxBPXguZWRnZXM7QS51bm1lcmdlQnkoZnVuY3Rpb24oRW4pe3JldHVybiBFbi5pc0xvb3AoKX0pO3ZhciBEPVQubGVuZ3RoLE89QS5sZW5ndGgsJD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coRCkvTWF0aC5MTjIsMikpLHE9TWF0aC5mbG9vcihEL2RZKTtpZihEPDIpe2JsKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIFM9W10sRz0wO0c8TztHKyspe3ZhciBXPUFbR107Uy5wdXNoKFtHLFQuaW5kZXhPZihXLnNvdXJjZSgpKSxULmluZGV4T2YoVy50YXJnZXQoKSldKX1mb3IodmFyIGV0PTEvMCxhdD1bXSxsdD1uZXcgQXJyYXkoRCksZnQ9bmV3IEFycmF5KEQpLEF0PW5ldyBBcnJheShEKSxrdD1mdW5jdGlvbihEbixLbil7Zm9yKHZhciBTbj0wO1NuPEQ7U24rKylLbltTbl09RG5bU25dfSxNdD0wO010PD0kO010Kyspe2Zvcih2YXIgRHQ9MDtEdDxEO0R0KyspZnRbRHRdPUR0O3ZhciBqdD15TChmdCxTLnNsaWNlKCksRCxxKSxadD1qdC5zbGljZSgpO2t0KGZ0LEF0KTt2YXIgS3Q9eUwoZnQsanQscSwyKSx6dD15TChBdCxadCxxLDIpO0t0Lmxlbmd0aDw9enQubGVuZ3RoJiZLdC5sZW5ndGg8ZXQ/KGV0PUt0Lmxlbmd0aCxhdD1LdCxrdChmdCxsdCkpOnp0Lmxlbmd0aDw9S3QubGVuZ3RoJiZ6dC5sZW5ndGg8ZXQmJihldD16dC5sZW5ndGgsYXQ9enQsa3QoQXQsbHQpKX1mb3IodmFyIGVlPXRoaXMuc3Bhd24oYXQubWFwKGZ1bmN0aW9uKEVuKXtyZXR1cm4gQVtFblswXV19KSksVnQ9dGhpcy5zcGF3bigpLGZlPXRoaXMuc3Bhd24oKSxnZT1sdFswXSxuZT0wO25lPGx0Lmxlbmd0aDtuZSsrKXt2YXIgUGU9bHRbbmVdLHBlPVRbbmVdO1BlPT09Z2U/VnQubWVyZ2UocGUpOmZlLm1lcmdlKHBlKX12YXIgYm49ZnVuY3Rpb24oRG4pe3ZhciBLbj1nLnNwYXduKCk7cmV0dXJuIERuLmZvckVhY2goZnVuY3Rpb24oU24pe0tuLm1lcmdlKFNuKSxTbi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oV24pe2cuY29udGFpbnMoV24pJiYhZWUuY29udGFpbnMoV24pJiZLbi5tZXJnZShXbil9KX0pLEtufSx6ZT1bYm4oVnQpLGJuKGZlKV0sVmU9e2N1dDplZSxjb21wb25lbnRzOnplLHBhcnRpdGlvbjE6VnQscGFydGl0aW9uMjpmZX07cmV0dXJuIFZlfX0sYlk9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Zy54LHk6Zy55fX0sT1Q9ZnVuY3Rpb24oZyx4LFQpe3JldHVybnt4OmcueCp4K1QueCx5OmcueSp4K1QueX19LFFQPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm57eDooZy54LVQueCkveCx5OihnLnktVC55KS94fX0scTU9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Z1swXSx5OmdbMV19fSx2WT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT0xLzAsRD14O0Q8VDtEKyspe3ZhciBPPWdbRF07aXNGaW5pdGUoTykmJihBPU1hdGgubWluKE8sQSkpfXJldHVybiBBfSx3WT1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT0tMS8wLEQ9eDtEPFQ7RCsrKXt2YXIgTz1nW0RdO2lzRmluaXRlKE8pJiYoQT1NYXRoLm1heChPLEEpKX1yZXR1cm4gQX0sbVk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmcubGVuZ3RoLEE9MCxEPTAsTz14O088VDtPKyspe3ZhciAkPWdbT107aXNGaW5pdGUoJCkmJihBKz0kLEQrKyl9cmV0dXJuIEEvRH0seVk9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsQT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsRD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7QT9nPWcuc2xpY2UoeCxUKTooVDxnLmxlbmd0aCYmZy5zcGxpY2UoVCxnLmxlbmd0aC1UKSx4PjAmJmcuc3BsaWNlKDAseCkpO2Zvcih2YXIgJD0wLHE9Zy5sZW5ndGgtMTtxPj0wO3EtLSl7dmFyIFM9Z1txXTtPP2lzRmluaXRlKFMpfHwoZ1txXT0tMS8wLCQrKyk6Zy5zcGxpY2UocSwxKX1EJiZnLnNvcnQoZnVuY3Rpb24oZXQsYXQpe3JldHVybiBldC1hdH0pO3ZhciBHPWcubGVuZ3RoLFc9TWF0aC5mbG9vcihHLzIpO3JldHVybiBHJTIhPT0wP2dbVysxKyRdOihnW1ctMSskXStnW1crJF0pLzJ9LHhZPWZ1bmN0aW9uKGcpe3JldHVybiBNYXRoLlBJKmcvMTgwfSxOVD1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmF0YW4yKHgsZyktTWF0aC5QSS8yfSx4TD1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHkpe3JldHVybiBNYXRoLmxvZyh5KS9NYXRoLmxvZygyKX0sWlA9ZnVuY3Rpb24oZyl7cmV0dXJuIGc+MD8xOmc8MD8tMTowfSxFMz1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLnNxcnQoVDMoZyx4KSl9LFQzPWZ1bmN0aW9uKGcseCl7dmFyIFQ9eC54LWcueCxBPXgueS1nLnk7cmV0dXJuIFQqVCtBKkF9LGtZPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLmxlbmd0aCxUPTAsQT0wO0E8eDtBKyspVCs9Z1tBXTtmb3IodmFyIEQ9MDtEPHg7RCsrKWdbRF09Z1tEXS9UO3JldHVybiBnfSxyZj1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm4oMS1BKSooMS1BKSpnKzIqKDEtQSkqQSp4K0EqQSpUfSxINT1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm57eDpyZihnLngseC54LFQueCxBKSx5OnJmKGcueSx4LnksVC55LEEpfX0sRVk9ZnVuY3Rpb24oZyx4LFQsQSl7dmFyIEQ9e3g6eC54LWcueCx5OngueS1nLnl9LE89RTMoZyx4KSwkPXt4OkQueC9PLHk6RC55L099O3JldHVybiBUPVQ/PzAsQT1BPz9UKk8se3g6Zy54KyQueCpBLHk6Zy55KyQueSpBfX0sd2s9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLE1hdGgubWluKFQseCkpfSxSZD1mdW5jdGlvbihnKXtpZihnPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihnLngxIT1udWxsJiZnLnkxIT1udWxsKXtpZihnLngyIT1udWxsJiZnLnkyIT1udWxsJiZnLngyPj1nLngxJiZnLnkyPj1nLnkxKXJldHVybnt4MTpnLngxLHkxOmcueTEseDI6Zy54Mix5MjpnLnkyLHc6Zy54Mi1nLngxLGg6Zy55Mi1nLnkxfTtpZihnLnchPW51bGwmJmcuaCE9bnVsbCYmZy53Pj0wJiZnLmg+PTApcmV0dXJue3gxOmcueDEseTE6Zy55MSx4MjpnLngxK2cudyx5MjpnLnkxK2cuaCx3OmcudyxoOmcuaH19fSxUWT1mdW5jdGlvbihnKXtyZXR1cm57eDE6Zy54MSx4MjpnLngyLHc6Zy53LHkxOmcueTEseTI6Zy55MixoOmcuaH19LENZPWZ1bmN0aW9uKGcpe2cueDE9MS8wLGcueTE9MS8wLGcueDI9LTEvMCxnLnkyPS0xLzAsZy53PTAsZy5oPTB9LF9ZPWZ1bmN0aW9uKGcseCl7Zy54MT1NYXRoLm1pbihnLngxLHgueDEpLGcueDI9TWF0aC5tYXgoZy54Mix4LngyKSxnLnc9Zy54Mi1nLngxLGcueTE9TWF0aC5taW4oZy55MSx4LnkxKSxnLnkyPU1hdGgubWF4KGcueTIseC55MiksZy5oPWcueTItZy55MX0sU1k9ZnVuY3Rpb24oZyx4LFQpe2cueDE9TWF0aC5taW4oZy54MSx4KSxnLngyPU1hdGgubWF4KGcueDIseCksZy53PWcueDItZy54MSxnLnkxPU1hdGgubWluKGcueTEsVCksZy55Mj1NYXRoLm1heChnLnkyLFQpLGcuaD1nLnkyLWcueTF9LFBUPWZ1bmN0aW9uKGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBnLngxLT14LGcueDIrPXgsZy55MS09eCxnLnkyKz14LGcudz1nLngyLWcueDEsZy5oPWcueTItZy55MSxnfSxrTD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFQsQSxELE87aWYoeC5sZW5ndGg9PT0xKVQ9QT1EPU89eFswXTtlbHNlIGlmKHgubGVuZ3RoPT09MilUPUQ9eFswXSxPPUE9eFsxXTtlbHNlIGlmKHgubGVuZ3RoPT09NCl7dmFyICQ9RSh4LDQpO1Q9JFswXSxBPSRbMV0sRD0kWzJdLE89JFszXX1yZXR1cm4gZy54MS09TyxnLngyKz1BLGcueTEtPVQsZy55Mis9RCxnLnc9Zy54Mi1nLngxLGcuaD1nLnkyLWcueTEsZ30sSlA9ZnVuY3Rpb24oZyx4KXtnLngxPXgueDEsZy55MT14LnkxLGcueDI9eC54MixnLnkyPXgueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxfSxFTD1mdW5jdGlvbihnLHgpe3JldHVybiEoZy54MT54LngyfHx4LngxPmcueDJ8fGcueDI8eC54MXx8eC54MjxnLngxfHxnLnkyPHgueTF8fHgueTI8Zy55MXx8Zy55MT54LnkyfHx4LnkxPmcueTIpfSxHNT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcueDE8PXgmJng8PWcueDImJmcueTE8PVQmJlQ8PWcueTJ9LEFZPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEc1KGcseC54LHgueSl9LHRGPWZ1bmN0aW9uKGcseCl7cmV0dXJuIEc1KGcseC54MSx4LnkxKSYmRzUoZyx4LngyLHgueTIpfSxlRj1mdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT14ayhELE8pLFM9RC8yLEc9Ty8yLFc7e3ZhciBldD1ULVMrcS0kLGF0PUEtRy0kLGx0PVQrUy1xKyQsZnQ9YXQ7aWYoVz12bShnLHgsVCxBLGV0LGF0LGx0LGZ0LCExKSxXLmxlbmd0aD4wKXJldHVybiBXfXt2YXIgQXQ9VCtTKyQsa3Q9QS1HK3EtJCxNdD1BdCxEdD1BK0ctcSskO2lmKFc9dm0oZyx4LFQsQSxBdCxrdCxNdCxEdCwhMSksVy5sZW5ndGg+MClyZXR1cm4gV317dmFyIGp0PVQtUytxLSQsWnQ9QStHKyQsS3Q9VCtTLXErJCx6dD1adDtpZihXPXZtKGcseCxULEEsanQsWnQsS3QsenQsITEpLFcubGVuZ3RoPjApcmV0dXJuIFd9e3ZhciBlZT1ULVMtJCxWdD1BLUcrcS0kLGZlPWVlLGdlPUErRy1xKyQ7aWYoVz12bShnLHgsVCxBLGVlLFZ0LGZlLGdlLCExKSxXLmxlbmd0aD4wKXJldHVybiBXfXZhciBuZTt7dmFyIFBlPVQtUytxLHBlPUEtRytxO2lmKG5lPW1rKGcseCxULEEsUGUscGUscSskKSxuZS5sZW5ndGg+MCYmbmVbMF08PVBlJiZuZVsxXTw9cGUpcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIGJuPVQrUy1xLHplPUEtRytxO2lmKG5lPW1rKGcseCxULEEsYm4semUscSskKSxuZS5sZW5ndGg+MCYmbmVbMF0+PWJuJiZuZVsxXTw9emUpcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIFZlPVQrUy1xLEVuPUErRy1xO2lmKG5lPW1rKGcseCxULEEsVmUsRW4scSskKSxuZS5sZW5ndGg+MCYmbmVbMF0+PVZlJiZuZVsxXT49RW4pcmV0dXJuW25lWzBdLG5lWzFdXX17dmFyIERuPVQtUytxLEtuPUErRy1xO2lmKG5lPW1rKGcseCxULEEsRG4sS24scSskKSxuZS5sZW5ndGg+MCYmbmVbMF08PURuJiZuZVsxXT49S24pcmV0dXJuW25lWzBdLG5lWzFdXX1yZXR1cm5bXX0sTFk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9JCxTPU1hdGgubWluKFQsRCksRz1NYXRoLm1heChULEQpLFc9TWF0aC5taW4oQSxPKSxldD1NYXRoLm1heChBLE8pO3JldHVybiBTLXE8PWcmJmc8PUcrcSYmVy1xPD14JiZ4PD1ldCtxfSxNWT1mdW5jdGlvbihnLHgsVCxBLEQsTywkLHEsUyl7dmFyIEc9e3gxOk1hdGgubWluKFQsJCxEKS1TLHgyOk1hdGgubWF4KFQsJCxEKStTLHkxOk1hdGgubWluKEEscSxPKS1TLHkyOk1hdGgubWF4KEEscSxPKStTfTtyZXR1cm4hKGc8Ry54MXx8Zz5HLngyfHx4PEcueTF8fHg+Ry55Mil9LElZPWZ1bmN0aW9uKGcseCxULEEpe1QtPUE7dmFyIEQ9eCp4LTQqZypUO2lmKEQ8MClyZXR1cm5bXTt2YXIgTz1NYXRoLnNxcnQoRCksJD0yKmcscT0oLXgrTykvJCxTPSgteC1PKS8kO3JldHVybltxLFNdfSxEWT1mdW5jdGlvbihnLHgsVCxBLEQpe3ZhciBPPTFlLTU7Zz09PTAmJihnPU8pLHgvPWcsVC89ZyxBLz1nO3ZhciAkLHEsUyxHLFcsZXQsYXQsbHQ7aWYocT0oMypULXgqeCkvOSxTPS0oMjcqQSkreCooOSpULTIqKHgqeCkpLFMvPTU0LCQ9cSpxKnErUypTLERbMV09MCxhdD14LzMsJD4wKXtXPVMrTWF0aC5zcXJ0KCQpLFc9VzwwPy1NYXRoLnBvdygtVywxLzMpOk1hdGgucG93KFcsMS8zKSxldD1TLU1hdGguc3FydCgkKSxldD1ldDwwPy1NYXRoLnBvdygtZXQsMS8zKTpNYXRoLnBvdyhldCwxLzMpLERbMF09LWF0K1crZXQsYXQrPShXK2V0KS8yLERbNF09RFsyXT0tYXQsYXQ9TWF0aC5zcXJ0KDMpKigtZXQrVykvMixEWzNdPWF0LERbNV09LWF0O3JldHVybn1pZihEWzVdPURbM109MCwkPT09MCl7bHQ9UzwwPy1NYXRoLnBvdygtUywxLzMpOk1hdGgucG93KFMsMS8zKSxEWzBdPS1hdCsyKmx0LERbNF09RFsyXT0tKGx0K2F0KTtyZXR1cm59cT0tcSxHPXEqcSpxLEc9TWF0aC5hY29zKFMvTWF0aC5zcXJ0KEcpKSxsdD0yKk1hdGguc3FydChxKSxEWzBdPS1hdCtsdCpNYXRoLmNvcyhHLzMpLERbMl09LWF0K2x0Kk1hdGguY29zKChHKzIqTWF0aC5QSSkvMyksRFs0XT0tYXQrbHQqTWF0aC5jb3MoKEcrNCpNYXRoLlBJKS8zKX0sT1k9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXt2YXIgUz0xKlQqVC00KlQqRCsyKlQqJCs0KkQqRC00KkQqJCskKiQrQSpBLTQqQSpPKzIqQSpxKzQqTypPLTQqTypxK3EqcSxHPTEqOSpUKkQtMypUKlQtMypUKiQtNipEKkQrMypEKiQrOSpBKk8tMypBKkEtMypBKnEtNipPKk8rMypPKnEsVz0xKjMqVCpULTYqVCpEK1QqJC1UKmcrMipEKkQrMipEKmctJCpnKzMqQSpBLTYqQSpPK0EqcS1BKngrMipPKk8rMipPKngtcSp4LGV0PTEqVCpELVQqVCtUKmctRCpnK0EqTy1BKkErQSp4LU8qeCxhdD1bXTtEWShTLEcsVyxldCxhdCk7Zm9yKHZhciBsdD0xZS03LGZ0PVtdLEF0PTA7QXQ8NjtBdCs9MilNYXRoLmFicyhhdFtBdCsxXSk8bHQmJmF0W0F0XT49MCYmYXRbQXRdPD0xJiZmdC5wdXNoKGF0W0F0XSk7ZnQucHVzaCgxKSxmdC5wdXNoKDApO2Zvcih2YXIga3Q9LTEsTXQsRHQsanQsWnQ9MDtadDxmdC5sZW5ndGg7WnQrKylNdD1NYXRoLnBvdygxLWZ0W1p0XSwyKSpUKzIqKDEtZnRbWnRdKSpmdFtadF0qRCtmdFtadF0qZnRbWnRdKiQsRHQ9TWF0aC5wb3coMS1mdFtadF0sMikqQSsyKigxLWZ0W1p0XSkqZnRbWnRdKk8rZnRbWnRdKmZ0W1p0XSpxLGp0PU1hdGgucG93KE10LWcsMikrTWF0aC5wb3coRHQteCwyKSxrdD49MD9qdDxrdCYmKGt0PWp0KTprdD1qdDtyZXR1cm4ga3R9LE5ZPWZ1bmN0aW9uKGcseCxULEEsRCxPKXt2YXIgJD1bZy1ULHgtQV0scT1bRC1ULE8tQV0sUz1xWzBdKnFbMF0rcVsxXSpxWzFdLEc9JFswXSokWzBdKyRbMV0qJFsxXSxXPSRbMF0qcVswXSskWzFdKnFbMV0sZXQ9VypXL1M7cmV0dXJuIFc8MD9HOmV0PlM/KGctRCkqKGctRCkrKHgtTykqKHgtTyk6Ry1ldH0samQ9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQSxELE8sJCxxLFM9MCxHPTA7RzxULmxlbmd0aC8yO0crKylpZihBPVRbRyoyXSxEPVRbRyoyKzFdLEcrMTxULmxlbmd0aC8yPyhPPVRbKEcrMSkqMl0sJD1UWyhHKzEpKjIrMV0pOihPPVRbKEcrMS1ULmxlbmd0aC8yKSoyXSwkPVRbKEcrMS1ULmxlbmd0aC8yKSoyKzFdKSwhKEE9PWcmJk89PWcpKWlmKEE+PWcmJmc+PU98fEE8PWcmJmc8PU8pcT0oZy1BKS8oTy1BKSooJC1EKStELHE+eCYmUysrO2Vsc2UgY29udGludWU7cmV0dXJuIFMlMiE9PTB9LGx2PWZ1bmN0aW9uKGcseCxULEEsRCxPLCQscSxTKXt2YXIgRz1uZXcgQXJyYXkoVC5sZW5ndGgpLFc7cVswXSE9bnVsbD8oVz1NYXRoLmF0YW4ocVsxXS9xWzBdKSxxWzBdPDA/Vz1XK01hdGguUEkvMjpXPS1XLU1hdGguUEkvMik6Vz1xO2Zvcih2YXIgZXQ9TWF0aC5jb3MoLVcpLGF0PU1hdGguc2luKC1XKSxsdD0wO2x0PEcubGVuZ3RoLzI7bHQrKylHW2x0KjJdPU8vMiooVFtsdCoyXSpldC1UW2x0KjIrMV0qYXQpLEdbbHQqMisxXT0kLzIqKFRbbHQqMisxXSpldCtUW2x0KjJdKmF0KSxHW2x0KjJdKz1BLEdbbHQqMisxXSs9RDt2YXIgZnQ7aWYoUz4wKXt2YXIgQXQ9ckYoRywtUyk7ZnQ9bkYoQXQpfWVsc2UgZnQ9RztyZXR1cm4gamQoZyx4LGZ0KX0sUFk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7Zm9yKHZhciBxPW5ldyBBcnJheShULmxlbmd0aCksUz1PLzIsRz0kLzIsVz1fTChPLCQpLGV0PVcqVyxhdD0wO2F0PFQubGVuZ3RoLzQ7YXQrKyl7dmFyIGx0PXZvaWQgMCxmdD12b2lkIDA7YXQ9PT0wP2x0PVQubGVuZ3RoLTI6bHQ9YXQqNC0yLGZ0PWF0KjQrMjt2YXIgQXQ9QStTKlRbYXQqNF0sa3Q9RCtHKlRbYXQqNCsxXSxNdD0tVFtsdF0qVFtmdF0tVFtsdCsxXSpUW2Z0KzFdLER0PVcvTWF0aC50YW4oTWF0aC5hY29zKE10KS8yKSxqdD1BdC1EdCpUW2x0XSxadD1rdC1EdCpUW2x0KzFdLEt0PUF0K0R0KlRbZnRdLHp0PWt0K0R0KlRbZnQrMV07cVthdCo0XT1qdCxxW2F0KjQrMV09WnQscVthdCo0KzJdPUt0LHFbYXQqNCszXT16dDt2YXIgZWU9VFtsdCsxXSxWdD0tVFtsdF0sZmU9ZWUqVFtmdF0rVnQqVFtmdCsxXTtmZTwwJiYoZWUqPS0xLFZ0Kj0tMSk7dmFyIGdlPWp0K2VlKlcsbmU9WnQrVnQqVyxQZT1NYXRoLnBvdyhnZS1nLDIpK01hdGgucG93KG5lLXgsMik7aWYoUGU8PWV0KXJldHVybiEwfXJldHVybiBqZChnLHgscSl9LG5GPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgvMiksVCxBLEQsTywkLHEsUyxHLFc9MDtXPGcubGVuZ3RoLzQ7VysrKXtUPWdbVyo0XSxBPWdbVyo0KzFdLEQ9Z1tXKjQrMl0sTz1nW1cqNCszXSxXPGcubGVuZ3RoLzQtMT8oJD1nWyhXKzEpKjRdLHE9Z1soVysxKSo0KzFdLFM9Z1soVysxKSo0KzJdLEc9Z1soVysxKSo0KzNdKTooJD1nWzBdLHE9Z1sxXSxTPWdbMl0sRz1nWzNdKTt2YXIgZXQ9dm0oVCxBLEQsTywkLHEsUyxHLCEwKTt4W1cqMl09ZXRbMF0seFtXKjIrMV09ZXRbMV19cmV0dXJuIHh9LHJGPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPW5ldyBBcnJheShnLmxlbmd0aCoyKSxBLEQsTywkLHE9MDtxPGcubGVuZ3RoLzI7cSsrKXtBPWdbcSoyXSxEPWdbcSoyKzFdLHE8Zy5sZW5ndGgvMi0xPyhPPWdbKHErMSkqMl0sJD1nWyhxKzEpKjIrMV0pOihPPWdbMF0sJD1nWzFdKTt2YXIgUz0kLUQsRz0tKE8tQSksVz1NYXRoLnNxcnQoUypTK0cqRyksZXQ9Uy9XLGF0PUcvVztUW3EqNF09QStldCp4LFRbcSo0KzFdPUQrYXQqeCxUW3EqNCsyXT1PK2V0KngsVFtxKjQrM109JCthdCp4fXJldHVybiBUfSxGWT1mdW5jdGlvbihnLHgsVCxBLEQsTyl7dmFyICQ9VC1nLHE9QS14OyQvPUQscS89Tzt2YXIgUz1NYXRoLnNxcnQoJCokK3EqcSksRz1TLTE7aWYoRzwwKXJldHVybltdO3ZhciBXPUcvUztyZXR1cm5bKFQtZykqVytnLChBLXgpKlcreF19LEMzPWZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3JldHVybiBnLT1ELHgtPU8sZy89VC8yKyQseC89QS8yKyQsZypnK3gqeDw9MX0sbWs9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9W1QtZyxBLXhdLFM9W2ctRCx4LU9dLEc9cVswXSpxWzBdK3FbMV0qcVsxXSxXPTIqKFNbMF0qcVswXStTWzFdKnFbMV0pLGV0PVNbMF0qU1swXStTWzFdKlNbMV0tJCokLGF0PVcqVy00KkcqZXQ7aWYoYXQ8MClyZXR1cm5bXTt2YXIgbHQ9KC1XK01hdGguc3FydChhdCkpLygyKkcpLGZ0PSgtVy1NYXRoLnNxcnQoYXQpKS8oMipHKSxBdD1NYXRoLm1pbihsdCxmdCksa3Q9TWF0aC5tYXgobHQsZnQpLE10PVtdO2lmKEF0Pj0wJiZBdDw9MSYmTXQucHVzaChBdCksa3Q+PTAmJmt0PD0xJiZNdC5wdXNoKGt0KSxNdC5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBEdD1NdFswXSpxWzBdK2csanQ9TXRbMF0qcVsxXSt4O2lmKE10Lmxlbmd0aD4xKXtpZihNdFswXT09TXRbMV0pcmV0dXJuW0R0LGp0XTt2YXIgWnQ9TXRbMV0qcVswXStnLEt0PU10WzFdKnFbMV0reDtyZXR1cm5bRHQsanQsWnQsS3RdfWVsc2UgcmV0dXJuW0R0LGp0XX0sVEw9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4PD1nJiZnPD1UfHxUPD1nJiZnPD14P2c6Zzw9eCYmeDw9VHx8VDw9eCYmeDw9Zz94OlR9LHZtPWZ1bmN0aW9uKGcseCxULEEsRCxPLCQscSxTKXt2YXIgRz1nLUQsVz1ULWcsZXQ9JC1ELGF0PXgtTyxsdD1BLXgsZnQ9cS1PLEF0PWV0KmF0LWZ0Kkcsa3Q9VyphdC1sdCpHLE10PWZ0KlctZXQqbHQ7aWYoTXQhPT0wKXt2YXIgRHQ9QXQvTXQsanQ9a3QvTXQsWnQ9LjAwMSxLdD0wLVp0LHp0PTErWnQ7cmV0dXJuIEt0PD1EdCYmRHQ8PXp0JiZLdDw9anQmJmp0PD16dD9bZytEdCpXLHgrRHQqbHRdOlM/W2crRHQqVyx4K0R0Kmx0XTpbXX1lbHNlIHJldHVybiBBdD09PTB8fGt0PT09MD9UTChnLFQsJCk9PT0kP1skLHFdOlRMKGcsVCxEKT09PUQ/W0QsT106VEwoRCwkLFQpPT09VD9bVCxBXTpbXTpbXX0seWs9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXt2YXIgUz1bXSxHLFc9bmV3IEFycmF5KFQubGVuZ3RoKSxldD0hMDtPPT1udWxsJiYoZXQ9ITEpO3ZhciBhdDtpZihldCl7Zm9yKHZhciBsdD0wO2x0PFcubGVuZ3RoLzI7bHQrKylXW2x0KjJdPVRbbHQqMl0qTytBLFdbbHQqMisxXT1UW2x0KjIrMV0qJCtEO2lmKHE+MCl7dmFyIGZ0PXJGKFcsLXEpO2F0PW5GKGZ0KX1lbHNlIGF0PVd9ZWxzZSBhdD1UO2Zvcih2YXIgQXQsa3QsTXQsRHQsanQ9MDtqdDxhdC5sZW5ndGgvMjtqdCsrKUF0PWF0W2p0KjJdLGt0PWF0W2p0KjIrMV0sanQ8YXQubGVuZ3RoLzItMT8oTXQ9YXRbKGp0KzEpKjJdLER0PWF0WyhqdCsxKSoyKzFdKTooTXQ9YXRbMF0sRHQ9YXRbMV0pLEc9dm0oZyx4LEEsRCxBdCxrdCxNdCxEdCksRy5sZW5ndGghPT0wJiZTLnB1c2goR1swXSxHWzFdKTtyZXR1cm4gU30sQlk9ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCxxKXtmb3IodmFyIFM9W10sRyxXPW5ldyBBcnJheShULmxlbmd0aCksZXQ9Ty8yLGF0PSQvMixsdD1fTChPLCQpLGZ0PTA7ZnQ8VC5sZW5ndGgvNDtmdCsrKXt2YXIgQXQ9dm9pZCAwLGt0PXZvaWQgMDtmdD09PTA/QXQ9VC5sZW5ndGgtMjpBdD1mdCo0LTIsa3Q9ZnQqNCsyO3ZhciBNdD1BK2V0KlRbZnQqNF0sRHQ9RCthdCpUW2Z0KjQrMV0sanQ9LVRbQXRdKlRba3RdLVRbQXQrMV0qVFtrdCsxXSxadD1sdC9NYXRoLnRhbihNYXRoLmFjb3MoanQpLzIpLEt0PU10LVp0KlRbQXRdLHp0PUR0LVp0KlRbQXQrMV0sZWU9TXQrWnQqVFtrdF0sVnQ9RHQrWnQqVFtrdCsxXTtmdD09PTA/KFdbVC5sZW5ndGgtMl09S3QsV1tULmxlbmd0aC0xXT16dCk6KFdbZnQqNC0yXT1LdCxXW2Z0KjQtMV09enQpLFdbZnQqNF09ZWUsV1tmdCo0KzFdPVZ0O3ZhciBmZT1UW0F0KzFdLGdlPS1UW0F0XSxuZT1mZSpUW2t0XStnZSpUW2t0KzFdO25lPDAmJihmZSo9LTEsZ2UqPS0xKTt2YXIgUGU9S3QrZmUqbHQscGU9enQrZ2UqbHQ7Rz1tayhnLHgsQSxELFBlLHBlLGx0KSxHLmxlbmd0aCE9PTAmJlMucHVzaChHWzBdLEdbMV0pfWZvcih2YXIgYm49MDtibjxXLmxlbmd0aC80O2JuKyspRz12bShnLHgsQSxELFdbYm4qNF0sV1tibio0KzFdLFdbYm4qNCsyXSxXW2JuKjQrM10sITEpLEcubGVuZ3RoIT09MCYmUy5wdXNoKEdbMF0sR1sxXSk7aWYoUy5sZW5ndGg+Mil7Zm9yKHZhciB6ZT1bU1swXSxTWzFdXSxWZT1NYXRoLnBvdyh6ZVswXS1nLDIpK01hdGgucG93KHplWzFdLXgsMiksRW49MTtFbjxTLmxlbmd0aC8yO0VuKyspe3ZhciBEbj1NYXRoLnBvdyhTW0VuKjJdLWcsMikrTWF0aC5wb3coU1tFbioyKzFdLXgsMik7RG48PVZlJiYoemVbMF09U1tFbioyXSx6ZVsxXT1TW0VuKjIrMV0sVmU9RG4pfXJldHVybiB6ZX1yZXR1cm4gU30sRlQ9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPVtnWzBdLXhbMF0sZ1sxXS14WzFdXSxEPU1hdGguc3FydChBWzBdKkFbMF0rQVsxXSpBWzFdKSxPPShELVQpL0Q7cmV0dXJuIE88MCYmKE89MWUtNSksW3hbMF0rTypBWzBdLHhbMV0rTypBWzFdXX0sbmQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1DTChnLHgpO3JldHVybiBUPWlGKFQpLFR9LGlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEE9Zy5sZW5ndGgvMixEPTEvMCxPPTEvMCwkPS0xLzAscT0tMS8wLFM9MDtTPEE7UysrKXg9Z1syKlNdLFQ9Z1syKlMrMV0sRD1NYXRoLm1pbihELHgpLCQ9TWF0aC5tYXgoJCx4KSxPPU1hdGgubWluKE8sVCkscT1NYXRoLm1heChxLFQpO2Zvcih2YXIgRz0yLygkLUQpLFc9Mi8ocS1PKSxldD0wO2V0PEE7ZXQrKyl4PWdbMipldF09Z1syKmV0XSpHLFQ9Z1syKmV0KzFdPWdbMipldCsxXSpXLEQ9TWF0aC5taW4oRCx4KSwkPU1hdGgubWF4KCQseCksTz1NYXRoLm1pbihPLFQpLHE9TWF0aC5tYXgocSxUKTtpZihPPC0xKWZvcih2YXIgYXQ9MDthdDxBO2F0KyspVD1nWzIqYXQrMV09Z1syKmF0KzFdKygtMS1PKTtyZXR1cm4gZ30sQ0w9ZnVuY3Rpb24oZyx4KXt2YXIgVD0xL2cqMipNYXRoLlBJLEE9ZyUyPT09MD9NYXRoLlBJLzIrVC8yOk1hdGguUEkvMjtBKz14O2Zvcih2YXIgRD1uZXcgQXJyYXkoZyoyKSxPLCQ9MDskPGc7JCsrKU89JCpUK0EsRFsyKiRdPU1hdGguY29zKE8pLERbMiokKzFdPU1hdGguc2luKC1PKTtyZXR1cm4gRH0seGs9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy80LHgvNCw4KX0sX0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy8xMCx4LzEwLDgpfSxzRj1mdW5jdGlvbigpe3JldHVybiA4fSxSWT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuW2ctMip4K1QsMiooeC1nKSxnXX0sU0w9ZnVuY3Rpb24oZyx4KXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSp4KSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmcpLGN0cmxQdE9mZnNldFBjdDouMDV9fSxqWT1CZih7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9fSksJFk9e3BhZ2VSYW5rOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1qWShnKSxUPXguZGFtcGluZ0ZhY3RvcixBPXgucHJlY2lzaW9uLEQ9eC5pdGVyYXRpb25zLE89eC53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LHE9dGhpcy5ieUdyb3VwKCksUz1xLm5vZGVzLEc9cS5lZGdlcyxXPVMubGVuZ3RoLGV0PVcqVyxhdD1HLmxlbmd0aCxsdD1uZXcgQXJyYXkoZXQpLGZ0PW5ldyBBcnJheShXKSxBdD0oMS1UKS9XLGt0PTA7a3Q8VztrdCsrKXtmb3IodmFyIE10PTA7TXQ8VztNdCsrKXt2YXIgRHQ9a3QqVytNdDtsdFtEdF09MH1mdFtrdF09MH1mb3IodmFyIGp0PTA7anQ8YXQ7anQrKyl7dmFyIFp0PUdbanRdLEt0PVp0LmRhdGEoInNvdXJjZSIpLHp0PVp0LmRhdGEoInRhcmdldCIpO2lmKEt0IT09enQpe3ZhciBlZT1TLmluZGV4T2ZJZChLdCksVnQ9Uy5pbmRleE9mSWQoenQpLGZlPU8oWnQpLGdlPVZ0KlcrZWU7bHRbZ2VdKz1mZSxmdFtlZV0rPWZlfX1mb3IodmFyIG5lPTEvVytBdCxQZT0wO1BlPFc7UGUrKylpZihmdFtQZV09PT0wKWZvcih2YXIgcGU9MDtwZTxXO3BlKyspe3ZhciBibj1wZSpXK1BlO2x0W2JuXT1uZX1lbHNlIGZvcih2YXIgemU9MDt6ZTxXO3plKyspe3ZhciBWZT16ZSpXK1BlO2x0W1ZlXT1sdFtWZV0vZnRbUGVdK0F0fWZvcih2YXIgRW49bmV3IEFycmF5KFcpLERuPW5ldyBBcnJheShXKSxLbixTbj0wO1NuPFc7U24rKylFbltTbl09MTtmb3IodmFyIFduPTA7V248RDtXbisrKXtmb3IodmFyIHJyPTA7cnI8VztycisrKURuW3JyXT0wO2Zvcih2YXIgdnI9MDt2cjxXO3ZyKyspZm9yKHZhciB1cj0wO3VyPFc7dXIrKyl7dmFyIHRyPXZyKlcrdXI7RG5bdnJdKz1sdFt0cl0qRW5bdXJdfWtZKERuKSxLbj1FbixFbj1EbixEbj1Lbjtmb3IodmFyIHduPTAsZ3I9MDtncjxXO2dyKyspe3ZhciBmcj1Lbltncl0tRW5bZ3JdO3duKz1mcipmcn1pZih3bjxBKWJyZWFrfXZhciBKcj17cmFuazpmdW5jdGlvbihLcyl7cmV0dXJuIEtzPSQuY29sbGVjdGlvbihLcylbMF0sRW5bUy5pbmRleE9mKEtzKV19fTtyZXR1cm4gSnJ9fSxhRj1CZih7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFY1PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPVQubGVuZ3RoO2lmKGcuZGlyZWN0ZWQpe2Zvcih2YXIgRz17fSxXPXt9LGV0PTAsYXQ9MCxsdD0wO2x0PEE7bHQrKyl7dmFyIGZ0PVRbbHRdLEF0PWZ0LmlkKCk7Zy5yb290PWZ0O3ZhciBrdD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZyk7ZXQ8a3QuaW5kZWdyZWUmJihldD1rdC5pbmRlZ3JlZSksYXQ8a3Qub3V0ZGVncmVlJiYoYXQ9a3Qub3V0ZGVncmVlKSxHW0F0XT1rdC5pbmRlZ3JlZSxXW0F0XT1rdC5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKER0KXtyZXR1cm4gZXQ9PTA/MDoobXQoRHQpJiYoRHQ9eC5maWx0ZXIoRHQpKSxHW0R0LmlkKCldL2V0KX0sb3V0ZGVncmVlOmZ1bmN0aW9uKER0KXtyZXR1cm4gYXQ9PT0wPzA6KG10KER0KSYmKER0PXguZmlsdGVyKER0KSksV1tEdC5pZCgpXS9hdCl9fX1lbHNle2Zvcih2YXIgRD17fSxPPTAsJD0wOyQ8QTskKyspe3ZhciBxPVRbJF07Zy5yb290PXE7dmFyIFM9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGcpO088Uy5kZWdyZWUmJihPPVMuZGVncmVlKSxEW3EuaWQoKV09Uy5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihEdCl7cmV0dXJuIE89PT0wPzA6KG10KER0KSYmKER0PXguZmlsdGVyKER0KSksRFtEdC5pZCgpXS9PKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtnPWFGKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMsQT1nLEQ9QS5yb290LE89QS53ZWlnaHQsJD1BLmRpcmVjdGVkLHE9QS5hbHBoYTtpZihEPXguY29sbGVjdGlvbihEKVswXSwkKXtmb3IodmFyIGF0PUQuY29ubmVjdGVkRWRnZXMoKSxsdD1hdC5maWx0ZXIoZnVuY3Rpb24oS3Qpe3JldHVybiBLdC50YXJnZXQoKS5zYW1lKEQpJiZULmhhcyhLdCl9KSxmdD1hdC5maWx0ZXIoZnVuY3Rpb24oS3Qpe3JldHVybiBLdC5zb3VyY2UoKS5zYW1lKEQpJiZULmhhcyhLdCl9KSxBdD1sdC5sZW5ndGgsa3Q9ZnQubGVuZ3RoLE10PTAsRHQ9MCxqdD0wO2p0PGx0Lmxlbmd0aDtqdCsrKU10Kz1PKGx0W2p0XSk7Zm9yKHZhciBadD0wO1p0PGZ0Lmxlbmd0aDtadCsrKUR0Kz1PKGZ0W1p0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KEF0LDEtcSkqTWF0aC5wb3coTXQscSksb3V0ZGVncmVlOk1hdGgucG93KGt0LDEtcSkqTWF0aC5wb3coRHQscSl9fWVsc2V7Zm9yKHZhciBTPUQuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oVCksRz1TLmxlbmd0aCxXPTAsZXQ9MDtldDxTLmxlbmd0aDtldCsrKVcrPU8oU1tldF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coRywxLXEpKk1hdGgucG93KFcscSl9fX19O1Y1LmRjPVY1LmRlZ3JlZUNlbnRyYWxpdHksVjUuZGNuPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPVY1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciBvRj1CZih7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLFU1PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtmb3IodmFyIHg9b0YoZyksVD14Lmhhcm1vbmljLEE9eC53ZWlnaHQsRD14LmRpcmVjdGVkLE89dGhpcy5jeSgpLCQ9e30scT0wLFM9dGhpcy5ub2RlcygpLEc9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6QSxkaXJlY3RlZDpEfSksVz0wO1c8Uy5sZW5ndGg7VysrKXtmb3IodmFyIGV0PTAsYXQ9U1tXXSxsdD0wO2x0PFMubGVuZ3RoO2x0KyspaWYoVyE9PWx0KXt2YXIgZnQ9Ry5kaXN0YW5jZShhdCxTW2x0XSk7VD9ldCs9MS9mdDpldCs9ZnR9VHx8KGV0PTEvZXQpLHE8ZXQmJihxPWV0KSwkW2F0LmlkKCldPWV0fXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oa3Qpe3JldHVybiBxPT0wPzA6KG10KGt0KT9rdD1PLmZpbHRlcihrdClbMF0uaWQoKTprdD1rdC5pZCgpLCRba3RdL3EpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZyl7dmFyIHg9b0YoZyksVD14LnJvb3QsQT14LndlaWdodCxEPXguZGlyZWN0ZWQsTz14Lmhhcm1vbmljO1Q9dGhpcy5maWx0ZXIoVClbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6VCx3ZWlnaHQ6QSxkaXJlY3RlZDpEfSkscT0wLFM9dGhpcy5ub2RlcygpLEc9MDtHPFMubGVuZ3RoO0crKyl7dmFyIFc9U1tHXTtpZighVy5zYW1lKFQpKXt2YXIgZXQ9JC5kaXN0YW5jZVRvKFcpO08/cSs9MS9ldDpxKz1ldH19cmV0dXJuIE8/cToxL3F9fTtVNS5jYz1VNS5jbG9zZW5lc3NDZW50cmFsaXR5LFU1LmNjbj1VNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1VNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgelk9QmYoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksQUw9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtmb3IodmFyIHg9elkoZyksVD14LmRpcmVjdGVkLEE9eC53ZWlnaHQsRD1BIT1udWxsLE89dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLHE9e30sUz17fSxHPTAsVz17c2V0OmZ1bmN0aW9uKER0LGp0KXtTW0R0XT1qdCxqdD5HJiYoRz1qdCl9LGdldDpmdW5jdGlvbihEdCl7cmV0dXJuIFNbRHRdfX0sZXQ9MDtldDwkLmxlbmd0aDtldCsrKXt2YXIgYXQ9JFtldF0sbHQ9YXQuaWQoKTtUP3FbbHRdPWF0Lm91dGdvZXJzKCkubm9kZXMoKTpxW2x0XT1hdC5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxXLnNldChsdCwwKX1mb3IodmFyIGZ0PWZ1bmN0aW9uKER0KXtmb3IodmFyIGp0PSRbRHRdLmlkKCksWnQ9W10sS3Q9e30senQ9e30sZWU9e30sVnQ9bmV3IHZrKGZ1bmN0aW9uKHVyLHRyKXtyZXR1cm4gZWVbdXJdLWVlW3RyXX0pLGZlPTA7ZmU8JC5sZW5ndGg7ZmUrKyl7dmFyIGdlPSRbZmVdLmlkKCk7S3RbZ2VdPVtdLHp0W2dlXT0wLGVlW2dlXT0xLzB9Zm9yKHp0W2p0XT0xLGVlW2p0XT0wLFZ0LnB1c2goanQpOyFWdC5lbXB0eSgpOyl7dmFyIG5lPVZ0LnBvcCgpO2lmKFp0LnB1c2gobmUpLEQpZm9yKHZhciBQZT0wO1BlPHFbbmVdLmxlbmd0aDtQZSsrKXt2YXIgcGU9cVtuZV1bUGVdLGJuPU8uZ2V0RWxlbWVudEJ5SWQobmUpLHplPXZvaWQgMDtibi5lZGdlc1RvKHBlKS5sZW5ndGg+MD96ZT1ibi5lZGdlc1RvKHBlKVswXTp6ZT1wZS5lZGdlc1RvKGJuKVswXTt2YXIgVmU9QSh6ZSk7cGU9cGUuaWQoKSxlZVtwZV0+ZWVbbmVdK1ZlJiYoZWVbcGVdPWVlW25lXStWZSxWdC5ub2Rlcy5pbmRleE9mKHBlKTwwP1Z0LnB1c2gocGUpOlZ0LnVwZGF0ZUl0ZW0ocGUpLHp0W3BlXT0wLEt0W3BlXT1bXSksZWVbcGVdPT1lZVtuZV0rVmUmJih6dFtwZV09enRbcGVdK3p0W25lXSxLdFtwZV0ucHVzaChuZSkpfWVsc2UgZm9yKHZhciBFbj0wO0VuPHFbbmVdLmxlbmd0aDtFbisrKXt2YXIgRG49cVtuZV1bRW5dLmlkKCk7ZWVbRG5dPT0xLzAmJihWdC5wdXNoKERuKSxlZVtEbl09ZWVbbmVdKzEpLGVlW0RuXT09ZWVbbmVdKzEmJih6dFtEbl09enRbRG5dK3p0W25lXSxLdFtEbl0ucHVzaChuZSkpfX1mb3IodmFyIEtuPXt9LFNuPTA7U248JC5sZW5ndGg7U24rKylLblskW1NuXS5pZCgpXT0wO2Zvcig7WnQubGVuZ3RoPjA7KXtmb3IodmFyIFduPVp0LnBvcCgpLHJyPTA7cnI8S3RbV25dLmxlbmd0aDtycisrKXt2YXIgdnI9S3RbV25dW3JyXTtLblt2cl09S25bdnJdK3p0W3ZyXS96dFtXbl0qKDErS25bV25dKX1XbiE9JFtEdF0uaWQoKSYmVy5zZXQoV24sVy5nZXQoV24pK0tuW1duXSl9fSxBdD0wO0F0PCQubGVuZ3RoO0F0KyspZnQoQXQpO3ZhciBrdD17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oRHQpe3ZhciBqdD1PLmNvbGxlY3Rpb24oRHQpLmlkKCk7cmV0dXJuIFcuZ2V0KGp0KX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKER0KXtpZihHPT0wKXJldHVybiAwO3ZhciBqdD1PLmNvbGxlY3Rpb24oRHQpLmlkKCk7cmV0dXJuIFcuZ2V0KGp0KS9HfX07cmV0dXJuIGt0LmJldHdlZW5uZXNzTm9ybWFsaXNlZD1rdC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsa3R9fTtBTC5iYz1BTC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIHFZPUJmKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeSl7cmV0dXJuIDF9XX0pLEhZPWZ1bmN0aW9uKGcpe3JldHVybiBxWShnKX0sR1k9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MCxBPTA7QTx4Lmxlbmd0aDtBKyspVCs9eFtBXShnKTtyZXR1cm4gVH0sVlk9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT0wO0E8eDtBKyspZ1tBKngrQV09VH0sY0Y9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQsQT0wO0E8eDtBKyspe1Q9MDtmb3IodmFyIEQ9MDtEPHg7RCsrKVQrPWdbRCp4K0FdO2Zvcih2YXIgTz0wO088eDtPKyspZ1tPKngrQV09Z1tPKngrQV0vVH19LFVZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9bmV3IEFycmF5KFQqVCksRD0wO0Q8VDtEKyspe2Zvcih2YXIgTz0wO088VDtPKyspQVtEKlQrT109MDtmb3IodmFyICQ9MDskPFQ7JCsrKWZvcih2YXIgcT0wO3E8VDtxKyspQVtEKlQrcV0rPWdbRCpUKyRdKnhbJCpUK3FdfXJldHVybiBBfSxXWT1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPWcuc2xpY2UoMCksRD0xO0Q8VDtEKyspZz1VWShnLEEseCk7cmV0dXJuIGd9LEtZPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9bmV3IEFycmF5KHgqeCksRD0wO0Q8eCp4O0QrKylBW0RdPU1hdGgucG93KGdbRF0sVCk7cmV0dXJuIGNGKEEseCksQX0sdUY9ZnVuY3Rpb24oZyx4LFQsQSl7Zm9yKHZhciBEPTA7RDxUO0QrKyl7dmFyIE89TWF0aC5yb3VuZChnW0RdKk1hdGgucG93KDEwLEEpKS9NYXRoLnBvdygxMCxBKSwkPU1hdGgucm91bmQoeFtEXSpNYXRoLnBvdygxMCxBKSkvTWF0aC5wb3coMTAsQSk7aWYoTyE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFlZPWZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD1bXSxPPTA7Tzx4O08rKyl7Zm9yKHZhciAkPVtdLHE9MDtxPHg7cSsrKU1hdGgucm91bmQoZ1tPKngrcV0qMWUzKS8xZTM+MCYmJC5wdXNoKFRbcV0pOyQubGVuZ3RoIT09MCYmRC5wdXNoKEEuY29sbGVjdGlvbigkKSl9cmV0dXJuIER9LFhZPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspaWYoIXhbVF18fGdbVF0uaWQoKSE9PXhbVF0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sUVk9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4KyspZm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspeCE9VCYmWFkoZ1t4XSxnW1RdKSYmZy5zcGxpY2UoVCwxKTtyZXR1cm4gZ30sbEY9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMubm9kZXMoKSxUPXRoaXMuZWRnZXMoKSxBPXRoaXMuY3koKSxEPUhZKGcpLE89e30sJD0wOyQ8eC5sZW5ndGg7JCsrKU9beFskXS5pZCgpXT0kO2Zvcih2YXIgcT14Lmxlbmd0aCxTPXEqcSxHPW5ldyBBcnJheShTKSxXLGV0PTA7ZXQ8UztldCsrKUdbZXRdPTA7Zm9yKHZhciBhdD0wO2F0PFQubGVuZ3RoO2F0Kyspe3ZhciBsdD1UW2F0XSxmdD1PW2x0LnNvdXJjZSgpLmlkKCldLEF0PU9bbHQudGFyZ2V0KCkuaWQoKV0sa3Q9R1kobHQsRC5hdHRyaWJ1dGVzKTtHW2Z0KnErQXRdKz1rdCxHW0F0KnErZnRdKz1rdH1WWShHLHEsRC5tdWx0RmFjdG9yKSxjRihHLHEpO2Zvcih2YXIgTXQ9ITAsRHQ9MDtNdCYmRHQ8RC5tYXhJdGVyYXRpb25zOylNdD0hMSxXPVdZKEcscSxELmV4cGFuZEZhY3RvciksRz1LWShXLHEsRC5pbmZsYXRlRmFjdG9yKSx1RihHLFcsUyw0KXx8KE10PSEwKSxEdCsrO3ZhciBqdD1ZWShHLHEseCxBKTtyZXR1cm4ganQ9UVkoanQpLGp0fSxaWT17bWFya292Q2x1c3RlcmluZzpsRixtY2w6bEZ9LEpZPWZ1bmN0aW9uKGcpe3JldHVybiBnfSxoRj1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmFicyh4LWcpfSxmRj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcraEYoeCxUKX0sZEY9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnK01hdGgucG93KFQteCwyKX0sdFg9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc3FydChnKX0sZVg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLGhGKHgsVCkpfSxraz1mdW5jdGlvbihnLHgsVCxBLEQpe2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06SlksJD1BLHEsUyxHPTA7RzxnO0crKylxPXgoRyksUz1UKEcpLCQ9RCgkLHEsUyk7cmV0dXJuIE8oJCl9LFc1PXtldWNsaWRlYW46ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnPj0yP2trKGcseCxULDAsZEYsdFgpOmtrKGcseCxULDAsZkYpfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4ga2soZyx4LFQsMCxkRil9LG1hbmhhdHRhbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGtrKGcseCxULDAsZkYpfSxtYXg6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBrayhnLHgsVCwtMS8wLGVYKX19O1c1WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPVc1LnNxdWFyZWRFdWNsaWRlYW4sVzUuc3F1YXJlZGV1Y2xpZGVhbj1XNS5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIEJUKHksZyx4LFQsQSxEKXt2YXIgTztyZXR1cm4geXQoeSk/Tz15Ok89VzVbeV18fFc1LmV1Y2xpZGVhbixnPT09MCYmeXQoeSk/TyhBLEQpOk8oZyx4LFQsQSxEKX12YXIgblg9QmYoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksTEw9ZnVuY3Rpb24oZyl7cmV0dXJuIG5YKGcpfSxSVD1mdW5jdGlvbihnLHgsVCxBLEQpe3ZhciBPPUQhPT0ia01lZG9pZHMiLCQ9Tz9mdW5jdGlvbihXKXtyZXR1cm4gVFtXXX06ZnVuY3Rpb24oVyl7cmV0dXJuIEFbV10oVCl9LHE9ZnVuY3Rpb24oZXQpe3JldHVybiBBW2V0XSh4KX0sUz1ULEc9eDtyZXR1cm4gQlQoZyxBLmxlbmd0aCwkLHEsUyxHKX0sTUw9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT1ULmxlbmd0aCxEPW5ldyBBcnJheShBKSxPPW5ldyBBcnJheShBKSwkPW5ldyBBcnJheSh4KSxxPW51bGwsUz0wO1M8QTtTKyspRFtTXT1nLm1pbihUW1NdKS52YWx1ZSxPW1NdPWcubWF4KFRbU10pLnZhbHVlO2Zvcih2YXIgRz0wO0c8eDtHKyspe3E9W107Zm9yKHZhciBXPTA7VzxBO1crKylxW1ddPU1hdGgucmFuZG9tKCkqKE9bV10tRFtXXSkrRFtXXTskW0ddPXF9cmV0dXJuICR9LGdGPWZ1bmN0aW9uKGcseCxULEEsRCl7Zm9yKHZhciBPPTEvMCwkPTAscT0wO3E8eC5sZW5ndGg7cSsrKXt2YXIgUz1SVChULGcseFtxXSxBLEQpO1M8TyYmKE89UywkPXEpfXJldHVybiAkfSxwRj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPVtdLEQ9bnVsbCxPPTA7Tzx4Lmxlbmd0aDtPKyspRD14W09dLFRbRC5pZCgpXT09PWcmJkEucHVzaChEKTtyZXR1cm4gQX0sclg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLmFicyh4LWcpPD1UfSxpWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPTA7QTxnLmxlbmd0aDtBKyspZm9yKHZhciBEPTA7RDxnW0FdLmxlbmd0aDtEKyspe3ZhciBPPU1hdGguYWJzKGdbQV1bRF0teFtBXVtEXSk7aWYoTz5UKXJldHVybiExfXJldHVybiEwfSxzWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPTA7QTxUO0ErKylpZihnPT09eFtBXSlyZXR1cm4hMDtyZXR1cm4hMX0sYkY9ZnVuY3Rpb24oZyx4KXt2YXIgVD1uZXcgQXJyYXkoeCk7aWYoZy5sZW5ndGg8NTApZm9yKHZhciBBPTA7QTx4O0ErKyl7Zm9yKHZhciBEPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07c1goRCxULEEpOylEPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07VFtBXT1EfWVsc2UgZm9yKHZhciBPPTA7Tzx4O08rKylUW09dPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07cmV0dXJuIFR9LHZGPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9MCxEPTA7RDx4Lmxlbmd0aDtEKyspQSs9UlQoIm1hbmhhdHRhbiIseFtEXSxnLFQsImtNZWRvaWRzIik7cmV0dXJuIEF9LGFYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPW51bGwsRD1MTChnKSxPPW5ldyBBcnJheShELmspLCQ9e30scTtELnRlc3RNb2RlP3R5cGVvZiBELnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhELnRlc3RDZW50cm9pZHMscT1NTChULEQuayxELmF0dHJpYnV0ZXMpKTpmKEQudGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9xPUQudGVzdENlbnRyb2lkczpxPU1MKFQsRC5rLEQuYXR0cmlidXRlcyk6cT1NTChULEQuayxELmF0dHJpYnV0ZXMpO2Zvcih2YXIgUz0hMCxHPTA7UyYmRzxELm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFc9MDtXPFQubGVuZ3RoO1crKylBPVRbV10sJFtBLmlkKCldPWdGKEEscSxELmRpc3RhbmNlLEQuYXR0cmlidXRlcywia01lYW5zIik7Uz0hMTtmb3IodmFyIGV0PTA7ZXQ8RC5rO2V0Kyspe3ZhciBhdD1wRihldCxULCQpO2lmKGF0Lmxlbmd0aCE9PTApe2Zvcih2YXIgbHQ9RC5hdHRyaWJ1dGVzLmxlbmd0aCxmdD1xW2V0XSxBdD1uZXcgQXJyYXkobHQpLGt0PW5ldyBBcnJheShsdCksTXQ9MDtNdDxsdDtNdCsrKXtrdFtNdF09MDtmb3IodmFyIER0PTA7RHQ8YXQubGVuZ3RoO0R0KyspQT1hdFtEdF0sa3RbTXRdKz1ELmF0dHJpYnV0ZXNbTXRdKEEpO0F0W010XT1rdFtNdF0vYXQubGVuZ3RoLHJYKEF0W010XSxmdFtNdF0sRC5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChTPSEwKX1xW2V0XT1BdCxPW2V0XT14LmNvbGxlY3Rpb24oYXQpfX1HKyt9cmV0dXJuIE99LG9YPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxBPW51bGwsRD1MTChnKSxPPW5ldyBBcnJheShELmspLCQscT17fSxTLEc9bmV3IEFycmF5KEQuayk7RC50ZXN0TW9kZT90eXBlb2YgRC50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KGYoRC50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9RC50ZXN0Q2VudHJvaWRzOiQ9YkYoVCxELmspKTokPWJGKFQsRC5rKTtmb3IodmFyIFc9ITAsZXQ9MDtXJiZldDxELm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIGF0PTA7YXQ8VC5sZW5ndGg7YXQrKylBPVRbYXRdLHFbQS5pZCgpXT1nRihBLCQsRC5kaXN0YW5jZSxELmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7Vz0hMTtmb3IodmFyIGx0PTA7bHQ8JC5sZW5ndGg7bHQrKyl7dmFyIGZ0PXBGKGx0LFQscSk7aWYoZnQubGVuZ3RoIT09MCl7R1tsdF09dkYoJFtsdF0sZnQsRC5hdHRyaWJ1dGVzKTtmb3IodmFyIEF0PTA7QXQ8ZnQubGVuZ3RoO0F0KyspUz12RihmdFtBdF0sZnQsRC5hdHRyaWJ1dGVzKSxTPEdbbHRdJiYoR1tsdF09UywkW2x0XT1mdFtBdF0sVz0hMCk7T1tsdF09eC5jb2xsZWN0aW9uKGZ0KX19ZXQrK31yZXR1cm4gT30sY1g9ZnVuY3Rpb24oZyx4LFQsQSxEKXtmb3IodmFyIE8sJCxxPTA7cTx4Lmxlbmd0aDtxKyspZm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspQVtxXVtTXT1NYXRoLnBvdyhUW3FdW1NdLEQubSk7Zm9yKHZhciBHPTA7RzxnLmxlbmd0aDtHKyspZm9yKHZhciBXPTA7VzxELmF0dHJpYnV0ZXMubGVuZ3RoO1crKyl7Tz0wLCQ9MDtmb3IodmFyIGV0PTA7ZXQ8eC5sZW5ndGg7ZXQrKylPKz1BW2V0XVtHXSpELmF0dHJpYnV0ZXNbV10oeFtldF0pLCQrPUFbZXRdW0ddO2dbR11bV109Ty8kfX0sdVg9ZnVuY3Rpb24oZyx4LFQsQSxEKXtmb3IodmFyIE89MDtPPGcubGVuZ3RoO08rKyl4W09dPWdbT10uc2xpY2UoKTtmb3IodmFyICQscSxTLEc9Mi8oRC5tLTEpLFc9MDtXPFQubGVuZ3RoO1crKylmb3IodmFyIGV0PTA7ZXQ8QS5sZW5ndGg7ZXQrKyl7JD0wO2Zvcih2YXIgYXQ9MDthdDxULmxlbmd0aDthdCsrKXE9UlQoRC5kaXN0YW5jZSxBW2V0XSxUW1ddLEQuYXR0cmlidXRlcywiY21lYW5zIiksUz1SVChELmRpc3RhbmNlLEFbZXRdLFRbYXRdLEQuYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3cocS9TLEcpO2dbZXRdW1ddPTEvJH19LGxYPWZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD1uZXcgQXJyYXkoVC5rKSxPPTA7TzxELmxlbmd0aDtPKyspRFtPXT1bXTtmb3IodmFyICQscSxTPTA7Uzx4Lmxlbmd0aDtTKyspeyQ9LTEvMCxxPS0xO2Zvcih2YXIgRz0wO0c8eFswXS5sZW5ndGg7RysrKXhbU11bR10+JCYmKCQ9eFtTXVtHXSxxPUcpO0RbcV0ucHVzaChnW1NdKX1mb3IodmFyIFc9MDtXPEQubGVuZ3RoO1crKylEW1ddPUEuY29sbGVjdGlvbihEW1ddKTtyZXR1cm4gRH0sd0Y9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEE9TEwoZyksRCxPLCQscSxTO3E9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIEc9MDtHPFQubGVuZ3RoO0crKylxW0ddPW5ldyBBcnJheShBLmspOyQ9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFc9MDtXPFQubGVuZ3RoO1crKykkW1ddPW5ldyBBcnJheShBLmspO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXtmb3IodmFyIGF0PTAsbHQ9MDtsdDxBLms7bHQrKykkW2V0XVtsdF09TWF0aC5yYW5kb20oKSxhdCs9JFtldF1bbHRdO2Zvcih2YXIgZnQ9MDtmdDxBLms7ZnQrKykkW2V0XVtmdF09JFtldF1bZnRdL2F0fU89bmV3IEFycmF5KEEuayk7Zm9yKHZhciBBdD0wO0F0PEEuaztBdCsrKU9bQXRdPW5ldyBBcnJheShBLmF0dHJpYnV0ZXMubGVuZ3RoKTtTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKHZhciBrdD0wO2t0PFQubGVuZ3RoO2t0KyspU1trdF09bmV3IEFycmF5KEEuayk7Zm9yKHZhciBNdD0hMCxEdD0wO010JiZEdDxBLm1heEl0ZXJhdGlvbnM7KU10PSExLGNYKE8sVCwkLFMsQSksdVgoJCxxLE8sVCxBKSxpWCgkLHEsQS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChNdD0hMCksRHQrKztyZXR1cm4gRD1sWChULCQsQSx4KSx7Y2x1c3RlcnM6RCxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGhYPXtrTWVhbnM6YVgsa01lZG9pZHM6b1gsZnV6enlDTWVhbnM6d0YsZmNtOndGfSxmWD1CZih7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksZFg9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0sZ1g9ZnVuY3Rpb24oZyl7dmFyIHg9ZlgoZyksVD1kWFt4LmxpbmthZ2VdO3JldHVybiBUIT1udWxsJiYoeC5saW5rYWdlPVQpLHh9LG1GPWZ1bmN0aW9uKGcseCxULEEsRCl7Zm9yKHZhciBPPTAsJD0xLzAscSxTPUQuYXR0cmlidXRlcyxHPWZ1bmN0aW9uKFZ0LGZlKXtyZXR1cm4gQlQoRC5kaXN0YW5jZSxTLmxlbmd0aCxmdW5jdGlvbihnZSl7cmV0dXJuIFNbZ2VdKFZ0KX0sZnVuY3Rpb24oZ2Upe3JldHVybiBTW2dlXShmZSl9LFZ0LGZlKX0sVz0wO1c8Zy5sZW5ndGg7VysrKXt2YXIgZXQ9Z1tXXS5rZXksYXQ9VFtldF1bQVtldF1dO2F0PCQmJihPPWV0LCQ9YXQpfWlmKEQubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1ELnRocmVzaG9sZHx8RC5tb2RlPT09ImRlbmRyb2dyYW0iJiZnLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIGx0PXhbT10sZnQ9eFtBW09dXSxBdDtELm1vZGU9PT0iZGVuZHJvZ3JhbSI/QXQ9e2xlZnQ6bHQscmlnaHQ6ZnQsa2V5Omx0LmtleX06QXQ9e3ZhbHVlOmx0LnZhbHVlLmNvbmNhdChmdC52YWx1ZSksa2V5Omx0LmtleX0sZ1tsdC5pbmRleF09QXQsZy5zcGxpY2UoZnQuaW5kZXgsMSkseFtsdC5rZXldPUF0O2Zvcih2YXIga3Q9MDtrdDxnLmxlbmd0aDtrdCsrKXt2YXIgTXQ9Z1trdF07bHQua2V5PT09TXQua2V5P3E9MS8wOkQubGlua2FnZT09PSJtaW4iPyhxPVRbbHQua2V5XVtNdC5rZXldLFRbbHQua2V5XVtNdC5rZXldPlRbZnQua2V5XVtNdC5rZXldJiYocT1UW2Z0LmtleV1bTXQua2V5XSkpOkQubGlua2FnZT09PSJtYXgiPyhxPVRbbHQua2V5XVtNdC5rZXldLFRbbHQua2V5XVtNdC5rZXldPFRbZnQua2V5XVtNdC5rZXldJiYocT1UW2Z0LmtleV1bTXQua2V5XSkpOkQubGlua2FnZT09PSJtZWFuIj9xPShUW2x0LmtleV1bTXQua2V5XSpsdC5zaXplK1RbZnQua2V5XVtNdC5rZXldKmZ0LnNpemUpLyhsdC5zaXplK2Z0LnNpemUpOkQubW9kZT09PSJkZW5kcm9ncmFtIj9xPUcoTXQudmFsdWUsbHQudmFsdWUpOnE9RyhNdC52YWx1ZVswXSxsdC52YWx1ZVswXSksVFtsdC5rZXldW010LmtleV09VFtNdC5rZXldW2x0LmtleV09cX1mb3IodmFyIER0PTA7RHQ8Zy5sZW5ndGg7RHQrKyl7dmFyIGp0PWdbRHRdLmtleTtpZihBW2p0XT09PWx0LmtleXx8QVtqdF09PT1mdC5rZXkpe2Zvcih2YXIgWnQ9anQsS3Q9MDtLdDxnLmxlbmd0aDtLdCsrKXt2YXIgenQ9Z1tLdF0ua2V5O1RbanRdW3p0XTxUW2p0XVtadF0mJihadD16dCl9QVtqdF09WnR9Z1tEdF0uaW5kZXg9RHR9cmV0dXJuIGx0LmtleT1mdC5rZXk9bHQuaW5kZXg9ZnQuaW5kZXg9bnVsbCwhMH0salQ9ZnVuY3Rpb24geShnLHgsVCl7ZyYmKGcudmFsdWU/eC5wdXNoKGcudmFsdWUpOihnLmxlZnQmJnkoZy5sZWZ0LHgpLGcucmlnaHQmJnkoZy5yaWdodCx4KSkpfSxwWD1mdW5jdGlvbiB5KGcseCl7aWYoIWcpcmV0dXJuIiI7aWYoZy5sZWZ0JiZnLnJpZ2h0KXt2YXIgVD15KGcubGVmdCx4KSxBPXkoZy5yaWdodCx4KSxEPXguYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOlQrIiwiK0F9fSk7cmV0dXJuIHguYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpULHRhcmdldDpELmlkKCl9fSkseC5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOkEsdGFyZ2V0OkQuaWQoKX19KSxELmlkKCl9ZWxzZSBpZihnLnZhbHVlKXJldHVybiBnLnZhbHVlLmlkKCl9LGJYPWZ1bmN0aW9uIHkoZyx4LFQpe2lmKCFnKXJldHVybltdO3ZhciBBPVtdLEQ9W10sTz1bXTtyZXR1cm4geD09PTA/KGcubGVmdCYmalQoZy5sZWZ0LEEpLGcucmlnaHQmJmpUKGcucmlnaHQsRCksTz1BLmNvbmNhdChEKSxbVC5jb2xsZWN0aW9uKE8pXSk6eD09PTE/Zy52YWx1ZT9bVC5jb2xsZWN0aW9uKGcudmFsdWUpXTooZy5sZWZ0JiZqVChnLmxlZnQsQSksZy5yaWdodCYmalQoZy5yaWdodCxEKSxbVC5jb2xsZWN0aW9uKEEpLFQuY29sbGVjdGlvbihEKV0pOmcudmFsdWU/W1QuY29sbGVjdGlvbihnLnZhbHVlKV06KGcubGVmdCYmKEE9eShnLmxlZnQseC0xLFQpKSxnLnJpZ2h0JiYoRD15KGcucmlnaHQseC0xLFQpKSxBLmNvbmNhdChEKSl9LHlGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksQT1nWChnKSxEPUEuYXR0cmlidXRlcyxPPWZ1bmN0aW9uKER0LGp0KXtyZXR1cm4gQlQoQS5kaXN0YW5jZSxELmxlbmd0aCxmdW5jdGlvbihadCl7cmV0dXJuIERbWnRdKER0KX0sZnVuY3Rpb24oWnQpe3JldHVybiBEW1p0XShqdCl9LER0LGp0KX0sJD1bXSxxPVtdLFM9W10sRz1bXSxXPTA7VzxULmxlbmd0aDtXKyspe3ZhciBldD17dmFsdWU6QS5tb2RlPT09ImRlbmRyb2dyYW0iP1RbV106W1RbV11dLGtleTpXLGluZGV4Old9OyRbV109ZXQsR1tXXT1ldCxxW1ddPVtdLFNbV109MH1mb3IodmFyIGF0PTA7YXQ8JC5sZW5ndGg7YXQrKylmb3IodmFyIGx0PTA7bHQ8PWF0O2x0Kyspe3ZhciBmdD12b2lkIDA7QS5tb2RlPT09ImRlbmRyb2dyYW0iP2Z0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWUsJFtsdF0udmFsdWUpOmZ0PWF0PT09bHQ/MS8wOk8oJFthdF0udmFsdWVbMF0sJFtsdF0udmFsdWVbMF0pLHFbYXRdW2x0XT1mdCxxW2x0XVthdF09ZnQsZnQ8cVthdF1bU1thdF1dJiYoU1thdF09bHQpfWZvcih2YXIgQXQ9bUYoJCxHLHEsUyxBKTtBdDspQXQ9bUYoJCxHLHEsUyxBKTt2YXIga3Q7cmV0dXJuIEEubW9kZT09PSJkZW5kcm9ncmFtIj8oa3Q9YlgoJFswXSxBLmRlbmRyb2dyYW1EZXB0aCx4KSxBLmFkZERlbmRyb2dyYW0mJnBYKCRbMF0seCkpOihrdD1uZXcgQXJyYXkoJC5sZW5ndGgpLCQuZm9yRWFjaChmdW5jdGlvbihNdCxEdCl7TXQua2V5PU10LmluZGV4PW51bGwsa3RbRHRdPXguY29sbGVjdGlvbihNdC52YWx1ZSl9KSksa3R9LHZYPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOnlGLGhjYTp5Rn0sd1g9QmYoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksbVg9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5kYW1waW5nLFQ9Zy5wcmVmZXJlbmNlOy41PD14JiZ4PDF8fGJsKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHgpKTt2YXIgQT1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gQS5zb21lKGZ1bmN0aW9uKEQpe3JldHVybiBEPT09VH0pfHxYKFQpfHxibCgiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbIi5jb25jYXQoQS5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIiciLmNvbmNhdChELCInIil9KS5qb2luKCIsICIpLCJdIG9yIGEgbnVtYmVyLiAgR290OiAiKS5jb25jYXQoVCkpLHdYKGcpfSx5WD1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD1mdW5jdGlvbigkLHEpe3JldHVybiBBW3FdKCQpfTtyZXR1cm4tQlQoZyxBLmxlbmd0aCxmdW5jdGlvbihPKXtyZXR1cm4gRCh4LE8pfSxmdW5jdGlvbihPKXtyZXR1cm4gRChULE8pfSx4LFQpfSx4WD1mdW5jdGlvbihnLHgpe3ZhciBUPW51bGw7cmV0dXJuIHg9PT0ibWVkaWFuIj9UPXlZKGcpOng9PT0ibWVhbiI/VD1tWShnKTp4PT09Im1pbiI/VD12WShnKTp4PT09Im1heCI/VD13WShnKTpUPXgsVH0sa1g9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT1bXSxEPTA7RDxnO0QrKyl4W0QqZytEXStUW0QqZytEXT4wJiZBLnB1c2goRCk7cmV0dXJuIEF9LHhGPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9W10sRD0wO0Q8ZztEKyspe2Zvcih2YXIgTz0tMSwkPS0xLzAscT0wO3E8VC5sZW5ndGg7cSsrKXt2YXIgUz1UW3FdO3hbRCpnK1NdPiQmJihPPVMsJD14W0QqZytTXSl9Tz4wJiZBLnB1c2goTyl9Zm9yKHZhciBHPTA7RzxULmxlbmd0aDtHKyspQVtUW0ddXT1UW0ddO3JldHVybiBBfSxFWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPXhGKGcseCxUKSxEPTA7RDxULmxlbmd0aDtEKyspe2Zvcih2YXIgTz1bXSwkPTA7JDxBLmxlbmd0aDskKyspQVskXT09PVRbRF0mJk8ucHVzaCgkKTtmb3IodmFyIHE9LTEsUz0tMS8wLEc9MDtHPE8ubGVuZ3RoO0crKyl7Zm9yKHZhciBXPTAsZXQ9MDtldDxPLmxlbmd0aDtldCsrKVcrPXhbT1tldF0qZytPW0ddXTtXPlMmJihxPUcsUz1XKX1UW0RdPU9bcV19cmV0dXJuIEE9eEYoZyx4LFQpLEF9LGtGPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksQT1tWChnKSxEPXt9LE89MDtPPFQubGVuZ3RoO08rKylEW1RbT10uaWQoKV09Tzt2YXIgJCxxLFMsRyxXLGV0OyQ9VC5sZW5ndGgscT0kKiQsUz1uZXcgQXJyYXkocSk7Zm9yKHZhciBhdD0wO2F0PHE7YXQrKylTW2F0XT0tMS8wO2Zvcih2YXIgbHQ9MDtsdDwkO2x0KyspZm9yKHZhciBmdD0wO2Z0PCQ7ZnQrKylsdCE9PWZ0JiYoU1tsdCokK2Z0XT15WChBLmRpc3RhbmNlLFRbbHRdLFRbZnRdLEEuYXR0cmlidXRlcykpO0c9eFgoUyxBLnByZWZlcmVuY2UpO2Zvcih2YXIgQXQ9MDtBdDwkO0F0KyspU1tBdCokK0F0XT1HO1c9bmV3IEFycmF5KHEpO2Zvcih2YXIga3Q9MDtrdDxxO2t0KyspV1trdF09MDtldD1uZXcgQXJyYXkocSk7Zm9yKHZhciBNdD0wO010PHE7TXQrKylldFtNdF09MDtmb3IodmFyIER0PW5ldyBBcnJheSgkKSxqdD1uZXcgQXJyYXkoJCksWnQ9bmV3IEFycmF5KCQpLEt0PTA7S3Q8JDtLdCsrKUR0W0t0XT0wLGp0W0t0XT0wLFp0W0t0XT0wO2Zvcih2YXIgenQ9bmV3IEFycmF5KCQqQS5taW5JdGVyYXRpb25zKSxlZT0wO2VlPHp0Lmxlbmd0aDtlZSsrKXp0W2VlXT0wO3ZhciBWdDtmb3IoVnQ9MDtWdDxBLm1heEl0ZXJhdGlvbnM7VnQrKyl7Zm9yKHZhciBmZT0wO2ZlPCQ7ZmUrKyl7Zm9yKHZhciBnZT0tMS8wLG5lPS0xLzAsUGU9LTEscGU9MCxibj0wO2JuPCQ7Ym4rKylEdFtibl09V1tmZSokK2JuXSxwZT1ldFtmZSokK2JuXStTW2ZlKiQrYm5dLHBlPj1nZT8obmU9Z2UsZ2U9cGUsUGU9Ym4pOnBlPm5lJiYobmU9cGUpO2Zvcih2YXIgemU9MDt6ZTwkO3plKyspV1tmZSokK3plXT0oMS1BLmRhbXBpbmcpKihTW2ZlKiQremVdLWdlKStBLmRhbXBpbmcqRHRbemVdO1dbZmUqJCtQZV09KDEtQS5kYW1waW5nKSooU1tmZSokK1BlXS1uZSkrQS5kYW1waW5nKkR0W1BlXX1mb3IodmFyIFZlPTA7VmU8JDtWZSsrKXtmb3IodmFyIEVuPTAsRG49MDtEbjwkO0RuKyspRHRbRG5dPWV0W0RuKiQrVmVdLGp0W0RuXT1NYXRoLm1heCgwLFdbRG4qJCtWZV0pLEVuKz1qdFtEbl07RW4tPWp0W1ZlXSxqdFtWZV09V1tWZSokK1ZlXSxFbis9anRbVmVdO2Zvcih2YXIgS249MDtLbjwkO0tuKyspZXRbS24qJCtWZV09KDEtQS5kYW1waW5nKSpNYXRoLm1pbigwLEVuLWp0W0tuXSkrQS5kYW1waW5nKkR0W0tuXTtldFtWZSokK1ZlXT0oMS1BLmRhbXBpbmcpKihFbi1qdFtWZV0pK0EuZGFtcGluZypEdFtWZV19Zm9yKHZhciBTbj0wLFduPTA7V248JDtXbisrKXt2YXIgcnI9ZXRbV24qJCtXbl0rV1tXbiokK1duXT4wPzE6MDt6dFtWdCVBLm1pbkl0ZXJhdGlvbnMqJCtXbl09cnIsU24rPXJyfWlmKFNuPjAmJihWdD49QS5taW5JdGVyYXRpb25zLTF8fFZ0PT1BLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgdnI9MCx1cj0wO3VyPCQ7dXIrKyl7WnRbdXJdPTA7Zm9yKHZhciB0cj0wO3RyPEEubWluSXRlcmF0aW9uczt0cisrKVp0W3VyXSs9enRbdHIqJCt1cl07KFp0W3VyXT09PTB8fFp0W3VyXT09PUEubWluSXRlcmF0aW9ucykmJnZyKyt9aWYodnI9PT0kKWJyZWFrfX1mb3IodmFyIHduPWtYKCQsVyxldCksZ3I9RVgoJCxTLHduKSxmcj17fSxKcj0wO0pyPHduLmxlbmd0aDtKcisrKWZyW3duW0pyXV09W107Zm9yKHZhciB3aT0wO3dpPFQubGVuZ3RoO3dpKyspe3ZhciBLcz1EW1Rbd2ldLmlkKCldLGthPWdyW0tzXTtrYSE9bnVsbCYmZnJba2FdLnB1c2goVFt3aV0pfWZvcih2YXIgQ2k9bmV3IEFycmF5KHduLmxlbmd0aCksaGk9MDtoaTx3bi5sZW5ndGg7aGkrKylDaVtoaV09eC5jb2xsZWN0aW9uKGZyW3duW2hpXV0pO3JldHVybiBDaX0sVFg9e2FmZmluaXR5UHJvcGFnYXRpb246a0YsYXA6a0Z9LENYPUJmKHtyb290OnZvaWQgMCxkaXJlY3RlZDohMX0pLF9YPXtoaWVyaG9semVyOmZ1bmN0aW9uKGcpe2lmKCFodChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSxkaXJlY3RlZDp4WzFdfX12YXIgVD1DWChnKSxBPVQucm9vdCxEPVQuZGlyZWN0ZWQsTz10aGlzLCQ9ITEscSxTLEc7QSYmKEc9bXQoQSk/dGhpcy5maWx0ZXIoQSlbMF0uaWQoKTpBWzBdLmlkKCkpO3ZhciBXPXt9LGV0PXt9O0Q/Ty5mb3JFYWNoKGZ1bmN0aW9uKE10KXt2YXIgRHQ9TXQuaWQoKTtpZihNdC5pc05vZGUoKSl7dmFyIGp0PU10LmluZGVncmVlKCEwKSxadD1NdC5vdXRkZWdyZWUoITApLEt0PWp0LVp0LHp0PVp0LWp0O0t0PT0xP3E/JD0hMDpxPUR0Onp0PT0xP1M/JD0hMDpTPUR0Oih6dD4xfHxLdD4xKSYmKCQ9ITApLFdbRHRdPVtdLE10Lm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihlZSl7ZWUuaXNFZGdlKCkmJldbRHRdLnB1c2goZWUuaWQoKSl9KX1lbHNlIGV0W0R0XT1bdm9pZCAwLE10LnRhcmdldCgpLmlkKCldfSk6Ty5mb3JFYWNoKGZ1bmN0aW9uKE10KXt2YXIgRHQ9TXQuaWQoKTtpZihNdC5pc05vZGUoKSl7dmFyIGp0PU10LmRlZ3JlZSghMCk7anQlMiYmKHE/Uz8kPSEwOlM9RHQ6cT1EdCksV1tEdF09W10sTXQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFp0KXtyZXR1cm4gV1tEdF0ucHVzaChadC5pZCgpKX0pfWVsc2UgZXRbRHRdPVtNdC5zb3VyY2UoKS5pZCgpLE10LnRhcmdldCgpLmlkKCldfSk7dmFyIGF0PXtmb3VuZDohMSx0cmFpbDp2b2lkIDB9O2lmKCQpcmV0dXJuIGF0O2lmKFMmJnEpaWYoRCl7aWYoRyYmUyE9RylyZXR1cm4gYXQ7Rz1TfWVsc2V7aWYoRyYmUyE9RyYmcSE9RylyZXR1cm4gYXQ7R3x8KEc9Uyl9ZWxzZSBHfHwoRz1PWzBdLmlkKCkpO3ZhciBsdD1mdW5jdGlvbihEdCl7Zm9yKHZhciBqdD1EdCxadD1bRHRdLEt0LHp0LGVlO1dbanRdLmxlbmd0aDspS3Q9V1tqdF0uc2hpZnQoKSx6dD1ldFtLdF1bMF0sZWU9ZXRbS3RdWzFdLGp0IT1lZT8oV1tlZV09V1tlZV0uZmlsdGVyKGZ1bmN0aW9uKFZ0KXtyZXR1cm4gVnQhPUt0fSksanQ9ZWUpOiFEJiZqdCE9enQmJihXW3p0XT1XW3p0XS5maWx0ZXIoZnVuY3Rpb24oVnQpe3JldHVybiBWdCE9S3R9KSxqdD16dCksWnQudW5zaGlmdChLdCksWnQudW5zaGlmdChqdCk7cmV0dXJuIFp0fSxmdD1bXSxBdD1bXTtmb3IoQXQ9bHQoRyk7QXQubGVuZ3RoIT0xOylXW0F0WzBdXS5sZW5ndGg9PTA/KGZ0LnVuc2hpZnQoTy5nZXRFbGVtZW50QnlJZChBdC5zaGlmdCgpKSksZnQudW5zaGlmdChPLmdldEVsZW1lbnRCeUlkKEF0LnNoaWZ0KCkpKSk6QXQ9bHQoQXQuc2hpZnQoKSkuY29uY2F0KEF0KTtmdC51bnNoaWZ0KE8uZ2V0RWxlbWVudEJ5SWQoQXQuc2hpZnQoKSkpO2Zvcih2YXIga3QgaW4gVylpZihXW2t0XS5sZW5ndGgpcmV0dXJuIGF0O3JldHVybiBhdC5mb3VuZD0hMCxhdC50cmFpbD10aGlzLnNwYXduKGZ0LCEwKSxhdH19LCRUPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXt9LFQ9MCxBPTAsRD1bXSxPPVtdLCQ9e30scT1mdW5jdGlvbihldCxhdCl7Zm9yKHZhciBsdD1PLmxlbmd0aC0xLGZ0PVtdLEF0PWcuc3Bhd24oKTtPW2x0XS54IT1ldHx8T1tsdF0ueSE9YXQ7KWZ0LnB1c2goTy5wb3AoKS5lZGdlKSxsdC0tO2Z0LnB1c2goTy5wb3AoKS5lZGdlKSxmdC5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgTXQ9a3QuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZyk7QXQubWVyZ2Uoa3QpLE10LmZvckVhY2goZnVuY3Rpb24oRHQpe3ZhciBqdD1EdC5pZCgpLFp0PUR0LmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO0F0Lm1lcmdlKER0KSx4W2p0XS5jdXRWZXJ0ZXg/QXQubWVyZ2UoWnQuZmlsdGVyKGZ1bmN0aW9uKEt0KXtyZXR1cm4gS3QuaXNMb29wKCl9KSk6QXQubWVyZ2UoWnQpfSl9KSxELnB1c2goQXQpfSxTPWZ1bmN0aW9uIFcoZXQsYXQsbHQpe2V0PT09bHQmJihBKz0xKSx4W2F0XT17aWQ6VCxsb3c6VCsrLGN1dFZlcnRleDohMX07dmFyIGZ0PWcuZ2V0RWxlbWVudEJ5SWQoYXQpLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO2lmKGZ0LnNpemUoKT09PTApRC5wdXNoKGcuc3Bhd24oZy5nZXRFbGVtZW50QnlJZChhdCkpKTtlbHNle3ZhciBBdCxrdCxNdCxEdDtmdC5mb3JFYWNoKGZ1bmN0aW9uKGp0KXtBdD1qdC5zb3VyY2UoKS5pZCgpLGt0PWp0LnRhcmdldCgpLmlkKCksTXQ9QXQ9PT1hdD9rdDpBdCxNdCE9PWx0JiYoRHQ9anQuaWQoKSwkW0R0XXx8KCRbRHRdPSEwLE8ucHVzaCh7eDphdCx5Ok10LGVkZ2U6anR9KSksTXQgaW4geD94W2F0XS5sb3c9TWF0aC5taW4oeFthdF0ubG93LHhbTXRdLmlkKTooVyhldCxNdCxhdCkseFthdF0ubG93PU1hdGgubWluKHhbYXRdLmxvdyx4W010XS5sb3cpLHhbYXRdLmlkPD14W010XS5sb3cmJih4W2F0XS5jdXRWZXJ0ZXg9ITAscShhdCxNdCkpKSl9KX19O2cuZm9yRWFjaChmdW5jdGlvbihXKXtpZihXLmlzTm9kZSgpKXt2YXIgZXQ9Vy5pZCgpO2V0IGluIHh8fChBPTAsUyhldCxldCkseFtldF0uY3V0VmVydGV4PUE+MSl9fSk7dmFyIEc9T2JqZWN0LmtleXMoeCkuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiB4W1ddLmN1dFZlcnRleH0pLm1hcChmdW5jdGlvbihXKXtyZXR1cm4gZy5nZXRFbGVtZW50QnlJZChXKX0pO3JldHVybntjdXQ6Zy5zcGF3bihHKSxjb21wb25lbnRzOkR9fSxTWD17aG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDokVCxodGJjOiRULGh0YjokVCxob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czokVH0selQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLHg9e30sVD0wLEE9W10sRD1bXSxPPWcuc3Bhd24oZyksJD1mdW5jdGlvbiBxKFMpe0QucHVzaChTKSx4W1NdPXtpbmRleDpULGxvdzpUKyssZXhwbG9yZWQ6ITF9O3ZhciBHPWcuZ2V0RWxlbWVudEJ5SWQoUykuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZyk7aWYoRy5mb3JFYWNoKGZ1bmN0aW9uKGZ0KXt2YXIgQXQ9ZnQudGFyZ2V0KCkuaWQoKTtBdCE9PVMmJihBdCBpbiB4fHxxKEF0KSx4W0F0XS5leHBsb3JlZHx8KHhbU10ubG93PU1hdGgubWluKHhbU10ubG93LHhbQXRdLmxvdykpKX0pLHhbU10uaW5kZXg9PT14W1NdLmxvdyl7Zm9yKHZhciBXPWcuc3Bhd24oKTs7KXt2YXIgZXQ9RC5wb3AoKTtpZihXLm1lcmdlKGcuZ2V0RWxlbWVudEJ5SWQoZXQpKSx4W2V0XS5sb3c9eFtTXS5pbmRleCx4W2V0XS5leHBsb3JlZD0hMCxldD09PVMpYnJlYWt9dmFyIGF0PVcuZWRnZXNXaXRoKFcpLGx0PVcubWVyZ2UoYXQpO0EucHVzaChsdCksTz1PLmRpZmZlcmVuY2UobHQpfX07cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihxKXtpZihxLmlzTm9kZSgpKXt2YXIgUz1xLmlkKCk7UyBpbiB4fHwkKFMpfX0pLHtjdXQ6Tyxjb21wb25lbnRzOkF9fSxBWD17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6elQsdHNjOnpULHRzY2M6elQsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOnpUfSxFRj17fTtbYmssc1ksYVksY1ksbFksZlkscFksJFksVjUsVTUsQUwsWlksaFgsdlgsVFgsX1gsU1gsQVhdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoRUYseSl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIFRGPTAsQ0Y9MSxfRj0yLGh2PWZ1bmN0aW9uIHkoZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KGcpO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPVRGLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGc9PSJmdW5jdGlvbiImJmcuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtodi5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24oZyl7cmV0dXJuIFNGKHRoaXMsQ0YsImZ1bGZpbGxWYWx1ZSIsZyl9LHJlamVjdDpmdW5jdGlvbihnKXtyZXR1cm4gU0YodGhpcyxfRiwicmVqZWN0UmVhc29uIixnKX0sdGhlbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMsQT1uZXcgaHY7cmV0dXJuIFQub25GdWxmaWxsZWQucHVzaChNRihnLEEsImZ1bGZpbGwiKSksVC5vblJlamVjdGVkLnB1c2goTUYoeCxBLCJyZWplY3QiKSksQUYoVCksQS5wcm94eX19O3ZhciBTRj1mdW5jdGlvbihnLHgsVCxBKXtyZXR1cm4gZy5zdGF0ZT09PVRGJiYoZy5zdGF0ZT14LGdbVF09QSxBRihnKSksZ30sQUY9ZnVuY3Rpb24oZyl7Zy5zdGF0ZT09PUNGP0xGKGcsIm9uRnVsZmlsbGVkIixnLmZ1bGZpbGxWYWx1ZSk6Zy5zdGF0ZT09PV9GJiZMRihnLCJvblJlamVjdGVkIixnLnJlamVjdFJlYXNvbil9LExGPWZ1bmN0aW9uKGcseCxUKXtpZihnW3hdLmxlbmd0aCE9PTApe3ZhciBBPWdbeF07Z1t4XT1bXTt2YXIgRD1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8QS5sZW5ndGg7JCsrKUFbJF0oVCl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKEQpOnNldFRpbWVvdXQoRCwwKX19LE1GPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZnVuY3Rpb24oQSl7aWYodHlwZW9mIGchPSJmdW5jdGlvbiIpeFtUXS5jYWxsKHgsQSk7ZWxzZXt2YXIgRDt0cnl7RD1nKEEpfWNhdGNoKE8pe3gucmVqZWN0KE8pO3JldHVybn1MWCh4LEQpfX19LExYPWZ1bmN0aW9uIHkoZyx4KXtpZihnPT09eHx8Zy5wcm94eT09PXgpe2cucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk7cmV0dXJufXZhciBUO2lmKGYoeCk9PT0ib2JqZWN0IiYmeCE9PW51bGx8fHR5cGVvZiB4PT0iZnVuY3Rpb24iKXRyeXtUPXgudGhlbn1jYXRjaChEKXtnLnJlamVjdChEKTtyZXR1cm59aWYodHlwZW9mIFQ9PSJmdW5jdGlvbiIpe3ZhciBBPSExO3RyeXtULmNhbGwoeCxmdW5jdGlvbihEKXtBfHwoQT0hMCxEPT09eD9nLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp5KGcsRCkpfSxmdW5jdGlvbihEKXtBfHwoQT0hMCxnLnJlamVjdChEKSl9KX1jYXRjaChEKXtBfHxnLnJlamVjdChEKX1yZXR1cm59Zy5mdWxmaWxsKHgpfTtodi5hbGw9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBodihmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD1uZXcgQXJyYXkoeS5sZW5ndGgpLEE9MCxEPWZ1bmN0aW9uKHEsUyl7VFtxXT1TLEErKyxBPT09eS5sZW5ndGgmJmcoVCl9LE89MDtPPHkubGVuZ3RoO08rKykoZnVuY3Rpb24oJCl7dmFyIHE9eVskXSxTPXEhPW51bGwmJnEudGhlbiE9bnVsbDtpZihTKXEudGhlbihmdW5jdGlvbihXKXtEKCQsVyl9LGZ1bmN0aW9uKFcpe3goVyl9KTtlbHNle3ZhciBHPXE7RCgkLEcpfX0pKE8pfSl9LGh2LnJlc29sdmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBodihmdW5jdGlvbihnLHgpe2coeSl9KX0saHYucmVqZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgaHYoZnVuY3Rpb24oZyx4KXt4KHkpfSl9O3ZhciBLNT10eXBlb2YgUHJvbWlzZTwidSI/UHJvbWlzZTpodixxVD1mdW5jdGlvbihnLHgsVCl7dmFyIEE9TnQoZyksRD0hQSxPPXRoaXMuX3ByaXZhdGU9bWUoe2R1cmF0aW9uOjFlM30seCxUKTtpZihPLnRhcmdldD1nLE8uc3R5bGU9Ty5zdHlsZXx8Ty5jc3MsTy5zdGFydGVkPSExLE8ucGxheWluZz0hMSxPLmhvb2tlZD0hMSxPLmFwcGx5aW5nPSExLE8ucHJvZ3Jlc3M9MCxPLmNvbXBsZXRlcz1bXSxPLmZyYW1lcz1bXSxPLmNvbXBsZXRlJiZ5dChPLmNvbXBsZXRlKSYmTy5jb21wbGV0ZXMucHVzaChPLmNvbXBsZXRlKSxEKXt2YXIgJD1nLnBvc2l0aW9uKCk7Ty5zdGFydFBvc2l0aW9uPU8uc3RhcnRQb3NpdGlvbnx8e3g6JC54LHk6JC55fSxPLnN0YXJ0U3R5bGU9Ty5zdGFydFN0eWxlfHxnLmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKGcsTy5zdHlsZSl9aWYoQSl7dmFyIHE9Zy5wYW4oKTtPLnN0YXJ0UGFuPXt4OnEueCx5OnEueX0sTy5zdGFydFpvb209Zy56b29tKCl9dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXN9LF8zPXFULnByb3RvdHlwZTttZShfMyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iYW5pbWF0aW9uIn0saG9vazpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoIWcuaG9va2VkKXt2YXIgeCxUPWcudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtnLnF1ZXVlP3g9VC5xdWV1ZTp4PVQuY3VycmVudCx4LnB1c2godGhpcykseHQoZy50YXJnZXQpJiZnLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChnLnRhcmdldCksZy5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO3JldHVybiBnLnByb2dyZXNzPT09MSYmKGcucHJvZ3Jlc3M9MCksZy5wbGF5aW5nPSEwLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30scGxheWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmd9LGFwcGx5OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5hcHBseWluZz0hMCxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LGFwcGx5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYXBwbHlpbmd9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITAsdGhpc30scmV3aW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LGZhc3Rmb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LHRpbWU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94LnByb2dyZXNzKnguZHVyYXRpb246dGhpcy5wcm9ncmVzcyhnL3guZHVyYXRpb24pfSxwcm9ncmVzczpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wbGF5aW5nO3JldHVybiBnPT09dm9pZCAwP3gucHJvZ3Jlc3M6KFQmJnRoaXMucGF1c2UoKSx4LnByb2dyZXNzPWcseC5zdGFydGVkPSExLFQmJnRoaXMucGxheSgpLHRoaXMpfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LHJldmVyc2U6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLHg9Zy5wbGF5aW5nO3gmJnRoaXMucGF1c2UoKSxnLnByb2dyZXNzPTEtZy5wcm9ncmVzcyxnLnN0YXJ0ZWQ9ITE7dmFyIFQ9ZnVuY3Rpb24oUyxHKXt2YXIgVz1nW1NdO1chPW51bGwmJihnW1NdPWdbR10sZ1tHXT1XKX07aWYoVCgiem9vbSIsInN0YXJ0Wm9vbSIpLFQoInBhbiIsInN0YXJ0UGFuIiksVCgicG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiksZy5zdHlsZSlmb3IodmFyIEE9MDtBPGcuc3R5bGUubGVuZ3RoO0ErKyl7dmFyIEQ9Zy5zdHlsZVtBXSxPPUQubmFtZSwkPWcuc3RhcnRTdHlsZVtPXTtnLnN0YXJ0U3R5bGVbT109RCxnLnN0eWxlW0FdPSR9cmV0dXJuIHgmJnRoaXMucGxheSgpLHRoaXN9LHByb21pc2U6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUO3N3aXRjaChnKXtjYXNlImZyYW1lIjpUPXguZnJhbWVzO2JyZWFrO2RlZmF1bHQ6Y2FzZSJjb21wbGV0ZSI6Y2FzZSJjb21wbGV0ZWQiOlQ9eC5jb21wbGV0ZXN9cmV0dXJuIG5ldyBLNShmdW5jdGlvbihBLEQpe1QucHVzaChmdW5jdGlvbigpe0EoKX0pfSl9fSksXzMuY29tcGxldGU9XzMuY29tcGxldGVkLF8zLnJ1bj1fMy5wbGF5LF8zLnJ1bm5pbmc9XzMucGxheWluZzt2YXIgTVg9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxUPXgubGVuZ3RoIT09dm9pZCAwLEE9VD94Olt4XSxEPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIUQuc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIE89QVswXTtpZihPKXJldHVybiBPLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsVD14Lmxlbmd0aCE9PXZvaWQgMCxBPVQ/eDpbeF0sRD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFELnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgTz0wO088QS5sZW5ndGg7TysrKXt2YXIgJD1BW09dOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBBLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6eCxkdXJhdGlvbjp4LGNvbXBsZXRlOlR9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBBLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTp4LGR1cmF0aW9uOngsY29tcGxldGU6VH0pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLEQ9QS5sZW5ndGghPT12b2lkIDAsTz1EP0E6W0FdLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxxPSFELFM9IXE7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEc9JC5zdHlsZSgpO3g9bWUoe30seCxUKTt2YXIgVz1PYmplY3Qua2V5cyh4KS5sZW5ndGg9PT0wO2lmKFcpcmV0dXJuIG5ldyBxVChPWzBdLHgpO3N3aXRjaCh4LmR1cmF0aW9uPT09dm9pZCAwJiYoeC5kdXJhdGlvbj00MDApLHguZHVyYXRpb24pe2Nhc2Uic2xvdyI6eC5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0Ijp4LmR1cmF0aW9uPTIwMDticmVha31pZihTJiYoeC5zdHlsZT1HLmdldFByb3BzTGlzdCh4LnN0eWxlfHx4LmNzcykseC5jc3M9dm9pZCAwKSxTJiZ4LnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBldD14LnJlbmRlcmVkUG9zaXRpb24sYXQ9JC5wYW4oKSxsdD0kLnpvb20oKTt4LnBvc2l0aW9uPVFQKGV0LGx0LGF0KX1pZihxJiZ4LnBhbkJ5IT1udWxsKXt2YXIgZnQ9eC5wYW5CeSxBdD0kLnBhbigpO3gucGFuPXt4OkF0LngrZnQueCx5OkF0LnkrZnQueX19dmFyIGt0PXguY2VudGVyfHx4LmNlbnRyZTtpZihxJiZrdCE9bnVsbCl7dmFyIE10PSQuZ2V0Q2VudGVyUGFuKGt0LmVsZXMseC56b29tKTtNdCE9bnVsbCYmKHgucGFuPU10KX1pZihxJiZ4LmZpdCE9bnVsbCl7dmFyIER0PXguZml0LGp0PSQuZ2V0Rml0Vmlld3BvcnQoRHQuZWxlc3x8RHQuYm91bmRpbmdCb3gsRHQucGFkZGluZyk7anQhPW51bGwmJih4LnBhbj1qdC5wYW4seC56b29tPWp0Lnpvb20pfWlmKHEmJmh0KHguem9vbSkpe3ZhciBadD0kLmdldFpvb21lZFZpZXdwb3J0KHguem9vbSk7WnQhPW51bGw/KFp0Lnpvb21lZCYmKHguem9vbT1adC56b29tKSxadC5wYW5uZWQmJih4LnBhbj1adC5wYW4pKTp4Lnpvb209bnVsbH1yZXR1cm4gbmV3IHFUKE9bMF0seCl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEE9dGhpcyxEPUEubGVuZ3RoIT09dm9pZCAwLE89RD9BOltBXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7VCYmKHg9bWUoe30seCxUKSk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe3ZhciBTPU9bcV0sRz1TLmFuaW1hdGVkKCkmJih4LnF1ZXVlPT09dm9pZCAwfHx4LnF1ZXVlKSxXPVMuYW5pbWF0aW9uKHgsRz97cXVldWU6ITB9OnZvaWQgMCk7Vy5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEE9dGhpcyxEPUEubGVuZ3RoIT09dm9pZCAwLE89RD9BOltBXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe2Zvcih2YXIgUz1PW3FdLEc9Uy5fcHJpdmF0ZSxXPUcuYW5pbWF0aW9uLmN1cnJlbnQsZXQ9MDtldDxXLmxlbmd0aDtldCsrKXt2YXIgYXQ9V1tldF0sbHQ9YXQuX3ByaXZhdGU7VCYmKGx0LmR1cmF0aW9uPTApfXgmJihHLmFuaW1hdGlvbi5xdWV1ZT1bXSksVHx8KEcuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0sSVg9QXJyYXkuaXNBcnJheSxIVD1JWCxEWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxPWD0vXlx3KiQvO2Z1bmN0aW9uIE5YKHksZyl7aWYoSFQoeSkpcmV0dXJuITE7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIHg9PSJudW1iZXIifHx4PT0ic3ltYm9sInx8eD09ImJvb2xlYW4ifHx5PT1udWxsfHxrcih5KT8hMDpPWC50ZXN0KHkpfHwhRFgudGVzdCh5KXx8ZyE9bnVsbCYmeSBpbiBPYmplY3QoZyl9dmFyIFBYPU5YLEZYPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixCWD0iW29iamVjdCBGdW5jdGlvbl0iLFJYPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsalg9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiAkWCh5KXtpZighRWUoeSkpcmV0dXJuITE7dmFyIGc9SjEoeSk7cmV0dXJuIGc9PUJYfHxnPT1SWHx8Zz09Rlh8fGc9PWpYfXZhciB6WD0kWCxxWD1MYVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sSUw9cVgsSUY9ZnVuY3Rpb24oKXt2YXIgeT0vW14uXSskLy5leGVjKElMJiZJTC5rZXlzJiZJTC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHk/IlN5bWJvbChzcmMpXzEuIit5OiIifSgpO2Z1bmN0aW9uIEhYKHkpe3JldHVybiEhSUYmJklGIGluIHl9dmFyIEdYPUhYLFZYPUZ1bmN0aW9uLnByb3RvdHlwZSxERj1WWC50b1N0cmluZztmdW5jdGlvbiBVWCh5KXtpZih5IT1udWxsKXt0cnl7cmV0dXJuIERGLmNhbGwoeSl9Y2F0Y2h7fXRyeXtyZXR1cm4geSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBXWD1VWCxLWD0vW1xcXiQuKis/KClbXF17fXxdL2csWVg9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sWFg9RnVuY3Rpb24ucHJvdG90eXBlLFFYPU9iamVjdC5wcm90b3R5cGUsT0Y9WFgudG9TdHJpbmcsTkY9UVguaGFzT3duUHJvcGVydHksWlg9UmVnRXhwKCJeIitPRi5jYWxsKE5GKS5yZXBsYWNlKEtYLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFBGKHkpe2lmKCFFZSh5KXx8R1goeSkpcmV0dXJuITE7dmFyIGc9elgoeSk/Wlg6WVg7cmV0dXJuIGcudGVzdChXWCh5KSl9dmFyIEZGPVBGO2Z1bmN0aW9uIEpYKHksZyl7cmV0dXJuIHk9PW51bGw/dm9pZCAwOnlbZ119dmFyIHRRPUpYO2Z1bmN0aW9uIGVRKHksZyl7dmFyIHg9dFEoeSxnKTtyZXR1cm4gRkYoeCk/eDp2b2lkIDB9dmFyIERMPWVRLG5RPURMKE9iamVjdCwiY3JlYXRlIiksRWs9blE7ZnVuY3Rpb24gclEoKXt0aGlzLl9fZGF0YV9fPUVrP0VrKG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBpUT1yUTtmdW5jdGlvbiBzUSh5KXt2YXIgZz10aGlzLmhhcyh5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19beV07cmV0dXJuIHRoaXMuc2l6ZS09Zz8xOjAsZ312YXIgQkY9c1EsYVE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLG9RPU9iamVjdC5wcm90b3R5cGUsY1E9b1EuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdVEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztpZihFayl7dmFyIHg9Z1t5XTtyZXR1cm4geD09PWFRP3ZvaWQgMDp4fXJldHVybiBjUS5jYWxsKGcseSk/Z1t5XTp2b2lkIDB9dmFyIGxRPXVRLGhRPU9iamVjdC5wcm90b3R5cGUsZlE9aFEuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztyZXR1cm4gRWs/Z1t5XSE9PXZvaWQgMDpmUS5jYWxsKGcseSl9dmFyIGdRPWRRLHBRPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBiUSh5LGcpe3ZhciB4PXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoeSk/MDoxLHhbeV09RWsmJmc9PT12b2lkIDA/cFE6Zyx0aGlzfXZhciB2UT1iUTtmdW5jdGlvbiBZNSh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1ZNS5wcm90b3R5cGUuY2xlYXI9aVEsWTUucHJvdG90eXBlLmRlbGV0ZT1CRixZNS5wcm90b3R5cGUuZ2V0PWxRLFk1LnByb3RvdHlwZS5oYXM9Z1EsWTUucHJvdG90eXBlLnNldD12UTt2YXIgUkY9WTU7ZnVuY3Rpb24gd1EoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfXZhciBtUT13UTtmdW5jdGlvbiB5USh5LGcpe3JldHVybiB5PT09Z3x8eSE9PXkmJmchPT1nfXZhciBqRj15UTtmdW5jdGlvbiB4USh5LGcpe2Zvcih2YXIgeD15Lmxlbmd0aDt4LS07KWlmKGpGKHlbeF1bMF0sZykpcmV0dXJuIHg7cmV0dXJuLTF9dmFyIEdUPXhRLGtRPUFycmF5LnByb3RvdHlwZSxFUT1rUS5zcGxpY2U7ZnVuY3Rpb24gVFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PUdUKGcseSk7aWYoeDwwKXJldHVybiExO3ZhciBUPWcubGVuZ3RoLTE7cmV0dXJuIHg9PVQ/Zy5wb3AoKTpFUS5jYWxsKGcseCwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgQ1E9VFE7ZnVuY3Rpb24gX1EoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PUdUKGcseSk7cmV0dXJuIHg8MD92b2lkIDA6Z1t4XVsxXX12YXIgU1E9X1E7ZnVuY3Rpb24gQVEoeSl7cmV0dXJuIEdUKHRoaXMuX19kYXRhX18seSk+LTF9dmFyIExRPUFRO2Z1bmN0aW9uIE1RKHksZyl7dmFyIHg9dGhpcy5fX2RhdGFfXyxUPUdUKHgseSk7cmV0dXJuIFQ8MD8oKyt0aGlzLnNpemUseC5wdXNoKFt5LGddKSk6eFtUXVsxXT1nLHRoaXN9dmFyIElRPU1RO2Z1bmN0aW9uIFg1KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fVg1LnByb3RvdHlwZS5jbGVhcj1tUSxYNS5wcm90b3R5cGUuZGVsZXRlPUNRLFg1LnByb3RvdHlwZS5nZXQ9U1EsWDUucHJvdG90eXBlLmhhcz1MUSxYNS5wcm90b3R5cGUuc2V0PUlRO3ZhciBEUT1YNSxPUT1ETChMYSwiTWFwIiksTlE9T1E7ZnVuY3Rpb24gUFEoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBSRixtYXA6bmV3KE5RfHxEUSksc3RyaW5nOm5ldyBSRn19dmFyIEZRPVBRO2Z1bmN0aW9uIEJRKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiBnPT0ic3RyaW5nInx8Zz09Im51bWJlciJ8fGc9PSJzeW1ib2wifHxnPT0iYm9vbGVhbiI/eSE9PSJfX3Byb3RvX18iOnk9PT1udWxsfXZhciBSUT1CUTtmdW5jdGlvbiBqUSh5LGcpe3ZhciB4PXkuX19kYXRhX187cmV0dXJuIFJRKGcpP3hbdHlwZW9mIGc9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06eC5tYXB9dmFyIFZUPWpRO2Z1bmN0aW9uICRRKHkpe3ZhciBnPVZUKHRoaXMseSkuZGVsZXRlKHkpO3JldHVybiB0aGlzLnNpemUtPWc/MTowLGd9dmFyIHpRPSRRO2Z1bmN0aW9uIHFRKHkpe3JldHVybiBWVCh0aGlzLHkpLmdldCh5KX12YXIgSFE9cVE7ZnVuY3Rpb24gR1EoeSl7cmV0dXJuIFZUKHRoaXMseSkuaGFzKHkpfXZhciBWUT1HUTtmdW5jdGlvbiBVUSh5LGcpe3ZhciB4PVZUKHRoaXMseSksVD14LnNpemU7cmV0dXJuIHguc2V0KHksZyksdGhpcy5zaXplKz14LnNpemU9PVQ/MDoxLHRoaXN9dmFyIFdRPVVRO2Z1bmN0aW9uIFE1KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fVE1LnByb3RvdHlwZS5jbGVhcj1GUSxRNS5wcm90b3R5cGUuZGVsZXRlPXpRLFE1LnByb3RvdHlwZS5nZXQ9SFEsUTUucHJvdG90eXBlLmhhcz1WUSxRNS5wcm90b3R5cGUuc2V0PVdRO3ZhciAkRj1RNSxLUT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gT0woeSxnKXtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uInx8ZyE9bnVsbCYmdHlwZW9mIGchPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihLUSk7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgVD1hcmd1bWVudHMsQT1nP2cuYXBwbHkodGhpcyxUKTpUWzBdLEQ9eC5jYWNoZTtpZihELmhhcyhBKSlyZXR1cm4gRC5nZXQoQSk7dmFyIE89eS5hcHBseSh0aGlzLFQpO3JldHVybiB4LmNhY2hlPUQuc2V0KEEsTyl8fEQsT307cmV0dXJuIHguY2FjaGU9bmV3KE9MLkNhY2hlfHwkRikseH1PTC5DYWNoZT0kRjt2YXIgWVE9T0wsWFE9NTAwO2Z1bmN0aW9uIFFRKHkpe3ZhciBnPVlRKHksZnVuY3Rpb24oVCl7cmV0dXJuIHguc2l6ZT09PVhRJiZ4LmNsZWFyKCksVH0pLHg9Zy5jYWNoZTtyZXR1cm4gZ312YXIgWlE9UVEsSlE9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csdFo9L1xcKFxcKT8vZyxlWj1aUShmdW5jdGlvbih5KXt2YXIgZz1bXTtyZXR1cm4geS5jaGFyQ29kZUF0KDApPT09NDYmJmcucHVzaCgiIikseS5yZXBsYWNlKEpRLGZ1bmN0aW9uKHgsVCxBLEQpe2cucHVzaChBP0QucmVwbGFjZSh0WiwiJDEiKTpUfHx4KX0pLGd9KSx6Rj1lWjtmdW5jdGlvbiBuWih5LGcpe2Zvcih2YXIgeD0tMSxUPXk9PW51bGw/MDp5Lmxlbmd0aCxBPUFycmF5KFQpOysreDxUOylBW3hdPWcoeVt4XSx4LHkpO3JldHVybiBBfXZhciBxRj1uWixyWj0xLzAsSEY9Wmw/WmwucHJvdG90eXBlOnZvaWQgMCxHRj1IRj9IRi50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gVkYoeSl7aWYodHlwZW9mIHk9PSJzdHJpbmciKXJldHVybiB5O2lmKEhUKHkpKXJldHVybiBxRih5LFZGKSsiIjtpZihrcih5KSlyZXR1cm4gR0Y/R0YuY2FsbCh5KToiIjt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LXJaPyItMCI6Z312YXIgaVo9VkY7ZnVuY3Rpb24gc1ooeSl7cmV0dXJuIHk9PW51bGw/IiI6aVooeSl9dmFyIFVUPXNaO2Z1bmN0aW9uIE5MKHksZyl7cmV0dXJuIEhUKHkpP3k6UFgoeSxnKT9beV06ekYoVVQoeSkpfXZhciBXVD1OTCxhWj0xLzA7ZnVuY3Rpb24gb1ooeSl7aWYodHlwZW9mIHk9PSJzdHJpbmcifHxrcih5KSlyZXR1cm4geTt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LWFaPyItMCI6Z312YXIgUEw9b1o7ZnVuY3Rpb24gY1ooeSxnKXtnPVdUKGcseSk7Zm9yKHZhciB4PTAsVD1nLmxlbmd0aDt5IT1udWxsJiZ4PFQ7KXk9eVtQTChnW3grK10pXTtyZXR1cm4geCYmeD09VD95OnZvaWQgMH12YXIgdVo9Y1o7ZnVuY3Rpb24gVUYoeSxnLHgpe3ZhciBUPXk9PW51bGw/dm9pZCAwOnVaKHksZyk7cmV0dXJuIFQ9PT12b2lkIDA/eDpUfXZhciBsWj1VRixoWj1mdW5jdGlvbigpe3RyeXt2YXIgeT1ETChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHkoe30sIiIse30pLHl9Y2F0Y2h7fX0oKSxmWj1oWjtmdW5jdGlvbiBkWih5LGcseCl7Zz09Il9fcHJvdG9fXyImJmZaP2ZaKHksZyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6eCx3cml0YWJsZTohMH0pOnlbZ109eH12YXIgZ1o9ZFoscFo9T2JqZWN0LnByb3RvdHlwZSxiWj1wWi5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB2Wih5LGcseCl7dmFyIFQ9eVtnXTsoIShiWi5jYWxsKHksZykmJmpGKFQseCkpfHx4PT09dm9pZCAwJiYhKGcgaW4geSkpJiZnWih5LGcseCl9dmFyIHdaPXZaLG1aPTkwMDcxOTkyNTQ3NDA5OTEscGc9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIHlaKHksZyl7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIGc9Zz8/bVosISFnJiYoeD09Im51bWJlciJ8fHghPSJzeW1ib2wiJiZwZy50ZXN0KHkpKSYmeT4tMSYmeSUxPT0wJiZ5PGd9dmFyIHdtPXlaO2Z1bmN0aW9uIFdGKHksZyx4LFQpe2lmKCFFZSh5KSlyZXR1cm4geTtnPVdUKGcseSk7Zm9yKHZhciBBPS0xLEQ9Zy5sZW5ndGgsTz1ELTEsJD15OyQhPW51bGwmJisrQTxEOyl7dmFyIHE9UEwoZ1tBXSksUz14O2lmKHE9PT0iX19wcm90b19fInx8cT09PSJjb25zdHJ1Y3RvciJ8fHE9PT0icHJvdG90eXBlIilyZXR1cm4geTtpZihBIT1PKXt2YXIgRz0kW3FdO1M9VD9UKEcscSwkKTp2b2lkIDAsUz09PXZvaWQgMCYmKFM9RWUoRyk/Rzp3bShnW0ErMV0pP1tdOnt9KX13WigkLHEsUyksJD0kW3FdfXJldHVybiB5fXZhciB4Wj1XRjtmdW5jdGlvbiBrWih5LGcseCl7cmV0dXJuIHk9PW51bGw/eTp4Wih5LGcseCl9dmFyIEVaPWtaO2Z1bmN0aW9uIFRaKHksZyl7dmFyIHg9LTEsVD15Lmxlbmd0aDtmb3IoZ3x8KGc9QXJyYXkoVCkpOysreDxUOylnW3hdPXlbeF07cmV0dXJuIGd9dmFyIENaPVRaO2Z1bmN0aW9uIF9aKHkpe3JldHVybiBIVCh5KT9xRih5LFBMKTprcih5KT9beV06Q1ooekYoVVQoeSkpKX12YXIgU1o9X1osQVo9e2RhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oQSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oQSxEKXt9LG9uU2V0OmZ1bmN0aW9uKEEpe30sY2FuU2V0OmZ1bmN0aW9uKEEpe3JldHVybiEwfX07cmV0dXJuIGc9bWUoe30seCxnKSxmdW5jdGlvbihBLEQpe3ZhciBPPWcsJD10aGlzLHE9JC5sZW5ndGghPT12b2lkIDAsUz1xPyQ6WyRdLEc9cT8kWzBdOiQ7aWYobXQoQSkpe3ZhciBXPUEuaW5kZXhPZigiLiIpIT09LTEsZXQ9VyYmU1ooQSk7aWYoTy5hbGxvd0dldHRpbmcmJkQ9PT12b2lkIDApe3ZhciBhdDtyZXR1cm4gRyYmKE8uYmVmb3JlR2V0KEcpLGV0JiZHLl9wcml2YXRlW08uZmllbGRdW0FdPT09dm9pZCAwP2F0PWxaKEcuX3ByaXZhdGVbTy5maWVsZF0sZXQpOmF0PUcuX3ByaXZhdGVbTy5maWVsZF1bQV0pLGF0fWVsc2UgaWYoTy5hbGxvd1NldHRpbmcmJkQhPT12b2lkIDApe3ZhciBsdD0hTy5pbW11dGFibGVLZXlzW0FdO2lmKGx0KXt2YXIgZnQ9Yih7fSxBLEQpO08uYmVmb3JlU2V0KCQsZnQpO2Zvcih2YXIgQXQ9MCxrdD1TLmxlbmd0aDtBdDxrdDtBdCsrKXt2YXIgTXQ9U1tBdF07Ty5jYW5TZXQoTXQpJiYoZXQmJkcuX3ByaXZhdGVbTy5maWVsZF1bQV09PT12b2lkIDA/RVooTXQuX3ByaXZhdGVbTy5maWVsZF0sZXQsRCk6TXQuX3ByaXZhdGVbTy5maWVsZF1bQV09RCl9Ty51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLE8ub25TZXQoJCksTy5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtPLnRyaWdnZXJGbk5hbWVdKE8uc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoTy5hbGxvd1NldHRpbmcmJmh0KEEpKXt2YXIgRHQ9QSxqdCxadCxLdD1PYmplY3Qua2V5cyhEdCk7Ty5iZWZvcmVTZXQoJCxEdCk7Zm9yKHZhciB6dD0wO3p0PEt0Lmxlbmd0aDt6dCsrKXtqdD1LdFt6dF0sWnQ9RHRbanRdO3ZhciBlZT0hTy5pbW11dGFibGVLZXlzW2p0XTtpZihlZSlmb3IodmFyIFZ0PTA7VnQ8Uy5sZW5ndGg7VnQrKyl7dmFyIGZlPVNbVnRdO08uY2FuU2V0KGZlKSYmKGZlLl9wcml2YXRlW08uZmllbGRdW2p0XT1adCl9fU8udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxPLm9uU2V0KCQpLE8uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTy50cmlnZ2VyRm5OYW1lXShPLnNldHRpbmdFdmVudCl9ZWxzZSBpZihPLmFsbG93QmluZGluZyYmeXQoQSkpe3ZhciBnZT1BOyQub24oTy5iaW5kaW5nRXZlbnQsZ2UpfWVsc2UgaWYoTy5hbGxvd0dldHRpbmcmJkE9PT12b2lkIDApe3ZhciBuZTtyZXR1cm4gRyYmKE8uYmVmb3JlR2V0KEcpLG5lPUcuX3ByaXZhdGVbTy5maWVsZF0pLG5lfXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihnKXt2YXIgeD17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIGc9bWUoe30seCxnKSxmdW5jdGlvbihBKXt2YXIgRD1nLE89dGhpcywkPU8ubGVuZ3RoIT09dm9pZCAwLHE9JD9POltPXTtpZihtdChBKSl7Zm9yKHZhciBTPUEuc3BsaXQoL1xzKy8pLEc9Uy5sZW5ndGgsVz0wO1c8RztXKyspe3ZhciBldD1TW1ddO2lmKCFaKGV0KSl7dmFyIGF0PSFELmltbXV0YWJsZUtleXNbZXRdO2lmKGF0KWZvcih2YXIgbHQ9MCxmdD1xLmxlbmd0aDtsdDxmdDtsdCsrKXFbbHRdLl9wcml2YXRlW0QuZmllbGRdW2V0XT12b2lkIDB9fUQudHJpZ2dlckV2ZW50JiZPW0QudHJpZ2dlckZuTmFtZV0oRC5ldmVudCl9ZWxzZSBpZihBPT09dm9pZCAwKXtmb3IodmFyIEF0PTAsa3Q9cS5sZW5ndGg7QXQ8a3Q7QXQrKylmb3IodmFyIE10PXFbQXRdLl9wcml2YXRlW0QuZmllbGRdLER0PU9iamVjdC5rZXlzKE10KSxqdD0wO2p0PER0Lmxlbmd0aDtqdCsrKXt2YXIgWnQ9RHRbanRdLEt0PSFELmltbXV0YWJsZUtleXNbWnRdO0t0JiYoTXRbWnRdPXZvaWQgMCl9RC50cmlnZ2VyRXZlbnQmJk9bRC50cmlnZ2VyRm5OYW1lXShELmV2ZW50KX1yZXR1cm4gT319fSxMWj17ZXZlbnRBbGlhc2VzT246ZnVuY3Rpb24oZyl7dmFyIHg9Zzt4LmFkZExpc3RlbmVyPXgubGlzdGVuPXguYmluZD14Lm9uLHgudW5saXN0ZW49eC51bmJpbmQ9eC5vZmY9eC5yZW1vdmVMaXN0ZW5lcix4LnRyaWdnZXI9eC5lbWl0LHgucG9uPXgucHJvbWlzZU9uPWZ1bmN0aW9uKFQsQSl7dmFyIEQ9dGhpcyxPPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IEs1KGZ1bmN0aW9uKCQscSl7dmFyIFM9ZnVuY3Rpb24oYXQpe0Qub2ZmLmFwcGx5KEQsVyksJChhdCl9LEc9Ty5jb25jYXQoW1NdKSxXPUcuY29uY2F0KFtdKTtELm9uLmFwcGx5KEQsRyl9KX19fSxBYz17fTtbTVgsQVosTFpdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoQWMseSl9KTt2YXIgTVo9e2FuaW1hdGU6QWMuYW5pbWF0ZSgpLGFuaW1hdGlvbjpBYy5hbmltYXRpb24oKSxhbmltYXRlZDpBYy5hbmltYXRlZCgpLGNsZWFyUXVldWU6QWMuY2xlYXJRdWV1ZSgpLGRlbGF5OkFjLmRlbGF5KCksZGVsYXlBbmltYXRpb246QWMuZGVsYXlBbmltYXRpb24oKSxzdG9wOkFjLnN0b3AoKX0sS1Q9e2NsYXNzZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT09dm9pZCAwKXt2YXIgVD1bXTtyZXR1cm4geFswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obHQpe3JldHVybiBULnB1c2gobHQpfSksVH1lbHNlIGR0KGcpfHwoZz0oZ3x8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIEE9W10sRD1uZXcgejUoZyksTz0wO088eC5sZW5ndGg7TysrKXtmb3IodmFyICQ9eFtPXSxxPSQuX3ByaXZhdGUsUz1xLmNsYXNzZXMsRz0hMSxXPTA7VzxnLmxlbmd0aDtXKyspe3ZhciBldD1nW1ddLGF0PVMuaGFzKGV0KTtpZighYXQpe0c9ITA7YnJlYWt9fUd8fChHPVMuc2l6ZSE9PWcubGVuZ3RoKSxHJiYocS5jbGFzc2VzPUQsQS5wdXNoKCQpKX1yZXR1cm4gQS5sZW5ndGg+MCYmdGhpcy5zcGF3bihBKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikseH0sYWRkQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHghPW51bGwmJnguX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZyl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGcseCl7ZHQoZyl8fChnPWcubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgVD10aGlzLEE9eD09PXZvaWQgMCxEPVtdLE89MCwkPVQubGVuZ3RoO088JDtPKyspZm9yKHZhciBxPVRbT10sUz1xLl9wcml2YXRlLmNsYXNzZXMsRz0hMSxXPTA7VzxnLmxlbmd0aDtXKyspe3ZhciBldD1nW1ddLGF0PVMuaGFzKGV0KSxsdD0hMTt4fHxBJiYhYXQ/KFMuYWRkKGV0KSxsdD0hMCk6KCF4fHxBJiZhdCkmJihTLmRlbGV0ZShldCksbHQ9ITApLCFHJiZsdCYmKEQucHVzaChxKSxHPSEwKX1yZXR1cm4gRC5sZW5ndGg+MCYmdGhpcy5zcGF3bihEKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksVH0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzO2lmKHg9PW51bGwpeD0yNTA7ZWxzZSBpZih4PT09MClyZXR1cm4gVDtyZXR1cm4gVC5hZGRDbGFzcyhnKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5yZW1vdmVDbGFzcyhnKX0seCksVH19O0tULmNsYXNzTmFtZT1LVC5jbGFzc05hbWVzPUtULmNsYXNzZXM7dmFyIHRjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpLZSxtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTt0Yy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy52YWx1ZT10Yy5zdHJpbmcrInwiK3RjLm51bWJlcix0Yy5pZD10Yy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB5LGcseDtmb3IoeT10Yy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSx4PTA7eDx5Lmxlbmd0aDt4KyspZz15W3hdLHRjLmNvbXBhcmF0b3JPcCs9InxAIitnO2Zvcih5PXRjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHg9MDt4PHkubGVuZ3RoO3grKylnPXlbeF0sIShnLmluZGV4T2YoIiEiKT49MCkmJmchPT0iPSImJih0Yy5jb21wYXJhdG9yT3ArPSJ8XFwhIitnKX0oKTt2YXIgS2M9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0semk9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LEZMPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc05vZGUoKT9nLmlzUGFyZW50KCk6Zy5zb3VyY2UoKS5pc1BhcmVudCgpfHxnLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih5LGcpe3JldHVybiBOZSh5LnNlbGVjdG9yLGcuc2VsZWN0b3IpfSksSVo9ZnVuY3Rpb24oKXtmb3IodmFyIHk9e30sZyx4PTA7eDxGTC5sZW5ndGg7eCsrKWc9RkxbeF0seVtnLnNlbGVjdG9yXT1nLm1hdGNoZXM7cmV0dXJuIHl9KCksRFo9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gSVpbZ10oeCl9LE9aPSIoIitGTC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkuc2VsZWN0b3J9KS5qb2luKCJ8IikrIikiLFo1PWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXCgiK3RjLm1ldGFDaGFyKyIpIiwiZyIpLGZ1bmN0aW9uKHgsVCl7cmV0dXJuIFR9KX0sbW09ZnVuY3Rpb24oZyx4LFQpe2dbZy5sZW5ndGgtMV09VH0sVWU9W3tuYW1lOiJncm91cCIscXVlcnk6ITAscmVnZXg6IigiK3RjLmdyb3VwKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkdST1VQLHZhbHVlOkQ9PT0iKiI/RDpEKyJzIn0pfX0se25hbWU6InN0YXRlIixxdWVyeTohMCxyZWdleDpPWixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLlNUQVRFLHZhbHVlOkR9KX19LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK3RjLmlkKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLklELHZhbHVlOlo1KEQpfSl9fSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrdGMuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDEpLEQ9QVswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkNMQVNTLHZhbHVlOlo1KEQpfSl9fSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMSksRD1BWzBdO3guY2hlY2tzLnB1c2goe3R5cGU6emkuREFUQV9FWElTVCxmaWVsZDpaNShEKX0pfX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK3RjLnZhcmlhYmxlKyIpXFxzKigiK3RjLmNvbXBhcmF0b3JPcCsiKVxccyooIit0Yy52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMyksRD1BWzBdLE89QVsxXSwkPUFbMl0scT1uZXcgUmVnRXhwKCJeIit0Yy5zdHJpbmcrIiQiKS5leGVjKCQpIT1udWxsO3E/JD0kLnN1YnN0cmluZygxLCQubGVuZ3RoLTEpOiQ9cGFyc2VGbG9hdCgkKSx4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkRBVEFfQ09NUEFSRSxmaWVsZDpaNShEKSxvcGVyYXRvcjpPLHZhbHVlOiR9KX19LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy5ib29sT3ArIilcXHMqKCIrdGMudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEE9RShULDIpLEQ9QVswXSxPPUFbMV07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5EQVRBX0JPT0wsZmllbGQ6WjUoTyksb3BlcmF0b3I6RH0pfX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK3RjLm1ldGErIilcXHMqKCIrdGMuY29tcGFyYXRvck9wKyIpXFxzKigiK3RjLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT1FKFQsMyksRD1BWzBdLE89QVsxXSwkPUFbMl07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5NRVRBX0NPTVBBUkUsZmllbGQ6WjUoRCksb3BlcmF0b3I6Tyx2YWx1ZTpwYXJzZUZsb2F0KCQpfSl9fSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6dGMuc2VwYXJhdG9yLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jdXJyZW50U3ViamVjdCxBPWcuZWRnZUNvdW50LEQ9Zy5jb21wb3VuZENvdW50LE89Z1tnLmxlbmd0aC0xXTtUIT1udWxsJiYoTy5zdWJqZWN0PVQsZy5jdXJyZW50U3ViamVjdD1udWxsKSxPLmVkZ2VDb3VudD1BLE8uY29tcG91bmRDb3VudD1ELGcuZWRnZUNvdW50PTAsZy5jb21wb3VuZENvdW50PTA7dmFyICQ9Z1tnLmxlbmd0aCsrXT1LYygpO3JldHVybiAkfX0se25hbWU6ImRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBUPUtjKCksQT14LEQ9S2MoKTtyZXR1cm4gVC5jaGVja3MucHVzaCh7dHlwZTp6aS5ESVJFQ1RFRF9FREdFLHNvdXJjZTpBLHRhcmdldDpEfSksbW0oZyx4LFQpLGcuZWRnZUNvdW50KyssRH1lbHNle3ZhciBPPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX1NPVVJDRSxzb3VyY2U6JCx0YXJnZXQ6cX0pLG1tKGcseCxPKSxnLmVkZ2VDb3VudCsrLHF9fX0se25hbWU6InVuZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6dGMudW5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9eCxEPUtjKCk7cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltBLERdfSksbW0oZyx4LFQpLGcuZWRnZUNvdW50KyssRH1lbHNle3ZhciBPPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX05FSUdIQk9SLG5vZGU6JCxuZWlnaGJvcjpxfSksbW0oZyx4LE8pLHF9fX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6dGMuY2hpbGQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9S2MoKSxEPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuQ0hJTEQscGFyZW50OkQsY2hpbGQ6QX0pLG1tKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxBfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBPPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksRz1LYygpLFc9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFcuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuUEFSRU5ULHBhcmVudDpXLGNoaWxkOkd9KSxtbShnLCQsTyksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLEd9ZWxzZXt2YXIgZXQ9S2MoKSxhdD1LYygpLGx0PVt7dHlwZTp6aS5QQVJFTlQscGFyZW50OmV0LGNoaWxkOmF0fV07cmV0dXJuIGV0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1sdCxnLmNvbXBvdW5kQ291bnQrKyxhdH19fSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRlc2NlbmRhbnQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEE9S2MoKSxEPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuREVTQ0VOREFOVCxhbmNlc3RvcjpELGRlc2NlbmRhbnQ6QX0pLG1tKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxBfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBPPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksRz1LYygpLFc9S2MoKTtyZXR1cm4gTy5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFcuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuQU5DRVNUT1IsYW5jZXN0b3I6VyxkZXNjZW5kYW50Okd9KSxtbShnLCQsTyksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLEd9ZWxzZXt2YXIgZXQ9S2MoKSxhdD1LYygpLGx0PVt7dHlwZTp6aS5BTkNFU1RPUixhbmNlc3RvcjpldCxkZXNjZW5kYW50OmF0fV07cmV0dXJuIGV0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1sdCxnLmNvbXBvdW5kQ291bnQrKyxhdH19fSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6dGMuc3ViamVjdCxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3QhPW51bGwmJmcuY3VycmVudFN1YmplY3QhPT14KXJldHVybiBTYygiUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCIrZy50b1N0cmluZygpKyJgIiksITE7Zy5jdXJyZW50U3ViamVjdD14O3ZhciBUPWdbZy5sZW5ndGgtMV0sQT1ULmNoZWNrc1swXSxEPUE9PW51bGw/bnVsbDpBLnR5cGU7RD09PXppLkRJUkVDVEVEX0VER0U/QS50eXBlPXppLk5PREVfVEFSR0VUOkQ9PT16aS5VTkRJUkVDVEVEX0VER0UmJihBLnR5cGU9emkuTk9ERV9ORUlHSEJPUixBLm5vZGU9QS5ub2Rlc1sxXSxBLm5laWdoYm9yPUEubm9kZXNbMF0sQS5ub2Rlcz1udWxsKX19XTtVZS5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlZ2V4T2JqPW5ldyBSZWdFeHAoIl4iK3kucmVnZXgpfSk7dmFyIE5aPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEEsRD0wO0Q8VWUubGVuZ3RoO0QrKyl7dmFyIE89VWVbRF0sJD1PLm5hbWUscT1nLm1hdGNoKE8ucmVnZXhPYmopO2lmKHEhPW51bGwpe1Q9cSx4PU8sQT0kO3ZhciBTPXFbMF07Zz1nLnN1YnN0cmluZyhTLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOngsbWF0Y2g6VCxuYW1lOkEscmVtYWluaW5nOmd9fSxQWj1mdW5jdGlvbihnKXt2YXIgeD1nLm1hdGNoKC9eXHMrLyk7aWYoeCl7dmFyIFQ9eFswXTtnPWcuc3Vic3RyaW5nKFQubGVuZ3RoKX1yZXR1cm4gZ30sRlo9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcyxUPXguaW5wdXRUZXh0PWcsQT14WzBdPUtjKCk7Zm9yKHgubGVuZ3RoPTEsVD1QWihUKTs7KXt2YXIgRD1OWihUKTtpZihELmV4cHI9PW51bGwpcmV0dXJuIFNjKCJUaGUgc2VsZWN0b3IgYCIrZysiYGlzIGludmFsaWQiKSwhMTt2YXIgTz1ELm1hdGNoLnNsaWNlKDEpLCQ9RC5leHByLnBvcHVsYXRlKHgsQSxPKTtpZigkPT09ITEpcmV0dXJuITE7aWYoJCE9bnVsbCYmKEE9JCksVD1ELnJlbWFpbmluZyxULm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciBxPXhbeC5sZW5ndGgtMV07eC5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHEuc3ViamVjdD14LmN1cnJlbnRTdWJqZWN0KSxxLmVkZ2VDb3VudD14LmVkZ2VDb3VudCxxLmNvbXBvdW5kQ291bnQ9eC5jb21wb3VuZENvdW50O2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgRz14W1NdO2lmKEcuY29tcG91bmRDb3VudD4wJiZHLmVkZ2VDb3VudD4wKXJldHVybiBTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoRy5lZGdlQ291bnQ+MSlyZXR1cm4gU2MoIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Ry5lZGdlQ291bnQ9PT0xJiZTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSxCWj1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZz1mdW5jdGlvbihHKXtyZXR1cm4gRz8/IiJ9LHg9ZnVuY3Rpb24oRyl7cmV0dXJuIG10KEcpPyciJytHKyciJzpnKEcpfSxUPWZ1bmN0aW9uKEcpe3JldHVybiIgIitHKyIgIn0sQT1mdW5jdGlvbihHLFcpe3ZhciBldD1HLnR5cGUsYXQ9Ry52YWx1ZTtzd2l0Y2goZXQpe2Nhc2UgemkuR1JPVVA6e3ZhciBsdD1nKGF0KTtyZXR1cm4gbHQuc3Vic3RyaW5nKDAsbHQubGVuZ3RoLTEpfWNhc2UgemkuREFUQV9DT01QQVJFOnt2YXIgZnQ9Ry5maWVsZCxBdD1HLm9wZXJhdG9yO3JldHVybiJbIitmdCtUKGcoQXQpKSt4KGF0KSsiXSJ9Y2FzZSB6aS5EQVRBX0JPT0w6e3ZhciBrdD1HLm9wZXJhdG9yLE10PUcuZmllbGQ7cmV0dXJuIlsiK2coa3QpK010KyJdIn1jYXNlIHppLkRBVEFfRVhJU1Q6e3ZhciBEdD1HLmZpZWxkO3JldHVybiJbIitEdCsiXSJ9Y2FzZSB6aS5NRVRBX0NPTVBBUkU6e3ZhciBqdD1HLm9wZXJhdG9yLFp0PUcuZmllbGQ7cmV0dXJuIltbIitadCtUKGcoanQpKSt4KGF0KSsiXV0ifWNhc2UgemkuU1RBVEU6cmV0dXJuIGF0O2Nhc2UgemkuSUQ6cmV0dXJuIiMiK2F0O2Nhc2UgemkuQ0xBU1M6cmV0dXJuIi4iK2F0O2Nhc2UgemkuUEFSRU5UOmNhc2UgemkuQ0hJTEQ6cmV0dXJuIEQoRy5wYXJlbnQsVykrVCgiPiIpK0QoRy5jaGlsZCxXKTtjYXNlIHppLkFOQ0VTVE9SOmNhc2UgemkuREVTQ0VOREFOVDpyZXR1cm4gRChHLmFuY2VzdG9yLFcpKyIgIitEKEcuZGVzY2VuZGFudCxXKTtjYXNlIHppLkNPTVBPVU5EX1NQTElUOnt2YXIgS3Q9RChHLmxlZnQsVyksenQ9RChHLnN1YmplY3QsVyksZWU9RChHLnJpZ2h0LFcpO3JldHVybiBLdCsoS3QubGVuZ3RoPjA/IiAiOiIiKSt6dCtlZX1jYXNlIHppLlRSVUU6cmV0dXJuIiJ9fSxEPWZ1bmN0aW9uKEcsVyl7cmV0dXJuIEcuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihldCxhdCxsdCl7cmV0dXJuIGV0KyhXPT09RyYmbHQ9PT0wPyIkIjoiIikrQShhdCxXKX0sIiIpfSxPPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIHE9dGhpc1skXTtPKz1EKHEscS5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihPKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPU8sT30sUlo9e3BhcnNlOkZaLHRvU3RyaW5nOkJafSxLRj1mdW5jdGlvbihnLHgsVCl7dmFyIEEsRD1tdChnKSxPPVgoZyksJD1tdChUKSxxLFMsRz0hMSxXPSExLGV0PSExO3N3aXRjaCh4LmluZGV4T2YoIiEiKT49MCYmKHg9eC5yZXBsYWNlKCIhIiwiIiksVz0hMCkseC5pbmRleE9mKCJAIik+PTAmJih4PXgucmVwbGFjZSgiQCIsIiIpLEc9ITApLChEfHwkfHxHKSYmKHE9IUQmJiFPPyIiOiIiK2csUz0iIitUKSxHJiYoZz1xPXEudG9Mb3dlckNhc2UoKSxUPVM9Uy50b0xvd2VyQ2FzZSgpKSx4KXtjYXNlIio9IjpBPXEuaW5kZXhPZihTKT49MDticmVhaztjYXNlIiQ9IjpBPXEuaW5kZXhPZihTLHEubGVuZ3RoLVMubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpBPXEuaW5kZXhPZihTKT09PTA7YnJlYWs7Y2FzZSI9IjpBPWc9PT1UO2JyZWFrO2Nhc2UiPiI6ZXQ9ITAsQT1nPlQ7YnJlYWs7Y2FzZSI+PSI6ZXQ9ITAsQT1nPj1UO2JyZWFrO2Nhc2UiPCI6ZXQ9ITAsQT1nPFQ7YnJlYWs7Y2FzZSI8PSI6ZXQ9ITAsQT1nPD1UO2JyZWFrO2RlZmF1bHQ6QT0hMTticmVha31yZXR1cm4gVyYmKGchPW51bGx8fCFldCkmJihBPSFBKSxBfSxqWj1mdW5jdGlvbihnLHgpe3N3aXRjaCh4KXtjYXNlIj8iOnJldHVybiEhZztjYXNlIiEiOnJldHVybiFnO2Nhc2UiXiI6cmV0dXJuIGc9PT12b2lkIDB9fSwkWj1mdW5jdGlvbihnKXtyZXR1cm4gZyE9PXZvaWQgMH0sQkw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZy5kYXRhKHgpfSx6Wj1mdW5jdGlvbihnLHgpe3JldHVybiBnW3hdKCl9LFd1PVtdLE11PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiBXdVtULnR5cGVdKFQseCl9KX07V3VbemkuR1JPVVBdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4geD09PSIqInx8eD09PWcuZ3JvdXAoKX0sV3VbemkuU1RBVEVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gRFooeCxnKX0sV3VbemkuSURdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5pZCgpPT09eH0sV3VbemkuQ0xBU1NdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5oYXNDbGFzcyh4KX0sV3VbemkuTUVUQV9DT01QQVJFXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQsVD15Lm9wZXJhdG9yLEE9eS52YWx1ZTtyZXR1cm4gS0YoelooZyx4KSxULEEpfSxXdVt6aS5EQVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5maWVsZCxUPXkub3BlcmF0b3IsQT15LnZhbHVlO3JldHVybiBLRihCTChnLHgpLFQsQSl9LFd1W3ppLkRBVEFfQk9PTF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkLFQ9eS5vcGVyYXRvcjtyZXR1cm4galooQkwoZyx4KSxUKX0sV3VbemkuREFUQV9FWElTVF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkO3JldHVybiB5Lm9wZXJhdG9yLCRaKEJMKGcseCkpfSxXdVt6aS5VTkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5ub2Rlc1swXSxUPXkubm9kZXNbMV0sQT1nLnNvdXJjZSgpLEQ9Zy50YXJnZXQoKTtyZXR1cm4gTXUoeCxBKSYmTXUoVCxEKXx8TXUoVCxBKSYmTXUoeCxEKX0sV3VbemkuTk9ERV9ORUlHSEJPUl09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5ub2RlLGcpJiZnLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJk11KHkubmVpZ2hib3IseCl9KX0sV3VbemkuRElSRUNURURfRURHRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5zb3VyY2UsZy5zb3VyY2UoKSkmJk11KHkudGFyZ2V0LGcudGFyZ2V0KCkpfSxXdVt6aS5OT0RFX1NPVVJDRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5zb3VyY2UsZykmJmcub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZNdSh5LnRhcmdldCx4KX0pfSxXdVt6aS5OT0RFX1RBUkdFVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS50YXJnZXQsZykmJmcuaW5jb21lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZNdSh5LnNvdXJjZSx4KX0pfSxXdVt6aS5DSElMRF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5jaGlsZCxnKSYmTXUoeS5wYXJlbnQsZy5wYXJlbnQoKSl9LFd1W3ppLlBBUkVOVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gTXUoeS5wYXJlbnQsZykmJmcuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBNdSh5LmNoaWxkLHgpfSl9LFd1W3ppLkRFU0NFTkRBTlRdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIE11KHkuZGVzY2VuZGFudCxnKSYmZy5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBNdSh5LmFuY2VzdG9yLHgpfSl9LFd1W3ppLkFOQ0VTVE9SXT1mdW5jdGlvbih5LGcpe3JldHVybiBNdSh5LmFuY2VzdG9yLGcpJiZnLmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gTXUoeS5kZXNjZW5kYW50LHgpfSl9LFd1W3ppLkNPTVBPVU5EX1NQTElUXT1mdW5jdGlvbih5LGcpe3JldHVybiBNdSh5LnN1YmplY3QsZykmJk11KHkubGVmdCxnKSYmTXUoeS5yaWdodCxnKX0sV3VbemkuVFJVRV09ZnVuY3Rpb24oKXtyZXR1cm4hMH0sV3VbemkuQ09MTEVDVElPTl09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiB4LmhhcyhnKX0sV3VbemkuRklMVEVSXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkudmFsdWU7cmV0dXJuIHgoZyl9O3ZhciBxWj1mdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKHgubGVuZ3RoPT09MSYmeFswXS5jaGVja3MubGVuZ3RoPT09MSYmeFswXS5jaGVja3NbMF0udHlwZT09PXppLklEKXJldHVybiBnLmdldEVsZW1lbnRCeUlkKHhbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIFQ9ZnVuY3Rpb24oRCl7Zm9yKHZhciBPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciAkPXhbT107aWYoTXUoJCxEKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIHgudGV4dCgpPT1udWxsJiYoVD1mdW5jdGlvbigpe3JldHVybiEwfSksZy5maWx0ZXIoVCl9LEhaPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEE9eFtUXTtpZihNdShBLGcpKXJldHVybiEwfXJldHVybiExfSxHWj17bWF0Y2hlczpIWixmaWx0ZXI6cVp9LHltPWZ1bmN0aW9uKGcpe3RoaXMuaW5wdXRUZXh0PWcsdGhpcy5jdXJyZW50U3ViamVjdD1udWxsLHRoaXMuY29tcG91bmRDb3VudD0wLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5sZW5ndGg9MCxnPT1udWxsfHxtdChnKSYmZy5tYXRjaCgvXlxzKiQvKXx8KHh0KGcpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6emkuQ09MTEVDVElPTix2YWx1ZTpnLmNvbGxlY3Rpb24oKX1dfSk6eXQoZyk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTp6aS5GSUxURVIsdmFsdWU6Z31dfSk6bXQoZyk/dGhpcy5wYXJzZShnKXx8KHRoaXMuaW52YWxpZD0hMCk6YmwoIkEgc2VsZWN0b3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gYSBzdHJpbmc7IGZvdW5kICIpKX0sZnY9eW0ucHJvdG90eXBlO1tSWixHWl0uZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4gbWUoZnYseSl9KSxmdi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxmdi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxmdi5lcT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpc1t5XX0sZnYuc2FtZVRleHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXkuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT15LnRleHQoKX0sZnYuYWRkUXVlcnk9ZnVuY3Rpb24oeSl7dGhpc1t0aGlzLmxlbmd0aCsrXT15fSxmdi5zZWxlY3Rvcj1mdi50b1N0cmluZzt2YXIgdnA9e2FsbEFyZTpmdW5jdGlvbihnKXt2YXIgeD1uZXcgeW0oZyk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHgubWF0Y2hlcyhUKX0pfSxpczpmdW5jdGlvbihnKXt2YXIgeD1uZXcgeW0oZyk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihUKXtyZXR1cm4geC5tYXRjaGVzKFQpfSl9LHNvbWU6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoQSlyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoIUEpcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24oZyl7aWYodGhpcz09PWcpcmV0dXJuITA7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzLmxlbmd0aCxUPWcubGVuZ3RoO3JldHVybiB4IT09VD8hMTp4PT09MT90aGlzWzBdPT09Z1swXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKEEpe3JldHVybiBnLmhhc0VsZW1lbnRXaXRoSWQoQS5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpLHRoaXMuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gZy5oYXNFbGVtZW50V2l0aElkKHguaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKGcpe2c9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZyk7dmFyIHg9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gZy5ldmVyeShmdW5jdGlvbihUKXtyZXR1cm4geC5oYXNFbGVtZW50V2l0aElkKFQuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24oZyl7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzO3JldHVybiBnLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiB4Lmhhc0VsZW1lbnRXaXRoSWQoVC5pZCgpKX0pfX07dnAuYWxsQXJlTmVpZ2hib3Vycz12cC5hbGxBcmVOZWlnaGJvcnMsdnAuaGFzPXZwLmNvbnRhaW5zLHZwLmVxdWFsPXZwLmVxdWFscz12cC5zYW1lO3ZhciByZD1mdW5jdGlvbihnLHgpe3JldHVybiBmdW5jdGlvbihBLEQsTywkKXt2YXIgcT1BLFM9dGhpcyxHO2lmKHE9PW51bGw/Rz0iIjp4dChxKSYmcS5sZW5ndGg9PT0xJiYoRz1xLmlkKCkpLFMubGVuZ3RoPT09MSYmRyl7dmFyIFc9U1swXS5fcHJpdmF0ZSxldD1XLnRyYXZlcnNhbENhY2hlPVcudHJhdmVyc2FsQ2FjaGV8fHt9LGF0PWV0W3hdPWV0W3hdfHxbXSxsdD10ZChHKSxmdD1hdFtsdF07cmV0dXJuIGZ0fHwoYXRbbHRdPWcuY2FsbChTLEEsRCxPLCQpKX1lbHNlIHJldHVybiBnLmNhbGwoUyxBLEQsTywkKX19LEo1PXtwYXJlbnQ6ZnVuY3Rpb24oZyl7dmFyIHg9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgVD10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihUKXJldHVybiBUfWZvcih2YXIgQT0wO0E8dGhpcy5sZW5ndGg7QSsrKXt2YXIgRD10aGlzW0FdLE89RC5fcHJpdmF0ZS5wYXJlbnQ7TyYmeC5wdXNoKE8pfXJldHVybiB0aGlzLnNwYXduKHgsITApLmZpbHRlcihnKX0scGFyZW50czpmdW5jdGlvbihnKXtmb3IodmFyIHg9W10sVD10aGlzLnBhcmVudCgpO1Qubm9uZW1wdHkoKTspe2Zvcih2YXIgQT0wO0E8VC5sZW5ndGg7QSsrKXt2YXIgRD1UW0FdO3gucHVzaChEKX1UPVQucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpc1tUXSxEPUEucGFyZW50cygpO3g9eHx8RCx4PXguaW50ZXJzZWN0KEQpfXJldHVybiB4LmZpbHRlcihnKX0sb3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNPcnBoYW4oKX0pLmZpbHRlcihnKX0sbm9ub3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNDaGlsZCgpfSkuZmlsdGVyKGcpfSxjaGlsZHJlbjpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD0wO3g8dGhpcy5sZW5ndGg7eCsrKWZvcih2YXIgVD10aGlzW3hdLEE9VC5fcHJpdmF0ZS5jaGlsZHJlbixEPTA7RDxBLmxlbmd0aDtEKyspZy5wdXNoKEFbRF0pO3JldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKGcpfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuaXNOb2RlKCkmJmcuX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihnKXt2YXIgeD1bXTtmdW5jdGlvbiBUKEEpe2Zvcih2YXIgRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdO3gucHVzaChPKSxPLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmVChPLmNoaWxkcmVuKCkpfX1yZXR1cm4gVCh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfX07ZnVuY3Rpb24gWVQoeSxnLHgsVCl7Zm9yKHZhciBBPVtdLEQ9bmV3IHo1LE89eS5jeSgpLCQ9Ty5oYXNDb21wb3VuZE5vZGVzKCkscT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdO3g/QS5wdXNoKFMpOiQmJlQoQSxELFMpfWZvcig7QS5sZW5ndGg+MDspe3ZhciBHPUEuc2hpZnQoKTtnKEcpLEQuYWRkKEcuaWQoKSksJCYmVChBLEQsRyl9cmV0dXJuIHl9ZnVuY3Rpb24gVGsoeSxnLHgpe2lmKHguaXNQYXJlbnQoKSlmb3IodmFyIFQ9eC5fcHJpdmF0ZS5jaGlsZHJlbixBPTA7QTxULmxlbmd0aDtBKyspe3ZhciBEPVRbQV07Zy5oYXMoRC5pZCgpKXx8eS5wdXNoKEQpfX1KNS5mb3JFYWNoRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFRrKX07ZnVuY3Rpb24gWUYoeSxnLHgpe2lmKHguaXNDaGlsZCgpKXt2YXIgVD14Ll9wcml2YXRlLnBhcmVudDtnLmhhcyhULmlkKCkpfHx5LnB1c2goVCl9fUo1LmZvckVhY2hVcD1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFlGKX07ZnVuY3Rpb24gVlooeSxnLHgpe1lGKHksZyx4KSxUayh5LGcseCl9SjUuZm9yRWFjaFVwQW5kRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFlUKHRoaXMseSxnLFZaKX0sSjUuYW5jZXN0b3JzPUo1LnBhcmVudHM7dmFyIENrLFhGO0NrPVhGPXtkYXRhOkFjLmRhdGEoe2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOkFjLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSkscnNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMH0pLHJlbW92ZVJzY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJyc2NyYXRjaCIsdHJpZ2dlckV2ZW50OiExfSksaWQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuX3ByaXZhdGUuZGF0YS5pZH19LENrLmF0dHI9Q2suZGF0YSxDay5yZW1vdmVBdHRyPUNrLnJlbW92ZURhdGE7dmFyIFVaPVhGLFhUPXt9O2Z1bmN0aW9uIHR4KHkpe3JldHVybiBmdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKGc9PT12b2lkIDAmJihnPSEwKSx4Lmxlbmd0aCE9PTApaWYoeC5pc05vZGUoKSYmIXgucmVtb3ZlZCgpKXtmb3IodmFyIFQ9MCxBPXhbMF0sRD1BLl9wcml2YXRlLmVkZ2VzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTshZyYmJC5pc0xvb3AoKXx8KFQrPXkoQSwkKSl9cmV0dXJuIFR9ZWxzZSByZXR1cm59fW1lKFhULHtkZWdyZWU6dHgoZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKGcudGFyZ2V0KCkpPzI6MX0pLGluZGVncmVlOnR4KGZ1bmN0aW9uKHksZyl7cmV0dXJuIGcudGFyZ2V0KCkuc2FtZSh5KT8xOjB9KSxvdXRkZWdyZWU6dHgoZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKHkpPzE6MH0pfSk7ZnVuY3Rpb24gZXgoeSxnKXtyZXR1cm4gZnVuY3Rpb24oeCl7Zm9yKHZhciBULEE9dGhpcy5ub2RlcygpLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXSwkPU9beV0oeCk7JCE9PXZvaWQgMCYmKFQ9PT12b2lkIDB8fGcoJCxUKSkmJihUPSQpfXJldHVybiBUfX1tZShYVCx7bWluRGVncmVlOmV4KCJkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heERlZ3JlZTpleCgiZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KSxtaW5JbmRlZ3JlZTpleCgiaW5kZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heEluZGVncmVlOmV4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geT5nfSksbWluT3V0ZGVncmVlOmV4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heE91dGRlZ3JlZTpleCgib3V0ZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KX0pLG1lKFhULHt0b3RhbERlZ3JlZTpmdW5jdGlvbihnKXtmb3IodmFyIHg9MCxUPXRoaXMubm9kZXMoKSxBPTA7QTxULmxlbmd0aDtBKyspeCs9VFtBXS5kZWdyZWUoZyk7cmV0dXJuIHh9fSk7dmFyIHdwLFFGLF9rPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9MDtBPGcubGVuZ3RoO0ErKyl7dmFyIEQ9Z1tBXTtpZighRC5sb2NrZWQoKSl7dmFyIE89RC5fcHJpdmF0ZS5wb3NpdGlvbiwkPXt4OngueCE9bnVsbD94LngtTy54OjAseTp4LnkhPW51bGw/eC55LU8ueTowfTtELmlzUGFyZW50KCkmJiEoJC54PT09MCYmJC55PT09MCkmJkQuY2hpbGRyZW4oKS5zaGlmdCgkLFQpLEQuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9fX0sWkY9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6ZnVuY3Rpb24oZyl7Zy51cGRhdGVDb21wb3VuZEJvdW5kcygpfSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZyx4KXtfayhnLHgsITEpfSxvblNldDpmdW5jdGlvbihnKXtnLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSxjYW5TZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fTt3cD1RRj17cG9zaXRpb246QWMuZGF0YShaRiksc2lsZW50UG9zaXRpb246QWMuZGF0YShtZSh7fSxaRix7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0OmZ1bmN0aW9uKGcseCl7X2soZyx4LCEwKX0sb25TZXQ6ZnVuY3Rpb24oZyl7Zy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX19KSkscG9zaXRpb25zOmZ1bmN0aW9uKGcseCl7aWYoaHQoZykpeD90aGlzLnNpbGVudFBvc2l0aW9uKGcpOnRoaXMucG9zaXRpb24oZyk7ZWxzZSBpZih5dChnKSl7dmFyIFQ9ZyxBPXRoaXMuY3koKTtBLnN0YXJ0QmF0Y2goKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIE89dGhpc1tEXSwkPXZvaWQgMDsoJD1UKE8sRCkpJiYoeD9PLnNpbGVudFBvc2l0aW9uKCQpOk8ucG9zaXRpb24oJCkpfUEuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50UG9zaXRpb25zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnBvc2l0aW9ucyhnLCEwKX0sc2hpZnQ6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBO2lmKGh0KGcpPyhBPXt4OlgoZy54KT9nLng6MCx5OlgoZy55KT9nLnk6MH0sVD14KTptdChnKSYmWCh4KSYmKEE9e3g6MCx5OjB9LEFbZ109eCksQSE9bnVsbCl7dmFyIEQ9dGhpcy5jeSgpO0Quc3RhcnRCYXRjaCgpO2Zvcih2YXIgTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgJD10aGlzW09dO2lmKCEoRC5oYXNDb21wb3VuZE5vZGVzKCkmJiQuaXNDaGlsZCgpJiYkLmFuY2VzdG9ycygpLmFueVNhbWUodGhpcykpKXt2YXIgcT0kLnBvc2l0aW9uKCksUz17eDpxLngrQS54LHk6cS55K0EueX07VD8kLnNpbGVudFBvc2l0aW9uKFMpOiQucG9zaXRpb24oUyl9fUQuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50U2hpZnQ6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gaHQoZyk/dGhpcy5zaGlmdChnLCEwKTptdChnKSYmWCh4KSYmdGhpcy5zaGlmdChnLHgsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzWzBdLEE9dGhpcy5jeSgpLEQ9QS56b29tKCksTz1BLnBhbigpLCQ9aHQoZyk/Zzp2b2lkIDAscT0kIT09dm9pZCAwfHx4IT09dm9pZCAwJiZtdChnKTtpZihUJiZULmlzTm9kZSgpKWlmKHEpZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBHPXRoaXNbU107eCE9PXZvaWQgMD9HLnBvc2l0aW9uKGcsKHgtT1tnXSkvRCk6JCE9PXZvaWQgMCYmRy5wb3NpdGlvbihRUCgkLEQsTykpfWVsc2V7dmFyIFc9VC5wb3NpdGlvbigpO3JldHVybiAkPU9UKFcsRCxPKSxnPT09dm9pZCAwPyQ6JFtnXX1lbHNlIGlmKCFxKXJldHVybjtyZXR1cm4gdGhpc30scmVsYXRpdmVQb3NpdGlvbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXNbMF0sQT10aGlzLmN5KCksRD1odChnKT9nOnZvaWQgMCxPPUQhPT12b2lkIDB8fHghPT12b2lkIDAmJm10KGcpLCQ9QS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoVCYmVC5pc05vZGUoKSlpZihPKWZvcih2YXIgcT0wO3E8dGhpcy5sZW5ndGg7cSsrKXt2YXIgUz10aGlzW3FdLEc9JD9TLnBhcmVudCgpOm51bGwsVz1HJiZHLmxlbmd0aD4wLGV0PVc7VyYmKEc9R1swXSk7dmFyIGF0PWV0P0cucG9zaXRpb24oKTp7eDowLHk6MH07eCE9PXZvaWQgMD9TLnBvc2l0aW9uKGcseCthdFtnXSk6RCE9PXZvaWQgMCYmUy5wb3NpdGlvbih7eDpELngrYXQueCx5OkQueSthdC55fSl9ZWxzZXt2YXIgbHQ9VC5wb3NpdGlvbigpLGZ0PSQ/VC5wYXJlbnQoKTpudWxsLEF0PWZ0JiZmdC5sZW5ndGg+MCxrdD1BdDtBdCYmKGZ0PWZ0WzBdKTt2YXIgTXQ9a3Q/ZnQucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIEQ9e3g6bHQueC1NdC54LHk6bHQueS1NdC55fSxnPT09dm9pZCAwP0Q6RFtnXX1lbHNlIGlmKCFPKXJldHVybjtyZXR1cm4gdGhpc319LHdwLm1vZGVsUG9zaXRpb249d3AucG9pbnQ9d3AucG9zaXRpb24sd3AubW9kZWxQb3NpdGlvbnM9d3AucG9pbnRzPXdwLnBvc2l0aW9ucyx3cC5yZW5kZXJlZFBvaW50PXdwLnJlbmRlcmVkUG9zaXRpb24sd3AucmVsYXRpdmVQb2ludD13cC5yZWxhdGl2ZVBvc2l0aW9uO3ZhciBKRj1RRixueCxxYjtueD1xYj17fSxxYi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuYm91bmRpbmdCb3goeSkseD10aGlzLmN5KCksVD14Lnpvb20oKSxBPXgucGFuKCksRD1nLngxKlQrQS54LE89Zy54MipUK0EueCwkPWcueTEqVCtBLnkscT1nLnkyKlQrQS55O3JldHVybnt4MTpELHgyOk8seTE6JCx5MjpxLHc6Ty1ELGg6cS0kfX0scWIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGc9dGhpcy5jeSgpO3JldHVybiFnLnN0eWxlRW5hYmxlZCgpfHwhZy5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oeCl7aWYoeC5pc1BhcmVudCgpKXt2YXIgVD14Ll9wcml2YXRlO1QuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxULmJiQ2FjaGU9bnVsbCx5fHx4LmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxxYi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxnPXRoaXMuY3koKTtpZighZy5zdHlsZUVuYWJsZWQoKXx8IWcuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF5JiZnLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24geChPKXtpZighTy5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1PLl9wcml2YXRlLHE9Ty5jaGlsZHJlbigpLFM9Ty5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsRz17d2lkdGg6e3ZhbDpPLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok8ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ty5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk8ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ty5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFc9cS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpTLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGV0PSQucG9zaXRpb247KFcudz09PTB8fFcuaD09PTApJiYoVz17dzpPLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ty5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFcueDE9ZXQueC1XLncvMixXLngyPWV0LngrVy53LzIsVy55MT1ldC55LVcuaC8yLFcueTI9ZXQueStXLmgvMik7ZnVuY3Rpb24gYXQoVnQsZmUsZ2Upe3ZhciBuZT0wLFBlPTAscGU9ZmUrZ2U7cmV0dXJuIFZ0PjAmJnBlPjAmJihuZT1mZS9wZSpWdCxQZT1nZS9wZSpWdCkse2JpYXNEaWZmOm5lLGJpYXNDb21wbGVtZW50RGlmZjpQZX19ZnVuY3Rpb24gbHQoVnQsZmUsZ2UsbmUpe2lmKGdlLnVuaXRzPT09IiUiKXN3aXRjaChuZSl7Y2FzZSJ3aWR0aCI6cmV0dXJuIFZ0PjA/Z2UucGZWYWx1ZSpWdDowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gZmU+MD9nZS5wZlZhbHVlKmZlOjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gVnQ+MCYmZmU+MD9nZS5wZlZhbHVlKihWdCtmZSkvMjowO2Nhc2UibWluIjpyZXR1cm4gVnQ+MCYmZmU+MD9WdD5mZT9nZS5wZlZhbHVlKmZlOmdlLnBmVmFsdWUqVnQ6MDtjYXNlIm1heCI6cmV0dXJuIFZ0PjAmJmZlPjA/VnQ+ZmU/Z2UucGZWYWx1ZSpWdDpnZS5wZlZhbHVlKmZlOjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBnZS51bml0cz09PSJweCI/Z2UucGZWYWx1ZTowfXZhciBmdD1HLndpZHRoLmxlZnQudmFsdWU7Ry53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmRy53aWR0aC52YWw+MCYmKGZ0PWZ0KjEwMC9HLndpZHRoLnZhbCk7dmFyIEF0PUcud2lkdGgucmlnaHQudmFsdWU7Ry53aWR0aC5yaWdodC51bml0cz09PSJweCImJkcud2lkdGgudmFsPjAmJihBdD1BdCoxMDAvRy53aWR0aC52YWwpO3ZhciBrdD1HLmhlaWdodC50b3AudmFsdWU7Ry5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmRy5oZWlnaHQudmFsPjAmJihrdD1rdCoxMDAvRy5oZWlnaHQudmFsKTt2YXIgTXQ9Ry5oZWlnaHQuYm90dG9tLnZhbHVlO0cuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJkcuaGVpZ2h0LnZhbD4wJiYoTXQ9TXQqMTAwL0cuaGVpZ2h0LnZhbCk7dmFyIER0PWF0KEcud2lkdGgudmFsLVcudyxmdCxBdCksanQ9RHQuYmlhc0RpZmYsWnQ9RHQuYmlhc0NvbXBsZW1lbnREaWZmLEt0PWF0KEcuaGVpZ2h0LnZhbC1XLmgsa3QsTXQpLHp0PUt0LmJpYXNEaWZmLGVlPUt0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPWx0KFcudyxXLmgsTy5wc3R5bGUoInBhZGRpbmciKSxPLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChXLncsRy53aWR0aC52YWwpLGV0Lng9KC1qdCtXLngxK1cueDIrWnQpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFcuaCxHLmhlaWdodC52YWwpLGV0Lnk9KC16dCtXLnkxK1cueTIrZWUpLzJ9Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBBPXRoaXNbVF0sRD1BLl9wcml2YXRlOyghRC5jb21wb3VuZEJvdW5kc0NsZWFufHx5KSYmKHgoQSksZy5iYXRjaGluZygpfHwoRC5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBDMD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PTEvMHx8Zz09PS0xLzA/MDpnfSxtcD1mdW5jdGlvbihnLHgsVCxBLEQpe0EteD09PTB8fEQtVD09PTB8fHg9PW51bGx8fFQ9PW51bGx8fEE9PW51bGx8fEQ9PW51bGx8fChnLngxPXg8Zy54MT94OmcueDEsZy54Mj1BPmcueDI/QTpnLngyLGcueTE9VDxnLnkxP1Q6Zy55MSxnLnkyPUQ+Zy55Mj9EOmcueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxKX0sUzM9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD09bnVsbD9nOm1wKGcseC54MSx4LnkxLHgueDIseC55Mil9LFNrPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gYnAoZyx4LFQpfSxRVD1mdW5jdGlvbihnLHgsVCl7aWYoIXguY3koKS5oZWFkbGVzcygpKXt2YXIgQT14Ll9wcml2YXRlLEQ9QS5yc3R5bGUsTz1ELmFycm93V2lkdGgvMiwkPXgucHN0eWxlKFQrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHEsUztpZigkIT09Im5vbmUiKXtUPT09InNvdXJjZSI/KHE9RC5zcmNYLFM9RC5zcmNZKTpUPT09InRhcmdldCI/KHE9RC50Z3RYLFM9RC50Z3RZKToocT1ELm1pZFgsUz1ELm1pZFkpO3ZhciBHPUEuYXJyb3dCb3VuZHM9QS5hcnJvd0JvdW5kc3x8e30sVz1HW1RdPUdbVF18fHt9O1cueDE9cS1PLFcueTE9Uy1PLFcueDI9cStPLFcueTI9UytPLFcudz1XLngyLVcueDEsVy5oPVcueTItVy55MSxQVChXLDEpLG1wKGcsVy54MSxXLnkxLFcueDIsVy55Mil9fX0sdEI9ZnVuY3Rpb24oZyx4LFQpe2lmKCF4LmN5KCkuaGVhZGxlc3MoKSl7dmFyIEE7VD9BPVQrIi0iOkE9IiI7dmFyIEQ9eC5fcHJpdmF0ZSxPPUQucnN0eWxlLCQ9eC5wc3R5bGUoQSsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgcT14LnBzdHlsZSgidGV4dC1oYWxpZ24iKSxTPXgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLEc9U2soTywibGFiZWxXaWR0aCIsVCksVz1TayhPLCJsYWJlbEhlaWdodCIsVCksZXQ9U2soTywibGFiZWxYIixUKSxhdD1TayhPLCJsYWJlbFkiLFQpLGx0PXgucHN0eWxlKEErInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGZ0PXgucHN0eWxlKEErInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLEF0PXguaXNFZGdlKCksa3Q9eC5wc3R5bGUoQSsidGV4dC1yb3RhdGlvbiIpLE10PXgucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLER0PXgucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsanQ9RHQvMixadD14LnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLEt0PTIsenQ9VyxlZT1HLFZ0PWVlLzIsZmU9enQvMixnZSxuZSxQZSxwZTtpZihBdClnZT1ldC1WdCxuZT1ldCtWdCxQZT1hdC1mZSxwZT1hdCtmZTtlbHNle3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOmdlPWV0LWVlLG5lPWV0O2JyZWFrO2Nhc2UiY2VudGVyIjpnZT1ldC1WdCxuZT1ldCtWdDticmVhaztjYXNlInJpZ2h0IjpnZT1ldCxuZT1ldCtlZTticmVha31zd2l0Y2goUy52YWx1ZSl7Y2FzZSJ0b3AiOlBlPWF0LXp0LHBlPWF0O2JyZWFrO2Nhc2UiY2VudGVyIjpQZT1hdC1mZSxwZT1hdCtmZTticmVhaztjYXNlImJvdHRvbSI6UGU9YXQscGU9YXQrenQ7YnJlYWt9fWdlKz1sdC1NYXRoLm1heChNdCxqdCktWnQtS3QsbmUrPWx0K01hdGgubWF4KE10LGp0KStadCtLdCxQZSs9ZnQtTWF0aC5tYXgoTXQsanQpLVp0LUt0LHBlKz1mdCtNYXRoLm1heChNdCxqdCkrWnQrS3Q7dmFyIGJuPVR8fCJtYWluIix6ZT1ELmxhYmVsQm91bmRzLFZlPXplW2JuXT16ZVtibl18fHt9O1ZlLngxPWdlLFZlLnkxPVBlLFZlLngyPW5lLFZlLnkyPXBlLFZlLnc9bmUtZ2UsVmUuaD1wZS1QZTt2YXIgRW49QXQmJmt0LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLERuPWt0LnBmVmFsdWUhPW51bGwmJmt0LnBmVmFsdWUhPT0wO2lmKEVufHxEbil7dmFyIEtuPUVuP1NrKEQucnN0eWxlLCJsYWJlbEFuZ2xlIixUKTprdC5wZlZhbHVlLFNuPU1hdGguY29zKEtuKSxXbj1NYXRoLnNpbihLbikscnI9KGdlK25lKS8yLHZyPShQZStwZSkvMjtpZighQXQpe3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOnJyPW5lO2JyZWFrO2Nhc2UicmlnaHQiOnJyPWdlO2JyZWFrfXN3aXRjaChTLnZhbHVlKXtjYXNlInRvcCI6dnI9cGU7YnJlYWs7Y2FzZSJib3R0b20iOnZyPVBlO2JyZWFrfX12YXIgdXI9ZnVuY3Rpb24oa2EsQ2kpe3JldHVybiBrYT1rYS1ycixDaT1DaS12cix7eDprYSpTbi1DaSpXbitycix5OmthKlduK0NpKlNuK3ZyfX0sdHI9dXIoZ2UsUGUpLHduPXVyKGdlLHBlKSxncj11cihuZSxQZSksZnI9dXIobmUscGUpO2dlPU1hdGgubWluKHRyLngsd24ueCxnci54LGZyLngpLG5lPU1hdGgubWF4KHRyLngsd24ueCxnci54LGZyLngpLFBlPU1hdGgubWluKHRyLnksd24ueSxnci55LGZyLnkpLHBlPU1hdGgubWF4KHRyLnksd24ueSxnci55LGZyLnkpfXZhciBKcj1ibisiUm90Iix3aT16ZVtKcl09emVbSnJdfHx7fTt3aS54MT1nZSx3aS55MT1QZSx3aS54Mj1uZSx3aS55Mj1wZSx3aS53PW5lLWdlLHdpLmg9cGUtUGUsbXAoZyxnZSxQZSxuZSxwZSksbXAoRC5sYWJlbEJvdW5kcy5hbGwsZ2UsUGUsbmUscGUpfXJldHVybiBnfX0sV1o9ZnVuY3Rpb24oZyx4KXt2YXIgVD1nLl9wcml2YXRlLmN5LEE9VC5zdHlsZUVuYWJsZWQoKSxEPVQuaGVhZGxlc3MoKSxPPVJkKCksJD1nLl9wcml2YXRlLHE9Zy5pc05vZGUoKSxTPWcuaXNFZGdlKCksRyxXLGV0LGF0LGx0LGZ0LEF0PSQucnN0eWxlLGt0PXEmJkE/Zy5wc3R5bGUoImJvdW5kcy1leHBhbnNpb24iKS5wZlZhbHVlOlswXSxNdD1mdW5jdGlvbihncyl7cmV0dXJuIGdzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSxEdD0hQXx8TXQoZykmJighU3x8TXQoZy5zb3VyY2UoKSkmJk10KGcudGFyZ2V0KCkpKTtpZihEdCl7dmFyIGp0PTAsWnQ9MDtBJiZ4LmluY2x1ZGVPdmVybGF5cyYmKGp0PWcucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxqdCE9PTAmJihadD1nLnBzdHlsZSgib3ZlcmxheS1wYWRkaW5nIikudmFsdWUpKTt2YXIgS3Q9MCx6dD0wO0EmJnguaW5jbHVkZVVuZGVybGF5cyYmKEt0PWcucHN0eWxlKCJ1bmRlcmxheS1vcGFjaXR5IikudmFsdWUsS3QhPT0wJiYoenQ9Zy5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBlZT1NYXRoLm1heChadCx6dCksVnQ9MCxmZT0wO2lmKEEmJihWdD1nLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGZlPVZ0LzIpLHEmJnguaW5jbHVkZU5vZGVzKXt2YXIgZ2U9Zy5wb3NpdGlvbigpO2x0PWdlLngsZnQ9Z2UueTt2YXIgbmU9Zy5vdXRlcldpZHRoKCksUGU9bmUvMixwZT1nLm91dGVySGVpZ2h0KCksYm49cGUvMjtHPWx0LVBlLFc9bHQrUGUsZXQ9ZnQtYm4sYXQ9ZnQrYm4sbXAoTyxHLGV0LFcsYXQpfWVsc2UgaWYoUyYmeC5pbmNsdWRlRWRnZXMpaWYoQSYmIUQpe3ZhciB6ZT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihHPU1hdGgubWluKEF0LnNyY1gsQXQubWlkWCxBdC50Z3RYKSxXPU1hdGgubWF4KEF0LnNyY1gsQXQubWlkWCxBdC50Z3RYKSxldD1NYXRoLm1pbihBdC5zcmNZLEF0Lm1pZFksQXQudGd0WSksYXQ9TWF0aC5tYXgoQXQuc3JjWSxBdC5taWRZLEF0LnRndFkpLEctPWZlLFcrPWZlLGV0LT1mZSxhdCs9ZmUsbXAoTyxHLGV0LFcsYXQpLHplPT09ImhheXN0YWNrIil7dmFyIFZlPUF0LmhheXN0YWNrUHRzO2lmKFZlJiZWZS5sZW5ndGg9PT0yKXtpZihHPVZlWzBdLngsZXQ9VmVbMF0ueSxXPVZlWzFdLngsYXQ9VmVbMV0ueSxHPlcpe3ZhciBFbj1HO0c9VyxXPUVufWlmKGV0PmF0KXt2YXIgRG49ZXQ7ZXQ9YXQsYXQ9RG59bXAoTyxHLWZlLGV0LWZlLFcrZmUsYXQrZmUpfX1lbHNlIGlmKHplPT09ImJlemllciJ8fHplPT09InVuYnVuZGxlZC1iZXppZXIifHx6ZT09PSJzZWdtZW50cyJ8fHplPT09InRheGkiKXt2YXIgS247c3dpdGNoKHplKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjpLbj1BdC5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpLbj1BdC5saW5lUHRzO2JyZWFrfWlmKEtuIT1udWxsKWZvcih2YXIgU249MDtTbjxLbi5sZW5ndGg7U24rKyl7dmFyIFduPUtuW1NuXTtHPVduLngtZmUsVz1Xbi54K2ZlLGV0PVduLnktZmUsYXQ9V24ueStmZSxtcChPLEcsZXQsVyxhdCl9fX1lbHNle3ZhciBycj1nLnNvdXJjZSgpLHZyPXJyLnBvc2l0aW9uKCksdXI9Zy50YXJnZXQoKSx0cj11ci5wb3NpdGlvbigpO2lmKEc9dnIueCxXPXRyLngsZXQ9dnIueSxhdD10ci55LEc+Vyl7dmFyIHduPUc7Rz1XLFc9d259aWYoZXQ+YXQpe3ZhciBncj1ldDtldD1hdCxhdD1ncn1HLT1mZSxXKz1mZSxldC09ZmUsYXQrPWZlLG1wKE8sRyxldCxXLGF0KX1pZihBJiZ4LmluY2x1ZGVFZGdlcyYmUyYmKFFUKE8sZywibWlkLXNvdXJjZSIpLFFUKE8sZywibWlkLXRhcmdldCIpLFFUKE8sZywic291cmNlIiksUVQoTyxnLCJ0YXJnZXQiKSksQSl7dmFyIGZyPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoZnIpe3ZhciBKcj1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHdpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7bXAoTyxPLngxK0pyLE8ueTErd2ksTy54MitKcixPLnkyK3dpKX19dmFyIEtzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O0pQKEtzLE8pLGtMKEtzLGt0KSxQVChLcywxKSxBJiYoRz1PLngxLFc9Ty54MixldD1PLnkxLGF0PU8ueTIsbXAoTyxHLWVlLGV0LWVlLFcrZWUsYXQrZWUpKTt2YXIga2E9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307SlAoa2EsTyksa0woa2Esa3QpLFBUKGthLDEpO3ZhciBDaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O0NpLmFsbCE9bnVsbD9DWShDaS5hbGwpOkNpLmFsbD1SZCgpLEEmJnguaW5jbHVkZUxhYmVscyYmKHguaW5jbHVkZU1haW5MYWJlbHMmJnRCKE8sZyxudWxsKSxTJiYoeC5pbmNsdWRlU291cmNlTGFiZWxzJiZ0QihPLGcsInNvdXJjZSIpLHguaW5jbHVkZVRhcmdldExhYmVscyYmdEIoTyxnLCJ0YXJnZXQiKSkpfXJldHVybiBPLngxPUMwKE8ueDEpLE8ueTE9QzAoTy55MSksTy54Mj1DMChPLngyKSxPLnkyPUMwKE8ueTIpLE8udz1DMChPLngyLU8ueDEpLE8uaD1DMChPLnkyLU8ueTEpLE8udz4wJiZPLmg+MCYmRHQmJihrTChPLGt0KSxQVChPLDEpKSxPfSxlQj1mdW5jdGlvbihnKXt2YXIgeD0wLFQ9ZnVuY3Rpb24oTyl7cmV0dXJuKE8/MTowKTw8eCsrfSxBPTA7cmV0dXJuIEErPVQoZy5pbmN1ZGVOb2RlcyksQSs9VChnLmluY2x1ZGVFZGdlcyksQSs9VChnLmluY2x1ZGVMYWJlbHMpLEErPVQoZy5pbmNsdWRlTWFpbkxhYmVscyksQSs9VChnLmluY2x1ZGVTb3VyY2VMYWJlbHMpLEErPVQoZy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxBKz1UKGcuaW5jbHVkZU92ZXJsYXlzKSxBfSxuQj1mdW5jdGlvbihnKXtpZihnLmlzRWRnZSgpKXt2YXIgeD1nLnNvdXJjZSgpLnBvc2l0aW9uKCksVD1nLnRhcmdldCgpLnBvc2l0aW9uKCksQT1mdW5jdGlvbihPKXtyZXR1cm4gTWF0aC5yb3VuZChPKX07cmV0dXJuIGwxKFtBKHgueCksQSh4LnkpLEEoVC54KSxBKFQueSldKX1lbHNlIHJldHVybiAwfSxyQj1mdW5jdGlvbihnLHgpe3ZhciBUPWcuX3ByaXZhdGUsQSxEPWcuaXNFZGdlKCksTz14PT1udWxsP2lCOmVCKHgpLCQ9Tz09PWlCLHE9bkIoZyksUz1ULmJiQ2FjaGVQb3NLZXk9PT1xLEc9eC51c2VDYWNoZSYmUyxXPWZ1bmN0aW9uKGZ0KXtyZXR1cm4gZnQuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8ZnQuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sZXQ9IUd8fFcoZyl8fEQmJlcoZy5zb3VyY2UoKSl8fFcoZy50YXJnZXQoKSk7aWYoZXQ/KFN8fGcucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKEcpLEE9V1ooZyxBayksVC5iYkNhY2hlPUEsVC5iYkNhY2hlUG9zS2V5PXEpOkE9VC5iYkNhY2hlLCEkKXt2YXIgYXQ9Zy5pc05vZGUoKTtBPVJkKCksKHguaW5jbHVkZU5vZGVzJiZhdHx8eC5pbmNsdWRlRWRnZXMmJiFhdCkmJih4LmluY2x1ZGVPdmVybGF5cz9TMyhBLFQub3ZlcmxheUJvdW5kcyk6UzMoQSxULmJvZHlCb3VuZHMpKSx4LmluY2x1ZGVMYWJlbHMmJih4LmluY2x1ZGVNYWluTGFiZWxzJiYoIUR8fHguaW5jbHVkZVNvdXJjZUxhYmVscyYmeC5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9TMyhBLFQubGFiZWxCb3VuZHMuYWxsKTooeC5pbmNsdWRlTWFpbkxhYmVscyYmUzMoQSxULmxhYmVsQm91bmRzLm1haW5Sb3QpLHguaW5jbHVkZVNvdXJjZUxhYmVscyYmUzMoQSxULmxhYmVsQm91bmRzLnNvdXJjZVJvdCkseC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZTMyhBLFQubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLEEudz1BLngyLUEueDEsQS5oPUEueTItQS55MX1yZXR1cm4gQX0sQWs9e2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITAsaW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTWFpbkxhYmVsczohMCxpbmNsdWRlU291cmNlTGFiZWxzOiEwLGluY2x1ZGVUYXJnZXRMYWJlbHM6ITAsaW5jbHVkZU92ZXJsYXlzOiEwLGluY2x1ZGVVbmRlcmxheXM6ITAsdXNlQ2FjaGU6ITB9LGlCPWVCKEFrKSxzQj1CZihBayk7cWIuYm91bmRpbmdCb3g9ZnVuY3Rpb24oeSl7dmFyIGc7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih5PT09dm9pZCAwfHx5LnVzZUNhY2hlPT09dm9pZCAwfHx5LnVzZUNhY2hlPT09ITApKXk9PT12b2lkIDA/eT1Bazp5PXNCKHkpLGc9ckIodGhpc1swXSx5KTtlbHNle2c9UmQoKSx5PXl8fEFrO3ZhciB4PXNCKHkpLFQ9dGhpcyxBPVQuY3koKSxEPUEuc3R5bGVFbmFibGVkKCk7aWYoRClmb3IodmFyIE89MDtPPFQubGVuZ3RoO08rKyl7dmFyICQ9VFtPXSxxPSQuX3ByaXZhdGUsUz1uQigkKSxHPXEuYmJDYWNoZVBvc0tleT09PVMsVz14LnVzZUNhY2hlJiZHJiYhcS5zdHlsZURpcnR5OyQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFcpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXkudXNlQ2FjaGUpO2Zvcih2YXIgZXQ9MDtldDxULmxlbmd0aDtldCsrKXt2YXIgYXQ9VFtldF07UzMoZyxyQihhdCx4KSl9fXJldHVybiBnLngxPUMwKGcueDEpLGcueTE9QzAoZy55MSksZy54Mj1DMChnLngyKSxnLnkyPUMwKGcueTIpLGcudz1DMChnLngyLWcueDEpLGcuaD1DMChnLnkyLWcueTEpLGd9LHFiLmRpcnR5Qm91bmRpbmdCb3hDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgZz10aGlzW3ldLl9wcml2YXRlO2cuYmJDYWNoZT1udWxsLGcuYmJDYWNoZVBvc0tleT1udWxsLGcuYm9keUJvdW5kcz1udWxsLGcub3ZlcmxheUJvdW5kcz1udWxsLGcubGFiZWxCb3VuZHMuYWxsPW51bGwsZy5sYWJlbEJvdW5kcy5zb3VyY2U9bnVsbCxnLmxhYmVsQm91bmRzLnRhcmdldD1udWxsLGcubGFiZWxCb3VuZHMubWFpbj1udWxsLGcubGFiZWxCb3VuZHMuc291cmNlUm90PW51bGwsZy5sYWJlbEJvdW5kcy50YXJnZXRSb3Q9bnVsbCxnLmxhYmVsQm91bmRzLm1haW5Sb3Q9bnVsbCxnLmFycm93Qm91bmRzLnNvdXJjZT1udWxsLGcuYXJyb3dCb3VuZHMudGFyZ2V0PW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXNvdXJjZSJdPW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXRhcmdldCJdPW51bGx9cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgiYm91bmRzIiksdGhpc30scWIuYm91bmRpbmdCb3hBdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLm5vZGVzKCkseD10aGlzLmN5KCksVD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxBPXguY29sbGVjdGlvbigpO2lmKFQmJihBPWcuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzUGFyZW50KCl9KSxnPWcubm90KEEpKSxodCh5KSl7dmFyIEQ9eTt5PWZ1bmN0aW9uKCl7cmV0dXJuIER9fXZhciBPPWZ1bmN0aW9uKEcsVyl7cmV0dXJuIEcuX3ByaXZhdGUuYmJBdE9sZFBvcz15KEcsVyl9LCQ9ZnVuY3Rpb24oRyl7cmV0dXJuIEcuX3ByaXZhdGUuYmJBdE9sZFBvc307eC5zdGFydEJhdGNoKCksZy5mb3JFYWNoKE8pLnNpbGVudFBvc2l0aW9ucyh5KSxUJiYoQS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxBLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLEEudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgcT1UWSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZy5zaWxlbnRQb3NpdGlvbnMoJCksVCYmKEEuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksQS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxBLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSkseC5lbmRCYXRjaCgpLHF9LG54LmJvdW5kaW5nYm94PW54LmJiPW54LmJvdW5kaW5nQm94LG54LnJlbmRlcmVkQm91bmRpbmdib3g9bngucmVuZGVyZWRCb3VuZGluZ0JveDt2YXIgS1o9cWIsTGssTWs7TGs9TWs9e307dmFyIHhtPWZ1bmN0aW9uKGcpe2cudXBwZXJjYXNlTmFtZT1HZShnLm5hbWUpLGcuYXV0b05hbWU9ImF1dG8iK2cudXBwZXJjYXNlTmFtZSxnLmxhYmVsTmFtZT0ibGFiZWwiK2cudXBwZXJjYXNlTmFtZSxnLm91dGVyTmFtZT0ib3V0ZXIiK2cudXBwZXJjYXNlTmFtZSxnLnVwcGVyY2FzZU91dGVyTmFtZT1HZShnLm91dGVyTmFtZSksTGtbZy5uYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF0sQT1ULl9wcml2YXRlLEQ9QS5jeSxPPUQuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFQpaWYoTyl7aWYoVC5pc1BhcmVudCgpKXJldHVybiBULnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksQVtnLmF1dG9OYW1lXXx8MDt2YXIgJD1ULnBzdHlsZShnLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gVC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxBLnJzdHlsZVtnLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSxMa1sib3V0ZXIiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdLEE9VC5fcHJpdmF0ZSxEPUEuY3ksTz1ELl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihUKWlmKE8pe3ZhciAkPVRbZy5uYW1lXSgpLHE9VC5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsUz0yKlQucGFkZGluZygpO3JldHVybiAkK3ErU31lbHNlIHJldHVybiAxfSxMa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdO2lmKFQpe3ZhciBBPVRbZy5uYW1lXSgpO3JldHVybiBBKnRoaXMuY3koKS56b29tKCl9fSxMa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF07aWYoVCl7dmFyIEE9VFtnLm91dGVyTmFtZV0oKTtyZXR1cm4gQSp0aGlzLmN5KCkuem9vbSgpfX19O3htKHtuYW1lOiJ3aWR0aCJ9KSx4bSh7bmFtZToiaGVpZ2h0In0pLE1rLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdLGc9eS5fcHJpdmF0ZTtyZXR1cm4geS5pc1BhcmVudCgpPyh5LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksZy5hdXRvUGFkZGluZyE9PXZvaWQgMD9nLmF1dG9QYWRkaW5nOnkucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eS5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxNay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5LmhlaWdodCgpKzIqeS5wYWRkaW5nKCl9LE1rLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpc1swXTtyZXR1cm4geS53aWR0aCgpKzIqeS5wYWRkaW5nKCl9O3ZhciBSTD1NayxZWj1mdW5jdGlvbihnLHgpe2lmKGcuaXNFZGdlKCkpcmV0dXJuIHgoZyl9LFhaPWZ1bmN0aW9uKGcseCl7aWYoZy5pc0VkZ2UoKSl7dmFyIFQ9Zy5jeSgpO3JldHVybiBPVCh4KGcpLFQuem9vbSgpLFQucGFuKCkpfX0sUVo9ZnVuY3Rpb24oZyx4KXtpZihnLmlzRWRnZSgpKXt2YXIgVD1nLmN5KCksQT1ULnBhbigpLEQ9VC56b29tKCk7cmV0dXJuIHgoZykubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPVChPLEQsQSl9KX19LFpaPWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbmRlcmVyKCkuZ2V0Q29udHJvbFBvaW50cyhnKX0sSlo9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGcpfSx0Sj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGcpfSxlSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGcpfSxuSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChnKX0sYUI9e2NvbnRyb2xQb2ludHM6e2dldDpaWixtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6SlosbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDp0Sn0sdGFyZ2V0RW5kcG9pbnQ6e2dldDplSn0sbWlkcG9pbnQ6e2dldDpuSn19LHJKPWZ1bmN0aW9uKGcpe3JldHVybiJyZW5kZXJlZCIrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyKDEpfSxpSj1PYmplY3Qua2V5cyhhQikucmVkdWNlKGZ1bmN0aW9uKHksZyl7dmFyIHg9YUJbZ10sVD1ySihnKTtyZXR1cm4geVtnXT1mdW5jdGlvbigpe3JldHVybiBZWih0aGlzLHguZ2V0KX0seC5tdWx0P3lbVF09ZnVuY3Rpb24oKXtyZXR1cm4gUVoodGhpcyx4LmdldCl9OnlbVF09ZnVuY3Rpb24oKXtyZXR1cm4gWFoodGhpcyx4LmdldCl9LHl9LHt9KSxzSj1tZSh7fSxKRixLWixSTCxpSik7LyohCiAgICAJICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKCiAgICAJICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICAgIAkgIGh0dHBzOi8vdGxkcmxlZ2FsLmNvbS9saWNlbnNlL21pdC1saWNlbnNlCiAgICAJICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAgIAkgICovdmFyIG9CPWZ1bmN0aW9uKGcseCl7dGhpcy5yZWN5Y2xlKGcseCl9O2Z1bmN0aW9uIElrKCl7cmV0dXJuITF9ZnVuY3Rpb24gWlQoKXtyZXR1cm4hMH1vQi5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImV2ZW50In0scmVjeWNsZTpmdW5jdGlvbihnLHgpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1JayxnIT1udWxsJiZnLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9Zy50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWcuZGVmYXVsdFByZXZlbnRlZD9aVDpJayk6ZyE9bnVsbCYmZy50eXBlP3g9Zzp0aGlzLnR5cGU9Zyx4IT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXgub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9eC50eXBlIT1udWxsP3gudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT14LmN5LHRoaXMudGFyZ2V0PXgudGFyZ2V0LHRoaXMucG9zaXRpb249eC5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249eC5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXgubmFtZXNwYWNlLHRoaXMubGF5b3V0PXgubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBUPXRoaXMucG9zaXRpb24sQT10aGlzLmN5Lnpvb20oKSxEPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4OlQueCpBK0QueCx5OlQueSpBK0QueX19dGhpcy50aW1lU3RhbXA9ZyYmZy50aW1lU3RhbXB8fERhdGUubm93KCl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9WlQ7dmFyIGc9dGhpcy5vcmlnaW5hbEV2ZW50O2cmJmcucHJldmVudERlZmF1bHQmJmcucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aVDt2YXIgZz10aGlzLm9yaWdpbmFsRXZlbnQ7ZyYmZy5zdG9wUHJvcGFnYXRpb24mJmcuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9WlQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOklrLGlzUHJvcGFnYXRpb25TdG9wcGVkOklrLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOklrfTt2YXIgY0I9L14oW14uXSspKFwuKD86W14uXSspKT8kLyxhSj0iLioiLHVCPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PT14fSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sbEI9T2JqZWN0LmtleXModUIpLG9KPXt9O2Z1bmN0aW9uIEpUKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpvSixnPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHg9MDt4PGxCLmxlbmd0aDt4Kyspe3ZhciBUPWxCW3hdO3RoaXNbVF09eVtUXXx8dUJbVF19dGhpcy5jb250ZXh0PWd8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9dmFyIGttPUpULnByb3RvdHlwZSxoQj1mdW5jdGlvbihnLHgsVCxBLEQsTywkKXt5dChBKSYmKEQ9QSxBPW51bGwpLCQmJihPPT1udWxsP089JDpPPW1lKHt9LE8sJCkpO2Zvcih2YXIgcT1kdChUKT9UOlQuc3BsaXQoL1xzKy8pLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIEc9cVtTXTtpZighWihHKSl7dmFyIFc9Ry5tYXRjaChjQik7aWYoVyl7dmFyIGV0PVdbMV0sYXQ9V1syXT9XWzJdOm51bGwsbHQ9eChnLEcsZXQsYXQsQSxELE8pO2lmKGx0PT09ITEpYnJlYWt9fX19LGZCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuYWRkRXZlbnRGaWVsZHMoZy5jb250ZXh0LHgpLG5ldyBvQih4LnR5cGUseCl9LGNKPWZ1bmN0aW9uKGcseCxUKXtpZihDdChUKSl7eChnLFQpO3JldHVybn1lbHNlIGlmKGh0KFQpKXt4KGcsZkIoZyxUKSk7cmV0dXJufWZvcih2YXIgQT1kdChUKT9UOlQuc3BsaXQoL1xzKy8pLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXTtpZighWihPKSl7dmFyICQ9Ty5tYXRjaChjQik7aWYoJCl7dmFyIHE9JFsxXSxTPSRbMl0/JFsyXTpudWxsLEc9ZkIoZyx7dHlwZTpxLG5hbWVzcGFjZTpTLHRhcmdldDpnLmNvbnRleHR9KTt4KGcsRyl9fX19O2ttLm9uPWttLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHksZyx4LFQsQSl7cmV0dXJuIGhCKHRoaXMsZnVuY3Rpb24oRCxPLCQscSxTLEcsVyl7eXQoRykmJkQubGlzdGVuZXJzLnB1c2goe2V2ZW50Ok8sY2FsbGJhY2s6Ryx0eXBlOiQsbmFtZXNwYWNlOnEscXVhbGlmaWVyOlMsY29uZjpXfSl9LHksZyx4LFQsQSksdGhpc30sa20ub25lPWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLm9uKHksZyx4LFQse29uZTohMH0pfSxrbS5yZW1vdmVMaXN0ZW5lcj1rbS5vZmY9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPVpLKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBEPXRoaXMubGlzdGVuZXJzLE89ZnVuY3Rpb24oUyl7dmFyIEc9RFtTXTtoQihBLGZ1bmN0aW9uKFcsZXQsYXQsbHQsZnQsQXQpe2lmKChHLnR5cGU9PT1hdHx8eT09PSIqIikmJighbHQmJkcubmFtZXNwYWNlIT09Ii4qInx8Ry5uYW1lc3BhY2U9PT1sdCkmJighZnR8fFcucXVhbGlmaWVyQ29tcGFyZShHLnF1YWxpZmllcixmdCkpJiYoIUF0fHxHLmNhbGxiYWNrPT09QXQpKXJldHVybiBELnNwbGljZShTLDEpLCExfSx5LGcseCxUKX0sJD1ELmxlbmd0aC0xOyQ+PTA7JC0tKU8oJCk7cmV0dXJuIHRoaXN9LGttLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9LGttLmVtaXQ9a20udHJpZ2dlcj1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcy5saXN0ZW5lcnMsQT1ULmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLGR0KGcpfHwoZz1bZ10pLGNKKHRoaXMsZnVuY3Rpb24oRCxPKXt4IT1udWxsJiYoVD1be2V2ZW50Ok8uZXZlbnQsdHlwZTpPLnR5cGUsbmFtZXNwYWNlOk8ubmFtZXNwYWNlLGNhbGxiYWNrOnh9XSxBPVQubGVuZ3RoKTtmb3IodmFyICQ9ZnVuY3Rpb24oRyl7dmFyIFc9VFtHXTtpZihXLnR5cGU9PT1PLnR5cGUmJighVy5uYW1lc3BhY2V8fFcubmFtZXNwYWNlPT09Ty5uYW1lc3BhY2V8fFcubmFtZXNwYWNlPT09YUopJiZELmV2ZW50TWF0Y2hlcyhELmNvbnRleHQsVyxPKSl7dmFyIGV0PVtPXTtnIT1udWxsJiZZUChldCxnKSxELmJlZm9yZUVtaXQoRC5jb250ZXh0LFcsTyksVy5jb25mJiZXLmNvbmYub25lJiYoRC5saXN0ZW5lcnM9RC5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGZ0KXtyZXR1cm4gZnQhPT1XfSkpO3ZhciBhdD1ELmNhbGxiYWNrQ29udGV4dChELmNvbnRleHQsVyxPKSxsdD1XLmNhbGxiYWNrLmFwcGx5KGF0LGV0KTtELmFmdGVyRW1pdChELmNvbnRleHQsVyxPKSxsdD09PSExJiYoTy5zdG9wUHJvcGFnYXRpb24oKSxPLnByZXZlbnREZWZhdWx0KCkpfX0scT0wO3E8QTtxKyspJChxKTtELmJ1YmJsZShELmNvbnRleHQpJiYhTy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZELnBhcmVudChELmNvbnRleHQpLmVtaXQoTyxnKX0seSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciB1Sj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgQT14LnF1YWxpZmllcjtyZXR1cm4gQSE9bnVsbD9nIT09VC50YXJnZXQmJm50KFQudGFyZ2V0KSYmQS5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcuY3koKSx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKGcseCl7eC5jb25mJiZ4LmNvbmYub25jZSYmeC5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHguZXZlbnQseC5xdWFsaWZpZXIseC5jYWxsYmFjayl9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpP2cucGFyZW50KCk6Zy5jeSgpfX0sdDk9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyB5bShnKTpnfSxkQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5fcHJpdmF0ZTtULmVtaXR0ZXJ8fChULmVtaXR0ZXI9bmV3IEpUKHVKLHgpKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9dDkoeCksRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgTz10aGlzW0RdO08uZW1pdHRlcigpLm9uKGcsQSxUKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT10OSh4KSxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBPPXRoaXNbRF07Ty5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxBLFQpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXTt4LmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9dDkoeCksRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgTz10aGlzW0RdO08uZW1pdHRlcigpLm9uZShnLEEsVCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgQT10OSh4KSxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBPPXRoaXNbRF07Ty5lbWl0dGVyKCkub24oZyxBLFQse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgQT10aGlzW1RdO0EuZW1pdHRlcigpLmVtaXQoZyx4KX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShnLHRoaXMpLHRoaXMuZW1pdChnLHgpLHRoaXN9fTtBYy5ldmVudEFsaWFzZXNPbihkQik7dmFyIGdCPXtub2RlczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCl9KS5maWx0ZXIoZyl9LGVkZ2VzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0VkZ2UoKX0pLmZpbHRlcihnKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZz10aGlzLnNwYXduKCkseD10aGlzLnNwYXduKCksVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgQT10aGlzW1RdO0EuaXNOb2RlKCk/Zy5wdXNoKEEpOngucHVzaChBKX1yZXR1cm57bm9kZXM6ZyxlZGdlczp4fX0sZmlsdGVyOmZ1bmN0aW9uKGcseCl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcztpZihtdChnKXx8eHQoZykpcmV0dXJuIG5ldyB5bShnKS5maWx0ZXIodGhpcyk7aWYoeXQoZykpe2Zvcih2YXIgVD10aGlzLnNwYXduKCksQT10aGlzLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIE89QVtEXSwkPXg/Zy5hcHBseSh4LFtPLEQsQV0pOmcoTyxELEEpOyQmJlQucHVzaChPKX1yZXR1cm4gVH1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZyl7aWYoZyl7bXQoZykmJihnPXRoaXMuZmlsdGVyKGcpKTtmb3IodmFyIHg9dGhpcy5zcGF3bigpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpc1tUXSxEPWcuaGFzKEEpO0R8fHgucHVzaChBKX1yZXR1cm4geH1lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7cmV0dXJuIGcubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZyl7aWYobXQoZykpe3ZhciB4PWc7cmV0dXJuIHRoaXMuZmlsdGVyKHgpfWZvcih2YXIgVD10aGlzLnNwYXduKCksQT10aGlzLEQ9ZyxPPXRoaXMubGVuZ3RoPGcubGVuZ3RoLCQ9Tz9BOkQscT1PP0Q6QSxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBHPSRbU107cS5oYXMoRykmJlQucHVzaChHKX1yZXR1cm4gVH0seG9yOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEE9dGhpcyxEPWcsTz1mdW5jdGlvbihxLFMpe2Zvcih2YXIgRz0wO0c8cS5sZW5ndGg7RysrKXt2YXIgVz1xW0ddLGV0PVcuX3ByaXZhdGUuZGF0YS5pZCxhdD1TLmhhc0VsZW1lbnRXaXRoSWQoZXQpO2F0fHxULnB1c2goVyl9fTtyZXR1cm4gTyhBLEQpLE8oRCxBKSxUfSxkaWZmOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEE9dGhpcy5zcGF3bigpLEQ9dGhpcy5zcGF3bigpLE89dGhpcywkPWcscT1mdW5jdGlvbihHLFcsZXQpe2Zvcih2YXIgYXQ9MDthdDxHLmxlbmd0aDthdCsrKXt2YXIgbHQ9R1thdF0sZnQ9bHQuX3ByaXZhdGUuZGF0YS5pZCxBdD1XLmhhc0VsZW1lbnRXaXRoSWQoZnQpO0F0P0QubWVyZ2UobHQpOmV0LnB1c2gobHQpfX07cmV0dXJuIHEoTywkLFQpLHEoJCxPLEEpLHtsZWZ0OlQscmlnaHQ6QSxib3RoOkR9fSxhZGQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZighZylyZXR1cm4gdGhpcztpZihtdChnKSl7dmFyIFQ9ZztnPXgubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWZvcih2YXIgQT10aGlzLnNwYXduU2VsZigpLEQ9MDtEPGcubGVuZ3RoO0QrKyl7dmFyIE89Z1tEXSwkPSF0aGlzLmhhcyhPKTskJiZBLnB1c2goTyl9cmV0dXJuIEF9LG1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVD14LmN5O2lmKCFnKXJldHVybiB0aGlzO2lmKGcmJm10KGcpKXt2YXIgQT1nO2c9VC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoQSl9Zm9yKHZhciBEPXgubWFwLE89MDtPPGcubGVuZ3RoO08rKyl7dmFyICQ9Z1tPXSxxPSQuX3ByaXZhdGUuZGF0YS5pZCxTPSFELmhhcyhxKTtpZihTKXt2YXIgRz10aGlzLmxlbmd0aCsrO3RoaXNbR109JCxELnNldChxLHtlbGU6JCxpbmRleDpHfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1tnXSxUPXguaWQoKSxBPXRoaXMuX3ByaXZhdGUsRD1BLm1hcDt0aGlzW2ddPXZvaWQgMCxELmRlbGV0ZShUKTt2YXIgTz1nPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTyl7dmFyICQ9dGhpcy5sZW5ndGgtMSxxPXRoaXNbJF0sUz1xLl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1tnXT1xLEQuc2V0KFMse2VsZTpxLGluZGV4Omd9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGcpe2c9Z1swXTt2YXIgeD10aGlzLl9wcml2YXRlLFQ9Zy5fcHJpdmF0ZS5kYXRhLmlkLEE9eC5tYXAsRD1BLmdldChUKTtpZighRClyZXR1cm4gdGhpczt2YXIgTz1ELmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChPKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWcpcmV0dXJuIHRoaXM7aWYoZyYmbXQoZykpe3ZhciBUPWc7Zz14Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihUKX1mb3IodmFyIEE9MDtBPGcubGVuZ3RoO0ErKyl0aGlzLnVubWVyZ2VPbmUoZ1tBXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFQ9dGhpc1t4XTtnKFQpJiZ0aGlzLnVubWVyZ2VBdCh4KX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPVtdLEE9dGhpcyxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF0sJD14P2cuYXBwbHkoeCxbTyxELEFdKTpnKE8sRCxBKTtULnB1c2goJCl9cmV0dXJuIFR9LHJlZHVjZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD14LEE9dGhpcyxEPTA7RDxBLmxlbmd0aDtEKyspVD1nKFQsQVtEXSxELEEpO3JldHVybiBUfSxtYXg6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9LTEvMCxBLEQ9dGhpcyxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciAkPURbT10scT14P2cuYXBwbHkoeCxbJCxPLERdKTpnKCQsTyxEKTtxPlQmJihUPXEsQT0kKX1yZXR1cm57dmFsdWU6VCxlbGU6QX19LG1pbjpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0xLzAsQSxEPXRoaXMsTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dLHE9eD9nLmFwcGx5KHgsWyQsTyxEXSk6ZygkLE8sRCk7cTxUJiYoVD1xLEE9JCl9cmV0dXJue3ZhbHVlOlQsZWxlOkF9fX0sdWM9Z0I7dWMudT11Y1sifCJdPXVjWyIrIl09dWMudW5pb249dWMub3I9dWMuYWRkLHVjWyJcXCJdPXVjWyIhIl09dWNbIi0iXT11Yy5kaWZmZXJlbmNlPXVjLnJlbGF0aXZlQ29tcGxlbWVudD11Yy5zdWJ0cmFjdD11Yy5ub3QsdWMubj11Y1siJiJdPXVjWyIuIl09dWMuYW5kPXVjLmludGVyc2VjdGlvbj11Yy5pbnRlcnNlY3QsdWNbIl4iXT11Y1siKCspIl09dWNbIigtKSJdPXVjLnN5bW1ldHJpY0RpZmZlcmVuY2U9dWMuc3ltZGlmZj11Yy54b3IsdWMuZm5GaWx0ZXI9dWMuZmlsdGVyRm49dWMuc3RkRmlsdGVyPXVjLmZpbHRlcix1Yy5jb21wbGVtZW50PXVjLmFic2NvbXA9dWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBsSj17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5ncm91cH19LHBCPWZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jeSgpLEE9VC5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gRChHKXt2YXIgVz1HLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBXLnZhbHVlPT09ImF1dG8iP0E/Ry56RGVwdGgoKTowOlcudmFsdWU9PT0iYm90dG9tIj8tMTpXLnZhbHVlPT09InRvcCI/JDU6MH12YXIgTz1EKGcpLUQoeCk7aWYoTyE9PTApcmV0dXJuIE87ZnVuY3Rpb24gJChHKXt2YXIgVz1HLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFcudmFsdWU9PT0iYXV0byImJkcuaXNOb2RlKCk/MTowfXZhciBxPSQoZyktJCh4KTtpZihxIT09MClyZXR1cm4gcTt2YXIgUz1nLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXgucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIFMhPT0wP1M6Zy5wb29sSW5kZXgoKS14LnBvb2xJbmRleCgpfSxlOT17Zm9yRWFjaDpmdW5jdGlvbihnLHgpe2lmKHl0KGcpKWZvcih2YXIgVD10aGlzLmxlbmd0aCxBPTA7QTxUO0ErKyl7dmFyIEQ9dGhpc1tBXSxPPXg/Zy5hcHBseSh4LFtELEEsdGhpc10pOmcoRCxBLHRoaXMpO2lmKE89PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZy5wdXNoKHRoaXNbeF0pO3JldHVybiBnfSxzbGljZTpmdW5jdGlvbihnLHgpe3ZhciBUPVtdLEE9dGhpcy5sZW5ndGg7eD09bnVsbCYmKHg9QSksZz09bnVsbCYmKGc9MCksZzwwJiYoZz1BK2cpLHg8MCYmKHg9QSt4KTtmb3IodmFyIEQ9ZztEPj0wJiZEPHgmJkQ8QTtEKyspVC5wdXNoKHRoaXNbRF0pO3JldHVybiB0aGlzLnNwYXduKFQpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpc1tnXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihnKXtpZigheXQoZykpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy50b0FycmF5KCkuc29ydChnKTtyZXR1cm4gdGhpcy5zcGF3bih4KX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChwQil9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7dmFyIHg9Zy5fcHJpdmF0ZSxUPXguZ3JvdXA7aWYoVD09PSJub2RlcyIpe3ZhciBBPXguZGF0YS5wYXJlbnQ/Zy5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIGcuaXNQYXJlbnQoKT9BOiQ1LTF9ZWxzZXt2YXIgRD14LnNvdXJjZSxPPXgudGFyZ2V0LCQ9RC56RGVwdGgoKSxxPU8uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQscSwwKX19fX07ZTkuZWFjaD1lOS5mb3JFYWNoO3ZhciBoSj1mdW5jdGlvbigpe3ZhciBnPSJ1bmRlZmluZWQiLHg9KHR5cGVvZiBTeW1ib2w+InUiPyJ1bmRlZmluZWQiOmYoU3ltYm9sKSkhPWcmJmYoU3ltYm9sLml0ZXJhdG9yKSE9Zzt4JiYoZTlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBUPXRoaXMsQT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LEQ9MCxPPXRoaXMubGVuZ3RoO3JldHVybiBiKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEQ8Tz9BLnZhbHVlPVRbRCsrXTooQS52YWx1ZT12b2lkIDAsQS5kb25lPSEwKSxBfX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfTtoSigpO3ZhciBmSj1CZih7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksbjk9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24oZyl7Zz1mSihnKTt2YXIgeDtpZighdGhpcy50YWtlc1VwU3BhY2UoKSl4PXt3OjAsaDowfTtlbHNlIGlmKGcubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKXt2YXIgVD10aGlzLmJvdW5kaW5nQm94KCk7eD17dzpULncsaDpULmh9fWVsc2UgeD17dzp0aGlzLm91dGVyV2lkdGgoKSxoOnRoaXMub3V0ZXJIZWlnaHQoKX07cmV0dXJuKHgudz09PTB8fHguaD09PTApJiYoeC53PXguaD0xKSx4fSxsYXlvdXRQb3NpdGlvbnM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oWnQpe3JldHVybiFadC5pc1BhcmVudCgpfSksRD10aGlzLmN5KCksTz14LmVsZXMsJD1mdW5jdGlvbihLdCl7cmV0dXJuIEt0LmlkKCl9LHE9a2UoVCwkKTtnLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6Z30pLGcuYW5pbWF0aW9ucz1bXTt2YXIgUz1mdW5jdGlvbihLdCx6dCxlZSl7dmFyIFZ0PXt4Onp0LngxK3p0LncvMix5Onp0LnkxK3p0LmgvMn0sZmU9e3g6KGVlLngtVnQueCkqS3QseTooZWUueS1WdC55KSpLdH07cmV0dXJue3g6VnQueCtmZS54LHk6VnQueStmZS55fX0sRz14LnNwYWNpbmdGYWN0b3ImJnguc3BhY2luZ0ZhY3RvciE9PTEsVz1mdW5jdGlvbigpe2lmKCFHKXJldHVybiBudWxsO2Zvcih2YXIgS3Q9UmQoKSx6dD0wO3p0PEEubGVuZ3RoO3p0Kyspe3ZhciBlZT1BW3p0XSxWdD1xKGVlLHp0KTtTWShLdCxWdC54LFZ0LnkpfXJldHVybiBLdH0sZXQ9VygpLGF0PWtlKGZ1bmN0aW9uKFp0LEt0KXt2YXIgenQ9cShadCxLdCk7aWYoRyl7dmFyIGVlPU1hdGguYWJzKHguc3BhY2luZ0ZhY3Rvcik7enQ9UyhlZSxldCx6dCl9cmV0dXJuIHgudHJhbnNmb3JtIT1udWxsJiYoenQ9eC50cmFuc2Zvcm0oWnQsenQpKSx6dH0sJCk7aWYoeC5hbmltYXRlKXtmb3IodmFyIGx0PTA7bHQ8QS5sZW5ndGg7bHQrKyl7dmFyIGZ0PUFbbHRdLEF0PWF0KGZ0LGx0KSxrdD14LmFuaW1hdGVGaWx0ZXI9PW51bGx8fHguYW5pbWF0ZUZpbHRlcihmdCxsdCk7aWYoa3Qpe3ZhciBNdD1mdC5hbmltYXRpb24oe3Bvc2l0aW9uOkF0LGR1cmF0aW9uOnguYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnguYW5pbWF0aW9uRWFzaW5nfSk7Zy5hbmltYXRpb25zLnB1c2goTXQpfWVsc2UgZnQucG9zaXRpb24oQXQpfWlmKHguZml0KXt2YXIgRHQ9RC5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6Ty5ib3VuZGluZ0JveEF0KGF0KSxwYWRkaW5nOngucGFkZGluZ30sZHVyYXRpb246eC5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6eC5hbmltYXRpb25FYXNpbmd9KTtnLmFuaW1hdGlvbnMucHVzaChEdCl9ZWxzZSBpZih4Lnpvb20hPT12b2lkIDAmJngucGFuIT09dm9pZCAwKXt2YXIganQ9RC5hbmltYXRpb24oe3pvb206eC56b29tLHBhbjp4LnBhbixkdXJhdGlvbjp4LmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzp4LmFuaW1hdGlvbkVhc2luZ30pO2cuYW5pbWF0aW9ucy5wdXNoKGp0KX1nLmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnBsYXkoKX0pLGcub25lKCJsYXlvdXRyZWFkeSIseC5yZWFkeSksZy5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Omd9KSxLNS5hbGwoZy5hbmltYXRpb25zLm1hcChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7Zy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pfSl9ZWxzZSBBLnBvc2l0aW9ucyhhdCkseC5maXQmJkQuZml0KHguZWxlcyx4LnBhZGRpbmcpLHguem9vbSE9bnVsbCYmRC56b29tKHguem9vbSkseC5wYW4mJkQucGFuKHgucGFuKSxnLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGcuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpnfSksZy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pO3JldHVybiB0aGlzfSxsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO3JldHVybiB4Lm1ha2VMYXlvdXQobWUoe30sZyx7ZWxlczp0aGlzfSkpfX07bjkuY3JlYXRlTGF5b3V0PW45Lm1ha2VMYXlvdXQ9bjkubGF5b3V0O2Z1bmN0aW9uIGJCKHksZyx4KXt2YXIgVD14Ll9wcml2YXRlLEE9VC5zdHlsZUNhY2hlPVQuc3R5bGVDYWNoZXx8W10sRDtyZXR1cm4oRD1BW3ldKSE9bnVsbHx8KEQ9QVt5XT1nKHgpKSxEfWZ1bmN0aW9uIHI5KHksZyl7cmV0dXJuIHk9dGQoeSksZnVuY3Rpb24oVCl7cmV0dXJuIGJCKHksZyxUKX19ZnVuY3Rpb24gaTkoeSxnKXt5PXRkKHkpO3ZhciB4PWZ1bmN0aW9uKEEpe3JldHVybiBnLmNhbGwoQSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBBPXRoaXNbMF07aWYoQSlyZXR1cm4gYkIoeSx4LEEpfX12YXIgUmY9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD14LnJlbmRlcmVyKCksQT14LnN0eWxlRW5hYmxlZCgpO3JldHVybiBUJiZBJiZULnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGcpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuY3koKSx4PWZ1bmN0aW9uKEQpe3JldHVybiBELl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZy5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBUO1Q9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSxULm1lcmdlKFQuY29ubmVjdGVkRWRnZXMoKSksVC5mb3JFYWNoKHgpfWVsc2UgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3goQSksQS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goeCl9KTtyZXR1cm4gdGhpc30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZigheC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztpZih4LmJhdGNoaW5nKCkpe3ZhciBUPXguX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7cmV0dXJuIFQubWVyZ2UodGhpcyksdGhpc312YXIgQT14Lmhhc0NvbXBvdW5kTm9kZXMoKSxEPXRoaXM7Zz0hIShnfHxnPT09dm9pZCAwKSxBJiYoRD10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpKTt2YXIgTz1EO3JldHVybiBnP08uZW1pdEFuZE5vdGlmeSgic3R5bGUiKTpPLmVtaXQoInN0eWxlIiksRC5mb3JFYWNoKGZ1bmN0aW9uKCQpe3JldHVybiAkLl9wcml2YXRlLnN0eWxlRGlydHk9ITB9KSx0aGlzfSxjbGVhblN0eWxlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKGcuc3R5bGVFbmFibGVkKCkpZm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBUPXRoaXNbeF07VC5fcHJpdmF0ZS5zdHlsZURpcnR5JiYoVC5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGcuc3R5bGUoKS5hcHBseShUKSl9fSxwYXJzZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVD10aGlzWzBdLEE9VC5jeSgpO2lmKEEuc3R5bGVFbmFibGVkKCkmJlQpe3RoaXMuY2xlYW5TdHlsZSgpO3ZhciBEPVQuX3ByaXZhdGUuc3R5bGVbZ107cmV0dXJuIEQ/Pyh4P0Euc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZyk6bnVsbCl9fSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXTtpZih4LmN5KCkuc3R5bGVFbmFibGVkKCkmJngpe3ZhciBUPXgucHN0eWxlKGcpO3JldHVybiBULnBmVmFsdWUhPT12b2lkIDA/VC5wZlZhbHVlOlQudmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO2lmKHguY3koKS5zdHlsZUVuYWJsZWQoKSYmeClyZXR1cm4geC5wc3R5bGUoZykudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPXRoaXNbMF07aWYoVClyZXR1cm4geC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUoVCxnKX0sc3R5bGU6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmN5KCk7aWYoIVQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEE9ITEsRD1ULnN0eWxlKCk7aWYoaHQoZykpe3ZhciBPPWc7RC5hcHBseUJ5cGFzcyh0aGlzLE8sQSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYobXQoZykpaWYoeD09PXZvaWQgMCl7dmFyICQ9dGhpc1swXTtyZXR1cm4gJD9ELmdldFN0eWxlUHJvcGVydHlWYWx1ZSgkLGcpOnZvaWQgMH1lbHNlIEQuYXBwbHlCeXBhc3ModGhpcyxnLHgsQSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZz09PXZvaWQgMCl7dmFyIHE9dGhpc1swXTtyZXR1cm4gcT9ELmdldFJhd1N0eWxlKHEpOnZvaWQgMH1yZXR1cm4gdGhpc30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPSExLEE9eC5zdHlsZSgpLEQ9dGhpcztpZihnPT09dm9pZCAwKWZvcih2YXIgTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dO0EucmVtb3ZlQWxsQnlwYXNzZXMoJCxUKX1lbHNle2c9Zy5zcGxpdCgvXHMrLyk7Zm9yKHZhciBxPTA7cTxELmxlbmd0aDtxKyspe3ZhciBTPURbcV07QS5yZW1vdmVCeXBhc3NlcyhTLGcsVCl9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsImVsZW1lbnQiKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LGVmZmVjdGl2ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7aWYoIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHg9Zy5oYXNDb21wb3VuZE5vZGVzKCksVD10aGlzWzBdO2lmKFQpe3ZhciBBPVQuX3ByaXZhdGUsRD1ULnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCF4KXJldHVybiBEO3ZhciBPPUEuZGF0YS5wYXJlbnQ/VC5wYXJlbnRzKCk6bnVsbDtpZihPKWZvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLFM9cS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtEPVMqRH1yZXR1cm4gRH19LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF0sVD14LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2lmKHgpcmV0dXJuIFQ/eC5lZmZlY3RpdmVPcGFjaXR5KCk9PT0wOngucHN0eWxlKCJvcGFjaXR5IikudmFsdWU9PT0wfSxiYWNrZ3JvdW5kaW5nOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF07cmV0dXJuISF4Ll9wcml2YXRlLmJhY2tncm91bmRpbmd9fTtmdW5jdGlvbiBqTCh5LGcpe3ZhciB4PXkuX3ByaXZhdGUsVD14LmRhdGEucGFyZW50P3kucGFyZW50cygpOm51bGw7aWYoVClmb3IodmFyIEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIEQ9VFtBXTtpZighZyhEKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiAkTCh5KXt2YXIgZz15Lm9rLHg9eS5lZGdlT2tWaWFOb2RlfHx5Lm9rLFQ9eS5wYXJlbnRPa3x8eS5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQT10aGlzLmN5KCk7aWYoIUEuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIEQ9dGhpc1swXSxPPUEuaGFzQ29tcG91bmROb2RlcygpO2lmKEQpe3ZhciAkPUQuX3ByaXZhdGU7aWYoIWcoRCkpcmV0dXJuITE7aWYoRC5pc05vZGUoKSlyZXR1cm4hT3x8akwoRCxUKTt2YXIgcT0kLnNvdXJjZSxTPSQudGFyZ2V0O3JldHVybiB4KHEpJiYoIU98fGpMKHEseCkpJiYocT09PVN8fHgoUykmJighT3x8akwoUyx4KSkpfX19dmFyIHJ4PXI5KCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ5LndpZHRoKCkhPT0wJiYoeS5pc05vZGUoKT95LmhlaWdodCgpIT09MDohMCl9KTtSZi50YWtlc1VwU3BhY2U9aTkoInRha2VzVXBTcGFjZSIsJEwoe29rOnJ4fSkpO3ZhciBkSj1yOSgiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmeS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmcngoeSl9KSxnSj1yOSgicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZyeCh5KX0pO1JmLmludGVyYWN0aXZlPWk5KCJpbnRlcmFjdGl2ZSIsJEwoe29rOmRKLHBhcmVudE9rOmdKLGVkZ2VPa1ZpYU5vZGU6cnh9KSksUmYubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuaW50ZXJhY3RpdmUoKX07dmFyIHBKPXI5KCJlbGVWaXNpYmxlIixmdW5jdGlvbih5KXtyZXR1cm4geS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeS5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmcngoeSl9KSxiSj1yeDtSZi52aXNpYmxlPWk5KCJ2aXNpYmxlIiwkTCh7b2s6cEosZWRnZU9rVmlhTm9kZTpiSn0pKSxSZi5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkudmlzaWJsZSgpfSxSZi5pc0J1bmRsZWRCZXppZXI9aTkoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLFJmLmJ5cGFzcz1SZi5jc3M9UmYuc3R5bGUsUmYucmVuZGVyZWRDc3M9UmYucmVuZGVyZWRTdHlsZSxSZi5yZW1vdmVCeXBhc3M9UmYucmVtb3ZlQ3NzPVJmLnJlbW92ZVN0eWxlLFJmLnBzdHlsZT1SZi5wYXJzZWRTdHlsZTt2YXIgRW09e307ZnVuY3Rpb24gdkIoeSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9W107aWYoZy5sZW5ndGg9PT0yKXt2YXIgVD1nWzBdLEE9Z1sxXTt0aGlzLm9uKHkuZXZlbnQsVCxBKX1lbHNlIGlmKGcubGVuZ3RoPT09MSYmeXQoZ1swXSkpe3ZhciBEPWdbMF07dGhpcy5vbih5LmV2ZW50LEQpfWVsc2UgaWYoZy5sZW5ndGg9PT0wfHxnLmxlbmd0aD09PTEmJmR0KGdbMF0pKXtmb3IodmFyIE89Zy5sZW5ndGg9PT0xP2dbMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBxPXRoaXNbJF0sUz0heS5hYmxlRmllbGR8fHEuX3ByaXZhdGVbeS5hYmxlRmllbGRdLEc9cS5fcHJpdmF0ZVt5LmZpZWxkXSE9eS52YWx1ZTtpZih5Lm92ZXJyaWRlQWJsZSl7dmFyIFc9eS5vdmVycmlkZUFibGUocSk7aWYoVyE9PXZvaWQgMCYmKFM9VywhVykpcmV0dXJuIHRoaXN9UyYmKHEuX3ByaXZhdGVbeS5maWVsZF09eS52YWx1ZSxHJiZ4LnB1c2gocSkpfXZhciBldD10aGlzLnNwYXduKHgpO2V0LnVwZGF0ZVN0eWxlKCksZXQuZW1pdCh5LmV2ZW50KSxPJiZldC5lbWl0KE8pfXJldHVybiB0aGlzfX1mdW5jdGlvbiBpeCh5KXtFbVt5LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7aWYoeS5vdmVycmlkZUZpZWxkKXt2YXIgeD15Lm92ZXJyaWRlRmllbGQoZyk7aWYoeCE9PXZvaWQgMClyZXR1cm4geH1yZXR1cm4gZy5fcHJpdmF0ZVt5LmZpZWxkXX19LEVtW3kub25dPXZCKHtldmVudDp5Lm9uLGZpZWxkOnkuZmllbGQsYWJsZUZpZWxkOnkuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp5Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLEVtW3kub2ZmXT12Qih7ZXZlbnQ6eS5vZmYsZmllbGQ6eS5maWVsZCxhYmxlRmllbGQ6eS5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnkub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9aXgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGl4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxnLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksaXgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksaXgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLEVtLmRlc2VsZWN0PUVtLnVuc2VsZWN0LEVtLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIHkuX3ByaXZhdGUuZ3JhYmJlZH0saXgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGl4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksRW0uaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuX3ByaXZhdGUuYWN0aXZlfTt2YXIgaDE9e30sd0I9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgQT10aGlzLEQ9W10sTz0wO088QS5sZW5ndGg7TysrKXt2YXIgJD1BW09dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgcT0hMSxTPSQuY29ubmVjdGVkRWRnZXMoKSxHPTA7RzxTLmxlbmd0aDtHKyspe3ZhciBXPVNbR10sZXQ9Vy5zb3VyY2UoKSxhdD1XLnRhcmdldCgpO2lmKGcubm9JbmNvbWluZ0VkZ2VzJiZhdD09PSQmJmV0IT09JHx8Zy5ub091dGdvaW5nRWRnZXMmJmV0PT09JCYmYXQhPT0kKXtxPSEwO2JyZWFrfX1xfHxELnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKEQsITApLmZpbHRlcihUKX19LG1CPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxBPVtdLEQ9MDtEPFQubGVuZ3RoO0QrKyl7dmFyIE89VFtEXTtpZihPLmlzTm9kZSgpKWZvcih2YXIgJD1PLmNvbm5lY3RlZEVkZ2VzKCkscT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgUz0kW3FdLEc9Uy5zb3VyY2UoKSxXPVMudGFyZ2V0KCk7Zy5vdXRnb2luZyYmRz09PU8/KEEucHVzaChTKSxBLnB1c2goVykpOmcuaW5jb21pbmcmJlc9PT1PJiYoQS5wdXNoKFMpLEEucHVzaChHKSl9fXJldHVybiB0aGlzLnNwYXduKEEsITApLmZpbHRlcih4KX19LHlCPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxBPVtdLEQ9e307Oyl7dmFyIE89Zy5vdXRnb2luZz9ULm91dGdvZXJzKCk6VC5pbmNvbWVycygpO2lmKE8ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEscT0wO3E8Ty5sZW5ndGg7cSsrKXt2YXIgUz1PW3FdLEc9Uy5pZCgpO0RbR118fChEW0ddPSEwLEEucHVzaChTKSwkPSEwKX1pZighJClicmVhaztUPU99cmV0dXJuIHRoaXMuc3Bhd24oQSwhMCkuZmlsdGVyKHgpfX07aDEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXNbeV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sbWUoaDEse3Jvb3RzOndCKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6d0Ioe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOnJkKG1CKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6eUIoe291dGdvaW5nOiEwfSksaW5jb21lcnM6cmQobUIoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOnlCKHtpbmNvbWluZzohMH0pfSksbWUoaDEse25laWdoYm9yaG9vZDpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLm5vZGVzKCksVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgQT14W1RdLEQ9QS5jb25uZWN0ZWRFZGdlcygpLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXSxxPSQuc291cmNlKCksUz0kLnRhcmdldCgpLEc9QT09PXE/UzpxO0cubGVuZ3RoPjAmJmcucHVzaChHWzBdKSxnLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZyl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGcpfX0pLGgxLm5laWdoYm91cmhvb2Q9aDEubmVpZ2hib3Job29kLGgxLmNsb3NlZE5laWdoYm91cmhvb2Q9aDEuY2xvc2VkTmVpZ2hib3Job29kLGgxLm9wZW5OZWlnaGJvdXJob29kPWgxLm9wZW5OZWlnaGJvcmhvb2QsbWUoaDEse3NvdXJjZTpyZChmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdLFQ7cmV0dXJuIHgmJihUPXguX3ByaXZhdGUuc291cmNlfHx4LmN5KCkuY29sbGVjdGlvbigpKSxUJiZnP1QuZmlsdGVyKGcpOlR9LCJzb3VyY2UiKSx0YXJnZXQ6cmQoZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXSxUO3JldHVybiB4JiYoVD14Ll9wcml2YXRlLnRhcmdldHx8eC5jeSgpLmNvbGxlY3Rpb24oKSksVCYmZz9ULmZpbHRlcihnKTpUfSwidGFyZ2V0Iiksc291cmNlczp4Qih7YXR0cjoic291cmNlIn0pLHRhcmdldHM6eEIoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIHhCKHkpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9W10sQT0wO0E8dGhpcy5sZW5ndGg7QSsrKXt2YXIgRD10aGlzW0FdLE89RC5fcHJpdmF0ZVt5LmF0dHJdO08mJlQucHVzaChPKX1yZXR1cm4gdGhpcy5zcGF3bihULCEwKS5maWx0ZXIoeCl9fW1lKGgxLHtlZGdlc1dpdGg6cmQoa0IoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzpyZChrQih7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIGtCKHkpe3JldHVybiBmdW5jdGlvbih4KXt2YXIgVD1bXSxBPXRoaXMuX3ByaXZhdGUuY3ksRD15fHx7fTttdCh4KSYmKHg9QS4kKHgpKTtmb3IodmFyIE89MDtPPHgubGVuZ3RoO08rKylmb3IodmFyICQ9eFtPXS5fcHJpdmF0ZS5lZGdlcyxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV0sRz1TLl9wcml2YXRlLmRhdGEsVz10aGlzLmhhc0VsZW1lbnRXaXRoSWQoRy5zb3VyY2UpJiZ4Lmhhc0VsZW1lbnRXaXRoSWQoRy50YXJnZXQpLGV0PXguaGFzRWxlbWVudFdpdGhJZChHLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChHLnRhcmdldCksYXQ9V3x8ZXQ7YXQmJigoRC50aGlzSXNTcmN8fEQudGhpc0lzVGd0KSYmKEQudGhpc0lzU3JjJiYhV3x8RC50aGlzSXNUZ3QmJiFldCl8fFQucHVzaChTKSl9cmV0dXJuIHRoaXMuc3Bhd24oVCwhMCl9fW1lKGgxLHtjb25uZWN0ZWRFZGdlczpyZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEE9eFtUXTtpZihBLmlzTm9kZSgpKWZvcih2YXIgRD1BLl9wcml2YXRlLmVkZ2VzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTtnLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6cmQoZnVuY3Rpb24oeSl7Zm9yKHZhciBnPVtdLHg9dGhpcyxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBBPXhbVF07QS5pc0VkZ2UoKSYmKGcucHVzaChBLnNvdXJjZSgpWzBdKSxnLnB1c2goQS50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczpyZChFQigpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOnJkKEVCKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gRUIoeSl7dmFyIGc9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB5PW1lKHt9LGcseSksZnVuY3Rpb24oVCl7Zm9yKHZhciBBPVtdLEQ9dGhpcy5lZGdlcygpLE89eSwkPTA7JDxELmxlbmd0aDskKyspZm9yKHZhciBxPURbJF0sUz1xLl9wcml2YXRlLEc9Uy5zb3VyY2UsVz1HLl9wcml2YXRlLmRhdGEuaWQsZXQ9Uy5kYXRhLnRhcmdldCxhdD1HLl9wcml2YXRlLmVkZ2VzLGx0PTA7bHQ8YXQubGVuZ3RoO2x0Kyspe3ZhciBmdD1hdFtsdF0sQXQ9ZnQuX3ByaXZhdGUuZGF0YSxrdD1BdC50YXJnZXQsTXQ9QXQuc291cmNlLER0PWt0PT09ZXQmJk10PT09VyxqdD1XPT09a3QmJmV0PT09TXQ7KE8uY29kaXJlY3RlZCYmRHR8fCFPLmNvZGlyZWN0ZWQmJihEdHx8anQpKSYmQS5wdXNoKGZ0KX1yZXR1cm4gdGhpcy5zcGF3bihBLCEwKS5maWx0ZXIoVCl9fW1lKGgxLHtjb21wb25lbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmN5KCksQT1ULmNvbGxlY3Rpb24oKSxEPWc9PW51bGw/eC5ub2RlcygpOmcubm9kZXMoKSxPPVtdO2chPW51bGwmJkQuZW1wdHkoKSYmKEQ9Zy5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKEcsVyl7QS5tZXJnZShHKSxELnVubWVyZ2UoRyksVy5tZXJnZShHKX07aWYoRC5lbXB0eSgpKXJldHVybiB4LnNwYXduKCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgRz1ULmNvbGxlY3Rpb24oKTtPLnB1c2goRyk7dmFyIFc9RFswXTskKFcsRykseC5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlcsdmlzaXQ6ZnVuY3Rpb24oYXQpe3JldHVybiAkKGF0LEcpfX0pLEcuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXt4LmhhcyhhdCkmJkcuaGFzKGF0LnNvdXJjZSgpKSYmRy5oYXMoYXQudGFyZ2V0KCkpJiZHLm1lcmdlKGF0KX0pfSl9O2RvIHEoKTt3aGlsZShELmxlbmd0aD4wKTtyZXR1cm4gT30sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtyZXR1cm4gZy5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZylbMF19fSksaDEuY29tcG9uZW50c09mPWgxLmNvbXBvbmVudHM7dmFyIGpmPWZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLEE9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKGc9PT12b2lkIDApe2JsKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBEPW5ldyB6YixPPSExO2lmKCF4KXg9W107ZWxzZSBpZih4Lmxlbmd0aD4wJiZodCh4WzBdKSYmIW50KHhbMF0pKXtPPSEwO2Zvcih2YXIgJD1bXSxxPW5ldyB6NSxTPTAsRz14Lmxlbmd0aDtTPEc7UysrKXt2YXIgVz14W1NdO1cuZGF0YT09bnVsbCYmKFcuZGF0YT17fSk7dmFyIGV0PVcuZGF0YTtpZihldC5pZD09bnVsbClldC5pZD1JVCgpO2Vsc2UgaWYoZy5oYXNFbGVtZW50V2l0aElkKGV0LmlkKXx8cS5oYXMoZXQuaWQpKWNvbnRpbnVlO3ZhciBhdD1uZXcgRFQoZyxXLCExKTskLnB1c2goYXQpLHEuYWRkKGV0LmlkKX14PSR9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGx0PTAsZnQ9eC5sZW5ndGg7bHQ8ZnQ7bHQrKyl7dmFyIEF0PXhbbHRdWzBdO2lmKEF0IT1udWxsKXt2YXIga3Q9QXQuX3ByaXZhdGUuZGF0YS5pZDsoIVR8fCFELmhhcyhrdCkpJiYoVCYmRC5zZXQoa3Qse2luZGV4OnRoaXMubGVuZ3RoLGVsZTpBdH0pLHRoaXNbdGhpcy5sZW5ndGhdPUF0LHRoaXMubGVuZ3RoKyspfX10aGlzLl9wcml2YXRlPXtlbGVzOnRoaXMsY3k6ZyxnZXQgbWFwKCl7cmV0dXJuIHRoaXMubGF6eU1hcD09bnVsbCYmdGhpcy5yZWJ1aWxkTWFwKCksdGhpcy5sYXp5TWFwfSxzZXQgbWFwKE10KXt0aGlzLmxhenlNYXA9TXR9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIER0PXRoaXMubGF6eU1hcD1uZXcgemIsanQ9dGhpcy5lbGVzLFp0PTA7WnQ8anQubGVuZ3RoO1p0Kyspe3ZhciBLdD1qdFtadF07RHQuc2V0KEt0LmlkKCkse2luZGV4Olp0LGVsZTpLdH0pfX19LFQmJih0aGlzLl9wcml2YXRlLm1hcD1EKSxPJiYhQSYmdGhpcy5yZXN0b3JlKCl9LGh1PURULnByb3RvdHlwZT1qZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO2h1Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImNvbGxlY3Rpb24ifSxodS5zcGF3bj1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgamYodGhpcy5jeSgpLHksZyl9LGh1LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSxodS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSxodS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LGh1LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0saHUuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBPdCh0aGlzKT90aGlzOm5ldyBqZih0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LGh1LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgamYodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0saHUuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih5KXtyZXR1cm4geT0iIit5LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh5KX0saHUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oeSl7eT0iIit5O3ZhciBnPXRoaXMuX3ByaXZhdGUuY3kseD10aGlzLl9wcml2YXRlLm1hcC5nZXQoeSk7cmV0dXJuIHg/eC5lbGU6bmV3IGpmKGcpfSxodS4kaWQ9aHUuZ2V0RWxlbWVudEJ5SWQsaHUucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZS5jeSxnPXkuX3ByaXZhdGUuZWxlbWVudHMseD10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGcuX3ByaXZhdGUubWFwLmdldCh4KS5pbmRleH0saHUuaW5kZXhPZj1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChnKS5pbmRleH0saHUuaW5kZXhPZklkPWZ1bmN0aW9uKHkpe3JldHVybiB5PSIiK3ksdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHkpLmluZGV4fSxodS5qc29uPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuZWxlbWVudCgpLHg9dGhpcy5jeSgpO2lmKGc9PW51bGwmJnkpcmV0dXJuIHRoaXM7aWYoZyE9bnVsbCl7dmFyIFQ9Zy5fcHJpdmF0ZTtpZihodCh5KSl7aWYoeC5zdGFydEJhdGNoKCkseS5kYXRhKXtnLmRhdGEoeS5kYXRhKTt2YXIgQT1ULmRhdGE7aWYoZy5pc0VkZ2UoKSl7dmFyIEQ9ITEsTz17fSwkPXkuZGF0YS5zb3VyY2UscT15LmRhdGEudGFyZ2V0OyQhPW51bGwmJiQhPUEuc291cmNlJiYoTy5zb3VyY2U9IiIrJCxEPSEwKSxxIT1udWxsJiZxIT1BLnRhcmdldCYmKE8udGFyZ2V0PSIiK3EsRD0hMCksRCYmKGc9Zy5tb3ZlKE8pKX1lbHNle3ZhciBTPSJwYXJlbnQiaW4geS5kYXRhLEc9eS5kYXRhLnBhcmVudDtTJiYoRyE9bnVsbHx8QS5wYXJlbnQhPW51bGwpJiZHIT1BLnBhcmVudCYmKEc9PT12b2lkIDAmJihHPW51bGwpLEchPW51bGwmJihHPSIiK0cpLGc9Zy5tb3ZlKHtwYXJlbnQ6R30pKX19eS5wb3NpdGlvbiYmZy5wb3NpdGlvbih5LnBvc2l0aW9uKTt2YXIgVz1mdW5jdGlvbihmdCxBdCxrdCl7dmFyIE10PXlbZnRdO010IT1udWxsJiZNdCE9PVRbZnRdJiYoTXQ/Z1tBdF0oKTpnW2t0XSgpKX07cmV0dXJuIFcoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksVygic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLFcoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLFcoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxXKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksVygicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHkuY2xhc3NlcyE9bnVsbCYmZy5jbGFzc2VzKHkuY2xhc3NlcykseC5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih5PT09dm9pZCAwKXt2YXIgZXQ9e2RhdGE6JGIoVC5kYXRhKSxwb3NpdGlvbjokYihULnBvc2l0aW9uKSxncm91cDpULmdyb3VwLHJlbW92ZWQ6VC5yZW1vdmVkLHNlbGVjdGVkOlQuc2VsZWN0ZWQsc2VsZWN0YWJsZTpULnNlbGVjdGFibGUsbG9ja2VkOlQubG9ja2VkLGdyYWJiYWJsZTpULmdyYWJiYWJsZSxwYW5uYWJsZTpULnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07ZXQuY2xhc3Nlcz0iIjt2YXIgYXQ9MDtyZXR1cm4gVC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obHQpe3JldHVybiBldC5jbGFzc2VzKz1hdCsrPT09MD9sdDoiICIrbHR9KSxldH19fSxodS5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXNbZ10sVD14Lmpzb24oKTt5LnB1c2goVCl9cmV0dXJuIHl9LGh1LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuY3koKSxnPVtdLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIFQ9dGhpc1t4XSxBPVQuanNvbigpLEQ9bmV3IERUKHksQSwhMSk7Zy5wdXNoKEQpfXJldHVybiBuZXcgamYoeSxnKX0saHUuY29weT1odS5jbG9uZSxodS5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD14LmN5KCksQT1ULl9wcml2YXRlLEQ9W10sTz1bXSwkLHE9MCxTPXgubGVuZ3RoO3E8UztxKyspe3ZhciBHPXhbcV07ZyYmIUcucmVtb3ZlZCgpfHwoRy5pc05vZGUoKT9ELnB1c2goRyk6Ty5wdXNoKEcpKX0kPUQuY29uY2F0KE8pO3ZhciBXLGV0PWZ1bmN0aW9uKCl7JC5zcGxpY2UoVywxKSxXLS19O2ZvcihXPTA7VzwkLmxlbmd0aDtXKyspe3ZhciBhdD0kW1ddLGx0PWF0Ll9wcml2YXRlLGZ0PWx0LmRhdGE7aWYoYXQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLCEoIWcmJiFsdC5yZW1vdmVkKSl7aWYoZnQuaWQ9PT12b2lkIDApZnQuaWQ9SVQoKTtlbHNlIGlmKFgoZnQuaWQpKWZ0LmlkPSIiK2Z0LmlkO2Vsc2UgaWYoWihmdC5pZCl8fCFtdChmdC5pZCkpe2JsKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrZnQuaWQrImAiKSxldCgpO2NvbnRpbnVlfWVsc2UgaWYoVC5oYXNFbGVtZW50V2l0aElkKGZ0LmlkKSl7YmwoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrZnQuaWQrImAiKSxldCgpO2NvbnRpbnVlfX12YXIgQXQ9ZnQuaWQ7aWYoYXQuaXNOb2RlKCkpe3ZhciBrdD1sdC5wb3NpdGlvbjtrdC54PT1udWxsJiYoa3QueD0wKSxrdC55PT1udWxsJiYoa3QueT0wKX1pZihhdC5pc0VkZ2UoKSl7Zm9yKHZhciBNdD1hdCxEdD1bInNvdXJjZSIsInRhcmdldCJdLGp0PUR0Lmxlbmd0aCxadD0hMSxLdD0wO0t0PGp0O0t0Kyspe3ZhciB6dD1EdFtLdF0sZWU9ZnRbenRdO1goZWUpJiYoZWU9ZnRbenRdPSIiK2Z0W3p0XSksZWU9PW51bGx8fGVlPT09IiI/KGJsKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK0F0KyJgIHdpdGggdW5zcGVjaWZpZWQgIit6dCksWnQ9ITApOlQuaGFzRWxlbWVudFdpdGhJZChlZSl8fChibCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitBdCsiYCB3aXRoIG5vbmV4aXN0YW50ICIrenQrIiBgIitlZSsiYCIpLFp0PSEwKX1pZihadCl7ZXQoKTtjb250aW51ZX12YXIgVnQ9VC5nZXRFbGVtZW50QnlJZChmdC5zb3VyY2UpLGZlPVQuZ2V0RWxlbWVudEJ5SWQoZnQudGFyZ2V0KTtWdC5zYW1lKGZlKT9WdC5fcHJpdmF0ZS5lZGdlcy5wdXNoKE10KTooVnQuX3ByaXZhdGUuZWRnZXMucHVzaChNdCksZmUuX3ByaXZhdGUuZWRnZXMucHVzaChNdCkpLE10Ll9wcml2YXRlLnNvdXJjZT1WdCxNdC5fcHJpdmF0ZS50YXJnZXQ9ZmV9bHQubWFwPW5ldyB6YixsdC5tYXAuc2V0KEF0LHtlbGU6YXQsaW5kZXg6MH0pLGx0LnJlbW92ZWQ9ITEsZyYmVC5hZGRUb1Bvb2woYXQpfWZvcih2YXIgZ2U9MDtnZTxELmxlbmd0aDtnZSsrKXt2YXIgbmU9RFtnZV0sUGU9bmUuX3ByaXZhdGUuZGF0YTtYKFBlLnBhcmVudCkmJihQZS5wYXJlbnQ9IiIrUGUucGFyZW50KTt2YXIgcGU9UGUucGFyZW50LGJuPXBlIT1udWxsO2lmKGJufHxuZS5fcHJpdmF0ZS5wYXJlbnQpe3ZhciB6ZT1uZS5fcHJpdmF0ZS5wYXJlbnQ/VC5jb2xsZWN0aW9uKCkubWVyZ2UobmUuX3ByaXZhdGUucGFyZW50KTpULmdldEVsZW1lbnRCeUlkKHBlKTtpZih6ZS5lbXB0eSgpKVBlLnBhcmVudD12b2lkIDA7ZWxzZSBpZih6ZVswXS5yZW1vdmVkKCkpU2MoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksUGUucGFyZW50PXZvaWQgMCxuZS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgVmU9ITEsRW49emU7IUVuLmVtcHR5KCk7KXtpZihuZS5zYW1lKEVuKSl7VmU9ITAsUGUucGFyZW50PXZvaWQgMDticmVha31Fbj1Fbi5wYXJlbnQoKX1WZXx8KHplWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2gobmUpLG5lLl9wcml2YXRlLnBhcmVudD16ZVswXSxBLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBEbj0kLmxlbmd0aD09PXgubGVuZ3RoP3g6bmV3IGpmKFQsJCksS249MDtLbjxEbi5sZW5ndGg7S24rKyl7dmFyIFNuPURuW0tuXTtTbi5pc05vZGUoKXx8KFNuLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksU24uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLFNuLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIFduO0EuaGFzQ29tcG91bmROb2Rlcz9Xbj1ULmNvbGxlY3Rpb24oKS5tZXJnZShEbikubWVyZ2UoRG4uY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoRG4ucGFyZW50KCkpOlduPURuLFduLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHkpLHk/RG4uZW1pdEFuZE5vdGlmeSgiYWRkIik6ZyYmRG4uZW1pdCgiYWRkIil9cmV0dXJuIHh9LGh1LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5JiZ5Ll9wcml2YXRlLnJlbW92ZWR9LGh1Lmluc2lkZT1mdW5jdGlvbigpe3ZhciB5PXRoaXNbMF07cmV0dXJuIHkmJiF5Ll9wcml2YXRlLnJlbW92ZWR9LGh1LnJlbW92ZT1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD1bXSxBPXt9LEQ9eC5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBPKHBlKXtmb3IodmFyIGJuPXBlLl9wcml2YXRlLmVkZ2VzLHplPTA7emU8Ym4ubGVuZ3RoO3plKyspcShiblt6ZV0pfWZ1bmN0aW9uICQocGUpe2Zvcih2YXIgYm49cGUuX3ByaXZhdGUuY2hpbGRyZW4semU9MDt6ZTxibi5sZW5ndGg7emUrKylxKGJuW3plXSl9ZnVuY3Rpb24gcShwZSl7dmFyIGJuPUFbcGUuaWQoKV07ZyYmcGUucmVtb3ZlZCgpfHxibnx8KEFbcGUuaWQoKV09ITAscGUuaXNOb2RlKCk/KFQucHVzaChwZSksTyhwZSksJChwZSkpOlQudW5zaGlmdChwZSkpfWZvcih2YXIgUz0wLEc9eC5sZW5ndGg7UzxHO1MrKyl7dmFyIFc9eFtTXTtxKFcpfWZ1bmN0aW9uIGV0KHBlLGJuKXt2YXIgemU9cGUuX3ByaXZhdGUuZWRnZXM7cG0oemUsYm4pLHBlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiBhdChwZSl7cGUuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBsdD1bXTtsdC5pZHM9e307ZnVuY3Rpb24gZnQocGUsYm4pe2JuPWJuWzBdLHBlPXBlWzBdO3ZhciB6ZT1wZS5fcHJpdmF0ZS5jaGlsZHJlbixWZT1wZS5pZCgpO3BtKHplLGJuKSxibi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxsdC5pZHNbVmVdfHwobHQuaWRzW1ZlXT0hMCxsdC5wdXNoKHBlKSl9eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxnJiZELnJlbW92ZUZyb21Qb29sKFQpO2Zvcih2YXIgQXQ9MDtBdDxULmxlbmd0aDtBdCsrKXt2YXIga3Q9VFtBdF07aWYoa3QuaXNFZGdlKCkpe3ZhciBNdD1rdC5zb3VyY2UoKVswXSxEdD1rdC50YXJnZXQoKVswXTtldChNdCxrdCksZXQoRHQsa3QpO2Zvcih2YXIganQ9a3QucGFyYWxsZWxFZGdlcygpLFp0PTA7WnQ8anQubGVuZ3RoO1p0Kyspe3ZhciBLdD1qdFtadF07YXQoS3QpLEt0LmlzQnVuZGxlZEJlemllcigpJiZLdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgenQ9a3QucGFyZW50KCk7enQubGVuZ3RoIT09MCYmZnQoenQsa3QpfWcmJihrdC5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgZWU9RC5fcHJpdmF0ZS5lbGVtZW50cztELl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBWdD0wO1Z0PGVlLmxlbmd0aDtWdCsrKXt2YXIgZmU9ZWVbVnRdO2lmKGZlLmlzUGFyZW50KCkpe0QuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIGdlPW5ldyBqZih0aGlzLmN5KCksVCk7Z2Uuc2l6ZSgpPjAmJih5P2dlLmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOmcmJmdlLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIG5lPTA7bmU8bHQubGVuZ3RoO25lKyspe3ZhciBQZT1sdFtuZV07KCFnfHwhUGUucmVtb3ZlZCgpKSYmUGUudXBkYXRlU3R5bGUoKX1yZXR1cm4gZ2V9LGh1Lm1vdmU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PXRoaXMsVD0hMSxBPSExLEQ9ZnVuY3Rpb24obHQpe3JldHVybiBsdD09bnVsbD9sdDoiIitsdH07aWYoeS5zb3VyY2UhPT12b2lkIDB8fHkudGFyZ2V0IT09dm9pZCAwKXt2YXIgTz1EKHkuc291cmNlKSwkPUQoeS50YXJnZXQpLHE9TyE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKE8pLFM9JCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKCQpOyhxfHxTKSYmKGcuYmF0Y2goZnVuY3Rpb24oKXt4LnJlbW92ZShULEEpLHguZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgYXQ9MDthdDx4Lmxlbmd0aDthdCsrKXt2YXIgbHQ9eFthdF0sZnQ9bHQuX3ByaXZhdGUuZGF0YTtsdC5pc0VkZ2UoKSYmKHEmJihmdC5zb3VyY2U9TyksUyYmKGZ0LnRhcmdldD0kKSl9eC5yZXN0b3JlKFQsQSl9KSx4LmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih5LnBhcmVudCE9PXZvaWQgMCl7dmFyIEc9RCh5LnBhcmVudCksVz1HPT09bnVsbHx8Zy5oYXNFbGVtZW50V2l0aElkKEcpO2lmKFcpe3ZhciBldD1HPT09bnVsbD92b2lkIDA6RztnLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIGF0PXgucmVtb3ZlKFQsQSk7YXQuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbHQ9MDtsdDx4Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9eFtsdF0sQXQ9ZnQuX3ByaXZhdGUuZGF0YTtmdC5pc05vZGUoKSYmKEF0LnBhcmVudD1ldCl9YXQucmVzdG9yZShULEEpfSkseC5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbRUYsTVosS1QsdnAsSjUsVVosWFQsc0osZEIsZ0IsbEosZTksbjksUmYsRW0saDFdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoaHUseSl9KTt2YXIgdko9e2FkZDpmdW5jdGlvbihnKXt2YXIgeCxUPXRoaXM7aWYoeHQoZykpe3ZhciBBPWc7aWYoQS5fcHJpdmF0ZS5jeT09PVQpeD1BLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgRD1bXSxPPTA7TzxBLmxlbmd0aDtPKyspe3ZhciAkPUFbT107RC5wdXNoKCQuanNvbigpKX14PW5ldyBqZihULEQpfX1lbHNlIGlmKGR0KGcpKXt2YXIgcT1nO3g9bmV3IGpmKFQscSl9ZWxzZSBpZihodChnKSYmKGR0KGcubm9kZXMpfHxkdChnLmVkZ2VzKSkpe2Zvcih2YXIgUz1nLEc9W10sVz1bIm5vZGVzIiwiZWRnZXMiXSxldD0wLGF0PVcubGVuZ3RoO2V0PGF0O2V0Kyspe3ZhciBsdD1XW2V0XSxmdD1TW2x0XTtpZihkdChmdCkpZm9yKHZhciBBdD0wLGt0PWZ0Lmxlbmd0aDtBdDxrdDtBdCsrKXt2YXIgTXQ9bWUoe2dyb3VwOmx0fSxmdFtBdF0pO0cucHVzaChNdCl9fXg9bmV3IGpmKFQsRyl9ZWxzZXt2YXIgRHQ9Zzt4PW5ldyBEVChULER0KS5jb2xsZWN0aW9uKCl9cmV0dXJuIHh9LHJlbW92ZTpmdW5jdGlvbihnKXtpZigheHQoZykpe2lmKG10KGcpKXt2YXIgeD1nO2c9dGhpcy4kKHgpfX1yZXR1cm4gZy5yZW1vdmUoKX19Oy8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9mdW5jdGlvbiB3Sih5LGcseCxUKXt2YXIgQT00LEQ9LjAwMSxPPTFlLTcsJD0xMCxxPTExLFM9MS8ocS0xKSxHPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgVz0wO1c8NDsrK1cpaWYodHlwZW9mIGFyZ3VtZW50c1tXXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tXXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbV10pKXJldHVybiExO3k9TWF0aC5taW4oeSwxKSx4PU1hdGgubWluKHgsMSkseT1NYXRoLm1heCh5LDApLHg9TWF0aC5tYXgoeCwwKTt2YXIgZXQ9Rz9uZXcgRmxvYXQzMkFycmF5KHEpOm5ldyBBcnJheShxKTtmdW5jdGlvbiBhdChmZSxnZSl7cmV0dXJuIDEtMypnZSszKmZlfWZ1bmN0aW9uIGx0KGZlLGdlKXtyZXR1cm4gMypnZS02KmZlfWZ1bmN0aW9uIGZ0KGZlKXtyZXR1cm4gMypmZX1mdW5jdGlvbiBBdChmZSxnZSxuZSl7cmV0dXJuKChhdChnZSxuZSkqZmUrbHQoZ2UsbmUpKSpmZStmdChnZSkpKmZlfWZ1bmN0aW9uIGt0KGZlLGdlLG5lKXtyZXR1cm4gMyphdChnZSxuZSkqZmUqZmUrMipsdChnZSxuZSkqZmUrZnQoZ2UpfWZ1bmN0aW9uIE10KGZlLGdlKXtmb3IodmFyIG5lPTA7bmU8QTsrK25lKXt2YXIgUGU9a3QoZ2UseSx4KTtpZihQZT09PTApcmV0dXJuIGdlO3ZhciBwZT1BdChnZSx5LHgpLWZlO2dlLT1wZS9QZX1yZXR1cm4gZ2V9ZnVuY3Rpb24gRHQoKXtmb3IodmFyIGZlPTA7ZmU8cTsrK2ZlKWV0W2ZlXT1BdChmZSpTLHkseCl9ZnVuY3Rpb24ganQoZmUsZ2UsbmUpe3ZhciBQZSxwZSxibj0wO2RvIHBlPWdlKyhuZS1nZSkvMixQZT1BdChwZSx5LHgpLWZlLFBlPjA/bmU9cGU6Z2U9cGU7d2hpbGUoTWF0aC5hYnMoUGUpPk8mJisrYm48JCk7cmV0dXJuIHBlfWZ1bmN0aW9uIFp0KGZlKXtmb3IodmFyIGdlPTAsbmU9MSxQZT1xLTE7bmUhPT1QZSYmZXRbbmVdPD1mZTsrK25lKWdlKz1TOy0tbmU7dmFyIHBlPShmZS1ldFtuZV0pLyhldFtuZSsxXS1ldFtuZV0pLGJuPWdlK3BlKlMsemU9a3QoYm4seSx4KTtyZXR1cm4gemU+PUQ/TXQoZmUsYm4pOnplPT09MD9ibjpqdChmZSxnZSxnZStTKX12YXIgS3Q9ITE7ZnVuY3Rpb24genQoKXtLdD0hMCwoeSE9PWd8fHghPT1UKSYmRHQoKX12YXIgZWU9ZnVuY3Rpb24oZ2Upe3JldHVybiBLdHx8enQoKSx5PT09ZyYmeD09PVQ/Z2U6Z2U9PT0wPzA6Z2U9PT0xPzE6QXQoWnQoZ2UpLGcsVCl9O2VlLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6eSx5Omd9LHt4LHk6VH1dfTt2YXIgVnQ9ImdlbmVyYXRlQmV6aWVyKCIrW3ksZyx4LFRdKyIpIjtyZXR1cm4gZWUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVnR9LGVlfS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgbUo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFQpe3JldHVybi1ULnRlbnNpb24qVC54LVQuZnJpY3Rpb24qVC52fWZ1bmN0aW9uIGcoVCxBLEQpe3ZhciBPPXt4OlQueCtELmR4KkEsdjpULnYrRC5kdipBLHRlbnNpb246VC50ZW5zaW9uLGZyaWN0aW9uOlQuZnJpY3Rpb259O3JldHVybntkeDpPLnYsZHY6eShPKX19ZnVuY3Rpb24geChULEEpe3ZhciBEPXtkeDpULnYsZHY6eShUKX0sTz1nKFQsQSouNSxEKSwkPWcoVCxBKi41LE8pLHE9ZyhULEEsJCksUz0xLzYqKEQuZHgrMiooTy5keCskLmR4KStxLmR4KSxHPTEvNiooRC5kdisyKihPLmR2KyQuZHYpK3EuZHYpO3JldHVybiBULng9VC54K1MqQSxULnY9VC52K0cqQSxUfXJldHVybiBmdW5jdGlvbiBUKEEsRCxPKXt2YXIgJD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHE9WzBdLFM9MCxHPTEvMWU0LFc9MTYvMWUzLGV0LGF0LGx0O2ZvcihBPXBhcnNlRmxvYXQoQSl8fDUwMCxEPXBhcnNlRmxvYXQoRCl8fDIwLE89T3x8bnVsbCwkLnRlbnNpb249QSwkLmZyaWN0aW9uPUQsZXQ9TyE9PW51bGwsZXQ/KFM9VChBLEQpLGF0PVMvTypXKTphdD1XO2x0PXgobHR8fCQsYXQpLHEucHVzaCgxK2x0LngpLFMrPTE2LE1hdGguYWJzKGx0LngpPkcmJk1hdGguYWJzKGx0LnYpPkc7KTtyZXR1cm4gZXQ/ZnVuY3Rpb24oZnQpe3JldHVybiBxW2Z0KihxLmxlbmd0aC0xKXwwXX06U319KCksZnU9ZnVuY3Rpb24oZyx4LFQsQSl7dmFyIEQ9d0ooZyx4LFQsQSk7cmV0dXJuIGZ1bmN0aW9uKE8sJCxxKXtyZXR1cm4gTysoJC1PKSpEKHEpfX0sczk9e2xpbmVhcjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcrKHgtZykqVH0sZWFzZTpmdSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpmdSguNDIsMCwxLDEpLCJlYXNlLW91dCI6ZnUoMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOmZ1KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjpmdSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjpmdSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjpmdSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjpmdSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6ZnUoLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6ZnUoLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6ZnUoLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6ZnUoLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOmZ1KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0IjpmdSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0IjpmdSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0IjpmdSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50IjpmdSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50IjpmdSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50IjpmdSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6ZnUoLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjpmdSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOmZ1KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOmZ1KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOmZ1KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOmZ1KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZyx4LFQpe2lmKFQ9PT0wKXJldHVybiBzOS5saW5lYXI7dmFyIEE9bUooZyx4LFQpO3JldHVybiBmdW5jdGlvbihELE8sJCl7cmV0dXJuIEQrKE8tRCkqQSgkKX19LCJjdWJpYy1iZXppZXIiOmZ1fTtmdW5jdGlvbiBUQih5LGcseCxULEEpe2lmKFQ9PT0xfHxnPT09eClyZXR1cm4geDt2YXIgRD1BKGcseCxUKTtyZXR1cm4geT09bnVsbHx8KCh5LnJvdW5kVmFsdWV8fHkuY29sb3IpJiYoRD1NYXRoLnJvdW5kKEQpKSx5Lm1pbiE9PXZvaWQgMCYmKEQ9TWF0aC5tYXgoRCx5Lm1pbikpLHkubWF4IT09dm9pZCAwJiYoRD1NYXRoLm1pbihELHkubWF4KSkpLER9ZnVuY3Rpb24gQ0IoeSxnKXtyZXR1cm4geS5wZlZhbHVlIT1udWxsfHx5LnZhbHVlIT1udWxsP3kucGZWYWx1ZSE9bnVsbCYmKGc9PW51bGx8fGcudHlwZS51bml0cyE9PSIlIik/eS5wZlZhbHVlOnkudmFsdWU6eX1mdW5jdGlvbiBzeCh5LGcseCxULEEpe3ZhciBEPUEhPW51bGw/QS50eXBlOm51bGw7eDwwP3g9MDp4PjEmJih4PTEpO3ZhciBPPUNCKHksQSksJD1DQihnLEEpO2lmKFgoTykmJlgoJCkpcmV0dXJuIFRCKEQsTywkLHgsVCk7aWYoZHQoTykmJmR0KCQpKXtmb3IodmFyIHE9W10sUz0wO1M8JC5sZW5ndGg7UysrKXt2YXIgRz1PW1NdLFc9JFtTXTtpZihHIT1udWxsJiZXIT1udWxsKXt2YXIgZXQ9VEIoRCxHLFcseCxUKTtxLnB1c2goZXQpfWVsc2UgcS5wdXNoKFcpfXJldHVybiBxfX1mdW5jdGlvbiB5Sih5LGcseCxUKXt2YXIgQT0hVCxEPXkuX3ByaXZhdGUsTz1nLl9wcml2YXRlLCQ9Ty5lYXNpbmcscT1PLnN0YXJ0VGltZSxTPVQ/eTp5LmN5KCksRz1TLnN0eWxlKCk7aWYoIU8uZWFzaW5nSW1wbClpZigkPT1udWxsKU8uZWFzaW5nSW1wbD1zOS5saW5lYXI7ZWxzZXt2YXIgVztpZihtdCgkKSl7dmFyIGV0PUcucGFyc2UoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwkKTtXPWV0LnZhbHVlfWVsc2UgVz0kO3ZhciBhdCxsdDttdChXKT8oYXQ9VyxsdD1bXSk6KGF0PVdbMV0sbHQ9Vy5zbGljZSgyKS5tYXAoZnVuY3Rpb24oRG4pe3JldHVybitEbn0pKSxsdC5sZW5ndGg+MD8oYXQ9PT0ic3ByaW5nIiYmbHQucHVzaChPLmR1cmF0aW9uKSxPLmVhc2luZ0ltcGw9czlbYXRdLmFwcGx5KG51bGwsbHQpKTpPLmVhc2luZ0ltcGw9czlbYXRdfXZhciBmdD1PLmVhc2luZ0ltcGwsQXQ7aWYoTy5kdXJhdGlvbj09PTA/QXQ9MTpBdD0oeC1xKS9PLmR1cmF0aW9uLE8uYXBwbHlpbmcmJihBdD1PLnByb2dyZXNzKSxBdDwwP0F0PTA6QXQ+MSYmKEF0PTEpLE8uZGVsYXk9PW51bGwpe3ZhciBrdD1PLnN0YXJ0UG9zaXRpb24sTXQ9Ty5wb3NpdGlvbjtpZihNdCYmQSYmIXkubG9ja2VkKCkpe3ZhciBEdD17fTtEayhrdC54LE10LngpJiYoRHQueD1zeChrdC54LE10LngsQXQsZnQpKSxEayhrdC55LE10LnkpJiYoRHQueT1zeChrdC55LE10LnksQXQsZnQpKSx5LnBvc2l0aW9uKER0KX12YXIganQ9Ty5zdGFydFBhbixadD1PLnBhbixLdD1ELnBhbix6dD1adCE9bnVsbCYmVDt6dCYmKERrKGp0LngsWnQueCkmJihLdC54PXN4KGp0LngsWnQueCxBdCxmdCkpLERrKGp0LnksWnQueSkmJihLdC55PXN4KGp0LnksWnQueSxBdCxmdCkpLHkuZW1pdCgicGFuIikpO3ZhciBlZT1PLnN0YXJ0Wm9vbSxWdD1PLnpvb20sZmU9VnQhPW51bGwmJlQ7ZmUmJihEayhlZSxWdCkmJihELnpvb209d2soRC5taW5ab29tLHN4KGVlLFZ0LEF0LGZ0KSxELm1heFpvb20pKSx5LmVtaXQoInpvb20iKSksKHp0fHxmZSkmJnkuZW1pdCgidmlld3BvcnQiKTt2YXIgZ2U9Ty5zdHlsZTtpZihnZSYmZ2UubGVuZ3RoPjAmJkEpe2Zvcih2YXIgbmU9MDtuZTxnZS5sZW5ndGg7bmUrKyl7dmFyIFBlPWdlW25lXSxwZT1QZS5uYW1lLGJuPVBlLHplPU8uc3RhcnRTdHlsZVtwZV0sVmU9Ry5wcm9wZXJ0aWVzW3plLm5hbWVdLEVuPXN4KHplLGJuLEF0LGZ0LFZlKTtHLm92ZXJyaWRlQnlwYXNzKHkscGUsRW4pfXkuZW1pdCgic3R5bGUiKX19cmV0dXJuIE8ucHJvZ3Jlc3M9QXQsQXR9ZnVuY3Rpb24gRGsoeSxnKXtyZXR1cm4geT09bnVsbHx8Zz09bnVsbD8hMTpYKHkpJiZYKGcpPyEwOiEhKHkmJmcpfWZ1bmN0aW9uIHhKKHksZyx4LFQpe3ZhciBBPWcuX3ByaXZhdGU7QS5zdGFydGVkPSEwLEEuc3RhcnRUaW1lPXgtQS5wcm9ncmVzcypBLmR1cmF0aW9ufWZ1bmN0aW9uIF9CKHksZyl7dmFyIHg9Zy5fcHJpdmF0ZS5hbmlFbGVzLFQ9W107ZnVuY3Rpb24gQShHLFcpe3ZhciBldD1HLl9wcml2YXRlLGF0PWV0LmFuaW1hdGlvbi5jdXJyZW50LGx0PWV0LmFuaW1hdGlvbi5xdWV1ZSxmdD0hMTtpZihhdC5sZW5ndGg9PT0wKXt2YXIgQXQ9bHQuc2hpZnQoKTtBdCYmYXQucHVzaChBdCl9Zm9yKHZhciBrdD1mdW5jdGlvbihLdCl7Zm9yKHZhciB6dD1LdC5sZW5ndGgtMTt6dD49MDt6dC0tKXt2YXIgZWU9S3RbenRdO2VlKCl9S3Quc3BsaWNlKDAsS3QubGVuZ3RoKX0sTXQ9YXQubGVuZ3RoLTE7TXQ+PTA7TXQtLSl7dmFyIER0PWF0W010XSxqdD1EdC5fcHJpdmF0ZTtpZihqdC5zdG9wcGVkKXthdC5zcGxpY2UoTXQsMSksanQuaG9va2VkPSExLGp0LnBsYXlpbmc9ITEsanQuc3RhcnRlZD0hMSxrdChqdC5mcmFtZXMpO2NvbnRpbnVlfSFqdC5wbGF5aW5nJiYhanQuYXBwbHlpbmd8fChqdC5wbGF5aW5nJiZqdC5hcHBseWluZyYmKGp0LmFwcGx5aW5nPSExKSxqdC5zdGFydGVkfHx4SihHLER0LHkpLHlKKEcsRHQseSxXKSxqdC5hcHBseWluZyYmKGp0LmFwcGx5aW5nPSExKSxrdChqdC5mcmFtZXMpLGp0LnN0ZXAhPW51bGwmJmp0LnN0ZXAoeSksRHQuY29tcGxldGVkKCkmJihhdC5zcGxpY2UoTXQsMSksanQuaG9va2VkPSExLGp0LnBsYXlpbmc9ITEsanQuc3RhcnRlZD0hMSxrdChqdC5jb21wbGV0ZXMpKSxmdD0hMCl9cmV0dXJuIVcmJmF0Lmxlbmd0aD09PTAmJmx0Lmxlbmd0aD09PTAmJlQucHVzaChHKSxmdH1mb3IodmFyIEQ9ITEsTz0wO088eC5sZW5ndGg7TysrKXt2YXIgJD14W09dLHE9QSgkKTtEPUR8fHF9dmFyIFM9QShnLCEwKTsoRHx8UykmJih4Lmxlbmd0aD4wP2cubm90aWZ5KCJkcmF3Iix4KTpnLm5vdGlmeSgiZHJhdyIpKSx4LnVubWVyZ2UoVCksZy5lbWl0KCJzdGVwIil9dmFyIGtKPXthbmltYXRlOkFjLmFuaW1hdGUoKSxhbmltYXRpb246QWMuYW5pbWF0aW9uKCksYW5pbWF0ZWQ6QWMuYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOkFjLmNsZWFyUXVldWUoKSxkZWxheTpBYy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOkFjLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpBYy5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7eC5zdHlsZUVuYWJsZWQoKSYmeC5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGcpfSxzdG9wQW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LHN0YXJ0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYoZy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMCwhZy5zdHlsZUVuYWJsZWQoKSlyZXR1cm47ZnVuY3Rpb24geCgpe2cuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcmJkZmKGZ1bmN0aW9uKEQpe19CKEQsZykseCgpfSl9dmFyIFQ9Zy5yZW5kZXJlcigpO1QmJlQuYmVmb3JlUmVuZGVyP1QuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKEQsTyl7X0IoTyxnKX0sVC5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOngoKX19LEVKPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PW51bGx8fHg9PW51bGw/Zz09bnVsbCYmeD09bnVsbDpnLnNhbWVUZXh0KHgpfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPXgucXVhbGlmaWVyO3JldHVybiBBIT1udWxsP2chPT1ULnRhcmdldCYmbnQoVC50YXJnZXQpJiZBLm1hdGNoZXMoVC50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihnLHgpe3guY3k9Zyx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfX0sYTk9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyB5bShnKTpnfSxTQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuZW1pdHRlcnx8KGcuZW1pdHRlcj1uZXcgSlQoRUosdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKGcsYTkoeCksVCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihnLGE5KHgpLFQpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZyxhOSh4KSxUKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGcsYTkoeCksVCksdGhpc30sZW1pdDpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGcseCksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXQoZyksdGhpcy5ub3RpZnkoZyx4KSx0aGlzfX07QWMuZXZlbnRBbGlhc2VzT24oU0IpO3ZhciB6TD17cG5nOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGc9Z3x8e30seC5wbmcoZyl9LGpwZzpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBnPWd8fHt9LGcuYmc9Zy5iZ3x8IiNmZmYiLHguanBnKGcpfX07ekwuanBlZz16TC5qcGc7dmFyIG85PXtsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT1udWxsKXtibCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihnLm5hbWU9PW51bGwpe2JsKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBUPWcubmFtZSxBPXguZXh0ZW5zaW9uKCJsYXlvdXQiLFQpO2lmKEE9PW51bGwpe2JsKCJObyBzdWNoIGxheW91dCBgIitUKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIEQ7bXQoZy5lbGVzKT9EPXguJChnLmVsZXMpOkQ9Zy5lbGVzIT1udWxsP2cuZWxlczp4LiQoKTt2YXIgTz1uZXcgQShtZSh7fSxnLHtjeTp4LGVsZXM6RH0pKTtyZXR1cm4gT319O285LmNyZWF0ZUxheW91dD1vOS5tYWtlTGF5b3V0PW85LmxheW91dDt2YXIgVEo9e25vdGlmeTpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuX3ByaXZhdGU7aWYodGhpcy5iYXRjaGluZygpKXtULmJhdGNoTm90aWZpY2F0aW9ucz1ULmJhdGNoTm90aWZpY2F0aW9uc3x8e307dmFyIEE9VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ109VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ118fHRoaXMuY29sbGVjdGlvbigpO3ghPW51bGwmJkEubWVyZ2UoeCk7cmV0dXJufWlmKFQubm90aWZpY2F0aW9uc0VuYWJsZWQpe3ZhciBEPXRoaXMucmVuZGVyZXIoKTt0aGlzLmRlc3Ryb3llZCgpfHwhRHx8RC5ub3RpZnkoZyx4KX19LG5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94Lm5vdGlmaWNhdGlvbnNFbmFibGVkOih4Lm5vdGlmaWNhdGlvbnNFbmFibGVkPSEhZyx0aGlzKX0sbm9Ob3RpZmljYXRpb25zOmZ1bmN0aW9uKGcpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZygpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LGJhdGNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSxzdGFydEJhdGNoOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5iYXRjaENvdW50PT1udWxsJiYoZy5iYXRjaENvdW50PTApLGcuYmF0Y2hDb3VudD09PTAmJihnLmJhdGNoU3R5bGVFbGVzPXRoaXMuY29sbGVjdGlvbigpLGcuYmF0Y2hOb3RpZmljYXRpb25zPXt9KSxnLmJhdGNoQ291bnQrKyx0aGlzfSxlbmRCYXRjaDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoZy5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihnLmJhdGNoQ291bnQtLSxnLmJhdGNoQ291bnQ9PT0wKXtnLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHg9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGcuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBBPWcuYmF0Y2hOb3RpZmljYXRpb25zW1RdO0EuZW1wdHkoKT94Lm5vdGlmeShUKTp4Lm5vdGlmeShULEEpfSl9cmV0dXJuIHRoaXN9LGJhdGNoOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0YXJ0QmF0Y2goKSxnKCksdGhpcy5lbmRCYXRjaCgpLHRoaXN9LGJhdGNoRGF0YTpmdW5jdGlvbihnKXt2YXIgeD10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPU9iamVjdC5rZXlzKGcpLEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIEQ9VFtBXSxPPWdbRF0sJD14LmdldEVsZW1lbnRCeUlkKEQpOyQuZGF0YShPKX19KX19LENKPUJmKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSkscUw9e3JlbmRlclRvOmZ1bmN0aW9uKGcseCxULEEpe3ZhciBEPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIEQucmVuZGVyVG8oZyx4LFQsQSksdGhpc30scmVuZGVyZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcn0sZm9yY2VSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSxyZXNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30saW5pdFJlbmRlcmVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmV4dGVuc2lvbigicmVuZGVyZXIiLGcubmFtZSk7aWYoVD09bnVsbCl7YmwoIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZy5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59Zy53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZTYygiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIEE9Q0ooZyk7QS5jeT14LHguX3ByaXZhdGUucmVuZGVyZXI9bmV3IFQoQSksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcztnLm5vdGlmeSgiZGVzdHJveSIpO3ZhciB4PWcuY29udGFpbmVyKCk7aWYoeClmb3IoeC5fY3lyZWc9bnVsbDt4LmNoaWxkTm9kZXMubGVuZ3RoPjA7KXgucmVtb3ZlQ2hpbGQoeC5jaGlsZE5vZGVzWzBdKTtnLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZy5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBBPVQuX3ByaXZhdGU7QS5yc2NyYXRjaD17fSxBLnJzdHlsZT17fSxBLmFuaW1hdGlvbi5jdXJyZW50PVtdLEEuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGcpfSxvZmZSZW5kZXI6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGcpfX07cUwuaW52YWxpZGF0ZURpbWVuc2lvbnM9cUwucmVzaXplO3ZhciBjOT17Y29sbGVjdGlvbjpmdW5jdGlvbihnLHgpe3JldHVybiBtdChnKT90aGlzLiQoZyk6eHQoZyk/Zy5jb2xsZWN0aW9uKCk6ZHQoZyk/KHh8fCh4PXt9KSxuZXcgamYodGhpcyxnLHgudW5pcXVlLHgucmVtb3ZlZCkpOm5ldyBqZih0aGlzKX0sbm9kZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzTm9kZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sZWRnZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzRWRnZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sJDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBnP3guZmlsdGVyKGcpOnguc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07YzkuZWxlbWVudHM9YzkuZmlsdGVyPWM5LiQ7dmFyIGYxPXt9LE9rPSJ0IixfSj0iZiI7ZjEuYXBwbHk9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLl9wcml2YXRlLFQ9eC5jeSxBPVQuY29sbGVjdGlvbigpLEQ9MDtEPHkubGVuZ3RoO0QrKyl7dmFyIE89eVtEXSwkPWcuZ2V0Q29udGV4dE1ldGEoTyk7aWYoISQuZW1wdHkpe3ZhciBxPWcuZ2V0Q29udGV4dFN0eWxlKCQpLFM9Zy5hcHBseUNvbnRleHRTdHlsZSgkLHEsTyk7Ty5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2cudXBkYXRlVHJhbnNpdGlvbnMoTyxTLmRpZmZQcm9wcyk6Ty5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBHPWcudXBkYXRlU3R5bGVIaW50cyhPKTtHJiZBLnB1c2goTyl9fXJldHVybiBBfSxmMS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14Ll9wcml2YXRlLnByb3BEaWZmcz14Ll9wcml2YXRlLnByb3BEaWZmc3x8e30sQT15KyItIitnLEQ9VFtBXTtpZihEKXJldHVybiBEO2Zvcih2YXIgTz1bXSwkPXt9LHE9MDtxPHgubGVuZ3RoO3ErKyl7dmFyIFM9eFtxXSxHPXlbcV09PT1PayxXPWdbcV09PT1PayxldD1HIT09VyxhdD1TLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYoZXR8fFcmJmF0KXt2YXIgbHQ9dm9pZCAwO2V0JiZhdHx8ZXQ/bHQ9Uy5wcm9wZXJ0aWVzOmF0JiYobHQ9Uy5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIGZ0PTA7ZnQ8bHQubGVuZ3RoO2Z0Kyspe2Zvcih2YXIgQXQ9bHRbZnRdLGt0PUF0Lm5hbWUsTXQ9ITEsRHQ9cSsxO0R0PHgubGVuZ3RoO0R0Kyspe3ZhciBqdD14W0R0XSxadD1nW0R0XT09PU9rO2lmKFp0JiYoTXQ9anQucHJvcGVydGllc1tBdC5uYW1lXSE9bnVsbCxNdCkpYnJlYWt9ISRba3RdJiYhTXQmJigkW2t0XT0hMCxPLnB1c2goa3QpKX19fXJldHVybiBUW0FdPU8sT30sZjEuZ2V0Q29udGV4dE1ldGE9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD0iIixULEE9eS5fcHJpdmF0ZS5zdHlsZUN4dEtleXx8IiIsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdLCQ9Ty5zZWxlY3RvciYmTy5zZWxlY3Rvci5tYXRjaGVzKHkpOyQ/eCs9T2s6eCs9X0p9cmV0dXJuIFQ9Zy5nZXRQcm9wZXJ0aWVzRGlmZihBLHgpLHkuX3ByaXZhdGUuc3R5bGVDeHRLZXk9eCx7a2V5OngsZGlmZlByb3BOYW1lczpULGVtcHR5OlQubGVuZ3RoPT09MH19LGYxLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz15LmtleSx4PXRoaXMsVD10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihUW2ddKXJldHVybiBUW2ddO2Zvcih2YXIgQT17X3ByaXZhdGU6e2tleTpnfX0sRD0wO0Q8eC5sZW5ndGg7RCsrKXt2YXIgTz14W0RdLCQ9Z1tEXT09PU9rO2lmKCQpZm9yKHZhciBxPTA7cTxPLnByb3BlcnRpZXMubGVuZ3RoO3ErKyl7dmFyIFM9Ty5wcm9wZXJ0aWVzW3FdO0FbUy5uYW1lXT1TfX1yZXR1cm4gVFtnXT1BLEF9LGYxLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9dGhpcyxBPXkuZGlmZlByb3BOYW1lcyxEPXt9LE89VC50eXBlcywkPTA7JDxBLmxlbmd0aDskKyspe3ZhciBxPUFbJF0sUz1nW3FdLEc9eC5wc3R5bGUocSk7aWYoIVMpaWYoRylHLmJ5cGFzcz9TPXtuYW1lOnEsZGVsZXRlQnlwYXNzZWQ6ITB9OlM9e25hbWU6cSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoRyE9PVMpe2lmKFMubWFwcGVkPT09Ty5mbiYmRyE9bnVsbCYmRy5tYXBwaW5nIT1udWxsJiZHLm1hcHBpbmcudmFsdWU9PT1TLnZhbHVlKXt2YXIgVz1HLm1hcHBpbmcsZXQ9Vy5mblZhbHVlPVMudmFsdWUoeCk7aWYoZXQ9PT1XLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBhdD1EW3FdPXtwcmV2Okd9O1QuYXBwbHlQYXJzZWRQcm9wZXJ0eSh4LFMpLGF0Lm5leHQ9eC5wc3R5bGUocSksYXQubmV4dCYmYXQubmV4dC5ieXBhc3MmJihhdC5uZXh0PWF0Lm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOkR9fSxmMS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUseD10aGlzLFQ9eC5wcm9wZXJ0eUdyb3VwTmFtZXMsQT14LnByb3BlcnR5R3JvdXBLZXlzLEQ9ZnVuY3Rpb24oSnIsd2ksS3Mpe3JldHVybiB4LmdldFByb3BlcnRpZXNIYXNoKEpyLHdpLEtzKX0sTz1nLnN0eWxlS2V5O2lmKHkucmVtb3ZlZCgpKXJldHVybiExO3ZhciAkPWcuZ3JvdXA9PT0ibm9kZXMiLHE9eS5fcHJpdmF0ZS5zdHlsZTtUPU9iamVjdC5rZXlzKHEpO2Zvcih2YXIgUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdO2cuc3R5bGVLZXlzW0ddPVtkbSx4M119Zm9yKHZhciBXPWZ1bmN0aW9uKEpyLHdpKXtyZXR1cm4gZy5zdHlsZUtleXNbd2ldWzBdPVQwKEpyLGcuc3R5bGVLZXlzW3dpXVswXSl9LGV0PWZ1bmN0aW9uKEpyLHdpKXtyZXR1cm4gZy5zdHlsZUtleXNbd2ldWzFdPWN2KEpyLGcuc3R5bGVLZXlzW3dpXVsxXSl9LGF0PWZ1bmN0aW9uKEpyLHdpKXtXKEpyLHdpKSxldChKcix3aSl9LGx0PWZ1bmN0aW9uKEpyLHdpKXtmb3IodmFyIEtzPTA7S3M8SnIubGVuZ3RoO0tzKyspe3ZhciBrYT1Kci5jaGFyQ29kZUF0KEtzKTtXKGthLHdpKSxldChrYSx3aSl9fSxmdD0yZTksQXQ9ZnVuY3Rpb24oSnIpe3JldHVybi0xMjg8SnImJkpyPDEyOCYmTWF0aC5mbG9vcihKcikhPT1Kcj9mdC0oSnIqMTAyNHwwKTpKcn0sa3Q9MDtrdDxULmxlbmd0aDtrdCsrKXt2YXIgTXQ9VFtrdF0sRHQ9cVtNdF07aWYoRHQhPW51bGwpe3ZhciBqdD10aGlzLnByb3BlcnRpZXNbTXRdLFp0PWp0LnR5cGUsS3Q9anQuZ3JvdXBLZXksenQ9dm9pZCAwO2p0Lmhhc2hPdmVycmlkZSE9bnVsbD96dD1qdC5oYXNoT3ZlcnJpZGUoeSxEdCk6RHQucGZWYWx1ZSE9bnVsbCYmKHp0PUR0LnBmVmFsdWUpO3ZhciBlZT1qdC5lbnVtcz09bnVsbD9EdC52YWx1ZTpudWxsLFZ0PXp0IT1udWxsLGZlPWVlIT1udWxsLGdlPVZ0fHxmZSxuZT1EdC51bml0cztpZihadC5udW1iZXImJmdlJiYhWnQubXVsdGlwbGUpe3ZhciBQZT1WdD96dDplZTthdChBdChQZSksS3QpLCFWdCYmbmUhPW51bGwmJmx0KG5lLEt0KX1lbHNlIGx0KER0LnN0clZhbHVlLEt0KX19Zm9yKHZhciBwZT1bZG0seDNdLGJuPTA7Ym48QS5sZW5ndGg7Ym4rKyl7dmFyIHplPUFbYm5dLFZlPWcuc3R5bGVLZXlzW3plXTtwZVswXT1UMChWZVswXSxwZVswXSkscGVbMV09Y3YoVmVbMV0scGVbMV0pfWcuc3R5bGVLZXk9RjUocGVbMF0scGVbMV0pO3ZhciBFbj1nLnN0eWxlS2V5cztnLmxhYmVsRGltc0tleT1qYihFbi5sYWJlbERpbWVuc2lvbnMpO3ZhciBEbj1EKHksWyJsYWJlbCJdLEVuLmxhYmVsRGltZW5zaW9ucyk7aWYoZy5sYWJlbEtleT1qYihEbiksZy5sYWJlbFN0eWxlS2V5PWpiKEI1KEVuLmNvbW1vbkxhYmVsLERuKSksISQpe3ZhciBLbj1EKHksWyJzb3VyY2UtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cuc291cmNlTGFiZWxLZXk9amIoS24pLGcuc291cmNlTGFiZWxTdHlsZUtleT1qYihCNShFbi5jb21tb25MYWJlbCxLbikpO3ZhciBTbj1EKHksWyJ0YXJnZXQtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cudGFyZ2V0TGFiZWxLZXk9amIoU24pLGcudGFyZ2V0TGFiZWxTdHlsZUtleT1qYihCNShFbi5jb21tb25MYWJlbCxTbikpfWlmKCQpe3ZhciBXbj1nLnN0eWxlS2V5cyxycj1Xbi5ub2RlQm9keSx2cj1Xbi5ub2RlQm9yZGVyLHVyPVduLmJhY2tncm91bmRJbWFnZSx0cj1Xbi5jb21wb3VuZCx3bj1Xbi5waWUsZ3I9W3JyLHZyLHVyLHRyLHduXS5maWx0ZXIoZnVuY3Rpb24oZnIpe3JldHVybiBmciE9bnVsbH0pLnJlZHVjZShCNSxbZG0seDNdKTtnLm5vZGVLZXk9amIoZ3IpLGcuaGFzUGllPXduIT1udWxsJiZ3blswXSE9PWRtJiZ3blsxXSE9PXgzfXJldHVybiBPIT09Zy5zdHlsZUtleX0sZjEuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGU7Zy5zdHlsZUN4dEtleT0iIixnLnN0eWxlS2V5cz17fSxnLnN0eWxlS2V5PW51bGwsZy5sYWJlbEtleT1udWxsLGcubGFiZWxTdHlsZUtleT1udWxsLGcuc291cmNlTGFiZWxLZXk9bnVsbCxnLnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCxnLnRhcmdldExhYmVsS2V5PW51bGwsZy50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsZy5ub2RlS2V5PW51bGwsZy5oYXNQaWU9bnVsbH0sZjEuYXBwbHlQYXJzZWRQcm9wZXJ0eT1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD1nLEE9eS5fcHJpdmF0ZS5zdHlsZSxELE89eC50eXBlcywkPXgucHJvcGVydGllc1tULm5hbWVdLnR5cGUscT1ULmJ5cGFzcyxTPUFbVC5uYW1lXSxHPVMmJlMuYnlwYXNzLFc9eS5fcHJpdmF0ZSxldD0ibWFwcGluZyIsYXQ9ZnVuY3Rpb24ocnIpe3JldHVybiBycj09bnVsbD9udWxsOnJyLnBmVmFsdWUhPW51bGw/cnIucGZWYWx1ZTpyci52YWx1ZX0sbHQ9ZnVuY3Rpb24oKXt2YXIgcnI9YXQoUyksdnI9YXQoVCk7eC5jaGVja1RyaWdnZXJzKHksVC5uYW1lLHJyLHZyKX07aWYoVCYmVC5uYW1lLnN1YnN0cigwLDMpPT09InBpZSImJlNjKCJUaGUgcGllIHN0eWxlIHByb3BlcnRpZXMgYXJlIGRlcHJlY2F0ZWQuICBDcmVhdGUgY2hhcnRzIHVzaW5nIGJhY2tncm91bmQgaW1hZ2VzIGluc3RlYWQuIiksZy5uYW1lPT09ImN1cnZlLXN0eWxlIiYmeS5pc0VkZ2UoKSYmKGcudmFsdWUhPT0iYmV6aWVyIiYmeS5pc0xvb3AoKXx8Zy52YWx1ZT09PSJoYXlzdGFjayImJih5LnNvdXJjZSgpLmlzUGFyZW50KCl8fHkudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYoVD1nPXRoaXMucGFyc2UoZy5uYW1lLCJiZXppZXIiLHEpKSxULmRlbGV0ZSlyZXR1cm4gQVtULm5hbWVdPXZvaWQgMCxsdCgpLCEwO2lmKFQuZGVsZXRlQnlwYXNzZWQpcmV0dXJuIFM/Uy5ieXBhc3M/KFMuYnlwYXNzZWQ9dm9pZCAwLGx0KCksITApOiExOihsdCgpLCEwKTtpZihULmRlbGV0ZUJ5cGFzcylyZXR1cm4gUz9TLmJ5cGFzcz8oQVtULm5hbWVdPVMuYnlwYXNzZWQsbHQoKSwhMCk6ITE6KGx0KCksITApO3ZhciBmdD1mdW5jdGlvbigpe1NjKCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIit5LmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK1QubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrVC5maWVsZCsiYCk7IHRyeSBhIGBbIitULmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK1QuZmllbGQrImAgZGVmaW5lZCIpfTtzd2l0Y2goVC5tYXBwZWQpe2Nhc2UgTy5tYXBEYXRhOntmb3IodmFyIEF0PVQuZmllbGQuc3BsaXQoIi4iKSxrdD1XLmRhdGEsTXQ9MDtNdDxBdC5sZW5ndGgmJmt0O010Kyspe3ZhciBEdD1BdFtNdF07a3Q9a3RbRHRdfWlmKGt0PT1udWxsKXJldHVybiBmdCgpLCExO3ZhciBqdDtpZihYKGt0KSl7dmFyIFp0PVQuZmllbGRNYXgtVC5maWVsZE1pbjtadD09PTA/anQ9MDpqdD0oa3QtVC5maWVsZE1pbikvWnR9ZWxzZSByZXR1cm4gU2MoIkRvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCIrVC5maWVsZCsiOiAiK2t0KyJgIGZvciBgIit5LmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoanQ8MD9qdD0wOmp0PjEmJihqdD0xKSwkLmNvbG9yKXt2YXIgS3Q9VC52YWx1ZU1pblswXSx6dD1ULnZhbHVlTWF4WzBdLGVlPVQudmFsdWVNaW5bMV0sVnQ9VC52YWx1ZU1heFsxXSxmZT1ULnZhbHVlTWluWzJdLGdlPVQudmFsdWVNYXhbMl0sbmU9VC52YWx1ZU1pblszXT09bnVsbD8xOlQudmFsdWVNaW5bM10sUGU9VC52YWx1ZU1heFszXT09bnVsbD8xOlQudmFsdWVNYXhbM10scGU9W01hdGgucm91bmQoS3QrKHp0LUt0KSpqdCksTWF0aC5yb3VuZChlZSsoVnQtZWUpKmp0KSxNYXRoLnJvdW5kKGZlKyhnZS1mZSkqanQpLE1hdGgucm91bmQobmUrKFBlLW5lKSpqdCldO0Q9e2J5cGFzczpULmJ5cGFzcyxuYW1lOlQubmFtZSx2YWx1ZTpwZSxzdHJWYWx1ZToicmdiKCIrcGVbMF0rIiwgIitwZVsxXSsiLCAiK3BlWzJdKyIpIn19ZWxzZSBpZigkLm51bWJlcil7dmFyIGJuPVQudmFsdWVNaW4rKFQudmFsdWVNYXgtVC52YWx1ZU1pbikqanQ7RD10aGlzLnBhcnNlKFQubmFtZSxibixULmJ5cGFzcyxldCl9ZWxzZSByZXR1cm4hMTtpZighRClyZXR1cm4gZnQoKSwhMTtELm1hcHBpbmc9VCxUPUQ7YnJlYWt9Y2FzZSBPLmRhdGE6e2Zvcih2YXIgemU9VC5maWVsZC5zcGxpdCgiLiIpLFZlPVcuZGF0YSxFbj0wO0VuPHplLmxlbmd0aCYmVmU7RW4rKyl7dmFyIERuPXplW0VuXTtWZT1WZVtEbl19aWYoVmUhPW51bGwmJihEPXRoaXMucGFyc2UoVC5uYW1lLFZlLFQuYnlwYXNzLGV0KSksIUQpcmV0dXJuIGZ0KCksITE7RC5tYXBwaW5nPVQsVD1EO2JyZWFrfWNhc2UgTy5mbjp7dmFyIEtuPVQudmFsdWUsU249VC5mblZhbHVlIT1udWxsP1QuZm5WYWx1ZTpLbih5KTtpZihULnByZXZGblZhbHVlPVNuLFNuPT1udWxsKXJldHVybiBTYygiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gbnVsbCAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgbnVsbCkiKSwhMTtpZihEPXRoaXMucGFyc2UoVC5uYW1lLFNuLFQuYnlwYXNzLGV0KSwhRClyZXR1cm4gU2MoIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIGludmFsaWQgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdHlwZSAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgaW52YWxpZCkiKSwhMTtELm1hcHBpbmc9JGIoVCksVD1EO2JyZWFrfWNhc2Ugdm9pZCAwOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIHE/KEc/VC5ieXBhc3NlZD1TLmJ5cGFzc2VkOlQuYnlwYXNzZWQ9UyxBW1QubmFtZV09VCk6Rz9TLmJ5cGFzc2VkPVQ6QVtULm5hbWVdPVQsbHQoKSwhMH0sZjEuY2xlYW5FbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXt2YXIgVD15W3hdO2lmKHRoaXMuY2xlYXJTdHlsZUhpbnRzKFQpLFQuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksVC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSwhZylULl9wcml2YXRlLnN0eWxlPXt9O2Vsc2UgZm9yKHZhciBBPVQuX3ByaXZhdGUuc3R5bGUsRD1PYmplY3Qua2V5cyhBKSxPPTA7TzxELmxlbmd0aDtPKyspe3ZhciAkPURbT10scT1BWyRdO3EhPW51bGwmJihxLmJ5cGFzcz9xLmJ5cGFzc2VkPW51bGw6QVskXT1udWxsKX19fSxmMS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9wcml2YXRlLmN5LGc9eS5tdXRhYmxlRWxlbWVudHMoKTtnLnVwZGF0ZVN0eWxlKCl9LGYxLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXkuX3ByaXZhdGUsQT15LnBzdHlsZSgidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLnZhbHVlLEQ9eS5wc3R5bGUoInRyYW5zaXRpb24tZHVyYXRpb24iKS5wZlZhbHVlLE89eS5wc3R5bGUoInRyYW5zaXRpb24tZGVsYXkiKS5wZlZhbHVlO2lmKEEubGVuZ3RoPjAmJkQ+MCl7Zm9yKHZhciAkPXt9LHE9ITEsUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdLFc9eS5wc3R5bGUoRyksZXQ9Z1tHXTtpZihldCl7dmFyIGF0PWV0LnByZXYsbHQ9YXQsZnQ9ZXQubmV4dCE9bnVsbD9ldC5uZXh0OlcsQXQ9ITEsa3Q9dm9pZCAwLE10PTFlLTY7bHQmJihYKGx0LnBmVmFsdWUpJiZYKGZ0LnBmVmFsdWUpPyhBdD1mdC5wZlZhbHVlLWx0LnBmVmFsdWUsa3Q9bHQucGZWYWx1ZStNdCpBdCk6WChsdC52YWx1ZSkmJlgoZnQudmFsdWUpPyhBdD1mdC52YWx1ZS1sdC52YWx1ZSxrdD1sdC52YWx1ZStNdCpBdCk6ZHQobHQudmFsdWUpJiZkdChmdC52YWx1ZSkmJihBdD1sdC52YWx1ZVswXSE9PWZ0LnZhbHVlWzBdfHxsdC52YWx1ZVsxXSE9PWZ0LnZhbHVlWzFdfHxsdC52YWx1ZVsyXSE9PWZ0LnZhbHVlWzJdLGt0PWx0LnN0clZhbHVlKSxBdCYmKCRbR109ZnQuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh5LEcsa3QpLHE9ITApKX19aWYoIXEpcmV0dXJuO1QudHJhbnNpdGlvbmluZz0hMCxuZXcgSzUoZnVuY3Rpb24oRHQpe08+MD95LmRlbGF5QW5pbWF0aW9uKE8pLnBsYXkoKS5wcm9taXNlKCkudGhlbihEdCk6RHQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geS5hbmltYXRpb24oe3N0eWxlOiQsZHVyYXRpb246RCxlYXNpbmc6eS5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3gucmVtb3ZlQnlwYXNzZXMoeSxBKSx5LmVtaXRBbmROb3RpZnkoInN0eWxlIiksVC50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBULnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHksQSkseS5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLFQudHJhbnNpdGlvbmluZz0hMSl9LGYxLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcy5wcm9wZXJ0aWVzW2ddLCQ9QShPKTskIT1udWxsJiYkKHgsVCkmJkQoTyl9LGYxLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oRCl7cmV0dXJuIEQudHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7QS5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIseSl9KX0sZjEuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oQSl7cmV0dXJuIEEudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKEEpe3kuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkseS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxBLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJihnPT09ImN1cnZlLXN0eWxlIiYmKHg9PT0iYmV6aWVyInx8VD09PSJiZXppZXIiKXx8Zz09PSJkaXNwbGF5IiYmKHg9PT0ibm9uZSJ8fFQ9PT0ibm9uZSIpKSYmeS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihEKXtELmlzQnVuZGxlZEJlemllcigpJiZELmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0sZjEuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih5LGcseCxUKXt5LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHksZyx4LFQpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHksZyx4LFQpfTt2YXIgTms9e307TmsuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPVtdLE89ITA7aWYoZz09PSIqInx8Zz09PSIqKiIpe2lmKHghPT12b2lkIDApZm9yKHZhciAkPTA7JDxBLnByb3BlcnRpZXMubGVuZ3RoOyQrKyl7dmFyIHE9QS5wcm9wZXJ0aWVzWyRdLFM9cS5uYW1lLEc9dGhpcy5wYXJzZShTLHgsITApO0cmJkQucHVzaChHKX19ZWxzZSBpZihtdChnKSl7dmFyIFc9dGhpcy5wYXJzZShnLHgsITApO1cmJkQucHVzaChXKX1lbHNlIGlmKGh0KGcpKXt2YXIgZXQ9ZztUPXg7Zm9yKHZhciBhdD1PYmplY3Qua2V5cyhldCksbHQ9MDtsdDxhdC5sZW5ndGg7bHQrKyl7dmFyIGZ0PWF0W2x0XSxBdD1ldFtmdF07aWYoQXQ9PT12b2lkIDAmJihBdD1ldFtNZShmdCldKSxBdCE9PXZvaWQgMCl7dmFyIGt0PXRoaXMucGFyc2UoZnQsQXQsITApO2t0JiZELnB1c2goa3QpfX19ZWxzZSByZXR1cm4hMTtpZihELmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBNdD0hMSxEdD0wO0R0PHkubGVuZ3RoO0R0Kyspe2Zvcih2YXIganQ9eVtEdF0sWnQ9e30sS3Q9dm9pZCAwLHp0PTA7enQ8RC5sZW5ndGg7enQrKyl7dmFyIGVlPURbenRdO2lmKFQpe3ZhciBWdD1qdC5wc3R5bGUoZWUubmFtZSk7S3Q9WnRbZWUubmFtZV09e3ByZXY6VnR9fU10PXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShqdCwkYihlZSkpfHxNdCxUJiYoS3QubmV4dD1qdC5wc3R5bGUoZWUubmFtZSkpfU10JiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoanQpLFQmJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoanQsWnQsTyl9cmV0dXJuIE10fSxOay5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih5LGcseCl7Zz1wbihnKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEE9eVtUXSxEPUEuX3ByaXZhdGUuc3R5bGVbZ10sTz10aGlzLnByb3BlcnRpZXNbZ10udHlwZSwkPU8uY29sb3IscT1PLm11dGlwbGUsUz1EP0QucGZWYWx1ZSE9bnVsbD9ELnBmVmFsdWU6RC52YWx1ZTpudWxsOyFEfHwhRC5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhBLGcseCk6KEQudmFsdWU9eCxELnBmVmFsdWUhPW51bGwmJihELnBmVmFsdWU9eCksJD9ELnN0clZhbHVlPSJyZ2IoIit4LmpvaW4oIiwiKSsiKSI6cT9ELnN0clZhbHVlPXguam9pbigiICIpOkQuc3RyVmFsdWU9IiIreCx0aGlzLnVwZGF0ZVN0eWxlSGludHMoQSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhBLGcsUyx4KX19LE5rLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXMoeSx0aGlzLnByb3BlcnR5TmFtZXMsZyl9LE5rLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9ITAsQT0wO0E8eS5sZW5ndGg7QSsrKXtmb3IodmFyIEQ9eVtBXSxPPXt9LCQ9MDskPGcubGVuZ3RoOyQrKyl7dmFyIHE9Z1skXSxTPXRoaXMucHJvcGVydGllc1txXSxHPUQucHN0eWxlKFMubmFtZSk7aWYoISghR3x8IUcuYnlwYXNzKSl7dmFyIFc9IiIsZXQ9dGhpcy5wYXJzZShxLFcsITApLGF0PU9bUy5uYW1lXT17cHJldjpHfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoRCxldCksYXQubmV4dD1ELnBzdHlsZShTLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoRCkseCYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhELE8sVCl9fTt2YXIgSEw9e307SEwuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHkhPW51bGw/cGFyc2VGbG9hdCh5KToxfSxITC5jb250YWluZXJDc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PWcuY29udGFpbmVyKCk7aWYoUiYmeCYmUi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBSLmdldENvbXB1dGVkU3R5bGUoeCkuZ2V0UHJvcGVydHlWYWx1ZSh5KX07dmFyIEhiPXt9O0hiLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gZz90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LGcsITApOnRoaXMuZ2V0UmF3U3R5bGUoeSwhMCl9LEhiLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztpZih5PXlbMF0seSl7Zm9yKHZhciBUPXt9LEE9MDtBPHgucHJvcGVydGllcy5sZW5ndGg7QSsrKXt2YXIgRD14LnByb3BlcnRpZXNbQV0sTz14LmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LEQubmFtZSxnKTtPIT1udWxsJiYoVFtELm5hbWVdPU8sVFtNZShELm5hbWUpXT1PKX1yZXR1cm4gVH19LEhiLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT15LnBzdHlsZShnKVt4XVtUXTtyZXR1cm4gQT8/eS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGcpW3hdWzBdfSxIYi5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXRoaXM7aWYoeT15WzBdLHkpe3ZhciBBPVQucHJvcGVydGllc1tnXTtBLmFsaWFzJiYoQT1BLnBvaW50c1RvKTt2YXIgRD1BLnR5cGUsTz15LnBzdHlsZShBLm5hbWUpO2lmKE8pe3ZhciAkPU8udmFsdWUscT1PLnVuaXRzLFM9Ty5zdHJWYWx1ZTtpZih4JiZELm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIEc9eS5jeSgpLnpvb20oKSxXPWZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQqR30sZXQ9ZnVuY3Rpb24oQXQsa3Qpe3JldHVybiBXKEF0KStrdH0sYXQ9ZHQoJCksbHQ9YXQ/cS5ldmVyeShmdW5jdGlvbihmdCl7cmV0dXJuIGZ0IT1udWxsfSk6cSE9bnVsbDtyZXR1cm4gbHQ/YXQ/JC5tYXAoZnVuY3Rpb24oZnQsQXQpe3JldHVybiBldChmdCxxW0F0XSl9KS5qb2luKCIgIik6ZXQoJCxxKTphdD8kLm1hcChmdW5jdGlvbihmdCl7cmV0dXJuIG10KGZ0KT9mdDoiIitXKGZ0KX0pLmpvaW4oIiAiKToiIitXKCQpfWVsc2UgaWYoUyE9bnVsbClyZXR1cm4gU31yZXR1cm4gbnVsbH19LEhiLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9e30sVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgQT1nW1RdLEQ9QS5uYW1lLE89eS5wc3R5bGUoRCk7TyE9PXZvaWQgMCYmKGh0KE8pP089dGhpcy5wYXJzZShELE8uc3RyVmFsdWUpOk89dGhpcy5wYXJzZShELE8pKSxPJiYoeFtEXT1PKX1yZXR1cm4geH0sSGIuZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1bXSxUPXksQT1nLnByb3BlcnRpZXM7aWYoVClmb3IodmFyIEQ9T2JqZWN0LmtleXMoVCksTz0wO088RC5sZW5ndGg7TysrKXt2YXIgJD1EW09dLHE9VFskXSxTPUFbJF18fEFbcG4oJCldLEc9dGhpcy5wYXJzZShTLm5hbWUscSk7RyYmeC5wdXNoKEcpfXJldHVybiB4fSxIYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXguc2xpY2UoKSxBLEQsTywkLHEsUztmb3IocT0wO3E8Zy5sZW5ndGg7cSsrKWlmKEE9Z1txXSxEPXkucHN0eWxlKEEsITEpLEQhPW51bGwpaWYoRC5wZlZhbHVlIT1udWxsKVRbMF09VDAoJCxUWzBdKSxUWzFdPWN2KCQsVFsxXSk7ZWxzZSBmb3IoTz1ELnN0clZhbHVlLFM9MDtTPE8ubGVuZ3RoO1MrKykkPU8uY2hhckNvZGVBdChTKSxUWzBdPVQwKCQsVFswXSksVFsxXT1jdigkLFRbMV0pO3JldHVybiBUfSxIYi5nZXRQcm9wZXJ0aWVzSGFzaD1IYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyIHU5PXt9O3U5LmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxBPVQuc2VsZWN0b3IsRD1ULnN0eWxlfHxULmNzcyxPPU9iamVjdC5rZXlzKEQpO2cuc2VsZWN0b3IoQSk7Zm9yKHZhciAkPTA7JDxPLmxlbmd0aDskKyspe3ZhciBxPU9bJF0sUz1EW3FdO2cuY3NzKHEsUyl9fXJldHVybiBnfSx1OS5mcm9tSnNvbj1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tSnNvbih5KSxnfSx1OS5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PVtdLGc9dGhpcy5kZWZhdWx0TGVuZ3RoO2c8dGhpcy5sZW5ndGg7ZysrKXtmb3IodmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsQT14LnByb3BlcnRpZXMsRD17fSxPPTA7TzxBLmxlbmd0aDtPKyspe3ZhciAkPUFbT107RFskLm5hbWVdPSQuc3RyVmFsdWV9eS5wdXNoKHtzZWxlY3RvcjpUP1QudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6RH0pfXJldHVybiB5fTt2YXIgR0w9e307R0wuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9dGhpcyxUPSIiK3ksQSxELE87VD1ULnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtULmxlbmd0aD5BLmxlbmd0aD9UPVQuc3Vic3RyKEEubGVuZ3RoKTpUPSIifWZ1bmN0aW9uIHEoKXtELmxlbmd0aD5PLmxlbmd0aD9EPUQuc3Vic3RyKE8ubGVuZ3RoKTpEPSIifWZvcig7Oyl7dmFyIFM9VC5tYXRjaCgvXlxzKiQvKTtpZihTKWJyZWFrO3ZhciBHPVQubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIUcpe1NjKCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1QpO2JyZWFrfUE9R1swXTt2YXIgVz1HWzFdO2lmKFchPT0iY29yZSIpe3ZhciBldD1uZXcgeW0oVyk7aWYoZXQuaW52YWxpZCl7U2MoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrVyksJCgpO2NvbnRpbnVlfX12YXIgYXQ9R1syXSxsdD0hMTtEPWF0O2Zvcih2YXIgZnQ9W107Oyl7dmFyIEF0PUQubWF0Y2goL15ccyokLyk7aWYoQXQpYnJlYWs7dmFyIGt0PUQubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZigha3Qpe1NjKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrYXQpLGx0PSEwO2JyZWFrfU89a3RbMF07dmFyIE10PWt0WzFdLER0PWt0WzJdLGp0PWcucHJvcGVydGllc1tNdF07aWYoIWp0KXtTYygiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitPKSxxKCk7Y29udGludWV9dmFyIFp0PXgucGFyc2UoTXQsRHQpO2lmKCFadCl7U2MoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrTykscSgpO2NvbnRpbnVlfWZ0LnB1c2goe25hbWU6TXQsdmFsOkR0fSkscSgpfWlmKGx0KXskKCk7YnJlYWt9eC5zZWxlY3RvcihXKTtmb3IodmFyIEt0PTA7S3Q8ZnQubGVuZ3RoO0t0Kyspe3ZhciB6dD1mdFtLdF07eC5jc3MoenQubmFtZSx6dC52YWwpfSQoKX1yZXR1cm4geH0sR0wuZnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tU3RyaW5nKHkpLGd9O3ZhciAkZj17fTsoZnVuY3Rpb24oKXt2YXIgeT1LZSxnPV9lLHg9cmUsVD1pZSxBPU9lLEQ9ZnVuY3Rpb24oZ3Ipe3JldHVybiJeIitncisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sTz1mdW5jdGlvbihncil7dmFyIGZyPXkrInxcXHcrfCIrZysifCIreCsifCIrVCsifCIrQTtyZXR1cm4iXiIrZ3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreSsiKVxccypcXCxcXHMqKCIreSsiKVxccyosXFxzKigiK2ZyKyIpXFxzKlxcLFxccyooIitmcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdOyRmLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6WyJub25lIiwibm9kZSJdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbImluc2lkZSIsIm92ZXIiXSxtdWx0aXBsZTohMH0sY29sb3I6e2NvbG9yOiEwfSxjb2xvcnM6e2NvbG9yOiEwLG11bHRpcGxlOiEwfSxmaWxsOntlbnVtczpbInNvbGlkIiwibGluZWFyLWdyYWRpZW50IiwicmFkaWFsLWdyYWRpZW50Il19LGJvb2w6e2VudW1zOlsieWVzIiwibm8iXX0sYm9vbHM6e2VudW1zOlsieWVzIiwibm8iXSxtdWx0aXBsZTohMH0sbGluZVN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIl19LGxpbmVDYXA6e2VudW1zOlsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSJdfSxmb250RmFtaWx5OntyZWdleDonXihbXFx3LSBcXCJdKyg/OlxccyosXFxzKltcXHctIFxcIl0rKSopJCd9LGZvbnRTdHlsZTp7ZW51bXM6WyJpdGFsaWMiLCJub3JtYWwiLCJvYmxpcXVlIl19LGZvbnRXZWlnaHQ6e2VudW1zOlsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI4MDAiLCI5MDAiLDEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXX0sdGV4dERlY29yYXRpb246e2VudW1zOlsibm9uZSIsInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIl19LHRleHRUcmFuc2Zvcm06e2VudW1zOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdfSx0ZXh0V3JhcDp7ZW51bXM6WyJub25lIiwid3JhcCIsImVsbGlwc2lzIl19LHRleHRPdmVyZmxvd1dyYXA6e2VudW1zOlsid2hpdGVzcGFjZSIsImFueXdoZXJlIl19LHRleHRCYWNrZ3JvdW5kU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiXX0sbm9kZVNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSIsImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIsImJhcnJlbCIsImVsbGlwc2UiLCJ0cmlhbmdsZSIsInJvdW5kLXRyaWFuZ2xlIiwic3F1YXJlIiwicGVudGFnb24iLCJyb3VuZC1wZW50YWdvbiIsImhleGFnb24iLCJyb3VuZC1oZXhhZ29uIiwiY29uY2F2ZWhleGFnb24iLCJjb25jYXZlLWhleGFnb24iLCJoZXB0YWdvbiIsInJvdW5kLWhlcHRhZ29uIiwib2N0YWdvbiIsInJvdW5kLW9jdGFnb24iLCJ0YWciLCJyb3VuZC10YWciLCJzdGFyIiwiZGlhbW9uZCIsInJvdW5kLWRpYW1vbmQiLCJ2ZWUiLCJyaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6RCgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OkQoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpEKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6TygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpPKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpmdW5jdGlvbihncixmcil7c3dpdGNoKGdyLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBmclswXSE9PSJkZWciJiZmclswXSE9PSJyYWQiJiZmclsxXSE9PSJkZWciJiZmclsxXSE9PSJyYWQiO2Nhc2UgMTpyZXR1cm4gbXQoZ3JbMF0pfHxmclswXT09PSJkZWcifHxmclswXT09PSJyYWQiO2RlZmF1bHQ6cmV0dXJuITF9fX0sZWFzaW5nOntyZWdleGVzOlsiXihzcHJpbmcpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccypcXCkkIiwiXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqLFxccyooIit5KyIpXFxzKlxcKSQiXSxlbnVtczpbImxpbmVhciIsImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImVhc2UtaW4tc2luZSIsImVhc2Utb3V0LXNpbmUiLCJlYXNlLWluLW91dC1zaW5lIiwiZWFzZS1pbi1xdWFkIiwiZWFzZS1vdXQtcXVhZCIsImVhc2UtaW4tb3V0LXF1YWQiLCJlYXNlLWluLWN1YmljIiwiZWFzZS1vdXQtY3ViaWMiLCJlYXNlLWluLW91dC1jdWJpYyIsImVhc2UtaW4tcXVhcnQiLCJlYXNlLW91dC1xdWFydCIsImVhc2UtaW4tb3V0LXF1YXJ0IiwiZWFzZS1pbi1xdWludCIsImVhc2Utb3V0LXF1aW50IiwiZWFzZS1pbi1vdXQtcXVpbnQiLCJlYXNlLWluLWV4cG8iLCJlYXNlLW91dC1leHBvIiwiZWFzZS1pbi1vdXQtZXhwbyIsImVhc2UtaW4tY2lyYyIsImVhc2Utb3V0LWNpcmMiLCJlYXNlLWluLW91dC1jaXJjIl19LGdyYWRpZW50RGlyZWN0aW9uOntlbnVtczpbInRvLWJvdHRvbSIsInRvLXRvcCIsInRvLWxlZnQiLCJ0by1yaWdodCIsInRvLWJvdHRvbS1yaWdodCIsInRvLWJvdHRvbS1sZWZ0IiwidG8tdG9wLXJpZ2h0IiwidG8tdG9wLWxlZnQiLCJ0by1yaWdodC1ib3R0b20iLCJ0by1sZWZ0LWJvdHRvbSIsInRvLXJpZ2h0LXRvcCIsInRvLWxlZnQtdG9wIl19LGJvdW5kc0V4cGFuc2lvbjp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLG1pbjowLHZhbGlkYXRlOmZ1bmN0aW9uKGdyKXt2YXIgZnI9Z3IubGVuZ3RoO3JldHVybiBmcj09PTF8fGZyPT09Mnx8ZnI9PT00fX19O3ZhciBxPXt6ZXJvTm9uWmVybzpmdW5jdGlvbihncixmcil7cmV0dXJuKGdyPT1udWxsfHxmcj09bnVsbCkmJmdyIT09ZnJ8fGdyPT0wJiZmciE9MD8hMDpnciE9MCYmZnI9PTB9LGFueTpmdW5jdGlvbihncixmcil7cmV0dXJuIGdyIT1mcn0sZW1wdHlOb25FbXB0eTpmdW5jdGlvbihncixmcil7dmFyIEpyPVooZ3IpLHdpPVooZnIpO3JldHVybiBKciYmIXdpfHwhSnImJndpfX0sUz0kZi50eXBlcyxHPVt7bmFtZToibGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55LHRyaWdnZXJzWk9yZGVyOnEuZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxXPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sZXQ9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxhdD1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOlMuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6Uy5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpTLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6Uy50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOlMudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6Uy50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOlMucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxsdD1be25hbWU6InRleHQtdmFsaWduIix0eXBlOlMudmFsaWduLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6Uy5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOlMuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6Uy50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOlMuanVzdGlmaWNhdGlvbn1dLGZ0PVt7bmFtZToiZXZlbnRzIix0eXBlOlMuYm9vbH0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOlMuYm9vbH1dLEF0PVt7bmFtZToiZGlzcGxheSIsdHlwZTpTLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6cS5hbnksdHJpZ2dlcnNCb3VuZHM6cS5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6InZpc2liaWxpdHkiLHR5cGU6Uy52aXNpYmlsaXR5LHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToib3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNaT3JkZXI6cS56ZXJvTm9uWmVyb30se25hbWU6InRleHQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJtaW4tem9vbWVkLWZvbnQtc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJ6LWNvbXBvdW5kLWRlcHRoIix0eXBlOlMuekNvbXBvdW5kRGVwdGgsdHJpZ2dlcnNaT3JkZXI6cS5hbnl9LHtuYW1lOiJ6LWluZGV4LWNvbXBhcmUiLHR5cGU6Uy56SW5kZXhDb21wYXJlLHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToiei1pbmRleCIsdHlwZTpTLm5vbk5lZ2F0aXZlSW50LHRyaWdnZXJzWk9yZGVyOnEuYW55fV0sa3Q9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpTLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX1dLE10PVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOlMub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sRHQ9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOlMucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOlMudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6Uy50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6Uy5lYXNpbmd9XSxqdD1mdW5jdGlvbihncixmcil7cmV0dXJuIGZyLnZhbHVlPT09ImxhYmVsIj8tZ3IucG9vbEluZGV4KCk6ZnIucGZWYWx1ZX0sWnQ9W3tuYW1lOiJoZWlnaHQiLHR5cGU6Uy5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSxoYXNoT3ZlcnJpZGU6anR9LHtuYW1lOiJ3aWR0aCIsdHlwZTpTLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55LGhhc2hPdmVycmlkZTpqdH0se25hbWU6InNoYXBlIix0eXBlOlMubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6Uy5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6Uy5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOlMuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6Uy5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6Uy5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxLdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpTLmJvcmRlclN0eWxlfV0senQ9W3tuYW1lOiJiYWNrZ3JvdW5kLWltYWdlIix0eXBlOlMudXJsc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLHR5cGU6Uy5iZ0Nyb3NzT3JpZ2lufSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50Iix0eXBlOlMuYmdDb250YWlubWVudH0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIix0eXBlOlMuYm9vbHN9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teSIsdHlwZTpTLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsdHlwZTpTLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIix0eXBlOlMuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1yZXBlYXQiLHR5cGU6Uy5iZ1JlcGVhdH0se25hbWU6ImJhY2tncm91bmQtZml0Iix0eXBlOlMuYmdGaXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWNsaXAiLHR5cGU6Uy5iZ0NsaXB9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoIix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0Iix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXkiLHR5cGU6Uy5iZ1Bvc31dLGVlPVt7bmFtZToicG9zaXRpb24iLHR5cGU6Uy5wb3NpdGlvbix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIix0eXBlOlMuY29tcG91bmRJbmNsdWRlTGFiZWxzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLWxlZnQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtcmlnaHQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLWhlaWdodCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtdG9wIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy1ib3R0b20iLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fV0sVnQ9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOlMubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOlMubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpTLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOlMubnVtYmVyfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOlMuY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRheGktdHVybiIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXhpLWRpcmVjdGlvbiIsdHlwZTpTLmF4aXNEaXJlY3Rpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJlZGdlLWRpc3RhbmNlcyIsdHlwZTpTLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJhcnJvdy1zY2FsZSIsdHlwZTpTLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibG9vcC1kaXJlY3Rpb24iLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imxvb3Atc3dlZXAiLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxmZT1be25hbWU6Imdob3N0Iix0eXBlOlMuYm9vbCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9XSxnZT1be25hbWU6InNlbGVjdGlvbi1ib3gtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiLHR5cGU6Uy5zaXplfSx7bmFtZToiYWN0aXZlLWJnLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhY3RpdmUtYmctb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJhY3RpdmUtYmctc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn1dLG5lPVtdOyRmLnBpZUJhY2tncm91bmROPTE2LG5lLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgUGU9MTtQZTw9JGYucGllQmFja2dyb3VuZE47UGUrKyluZS5wdXNoKHtuYW1lOiJwaWUtIitQZSsiLWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0pLG5lLnB1c2goe25hbWU6InBpZS0iK1BlKyItYmFja2dyb3VuZC1zaXplIix0eXBlOlMucGVyY2VudH0pLG5lLnB1c2goe25hbWU6InBpZS0iK1BlKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0pO3ZhciBwZT1bXSxibj0kZi5hcnJvd1ByZWZpeGVzPVsic291cmNlIiwibWlkLXNvdXJjZSIsInRhcmdldCIsIm1pZC10YXJnZXQiXTtbe25hbWU6ImFycm93LXNoYXBlIix0eXBlOlMuYXJyb3dTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImFycm93LWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhcnJvdy1maWxsIix0eXBlOlMuYXJyb3dGaWxsfV0uZm9yRWFjaChmdW5jdGlvbih3bil7Ym4uZm9yRWFjaChmdW5jdGlvbihncil7dmFyIGZyPWdyKyItIit3bi5uYW1lLEpyPXduLnR5cGUsd2k9d24udHJpZ2dlcnNCb3VuZHM7cGUucHVzaCh7bmFtZTpmcix0eXBlOkpyLHRyaWdnZXJzQm91bmRzOndpfSl9KX0se30pO3ZhciB6ZT0kZi5wcm9wZXJ0aWVzPVtdLmNvbmNhdChmdCxEdCxBdCxrdCxNdCxmZSxsdCxhdCxHLFcsZXQsWnQsS3QsenQsbmUsZWUsVnQscGUsZ2UpLFZlPSRmLnByb3BlcnR5R3JvdXBzPXtiZWhhdmlvcjpmdCx0cmFuc2l0aW9uOkR0LHZpc2liaWxpdHk6QXQsb3ZlcmxheTprdCx1bmRlcmxheTpNdCxnaG9zdDpmZSxjb21tb25MYWJlbDpsdCxsYWJlbERpbWVuc2lvbnM6YXQsbWFpbkxhYmVsOkcsc291cmNlTGFiZWw6Vyx0YXJnZXRMYWJlbDpldCxub2RlQm9keTpadCxub2RlQm9yZGVyOkt0LGJhY2tncm91bmRJbWFnZTp6dCxwaWU6bmUsY29tcG91bmQ6ZWUsZWRnZUxpbmU6VnQsZWRnZUFycm93OnBlLGNvcmU6Z2V9LEVuPSRmLnByb3BlcnR5R3JvdXBOYW1lcz17fSxEbj0kZi5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhWZSk7RG4uZm9yRWFjaChmdW5jdGlvbih3bil7RW5bd25dPVZlW3duXS5tYXAoZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5uYW1lfSksVmVbd25dLmZvckVhY2goZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5ncm91cEtleT13bn0pfSk7dmFyIEtuPSRmLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6ImVkZ2UtdGV4dC1yb3RhdGlvbiIscG9pbnRzVG86InRleHQtcm90YXRpb24ifSx7bmFtZToicGFkZGluZy1sZWZ0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXJpZ2h0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXRvcCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1ib3R0b20iLHBvaW50c1RvOiJwYWRkaW5nIn1dOyRmLnByb3BlcnR5TmFtZXM9emUubWFwKGZ1bmN0aW9uKHduKXtyZXR1cm4gd24ubmFtZX0pO2Zvcih2YXIgU249MDtTbjx6ZS5sZW5ndGg7U24rKyl7dmFyIFduPXplW1NuXTt6ZVtXbi5uYW1lXT1Xbn1mb3IodmFyIHJyPTA7cnI8S24ubGVuZ3RoO3JyKyspe3ZhciB2cj1Lbltycl0sdXI9emVbdnIucG9pbnRzVG9dLHRyPXtuYW1lOnZyLm5hbWUsYWxpYXM6ITAscG9pbnRzVG86dXJ9O3plLnB1c2godHIpLHplW3ZyLm5hbWVdPXRyfX0pKCksJGYuZ2V0RGVmYXVsdFByb3BlcnR5PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbeV19LCRmLmdldERlZmF1bHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZTtpZih5LmRlZmF1bHRQcm9wZXJ0aWVzIT1udWxsKXJldHVybiB5LmRlZmF1bHRQcm9wZXJ0aWVzO2Zvcih2YXIgZz1tZSh7InNlbGVjdGlvbi1ib3gtY29sb3IiOiIjZGRkIiwic2VsZWN0aW9uLWJveC1vcGFjaXR5IjouNjUsInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIjoiI2FhYSIsInNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIjoxLCJhY3RpdmUtYmctY29sb3IiOiJibGFjayIsImFjdGl2ZS1iZy1vcGFjaXR5IjouMTUsImFjdGl2ZS1iZy1zaXplIjozMCwib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIjoiIzAwMCIsIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IjouMTI1LGV2ZW50czoieWVzIiwidGV4dC1ldmVudHMiOiJubyIsInRleHQtdmFsaWduIjoidG9wIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJ0ZXh0LWp1c3RpZmljYXRpb24iOiJhdXRvIiwibGluZS1oZWlnaHQiOjEsY29sb3I6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtY29sb3IiOiIjMDAwIiwidGV4dC1vdXRsaW5lLXdpZHRoIjowLCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSI6MSwidGV4dC1vcGFjaXR5IjoxLCJ0ZXh0LWRlY29yYXRpb24iOiJub25lIiwidGV4dC10cmFuc2Zvcm0iOiJub25lIiwidGV4dC13cmFwIjoibm9uZSIsInRleHQtb3ZlcmZsb3ctd3JhcCI6IndoaXRlc3BhY2UiLCJ0ZXh0LW1heC13aWR0aCI6OTk5OSwidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIjoiIzAwMCIsInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IjowLCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiOiJyZWN0YW5nbGUiLCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyI6MCwidGV4dC1ib3JkZXItb3BhY2l0eSI6MCwidGV4dC1ib3JkZXItd2lkdGgiOjAsInRleHQtYm9yZGVyLXN0eWxlIjoic29saWQiLCJ0ZXh0LWJvcmRlci1jb2xvciI6IiMwMDAiLCJmb250LWZhbWlseSI6IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiLCJmb250LXN0eWxlIjoibm9ybWFsIiwiZm9udC13ZWlnaHQiOiJub3JtYWwiLCJmb250LXNpemUiOjE2LCJtaW4tem9vbWVkLWZvbnQtc2l6ZSI6MCwidGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJzb3VyY2UtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJ0YXJnZXQtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLHZpc2liaWxpdHk6InZpc2libGUiLGRpc3BsYXk6ImVsZW1lbnQiLG9wYWNpdHk6MSwiei1jb21wb3VuZC1kZXB0aCI6ImF1dG8iLCJ6LWluZGV4LWNvbXBhcmUiOiJhdXRvIiwiei1pbmRleCI6MCxsYWJlbDoiIiwidGV4dC1tYXJnaW4teCI6MCwidGV4dC1tYXJnaW4teSI6MCwic291cmNlLWxhYmVsIjoiIiwic291cmNlLXRleHQtb2Zmc2V0IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teCI6MCwic291cmNlLXRleHQtbWFyZ2luLXkiOjAsInRhcmdldC1sYWJlbCI6IiIsInRhcmdldC10ZXh0LW9mZnNldCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXgiOjAsInRhcmdldC10ZXh0LW1hcmdpbi15IjowLCJvdmVybGF5LW9wYWNpdHkiOjAsIm92ZXJsYXktY29sb3IiOiIjMDAwIiwib3ZlcmxheS1wYWRkaW5nIjoxMCwib3ZlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInRyYW5zaXRpb24tcHJvcGVydHkiOiJub25lIiwidHJhbnNpdGlvbi1kdXJhdGlvbiI6MCwidHJhbnNpdGlvbi1kZWxheSI6MCwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiJsaW5lYXIiLCJiYWNrZ3JvdW5kLWJsYWNrZW4iOjAsImJhY2tncm91bmQtY29sb3IiOiIjOTk5IiwiYmFja2dyb3VuZC1maWxsIjoic29saWQiLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UiOiJub25lIiwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiI6ImFub255bW91cyIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCI6Imluc2lkZSIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIjoieWVzIiwiYmFja2dyb3VuZC1wb3NpdGlvbi14IjoiNTAlIiwiYmFja2dyb3VuZC1wb3NpdGlvbi15IjoiNTAlIiwiYmFja2dyb3VuZC1vZmZzZXQteCI6MCwiYmFja2dyb3VuZC1vZmZzZXQteSI6MCwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1yZXBlYXQiOiJuby1yZXBlYXQiLCJiYWNrZ3JvdW5kLWZpdCI6Im5vbmUiLCJiYWNrZ3JvdW5kLWNsaXAiOiJub2RlIiwiYmFja2dyb3VuZC13aWR0aCI6ImF1dG8iLCJiYWNrZ3JvdW5kLWhlaWdodCI6ImF1dG8iLCJib3JkZXItY29sb3IiOiIjMDAwIiwiYm9yZGVyLW9wYWNpdHkiOjEsImJvcmRlci13aWR0aCI6MCwiYm9yZGVyLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihxLFMpe2Zvcih2YXIgRz0xO0c8PSRmLnBpZUJhY2tncm91bmROO0crKyl7dmFyIFc9Uy5uYW1lLnJlcGxhY2UoInt7aX19IixHKSxldD1TLnZhbHVlO3FbV109ZXR9cmV0dXJuIHF9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInRheGktdHVybiI6IjUwJSIsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn1dLnJlZHVjZShmdW5jdGlvbihxLFMpe3JldHVybiAkZi5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFc9RysiLSIrUy5uYW1lLGV0PVMudmFsdWU7cVtXXT1ldH0pLHF9LHt9KSkseD17fSxUPTA7VDx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1QrKyl7dmFyIEE9dGhpcy5wcm9wZXJ0aWVzW1RdO2lmKCFBLnBvaW50c1RvKXt2YXIgRD1BLm5hbWUsTz1nW0RdLCQ9dGhpcy5wYXJzZShELE8pO3hbRF09JH19cmV0dXJuIHkuZGVmYXVsdFByb3BlcnRpZXM9eCx5LmRlZmF1bHRQcm9wZXJ0aWVzfSwkZi5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgbDk9e307bDkucGFyc2U9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcztpZih5dChnKSlyZXR1cm4gQS5wYXJzZUltcGxXYXJuKHksZyx4LFQpO3ZhciBEPVQ9PT0ibWFwcGluZyJ8fFQ9PT0hMHx8VD09PSExfHxUPT1udWxsPyJkb250Y2FyZSI6VCxPPXg/InQiOiJmIiwkPSIiK2cscT1lZCh5LCQsTyxEKSxTPUEucHJvcENhY2hlPUEucHJvcENhY2hlfHxbXSxHO3JldHVybihHPVNbcV0pfHwoRz1TW3FdPUEucGFyc2VJbXBsV2Fybih5LGcseCxUKSksKHh8fFQ9PT0ibWFwcGluZyIpJiYoRz0kYihHKSxHJiYoRy52YWx1ZT0kYihHLnZhbHVlKSkpLEd9LGw5LnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcy5wYXJzZUltcGwoeSxnLHgsVCk7cmV0dXJuIUEmJmchPW51bGwmJlNjKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHksIjogIikuY29uY2F0KGcsImAgaXMgaW52YWxpZCIpKSxBJiYoQS5uYW1lPT09IndpZHRoInx8QS5uYW1lPT09ImhlaWdodCIpJiZnPT09ImxhYmVsIiYmU2MoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK0EubmFtZSsiYCIpLEF9LGw5LnBhcnNlSW1wbD1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzO3k9cG4oeSk7dmFyIEQ9QS5wcm9wZXJ0aWVzW3ldLE89ZywkPUEudHlwZXM7aWYoIUR8fGc9PT12b2lkIDApcmV0dXJuIG51bGw7RC5hbGlhcyYmKEQ9RC5wb2ludHNUbyx5PUQubmFtZSk7dmFyIHE9bXQoZyk7cSYmKGc9Zy50cmltKCkpO3ZhciBTPUQudHlwZTtpZighUylyZXR1cm4gbnVsbDtpZih4JiYoZz09PSIifHxnPT09bnVsbCkpcmV0dXJue25hbWU6eSx2YWx1ZTpnLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHl0KGcpKXJldHVybntuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczp4fTt2YXIgRyxXO2lmKCEoIXF8fFR8fGcubGVuZ3RoPDd8fGdbMV0hPT0iYSIpKXtpZihnLmxlbmd0aD49NyYmZ1swXT09PSJkIiYmKEc9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMoZykpKXtpZih4KXJldHVybiExO3ZhciBldD0kLmRhdGE7cmV0dXJue25hbWU6eSx2YWx1ZTpHLHN0clZhbHVlOiIiK2csbWFwcGVkOmV0LGZpZWxkOkdbMV0sYnlwYXNzOnh9fWVsc2UgaWYoZy5sZW5ndGg+PTEwJiZnWzBdPT09Im0iJiYoVz1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhnKSkpe2lmKHh8fFMubXVsdGlwbGUpcmV0dXJuITE7dmFyIGF0PSQubWFwRGF0YTtpZighKFMuY29sb3J8fFMubnVtYmVyKSlyZXR1cm4hMTt2YXIgbHQ9dGhpcy5wYXJzZSh5LFdbNF0pO2lmKCFsdHx8bHQubWFwcGVkKXJldHVybiExO3ZhciBmdD10aGlzLnBhcnNlKHksV1s1XSk7aWYoIWZ0fHxmdC5tYXBwZWQpcmV0dXJuITE7aWYobHQucGZWYWx1ZT09PWZ0LnBmVmFsdWV8fGx0LnN0clZhbHVlPT09ZnQuc3RyVmFsdWUpcmV0dXJuIFNjKCJgIit5KyI6ICIrZysiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreSsiOiAiK2x0LnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh5LGx0LnN0clZhbHVlKTtpZihTLmNvbG9yKXt2YXIgQXQ9bHQudmFsdWUsa3Q9ZnQudmFsdWUsTXQ9QXRbMF09PT1rdFswXSYmQXRbMV09PT1rdFsxXSYmQXRbMl09PT1rdFsyXSYmKEF0WzNdPT09a3RbM118fChBdFszXT09bnVsbHx8QXRbM109PT0xKSYmKGt0WzNdPT1udWxsfHxrdFszXT09PTEpKTtpZihNdClyZXR1cm4hMX1yZXR1cm57bmFtZTp5LHZhbHVlOlcsc3RyVmFsdWU6IiIrZyxtYXBwZWQ6YXQsZmllbGQ6V1sxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFdbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoV1szXSksdmFsdWVNaW46bHQudmFsdWUsdmFsdWVNYXg6ZnQudmFsdWUsYnlwYXNzOnh9fX1pZihTLm11bHRpcGxlJiZUIT09Im11bHRpcGxlIil7dmFyIER0O2lmKHE/RHQ9Zy5zcGxpdCgvXHMrLyk6ZHQoZyk/RHQ9ZzpEdD1bZ10sUy5ldmVuTXVsdGlwbGUmJkR0Lmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyIGp0PVtdLFp0PVtdLEt0PVtdLHp0PSIiLGVlPSExLFZ0PTA7VnQ8RHQubGVuZ3RoO1Z0Kyspe3ZhciBmZT1BLnBhcnNlKHksRHRbVnRdLHgsIm11bHRpcGxlIik7ZWU9ZWV8fG10KGZlLnZhbHVlKSxqdC5wdXNoKGZlLnZhbHVlKSxLdC5wdXNoKGZlLnBmVmFsdWUhPW51bGw/ZmUucGZWYWx1ZTpmZS52YWx1ZSksWnQucHVzaChmZS51bml0cyksenQrPShWdD4wPyIgIjoiIikrZmUuc3RyVmFsdWV9cmV0dXJuIFMudmFsaWRhdGUmJiFTLnZhbGlkYXRlKGp0LFp0KT9udWxsOlMuc2luZ2xlRW51bSYmZWU/anQubGVuZ3RoPT09MSYmbXQoanRbMF0pP3tuYW1lOnksdmFsdWU6anRbMF0sc3RyVmFsdWU6anRbMF0sYnlwYXNzOnh9Om51bGw6e25hbWU6eSx2YWx1ZTpqdCxwZlZhbHVlOkt0LHN0clZhbHVlOnp0LGJ5cGFzczp4LHVuaXRzOlp0fX12YXIgZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIGZyPTA7ZnI8Uy5lbnVtcy5sZW5ndGg7ZnIrKyl7dmFyIEpyPVMuZW51bXNbZnJdO2lmKEpyPT09ZylyZXR1cm57bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9O2lmKFMubnVtYmVyKXt2YXIgbmUsUGU9InB4IjtpZihTLnVuaXRzJiYobmU9Uy51bml0cyksUy5pbXBsaWNpdFVuaXRzJiYoUGU9Uy5pbXBsaWNpdFVuaXRzKSwhUy51bml0bGVzcylpZihxKXt2YXIgcGU9InB4fGVtIisoUy5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTtuZSYmKHBlPW5lKTt2YXIgYm49Zy5tYXRjaCgiXigiK0tlKyIpKCIrcGUrIik/JCIpO2JuJiYoZz1iblsxXSxuZT1iblsyXXx8UGUpfWVsc2UoIW5lfHxTLmltcGxpY2l0VW5pdHMpJiYobmU9UGUpO2lmKGc9cGFyc2VGbG9hdChnKSxpc05hTihnKSYmUy5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihnKSYmUy5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZz1PLGdlKCk7aWYoUy5pbnRlZ2VyJiYhcHQoZyl8fFMubWluIT09dm9pZCAwJiYoZzxTLm1pbnx8Uy5zdHJpY3RNaW4mJmc9PT1TLm1pbil8fFMubWF4IT09dm9pZCAwJiYoZz5TLm1heHx8Uy5zdHJpY3RNYXgmJmc9PT1TLm1heCkpcmV0dXJuIG51bGw7dmFyIHplPXtuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiIitnKyhuZXx8IiIpLHVuaXRzOm5lLGJ5cGFzczp4fTtyZXR1cm4gUy51bml0bGVzc3x8bmUhPT0icHgiJiZuZSE9PSJlbSI/emUucGZWYWx1ZT1nOnplLnBmVmFsdWU9bmU9PT0icHgifHwhbmU/Zzp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZywobmU9PT0ibXMifHxuZT09PSJzIikmJih6ZS5wZlZhbHVlPW5lPT09Im1zIj9nOjFlMypnKSwobmU9PT0iZGVnInx8bmU9PT0icmFkIikmJih6ZS5wZlZhbHVlPW5lPT09InJhZCI/Zzp4WShnKSksbmU9PT0iJSImJih6ZS5wZlZhbHVlPWcvMTAwKSx6ZX1lbHNlIGlmKFMucHJvcExpc3Qpe3ZhciBWZT1bXSxFbj0iIitnO2lmKEVuIT09Im5vbmUiKXtmb3IodmFyIERuPUVuLnNwbGl0KC9ccyosXHMqfFxzKy8pLEtuPTA7S248RG4ubGVuZ3RoO0tuKyspe3ZhciBTbj1EbltLbl0udHJpbSgpO0EucHJvcGVydGllc1tTbl0/VmUucHVzaChTbik6U2MoImAiK1NuKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihWZS5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnksdmFsdWU6VmUsc3RyVmFsdWU6VmUubGVuZ3RoPT09MD8ibm9uZSI6VmUuam9pbigiICIpLGJ5cGFzczp4fX1lbHNlIGlmKFMuY29sb3Ipe3ZhciBXbj1PbyhnKTtyZXR1cm4gV24/e25hbWU6eSx2YWx1ZTpXbixwZlZhbHVlOlduLHN0clZhbHVlOiJyZ2IoIitXblswXSsiLCIrV25bMV0rIiwiK1duWzJdKyIpIixieXBhc3M6eH06bnVsbH1lbHNlIGlmKFMucmVnZXh8fFMucmVnZXhlcyl7aWYoUy5lbnVtcyl7dmFyIHJyPWdlKCk7aWYocnIpcmV0dXJuIHJyfWZvcih2YXIgdnI9Uy5yZWdleGVzP1MucmVnZXhlczpbUy5yZWdleF0sdXI9MDt1cjx2ci5sZW5ndGg7dXIrKyl7dmFyIHRyPW5ldyBSZWdFeHAodnJbdXJdKSx3bj10ci5leGVjKGcpO2lmKHduKXJldHVybntuYW1lOnksdmFsdWU6Uy5zaW5nbGVSZWdleE1hdGNoVmFsdWU/d25bMV06d24sc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gUy5zdHJpbmc/e25hbWU6eSx2YWx1ZToiIitnLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9OlMuZW51bXM/Z2UoKTpudWxsfTt2YXIgZDE9ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7aWYoIU50KGcpKXtibCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTpnLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LGcxPWQxLnByb3RvdHlwZTtnMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LGcxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuX3ByaXZhdGUsZz15LmN5LHg9Zy5lbGVtZW50cygpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl0aGlzW1RdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx5LmNvbnRleHRTdHlsZXM9e30seS5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKHgsITApLHguZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgRD1BWzBdLl9wcml2YXRlO0Quc3R5bGVEaXJ0eT0hMCxELmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxnMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LGcxLmNvcmU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3ldfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh5KX0sZzEuc2VsZWN0b3I9ZnVuY3Rpb24oeSl7dmFyIGc9eT09PSJjb3JlIj9udWxsOm5ldyB5bSh5KSx4PXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbeF09e3NlbGVjdG9yOmcscHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Onh9LHRoaXN9LGcxLmNzcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMsZz1hcmd1bWVudHM7aWYoZy5sZW5ndGg9PT0xKWZvcih2YXIgeD1nWzBdLFQ9MDtUPHkucHJvcGVydGllcy5sZW5ndGg7VCsrKXt2YXIgQT15LnByb3BlcnRpZXNbVF0sRD14W0EubmFtZV07RD09PXZvaWQgMCYmKEQ9eFtNZShBLm5hbWUpXSksRCE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKEEubmFtZSxEKX1lbHNlIGcubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKGdbMF0sZ1sxXSk7cmV0dXJuIHRoaXN9LGcxLnN0eWxlPWcxLmNzcyxnMS5jc3NSdWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5wYXJzZSh5LGcpO2lmKHgpe3ZhciBUPXRoaXMubGVuZ3RoLTE7dGhpc1tUXS5wcm9wZXJ0aWVzLnB1c2goeCksdGhpc1tUXS5wcm9wZXJ0aWVzW3gubmFtZV09eCx4Lm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmeC52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSx4Lm1hcHBlZCYmdGhpc1tUXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goeCk7dmFyIEE9IXRoaXNbVF0uc2VsZWN0b3I7QSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3gubmFtZV09eCl9cmV0dXJuIHRoaXN9LGcxLmFwcGVuZD1mdW5jdGlvbih5KXtyZXR1cm4gcXQoeSk/eS5hcHBlbmRUb1N0eWxlKHRoaXMpOmR0KHkpP3RoaXMuYXBwZW5kRnJvbUpzb24oeSk6bXQoeSkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh5KSx0aGlzfSxkMS5mcm9tSnNvbj1mdW5jdGlvbih5LGcpe3ZhciB4PW5ldyBkMSh5KTtyZXR1cm4geC5mcm9tSnNvbihnKSx4fSxkMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHksZyl7cmV0dXJuIG5ldyBkMSh5KS5mcm9tU3RyaW5nKGcpfSxbZjEsTmssSEwsSGIsdTksR0wsJGYsbDldLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoZzEseSl9KSxkMS50eXBlcz1nMS50eXBlcyxkMS5wcm9wZXJ0aWVzPWcxLnByb3BlcnRpZXMsZDEucHJvcGVydHlHcm91cHM9ZzEucHJvcGVydHlHcm91cHMsZDEucHJvcGVydHlHcm91cE5hbWVzPWcxLnByb3BlcnR5R3JvdXBOYW1lcyxkMS5wcm9wZXJ0eUdyb3VwS2V5cz1nMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgU0o9e3N0eWxlOmZ1bmN0aW9uKGcpe2lmKGcpe3ZhciB4PXRoaXMuc2V0U3R5bGUoZyk7eC51cGRhdGUoKX1yZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZX0sc2V0U3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gcXQoZyk/eC5zdHlsZT1nLmdlbmVyYXRlU3R5bGUodGhpcyk6ZHQoZyk/eC5zdHlsZT1kMS5mcm9tSnNvbih0aGlzLGcpOm10KGcpP3guc3R5bGU9ZDEuZnJvbVN0cmluZyh0aGlzLGcpOnguc3R5bGU9ZDEodGhpcykseC5zdHlsZX0sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9fSxBSj0ic2luZ2xlIixBMz17YXV0b2xvY2s6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSxhdXRvdW5ncmFiaWZ5OmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LGF1dG91bnNlbGVjdGlmeTpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sc2VsZWN0aW9uVHlwZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguc2VsZWN0aW9uVHlwZT09bnVsbCYmKHguc2VsZWN0aW9uVHlwZT1BSiksZyE9PXZvaWQgMCkoZz09PSJhZGRpdGl2ZSJ8fGc9PT0ic2luZ2xlIikmJih4LnNlbGVjdGlvblR5cGU9Zyk7ZWxzZSByZXR1cm4geC5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9dGhpcy5fcHJpdmF0ZS5wYW4sVCxBLEQsTywkO3N3aXRjaChnLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4O2Nhc2UgMTppZihtdChnWzBdKSlyZXR1cm4gVD1nWzBdLHhbVF07aWYoaHQoZ1swXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO0Q9Z1swXSxPPUQueCwkPUQueSxYKE8pJiYoeC54PU8pLFgoJCkmJih4Lnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7VD1nWzBdLEE9Z1sxXSwoVD09PSJ4Inx8VD09PSJ5IikmJlgoQSkmJih4W1RdPUEpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLEE9dGhpcy5fcHJpdmF0ZS5wYW4sRCxPLCQscSxTO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChULmxlbmd0aCl7Y2FzZSAxOmh0KGcpJiYoJD1UWzBdLHE9JC54LFM9JC55LFgocSkmJihBLngrPXEpLFgoUykmJihBLnkrPVMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpEPWcsTz14LChEPT09IngifHxEPT09InkiKSYmWChPKSYmKEFbRF0rPU8pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZyx4KTtpZihUKXt2YXIgQT10aGlzLl9wcml2YXRlO0Euem9vbT1ULnpvb20sQS5wYW49VC5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihnLHgpe2lmKFgoZykmJng9PT12b2lkIDAmJih4PWcsZz12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFQ7aWYobXQoZykpe3ZhciBBPWc7Zz10aGlzLiQoQSl9ZWxzZSBpZihIdChnKSl7dmFyIEQ9ZztUPXt4MTpELngxLHkxOkQueTEseDI6RC54Mix5MjpELnkyfSxULnc9VC54Mi1ULngxLFQuaD1ULnkyLVQueTF9ZWxzZSB4dChnKXx8KGc9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoISh4dChnKSYmZy5lbXB0eSgpKSl7VD1UfHxnLmJvdW5kaW5nQm94KCk7dmFyIE89dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxxO2lmKHg9WCh4KT94OjAsIWlzTmFOKE8pJiYhaXNOYU4oJCkmJk8+MCYmJD4wJiYhaXNOYU4oVC53KSYmIWlzTmFOKFQuaCkmJlQudz4wJiZULmg+MCl7cT1NYXRoLm1pbigoTy0yKngpL1QudywoJC0yKngpL1QuaCkscT1xPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206cSxxPXE8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpxO3ZhciBTPXt4OihPLXEqKFQueDErVC54MikpLzIseTooJC1xKihULnkxK1QueTIpKS8yfTtyZXR1cm57em9vbTpxLHBhbjpTfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcy5fcHJpdmF0ZTtpZih4PT1udWxsKXt2YXIgQT1nO2c9QS5taW4seD1BLm1heH1yZXR1cm4gWChnKSYmWCh4KSYmZzw9eD8oVC5taW5ab29tPWcsVC5tYXhab29tPXgpOlgoZykmJng9PT12b2lkIDAmJmc8PVQubWF4Wm9vbT9ULm1pblpvb209ZzpYKHgpJiZnPT09dm9pZCAwJiZ4Pj1ULm1pblpvb20mJihULm1heFpvb209eCksdGhpc30sbWluWm9vbTpmdW5jdGlvbihnKXtyZXR1cm4gZz09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjpnfSl9LG1heFpvb206ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6Z30pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wYW4sQT14Lnpvb20sRCxPLCQ9ITE7aWYoeC56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgoZyk/Tz1nOmh0KGcpJiYoTz1nLmxldmVsLGcucG9zaXRpb24hPW51bGw/RD1PVChnLnBvc2l0aW9uLEEsVCk6Zy5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoRD1nLnJlbmRlcmVkUG9zaXRpb24pLEQhPW51bGwmJiF4LnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLE89Tz54Lm1heFpvb20/eC5tYXhab29tOk8sTz1PPHgubWluWm9vbT94Lm1pblpvb206TywkfHwhWChPKXx8Tz09PUF8fEQhPW51bGwmJighWChELngpfHwhWChELnkpKSlyZXR1cm4gbnVsbDtpZihEIT1udWxsKXt2YXIgcT1ULFM9QSxHPU8sVz17eDotRy9TKihELngtcS54KStELngseTotRy9TKihELnktcS55KStELnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206RyxwYW46V319ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOk8scGFuOlR9fSx6b29tOmZ1bmN0aW9uKGcpe2lmKGc9PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgeD10aGlzLmdldFpvb21lZFZpZXdwb3J0KGcpLFQ9dGhpcy5fcHJpdmF0ZTtyZXR1cm4geD09bnVsbHx8IXguem9vbWVkP3RoaXM6KFQuem9vbT14Lnpvb20seC5wYW5uZWQmJihULnBhbi54PXgucGFuLngsVC5wYW4ueT14LnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyh4LnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPSEwLEE9ITAsRD1bXSxPPSExLCQ9ITE7aWYoIWcpcmV0dXJuIHRoaXM7aWYoWChnLnpvb20pfHwoVD0hMSksaHQoZy5wYW4pfHwoQT0hMSksIVQmJiFBKXJldHVybiB0aGlzO2lmKFQpe3ZhciBxPWcuem9vbTtxPHgubWluWm9vbXx8cT54Lm1heFpvb218fCF4Lnpvb21pbmdFbmFibGVkP089ITA6KHguem9vbT1xLEQucHVzaCgiem9vbSIpKX1pZihBJiYoIU98fCFnLmNhbmNlbE9uRmFpbGVkWm9vbSkmJngucGFubmluZ0VuYWJsZWQpe3ZhciBTPWcucGFuO1goUy54KSYmKHgucGFuLng9Uy54LCQ9ITEpLFgoUy55KSYmKHgucGFuLnk9Uy55LCQ9ITEpLCR8fEQucHVzaCgicGFuIil9cmV0dXJuIEQubGVuZ3RoPjAmJihELnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KEQuam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuZ2V0Q2VudGVyUGFuKGcpO3JldHVybiB4JiYodGhpcy5fcHJpdmF0ZS5wYW49eCx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24oZyx4KXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihtdChnKSl7dmFyIFQ9ZztnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWVsc2UgeHQoZyl8fChnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKGcubGVuZ3RoIT09MCl7dmFyIEE9Zy5ib3VuZGluZ0JveCgpLEQ9dGhpcy53aWR0aCgpLE89dGhpcy5oZWlnaHQoKTt4PXg9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOng7dmFyICQ9e3g6KEQteCooQS54MStBLngyKSkvMix5OihPLXgqKEEueTErQS55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGUseD1nLmNvbnRhaW5lcjtyZXR1cm4gZy5zaXplQ2FjaGU9Zy5zaXplQ2FjaGV8fCh4P2Z1bmN0aW9uKCl7dmFyIFQ9Ui5nZXRDb21wdXRlZFN0eWxlKHgpLEE9ZnVuY3Rpb24oTyl7cmV0dXJuIHBhcnNlRmxvYXQoVC5nZXRQcm9wZXJ0eVZhbHVlKE8pKX07cmV0dXJue3dpZHRoOnguY2xpZW50V2lkdGgtQSgicGFkZGluZy1sZWZ0IiktQSgicGFkZGluZy1yaWdodCIpLGhlaWdodDp4LmNsaWVudEhlaWdodC1BKCJwYWRkaW5nLXRvcCIpLUEoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLndpZHRofSxoZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSxleHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLnBhbix4PXRoaXMuX3ByaXZhdGUuem9vbSxUPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxBPXt4MTooVC54MS1nLngpL3gseDI6KFQueDItZy54KS94LHkxOihULnkxLWcueSkveCx5MjooVC55Mi1nLnkpL3h9O3JldHVybiBBLnc9QS54Mi1BLngxLEEuaD1BLnkyLUEueTEsQX0scmVuZGVyZWRFeHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndpZHRoKCkseD10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6Zyx5Mjp4LHc6ZyxoOnh9fSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOmZ1bmN0aW9uKGcpe2lmKGcpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfX07QTMuY2VudHJlPUEzLmNlbnRlcixBMy5hdXRvbG9ja05vZGVzPUEzLmF1dG9sb2NrLEEzLmF1dG91bmdyYWJpZnlOb2Rlcz1BMy5hdXRvdW5ncmFiaWZ5O3ZhciBQaz17ZGF0YTpBYy5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6QWMucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07UGsuYXR0cj1Qay5kYXRhLFBrLnJlbW92ZUF0dHI9UGsucmVtb3ZlRGF0YTt2YXIgRms9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztnPW1lKHt9LGcpO3ZhciBUPWcuY29udGFpbmVyO1QmJiFVKFQpJiZVKFRbMF0pJiYoVD1UWzBdKTt2YXIgQT1UP1QuX2N5cmVnOm51bGw7QT1BfHx7fSxBJiZBLmN5JiYoQS5jeS5kZXN0cm95KCksQT17fSk7dmFyIEQ9QS5yZWFkaWVzPUEucmVhZGllc3x8W107VCYmKFQuX2N5cmVnPUEpLEEuY3k9eDt2YXIgTz1SIT09dm9pZCAwJiZUIT09dm9pZCAwJiYhZy5oZWFkbGVzcywkPWc7JC5sYXlvdXQ9bWUoe25hbWU6Tz8iZ3JpZCI6Im51bGwifSwkLmxheW91dCksJC5yZW5kZXJlcj1tZSh7bmFtZTpPPyJjYW52YXMiOiJudWxsIn0sJC5yZW5kZXJlcik7dmFyIHE9ZnVuY3Rpb24obHQsZnQsQXQpe3JldHVybiBmdCE9PXZvaWQgMD9mdDpBdCE9PXZvaWQgMD9BdDpsdH0sUz10aGlzLl9wcml2YXRlPXtjb250YWluZXI6VCxyZWFkeTohMSxvcHRpb25zOiQsZWxlbWVudHM6bmV3IGpmKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyBqZih0aGlzKSxkYXRhOiQuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDpxKCEwLCQuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDpxKCEwLCQudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDpxKCEwLCQucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDpxKCEwLCQudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnEoITAsJC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazpxKCExLCQuYXV0b2xvY2ssJC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnEoITEsJC5hdXRvdW5ncmFiaWZ5LCQuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6cSghMSwkLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOiQuc3R5bGVFbmFibGVkPT09dm9pZCAwP086JC5zdHlsZUVuYWJsZWQsem9vbTpYKCQuem9vbSk/JC56b29tOjEscGFuOnt4Omh0KCQucGFuKSYmWCgkLnBhbi54KT8kLnBhbi54OjAseTpodCgkLnBhbikmJlgoJC5wYW4ueSk/JC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTpxKDI1MCwkLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUoJC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOiQubWluWm9vbSxtYXg6JC5tYXhab29tfSk7dmFyIEc9ZnVuY3Rpb24obHQsZnQpe3ZhciBBdD1sdC5zb21lKEl0KTtpZihBdClyZXR1cm4gSzUuYWxsKGx0KS50aGVuKGZ0KTtmdChsdCl9O1Muc3R5bGVFbmFibGVkJiZ4LnNldFN0eWxlKFtdKTt2YXIgVz1tZSh7fSwkLCQucmVuZGVyZXIpO3guaW5pdFJlbmRlcmVyKFcpO3ZhciBldD1mdW5jdGlvbihsdCxmdCxBdCl7eC5ub3RpZmljYXRpb25zKCExKTt2YXIga3Q9eC5tdXRhYmxlRWxlbWVudHMoKTtrdC5sZW5ndGg+MCYma3QucmVtb3ZlKCksbHQhPW51bGwmJihodChsdCl8fGR0KGx0KSkmJnguYWRkKGx0KSx4Lm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKER0KXt4Lm5vdGlmaWNhdGlvbnMoITApLHguZW1pdChEdCkseC5vbmUoImxvYWQiLGZ0KSx4LmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXt4Lm9uZSgiZG9uZSIsQXQpLHguZW1pdCgiZG9uZSIpfSk7dmFyIE10PW1lKHt9LHguX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO010LmVsZXM9eC5lbGVtZW50cygpLHgubGF5b3V0KE10KS5ydW4oKX07RyhbJC5zdHlsZSwkLmVsZW1lbnRzXSxmdW5jdGlvbihhdCl7dmFyIGx0PWF0WzBdLGZ0PWF0WzFdO1Muc3R5bGVFbmFibGVkJiZ4LnN0eWxlKCkuYXBwZW5kKGx0KSxldChmdCxmdW5jdGlvbigpe3guc3RhcnRBbmltYXRpb25Mb29wKCksUy5yZWFkeT0hMCx5dCgkLnJlYWR5KSYmeC5vbigicmVhZHkiLCQucmVhZHkpO2Zvcih2YXIgQXQ9MDtBdDxELmxlbmd0aDtBdCsrKXt2YXIga3Q9RFtBdF07eC5vbigicmVhZHkiLGt0KX1BJiYoQS5yZWFkaWVzPVtdKSx4LmVtaXQoInJlYWR5Iil9LCQuZG9uZSl9KX0saDk9RmsucHJvdG90eXBlO21lKGg5LHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJjb3JlIn0saXNSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LHJlYWR5OmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZyk6dGhpcy5vbigicmVhZHkiLGcpLHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKCFnLmRlc3Ryb3llZCgpKXJldHVybiBnLnN0b3BBbmltYXRpb25Mb29wKCksZy5kZXN0cm95UmVuZGVyZXIoKSx0aGlzLmVtaXQoImRlc3Ryb3kiKSxnLl9wcml2YXRlLmRlc3Ryb3llZD0hMCxnfSxoYXNFbGVtZW50V2l0aElkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZyl9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGcpfSxoYXNDb21wb3VuZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30saGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LHN0eWxlRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sYWRkVG9Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGcpLHRoaXN9LHJlbW92ZUZyb21Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZyksdGhpc30sY29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyfHxudWxsfSxtb3VudDpmdW5jdGlvbihnKXtpZihnIT1udWxsKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxBPVQub3B0aW9ucztyZXR1cm4hVShnKSYmVShnWzBdKSYmKGc9Z1swXSkseC5zdG9wQW5pbWF0aW9uTG9vcCgpLHguZGVzdHJveVJlbmRlcmVyKCksVC5jb250YWluZXI9ZyxULnN0eWxlRW5hYmxlZD0hMCx4LmludmFsaWRhdGVTaXplKCkseC5pbml0UmVuZGVyZXIobWUoe30sQSxBLnJlbmRlcmVyLHtuYW1lOkEucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjpBLnJlbmRlcmVyLm5hbWV9KSkseC5zdGFydEFuaW1hdGlvbkxvb3AoKSx4LnN0eWxlKEEuc3R5bGUpLHguZW1pdCgibW91bnQiKSx4fX0sdW5tb3VudDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIGcuc3RvcEFuaW1hdGlvbkxvb3AoKSxnLmRlc3Ryb3lSZW5kZXJlcigpLGcuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGcuZW1pdCgidW5tb3VudCIpLGd9LG9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gJGIodGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sanNvbjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxBPXgubXV0YWJsZUVsZW1lbnRzKCksRD1mdW5jdGlvbihqdCl7cmV0dXJuIHguZ2V0RWxlbWVudEJ5SWQoanQuaWQoKSl9O2lmKGh0KGcpKXtpZih4LnN0YXJ0QmF0Y2goKSxnLmVsZW1lbnRzKXt2YXIgTz17fSwkPWZ1bmN0aW9uKGp0LFp0KXtmb3IodmFyIEt0PVtdLHp0PVtdLGVlPTA7ZWU8anQubGVuZ3RoO2VlKyspe3ZhciBWdD1qdFtlZV07aWYoIVZ0LmRhdGEuaWQpe1NjKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBmZT0iIitWdC5kYXRhLmlkLGdlPXguZ2V0RWxlbWVudEJ5SWQoZmUpO09bZmVdPSEwLGdlLmxlbmd0aCE9PTA/enQucHVzaCh7ZWxlOmdlLGpzb246VnR9KTooWnQmJihWdC5ncm91cD1adCksS3QucHVzaChWdCkpfXguYWRkKEt0KTtmb3IodmFyIG5lPTA7bmU8enQubGVuZ3RoO25lKyspe3ZhciBQZT16dFtuZV0scGU9UGUuZWxlLGJuPVBlLmpzb247cGUuanNvbihibil9fTtpZihkdChnLmVsZW1lbnRzKSkkKGcuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciBxPVsibm9kZXMiLCJlZGdlcyJdLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIEc9cVtTXSxXPWcuZWxlbWVudHNbR107ZHQoVykmJiQoVyxHKX12YXIgZXQ9eC5jb2xsZWN0aW9uKCk7QS5maWx0ZXIoZnVuY3Rpb24oRHQpe3JldHVybiFPW0R0LmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihEdCl7RHQuaXNQYXJlbnQoKT9ldC5tZXJnZShEdCk6RHQucmVtb3ZlKCl9KSxldC5mb3JFYWNoKGZ1bmN0aW9uKER0KXtyZXR1cm4gRHQuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSksZXQuZm9yRWFjaChmdW5jdGlvbihEdCl7cmV0dXJuIEQoRHQpLnJlbW92ZSgpfSl9Zy5zdHlsZSYmeC5zdHlsZShnLnN0eWxlKSxnLnpvb20hPW51bGwmJmcuem9vbSE9PVQuem9vbSYmeC56b29tKGcuem9vbSksZy5wYW4mJihnLnBhbi54IT09VC5wYW4ueHx8Zy5wYW4ueSE9PVQucGFuLnkpJiZ4LnBhbihnLnBhbiksZy5kYXRhJiZ4LmRhdGEoZy5kYXRhKTtmb3IodmFyIGF0PVsibWluWm9vbSIsIm1heFpvb20iLCJ6b29taW5nRW5hYmxlZCIsInVzZXJab29taW5nRW5hYmxlZCIsInBhbm5pbmdFbmFibGVkIiwidXNlclBhbm5pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG9sb2NrIiwiYXV0b3VuZ3JhYmlmeSIsImF1dG91bnNlbGVjdGlmeSIsIm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUiXSxsdD0wO2x0PGF0Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9YXRbbHRdO2dbZnRdIT1udWxsJiZ4W2Z0XShnW2Z0XSl9cmV0dXJuIHguZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIEF0PSEhZyxrdD17fTtBdD9rdC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKER0KXtyZXR1cm4gRHQuanNvbigpfSk6KGt0LmVsZW1lbnRzPXt9LEEuZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIGp0PUR0Lmdyb3VwKCk7a3QuZWxlbWVudHNbanRdfHwoa3QuZWxlbWVudHNbanRdPVtdKSxrdC5lbGVtZW50c1tqdF0ucHVzaChEdC5qc29uKCkpfSkpLHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkJiYoa3Quc3R5bGU9eC5zdHlsZSgpLmpzb24oKSksa3QuZGF0YT0kYih4LmRhdGEoKSk7dmFyIE10PVQub3B0aW9ucztyZXR1cm4ga3Quem9vbWluZ0VuYWJsZWQ9VC56b29taW5nRW5hYmxlZCxrdC51c2VyWm9vbWluZ0VuYWJsZWQ9VC51c2VyWm9vbWluZ0VuYWJsZWQsa3Quem9vbT1ULnpvb20sa3QubWluWm9vbT1ULm1pblpvb20sa3QubWF4Wm9vbT1ULm1heFpvb20sa3QucGFubmluZ0VuYWJsZWQ9VC5wYW5uaW5nRW5hYmxlZCxrdC51c2VyUGFubmluZ0VuYWJsZWQ9VC51c2VyUGFubmluZ0VuYWJsZWQsa3QucGFuPSRiKFQucGFuKSxrdC5ib3hTZWxlY3Rpb25FbmFibGVkPVQuYm94U2VsZWN0aW9uRW5hYmxlZCxrdC5yZW5kZXJlcj0kYihNdC5yZW5kZXJlciksa3QuaGlkZUVkZ2VzT25WaWV3cG9ydD1NdC5oaWRlRWRnZXNPblZpZXdwb3J0LGt0LnRleHR1cmVPblZpZXdwb3J0PU10LnRleHR1cmVPblZpZXdwb3J0LGt0LndoZWVsU2Vuc2l0aXZpdHk9TXQud2hlZWxTZW5zaXRpdml0eSxrdC5tb3Rpb25CbHVyPU10Lm1vdGlvbkJsdXIsa3QubXVsdGlDbGlja0RlYm91bmNlVGltZT1NdC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lLGt0fX19KSxoOS4kaWQ9aDkuZ2V0RWxlbWVudEJ5SWQsW3ZKLGtKLFNCLHpMLG85LFRKLHFMLGM5LFNKLEEzLFBrXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKGg5LHkpfSk7dmFyIExKPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLG1heGltYWw6ITEsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX0sYXg9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LFZMPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iix4KX07ZnVuY3Rpb24gQUIoeSl7dGhpcy5vcHRpb25zPW1lKHt9LExKLHkpfUFCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxBPVQubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oQ2kpe3JldHVybiFDaS5pc1BhcmVudCgpfSksRD1ULE89Zy5kaXJlY3RlZCwkPWcubWF4aW1hbHx8Zy5tYXhpbWFsQWRqdXN0bWVudHM+MCxxPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLFM7aWYoeHQoZy5yb290cykpUz1nLnJvb3RzO2Vsc2UgaWYoZHQoZy5yb290cykpe2Zvcih2YXIgRz1bXSxXPTA7VzxnLnJvb3RzLmxlbmd0aDtXKyspe3ZhciBldD1nLnJvb3RzW1ddLGF0PXguZ2V0RWxlbWVudEJ5SWQoZXQpO0cucHVzaChhdCl9Uz14LmNvbGxlY3Rpb24oRyl9ZWxzZSBpZihtdChnLnJvb3RzKSlTPXguJChnLnJvb3RzKTtlbHNlIGlmKE8pUz1BLnJvb3RzKCk7ZWxzZXt2YXIgbHQ9VC5jb21wb25lbnRzKCk7Uz14LmNvbGxlY3Rpb24oKTtmb3IodmFyIGZ0PWZ1bmN0aW9uKGhpKXt2YXIgZ3M9bHRbaGldLHFpPWdzLm1heERlZ3JlZSghMSksU2k9Z3MuZmlsdGVyKGZ1bmN0aW9uKFVpKXtyZXR1cm4gVWkuZGVncmVlKCExKT09PXFpfSk7Uz1TLmFkZChTaSl9LEF0PTA7QXQ8bHQubGVuZ3RoO0F0KyspZnQoQXQpfXZhciBrdD1bXSxNdD17fSxEdD1mdW5jdGlvbihoaSxncyl7a3RbZ3NdPT1udWxsJiYoa3RbZ3NdPVtdKTt2YXIgcWk9a3RbZ3NdLmxlbmd0aDtrdFtnc10ucHVzaChoaSksVkwoaGkse2luZGV4OnFpLGRlcHRoOmdzfSl9LGp0PWZ1bmN0aW9uKGhpLGdzKXt2YXIgcWk9YXgoaGkpLFNpPXFpLmRlcHRoLFVpPXFpLmluZGV4O2t0W1NpXVtVaV09bnVsbCxEdChoaSxncyl9O0QuYmZzKHtyb290czpTLGRpcmVjdGVkOmcuZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oaGksZ3MscWksU2ksVWkpe3ZhciBHYT1oaVswXSxZcz1HYS5pZCgpO0R0KEdhLFVpKSxNdFtZc109ITB9fSk7Zm9yKHZhciBadD1bXSxLdD0wO0t0PEEubGVuZ3RoO0t0Kyspe3ZhciB6dD1BW0t0XTtNdFt6dC5pZCgpXXx8WnQucHVzaCh6dCl9dmFyIGVlPWZ1bmN0aW9uKGhpKXtmb3IodmFyIGdzPWt0W2hpXSxxaT0wO3FpPGdzLmxlbmd0aDtxaSsrKXt2YXIgU2k9Z3NbcWldO2lmKFNpPT1udWxsKXtncy5zcGxpY2UocWksMSkscWktLTtjb250aW51ZX1WTChTaSx7ZGVwdGg6aGksaW5kZXg6cWl9KX19LFZ0PWZ1bmN0aW9uKCl7Zm9yKHZhciBoaT0wO2hpPGt0Lmxlbmd0aDtoaSsrKWVlKGhpKX0sZmU9ZnVuY3Rpb24oaGksZ3Mpe2Zvcih2YXIgcWk9YXgoaGkpLFNpPWhpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuaXNOb2RlKCkmJlQuaGFzKFF0KX0pLFVpPS0xLEdhPWhpLmlkKCksWXM9MDtZczxTaS5sZW5ndGg7WXMrKyl7dmFyIHpzPVNpW1lzXSxFcj1heCh6cyk7VWk9TWF0aC5tYXgoVWksRXIuZGVwdGgpfXJldHVybiBxaS5kZXB0aDw9VWk/Z3NbR2FdP251bGw6KGp0KGhpLFVpKzEpLGdzW0dhXT0hMCwhMCk6ITF9O2lmKE8mJiQpe3ZhciBnZT1bXSxuZT17fSxQZT1mdW5jdGlvbihoaSl7cmV0dXJuIGdlLnB1c2goaGkpfSxwZT1mdW5jdGlvbigpe3JldHVybiBnZS5zaGlmdCgpfTtmb3IoQS5mb3JFYWNoKGZ1bmN0aW9uKENpKXtyZXR1cm4gZ2UucHVzaChDaSl9KTtnZS5sZW5ndGg+MDspe3ZhciBibj1wZSgpLHplPWZlKGJuLG5lKTtpZih6ZSlibi5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihDaSl7cmV0dXJuIENpLmlzTm9kZSgpJiZULmhhcyhDaSl9KS5mb3JFYWNoKFBlKTtlbHNlIGlmKHplPT09bnVsbCl7U2MoIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK2JuLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19VnQoKTt2YXIgVmU9MDtpZihnLmF2b2lkT3ZlcmxhcClmb3IodmFyIEVuPTA7RW48QS5sZW5ndGg7RW4rKyl7dmFyIERuPUFbRW5dLEtuPURuLmxheW91dERpbWVuc2lvbnMoZyksU249S24udyxXbj1Lbi5oO1ZlPU1hdGgubWF4KFZlLFNuLFduKX12YXIgcnI9e30sdnI9ZnVuY3Rpb24oaGkpe2lmKHJyW2hpLmlkKCldKXJldHVybiBycltoaS5pZCgpXTtmb3IodmFyIGdzPWF4KGhpKS5kZXB0aCxxaT1oaS5uZWlnaGJvcmhvb2QoKSxTaT0wLFVpPTAsR2E9MDtHYTxxaS5sZW5ndGg7R2ErKyl7dmFyIFlzPXFpW0dhXTtpZighKFlzLmlzRWRnZSgpfHxZcy5pc1BhcmVudCgpfHwhQS5oYXMoWXMpKSl7dmFyIHpzPWF4KFlzKTtpZih6cyE9bnVsbCl7dmFyIEVyPXpzLmluZGV4LFF0PXpzLmRlcHRoO2lmKCEoRXI9PW51bGx8fFF0PT1udWxsKSl7dmFyIGpuPWt0W1F0XS5sZW5ndGg7UXQ8Z3MmJihTaSs9RXIvam4sVWkrKyl9fX19cmV0dXJuIFVpPU1hdGgubWF4KDEsVWkpLFNpPVNpL1VpLFVpPT09MCYmKFNpPTApLHJyW2hpLmlkKCldPVNpLFNpfSx1cj1mdW5jdGlvbihoaSxncyl7dmFyIHFpPXZyKGhpKSxTaT12cihncyksVWk9cWktU2k7cmV0dXJuIFVpPT09MD9vZShoaS5pZCgpLGdzLmlkKCkpOlVpfTtnLmRlcHRoU29ydCE9PXZvaWQgMCYmKHVyPWcuZGVwdGhTb3J0KTtmb3IodmFyIHRyPTA7dHI8a3QubGVuZ3RoO3RyKyspa3RbdHJdLnNvcnQodXIpLGVlKHRyKTtmb3IodmFyIHduPVtdLGdyPTA7Z3I8WnQubGVuZ3RoO2dyKyspd24ucHVzaChadFtncl0pO2t0LnVuc2hpZnQod24pLFZ0KCk7Zm9yKHZhciBmcj0wLEpyPTA7SnI8a3QubGVuZ3RoO0pyKyspZnI9TWF0aC5tYXgoa3RbSnJdLmxlbmd0aCxmcik7dmFyIHdpPXt4OnEueDErcS53LzIseTpxLngxK3EuaC8yfSxLcz1rdC5yZWR1Y2UoZnVuY3Rpb24oQ2ksaGkpe3JldHVybiBNYXRoLm1heChDaSxoaS5sZW5ndGgpfSwwKSxrYT1mdW5jdGlvbihoaSl7dmFyIGdzPWF4KGhpKSxxaT1ncy5kZXB0aCxTaT1ncy5pbmRleCxVaT1rdFtxaV0ubGVuZ3RoLEdhPU1hdGgubWF4KHEudy8oKGcuZ3JpZD9LczpVaSkrMSksVmUpLFlzPU1hdGgubWF4KHEuaC8oa3QubGVuZ3RoKzEpLFZlKSx6cz1NYXRoLm1pbihxLncvMi9rdC5sZW5ndGgscS5oLzIva3QubGVuZ3RoKTtpZih6cz1NYXRoLm1heCh6cyxWZSksZy5jaXJjbGUpe3ZhciBRdD16cypxaSt6cy0oa3QubGVuZ3RoPjAmJmt0WzBdLmxlbmd0aDw9Mz96cy8yOjApLGpuPTIqTWF0aC5QSS9rdFtxaV0ubGVuZ3RoKlNpO3JldHVybiBxaT09PTAmJmt0WzBdLmxlbmd0aD09PTEmJihRdD0xKSx7eDp3aS54K1F0Kk1hdGguY29zKGpuKSx5OndpLnkrUXQqTWF0aC5zaW4oam4pfX1lbHNle3ZhciBFcj17eDp3aS54KyhTaSsxLShVaSsxKS8yKSpHYSx5OihxaSsxKSpZc307cmV0dXJuIEVyfX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLGthKSx0aGlzfTt2YXIgTUo9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBmOSh5KXt0aGlzLm9wdGlvbnM9bWUoe30sTUoseSl9ZjkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEE9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsRD1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoRD1ELnNvcnQoZy5zb3J0KSk7Zm9yKHZhciBPPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLCQ9e3g6Ty54MStPLncvMix5Ok8ueTErTy5oLzJ9LHE9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL0QubGVuZ3RoOmcuc3dlZXAsUz1xL01hdGgubWF4KDEsRC5sZW5ndGgtMSksRyxXPTAsZXQ9MDtldDxELmxlbmd0aDtldCsrKXt2YXIgYXQ9RFtldF0sbHQ9YXQubGF5b3V0RGltZW5zaW9ucyhnKSxmdD1sdC53LEF0PWx0Lmg7Vz1NYXRoLm1heChXLGZ0LEF0KX1pZihYKGcucmFkaXVzKT9HPWcucmFkaXVzOkQubGVuZ3RoPD0xP0c9MDpHPU1hdGgubWluKE8uaCxPLncpLzItVyxELmxlbmd0aD4xJiZnLmF2b2lkT3ZlcmxhcCl7Vyo9MS43NTt2YXIga3Q9TWF0aC5jb3MoUyktTWF0aC5jb3MoMCksTXQ9TWF0aC5zaW4oUyktTWF0aC5zaW4oMCksRHQ9TWF0aC5zcXJ0KFcqVy8oa3Qqa3QrTXQqTXQpKTtHPU1hdGgubWF4KER0LEcpfXZhciBqdD1mdW5jdGlvbihLdCx6dCl7dmFyIGVlPWcuc3RhcnRBbmdsZSt6dCpTKihBPzE6LTEpLFZ0PUcqTWF0aC5jb3MoZWUpLGZlPUcqTWF0aC5zaW4oZWUpLGdlPXt4OiQueCtWdCx5OiQueStmZX07cmV0dXJuIGdlfTtyZXR1cm4gVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsanQpLHRoaXN9O3ZhciBJSj17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGVncmVlKCl9LGxldmVsV2lkdGg6ZnVuY3Rpb24oZyl7cmV0dXJuIGcubWF4RGVncmVlKCkvNH0sYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uIExCKHkpe3RoaXMub3B0aW9ucz1tZSh7fSxJSix5KX1MQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMub3B0aW9ucyxnPXkseD1nLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWcuY291bnRlcmNsb2Nrd2lzZTpnLmNsb2Nrd2lzZSxUPXkuY3ksQT1nLmVsZXMsRD1BLm5vZGVzKCkubm90KCI6cGFyZW50IiksTz1SZChnLmJvdW5kaW5nQm94P2cuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlQud2lkdGgoKSxoOlQuaGVpZ2h0KCl9KSwkPXt4Ok8ueDErTy53LzIseTpPLnkxK08uaC8yfSxxPVtdLFM9MCxHPTA7RzxELmxlbmd0aDtHKyspe3ZhciBXPURbR10sZXQ9dm9pZCAwO2V0PWcuY29uY2VudHJpYyhXKSxxLnB1c2goe3ZhbHVlOmV0LG5vZGU6V30pLFcuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPWV0fUQudXBkYXRlU3R5bGUoKTtmb3IodmFyIGF0PTA7YXQ8RC5sZW5ndGg7YXQrKyl7dmFyIGx0PURbYXRdLGZ0PWx0LmxheW91dERpbWVuc2lvbnMoZyk7Uz1NYXRoLm1heChTLGZ0LncsZnQuaCl9cS5zb3J0KGZ1bmN0aW9uKENpLGhpKXtyZXR1cm4gaGkudmFsdWUtQ2kudmFsdWV9KTtmb3IodmFyIEF0PWcubGV2ZWxXaWR0aChEKSxrdD1bW11dLE10PWt0WzBdLER0PTA7RHQ8cS5sZW5ndGg7RHQrKyl7dmFyIGp0PXFbRHRdO2lmKE10Lmxlbmd0aD4wKXt2YXIgWnQ9TWF0aC5hYnMoTXRbMF0udmFsdWUtanQudmFsdWUpO1p0Pj1BdCYmKE10PVtdLGt0LnB1c2goTXQpKX1NdC5wdXNoKGp0KX12YXIgS3Q9UytnLm1pbk5vZGVTcGFjaW5nO2lmKCFnLmF2b2lkT3ZlcmxhcCl7dmFyIHp0PWt0Lmxlbmd0aD4wJiZrdFswXS5sZW5ndGg+MSxlZT1NYXRoLm1pbihPLncsTy5oKS8yLUt0LFZ0PWVlLyhrdC5sZW5ndGgrenQ/MTowKTtLdD1NYXRoLm1pbihLdCxWdCl9Zm9yKHZhciBmZT0wLGdlPTA7Z2U8a3QubGVuZ3RoO2dlKyspe3ZhciBuZT1rdFtnZV0sUGU9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL25lLmxlbmd0aDpnLnN3ZWVwLHBlPW5lLmRUaGV0YT1QZS9NYXRoLm1heCgxLG5lLmxlbmd0aC0xKTtpZihuZS5sZW5ndGg+MSYmZy5hdm9pZE92ZXJsYXApe3ZhciBibj1NYXRoLmNvcyhwZSktTWF0aC5jb3MoMCksemU9TWF0aC5zaW4ocGUpLU1hdGguc2luKDApLFZlPU1hdGguc3FydChLdCpLdC8oYm4qYm4remUqemUpKTtmZT1NYXRoLm1heChWZSxmZSl9bmUucj1mZSxmZSs9S3R9aWYoZy5lcXVpZGlzdGFudCl7Zm9yKHZhciBFbj0wLERuPTAsS249MDtLbjxrdC5sZW5ndGg7S24rKyl7dmFyIFNuPWt0W0tuXSxXbj1Tbi5yLURuO0VuPU1hdGgubWF4KEVuLFduKX1Ebj0wO2Zvcih2YXIgcnI9MDtycjxrdC5sZW5ndGg7cnIrKyl7dmFyIHZyPWt0W3JyXTtycj09PTAmJihEbj12ci5yKSx2ci5yPURuLERuKz1Fbn19Zm9yKHZhciB1cj17fSx0cj0wO3RyPGt0Lmxlbmd0aDt0cisrKWZvcih2YXIgd249a3RbdHJdLGdyPXduLmRUaGV0YSxmcj13bi5yLEpyPTA7SnI8d24ubGVuZ3RoO0pyKyspe3ZhciB3aT13bltKcl0sS3M9Zy5zdGFydEFuZ2xlKyh4PzE6LTEpKmdyKkpyLGthPXt4OiQueCtmcipNYXRoLmNvcyhLcykseTokLnkrZnIqTWF0aC5zaW4oS3MpfTt1clt3aS5ub2RlLmlkKCldPWthfXJldHVybiBBLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihDaSl7dmFyIGhpPUNpLmlkKCk7cmV0dXJuIHVyW2hpXX0pLHRoaXN9O3ZhciBVTCxESj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOmZ1bmN0aW9uKGcpe3JldHVybiAyMDQ4fSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpmdW5jdGlvbihnKXtyZXR1cm4gMzJ9LGVkZ2VFbGFzdGljaXR5OmZ1bmN0aW9uKGcpe3JldHVybiAzMn0sbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O2Z1bmN0aW9uIGQ5KHkpe3RoaXMub3B0aW9ucz1tZSh7fSxESix5KSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXN9ZDkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD10aGlzO3guc3RvcHBlZD0hMSwoeS5hbmltYXRlPT09ITB8fHkuYW5pbWF0ZT09PSExKSYmeC5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Onh9KSx5LmRlYnVnPT09ITA/VUw9ITA6VUw9ITE7dmFyIFQ9T0ooZyx4LHkpO1VMJiZGSihUKSx5LnJhbmRvbWl6ZSYmQkooVCk7dmFyIEE9ZGcoKSxEPWZ1bmN0aW9uKCl7UkooVCxnLHkpLHkuZml0PT09ITAmJmcuZml0KHkucGFkZGluZyl9LE89ZnVuY3Rpb24oZXQpe3JldHVybiEoeC5zdG9wcGVkfHxldD49eS5udW1JdGVyfHwoakooVCx5KSxULnRlbXBlcmF0dXJlPVQudGVtcGVyYXR1cmUqeS5jb29saW5nRmFjdG9yLFQudGVtcGVyYXR1cmU8eS5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih5LmFuaW1hdGU9PT0hMHx8eS5hbmltYXRlPT09ITEpRCgpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Onh9KTtlbHNle3ZhciBldD15LmVsZXMubm9kZXMoKSxhdD1NQihULHksZXQpO2V0LmxheW91dFBvc2l0aW9ucyh4LHksYXQpfX0scT0wLFM9ITA7aWYoeS5hbmltYXRlPT09ITApe3ZhciBHPWZ1bmN0aW9uIFcoKXtmb3IodmFyIGV0PTA7UyYmZXQ8eS5yZWZyZXNoOylTPU8ocSkscSsrLGV0Kys7aWYoIVMpREIoVCx5KSwkKCk7ZWxzZXt2YXIgYXQ9ZGcoKTthdC1BPj15LmFuaW1hdGlvblRocmVzaG9sZCYmRCgpLEZmKFcpfX07RygpfWVsc2V7Zm9yKDtTOylTPU8ocSkscSsrO0RCKFQseSksJCgpfXJldHVybiB0aGlzfSxkOS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxkOS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBPSj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBBPVQuZWxlcy5lZGdlcygpLEQ9VC5lbGVzLm5vZGVzKCksTz17aXNDb21wb3VuZDpnLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6RC5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOkEuc2l6ZSgpLHRlbXBlcmF0dXJlOlQuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Zy53aWR0aCgpLGNsaWVudEhlaWdodDpnLndpZHRoKCksYm91bmRpbmdCb3g6UmQoVC5ib3VuZGluZ0JveD9ULmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpnLndpZHRoKCksaDpnLmhlaWdodCgpfSl9LCQ9VC5lbGVzLmNvbXBvbmVudHMoKSxxPXt9LFM9MDtTPCQubGVuZ3RoO1MrKylmb3IodmFyIEc9JFtTXSxXPTA7VzxHLmxlbmd0aDtXKyspe3ZhciBldD1HW1ddO3FbZXQuaWQoKV09U31mb3IodmFyIFM9MDtTPE8ubm9kZVNpemU7UysrKXt2YXIgYXQ9RFtTXSxsdD1hdC5sYXlvdXREaW1lbnNpb25zKFQpLGZ0PXt9O2Z0LmlzTG9ja2VkPWF0LmxvY2tlZCgpLGZ0LmlkPWF0LmRhdGEoImlkIiksZnQucGFyZW50SWQ9YXQuZGF0YSgicGFyZW50IiksZnQuY21wdElkPXFbYXQuaWQoKV0sZnQuY2hpbGRyZW49W10sZnQucG9zaXRpb25YPWF0LnBvc2l0aW9uKCJ4IiksZnQucG9zaXRpb25ZPWF0LnBvc2l0aW9uKCJ5IiksZnQub2Zmc2V0WD0wLGZ0Lm9mZnNldFk9MCxmdC5oZWlnaHQ9bHQudyxmdC53aWR0aD1sdC5oLGZ0Lm1heFg9ZnQucG9zaXRpb25YK2Z0LndpZHRoLzIsZnQubWluWD1mdC5wb3NpdGlvblgtZnQud2lkdGgvMixmdC5tYXhZPWZ0LnBvc2l0aW9uWStmdC5oZWlnaHQvMixmdC5taW5ZPWZ0LnBvc2l0aW9uWS1mdC5oZWlnaHQvMixmdC5wYWRMZWZ0PXBhcnNlRmxvYXQoYXQuc3R5bGUoInBhZGRpbmciKSksZnQucGFkUmlnaHQ9cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5wYWRUb3A9cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5wYWRCb3R0b209cGFyc2VGbG9hdChhdC5zdHlsZSgicGFkZGluZyIpKSxmdC5ub2RlUmVwdWxzaW9uPXl0KFQubm9kZVJlcHVsc2lvbik/VC5ub2RlUmVwdWxzaW9uKGF0KTpULm5vZGVSZXB1bHNpb24sTy5sYXlvdXROb2Rlcy5wdXNoKGZ0KSxPLmlkVG9JbmRleFtmdC5pZF09U31mb3IodmFyIEF0PVtdLGt0PTAsTXQ9LTEsRHQ9W10sUz0wO1M8Ty5ub2RlU2l6ZTtTKyspe3ZhciBhdD1PLmxheW91dE5vZGVzW1NdLGp0PWF0LnBhcmVudElkO2p0IT1udWxsP08ubGF5b3V0Tm9kZXNbTy5pZFRvSW5kZXhbanRdXS5jaGlsZHJlbi5wdXNoKGF0LmlkKTooQXRbKytNdF09YXQuaWQsRHQucHVzaChhdC5pZCkpfWZvcihPLmdyYXBoU2V0LnB1c2goRHQpO2t0PD1NdDspe3ZhciBadD1BdFtrdCsrXSxLdD1PLmlkVG9JbmRleFtadF0sZXQ9Ty5sYXlvdXROb2Rlc1tLdF0senQ9ZXQuY2hpbGRyZW47aWYoenQubGVuZ3RoPjApe08uZ3JhcGhTZXQucHVzaCh6dCk7Zm9yKHZhciBTPTA7Uzx6dC5sZW5ndGg7UysrKUF0WysrTXRdPXp0W1NdfX1mb3IodmFyIFM9MDtTPE8uZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIGVlPU8uZ3JhcGhTZXRbU10sVz0wO1c8ZWUubGVuZ3RoO1crKyl7dmFyIFZ0PU8uaWRUb0luZGV4W2VlW1ddXTtPLmluZGV4VG9HcmFwaFtWdF09U31mb3IodmFyIFM9MDtTPE8uZWRnZVNpemU7UysrKXt2YXIgZmU9QVtTXSxnZT17fTtnZS5pZD1mZS5kYXRhKCJpZCIpLGdlLnNvdXJjZUlkPWZlLmRhdGEoInNvdXJjZSIpLGdlLnRhcmdldElkPWZlLmRhdGEoInRhcmdldCIpO3ZhciBuZT15dChULmlkZWFsRWRnZUxlbmd0aCk/VC5pZGVhbEVkZ2VMZW5ndGgoZmUpOlQuaWRlYWxFZGdlTGVuZ3RoLFBlPXl0KFQuZWRnZUVsYXN0aWNpdHkpP1QuZWRnZUVsYXN0aWNpdHkoZmUpOlQuZWRnZUVsYXN0aWNpdHkscGU9Ty5pZFRvSW5kZXhbZ2Uuc291cmNlSWRdLGJuPU8uaWRUb0luZGV4W2dlLnRhcmdldElkXSx6ZT1PLmluZGV4VG9HcmFwaFtwZV0sVmU9Ty5pbmRleFRvR3JhcGhbYm5dO2lmKHplIT1WZSl7Zm9yKHZhciBFbj1OSihnZS5zb3VyY2VJZCxnZS50YXJnZXRJZCxPKSxEbj1PLmdyYXBoU2V0W0VuXSxLbj0wLGZ0PU8ubGF5b3V0Tm9kZXNbcGVdO0RuLmluZGV4T2YoZnQuaWQpPT09LTE7KWZ0PU8ubGF5b3V0Tm9kZXNbTy5pZFRvSW5kZXhbZnQucGFyZW50SWRdXSxLbisrO2ZvcihmdD1PLmxheW91dE5vZGVzW2JuXTtEbi5pbmRleE9mKGZ0LmlkKT09PS0xOylmdD1PLmxheW91dE5vZGVzW08uaWRUb0luZGV4W2Z0LnBhcmVudElkXV0sS24rKztuZSo9S24qVC5uZXN0aW5nRmFjdG9yfWdlLmlkZWFsTGVuZ3RoPW5lLGdlLmVsYXN0aWNpdHk9UGUsTy5sYXlvdXRFZGdlcy5wdXNoKGdlKX1yZXR1cm4gT30sTko9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPVBKKGcseCwwLFQpO3JldHVybiAyPkEuY291bnQ/MDpBLmdyYXBofSxQSj1mdW5jdGlvbiB5KGcseCxULEEpe3ZhciBEPUEuZ3JhcGhTZXRbVF07aWYoLTE8RC5pbmRleE9mKGcpJiYtMTxELmluZGV4T2YoeCkpcmV0dXJue2NvdW50OjIsZ3JhcGg6VH07Zm9yKHZhciBPPTAsJD0wOyQ8RC5sZW5ndGg7JCsrKXt2YXIgcT1EWyRdLFM9QS5pZFRvSW5kZXhbcV0sRz1BLmxheW91dE5vZGVzW1NdLmNoaWxkcmVuO2lmKEcubGVuZ3RoIT09MCl7dmFyIFc9QS5pbmRleFRvR3JhcGhbQS5pZFRvSW5kZXhbR1swXV1dLGV0PXkoZyx4LFcsQSk7aWYoZXQuY291bnQhPT0wKWlmKGV0LmNvdW50PT09MSl7aWYoTysrLE89PT0yKWJyZWFrfWVsc2UgcmV0dXJuIGV0fX1yZXR1cm57Y291bnQ6TyxncmFwaDpUfX0sRkosQko9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9Zy5jbGllbnRXaWR0aCxBPWcuY2xpZW50SGVpZ2h0LEQ9MDtEPGcubm9kZVNpemU7RCsrKXt2YXIgTz1nLmxheW91dE5vZGVzW0RdO08uY2hpbGRyZW4ubGVuZ3RoPT09MCYmIU8uaXNMb2NrZWQmJihPLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKlQsTy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSpBKX19LE1CPWZ1bmN0aW9uKGcseCxUKXt2YXIgQT1nLmJvdW5kaW5nQm94LEQ9e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4geC5ib3VuZGluZ0JveCYmKFQuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W08uZGF0YSgiaWQiKV1dO0QueDE9TWF0aC5taW4oRC54MSwkLnBvc2l0aW9uWCksRC54Mj1NYXRoLm1heChELngyLCQucG9zaXRpb25YKSxELnkxPU1hdGgubWluKEQueTEsJC5wb3NpdGlvblkpLEQueTI9TWF0aC5tYXgoRC55MiwkLnBvc2l0aW9uWSl9KSxELnc9RC54Mi1ELngxLEQuaD1ELnkyLUQueTEpLGZ1bmN0aW9uKE8sJCl7dmFyIHE9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtPLmRhdGEoImlkIildXTtpZih4LmJvdW5kaW5nQm94KXt2YXIgUz0ocS5wb3NpdGlvblgtRC54MSkvRC53LEc9KHEucG9zaXRpb25ZLUQueTEpL0QuaDtyZXR1cm57eDpBLngxK1MqQS53LHk6QS55MStHKkEuaH19ZWxzZSByZXR1cm57eDpxLnBvc2l0aW9uWCx5OnEucG9zaXRpb25ZfX19LFJKPWZ1bmN0aW9uKGcseCxUKXt2YXIgQT1ULmxheW91dCxEPVQuZWxlcy5ub2RlcygpLE89TUIoZyxULEQpO0QucG9zaXRpb25zKE8pLGcucmVhZHkhPT0hMCYmKGcucmVhZHk9ITAsQS5vbmUoImxheW91dHJlYWR5IixULnJlYWR5KSxBLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sako9ZnVuY3Rpb24oZyx4LFQpeyRKKGcseCksSEooZyksR0ooZyx4KSxWSihnKSxVSihnKX0sJEo9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPGcuZ3JhcGhTZXQubGVuZ3RoO1QrKylmb3IodmFyIEE9Zy5ncmFwaFNldFtUXSxEPUEubGVuZ3RoLE89MDtPPEQ7TysrKWZvcih2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W0FbT11dXSxxPU8rMTtxPEQ7cSsrKXt2YXIgUz1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W0FbcV1dXTt6SigkLFMsZyx4KX19LElCPWZ1bmN0aW9uKGcpe3JldHVybi1nKzIqZypNYXRoLnJhbmRvbSgpfSx6Sj1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD1nLmNtcHRJZCxPPXguY21wdElkO2lmKCEoRCE9PU8mJiFULmlzQ29tcG91bmQpKXt2YXIgJD14LnBvc2l0aW9uWC1nLnBvc2l0aW9uWCxxPXgucG9zaXRpb25ZLWcucG9zaXRpb25ZLFM9MTskPT09MCYmcT09PTAmJigkPUlCKFMpLHE9SUIoUykpO3ZhciBHPXFKKGcseCwkLHEpO2lmKEc+MCl2YXIgVz1BLm5vZGVPdmVybGFwKkcsZXQ9TWF0aC5zcXJ0KCQqJCtxKnEpLGF0PVcqJC9ldCxsdD1XKnEvZXQ7ZWxzZSB2YXIgZnQ9ZzkoZywkLHEpLEF0PWc5KHgsLTEqJCwtMSpxKSxrdD1BdC54LWZ0LngsTXQ9QXQueS1mdC55LER0PWt0Kmt0K010Kk10LGV0PU1hdGguc3FydChEdCksVz0oZy5ub2RlUmVwdWxzaW9uK3gubm9kZVJlcHVsc2lvbikvRHQsYXQ9VyprdC9ldCxsdD1XKk10L2V0O2cuaXNMb2NrZWR8fChnLm9mZnNldFgtPWF0LGcub2Zmc2V0WS09bHQpLHguaXNMb2NrZWR8fCh4Lm9mZnNldFgrPWF0LHgub2Zmc2V0WSs9bHQpfX0scUo9ZnVuY3Rpb24oZyx4LFQsQSl7aWYoVD4wKXZhciBEPWcubWF4WC14Lm1pblg7ZWxzZSB2YXIgRD14Lm1heFgtZy5taW5YO2lmKEE+MCl2YXIgTz1nLm1heFkteC5taW5ZO2Vsc2UgdmFyIE89eC5tYXhZLWcubWluWTtyZXR1cm4gRD49MCYmTz49MD9NYXRoLnNxcnQoRCpEK08qTyk6MH0sZzk9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPWcucG9zaXRpb25YLEQ9Zy5wb3NpdGlvblksTz1nLmhlaWdodHx8MSwkPWcud2lkdGh8fDEscT1UL3gsUz1PLyQsRz17fTtyZXR1cm4geD09PTAmJjA8VHx8eD09PTAmJjA+VD8oRy54PUEsRy55PUQrTy8yLEcpOjA8eCYmLTEqUzw9cSYmcTw9Uz8oRy54PUErJC8yLEcueT1EKyQqVC8yL3gsRyk6MD54JiYtMSpTPD1xJiZxPD1TPyhHLng9QS0kLzIsRy55PUQtJCpULzIveCxHKTowPFQmJihxPD0tMSpTfHxxPj1TKT8oRy54PUErTyp4LzIvVCxHLnk9RCtPLzIsRyk6KDA+VCYmKHE8PS0xKlN8fHE+PVMpJiYoRy54PUEtTyp4LzIvVCxHLnk9RC1PLzIpLEcpfSxISj1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5lZGdlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0RWRnZXNbVF0sRD1nLmlkVG9JbmRleFtBLnNvdXJjZUlkXSxPPWcubGF5b3V0Tm9kZXNbRF0sJD1nLmlkVG9JbmRleFtBLnRhcmdldElkXSxxPWcubGF5b3V0Tm9kZXNbJF0sUz1xLnBvc2l0aW9uWC1PLnBvc2l0aW9uWCxHPXEucG9zaXRpb25ZLU8ucG9zaXRpb25ZO2lmKCEoUz09PTAmJkc9PT0wKSl7dmFyIFc9ZzkoTyxTLEcpLGV0PWc5KHEsLTEqUywtMSpHKSxhdD1ldC54LVcueCxsdD1ldC55LVcueSxmdD1NYXRoLnNxcnQoYXQqYXQrbHQqbHQpLEF0PU1hdGgucG93KEEuaWRlYWxMZW5ndGgtZnQsMikvQS5lbGFzdGljaXR5O2lmKGZ0IT09MCl2YXIga3Q9QXQqYXQvZnQsTXQ9QXQqbHQvZnQ7ZWxzZSB2YXIga3Q9MCxNdD0wO08uaXNMb2NrZWR8fChPLm9mZnNldFgrPWt0LE8ub2Zmc2V0WSs9TXQpLHEuaXNMb2NrZWR8fChxLm9mZnNldFgtPWt0LHEub2Zmc2V0WS09TXQpfX19LEdKPWZ1bmN0aW9uKGcseCl7aWYoeC5ncmF2aXR5IT09MClmb3IodmFyIFQ9MSxBPTA7QTxnLmdyYXBoU2V0Lmxlbmd0aDtBKyspe3ZhciBEPWcuZ3JhcGhTZXRbQV0sTz1ELmxlbmd0aDtpZihBPT09MCl2YXIgJD1nLmNsaWVudEhlaWdodC8yLHE9Zy5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtEWzBdXV0sRz1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1MucGFyZW50SWRdXSwkPUcucG9zaXRpb25YLHE9Ry5wb3NpdGlvblk7Zm9yKHZhciBXPTA7VzxPO1crKyl7dmFyIGV0PWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbRFtXXV1dO2lmKCFldC5pc0xvY2tlZCl7dmFyIGF0PSQtZXQucG9zaXRpb25YLGx0PXEtZXQucG9zaXRpb25ZLGZ0PU1hdGguc3FydChhdCphdCtsdCpsdCk7aWYoZnQ+VCl7dmFyIEF0PXguZ3Jhdml0eSphdC9mdCxrdD14LmdyYXZpdHkqbHQvZnQ7ZXQub2Zmc2V0WCs9QXQsZXQub2Zmc2V0WSs9a3R9fX19fSxWSj1mdW5jdGlvbihnLHgpe3ZhciBUPVtdLEE9MCxEPS0xO2ZvcihULnB1c2guYXBwbHkoVCxnLmdyYXBoU2V0WzBdKSxEKz1nLmdyYXBoU2V0WzBdLmxlbmd0aDtBPD1EOyl7dmFyIE89VFtBKytdLCQ9Zy5pZFRvSW5kZXhbT10scT1nLmxheW91dE5vZGVzWyRdLFM9cS5jaGlsZHJlbjtpZigwPFMubGVuZ3RoJiYhcS5pc0xvY2tlZCl7Zm9yKHZhciBHPXEub2Zmc2V0WCxXPXEub2Zmc2V0WSxldD0wO2V0PFMubGVuZ3RoO2V0Kyspe3ZhciBhdD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1NbZXRdXV07YXQub2Zmc2V0WCs9RyxhdC5vZmZzZXRZKz1XLFRbKytEXT1TW2V0XX1xLm9mZnNldFg9MCxxLm9mZnNldFk9MH19fSxVSj1mdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5ub2RlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0Tm9kZXNbVF07MDxBLmNoaWxkcmVuLmxlbmd0aCYmKEEubWF4WD12b2lkIDAsQS5taW5YPXZvaWQgMCxBLm1heFk9dm9pZCAwLEEubWluWT12b2lkIDApfWZvcih2YXIgVD0wO1Q8Zy5ub2RlU2l6ZTtUKyspe3ZhciBBPWcubGF5b3V0Tm9kZXNbVF07aWYoISgwPEEuY2hpbGRyZW4ubGVuZ3RofHxBLmlzTG9ja2VkKSl7dmFyIEQ9V0ooQS5vZmZzZXRYLEEub2Zmc2V0WSxnLnRlbXBlcmF0dXJlKTtBLnBvc2l0aW9uWCs9RC54LEEucG9zaXRpb25ZKz1ELnksQS5vZmZzZXRYPTAsQS5vZmZzZXRZPTAsQS5taW5YPUEucG9zaXRpb25YLUEud2lkdGgsQS5tYXhYPUEucG9zaXRpb25YK0Eud2lkdGgsQS5taW5ZPUEucG9zaXRpb25ZLUEuaGVpZ2h0LEEubWF4WT1BLnBvc2l0aW9uWStBLmhlaWdodCxLSihBLGcpfX1mb3IodmFyIFQ9MDtUPGcubm9kZVNpemU7VCsrKXt2YXIgQT1nLmxheW91dE5vZGVzW1RdOzA8QS5jaGlsZHJlbi5sZW5ndGgmJiFBLmlzTG9ja2VkJiYoQS5wb3NpdGlvblg9KEEubWF4WCtBLm1pblgpLzIsQS5wb3NpdGlvblk9KEEubWF4WStBLm1pblkpLzIsQS53aWR0aD1BLm1heFgtQS5taW5YLEEuaGVpZ2h0PUEubWF4WS1BLm1pblkpfX0sV0o9ZnVuY3Rpb24oZyx4LFQpe3ZhciBBPU1hdGguc3FydChnKmcreCp4KTtpZihBPlQpdmFyIEQ9e3g6VCpnL0EseTpUKngvQX07ZWxzZSB2YXIgRD17eDpnLHk6eH07cmV0dXJuIER9LEtKPWZ1bmN0aW9uIHkoZyx4KXt2YXIgVD1nLnBhcmVudElkO2lmKFQhPW51bGwpe3ZhciBBPXgubGF5b3V0Tm9kZXNbeC5pZFRvSW5kZXhbVF1dLEQ9ITE7aWYoKEEubWF4WD09bnVsbHx8Zy5tYXhYK0EucGFkUmlnaHQ+QS5tYXhYKSYmKEEubWF4WD1nLm1heFgrQS5wYWRSaWdodCxEPSEwKSwoQS5taW5YPT1udWxsfHxnLm1pblgtQS5wYWRMZWZ0PEEubWluWCkmJihBLm1pblg9Zy5taW5YLUEucGFkTGVmdCxEPSEwKSwoQS5tYXhZPT1udWxsfHxnLm1heFkrQS5wYWRCb3R0b20+QS5tYXhZKSYmKEEubWF4WT1nLm1heFkrQS5wYWRCb3R0b20sRD0hMCksKEEubWluWT09bnVsbHx8Zy5taW5ZLUEucGFkVG9wPEEubWluWSkmJihBLm1pblk9Zy5taW5ZLUEucGFkVG9wLEQ9ITApLEQpcmV0dXJuIHkoQSx4KX19LERCPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPWcubGF5b3V0Tm9kZXMsQT1bXSxEPTA7RDxULmxlbmd0aDtEKyspe3ZhciBPPVRbRF0sJD1PLmNtcHRJZCxxPUFbJF09QVskXXx8W107cS5wdXNoKE8pfWZvcih2YXIgUz0wLEQ9MDtEPEEubGVuZ3RoO0QrKyl7dmFyIEc9QVtEXTtpZihHKXtHLngxPTEvMCxHLngyPS0xLzAsRy55MT0xLzAsRy55Mj0tMS8wO2Zvcih2YXIgVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXTtHLngxPU1hdGgubWluKEcueDEsZXQucG9zaXRpb25YLWV0LndpZHRoLzIpLEcueDI9TWF0aC5tYXgoRy54MixldC5wb3NpdGlvblgrZXQud2lkdGgvMiksRy55MT1NYXRoLm1pbihHLnkxLGV0LnBvc2l0aW9uWS1ldC5oZWlnaHQvMiksRy55Mj1NYXRoLm1heChHLnkyLGV0LnBvc2l0aW9uWStldC5oZWlnaHQvMil9Ry53PUcueDItRy54MSxHLmg9Ry55Mi1HLnkxLFMrPUcudypHLmh9fUEuc29ydChmdW5jdGlvbihNdCxEdCl7cmV0dXJuIER0LncqRHQuaC1NdC53Kk10Lmh9KTtmb3IodmFyIGF0PTAsbHQ9MCxmdD0wLEF0PTAsa3Q9TWF0aC5zcXJ0KFMpKmcuY2xpZW50V2lkdGgvZy5jbGllbnRIZWlnaHQsRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgRz1BW0RdO2lmKEcpe2Zvcih2YXIgVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgZXQ9R1tXXTtldC5pc0xvY2tlZHx8KGV0LnBvc2l0aW9uWCs9YXQtRy54MSxldC5wb3NpdGlvblkrPWx0LUcueTEpfWF0Kz1HLncreC5jb21wb25lbnRTcGFjaW5nLGZ0Kz1HLncreC5jb21wb25lbnRTcGFjaW5nLEF0PU1hdGgubWF4KEF0LEcuaCksZnQ+a3QmJihsdCs9QXQreC5jb21wb25lbnRTcGFjaW5nLGF0PTAsZnQ9MCxBdD0wKX19fSxZSj17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxhdm9pZE92ZXJsYXBQYWRkaW5nOjEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxjb25kZW5zZTohMSxyb3dzOnZvaWQgMCxjb2xzOnZvaWQgMCxwb3NpdGlvbjpmdW5jdGlvbihnKXt9LHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBPQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sWUoseSl9T0IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEE9VC5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2cuc29ydCYmKEE9QS5zb3J0KGcuc29ydCkpO3ZhciBEPVJkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pO2lmKEQuaD09PTB8fEQudz09PTApVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsZnVuY3Rpb24ocnIpe3JldHVybnt4OkQueDEseTpELnkxfX0pO2Vsc2V7dmFyIE89QS5zaXplKCksJD1NYXRoLnNxcnQoTypELmgvRC53KSxxPU1hdGgucm91bmQoJCksUz1NYXRoLnJvdW5kKEQudy9ELmgqJCksRz1mdW5jdGlvbih2cil7aWYodnI9PW51bGwpcmV0dXJuIE1hdGgubWluKHEsUyk7dmFyIHVyPU1hdGgubWluKHEsUyk7dXI9PXE/cT12cjpTPXZyfSxXPWZ1bmN0aW9uKHZyKXtpZih2cj09bnVsbClyZXR1cm4gTWF0aC5tYXgocSxTKTt2YXIgdXI9TWF0aC5tYXgocSxTKTt1cj09cT9xPXZyOlM9dnJ9LGV0PWcucm93cyxhdD1nLmNvbHMhPW51bGw/Zy5jb2xzOmcuY29sdW1ucztpZihldCE9bnVsbCYmYXQhPW51bGwpcT1ldCxTPWF0O2Vsc2UgaWYoZXQhPW51bGwmJmF0PT1udWxsKXE9ZXQsUz1NYXRoLmNlaWwoTy9xKTtlbHNlIGlmKGV0PT1udWxsJiZhdCE9bnVsbClTPWF0LHE9TWF0aC5jZWlsKE8vUyk7ZWxzZSBpZihTKnE+Tyl7dmFyIGx0PUcoKSxmdD1XKCk7KGx0LTEpKmZ0Pj1PP0cobHQtMSk6KGZ0LTEpKmx0Pj1PJiZXKGZ0LTEpfWVsc2UgZm9yKDtTKnE8Tzspe3ZhciBBdD1HKCksa3Q9VygpOyhrdCsxKSpBdD49Tz9XKGt0KzEpOkcoQXQrMSl9dmFyIE10PUQudy9TLER0PUQuaC9xO2lmKGcuY29uZGVuc2UmJihNdD0wLER0PTApLGcuYXZvaWRPdmVybGFwKWZvcih2YXIganQ9MDtqdDxBLmxlbmd0aDtqdCsrKXt2YXIgWnQ9QVtqdF0sS3Q9WnQuX3ByaXZhdGUucG9zaXRpb247KEt0Lng9PW51bGx8fEt0Lnk9PW51bGwpJiYoS3QueD0wLEt0Lnk9MCk7dmFyIHp0PVp0LmxheW91dERpbWVuc2lvbnMoZyksZWU9Zy5hdm9pZE92ZXJsYXBQYWRkaW5nLFZ0PXp0LncrZWUsZmU9enQuaCtlZTtNdD1NYXRoLm1heChNdCxWdCksRHQ9TWF0aC5tYXgoRHQsZmUpfWZvcih2YXIgZ2U9e30sbmU9ZnVuY3Rpb24odnIsdXIpe3JldHVybiEhZ2VbImMtIit2cisiLSIrdXJdfSxQZT1mdW5jdGlvbih2cix1cil7Z2VbImMtIit2cisiLSIrdXJdPSEwfSxwZT0wLGJuPTAsemU9ZnVuY3Rpb24oKXtibisrLGJuPj1TJiYoYm49MCxwZSsrKX0sVmU9e30sRW49MDtFbjxBLmxlbmd0aDtFbisrKXt2YXIgRG49QVtFbl0sS249Zy5wb3NpdGlvbihEbik7aWYoS24mJihLbi5yb3chPT12b2lkIDB8fEtuLmNvbCE9PXZvaWQgMCkpe3ZhciBTbj17cm93OktuLnJvdyxjb2w6S24uY29sfTtpZihTbi5jb2w9PT12b2lkIDApZm9yKFNuLmNvbD0wO25lKFNuLnJvdyxTbi5jb2wpOylTbi5jb2wrKztlbHNlIGlmKFNuLnJvdz09PXZvaWQgMClmb3IoU24ucm93PTA7bmUoU24ucm93LFNuLmNvbCk7KVNuLnJvdysrO1ZlW0RuLmlkKCldPVNuLFBlKFNuLnJvdyxTbi5jb2wpfX12YXIgV249ZnVuY3Rpb24odnIsdXIpe3ZhciB0cix3bjtpZih2ci5sb2NrZWQoKXx8dnIuaXNQYXJlbnQoKSlyZXR1cm4hMTt2YXIgZ3I9VmVbdnIuaWQoKV07aWYoZ3IpdHI9Z3IuY29sKk10K010LzIrRC54MSx3bj1nci5yb3cqRHQrRHQvMitELnkxO2Vsc2V7Zm9yKDtuZShwZSxibik7KXplKCk7dHI9Ym4qTXQrTXQvMitELngxLHduPXBlKkR0K0R0LzIrRC55MSxQZShwZSxibiksemUoKX1yZXR1cm57eDp0cix5OndufX07QS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLFduKX1yZXR1cm4gdGhpc307dmFyIFhKPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFdMKHkpe3RoaXMub3B0aW9ucz1tZSh7fSxYSix5KX1XTC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eS5lbGVzLHg9dGhpcztyZXR1cm4geS5jeSx4LmVtaXQoImxheW91dHN0YXJ0IiksZy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbigpe3JldHVybnt4OjAseTowfX0pLHgub25lKCJsYXlvdXRyZWFkeSIseS5yZWFkeSkseC5lbWl0KCJsYXlvdXRyZWFkeSIpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9LFdMLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciBRSj17cG9zaXRpb25zOnZvaWQgMCx6b29tOnZvaWQgMCxwYW46dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBOQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sUUoseSl9TkIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PWcubm9kZXMoKSxUPXl0KHkucG9zaXRpb25zKTtmdW5jdGlvbiBBKEQpe2lmKHkucG9zaXRpb25zPT1udWxsKXJldHVybiBiWShELnBvc2l0aW9uKCkpO2lmKFQpcmV0dXJuIHkucG9zaXRpb25zKEQpO3ZhciBPPXkucG9zaXRpb25zW0QuX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIE8/P251bGx9cmV0dXJuIHgubGF5b3V0UG9zaXRpb25zKHRoaXMseSxmdW5jdGlvbihELE8pe3ZhciAkPUEoRCk7cmV0dXJuIEQubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciBaSj17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBQQih5KXt0aGlzLm9wdGlvbnM9bWUoe30sWkoseSl9UEIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD15LmVsZXMsVD1SZCh5LmJvdW5kaW5nQm94P3kuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omcud2lkdGgoKSxoOmcuaGVpZ2h0KCl9KSxBPWZ1bmN0aW9uKE8sJCl7cmV0dXJue3g6VC54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqVC53KSx5OlQueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKlQuaCl9fTtyZXR1cm4geC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHksQSksdGhpc307dmFyIEpKPVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOkFCfSx7bmFtZToiY2lyY2xlIixpbXBsOmY5fSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDpMQn0se25hbWU6ImNvc2UiLGltcGw6ZDl9LHtuYW1lOiJncmlkIixpbXBsOk9CfSx7bmFtZToibnVsbCIsaW1wbDpXTH0se25hbWU6InByZXNldCIsaW1wbDpOQn0se25hbWU6InJhbmRvbSIsaW1wbDpQQn1dO2Z1bmN0aW9uIEZCKHkpe3RoaXMub3B0aW9ucz15LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBCQj1mdW5jdGlvbigpe30sUkI9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O0ZCLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOkJCLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OkJCLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlJCLGpwZzpSQn07dmFyIEtMPXt9O0tMLmFycm93U2hhcGVXaWR0aD0uMyxLTC5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5hcnJvd1NoYXBlcz17fSxnPXRoaXMseD1mdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LngtVy8yLWZ0LGt0PWF0LngrVy8yK2Z0LE10PWF0LnktVy8yLWZ0LER0PWF0LnkrVy8yK2Z0LGp0PUF0PD1TJiZTPD1rdCYmTXQ8PUcmJkc8PUR0O3JldHVybiBqdH0sVD1mdW5jdGlvbihTLEcsVyxldCxhdCl7dmFyIGx0PVMqTWF0aC5jb3MoZXQpLUcqTWF0aC5zaW4oZXQpLGZ0PVMqTWF0aC5zaW4oZXQpK0cqTWF0aC5jb3MoZXQpLEF0PWx0Klcsa3Q9ZnQqVyxNdD1BdCthdC54LER0PWt0K2F0Lnk7cmV0dXJue3g6TXQseTpEdH19LEE9ZnVuY3Rpb24oUyxHLFcsZXQpe2Zvcih2YXIgYXQ9W10sbHQ9MDtsdDxTLmxlbmd0aDtsdCs9Mil7dmFyIGZ0PVNbbHRdLEF0PVNbbHQrMV07YXQucHVzaChUKGZ0LEF0LEcsVyxldCkpfXJldHVybiBhdH0sRD1mdW5jdGlvbihTKXtmb3IodmFyIEc9W10sVz0wO1c8Uy5sZW5ndGg7VysrKXt2YXIgZXQ9U1tXXTtHLnB1c2goZXQueCxldC55KX1yZXR1cm4gR30sTz1mdW5jdGlvbihTKXtyZXR1cm4gUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24oUyxHKXttdChHKSYmKEc9eVtHXSkseVtTXT1tZSh7bmFtZTpTLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihldCxhdCxsdCxmdCxBdCxrdCl7dmFyIE10PUQoQSh0aGlzLnBvaW50cyxsdCsyKmt0LGZ0LEF0KSksRHQ9amQoZXQsYXQsTXQpO3JldHVybiBEdH0scm91Z2hDb2xsaWRlOngsZHJhdzpmdW5jdGlvbihldCxhdCxsdCxmdCl7dmFyIEF0PUEodGhpcy5wb2ludHMsYXQsbHQsZnQpO2cuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShldCxBdCl9LHNwYWNpbmc6ZnVuY3Rpb24oZXQpe3JldHVybiAwfSxnYXA6T30sRyl9OyQoIm5vbmUiLHtjb2xsaWRlOmdtLHJvdWdoQ29sbGlkZTpnbSxkcmF3OndMLHNwYWNpbmc6Z2csZ2FwOmdnfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eS50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTp4LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzLEcsVyxldCksZnQ9dGhpcy5jb250cm9sUG9pbnQsQXQ9VChmdFswXSxmdFsxXSxHLFcsZXQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGx0LEF0KX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBPKFMpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PUQoQSh0aGlzLnBvaW50cyxXKzIqZnQsZXQsYXQpKSxrdD1EKEEodGhpcy5wb2ludHNUZWUsVysyKmZ0LGV0LGF0KSksTXQ9amQoUyxHLEF0KXx8amQoUyxHLGt0KTtyZXR1cm4gTXR9LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzLEcsVyxldCksZnQ9QSh0aGlzLnBvaW50c1RlZSxHLFcsZXQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGx0LGZ0KX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LGt0PU1hdGgucG93KEF0LngtUywyKStNYXRoLnBvdyhBdC55LUcsMik8PU1hdGgucG93KChXKzIqZnQpKnRoaXMucmFkaXVzLDIpLE10PUQoQSh0aGlzLnBvaW50cyxXKzIqZnQsZXQsYXQpKTtyZXR1cm4gamQoUyxHLE10KXx8a3R9LGRyYXc6ZnVuY3Rpb24oUyxHLFcsZXQsYXQpe3ZhciBsdD1BKHRoaXMucG9pbnRzVHIsRyxXLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxldC54LGV0LnksdGhpcy5yYWRpdXMqRyl9LHNwYWNpbmc6ZnVuY3Rpb24oUyl7cmV0dXJuIGcuZ2V0QXJyb3dXaWR0aChTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLFMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihTLEcpe3ZhciBXPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLGV0PUcvUyxhdD0zLGx0PTU7cmV0dXJuIFdbYXRdPVdbYXRdLWV0LFdbbHRdPVdbbHRdLWV0LFd9LGNvbGxpZGU6ZnVuY3Rpb24oUyxHLFcsZXQsYXQsbHQsZnQpe3ZhciBBdD1EKEEodGhpcy5wb2ludHMsVysyKmZ0LGV0LGF0KSksa3Q9RChBKHRoaXMuY3Jvc3NMaW5lUHRzKFcsbHQpLFcrMipmdCxldCxhdCkpLE10PWpkKFMsRyxBdCl8fGpkKFMsRyxrdCk7cmV0dXJuIE10fSxkcmF3OmZ1bmN0aW9uKFMsRyxXLGV0LGF0KXt2YXIgbHQ9QSh0aGlzLnBvaW50cyxHLFcsZXQpLGZ0PUEodGhpcy5jcm9zc0xpbmVQdHMoRyxhdCksRyxXLGV0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxsdCxmdCl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gTyhTKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihTLEcsVyxldCxhdCxsdCxmdCl7dmFyIEF0PWF0LGt0PU1hdGgucG93KEF0LngtUywyKStNYXRoLnBvdyhBdC55LUcsMik8PU1hdGgucG93KChXKzIqZnQpKnRoaXMucmFkaXVzLDIpO3JldHVybiBrdH0sZHJhdzpmdW5jdGlvbihTLEcsVyxldCxhdCl7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMsZXQueCxldC55LHRoaXMucmFkaXVzKkcpfSxzcGFjaW5nOmZ1bmN0aW9uKFMpe3JldHVybiBnLmdldEFycm93V2lkdGgoUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihTKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKlMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gLjk1KlMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqUy5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciBMMz17fTtMMy5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5jeSxUPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEE9VFswXSxEPVRbMV0sTz1UWzRdLCQ9eC5wYW4oKSxxPXguem9vbSgpLFM9KCh5LUEpL08tJC54KS9xLEc9KChnLUQpL08tJC55KS9xO3JldHVybltTLEddfSxMMy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeT10aGlzLmNvbnRhaW5lcixnPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD1SLmdldENvbXB1dGVkU3R5bGUoeSksVD1mdW5jdGlvbihrdCl7cmV0dXJuIHBhcnNlRmxvYXQoeC5nZXRQcm9wZXJ0eVZhbHVlKGt0KSl9LEE9e2xlZnQ6VCgicGFkZGluZy1sZWZ0IikscmlnaHQ6VCgicGFkZGluZy1yaWdodCIpLHRvcDpUKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpUKCJwYWRkaW5nLWJvdHRvbSIpfSxEPXtsZWZ0OlQoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6VCgiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlQoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206VCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxPPXkuY2xpZW50V2lkdGgsJD15LmNsaWVudEhlaWdodCxxPUEubGVmdCtBLnJpZ2h0LFM9QS50b3ArQS5ib3R0b20sRz1ELmxlZnQrRC5yaWdodCxXPWcud2lkdGgvKE8rRyksZXQ9Ty1xLGF0PSQtUyxsdD1nLmxlZnQrQS5sZWZ0K0QubGVmdCxmdD1nLnRvcCtBLnRvcCtELnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1bbHQsZnQsZXQsYXQsV119LEwzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sTDMuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeSxnLHgsVClbMF19LEwzLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPXRoaXMsTz1ELmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxxPUQuY3kuem9vbSgpLFM9RC5jeS5oYXNDb21wb3VuZE5vZGVzKCksRz0oVD8yNDo4KS9xLFc9KFQ/ODoyKS9xLGV0PShUPzg6MikvcSxhdD0xLzAsbHQsZnQ7eCYmKE89Ty5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gQXQoenQsZWUpe2lmKHp0LmlzTm9kZSgpKXtpZihmdClyZXR1cm47ZnQ9enQsJC5wdXNoKHp0KX1pZih6dC5pc0VkZ2UoKSYmKGVlPT1udWxsfHxlZTxhdCkpaWYobHQpe2lmKGx0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09enQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmx0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09enQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgVnQ9MDtWdDwkLmxlbmd0aDtWdCsrKWlmKCRbVnRdLmlzRWRnZSgpKXskW1Z0XT16dCxsdD16dCxhdD1lZT8/YXQ7YnJlYWt9fX1lbHNlICQucHVzaCh6dCksbHQ9enQsYXQ9ZWU/P2F0fWZ1bmN0aW9uIGt0KHp0KXt2YXIgZWU9enQub3V0ZXJXaWR0aCgpKzIqVyxWdD16dC5vdXRlckhlaWdodCgpKzIqVyxmZT1lZS8yLGdlPVZ0LzIsbmU9enQucG9zaXRpb24oKTtpZihuZS54LWZlPD15JiZ5PD1uZS54K2ZlJiZuZS55LWdlPD1nJiZnPD1uZS55K2dlKXt2YXIgUGU9RC5ub2RlU2hhcGVzW0EuZ2V0Tm9kZVNoYXBlKHp0KV07aWYoUGUuY2hlY2tQb2ludCh5LGcsMCxlZSxWdCxuZS54LG5lLnkpKXJldHVybiBBdCh6dCwwKSwhMH19ZnVuY3Rpb24gTXQoenQpe3ZhciBlZT16dC5fcHJpdmF0ZSxWdD1lZS5yc2NyYXRjaCxmZT16dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxnZT16dC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsbmU9ZmUvMitHLFBlPW5lKm5lLHBlPW5lKjIsRW49ZWUuc291cmNlLERuPWVlLnRhcmdldCxibjtpZihWdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fFZ0LmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8VnQuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIHplPVZ0LmFsbHB0cyxWZT0wO1ZlKzM8emUubGVuZ3RoO1ZlKz0yKWlmKExZKHksZyx6ZVtWZV0semVbVmUrMV0semVbVmUrMl0semVbVmUrM10scGUpJiZQZT4oYm49TlkoeSxnLHplW1ZlXSx6ZVtWZSsxXSx6ZVtWZSsyXSx6ZVtWZSszXSkpKXJldHVybiBBdCh6dCxibiksITB9ZWxzZSBpZihWdC5lZGdlVHlwZT09PSJiZXppZXIifHxWdC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fFZ0LmVkZ2VUeXBlPT09InNlbGYifHxWdC5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgemU9VnQuYWxscHRzLFZlPTA7VmUrNTxWdC5hbGxwdHMubGVuZ3RoO1ZlKz00KWlmKE1ZKHksZyx6ZVtWZV0semVbVmUrMV0semVbVmUrMl0semVbVmUrM10semVbVmUrNF0semVbVmUrNV0scGUpJiZQZT4oYm49T1koeSxnLHplW1ZlXSx6ZVtWZSsxXSx6ZVtWZSsyXSx6ZVtWZSszXSx6ZVtWZSs0XSx6ZVtWZSs1XSkpKXJldHVybiBBdCh6dCxibiksITB9Zm9yKHZhciBFbj1Fbnx8ZWUuc291cmNlLERuPURufHxlZS50YXJnZXQsS249QS5nZXRBcnJvd1dpZHRoKGZlLGdlKSxTbj1be25hbWU6InNvdXJjZSIseDpWdC5hcnJvd1N0YXJ0WCx5OlZ0LmFycm93U3RhcnRZLGFuZ2xlOlZ0LnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6VnQuYXJyb3dFbmRYLHk6VnQuYXJyb3dFbmRZLGFuZ2xlOlZ0LnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OlZ0Lm1pZFgseTpWdC5taWRZLGFuZ2xlOlZ0Lm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OlZ0Lm1pZFgseTpWdC5taWRZLGFuZ2xlOlZ0Lm1pZHRndEFycm93QW5nbGV9XSxWZT0wO1ZlPFNuLmxlbmd0aDtWZSsrKXt2YXIgV249U25bVmVdLHJyPUQuYXJyb3dTaGFwZXNbenQucHN0eWxlKFduLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSx2cj16dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihyci5yb3VnaENvbGxpZGUoeSxnLEtuLFduLmFuZ2xlLHt4OlduLngseTpXbi55fSx2cixHKSYmcnIuY29sbGlkZSh5LGcsS24sV24uYW5nbGUse3g6V24ueCx5OlduLnl9LHZyLEcpKXJldHVybiBBdCh6dCksITB9UyYmJC5sZW5ndGg+MCYmKGt0KEVuKSxrdChEbikpfWZ1bmN0aW9uIER0KHp0LGVlLFZ0KXtyZXR1cm4gYnAoenQsZWUsVnQpfWZ1bmN0aW9uIGp0KHp0LGVlKXt2YXIgVnQ9enQuX3ByaXZhdGUsZmU9ZXQsZ2U7ZWU/Z2U9ZWUrIi0iOmdlPSIiLHp0LmJvdW5kaW5nQm94KCk7dmFyIG5lPVZ0LmxhYmVsQm91bmRzW2VlfHwibWFpbiJdLFBlPXp0LnBzdHlsZShnZSsibGFiZWwiKS52YWx1ZSxwZT16dC5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFwZXx8IVBlKSl7dmFyIGJuPUR0KFZ0LnJzY3JhdGNoLCJsYWJlbFgiLGVlKSx6ZT1EdChWdC5yc2NyYXRjaCwibGFiZWxZIixlZSksVmU9RHQoVnQucnNjcmF0Y2gsImxhYmVsQW5nbGUiLGVlKSxFbj16dC5wc3R5bGUoZ2UrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLERuPXp0LnBzdHlsZShnZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsS249bmUueDEtZmUtRW4sU249bmUueDIrZmUtRW4sV249bmUueTEtZmUtRG4scnI9bmUueTIrZmUtRG47aWYoVmUpe3ZhciB2cj1NYXRoLmNvcyhWZSksdXI9TWF0aC5zaW4oVmUpLHRyPWZ1bmN0aW9uKGthLENpKXtyZXR1cm4ga2E9a2EtYm4sQ2k9Q2ktemUse3g6a2EqdnItQ2kqdXIrYm4seTprYSp1citDaSp2cit6ZX19LHduPXRyKEtuLFduKSxncj10cihLbixyciksZnI9dHIoU24sV24pLEpyPXRyKFNuLHJyKSx3aT1bd24ueCtFbix3bi55K0RuLGZyLngrRW4sZnIueStEbixKci54K0VuLEpyLnkrRG4sZ3IueCtFbixnci55K0RuXTtpZihqZCh5LGcsd2kpKXJldHVybiBBdCh6dCksITB9ZWxzZSBpZihHNShuZSx5LGcpKXJldHVybiBBdCh6dCksITB9fWZvcih2YXIgWnQ9Ty5sZW5ndGgtMTtadD49MDtadC0tKXt2YXIgS3Q9T1tadF07S3QuaXNOb2RlKCk/a3QoS3QpfHxqdChLdCk6TXQoS3QpfHxqdChLdCl8fGp0KEt0LCJzb3VyY2UiKXx8anQoS3QsInRhcmdldCIpfXJldHVybiAkfSxMMy5nZXRBbGxJbkJveD1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsRD1bXSxPPU1hdGgubWluKHkseCksJD1NYXRoLm1heCh5LHgpLHE9TWF0aC5taW4oZyxUKSxTPU1hdGgubWF4KGcsVCk7eT1PLHg9JCxnPXEsVD1TO2Zvcih2YXIgRz1SZCh7eDE6eSx5MTpnLHgyOngseTI6VH0pLFc9MDtXPEEubGVuZ3RoO1crKyl7dmFyIGV0PUFbV107aWYoZXQuaXNOb2RlKCkpe3ZhciBhdD1ldCxsdD1hdC5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7RUwoRyxsdCkmJiF0RihsdCxHKSYmRC5wdXNoKGF0KX1lbHNle3ZhciBmdD1ldCxBdD1mdC5fcHJpdmF0ZSxrdD1BdC5yc2NyYXRjaDtpZihrdC5zdGFydFghPW51bGwmJmt0LnN0YXJ0WSE9bnVsbCYmIUc1KEcsa3Quc3RhcnRYLGt0LnN0YXJ0WSl8fGt0LmVuZFghPW51bGwmJmt0LmVuZFkhPW51bGwmJiFHNShHLGt0LmVuZFgsa3QuZW5kWSkpY29udGludWU7aWYoa3QuZWRnZVR5cGU9PT0iYmV6aWVyInx8a3QuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxrdC5lZGdlVHlwZT09PSJzZWxmInx8a3QuZWRnZVR5cGU9PT0iY29tcG91bmQifHxrdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fGt0LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBNdD1BdC5yc3R5bGUuYmV6aWVyUHRzfHxBdC5yc3R5bGUubGluZVB0c3x8QXQucnN0eWxlLmhheXN0YWNrUHRzLER0PSEwLGp0PTA7anQ8TXQubGVuZ3RoO2p0KyspaWYoIUFZKEcsTXRbanRdKSl7RHQ9ITE7YnJlYWt9RHQmJkQucHVzaChmdCl9ZWxzZShrdC5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fGt0LmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJkQucHVzaChmdCl9fXJldHVybiBEfTt2YXIgcDk9e307cDkuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWcuZWRnZVR5cGU9PT0iaGF5c3RhY2siLFQ9Zy5lZGdlVHlwZT09PSJiZXppZXIiLEE9Zy5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsRD1nLmVkZ2VUeXBlPT09InNlZ21lbnRzIixPPWcuZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9Zy5lZGdlVHlwZT09PSJzZWxmIixxLFMsRyxXLGV0LGF0LGt0LE10O2lmKHg/KEc9Zy5oYXlzdGFja1B0c1swXSxXPWcuaGF5c3RhY2tQdHNbMV0sZXQ9Zy5oYXlzdGFja1B0c1syXSxhdD1nLmhheXN0YWNrUHRzWzNdKTooRz1nLmFycm93U3RhcnRYLFc9Zy5hcnJvd1N0YXJ0WSxldD1nLmFycm93RW5kWCxhdD1nLmFycm93RW5kWSksa3Q9Zy5taWRYLE10PWcubWlkWSxEKXE9Ry1nLnNlZ3B0c1swXSxTPVctZy5zZWdwdHNbMV07ZWxzZSBpZihBfHxPfHwkfHxUKXt2YXIgbHQ9Zy5hbGxwdHMsZnQ9cmYobHRbMF0sbHRbMl0sbHRbNF0sLjEpLEF0PXJmKGx0WzFdLGx0WzNdLGx0WzVdLC4xKTtxPUctZnQsUz1XLUF0fWVsc2UgcT1HLWt0LFM9Vy1NdDtnLnNyY0Fycm93QW5nbGU9TlQocSxTKTt2YXIga3Q9Zy5taWRYLE10PWcubWlkWTtpZih4JiYoa3Q9KEcrZXQpLzIsTXQ9KFcrYXQpLzIpLHE9ZXQtRyxTPWF0LVcsRCl7dmFyIGx0PWcuYWxscHRzO2lmKGx0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgRHQ9bHQubGVuZ3RoLzIsanQ9RHQtMjtxPWx0W0R0XS1sdFtqdF0sUz1sdFtEdCsxXS1sdFtqdCsxXX1lbHNle3ZhciBEdD1sdC5sZW5ndGgvMi0xLGp0PUR0LTIsWnQ9RHQrMjtxPWx0W0R0XS1sdFtqdF0sUz1sdFtEdCsxXS1sdFtqdCsxXX19ZWxzZSBpZihBfHxPfHwkKXt2YXIgbHQ9Zy5hbGxwdHMsS3Q9Zy5jdHJscHRzLHp0LGVlLFZ0LGZlO2lmKEt0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgZ2U9bHQubGVuZ3RoLzItMSxuZT1nZSsyLFBlPW5lKzI7enQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sMCksZWU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sMCksVnQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sMWUtNCksZmU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sMWUtNCl9ZWxzZXt2YXIgbmU9bHQubGVuZ3RoLzItMSxnZT1uZS0yLFBlPW5lKzI7enQ9cmYobHRbZ2VdLGx0W25lXSxsdFtQZV0sLjQ5OTkpLGVlPXJmKGx0W2dlKzFdLGx0W25lKzFdLGx0W1BlKzFdLC40OTk5KSxWdD1yZihsdFtnZV0sbHRbbmVdLGx0W1BlXSwuNSksZmU9cmYobHRbZ2UrMV0sbHRbbmUrMV0sbHRbUGUrMV0sLjUpfXE9VnQtenQsUz1mZS1lZX1pZihnLm1pZHRndEFycm93QW5nbGU9TlQocSxTKSxnLm1pZERpc3BYPXEsZy5taWREaXNwWT1TLHEqPS0xLFMqPS0xLEQpe3ZhciBsdD1nLmFsbHB0cztpZihsdC5sZW5ndGgvMiUyIT09MCl7dmFyIER0PWx0Lmxlbmd0aC8yLTEsWnQ9RHQrMjtxPS0obHRbWnRdLWx0W0R0XSksUz0tKGx0W1p0KzFdLWx0W0R0KzFdKX19aWYoZy5taWRzcmNBcnJvd0FuZ2xlPU5UKHEsUyksRClxPWV0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0yXSxTPWF0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKEF8fE98fCR8fFQpe3ZhciBsdD1nLmFsbHB0cyxwZT1sdC5sZW5ndGgsZnQ9cmYobHRbcGUtNl0sbHRbcGUtNF0sbHRbcGUtMl0sLjkpLEF0PXJmKGx0W3BlLTVdLGx0W3BlLTNdLGx0W3BlLTFdLC45KTtxPWV0LWZ0LFM9YXQtQXR9ZWxzZSBxPWV0LWt0LFM9YXQtTXQ7Zy50Z3RBcnJvd0FuZ2xlPU5UKHEsUyl9LHA5LmdldEFycm93V2lkdGg9cDkuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sVD14W3krIiwgIitnXTtyZXR1cm4gVHx8KFQ9TWF0aC5tYXgoTWF0aC5wb3coeSoxMy4zNywuOSksMjkpKmcseFt5KyIsICIrZ109VCxUKX07dmFyIGlkPXt9O2lkLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9eVtnXSxUPXguX3ByaXZhdGUsQT1ULnJzY3JhdGNoO2lmKCFBLmhheXN0YWNrKXt2YXIgRD1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtBLnNvdXJjZT17eDpNYXRoLmNvcyhEKSx5Ok1hdGguc2luKEQpfSxEPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLEEudGFyZ2V0PXt4Ok1hdGguY29zKEQpLHk6TWF0aC5zaW4oRCl9fXZhciBPPVQuc291cmNlLCQ9VC50YXJnZXQscT1PLnBvc2l0aW9uKCksUz0kLnBvc2l0aW9uKCksRz1PLndpZHRoKCksVz0kLndpZHRoKCksZXQ9Ty5oZWlnaHQoKSxhdD0kLmhlaWdodCgpLGx0PXgucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxmdD1sdC8yO0EuaGF5c3RhY2tQdHM9QS5hbGxwdHM9W0Euc291cmNlLngqRypmdCtxLngsQS5zb3VyY2UueSpldCpmdCtxLnksQS50YXJnZXQueCpXKmZ0K1MueCxBLnRhcmdldC55KmF0KmZ0K1MueV0sQS5taWRYPShBLmFsbHB0c1swXStBLmFsbHB0c1syXSkvMixBLm1pZFk9KEEuYWxscHRzWzFdK0EuYWxscHRzWzNdKS8yLEEuZWRnZVR5cGU9ImhheXN0YWNrIixBLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyh4KSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh4KX19LGlkLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2gsVD1nLnBvc1B0cyxBPWcuaW50ZXJzZWN0aW9uUHRzLEQ9Zy52ZWN0b3JOb3JtSW52ZXJzZSxPPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLCQ9eS5wc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIpLHE9eS5wc3R5bGUoInNlZ21lbnQtZGlzdGFuY2VzIiksUz1NYXRoLm1pbigkLnBmVmFsdWUubGVuZ3RoLHEucGZWYWx1ZS5sZW5ndGgpO3guZWRnZVR5cGU9InNlZ21lbnRzIix4LnNlZ3B0cz1bXTtmb3IodmFyIEc9MDtHPFM7RysrKXt2YXIgVz0kLnBmVmFsdWVbR10sZXQ9cS5wZlZhbHVlW0ddLGF0PTEtVyxsdD1XLGZ0PU89PT0ibm9kZS1wb3NpdGlvbiI/VDpBLEF0PXt4OmZ0LngxKmF0K2Z0LngyKmx0LHk6ZnQueTEqYXQrZnQueTIqbHR9O3guc2VncHRzLnB1c2goQXQueCtELngqZXQsQXQueStELnkqZXQpfX0saWQuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaCxEPWcuZGlyQ291bnRzLE89Zy5zcmNQb3MsJD15LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxxPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxTPXkucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsRz15LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsVz15LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO0EuZWRnZVR5cGU9InNlbGYiO3ZhciBldD14LGF0PVc7VCYmKGV0PTAsYXQ9cSk7dmFyIGx0PVMtTWF0aC5QSS8yLGZ0PWx0LUcvMixBdD1sdCtHLzIsa3Q9UysiXyIrRztldD1EW2t0XT09PXZvaWQgMD9EW2t0XT0wOisrRFtrdF0sQS5jdHJscHRzPVtPLngrTWF0aC5jb3MoZnQpKjEuNCphdCooZXQvMysxKSxPLnkrTWF0aC5zaW4oZnQpKjEuNCphdCooZXQvMysxKSxPLngrTWF0aC5jb3MoQXQpKjEuNCphdCooZXQvMysxKSxPLnkrTWF0aC5zaW4oQXQpKjEuNCphdCooZXQvMysxKV19LGlkLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaDtBLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIEQ9Zy5zcmNQb3MsTz1nLnRndFBvcywkPWcuc3JjVyxxPWcuc3JjSCxTPWcudGd0VyxHPWcudGd0SCxXPXkucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsZXQ9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksYXQ9ZXQ/ZXQucGZWYWx1ZVswXTp2b2lkIDAsbHQ9eCxmdD1XO1QmJihsdD0wLGZ0PWF0KTt2YXIgQXQ9NTAsa3Q9e3g6RC54LSQvMix5OkQueS1xLzJ9LE10PXt4Ok8ueC1TLzIseTpPLnktRy8yfSxEdD17eDpNYXRoLm1pbihrdC54LE10LngpLHk6TWF0aC5taW4oa3QueSxNdC55KX0sanQ9LjUsWnQ9TWF0aC5tYXgoanQsTWF0aC5sb2coJCouMDEpKSxLdD1NYXRoLm1heChqdCxNYXRoLmxvZyhTKi4wMSkpO0EuY3RybHB0cz1bRHQueCxEdC55LSgxK01hdGgucG93KEF0LDEuMTIpLzEwMCkqZnQqKGx0LzMrMSkqWnQsRHQueC0oMStNYXRoLnBvdyhBdCwxLjEyKS8xMDApKmZ0KihsdC8zKzEpKkt0LER0LnldfSxpZC5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHkpe3kuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0saWQuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPXkuX3ByaXZhdGUucnNjcmF0Y2gsTz1nLnZlY3Rvck5vcm1JbnZlcnNlLCQ9Zy5wb3NQdHMscT1nLmludGVyc2VjdGlvblB0cyxTPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLEc9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxXPXkucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLGV0PXkucHN0eWxlKCJjb250cm9sLXBvaW50LXdlaWdodHMiKSxhdD1XJiZldD9NYXRoLm1pbihXLnZhbHVlLmxlbmd0aCxldC52YWx1ZS5sZW5ndGgpOjEsbHQ9Vz9XLnBmVmFsdWVbMF06dm9pZCAwLGZ0PWV0LnZhbHVlWzBdLEF0PVQ7RC5lZGdlVHlwZT1BdD8ibXVsdGliZXppZXIiOiJiZXppZXIiLEQuY3RybHB0cz1bXTtmb3IodmFyIGt0PTA7a3Q8YXQ7a3QrKyl7dmFyIE10PSguNS1nLmVsZXMubGVuZ3RoLzIreCkqRyooQT8tMToxKSxEdD12b2lkIDAsanQ9WlAoTXQpO0F0JiYobHQ9Vz9XLnBmVmFsdWVba3RdOkcsZnQ9ZXQudmFsdWVba3RdKSxUP0R0PWx0OkR0PWx0IT09dm9pZCAwP2p0Kmx0OnZvaWQgMDt2YXIgWnQ9RHQhPT12b2lkIDA/RHQ6TXQsS3Q9MS1mdCx6dD1mdCxlZT1TPT09Im5vZGUtcG9zaXRpb24iPyQ6cSxWdD17eDplZS54MSpLdCtlZS54Mip6dCx5OmVlLnkxKkt0K2VlLnkyKnp0fTtELmN0cmxwdHMucHVzaChWdC54K08ueCpadCxWdC55K08ueSpadCl9fSxpZC5maW5kVGF4aVBvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2g7eC5lZGdlVHlwZT0ic2VnbWVudHMiO3ZhciBUPSJ2ZXJ0aWNhbCIsQT0iaG9yaXpvbnRhbCIsRD0ibGVmdHdhcmQiLE89InJpZ2h0d2FyZCIsJD0iZG93bndhcmQiLHE9InVwd2FyZCIsUz0iYXV0byIsRz1nLnBvc1B0cyxXPWcuc3JjVyxldD1nLnNyY0gsYXQ9Zy50Z3RXLGx0PWcudGd0SCxmdD15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSxBdD1mdCE9PSJub2RlLXBvc2l0aW9uIixrdD15LnBzdHlsZSgidGF4aS1kaXJlY3Rpb24iKS52YWx1ZSxNdD1rdCxEdD15LnBzdHlsZSgidGF4aS10dXJuIiksanQ9RHQudW5pdHM9PT0iJSIsWnQ9RHQucGZWYWx1ZSxLdD1adDwwLHp0PXkucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxlZT1BdD8oVythdCkvMjowLFZ0PUF0PyhldCtsdCkvMjowLGZlPUcueDItRy54MSxnZT1HLnkyLUcueTEsbmU9ZnVuY3Rpb24oS2ksUG8pe3JldHVybiBLaT4wP01hdGgubWF4KEtpLVBvLDApOk1hdGgubWluKEtpK1BvLDApfSxQZT1uZShmZSxlZSkscGU9bmUoZ2UsVnQpLGJuPSExO010PT09Uz9rdD1NYXRoLmFicyhQZSk+TWF0aC5hYnMocGUpP0E6VDpNdD09PXF8fE10PT09JD8oa3Q9VCxibj0hMCk6KE10PT09RHx8TXQ9PT1PKSYmKGt0PUEsYm49ITApO3ZhciB6ZT1rdD09PVQsVmU9emU/cGU6UGUsRW49emU/Z2U6ZmUsRG49WlAoRW4pLEtuPSExOyEoYm4mJihqdHx8S3QpKSYmKE10PT09JCYmRW48MHx8TXQ9PT1xJiZFbj4wfHxNdD09PUQmJkVuPjB8fE10PT09TyYmRW48MCkmJihEbio9LTEsVmU9RG4qTWF0aC5hYnMoVmUpLEtuPSEwKTt2YXIgU247aWYoanQpe3ZhciBXbj1adDwwPzErWnQ6WnQ7U249V24qVmV9ZWxzZXt2YXIgcnI9WnQ8MD9WZTowO1NuPXJyK1p0KkRufXZhciB2cj1mdW5jdGlvbihLaSl7cmV0dXJuIE1hdGguYWJzKEtpKTx6dHx8TWF0aC5hYnMoS2kpPj1NYXRoLmFicyhWZSl9LHVyPXZyKFNuKSx0cj12cihNYXRoLmFicyhWZSktTWF0aC5hYnMoU24pKSx3bj11cnx8dHI7aWYod24mJiFLbilpZih6ZSl7dmFyIGdyPU1hdGguYWJzKEVuKTw9ZXQvMixmcj1NYXRoLmFicyhmZSk8PWF0LzI7aWYoZ3Ipe3ZhciBKcj0oRy54MStHLngyKS8yLHdpPUcueTEsS3M9Ry55Mjt4LnNlZ3B0cz1bSnIsd2ksSnIsS3NdfWVsc2UgaWYoZnIpe3ZhciBrYT0oRy55MStHLnkyKS8yLENpPUcueDEsaGk9Ry54Mjt4LnNlZ3B0cz1bQ2ksa2EsaGksa2FdfWVsc2UgeC5zZWdwdHM9W0cueDEsRy55Ml19ZWxzZXt2YXIgZ3M9TWF0aC5hYnMoRW4pPD1XLzIscWk9TWF0aC5hYnMoZ2UpPD1sdC8yO2lmKGdzKXt2YXIgU2k9KEcueTErRy55MikvMixVaT1HLngxLEdhPUcueDI7eC5zZWdwdHM9W1VpLFNpLEdhLFNpXX1lbHNlIGlmKHFpKXt2YXIgWXM9KEcueDErRy54MikvMix6cz1HLnkxLEVyPUcueTI7eC5zZWdwdHM9W1lzLHpzLFlzLEVyXX1lbHNlIHguc2VncHRzPVtHLngyLEcueTFdfWVsc2UgaWYoemUpe3ZhciBRdD1HLnkxK1NuKyhBdD9ldC8yKkRuOjApLGpuPUcueDEsX3I9Ry54Mjt4LnNlZ3B0cz1bam4sUXQsX3IsUXRdfWVsc2V7dmFyIGlyPUcueDErU24rKEF0P1cvMipEbjowKSxzcj1HLnkxLElhPUcueTI7eC5zZWdwdHM9W2lyLHNyLGlyLElhXX19LGlkLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFQ9Zy5zcmNQb3MsQT1nLnRndFBvcyxEPWcuc3JjVyxPPWcuc3JjSCwkPWcudGd0VyxxPWcudGd0SCxTPWcuc3JjU2hhcGUsRz1nLnRndFNoYXBlLFc9IVgoeC5zdGFydFgpfHwhWCh4LnN0YXJ0WSksZXQ9IVgoeC5hcnJvd1N0YXJ0WCl8fCFYKHguYXJyb3dTdGFydFkpLGF0PSFYKHguZW5kWCl8fCFYKHguZW5kWSksbHQ9IVgoeC5hcnJvd0VuZFgpfHwhWCh4LmFycm93RW5kWSksZnQ9MyxBdD10aGlzLmdldEFycm93V2lkdGgoeS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx5LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsa3Q9ZnQqQXQsTXQ9RTMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LnN0YXJ0WCx5Onguc3RhcnRZfSksRHQ9TXQ8a3QsanQ9RTMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LmVuZFgseTp4LmVuZFl9KSxadD1qdDxrdCxLdD0hMTtpZihXfHxldHx8RHQpe0t0PSEwO3ZhciB6dD17eDp4LmN0cmxwdHNbMF0tVC54LHk6eC5jdHJscHRzWzFdLVQueX0sZWU9TWF0aC5zcXJ0KHp0LngqenQueCt6dC55Knp0LnkpLFZ0PXt4Onp0LngvZWUseTp6dC55L2VlfSxmZT1NYXRoLm1heChELE8pLGdlPXt4OnguY3RybHB0c1swXStWdC54KjIqZmUseTp4LmN0cmxwdHNbMV0rVnQueSoyKmZlfSxuZT1TLmludGVyc2VjdExpbmUoVC54LFQueSxELE8sZ2UueCxnZS55LDApO0R0Pyh4LmN0cmxwdHNbMF09eC5jdHJscHRzWzBdK1Z0LngqKGt0LU10KSx4LmN0cmxwdHNbMV09eC5jdHJscHRzWzFdK1Z0LnkqKGt0LU10KSk6KHguY3RybHB0c1swXT1uZVswXStWdC54Kmt0LHguY3RybHB0c1sxXT1uZVsxXStWdC55Kmt0KX1pZihhdHx8bHR8fFp0KXtLdD0hMDt2YXIgUGU9e3g6eC5jdHJscHRzWzBdLUEueCx5OnguY3RybHB0c1sxXS1BLnl9LHBlPU1hdGguc3FydChQZS54KlBlLngrUGUueSpQZS55KSxibj17eDpQZS54L3BlLHk6UGUueS9wZX0semU9TWF0aC5tYXgoRCxPKSxWZT17eDp4LmN0cmxwdHNbMF0rYm4ueCoyKnplLHk6eC5jdHJscHRzWzFdK2JuLnkqMip6ZX0sRW49Ry5pbnRlcnNlY3RMaW5lKEEueCxBLnksJCxxLFZlLngsVmUueSwwKTtadD8oeC5jdHJscHRzWzBdPXguY3RybHB0c1swXStibi54KihrdC1qdCkseC5jdHJscHRzWzFdPXguY3RybHB0c1sxXStibi55KihrdC1qdCkpOih4LmN0cmxwdHNbMF09RW5bMF0rYm4ueCprdCx4LmN0cmxwdHNbMV09RW5bMV0rYm4ueSprdCl9S3QmJnRoaXMuZmluZEVuZHBvaW50cyh5KX19LGlkLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZy5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGcuZWRnZVR5cGU9PT0iYmV6aWVyInx8Zy5lZGdlVHlwZT09PSJzZWxmInx8Zy5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2cuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpO2Zvcih2YXIgeD0wO3grMTxnLmN0cmxwdHMubGVuZ3RoO3grPTIpZy5hbGxwdHMucHVzaChnLmN0cmxwdHNbeF0sZy5jdHJscHRzW3grMV0pLHgrMzxnLmN0cmxwdHMubGVuZ3RoJiZnLmFsbHB0cy5wdXNoKChnLmN0cmxwdHNbeF0rZy5jdHJscHRzW3grMl0pLzIsKGcuY3RybHB0c1t4KzFdK2cuY3RybHB0c1t4KzNdKS8yKTtnLmFsbHB0cy5wdXNoKGcuZW5kWCxnLmVuZFkpO3ZhciBULEE7Zy5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhUPWcuYWxscHRzLmxlbmd0aC8yLTEsZy5taWRYPWcuYWxscHRzW1RdLGcubWlkWT1nLmFsbHB0c1tUKzFdKTooVD1nLmFsbHB0cy5sZW5ndGgvMi0zLEE9LjUsZy5taWRYPXJmKGcuYWxscHRzW1RdLGcuYWxscHRzW1QrMl0sZy5hbGxwdHNbVCs0XSxBKSxnLm1pZFk9cmYoZy5hbGxwdHNbVCsxXSxnLmFsbHB0c1tUKzNdLGcuYWxscHRzW1QrNV0sQSkpfWVsc2UgaWYoZy5lZGdlVHlwZT09PSJzdHJhaWdodCIpZy5hbGxwdHM9W2cuc3RhcnRYLGcuc3RhcnRZLGcuZW5kWCxnLmVuZFldLGcubWlkWD0oZy5zdGFydFgrZy5lbmRYK2cuYXJyb3dTdGFydFgrZy5hcnJvd0VuZFgpLzQsZy5taWRZPShnLnN0YXJ0WStnLmVuZFkrZy5hcnJvd1N0YXJ0WStnLmFycm93RW5kWSkvNDtlbHNlIGlmKGcuZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKGcuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpLGcuYWxscHRzLnB1c2guYXBwbHkoZy5hbGxwdHMsZy5zZWdwdHMpLGcuYWxscHRzLnB1c2goZy5lbmRYLGcuZW5kWSksZy5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgRD1nLnNlZ3B0cy5sZW5ndGgvMixPPUQtMjtnLm1pZFg9KGcuc2VncHRzW09dK2cuc2VncHRzW0RdKS8yLGcubWlkWT0oZy5zZWdwdHNbTysxXStnLnNlZ3B0c1tEKzFdKS8yfWVsc2V7dmFyICQ9Zy5zZWdwdHMubGVuZ3RoLzItMTtnLm1pZFg9Zy5zZWdwdHNbJF0sZy5taWRZPWcuc2VncHRzWyQrMV19fSxpZC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO2cubm9kZXNPdmVybGFwfHxYKGcuc3RhcnRYKSYmWChnLnN0YXJ0WSkmJlgoZy5lbmRYKSYmWChnLmVuZFkpP2cubG9nZ2VkRXJyPSExOmcubG9nZ2VkRXJyfHwoZy5sb2dnZWRFcnI9ITAsU2MoIkVkZ2UgYCIreS5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LGlkLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2lmKCEoIXl8fHkubGVuZ3RoPT09MCkpe2Zvcih2YXIgeD10aGlzLFQ9eC5jeSxBPVQuaGFzQ29tcG91bmROb2RlcygpLEQ9e21hcDpuZXcgemIsZ2V0OmZ1bmN0aW9uKHp0KXt2YXIgZWU9dGhpcy5tYXAuZ2V0KHp0WzBdKTtyZXR1cm4gZWUhPW51bGw/ZWUuZ2V0KHp0WzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24oenQsZWUpe3ZhciBWdD10aGlzLm1hcC5nZXQoenRbMF0pO1Z0PT1udWxsJiYoVnQ9bmV3IHpiLHRoaXMubWFwLnNldCh6dFswXSxWdCkpLFZ0LnNldCh6dFsxXSxlZSl9fSxPPVtdLCQ9W10scT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdLEc9Uy5fcHJpdmF0ZSxXPVMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoUy5yZW1vdmVkKCl8fCFTLnRha2VzVXBTcGFjZSgpKSl7aWYoVz09PSJoYXlzdGFjayIpeyQucHVzaChTKTtjb250aW51ZX12YXIgZXQ9Vz09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Vz09PSJzZWdtZW50cyJ8fFc9PT0ic3RyYWlnaHQifHxXPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8Vz09PSJ0YXhpIixhdD1XPT09InVuYnVuZGxlZC1iZXppZXIifHxXPT09ImJlemllciIsbHQ9Ry5zb3VyY2UsZnQ9Ry50YXJnZXQsQXQ9bHQucG9vbEluZGV4KCksa3Q9ZnQucG9vbEluZGV4KCksTXQ9W0F0LGt0XS5zb3J0KCksRHQ9RC5nZXQoTXQpO0R0PT1udWxsJiYoRHQ9e2VsZXM6W119LEQuc2V0KE10LER0KSxPLnB1c2goTXQpKSxEdC5lbGVzLnB1c2goUyksZXQmJihEdC5oYXNVbmJ1bmRsZWQ9ITApLGF0JiYoRHQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBqdD1mdW5jdGlvbih6dCl7dmFyIGVlPU9benRdLFZ0PUQuZ2V0KGVlKSxmZT12b2lkIDA7aWYoIVZ0Lmhhc1VuYnVuZGxlZCl7dmFyIGdlPVZ0LmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihFcil7cmV0dXJuIEVyLmlzQnVuZGxlZEJlemllcigpfSk7bUwoVnQuZWxlcyksZ2UuZm9yRWFjaChmdW5jdGlvbihFcil7cmV0dXJuIFZ0LmVsZXMucHVzaChFcil9KSxWdC5lbGVzLnNvcnQoZnVuY3Rpb24oRXIsUXQpe3JldHVybiBFci5wb29sSW5kZXgoKS1RdC5wb29sSW5kZXgoKX0pfXZhciBuZT1WdC5lbGVzWzBdLFBlPW5lLnNvdXJjZSgpLHBlPW5lLnRhcmdldCgpO2lmKFBlLnBvb2xJbmRleCgpPnBlLnBvb2xJbmRleCgpKXt2YXIgYm49UGU7UGU9cGUscGU9Ym59dmFyIHplPVZ0LnNyY1Bvcz1QZS5wb3NpdGlvbigpLFZlPVZ0LnRndFBvcz1wZS5wb3NpdGlvbigpLEVuPVZ0LnNyY1c9UGUub3V0ZXJXaWR0aCgpLERuPVZ0LnNyY0g9UGUub3V0ZXJIZWlnaHQoKSxLbj1WdC50Z3RXPXBlLm91dGVyV2lkdGgoKSxTbj1WdC50Z3RIPXBlLm91dGVySGVpZ2h0KCksV249VnQuc3JjU2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKFBlKV0scnI9VnQudGd0U2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKHBlKV07VnQuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciB2cj0wO3ZyPFZ0LmVsZXMubGVuZ3RoO3ZyKyspe3ZhciB1cj1WdC5lbGVzW3ZyXSx0cj11clswXS5fcHJpdmF0ZS5yc2NyYXRjaCx3bj11ci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZ3I9d249PT0idW5idW5kbGVkLWJlemllciJ8fHduPT09InNlZ21lbnRzInx8d249PT0idGF4aSIsZnI9IVBlLnNhbWUodXIuc291cmNlKCkpO2lmKCFWdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZQZSE9PXBlJiYoVnQuaGFzQmV6aWVyfHxWdC5oYXNVbmJ1bmRsZWQpKXtWdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBKcj1Xbi5pbnRlcnNlY3RMaW5lKHplLngsemUueSxFbixEbixWZS54LFZlLnksMCksd2k9VnQuc3JjSW50bj1KcixLcz1yci5pbnRlcnNlY3RMaW5lKFZlLngsVmUueSxLbixTbix6ZS54LHplLnksMCksa2E9VnQudGd0SW50bj1LcyxDaT1WdC5pbnRlcnNlY3Rpb25QdHM9e3gxOkpyWzBdLHgyOktzWzBdLHkxOkpyWzFdLHkyOktzWzFdfSxoaT1WdC5wb3NQdHM9e3gxOnplLngseDI6VmUueCx5MTp6ZS55LHkyOlZlLnl9LGdzPUtzWzFdLUpyWzFdLHFpPUtzWzBdLUpyWzBdLFNpPU1hdGguc3FydChxaSpxaStncypncyksVWk9VnQudmVjdG9yPXt4OnFpLHk6Z3N9LEdhPVZ0LnZlY3Rvck5vcm09e3g6VWkueC9TaSx5OlVpLnkvU2l9LFlzPXt4Oi1HYS55LHk6R2EueH07VnQubm9kZXNPdmVybGFwPSFYKFNpKXx8cnIuY2hlY2tQb2ludChKclswXSxKclsxXSwwLEtuLFNuLFZlLngsVmUueSl8fFduLmNoZWNrUG9pbnQoS3NbMF0sS3NbMV0sMCxFbixEbix6ZS54LHplLnkpLFZ0LnZlY3Rvck5vcm1JbnZlcnNlPVlzLGZlPXtub2Rlc092ZXJsYXA6VnQubm9kZXNPdmVybGFwLGRpckNvdW50czpWdC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6VnQuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpWdC5oYXNVbmJ1bmRsZWQsZWxlczpWdC5lbGVzLHNyY1BvczpWZSx0Z3RQb3M6emUsc3JjVzpLbixzcmNIOlNuLHRndFc6RW4sdGd0SDpEbixzcmNJbnRuOmthLHRndEludG46d2ksc3JjU2hhcGU6cnIsdGd0U2hhcGU6V24scG9zUHRzOnt4MTpoaS54Mix5MTpoaS55Mix4MjpoaS54MSx5MjpoaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpDaS54Mix5MTpDaS55Mix4MjpDaS54MSx5MjpDaS55MX0sdmVjdG9yOnt4Oi1VaS54LHk6LVVpLnl9LHZlY3Rvck5vcm06e3g6LUdhLngseTotR2EueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVlzLngseTotWXMueX19fXZhciB6cz1mcj9mZTpWdDt0ci5ub2Rlc092ZXJsYXA9enMubm9kZXNPdmVybGFwLHRyLnNyY0ludG49enMuc3JjSW50bix0ci50Z3RJbnRuPXpzLnRndEludG4sQSYmKFBlLmlzUGFyZW50KCl8fFBlLmlzQ2hpbGQoKXx8cGUuaXNQYXJlbnQoKXx8cGUuaXNDaGlsZCgpKSYmKFBlLnBhcmVudHMoKS5hbnlTYW1lKHBlKXx8cGUucGFyZW50cygpLmFueVNhbWUoUGUpfHxQZS5zYW1lKHBlKSYmUGUuaXNQYXJlbnQoKSk/Zy5maW5kQ29tcG91bmRMb29wUG9pbnRzKHVyLHpzLHZyLGdyKTpQZT09PXBlP2cuZmluZExvb3BQb2ludHModXIsenMsdnIsZ3IpOnduPT09InNlZ21lbnRzIj9nLmZpbmRTZWdtZW50c1BvaW50cyh1cix6cyk6d249PT0idGF4aSI/Zy5maW5kVGF4aVBvaW50cyh1cix6cyk6d249PT0ic3RyYWlnaHQifHwhZ3ImJlZ0LmVsZXMubGVuZ3RoJTI9PT0xJiZ2cj09PU1hdGguZmxvb3IoVnQuZWxlcy5sZW5ndGgvMik/Zy5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKHVyKTpnLmZpbmRCZXppZXJQb2ludHModXIsenMsdnIsZ3IsZnIpLGcuZmluZEVuZHBvaW50cyh1ciksZy50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKHVyLHpzKSxnLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKHVyKSxnLnN0b3JlQWxscHRzKHVyKSxnLnN0b3JlRWRnZVByb2plY3Rpb25zKHVyKSxnLmNhbGN1bGF0ZUFycm93QW5nbGVzKHVyKSxnLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnModXIpLGcuY2FsY3VsYXRlTGFiZWxBbmdsZXModXIpfX0sWnQ9MDtadDxPLmxlbmd0aDtadCsrKWp0KFp0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIGpCKHkpe3ZhciBnPVtdO2lmKHkhPW51bGwpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCs9Mil7dmFyIFQ9eVt4XSxBPXlbeCsxXTtnLnB1c2goe3g6VCx5OkF9KX1yZXR1cm4gZ319aWQuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoLHg9Zy5lZGdlVHlwZTtpZih4PT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSksakIoZy5zZWdwdHMpfSxpZC5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXlbMF0uX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlO2lmKHg9PT0iYmV6aWVyInx8eD09PSJtdWx0aWJlemllciJ8fHg9PT0ic2VsZiJ8fHg9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxqQihnLmN0cmxwdHMpfSxpZC5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9eVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSkse3g6Zy5taWRYLHk6Zy5taWRZfX07dmFyIEJrPXt9O0JrLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD15LnBvc2l0aW9uKCksQT15Lm91dGVyV2lkdGgoKSxEPXkub3V0ZXJIZWlnaHQoKTtpZihnLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBPPVtnLnBmVmFsdWVbMF0sZy5wZlZhbHVlWzFdXTtyZXR1cm4gZy51bml0c1swXT09PSIlIiYmKE9bMF09T1swXSpBKSxnLnVuaXRzWzFdPT09IiUiJiYoT1sxXT1PWzFdKkQpLE9bMF0rPVQueCxPWzFdKz1ULnksT31lbHNle3ZhciAkPWcucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgcT0yKk1hdGgubWF4KEEsRCksUz1bVC54K01hdGguY29zKCQpKnEsVC55K01hdGguc2luKCQpKnFdO3JldHVybiB4Lm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeSldLmludGVyc2VjdExpbmUoVC54LFQueSxBLEQsU1swXSxTWzFdLDApfX0sQmsuZmluZEVuZHBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHgsVD15LnNvdXJjZSgpWzBdLEE9eS50YXJnZXQoKVswXSxEPVQucG9zaXRpb24oKSxPPUEucG9zaXRpb24oKSwkPXkucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXkucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxTPXkucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxHPXkucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxXPXkucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGV0PXkuX3ByaXZhdGUucnNjcmF0Y2gsYXQ9ZXQuZWRnZVR5cGUsbHQ9Vz09PSJ0YXhpIixmdD1hdD09PSJzZWxmInx8YXQ9PT0iY29tcG91bmQiLEF0PWF0PT09ImJlemllciJ8fGF0PT09Im11bHRpYmV6aWVyInx8ZnQsa3Q9YXQhPT0iYmV6aWVyIixNdD1hdD09PSJzdHJhaWdodCJ8fGF0PT09InNlZ21lbnRzIixEdD1hdD09PSJzZWdtZW50cyIsanQ9QXR8fGt0fHxNdCxadD1mdHx8bHQsS3Q9eS5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLHp0PVp0PyJvdXRzaWRlLXRvLW5vZGUiOkt0LnZhbHVlLGVlPXkucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxWdD1adD8ib3V0c2lkZS10by1ub2RlIjplZS52YWx1ZTtldC5zcmNNYW5FbmRwdD1LdCxldC50Z3RNYW5FbmRwdD1lZTt2YXIgZmUsZ2UsbmUsUGU7aWYoQXQpe3ZhciBwZT1bZXQuY3RybHB0c1swXSxldC5jdHJscHRzWzFdXSxibj1rdD9bZXQuY3RybHB0c1tldC5jdHJscHRzLmxlbmd0aC0yXSxldC5jdHJscHRzW2V0LmN0cmxwdHMubGVuZ3RoLTFdXTpwZTtmZT1ibixnZT1wZX1lbHNlIGlmKE10KXt2YXIgemU9RHQ/ZXQuc2VncHRzLnNsaWNlKDAsMik6W08ueCxPLnldLFZlPUR0P2V0LnNlZ3B0cy5zbGljZShldC5zZWdwdHMubGVuZ3RoLTIpOltELngsRC55XTtmZT1WZSxnZT16ZX1pZihWdD09PSJpbnNpZGUtdG8tbm9kZSIpeD1bTy54LE8ueV07ZWxzZSBpZihlZS51bml0cyl4PXRoaXMubWFudWFsRW5kcHRUb1B4KEEsZWUpO2Vsc2UgaWYoVnQ9PT0ib3V0c2lkZS10by1saW5lIil4PWV0LnRndEludG47ZWxzZSBpZihWdD09PSJvdXRzaWRlLXRvLW5vZGUifHxWdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP25lPWZlOihWdD09PSJvdXRzaWRlLXRvLWxpbmUifHxWdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKG5lPVtELngsRC55XSkseD1nLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoQSldLmludGVyc2VjdExpbmUoTy54LE8ueSxBLm91dGVyV2lkdGgoKSxBLm91dGVySGVpZ2h0KCksbmVbMF0sbmVbMV0sMCksVnQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8VnQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIEVuPUEuX3ByaXZhdGUucnNjcmF0Y2gsRG49RW4ubGFiZWxXaWR0aCxLbj1Fbi5sYWJlbEhlaWdodCxTbj1Fbi5sYWJlbFgsV249RW4ubGFiZWxZLHJyPURuLzIsdnI9S24vMix1cj1BLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTt1cj09PSJ0b3AiP1duLT12cjp1cj09PSJib3R0b20iJiYoV24rPXZyKTt2YXIgdHI9QS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7dHI9PT0ibGVmdCI/U24tPXJyOnRyPT09InJpZ2h0IiYmKFNuKz1ycik7dmFyIHduPXlrKG5lWzBdLG5lWzFdLFtTbi1ycixXbi12cixTbitycixXbi12cixTbitycixXbit2cixTbi1ycixXbit2cl0sTy54LE8ueSk7aWYod24ubGVuZ3RoPjApe3ZhciBncj1ELGZyPVQzKGdyLHE1KHgpKSxKcj1UMyhncixxNSh3bikpLHdpPWZyO2lmKEpyPGZyJiYoeD13bix3aT1Kciksd24ubGVuZ3RoPjIpe3ZhciBLcz1UMyhncix7eDp3blsyXSx5OnduWzNdfSk7S3M8d2kmJih4PVt3blsyXSx3blszXV0pfX19dmFyIGthPUZUKHgsZmUsZy5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHkpK1MpLENpPUZUKHgsZmUsZy5hcnJvd1NoYXBlc1skXS5nYXAoeSkrUyk7aWYoZXQuZW5kWD1DaVswXSxldC5lbmRZPUNpWzFdLGV0LmFycm93RW5kWD1rYVswXSxldC5hcnJvd0VuZFk9a2FbMV0senQ9PT0iaW5zaWRlLXRvLW5vZGUiKXg9W0QueCxELnldO2Vsc2UgaWYoS3QudW5pdHMpeD10aGlzLm1hbnVhbEVuZHB0VG9QeChULEt0KTtlbHNlIGlmKHp0PT09Im91dHNpZGUtdG8tbGluZSIpeD1ldC5zcmNJbnRuO2Vsc2UgaWYoenQ9PT0ib3V0c2lkZS10by1ub2RlInx8enQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9QZT1nZTooenQ9PT0ib3V0c2lkZS10by1saW5lInx8enQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihQZT1bTy54LE8ueV0pLHg9Zy5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFQpXS5pbnRlcnNlY3RMaW5lKEQueCxELnksVC5vdXRlcldpZHRoKCksVC5vdXRlckhlaWdodCgpLFBlWzBdLFBlWzFdLDApLHp0PT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fHp0PT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBoaT1ULl9wcml2YXRlLnJzY3JhdGNoLGdzPWhpLmxhYmVsV2lkdGgscWk9aGkubGFiZWxIZWlnaHQsU2k9aGkubGFiZWxYLFVpPWhpLmxhYmVsWSxHYT1ncy8yLFlzPXFpLzIsenM9VC5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7enM9PT0idG9wIj9VaS09WXM6enM9PT0iYm90dG9tIiYmKFVpKz1Zcyk7dmFyIEVyPVQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO0VyPT09ImxlZnQiP1NpLT1HYTpFcj09PSJyaWdodCImJihTaSs9R2EpO3ZhciBRdD15ayhQZVswXSxQZVsxXSxbU2ktR2EsVWktWXMsU2krR2EsVWktWXMsU2krR2EsVWkrWXMsU2ktR2EsVWkrWXNdLEQueCxELnkpO2lmKFF0Lmxlbmd0aD4wKXt2YXIgam49Tyxfcj1UMyhqbixxNSh4KSksaXI9VDMoam4scTUoUXQpKSxzcj1fcjtpZihpcjxfciYmKHg9W1F0WzBdLFF0WzFdXSxzcj1pciksUXQubGVuZ3RoPjIpe3ZhciBJYT1UMyhqbix7eDpRdFsyXSx5OlF0WzNdfSk7SWE8c3ImJih4PVtRdFsyXSxRdFszXV0pfX19dmFyICRyPUZUKHgsZ2UsZy5hcnJvd1NoYXBlc1txXS5zcGFjaW5nKHkpK0cpLEtpPUZUKHgsZ2UsZy5hcnJvd1NoYXBlc1txXS5nYXAoeSkrRyk7ZXQuc3RhcnRYPUtpWzBdLGV0LnN0YXJ0WT1LaVsxXSxldC5hcnJvd1N0YXJ0WD0kclswXSxldC5hcnJvd1N0YXJ0WT0kclsxXSxqdCYmKCFYKGV0LnN0YXJ0WCl8fCFYKGV0LnN0YXJ0WSl8fCFYKGV0LmVuZFgpfHwhWChldC5lbmRZKT9ldC5iYWRMaW5lPSEwOmV0LmJhZExpbmU9ITEpfSxCay5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzBdLHk6Zy5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93U3RhcnRYLHk6Zy5hcnJvd1N0YXJ0WX19fSxCay5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzJdLHk6Zy5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93RW5kWCx5OmcuYXJyb3dFbmRZfX19O3ZhciBZTD17fTtmdW5jdGlvbiB0dHQoeSxnLHgpe2Zvcih2YXIgVD1mdW5jdGlvbihTLEcsVyxldCl7cmV0dXJuIHJmKFMsRyxXLGV0KX0sQT1nLl9wcml2YXRlLEQ9QS5yc3R5bGUuYmV6aWVyUHRzLE89MDtPPHkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO08rKyl7dmFyICQ9eS5iZXppZXJQcm9qUGN0c1tPXTtELnB1c2goe3g6VCh4WzBdLHhbMl0seFs0XSwkKSx5OlQoeFsxXSx4WzNdLHhbNV0sJCl9KX19WUwuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZSx4PWcucnNjcmF0Y2gsVD14LmVkZ2VUeXBlO2lmKGcucnN0eWxlLmJlemllclB0cz1udWxsLGcucnN0eWxlLmxpbmVQdHM9bnVsbCxnLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLFQ9PT0ibXVsdGliZXppZXIifHxUPT09ImJlemllciJ8fFQ9PT0ic2VsZiJ8fFQ9PT0iY29tcG91bmQiKXtnLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBBPTA7QSs1PHguYWxscHRzLmxlbmd0aDtBKz00KXR0dCh0aGlzLHkseC5hbGxwdHMuc2xpY2UoQSxBKzYpKX1lbHNlIGlmKFQ9PT0ic2VnbWVudHMiKWZvcih2YXIgRD1nLnJzdHlsZS5saW5lUHRzPVtdLEE9MDtBKzE8eC5hbGxwdHMubGVuZ3RoO0ErPTIpRC5wdXNoKHt4OnguYWxscHRzW0FdLHk6eC5hbGxwdHNbQSsxXX0pO2Vsc2UgaWYoVD09PSJoYXlzdGFjayIpe3ZhciBPPXguaGF5c3RhY2tQdHM7Zy5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok9bMF0seTpPWzFdfSx7eDpPWzJdLHk6T1szXX1dfWcucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxZTC5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh5KX07dmFyIHlwPXt9O3lwLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih5KXt2YXIgZz15LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighWihnKSl7dmFyIHgsVCxBPXkuX3ByaXZhdGUsRD15LndpZHRoKCksTz15LmhlaWdodCgpLCQ9eS5wYWRkaW5nKCkscT15LnBvc2l0aW9uKCksUz15LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxHPXkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLFc9QS5yc2NyYXRjaCxldD1BLnJzdHlsZTtzd2l0Y2goUyl7Y2FzZSJsZWZ0Ijp4PXEueC1ELzItJDticmVhaztjYXNlInJpZ2h0Ijp4PXEueCtELzIrJDticmVhaztkZWZhdWx0Ong9cS54fXN3aXRjaChHKXtjYXNlInRvcCI6VD1xLnktTy8yLSQ7YnJlYWs7Y2FzZSJib3R0b20iOlQ9cS55K08vMiskO2JyZWFrO2RlZmF1bHQ6VD1xLnl9Vy5sYWJlbFg9eCxXLmxhYmVsWT1ULGV0LmxhYmVsWD14LGV0LmxhYmVsWT1ULHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeSksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh5KX19O3ZhciAkQj1mdW5jdGlvbihnLHgpe3ZhciBUPU1hdGguYXRhbih4L2cpO3JldHVybiBnPT09MCYmVDwwJiYoVD1UKi0xKSxUfSx6Qj1mdW5jdGlvbihnLHgpe3ZhciBUPXgueC1nLngsQT14LnktZy55O3JldHVybiAkQihULEEpfSxxQj1mdW5jdGlvbihnLHgsVCxBKXt2YXIgRD13aygwLEEtLjAwMSwxKSxPPXdrKDAsQSsuMDAxLDEpLCQ9SDUoZyx4LFQsRCkscT1INShnLHgsVCxPKTtyZXR1cm4gekIoJCxxKX07eXAucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt2YXIgZyx4PXkuX3ByaXZhdGUsVD14LnJzY3JhdGNoLEE9dGhpcyxEPXttaWQ6eS5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnkucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6eS5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihELm1pZHx8RC5zb3VyY2V8fEQudGFyZ2V0KXtnPXt4OlQubWlkWCx5OlQubWlkWX07dmFyIE89ZnVuY3Rpb24oVyxldCxhdCl7Ym0oeC5yc2NyYXRjaCxXLGV0LGF0KSxibSh4LnJzdHlsZSxXLGV0LGF0KX07TygibGFiZWxYIixudWxsLGcueCksTygibGFiZWxZIixudWxsLGcueSk7dmFyICQ9JEIoVC5taWREaXNwWCxULm1pZERpc3BZKTtPKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCwkKTt2YXIgcT1mdW5jdGlvbiBHKCl7aWYoRy5jYWNoZSlyZXR1cm4gRy5jYWNoZTtmb3IodmFyIFc9W10sZXQ9MDtldCs1PFQuYWxscHRzLmxlbmd0aDtldCs9NCl7dmFyIGF0PXt4OlQuYWxscHRzW2V0XSx5OlQuYWxscHRzW2V0KzFdfSxsdD17eDpULmFsbHB0c1tldCsyXSx5OlQuYWxscHRzW2V0KzNdfSxmdD17eDpULmFsbHB0c1tldCs0XSx5OlQuYWxscHRzW2V0KzVdfTtXLnB1c2goe3AwOmF0LHAxOmx0LHAyOmZ0LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIEF0PXgucnN0eWxlLmJlemllclB0cyxrdD1BLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBNdCh6dCxlZSxWdCxmZSxnZSl7dmFyIG5lPUUzKGVlLFZ0KSxQZT16dC5zZWdtZW50c1t6dC5zZWdtZW50cy5sZW5ndGgtMV0scGU9e3AwOmVlLHAxOlZ0LHQwOmZlLHQxOmdlLHN0YXJ0RGlzdDpQZT9QZS5zdGFydERpc3QrUGUubGVuZ3RoOjAsbGVuZ3RoOm5lfTt6dC5zZWdtZW50cy5wdXNoKHBlKSx6dC5sZW5ndGgrPW5lfWZvcih2YXIgRHQ9MDtEdDxXLmxlbmd0aDtEdCsrKXt2YXIganQ9V1tEdF0sWnQ9V1tEdC0xXTtadCYmKGp0LnN0YXJ0RGlzdD1adC5zdGFydERpc3QrWnQubGVuZ3RoKSxNdChqdCxqdC5wMCxBdFtEdCprdF0sMCxBLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEt0PTA7S3Q8a3QtMTtLdCsrKU10KGp0LEF0W0R0Kmt0K0t0XSxBdFtEdCprdCtLdCsxXSxBLmJlemllclByb2pQY3RzW0t0XSxBLmJlemllclByb2pQY3RzW0t0KzFdKTtNdChqdCxBdFtEdCprdCtrdC0xXSxqdC5wMixBLmJlemllclByb2pQY3RzW2t0LTFdLDEpfXJldHVybiBHLmNhY2hlPVd9LFM9ZnVuY3Rpb24oVyl7dmFyIGV0LGF0PVc9PT0ic291cmNlIjtpZihEW1ddKXt2YXIgbHQ9eS5wc3R5bGUoVysiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2goVC5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgZnQ9cSgpLEF0LGt0PTAsTXQ9MCxEdD0wO0R0PGZ0Lmxlbmd0aDtEdCsrKXtmb3IodmFyIGp0PWZ0W2F0P0R0OmZ0Lmxlbmd0aC0xLUR0XSxadD0wO1p0PGp0LnNlZ21lbnRzLmxlbmd0aDtadCsrKXt2YXIgS3Q9anQuc2VnbWVudHNbYXQ/WnQ6anQuc2VnbWVudHMubGVuZ3RoLTEtWnRdLHp0PUR0PT09ZnQubGVuZ3RoLTEmJlp0PT09anQuc2VnbWVudHMubGVuZ3RoLTE7aWYoa3Q9TXQsTXQrPUt0Lmxlbmd0aCxNdD49bHR8fHp0KXtBdD17Y3A6anQsc2VnbWVudDpLdH07YnJlYWt9fWlmKEF0KWJyZWFrfXZhciBlZT1BdC5jcCxWdD1BdC5zZWdtZW50LGZlPShsdC1rdCkvVnQubGVuZ3RoLGdlPVZ0LnQxLVZ0LnQwLG5lPWF0P1Z0LnQwK2dlKmZlOlZ0LnQxLWdlKmZlO25lPXdrKDAsbmUsMSksZz1INShlZS5wMCxlZS5wMSxlZS5wMixuZSksZXQ9cUIoZWUucDAsZWUucDEsZWUucDIsbmUpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFBlPTAscGUsYm4semUsVmUsRW49VC5hbGxwdHMubGVuZ3RoLERuPTA7RG4rMzxFbiYmKGF0Pyh6ZT17eDpULmFsbHB0c1tEbl0seTpULmFsbHB0c1tEbisxXX0sVmU9e3g6VC5hbGxwdHNbRG4rMl0seTpULmFsbHB0c1tEbiszXX0pOih6ZT17eDpULmFsbHB0c1tFbi0yLURuXSx5OlQuYWxscHRzW0VuLTEtRG5dfSxWZT17eDpULmFsbHB0c1tFbi00LURuXSx5OlQuYWxscHRzW0VuLTMtRG5dfSkscGU9RTMoemUsVmUpLGJuPVBlLFBlKz1wZSwhKFBlPj1sdCkpO0RuKz0yKTt2YXIgS249bHQtYm4sU249S24vcGU7U249d2soMCxTbiwxKSxnPUVZKHplLFZlLFNuKSxldD16Qih6ZSxWZSk7YnJlYWt9fU8oImxhYmVsWCIsVyxnLngpLE8oImxhYmVsWSIsVyxnLnkpLE8oImxhYmVsQXV0b0FuZ2xlIixXLGV0KX19O1MoInNvdXJjZSIpLFMoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeSl9fSx5cC5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih5KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSkseS5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh5LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSwidGFyZ2V0IikpfSx5cC5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZSxUPXRoaXMuZ2V0TGFiZWxUZXh0KHksZyksQT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LFQpLEQ9eS5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxPPXkucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPWJwKHgucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixnKXx8W10scT1PIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSksUz1BLmhlaWdodC9xLEc9UypELFc9QS53aWR0aCxldD1BLmhlaWdodCsocS0xKSooRC0xKSpTO2JtKHgucnN0eWxlLCJsYWJlbFdpZHRoIixnLFcpLGJtKHgucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGcsVyksYm0oeC5yc3R5bGUsImxhYmVsSGVpZ2h0IixnLGV0KSxibSh4LnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZyxldCksYm0oeC5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixnLEcpfSx5cC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9Zz9nKyItIjoiIixBPXkucHN0eWxlKFQrImxhYmVsIikuc3RyVmFsdWUsRD15LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxPPWZ1bmN0aW9uKEtuLFNuKXtyZXR1cm4gU24/KGJtKHgucnNjcmF0Y2gsS24sZyxTbiksU24pOmJwKHgucnNjcmF0Y2gsS24sZyl9O2lmKCFBKXJldHVybiIiO0Q9PSJub25lInx8KEQ9PSJ1cHBlcmNhc2UiP0E9QS50b1VwcGVyQ2FzZSgpOkQ9PSJsb3dlcmNhc2UiJiYoQT1BLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD15LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIHE9TygibGFiZWxLZXkiKTtpZihxIT1udWxsJiZPKCJsYWJlbFdyYXBLZXkiKT09PXEpcmV0dXJuIE8oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIFM9IuKAiyIsRz1BLnNwbGl0KGAKYCksVz15LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGV0PXkucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxhdD1ldD09PSJhbnl3aGVyZSIsbHQ9W10sZnQ9L1tcc1x1MjAwYl0rLyxBdD1hdD8iIjoiICIsa3Q9MDtrdDxHLmxlbmd0aDtrdCsrKXt2YXIgTXQ9R1trdF0sRHQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxNdCksanQ9RHQud2lkdGg7aWYoYXQpe3ZhciBadD1NdC5zcGxpdCgiIikuam9pbihTKTtNdD1adH1pZihqdD5XKXtmb3IodmFyIEt0PU10LnNwbGl0KGZ0KSx6dD0iIixlZT0wO2VlPEt0Lmxlbmd0aDtlZSsrKXt2YXIgVnQ9S3RbZWVdLGZlPXp0Lmxlbmd0aD09PTA/VnQ6enQrQXQrVnQsZ2U9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxmZSksbmU9Z2Uud2lkdGg7bmU8PVc/enQrPVZ0K0F0Oih6dCYmbHQucHVzaCh6dCksenQ9VnQrQXQpfXp0Lm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fGx0LnB1c2goenQpfWVsc2UgbHQucHVzaChNdCl9TygibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGx0KSxBPU8oImxhYmVsV3JhcENhY2hlZFRleHQiLGx0LmpvaW4oYApgKSksTygibGFiZWxXcmFwS2V5IixxKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgUGU9eS5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwZT0iIixibj0i4oCmIix6ZT0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LEEpLndpZHRoPFBlKXJldHVybiBBO2Zvcih2YXIgVmU9MDtWZTxBLmxlbmd0aDtWZSsrKXt2YXIgRW49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxwZStBW1ZlXStibikud2lkdGg7aWYoRW4+UGUpYnJlYWs7cGUrPUFbVmVdLFZlPT09QS5sZW5ndGgtMSYmKHplPSEwKX1yZXR1cm4gemV8fChwZSs9Ym4pLHBlfXJldHVybiBBfSx5cC5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeSl7dmFyIGc9eS5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHg9eS5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZz09PSJhdXRvIilpZih5LmlzTm9kZSgpKXN3aXRjaCh4KXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBnfSx5cC5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9dGQoZyx5Ll9wcml2YXRlLmxhYmVsRGltc0tleSksQT14LmxhYmVsRGltQ2FjaGV8fCh4LmxhYmVsRGltQ2FjaGU9W10pLEQ9QVtUXTtpZihEIT1udWxsKXJldHVybiBEO3ZhciBPPTAsJD15LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLHE9eS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsUz15LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxHPXkucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFc9dGhpcy5sYWJlbENhbGNDYW52YXMsZXQ9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFXKXtXPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGV0PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1XLmdldENvbnRleHQoIjJkIik7dmFyIGF0PVcuc3R5bGU7YXQucG9zaXRpb249ImFic29sdXRlIixhdC5sZWZ0PSItOTk5OXB4IixhdC50b3A9Ii05OTk5cHgiLGF0LnpJbmRleD0iLTEiLGF0LnZpc2liaWxpdHk9ImhpZGRlbiIsYXQucG9pbnRlckV2ZW50cz0ibm9uZSJ9ZXQuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChHLCIgIikuY29uY2F0KHEsInB4ICIpLmNvbmNhdChTKTtmb3IodmFyIGx0PTAsZnQ9MCxBdD1nLnNwbGl0KGAKYCksa3Q9MDtrdDxBdC5sZW5ndGg7a3QrKyl7dmFyIE10PUF0W2t0XSxEdD1ldC5tZWFzdXJlVGV4dChNdCksanQ9TWF0aC5jZWlsKER0LndpZHRoKSxadD1xO2x0PU1hdGgubWF4KGp0LGx0KSxmdCs9WnR9cmV0dXJuIGx0Kz1PLGZ0Kz1PLEFbVF09e3dpZHRoOmx0LGhlaWdodDpmdH19LHlwLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9eC5yc2NyYXRjaCxBPXkuaXNFZGdlKCksRD1nP2crIi0iOiIiLE89eS5wc3R5bGUoRCsidGV4dC1yb3RhdGlvbiIpLCQ9Ty5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOkEmJiQ9PT0iYXV0b3JvdGF0ZSI/VC5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ty5wZlZhbHVlfSx5cC5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9eS5pc0VkZ2UoKSxUPXkuX3ByaXZhdGUsQT1ULnJzY3JhdGNoO0EubGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSkseCYmKEEuc291cmNlTGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSwic291cmNlIiksQS50YXJnZXRMYWJlbEFuZ2xlPWcuY2FsY3VsYXRlTGFiZWxBbmdsZSh5LCJ0YXJnZXQiKSl9O3ZhciB0aD17fSxYTD0yOCxIQj0hMTt0aC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXkucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHg9PT0iY3V0cmVjdGFuZ2xlIiYmKHkud2lkdGgoKTxYTHx8eS5oZWlnaHQoKTxYTCkpcmV0dXJuIEhCfHwoU2MoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxIQj0hMCksInJlY3RhbmdsZSI7aWYoeS5pc1BhcmVudCgpKXJldHVybiB4PT09InJlY3RhbmdsZSJ8fHg9PT0icm91bmRyZWN0YW5nbGUifHx4PT09InJvdW5kLXJlY3RhbmdsZSJ8fHg9PT0iY3V0cmVjdGFuZ2xlInx8eD09PSJjdXQtcmVjdGFuZ2xlInx8eD09PSJiYXJyZWwiP3g6InJlY3RhbmdsZSI7aWYoeD09PSJwb2x5Z29uIil7dmFyIFQ9eS5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGcubm9kZVNoYXBlcy5tYWtlUG9seWdvbihUKS5uYW1lfXJldHVybiB4fTt2YXIgUms9e307UmsucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuY3ksZz15LmNvbGxlY3Rpb24oKSx4PXRoaXMsVD1mdW5jdGlvbihPKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYoZy5tZXJnZShPKSwkKWZvcih2YXIgcT0wO3E8Ty5sZW5ndGg7cSsrKXt2YXIgUz1PW3FdLEc9Uy5fcHJpdmF0ZSxXPUcucnN0eWxlO1cuY2xlYW49ITEsVy5jbGVhbkNvbm5lY3RlZD0hMX19O3guYmluZGVyKHkpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihPKXt2YXIgJD1PLnRhcmdldDtUKCQsITEpfSk7dmFyIEE9ZnVuY3Rpb24oTyl7aWYoTyl7dmFyICQ9eC5vblVwZGF0ZUVsZUNhbGNzRm5zO2cuY2xlYW5TdHlsZSgpO2Zvcih2YXIgcT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgUz1nW3FdLEc9Uy5fcHJpdmF0ZS5yc3R5bGU7Uy5pc05vZGUoKSYmIUcuY2xlYW5Db25uZWN0ZWQmJihUKFMuY29ubmVjdGVkRWRnZXMoKSksRy5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFc9MDtXPCQubGVuZ3RoO1crKyl7dmFyIGV0PSRbV107ZXQoTyxnKX14LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShnKSxnPXkuY29sbGVjdGlvbigpfX07eC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe0EoITApfSx4LmJlZm9yZVJlbmRlcihBLHguYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LFJrLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107Zy5wdXNoKHkpfSxSay5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD1mdW5jdGlvbihqdCl7cmV0dXJuIGp0Ll9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sVD1bXSxBPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09PXZvaWQgMCYmKGc9ITApO2Zvcih2YXIgRD0wO0Q8eS5sZW5ndGg7RCsrKXt2YXIgTz15W0RdLCQ9Ty5fcHJpdmF0ZSxxPSQucnN0eWxlO08uaXNFZGdlKCkmJigheChPLnNvdXJjZSgpKXx8IXgoTy50YXJnZXQoKSkpJiYocS5jbGVhbj0hMSksIShnJiZxLmNsZWFufHxPLnJlbW92ZWQoKSkmJk8ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9BLnB1c2goTyk6VC5wdXNoKE8pLHEuY2xlYW49ITApfWZvcih2YXIgUz0wO1M8QS5sZW5ndGg7UysrKXt2YXIgRz1BW1NdLFc9Ry5fcHJpdmF0ZSxldD1XLnJzdHlsZSxhdD1HLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oRyksZXQubm9kZVg9YXQueCxldC5ub2RlWT1hdC55LGV0Lm5vZGVXPUcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQubm9kZUg9Ry5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhUKTtmb3IodmFyIGx0PTA7bHQ8VC5sZW5ndGg7bHQrKyl7dmFyIGZ0PVRbbHRdLEF0PWZ0Ll9wcml2YXRlLGt0PUF0LnJzdHlsZSxNdD1BdC5yc2NyYXRjaDtrdC5zcmNYPU10LmFycm93U3RhcnRYLGt0LnNyY1k9TXQuYXJyb3dTdGFydFksa3QudGd0WD1NdC5hcnJvd0VuZFgsa3QudGd0WT1NdC5hcnJvd0VuZFksa3QubWlkWD1NdC5taWRYLGt0Lm1pZFk9TXQubWlkWSxrdC5sYWJlbEFuZ2xlPU10LmxhYmVsQW5nbGUsa3Quc291cmNlTGFiZWxBbmdsZT1NdC5zb3VyY2VMYWJlbEFuZ2xlLGt0LnRhcmdldExhYmVsQW5nbGU9TXQudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgYjk9e307YjkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHkpe3kuZHJhZz1bXSx5Lm5vbmRyYWc9W107Zm9yKHZhciBnPVtdLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxBPVQuX3ByaXZhdGUucnNjcmF0Y2g7VC5ncmFiYmVkKCkmJiFULmlzUGFyZW50KCk/Zy5wdXNoKFQpOkEuaW5EcmFnTGF5ZXI/eS5kcmFnLnB1c2goVCk6eS5ub25kcmFnLnB1c2goVCl9Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07eS5kcmFnLnB1c2goVCl9fX0sYjkuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxiOS5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih5KXtpZih5fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIGc9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7Zy5zb3J0KHBCKSxnLmludGVyYWN0aXZlPWcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWcsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZz10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBnfTt2YXIgams9e307W0wzLHA5LGlkLEJrLFlMLHlwLHRoLFJrLGI5XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKGprLHkpfSk7dmFyIEdCPXt9O0dCLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD10aGlzLEE9VC5pbWFnZUNhY2hlPVQuaW1hZ2VDYWNoZXx8e30sRD1BW3ldO2lmKEQpcmV0dXJuIEQuaW1hZ2UuY29tcGxldGV8fEQuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCksRC5pbWFnZTtEPUFbeV09QVt5XXx8e307dmFyIE89RC5pbWFnZT1uZXcgSW1hZ2U7Ty5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KSxPLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe08uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLHE9eS5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIHF8fChPLmNyb3NzT3JpZ2luPWcpLE8uc3JjPXksT307dmFyIG94PXt9O294LnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih5LGcseCxUKXt2YXIgQT1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksRD10aGlzLmJpbmRlcih5KTtyZXR1cm4gRC5vbi5hcHBseShELEEpfSxveC5iaW5kZXI9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXk9PT13aW5kb3d8fHk9PT1kb2N1bWVudHx8eT09PWRvY3VtZW50LmJvZHl8fFR0KHkpO2lmKGcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgVD0hMTt0cnl7dmFyIEE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQ9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsQSl9Y2F0Y2h7fWcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPVR9dmFyIEQ9ZnVuY3Rpb24oJCxxLFMpe3ZhciBHPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgmJmcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoR1syXT17Y2FwdHVyZTpTPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxnLmJpbmRpbmdzLnB1c2goe3RhcmdldDp5LGFyZ3M6R30pLCh5LmFkZEV2ZW50TGlzdGVuZXJ8fHkub24pLmFwcGx5KHksRyksdGhpc307cmV0dXJue29uOkQsYWRkRXZlbnRMaXN0ZW5lcjpELGFkZExpc3RlbmVyOkQsYmluZDpEfX0sb3gubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5LmlzTm9kZSgpJiYheS5sb2NrZWQoKSYmeS5ncmFiYmFibGUoKX0sb3gubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh5KSYmeS5pbnRlcmFjdGl2ZSgpfSxveC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2VsZWN0ZWQoKX0seD1mdW5jdGlvbihRdCxqbixfcixpcil7UXQ9PW51bGwmJihRdD15LmN5KTtmb3IodmFyIHNyPTA7c3I8am4ubGVuZ3RoO3NyKyspe3ZhciBJYT1qbltzcl07UXQuZW1pdCh7b3JpZ2luYWxFdmVudDpfcix0eXBlOklhLHBvc2l0aW9uOmlyfSl9fSxUPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2hpZnRLZXl8fFF0Lm1ldGFLZXl8fFF0LmN0cmxLZXl9LEE9ZnVuY3Rpb24oUXQsam4pe3ZhciBfcj0hMDtpZih5LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmUXQmJlF0LnBhbm5hYmxlKCkpZm9yKHZhciBpcj0wO2puJiZpcjxqbi5sZW5ndGg7aXIrKyl7dmFyIFF0PWpuW2lyXTtpZihRdC5pc05vZGUoKSYmUXQuaXNQYXJlbnQoKSYmIVF0LnBhbm5hYmxlKCkpe19yPSExO2JyZWFrfX1lbHNlIF9yPSEwO3JldHVybiBfcn0sRD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sTz1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sJD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LHE9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxTPWZ1bmN0aW9uKFF0KXtRdFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LEc9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sVz1mdW5jdGlvbihRdCxqbil7dmFyIF9yPWpuLmFkZFRvTGlzdCxpcj1fci5oYXMoUXQpOyFpciYmUXQuZ3JhYmJhYmxlKCkmJiFRdC5sb2NrZWQoKSYmKF9yLm1lcmdlKFF0KSxEKFF0KSl9LGV0PWZ1bmN0aW9uKFF0LGpuKXtpZihRdC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShqbi5pbkRyYWdMYXllcj09bnVsbCYmam4uYWRkVG9MaXN0PT1udWxsKSl7dmFyIF9yPVF0LmRlc2NlbmRhbnRzKCk7am4uaW5EcmFnTGF5ZXImJihfci5mb3JFYWNoKCQpLF9yLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZXKF9yLGpuKX19LGF0PWZ1bmN0aW9uKFF0LGpuKXtqbj1qbnx8e307dmFyIF9yPVF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2puLmluRHJhZ0xheWVyJiYoUXQuZm9yRWFjaCgkKSxRdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oaXIpe3JldHVybiFfcnx8aXIuaXNFZGdlKCl9KS5mb3JFYWNoKCQpKSxqbi5hZGRUb0xpc3QmJlF0LmZvckVhY2goZnVuY3Rpb24oaXIpe1coaXIsam4pfSksZXQoUXQsam4pLEF0KFF0LHtpbkRyYWdMYXllcjpqbi5pbkRyYWdMYXllcn0pLHkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0sbHQ9YXQsZnQ9ZnVuY3Rpb24oUXQpe1F0JiYoeS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oam4pe08oam4pLHEoam4pLEcoam4pfSkseS51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sQXQ9ZnVuY3Rpb24oUXQsam4pe2lmKCEoam4uaW5EcmFnTGF5ZXI9PW51bGwmJmpuLmFkZFRvTGlzdD09bnVsbCkmJlF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgX3I9UXQuYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFfci5zYW1lKFF0KSl7dmFyIGlyPV9yLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoX3IpLnVubWVyZ2UoUXQpLnVubWVyZ2UoUXQuZGVzY2VuZGFudHMoKSksc3I9aXIuY29ubmVjdGVkRWRnZXMoKTtqbi5pbkRyYWdMYXllciYmKHNyLmZvckVhY2goJCksaXIuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZpci5mb3JFYWNoKGZ1bmN0aW9uKElhKXtXKElhLGpuKX0pfX19LGt0PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sTXQ9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLER0PXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7TXQ/KHkucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oRXIpe2Zvcih2YXIgUXQ9MDtRdDxFci5sZW5ndGg7UXQrKyl7dmFyIGpuPUVyW1F0XSxfcj1qbi5yZW1vdmVkTm9kZXM7aWYoX3IpZm9yKHZhciBpcj0wO2lyPF9yLmxlbmd0aDtpcisrKXt2YXIgc3I9X3JbaXJdO2lmKHNyPT09eS5jb250YWluZXIpe3kuZGVzdHJveSgpO2JyZWFrfX19fSkseS5jb250YWluZXIucGFyZW50Tm9kZSYmeS5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKEVyKXt5LmRlc3Ryb3koKX0pO3ZhciBqdD1XYyhmdW5jdGlvbigpe3kuY3kucmVzaXplKCl9LDEwMCk7TXQmJih5LnN0eWxlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoanQpLHkuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywicmVzaXplIixqdCksRHQmJih5LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihqdCkseS5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyKSk7dmFyIFp0PWZ1bmN0aW9uKFF0LGpuKXtmb3IoO1F0IT1udWxsOylqbihRdCksUXQ9UXQucGFyZW50Tm9kZX0sS3Q9ZnVuY3Rpb24oKXt5LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfTtadCh5LmNvbnRhaW5lcixmdW5jdGlvbihFcil7eS5yZWdpc3RlckJpbmRpbmcoRXIsInRyYW5zaXRpb25lbmQiLEt0KSx5LnJlZ2lzdGVyQmluZGluZyhFciwiYW5pbWF0aW9uZW5kIixLdCkseS5yZWdpc3RlckJpbmRpbmcoRXIsInNjcm9sbCIsS3QpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihFcil7RXIucHJldmVudERlZmF1bHQoKX0pO3ZhciB6dD1mdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdGlvbls0XSE9PTB9LGVlPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLF9yPWpuWzBdLGlyPWpuWzFdLHNyPWpuWzJdLElhPWpuWzNdLCRyPVF0LnRvdWNoZXM/UXQudG91Y2hlczpbUXRdLEtpPSExLFBvPTA7UG88JHIubGVuZ3RoO1BvKyspe3ZhciBOYz0kcltQb107aWYoX3I8PU5jLmNsaWVudFgmJk5jLmNsaWVudFg8PV9yK3NyJiZpcjw9TmMuY2xpZW50WSYmTmMuY2xpZW50WTw9aXIrSWEpe0tpPSEwO2JyZWFrfX1pZighS2kpcmV0dXJuITE7Zm9yKHZhciBaYT15LmNvbnRhaW5lcixtYz1RdC50YXJnZXQsRWE9bWMucGFyZW50Tm9kZSxKYT0hMTtFYTspe2lmKEVhPT09WmEpe0phPSEwO2JyZWFrfUVhPUVhLnBhcmVudE5vZGV9cmV0dXJuISFKYX07eS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oUXQpe2lmKGVlKFF0KSl7UXQucHJldmVudERlZmF1bHQoKSxrdCgpLHkuaG92ZXJEYXRhLmNhcHR1cmU9ITAseS5ob3ZlckRhdGEud2hpY2g9UXQud2hpY2g7dmFyIGpuPXkuY3ksX3I9W1F0LmNsaWVudFgsUXQuY2xpZW50WV0saXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KF9yWzBdLF9yWzFdKSxzcj15LnNlbGVjdGlvbixJYT15LmZpbmROZWFyZXN0RWxlbWVudHMoaXJbMF0saXJbMV0sITAsITEpLCRyPUlhWzBdLEtpPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7eS5ob3ZlckRhdGEubWRvd25Qb3M9aXIseS5ob3ZlckRhdGEubWRvd25HUG9zPV9yO3ZhciBQbz1mdW5jdGlvbigpe3kuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHkuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciB2bD15LmhvdmVyRGF0YS5kb3duO3ZsP3ZsLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTpqbi5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fSl9fSx5LnRhcGhvbGREdXJhdGlvbil9O2lmKFF0LndoaWNoPT0zKXt5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSEwO3ZhciBOYz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19OyRyPygkci5hY3RpdmF0ZSgpLCRyLmVtaXQoTmMpLHkuaG92ZXJEYXRhLmRvd249JHIpOmpuLmVtaXQoTmMpLHkuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihRdC53aGljaD09MSl7JHImJiRyLmFjdGl2YXRlKCk7e2lmKCRyIT1udWxsJiZ5Lm5vZGVJc0dyYWJiYWJsZSgkcikpe3ZhciBaYT1mdW5jdGlvbih2bCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6UXQsdHlwZTp2bCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX19LG1jPWZ1bmN0aW9uKHZsKXt2bC5lbWl0KFphKCJncmFiIikpfTtpZihTKCRyKSwhJHIuc2VsZWN0ZWQoKSlLaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKSxsdCgkcix7YWRkVG9MaXN0OktpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLmVtaXQoWmEoImdyYWIiKSk7ZWxzZXtLaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKTt2YXIgRWE9am4uJChmdW5jdGlvbihKYSl7cmV0dXJuIEphLmlzTm9kZSgpJiZKYS5zZWxlY3RlZCgpJiZ5Lm5vZGVJc0dyYWJiYWJsZShKYSl9KTthdChFYSx7YWRkVG9MaXN0OktpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLEVhLmZvckVhY2gobWMpfXkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3SGludCgiZHJhZyIsITApfXkuaG92ZXJEYXRhLmRvd249JHIseS5ob3ZlckRhdGEuZG93bnM9SWEseS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9eCgkcixbIm1vdXNlZG93biIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSwkcj09bnVsbD8oc3JbNF09MSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6aXJbMF0seTppclsxXX0seS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKTokci5wYW5uYWJsZSgpJiYoc3JbNF09MSksUG8oKX1zclswXT1zclsyXT1pclswXSxzclsxXT1zclszXT1pclsxXX19LCExKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csIm1vdXNlbW92ZSIsZnVuY3Rpb24oUXQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWpuJiYhZWUoUXQpKSl7dmFyIF9yPSExLGlyPXkuY3ksc3I9aXIuem9vbSgpLElhPVtRdC5jbGllbnRYLFF0LmNsaWVudFldLCRyPXkucHJvamVjdEludG9WaWV3cG9ydChJYVswXSxJYVsxXSksS2k9eS5ob3ZlckRhdGEubWRvd25Qb3MsUG89eS5ob3ZlckRhdGEubWRvd25HUG9zLE5jPXkuc2VsZWN0aW9uLFphPW51bGw7IXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYoWmE9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITEpKTt2YXIgbWM9eS5ob3ZlckRhdGEubGFzdCxFYT15LmhvdmVyRGF0YS5kb3duLEphPVskclswXS1OY1syXSwkclsxXS1OY1szXV0sdmw9eS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyx6ZjtpZihQbyl7dmFyIHhwPUlhWzBdLVBvWzBdLGtwPXhwKnhwLHFmPUlhWzFdLVBvWzFdLG1nPXFmKnFmLHNkPWtwK21nO3kuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9emY9c2Q+PXkuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIGJ2PVQoUXQpO3pmJiYoeS5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIF9tPWZ1bmN0aW9uKCl7dmFyIEdiPXkuaG92ZXJEYXRhLmRyYWdEZWx0YT15LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO0diLmxlbmd0aD09PTA/KEdiLnB1c2goSmFbMF0pLEdiLnB1c2goSmFbMV0pKTooR2JbMF0rPUphWzBdLEdiWzFdKz1KYVsxXSl9O19yPSEwLHgoWmEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KTt2YXIgZ3g9ZnVuY3Rpb24oKXt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkuaG92ZXJEYXRhLnNlbGVjdGluZ3x8aXIuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSxOY1s0XT0xLHkuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCl9O2lmKHkuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoemYpe3ZhciBPMz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07RWE/RWEuZW1pdChPMyk6aXIuZW1pdChPMykseS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXkuaG92ZXJEYXRhLmN4dE92ZXJ8fFphIT09eS5ob3ZlckRhdGEuY3h0T3ZlcikmJih5LmhvdmVyRGF0YS5jeHRPdmVyJiZ5LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSx5LmhvdmVyRGF0YS5jeHRPdmVyPVphLFphJiZaYS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX0pKX19ZWxzZSBpZih5LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoX3I9ITAsaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBweDtpZih5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIFQ5PXkuaG92ZXJEYXRhLm1kb3duUG9zO3B4PXt4OigkclswXS1UOVswXSkqc3IseTooJHJbMV0tVDlbMV0pKnNyfSx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIHB4PXt4OkphWzBdKnNyLHk6SmFbMV0qc3J9O2lyLnBhbkJ5KHB4KSxpci5lbWl0KCJkcmFncGFuIikseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMH0kcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKX1lbHNlIGlmKE5jWzRdPT0xJiYoRWE9PW51bGx8fEVhLnBhbm5hYmxlKCkpKXtpZih6Zil7aWYoIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiZpci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihidnx8IWlyLnBhbm5pbmdFbmFibGVkKCl8fCFpci51c2VyUGFubmluZ0VuYWJsZWQoKSkpZ3goKTtlbHNlIGlmKCF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgTjM9QShFYSx5LmhvdmVyRGF0YS5kb3ducyk7TjMmJih5LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxOY1s0XT0wLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1xNShLaSkseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKX1FYSYmRWEucGFubmFibGUoKSYmRWEuYWN0aXZlKCkmJkVhLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihFYSYmRWEucGFubmFibGUoKSYmRWEuYWN0aXZlKCkmJkVhLnVuYWN0aXZhdGUoKSwoIUVhfHwhRWEuZ3JhYmJlZCgpKSYmWmEhPW1jJiYobWMmJngobWMsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksWmEmJngoWmEsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KSx5LmhvdmVyRGF0YS5sYXN0PVphKSxFYSlpZih6Zil7aWYoaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZidilFYSYmRWEuZ3JhYmJlZCgpJiYoZnQodmwpLEVhLmVtaXQoImZyZWVvbiIpLHZsLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihFYS5lbWl0KCJkcmFnZnJlZW9uIiksdmwuZW1pdCgiZHJhZ2ZyZWUiKSkpLGd4KCk7ZWxzZSBpZihFYSYmRWEuZ3JhYmJlZCgpJiZ5Lm5vZGVJc0RyYWdnYWJsZShFYSkpe3ZhciAkZD0heS5kcmFnRGF0YS5kaWREcmFnOyRkJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LmRyYWdEYXRhLmRpZERyYWc9ITAseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxhdCh2bCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgdzE9e3g6MCx5OjB9O2lmKFgoSmFbMF0pJiZYKEphWzFdKSYmKHcxLngrPUphWzBdLHcxLnkrPUphWzFdLCRkKSl7dmFyIHpkPXkuaG92ZXJEYXRhLmRyYWdEZWx0YTt6ZCYmWCh6ZFswXSkmJlgoemRbMV0pJiYodzEueCs9emRbMF0sdzEueSs9emRbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx2bC5zaWxlbnRTaGlmdCh3MSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3KCl9fWVsc2UgX20oKTtfcj0hMH1pZihOY1syXT0kclswXSxOY1szXT0kclsxXSxfcilyZXR1cm4gUXQuc3RvcFByb3BhZ2F0aW9uJiZRdC5zdG9wUHJvcGFnYXRpb24oKSxRdC5wcmV2ZW50RGVmYXVsdCYmUXQucHJldmVudERlZmF1bHQoKSwhMX19LCExKTt2YXIgVnQsZmUsZ2U7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJtb3VzZXVwIixmdW5jdGlvbihRdCl7dmFyIGpuPXkuaG92ZXJEYXRhLmNhcHR1cmU7aWYoam4pe3kuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIF9yPXkuY3ksaXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSksc3I9eS5zZWxlY3Rpb24sSWE9eS5maW5kTmVhcmVzdEVsZW1lbnQoaXJbMF0saXJbMV0sITAsITEpLCRyPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsS2k9eS5ob3ZlckRhdGEuZG93bixQbz1UKFF0KTtpZih5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpLHkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxLaSYmS2kudW5hY3RpdmF0ZSgpLHkuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIE5jPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O2lmKEtpP0tpLmVtaXQoTmMpOl9yLmVtaXQoTmMpLCF5LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX07S2k/S2kuZW1pdChaYSk6X3IuZW1pdChaYSl9eS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeS5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZih4KElhLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sUXQse3g6aXJbMF0seTppclsxXX0pLCF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5kcmFnZ2VkJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYheS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKHgoS2ksWyJjbGljayIsInRhcCIsInZjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSxmZT0hMSxRdC50aW1lU3RhbXAtZ2U8PV9yLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oVnQmJmNsZWFyVGltZW91dChWdCksZmU9ITAsZ2U9bnVsbCx4KEtpLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDppclswXSx5OmlyWzFdfSkpOihWdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZmV8fHgoS2ksWyJvbmVjbGljayIsIm9uZXRhcCIsInZvbmVjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KX0sX3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxnZT1RdC50aW1lU3RhbXApKSxLaT09bnVsbCYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXkuaG92ZXJEYXRhLmRyYWdnZWQmJiFUKFF0KSYmKF9yLiQoZykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSwkci5sZW5ndGg+MCYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz0kcj1fci5jb2xsZWN0aW9uKCkpLElhPT1LaSYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmSWEhPW51bGwmJklhLl9wcml2YXRlLnNlbGVjdGFibGUmJih5LmhvdmVyRGF0YS5kcmFnZ2luZ3x8KF9yLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fFBvP0lhLnNlbGVjdGVkKCk/SWEudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpJYS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSk6UG98fChfci4kKGcpLnVubWVyZ2UoSWEpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksSWEuc2VsZWN0KFsidGFwc2VsZWN0Il0pKSkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHkuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIG1jPV9yLmNvbGxlY3Rpb24oeS5nZXRBbGxJbkJveChzclswXSxzclsxXSxzclsyXSxzclszXSkpO3kucmVkcmF3SGludCgic2VsZWN0IiwhMCksbWMubGVuZ3RoPjAmJnkucmVkcmF3SGludCgiZWxlcyIsITApLF9yLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpRdCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX0pO3ZhciBFYT1mdW5jdGlvbih6Zil7cmV0dXJuIHpmLnNlbGVjdGFibGUoKSYmIXpmLnNlbGVjdGVkKCl9O19yLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fFBvfHxfci4kKGcpLnVubWVyZ2UobWMpLnVuc2VsZWN0KCksbWMuZW1pdCgiYm94Iikuc3RkRmlsdGVyKEVhKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx5LnJlZHJhdygpfWlmKHkuaG92ZXJEYXRhLmRyYWdnaW5nJiYoeS5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpKSwhc3JbNF0pe3kucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBKYT1LaSYmS2kuZ3JhYmJlZCgpO2Z0KCRyKSxKYSYmKEtpLmVtaXQoImZyZWVvbiIpLCRyLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihLaS5lbWl0KCJkcmFnZnJlZW9uIiksJHIuZW1pdCgiZHJhZ2ZyZWUiKSkpfX1zcls0XT0wLHkuaG92ZXJEYXRhLmRvd249bnVsbCx5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx5LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEseS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx5LmRyYWdEYXRhLmRpZERyYWc9ITEseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10seS5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx5LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbH19LCExKTt2YXIgbmU9ZnVuY3Rpb24oUXQpe2lmKCF5LnNjcm9sbGluZ1BhZ2Upe3ZhciBqbj15LmN5LF9yPWpuLnpvb20oKSxpcj1qbi5wYW4oKSxzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKSxJYT1bc3JbMF0qX3IraXIueCxzclsxXSpfcitpci55XTtpZih5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkuaG92ZXJEYXRhLmRyYWdnaW5nfHx5LmhvdmVyRGF0YS5jeHRTdGFydGVkfHx6dCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihqbi5wYW5uaW5nRW5hYmxlZCgpJiZqbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmam4uem9vbWluZ0VuYWJsZWQoKSYmam4udXNlclpvb21pbmdFbmFibGVkKCkpe1F0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQoeS5kYXRhLndoZWVsVGltZW91dCkseS5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS5kYXRhLndoZWVsWm9vbWluZz0hMSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpfSwxNTApO3ZhciAkcjtRdC5kZWx0YVkhPW51bGw/JHI9UXQuZGVsdGFZLy0yNTA6UXQud2hlZWxEZWx0YVkhPW51bGw/JHI9UXQud2hlZWxEZWx0YVkvMWUzOiRyPVF0LndoZWVsRGVsdGEvMWUzLCRyPSRyKnkud2hlZWxTZW5zaXRpdml0eTt2YXIgS2k9UXQuZGVsdGFNb2RlPT09MTtLaSYmKCRyKj0zMyk7dmFyIFBvPWpuLnpvb20oKSpNYXRoLnBvdygxMCwkcik7UXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKFBvPXkuZ2VzdHVyZVN0YXJ0Wm9vbSpRdC5zY2FsZSksam4uem9vbSh7bGV2ZWw6UG8scmVuZGVyZWRQb3NpdGlvbjp7eDpJYVswXSx5OklhWzFdfX0pLGpuLmVtaXQoUXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIj8icGluY2h6b29tIjoic2Nyb2xsem9vbSIpfX19O3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ3aGVlbCIsbmUsITApLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywic2Nyb2xsIixmdW5jdGlvbihRdCl7eS5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCEwKSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixmdW5jdGlvbihRdCl7eS5nZXN0dXJlU3RhcnRab29tPXkuY3kuem9vbSgpLHkuaGFzVG91Y2hTdGFydGVkfHxRdC5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKEVyKXt5Lmhhc1RvdWNoU3RhcnRlZHx8bmUoRXIpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihRdCl7dmFyIGpuPXkucHJvamVjdEludG9WaWV3cG9ydChRdC5jbGllbnRYLFF0LmNsaWVudFkpO3kuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJtb3VzZW91dCIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKFF0KXt2YXIgam49eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSk7eS5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpO3ZhciBQZSxwZSxibix6ZSxWZSxFbixEbixLbixTbixXbixycix2cix1cix0cj1mdW5jdGlvbihRdCxqbixfcixpcil7cmV0dXJuIE1hdGguc3FydCgoX3ItUXQpKihfci1RdCkrKGlyLWpuKSooaXItam4pKX0sd249ZnVuY3Rpb24oUXQsam4sX3IsaXIpe3JldHVybihfci1RdCkqKF9yLVF0KSsoaXItam4pKihpci1qbil9LGdyO3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iixncj1mdW5jdGlvbihRdCl7aWYoeS5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFlZShRdCkpe2t0KCkseS50b3VjaERhdGEuY2FwdHVyZT0hMCx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBqbj15LmN5LF9yPXkudG91Y2hEYXRhLm5vdyxpcj15LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7X3JbMF09c3JbMF0sX3JbMV09c3JbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIHNyPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtfclsyXT1zclswXSxfclszXT1zclsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO19yWzRdPXNyWzBdLF9yWzVdPXNyWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAsZnQoeS5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgSWE9eS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7U249SWFbMF0sV249SWFbMV0scnI9SWFbMl0sdnI9SWFbM10sUGU9UXQudG91Y2hlc1swXS5jbGllbnRYLVNuLHBlPVF0LnRvdWNoZXNbMF0uY2xpZW50WS1Xbixibj1RdC50b3VjaGVzWzFdLmNsaWVudFgtU24semU9UXQudG91Y2hlc1sxXS5jbGllbnRZLVduLHVyPTA8PVBlJiZQZTw9cnImJjA8PWJuJiZibjw9cnImJjA8PXBlJiZwZTw9dnImJjA8PXplJiZ6ZTw9dnI7dmFyICRyPWpuLnBhbigpLEtpPWpuLnpvb20oKTtWZT10cihQZSxwZSxibix6ZSksRW49d24oUGUscGUsYm4semUpLERuPVsoUGUrYm4pLzIsKHBlK3plKS8yXSxLbj1bKERuWzBdLSRyLngpL0tpLChEblsxXS0kci55KS9LaV07dmFyIFBvPTIwMCxOYz1QbypQbztpZihFbjxOYyYmIVF0LnRvdWNoZXNbMl0pe3ZhciBaYT15LmZpbmROZWFyZXN0RWxlbWVudChfclswXSxfclsxXSwhMCwhMCksbWM9eS5maW5kTmVhcmVzdEVsZW1lbnQoX3JbMl0sX3JbM10sITAsITApO1phJiZaYS5pc05vZGUoKT8oWmEuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpfclswXSx5Ol9yWzFdfX0pLHkudG91Y2hEYXRhLnN0YXJ0PVphKTptYyYmbWMuaXNOb2RlKCk/KG1jLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6X3JbMF0seTpfclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydD1tYyk6am4uZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6X3JbMF0seTpfclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydCYmKHkudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHkudG91Y2hEYXRhLmN4dD0hMCx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXcoKTtyZXR1cm59fWlmKFF0LnRvdWNoZXNbMl0pam4uYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZRdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVF0LnRvdWNoZXNbMV0pe2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBFYT15LmZpbmROZWFyZXN0RWxlbWVudHMoX3JbMF0sX3JbMV0sITAsITApLEphPUVhWzBdO2lmKEphIT1udWxsJiYoSmEuYWN0aXZhdGUoKSx5LnRvdWNoRGF0YS5zdGFydD1KYSx5LnRvdWNoRGF0YS5zdGFydHM9RWEseS5ub2RlSXNHcmFiYmFibGUoSmEpKSl7dmFyIHZsPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1qbi5jb2xsZWN0aW9uKCksemY9bnVsbDt5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSxKYS5zZWxlY3RlZCgpPyh6Zj1qbi4kKGZ1bmN0aW9uKHNkKXtyZXR1cm4gc2Quc2VsZWN0ZWQoKSYmeS5ub2RlSXNHcmFiYmFibGUoc2QpfSksYXQoemYse2FkZFRvTGlzdDp2bH0pKTpsdChKYSx7YWRkVG9MaXN0OnZsfSksUyhKYSk7dmFyIHhwPWZ1bmN0aW9uKGJ2KXtyZXR1cm57b3JpZ2luYWxFdmVudDpRdCx0eXBlOmJ2LHBvc2l0aW9uOnt4Ol9yWzBdLHk6X3JbMV19fX07SmEuZW1pdCh4cCgiZ3JhYm9uIikpLHpmP3pmLmZvckVhY2goZnVuY3Rpb24oc2Qpe3NkLmVtaXQoeHAoImdyYWIiKSl9KTpKYS5lbWl0KHhwKCJncmFiIikpfXgoSmEsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sUXQse3g6X3JbMF0seTpfclsxXX0pLEphPT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OnNyWzBdLHk6c3JbMV19LHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXcoKSkseS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHkudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYheS5waW5jaGluZyYmIXkudG91Y2hEYXRhLnNlbGVjdGluZyYmeCh5LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxRdCx7eDpfclswXSx5Ol9yWzFdfSl9LHkudGFwaG9sZER1cmF0aW9uKX19aWYoUXQudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIga3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bXSxxZj0wO3FmPF9yLmxlbmd0aDtxZisrKWtwW3FmXT1pcltxZl09X3JbcWZdO3ZhciBtZz1RdC50b3VjaGVzWzBdO3kudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVttZy5jbGllbnRYLG1nLmNsaWVudFldfX19LCExKTt2YXIgZnI7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJ0b3VjaG1vdmUiLGZyPWZ1bmN0aW9uKFF0KXt2YXIgam49eS50b3VjaERhdGEuY2FwdHVyZTtpZighKCFqbiYmIWVlKFF0KSkpe3ZhciBfcj15LnNlbGVjdGlvbixpcj15LmN5LHNyPXkudG91Y2hEYXRhLm5vdyxJYT15LnRvdWNoRGF0YS5lYXJsaWVyLCRyPWlyLnpvb20oKTtpZihRdC50b3VjaGVzWzBdKXt2YXIgS2k9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPUtpWzBdLHNyWzFdPUtpWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBLaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7c3JbMl09S2lbMF0sc3JbM109S2lbMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTtzcls0XT1LaVswXSxzcls1XT1LaVsxXX12YXIgUG89eS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24sTmM7aWYoam4mJlF0LnRvdWNoZXNbMF0mJlBvKXtmb3IodmFyIFphPVtdLG1jPTA7bWM8c3IubGVuZ3RoO21jKyspWmFbbWNdPXNyW21jXS1JYVttY107dmFyIEVhPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1Qb1swXSxKYT1FYSpFYSx2bD1RdC50b3VjaGVzWzBdLmNsaWVudFktUG9bMV0semY9dmwqdmwseHA9SmEremY7TmM9eHA+PXkudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGpuJiZ5LnRvdWNoRGF0YS5jeHQpe1F0LnByZXZlbnREZWZhdWx0KCk7dmFyIGtwPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixxZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sbWc9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLHNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1Xbixidj13bihrcCxxZixtZyxzZCksX209YnYvRW4sZ3g9MTUwLE8zPWd4Kmd4LHB4PTEuNSxUOT1weCpweDtpZihfbT49VDl8fGJ2Pj1PMyl7eS50b3VjaERhdGEuY3h0PSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgTjM9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX07eS50b3VjaERhdGEuc3RhcnQ/KHkudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KE4zKSx5LnRvdWNoRGF0YS5zdGFydD1udWxsKTppci5lbWl0KE4zKX19aWYoam4mJnkudG91Y2hEYXRhLmN4dCl7dmFyIE4zPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fTt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS50b3VjaERhdGEuc3RhcnQ/eS50b3VjaERhdGEuc3RhcnQuZW1pdChOMyk6aXIuZW1pdChOMykseS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciAkZD15LmZpbmROZWFyZXN0RWxlbWVudChzclswXSxzclsxXSwhMCwhMCk7KCF5LnRvdWNoRGF0YS5jeHRPdmVyfHwkZCE9PXkudG91Y2hEYXRhLmN4dE92ZXIpJiYoeS50b3VjaERhdGEuY3h0T3ZlciYmeS50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuY3h0T3Zlcj0kZCwkZCYmJGQuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSl9ZWxzZSBpZihqbiYmUXQudG91Y2hlc1syXSYmaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpKVF0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx5LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGlyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuc2VsZWN0aW5nPSEwLHkudG91Y2hEYXRhLmRpZFNlbGVjdD0hMCxfcls0XT0xLCFfcnx8X3IubGVuZ3RoPT09MHx8X3JbMF09PT12b2lkIDA/KF9yWzBdPShzclswXStzclsyXStzcls0XSkvMyxfclsxXT0oc3JbMV0rc3JbM10rc3JbNV0pLzMsX3JbMl09KHNyWzBdK3NyWzJdK3NyWzRdKS8zKzEsX3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKzEpOihfclsyXT0oc3JbMF0rc3JbMl0rc3JbNF0pLzMsX3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCk7ZWxzZSBpZihqbiYmUXQudG91Y2hlc1sxXSYmIXkudG91Y2hEYXRhLmRpZFNlbGVjdCYmaXIuem9vbWluZ0VuYWJsZWQoKSYmaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclpvb21pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgdzE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHcxKXt5LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIHpkPTA7emQ8dzEubGVuZ3RoO3pkKyspe3ZhciBDOT13MVt6ZF0uX3ByaXZhdGU7QzkuZ3JhYmJlZD0hMSxDOS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEdiPXkudG91Y2hEYXRhLnN0YXJ0LGtwPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixxZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sbWc9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLHNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1XbixuUj10cihrcCxxZixtZyxzZCksRHR0PW5SL1ZlO2lmKHVyKXt2YXIgT3R0PWtwLVBlLE50dD1xZi1wZSxQdHQ9bWctYm4sRnR0PXNkLXplLEJ0dD0oT3R0K1B0dCkvMixSdHQ9KE50dCtGdHQpLzIsVWs9aXIuem9vbSgpLHNNPVVrKkR0dCxfOT1pci5wYW4oKSxyUj1LblswXSpVaytfOS54LGlSPUtuWzFdKlVrK185LnksanR0PXt4Oi1zTS9VayooclItXzkueC1CdHQpK3JSLHk6LXNNL1VrKihpUi1fOS55LVJ0dCkraVJ9O2lmKEdiJiZHYi5hY3RpdmUoKSl7dmFyIHcxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztmdCh3MSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksR2IudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHcxLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihHYi5lbWl0KCJkcmFnZnJlZW9uIiksdzEuZW1pdCgiZHJhZ2ZyZWUiKSl9aXIudmlld3BvcnQoe3pvb206c00scGFuOmp0dCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxpci5lbWl0KCJwaW5jaHpvb20iKSxWZT1uUixQZT1rcCxwZT1xZixibj1tZyx6ZT1zZCx5LnBpbmNoaW5nPSEwfWlmKFF0LnRvdWNoZXNbMF0pe3ZhciBLaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7c3JbMF09S2lbMF0sc3JbMV09S2lbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtzclsyXT1LaVswXSxzclszXT1LaVsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgS2k9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO3NyWzRdPUtpWzBdLHNyWzVdPUtpWzFdfX1lbHNlIGlmKFF0LnRvdWNoZXNbMF0mJiF5LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBFcD15LnRvdWNoRGF0YS5zdGFydCxhTT15LnRvdWNoRGF0YS5sYXN0LCRkO2lmKCF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmKCRkPXkuZmluZE5lYXJlc3RFbGVtZW50KHNyWzBdLHNyWzFdLCEwLCEwKSksam4mJkVwIT1udWxsJiZRdC5wcmV2ZW50RGVmYXVsdCgpLGpuJiZFcCE9bnVsbCYmeS5ub2RlSXNEcmFnZ2FibGUoRXApKWlmKE5jKXt2YXIgdzE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzLHNSPSF5LmRyYWdEYXRhLmRpZERyYWc7c1ImJmF0KHcxLHtpbkRyYWdMYXllcjohMH0pLHkuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgV2s9e3g6MCx5OjB9O2lmKFgoWmFbMF0pJiZYKFphWzFdKSYmKFdrLngrPVphWzBdLFdrLnkrPVphWzFdLHNSKSl7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIFRwPXkudG91Y2hEYXRhLmRyYWdEZWx0YTtUcCYmWChUcFswXSkmJlgoVHBbMV0pJiYoV2sueCs9VHBbMF0sV2sueSs9VHBbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx3MS5zaWxlbnRTaGlmdChXaykuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUlhWzBdJiZ5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1JYVsxXSYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX1lbHNle3ZhciBUcD15LnRvdWNoRGF0YS5kcmFnRGVsdGE9eS50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtUcC5sZW5ndGg9PT0wPyhUcC5wdXNoKFphWzBdKSxUcC5wdXNoKFphWzFdKSk6KFRwWzBdKz1aYVswXSxUcFsxXSs9WmFbMV0pfWlmKHgoRXB8fCRkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxRdCx7eDpzclswXSx5OnNyWzFdfSksKCFFcHx8IUVwLmdyYWJiZWQoKSkmJiRkIT1hTSYmKGFNJiZhTS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSksJGQmJiRkLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkpLHkudG91Y2hEYXRhLmxhc3Q9JGQsam4pZm9yKHZhciB6ZD0wO3pkPHNyLmxlbmd0aDt6ZCsrKXNyW3pkXSYmeS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblt6ZF0mJk5jJiYoeS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoam4mJihFcD09bnVsbHx8RXAucGFubmFibGUoKSkmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgJHR0PUEoRXAseS50b3VjaERhdGEuc3RhcnRzKTskdHQmJihRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1xNSh5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseS5zd2lwZVBhbm5pbmc/KGlyLnBhbkJ5KHt4OlphWzBdKiRyLHk6WmFbMV0qJHJ9KSxpci5lbWl0KCJkcmFncGFuIikpOk5jJiYoeS5zd2lwZVBhbm5pbmc9ITAsaXIucGFuQnkoe3g6RWEqJHIseTp2bCokcn0pLGlyLmVtaXQoImRyYWdwYW4iKSxFcCYmKEVwLnVuYWN0aXZhdGUoKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIEtpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzBdLmNsaWVudFgsUXQudG91Y2hlc1swXS5jbGllbnRZKTtzclswXT1LaVswXSxzclsxXT1LaVsxXX19Zm9yKHZhciBtYz0wO21jPHNyLmxlbmd0aDttYysrKUlhW21jXT1zclttY107am4mJlF0LnRvdWNoZXMubGVuZ3RoPjAmJiF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpfX0sITEpO3ZhciBKcjt5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoY2FuY2VsIixKcj1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0O3kudG91Y2hEYXRhLmNhcHR1cmU9ITEsam4mJmpuLnVuYWN0aXZhdGUoKX0pO3ZhciB3aSxLcyxrYSxDaTtpZih5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoZW5kIix3aT1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0LF9yPXkudG91Y2hEYXRhLmNhcHR1cmU7aWYoX3IpUXQudG91Y2hlcy5sZW5ndGg9PT0wJiYoeS50b3VjaERhdGEuY2FwdHVyZT0hMSksUXQucHJldmVudERlZmF1bHQoKTtlbHNlIHJldHVybjt2YXIgaXI9eS5zZWxlY3Rpb247eS5zd2lwZVBhbm5pbmc9ITEseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBzcj15LmN5LElhPXNyLnpvb20oKSwkcj15LnRvdWNoRGF0YS5ub3csS2k9eS50b3VjaERhdGEuZWFybGllcjtpZihRdC50b3VjaGVzWzBdKXt2YXIgUG89eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpOyRyWzBdPVBvWzBdLCRyWzFdPVBvWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBQbz15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7JHJbMl09UG9bMF0sJHJbM109UG9bMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIFBvPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTskcls0XT1Qb1swXSwkcls1XT1Qb1sxXX1qbiYmam4udW5hY3RpdmF0ZSgpO3ZhciBOYztpZih5LnRvdWNoRGF0YS5jeHQpe2lmKE5jPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19LGpuP2puLmVtaXQoTmMpOnNyLmVtaXQoTmMpLCF5LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07am4/am4uZW1pdChaYSk6c3IuZW1pdChaYSl9eS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHQ9ITEseS50b3VjaERhdGEuc3RhcnQ9bnVsbCx5LnJlZHJhdygpO3JldHVybn1pZighUXQudG91Y2hlc1syXSYmc3IuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZ5LnRvdWNoRGF0YS5zZWxlY3Rpbmcpe3kudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgbWM9c3IuY29sbGVjdGlvbih5LmdldEFsbEluQm94KGlyWzBdLGlyWzFdLGlyWzJdLGlyWzNdKSk7aXJbMF09dm9pZCAwLGlyWzFdPXZvaWQgMCxpclsyXT12b2lkIDAsaXJbM109dm9pZCAwLGlyWzRdPTAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxzci5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6UXQscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KTt2YXIgRWE9ZnVuY3Rpb24oTzMpe3JldHVybiBPMy5zZWxlY3RhYmxlKCkmJiFPMy5zZWxlY3RlZCgpfTttYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoRWEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLG1jLm5vbmVtcHR5KCkmJnkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3KCl9aWYoam4hPW51bGwmJmpuLnVuYWN0aXZhdGUoKSxRdC50b3VjaGVzWzJdKXkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFRdC50b3VjaGVzWzFdKXtpZighUXQudG91Y2hlc1swXSl7aWYoIVF0LnRvdWNoZXNbMF0pe3kuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgSmE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGpuIT1udWxsKXt2YXIgdmw9am4uX3ByaXZhdGUuZ3JhYmJlZDtmdChKYSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksdmwmJihqbi5lbWl0KCJmcmVlb24iKSxKYS5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoam4uZW1pdCgiZHJhZ2ZyZWVvbiIpLEphLmVtaXQoImRyYWdmcmVlIikpKSx4KGpuLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksam4udW5hY3RpdmF0ZSgpLHkudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgemY9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITApO3goemYsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KX12YXIgeHA9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS0kclswXSxrcD14cCp4cCxxZj15LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLSRyWzFdLG1nPXFmKnFmLHNkPWtwK21nLGJ2PXNkKklhKklhO3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChqbnx8c3IuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSx4KGpuLFsidGFwIiwidmNsaWNrIl0sUXQse3g6JHJbMF0seTokclsxXX0pLEtzPSExLFF0LnRpbWVTdGFtcC1DaTw9c3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhrYSYmY2xlYXJUaW1lb3V0KGthKSxLcz0hMCxDaT1udWxsLHgoam4sWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSkpOihrYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7S3N8fHgoam4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSl9LHNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQ2k9UXQudGltZVN0YW1wKSksam4hPW51bGwmJiF5LmRyYWdEYXRhLmRpZERyYWcmJmpuLl9wcml2YXRlLnNlbGVjdGFibGUmJmJ2PHkudG91Y2hUYXBUaHJlc2hvbGQyJiYheS5waW5jaGluZyYmKHNyLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhzci4kKGcpLnVubWVyZ2Uoam4pLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksam4uc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpqbi5zZWxlY3RlZCgpP2puLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6am4uc2VsZWN0KFsidGFwc2VsZWN0Il0pLHkucmVkcmF3SGludCgiZWxlcyIsITApKSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBfbT0wO19tPCRyLmxlbmd0aDtfbSsrKUtpW19tXT0kcltfbV07eS5kcmFnRGF0YS5kaWREcmFnPSExLFF0LnRvdWNoZXMubGVuZ3RoPT09MCYmKHkudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPW51bGwseS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx5LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFF0LnRvdWNoZXMubGVuZ3RoPDImJihRdC50b3VjaGVzLmxlbmd0aD09PTEmJih5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WV0pLHkucGluY2hpbmc9ITEseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKSl9LCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBoaT1bXSxncz1mdW5jdGlvbihRdCl7cmV0dXJue2NsaWVudFg6UXQuY2xpZW50WCxjbGllbnRZOlF0LmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOlF0LnBvaW50ZXJJZCxwYWdlWDpRdC5wYWdlWCxwYWdlWTpRdC5wYWdlWSxyYWRpdXNYOlF0LndpZHRoLzIscmFkaXVzWTpRdC5oZWlnaHQvMixzY3JlZW5YOlF0LnNjcmVlblgsc2NyZWVuWTpRdC5zY3JlZW5ZLHRhcmdldDpRdC50YXJnZXR9fSxxaT1mdW5jdGlvbihRdCl7cmV0dXJue2V2ZW50OlF0LHRvdWNoOmdzKFF0KX19LFNpPWZ1bmN0aW9uKFF0KXtoaS5wdXNoKHFpKFF0KSl9LFVpPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPTA7am48aGkubGVuZ3RoO2puKyspe3ZhciBfcj1oaVtqbl07aWYoX3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkKXtoaS5zcGxpY2Uoam4sMSk7cmV0dXJufX19LEdhPWZ1bmN0aW9uKFF0KXt2YXIgam49aGkuZmlsdGVyKGZ1bmN0aW9uKF9yKXtyZXR1cm4gX3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkfSlbMF07am4uZXZlbnQ9UXQsam4udG91Y2g9Z3MoUXQpfSxZcz1mdW5jdGlvbihRdCl7UXQudG91Y2hlcz1oaS5tYXAoZnVuY3Rpb24oam4pe3JldHVybiBqbi50b3VjaH0pfSx6cz1mdW5jdGlvbihRdCl7cmV0dXJuIFF0LnBvaW50ZXJUeXBlPT09Im1vdXNlInx8UXQucG9pbnRlclR5cGU9PT00fTt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKEVyKXt6cyhFcil8fChFci5wcmV2ZW50RGVmYXVsdCgpLFNpKEVyKSxZcyhFciksZ3IoRXIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVydXAiLGZ1bmN0aW9uKEVyKXt6cyhFcil8fChVaShFciksWXMoRXIpLHdpKEVyKSl9KSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmNhbmNlbCIsZnVuY3Rpb24oRXIpe3pzKEVyKXx8KFVpKEVyKSxZcyhFciksSnIoRXIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oRXIpe3pzKEVyKXx8KEVyLnByZXZlbnREZWZhdWx0KCksR2EoRXIpLFlzKEVyKSxmcihFcikpfSl9fTt2YXIgZHY9e307ZHYuZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOmcsZHJhdzpmdW5jdGlvbihULEEsRCxPLCQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsVCxBLEQsTywkLHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihULEEsRCxPLCQscSxTKXtyZXR1cm4geWsoJCxxLHRoaXMucG9pbnRzLFQsQSxELzIsTy8yLFMpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFQsQSxELE8sJCxxLFMpe3JldHVybiBsdihULEEsdGhpcy5wb2ludHMscSxTLE8sJCxbMCwtMV0sRCl9fX0sZHYuZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7cmV0dXJuIEZZKEQsTyxnLHgsVC8yKyQsQS8yKyQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3JldHVybiBDMyhnLHgsQSxELE8sJCxUKX19fSxkdi5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgqMiksVD0wO1Q8Zy5sZW5ndGgvMjtUKyspe3ZhciBBPVQqMixEPXZvaWQgMDtUPGcubGVuZ3RoLzItMT9EPShUKzEpKjI6RD0wLHhbVCo0XT1nW0FdLHhbVCo0KzFdPWdbQSsxXTt2YXIgTz1nW0RdLWdbQV0sJD1nW0QrMV0tZ1tBKzFdLHE9TWF0aC5zcXJ0KE8qTyskKiQpO3hbVCo0KzJdPU8vcSx4W1QqNCszXT0kL3F9cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOngsZHJhdzpmdW5jdGlvbihHLFcsZXQsYXQsbHQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsRyxXLGV0LGF0LGx0LHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihHLFcsZXQsYXQsbHQsZnQsQXQpe3JldHVybiBCWShsdCxmdCx0aGlzLnBvaW50cyxHLFcsZXQsYXQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKEcsVyxldCxhdCxsdCxmdCxBdCl7cmV0dXJuIFBZKEcsVyx0aGlzLnBvaW50cyxmdCxBdCxhdCxsdCl9fX0sZHYuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czpuZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7cmV0dXJuIGVGKEQsTyxnLHgsVCxBLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3ZhciBxPXhrKEEsRCksUz1xKjI7cmV0dXJuISEobHYoZyx4LHRoaXMucG9pbnRzLE8sJCxBLEQtUyxbMCwtMV0sVCl8fGx2KGcseCx0aGlzLnBvaW50cyxPLCQsQS1TLEQsWzAsLTFdLFQpfHxDMyhnLHgsUyxTLE8tQS8yK3EsJC1ELzIrcSxUKXx8QzMoZyx4LFMsUyxPK0EvMi1xLCQtRC8yK3EsVCl8fEMzKGcseCxTLFMsTytBLzItcSwkK0QvMi1xLFQpfHxDMyhnLHgsUyxTLE8tQS8yK3EsJCtELzItcSxUKSl9fX0sZHYuZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6c0YoKSxwb2ludHM6bmQoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEEsRCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxBLEQpfSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOmZ1bmN0aW9uKGcseCxULEEpe3ZhciBEPXRoaXMuY29ybmVyTGVuZ3RoLE89eC8yLCQ9Zy8yLHE9VC0kLFM9VCskLEc9QS1PLFc9QStPO3JldHVybnt0b3BMZWZ0OltxLEcrRCxxK0QsRyxxK0QsRytEXSx0b3BSaWdodDpbUy1ELEcsUyxHK0QsUy1ELEcrRF0sYm90dG9tUmlnaHQ6W1MsVy1ELFMtRCxXLFMtRCxXLURdLGJvdHRvbUxlZnQ6W3ErRCxXLHEsVy1ELHErRCxXLURdfX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoVCsyKiQsQSsyKiQsZyx4KSxTPVtdLmNvbmNhdC5hcHBseShbXSxbcS50b3BMZWZ0LnNwbGljZSgwLDQpLHEudG9wUmlnaHQuc3BsaWNlKDAsNCkscS5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxxLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4geWsoRCxPLFMsZyx4KX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXtpZihsdihnLHgsdGhpcy5wb2ludHMsTywkLEEsRC0yKnRoaXMuY29ybmVyTGVuZ3RoLFswLC0xXSxUKXx8bHYoZyx4LHRoaXMucG9pbnRzLE8sJCxBLTIqdGhpcy5jb3JuZXJMZW5ndGgsRCxbMCwtMV0sVCkpcmV0dXJuITA7dmFyIHE9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKEEsRCxPLCQpO3JldHVybiBqZChnLHgscS50b3BMZWZ0KXx8amQoZyx4LHEudG9wUmlnaHQpfHxqZChnLHgscS5ib3R0b21SaWdodCl8fGpkKGcseCxxLmJvdHRvbUxlZnQpfX19LGR2LmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6bmQoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEEsRCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxBLEQpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGcseCxULEEsRCxPLCQpe3ZhciBxPS4xNSxTPS41LEc9Ljg1LFc9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhUKzIqJCxBKzIqJCxnLHgpLGV0PWZ1bmN0aW9uKGZ0KXt2YXIgQXQ9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0scSksa3Q9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0sUyksTXQ9SDUoe3g6ZnRbMF0seTpmdFsxXX0se3g6ZnRbMl0seTpmdFszXX0se3g6ZnRbNF0seTpmdFs1XX0sRyk7cmV0dXJuW2Z0WzBdLGZ0WzFdLEF0LngsQXQueSxrdC54LGt0LnksTXQueCxNdC55LGZ0WzRdLGZ0WzVdXX0sYXQ9W10uY29uY2F0KGV0KFcudG9wTGVmdCksZXQoVy50b3BSaWdodCksZXQoVy5ib3R0b21SaWdodCksZXQoVy5ib3R0b21MZWZ0KSk7cmV0dXJuIHlrKEQsTyxhdCxnLHgpfSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpmdW5jdGlvbihnLHgsVCxBKXt2YXIgRD14LzIsTz1nLzIsJD1ULU8scT1UK08sUz1BLUQsRz1BK0QsVz1TTChnLHgpLGV0PVcuaGVpZ2h0T2Zmc2V0LGF0PVcud2lkdGhPZmZzZXQsbHQ9Vy5jdHJsUHRPZmZzZXRQY3QqZyxmdD17dG9wTGVmdDpbJCxTK2V0LCQrbHQsUywkK2F0LFNdLHRvcFJpZ2h0OltxLWF0LFMscS1sdCxTLHEsUytldF0sYm90dG9tUmlnaHQ6W3EsRy1ldCxxLWx0LEcscS1hdCxHXSxib3R0b21MZWZ0OlskK2F0LEcsJCtsdCxHLCQsRy1ldF19O3JldHVybiBmdC50b3BMZWZ0LmlzVG9wPSEwLGZ0LnRvcFJpZ2h0LmlzVG9wPSEwLGZ0LmJvdHRvbUxlZnQuaXNCb3R0b209ITAsZnQuYm90dG9tUmlnaHQuaXNCb3R0b209ITAsZnR9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9U0woQSxEKSxTPXEuaGVpZ2h0T2Zmc2V0LEc9cS53aWR0aE9mZnNldDtpZihsdihnLHgsdGhpcy5wb2ludHMsTywkLEEsRC0yKlMsWzAsLTFdLFQpfHxsdihnLHgsdGhpcy5wb2ludHMsTywkLEEtMipHLEQsWzAsLTFdLFQpKXJldHVybiEwO2Zvcih2YXIgVz10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKEEsRCxPLCQpLGV0PWZ1bmN0aW9uKHp0LGVlLFZ0KXt2YXIgZmU9VnRbNF0sZ2U9VnRbMl0sbmU9VnRbMF0sUGU9VnRbNV0scGU9VnRbMV0sYm49TWF0aC5taW4oZmUsbmUpLHplPU1hdGgubWF4KGZlLG5lKSxWZT1NYXRoLm1pbihQZSxwZSksRW49TWF0aC5tYXgoUGUscGUpO2lmKGJuPD16dCYmenQ8PXplJiZWZTw9ZWUmJmVlPD1Fbil7dmFyIERuPVJZKGZlLGdlLG5lKSxLbj1JWShEblswXSxEblsxXSxEblsyXSx6dCksU249S24uZmlsdGVyKGZ1bmN0aW9uKFduKXtyZXR1cm4gMDw9V24mJlduPD0xfSk7aWYoU24ubGVuZ3RoPjApcmV0dXJuIFNuWzBdfXJldHVybiBudWxsfSxhdD1PYmplY3Qua2V5cyhXKSxsdD0wO2x0PGF0Lmxlbmd0aDtsdCsrKXt2YXIgZnQ9YXRbbHRdLEF0PVdbZnRdLGt0PWV0KGcseCxBdCk7aWYoa3QhPW51bGwpe3ZhciBNdD1BdFs1XSxEdD1BdFszXSxqdD1BdFsxXSxadD1yZihNdCxEdCxqdCxrdCk7aWYoQXQuaXNUb3AmJlp0PD14fHxBdC5pc0JvdHRvbSYmeDw9WnQpcmV0dXJuITB9fXJldHVybiExfX19LGR2LmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpuZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsQSxEKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEEsRCl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsQSxELE8sJCl7dmFyIHE9Zy0oVC8yKyQpLFM9eC0oQS8yKyQpLEc9UyxXPWcrKFQvMiskKSxldD12bShELE8sZyx4LHEsUyxXLEcsITEpO3JldHVybiBldC5sZW5ndGg+MD9ldDplRihELE8sZyx4LFQsQSwkKX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxBLEQsTywkKXt2YXIgcT14ayhBLEQpLFM9MipxO2lmKGx2KGcseCx0aGlzLnBvaW50cyxPLCQsQSxELVMsWzAsLTFdLFQpfHxsdihnLHgsdGhpcy5wb2ludHMsTywkLEEtUyxELFswLC0xXSxUKSlyZXR1cm4hMDt2YXIgRz1BLzIrMipULFc9RC8yKzIqVCxldD1bTy1HLCQtVyxPLUcsJCxPK0csJCxPK0csJC1XXTtyZXR1cm4hIShqZChnLHgsZXQpfHxDMyhnLHgsUyxTLE8rQS8yLXEsJCtELzItcSxUKXx8QzMoZyx4LFMsUyxPLUEvMitxLCQrRC8yLXEsVCkpfX19LGR2LnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMubm9kZVNoYXBlcz17fSxnPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLG5kKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixuZCgzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixuZCg0LDApKSx5LnNxdWFyZT15LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgeD1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIix4KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIix4KX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLG5kKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixuZCg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsbmQoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsbmQoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixuZCg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsbmQoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLG5kKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLG5kKDgsMCkpO3ZhciBUPW5ldyBBcnJheSgyMCk7e3ZhciBBPUNMKDUsMCksRD1DTCg1LE1hdGguUEkvNSksTz0uNSooMy1NYXRoLnNxcnQoNSkpO08qPTEuNTc7Zm9yKHZhciAkPTA7JDxELmxlbmd0aC8yOyQrKylEWyQqMl0qPU8sRFskKjIrMV0qPU87Zm9yKHZhciAkPTA7JDwyMC80OyQrKylUWyQqNF09QVskKjJdLFRbJCo0KzFdPUFbJCoyKzFdLFRbJCo0KzJdPURbJCoyXSxUWyQqNCszXT1EWyQqMisxXX1UPWlGKFQpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixUKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHE9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIscSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixxKX15Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKFMpe3ZhciBHPVMuam9pbigiJCIpLFc9InBvbHlnb24tIitHLGV0O3JldHVybihldD10aGlzW1ddKT9ldDpnLmdlbmVyYXRlUG9seWdvbihXLFMpfX07dmFyICRrPXt9OyRrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSwkay5yZWRyYXc9ZnVuY3Rpb24oeSl7eT15fHxLUCgpO3ZhciBnPXRoaXM7Zy5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGcuYXZlcmFnZVJlZHJhd1RpbWU9MCksZy5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGcubGFzdFJlZHJhd1RpbWU9MCksZy5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihnLmxhc3REcmF3VGltZT0wKSxnLnJlcXVlc3RlZEZyYW1lPSEwLGcucmVuZGVyT3B0aW9ucz15fSwkay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeSxnKXtpZighdGhpcy5kZXN0cm95ZWQpe2c9PW51bGwmJmJsKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciB4PXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3gucHVzaCh7Zm46eSxwcmlvcml0eTpnfSkseC5zb3J0KGZ1bmN0aW9uKFQsQSl7cmV0dXJuIEEucHJpb3JpdHktVC5wcmlvcml0eX0pfX07dmFyIFZCPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEE9Zy5iZWZvcmVSZW5kZXJDYWxsYmFja3MsRD0wO0Q8QS5sZW5ndGg7RCsrKUFbRF0uZm4oeCxUKX07JGsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuY3k7aWYoIXkucmVuZGVyTG9vcFN0YXJ0ZWQpe3kucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHg9ZnVuY3Rpb24gVChBKXtpZigheS5kZXN0cm95ZWQpe2lmKCFnLmJhdGNoaW5nKCkpaWYoeS5yZXF1ZXN0ZWRGcmFtZSYmIXkuc2tpcEZyYW1lKXtWQih5LCEwLEEpO3ZhciBEPWRnKCk7eS5yZW5kZXIoeS5yZW5kZXJPcHRpb25zKTt2YXIgTz15Lmxhc3REcmF3VGltZT1kZygpO3kuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih5LmF2ZXJhZ2VSZWRyYXdUaW1lPU8tRCkseS5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHkucmVkcmF3Q291bnQ9MCkseS5yZWRyYXdDb3VudCsrLHkucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeS5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9Ty1EO3kucmVkcmF3VG90YWxUaW1lKz0kLHkubGFzdFJlZHJhd1RpbWU9JCx5LmF2ZXJhZ2VSZWRyYXdUaW1lPXkuYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseS5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIFZCKHksITEsQSk7eS5za2lwRnJhbWU9ITEsRmYoVCl9fTtGZih4KX19O3ZhciBldHQ9ZnVuY3Rpb24oZyl7dGhpcy5pbml0KGcpfSxRTD1ldHQsTTM9UUwucHJvdG90eXBlO00zLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLE0zLmluaXQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztnLm9wdGlvbnM9eSxnLmN5PXkuY3k7dmFyIHg9Zy5jb250YWluZXI9eS5jeS5jb250YWluZXIoKTtpZihSKXt2YXIgVD1SLmRvY3VtZW50LEE9VC5oZWFkLEQ9Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsTz0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLCQ9VC5nZXRFbGVtZW50QnlJZChEKSE9bnVsbDtpZih4LmNsYXNzTmFtZS5pbmRleE9mKE8pPDAmJih4LmNsYXNzTmFtZT0oeC5jbGFzc05hbWV8fCIiKSsiICIrTyksISQpe3ZhciBxPVQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtxLmlkPUQscS5pbm5lckhUTUw9Ii4iK08rIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsQS5pbnNlcnRCZWZvcmUocSxBLmNoaWxkcmVuWzBdKX12YXIgUz1SLmdldENvbXB1dGVkU3R5bGUoeCksRz1TLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Rz09PSJzdGF0aWMiJiZTYygiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1nLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGcuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxnLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxnLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZy50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZy5yZWRyYXdzPTAsZy5zaG93RnBzPXkuc2hvd0ZwcyxnLmRlYnVnPXkuZGVidWcsZy5oaWRlRWRnZXNPblZpZXdwb3J0PXkuaGlkZUVkZ2VzT25WaWV3cG9ydCxnLnRleHR1cmVPblZpZXdwb3J0PXkudGV4dHVyZU9uVmlld3BvcnQsZy53aGVlbFNlbnNpdGl2aXR5PXkud2hlZWxTZW5zaXRpdml0eSxnLm1vdGlvbkJsdXJFbmFibGVkPXkubW90aW9uQmx1cixnLmZvcmNlZFBpeGVsUmF0aW89WCh5LnBpeGVsUmF0aW8pP3kucGl4ZWxSYXRpbzpudWxsLGcubW90aW9uQmx1cj15Lm1vdGlvbkJsdXIsZy5tb3Rpb25CbHVyT3BhY2l0eT15Lm1vdGlvbkJsdXJPcGFjaXR5LGcubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWcubW90aW9uQmx1ck9wYWNpdHksZy5tb3Rpb25CbHVyUHhSYXRpbz0xLGcubWJQeFJCbHVycnk9MSxnLm1pbk1iTG93UXVhbEZyYW1lcz00LGcuZnVsbFF1YWxpdHlNYj0hMSxnLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGcuZGVza3RvcFRhcFRocmVzaG9sZD15LmRlc2t0b3BUYXBUaHJlc2hvbGQsZy5kZXNrdG9wVGFwVGhyZXNob2xkMj15LmRlc2t0b3BUYXBUaHJlc2hvbGQqeS5kZXNrdG9wVGFwVGhyZXNob2xkLGcudG91Y2hUYXBUaHJlc2hvbGQ9eS50b3VjaFRhcFRocmVzaG9sZCxnLnRvdWNoVGFwVGhyZXNob2xkMj15LnRvdWNoVGFwVGhyZXNob2xkKnkudG91Y2hUYXBUaHJlc2hvbGQsZy50YXBob2xkRHVyYXRpb249NTAwLGcuYmluZGluZ3M9W10sZy5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZy5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxnLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGcucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGcucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxNMy5ub3RpZnk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHk9PT0iaW5pdCIpe3gubG9hZCgpO3JldHVybn1pZih5PT09ImRlc3Ryb3kiKXt4LmRlc3Ryb3koKTtyZXR1cm59KHk9PT0iYWRkInx8eT09PSJyZW1vdmUifHx5PT09Im1vdmUiJiZULmhhc0NvbXBvdW5kTm9kZXMoKXx8eT09PSJsb2FkInx8eT09PSJ6b3JkZXIifHx5PT09Im1vdW50IikmJnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseT09PSJ2aWV3cG9ydCImJngucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHk9PT0ibG9hZCJ8fHk9PT0icmVzaXplInx8eT09PSJtb3VudCIpJiYoeC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSx4Lm1hdGNoQ2FudmFzU2l6ZSh4LmNvbnRhaW5lcikpLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LE0zLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3kuZGVzdHJveWVkPSEwLHkuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGc9MDtnPHkuYmluZGluZ3MubGVuZ3RoO2crKyl7dmFyIHg9eS5iaW5kaW5nc1tnXSxUPXgsQT1ULnRhcmdldDsoQS5vZmZ8fEEucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoQSxULmFyZ3MpfWlmKHkuYmluZGluZ3M9W10seS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHkucmVtb3ZlT2JzZXJ2ZXImJnkucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHkuc3R5bGVPYnNlcnZlciYmeS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LnJlc2l6ZU9ic2VydmVyJiZ5LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sTTMuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbS0wsamssR0Isb3gsZHYsJGtdLmZvckVhY2goZnVuY3Rpb24oeSl7bWUoTTMseSl9KTt2YXIgWkw9MWUzLzYwLHY5PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxBPXRoaXMucmVuZGVyZXI7aWYoIVQuZGVxdWV1ZWluZ1NldHVwKXtULmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgRD1XYyhmdW5jdGlvbigpe0EucmVkcmF3SGludCgiZWxlcyIsITApLEEucmVkcmF3SGludCgiZHJhZyIsITApLEEucmVkcmF3KCl9LGcuZGVxUmVkcmF3VGhyZXNob2xkKSxPPWZ1bmN0aW9uKFMsRyl7dmFyIFc9ZGcoKSxldD1BLmF2ZXJhZ2VSZWRyYXdUaW1lLGF0PUEubGFzdFJlZHJhd1RpbWUsbHQ9W10sZnQ9QS5jeS5leHRlbnQoKSxBdD1BLmdldFBpeGVsUmF0aW8oKTtmb3IoU3x8QS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBrdD1kZygpLE10PWt0LVcsRHQ9a3QtRztpZihhdDxaTCl7dmFyIGp0PVpMLShTP2V0OjApO2lmKER0Pj1nLmRlcUZhc3RDb3N0Kmp0KWJyZWFrfWVsc2UgaWYoUyl7aWYoTXQ+PWcuZGVxQ29zdCphdHx8TXQ+PWcuZGVxQXZnQ29zdCpldClicmVha31lbHNlIGlmKER0Pj1nLmRlcU5vRHJhd0Nvc3QqWkwpYnJlYWs7dmFyIFp0PWcuZGVxKFQsQXQsZnQpO2lmKFp0Lmxlbmd0aD4wKWZvcih2YXIgS3Q9MDtLdDxadC5sZW5ndGg7S3QrKylsdC5wdXNoKFp0W0t0XSk7ZWxzZSBicmVha31sdC5sZW5ndGg+MCYmKGcub25EZXFkKFQsbHQpLCFTJiZnLnNob3VsZFJlZHJhdyhULGx0LEF0LGZ0KSYmRCgpKX0sJD1nLnByaW9yaXR5fHx3TDtBLmJlZm9yZVJlbmRlcihPLCQoVCkpfX19fSxudHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpnbTtwKHRoaXMseSksdGhpcy5pZHNCeUtleT1uZXcgemIsdGhpcy5rZXlGb3JJZD1uZXcgemIsdGhpcy5jYWNoZXNCeUx2bD1uZXcgemIsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWcsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT14fXJldHVybiBtKHksW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oeCl7eD09bnVsbCYmYmwoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFQ9dGhpcy5pZHNCeUtleSxBPXRoaXMuaWRzQnlLZXkuZ2V0KHgpO3JldHVybiBBfHwoQT1uZXcgejUsVC5zZXQoeCxBKSksQX19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmFkZChUKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmRlbGV0ZShUKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4geD09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHgpLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD14LmlkKCksQT10aGlzLmtleUZvcklkLmdldChUKSxEPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlSWRGb3JLZXkoQSxUKSx0aGlzLmFkZElkRm9yS2V5KEQsVCksdGhpcy5rZXlGb3JJZC5zZXQoVCxEKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxBPXRoaXMua2V5Rm9ySWQuZ2V0KFQpO3RoaXMuZGVsZXRlSWRGb3JLZXkoQSxUKSx0aGlzLmtleUZvcklkLmRlbGV0ZShUKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxBPXRoaXMua2V5Rm9ySWQuZ2V0KFQpLEQ9dGhpcy5nZXRLZXkoeCk7cmV0dXJuIEEhPT1EfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHgpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHgpfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXMuY2FjaGVzQnlMdmwsQT10aGlzLmx2bHMsRD1ULmdldCh4KTtyZXR1cm4gRHx8KEQ9bmV3IHpiLFQuc2V0KHgsRCksQS5wdXNoKHgpKSxEfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuZ2V0KHgpfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpLEQ9dGhpcy5nZXRDYWNoZShBLFQpO3JldHVybiBEIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoeCksRH19LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oeCxUKXt2YXIgQT10aGlzLmtleUZvcklkLmdldCh4LmlkKCkpLEQ9dGhpcy5nZXRDYWNoZShBLFQpO3JldHVybiBEfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuaGFzKHgpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpO3JldHVybiB0aGlzLmhhc0NhY2hlKEEsVCl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oeCxULEEpe0Eua2V5PXgsdGhpcy5nZXRDYWNoZXNBdChUKS5zZXQoeCxBKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxULEEpe3ZhciBEPXRoaXMuZ2V0S2V5KHgpO3RoaXMuc2V0Q2FjaGUoRCxULEEpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0Zvcih4KX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3RoaXMuZ2V0Q2FjaGVzQXQoVCkuZGVsZXRlKHgpfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBBPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlQ2FjaGUoQSxUKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oQSl7cmV0dXJuIFQuZGVsZXRlQ2FjaGUoeCxBKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9eC5pZCgpLEE9dGhpcy5rZXlGb3JJZC5nZXQoVCk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHgpO3ZhciBEPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoeCk7cmV0dXJuIEQmJnRoaXMuaW52YWxpZGF0ZUtleShBKSxEfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KEEpPT09MH19XSkseX0oKSx3OT0yNSxtOT01MCxjeD0tNCxKTD0zLHRNPTcuOTkscnR0PTgsaXR0PTEwMjQsc3R0PTEwMjQsVUI9MTAyNCxhdHQ9LjIsb3R0PS44LGN0dD0xMCx1dHQ9LjE1LGx0dD0uMSxodHQ9LjksZnR0PS45LGR0dD0xMDAsZ3R0PTEsdXg9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSxwdHQ9QmYoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5OmdtLGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6azMsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSx6az1mdW5jdGlvbihnLHgpe3ZhciBUPXRoaXM7VC5yZW5kZXJlcj1nLFQub25EZXF1ZXVlcz1bXTt2YXIgQT1wdHQoeCk7bWUoVCxBKSxULmxvb2t1cD1uZXcgbnR0KEEuZ2V0S2V5LEEuZG9lc0VsZUludmFsaWRhdGVLZXkpLFQuc2V0dXBEZXF1ZXVlaW5nKCl9LGtoPXprLnByb3RvdHlwZTtraC5yZWFzb25zPXV4LGtoLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLmVsZUltZ0NhY2hlcz1nLmVsZUltZ0NhY2hlc3x8e30sZy5lbGVJbWdDYWNoZXNbeV09Zy5lbGVJbWdDYWNoZXNbeV18fFtdfSxraC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1nLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWcuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LFQ9eFt5XT14W3ldfHxbXTtyZXR1cm4gVH0sa2guZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlQ2FjaGVRdWV1ZT15LmVsZUNhY2hlUXVldWV8fG5ldyB2ayhmdW5jdGlvbih4LFQpe3JldHVybiBULnJlcXMteC5yZXFzfSk7cmV0dXJuIGd9LGtoLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlS2V5VG9DYWNoZVF1ZXVlPXkuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZ30sa2guZ2V0RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPXRoaXMsTz10aGlzLnJlbmRlcmVyLCQ9Ty5jeS56b29tKCkscT10aGlzLmxvb2t1cDtpZighZ3x8Zy53PT09MHx8Zy5oPT09MHx8aXNOYU4oZy53KXx8aXNOYU4oZy5oKXx8IXkudmlzaWJsZSgpfHx5LnJlbW92ZWQoKXx8IUQuYWxsb3dFZGdlVHhyQ2FjaGluZyYmeS5pc0VkZ2UoKXx8IUQuYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ5LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYoVD09bnVsbCYmKFQ9TWF0aC5jZWlsKHhMKCQqeCkpKSxUPGN4KVQ9Y3g7ZWxzZSBpZigkPj10TXx8VD5KTClyZXR1cm4gbnVsbDt2YXIgUz1NYXRoLnBvdygyLFQpLEc9Zy5oKlMsVz1nLncqUyxldD1PLmVsZVRleHRCaWdnZXJUaGFuTWluKHksUyk7aWYoIXRoaXMuaXNWaXNpYmxlKHksZXQpKXJldHVybiBudWxsO3ZhciBhdD1xLmdldCh5LFQpO2lmKGF0JiZhdC5pbnZhbGlkYXRlZCYmKGF0LmludmFsaWRhdGVkPSExLGF0LnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09YXQud2lkdGgpLGF0KXJldHVybiBhdDt2YXIgbHQ7aWYoRzw9dzk/bHQ9dzk6Rzw9bTk/bHQ9bTk6bHQ9TWF0aC5jZWlsKEcvbTkpKm05LEc+VUJ8fFc+c3R0KXJldHVybiBudWxsO3ZhciBmdD1ELmdldFRleHR1cmVRdWV1ZShsdCksQXQ9ZnRbZnQubGVuZ3RoLTJdLGt0PWZ1bmN0aW9uKCl7cmV0dXJuIEQucmVjeWNsZVRleHR1cmUobHQsVyl8fEQuYWRkVGV4dHVyZShsdCxXKX07QXR8fChBdD1mdFtmdC5sZW5ndGgtMV0pLEF0fHwoQXQ9a3QoKSksQXQud2lkdGgtQXQudXNlZFdpZHRoPFcmJihBdD1rdCgpKTtmb3IodmFyIE10PWZ1bmN0aW9uKHplKXtyZXR1cm4gemUmJnplLnNjYWxlZExhYmVsU2hvd249PT1ldH0sRHQ9QSYmQT09PXV4LmRlcXVldWUsanQ9QSYmQT09PXV4LmhpZ2hRdWFsaXR5LFp0PUEmJkE9PT11eC5kb3duc2NhbGUsS3QsenQ9VCsxO3p0PD1KTDt6dCsrKXt2YXIgZWU9cS5nZXQoeSx6dCk7aWYoZWUpe0t0PWVlO2JyZWFrfX12YXIgVnQ9S3QmJkt0LmxldmVsPT09VCsxP0t0Om51bGwsZmU9ZnVuY3Rpb24oKXtBdC5jb250ZXh0LmRyYXdJbWFnZShWdC50ZXh0dXJlLmNhbnZhcyxWdC54LDAsVnQud2lkdGgsVnQuaGVpZ2h0LEF0LnVzZWRXaWR0aCwwLFcsRyl9O2lmKEF0LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxBdC5jb250ZXh0LmNsZWFyUmVjdChBdC51c2VkV2lkdGgsMCxXLGx0KSxNdChWdCkpZmUoKTtlbHNlIGlmKE10KEt0KSlpZihqdCl7Zm9yKHZhciBnZT1LdC5sZXZlbDtnZT5UO2dlLS0pVnQ9RC5nZXRFbGVtZW50KHksZyx4LGdlLHV4LmRvd25zY2FsZSk7ZmUoKX1lbHNlIHJldHVybiBELnF1ZXVlRWxlbWVudCh5LEt0LmxldmVsLTEpLEt0O2Vsc2V7dmFyIG5lO2lmKCFEdCYmIWp0JiYhWnQpZm9yKHZhciBQZT1ULTE7UGU+PWN4O1BlLS0pe3ZhciBwZT1xLmdldCh5LFBlKTtpZihwZSl7bmU9cGU7YnJlYWt9fWlmKE10KG5lKSlyZXR1cm4gRC5xdWV1ZUVsZW1lbnQoeSxUKSxuZTtBdC5jb250ZXh0LnRyYW5zbGF0ZShBdC51c2VkV2lkdGgsMCksQXQuY29udGV4dC5zY2FsZShTLFMpLHRoaXMuZHJhd0VsZW1lbnQoQXQuY29udGV4dCx5LGcsZXQsITEpLEF0LmNvbnRleHQuc2NhbGUoMS9TLDEvUyksQXQuY29udGV4dC50cmFuc2xhdGUoLUF0LnVzZWRXaWR0aCwwKX1yZXR1cm4gYXQ9e3g6QXQudXNlZFdpZHRoLHRleHR1cmU6QXQsbGV2ZWw6VCxzY2FsZTpTLHdpZHRoOlcsaGVpZ2h0Okcsc2NhbGVkTGFiZWxTaG93bjpldH0sQXQudXNlZFdpZHRoKz1NYXRoLmNlaWwoVytydHQpLEF0LmVsZUNhY2hlcy5wdXNoKGF0KSxxLnNldCh5LFQsYXQpLEQuY2hlY2tUZXh0dXJlRnVsbG5lc3MoQXQpLGF0fSxraC5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh5W2ddKX0sa2guaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubG9va3VwLFQ9W10sQT14LmlzSW52YWxpZCh5KTtpZihBKXtmb3IodmFyIEQ9Y3g7RDw9Skw7RCsrKXt2YXIgTz14LmdldEZvckNhY2hlZEtleSh5LEQpO08mJlQucHVzaChPKX12YXIgJD14LmludmFsaWRhdGUoeSk7aWYoJClmb3IodmFyIHE9MDtxPFQubGVuZ3RoO3ErKyl7dmFyIFM9VFtxXSxHPVMudGV4dHVyZTtHLmludmFsaWRhdGVkV2lkdGgrPVMud2lkdGgsUy5pbnZhbGlkYXRlZD0hMCxnLmNoZWNrVGV4dHVyZVV0aWxpdHkoRyl9Zy5yZW1vdmVGcm9tUXVldWUoeSl9fSxraC5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHkpe3kuaW52YWxpZGF0ZWRXaWR0aD49YXR0Knkud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh5KX0sa2guY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZ2V0VGV4dHVyZVF1ZXVlKHkuaGVpZ2h0KTt5LnVzZWRXaWR0aC95LndpZHRoPm90dCYmeS5mdWxsbmVzc0NoZWNrcz49Y3R0P3BtKHgseSk6eS5mdWxsbmVzc0NoZWNrcysrfSxraC5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD15LmhlaWdodCxUPWcuZ2V0VGV4dHVyZVF1ZXVlKHgpLEE9dGhpcy5sb29rdXA7cG0oVCx5KSx5LnJldGlyZWQ9ITA7Zm9yKHZhciBEPXkuZWxlQ2FjaGVzLE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXTtBLmRlbGV0ZUNhY2hlKCQua2V5LCQubGV2ZWwpfW1MKEQpO3ZhciBxPWcuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh4KTtxLnB1c2goeSl9LGtoLmFkZFRleHR1cmU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5nZXRUZXh0dXJlUXVldWUoeSksQT17fTtyZXR1cm4gVC5wdXNoKEEpLEEuZWxlQ2FjaGVzPVtdLEEuaGVpZ2h0PXksQS53aWR0aD1NYXRoLm1heChpdHQsZyksQS51c2VkV2lkdGg9MCxBLmludmFsaWRhdGVkV2lkdGg9MCxBLmZ1bGxuZXNzQ2hlY2tzPTAsQS5jYW52YXM9eC5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKEEud2lkdGgsQS5oZWlnaHQpLEEuY29udGV4dD1BLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLEF9LGtoLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXRoaXMsVD14LmdldFRleHR1cmVRdWV1ZSh5KSxBPXguZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh5KSxEPTA7RDxBLmxlbmd0aDtEKyspe3ZhciBPPUFbRF07aWYoTy53aWR0aD49ZylyZXR1cm4gTy5yZXRpcmVkPSExLE8udXNlZFdpZHRoPTAsTy5pbnZhbGlkYXRlZFdpZHRoPTAsTy5mdWxsbmVzc0NoZWNrcz0wLG1MKE8uZWxlQ2FjaGVzKSxPLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxPLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxPLndpZHRoLE8uaGVpZ2h0KSxwbShBLE8pLFQucHVzaChPKSxPfX0sa2gucXVldWVFbGVtZW50PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXguZ2V0RWxlbWVudFF1ZXVlKCksQT14LmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksRD10aGlzLmdldEtleSh5KSxPPUFbRF07aWYoTylPLmxldmVsPU1hdGgubWF4KE8ubGV2ZWwsZyksTy5lbGVzLm1lcmdlKHkpLE8ucmVxcysrLFQudXBkYXRlSXRlbShPKTtlbHNle3ZhciAkPXtlbGVzOnkuc3Bhd24oKS5tZXJnZSh5KSxsZXZlbDpnLHJlcXM6MSxrZXk6RH07VC5wdXNoKCQpLEFbRF09JH19LGtoLmRlcXVldWU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLmdldEVsZW1lbnRRdWV1ZSgpLFQ9Zy5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLEE9W10sRD1nLmxvb2t1cCxPPTA7TzxndHQmJnguc2l6ZSgpPjA7TysrKXt2YXIgJD14LnBvcCgpLHE9JC5rZXksUz0kLmVsZXNbMF0sRz1ELmhhc0NhY2hlKFMsJC5sZXZlbCk7aWYoVFtxXT1udWxsLEcpY29udGludWU7QS5wdXNoKCQpO3ZhciBXPWcuZ2V0Qm91bmRpbmdCb3goUyk7Zy5nZXRFbGVtZW50KFMsVyx5LCQubGV2ZWwsdXguZGVxdWV1ZSl9cmV0dXJuIEF9LGtoLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5nZXRFbGVtZW50UXVldWUoKSxUPWcuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxBPXRoaXMuZ2V0S2V5KHkpLEQ9VFtBXTtEIT1udWxsJiYoRC5lbGVzLmxlbmd0aD09PTE/KEQucmVxcz0kNSx4LnVwZGF0ZUl0ZW0oRCkseC5wb3AoKSxUW0FdPW51bGwpOkQuZWxlcy51bm1lcmdlKHkpKX0sa2gub25EZXF1ZXVlPWZ1bmN0aW9uKHkpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHkpfSxraC5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHkpe3BtKHRoaXMub25EZXF1ZXVlcyx5KX0sa2guc2V0dXBEZXF1ZXVlaW5nPXY5LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOmR0dCxkZXFDb3N0OnV0dCxkZXFBdmdDb3N0Omx0dCxkZXFOb0RyYXdDb3N0Omh0dCxkZXFGYXN0Q29zdDpmdHQsZGVxOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZy5kZXF1ZXVlKHgsVCl9LG9uRGVxZDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5vbkRlcXVldWVzLmxlbmd0aDtUKyspe3ZhciBBPWcub25EZXF1ZXVlc1tUXTtBKHgpfX0sc2hvdWxkUmVkcmF3OmZ1bmN0aW9uKGcseCxULEEpe2Zvcih2YXIgRD0wO0Q8eC5sZW5ndGg7RCsrKWZvcih2YXIgTz14W0RdLmVsZXMsJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLmJvdW5kaW5nQm94KCk7aWYoRUwocSxBKSlyZXR1cm4hMH1yZXR1cm4hMX0scHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9fSk7dmFyIGJ0dD0xLGx4PS00LHFrPTIseTk9My45OSxIaz01MCxiZz01MCx2dHQ9LjE1LGVwdD0uMSxucHQ9LjkscnB0PS45LGlwdD0xLGVNPTI1MCxzcHQ9NGUzKjRlMyxhcHQ9ITAsd3R0PWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LnJlbmRlcmVyPWcsQT1ULmN5O3gubGF5ZXJzQnlMZXZlbD17fSx4LmZpcnN0R2V0PSEwLHgubGFzdEludmFsaWRhdGlvblRpbWU9ZGcoKS0yKmVNLHguc2tpcHBpbmc9ITEseC5lbGVUeHJEZXFzPUEuY29sbGVjdGlvbigpLHguc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1XYyhmdW5jdGlvbigpe3gucmVmaW5lRWxlbWVudFRleHR1cmVzKHguZWxlVHhyRGVxcykseC5lbGVUeHJEZXFzLnVubWVyZ2UoeC5lbGVUeHJEZXFzKX0sYmcpLFQuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE8sJCl7JC14Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1lTT94LnNraXBwaW5nPSEwOnguc2tpcHBpbmc9ITF9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgRD1mdW5jdGlvbigkLHEpe3JldHVybiBxLnJlcXMtJC5yZXFzfTt4LmxheWVyc1F1ZXVlPW5ldyB2ayhEKSx4LnNldHVwRGVxdWV1ZWluZygpfSxwMT13dHQucHJvdG90eXBlLG10dD0wLG9wdD1NYXRoLnBvdygyLDUzKS0xO3AxLm1ha2VMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PU1hdGgucG93KDIsZyksVD1NYXRoLmNlaWwoeS53KngpLEE9TWF0aC5jZWlsKHkuaCp4KSxEPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhULEEpLE89e2lkOm10dD0rK210dCVvcHQsYmI6eSxsZXZlbDpnLHdpZHRoOlQsaGVpZ2h0OkEsY2FudmFzOkQsY29udGV4dDpELmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU8uY29udGV4dCxxPS1PLmJiLngxLFM9LU8uYmIueTE7cmV0dXJuICQuc2NhbGUoeCx4KSwkLnRyYW5zbGF0ZShxLFMpLE99LHAxLmdldExheWVycz1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcyxBPVQucmVuZGVyZXIsRD1BLmN5LE89RC56b29tKCksJD1ULmZpcnN0R2V0O2lmKFQuZmlyc3RHZXQ9ITEseD09bnVsbCl7aWYoeD1NYXRoLmNlaWwoeEwoTypnKSkseDxseCl4PWx4O2Vsc2UgaWYoTz49eTl8fHg+cWspcmV0dXJuIG51bGx9VC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyh4LHkpO3ZhciBxPVQubGF5ZXJzQnlMZXZlbCxTPU1hdGgucG93KDIseCksRz1xW3hdPXFbeF18fFtdLFcsZXQ9VC5sZXZlbElzQ29tcGxldGUoeCx5KSxhdCxsdD1mdW5jdGlvbigpe3ZhciBmZT1mdW5jdGlvbihibil7aWYoVC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhibix5KSxULmxldmVsSXNDb21wbGV0ZShibix5KSlyZXR1cm4gYXQ9cVtibl0sITB9LGdlPWZ1bmN0aW9uKGJuKXtpZighYXQpZm9yKHZhciB6ZT14K2JuO2x4PD16ZSYmemU8PXFrJiYhZmUoemUpO3plKz1ibik7fTtnZSgxKSxnZSgtMSk7Zm9yKHZhciBuZT1HLmxlbmd0aC0xO25lPj0wO25lLS0pe3ZhciBQZT1HW25lXTtQZS5pbnZhbGlkJiZwbShHLFBlKX19O2lmKCFldClsdCgpO2Vsc2UgcmV0dXJuIEc7dmFyIGZ0PWZ1bmN0aW9uKCl7aWYoIVcpe1c9UmQoKTtmb3IodmFyIGZlPTA7ZmU8eS5sZW5ndGg7ZmUrKylfWShXLHlbZmVdLmJvdW5kaW5nQm94KCkpfXJldHVybiBXfSxBdD1mdW5jdGlvbihmZSl7ZmU9ZmV8fHt9O3ZhciBnZT1mZS5hZnRlcjtmdCgpO3ZhciBuZT1XLncqUyooVy5oKlMpO2lmKG5lPnNwdClyZXR1cm4gbnVsbDt2YXIgUGU9VC5tYWtlTGF5ZXIoVyx4KTtpZihnZSE9bnVsbCl7dmFyIHBlPUcuaW5kZXhPZihnZSkrMTtHLnNwbGljZShwZSwwLFBlKX1lbHNlKGZlLmluc2VydD09PXZvaWQgMHx8ZmUuaW5zZXJ0KSYmRy51bnNoaWZ0KFBlKTtyZXR1cm4gUGV9O2lmKFQuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIga3Q9bnVsbCxNdD15Lmxlbmd0aC9idHQsRHQ9ISQsanQ9MDtqdDx5Lmxlbmd0aDtqdCsrKXt2YXIgWnQ9eVtqdF0sS3Q9WnQuX3ByaXZhdGUucnNjcmF0Y2gsenQ9S3QuaW1nTGF5ZXJDYWNoZXM9S3QuaW1nTGF5ZXJDYWNoZXN8fHt9LGVlPXp0W3hdO2lmKGVlKXtrdD1lZTtjb250aW51ZX1pZigoIWt0fHxrdC5lbGVzLmxlbmd0aD49TXR8fCF0RihrdC5iYixadC5ib3VuZGluZ0JveCgpKSkmJihrdD1BdCh7aW5zZXJ0OiEwLGFmdGVyOmt0fSksIWt0KSlyZXR1cm4gbnVsbDthdHx8RHQ/VC5xdWV1ZUxheWVyKGt0LFp0KTpULmRyYXdFbGVJbkxheWVyKGt0LFp0LHgsZyksa3QuZWxlcy5wdXNoKFp0KSx6dFt4XT1rdH1yZXR1cm4gYXR8fChEdD9udWxsOkcpfSxwMS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeSxnKXtyZXR1cm4geX0scDEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9dGhpcyxEPXRoaXMucmVuZGVyZXIsTz15LmNvbnRleHQsJD1nLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IWcudmlzaWJsZSgpfHwoeD1BLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCh4LFQpLEQuc2V0SW1nU21vb3RoaW5nKE8sITEpLEQuZHJhd0NhY2hlZEVsZW1lbnQoTyxnLG51bGwsbnVsbCx4LGFwdCksRC5zZXRJbWdTbW9vdGhpbmcoTywhMCkpfSxwMS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5sYXllcnNCeUxldmVsW3ldO2lmKCFUfHxULmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBBPTAsRD0wO0Q8VC5sZW5ndGg7RCsrKXt2YXIgTz1UW0RdO2lmKE8ucmVxcz4wfHxPLmludmFsaWQpcmV0dXJuITE7QSs9Ty5lbGVzLmxlbmd0aH1yZXR1cm4gQT09PWcubGVuZ3RofSxwMS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGF5ZXJzQnlMZXZlbFt5XTtpZih4KWZvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXtmb3IodmFyIEE9eFtUXSxEPS0xLE89MDtPPGcubGVuZ3RoO08rKylpZihBLmVsZXNbMF09PT1nW09dKXtEPU87YnJlYWt9aWYoRDwwKXt0aGlzLmludmFsaWRhdGVMYXllcihBKTtjb250aW51ZX1mb3IodmFyICQ9RCxPPTA7TzxBLmVsZXMubGVuZ3RoO08rKylpZihBLmVsZXNbT10hPT1nWyQrT10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKEEpO2JyZWFrfX19LHAxLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9dGhpcyxUPW50KHlbMF0pLEE9MDtBPHkubGVuZ3RoO0ErKylmb3IodmFyIEQ9VD9udWxsOnlbQV0sTz1UP3lbQV06eVtBXS5lbGUsJD1PLl9wcml2YXRlLnJzY3JhdGNoLHE9JC5pbWdMYXllckNhY2hlcz0kLmltZ0xheWVyQ2FjaGVzfHx7fSxTPWx4O1M8PXFrO1MrKyl7dmFyIEc9cVtTXTtHJiYoRCYmeC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoRy5sZXZlbCkhPT1ELmxldmVsfHxnKEcsTyxEKSl9fSxwMS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMsZz0hMSx4PWx4O3g8PXFrO3grKyl7dmFyIFQ9eS5sYXllcnNCeUxldmVsW3hdO2lmKFQmJlQubGVuZ3RoPjApe2c9ITA7YnJlYWt9fXJldHVybiBnfSxwMS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpczt5Lmxlbmd0aCE9PTAmJihnLmxhc3RJbnZhbGlkYXRpb25UaW1lPWRnKCksISh5Lmxlbmd0aD09PTB8fCFnLmhhdmVMYXllcnMoKSkmJmcudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsQSxEKXtnLmludmFsaWRhdGVMYXllcihUKX0pKX0scDEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9ZGcoKSwheS5pbnZhbGlkKXt2YXIgZz15LmxldmVsLHg9eS5lbGVzLFQ9dGhpcy5sYXllcnNCeUxldmVsW2ddO3BtKFQseSkseS5lbGVzUXVldWU9W10seS5pbnZhbGlkPSEwLHkucmVwbGFjZW1lbnQmJih5LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgQT0wO0E8eC5sZW5ndGg7QSsrKXt2YXIgRD14W0FdLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO0QmJihEW2ddPW51bGwpfX19LHAxLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsQSxEKXt2YXIgTz1ULnJlcGxhY2VtZW50O2lmKE98fChPPVQucmVwbGFjZW1lbnQ9Zy5tYWtlTGF5ZXIoVC5iYixULmxldmVsKSxPLnJlcGxhY2VzPVQsTy5lbGVzPVQuZWxlcyksIU8ucmVxcylmb3IodmFyICQ9MDskPE8uZWxlcy5sZW5ndGg7JCsrKWcucXVldWVMYXllcihPLE8uZWxlc1skXSl9KX0scDEuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50PWZ1bmN0aW9uKHkpe3RoaXMuZWxlVHhyRGVxcy5tZXJnZSh5KSx0aGlzLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQoKX0scDEucXVldWVMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14LmxheWVyc1F1ZXVlLEE9eS5lbGVzUXVldWUsRD1BLmhhc0lkPUEuaGFzSWR8fHt9O2lmKCF5LnJlcGxhY2VtZW50KXtpZihnKXtpZihEW2cuaWQoKV0pcmV0dXJuO0EucHVzaChnKSxEW2cuaWQoKV09ITB9eS5yZXFzPyh5LnJlcXMrKyxULnVwZGF0ZUl0ZW0oeSkpOih5LnJlcXM9MSxULnB1c2goeSkpfX0scDEuZGVxdWV1ZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PWcubGF5ZXJzUXVldWUsVD1bXSxBPTA7QTxpcHQmJnguc2l6ZSgpIT09MDspe3ZhciBEPXgucGVlaygpO2lmKEQucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoRC5yZXBsYWNlcyYmRCE9PUQucmVwbGFjZXMucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoRC5pbnZhbGlkKXt4LnBvcCgpO2NvbnRpbnVlfXZhciBPPUQuZWxlc1F1ZXVlLnNoaWZ0KCk7TyYmKGcuZHJhd0VsZUluTGF5ZXIoRCxPLEQubGV2ZWwseSksQSsrKSxULmxlbmd0aD09PTAmJlQucHVzaCghMCksRC5lbGVzUXVldWUubGVuZ3RoPT09MCYmKHgucG9wKCksRC5yZXFzPTAsRC5yZXBsYWNlcyYmZy5hcHBseUxheWVyUmVwbGFjZW1lbnQoRCksZy5yZXF1ZXN0UmVkcmF3KCkpfXJldHVybiBUfSxwMS5hcHBseUxheWVyUmVwbGFjZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubGF5ZXJzQnlMZXZlbFt5LmxldmVsXSxUPXkucmVwbGFjZXMsQT14LmluZGV4T2YoVCk7aWYoIShBPDB8fFQuaW52YWxpZCkpe3hbQV09eTtmb3IodmFyIEQ9MDtEPHkuZWxlcy5sZW5ndGg7RCsrKXt2YXIgTz15LmVsZXNbRF0uX3ByaXZhdGUsJD1PLmltZ0xheWVyQ2FjaGVzPU8uaW1nTGF5ZXJDYWNoZXN8fHt9OyQmJigkW3kubGV2ZWxdPXkpfWcucmVxdWVzdFJlZHJhdygpfX0scDEucmVxdWVzdFJlZHJhdz1XYyhmdW5jdGlvbigpe3ZhciB5PXRoaXMucmVuZGVyZXI7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXcoKX0sMTAwKSxwMS5zZXR1cERlcXVldWVpbmc9djkuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6SGssZGVxQ29zdDp2dHQsZGVxQXZnQ29zdDplcHQsZGVxTm9EcmF3Q29zdDpucHQsZGVxRmFzdENvc3Q6cnB0LGRlcTpmdW5jdGlvbihnLHgpe3JldHVybiBnLmRlcXVldWUoeCl9LG9uRGVxZDp3TCxzaG91bGRSZWRyYXc6azMscHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIF8wPXt9LHl0dDtmdW5jdGlvbiBXQih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO3kubGluZVRvKFQueCxULnkpfX1mdW5jdGlvbiBLQih5LGcseCl7Zm9yKHZhciBULEE9MDtBPGcubGVuZ3RoO0ErKyl7dmFyIEQ9Z1tBXTtBPT09MCYmKFQ9RCkseS5saW5lVG8oRC54LEQueSl9eS5xdWFkcmF0aWNDdXJ2ZVRvKHgueCx4LnksVC54LFQueSl9ZnVuY3Rpb24geHR0KHksZyx4KXt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKTtmb3IodmFyIFQ9ZyxBPTA7QTxULmxlbmd0aDtBKyspe3ZhciBEPVRbQV07eS5saW5lVG8oRC54LEQueSl9dmFyIE89eCwkPXhbMF07eS5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBBPTE7QTxPLmxlbmd0aDtBKyspe3ZhciBEPU9bQV07eS5saW5lVG8oRC54LEQueSl9eS5jbG9zZVBhdGgmJnkuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gY3B0KHksZyx4LFQsQSl7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5hcmMoeCxULEEsMCxNYXRoLlBJKjIsITEpO3ZhciBEPWcsTz1EWzBdO3kubW92ZVRvKE8ueCxPLnkpO2Zvcih2YXIgJD0wOyQ8RC5sZW5ndGg7JCsrKXt2YXIgcT1EWyRdO3kubGluZVRvKHEueCxxLnkpfXkuY2xvc2VQYXRoJiZ5LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHVwdCh5LGcseCxUKXt5LmFyYyhnLHgsVCwwLE1hdGguUEkqMiwhMSl9XzAuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24oeSl7cmV0dXJuKHl0dHx8KHl0dD17cG9seWdvbjpXQiwidHJpYW5nbGUtYmFja2N1cnZlIjpLQiwidHJpYW5nbGUtdGVlIjp4dHQsImNpcmNsZS10cmlhbmdsZSI6Y3B0LCJ0cmlhbmdsZS1jcm9zcyI6eHR0LGNpcmNsZTp1cHR9KSlbeV19O3ZhciBndj17fTtndi5kcmF3RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcztnLmlzTm9kZSgpP08uZHJhd05vZGUoeSxnLHgsVCxBLEQpOk8uZHJhd0VkZ2UoeSxnLHgsVCxBLEQpfSxndi5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzO2cuaXNOb2RlKCk/eC5kcmF3Tm9kZU92ZXJsYXkoeSxnKTp4LmRyYXdFZGdlT3ZlcmxheSh5LGcpfSxndi5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztnLmlzTm9kZSgpP3guZHJhd05vZGVVbmRlcmxheSh5LGcpOnguZHJhd0VkZ2VVbmRlcmxheSh5LGcpfSxndi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24oeSxnLHgsVCxBLEQsTywkKXt2YXIgcT10aGlzLFM9eC5nZXRCb3VuZGluZ0JveChnKTtpZighKFMudz09PTB8fFMuaD09PTApKXt2YXIgRz14LmdldEVsZW1lbnQoZyxTLFQsQSxEKTtpZihHIT1udWxsKXt2YXIgVz0kKHEsZyk7aWYoVz09PTApcmV0dXJuO3ZhciBldD1PKHEsZyksYXQ9Uy54MSxsdD1TLnkxLGZ0PVMudyxBdD1TLmgsa3QsTXQsRHQsanQsWnQ7aWYoZXQhPT0wKXt2YXIgS3Q9eC5nZXRSb3RhdGlvblBvaW50KGcpO0R0PUt0LngsanQ9S3QueSx5LnRyYW5zbGF0ZShEdCxqdCkseS5yb3RhdGUoZXQpLFp0PXEuZ2V0SW1nU21vb3RoaW5nKHkpLFp0fHxxLnNldEltZ1Ntb290aGluZyh5LCEwKTt2YXIgenQ9eC5nZXRSb3RhdGlvbk9mZnNldChnKTtrdD16dC54LE10PXp0Lnl9ZWxzZSBrdD1hdCxNdD1sdDt2YXIgZWU7VyE9PTEmJihlZT15Lmdsb2JhbEFscGhhLHkuZ2xvYmFsQWxwaGE9ZWUqVykseS5kcmF3SW1hZ2UoRy50ZXh0dXJlLmNhbnZhcyxHLngsMCxHLndpZHRoLEcuaGVpZ2h0LGt0LE10LGZ0LEF0KSxXIT09MSYmKHkuZ2xvYmFsQWxwaGE9ZWUpLGV0IT09MCYmKHkucm90YXRlKC1ldCkseS50cmFuc2xhdGUoLUR0LC1qdCksWnR8fHEuc2V0SW1nU21vb3RoaW5nKHksITEpKX1lbHNlIHguZHJhd0VsZW1lbnQoeSxnKX19O3ZhciBuTT1mdW5jdGlvbigpe3JldHVybiAwfSx4OT1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LG51bGwpfSxZQj1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LCJzb3VyY2UiKX0sbHB0PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuZ2V0VGV4dEFuZ2xlKHgsInRhcmdldCIpfSxocHQ9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geC5lZmZlY3RpdmVPcGFjaXR5KCl9LFhCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIHgucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS5wZlZhbHVlKnguZWZmZWN0aXZlT3BhY2l0eSgpfTtndi5kcmF3Q2FjaGVkRWxlbWVudD1mdW5jdGlvbih5LGcseCxULEEsRCl7dmFyIE89dGhpcywkPU8uZGF0YSxxPSQuZWxlVHhyQ2FjaGUsUz0kLmxibFR4ckNhY2hlLEc9JC5zbGJUeHJDYWNoZSxXPSQudGxiVHhyQ2FjaGUsZXQ9Zy5ib3VuZGluZ0JveCgpLGF0PUQ9PT0hMD9xLnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKGV0Lnc9PT0wfHxldC5oPT09MHx8IWcudmlzaWJsZSgpKSYmKCFUfHxFTChldCxUKSkpe3ZhciBsdD1nLmlzRWRnZSgpLGZ0PWcuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7Ty5kcmF3RWxlbWVudFVuZGVybGF5KHksZyksTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLHEseCxBLGF0LG5NLGhwdCksKCFsdHx8IWZ0KSYmTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFMseCxBLGF0LHg5LFhCKSxsdCYmIWZ0JiYoTy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLEcseCxBLGF0LFlCLFhCKSxPLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih5LGcsVyx4LEEsYXQsbHB0LFhCKSksTy5kcmF3RWxlbWVudE92ZXJsYXkoeSxnKX19LGd2LmRyYXdFbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEE9Z1tUXTt4LmRyYXdFbGVtZW50KHksQSl9fSxndi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBBPXRoaXMsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdO0EuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBBPXRoaXMsRD0wO0Q8Zy5sZW5ndGg7RCsrKXt2YXIgTz1nW0RdO08uaXNOb2RlKCkmJkEuZHJhd0NhY2hlZEVsZW1lbnQoeSxPLHgsVCl9fSxndi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMsRD1BLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKGcseCk7aWYoRClmb3IodmFyIE89MDtPPEQubGVuZ3RoO08rKyl7dmFyICQ9RFtPXSxxPSQuYmI7cS53PT09MHx8cS5oPT09MHx8eS5kcmF3SW1hZ2UoJC5jYW52YXMscS54MSxxLnkxLHEudyxxLmgpfWVsc2UgQS5kcmF3Q2FjaGVkRWxlbWVudHMoeSxnLHgsVCl9O3ZhciBwdj17fTtwdi5kcmF3RWRnZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLEE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLEQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE89dGhpcywkPWcuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShEJiYhZy52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBxO3gmJihxPXgseS50cmFuc2xhdGUoLXEueDEsLXEueTEpKTt2YXIgUz1EP2cucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxHPUQ/Zy5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsVz1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxldD1nLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLGF0PWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbHQ9Zy5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsZnQ9UypHLEF0PVMqRyxrdD1mdW5jdGlvbigpe3ZhciBuZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZnQ7Vz09PSJzdHJhaWdodC10cmlhbmdsZSI/KE8uZWxlU3Ryb2tlU3R5bGUoeSxnLG5lKSxPLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGcseSwkLmFsbHB0cykpOih5LmxpbmVXaWR0aD1hdCx5LmxpbmVDYXA9bHQsTy5lbGVTdHJva2VTdHlsZSh5LGcsbmUpLE8uZHJhd0VkZ2VQYXRoKGcseSwkLmFsbHB0cyxldCkseS5saW5lQ2FwPSJidXR0Iil9LE10PWZ1bmN0aW9uKCl7QSYmTy5kcmF3RWRnZU92ZXJsYXkoeSxnKX0sRHQ9ZnVuY3Rpb24oKXtBJiZPLmRyYXdFZGdlVW5kZXJsYXkoeSxnKX0sanQ9ZnVuY3Rpb24oKXt2YXIgbmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkF0O08uZHJhd0Fycm93aGVhZHMoeSxnLG5lKX0sWnQ9ZnVuY3Rpb24oKXtPLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX07eS5saW5lSm9pbj0icm91bmQiO3ZhciBLdD1nLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKEt0KXt2YXIgenQ9Zy5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxlZT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLFZ0PWcucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZmU9ZnQqVnQ7eS50cmFuc2xhdGUoenQsZWUpLGt0KGZlKSxqdChmZSkseS50cmFuc2xhdGUoLXp0LC1lZSl9RHQoKSxrdCgpLGp0KCksTXQoKSxadCgpLHgmJnkudHJhbnNsYXRlKHEueDEscS55MSl9fTt2YXIga3R0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQpe2lmKFQudmlzaWJsZSgpKXt2YXIgQT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLW9wYWNpdHkiKSkudmFsdWU7aWYoQSE9PTApe3ZhciBEPXRoaXMsTz1ELnVzZVBhdGhzKCksJD1ULl9wcml2YXRlLnJzY3JhdGNoLHE9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1wYWRkaW5nIikpLnBmVmFsdWUsUz0yKnEsRz1ULnBzdHlsZSgiIi5jb25jYXQoZywiLWNvbG9yIikpLnZhbHVlO3gubGluZVdpZHRoPVMsJC5lZGdlVHlwZT09PSJzZWxmIiYmIU8/eC5saW5lQ2FwPSJidXR0Ijp4LmxpbmVDYXA9InJvdW5kIixELmNvbG9yU3Ryb2tlU3R5bGUoeCxHWzBdLEdbMV0sR1syXSxBKSxELmRyYXdFZGdlUGF0aChULHgsJC5hbGxwdHMsInNvbGlkIil9fX19O3B2LmRyYXdFZGdlT3ZlcmxheT1rdHQoIm92ZXJsYXkiKSxwdi5kcmF3RWRnZVVuZGVybGF5PWt0dCgidW5kZXJsYXkiKSxwdi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEE9eS5fcHJpdmF0ZS5yc2NyYXRjaCxEPWcsTywkPSExLHE9dGhpcy51c2VQYXRocygpLFM9eS5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxHPXkucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihxKXt2YXIgVz14LmpvaW4oIiQiKSxldD1BLnBhdGhDYWNoZUtleSYmQS5wYXRoQ2FjaGVLZXk9PT1XO2V0PyhPPWc9QS5wYXRoQ2FjaGUsJD0hMCk6KE89Zz1uZXcgUGF0aDJELEEucGF0aENhY2hlS2V5PVcsQS5wYXRoQ2FjaGU9Tyl9aWYoRC5zZXRMaW5lRGFzaClzd2l0Y2goVCl7Y2FzZSJkb3R0ZWQiOkQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpELnNldExpbmVEYXNoKFMpLEQubGluZURhc2hPZmZzZXQ9RzticmVhaztjYXNlInNvbGlkIjpELnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIUEuYmFkTGluZSlzd2l0Y2goZy5iZWdpblBhdGgmJmcuYmVnaW5QYXRoKCksZy5tb3ZlVG8oeFswXSx4WzFdKSxBLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIGF0PTI7YXQrMzx4Lmxlbmd0aDthdCs9NClnLnF1YWRyYXRpY0N1cnZlVG8oeFthdF0seFthdCsxXSx4W2F0KzJdLHhbYXQrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbHQ9MjtsdCsxPHgubGVuZ3RoO2x0Kz0yKWcubGluZVRvKHhbbHRdLHhbbHQrMV0pO2JyZWFrfWc9RCxxP2cuc3Ryb2tlKE8pOmcuc3Ryb2tlKCksZy5zZXRMaW5lRGFzaCYmZy5zZXRMaW5lRGFzaChbXSl9LHB2LmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4KXtnLmZpbGxTdHlsZT1nLnN0cm9rZVN0eWxlO2Zvcih2YXIgVD15LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEE9MDtBKzE8eC5sZW5ndGg7QSs9Mil7dmFyIEQ9W3hbQSsyXS14W0FdLHhbQSszXS14W0ErMV1dLE89TWF0aC5zcXJ0KERbMF0qRFswXStEWzFdKkRbMV0pLCQ9W0RbMV0vTywtRFswXS9PXSxxPVskWzBdKlQvMiwkWzFdKlQvMl07Zy5iZWdpblBhdGgoKSxnLm1vdmVUbyh4W0FdLXFbMF0seFtBKzFdLXFbMV0pLGcubGluZVRvKHhbQV0rcVswXSx4W0ErMV0rcVsxXSksZy5saW5lVG8oeFtBKzJdLHhbQSszXSksZy5jbG9zZVBhdGgoKSxnLmZpbGwoKX19LHB2LmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLl9wcml2YXRlLnJzY3JhdGNoLEE9VC5lZGdlVHlwZT09PSJoYXlzdGFjayI7QXx8dGhpcy5kcmF3QXJyb3doZWFkKHksZywic291cmNlIixULmFycm93U3RhcnRYLFQuYXJyb3dTdGFydFksVC5zcmNBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC10YXJnZXQiLFQubWlkWCxULm1pZFksVC5taWR0Z3RBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC1zb3VyY2UiLFQubWlkWCxULm1pZFksVC5taWRzcmNBcnJvd0FuZ2xlLHgpLEF8fHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsInRhcmdldCIsVC5hcnJvd0VuZFgsVC5hcnJvd0VuZFksVC50Z3RBcnJvd0FuZ2xlLHgpfSxwdi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHksZyx4LFQsQSxELE8pe2lmKCEoaXNOYU4oVCl8fFQ9PW51bGx8fGlzTmFOKEEpfHxBPT1udWxsfHxpc05hTihEKXx8RD09bnVsbCkpe3ZhciAkPXRoaXMscT1nLnBzdHlsZSh4KyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihxIT09Im5vbmUiKXt2YXIgUz1nLnBzdHlsZSh4KyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLEc9Zy5wc3R5bGUoeCsiLWFycm93LWZpbGwiKS52YWx1ZSxXPWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsZXQ9Zy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtPPT09dm9pZCAwJiYoTz1ldCk7dmFyIGF0PXkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhPIT09MXx8Rz09PSJob2xsb3ciKSYmKHkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLCQuY29sb3JGaWxsU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmRyYXdBcnJvd1NoYXBlKGcseSxTLFcscSxULEEsRCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YXQpO3ZhciBsdD1nLnBzdHlsZSh4KyItYXJyb3ctY29sb3IiKS52YWx1ZTskLmNvbG9yRmlsbFN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5jb2xvclN0cm9rZVN0eWxlKHksbHRbMF0sbHRbMV0sbHRbMl0sTyksJC5kcmF3QXJyb3dTaGFwZShnLHksRyxXLHEsVCxBLEQpfX19LHB2LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHksZyx4LFQsQSxELE8sJCl7dmFyIHE9dGhpcyxTPXRoaXMudXNlUGF0aHMoKSYmQSE9PSJ0cmlhbmdsZS1jcm9zcyIsRz0hMSxXLGV0PWcsYXQ9e3g6RCx5Ok99LGx0PXkucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGZ0PXRoaXMuZ2V0QXJyb3dXaWR0aChULGx0KSxBdD1xLmFycm93U2hhcGVzW0FdO2lmKFMpe3ZhciBrdD1xLmFycm93UGF0aENhY2hlPXEuYXJyb3dQYXRoQ2FjaGV8fFtdLE10PXRkKEEpLER0PWt0W010XTtEdCE9bnVsbD8oVz1nPUR0LEc9ITApOihXPWc9bmV3IFBhdGgyRCxrdFtNdF09Vyl9R3x8KGcuYmVnaW5QYXRoJiZnLmJlZ2luUGF0aCgpLFM/QXQuZHJhdyhnLDEsMCx7eDowLHk6MH0sMSk6QXQuZHJhdyhnLGZ0LCQsYXQsVCksZy5jbG9zZVBhdGgmJmcuY2xvc2VQYXRoKCkpLGc9ZXQsUyYmKGcudHJhbnNsYXRlKEQsTyksZy5yb3RhdGUoJCksZy5zY2FsZShmdCxmdCkpLCh4PT09ImZpbGxlZCJ8fHg9PT0iYm90aCIpJiYoUz9nLmZpbGwoVyk6Zy5maWxsKCkpLCh4PT09ImhvbGxvdyJ8fHg9PT0iYm90aCIpJiYoZy5saW5lV2lkdGg9KEF0Lm1hdGNoRWRnZVdpZHRoP1Q6MSkvKFM/ZnQ6MSksZy5saW5lSm9pbj0ibWl0ZXIiLFM/Zy5zdHJva2UoVyk6Zy5zdHJva2UoKSksUyYmKGcuc2NhbGUoMS9mdCwxL2Z0KSxnLnJvdGF0ZSgtJCksZy50cmFuc2xhdGUoLUQsLU8pKX07dmFyIGs5PXt9O2s5LnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeSxnLHgsVCxBLEQsTywkLHEsUyl7aWYoIShBPD0wfHxEPD0wfHxxPD0wfHxTPD0wKSl0cnl7eS5kcmF3SW1hZ2UoZyx4LFQsQSxELE8sJCxxLFMpfWNhdGNoKEcpe1NjKEcpfX0sazkuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9dGhpcyxPPXgucG9zaXRpb24oKSwkPU8ueCxxPU8ueSxTPXguY3koKS5zdHlsZSgpLEc9Uy5nZXRJbmRleGVkU3R5bGUuYmluZChTKSxXPUcoeCwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsVCksZXQ9Ryh4LCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixUKSxhdD14LndpZHRoKCksbHQ9eC5oZWlnaHQoKSxmdD14LnBhZGRpbmcoKSoyLEF0PWF0KyhHKHgsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsVCk9PT0iaW5uZXIiPzA6ZnQpLGt0PWx0KyhHKHgsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFQpPT09ImlubmVyIj8wOmZ0KSxNdD14Ll9wcml2YXRlLnJzY3JhdGNoLER0PUcoeCwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFQpLGp0PUR0PT09Im5vZGUiLFp0PUcoeCwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFQpKkEsS3Q9Ryh4LCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixUKSx6dD1nLndpZHRofHxnLmNhY2hlZFcsZWU9Zy5oZWlnaHR8fGcuY2FjaGVkSDsoenQ9PW51bGx8fGVlPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZyksenQ9Zy5jYWNoZWRXPWcud2lkdGh8fGcub2Zmc2V0V2lkdGgsZWU9Zy5jYWNoZWRIPWcuaGVpZ2h0fHxnLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpKTt2YXIgVnQ9enQsZmU9ZWU7aWYoRyh4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFQpIT09ImF1dG8iJiYoRyh4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFQpPT09IiUiP1Z0PUcoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKkF0OlZ0PUcoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKSxHKHgsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFQpIT09ImF1dG8iJiYoRyh4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixUKT09PSIlIj9mZT1HKHgsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsVCkqa3Q6ZmU9Ryh4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFQpKSwhKFZ0PT09MHx8ZmU9PT0wKSl7aWYoVz09PSJjb250YWluIil7dmFyIGdlPU1hdGgubWluKEF0L1Z0LGt0L2ZlKTtWdCo9Z2UsZmUqPWdlfWVsc2UgaWYoVz09PSJjb3ZlciIpe3ZhciBnZT1NYXRoLm1heChBdC9WdCxrdC9mZSk7VnQqPWdlLGZlKj1nZX12YXIgbmU9JC1BdC8yLFBlPUcoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFQpLHBlPUcoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsVCk7UGU9PT0iJSI/bmUrPShBdC1WdCkqcGU6bmUrPXBlO3ZhciBibj1HKHgsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsVCksemU9Ryh4LCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsVCk7Ym49PT0iJSI/bmUrPShBdC1WdCkqemU6bmUrPXplO3ZhciBWZT1xLWt0LzIsRW49Ryh4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsVCksRG49Ryh4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixUKTtFbj09PSIlIj9WZSs9KGt0LWZlKSpEbjpWZSs9RG47dmFyIEtuPUcoeCwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixUKSxTbj1HKHgsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixUKTtLbj09PSIlIj9WZSs9KGt0LWZlKSpTbjpWZSs9U24sTXQucGF0aENhY2hlJiYobmUtPSQsVmUtPXEsJD0wLHE9MCk7dmFyIFduPXkuZ2xvYmFsQWxwaGE7eS5nbG9iYWxBbHBoYT1adDt2YXIgcnI9RC5nZXRJbWdTbW9vdGhpbmcoeSksdnI9ITE7aWYoS3Q9PT0ibm8iJiZycj8oRC5zZXRJbWdTbW9vdGhpbmcoeSwhMSksdnI9ITApOkt0PT09InllcyImJiFyciYmKEQuc2V0SW1nU21vb3RoaW5nKHksITApLHZyPSEwKSxldD09PSJuby1yZXBlYXQiKWp0JiYoeS5zYXZlKCksTXQucGF0aENhY2hlP3kuY2xpcChNdC5wYXRoQ2FjaGUpOihELm5vZGVTaGFwZXNbRC5nZXROb2RlU2hhcGUoeCldLmRyYXcoeSwkLHEsQXQsa3QpLHkuY2xpcCgpKSksRC5zYWZlRHJhd0ltYWdlKHksZywwLDAsenQsZWUsbmUsVmUsVnQsZmUpLGp0JiZ5LnJlc3RvcmUoKTtlbHNle3ZhciB1cj15LmNyZWF0ZVBhdHRlcm4oZyxldCk7eS5maWxsU3R5bGU9dXIsRC5ub2RlU2hhcGVzW0QuZ2V0Tm9kZVNoYXBlKHgpXS5kcmF3KHksJCxxLEF0LGt0KSx5LnRyYW5zbGF0ZShuZSxWZSkseS5maWxsKCkseS50cmFuc2xhdGUoLW5lLC1WZSl9eS5nbG9iYWxBbHBoYT1Xbix2ciYmRC5zZXRJbWdTbW9vdGhpbmcoeSxycil9fTt2YXIgaHg9e307aHguZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeSxnKXtpZighZyl7dmFyIHg9eS5jeSgpLnpvb20oKSxUPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLEE9TWF0aC5jZWlsKHhMKHgqVCkpO2c9TWF0aC5wb3coMixBKX12YXIgRD15LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSpnLE89eS5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKEQ8Tyl9LGh4LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXM7aWYoVD09bnVsbCl7aWYoRCYmIU8uZWxlVGV4dEJpZ2dlclRoYW5NaW4oZykpcmV0dXJufWVsc2UgaWYoVD09PSExKXJldHVybjtpZihnLmlzTm9kZSgpKXt2YXIgJD1nLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBxPU8uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGcpO3kudGV4dEFsaWduPXEseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgUz1nLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLEc9Zy5wc3R5bGUoImxhYmVsIiksVz1nLnBzdHlsZSgic291cmNlLWxhYmVsIiksZXQ9Zy5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKFN8fCghR3x8IUcudmFsdWUpJiYoIVd8fCFXLnZhbHVlKSYmKCFldHx8IWV0LnZhbHVlKSlyZXR1cm47eS50ZXh0QWxpZ249ImNlbnRlciIseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIGF0PSF4LGx0O3gmJihsdD14LHkudHJhbnNsYXRlKC1sdC54MSwtbHQueTEpKSxBPT1udWxsPyhPLmRyYXdUZXh0KHksZyxudWxsLGF0LEQpLGcuaXNFZGdlKCkmJihPLmRyYXdUZXh0KHksZywic291cmNlIixhdCxEKSxPLmRyYXdUZXh0KHksZywidGFyZ2V0IixhdCxEKSkpOk8uZHJhd1RleHQoeSxnLEEsYXQsRCkseCYmeS50cmFuc2xhdGUobHQueDEsbHQueTEpfSxoeC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeSl7dmFyIGc7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciB4PTA7eDx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3grKylpZihnPXRoaXMuZm9udENhY2hlc1t4XSxnLmNvbnRleHQ9PT15KXJldHVybiBnO3JldHVybiBnPXtjb250ZXh0Onl9LHRoaXMuZm9udENhY2hlcy5wdXNoKGcpLGd9LGh4LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFQ9Zy5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxBPWcucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsRD1nLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxPPWcucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9eD9nLmVmZmVjdGl2ZU9wYWNpdHkoKSpnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxxPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQsUz1nLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxHPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt5LmZvbnQ9VCsiICIrTysiICIrQSsiICIrRCx5LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh5LFNbMF0sU1sxXSxTWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh5LEdbMF0sR1sxXSxHWzJdLHEpfTtmdW5jdGlvbiBmcHQoeSxnLHgsVCxBKXt2YXIgRD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NTt5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcrRCx4KSx5LmxpbmVUbyhnK1QtRCx4KSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgsZytULHgrRCkseS5saW5lVG8oZytULHgrQS1EKSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgrQSxnK1QtRCx4K0EpLHkubGluZVRvKGcrRCx4K0EpLHkucXVhZHJhdGljQ3VydmVUbyhnLHgrQSxnLHgrQS1EKSx5LmxpbmVUbyhnLHgrRCkseS5xdWFkcmF0aWNDdXJ2ZVRvKGcseCxnK0QseCkseS5jbG9zZVBhdGgoKSx5LmZpbGwoKX1oeC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeCxUPXkuX3ByaXZhdGUsQT1ULnJzY3JhdGNoLEQ9Zz9nKyItIjoiIixPPXkucHN0eWxlKEQrInRleHQtcm90YXRpb24iKSwkPWJwKEEsImxhYmVsQW5nbGUiLGcpO3JldHVybiBPLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3g9eS5pc0VkZ2UoKT8kOjA6Ty5zdHJWYWx1ZT09PSJub25lIj94PTA6eD1PLnBmVmFsdWUseH0saHguZHJhd1RleHQ9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxEPWcuX3ByaXZhdGUsTz1ELnJzY3JhdGNoLCQ9QT9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoQSYmKCQ9PT0wfHxnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3g9PT0ibWFpbiImJih4PW51bGwpO3ZhciBxPWJwKE8sImxhYmVsWCIseCksUz1icChPLCJsYWJlbFkiLHgpLEcsVyxldD10aGlzLmdldExhYmVsVGV4dChnLHgpO2lmKGV0IT1udWxsJiZldCE9PSIiJiYhaXNOYU4ocSkmJiFpc05hTihTKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh5LGcsQSk7dmFyIGF0PXg/eCsiLSI6IiIsbHQ9YnAoTywibGFiZWxXaWR0aCIseCksZnQ9YnAoTywibGFiZWxIZWlnaHQiLHgpLEF0PWcucHN0eWxlKGF0KyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxrdD1nLnBzdHlsZShhdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsTXQ9Zy5pc0VkZ2UoKSxEdD1nLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSxqdD1nLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtNdCYmKER0PSJjZW50ZXIiLGp0PSJjZW50ZXIiKSxxKz1BdCxTKz1rdDt2YXIgWnQ7c3dpdGNoKFQ/WnQ9dGhpcy5nZXRUZXh0QW5nbGUoZyx4KTpadD0wLFp0IT09MCYmKEc9cSxXPVMseS50cmFuc2xhdGUoRyxXKSx5LnJvdGF0ZShadCkscT0wLFM9MCksanQpe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6Uys9ZnQvMjticmVhaztjYXNlImJvdHRvbSI6Uys9ZnQ7YnJlYWt9dmFyIEt0PWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLHp0PWcucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsZWU9Zy5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxWdD1nLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlO2lmKEt0PjB8fGVlPjAmJnp0PjApe3ZhciBmZT1xLVZ0O3N3aXRjaChEdCl7Y2FzZSJsZWZ0IjpmZS09bHQ7YnJlYWs7Y2FzZSJjZW50ZXIiOmZlLT1sdC8yO2JyZWFrfXZhciBnZT1TLWZ0LVZ0LG5lPWx0KzIqVnQsUGU9ZnQrMipWdDtpZihLdD4wKXt2YXIgcGU9eS5maWxsU3R5bGUsYm49Zy5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3kuZmlsbFN0eWxlPSJyZ2JhKCIrYm5bMF0rIiwiK2JuWzFdKyIsIitiblsyXSsiLCIrS3QqJCsiKSI7dmFyIHplPWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZTt6ZS5pbmRleE9mKCJyb3VuZCIpPT09MD9mcHQoeSxmZSxnZSxuZSxQZSwyKTp5LmZpbGxSZWN0KGZlLGdlLG5lLFBlKSx5LmZpbGxTdHlsZT1wZX1pZihlZT4wJiZ6dD4wKXt2YXIgVmU9eS5zdHJva2VTdHlsZSxFbj15LmxpbmVXaWR0aCxEbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxLbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrRG5bMF0rIiwiK0RuWzFdKyIsIitEblsyXSsiLCIrenQqJCsiKSIseS5saW5lV2lkdGg9ZWUseS5zZXRMaW5lRGFzaClzd2l0Y2goS24pe2Nhc2UiZG90dGVkIjp5LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eS5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnkubGluZVdpZHRoPWVlLzQseS5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoeS5zdHJva2VSZWN0KGZlLGdlLG5lLFBlKSxLbj09PSJkb3VibGUiKXt2YXIgU249ZWUvMjt5LnN0cm9rZVJlY3QoZmUrU24sZ2UrU24sbmUtU24qMixQZS1TbioyKX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKSx5LmxpbmVXaWR0aD1Fbix5LnN0cm9rZVN0eWxlPVZlfX12YXIgV249MipnLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihXbj4wJiYoeS5saW5lV2lkdGg9V24pLGcucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIHJyPWJwKE8sImxhYmVsV3JhcENhY2hlZExpbmVzIix4KSx2cj1icChPLCJsYWJlbExpbmVIZWlnaHQiLHgpLHVyPWx0LzIsdHI9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZyk7c3dpdGNoKHRyPT09ImF1dG8ifHwoRHQ9PT0ibGVmdCI/dHI9PT0ibGVmdCI/cSs9LWx0OnRyPT09ImNlbnRlciImJihxKz0tdXIpOkR0PT09ImNlbnRlciI/dHI9PT0ibGVmdCI/cSs9LXVyOnRyPT09InJpZ2h0IiYmKHErPXVyKTpEdD09PSJyaWdodCImJih0cj09PSJjZW50ZXIiP3ErPXVyOnRyPT09InJpZ2h0IiYmKHErPWx0KSkpLGp0KXtjYXNlInRvcCI6Uy09KHJyLmxlbmd0aC0xKSp2cjticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOlMtPShyci5sZW5ndGgtMSkqdnI7YnJlYWt9Zm9yKHZhciB3bj0wO3duPHJyLmxlbmd0aDt3bisrKVduPjAmJnkuc3Ryb2tlVGV4dChyclt3bl0scSxTKSx5LmZpbGxUZXh0KHJyW3duXSxxLFMpLFMrPXZyfWVsc2UgV24+MCYmeS5zdHJva2VUZXh0KGV0LHEsUykseS5maWxsVGV4dChldCxxLFMpO1p0IT09MCYmKHkucm90YXRlKC1adCkseS50cmFuc2xhdGUoLUcsLVcpKX19fTt2YXIgR2s9e307R2suZHJhd05vZGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxEPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxPPXRoaXMsJCxxLFM9Zy5fcHJpdmF0ZSxHPVMucnNjcmF0Y2gsVz1nLnBvc2l0aW9uKCk7aWYoISghWChXLngpfHwhWChXLnkpKSYmIShEJiYhZy52aXNpYmxlKCkpKXt2YXIgZXQ9RD9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxLGF0PU8udXNlUGF0aHMoKSxsdCxmdD0hMSxBdD1nLnBhZGRpbmcoKTskPWcud2lkdGgoKSsyKkF0LHE9Zy5oZWlnaHQoKSsyKkF0O3ZhciBrdDt4JiYoa3Q9eCx5LnRyYW5zbGF0ZSgta3QueDEsLWt0LnkxKSk7Zm9yKHZhciBNdD1nLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLER0PU10LnZhbHVlLGp0PW5ldyBBcnJheShEdC5sZW5ndGgpLFp0PW5ldyBBcnJheShEdC5sZW5ndGgpLEt0PTAsenQ9MDt6dDxEdC5sZW5ndGg7enQrKyl7dmFyIGVlPUR0W3p0XSxWdD1qdFt6dF09ZWUhPW51bGwmJmVlIT09Im5vbmUiO2lmKFZ0KXt2YXIgZmU9Zy5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGcsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIsenQpO0t0KyssWnRbenRdPU8uZ2V0Q2FjaGVkSW1hZ2UoZWUsZmUsZnVuY3Rpb24oKXtTLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxnLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgZ2U9Zy5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLG5lPWcucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLFBlPWcucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpldCxwZT1nLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsYm49Zy5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLHplPWcucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKmV0O3kubGluZUpvaW49Im1pdGVyIjt2YXIgVmU9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOlBlO08uZWxlRmlsbFN0eWxlKHksZyxTaSl9LEVuPWZ1bmN0aW9uKCl7dmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp6ZTtPLmNvbG9yU3Ryb2tlU3R5bGUoeSxwZVswXSxwZVsxXSxwZVsyXSxTaSl9LERuPWcucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLEtuPWcucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYoYXQpe3kudHJhbnNsYXRlKFcueCxXLnkpO3ZhciBTbj1PLm5vZGVQYXRoQ2FjaGU9Ty5ub2RlUGF0aENhY2hlfHxbXSxXbj1lZChEbj09PSJwb2x5Z29uIj9EbisiLCIrS24uam9pbigiLCIpOkRuLCIiK3EsIiIrJCkscnI9U25bV25dO3JyIT1udWxsPyhsdD1ycixmdD0hMCxHLnBhdGhDYWNoZT1sdCk6KGx0PW5ldyBQYXRoMkQsU25bV25dPUcucGF0aENhY2hlPWx0KX12YXIgdnI9ZnVuY3Rpb24oKXtpZighZnQpe3ZhciBTaT1XO2F0JiYoU2k9e3g6MCx5OjB9KSxPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoZyldLmRyYXcobHR8fHksU2kueCxTaS55LCQscSl9YXQ/eS5maWxsKGx0KTp5LmZpbGwoKX0sdXI9ZnVuY3Rpb24oKXtmb3IodmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpldCxVaT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsR2E9Uy5iYWNrZ3JvdW5kaW5nLFlzPTAsenM9MDt6czxadC5sZW5ndGg7enMrKyl7dmFyIEVyPWcuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShnLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLHpzKTtpZihVaSYmRXI9PT0ib3ZlciJ8fCFVaSYmRXI9PT0iaW5zaWRlIil7WXMrKztjb250aW51ZX1qdFt6c10mJlp0W3pzXS5jb21wbGV0ZSYmIVp0W3pzXS5lcnJvciYmKFlzKyssTy5kcmF3SW5zY3JpYmVkSW1hZ2UoeSxadFt6c10sZyx6cyxTaSkpfVMuYmFja2dyb3VuZGluZz1ZcyE9PUt0LEdhIT09Uy5iYWNrZ3JvdW5kaW5nJiZnLnVwZGF0ZVN0eWxlKCExKX0sdHI9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpldDtPLmhhc1BpZShnKSYmKE8uZHJhd1BpZSh5LGcsVWkpLFNpJiYoYXR8fE8ubm9kZVNoYXBlc1tPLmdldE5vZGVTaGFwZShnKV0uZHJhdyh5LFcueCxXLnksJCxxKSkpfSx3bj1mdW5jdGlvbigpe3ZhciBTaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZXQsVWk9KGdlPjA/Z2U6LWdlKSpTaSxHYT1nZT4wPzA6MjU1O2dlIT09MCYmKE8uY29sb3JGaWxsU3R5bGUoeSxHYSxHYSxHYSxVaSksYXQ/eS5maWxsKGx0KTp5LmZpbGwoKSl9LGdyPWZ1bmN0aW9uKCl7aWYobmU+MCl7aWYoeS5saW5lV2lkdGg9bmUseS5saW5lQ2FwPSJidXR0Iix5LnNldExpbmVEYXNoKXN3aXRjaChibil7Y2FzZSJkb3R0ZWQiOnkuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp5LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoYXQ/eS5zdHJva2UobHQpOnkuc3Ryb2tlKCksYm49PT0iZG91YmxlIil7eS5saW5lV2lkdGg9bmUvMzt2YXIgU2k9eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsYXQ/eS5zdHJva2UobHQpOnkuc3Ryb2tlKCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249U2l9eS5zZXRMaW5lRGFzaCYmeS5zZXRMaW5lRGFzaChbXSl9fSxmcj1mdW5jdGlvbigpe0EmJk8uZHJhd05vZGVPdmVybGF5KHksZyxXLCQscSl9LEpyPWZ1bmN0aW9uKCl7QSYmTy5kcmF3Tm9kZVVuZGVybGF5KHksZyxXLCQscSl9LHdpPWZ1bmN0aW9uKCl7Ty5kcmF3RWxlbWVudFRleHQoeSxnLG51bGwsVCl9LEtzPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoS3Mpe3ZhciBrYT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLENpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaGk9Zy5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxncz1oaSpldDt5LnRyYW5zbGF0ZShrYSxDaSksVmUoaGkqUGUpLHZyKCksdXIoZ3MsITApLEVuKGhpKnplKSxncigpLHRyKGdlIT09MHx8bmUhPT0wKSx1cihncywhMSksd24oZ3MpLHkudHJhbnNsYXRlKC1rYSwtQ2kpfWF0JiZ5LnRyYW5zbGF0ZSgtVy54LC1XLnkpLEpyKCksYXQmJnkudHJhbnNsYXRlKFcueCxXLnkpLFZlKCksdnIoKSx1cihldCwhMCksRW4oKSxncigpLHRyKGdlIT09MHx8bmUhPT0wKSx1cihldCwhMSksd24oKSxhdCYmeS50cmFuc2xhdGUoLVcueCwtVy55KSx3aSgpLGZyKCkseCYmeS50cmFuc2xhdGUoa3QueDEsa3QueTEpfX07dmFyIEV0dD1mdW5jdGlvbihnKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24oeCxULEEsRCxPKXt2YXIgJD10aGlzO2lmKFQudmlzaWJsZSgpKXt2YXIgcT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXBhZGRpbmciKSkucGZWYWx1ZSxTPVQucHN0eWxlKCIiLmNvbmNhdChnLCItb3BhY2l0eSIpKS52YWx1ZSxHPVQucHN0eWxlKCIiLmNvbmNhdChnLCItY29sb3IiKSkudmFsdWUsVz1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXNoYXBlIikpLnZhbHVlO2lmKFM+MCl7aWYoQT1BfHxULnBvc2l0aW9uKCksRD09bnVsbHx8Tz09bnVsbCl7dmFyIGV0PVQucGFkZGluZygpO0Q9VC53aWR0aCgpKzIqZXQsTz1ULmhlaWdodCgpKzIqZXR9JC5jb2xvckZpbGxTdHlsZSh4LEdbMF0sR1sxXSxHWzJdLFMpLCQubm9kZVNoYXBlc1tXXS5kcmF3KHgsQS54LEEueSxEK3EqMixPK3EqMikseC5maWxsKCl9fX19O0drLmRyYXdOb2RlT3ZlcmxheT1FdHQoIm92ZXJsYXkiKSxHay5kcmF3Tm9kZVVuZGVybGF5PUV0dCgidW5kZXJsYXkiKSxHay5oYXNQaWU9ZnVuY3Rpb24oeSl7cmV0dXJuIHk9eVswXSx5Ll9wcml2YXRlLmhhc1BpZX0sR2suZHJhd1BpZT1mdW5jdGlvbih5LGcseCxUKXtnPWdbMF0sVD1UfHxnLnBvc2l0aW9uKCk7dmFyIEE9Zy5jeSgpLnN0eWxlKCksRD1nLnBzdHlsZSgicGllLXNpemUiKSxPPVQueCwkPVQueSxxPWcud2lkdGgoKSxTPWcuaGVpZ2h0KCksRz1NYXRoLm1pbihxLFMpLzIsVz0wLGV0PXRoaXMudXNlUGF0aHMoKTtldCYmKE89MCwkPTApLEQudW5pdHM9PT0iJSI/Rz1HKkQucGZWYWx1ZTpELnBmVmFsdWUhPT12b2lkIDAmJihHPUQucGZWYWx1ZS8yKTtmb3IodmFyIGF0PTE7YXQ8PUEucGllQmFja2dyb3VuZE47YXQrKyl7dmFyIGx0PWcucHN0eWxlKCJwaWUtIithdCsiLWJhY2tncm91bmQtc2l6ZSIpLnZhbHVlLGZ0PWcucHN0eWxlKCJwaWUtIithdCsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSxBdD1nLnBzdHlsZSgicGllLSIrYXQrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSp4LGt0PWx0LzEwMDtrdCtXPjEmJihrdD0xLVcpO3ZhciBNdD0xLjUqTWF0aC5QSSsyKk1hdGguUEkqVyxEdD0yKk1hdGguUEkqa3QsanQ9TXQrRHQ7bHQ9PT0wfHxXPj0xfHxXK2t0PjF8fCh5LmJlZ2luUGF0aCgpLHkubW92ZVRvKE8sJCkseS5hcmMoTywkLEcsTXQsanQpLHkuY2xvc2VQYXRoKCksdGhpcy5jb2xvckZpbGxTdHlsZSh5LGZ0WzBdLGZ0WzFdLGZ0WzJdLEF0KSx5LmZpbGwoKSxXKz1rdCl9fTt2YXIgdmc9e30sZHB0PTEwMDt2Zy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5kYXRhLmNvbnRleHRzWzBdO2lmKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyE9bnVsbClyZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO3ZhciBnPXkuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eS53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS9nfSx2Zy5wYWludENhY2hlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHg9ITAsVCxBPTA7QTxnLmxlbmd0aDtBKyspaWYoVD1nW0FdLFQuY29udGV4dD09PXkpe3g9ITE7YnJlYWt9cmV0dXJuIHgmJihUPXtjb250ZXh0Onl9LGcucHVzaChUKSksVH0sdmcuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih5LGcseCxULEEpe3ZhciBELE89dGhpcy51c2VQYXRocygpLCQ9eC5wc3R5bGUoZysiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUscT14LnBzdHlsZShnKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKFQ9PT0icmFkaWFsLWdyYWRpZW50IilpZih4LmlzRWRnZSgpKXt2YXIgUz14LnNvdXJjZUVuZHBvaW50KCksRz14LnRhcmdldEVuZHBvaW50KCksVz14Lm1pZHBvaW50KCksZXQ9RTMoUyxXKSxhdD1FMyhHLFcpO0Q9eS5jcmVhdGVSYWRpYWxHcmFkaWVudChXLngsVy55LDAsVy54LFcueSxNYXRoLm1heChldCxhdCkpfWVsc2V7dmFyIGx0PU8/e3g6MCx5OjB9OngucG9zaXRpb24oKSxmdD14LnBhZGRlZFdpZHRoKCksQXQ9eC5wYWRkZWRIZWlnaHQoKTtEPXkuY3JlYXRlUmFkaWFsR3JhZGllbnQobHQueCxsdC55LDAsbHQueCxsdC55LE1hdGgubWF4KGZ0LEF0KSl9ZWxzZSBpZih4LmlzRWRnZSgpKXt2YXIga3Q9eC5zb3VyY2VFbmRwb2ludCgpLE10PXgudGFyZ2V0RW5kcG9pbnQoKTtEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoa3QueCxrdC55LE10LngsTXQueSl9ZWxzZXt2YXIgRHQ9Tz97eDowLHk6MH06eC5wb3NpdGlvbigpLGp0PXgucGFkZGVkV2lkdGgoKSxadD14LnBhZGRlZEhlaWdodCgpLEt0PWp0LzIsenQ9WnQvMixlZT14LnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2goZWUpe2Nhc2UidG8tYm90dG9tIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueCxEdC55LXp0LER0LngsRHQueSt6dCk7YnJlYWs7Y2FzZSJ0by10b3AiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54LER0LnkrenQsRHQueCxEdC55LXp0KTticmVhaztjYXNlInRvLWxlZnQiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54K0t0LER0LnksRHQueC1LdCxEdC55KTticmVhaztjYXNlInRvLXJpZ2h0IjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55LER0LngrS3QsRHQueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55LXp0LER0LngrS3QsRHQueSt6dCk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjpEPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoRHQueC1LdCxEdC55K3p0LER0LngrS3QsRHQueS16dCk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tbGVmdCI6Y2FzZSJ0by1sZWZ0LWJvdHRvbSI6RD15LmNyZWF0ZUxpbmVhckdyYWRpZW50KER0LngrS3QsRHQueS16dCxEdC54LUt0LER0LnkrenQpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOkQ9eS5jcmVhdGVMaW5lYXJHcmFkaWVudChEdC54K0t0LER0LnkrenQsRHQueC1LdCxEdC55LXp0KTticmVha319aWYoIUQpcmV0dXJuIG51bGw7Zm9yKHZhciBWdD1xLmxlbmd0aD09PSQubGVuZ3RoLGZlPSQubGVuZ3RoLGdlPTA7Z2U8ZmU7Z2UrKylELmFkZENvbG9yU3RvcChWdD9xW2dlXTpnZS8oZmUtMSksInJnYmEoIiskW2dlXVswXSsiLCIrJFtnZV1bMV0rIiwiKyRbZ2VdWzJdKyIsIitBKyIpIik7cmV0dXJuIER9LHZnLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJiYWNrZ3JvdW5kIixnLHgsVCk7aWYoIUEpcmV0dXJuIG51bGw7eS5maWxsU3R5bGU9QX0sdmcuY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCxBKXt5LmZpbGxTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0ErIikifSx2Zy5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWcucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihUPT09ImxpbmVhci1ncmFkaWVudCJ8fFQ9PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHksZyxULHgpO2Vsc2V7dmFyIEE9Zy5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHksQVswXSxBWzFdLEFbMl0seCl9fSx2Zy5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBBPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJsaW5lIixnLHgsVCk7aWYoIUEpcmV0dXJuIG51bGw7eS5zdHJva2VTdHlsZT1BfSx2Zy5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQsQSl7eS5zdHJva2VTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0ErIikifSx2Zy5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9Zy5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKFQ9PT0ibGluZWFyLWdyYWRpZW50Inx8VD09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh5LGcsVCx4KTtlbHNle3ZhciBBPWcucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHksQVswXSxBWzFdLEFbMl0seCl9fSx2Zy5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZGF0YSxUPWcuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEE9VFsyXSxEPVRbM10sTz1nLmdldFBpeGVsUmF0aW8oKSwkPWcubW90aW9uQmx1clB4UmF0aW87KHk9PT1nLmRhdGEuYnVmZmVyQ2FudmFzZXNbZy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8eT09PWcuZGF0YS5idWZmZXJDYW52YXNlc1tnLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKE89JCk7dmFyIHE9QSpPLFM9RCpPLEc7aWYoIShxPT09Zy5jYW52YXNXaWR0aCYmUz09PWcuY2FudmFzSGVpZ2h0KSl7Zy5mb250Q2FjaGVzPW51bGw7dmFyIFc9eC5jYW52YXNDb250YWluZXI7Vy5zdHlsZS53aWR0aD1BKyJweCIsVy5zdHlsZS5oZWlnaHQ9RCsicHgiO2Zvcih2YXIgZXQ9MDtldDxnLkNBTlZBU19MQVlFUlM7ZXQrKylHPXguY2FudmFzZXNbZXRdLEcud2lkdGg9cSxHLmhlaWdodD1TLEcuc3R5bGUud2lkdGg9QSsicHgiLEcuc3R5bGUuaGVpZ2h0PUQrInB4Ijtmb3IodmFyIGV0PTA7ZXQ8Zy5CVUZGRVJfQ09VTlQ7ZXQrKylHPXguYnVmZmVyQ2FudmFzZXNbZXRdLEcud2lkdGg9cSxHLmhlaWdodD1TLEcuc3R5bGUud2lkdGg9QSsicHgiLEcuc3R5bGUuaGVpZ2h0PUQrInB4IjtnLnRleHR1cmVNdWx0PTEsTzw9MSYmKEc9eC5idWZmZXJDYW52YXNlc1tnLlRFWFRVUkVfQlVGRkVSXSxnLnRleHR1cmVNdWx0PTIsRy53aWR0aD1xKmcudGV4dHVyZU11bHQsRy5oZWlnaHQ9UypnLnRleHR1cmVNdWx0KSxnLmNhbnZhc1dpZHRoPXEsZy5jYW52YXNIZWlnaHQ9U319LHZnLnJlbmRlclRvPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnksZm9yY2VkWm9vbTpnLGZvcmNlZFBhbjp4LGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpUfSl9LHZnLnJlbmRlcj1mdW5jdGlvbih5KXt5PXl8fEtQKCk7dmFyIGc9eS5mb3JjZWRDb250ZXh0LHg9eS5kcmF3QWxsTGF5ZXJzLFQ9eS5kcmF3T25seU5vZGVMYXllcixBPXkuZm9yY2VkWm9vbSxEPXkuZm9yY2VkUGFuLE89dGhpcywkPXkuZm9yY2VkUHhSYXRpbz09PXZvaWQgMD90aGlzLmdldFBpeGVsUmF0aW8oKTp5LmZvcmNlZFB4UmF0aW8scT1PLmN5LFM9Ty5kYXRhLEc9Uy5jYW52YXNOZWVkc1JlZHJhdyxXPU8udGV4dHVyZU9uVmlld3BvcnQmJiFnJiYoTy5waW5jaGluZ3x8Ty5ob3ZlckRhdGEuZHJhZ2dpbmd8fE8uc3dpcGVQYW5uaW5nfHxPLmRhdGEud2hlZWxab29taW5nKSxldD15Lm1vdGlvbkJsdXIhPT12b2lkIDA/eS5tb3Rpb25CbHVyOk8ubW90aW9uQmx1cixhdD1PLm1vdGlvbkJsdXJQeFJhdGlvLGx0PXEuaGFzQ29tcG91bmROb2RlcygpLGZ0PU8uaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyxBdD0hIShPLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE8udG91Y2hEYXRhLnNlbGVjdGluZyk7ZXQ9ZXQmJiFnJiZPLm1vdGlvbkJsdXJFbmFibGVkJiYhQXQ7dmFyIGt0PWV0O2d8fChPLnByZXZQeFJhdGlvIT09JCYmKE8uaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksTy5tYXRjaENhbnZhc1NpemUoTy5jb250YWluZXIpLE8ucmVkcmF3SGludCgiZWxlcyIsITApLE8ucmVkcmF3SGludCgiZHJhZyIsITApKSxPLnByZXZQeFJhdGlvPSQpLCFnJiZPLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoTy5tb3Rpb25CbHVyVGltZW91dCksZXQmJihPLm1iRnJhbWVzPT1udWxsJiYoTy5tYkZyYW1lcz0wKSxPLm1iRnJhbWVzKyssTy5tYkZyYW1lczwzJiYoa3Q9ITEpLE8ubWJGcmFtZXM+Ty5taW5NYkxvd1F1YWxGcmFtZXMmJihPLm1vdGlvbkJsdXJQeFJhdGlvPU8ubWJQeFJCbHVycnkpKSxPLmNsZWFyaW5nTW90aW9uQmx1ciYmKE8ubW90aW9uQmx1clB4UmF0aW89MSksTy50ZXh0dXJlRHJhd0xhc3RGcmFtZSYmIVcmJihHW08uTk9ERV09ITAsR1tPLlNFTEVDVF9CT1hdPSEwKTt2YXIgTXQ9cS5zdHlsZSgpLER0PXEuem9vbSgpLGp0PUEhPT12b2lkIDA/QTpEdCxadD1xLnBhbigpLEt0PXt4Olp0LngseTpadC55fSx6dD17em9vbTpEdCxwYW46e3g6WnQueCx5Olp0Lnl9fSxlZT1PLnByZXZWaWV3cG9ydCxWdD1lZT09PXZvaWQgMHx8enQuem9vbSE9PWVlLnpvb218fHp0LnBhbi54IT09ZWUucGFuLnh8fHp0LnBhbi55IT09ZWUucGFuLnk7IVZ0JiYhKGZ0JiYhbHQpJiYoTy5tb3Rpb25CbHVyUHhSYXRpbz0xKSxEJiYoS3Q9RCksanQqPSQsS3QueCo9JCxLdC55Kj0kO3ZhciBmZT1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gZ2UoQ2ksaGksZ3MscWksU2kpe3ZhciBVaT1DaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247Q2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLE8uY29sb3JGaWxsU3R5bGUoQ2ksMjU1LDI1NSwyNTUsTy5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KSxDaS5maWxsUmVjdChoaSxncyxxaSxTaSksQ2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVVpfWZ1bmN0aW9uIG5lKENpLGhpKXt2YXIgZ3MscWksU2ksVWk7IU8uY2xlYXJpbmdNb3Rpb25CbHVyJiYoQ2k9PT1TLmJ1ZmZlckNvbnRleHRzW08uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fENpPT09Uy5idWZmZXJDb250ZXh0c1tPLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8oZ3M9e3g6WnQueCphdCx5Olp0LnkqYXR9LHFpPUR0KmF0LFNpPU8uY2FudmFzV2lkdGgqYXQsVWk9Ty5jYW52YXNIZWlnaHQqYXQpOihncz1LdCxxaT1qdCxTaT1PLmNhbnZhc1dpZHRoLFVpPU8uY2FudmFzSGVpZ2h0KSxDaS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGhpPT09Im1vdGlvbkJsdXIiP2dlKENpLDAsMCxTaSxVaSk6IWcmJihoaT09PXZvaWQgMHx8aGkpJiZDaS5jbGVhclJlY3QoMCwwLFNpLFVpKSx4fHwoQ2kudHJhbnNsYXRlKGdzLngsZ3MueSksQ2kuc2NhbGUocWkscWkpKSxEJiZDaS50cmFuc2xhdGUoRC54LEQueSksQSYmQ2kuc2NhbGUoQSxBKX1pZihXfHwoTy50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksVyl7aWYoTy50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhTy50ZXh0dXJlQ2FjaGUpe08udGV4dHVyZUNhY2hlPXt9LE8udGV4dHVyZUNhY2hlLmJiPXEubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxPLnRleHR1cmVDYWNoZS50ZXh0dXJlPU8uZGF0YS5idWZmZXJDYW52YXNlc1tPLlRFWFRVUkVfQlVGRkVSXTt2YXIgUGU9Ty5kYXRhLmJ1ZmZlckNvbnRleHRzW08uVEVYVFVSRV9CVUZGRVJdO1BlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksUGUuY2xlYXJSZWN0KDAsMCxPLmNhbnZhc1dpZHRoKk8udGV4dHVyZU11bHQsTy5jYW52YXNIZWlnaHQqTy50ZXh0dXJlTXVsdCksTy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6UGUsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzokKk8udGV4dHVyZU11bHR9KTt2YXIgenQ9Ty50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206cS56b29tKCkscGFuOnEucGFuKCksd2lkdGg6Ty5jYW52YXNXaWR0aCxoZWlnaHQ6Ty5jYW52YXNIZWlnaHR9O3p0Lm1wYW49e3g6KDAtenQucGFuLngpL3p0Lnpvb20seTooMC16dC5wYW4ueSkvenQuem9vbX19R1tPLkRSQUddPSExLEdbTy5OT0RFXT0hMTt2YXIgcGU9Uy5jb250ZXh0c1tPLk5PREVdLGJuPU8udGV4dHVyZUNhY2hlLnRleHR1cmUsenQ9Ty50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7cGUuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxldD9nZShwZSwwLDAsenQud2lkdGgsenQuaGVpZ2h0KTpwZS5jbGVhclJlY3QoMCwwLHp0LndpZHRoLHp0LmhlaWdodCk7dmFyIHplPU10LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLFZlPU10LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7Ty5jb2xvckZpbGxTdHlsZShwZSx6ZVswXSx6ZVsxXSx6ZVsyXSxWZSkscGUuZmlsbFJlY3QoMCwwLHp0LndpZHRoLHp0LmhlaWdodCk7dmFyIER0PXEuem9vbSgpO25lKHBlLCExKSxwZS5jbGVhclJlY3QoenQubXBhbi54LHp0Lm1wYW4ueSx6dC53aWR0aC96dC56b29tLyQsenQuaGVpZ2h0L3p0Lnpvb20vJCkscGUuZHJhd0ltYWdlKGJuLHp0Lm1wYW4ueCx6dC5tcGFuLnksenQud2lkdGgvenQuem9vbS8kLHp0LmhlaWdodC96dC56b29tLyQpfWVsc2UgTy50ZXh0dXJlT25WaWV3cG9ydCYmIWcmJihPLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRW49cS5leHRlbnQoKSxEbj1PLnBpbmNoaW5nfHxPLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ty5zd2lwZVBhbm5pbmd8fE8uZGF0YS53aGVlbFpvb21pbmd8fE8uaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8Ty5jeS5hbmltYXRlZCgpLEtuPU8uaGlkZUVkZ2VzT25WaWV3cG9ydCYmRG4sU249W107aWYoU25bTy5OT0RFXT0hR1tPLk5PREVdJiZldCYmIU8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5OT0RFXXx8Ty5jbGVhcmluZ01vdGlvbkJsdXIsU25bTy5OT0RFXSYmKE8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5OT0RFXT0hMCksU25bTy5EUkFHXT0hR1tPLkRSQUddJiZldCYmIU8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5EUkFHXXx8Ty5jbGVhcmluZ01vdGlvbkJsdXIsU25bTy5EUkFHXSYmKE8uY2xlYXJlZEZvck1vdGlvbkJsdXJbTy5EUkFHXT0hMCksR1tPLk5PREVdfHx4fHxUfHxTbltPLk5PREVdKXt2YXIgV249ZXQmJiFTbltPLk5PREVdJiZhdCE9PTEscGU9Z3x8KFduP08uZGF0YS5idWZmZXJDb250ZXh0c1tPLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOlMuY29udGV4dHNbTy5OT0RFXSkscnI9ZXQmJiFXbj8ibW90aW9uQmx1ciI6dm9pZCAwO25lKHBlLHJyKSxLbj9PLmRyYXdDYWNoZWROb2RlcyhwZSxmZS5ub25kcmFnLCQsRW4pOk8uZHJhd0xheWVyZWRFbGVtZW50cyhwZSxmZS5ub25kcmFnLCQsRW4pLE8uZGVidWcmJk8uZHJhd0RlYnVnUG9pbnRzKHBlLGZlLm5vbmRyYWcpLCF4JiYhZXQmJihHW08uTk9ERV09ITEpfWlmKCFUJiYoR1tPLkRSQUddfHx4fHxTbltPLkRSQUddKSl7dmFyIFduPWV0JiYhU25bTy5EUkFHXSYmYXQhPT0xLHBlPWd8fChXbj9PLmRhdGEuYnVmZmVyQ29udGV4dHNbTy5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpTLmNvbnRleHRzW08uRFJBR10pO25lKHBlLGV0JiYhV24/Im1vdGlvbkJsdXIiOnZvaWQgMCksS24/Ty5kcmF3Q2FjaGVkTm9kZXMocGUsZmUuZHJhZywkLEVuKTpPLmRyYXdDYWNoZWRFbGVtZW50cyhwZSxmZS5kcmFnLCQsRW4pLE8uZGVidWcmJk8uZHJhd0RlYnVnUG9pbnRzKHBlLGZlLmRyYWcpLCF4JiYhZXQmJihHW08uRFJBR109ITEpfWlmKE8uc2hvd0Zwc3x8IVQmJkdbTy5TRUxFQ1RfQk9YXSYmIXgpe3ZhciBwZT1nfHxTLmNvbnRleHRzW08uU0VMRUNUX0JPWF07aWYobmUocGUpLE8uc2VsZWN0aW9uWzRdPT0xJiYoTy5ob3ZlckRhdGEuc2VsZWN0aW5nfHxPLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgRHQ9Ty5jeS56b29tKCksdnI9TXQuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9EdDtwZS5saW5lV2lkdGg9dnIscGUuZmlsbFN0eWxlPSJyZ2JhKCIrTXQuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK010LmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsyXSsiLCIrTXQuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLHBlLmZpbGxSZWN0KE8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzFdLE8uc2VsZWN0aW9uWzJdLU8uc2VsZWN0aW9uWzBdLE8uc2VsZWN0aW9uWzNdLU8uc2VsZWN0aW9uWzFdKSx2cj4wJiYocGUuc3Ryb2tlU3R5bGU9InJnYmEoIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzFdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzJdKyIsIitNdC5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIscGUuc3Ryb2tlUmVjdChPLnNlbGVjdGlvblswXSxPLnNlbGVjdGlvblsxXSxPLnNlbGVjdGlvblsyXS1PLnNlbGVjdGlvblswXSxPLnNlbGVjdGlvblszXS1PLnNlbGVjdGlvblsxXSkpfWlmKFMuYmdBY3RpdmVQb3Npc3Rpb24mJiFPLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBEdD1PLmN5Lnpvb20oKSx1cj1TLmJnQWN0aXZlUG9zaXN0aW9uO3BlLmZpbGxTdHlsZT0icmdiYSgiK010LmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzBdKyIsIitNdC5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrTXQuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK010LmNvcmUoImFjdGl2ZS1iZy1vcGFjaXR5IikudmFsdWUrIikiLHBlLmJlZ2luUGF0aCgpLHBlLmFyYyh1ci54LHVyLnksTXQuY29yZSgiYWN0aXZlLWJnLXNpemUiKS5wZlZhbHVlL0R0LDAsMipNYXRoLlBJKSxwZS5maWxsKCl9dmFyIHRyPU8ubGFzdFJlZHJhd1RpbWU7aWYoTy5zaG93RnBzJiZ0cil7dHI9TWF0aC5yb3VuZCh0cik7dmFyIHduPU1hdGgucm91bmQoMWUzL3RyKTtwZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHBlLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixwZS5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixwZS5saW5lV2lkdGg9MSxwZS5maWxsVGV4dCgiMSBmcmFtZSA9ICIrdHIrIiBtcyA9ICIrd24rIiBmcHMiLDAsMjApO3ZhciBncj02MDtwZS5zdHJva2VSZWN0KDAsMzAsMjUwLDIwKSxwZS5maWxsUmVjdCgwLDMwLDI1MCpNYXRoLm1pbih3bi9nciwxKSwyMCl9eHx8KEdbTy5TRUxFQ1RfQk9YXT0hMSl9aWYoZXQmJmF0IT09MSl7dmFyIGZyPVMuY29udGV4dHNbTy5OT0RFXSxKcj1PLmRhdGEuYnVmZmVyQ2FudmFzZXNbTy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSx3aT1TLmNvbnRleHRzW08uRFJBR10sS3M9Ty5kYXRhLmJ1ZmZlckNhbnZhc2VzW08uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10sa2E9ZnVuY3Rpb24oaGksZ3MscWkpe2hpLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscWl8fCFrdD9oaS5jbGVhclJlY3QoMCwwLE8uY2FudmFzV2lkdGgsTy5jYW52YXNIZWlnaHQpOmdlKGhpLDAsMCxPLmNhbnZhc1dpZHRoLE8uY2FudmFzSGVpZ2h0KTt2YXIgU2k9YXQ7aGkuZHJhd0ltYWdlKGdzLDAsMCxPLmNhbnZhc1dpZHRoKlNpLE8uY2FudmFzSGVpZ2h0KlNpLDAsMCxPLmNhbnZhc1dpZHRoLE8uY2FudmFzSGVpZ2h0KX07KEdbTy5OT0RFXXx8U25bTy5OT0RFXSkmJihrYShmcixKcixTbltPLk5PREVdKSxHW08uTk9ERV09ITEpLChHW08uRFJBR118fFNuW08uRFJBR10pJiYoa2Eod2ksS3MsU25bTy5EUkFHXSksR1tPLkRSQUddPSExKX1PLnByZXZWaWV3cG9ydD16dCxPLmNsZWFyaW5nTW90aW9uQmx1ciYmKE8uY2xlYXJpbmdNb3Rpb25CbHVyPSExLE8ubW90aW9uQmx1ckNsZWFyZWQ9ITAsTy5tb3Rpb25CbHVyPSEwKSxldCYmKE8ubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe08ubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxPLmNsZWFyZWRGb3JNb3Rpb25CbHVyW08uTk9ERV09ITEsTy5jbGVhcmVkRm9yTW90aW9uQmx1cltPLkRSQUddPSExLE8ubW90aW9uQmx1cj0hMSxPLmNsZWFyaW5nTW90aW9uQmx1cj0hVyxPLm1iRnJhbWVzPTAsR1tPLk5PREVdPSEwLEdbTy5EUkFHXT0hMCxPLnJlZHJhdygpfSxkcHQpKSxnfHxxLmVtaXQoInJlbmRlciIpfTt2YXIgSTM9e307STMuZHJhd1BvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSxEKXt2YXIgTz1ULzIsJD1BLzI7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oZytPKkRbMF0seCskKkRbMV0pO2Zvcih2YXIgcT0xO3E8RC5sZW5ndGgvMjtxKyspeS5saW5lVG8oZytPKkRbcSoyXSx4KyQqRFtxKjIrMV0pO3kuY2xvc2VQYXRoKCl9LEkzLmRyYXdSb3VuZFBvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSxEKXt2YXIgTz1ULzIsJD1BLzIscT1fTChULEEpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpO2Zvcih2YXIgUz0wO1M8RC5sZW5ndGgvNDtTKyspe3ZhciBHPXZvaWQgMCxXPXZvaWQgMDtTPT09MD9HPUQubGVuZ3RoLTI6Rz1TKjQtMixXPVMqNCsyO3ZhciBldD1nK08qRFtTKjRdLGF0PXgrJCpEW1MqNCsxXSxsdD0tRFtHXSpEW1ddLURbRysxXSpEW1crMV0sZnQ9cS9NYXRoLnRhbihNYXRoLmFjb3MobHQpLzIpLEF0PWV0LWZ0KkRbR10sa3Q9YXQtZnQqRFtHKzFdLE10PWV0K2Z0KkRbV10sRHQ9YXQrZnQqRFtXKzFdO1M9PT0wP3kubW92ZVRvKEF0LGt0KTp5LmxpbmVUbyhBdCxrdCkseS5hcmNUbyhldCxhdCxNdCxEdCxxKX15LmNsb3NlUGF0aCgpfSxJMy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9eGsoVCxBKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtTykseS5hcmNUbyhnK0QseC1PLGcrRCx4LCQpLHkuYXJjVG8oZytELHgrTyxnLHgrTywkKSx5LmFyY1RvKGctRCx4K08sZy1ELHgsJCkseS5hcmNUbyhnLUQseC1PLGcseC1PLCQpLHkubGluZVRvKGcseC1PKSx5LmNsb3NlUGF0aCgpfSxJMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9eGsoVCxBKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtTykseS5saW5lVG8oZytELHgtTykseS5saW5lVG8oZytELHgpLHkuYXJjVG8oZytELHgrTyxnLHgrTywkKSx5LmFyY1RvKGctRCx4K08sZy1ELHgsJCkseS5saW5lVG8oZy1ELHgtTykseS5saW5lVG8oZyx4LU8pLHkuY2xvc2VQYXRoKCl9LEkzLmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsQSl7dmFyIEQ9VC8yLE89QS8yLCQ9c0YoKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLUQrJCx4LU8pLHkubGluZVRvKGcrRC0kLHgtTykseS5saW5lVG8oZytELHgtTyskKSx5LmxpbmVUbyhnK0QseCtPLSQpLHkubGluZVRvKGcrRC0kLHgrTykseS5saW5lVG8oZy1EKyQseCtPKSx5LmxpbmVUbyhnLUQseCtPLSQpLHkubGluZVRvKGctRCx4LU8rJCkseS5jbG9zZVBhdGgoKX0sSTMuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxBKXt2YXIgRD1ULzIsTz1BLzIsJD1nLUQscT1nK0QsUz14LU8sRz14K08sVz1TTChULEEpLGV0PVcud2lkdGhPZmZzZXQsYXQ9Vy5oZWlnaHRPZmZzZXQsbHQ9Vy5jdHJsUHRPZmZzZXRQY3QqZXQ7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oJCxTK2F0KSx5LmxpbmVUbygkLEctYXQpLHkucXVhZHJhdGljQ3VydmVUbygkK2x0LEcsJCtldCxHKSx5LmxpbmVUbyhxLWV0LEcpLHkucXVhZHJhdGljQ3VydmVUbyhxLWx0LEcscSxHLWF0KSx5LmxpbmVUbyhxLFMrYXQpLHkucXVhZHJhdGljQ3VydmVUbyhxLWx0LFMscS1ldCxTKSx5LmxpbmVUbygkK2V0LFMpLHkucXVhZHJhdGljQ3VydmVUbygkK2x0LFMsJCxTK2F0KSx5LmNsb3NlUGF0aCgpfTtmb3IodmFyIFR0dD1NYXRoLnNpbigwKSxDdHQ9TWF0aC5jb3MoMCksUUI9e30sWkI9e30sX3R0PU1hdGguUEkvNDAsVms9MCpNYXRoLlBJO1ZrPDIqTWF0aC5QSTtWays9X3R0KVFCW1ZrXT1NYXRoLnNpbihWayksWkJbVmtdPU1hdGguY29zKFZrKTtJMy5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxBKXtpZih5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5LmVsbGlwc2UpeS5lbGxpcHNlKGcseCxULzIsQS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBELE8sJD1ULzIscT1BLzIsUz0wKk1hdGguUEk7UzwyKk1hdGguUEk7Uys9X3R0KUQ9Zy0kKlFCW1NdKlR0dCskKlpCW1NdKkN0dCxPPXgrcSpaQltTXSpUdHQrcSpRQltTXSpDdHQsUz09PTA/eS5tb3ZlVG8oRCxPKTp5LmxpbmVUbyhELE8pO3kuY2xvc2VQYXRoKCl9O3ZhciBFOT17fTtFOS5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oeSxnKXt2YXIgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4geC53aWR0aD15LHguaGVpZ2h0PWcsW3gseC5nZXRDb250ZXh0KCIyZCIpXX0sRTkuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5jeSx4PWcubXV0YWJsZUVsZW1lbnRzKCksVD14LmJvdW5kaW5nQm94KCksQT10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxEPXkuZnVsbD9NYXRoLmNlaWwoVC53KTpBWzJdLE89eS5mdWxsP01hdGguY2VpbChULmgpOkFbM10sJD1YKHkubWF4V2lkdGgpfHxYKHkubWF4SGVpZ2h0KSxxPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLFM9MTtpZih5LnNjYWxlIT09dm9pZCAwKUQqPXkuc2NhbGUsTyo9eS5zY2FsZSxTPXkuc2NhbGU7ZWxzZSBpZigkKXt2YXIgRz0xLzAsVz0xLzA7WCh5Lm1heFdpZHRoKSYmKEc9Uyp5Lm1heFdpZHRoL0QpLFgoeS5tYXhIZWlnaHQpJiYoVz1TKnkubWF4SGVpZ2h0L08pLFM9TWF0aC5taW4oRyxXKSxEKj1TLE8qPVN9JHx8KEQqPXEsTyo9cSxTKj1xKTt2YXIgZXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZXQud2lkdGg9RCxldC5oZWlnaHQ9TyxldC5zdHlsZS53aWR0aD1EKyJweCIsZXQuc3R5bGUuaGVpZ2h0PU8rInB4Ijt2YXIgYXQ9ZXQuZ2V0Q29udGV4dCgiMmQiKTtpZihEPjAmJk8+MCl7YXQuY2xlYXJSZWN0KDAsMCxELE8pLGF0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBsdD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoeS5mdWxsKWF0LnRyYW5zbGF0ZSgtVC54MSpTLC1ULnkxKlMpLGF0LnNjYWxlKFMsUyksdGhpcy5kcmF3RWxlbWVudHMoYXQsbHQpLGF0LnNjYWxlKDEvUywxL1MpLGF0LnRyYW5zbGF0ZShULngxKlMsVC55MSpTKTtlbHNle3ZhciBmdD1nLnBhbigpLEF0PXt4OmZ0LngqUyx5OmZ0LnkqU307Uyo9Zy56b29tKCksYXQudHJhbnNsYXRlKEF0LngsQXQueSksYXQuc2NhbGUoUyxTKSx0aGlzLmRyYXdFbGVtZW50cyhhdCxsdCksYXQuc2NhbGUoMS9TLDEvUyksYXQudHJhbnNsYXRlKC1BdC54LC1BdC55KX15LmJnJiYoYXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixhdC5maWxsU3R5bGU9eS5iZyxhdC5yZWN0KDAsMCxELE8pLGF0LmZpbGwoKSl9cmV0dXJuIGV0fTtmdW5jdGlvbiBncHQoeSxnKXtmb3IodmFyIHg9YXRvYih5KSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksQT1uZXcgVWludDhBcnJheShUKSxEPTA7RDx4Lmxlbmd0aDtEKyspQVtEXT14LmNoYXJDb2RlQXQoRCk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpnfSl9ZnVuY3Rpb24gU3R0KHkpe3ZhciBnPXkuaW5kZXhPZigiLCIpO3JldHVybiB5LnN1YnN0cihnKzEpfWZ1bmN0aW9uIEF0dCh5LGcseCl7dmFyIFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZy50b0RhdGFVUkwoeCx5LnF1YWxpdHkpfTtzd2l0Y2goeS5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IEs1KGZ1bmN0aW9uKEEsRCl7dHJ5e2cudG9CbG9iKGZ1bmN0aW9uKE8pe08hPW51bGw/QShPKTpEKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSx4LHkucXVhbGl0eSl9Y2F0Y2goTyl7RChPKX19KTtjYXNlImJsb2IiOnJldHVybiBncHQoU3R0KFQoKSkseCk7Y2FzZSJiYXNlNjQiOnJldHVybiBTdHQoVCgpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gVCgpfX1FOS5wbmc9ZnVuY3Rpb24oeSl7cmV0dXJuIEF0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL3BuZyIpfSxFOS5qcGc9ZnVuY3Rpb24oeSl7cmV0dXJuIEF0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL2pwZWciKX07dmFyIEx0dD17fTtMdHQubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih5LGcseCxULEEsRCxPKXtzd2l0Y2goeSl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZyx4LFQsQSxEKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChnLHgsVCxBLEQsTyk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChnLHgsVCxBLEQsTyk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZyx4LFQsQSxEKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChnLHgsVCxBLEQpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChnLHgsVCxBLEQpO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChnLHgsVCxBLEQpfX07dmFyIHBwdD1KQix3Yz1KQi5wcm90b3R5cGU7d2MuQ0FOVkFTX0xBWUVSUz0zLHdjLlNFTEVDVF9CT1g9MCx3Yy5EUkFHPTEsd2MuTk9ERT0yLHdjLkJVRkZFUl9DT1VOVD0zLHdjLlRFWFRVUkVfQlVGRkVSPTAsd2MuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLHdjLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBKQih5KXt2YXIgZz10aGlzO2cuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KHdjLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheSh3Yy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkod2MuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KHdjLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KHdjLkNBTlZBU19MQVlFUlMpfTt2YXIgeD0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixUPSJyZ2JhKDAsMCwwLDApIjtnLmRhdGEuY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBBPWcuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7Zy5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt4XT1ULEEucG9zaXRpb249InJlbGF0aXZlIixBLnpJbmRleD0iMCIsQS5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgRD15LmN5LmNvbnRhaW5lcigpO0QuYXBwZW5kQ2hpbGQoZy5kYXRhLmNhbnZhc0NvbnRhaW5lciksRC5zdHlsZVt4XT1UO3ZhciBPPXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07RnQoKSYmKE9bIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsT1sidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyICQ9MDskPHdjLkNBTlZBU19MQVlFUlM7JCsrKXt2YXIgcT1nLmRhdGEuY2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zy5kYXRhLmNvbnRleHRzWyRdPXEuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGZ1bmN0aW9uKHRyKXtxLnN0eWxlW3RyXT1PW3RyXX0pLHEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixxLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIiskKSxxLnN0eWxlLnpJbmRleD1TdHJpbmcod2MuQ0FOVkFTX0xBWUVSUy0kKSxnLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHEpLGcuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1skXT0hMX1nLmRhdGEudG9wQ2FudmFzPWcuZGF0YS5jYW52YXNlc1swXSxnLmRhdGEuY2FudmFzZXNbd2MuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK3djLk5PREUrIi1ub2RlIiksZy5kYXRhLmNhbnZhc2VzW3djLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit3Yy5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZy5kYXRhLmNhbnZhc2VzW3djLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit3Yy5EUkFHKyItZHJhZyIpO2Zvcih2YXIgJD0wOyQ8d2MuQlVGRkVSX0NPVU5UOyQrKylnLmRhdGEuYnVmZmVyQ2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZy5kYXRhLmJ1ZmZlckNvbnRleHRzWyRdPWcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5nZXRDb250ZXh0KCIyZCIpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJidWZmZXIiKyQpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS56SW5kZXg9U3RyaW5nKC0kLTEpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2cucGF0aHNFbmFibGVkPSEwO3ZhciBTPVJkKCksRz1mdW5jdGlvbih3bil7cmV0dXJue3g6KHduLngxK3duLngyKS8yLHk6KHduLnkxK3duLnkyKS8yfX0sVz1mdW5jdGlvbih3bil7cmV0dXJue3g6LXduLncvMix5Oi13bi5oLzJ9fSxldD1mdW5jdGlvbih3bil7dmFyIGdyPXduWzBdLl9wcml2YXRlLGZyPWdyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9PT1nci5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFmcn0sYXQ9ZnVuY3Rpb24od24pe3JldHVybiB3blswXS5fcHJpdmF0ZS5ub2RlS2V5fSxsdD1mdW5jdGlvbih3bil7cmV0dXJuIHduWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LGZ0PWZ1bmN0aW9uKHduKXtyZXR1cm4gd25bMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sQXQ9ZnVuY3Rpb24od24pe3JldHVybiB3blswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSxrdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnQod24sZ3IsZnIsITEsITEsd2kpfSxNdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHduLGdyLGZyLEpyLCJtYWluIix3aSl9LER0PWZ1bmN0aW9uKHduLGdyLGZyLEpyLHdpKXtyZXR1cm4gZy5kcmF3RWxlbWVudFRleHQod24sZ3IsZnIsSnIsInNvdXJjZSIsd2kpfSxqdD1mdW5jdGlvbih3bixncixmcixKcix3aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHduLGdyLGZyLEpyLCJ0YXJnZXQiLHdpKX0sWnQ9ZnVuY3Rpb24od24pe3JldHVybiB3bi5ib3VuZGluZ0JveCgpLHduWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LEt0PWZ1bmN0aW9uKHduKXtyZXR1cm4gd24uYm91bmRpbmdCb3goKSx3blswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxTfSx6dD1mdW5jdGlvbih3bil7cmV0dXJuIHduLmJvdW5kaW5nQm94KCksd25bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMuc291cmNlfHxTfSxlZT1mdW5jdGlvbih3bil7cmV0dXJuIHduLmJvdW5kaW5nQm94KCksd25bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxTfSxWdD1mdW5jdGlvbih3bixncil7cmV0dXJuIGdyfSxmZT1mdW5jdGlvbih3bil7cmV0dXJuIEcoWnQod24pKX0sZ2U9ZnVuY3Rpb24od24sZ3IsZnIpe3ZhciBKcj13bj93bisiLSI6IiI7cmV0dXJue3g6Z3IueCtmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6Z3IueStmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0sbmU9ZnVuY3Rpb24od24sZ3IsZnIpe3ZhciBKcj13blswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpKcltncl0seTpKcltmcl19fSxQZT1mdW5jdGlvbih3bil7cmV0dXJuIGdlKCIiLG5lKHduLCJsYWJlbFgiLCJsYWJlbFkiKSx3bil9LHBlPWZ1bmN0aW9uKHduKXtyZXR1cm4gZ2UoInNvdXJjZSIsbmUod24sInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLHduKX0sYm49ZnVuY3Rpb24od24pe3JldHVybiBnZSgidGFyZ2V0IixuZSh3biwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksd24pfSx6ZT1mdW5jdGlvbih3bil7cmV0dXJuIFcoWnQod24pKX0sVmU9ZnVuY3Rpb24od24pe3JldHVybiBXKHp0KHduKSl9LEVuPWZ1bmN0aW9uKHduKXtyZXR1cm4gVyhlZSh3bikpfSxEbj1mdW5jdGlvbih3bil7dmFyIGdyPUt0KHduKSxmcj1XKEt0KHduKSk7aWYod24uaXNOb2RlKCkpe3N3aXRjaCh3bi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6ZnIueD0tZ3IudzticmVhaztjYXNlInJpZ2h0Ijpmci54PTA7YnJlYWt9c3dpdGNoKHduLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOmZyLnk9LWdyLmg7YnJlYWs7Y2FzZSJib3R0b20iOmZyLnk9MDticmVha319cmV0dXJuIGZyfSxLbj1nLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IHprKGcse2dldEtleTphdCxkb2VzRWxlSW52YWxpZGF0ZUtleTpldCxkcmF3RWxlbWVudDprdCxnZXRCb3VuZGluZ0JveDpadCxnZXRSb3RhdGlvblBvaW50OmZlLGdldFJvdGF0aW9uT2Zmc2V0OnplLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksU249Zy5kYXRhLmxibFR4ckNhY2hlPW5ldyB6ayhnLHtnZXRLZXk6bHQsZHJhd0VsZW1lbnQ6TXQsZ2V0Qm91bmRpbmdCb3g6S3QsZ2V0Um90YXRpb25Qb2ludDpQZSxnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6VnR9KSxXbj1nLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IHprKGcse2dldEtleTpmdCxkcmF3RWxlbWVudDpEdCxnZXRCb3VuZGluZ0JveDp6dCxnZXRSb3RhdGlvblBvaW50OnBlLGdldFJvdGF0aW9uT2Zmc2V0OlZlLGlzVmlzaWJsZTpWdH0pLHJyPWcuZGF0YS50bGJUeHJDYWNoZT1uZXcgemsoZyx7Z2V0S2V5OkF0LGRyYXdFbGVtZW50Omp0LGdldEJvdW5kaW5nQm94OmVlLGdldFJvdGF0aW9uUG9pbnQ6Ym4sZ2V0Um90YXRpb25PZmZzZXQ6RW4saXNWaXNpYmxlOlZ0fSksdnI9Zy5kYXRhLmx5clR4ckNhY2hlPW5ldyB3dHQoZyk7Zy5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKHduLGdyKXtLbi5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLFNuLmludmFsaWRhdGVFbGVtZW50cyhnciksV24uaW52YWxpZGF0ZUVsZW1lbnRzKGdyKSxyci5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLHZyLmludmFsaWRhdGVFbGVtZW50cyhncik7Zm9yKHZhciBmcj0wO2ZyPGdyLmxlbmd0aDtmcisrKXt2YXIgSnI9Z3JbZnJdLl9wcml2YXRlO0pyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9SnIuYmFja2dyb3VuZFRpbWVzdGFtcH19KTt2YXIgdXI9ZnVuY3Rpb24od24pe2Zvcih2YXIgZ3I9MDtncjx3bi5sZW5ndGg7Z3IrKyl2ci5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQod25bZ3JdLmVsZSl9O0tuLm9uRGVxdWV1ZSh1ciksU24ub25EZXF1ZXVlKHVyKSxXbi5vbkRlcXVldWUodXIpLHJyLm9uRGVxdWV1ZSh1cil9d2MucmVkcmF3SGludD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXM7c3dpdGNoKHkpe2Nhc2UiZWxlcyI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3djLk5PREVdPWc7YnJlYWs7Y2FzZSJkcmFnIjp4LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbd2MuRFJBR109ZzticmVhaztjYXNlInNlbGVjdCI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3djLlNFTEVDVF9CT1hdPWc7YnJlYWt9fTt2YXIgTXR0PXR5cGVvZiBQYXRoMkQ8InUiO3djLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeSl7aWYoeT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF5fSx3Yy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiBNdHQmJnRoaXMucGF0aHNFbmFibGVkfSx3Yy5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeSxnKXt5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZD1nOih5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1nLHkubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWcseS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1nKX0sd2MuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZDp5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8eS5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHkubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9LHdjLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24oeSxnKXt2YXIgeDtyZXR1cm4odHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6ZihPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiP3g9bmV3IE9mZnNjcmVlbkNhbnZhcyh5LGcpOih4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHgud2lkdGg9eSx4LmhlaWdodD1nKSx4fSxbXzAsZ3YscHYsazksaHgsR2ssdmcsSTMsRTksTHR0XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe21lKHdjLHkpfSk7dmFyIGZ4PVt7bmFtZToibnVsbCIsaW1wbDpGQn0se25hbWU6ImJhc2UiLGltcGw6UUx9LHtuYW1lOiJjYW52YXMiLGltcGw6cHB0fV0sd2c9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6Skp9LHt0eXBlOiJyZW5kZXJlciIsZXh0ZW5zaW9uczpmeH1dLFRtPXt9LHJNPXt9O2Z1bmN0aW9uIGIxKHksZyx4KXt2YXIgVD14LEE9ZnVuY3Rpb24oZWUpe1NjKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2crImAgZm9yIGAiK3krImAgc2luY2UgYCIrZWUrImAgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHByb3RvdHlwZSBhbmQgY2FuIG5vdCBiZSBvdmVycmlkZGVuIil9O2lmKHk9PT0iY29yZSIpe2lmKEZrLnByb3RvdHlwZVtnXSlyZXR1cm4gQShnKTtGay5wcm90b3R5cGVbZ109eH1lbHNlIGlmKHk9PT0iY29sbGVjdGlvbiIpe2lmKGpmLnByb3RvdHlwZVtnXSlyZXR1cm4gQShnKTtqZi5wcm90b3R5cGVbZ109eH1lbHNlIGlmKHk9PT0ibGF5b3V0Iil7Zm9yKHZhciBEPWZ1bmN0aW9uKGVlKXt0aGlzLm9wdGlvbnM9ZWUseC5jYWxsKHRoaXMsZWUpLGh0KHRoaXMuX3ByaXZhdGUpfHwodGhpcy5fcHJpdmF0ZT17fSksdGhpcy5fcHJpdmF0ZS5jeT1lZS5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sTz1ELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHgucHJvdG90eXBlKSwkPVtdLHE9MDtxPCQubGVuZ3RoO3ErKyl7dmFyIFM9JFtxXTtPW1NdPU9bU118fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fU8uc3RhcnQmJiFPLnJ1bj9PLnJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0KCksdGhpc306IU8uc3RhcnQmJk8ucnVuJiYoTy5zdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJ1bigpLHRoaXN9KTt2YXIgRz14LnByb3RvdHlwZS5zdG9wO08uc3RvcD1mdW5jdGlvbigpe3ZhciB6dD10aGlzLm9wdGlvbnM7aWYoenQmJnp0LmFuaW1hdGUpe3ZhciBlZT10aGlzLmFuaW1hdGlvbnM7aWYoZWUpZm9yKHZhciBWdD0wO1Z0PGVlLmxlbmd0aDtWdCsrKWVlW1Z0XS5zdG9wKCl9cmV0dXJuIEc/Ry5jYWxsKHRoaXMpOnRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9LE8uZGVzdHJveXx8KE8uZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTy5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fTt2YXIgVz1mdW5jdGlvbihlZSl7cmV0dXJuIGVlLl9wcml2YXRlLmN5fSxldD17YWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZWUsVnQpe1Z0LmxheW91dD1lZSxWdC5jeT1XKGVlKSxWdC50YXJnZXQ9ZWV9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZWUpe3JldHVybiBXKGVlKX19O21lKE8se2NyZWF0ZUVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyPW5ldyBKVChldCx0aGlzKSx0aGlzfSxlbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sb246ZnVuY3Rpb24oZWUsVnQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlZSxWdCksdGhpc30sb25lOmZ1bmN0aW9uKGVlLFZ0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGVlLFZ0KSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGVlLFZ0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGVlLFZ0KSx0aGlzfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlZSxWdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKGVlLFZ0KSx0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sZW1pdDpmdW5jdGlvbihlZSxWdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLmVtaXQoZWUsVnQpLHRoaXN9fSksQWMuZXZlbnRBbGlhc2VzT24oTyksVD1EfWVsc2UgaWYoeT09PSJyZW5kZXJlciImJmchPT0ibnVsbCImJmchPT0iYmFzZSIpe3ZhciBhdD1keCgicmVuZGVyZXIiLCJiYXNlIiksbHQ9YXQucHJvdG90eXBlLGZ0PXgsQXQ9eC5wcm90b3R5cGUsa3Q9ZnVuY3Rpb24oKXthdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxNdD1rdC5wcm90b3R5cGU7Zm9yKHZhciBEdCBpbiBsdCl7dmFyIGp0PWx0W0R0XSxadD1BdFtEdF0hPW51bGw7aWYoWnQpcmV0dXJuIEEoRHQpO010W0R0XT1qdH1mb3IodmFyIEt0IGluIEF0KU10W0t0XT1BdFtLdF07bHQuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oenQpe010W3p0XT1NdFt6dF18fGZ1bmN0aW9uKCl7YmwoIlJlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuIit6dCsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxUPWt0fWVsc2UgaWYoeT09PSJfX3Byb3RvX18ifHx5PT09ImNvbnN0cnVjdG9yInx8eT09PSJwcm90b3R5cGUiKXJldHVybiBibCh5KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gRHIoe21hcDpUbSxrZXlzOlt5LGddLHZhbHVlOlR9KX1mdW5jdGlvbiBkeCh5LGcpe3JldHVybiBucih7bWFwOlRtLGtleXM6W3ksZ119KX1mdW5jdGlvbiBJdHQoeSxnLHgsVCxBKXtyZXR1cm4gRHIoe21hcDpyTSxrZXlzOlt5LGcseCxUXSx2YWx1ZTpBfSl9ZnVuY3Rpb24gdFIoeSxnLHgsVCl7cmV0dXJuIG5yKHttYXA6ck0sa2V5czpbeSxnLHgsVF19KX12YXIgRDM9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilyZXR1cm4gZHguYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBiMS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTQpcmV0dXJuIHRSLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NSlyZXR1cm4gSXR0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtibCgiSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheCIpfTtGay5wcm90b3R5cGUuZXh0ZW5zaW9uPUQzLHdnLmZvckVhY2goZnVuY3Rpb24oeSl7eS5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24oZyl7YjEoeS50eXBlLGcubmFtZSxnLmltcGwpfSl9KTt2YXIgaU09ZnVuY3Rpb24geSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeTt0aGlzLmxlbmd0aD0wfSxDbT1pTS5wcm90b3R5cGU7Q20uaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGVzaGVldCJ9LENtLnNlbGVjdG9yPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbZ109e3NlbGVjdG9yOnkscHJvcGVydGllczpbXX0sdGhpc30sQ20uY3NzPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5sZW5ndGgtMTtpZihtdCh5KSl0aGlzW3hdLnByb3BlcnRpZXMucHVzaCh7bmFtZTp5LHZhbHVlOmd9KTtlbHNlIGlmKGh0KHkpKWZvcih2YXIgVD15LEE9T2JqZWN0LmtleXMoVCksRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdLCQ9VFtPXTtpZigkIT1udWxsKXt2YXIgcT1kMS5wcm9wZXJ0aWVzW09dfHxkMS5wcm9wZXJ0aWVzW01lKE8pXTtpZihxIT1udWxsKXt2YXIgUz1xLm5hbWUsRz0kO3RoaXNbeF0ucHJvcGVydGllcy5wdXNoKHtuYW1lOlMsdmFsdWU6R30pfX19cmV0dXJuIHRoaXN9LENtLnN0eWxlPUNtLmNzcyxDbS5nZW5lcmF0ZVN0eWxlPWZ1bmN0aW9uKHkpe3ZhciBnPW5ldyBkMSh5KTtyZXR1cm4gdGhpcy5hcHBlbmRUb1N0eWxlKGcpfSxDbS5hcHBlbmRUb1N0eWxlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5zZWxlY3RvcixBPXgucHJvcGVydGllczt5LnNlbGVjdG9yKFQpO2Zvcih2YXIgRD0wO0Q8QS5sZW5ndGg7RCsrKXt2YXIgTz1BW0RdO3kuY3NzKE8ubmFtZSxPLnZhbHVlKX19cmV0dXJuIHl9O3ZhciBlUj0iMy4yMy4wIix2MT1mdW5jdGlvbihnKXtpZihnPT09dm9pZCAwJiYoZz17fSksaHQoZykpcmV0dXJuIG5ldyBGayhnKTtpZihtdChnKSlyZXR1cm4gRDMuYXBwbHkoRDMsYXJndW1lbnRzKX07cmV0dXJuIHYxLnVzZT1mdW5jdGlvbih5KXt2YXIgZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGcudW5zaGlmdCh2MSkseS5hcHBseShudWxsLGcpLHRoaXN9LHYxLndhcm5pbmdzPWZ1bmN0aW9uKHkpe3JldHVybiBXUCh5KX0sdjEudmVyc2lvbj1lUix2MS5zdHlsZXNoZWV0PXYxLlN0eWxlc2hlZXQ9aU0sdjF9KX0pKEtqdCk7dmFyIG9XZT1LanQuZXhwb3J0cztjb25zdCBZanQ9Qjcob1dlKTt2YXIgWGp0PXtleHBvcnRzOnt9fSxWZ3Q9e2V4cG9ydHM6e319LFVndD17ZXhwb3J0czp7fX0sUWp0O2Z1bmN0aW9uIGNXZSgpe3JldHVybiBRanR8fChRanQ9MSxmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHYpe2kuZXhwb3J0cz12KCl9KShkMCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihmKXt2YXIgcD17fTtmdW5jdGlvbiB2KG0pe2lmKHBbbV0pcmV0dXJuIHBbbV0uZXhwb3J0czt2YXIgYj1wW21dPXtpOm0sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZlttXS5jYWxsKGIuZXhwb3J0cyxiLGIuZXhwb3J0cyx2KSxiLmw9ITAsYi5leHBvcnRzfXJldHVybiB2Lm09Zix2LmM9cCx2Lmk9ZnVuY3Rpb24obSl7cmV0dXJuIG19LHYuZD1mdW5jdGlvbihtLGIsRSl7di5vKG0sYil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLGIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpFfSl9LHYubj1mdW5jdGlvbihtKXt2YXIgYj1tJiZtLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gbS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBtfTtyZXR1cm4gdi5kKGIsImEiLGIpLGJ9LHYubz1mdW5jdGlvbihtLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKX0sdi5wPSIiLHYodi5zPTI2KX0oW2Z1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKCl7fW0uUVVBTElUWT0xLG0uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG0uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxtLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxtLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG0uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbS5TSU1QTEVfTk9ERV9TSVpFPTQwLG0uU0lNUExFX05PREVfSEFMRl9TSVpFPW0uU0lNUExFX05PREVfU0laRS8yLG0uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG0uTUlOX0VER0VfTEVOR1RIPTEsbS5XT1JMRF9CT1VOREFSWT0xZTYsbS5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW0uV09STERfQk9VTkRBUlkvMWUzLG0uV09STERfQ0VOVEVSX1g9MTIwMCxtLldPUkxEX0NFTlRFUl9ZPTkwMCxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMiksYj12KDgpLEU9dig5KTtmdW5jdGlvbiBfKE4sQixqKXttLmNhbGwodGhpcyxqKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1qLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT1OLHRoaXMudGFyZ2V0PUJ9Xy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBMIGluIG0pX1tMXT1tW0xdO18ucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0sXy5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxfLnByb3RvdHlwZS5pc0ludGVyR3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludGVyR3JhcGh9LF8ucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sXy5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fSxfLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVuZHBvaW50c30sXy5wcm90b3R5cGUuZ2V0TGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGNhfSxfLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUluTGNhfSxfLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldEluTGNhfSxfLnByb3RvdHlwZS5nZXRPdGhlckVuZD1mdW5jdGlvbihOKXtpZih0aGlzLnNvdXJjZT09PU4pcmV0dXJuIHRoaXMudGFyZ2V0O2lmKHRoaXMudGFyZ2V0PT09TilyZXR1cm4gdGhpcy5zb3VyY2U7dGhyb3ciTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2UifSxfLnByb3RvdHlwZS5nZXRPdGhlckVuZEluR3JhcGg9ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9dGhpcy5nZXRPdGhlckVuZChOKSxSPUIuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpOzspe2lmKGouZ2V0T3duZXIoKT09QilyZXR1cm4gajtpZihqLmdldE93bmVyKCk9PVIpYnJlYWs7aj1qLmdldE93bmVyKCkuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9LF8ucHJvdG90eXBlLnVwZGF0ZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBOPW5ldyBBcnJheSg0KTt0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1iLmdldEludGVyc2VjdGlvbih0aGlzLnRhcmdldC5nZXRSZWN0KCksdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLE4pLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fHwodGhpcy5sZW5ndGhYPU5bMF0tTlsyXSx0aGlzLmxlbmd0aFk9TlsxXS1OWzNdLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1FLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPUUuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKSl9LF8ucHJvdG90eXBlLnVwZGF0ZUxlbmd0aFNpbXBsZT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoWD10aGlzLnRhcmdldC5nZXRDZW50ZXJYKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWCgpLHRoaXMubGVuZ3RoWT10aGlzLnRhcmdldC5nZXRDZW50ZXJZKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1FLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPUUuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKX0sZi5leHBvcnRzPV99LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIpe3RoaXMudkdyYXBoT2JqZWN0PWJ9Zi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDIpLGI9digxMCksRT12KDEzKSxfPXYoMCksTD12KDE2KSxOPXYoNCk7ZnVuY3Rpb24gQihSLHosSyxpdCl7Sz09bnVsbCYmaXQ9PW51bGwmJihpdD16KSxtLmNhbGwodGhpcyxpdCksUi5ncmFwaE1hbmFnZXIhPW51bGwmJihSPVIuZ3JhcGhNYW5hZ2VyKSx0aGlzLmVzdGltYXRlZFNpemU9Yi5NSU5fVkFMVUUsdGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9Yi5NQVhfVkFMVUUsdGhpcy52R3JhcGhPYmplY3Q9aXQsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1SLEshPW51bGwmJnohPW51bGw/dGhpcy5yZWN0PW5ldyBFKHoueCx6LnksSy53aWR0aCxLLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBFfUIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgaiBpbiBtKUJbal09bVtqXTtCLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxCLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkfSxCLnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyfSxCLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3Qud2lkdGh9LEIucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKFIpe3RoaXMucmVjdC53aWR0aD1SfSxCLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LmhlaWdodH0sQi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKFIpe3RoaXMucmVjdC5oZWlnaHQ9Un0sQi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMn0sQi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzJ9LEIucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTih0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzIpfSxCLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgTih0aGlzLnJlY3QueCx0aGlzLnJlY3QueSl9LEIucHJvdG90eXBlLmdldFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0fSxCLnByb3RvdHlwZS5nZXREaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQpfSxCLnByb3RvdHlwZS5nZXRIYWxmVGhlRGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCt0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoKS8yfSxCLnByb3RvdHlwZS5zZXRSZWN0PWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0Lng9Ui54LHRoaXMucmVjdC55PVIueSx0aGlzLnJlY3Qud2lkdGg9ei53aWR0aCx0aGlzLnJlY3QuaGVpZ2h0PXouaGVpZ2h0fSxCLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24oUix6KXt0aGlzLnJlY3QueD1SLXRoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55PXotdGhpcy5yZWN0LmhlaWdodC8yfSxCLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihSLHope3RoaXMucmVjdC54PVIsdGhpcy5yZWN0Lnk9en0sQi5wcm90b3R5cGUubW92ZUJ5PWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0LngrPVIsdGhpcy5yZWN0LnkrPXp9LEIucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlPWZ1bmN0aW9uKFIpe3ZhciB6PVtdLEs9dGhpcztyZXR1cm4gSy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtpZihpdC50YXJnZXQ9PVIpe2lmKGl0LnNvdXJjZSE9Syl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjt6LnB1c2goaXQpfX0pLHp9LEIucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihSKXt2YXIgej1bXSxLPXRoaXM7cmV0dXJuIEsuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihpdCl7aWYoIShpdC5zb3VyY2U9PUt8fGl0LnRhcmdldD09SykpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQiOyhpdC50YXJnZXQ9PVJ8fGl0LnNvdXJjZT09UikmJnoucHVzaChpdCl9KSx6fSxCLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0PWZ1bmN0aW9uKCl7dmFyIFI9bmV3IFNldCx6PXRoaXM7cmV0dXJuIHouZWRnZXMuZm9yRWFjaChmdW5jdGlvbihLKXtpZihLLnNvdXJjZT09eilSLmFkZChLLnRhcmdldCk7ZWxzZXtpZihLLnRhcmdldCE9eil0aHJvdyJJbmNvcnJlY3QgaW5jaWRlbmN5ISI7Ui5hZGQoSy5zb3VyY2UpfX0pLFJ9LEIucHJvdG90eXBlLndpdGhDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBSPW5ldyBTZXQseixLO2lmKFIuYWRkKHRoaXMpLHRoaXMuY2hpbGQhPW51bGwpZm9yKHZhciBpdD10aGlzLmNoaWxkLmdldE5vZGVzKCksc3Q9MDtzdDxpdC5sZW5ndGg7c3QrKyl6PWl0W3N0XSxLPXoud2l0aENoaWxkcmVuKCksSy5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtSLmFkZCh1dCl9KTtyZXR1cm4gUn0sQi5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIFI9MCx6O2lmKHRoaXMuY2hpbGQ9PW51bGwpUj0xO2Vsc2UgZm9yKHZhciBLPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxpdD0wO2l0PEsubGVuZ3RoO2l0Kyspej1LW2l0XSxSKz16LmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBSPT0wJiYoUj0xKSxSfSxCLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxCLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxCLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIFIseixLPS1fLklOSVRJQUxfV09STERfQk9VTkRBUlksaXQ9Xy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1I9Xy5XT1JMRF9DRU5URVJfWCtMLm5leHREb3VibGUoKSooaXQtSykrSzt2YXIgc3Q9LV8uSU5JVElBTF9XT1JMRF9CT1VOREFSWSx1dD1fLklOSVRJQUxfV09STERfQk9VTkRBUlk7ej1fLldPUkxEX0NFTlRFUl9ZK0wubmV4dERvdWJsZSgpKih1dC1zdCkrc3QsdGhpcy5yZWN0Lng9Uix0aGlzLnJlY3QueT16fSxCLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgUj10aGlzLmdldENoaWxkKCk7aWYoUi51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PVIuZ2V0TGVmdCgpLHRoaXMucmVjdC55PVIuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KFIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKSksXy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciB6PVIuZ2V0UmlnaHQoKS1SLmdldExlZnQoKSxLPVIuZ2V0Qm90dG9tKCktUi5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGg+eiYmKHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXopLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0PksmJih0aGlzLmxhYmVsUG9zPT0iY2VudGVyIj90aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtSykvMjp0aGlzLmxhYmVsUG9zPT0idG9wIiYmKHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LUspLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKX19fSxCLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09Yi5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxCLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5yZWN0Lng7ej5fLldPUkxEX0JPVU5EQVJZP3o9Xy5XT1JMRF9CT1VOREFSWTp6PC1fLldPUkxEX0JPVU5EQVJZJiYoej0tXy5XT1JMRF9CT1VOREFSWSk7dmFyIEs9dGhpcy5yZWN0Lnk7Sz5fLldPUkxEX0JPVU5EQVJZP0s9Xy5XT1JMRF9CT1VOREFSWTpLPC1fLldPUkxEX0JPVU5EQVJZJiYoSz0tXy5XT1JMRF9CT1VOREFSWSk7dmFyIGl0PW5ldyBOKHosSyksc3Q9Ui5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoaXQpO3RoaXMuc2V0TG9jYXRpb24oc3QueCxzdC55KX0sQi5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0sQi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxCLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LEIucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxCLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LGYuZXhwb3J0cz1CfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUpe2I9PW51bGwmJkU9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWIsdGhpcy55PUUpfW0ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxtLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihiKXt0aGlzLnk9Yn0sbS5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWIueCx0aGlzLnktYi55KX0sbS5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngrPWIud2lkdGgsdGhpcy55Kz1iLmhlaWdodCx0aGlzfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMiksYj12KDEwKSxFPXYoMCksXz12KDYpLEw9digzKSxOPXYoMSksQj12KDEzKSxqPXYoMTIpLFI9digxMSk7ZnVuY3Rpb24geihpdCxzdCx1dCl7bS5jYWxsKHRoaXMsdXQpLHRoaXMuZXN0aW1hdGVkU2l6ZT1iLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1FLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWl0LHN0IT1udWxsJiZzdCBpbnN0YW5jZW9mIF8/dGhpcy5ncmFwaE1hbmFnZXI9c3Q6c3QhPW51bGwmJnN0IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9c3QuZ3JhcGhNYW5hZ2VyKX16LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIEsgaW4gbSl6W0tdPW1bS107ei5wcm90b3R5cGUuZ2V0Tm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc30sei5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30sei5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSx6LnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LHoucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0fSx6LnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0fSx6LnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3B9LHoucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdHRvbX0sei5wcm90b3R5cGUuaXNDb25uZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZH0sei5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGl0LHN0LHV0KXtpZihzdD09bnVsbCYmdXQ9PW51bGwpe3ZhciBidD1pdDtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoYnQpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiBidC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKGJ0KSxidH1lbHNle3ZhciBtdD1pdDtpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHN0KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2YodXQpPi0xKSl0aHJvdyJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCEiO2lmKCEoc3Qub3duZXI9PXV0Lm93bmVyJiZzdC5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIHN0Lm93bmVyIT11dC5vd25lcj9udWxsOihtdC5zb3VyY2U9c3QsbXQudGFyZ2V0PXV0LG10LmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChtdCksc3QuZWRnZXMucHVzaChtdCksdXQhPXN0JiZ1dC5lZGdlcy5wdXNoKG10KSxtdCl9fSx6LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oaXQpe3ZhciBzdD1pdDtpZihpdCBpbnN0YW5jZW9mIEwpe2lmKHN0PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoc3Qub3duZXIhPW51bGwmJnN0Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB1dD1zdC5lZGdlcy5zbGljZSgpLGJ0LG10PXV0Lmxlbmd0aCx5dD0wO3l0PG10O3l0KyspYnQ9dXRbeXRdLGJ0LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoYnQpOmJ0LnNvdXJjZS5vd25lci5yZW1vdmUoYnQpO3ZhciBkdD10aGlzLm5vZGVzLmluZGV4T2Yoc3QpO2lmKGR0PT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShkdCwxKX1lbHNlIGlmKGl0IGluc3RhbmNlb2YgTil7dmFyIGJ0PWl0O2lmKGJ0PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoYnQuc291cmNlIT1udWxsJiZidC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGJ0LnNvdXJjZS5vd25lciE9bnVsbCYmYnQudGFyZ2V0Lm93bmVyIT1udWxsJiZidC5zb3VyY2Uub3duZXI9PXRoaXMmJmJ0LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciBodD1idC5zb3VyY2UuZWRnZXMuaW5kZXhPZihidCksd3Q9YnQudGFyZ2V0LmVkZ2VzLmluZGV4T2YoYnQpO2lmKCEoaHQ+LTEmJnd0Pi0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7YnQuc291cmNlLmVkZ2VzLnNwbGljZShodCwxKSxidC50YXJnZXQhPWJ0LnNvdXJjZSYmYnQudGFyZ2V0LmVkZ2VzLnNwbGljZSh3dCwxKTt2YXIgZHQ9YnQuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZihidCk7aWYoZHQ9PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO2J0LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShkdCwxKX19LHoucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3A9ZnVuY3Rpb24oKXtmb3IodmFyIGl0PWIuTUFYX1ZBTFVFLHN0PWIuTUFYX1ZBTFVFLHV0LGJ0LG10LHl0PXRoaXMuZ2V0Tm9kZXMoKSxkdD15dC5sZW5ndGgsaHQ9MDtodDxkdDtodCsrKXt2YXIgd3Q9eXRbaHRdO3V0PXd0LmdldFRvcCgpLGJ0PXd0LmdldExlZnQoKSxpdD51dCYmKGl0PXV0KSxzdD5idCYmKHN0PWJ0KX1yZXR1cm4gaXQ9PWIuTUFYX1ZBTFVFP251bGw6KHl0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP210PXl0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0Om10PXRoaXMubWFyZ2luLHRoaXMubGVmdD1zdC1tdCx0aGlzLnRvcD1pdC1tdCxuZXcgaih0aGlzLmxlZnQsdGhpcy50b3ApKX0sei5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIHN0PWIuTUFYX1ZBTFVFLHV0PS1iLk1BWF9WQUxVRSxidD1iLk1BWF9WQUxVRSxtdD0tYi5NQVhfVkFMVUUseXQsZHQsaHQsd3QsWCxwdD10aGlzLm5vZGVzLFU9cHQubGVuZ3RoLHh0PTA7eHQ8VTt4dCsrKXt2YXIgbnQ9cHRbeHRdO2l0JiZudC5jaGlsZCE9bnVsbCYmbnQudXBkYXRlQm91bmRzKCkseXQ9bnQuZ2V0TGVmdCgpLGR0PW50LmdldFJpZ2h0KCksaHQ9bnQuZ2V0VG9wKCksd3Q9bnQuZ2V0Qm90dG9tKCksc3Q+eXQmJihzdD15dCksdXQ8ZHQmJih1dD1kdCksYnQ+aHQmJihidD1odCksbXQ8d3QmJihtdD13dCl9dmFyIE90PW5ldyBCKHN0LGJ0LHV0LXN0LG10LWJ0KTtzdD09Yi5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSkscHRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/WD1wdFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpYPXRoaXMubWFyZ2luLHRoaXMubGVmdD1PdC54LVgsdGhpcy5yaWdodD1PdC54K090LndpZHRoK1gsdGhpcy50b3A9T3QueS1YLHRoaXMuYm90dG9tPU90LnkrT3QuaGVpZ2h0K1h9LHouY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKGl0KXtmb3IodmFyIHN0PWIuTUFYX1ZBTFVFLHV0PS1iLk1BWF9WQUxVRSxidD1iLk1BWF9WQUxVRSxtdD0tYi5NQVhfVkFMVUUseXQsZHQsaHQsd3QsWD1pdC5sZW5ndGgscHQ9MDtwdDxYO3B0Kyspe3ZhciBVPWl0W3B0XTt5dD1VLmdldExlZnQoKSxkdD1VLmdldFJpZ2h0KCksaHQ9VS5nZXRUb3AoKSx3dD1VLmdldEJvdHRvbSgpLHN0Pnl0JiYoc3Q9eXQpLHV0PGR0JiYodXQ9ZHQpLGJ0Pmh0JiYoYnQ9aHQpLG10PHd0JiYobXQ9d3QpfXZhciB4dD1uZXcgQihzdCxidCx1dC1zdCxtdC1idCk7cmV0dXJuIHh0fSx6LnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHoucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHoucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBpdD0wLHN0PXRoaXMubm9kZXMsdXQ9c3QubGVuZ3RoLGJ0PTA7YnQ8dXQ7YnQrKyl7dmFyIG10PXN0W2J0XTtpdCs9bXQuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gaXQ9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPUUuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1pdC9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0sei5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciBzdD1uZXcgUix1dD1uZXcgU2V0LGJ0PXRoaXMubm9kZXNbMF0sbXQseXQsZHQ9YnQud2l0aENoaWxkcmVuKCk7Zm9yKGR0LmZvckVhY2goZnVuY3Rpb24oeHQpe3N0LnB1c2goeHQpLHV0LmFkZCh4dCl9KTtzdC5sZW5ndGghPT0wOyl7YnQ9c3Quc2hpZnQoKSxtdD1idC5nZXRFZGdlcygpO2Zvcih2YXIgaHQ9bXQubGVuZ3RoLHd0PTA7d3Q8aHQ7d3QrKyl7dmFyIFg9bXRbd3RdO2lmKHl0PVguZ2V0T3RoZXJFbmRJbkdyYXBoKGJ0LHRoaXMpLHl0IT1udWxsJiYhdXQuaGFzKHl0KSl7dmFyIHB0PXl0LndpdGhDaGlsZHJlbigpO3B0LmZvckVhY2goZnVuY3Rpb24oeHQpe3N0LnB1c2goeHQpLHV0LmFkZCh4dCl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdXQuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBVPTA7dXQuZm9yRWFjaChmdW5jdGlvbih4dCl7eHQub3duZXI9PWl0JiZVKyt9KSxVPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sZi5leHBvcnRzPXp9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbSxiPXYoMSk7ZnVuY3Rpb24gRShfKXttPXYoNSksdGhpcy5sYXlvdXQ9Xyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfUUucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmxheW91dC5uZXdHcmFwaCgpLEw9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSxOPXRoaXMuYWRkKF8sTCk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKE4pLHRoaXMucm9vdEdyYXBofSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oXyxMLE4sQixqKXtpZihOPT1udWxsJiZCPT1udWxsJiZqPT1udWxsKXtpZihfPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihMPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKF8pPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKF8pLF8ucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYoTC5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIF8ucGFyZW50PUwsTC5jaGlsZD1fLF99ZWxzZXtqPU4sQj1MLE49Xzt2YXIgUj1CLmdldE93bmVyKCksej1qLmdldE93bmVyKCk7aWYoIShSIT1udWxsJiZSLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoISh6IT1udWxsJiZ6LmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoUj09eilyZXR1cm4gTi5pc0ludGVyR3JhcGg9ITEsUi5hZGQoTixCLGopO2lmKE4uaXNJbnRlckdyYXBoPSEwLE4uc291cmNlPUIsTi50YXJnZXQ9aix0aGlzLmVkZ2VzLmluZGV4T2YoTik+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaChOKSwhKE4uc291cmNlIT1udWxsJiZOLnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShOLnNvdXJjZS5lZGdlcy5pbmRleE9mKE4pPT0tMSYmTi50YXJnZXQuZWRnZXMuaW5kZXhPZihOKT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiBOLnNvdXJjZS5lZGdlcy5wdXNoKE4pLE4udGFyZ2V0LmVkZ2VzLnB1c2goTiksTn19LEUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihfKXtpZihfIGluc3RhbmNlb2YgbSl7dmFyIEw9XztpZihMLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShMPT10aGlzLnJvb3RHcmFwaHx8TC5wYXJlbnQhPW51bGwmJkwucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciBOPVtdO049Ti5jb25jYXQoTC5nZXRFZGdlcygpKTtmb3IodmFyIEIsaj1OLmxlbmd0aCxSPTA7UjxqO1IrKylCPU5bUl0sTC5yZW1vdmUoQik7dmFyIHo9W107ej16LmNvbmNhdChMLmdldE5vZGVzKCkpO3ZhciBLO2o9ei5sZW5ndGg7Zm9yKHZhciBSPTA7UjxqO1IrKylLPXpbUl0sTC5yZW1vdmUoSyk7TD09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBpdD10aGlzLmdyYXBocy5pbmRleE9mKEwpO3RoaXMuZ3JhcGhzLnNwbGljZShpdCwxKSxMLnBhcmVudD1udWxsfWVsc2UgaWYoXyBpbnN0YW5jZW9mIGIpe2lmKEI9XyxCPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFCLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoQi5zb3VyY2UhPW51bGwmJkIudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShCLnNvdXJjZS5lZGdlcy5pbmRleE9mKEIpIT0tMSYmQi50YXJnZXQuZWRnZXMuaW5kZXhPZihCKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgaXQ9Qi5zb3VyY2UuZWRnZXMuaW5kZXhPZihCKTtpZihCLnNvdXJjZS5lZGdlcy5zcGxpY2UoaXQsMSksaXQ9Qi50YXJnZXQuZWRnZXMuaW5kZXhPZihCKSxCLnRhcmdldC5lZGdlcy5zcGxpY2UoaXQsMSksIShCLnNvdXJjZS5vd25lciE9bnVsbCYmQi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoQi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihCKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgaXQ9Qi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihCKTtCLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoaXQsMSl9fSxFLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxFLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LEUucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBfPVtdLEw9dGhpcy5nZXRHcmFwaHMoKSxOPUwubGVuZ3RoLEI9MDtCPE47QisrKV89Xy5jb25jYXQoTFtCXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPV99cmV0dXJuIHRoaXMuYWxsTm9kZXN9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LEUucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LEUucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7dmFyIF89W10sTD10aGlzLmdldEdyYXBocygpO0wubGVuZ3RoO2Zvcih2YXIgTj0wO048TC5sZW5ndGg7TisrKV89Xy5jb25jYXQoTFtOXS5nZXRFZGdlcygpKTtfPV8uY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9X31yZXR1cm4gdGhpcy5hbGxFZGdlc30sRS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sRS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oXyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPV99LEUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LEUucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihfKXtpZihfLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9XyxfLnBhcmVudD09bnVsbCYmKF8ucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sRS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxFLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihfLEwpe2lmKCEoXyE9bnVsbCYmTCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYoXz09TClyZXR1cm4hMDt2YXIgTj1fLmdldE93bmVyKCksQjtkb3tpZihCPU4uZ2V0UGFyZW50KCksQj09bnVsbClicmVhaztpZihCPT1MKXJldHVybiEwO2lmKE49Qi5nZXRPd25lcigpLE49PW51bGwpYnJlYWt9d2hpbGUoITApO049TC5nZXRPd25lcigpO2Rve2lmKEI9Ti5nZXRQYXJlbnQoKSxCPT1udWxsKWJyZWFrO2lmKEI9PV8pcmV0dXJuITA7aWYoTj1CLmdldE93bmVyKCksTj09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIF8sTCxOLEIsaixSPXRoaXMuZ2V0QWxsRWRnZXMoKSx6PVIubGVuZ3RoLEs9MDtLPHo7SysrKXtpZihfPVJbS10sTD1fLnNvdXJjZSxOPV8udGFyZ2V0LF8ubGNhPW51bGwsXy5zb3VyY2VJbkxjYT1MLF8udGFyZ2V0SW5MY2E9TixMPT1OKXtfLmxjYT1MLmdldE93bmVyKCk7Y29udGludWV9Zm9yKEI9TC5nZXRPd25lcigpO18ubGNhPT1udWxsOyl7Zm9yKF8udGFyZ2V0SW5MY2E9TixqPU4uZ2V0T3duZXIoKTtfLmxjYT09bnVsbDspe2lmKGo9PUIpe18ubGNhPWo7YnJlYWt9aWYoaj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYoXy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7Xy50YXJnZXRJbkxjYT1qLmdldFBhcmVudCgpLGo9Xy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKEI9PXRoaXMucm9vdEdyYXBoKWJyZWFrO18ubGNhPT1udWxsJiYoXy5zb3VyY2VJbkxjYT1CLmdldFBhcmVudCgpLEI9Xy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihfLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LEUucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihfLEwpe2lmKF89PUwpcmV0dXJuIF8uZ2V0T3duZXIoKTt2YXIgTj1fLmdldE93bmVyKCk7ZG97aWYoTj09bnVsbClicmVhazt2YXIgQj1MLmdldE93bmVyKCk7ZG97aWYoQj09bnVsbClicmVhaztpZihCPT1OKXJldHVybiBCO0I9Qi5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtOPU4uZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIE59LEUucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKF8sTCl7Xz09bnVsbCYmTD09bnVsbCYmKF89dGhpcy5yb290R3JhcGgsTD0xKTtmb3IodmFyIE4sQj1fLmdldE5vZGVzKCksaj1CLmxlbmd0aCxSPTA7UjxqO1IrKylOPUJbUl0sTi5pbmNsdXNpb25UcmVlRGVwdGg9TCxOLmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKE4uY2hpbGQsTCsxKX0sRS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgXyxMPXRoaXMuZWRnZXMubGVuZ3RoLE49MDtOPEw7TisrKWlmKF89dGhpcy5lZGdlc1tOXSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKF8uc291cmNlLF8udGFyZ2V0KSlyZXR1cm4hMDtyZXR1cm4hMX0sZi5leHBvcnRzPUV9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDApO2Z1bmN0aW9uIGIoKXt9Zm9yKHZhciBFIGluIG0pYltFXT1tW0VdO2IuTUFYX0lURVJBVElPTlM9MjUwMCxiLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsYi5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsYi5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGIuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGIuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsYi5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGIuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsYi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGIuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsYi5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGIuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxiLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9Yi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxiLk1JTl9SRVBVTFNJT05fRElTVD1iLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsYi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGIuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxiLk1JTl9FREdFX0xFTkdUSD0xLGIuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEyKTtmdW5jdGlvbiBiKCl7fWIuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oRSxfLEwsTil7aWYoIUUuaW50ZXJzZWN0cyhfKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgQj1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhFLF8sQiksTFswXT1NYXRoLm1pbihFLmdldFJpZ2h0KCksXy5nZXRSaWdodCgpKS1NYXRoLm1heChFLngsXy54KSxMWzFdPU1hdGgubWluKEUuZ2V0Qm90dG9tKCksXy5nZXRCb3R0b20oKSktTWF0aC5tYXgoRS55LF8ueSksRS5nZXRYKCk8PV8uZ2V0WCgpJiZFLmdldFJpZ2h0KCk+PV8uZ2V0UmlnaHQoKT9MWzBdKz1NYXRoLm1pbihfLmdldFgoKS1FLmdldFgoKSxFLmdldFJpZ2h0KCktXy5nZXRSaWdodCgpKTpfLmdldFgoKTw9RS5nZXRYKCkmJl8uZ2V0UmlnaHQoKT49RS5nZXRSaWdodCgpJiYoTFswXSs9TWF0aC5taW4oRS5nZXRYKCktXy5nZXRYKCksXy5nZXRSaWdodCgpLUUuZ2V0UmlnaHQoKSkpLEUuZ2V0WSgpPD1fLmdldFkoKSYmRS5nZXRCb3R0b20oKT49Xy5nZXRCb3R0b20oKT9MWzFdKz1NYXRoLm1pbihfLmdldFkoKS1FLmdldFkoKSxFLmdldEJvdHRvbSgpLV8uZ2V0Qm90dG9tKCkpOl8uZ2V0WSgpPD1FLmdldFkoKSYmXy5nZXRCb3R0b20oKT49RS5nZXRCb3R0b20oKSYmKExbMV0rPU1hdGgubWluKEUuZ2V0WSgpLV8uZ2V0WSgpLF8uZ2V0Qm90dG9tKCktRS5nZXRCb3R0b20oKSkpO3ZhciBqPU1hdGguYWJzKChfLmdldENlbnRlclkoKS1FLmdldENlbnRlclkoKSkvKF8uZ2V0Q2VudGVyWCgpLUUuZ2V0Q2VudGVyWCgpKSk7Xy5nZXRDZW50ZXJZKCk9PT1FLmdldENlbnRlclkoKSYmXy5nZXRDZW50ZXJYKCk9PT1FLmdldENlbnRlclgoKSYmKGo9MSk7dmFyIFI9aipMWzBdLHo9TFsxXS9qO0xbMF08ej96PUxbMF06Uj1MWzFdLExbMF09LTEqQlswXSooei8yK04pLExbMV09LTEqQlsxXSooUi8yK04pfSxiLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKEUsXyxMKXtFLmdldENlbnRlclgoKTxfLmdldENlbnRlclgoKT9MWzBdPS0xOkxbMF09MSxFLmdldENlbnRlclkoKTxfLmdldENlbnRlclkoKT9MWzFdPS0xOkxbMV09MX0sYi5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKEUsXyxMKXt2YXIgTj1FLmdldENlbnRlclgoKSxCPUUuZ2V0Q2VudGVyWSgpLGo9Xy5nZXRDZW50ZXJYKCksUj1fLmdldENlbnRlclkoKTtpZihFLmludGVyc2VjdHMoXykpcmV0dXJuIExbMF09TixMWzFdPUIsTFsyXT1qLExbM109UiwhMDt2YXIgej1FLmdldFgoKSxLPUUuZ2V0WSgpLGl0PUUuZ2V0UmlnaHQoKSxzdD1FLmdldFgoKSx1dD1FLmdldEJvdHRvbSgpLGJ0PUUuZ2V0UmlnaHQoKSxtdD1FLmdldFdpZHRoSGFsZigpLHl0PUUuZ2V0SGVpZ2h0SGFsZigpLGR0PV8uZ2V0WCgpLGh0PV8uZ2V0WSgpLHd0PV8uZ2V0UmlnaHQoKSxYPV8uZ2V0WCgpLHB0PV8uZ2V0Qm90dG9tKCksVT1fLmdldFJpZ2h0KCkseHQ9Xy5nZXRXaWR0aEhhbGYoKSxudD1fLmdldEhlaWdodEhhbGYoKSxPdD0hMSxOdD0hMTtpZihOPT09ail7aWYoQj5SKXJldHVybiBMWzBdPU4sTFsxXT1LLExbMl09aixMWzNdPXB0LCExO2lmKEI8UilyZXR1cm4gTFswXT1OLExbMV09dXQsTFsyXT1qLExbM109aHQsITF9ZWxzZSBpZihCPT09Uil7aWYoTj5qKXJldHVybiBMWzBdPXosTFsxXT1CLExbMl09d3QsTFszXT1SLCExO2lmKE48ailyZXR1cm4gTFswXT1pdCxMWzFdPUIsTFsyXT1kdCxMWzNdPVIsITF9ZWxzZXt2YXIgcXQ9RS5oZWlnaHQvRS53aWR0aCxDdD1fLmhlaWdodC9fLndpZHRoLFo9KFItQikvKGotTiksVHQ9dm9pZCAwLEh0PXZvaWQgMCxJdD12b2lkIDAsRnQ9dm9pZCAwLGtlPXZvaWQgMCxwbj12b2lkIDA7aWYoLXF0PT09Wj9OPmo/KExbMF09c3QsTFsxXT11dCxPdD0hMCk6KExbMF09aXQsTFsxXT1LLE90PSEwKTpxdD09PVomJihOPmo/KExbMF09eixMWzFdPUssT3Q9ITApOihMWzBdPWJ0LExbMV09dXQsT3Q9ITApKSwtQ3Q9PT1aP2o+Tj8oTFsyXT1YLExbM109cHQsTnQ9ITApOihMWzJdPXd0LExbM109aHQsTnQ9ITApOkN0PT09WiYmKGo+Tj8oTFsyXT1kdCxMWzNdPWh0LE50PSEwKTooTFsyXT1VLExbM109cHQsTnQ9ITApKSxPdCYmTnQpcmV0dXJuITE7aWYoTj5qP0I+Uj8oVHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihxdCxaLDQpLEh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQ3QsWiwyKSk6KFR0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXF0LFosMyksSHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtQ3QsWiwxKSk6Qj5SPyhUdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1xdCxaLDEpLEh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUN0LFosMykpOihUdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHF0LFosMiksSHQ9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDdCxaLDQpKSwhT3Qpc3dpdGNoKFR0KXtjYXNlIDE6RnQ9SyxJdD1OKy15dC9aLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDI6SXQ9YnQsRnQ9QittdCpaLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDM6RnQ9dXQsSXQ9Tit5dC9aLExbMF09SXQsTFsxXT1GdDticmVhaztjYXNlIDQ6SXQ9c3QsRnQ9QistbXQqWixMWzBdPUl0LExbMV09RnQ7YnJlYWt9aWYoIU50KXN3aXRjaChIdCl7Y2FzZSAxOnBuPWh0LGtlPWorLW50L1osTFsyXT1rZSxMWzNdPXBuO2JyZWFrO2Nhc2UgMjprZT1VLHBuPVIreHQqWixMWzJdPWtlLExbM109cG47YnJlYWs7Y2FzZSAzOnBuPXB0LGtlPWorbnQvWixMWzJdPWtlLExbM109cG47YnJlYWs7Y2FzZSA0OmtlPVgscG49UisteHQqWixMWzJdPWtlLExbM109cG47YnJlYWt9fXJldHVybiExfSxiLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKEUsXyxMKXtyZXR1cm4gRT5fP0w6MStMJTR9LGIuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKEUsXyxMLE4pe2lmKE49PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihFLF8sTCk7dmFyIEI9RS54LGo9RS55LFI9Xy54LHo9Xy55LEs9TC54LGl0PUwueSxzdD1OLngsdXQ9Ti55LGJ0PXZvaWQgMCxtdD12b2lkIDAseXQ9dm9pZCAwLGR0PXZvaWQgMCxodD12b2lkIDAsd3Q9dm9pZCAwLFg9dm9pZCAwLHB0PXZvaWQgMCxVPXZvaWQgMDtyZXR1cm4geXQ9ei1qLGh0PUItUixYPVIqai1CKnosZHQ9dXQtaXQsd3Q9Sy1zdCxwdD1zdCppdC1LKnV0LFU9eXQqd3QtZHQqaHQsVT09PTA/bnVsbDooYnQ9KGh0KnB0LXd0KlgpL1UsbXQ9KGR0KlgteXQqcHQpL1UsbmV3IG0oYnQsbXQpKX0sYi5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKEUsXyxMLE4pe3ZhciBCPXZvaWQgMDtyZXR1cm4gRSE9PUw/KEI9TWF0aC5hdGFuKChOLV8pLyhMLUUpKSxMPEU/Qis9TWF0aC5QSTpOPF8mJihCKz10aGlzLlRXT19QSSkpOk48Xz9CPXRoaXMuT05FX0FORF9IQUxGX1BJOkI9dGhpcy5IQUxGX1BJLEJ9LGIuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oRSxfLEwsTil7dmFyIEI9RS54LGo9RS55LFI9Xy54LHo9Xy55LEs9TC54LGl0PUwueSxzdD1OLngsdXQ9Ti55LGJ0PShSLUIpKih1dC1pdCktKHN0LUspKih6LWopO2lmKGJ0PT09MClyZXR1cm4hMTt2YXIgbXQ9KCh1dC1pdCkqKHN0LUIpKyhLLXN0KSoodXQtaikpL2J0LHl0PSgoai16KSooc3QtQikrKFItQikqKHV0LWopKS9idDtyZXR1cm4gMDxtdCYmbXQ8MSYmMDx5dCYmeXQ8MX0sYi5IQUxGX1BJPS41Kk1hdGguUEksYi5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksYi5UV09fUEk9MipNYXRoLlBJLGIuVEhSRUVfUEk9MypNYXRoLlBJLGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe31tLnNpZ249ZnVuY3Rpb24oYil7cmV0dXJuIGI+MD8xOmI8MD8tMTowfSxtLmZsb29yPWZ1bmN0aW9uKGIpe3JldHVybiBiPDA/TWF0aC5jZWlsKGIpOk1hdGguZmxvb3IoYil9LG0uY2VpbD1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguZmxvb3IoYik6TWF0aC5jZWlsKGIpfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt9bS5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxtLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQihqLFIpe2Zvcih2YXIgej0wO3o8Ui5sZW5ndGg7eisrKXt2YXIgSz1SW3pdO0suZW51bWVyYWJsZT1LLmVudW1lcmFibGV8fCExLEsuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBLJiYoSy53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosSy5rZXksSyl9fXJldHVybiBmdW5jdGlvbihqLFIseil7cmV0dXJuIFImJkIoai5wcm90b3R5cGUsUikseiYmQihqLHopLGp9fSgpO2Z1bmN0aW9uIGIoQixqKXtpZighKEIgaW5zdGFuY2VvZiBqKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT1mdW5jdGlvbihqKXtyZXR1cm57dmFsdWU6aixuZXh0Om51bGwscHJldjpudWxsfX0sXz1mdW5jdGlvbihqLFIseixLKXtyZXR1cm4gaiE9PW51bGw/ai5uZXh0PVI6Sy5oZWFkPVIseiE9PW51bGw/ei5wcmV2PVI6Sy50YWlsPVIsUi5wcmV2PWosUi5uZXh0PXosSy5sZW5ndGgrKyxSfSxMPWZ1bmN0aW9uKGosUil7dmFyIHo9ai5wcmV2LEs9ai5uZXh0O3JldHVybiB6IT09bnVsbD96Lm5leHQ9SzpSLmhlYWQ9SyxLIT09bnVsbD9LLnByZXY9ejpSLnRhaWw9eixqLnByZXY9ai5uZXh0PW51bGwsUi5sZW5ndGgtLSxqfSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQihqKXt2YXIgUj10aGlzO2IodGhpcyxCKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGohPW51bGwmJmouZm9yRWFjaChmdW5jdGlvbih6KXtyZXR1cm4gUi5wdXNoKHopfSl9cmV0dXJuIG0oQixbe2tleToic2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9fSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKFIseil7cmV0dXJuIF8oei5wcmV2LEUoUikseix0aGlzKX19LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHosRShSKSx6Lm5leHQsdGhpcyl9fSx7a2V5OiJpbnNlcnROb2RlQmVmb3JlIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHoucHJldixSLHosdGhpcyl9fSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOmZ1bmN0aW9uKFIseil7cmV0dXJuIF8oeixSLHoubmV4dCx0aGlzKX19LHtrZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFIpe3JldHVybiBfKHRoaXMudGFpbCxFKFIpLG51bGwsdGhpcyl9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gXyhudWxsLEUoUiksdGhpcy5oZWFkLHRoaXMpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gTChSLHRoaXMpfX0se2tleToicG9wIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBMKHRoaXMudGFpbCx0aGlzKS52YWx1ZX19LHtrZXk6InBvcE5vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy50YWlsLHRoaXMpfX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5oZWFkLHRoaXMpLnZhbHVlfX0se2tleToic2hpZnROb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBMKHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6ImdldF9vYmplY3RfYXQiLHZhbHVlOmZ1bmN0aW9uKFIpe2lmKFI8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgej0xLEs9dGhpcy5oZWFkO3o8UjspSz1LLm5leHQseisrO3JldHVybiBLLnZhbHVlfX19LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOmZ1bmN0aW9uKFIseil7aWYoUjw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBLPTEsaXQ9dGhpcy5oZWFkO0s8UjspaXQ9aXQubmV4dCxLKys7aXQudmFsdWU9en19fV0pLEJ9KCk7Zi5leHBvcnRzPU59LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIsRSxfKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxiPT1udWxsJiZFPT1udWxsJiZfPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGI9PSJudW1iZXIiJiZ0eXBlb2YgRT09Im51bWJlciImJl89PW51bGw/KHRoaXMueD1iLHRoaXMueT1FKTpiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJkU9PW51bGwmJl89PW51bGwmJihfPWIsdGhpcy54PV8ueCx0aGlzLnk9Xy55KX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtKHRoaXMueCx0aGlzLnkpfSxtLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihiLEUsXyl7Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZFPT1udWxsJiZfPT1udWxsPyhfPWIsdGhpcy5zZXRMb2NhdGlvbihfLngsXy55KSk6dHlwZW9mIGI9PSJudW1iZXIiJiZ0eXBlb2YgRT09Im51bWJlciImJl89PW51bGwmJihwYXJzZUludChiKT09YiYmcGFyc2VJbnQoRSk9PUU/dGhpcy5tb3ZlKGIsRSk6KHRoaXMueD1NYXRoLmZsb29yKGIrLjUpLHRoaXMueT1NYXRoLmZsb29yKEUrLjUpKSl9LG0ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYixFKXt0aGlzLng9Yix0aGlzLnk9RX0sbS5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGIsRSl7dGhpcy54Kz1iLHRoaXMueSs9RX0sbS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGIpe2lmKGIuY29uc3RydWN0b3IubmFtZT09IlBvaW50Iil7dmFyIEU9YjtyZXR1cm4gdGhpcy54PT1FLngmJnRoaXMueT09RS55fXJldHVybiB0aGlzPT1ifSxtLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgbSgpLmNvbnN0cnVjdG9yLm5hbWUrIlt4PSIrdGhpcy54KyIseT0iK3RoaXMueSsiXSJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbShiLEUsXyxMKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxiIT1udWxsJiZFIT1udWxsJiZfIT1udWxsJiZMIT1udWxsJiYodGhpcy54PWIsdGhpcy55PUUsdGhpcy53aWR0aD1fLHRoaXMuaGVpZ2h0PUwpfW0ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxtLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGIpe3RoaXMueD1ifSxtLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbS5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihiKXt0aGlzLnk9Yn0sbS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oYil7dGhpcy53aWR0aD1ifSxtLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG0ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihiKXt0aGlzLmhlaWdodD1ifSxtLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihiKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxiLnh8fHRoaXMuZ2V0Qm90dG9tKCk8Yi55fHxiLmdldFJpZ2h0KCk8dGhpcy54fHxiLmdldEJvdHRvbSgpPHRoaXMueSl9LG0ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbS5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbS5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxtLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxtLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxtLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxtLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdil7dmFyIG09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oRSl7cmV0dXJuIHR5cGVvZiBFfTpmdW5jdGlvbihFKXtyZXR1cm4gRSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmRS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIEV9O2Z1bmN0aW9uIGIoKXt9Yi5sYXN0SUQ9MCxiLmNyZWF0ZUlEPWZ1bmN0aW9uKEUpe3JldHVybiBiLmlzUHJpbWl0aXZlKEUpP0U6KEUudW5pcXVlSUQhPW51bGx8fChFLnVuaXF1ZUlEPWIuZ2V0U3RyaW5nKCksYi5sYXN0SUQrKyksRS51bmlxdWVJRCl9LGIuZ2V0U3RyaW5nPWZ1bmN0aW9uKEUpe3JldHVybiBFPT1udWxsJiYoRT1iLmxhc3RJRCksIk9iamVjdCMiK0V9LGIuaXNQcmltaXRpdmU9ZnVuY3Rpb24oRSl7dmFyIF89dHlwZW9mIEU+InUiPyJ1bmRlZmluZWQiOm0oRSk7cmV0dXJuIEU9PW51bGx8fF8hPSJvYmplY3QiJiZfIT0iZnVuY3Rpb24ifSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oSyl7aWYoQXJyYXkuaXNBcnJheShLKSl7Zm9yKHZhciBpdD0wLHN0PUFycmF5KEsubGVuZ3RoKTtpdDxLLmxlbmd0aDtpdCsrKXN0W2l0XT1LW2l0XTtyZXR1cm4gc3R9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShLKX12YXIgYj12KDApLEU9dig2KSxfPXYoMyksTD12KDEpLE49dig1KSxCPXYoNCksaj12KDE3KSxSPXYoMjcpO2Z1bmN0aW9uIHooSyl7Ui5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1iLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWIuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9Yi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBFKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsSyE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9Syl9ei5SQU5ET01fU0VFRD0xLHoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpLHoucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0sei5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKX0sei5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKX0sei5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKX0sei5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIEs9bmV3IEUodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPUssS30sei5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBOKG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsSyl9LHoucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBfKHRoaXMuZ3JhcGhNYW5hZ2VyLEspfSx6LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgTChudWxsLG51bGwsSyl9LHoucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk9PW51bGx8fHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aD09MHx8dGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpfSx6LnByb3RvdHlwZS5ydW5MYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy50aWxpbmdQcmVMYXlvdXQmJnRoaXMudGlsaW5nUHJlTGF5b3V0KCksdGhpcy5pbml0UGFyYW1ldGVycygpO3ZhciBLO3JldHVybiB0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpP0s9ITE6Sz10aGlzLmxheW91dCgpLGIuQU5JTUFURT09PSJkdXJpbmciPyExOihLJiYodGhpcy5pc1N1YkxheW91dHx8dGhpcy5kb1Bvc3RMYXlvdXQoKSksdGhpcy50aWxpbmdQb3N0TGF5b3V0JiZ0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITAsSyl9LHoucHJvdG90eXBlLmRvUG9zdExheW91dD1mdW5jdGlvbigpe3RoaXMuaW5jcmVtZW50YWx8fHRoaXMudHJhbnNmb3JtKCksdGhpcy51cGRhdGUoKX0sei5wcm90b3R5cGUudXBkYXRlMj1mdW5jdGlvbigpe2lmKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSwhdGhpcy5pc1JlbW90ZVVzZSl7Zm9yKHZhciBLPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCksaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKUtbaXRdO2Zvcih2YXIgc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksaXQ9MDtpdDxzdC5sZW5ndGg7aXQrKylzdFtpdF07dGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKX19LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihLKXtpZihLPT1udWxsKXRoaXMudXBkYXRlMigpO2Vsc2UgaWYoSyBpbnN0YW5jZW9mIF8pe3ZhciBpdD1LO2lmKGl0LmdldENoaWxkKCkhPW51bGwpZm9yKHZhciBzdD1pdC5nZXRDaGlsZCgpLmdldE5vZGVzKCksdXQ9MDt1dDxzdC5sZW5ndGg7dXQrKyl1cGRhdGUoc3RbdXRdKTtpZihpdC52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBidD1pdC52R3JhcGhPYmplY3Q7YnQudXBkYXRlKGl0KX19ZWxzZSBpZihLIGluc3RhbmNlb2YgTCl7dmFyIG10PUs7aWYobXQudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgeXQ9bXQudkdyYXBoT2JqZWN0O3l0LnVwZGF0ZShtdCl9fWVsc2UgaWYoSyBpbnN0YW5jZW9mIE4pe3ZhciBkdD1LO2lmKGR0LnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGh0PWR0LnZHcmFwaE9iamVjdDtodC51cGRhdGUoZHQpfX19LHoucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5pc1N1YkxheW91dHx8KHRoaXMubGF5b3V0UXVhbGl0eT1iLlFVQUxJVFksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWIuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9Yi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5pbmNyZW1lbnRhbD1iLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9Yi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTKSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmKHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9ITEpfSx6LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnRyYW5zZm9ybShuZXcgQigwLDApKTtlbHNle3ZhciBpdD1uZXcgaixzdD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHN0IT1udWxsKXtpdC5zZXRXb3JsZE9yZ1goSy54KSxpdC5zZXRXb3JsZE9yZ1koSy55KSxpdC5zZXREZXZpY2VPcmdYKHN0LngpLGl0LnNldERldmljZU9yZ1koc3QueSk7Zm9yKHZhciB1dD10aGlzLmdldEFsbE5vZGVzKCksYnQsbXQ9MDttdDx1dC5sZW5ndGg7bXQrKylidD11dFttdF0sYnQudHJhbnNmb3JtKGl0KX19fSx6LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgaXQsc3QsdXQ9Sy5nZXROb2RlcygpLGJ0PTA7YnQ8dXQubGVuZ3RoO2J0KyspaXQ9dXRbYnRdLHN0PWl0LmdldENoaWxkKCksc3Q9PW51bGx8fHN0LmdldE5vZGVzKCkubGVuZ3RoPT0wP2l0LnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoc3QpLGl0LnVwZGF0ZUJvdW5kcygpKX0sei5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgSz1bXSxpdD0hMCxzdD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx1dD0hMCxidD0wO2J0PHN0Lmxlbmd0aDtidCsrKXN0W2J0XS5nZXRDaGlsZCgpIT1udWxsJiYodXQ9ITEpO2lmKCF1dClyZXR1cm4gSzt2YXIgbXQ9bmV3IFNldCx5dD1bXSxkdD1uZXcgTWFwLGh0PVtdO2ZvcihodD1odC5jb25jYXQoc3QpO2h0Lmxlbmd0aD4wJiZpdDspe2Zvcih5dC5wdXNoKGh0WzBdKTt5dC5sZW5ndGg+MCYmaXQ7KXt2YXIgd3Q9eXRbMF07eXQuc3BsaWNlKDAsMSksbXQuYWRkKHd0KTtmb3IodmFyIFg9d3QuZ2V0RWRnZXMoKSxidD0wO2J0PFgubGVuZ3RoO2J0Kyspe3ZhciBwdD1YW2J0XS5nZXRPdGhlckVuZCh3dCk7aWYoZHQuZ2V0KHd0KSE9cHQpaWYoIW10LmhhcyhwdCkpeXQucHVzaChwdCksZHQuc2V0KHB0LHd0KTtlbHNle2l0PSExO2JyZWFrfX19aWYoIWl0KUs9W107ZWxzZXt2YXIgVT1bXS5jb25jYXQobShtdCkpO0sucHVzaChVKTtmb3IodmFyIGJ0PTA7YnQ8VS5sZW5ndGg7YnQrKyl7dmFyIHh0PVVbYnRdLG50PWh0LmluZGV4T2YoeHQpO250Pi0xJiZodC5zcGxpY2UobnQsMSl9bXQ9bmV3IFNldCxkdD1uZXcgTWFwfX1yZXR1cm4gS30sei5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHM9ZnVuY3Rpb24oSyl7Zm9yKHZhciBpdD1bXSxzdD1LLnNvdXJjZSx1dD10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IoSy5zb3VyY2UsSy50YXJnZXQpLGJ0PTA7YnQ8Sy5iZW5kcG9pbnRzLmxlbmd0aDtidCsrKXt2YXIgbXQ9dGhpcy5uZXdOb2RlKG51bGwpO210LnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx1dC5hZGQobXQpO3ZhciB5dD10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHl0LHN0LG10KSxpdC5hZGQobXQpLHN0PW10fXZhciB5dD10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5dCxzdCxLLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChLLGl0KSxLLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShLKTp1dC5yZW1vdmUoSyksaXR9LHoucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBLPVtdO0s9Sy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksSz1bXS5jb25jYXQobSh0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KEspO2Zvcih2YXIgaXQ9MDtpdDxLLmxlbmd0aDtpdCsrKXt2YXIgc3Q9S1tpdF07aWYoc3QuYmVuZHBvaW50cy5sZW5ndGg+MCl7Zm9yKHZhciB1dD10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHN0KSxidD0wO2J0PHV0Lmxlbmd0aDtidCsrKXt2YXIgbXQ9dXRbYnRdLHl0PW5ldyBCKG10LmdldENlbnRlclgoKSxtdC5nZXRDZW50ZXJZKCkpLGR0PXN0LmJlbmRwb2ludHMuZ2V0KGJ0KTtkdC54PXl0LngsZHQueT15dC55LG10LmdldE93bmVyKCkucmVtb3ZlKG10KX10aGlzLmdyYXBoTWFuYWdlci5hZGQoc3Qsc3Quc291cmNlLHN0LnRhcmdldCl9fX0sei50cmFuc2Zvcm09ZnVuY3Rpb24oSyxpdCxzdCx1dCl7aWYoc3QhPW51bGwmJnV0IT1udWxsKXt2YXIgYnQ9aXQ7aWYoSzw9NTApe3ZhciBtdD1pdC9zdDtidC09KGl0LW10KS81MCooNTAtSyl9ZWxzZXt2YXIgeXQ9aXQqdXQ7YnQrPSh5dC1pdCkvNTAqKEstNTApfXJldHVybiBidH1lbHNle3ZhciBkdCxodDtyZXR1cm4gSzw9NTA/KGR0PTkqaXQvNTAwLGh0PWl0LzEwKTooZHQ9OSppdC81MCxodD0tOCppdCksZHQqSytodH19LHouZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihLKXt2YXIgaXQ9W107aXQ9aXQuY29uY2F0KEspO3ZhciBzdD1bXSx1dD1uZXcgTWFwLGJ0PSExLG10PW51bGw7KGl0Lmxlbmd0aD09MXx8aXQubGVuZ3RoPT0yKSYmKGJ0PSEwLG10PWl0WzBdKTtmb3IodmFyIHl0PTA7eXQ8aXQubGVuZ3RoO3l0Kyspe3ZhciBkdD1pdFt5dF0saHQ9ZHQuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7dXQuc2V0KGR0LGR0LmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSxodD09MSYmc3QucHVzaChkdCl9dmFyIHd0PVtdO2Zvcih3dD13dC5jb25jYXQoc3QpOyFidDspe3ZhciBYPVtdO1g9WC5jb25jYXQod3QpLHd0PVtdO2Zvcih2YXIgeXQ9MDt5dDxpdC5sZW5ndGg7eXQrKyl7dmFyIGR0PWl0W3l0XSxwdD1pdC5pbmRleE9mKGR0KTtwdD49MCYmaXQuc3BsaWNlKHB0LDEpO3ZhciBVPWR0LmdldE5laWdoYm9yc0xpc3QoKTtVLmZvckVhY2goZnVuY3Rpb24oT3Qpe2lmKHN0LmluZGV4T2YoT3QpPDApe3ZhciBOdD11dC5nZXQoT3QpLHF0PU50LTE7cXQ9PTEmJnd0LnB1c2goT3QpLHV0LnNldChPdCxxdCl9fSl9c3Q9c3QuY29uY2F0KHd0KSwoaXQubGVuZ3RoPT0xfHxpdC5sZW5ndGg9PTIpJiYoYnQ9ITAsbXQ9aXRbMF0pfXJldHVybiBtdH0sei5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKEspe3RoaXMuZ3JhcGhNYW5hZ2VyPUt9LGYuZXhwb3J0cz16fSxmdW5jdGlvbihmLHAsdil7ZnVuY3Rpb24gbSgpe31tLnNlZWQ9MSxtLng9MCxtLm5leHREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbS54PU1hdGguc2luKG0uc2VlZCsrKSoxZTQsbS54LU1hdGguZmxvb3IobS54KX0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDQpO2Z1bmN0aW9uIGIoRSxfKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9Yi5wcm90b3R5cGUuZ2V0V29ybGRPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWH0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdYPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkT3JnWD1FfSxiLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdZfSxiLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oRSl7dGhpcy5sd29ybGRPcmdZPUV9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFh9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WD1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZEV4dFg9RX0sYi5wcm90b3R5cGUuZ2V0V29ybGRFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WX0sYi5wcm90b3R5cGUuc2V0V29ybGRFeHRZPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkRXh0WT1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1h9LGIucHJvdG90eXBlLnNldERldmljZU9yZ1g9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlT3JnWD1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1l9LGIucHJvdG90eXBlLnNldERldmljZU9yZ1k9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlT3JnWT1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFh9LGIucHJvdG90eXBlLnNldERldmljZUV4dFg9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlRXh0WD1FfSxiLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFl9LGIucHJvdG90eXBlLnNldERldmljZUV4dFk9ZnVuY3Rpb24oRSl7dGhpcy5sZGV2aWNlRXh0WT1FfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1YPWZ1bmN0aW9uKEUpe3ZhciBfPTAsTD10aGlzLmx3b3JsZEV4dFg7cmV0dXJuIEwhPTAmJihfPXRoaXMubGRldmljZU9yZ1grKEUtdGhpcy5sd29ybGRPcmdYKSp0aGlzLmxkZXZpY2VFeHRYL0wpLF99LGIucHJvdG90eXBlLnRyYW5zZm9ybVk9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubHdvcmxkRXh0WTtyZXR1cm4gTCE9MCYmKF89dGhpcy5sZGV2aWNlT3JnWSsoRS10aGlzLmx3b3JsZE9yZ1kpKnRoaXMubGRldmljZUV4dFkvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVg9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubGRldmljZUV4dFg7cmV0dXJuIEwhPTAmJihfPXRoaXMubHdvcmxkT3JnWCsoRS10aGlzLmxkZXZpY2VPcmdYKSp0aGlzLmx3b3JsZEV4dFgvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVk9ZnVuY3Rpb24oRSl7dmFyIF89MCxMPXRoaXMubGRldmljZUV4dFk7cmV0dXJuIEwhPTAmJihfPXRoaXMubHdvcmxkT3JnWSsoRS10aGlzLmxkZXZpY2VPcmdZKSp0aGlzLmx3b3JsZEV4dFkvTCksX30sYi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKEUpe3ZhciBfPW5ldyBtKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoRS54KSx0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKEUueSkpO3JldHVybiBffSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oUil7aWYoQXJyYXkuaXNBcnJheShSKSl7Zm9yKHZhciB6PTAsSz1BcnJheShSLmxlbmd0aCk7ejxSLmxlbmd0aDt6KyspS1t6XT1SW3pdO3JldHVybiBLfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oUil9dmFyIGI9digxNSksRT12KDcpLF89digwKSxMPXYoOCksTj12KDkpO2Z1bmN0aW9uIEIoKXtiLmNhbGwodGhpcyksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPUUuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5pZGVhbEVkZ2VMZW5ndGg9RS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMuc3ByaW5nQ29uc3RhbnQ9RS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PUUuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9RS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1FLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqRS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLmNvb2xpbmdGYWN0b3I9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5tYXhJdGVyYXRpb25zPUUuTUFYX0lURVJBVElPTlN9Qi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBqIGluIGIpQltqXT1iW2pdO0IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1FLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LEIucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHosSyxpdCxzdCx1dCxidD10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksbXQ9MDttdDxidC5sZW5ndGg7bXQrKylSPWJ0W210XSxSLmlkZWFsTGVuZ3RoPXRoaXMuaWRlYWxFZGdlTGVuZ3RoLFIuaXNJbnRlckdyYXBoJiYoSz1SLmdldFNvdXJjZSgpLGl0PVIuZ2V0VGFyZ2V0KCksc3Q9Ui5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx1dD1SLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKFIuaWRlYWxMZW5ndGgrPXN0K3V0LTIqXy5TSU1QTEVfTk9ERV9TSVpFKSx6PVIuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksUi5pZGVhbExlbmd0aCs9RS5ERUZBVUxUX0VER0VfTEVOR1RIKkUuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiooSy5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKStpdC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKnopKX0sQi5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhSPkUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvcipFLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShSLUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oRS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1FLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PUUuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooUj5FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKFItRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhFLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PUUuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LEIucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5nZXRBbGxFZGdlcygpLHosSz0wO0s8Ui5sZW5ndGg7SysrKXo9UltLXSx0aGlzLmNhbGNTcHJpbmdGb3JjZSh6LHouaWRlYWxMZW5ndGgpfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIFI9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHo9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLEssaXQsc3QsdXQsYnQ9dGhpcy5nZXRBbGxOb2RlcygpLG10O2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlRS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmUiYmdGhpcy51cGRhdGVHcmlkKCksbXQ9bmV3IFNldCxLPTA7SzxidC5sZW5ndGg7SysrKXN0PWJ0W0tdLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHN0LG10LFIseiksbXQuYWRkKHN0KTtlbHNlIGZvcihLPTA7SzxidC5sZW5ndGg7SysrKWZvcihzdD1idFtLXSxpdD1LKzE7aXQ8YnQubGVuZ3RoO2l0KyspdXQ9YnRbaXRdLHN0LmdldE93bmVyKCk9PXV0LmdldE93bmVyKCkmJnRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKHN0LHV0KX0sQi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFIsej10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksSz0wO0s8ei5sZW5ndGg7SysrKVI9eltLXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoUil9LEIucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgUj10aGlzLmdldEFsbE5vZGVzKCkseixLPTA7SzxSLmxlbmd0aDtLKyspej1SW0tdLHoubW92ZSgpfSxCLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oUix6KXt2YXIgSz1SLmdldFNvdXJjZSgpLGl0PVIuZ2V0VGFyZ2V0KCksc3QsdXQsYnQsbXQ7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmSy5nZXRDaGlsZCgpPT1udWxsJiZpdC5nZXRDaGlsZCgpPT1udWxsKVIudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihSLnVwZGF0ZUxlbmd0aCgpLFIuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjtzdD1SLmdldExlbmd0aCgpLHN0IT0wJiYodXQ9dGhpcy5zcHJpbmdDb25zdGFudCooc3QteiksYnQ9dXQqKFIubGVuZ3RoWC9zdCksbXQ9dXQqKFIubGVuZ3RoWS9zdCksSy5zcHJpbmdGb3JjZVgrPWJ0LEsuc3ByaW5nRm9yY2VZKz1tdCxpdC5zcHJpbmdGb3JjZVgtPWJ0LGl0LnNwcmluZ0ZvcmNlWS09bXQpfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oUix6KXt2YXIgSz1SLmdldFJlY3QoKSxpdD16LmdldFJlY3QoKSxzdD1uZXcgQXJyYXkoMiksdXQ9bmV3IEFycmF5KDQpLGJ0LG10LHl0LGR0LGh0LHd0LFg7aWYoSy5pbnRlcnNlY3RzKGl0KSl7TC5jYWxjU2VwYXJhdGlvbkFtb3VudChLLGl0LHN0LEUuREVGQVVMVF9FREdFX0xFTkdUSC8yKSx3dD0yKnN0WzBdLFg9MipzdFsxXTt2YXIgcHQ9Ui5ub09mQ2hpbGRyZW4qei5ub09mQ2hpbGRyZW4vKFIubm9PZkNoaWxkcmVuK3oubm9PZkNoaWxkcmVuKTtSLnJlcHVsc2lvbkZvcmNlWC09cHQqd3QsUi5yZXB1bHNpb25Gb3JjZVktPXB0Klgsei5yZXB1bHNpb25Gb3JjZVgrPXB0Knd0LHoucmVwdWxzaW9uRm9yY2VZKz1wdCpYfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmUi5nZXRDaGlsZCgpPT1udWxsJiZ6LmdldENoaWxkKCk9PW51bGw/KGJ0PWl0LmdldENlbnRlclgoKS1LLmdldENlbnRlclgoKSxtdD1pdC5nZXRDZW50ZXJZKCktSy5nZXRDZW50ZXJZKCkpOihMLmdldEludGVyc2VjdGlvbihLLGl0LHV0KSxidD11dFsyXS11dFswXSxtdD11dFszXS11dFsxXSksTWF0aC5hYnMoYnQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYnQ9Ti5zaWduKGJ0KSpFLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMobXQpPEUuTUlOX1JFUFVMU0lPTl9ESVNUJiYobXQ9Ti5zaWduKG10KSpFLk1JTl9SRVBVTFNJT05fRElTVCkseXQ9YnQqYnQrbXQqbXQsZHQ9TWF0aC5zcXJ0KHl0KSxodD10aGlzLnJlcHVsc2lvbkNvbnN0YW50KlIubm9PZkNoaWxkcmVuKnoubm9PZkNoaWxkcmVuL3l0LHd0PWh0KmJ0L2R0LFg9aHQqbXQvZHQsUi5yZXB1bHNpb25Gb3JjZVgtPXd0LFIucmVwdWxzaW9uRm9yY2VZLT1YLHoucmVwdWxzaW9uRm9yY2VYKz13dCx6LnJlcHVsc2lvbkZvcmNlWSs9WH0sQi5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihSKXt2YXIgeixLLGl0LHN0LHV0LGJ0LG10LHl0O3o9Ui5nZXRPd25lcigpLEs9KHouZ2V0UmlnaHQoKSt6LmdldExlZnQoKSkvMixpdD0oei5nZXRUb3AoKSt6LmdldEJvdHRvbSgpKS8yLHN0PVIuZ2V0Q2VudGVyWCgpLUssdXQ9Ui5nZXRDZW50ZXJZKCktaXQsYnQ9TWF0aC5hYnMoc3QpK1IuZ2V0V2lkdGgoKS8yLG10PU1hdGguYWJzKHV0KStSLmdldEhlaWdodCgpLzIsUi5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KHl0PXouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLChidD55dHx8bXQ+eXQpJiYoUi5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqc3QsUi5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdXQpKTooeXQ9ei5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoYnQ+eXR8fG10Pnl0KSYmKFIuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnN0KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsUi5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdXQqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxCLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBSLHo9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYoej1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLFI9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxSfHx6fSxCLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxCLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFIsej10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEs9MDtLPHoubGVuZ3RoO0srKylSPXpbS10sUi5ub09mQ2hpbGRyZW49Ui5nZXROb09mQ2hpbGRyZW4oKX0sQi5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oUil7dmFyIHo9MCxLPTA7ej1wYXJzZUludChNYXRoLmNlaWwoKFIuZ2V0UmlnaHQoKS1SLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLEs9cGFyc2VJbnQoTWF0aC5jZWlsKChSLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGl0PW5ldyBBcnJheSh6KSxzdD0wO3N0PHo7c3QrKylpdFtzdF09bmV3IEFycmF5KEspO2Zvcih2YXIgc3Q9MDtzdDx6O3N0KyspZm9yKHZhciB1dD0wO3V0PEs7dXQrKylpdFtzdF1bdXRdPW5ldyBBcnJheTtyZXR1cm4gaXR9LEIucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQ9ZnVuY3Rpb24oUix6LEspe3ZhciBpdD0wLHN0PTAsdXQ9MCxidD0wO2l0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLngteikvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHN0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLndpZHRoK1IuZ2V0UmVjdCgpLngteikvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHV0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLnktSykvdGhpcy5yZXB1bHNpb25SYW5nZSkpLGJ0PXBhcnNlSW50KE1hdGguZmxvb3IoKFIuZ2V0UmVjdCgpLmhlaWdodCtSLmdldFJlY3QoKS55LUspL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIG10PWl0O210PD1zdDttdCsrKWZvcih2YXIgeXQ9dXQ7eXQ8PWJ0O3l0KyspdGhpcy5ncmlkW210XVt5dF0ucHVzaChSKSxSLnNldEdyaWRDb29yZGluYXRlcyhpdCxzdCx1dCxidCl9LEIucHJvdG90eXBlLnVwZGF0ZUdyaWQ9ZnVuY3Rpb24oKXt2YXIgUix6LEs9dGhpcy5nZXRBbGxOb2RlcygpO2Zvcih0aGlzLmdyaWQ9dGhpcy5jYWxjR3JpZCh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpLFI9MDtSPEsubGVuZ3RoO1IrKyl6PUtbUl0sdGhpcy5hZGROb2RlVG9HcmlkKHosdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldExlZnQoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpfSxCLnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGU9ZnVuY3Rpb24oUix6LEssaXQpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJUUuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJkt8fGl0KXt2YXIgc3Q9bmV3IFNldDtSLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIHV0LGJ0PXRoaXMuZ3JpZCxtdD1SLnN0YXJ0WC0xO210PFIuZmluaXNoWCsyO210KyspZm9yKHZhciB5dD1SLnN0YXJ0WS0xO3l0PFIuZmluaXNoWSsyO3l0KyspaWYoIShtdDwwfHx5dDwwfHxtdD49YnQubGVuZ3RofHx5dD49YnRbMF0ubGVuZ3RoKSl7Zm9yKHZhciBkdD0wO2R0PGJ0W210XVt5dF0ubGVuZ3RoO2R0KyspaWYodXQ9YnRbbXRdW3l0XVtkdF0sIShSLmdldE93bmVyKCkhPXV0LmdldE93bmVyKCl8fFI9PXV0KSYmIXouaGFzKHV0KSYmIXN0Lmhhcyh1dCkpe3ZhciBodD1NYXRoLmFicyhSLmdldENlbnRlclgoKS11dC5nZXRDZW50ZXJYKCkpLShSLmdldFdpZHRoKCkvMit1dC5nZXRXaWR0aCgpLzIpLHd0PU1hdGguYWJzKFIuZ2V0Q2VudGVyWSgpLXV0LmdldENlbnRlclkoKSktKFIuZ2V0SGVpZ2h0KCkvMit1dC5nZXRIZWlnaHQoKS8yKTtodDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmd3Q8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnN0LmFkZCh1dCl9fVIuc3Vycm91bmRpbmc9W10uY29uY2F0KG0oc3QpKX1mb3IobXQ9MDttdDxSLnN1cnJvdW5kaW5nLmxlbmd0aDttdCsrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKFIsUi5zdXJyb3VuZGluZ1ttdF0pfSxCLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZi5leHBvcnRzPUJ9LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDEpLGI9dig3KTtmdW5jdGlvbiBFKEwsTixCKXttLmNhbGwodGhpcyxMLE4sQiksdGhpcy5pZGVhbExlbmd0aD1iLkRFRkFVTFRfRURHRV9MRU5HVEh9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIG0pRVtfXT1tW19dO2YuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdil7dmFyIG09digzKTtmdW5jdGlvbiBiKF8sTCxOLEIpe20uY2FsbCh0aGlzLF8sTCxOLEIpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIEUgaW4gbSliW0VdPW1bRV07Yi5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKF8sTCxOLEIpe3RoaXMuc3RhcnRYPV8sdGhpcy5maW5pc2hYPUwsdGhpcy5zdGFydFk9Tix0aGlzLmZpbmlzaFk9Qn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx2KXtmdW5jdGlvbiBtKGIsRSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9PW51bGwmJkUhPT1udWxsJiYodGhpcy5oZWlnaHQ9RSx0aGlzLndpZHRoPWIpfW0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT12KDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfWIucHJvdG90eXBlLnB1dD1mdW5jdGlvbihFLF8pe3ZhciBMPW0uY3JlYXRlSUQoRSk7dGhpcy5jb250YWlucyhMKXx8KHRoaXMubWFwW0xdPV8sdGhpcy5rZXlzLnB1c2goRSkpfSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXtyZXR1cm4gbS5jcmVhdGVJRChFKSx0aGlzLm1hcFtFXSE9bnVsbH0sYi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKEUpe3ZhciBfPW0uY3JlYXRlSUQoRSk7cmV0dXJuIHRoaXMubWFwW19dfSxiLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPXYoMTQpO2Z1bmN0aW9uIGIoKXt0aGlzLnNldD17fX1iLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oRSl7dmFyIF89bS5jcmVhdGVJRChFKTt0aGlzLmNvbnRhaW5zKF8pfHwodGhpcy5zZXRbX109RSl9LGIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihFKXtkZWxldGUgdGhpcy5zZXRbbS5jcmVhdGVJRChFKV19LGIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnNldFttLmNyZWF0ZUlEKEUpXT09RX0sYi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oRSl7Zm9yKHZhciBfPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxMPV8ubGVuZ3RoLE49MDtOPEw7TisrKUUucHVzaCh0aGlzLnNldFtfW05dXSl9LGIucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0sYi5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKEUpe2Zvcih2YXIgXz1FLmxlbmd0aCxMPTA7TDxfO0wrKyl7dmFyIE49RVtMXTt0aGlzLmFkZChOKX19LGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdil7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKE4sQil7Zm9yKHZhciBqPTA7ajxCLmxlbmd0aDtqKyspe3ZhciBSPUJbal07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKE4sQixqKXtyZXR1cm4gQiYmTChOLnByb3RvdHlwZSxCKSxqJiZMKE4saiksTn19KCk7ZnVuY3Rpb24gYihMLE4pe2lmKCEoTCBpbnN0YW5jZW9mIE4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBFPXYoMTEpLF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBMKE4sQil7Yih0aGlzLEwpLChCIT09bnVsbHx8QiE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgaj12b2lkIDA7TiBpbnN0YW5jZW9mIEU/aj1OLnNpemUoKTpqPU4ubGVuZ3RoLHRoaXMuX3F1aWNrc29ydChOLDAsai0xKX1yZXR1cm4gbShMLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpmdW5jdGlvbihCLGosUil7aWYoajxSKXt2YXIgej10aGlzLl9wYXJ0aXRpb24oQixqLFIpO3RoaXMuX3F1aWNrc29ydChCLGoseiksdGhpcy5fcXVpY2tzb3J0KEIseisxLFIpfX19LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOmZ1bmN0aW9uKEIsaixSKXtmb3IodmFyIHo9dGhpcy5fZ2V0KEIsaiksSz1qLGl0PVI7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih6LHRoaXMuX2dldChCLGl0KSk7KWl0LS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoQixLKSx6KTspSysrO2lmKEs8aXQpdGhpcy5fc3dhcChCLEssaXQpLEsrKyxpdC0tO2Vsc2UgcmV0dXJuIGl0fX19LHtrZXk6Il9nZXQiLHZhbHVlOmZ1bmN0aW9uKEIsail7cmV0dXJuIEIgaW5zdGFuY2VvZiBFP0IuZ2V0X29iamVjdF9hdChqKTpCW2pdfX0se2tleToiX3NldCIsdmFsdWU6ZnVuY3Rpb24oQixqLFIpe0IgaW5zdGFuY2VvZiBFP0Iuc2V0X29iamVjdF9hdChqLFIpOkJbal09Un19LHtrZXk6Il9zd2FwIix2YWx1ZTpmdW5jdGlvbihCLGosUil7dmFyIHo9dGhpcy5fZ2V0KEIsaik7dGhpcy5fc2V0KEIsaix0aGlzLl9nZXQoQixSKSksdGhpcy5fc2V0KEIsUix6KX19LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpmdW5jdGlvbihCLGope3JldHVybiBqPkJ9fV0pLEx9KCk7Zi5leHBvcnRzPV99LGZ1bmN0aW9uKGYscCx2KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oTCxOKXtmb3IodmFyIEI9MDtCPE4ubGVuZ3RoO0IrKyl7dmFyIGo9TltCXTtqLmVudW1lcmFibGU9ai5lbnVtZXJhYmxlfHwhMSxqLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaiYmKGoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGoua2V5LGopfX1yZXR1cm4gZnVuY3Rpb24oTCxOLEIpe3JldHVybiBOJiZfKEwucHJvdG90eXBlLE4pLEImJl8oTCxCKSxMfX0oKTtmdW5jdGlvbiBiKF8sTCl7aWYoIShfIGluc3RhbmNlb2YgTCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEwsTil7dmFyIEI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsaj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsUj1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7Yih0aGlzLF8pLHRoaXMuc2VxdWVuY2UxPUwsdGhpcy5zZXF1ZW5jZTI9Tix0aGlzLm1hdGNoX3Njb3JlPUIsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWosdGhpcy5nYXBfcGVuYWx0eT1SLHRoaXMuaU1heD1MLmxlbmd0aCsxLHRoaXMuak1heD1OLmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHo9MDt6PHRoaXMuaU1heDt6Kyspe3RoaXMuZ3JpZFt6XT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIEs9MDtLPHRoaXMuak1heDtLKyspdGhpcy5ncmlkW3pdW0tdPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgaXQ9MDtpdDx0aGlzLmlNYXg7aXQrKyl7dGhpcy50cmFjZWJhY2tHcmlkW2l0XT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHN0PTA7c3Q8dGhpcy5qTWF4O3N0KyspdGhpcy50cmFjZWJhY2tHcmlkW2l0XVtzdF09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBtKF8sW3trZXk6ImdldFNjb3JlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjb3JlfX0se2tleToiZ2V0QWxpZ25tZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgTj0xO048dGhpcy5qTWF4O04rKyl0aGlzLmdyaWRbMF1bTl09dGhpcy5ncmlkWzBdW04tMV0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbMF1bTl09WyExLCExLCEwXTtmb3IodmFyIEI9MTtCPHRoaXMuaU1heDtCKyspdGhpcy5ncmlkW0JdWzBdPXRoaXMuZ3JpZFtCLTFdWzBdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkW0JdWzBdPVshMSwhMCwhMV07Zm9yKHZhciBqPTE7ajx0aGlzLmlNYXg7aisrKWZvcih2YXIgUj0xO1I8dGhpcy5qTWF4O1IrKyl7dmFyIHo9dm9pZCAwO3RoaXMuc2VxdWVuY2UxW2otMV09PT10aGlzLnNlcXVlbmNlMltSLTFdP3o9dGhpcy5ncmlkW2otMV1bUi0xXSt0aGlzLm1hdGNoX3Njb3JlOno9dGhpcy5ncmlkW2otMV1bUi0xXSt0aGlzLm1pc21hdGNoX3BlbmFsdHk7dmFyIEs9dGhpcy5ncmlkW2otMV1bUl0rdGhpcy5nYXBfcGVuYWx0eSxpdD10aGlzLmdyaWRbal1bUi0xXSt0aGlzLmdhcF9wZW5hbHR5LHN0PVt6LEssaXRdLHV0PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHN0KTt0aGlzLmdyaWRbal1bUl09c3RbdXRbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtqXVtSXT1bdXQuaW5jbHVkZXMoMCksdXQuaW5jbHVkZXMoMSksdXQuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19fSx7a2V5OiJhbGlnbm1lbnRUcmFjZWJhY2siLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIE49W107Zm9yKE4ucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTtOWzBdOyl7dmFyIEI9TlswXSxqPXRoaXMudHJhY2ViYWNrR3JpZFtCLnBvc1swXV1bQi5wb3NbMV1dO2pbMF0mJk4ucHVzaCh7cG9zOltCLnBvc1swXS0xLEIucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbQi5wb3NbMF0tMV0rQi5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbQi5wb3NbMV0tMV0rQi5zZXEyfSksalsxXSYmTi5wdXNoKHtwb3M6W0IucG9zWzBdLTEsQi5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbQi5wb3NbMF0tMV0rQi5zZXExLHNlcTI6Ii0iK0Iuc2VxMn0pLGpbMl0mJk4ucHVzaCh7cG9zOltCLnBvc1swXSxCLnBvc1sxXS0xXSxzZXExOiItIitCLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltCLnBvc1sxXS0xXStCLnNlcTJ9KSxCLnBvc1swXT09PTAmJkIucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpCLnNlcTEsc2VxdWVuY2UyOkIuc2VxMn0pLE4uc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfX0se2tleToiZ2V0QWxsSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9W10sUj0tMTsoUj1OLmluZGV4T2YoQixSKzEpKSE9PS0xOylqLnB1c2goUik7cmV0dXJuIGp9fSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmdldEFsbEluZGV4ZXMoTixNYXRoLm1heC5hcHBseShudWxsLE4pKX19XSksX30oKTtmLmV4cG9ydHM9RX0sZnVuY3Rpb24oZixwLHYpe3ZhciBtPWZ1bmN0aW9uKCl7fTttLkZETGF5b3V0PXYoMTgpLG0uRkRMYXlvdXRDb25zdGFudHM9dig3KSxtLkZETGF5b3V0RWRnZT12KDE5KSxtLkZETGF5b3V0Tm9kZT12KDIwKSxtLkRpbWVuc2lvbkQ9digyMSksbS5IYXNoTWFwPXYoMjIpLG0uSGFzaFNldD12KDIzKSxtLklHZW9tZXRyeT12KDgpLG0uSU1hdGg9dig5KSxtLkludGVnZXI9digxMCksbS5Qb2ludD12KDEyKSxtLlBvaW50RD12KDQpLG0uUmFuZG9tU2VlZD12KDE2KSxtLlJlY3RhbmdsZUQ9digxMyksbS5UcmFuc2Zvcm09digxNyksbS5VbmlxdWVJREdlbmVyZXRvcj12KDE0KSxtLlF1aWNrc29ydD12KDI0KSxtLkxpbmtlZExpc3Q9digxMSksbS5MR3JhcGhPYmplY3Q9digyKSxtLkxHcmFwaD12KDUpLG0uTEVkZ2U9digxKSxtLkxHcmFwaE1hbmFnZXI9dig2KSxtLkxOb2RlPXYoMyksbS5MYXlvdXQ9digxNSksbS5MYXlvdXRDb25zdGFudHM9digwKSxtLk5lZWRsZW1hbld1bnNjaD12KDI1KSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHYpe2Z1bmN0aW9uIG0oKXt0aGlzLmxpc3RlbmVycz1bXX12YXIgYj1tLnByb3RvdHlwZTtiLmFkZExpc3RlbmVyPWZ1bmN0aW9uKEUsXyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6RSxjYWxsYmFjazpffSl9LGIucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRSxfKXtmb3IodmFyIEw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO0w+PTA7TC0tKXt2YXIgTj10aGlzLmxpc3RlbmVyc1tMXTtOLmV2ZW50PT09RSYmTi5jYWxsYmFjaz09PV8mJnRoaXMubGlzdGVuZXJzLnNwbGljZShMLDEpfX0sYi5lbWl0PWZ1bmN0aW9uKEUsXyl7Zm9yKHZhciBMPTA7TDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7TCsrKXt2YXIgTj10aGlzLmxpc3RlbmVyc1tMXTtFPT09Ti5ldmVudCYmTi5jYWxsYmFjayhfKX19LGYuZXhwb3J0cz1tfV0pfSl9KFVndCkpLFVndC5leHBvcnRzfXZhciBaanQ7ZnVuY3Rpb24gdVdlKCl7cmV0dXJuIFpqdHx8KFpqdD0xLGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKHAsdil7aS5leHBvcnRzPXYoY1dlKCkpfSkoZDAsZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKHApe3ZhciB2PXt9O2Z1bmN0aW9uIG0oYil7aWYodltiXSlyZXR1cm4gdltiXS5leHBvcnRzO3ZhciBFPXZbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBwW2JdLmNhbGwoRS5leHBvcnRzLEUsRS5leHBvcnRzLG0pLEUubD0hMCxFLmV4cG9ydHN9cmV0dXJuIG0ubT1wLG0uYz12LG0uaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sbS5kPWZ1bmN0aW9uKGIsRSxfKXttLm8oYixFKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsRSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Ol99KX0sbS5uPWZ1bmN0aW9uKGIpe3ZhciBFPWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiBtLmQoRSwiYSIsRSksRX0sbS5vPWZ1bmN0aW9uKGIsRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLEUpfSxtLnA9IiIsbShtLnM9Nyl9KFtmdW5jdGlvbihwLHYpe3AuZXhwb3J0cz1mfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5GRExheW91dENvbnN0YW50cztmdW5jdGlvbiBFKCl7fWZvcih2YXIgXyBpbiBiKUVbX109YltfXTtFLkRFRkFVTFRfVVNFX01VTFRJX0xFVkVMX1NDQUxJTkc9ITEsRS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OPWIuREVGQVVMVF9FREdFX0xFTkdUSCxFLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT049NjAsRS5USUxFPSEwLEUuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9MTAsRS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPTEwLEUuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITEscC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBFKEwsTixCKXtiLmNhbGwodGhpcyxMLE4sQil9RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIGIpRVtfXT1iW19dO3AuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9bSgwKS5MR3JhcGg7ZnVuY3Rpb24gRShMLE4sQil7Yi5jYWxsKHRoaXMsTCxOLEIpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBFKEwpe2IuY2FsbCh0aGlzLEwpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXROb2RlLEU9bSgwKS5JTWF0aDtmdW5jdGlvbiBfKE4sQixqLFIpe2IuY2FsbCh0aGlzLE4sQixqLFIpfV8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgTCBpbiBiKV9bTF09YltMXTtfLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5kaXNwbGFjZW1lbnRYPU4uY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZPU4uY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4sTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT5OLmNvb2xpbmdGYWN0b3IqTi5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPU4uY29vbGluZ0ZhY3RvcipOLm1heE5vZGVEaXNwbGFjZW1lbnQqRS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+Ti5jb29saW5nRmFjdG9yKk4ubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT1OLmNvb2xpbmdGYWN0b3IqTi5tYXhOb2RlRGlzcGxhY2VtZW50KkUuc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkPT1udWxsP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLE4udG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LF8ucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24oTixCKXtmb3IodmFyIGo9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCksUix6PTA7ejxqLmxlbmd0aDt6KyspUj1qW3pdLFIuZ2V0Q2hpbGQoKT09bnVsbD8oUi5tb3ZlQnkoTixCKSxSLmRpc3BsYWNlbWVudFgrPU4sUi5kaXNwbGFjZW1lbnRZKz1CKTpSLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oTixCKX0sXy5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24oTil7dGhpcy5wcmVkMT1OfSxfLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0sXy5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LF8ucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24oTil7dGhpcy5uZXh0PU59LF8ucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0sXy5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKE4pe3RoaXMucHJvY2Vzc2VkPU59LF8ucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0scC5leHBvcnRzPV99LGZ1bmN0aW9uKHAsdixtKXt2YXIgYj1tKDApLkZETGF5b3V0LEU9bSg0KSxfPW0oMyksTD1tKDUpLE49bSgyKSxCPW0oMSksaj1tKDApLkZETGF5b3V0Q29uc3RhbnRzLFI9bSgwKS5MYXlvdXRDb25zdGFudHMsej1tKDApLlBvaW50LEs9bSgwKS5Qb2ludEQsaXQ9bSgwKS5MYXlvdXQsc3Q9bSgwKS5JbnRlZ2VyLHV0PW0oMCkuSUdlb21ldHJ5LGJ0PW0oMCkuTEdyYXBoLG10PW0oMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIHl0KCl7Yi5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9fXl0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIGR0IGluIGIpeXRbZHRdPWJbZHRdO3l0LnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgaHQ9bmV3IEUodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPWh0LGh0fSx5dC5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oaHQpe3JldHVybiBuZXcgXyhudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGh0KX0seXQucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oaHQpe3JldHVybiBuZXcgTCh0aGlzLmdyYXBoTWFuYWdlcixodCl9LHl0LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKGh0KXtyZXR1cm4gbmV3IE4obnVsbCxudWxsLGh0KX0seXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy5pc1N1YkxheW91dHx8KEIuREVGQVVMVF9FREdFX0xFTkdUSDwxMD90aGlzLmlkZWFsRWRnZUxlbmd0aD0xMDp0aGlzLmlkZWFsRWRnZUxlbmd0aD1CLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPUIuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5zcHJpbmdDb25zdGFudD1qLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9ai5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1qLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWouREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWouREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWouREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExLHRoaXMuY29vbGluZ0N5Y2xlPTAsdGhpcy5tYXhDb29saW5nQ3ljbGU9dGhpcy5tYXhJdGVyYXRpb25zL2ouQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9ELHRoaXMuZmluYWxUZW1wZXJhdHVyZT1qLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRC90aGlzLm1heEl0ZXJhdGlvbnMsdGhpcy5jb29saW5nQWRqdXN0ZXI9MSl9LHl0LnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgaHQ9Ui5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7cmV0dXJuIGh0JiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LHl0LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYoQi5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgd3Q9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFg9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbih4dCl7cmV0dXJuIHd0Lmhhcyh4dCl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihYKX19ZWxzZXt2YXIgaHQ9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoaHQubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoaHQpO2Vsc2V7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgd3Q9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFg9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihwdCl7cmV0dXJuIHd0LmhhcyhwdCl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihYKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSx0aGlzLnJ1blNwcmluZ0VtYmVkZGVyKCksITB9LHl0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWouQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBodD1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksd3Q9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gaHQuaGFzKFUpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24od3QpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuY29vbGluZ0ZhY3Rvcj1qLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUx9ZWxzZSB0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSEwO3RoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKyt9aWYodGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpcmV0dXJuITA7dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTAmJih0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSksdGhpcy5jb29saW5nRmFjdG9yPWouREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBYPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQscHQ9dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhYLHB0KSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLmFuaW1hdGUoKSwhMX0seXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGh0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksd3Q9e30sWD0wO1g8aHQubGVuZ3RoO1grKyl7dmFyIHB0PWh0W1hdLnJlY3QsVT1odFtYXS5pZDt3dFtVXT17aWQ6VSx4OnB0LmdldENlbnRlclgoKSx5OnB0LmdldENlbnRlclkoKSx3OnB0LndpZHRoLGg6cHQuaGVpZ2h0fX1yZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIGh0PSExO2lmKGouQU5JTUFURT09PSJkdXJpbmciKXRoaXMuZW1pdCgibGF5b3V0c3RhcnRlZCIpO2Vsc2V7Zm9yKDshaHQ7KWh0PXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0seXQucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgaHQ9W10sd3QsWD10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxwdD1YLmxlbmd0aCxVO2ZvcihVPTA7VTxwdDtVKyspd3Q9WFtVXSx3dC51cGRhdGVDb25uZWN0ZWQoKSx3dC5pc0Nvbm5lY3RlZHx8KGh0PWh0LmNvbmNhdCh3dC5nZXROb2RlcygpKSk7cmV0dXJuIGh0fSx5dC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBodD1bXTtodD1odC5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIHd0PW5ldyBTZXQsWDtmb3IoWD0wO1g8aHQubGVuZ3RoO1grKyl7dmFyIHB0PWh0W1hdO2lmKCF3dC5oYXMocHQpKXt2YXIgVT1wdC5nZXRTb3VyY2UoKSx4dD1wdC5nZXRUYXJnZXQoKTtpZihVPT14dClwdC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgSykscHQuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IEspLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMocHQpLHd0LmFkZChwdCk7ZWxzZXt2YXIgbnQ9W107aWYobnQ9bnQuY29uY2F0KFUuZ2V0RWRnZUxpc3RUb05vZGUoeHQpKSxudD1udC5jb25jYXQoeHQuZ2V0RWRnZUxpc3RUb05vZGUoVSkpLCF3dC5oYXMobnRbMF0pKXtpZihudC5sZW5ndGg+MSl7dmFyIE90O2ZvcihPdD0wO090PG50Lmxlbmd0aDtPdCsrKXt2YXIgTnQ9bnRbT3RdO050LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBLKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKE50KX19bnQuZm9yRWFjaChmdW5jdGlvbihxdCl7d3QuYWRkKHF0KX0pfX19aWYod3Quc2l6ZT09aHQubGVuZ3RoKWJyZWFrfX0seXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihodCl7Zm9yKHZhciB3dD1uZXcgeigwLDApLFg9TWF0aC5jZWlsKE1hdGguc3FydChodC5sZW5ndGgpKSxwdD0wLFU9MCx4dD0wLG50PW5ldyBLKDAsMCksT3Q9MDtPdDxodC5sZW5ndGg7T3QrKyl7T3QlWD09MCYmKHh0PTAsVT1wdCxPdCE9MCYmKFUrPUIuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTikscHQ9MCk7dmFyIE50PWh0W090XSxxdD1pdC5maW5kQ2VudGVyT2ZUcmVlKE50KTt3dC54PXh0LHd0Lnk9VSxudD15dC5yYWRpYWxMYXlvdXQoTnQscXQsd3QpLG50Lnk+cHQmJihwdD1NYXRoLmZsb29yKG50LnkpKSx4dD1NYXRoLmZsb29yKG50LngrQi5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgSyhSLldPUkxEX0NFTlRFUl9YLW50LngvMixSLldPUkxEX0NFTlRFUl9ZLW50LnkvMikpfSx5dC5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oaHQsd3QsWCl7dmFyIHB0PU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoaHQpLEIuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7eXQuYnJhbmNoUmFkaWFsTGF5b3V0KHd0LG51bGwsMCwzNTksMCxwdCk7dmFyIFU9YnQuY2FsY3VsYXRlQm91bmRzKGh0KSx4dD1uZXcgbXQ7eHQuc2V0RGV2aWNlT3JnWChVLmdldE1pblgoKSkseHQuc2V0RGV2aWNlT3JnWShVLmdldE1pblkoKSkseHQuc2V0V29ybGRPcmdYKFgueCkseHQuc2V0V29ybGRPcmdZKFgueSk7Zm9yKHZhciBudD0wO250PGh0Lmxlbmd0aDtudCsrKXt2YXIgT3Q9aHRbbnRdO090LnRyYW5zZm9ybSh4dCl9dmFyIE50PW5ldyBLKFUuZ2V0TWF4WCgpLFUuZ2V0TWF4WSgpKTtyZXR1cm4geHQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KE50KX0seXQuYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGh0LHd0LFgscHQsVSx4dCl7dmFyIG50PShwdC1YKzEpLzI7bnQ8MCYmKG50Kz0xODApO3ZhciBPdD0obnQrWCklMzYwLE50PU90KnV0LlRXT19QSS8zNjAscXQ9VSpNYXRoLmNvcyhOdCksQ3Q9VSpNYXRoLnNpbihOdCk7aHQuc2V0Q2VudGVyKHF0LEN0KTt2YXIgWj1bXTtaPVouY29uY2F0KGh0LmdldEVkZ2VzKCkpO3ZhciBUdD1aLmxlbmd0aDt3dCE9bnVsbCYmVHQtLTtmb3IodmFyIEh0PTAsSXQ9Wi5sZW5ndGgsRnQsa2U9aHQuZ2V0RWRnZXNCZXR3ZWVuKHd0KTtrZS5sZW5ndGg+MTspe3ZhciBwbj1rZVswXTtrZS5zcGxpY2UoMCwxKTt2YXIgTWU9Wi5pbmRleE9mKHBuKTtNZT49MCYmWi5zcGxpY2UoTWUsMSksSXQtLSxUdC0tfXd0IT1udWxsP0Z0PShaLmluZGV4T2Yoa2VbMF0pKzEpJUl0OkZ0PTA7Zm9yKHZhciB2ZT1NYXRoLmFicyhwdC1YKS9UdCxHZT1GdDtIdCE9VHQ7R2U9KytHZSVJdCl7dmFyIEtlPVpbR2VdLmdldE90aGVyRW5kKGh0KTtpZihLZSE9d3Qpe3ZhciB3ZT0oWCtIdCp2ZSklMzYwLF9lPSh3ZSt2ZSklMzYwO3l0LmJyYW5jaFJhZGlhbExheW91dChLZSxodCx3ZSxfZSxVK3h0LHh0KSxIdCsrfX19LHl0Lm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKGh0KXtmb3IodmFyIHd0PXN0Lk1JTl9WQUxVRSxYPTA7WDxodC5sZW5ndGg7WCsrKXt2YXIgcHQ9aHRbWF0sVT1wdC5nZXREaWFnb25hbCgpO1U+d3QmJih3dD1VKX1yZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0seXQucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaHQ9dGhpcyx3dD17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBYPVtdLHB0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksVT0wO1U8cHQubGVuZ3RoO1UrKyl7dmFyIHh0PXB0W1VdLG50PXh0LmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbih4dCk9PT0wJiYobnQuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChudCkpJiZYLnB1c2goeHQpfWZvcih2YXIgVT0wO1U8WC5sZW5ndGg7VSsrKXt2YXIgeHQ9WFtVXSxPdD14dC5nZXRQYXJlbnQoKS5pZDt0eXBlb2Ygd3RbT3RdPiJ1IiYmKHd0W090XT1bXSksd3RbT3RdPXd0W090XS5jb25jYXQoeHQpfU9iamVjdC5rZXlzKHd0KS5mb3JFYWNoKGZ1bmN0aW9uKE50KXtpZih3dFtOdF0ubGVuZ3RoPjEpe3ZhciBxdD0iRHVtbXlDb21wb3VuZF8iK050O2h0Lm1lbWJlckdyb3Vwc1txdF09d3RbTnRdO3ZhciBDdD13dFtOdF1bMF0uZ2V0UGFyZW50KCksWj1uZXcgTChodC5ncmFwaE1hbmFnZXIpO1ouaWQ9cXQsWi5wYWRkaW5nTGVmdD1DdC5wYWRkaW5nTGVmdHx8MCxaLnBhZGRpbmdSaWdodD1DdC5wYWRkaW5nUmlnaHR8fDAsWi5wYWRkaW5nQm90dG9tPUN0LnBhZGRpbmdCb3R0b218fDAsWi5wYWRkaW5nVG9wPUN0LnBhZGRpbmdUb3B8fDAsaHQuaWRUb0R1bW15Tm9kZVtxdF09Wjt2YXIgVHQ9aHQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGh0Lm5ld0dyYXBoKCksWiksSHQ9Q3QuZ2V0Q2hpbGQoKTtIdC5hZGQoWik7Zm9yKHZhciBJdD0wO0l0PHd0W050XS5sZW5ndGg7SXQrKyl7dmFyIEZ0PXd0W050XVtJdF07SHQucmVtb3ZlKEZ0KSxUdC5hZGQoRnQpfX19KX0seXQucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIGh0PXt9LHd0PXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBYPTA7WDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO1grKyl3dFt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltYXSxodFt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbWF0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltYXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoaHQsd3QpfSx5dC5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBodD10aGlzLHd0PXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgcHQ9aHQuaWRUb0R1bW15Tm9kZVtYXTt3dFtYXT1odC50aWxlTm9kZXMoaHQubWVtYmVyR3JvdXBzW1hdLHB0LnBhZGRpbmdMZWZ0K3B0LnBhZGRpbmdSaWdodCkscHQucmVjdC53aWR0aD13dFtYXS53aWR0aCxwdC5yZWN0LmhlaWdodD13dFtYXS5oZWlnaHR9KX0seXQucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIGh0PXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtodD49MDtodC0tKXt2YXIgd3Q9dGhpcy5jb21wb3VuZE9yZGVyW2h0XSxYPXd0LmlkLHB0PXd0LnBhZGRpbmdMZWZ0LFU9d3QucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tYXSx3dC5yZWN0Lngsd3QucmVjdC55LHB0LFUpfX0seXQucHJvdG90eXBlLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBodD10aGlzLHd0PXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyh3dCkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgcHQ9aHQuaWRUb0R1bW15Tm9kZVtYXSxVPXB0LnBhZGRpbmdMZWZ0LHh0PXB0LnBhZGRpbmdUb3A7aHQuYWRqdXN0TG9jYXRpb25zKHd0W1hdLHB0LnJlY3QueCxwdC5yZWN0LnksVSx4dCl9KX0seXQucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihodCl7dmFyIHd0PWh0LmlkO2lmKHRoaXMudG9CZVRpbGVkW3d0XSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdO3ZhciBYPWh0LmdldENoaWxkKCk7aWYoWD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdPSExLCExO2Zvcih2YXIgcHQ9WC5nZXROb2RlcygpLFU9MDtVPHB0Lmxlbmd0aDtVKyspe3ZhciB4dD1wdFtVXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoeHQpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW3d0XT0hMSwhMTtpZih4dC5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFt4dC5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKHh0KSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbd3RdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFt3dF09ITAsITB9LHl0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGh0KXtodC5pZDtmb3IodmFyIHd0PWh0LmdldEVkZ2VzKCksWD0wLHB0PTA7cHQ8d3QubGVuZ3RoO3B0Kyspe3ZhciBVPXd0W3B0XTtVLmdldFNvdXJjZSgpLmlkIT09VS5nZXRUYXJnZXQoKS5pZCYmKFg9WCsxKX1yZXR1cm4gWH0seXQucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oaHQpe3ZhciB3dD10aGlzLmdldE5vZGVEZWdyZWUoaHQpO2lmKGh0LmdldENoaWxkKCk9PW51bGwpcmV0dXJuIHd0O2Zvcih2YXIgWD1odC5nZXRDaGlsZCgpLmdldE5vZGVzKCkscHQ9MDtwdDxYLmxlbmd0aDtwdCsrKXt2YXIgVT1YW3B0XTt3dCs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFUpfXJldHVybiB3dH0seXQucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0seXQucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKGh0KXtmb3IodmFyIHd0PTA7d3Q8aHQubGVuZ3RoO3d0Kyspe3ZhciBYPWh0W3d0XTtYLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoWC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKFgpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChYKX19LHl0LnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oaHQsd3QsWCxwdCxVKXt3dCs9cHQsWCs9VTtmb3IodmFyIHh0PXd0LG50PTA7bnQ8aHQucm93cy5sZW5ndGg7bnQrKyl7dmFyIE90PWh0LnJvd3NbbnRdO3d0PXh0O2Zvcih2YXIgTnQ9MCxxdD0wO3F0PE90Lmxlbmd0aDtxdCsrKXt2YXIgQ3Q9T3RbcXRdO0N0LnJlY3QueD13dCxDdC5yZWN0Lnk9WCx3dCs9Q3QucmVjdC53aWR0aCtodC5ob3Jpem9udGFsUGFkZGluZyxDdC5yZWN0LmhlaWdodD5OdCYmKE50PUN0LnJlY3QuaGVpZ2h0KX1YKz1OdCtodC52ZXJ0aWNhbFBhZGRpbmd9fSx5dC5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihodCx3dCl7dmFyIFg9dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyhodCkuZm9yRWFjaChmdW5jdGlvbihwdCl7dmFyIFU9d3RbcHRdO1gudGlsZWRNZW1iZXJQYWNrW3B0XT1YLnRpbGVOb2RlcyhodFtwdF0sVS5wYWRkaW5nTGVmdCtVLnBhZGRpbmdSaWdodCksVS5yZWN0LndpZHRoPVgudGlsZWRNZW1iZXJQYWNrW3B0XS53aWR0aCxVLnJlY3QuaGVpZ2h0PVgudGlsZWRNZW1iZXJQYWNrW3B0XS5oZWlnaHR9KX0seXQucHJvdG90eXBlLnRpbGVOb2Rlcz1mdW5jdGlvbihodCx3dCl7dmFyIFg9Qi5USUxJTkdfUEFERElOR19WRVJUSUNBTCxwdD1CLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsVT17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6d3QsdmVydGljYWxQYWRkaW5nOlgsaG9yaXpvbnRhbFBhZGRpbmc6cHR9O2h0LnNvcnQoZnVuY3Rpb24oT3QsTnQpe3JldHVybiBPdC5yZWN0LndpZHRoKk90LnJlY3QuaGVpZ2h0Pk50LnJlY3Qud2lkdGgqTnQucmVjdC5oZWlnaHQ/LTE6T3QucmVjdC53aWR0aCpPdC5yZWN0LmhlaWdodDxOdC5yZWN0LndpZHRoKk50LnJlY3QuaGVpZ2h0PzE6MH0pO2Zvcih2YXIgeHQ9MDt4dDxodC5sZW5ndGg7eHQrKyl7dmFyIG50PWh0W3h0XTtVLnJvd3MubGVuZ3RoPT0wP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsMCx3dCk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKFUsbnQucmVjdC53aWR0aCxudC5yZWN0LmhlaWdodCk/dGhpcy5pbnNlcnROb2RlVG9Sb3coVSxudCx0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVSksd3QpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsVS5yb3dzLmxlbmd0aCx3dCksdGhpcy5zaGlmdFRvTGFzdFJvdyhVKX1yZXR1cm4gVX0seXQucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbihodCx3dCxYLHB0KXt2YXIgVT1wdDtpZihYPT1odC5yb3dzLmxlbmd0aCl7dmFyIHh0PVtdO2h0LnJvd3MucHVzaCh4dCksaHQucm93V2lkdGgucHVzaChVKSxodC5yb3dIZWlnaHQucHVzaCgwKX12YXIgbnQ9aHQucm93V2lkdGhbWF0rd3QucmVjdC53aWR0aDtodC5yb3dzW1hdLmxlbmd0aD4wJiYobnQrPWh0Lmhvcml6b250YWxQYWRkaW5nKSxodC5yb3dXaWR0aFtYXT1udCxodC53aWR0aDxudCYmKGh0LndpZHRoPW50KTt2YXIgT3Q9d3QucmVjdC5oZWlnaHQ7WD4wJiYoT3QrPWh0LnZlcnRpY2FsUGFkZGluZyk7dmFyIE50PTA7T3Q+aHQucm93SGVpZ2h0W1hdJiYoTnQ9aHQucm93SGVpZ2h0W1hdLGh0LnJvd0hlaWdodFtYXT1PdCxOdD1odC5yb3dIZWlnaHRbWF0tTnQpLGh0LmhlaWdodCs9TnQsaHQucm93c1tYXS5wdXNoKHd0KX0seXQucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9LTEsWD1OdW1iZXIuTUFYX1ZBTFVFLHB0PTA7cHQ8aHQucm93cy5sZW5ndGg7cHQrKylodC5yb3dXaWR0aFtwdF08WCYmKHd0PXB0LFg9aHQucm93V2lkdGhbcHRdKTtyZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9LTEsWD1OdW1iZXIuTUlOX1ZBTFVFLHB0PTA7cHQ8aHQucm93cy5sZW5ndGg7cHQrKylodC5yb3dXaWR0aFtwdF0+WCYmKHd0PXB0LFg9aHQucm93V2lkdGhbcHRdKTtyZXR1cm4gd3R9LHl0LnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKGh0LHd0LFgpe3ZhciBwdD10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoaHQpO2lmKHB0PDApcmV0dXJuITA7dmFyIFU9aHQucm93V2lkdGhbcHRdO2lmKFUraHQuaG9yaXpvbnRhbFBhZGRpbmcrd3Q8PWh0LndpZHRoKXJldHVybiEwO3ZhciB4dD0wO2h0LnJvd0hlaWdodFtwdF08WCYmcHQ+MCYmKHh0PVgraHQudmVydGljYWxQYWRkaW5nLWh0LnJvd0hlaWdodFtwdF0pO3ZhciBudDtodC53aWR0aC1VPj13dCtodC5ob3Jpem9udGFsUGFkZGluZz9udD0oaHQuaGVpZ2h0K3h0KS8oVSt3dCtodC5ob3Jpem9udGFsUGFkZGluZyk6bnQ9KGh0LmhlaWdodCt4dCkvaHQud2lkdGgseHQ9WCtodC52ZXJ0aWNhbFBhZGRpbmc7dmFyIE90O3JldHVybiBodC53aWR0aDx3dD9PdD0oaHQuaGVpZ2h0K3h0KS93dDpPdD0oaHQuaGVpZ2h0K3h0KS9odC53aWR0aCxPdDwxJiYoT3Q9MS9PdCksbnQ8MSYmKG50PTEvbnQpLG50PE90fSx5dC5wcm90b3R5cGUuc2hpZnRUb0xhc3RSb3c9ZnVuY3Rpb24oaHQpe3ZhciB3dD10aGlzLmdldExvbmdlc3RSb3dJbmRleChodCksWD1odC5yb3dXaWR0aC5sZW5ndGgtMSxwdD1odC5yb3dzW3d0XSxVPXB0W3B0Lmxlbmd0aC0xXSx4dD1VLndpZHRoK2h0Lmhvcml6b250YWxQYWRkaW5nO2lmKGh0LndpZHRoLWh0LnJvd1dpZHRoW1hdPnh0JiZ3dCE9WCl7cHQuc3BsaWNlKC0xLDEpLGh0LnJvd3NbWF0ucHVzaChVKSxodC5yb3dXaWR0aFt3dF09aHQucm93V2lkdGhbd3RdLXh0LGh0LnJvd1dpZHRoW1hdPWh0LnJvd1dpZHRoW1hdK3h0LGh0LndpZHRoPWh0LnJvd1dpZHRoW2luc3RhbmNlLmdldExvbmdlc3RSb3dJbmRleChodCldO2Zvcih2YXIgbnQ9TnVtYmVyLk1JTl9WQUxVRSxPdD0wO090PHB0Lmxlbmd0aDtPdCsrKXB0W090XS5oZWlnaHQ+bnQmJihudD1wdFtPdF0uaGVpZ2h0KTt3dD4wJiYobnQrPWh0LnZlcnRpY2FsUGFkZGluZyk7dmFyIE50PWh0LnJvd0hlaWdodFt3dF0raHQucm93SGVpZ2h0W1hdO2h0LnJvd0hlaWdodFt3dF09bnQsaHQucm93SGVpZ2h0W1hdPFUuaGVpZ2h0K2h0LnZlcnRpY2FsUGFkZGluZyYmKGh0LnJvd0hlaWdodFtYXT1VLmhlaWdodCtodC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBxdD1odC5yb3dIZWlnaHRbd3RdK2h0LnJvd0hlaWdodFtYXTtodC5oZWlnaHQrPXF0LU50LHRoaXMuc2hpZnRUb0xhc3RSb3coaHQpfX0seXQucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe0IuVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LHl0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7Qi5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LHl0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgaHQ9W10sd3Q9ITAsWDt3dDspe3ZhciBwdD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFU9W107d3Q9ITE7Zm9yKHZhciB4dD0wO3h0PHB0Lmxlbmd0aDt4dCsrKVg9cHRbeHRdLFguZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFYLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZYLmdldENoaWxkKCk9PW51bGwmJihVLnB1c2goW1gsWC5nZXRFZGdlcygpWzBdLFguZ2V0T3duZXIoKV0pLHd0PSEwKTtpZih3dD09ITApe2Zvcih2YXIgbnQ9W10sT3Q9MDtPdDxVLmxlbmd0aDtPdCsrKVVbT3RdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYobnQucHVzaChVW090XSksVVtPdF1bMF0uZ2V0T3duZXIoKS5yZW1vdmUoVVtPdF1bMF0pKTtodC5wdXNoKG50KSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPWh0fSx5dC5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oaHQpe2Zvcih2YXIgd3Q9aHQubGVuZ3RoLFg9aHRbd3QtMV0scHQsVT0wO1U8WC5sZW5ndGg7VSsrKXB0PVhbVV0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKHB0KSxwdFsyXS5hZGQocHRbMF0pLHB0WzJdLmFkZChwdFsxXSxwdFsxXS5zb3VyY2UscHRbMV0udGFyZ2V0KTtodC5zcGxpY2UoaHQubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0seXQucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oaHQpe3ZhciB3dCxYLHB0PWh0WzBdO3B0PT1odFsxXS5zb3VyY2U/WD1odFsxXS50YXJnZXQ6WD1odFsxXS5zb3VyY2U7dmFyIFU9WC5zdGFydFgseHQ9WC5maW5pc2hYLG50PVguc3RhcnRZLE90PVguZmluaXNoWSxOdD0wLHF0PTAsQ3Q9MCxaPTAsVHQ9W050LEN0LHF0LFpdO2lmKG50PjApZm9yKHZhciBIdD1VO0h0PD14dDtIdCsrKVR0WzBdKz10aGlzLmdyaWRbSHRdW250LTFdLmxlbmd0aCt0aGlzLmdyaWRbSHRdW250XS5sZW5ndGgtMTtpZih4dDx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBIdD1udDtIdDw9T3Q7SHQrKylUdFsxXSs9dGhpcy5ncmlkW3h0KzFdW0h0XS5sZW5ndGgrdGhpcy5ncmlkW3h0XVtIdF0ubGVuZ3RoLTE7aWYoT3Q8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgSHQ9VTtIdDw9eHQ7SHQrKylUdFsyXSs9dGhpcy5ncmlkW0h0XVtPdCsxXS5sZW5ndGgrdGhpcy5ncmlkW0h0XVtPdF0ubGVuZ3RoLTE7aWYoVT4wKWZvcih2YXIgSHQ9bnQ7SHQ8PU90O0h0KyspVHRbM10rPXRoaXMuZ3JpZFtVLTFdW0h0XS5sZW5ndGgrdGhpcy5ncmlkW1VdW0h0XS5sZW5ndGgtMTtmb3IodmFyIEl0PXN0Lk1BWF9WQUxVRSxGdCxrZSxwbj0wO3BuPFR0Lmxlbmd0aDtwbisrKVR0W3BuXTxJdD8oSXQ9VHRbcG5dLEZ0PTEsa2U9cG4pOlR0W3BuXT09SXQmJkZ0Kys7aWYoRnQ9PTMmJkl0PT0wKVR0WzBdPT0wJiZUdFsxXT09MCYmVHRbMl09PTA/d3Q9MTpUdFswXT09MCYmVHRbMV09PTAmJlR0WzNdPT0wP3d0PTA6VHRbMF09PTAmJlR0WzJdPT0wJiZUdFszXT09MD93dD0zOlR0WzFdPT0wJiZUdFsyXT09MCYmVHRbM109PTAmJih3dD0yKTtlbHNlIGlmKEZ0PT0yJiZJdD09MCl7dmFyIE1lPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtUdFswXT09MCYmVHRbMV09PTA/TWU9PTA/d3Q9MDp3dD0xOlR0WzBdPT0wJiZUdFsyXT09MD9NZT09MD93dD0wOnd0PTI6VHRbMF09PTAmJlR0WzNdPT0wP01lPT0wP3d0PTA6d3Q9MzpUdFsxXT09MCYmVHRbMl09PTA/TWU9PTA/d3Q9MTp3dD0yOlR0WzFdPT0wJiZUdFszXT09MD9NZT09MD93dD0xOnd0PTM6TWU9PTA/d3Q9Mjp3dD0zfWVsc2UgaWYoRnQ9PTQmJkl0PT0wKXt2YXIgTWU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpO3d0PU1lfWVsc2Ugd3Q9a2U7d3Q9PTA/cHQuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLFguZ2V0Q2VudGVyWSgpLVguZ2V0SGVpZ2h0KCkvMi1qLkRFRkFVTFRfRURHRV9MRU5HVEgtcHQuZ2V0SGVpZ2h0KCkvMik6d3Q9PTE/cHQuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpK1guZ2V0V2lkdGgoKS8yK2ouREVGQVVMVF9FREdFX0xFTkdUSCtwdC5nZXRXaWR0aCgpLzIsWC5nZXRDZW50ZXJZKCkpOnd0PT0yP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKSxYLmdldENlbnRlclkoKStYLmdldEhlaWdodCgpLzIrai5ERUZBVUxUX0VER0VfTEVOR1RIK3B0LmdldEhlaWdodCgpLzIpOnB0LnNldENlbnRlcihYLmdldENlbnRlclgoKS1YLmdldFdpZHRoKCkvMi1qLkRFRkFVTFRfRURHRV9MRU5HVEgtcHQuZ2V0V2lkdGgoKS8yLFguZ2V0Q2VudGVyWSgpKX0scC5leHBvcnRzPXl0fSxmdW5jdGlvbihwLHYsbSl7dmFyIGI9e307Yi5sYXlvdXRCYXNlPW0oMCksYi5Db1NFQ29uc3RhbnRzPW0oMSksYi5Db1NFRWRnZT1tKDIpLGIuQ29TRUdyYXBoPW0oMyksYi5Db1NFR3JhcGhNYW5hZ2VyPW0oNCksYi5Db1NFTGF5b3V0PW0oNiksYi5Db1NFTm9kZT1tKDUpLHAuZXhwb3J0cz1ifV0pfSl9KFZndCkpLFZndC5leHBvcnRzfShmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHYpe2kuZXhwb3J0cz12KHVXZSgpKX0pKGQwLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXt2YXIgdj17fTtmdW5jdGlvbiBtKGIpe2lmKHZbYl0pcmV0dXJuIHZbYl0uZXhwb3J0czt2YXIgRT12W2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcFtiXS5jYWxsKEUuZXhwb3J0cyxFLEUuZXhwb3J0cyxtKSxFLmw9ITAsRS5leHBvcnRzfXJldHVybiBtLm09cCxtLmM9dixtLmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LG0uZD1mdW5jdGlvbihiLEUsXyl7bS5vKGIsRSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLEUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpffSl9LG0ubj1mdW5jdGlvbihiKXt2YXIgRT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gbS5kKEUsImEiLEUpLEV9LG0ubz1mdW5jdGlvbihiLEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixFKX0sbS5wPSIiLG0obS5zPTEpfShbZnVuY3Rpb24ocCx2KXtwLmV4cG9ydHM9Zn0sZnVuY3Rpb24ocCx2LG0pe3ZhciBiPW0oMCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHMsRT1tKDApLmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHMsXz1tKDApLkNvU0VDb25zdGFudHMsTD1tKDApLkNvU0VMYXlvdXQsTj1tKDApLkNvU0VOb2RlLEI9bSgwKS5sYXlvdXRCYXNlLlBvaW50RCxqPW0oMCkubGF5b3V0QmFzZS5EaW1lbnNpb25ELFI9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxxdWFsaXR5OiJkZWZhdWx0Iixub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmVmcmVzaDozMCxmaXQ6ITAscGFkZGluZzoxMCxyYW5kb21pemU6ITAsbm9kZVJlcHVsc2lvbjo0NTAwLGlkZWFsRWRnZUxlbmd0aDo1MCxlZGdlRWxhc3RpY2l0eTouNDUsbmVzdGluZ0ZhY3RvcjouMSxncmF2aXR5Oi4yNSxudW1JdGVyOjI1MDAsdGlsZTohMCxhbmltYXRlOiJlbmQiLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjV9O2Z1bmN0aW9uIHoodXQsYnQpe3ZhciBtdD17fTtmb3IodmFyIHl0IGluIHV0KW10W3l0XT11dFt5dF07Zm9yKHZhciB5dCBpbiBidCltdFt5dF09YnRbeXRdO3JldHVybiBtdH1mdW5jdGlvbiBLKHV0KXt0aGlzLm9wdGlvbnM9eihSLHV0KSxpdCh0aGlzLm9wdGlvbnMpfXZhciBpdD1mdW5jdGlvbihidCl7YnQubm9kZVJlcHVsc2lvbiE9bnVsbCYmKF8uREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9RS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1idC5ub2RlUmVwdWxzaW9uKSxidC5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihfLkRFRkFVTFRfRURHRV9MRU5HVEg9RS5ERUZBVUxUX0VER0VfTEVOR1RIPWJ0LmlkZWFsRWRnZUxlbmd0aCksYnQuZWRnZUVsYXN0aWNpdHkhPW51bGwmJihfLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPUUuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9YnQuZWRnZUVsYXN0aWNpdHkpLGJ0Lm5lc3RpbmdGYWN0b3IhPW51bGwmJihfLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9RS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWJ0Lm5lc3RpbmdGYWN0b3IpLGJ0LmdyYXZpdHkhPW51bGwmJihfLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1FLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1idC5ncmF2aXR5KSxidC5udW1JdGVyIT1udWxsJiYoXy5NQVhfSVRFUkFUSU9OUz1FLk1BWF9JVEVSQVRJT05TPWJ0Lm51bUl0ZXIpLGJ0LmdyYXZpdHlSYW5nZSE9bnVsbCYmKF8uREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1FLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YnQuZ3Jhdml0eVJhbmdlKSxidC5ncmF2aXR5Q29tcG91bmQhPW51bGwmJihfLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1idC5ncmF2aXR5Q29tcG91bmQpLGJ0LmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoXy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPUUuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1idC5ncmF2aXR5UmFuZ2VDb21wb3VuZCksYnQuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJihfLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9RS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWJ0LmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxidC5xdWFsaXR5PT0iZHJhZnQiP2IuUVVBTElUWT0wOmJ0LnF1YWxpdHk9PSJwcm9vZiI/Yi5RVUFMSVRZPTI6Yi5RVUFMSVRZPTEsXy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9RS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9Yi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9YnQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzLF8uREVGQVVMVF9JTkNSRU1FTlRBTD1FLkRFRkFVTFRfSU5DUkVNRU5UQUw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSFidC5yYW5kb21pemUsXy5BTklNQVRFPUUuQU5JTUFURT1iLkFOSU1BVEU9YnQuYW5pbWF0ZSxfLlRJTEU9YnQudGlsZSxfLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPXR5cGVvZiBidC50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/YnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKTpidC50aWxpbmdQYWRkaW5nVmVydGljYWwsXy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPXR5cGVvZiBidC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9idC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCk6YnQudGlsaW5nUGFkZGluZ0hvcml6b250YWx9O0sucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB1dCxidCxtdD10aGlzLm9wdGlvbnM7dGhpcy5pZFRvTE5vZGU9e307dmFyIHl0PXRoaXMubGF5b3V0PW5ldyBMLGR0PXRoaXM7ZHQuc3RvcHBlZD0hMSx0aGlzLmN5PXRoaXMub3B0aW9ucy5jeSx0aGlzLmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6dGhpc30pO3ZhciBodD15dC5uZXdHcmFwaE1hbmFnZXIoKTt0aGlzLmdtPWh0O3ZhciB3dD10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLFg9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKTt0aGlzLnJvb3Q9aHQuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMod3QpLHl0KTtmb3IodmFyIHB0PTA7cHQ8WC5sZW5ndGg7cHQrKyl7dmFyIFU9WFtwdF0seHQ9dGhpcy5pZFRvTE5vZGVbVS5kYXRhKCJzb3VyY2UiKV0sbnQ9dGhpcy5pZFRvTE5vZGVbVS5kYXRhKCJ0YXJnZXQiKV07aWYoeHQhPT1udCYmeHQuZ2V0RWRnZXNCZXR3ZWVuKG50KS5sZW5ndGg9PTApe3ZhciBPdD1odC5hZGQoeXQubmV3RWRnZSgpLHh0LG50KTtPdC5pZD1VLmlkKCl9fXZhciBOdD1mdW5jdGlvbihaLFR0KXt0eXBlb2YgWj09Im51bWJlciImJihaPVR0KTt2YXIgSHQ9Wi5kYXRhKCJpZCIpLEl0PWR0LmlkVG9MTm9kZVtIdF07cmV0dXJue3g6SXQuZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5Okl0LmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSxxdD1mdW5jdGlvbiBDdCgpe2Zvcih2YXIgWj1mdW5jdGlvbigpe210LmZpdCYmbXQuY3kuZml0KG10LmVsZXMsbXQucGFkZGluZyksdXR8fCh1dD0hMCxkdC5jeS5vbmUoImxheW91dHJlYWR5IixtdC5yZWFkeSksZHQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpkdH0pKX0sVHQ9ZHQub3B0aW9ucy5yZWZyZXNoLEh0LEl0PTA7SXQ8VHQmJiFIdDtJdCsrKUh0PWR0LnN0b3BwZWR8fGR0LmxheW91dC50aWNrKCk7aWYoSHQpe3l0LmNoZWNrTGF5b3V0U3VjY2VzcygpJiYheXQuaXNTdWJMYXlvdXQmJnl0LmRvUG9zdExheW91dCgpLHl0LnRpbGluZ1Bvc3RMYXlvdXQmJnl0LnRpbGluZ1Bvc3RMYXlvdXQoKSx5dC5pc0xheW91dEZpbmlzaGVkPSEwLGR0Lm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhOdCksWigpLGR0LmN5Lm9uZSgibGF5b3V0c3RvcCIsZHQub3B0aW9ucy5zdG9wKSxkdC5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZHR9KSxidCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoYnQpLHV0PSExO3JldHVybn12YXIgRnQ9ZHQubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTttdC5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKGtlLHBuKXtpZih0eXBlb2Yga2U9PSJudW1iZXIiJiYoa2U9cG4pLCFrZS5pc1BhcmVudCgpKXtmb3IodmFyIE1lPWtlLmlkKCksdmU9RnRbTWVdLEdlPWtlO3ZlPT1udWxsJiYodmU9RnRbR2UuZGF0YSgicGFyZW50IildfHxGdFsiRHVtbXlDb21wb3VuZF8iK0dlLmRhdGEoInBhcmVudCIpXSxGdFtNZV09dmUsR2U9R2UucGFyZW50KClbMF0sR2UhPW51bGwpOyk7cmV0dXJuIHZlIT1udWxsP3t4OnZlLngseTp2ZS55fTp7eDprZS5wb3NpdGlvbigieCIpLHk6a2UucG9zaXRpb24oInkiKX19fSksWigpLGJ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShDdCl9O3JldHVybiB5dC5hZGRMaXN0ZW5lcigibGF5b3V0c3RhcnRlZCIsZnVuY3Rpb24oKXtkdC5vcHRpb25zLmFuaW1hdGU9PT0iZHVyaW5nIiYmKGJ0PXJlcXVlc3RBbmltYXRpb25GcmFtZShxdCkpfSkseXQucnVuTGF5b3V0KCksdGhpcy5vcHRpb25zLmFuaW1hdGUhPT0iZHVyaW5nIiYmKGR0Lm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhkdCxkdC5vcHRpb25zLE50KSx1dD0hMSksdGhpc30sSy5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKHV0KXtmb3IodmFyIGJ0PXt9LG10PTA7bXQ8dXQubGVuZ3RoO210KyspYnRbdXRbbXRdLmlkKCldPSEwO3ZhciB5dD11dC5maWx0ZXIoZnVuY3Rpb24oZHQsaHQpe3R5cGVvZiBkdD09Im51bWJlciImJihkdD1odCk7Zm9yKHZhciB3dD1kdC5wYXJlbnQoKVswXTt3dCE9bnVsbDspe2lmKGJ0W3d0LmlkKCldKXJldHVybiExO3d0PXd0LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIHl0fSxLLnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0PWZ1bmN0aW9uKHV0LGJ0LG10KXtmb3IodmFyIHl0PWJ0Lmxlbmd0aCxkdD0wO2R0PHl0O2R0Kyspe3ZhciBodD1idFtkdF0sd3Q9aHQuY2hpbGRyZW4oKSxYLHB0PWh0LmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczp0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSk7aWYoaHQub3V0ZXJXaWR0aCgpIT1udWxsJiZodC5vdXRlckhlaWdodCgpIT1udWxsP1g9dXQuYWRkKG5ldyBOKG10LmdyYXBoTWFuYWdlcixuZXcgQihodC5wb3NpdGlvbigieCIpLXB0LncvMixodC5wb3NpdGlvbigieSIpLXB0LmgvMiksbmV3IGoocGFyc2VGbG9hdChwdC53KSxwYXJzZUZsb2F0KHB0LmgpKSkpOlg9dXQuYWRkKG5ldyBOKHRoaXMuZ3JhcGhNYW5hZ2VyKSksWC5pZD1odC5kYXRhKCJpZCIpLFgucGFkZGluZ0xlZnQ9cGFyc2VJbnQoaHQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ1RvcD1wYXJzZUludChodC5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQoaHQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ0JvdHRvbT1wYXJzZUludChodC5jc3MoInBhZGRpbmciKSksdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmaHQuaXNQYXJlbnQoKSl7dmFyIFU9aHQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkudyx4dD1odC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS5oLG50PWh0LmNzcygidGV4dC1oYWxpZ24iKTtYLmxhYmVsV2lkdGg9VSxYLmxhYmVsSGVpZ2h0PXh0LFgubGFiZWxQb3M9bnR9aWYodGhpcy5pZFRvTE5vZGVbaHQuZGF0YSgiaWQiKV09WCxpc05hTihYLnJlY3QueCkmJihYLnJlY3QueD0wKSxpc05hTihYLnJlY3QueSkmJihYLnJlY3QueT0wKSx3dCE9bnVsbCYmd3QubGVuZ3RoPjApe3ZhciBPdDtPdD1tdC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobXQubmV3R3JhcGgoKSxYKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoT3Qsd3QsbXQpfX19LEsucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciBzdD1mdW5jdGlvbihidCl7YnQoImxheW91dCIsImNvc2UtYmlsa2VudCIsSyl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZzdChjeXRvc2NhcGUpLHAuZXhwb3J0cz1zdH1dKX0pfSkoWGp0KTt2YXIgbFdlPVhqdC5leHBvcnRzO2NvbnN0IGhXZT1CNyhsV2UpO1lqdC51c2UoaFdlKTtmdW5jdGlvbiBKanQoaSxhLGYscCl7V2p0LmRyYXdOb2RlKGksYSxmLHApLGEuY2hpbGRyZW4mJmEuY2hpbGRyZW4uZm9yRWFjaCgodixtKT0+e0pqdChpLHYsZjwwP206ZixwKX0pfWZ1bmN0aW9uIGZXZShpLGEpe2EuZWRnZXMoKS5tYXAoKGYscCk9Pntjb25zdCB2PWYuZGF0YSgpO2lmKGZbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7Y29uc3QgbT1mWzBdLl9wcml2YXRlLnJzY3JhdGNoO1V0LnRyYWNlKCJFZGdlOiAiLHAsdiksaS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke20uc3RhcnRYfSwke20uc3RhcnRZfSBMICR7bS5taWRYfSwke20ubWlkWX0gTCR7bS5lbmRYfSwke20uZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK3Yuc2VjdGlvbisiIGVkZ2UtZGVwdGgtIit2LmRlcHRoKX19KX1mdW5jdGlvbiB0JHQoaSxhLGYscCl7YS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6aS5pZCxsYWJlbFRleHQ6aS5kZXNjcixoZWlnaHQ6aS5oZWlnaHQsd2lkdGg6aS53aWR0aCxsZXZlbDpwLG5vZGVJZDppLmlkLHBhZGRpbmc6aS5wYWRkaW5nLHR5cGU6aS50eXBlfSxwb3NpdGlvbjp7eDppLngseTppLnl9fSksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5mb3JFYWNoKHY9Pnt0JHQodixhLGYscCsxKSxhLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntpZDpgJHtpLmlkfV8ke3YuaWR9YCxzb3VyY2U6aS5pZCx0YXJnZXQ6di5pZCxkZXB0aDpwLHNlY3Rpb246di5zZWN0aW9ufX0pfSl9ZnVuY3Rpb24gZFdlKGksYSl7cmV0dXJuIG5ldyBQcm9taXNlKGY9Pntjb25zdCBwPXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSx2PVlqdCh7Y29udGFpbmVyOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjeSIpLHN0eWxlOlt7c2VsZWN0b3I6ImVkZ2UiLHN0eWxlOnsiY3VydmUtc3R5bGUiOiJiZXppZXIifX1dfSk7cC5yZW1vdmUoKSx0JHQoaSx2LGEsMCksdi5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obSl7bS5sYXlvdXREaW1lbnNpb25zPSgpPT57Y29uc3QgYj1tLmRhdGEoKTtyZXR1cm57dzpiLndpZHRoLGg6Yi5oZWlnaHR9fX0pLHYubGF5b3V0KHtuYW1lOiJjb3NlLWJpbGtlbnQiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMX0pLnJ1bigpLHYucmVhZHkobT0+e1V0LmluZm8oIlJlYWR5IixtKSxmKHYpfSl9KX1mdW5jdGlvbiBnV2UoaSl7aS5ub2RlcygpLm1hcCgoYSxmKT0+e2NvbnN0IHA9YS5kYXRhKCk7cC54PWEucG9zaXRpb24oKS54LHAueT1hLnBvc2l0aW9uKCkueSxXanQucG9zaXRpb25Ob2RlKHApO2NvbnN0IHY9R2d0KHAubm9kZUlkKTtVdC5pbmZvKCJJZDoiLGYsIlBvc2l0aW9uOiAoIixhLnBvc2l0aW9uKCkueCwiLCAiLGEucG9zaXRpb24oKS55LCIpIixwKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2EucG9zaXRpb24oKS54LXAud2lkdGgvMn0sICR7YS5wb3NpdGlvbigpLnktcC5oZWlnaHQvMn0pYCksdi5hdHRyKCJhdHRyIixgYXBhLSR7Zn0pYCl9KX1jb25zdCBwV2U9e2RyYXc6YXN5bmMoaSxhLGYscCk9Pntjb25zdCB2PUxlKCk7di5odG1sTGFiZWxzPSExLFV0LmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmAraSxwLnBhcnNlcik7Y29uc3QgbT1MZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgXz15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrYSk7Xy5hcHBlbmQoImciKTtjb25zdCBMPXAuZGIuZ2V0TWluZG1hcCgpLE49Xy5hcHBlbmQoImciKTtOLmF0dHIoImNsYXNzIiwibWluZG1hcC1lZGdlcyIpO2NvbnN0IEI9Xy5hcHBlbmQoImciKTtCLmF0dHIoImNsYXNzIiwibWluZG1hcC1ub2RlcyIpLEpqdChCLEwsLTEsdik7Y29uc3Qgaj1hd2FpdCBkV2UoTCx2KTtmV2UoTixqKSxnV2UoaiksY1Qodm9pZCAwLF8sdi5taW5kbWFwLnBhZGRpbmcsdi5taW5kbWFwLnVzZU1heFdpZHRoKX19LGJXZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7ZjxpLlRIRU1FX0NPTE9SX0xJTUlUO2YrKylpWyJsaW5lQ29sb3IiK2ZdPWlbImxpbmVDb2xvciIrZl18fGlbImNTY2FsZUludiIrZl0sSjcoaVsibGluZUNvbG9yIitmXSk/aVsibGluZUNvbG9yIitmXT1icyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTppWyJsaW5lQ29sb3IiK2ZdPWpzKGlbImxpbmVDb2xvciIrZl0sMjApO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspe2NvbnN0IHA9IiIrKDE3LTMqZik7YSs9YAogICAgLnNlY3Rpb24tJHtmLTF9IHJlY3QsIC5zZWN0aW9uLSR7Zi0xfSBwYXRoLCAuc2VjdGlvbi0ke2YtMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2YtMX0gcG9seWdvbiwgLnNlY3Rpb24tJHtmLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7Zi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtmLTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke2YtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtwfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7Zi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrZl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CiAgICBgfXJldHVybiBhfSx2V2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOlpVZSxyZW5kZXJlcjpwV2UscGFyc2VyOnFVZSxzdHlsZXM6aT0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtiV2UoaSl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAubWluZG1hcC1ub2RlLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFdndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEUsXyxMLE4pe2ZvcihMPUx8fHt9LE49RS5sZW5ndGg7Ti0tO0xbRVtOXV09Xyk7cmV0dXJuIEx9LGE9WzEsOV0sZj1bMSwxMF0scD1bMSw1LDEwLDEyXSx2PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTQU5LRVk6NCxORVdMSU5FOjUsY3N2OjYsb3B0X2VvZjo3LHJlY29yZDo4LGNzdl90YWlsOjksRU9GOjEwLCJmaWVsZFtzb3VyY2VdIjoxMSxDT01NQToxMiwiZmllbGRbdGFyZ2V0XSI6MTMsImZpZWxkW3ZhbHVlXSI6MTQsZmllbGQ6MTUsZXNjYXBlZDoxNixub25fZXNjYXBlZDoxNyxEUVVPVEU6MTgsRVNDQVBFRF9URVhUOjE5LE5PTl9FU0NBUEVEX1RFWFQ6MjAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNBTktFWSIsNToiTkVXTElORSIsMTA6IkVPRiIsMTE6ImZpZWxkW3NvdXJjZV0iLDEyOiJDT01NQSIsMTM6ImZpZWxkW3RhcmdldF0iLDE0OiJmaWVsZFt2YWx1ZV0iLDE4OiJEUVVPVEUiLDE5OiJFU0NBUEVEX1RFWFQiLDIwOiJOT05fRVNDQVBFRF9URVhUIn0scHJvZHVjdGlvbnNfOlswLFszLDRdLFs2LDJdLFs5LDJdLFs5LDBdLFs3LDFdLFs3LDBdLFs4LDVdLFsxNSwxXSxbMTUsMV0sWzE2LDNdLFsxNywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihfLEwsTixCLGosUix6KXt2YXIgSz1SLmxlbmd0aC0xO3N3aXRjaChqKXtjYXNlIDc6Y29uc3QgaXQ9Qi5maW5kT3JDcmVhdGVOb2RlKFJbSy00XS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLHN0PUIuZmluZE9yQ3JlYXRlTm9kZShSW0stMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx1dD1wYXJzZUZsb2F0KFJbS10udHJpbSgpKTtCLmFkZExpbmsoaXQsc3QsdXQpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMTp0aGlzLiQ9UltLXTticmVhaztjYXNlIDEwOnRoaXMuJD1SW0stMV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODphLDIwOmZ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSxpKGYsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSxpKHAsWzIsOF0pLGkocCxbMiw5XSksezE5OlsxLDE2XX0saShwLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSxpKGYsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODphLDIwOmZ9LHsxNToxOCwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTg6WzEsMTldfSxpKGYsWzIsM10pLHsxMjpbMSwyMF19LGkocCxbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6YSwyMDpmfSxpKFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKF8sTCl7aWYoTC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF8pO2Vsc2V7dmFyIE49bmV3IEVycm9yKF8pO3Rocm93IE4uaGFzaD1MLE59fSxwYXJzZTpmdW5jdGlvbihfKXt2YXIgTD10aGlzLE49WzBdLEI9W10saj1bbnVsbF0sUj1bXSx6PXRoaXMudGFibGUsSz0iIixpdD0wLHN0PTAsdXQ9MixidD0xLG10PVIuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseXQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxkdD17eXk6e319O2Zvcih2YXIgaHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxodCkmJihkdC55eVtodF09dGhpcy55eVtodF0pO3l0LnNldElucHV0KF8sZHQueXkpLGR0Lnl5LmxleGVyPXl0LGR0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB5dC55eWxsb2M+InUiJiYoeXQueXlsbG9jPXt9KTt2YXIgd3Q9eXQueXlsbG9jO1IucHVzaCh3dCk7dmFyIFg9eXQub3B0aW9ucyYmeXQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGR0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWR0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHB0KCl7dmFyIEl0O3JldHVybiBJdD1CLnBvcCgpfHx5dC5sZXgoKXx8YnQsdHlwZW9mIEl0IT0ibnVtYmVyIiYmKEl0IGluc3RhbmNlb2YgQXJyYXkmJihCPUl0LEl0PUIucG9wKCkpLEl0PUwuc3ltYm9sc19bSXRdfHxJdCksSXR9Zm9yKHZhciBVLHh0LG50LE90LE50PXt9LHF0LEN0LFosVHQ7Oyl7aWYoeHQ9TltOLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3h0XT9udD10aGlzLmRlZmF1bHRBY3Rpb25zW3h0XTooKFU9PT1udWxsfHx0eXBlb2YgVT4idSIpJiYoVT1wdCgpKSxudD16W3h0XSYmelt4dF1bVV0pLHR5cGVvZiBudD4idSJ8fCFudC5sZW5ndGh8fCFudFswXSl7dmFyIEh0PSIiO1R0PVtdO2ZvcihxdCBpbiB6W3h0XSl0aGlzLnRlcm1pbmFsc19bcXRdJiZxdD51dCYmVHQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3F0XSsiJyIpO3l0LnNob3dQb3NpdGlvbj9IdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhpdCsxKStgOgpgK3l0LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArVHQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVXXx8VSkrIiciOkh0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGl0KzEpKyI6IFVuZXhwZWN0ZWQgIisoVT09YnQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIiksdGhpcy5wYXJzZUVycm9yKEh0LHt0ZXh0Onl0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVXXx8VSxsaW5lOnl0Lnl5bGluZW5vLGxvYzp3dCxleHBlY3RlZDpUdH0pfWlmKG50WzBdaW5zdGFuY2VvZiBBcnJheSYmbnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4dCsiLCB0b2tlbjogIitVKTtzd2l0Y2gobnRbMF0pe2Nhc2UgMTpOLnB1c2goVSksai5wdXNoKHl0Lnl5dGV4dCksUi5wdXNoKHl0Lnl5bGxvYyksTi5wdXNoKG50WzFdKSxVPW51bGwsc3Q9eXQueXlsZW5nLEs9eXQueXl0ZXh0LGl0PXl0Lnl5bGluZW5vLHd0PXl0Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoQ3Q9dGhpcy5wcm9kdWN0aW9uc19bbnRbMV1dWzFdLE50LiQ9altqLmxlbmd0aC1DdF0sTnQuXyQ9e2ZpcnN0X2xpbmU6UltSLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpSW1IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UltSLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UltSLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWCYmKE50Ll8kLnJhbmdlPVtSW1IubGVuZ3RoLShDdHx8MSldLnJhbmdlWzBdLFJbUi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTnQsW0ssc3QsaXQsZHQueXksbnRbMV0saixSXS5jb25jYXQobXQpKSx0eXBlb2YgT3Q8InUiKXJldHVybiBPdDtDdCYmKE49Ti5zbGljZSgwLC0xKkN0KjIpLGo9ai5zbGljZSgwLC0xKkN0KSxSPVIuc2xpY2UoMCwtMSpDdCkpLE4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tudFsxXV1bMF0pLGoucHVzaChOdC4kKSxSLnB1c2goTnQuXyQpLFo9eltOW04ubGVuZ3RoLTJdXVtOW04ubGVuZ3RoLTFdXSxOLnB1c2goWik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG09ZnVuY3Rpb24oKXt2YXIgRT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihMLE4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoTCxOKTtlbHNlIHRocm93IG5ldyBFcnJvcihMKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oXyxMKXtyZXR1cm4gdGhpcy55eT1MfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1fLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBfPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1fLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fLHRoaXMubWF0Y2hlZCs9Xzt2YXIgTD1fLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gTD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksX30sdW5wdXQ6ZnVuY3Rpb24oXyl7dmFyIEw9Xy5sZW5ndGgsTj1fLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Xyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtTCksdGhpcy5vZmZzZXQtPUw7dmFyIEI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU4ubGVuZ3RoLTEpO3ZhciBqPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpOPyhOLmxlbmd0aD09PUIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStCW0IubGVuZ3RoLU4ubGVuZ3RoXS5sZW5ndGgtTlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUx9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1balswXSxqWzBdK3RoaXMueXlsZW5nLUxdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihfKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoXykpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKStfLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaDtyZXR1cm4gXy5sZW5ndGg8MjAmJihfKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1fLmxlbmd0aCkpLChfLnN1YnN0cigwLDIwKSsoXy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5wYXN0SW5wdXQoKSxMPW5ldyBBcnJheShfLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIF8rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0wrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKF8sTCl7dmFyIE4sQixqO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihqPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGoueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQj1fWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxCJiYodGhpcy55eWxpbmVubys9Qi5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpCP0JbQi5sZW5ndGgtMV0ubGVuZ3RoLUJbQi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitfWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPV9bMF0sdGhpcy5tYXRjaCs9X1swXSx0aGlzLm1hdGNoZXM9Xyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShfWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1fWzBdLE49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsTCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxOKXJldHVybiBOO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBSIGluIGopdGhpc1tSXT1qW1JdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIF8sTCxOLEI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaj10aGlzLl9jdXJyZW50UnVsZXMoKSxSPTA7UjxqLmxlbmd0aDtSKyspaWYoTj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2pbUl1dKSxOJiYoIUx8fE5bMF0ubGVuZ3RoPkxbMF0ubGVuZ3RoKSl7aWYoTD1OLEI9Uix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihfPXRoaXMudGVzdF9tYXRjaChOLGpbUl0pLF8hPT0hMSlyZXR1cm4gXztpZih0aGlzLl9iYWNrdHJhY2spe0w9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gTD8oXz10aGlzLnRlc3RfbWF0Y2goTCxqW0JdKSxfIT09ITE/XzohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5uZXh0KCk7cmV0dXJuIEx8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEwpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChMKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgTD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBMPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oTCl7cmV0dXJuIEw9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhMfHwwKSxMPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbTF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oTCl7dGhpcy5iZWdpbihMKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e2Vhc3lfa2V3b3JkX3J1bGVzOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEwsTixCLGope3N3aXRjaChCKXtjYXNlIDA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJjc3YiKSw0O2Nhc2UgMTpyZXR1cm4gMTA7Y2FzZSAyOnJldHVybiA1O2Nhc2UgMzpyZXR1cm4gMTI7Y2FzZSA0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZXNjYXBlZF90ZXh0IiksMTg7Y2FzZSA1OnJldHVybiAyMDtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNzpyZXR1cm4gMTl9fSxydWxlczpbL14oPzpzYW5rZXktYmV0YVxiKS8sL14oPzokKS8sL14oPzooKFx1MDAwRFx1MDAwQSl8KFx1MDAwQSkpKS8sL14oPzooXHUwMDJDKSkvLC9eKD86KFx1MDAyMikpLywvXig/OihbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSkqKS8sL14oPzooXHUwMDIyKSg/IShcdTAwMjIpKSkvLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9dLGNvbmRpdGlvbnM6e2Nzdjp7cnVsZXM6WzEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMX0sZXNjYXBlZF90ZXh0OntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gRX0oKTt2LmxleGVyPW07ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIGIucHJvdG90eXBlPXYsdi5QYXJzZXI9YixuZXcgYn0oKTtXZ3QucGFyc2VyPVdndDtjb25zdCBVSz1XZ3Q7bGV0IFdLPVtdLEtLPVtdLHZMPXt9O2NvbnN0IHdXZT0oKT0+e1dLPVtdLEtLPVtdLHZMPXt9LGFwKCl9O2NsYXNzIG1XZXtjb25zdHJ1Y3RvcihhLGYscD0wKXt0aGlzLnNvdXJjZT1hLHRoaXMudGFyZ2V0PWYsdGhpcy52YWx1ZT1wfX1jb25zdCB5V2U9KGksYSxmKT0+e1dLLnB1c2gobmV3IG1XZShpLGEsZikpfTtjbGFzcyB4V2V7Y29uc3RydWN0b3IoYSl7dGhpcy5JRD1hfX1jb25zdCBrV2U9e25vZGVzTWFwOnZMLGdldENvbmZpZzooKT0+TGUoKS5zYW5rZXksZ2V0Tm9kZXM6KCk9PktLLGdldExpbmtzOigpPT5XSyxnZXRHcmFwaDooKT0+KHtub2RlczpLSy5tYXAoaT0+KHtpZDppLklEfSkpLGxpbmtzOldLLm1hcChpPT4oe3NvdXJjZTppLnNvdXJjZS5JRCx0YXJnZXQ6aS50YXJnZXQuSUQsdmFsdWU6aS52YWx1ZX0pKX0pLGFkZExpbms6eVdlLGZpbmRPckNyZWF0ZU5vZGU6aT0+KGk9WXIuc2FuaXRpemVUZXh0KGksTGUoKSksdkxbaV18fCh2TFtpXT1uZXcgeFdlKGkpLEtLLnB1c2godkxbaV0pKSx2TFtpXSksZ2V0QWNjVGl0bGU6b3Asc2V0QWNjVGl0bGU6Y2csZ2V0QWNjRGVzY3JpcHRpb246dXAsc2V0QWNjRGVzY3JpcHRpb246Y3AsZ2V0RGlhZ3JhbVRpdGxlOkRiLHNldERpYWdyYW1UaXRsZTpaMixjbGVhcjp3V2V9O2Z1bmN0aW9uIGUkdChpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY8dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIG4kdChpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHYgb2YgaSkodj1hKHYsKytwLGkpKSE9bnVsbCYmKGY+dnx8Zj09PXZvaWQgMCYmdj49dikmJihmPXYpfXJldHVybiBmfWZ1bmN0aW9uIEtndChpLGEpe2xldCBmPTA7aWYoYT09PXZvaWQgMClmb3IobGV0IHAgb2YgaSkocD0rcCkmJihmKz1wKTtlbHNle2xldCBwPS0xO2ZvcihsZXQgdiBvZiBpKSh2PSthKHYsKytwLGkpKSYmKGYrPXYpfXJldHVybiBmfWZ1bmN0aW9uIEVXZShpKXtyZXR1cm4gaS50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gVFdlKGkpe3JldHVybiBpLmRlcHRofWZ1bmN0aW9uIENXZShpLGEpe3JldHVybiBhLTEtaS5oZWlnaHR9ZnVuY3Rpb24gciR0KGksYSl7cmV0dXJuIGkuc291cmNlTGlua3MubGVuZ3RoP2kuZGVwdGg6YS0xfWZ1bmN0aW9uIF9XZShpKXtyZXR1cm4gaS50YXJnZXRMaW5rcy5sZW5ndGg/aS5kZXB0aDppLnNvdXJjZUxpbmtzLmxlbmd0aD9uJHQoaS5zb3VyY2VMaW5rcyxFV2UpLTE6MH1mdW5jdGlvbiBZSyhpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gaSR0KGksYSl7cmV0dXJuIFhLKGkuc291cmNlLGEuc291cmNlKXx8aS5pbmRleC1hLmluZGV4fWZ1bmN0aW9uIHMkdChpLGEpe3JldHVybiBYSyhpLnRhcmdldCxhLnRhcmdldCl8fGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiBYSyhpLGEpe3JldHVybiBpLnkwLWEueTB9ZnVuY3Rpb24gWWd0KGkpe3JldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFNXZShpKXtyZXR1cm4gaS5pbmRleH1mdW5jdGlvbiBBV2UoaSl7cmV0dXJuIGkubm9kZXN9ZnVuY3Rpb24gTFdlKGkpe3JldHVybiBpLmxpbmtzfWZ1bmN0aW9uIGEkdChpLGEpe2NvbnN0IGY9aS5nZXQoYSk7aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2EpO3JldHVybiBmfWZ1bmN0aW9uIG8kdCh7bm9kZXM6aX0pe2Zvcihjb25zdCBhIG9mIGkpe2xldCBmPWEueTAscD1mO2Zvcihjb25zdCB2IG9mIGEuc291cmNlTGlua3Mpdi55MD1mK3Yud2lkdGgvMixmKz12LndpZHRoO2Zvcihjb25zdCB2IG9mIGEudGFyZ2V0TGlua3Mpdi55MT1wK3Yud2lkdGgvMixwKz12LndpZHRofX1mdW5jdGlvbiBNV2UoKXtsZXQgaT0wLGE9MCxmPTEscD0xLHY9MjQsbT04LGIsRT1TV2UsXz1yJHQsTCxOLEI9QVdlLGo9TFdlLFI9NjtmdW5jdGlvbiB6KCl7Y29uc3QgTnQ9e25vZGVzOkIuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOmouYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gSyhOdCksaXQoTnQpLHN0KE50KSx1dChOdCkseXQoTnQpLG8kdChOdCksTnR9ei51cGRhdGU9ZnVuY3Rpb24oTnQpe3JldHVybiBvJHQoTnQpLE50fSx6Lm5vZGVJZD1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpFfSx6Lm5vZGVBbGlnbj1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpffSx6Lm5vZGVTb3J0PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD1OdCx6KTpMfSx6Lm5vZGVXaWR0aD1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K050LHopOnZ9LHoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPWI9K050LHopOm19LHoubm9kZXM9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhCPXR5cGVvZiBOdD09ImZ1bmN0aW9uIj9OdDpZSyhOdCkseik6Qn0sei5saW5rcz1mdW5jdGlvbihOdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGo9dHlwZW9mIE50PT0iZnVuY3Rpb24iP050OllLKE50KSx6KTpqfSx6LmxpbmtTb3J0PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1OdCx6KTpOfSx6LnNpemU9ZnVuY3Rpb24oTnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9MCxmPStOdFswXSxwPStOdFsxXSx6KTpbZi1pLHAtYV19LHouZXh0ZW50PWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rTnRbMF1bMF0sZj0rTnRbMV1bMF0sYT0rTnRbMF1bMV0scD0rTnRbMV1bMV0seik6W1tpLGFdLFtmLHBdXX0sei5pdGVyYXRpb25zPWZ1bmN0aW9uKE50KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj0rTnQseik6Un07ZnVuY3Rpb24gSyh7bm9kZXM6TnQsbGlua3M6cXR9KXtmb3IoY29uc3RbWixUdF1vZiBOdC5lbnRyaWVzKCkpVHQuaW5kZXg9WixUdC5zb3VyY2VMaW5rcz1bXSxUdC50YXJnZXRMaW5rcz1bXTtjb25zdCBDdD1uZXcgTWFwKE50Lm1hcCgoWixUdCk9PltFKFosVHQsTnQpLFpdKSk7Zm9yKGNvbnN0W1osVHRdb2YgcXQuZW50cmllcygpKXtUdC5pbmRleD1aO2xldHtzb3VyY2U6SHQsdGFyZ2V0Okl0fT1UdDt0eXBlb2YgSHQhPSJvYmplY3QiJiYoSHQ9VHQuc291cmNlPWEkdChDdCxIdCkpLHR5cGVvZiBJdCE9Im9iamVjdCImJihJdD1UdC50YXJnZXQ9YSR0KEN0LEl0KSksSHQuc291cmNlTGlua3MucHVzaChUdCksSXQudGFyZ2V0TGlua3MucHVzaChUdCl9aWYoTiE9bnVsbClmb3IoY29uc3R7c291cmNlTGlua3M6Wix0YXJnZXRMaW5rczpUdH1vZiBOdClaLnNvcnQoTiksVHQuc29ydChOKX1mdW5jdGlvbiBpdCh7bm9kZXM6TnR9KXtmb3IoY29uc3QgcXQgb2YgTnQpcXQudmFsdWU9cXQuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChLZ3QocXQuc291cmNlTGlua3MsWWd0KSxLZ3QocXQudGFyZ2V0TGlua3MsWWd0KSk6cXQuZml4ZWRWYWx1ZX1mdW5jdGlvbiBzdCh7bm9kZXM6TnR9KXtjb25zdCBxdD1OdC5sZW5ndGg7bGV0IEN0PW5ldyBTZXQoTnQpLFo9bmV3IFNldCxUdD0wO2Zvcig7Q3Quc2l6ZTspe2Zvcihjb25zdCBIdCBvZiBDdCl7SHQuZGVwdGg9VHQ7Zm9yKGNvbnN0e3RhcmdldDpJdH1vZiBIdC5zb3VyY2VMaW5rcylaLmFkZChJdCl9aWYoKytUdD5xdCl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtDdD1aLFo9bmV3IFNldH19ZnVuY3Rpb24gdXQoe25vZGVzOk50fSl7Y29uc3QgcXQ9TnQubGVuZ3RoO2xldCBDdD1uZXcgU2V0KE50KSxaPW5ldyBTZXQsVHQ9MDtmb3IoO0N0LnNpemU7KXtmb3IoY29uc3QgSHQgb2YgQ3Qpe0h0LmhlaWdodD1UdDtmb3IoY29uc3R7c291cmNlOkl0fW9mIEh0LnRhcmdldExpbmtzKVouYWRkKEl0KX1pZigrK1R0PnF0KXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0N0PVosWj1uZXcgU2V0fX1mdW5jdGlvbiBidCh7bm9kZXM6TnR9KXtjb25zdCBxdD1lJHQoTnQsVHQ9PlR0LmRlcHRoKSsxLEN0PShmLWktdikvKHF0LTEpLFo9bmV3IEFycmF5KHF0KTtmb3IoY29uc3QgVHQgb2YgTnQpe2NvbnN0IEh0PU1hdGgubWF4KDAsTWF0aC5taW4ocXQtMSxNYXRoLmZsb29yKF8uY2FsbChudWxsLFR0LHF0KSkpKTtUdC5sYXllcj1IdCxUdC54MD1pK0h0KkN0LFR0LngxPVR0LngwK3YsWltIdF0/WltIdF0ucHVzaChUdCk6WltIdF09W1R0XX1pZihMKWZvcihjb25zdCBUdCBvZiBaKVR0LnNvcnQoTCk7cmV0dXJuIFp9ZnVuY3Rpb24gbXQoTnQpe2NvbnN0IHF0PW4kdChOdCxDdD0+KHAtYS0oQ3QubGVuZ3RoLTEpKmIpL0tndChDdCxZZ3QpKTtmb3IoY29uc3QgQ3Qgb2YgTnQpe2xldCBaPWE7Zm9yKGNvbnN0IFR0IG9mIEN0KXtUdC55MD1aLFR0LnkxPVorVHQudmFsdWUqcXQsWj1UdC55MStiO2Zvcihjb25zdCBIdCBvZiBUdC5zb3VyY2VMaW5rcylIdC53aWR0aD1IdC52YWx1ZSpxdH1aPShwLVorYikvKEN0Lmxlbmd0aCsxKTtmb3IobGV0IFR0PTA7VHQ8Q3QubGVuZ3RoOysrVHQpe2NvbnN0IEh0PUN0W1R0XTtIdC55MCs9WiooVHQrMSksSHQueTErPVoqKFR0KzEpfXh0KEN0KX19ZnVuY3Rpb24geXQoTnQpe2NvbnN0IHF0PWJ0KE50KTtiPU1hdGgubWluKG0sKHAtYSkvKGUkdChxdCxDdD0+Q3QubGVuZ3RoKS0xKSksbXQocXQpO2ZvcihsZXQgQ3Q9MDtDdDxSOysrQ3Qpe2NvbnN0IFo9TWF0aC5wb3coLjk5LEN0KSxUdD1NYXRoLm1heCgxLVosKEN0KzEpL1IpO2h0KHF0LFosVHQpLGR0KHF0LFosVHQpfX1mdW5jdGlvbiBkdChOdCxxdCxDdCl7Zm9yKGxldCBaPTEsVHQ9TnQubGVuZ3RoO1o8VHQ7KytaKXtjb25zdCBIdD1OdFtaXTtmb3IoY29uc3QgSXQgb2YgSHQpe2xldCBGdD0wLGtlPTA7Zm9yKGNvbnN0e3NvdXJjZTpNZSx2YWx1ZTp2ZX1vZiBJdC50YXJnZXRMaW5rcyl7bGV0IEdlPXZlKihJdC5sYXllci1NZS5sYXllcik7RnQrPW50KE1lLEl0KSpHZSxrZSs9R2V9aWYoIShrZT4wKSljb250aW51ZTtsZXQgcG49KEZ0L2tlLUl0LnkwKSpxdDtJdC55MCs9cG4sSXQueTErPXBuLFUoSXQpfUw9PT12b2lkIDAmJkh0LnNvcnQoWEspLHd0KEh0LEN0KX19ZnVuY3Rpb24gaHQoTnQscXQsQ3Qpe2ZvcihsZXQgWj1OdC5sZW5ndGgsVHQ9Wi0yO1R0Pj0wOy0tVHQpe2NvbnN0IEh0PU50W1R0XTtmb3IoY29uc3QgSXQgb2YgSHQpe2xldCBGdD0wLGtlPTA7Zm9yKGNvbnN0e3RhcmdldDpNZSx2YWx1ZTp2ZX1vZiBJdC5zb3VyY2VMaW5rcyl7bGV0IEdlPXZlKihNZS5sYXllci1JdC5sYXllcik7RnQrPU90KEl0LE1lKSpHZSxrZSs9R2V9aWYoIShrZT4wKSljb250aW51ZTtsZXQgcG49KEZ0L2tlLUl0LnkwKSpxdDtJdC55MCs9cG4sSXQueTErPXBuLFUoSXQpfUw9PT12b2lkIDAmJkh0LnNvcnQoWEspLHd0KEh0LEN0KX19ZnVuY3Rpb24gd3QoTnQscXQpe2NvbnN0IEN0PU50Lmxlbmd0aD4+MSxaPU50W0N0XTtwdChOdCxaLnkwLWIsQ3QtMSxxdCksWChOdCxaLnkxK2IsQ3QrMSxxdCkscHQoTnQscCxOdC5sZW5ndGgtMSxxdCksWChOdCxhLDAscXQpfWZ1bmN0aW9uIFgoTnQscXQsQ3QsWil7Zm9yKDtDdDxOdC5sZW5ndGg7KytDdCl7Y29uc3QgVHQ9TnRbQ3RdLEh0PShxdC1UdC55MCkqWjtIdD4xZS02JiYoVHQueTArPUh0LFR0LnkxKz1IdCkscXQ9VHQueTErYn19ZnVuY3Rpb24gcHQoTnQscXQsQ3QsWil7Zm9yKDtDdD49MDstLUN0KXtjb25zdCBUdD1OdFtDdF0sSHQ9KFR0LnkxLXF0KSpaO0h0PjFlLTYmJihUdC55MC09SHQsVHQueTEtPUh0KSxxdD1UdC55MC1ifX1mdW5jdGlvbiBVKHtzb3VyY2VMaW5rczpOdCx0YXJnZXRMaW5rczpxdH0pe2lmKE49PT12b2lkIDApe2Zvcihjb25zdHtzb3VyY2U6e3NvdXJjZUxpbmtzOkN0fX1vZiBxdClDdC5zb3J0KHMkdCk7Zm9yKGNvbnN0e3RhcmdldDp7dGFyZ2V0TGlua3M6Q3R9fW9mIE50KUN0LnNvcnQoaSR0KX19ZnVuY3Rpb24geHQoTnQpe2lmKE49PT12b2lkIDApZm9yKGNvbnN0e3NvdXJjZUxpbmtzOnF0LHRhcmdldExpbmtzOkN0fW9mIE50KXF0LnNvcnQocyR0KSxDdC5zb3J0KGkkdCl9ZnVuY3Rpb24gbnQoTnQscXQpe2xldCBDdD1OdC55MC0oTnQuc291cmNlTGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7dGFyZ2V0Olosd2lkdGg6VHR9b2YgTnQuc291cmNlTGlua3Mpe2lmKFo9PT1xdClicmVhaztDdCs9VHQrYn1mb3IoY29uc3R7c291cmNlOlosd2lkdGg6VHR9b2YgcXQudGFyZ2V0TGlua3Mpe2lmKFo9PT1OdClicmVhaztDdC09VHR9cmV0dXJuIEN0fWZ1bmN0aW9uIE90KE50LHF0KXtsZXQgQ3Q9cXQueTAtKHF0LnRhcmdldExpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3NvdXJjZTpaLHdpZHRoOlR0fW9mIHF0LnRhcmdldExpbmtzKXtpZihaPT09TnQpYnJlYWs7Q3QrPVR0K2J9Zm9yKGNvbnN0e3RhcmdldDpaLHdpZHRoOlR0fW9mIE50LnNvdXJjZUxpbmtzKXtpZihaPT09cXQpYnJlYWs7Q3QtPVR0fXJldHVybiBDdH1yZXR1cm4gen12YXIgWGd0PU1hdGguUEksUWd0PTIqWGd0LE1UPTFlLTYsSVdlPVFndC1NVDtmdW5jdGlvbiBaZ3QoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBjJHQoKXtyZXR1cm4gbmV3IFpndH1aZ3QucHJvdG90eXBlPWMkdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpndCxtb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLGEpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK2ErIiwiKyh0aGlzLl94MT0rZikrIiwiKyh0aGlzLl95MT0rcCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxhLGYscCx2LG0pe3RoaXMuXys9IkMiKyAraSsiLCIrICthKyIsIisgK2YrIiwiKyArcCsiLCIrKHRoaXMuX3gxPSt2KSsiLCIrKHRoaXMuX3kxPSttKX0sYXJjVG86ZnVuY3Rpb24oaSxhLGYscCx2KXtpPStpLGE9K2EsZj0rZixwPStwLHY9K3Y7dmFyIG09dGhpcy5feDEsYj10aGlzLl95MSxFPWYtaSxfPXAtYSxMPW0taSxOPWItYSxCPUwqTCtOKk47aWYodjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3YpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNlIGlmKEI+TVQpaWYoIShNYXRoLmFicyhOKkUtXypMKT5NVCl8fCF2KXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPWEpO2Vsc2V7dmFyIGo9Zi1tLFI9cC1iLHo9RSpFK18qXyxLPWoqaitSKlIsaXQ9TWF0aC5zcXJ0KHopLHN0PU1hdGguc3FydChCKSx1dD12Kk1hdGgudGFuKChYZ3QtTWF0aC5hY29zKCh6K0ItSykvKDIqaXQqc3QpKSkvMiksYnQ9dXQvc3QsbXQ9dXQvaXQ7TWF0aC5hYnMoYnQtMSk+TVQmJih0aGlzLl8rPSJMIisoaStidCpMKSsiLCIrKGErYnQqTikpLHRoaXMuXys9IkEiK3YrIiwiK3YrIiwwLDAsIisgKyhOKmo+TCpSKSsiLCIrKHRoaXMuX3gxPWkrbXQqRSkrIiwiKyh0aGlzLl95MT1hK210Kl8pfX0sYXJjOmZ1bmN0aW9uKGksYSxmLHAsdixtKXtpPStpLGE9K2EsZj0rZixtPSEhbTt2YXIgYj1mKk1hdGguY29zKHApLEU9ZipNYXRoLnNpbihwKSxfPWkrYixMPWErRSxOPTFebSxCPW0/cC12OnYtcDtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK18rIiwiK0w6KE1hdGguYWJzKHRoaXMuX3gxLV8pPk1UfHxNYXRoLmFicyh0aGlzLl95MS1MKT5NVCkmJih0aGlzLl8rPSJMIitfKyIsIitMKSxmJiYoQjwwJiYoQj1CJVFndCtRZ3QpLEI+SVdlP3RoaXMuXys9IkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisoaS1iKSsiLCIrKGEtRSkrIkEiK2YrIiwiK2YrIiwwLDEsIitOKyIsIisodGhpcy5feDE9XykrIiwiKyh0aGlzLl95MT1MKTpCPk1UJiYodGhpcy5fKz0iQSIrZisiLCIrZisiLDAsIisgKyhCPj1YZ3QpKyIsIitOKyIsIisodGhpcy5feDE9aStmKk1hdGguY29zKHYpKSsiLCIrKHRoaXMuX3kxPWErZipNYXRoLnNpbih2KSkpKX0scmVjdDpmdW5jdGlvbihpLGEsZixwKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2EpKyJoIisgK2YrInYiKyArcCsiaCIrLWYrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiB1JHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIERXZShpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBPV2UoaSl7cmV0dXJuIGlbMV19dmFyIE5XZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gUFdlKGkpe3JldHVybiBpLnNvdXJjZX1mdW5jdGlvbiBGV2UoaSl7cmV0dXJuIGkudGFyZ2V0fWZ1bmN0aW9uIEJXZShpKXt2YXIgYT1QV2UsZj1GV2UscD1EV2Usdj1PV2UsbT1udWxsO2Z1bmN0aW9uIGIoKXt2YXIgRSxfPU5XZS5jYWxsKGFyZ3VtZW50cyksTD1hLmFwcGx5KHRoaXMsXyksTj1mLmFwcGx5KHRoaXMsXyk7aWYobXx8KG09RT1jJHQoKSksaShtLCtwLmFwcGx5KHRoaXMsKF9bMF09TCxfKSksK3YuYXBwbHkodGhpcyxfKSwrcC5hcHBseSh0aGlzLChfWzBdPU4sXykpLCt2LmFwcGx5KHRoaXMsXykpLEUpcmV0dXJuIG09bnVsbCxFKyIifHxudWxsfXJldHVybiBiLnNvdXJjZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGIpOmF9LGIudGFyZ2V0PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUUsYik6Zn0sYi54PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6dSR0KCtFKSxiKTpwfSxiLnk9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTp1JHQoK0UpLGIpOnZ9LGIuY29udGV4dD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1FPz9udWxsLGIpOm19LGJ9ZnVuY3Rpb24gUldlKGksYSxmLHAsdil7aS5tb3ZlVG8oYSxmKSxpLmJlemllckN1cnZlVG8oYT0oYStwKS8yLGYsYSx2LHAsdil9ZnVuY3Rpb24galdlKCl7cmV0dXJuIEJXZShSV2UpfWZ1bmN0aW9uICRXZShpKXtyZXR1cm5baS5zb3VyY2UueDEsaS55MF19ZnVuY3Rpb24geldlKGkpe3JldHVybltpLnRhcmdldC54MCxpLnkxXX1mdW5jdGlvbiBxV2UoKXtyZXR1cm4galdlKCkuc291cmNlKCRXZSkudGFyZ2V0KHpXZSl9Y29uc3QgSmd0PWNsYXNze3N0YXRpYyBuZXh0KGkpe3JldHVybiBuZXcgSmd0KGkrICsrSmd0LmNvdW50KX1jb25zdHJ1Y3RvcihpKXt0aGlzLmlkPWksdGhpcy5ocmVmPWAjJHtpfWB9dG9TdHJpbmcoKXtyZXR1cm4idXJsKCIrdGhpcy5ocmVmKyIpIn19O2xldCB0cHQ9Smd0O3RwdC5jb3VudD0wO2NvbnN0IEhXZT17bGVmdDpUV2UscmlnaHQ6Q1dlLGNlbnRlcjpfV2UsanVzdGlmeTpyJHR9LEdXZT17ZHJhdzpmdW5jdGlvbihpLGEsZixwKXtjb25zdHtzZWN1cml0eUxldmVsOnYsc2Fua2V5Om19PUxlKCksYj1vVC5zYW5rZXk7bGV0IEU7dj09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgXz15cih2PT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEw9dj09PSJzYW5kYm94Ij9fLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKSxOPShtPT1udWxsP3ZvaWQgMDptLndpZHRoKT8/Yi53aWR0aCxCPShtPT1udWxsP3ZvaWQgMDptLmhlaWdodCk/P2Iud2lkdGgsaj0obT09bnVsbD92b2lkIDA6bS51c2VNYXhXaWR0aCk/P2IudXNlTWF4V2lkdGgsUj0obT09bnVsbD92b2lkIDA6bS5ub2RlQWxpZ25tZW50KT8/Yi5ub2RlQWxpZ25tZW50LHo9KG09PW51bGw/dm9pZCAwOm0ucHJlZml4KT8/Yi5wcmVmaXgsSz0obT09bnVsbD92b2lkIDA6bS5zdWZmaXgpPz9iLnN1ZmZpeCxpdD0obT09bnVsbD92b2lkIDA6bS5zaG93VmFsdWVzKT8/Yi5zaG93VmFsdWVzO29nKEwsQixOLGopO2NvbnN0IHN0PXAuZGIuZ2V0R3JhcGgoKSx1dD1IV2VbUl0sYnQ9MTA7TVdlKCkubm9kZUlkKHB0PT5wdC5pZCkubm9kZVdpZHRoKGJ0KS5ub2RlUGFkZGluZygxMCsoaXQ/MTU6MCkpLm5vZGVBbGlnbih1dCkuZXh0ZW50KFtbMCwwXSxbTixCXV0pKHN0KTtjb25zdCB5dD14MXQoUzdlKTtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKS5zZWxlY3RBbGwoIi5ub2RlIikuZGF0YShzdC5ub2Rlcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLmF0dHIoImlkIixwdD0+KHB0LnVpZD10cHQubmV4dCgibm9kZS0iKSkuaWQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24ocHQpe3JldHVybiJ0cmFuc2xhdGUoIitwdC54MCsiLCIrcHQueTArIikifSkuYXR0cigieCIscHQ9PnB0LngwKS5hdHRyKCJ5IixwdD0+cHQueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIscHQ9PnB0LnkxLXB0LnkwKS5hdHRyKCJ3aWR0aCIscHQ9PnB0LngxLXB0LngwKS5hdHRyKCJmaWxsIixwdD0+eXQocHQuaWQpKTtjb25zdCBkdD0oe2lkOnB0LHZhbHVlOlV9KT0+aXQ/YCR7cHR9CiR7en0ke01hdGgucm91bmQoVSoxMDApLzEwMH0ke0t9YDpwdDtMLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHN0Lm5vZGVzKS5qb2luKCJ0ZXh0IikuYXR0cigieCIscHQ9PnB0LngwPE4vMj9wdC54MSs2OnB0LngwLTYpLmF0dHIoInkiLHB0PT4ocHQueTErcHQueTApLzIpLmF0dHIoImR5IixgJHtpdD8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLHB0PT5wdC54MDxOLzI/InN0YXJ0IjoiZW5kIikudGV4dChkdCk7Y29uc3QgaHQ9TC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHN0LmxpbmtzKS5qb2luKCJnIikuYXR0cigiY2xhc3MiLCJsaW5rIikuc3R5bGUoIm1peC1ibGVuZC1tb2RlIiwibXVsdGlwbHkiKSx3dD0obT09bnVsbD92b2lkIDA6bS5saW5rQ29sb3IpfHwiZ3JhZGllbnQiO2lmKHd0PT09ImdyYWRpZW50Iil7Y29uc3QgcHQ9aHQuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixVPT4oVS51aWQ9dHB0Lm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLFU9PlUuc291cmNlLngxKS5hdHRyKCJ4MiIsVT0+VS50YXJnZXQueDApO3B0LmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsIjAlIikuYXR0cigic3RvcC1jb2xvciIsVT0+eXQoVS5zb3VyY2UuaWQpKSxwdC5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsVT0+eXQoVS50YXJnZXQuaWQpKX1sZXQgWDtzd2l0Y2god3Qpe2Nhc2UiZ3JhZGllbnQiOlg9cHQ9PnB0LnVpZDticmVhaztjYXNlInNvdXJjZSI6WD1wdD0+eXQocHQuc291cmNlLmlkKTticmVhaztjYXNlInRhcmdldCI6WD1wdD0+eXQocHQudGFyZ2V0LmlkKTticmVhaztkZWZhdWx0Olg9d3R9aHQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscVdlKCkpLmF0dHIoInN0cm9rZSIsWCkuYXR0cigic3Ryb2tlLXdpZHRoIixwdD0+TWF0aC5tYXgoMSxwdC53aWR0aCkpfX0sVldlPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksVVdlPVVLLnBhcnNlLmJpbmQoVUspO1VLLnBhcnNlPWk9PlVXZShWV2UoaSkpO2NvbnN0IFdXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlVLLGRiOmtXZSxyZW5kZXJlcjpHV2V9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiBPYn0pOwo=`; \ No newline at end of file diff --git a/packages/renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js index b631153844..2016f5dafc 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,14 +1,13 @@ -(function(wA,d0){typeof exports=="object"&&typeof module<"u"?module.exports=d0():typeof define=="function"&&define.amd?define(d0):(wA=typeof globalThis<"u"?globalThis:wA||self,wA.mermaid=d0())})(this,function(){"use strict";function wA(i){for(var a=[],f=1;f=tt?Ct:""+Array(tt+1-pt.length).join(Pt)+Ct},Tt={s:ft,z:function(Ct){var tt=-Ct.utcOffset(),Pt=Math.abs(tt),pt=Math.floor(Pt/60),Ft=Pt%60;return(tt<=0?"+":"-")+ft(pt,2,"0")+":"+ft(Ft,2,"0")},m:function Ct(tt,Pt){if(tt.date()1)return Ct(Rt[0])}else{var Bt=tt.name;mt[Bt]=tt,Ft=Bt}return!pt&&Ft&&(kt=Ft),Ft||!pt&&kt},st=function(Ct,tt){if(ct(Ct))return Ct.clone();var Pt=typeof tt=="object"?tt:{};return Pt.date=Ct,Pt.args=arguments,new ht(Pt)},xt=Tt;xt.l=yt,xt.i=ct,xt.w=function(Ct,tt){return st(Ct,{locale:tt.$L,utc:tt.$u,x:tt.$x,$offset:tt.$offset})};var ht=function(){function Ct(Pt){this.$L=yt(Pt.locale,null,!0),this.parse(Pt)}var tt=Ct.prototype;return tt.parse=function(Pt){this.$d=function(pt){var Ft=pt.date,X=pt.utc;if(Ft===null)return new Date(NaN);if(xt.u(Ft))return new Date;if(Ft instanceof Date)return new Date(Ft);if(typeof Ft=="string"&&!/Z$/i.test(Ft)){var Rt=Ft.match(rt);if(Rt){var Bt=Rt[2]-1||0,vt=(Rt[7]||"0").substring(0,3);return X?new Date(Date.UTC(Rt[1],Bt,Rt[3]||1,Rt[4]||0,Rt[5]||0,Rt[6]||0,vt)):new Date(Rt[1],Bt,Rt[3]||1,Rt[4]||0,Rt[5]||0,Rt[6]||0,vt)}}return new Date(Ft)}(Pt),this.$x=Pt.x||{},this.init()},tt.init=function(){var Pt=this.$d;this.$y=Pt.getFullYear(),this.$M=Pt.getMonth(),this.$D=Pt.getDate(),this.$W=Pt.getDay(),this.$H=Pt.getHours(),this.$m=Pt.getMinutes(),this.$s=Pt.getSeconds(),this.$ms=Pt.getMilliseconds()},tt.$utils=function(){return xt},tt.isValid=function(){return this.$d.toString()!==Y},tt.isSame=function(Pt,pt){var Ft=st(Pt);return this.startOf(pt)<=Ft&&Ft<=this.endOf(pt)},tt.isAfter=function(Pt,pt){return st(Pt){},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},zft=function(i="fatal"){let a=g5.fatal;typeof i=="string"?(i=i.toLowerCase(),i in g5&&(a=g5[i])):typeof i=="number"&&(a=i),Wt.trace=()=>{},Wt.debug=()=>{},Wt.info=()=>{},Wt.warn=()=>{},Wt.error=()=>{},Wt.fatal=()=>{},a<=g5.fatal&&(Wt.fatal=console.error?console.error.bind(console,Y2("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Y2("FATAL"))),a<=g5.error&&(Wt.error=console.error?console.error.bind(console,Y2("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Y2("ERROR"))),a<=g5.warn&&(Wt.warn=console.warn?console.warn.bind(console,Y2("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Y2("WARN"))),a<=g5.info&&(Wt.info=console.info?console.info.bind(console,Y2("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Y2("INFO"))),a<=g5.debug&&(Wt.debug=console.debug?console.debug.bind(console,Y2("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Y2("DEBUG"))),a<=g5.trace&&(Wt.trace=console.debug?console.debug.bind(console,Y2("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Y2("TRACE")))},Y2=i=>`%c${up().format("ss.SSS")} : ${i} : `;var qft={};Object.defineProperty(qft,"__esModule",{value:!0});var Xx=qft.sanitizeUrl=void 0,H5e=/^([^\w]*)(javascript|data|vbscript)/im,V5e=/&#(\w+)(^\w|;)?/g,G5e=/&(newline|tab);/gi,U5e=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,W5e=/^.+(:|:)/gim,K5e=[".","/"];function Y5e(i){return K5e.indexOf(i[0])>-1}function X5e(i){return i.replace(V5e,function(a,f){return String.fromCharCode(f)})}function Q5e(i){var a=X5e(i||"").replace(G5e,"").replace(U5e,"").trim();if(!a)return"about:blank";if(Y5e(a))return a;var f=a.match(W5e);if(!f)return a;var p=f[0];return H5e.test(p)?"about:blank":a}Xx=qft.sanitizeUrl=Q5e;function fU(i,a){return i==null||a==null?NaN:ia?1:i>=a?0:NaN}function Z5e(i,a){return i==null||a==null?NaN:ai?1:a>=i?0:NaN}function Hft(i){let a,f,p;i.length!==2?(a=fU,f=(E,C)=>fU(i(E),C),p=(E,C)=>i(E)-C):(a=i===fU||i===Z5e?i:J5e,f=i,p=i);function v(E,C,A=0,P=E.length){if(A>>1;f(E[F],C)<0?A=F+1:P=F}while(A>>1;f(E[F],C)<=0?A=F+1:P=F}while(AA&&p(E[F-1],C)>-p(E[F],C)?F-1:F}return{left:v,center:b,right:m}}function J5e(){return 0}function t6e(i){return i===null?NaN:+i}const e6e=Hft(fU).right;Hft(t6e).center;const n6e=e6e;class LLt extends Map{constructor(a,f=s6e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:f}}),a!=null)for(const[p,v]of a)this.set(p,v)}get(a){return super.get(MLt(this,a))}has(a){return super.has(MLt(this,a))}set(a,f){return super.set(r6e(this,a),f)}delete(a){return super.delete(i6e(this,a))}}function MLt({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):f}function r6e({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):(i.set(p,f),f)}function i6e({_intern:i,_key:a},f){const p=a(f);return i.has(p)&&(f=i.get(p),i.delete(p)),f}function s6e(i){return i!==null&&typeof i=="object"?i.valueOf():i}var Vft=Math.sqrt(50),Gft=Math.sqrt(10),Uft=Math.sqrt(2);function a6e(i,a,f){var p,v=-1,m,b,E;if(a=+a,i=+i,f=+f,i===a&&f>0)return[i];if((p=a0){let C=Math.round(i/E),A=Math.round(a/E);for(C*Ea&&--A,b=new Array(m=A-C+1);++va&&--A,b=new Array(m=A-C+1);++v=0?(m>=Vft?10:m>=Gft?5:m>=Uft?2:1)*Math.pow(10,v):-Math.pow(10,-v)/(m>=Vft?10:m>=Gft?5:m>=Uft?2:1)}function Wft(i,a,f){var p=Math.abs(a-i)/Math.max(0,f),v=Math.pow(10,Math.floor(Math.log(p)/Math.LN10)),m=p/v;return m>=Vft?v*=10:m>=Gft?v*=5:m>=Uft&&(v*=2),a=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f=v)&&(f=v)}return f}function c6e(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function u6e(i){return i}var dU=1,Kft=2,Yft=3,gU=4,ILt=1e-6;function l6e(i){return"translate("+i+",0)"}function h6e(i){return"translate(0,"+i+")"}function f6e(i){return a=>+i(a)}function d6e(i,a){return a=Math.max(0,i.bandwidth()-a*2)/2,i.round()&&(a=Math.round(a)),f=>+i(f)+a}function g6e(){return!this.__axis}function OLt(i,a){var f=[],p=null,v=null,m=6,b=6,E=3,C=typeof window<"u"&&window.devicePixelRatio>1?0:.5,A=i===dU||i===gU?-1:1,P=i===gU||i===Kft?"x":"y",F=i===dU||i===Yft?l6e:h6e;function j(R){var H=p??(a.ticks?a.ticks.apply(a,f):a.domain()),Y=v??(a.tickFormat?a.tickFormat.apply(a,f):u6e),rt=Math.max(m,0)+E,J=a.range(),it=+J[0]+C,ft=+J[J.length-1]+C,Tt=(a.bandwidth?d6e:f6e)(a.copy(),C),kt=R.selection?R.selection():R,mt=kt.selectAll(".domain").data([null]),ct=kt.selectAll(".tick").data(H,a).order(),yt=ct.exit(),st=ct.enter().append("g").attr("class","tick"),xt=ct.select("line"),ht=ct.select("text");mt=mt.merge(mt.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),ct=ct.merge(st),xt=xt.merge(st.append("line").attr("stroke","currentColor").attr(P+"2",A*m)),ht=ht.merge(st.append("text").attr("fill","currentColor").attr(P,A*rt).attr("dy",i===dU?"0em":i===Yft?"0.71em":"0.32em")),R!==kt&&(mt=mt.transition(R),ct=ct.transition(R),xt=xt.transition(R),ht=ht.transition(R),yt=yt.transition(R).attr("opacity",ILt).attr("transform",function(dt){return isFinite(dt=Tt(dt))?F(dt+C):this.getAttribute("transform")}),st.attr("opacity",ILt).attr("transform",function(dt){var Ct=this.parentNode.__axis;return F((Ct&&isFinite(Ct=Ct(dt))?Ct:Tt(dt))+C)})),yt.remove(),mt.attr("d",i===gU||i===Kft?b?"M"+A*b+","+it+"H"+C+"V"+ft+"H"+A*b:"M"+C+","+it+"V"+ft:b?"M"+it+","+A*b+"V"+C+"H"+ft+"V"+A*b:"M"+it+","+C+"H"+ft),ct.attr("opacity",1).attr("transform",function(dt){return F(Tt(dt)+C)}),xt.attr(P+"2",A*m),ht.attr(P,A*rt).text(Y),kt.filter(g6e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===Kft?"start":i===gU?"end":"middle"),kt.each(function(){this.__axis=Tt})}return j.scale=function(R){return arguments.length?(a=R,j):a},j.ticks=function(){return f=Array.from(arguments),j},j.tickArguments=function(R){return arguments.length?(f=R==null?[]:Array.from(R),j):f.slice()},j.tickValues=function(R){return arguments.length?(p=R==null?null:Array.from(R),j):p&&p.slice()},j.tickFormat=function(R){return arguments.length?(v=R,j):v},j.tickSize=function(R){return arguments.length?(m=b=+R,j):m},j.tickSizeInner=function(R){return arguments.length?(m=+R,j):m},j.tickSizeOuter=function(R){return arguments.length?(b=+R,j):b},j.tickPadding=function(R){return arguments.length?(E=+R,j):E},j.offset=function(R){return arguments.length?(C=+R,j):C},j}function p6e(i){return OLt(dU,i)}function b6e(i){return OLt(Yft,i)}var v6e={value:()=>{}};function NLt(){for(var i=0,a=arguments.length,f={},p;i=0&&(p=f.slice(v+1),f=f.slice(0,v)),f&&!a.hasOwnProperty(f))throw new Error("unknown type: "+f);return{type:f,name:p}})}pU.prototype=NLt.prototype={constructor:pU,on:function(i,a){var f=this._,p=w6e(i+"",f),v,m=-1,b=p.length;if(arguments.length<2){for(;++m0)for(var f=new Array(v),p=0,v,m;p=0&&(a=i.slice(0,f))!=="xmlns"&&(i=i.slice(f+1)),FLt.hasOwnProperty(a)?{space:FLt[a],local:i}:i}function y6e(i){return function(){var a=this.ownerDocument,f=this.namespaceURI;return f===Xft&&a.documentElement.namespaceURI===Xft?a.createElement(i):a.createElementNS(f,i)}}function x6e(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function BLt(i){var a=bU(i);return(a.local?x6e:y6e)(a)}function k6e(){}function Qft(i){return i==null?k6e:function(){return this.querySelector(i)}}function E6e(i){typeof i!="function"&&(i=Qft(i));for(var a=this._groups,f=a.length,p=new Array(f),v=0;v=ft&&(ft=it+1);!(kt=rt[ft])&&++ft=0;)(b=p[v])&&(m&&b.compareDocumentPosition(m)^4&&m.parentNode.insertBefore(b,m),m=b);return this}function W6e(i){i||(i=K6e);function a(F,j){return F&&j?i(F.__data__,j.__data__):!F-!j}for(var f=this._groups,p=f.length,v=new Array(p),m=0;ma?1:i>=a?0:NaN}function Y6e(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function X6e(){return Array.from(this)}function Q6e(){for(var i=this._groups,a=0,f=i.length;a1?this.each((a==null?cxe:typeof a=="function"?lxe:uxe)(i,a,f??"")):mA(this.node(),i)}function mA(i,a){return i.style.getPropertyValue(a)||HLt(i).getComputedStyle(i,null).getPropertyValue(a)}function fxe(i){return function(){delete this[i]}}function dxe(i,a){return function(){this[i]=a}}function gxe(i,a){return function(){var f=a.apply(this,arguments);f==null?delete this[i]:this[i]=f}}function pxe(i,a){return arguments.length>1?this.each((a==null?fxe:typeof a=="function"?gxe:dxe)(i,a)):this.node()[i]}function VLt(i){return i.trim().split(/^|\s+/)}function Zft(i){return i.classList||new GLt(i)}function GLt(i){this._node=i,this._names=VLt(i.getAttribute("class")||"")}GLt.prototype={add:function(i){var a=this._names.indexOf(i);a<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var a=this._names.indexOf(i);a>=0&&(this._names.splice(a,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function ULt(i,a){for(var f=Zft(i),p=-1,v=a.length;++p=0&&(f=a.slice(p+1),a=a.slice(0,p)),{type:a,name:f}})}function Hxe(i){return function(){var a=this.__on;if(a){for(var f=0,p=-1,v=a.length,m;f>8&15|a>>4&240,a>>4&15|a&240,(a&15)<<4|a&15,1):f===8?yU(a>>24&255,a>>16&255,a>>8&255,(a&255)/255):f===4?yU(a>>12&15|a>>8&240,a>>8&15|a>>4&240,a>>4&15|a&240,((a&15)<<4|a&15)/255):null):(a=Zxe.exec(i))?new g0(a[1],a[2],a[3],1):(a=Jxe.exec(i))?new g0(a[1]*255/100,a[2]*255/100,a[3]*255/100,1):(a=tke.exec(i))?yU(a[1],a[2],a[3],a[4]):(a=eke.exec(i))?yU(a[1]*255/100,a[2]*255/100,a[3]*255/100,a[4]):(a=nke.exec(i))?rMt(a[1],a[2]/100,a[3]/100,1):(a=rke.exec(i))?rMt(a[1],a[2]/100,a[3]/100,a[4]):XLt.hasOwnProperty(i)?JLt(XLt[i]):i==="transparent"?new g0(NaN,NaN,NaN,0):null}function JLt(i){return new g0(i>>16&255,i>>8&255,i&255,1)}function yU(i,a,f,p){return p<=0&&(i=a=f=NaN),new g0(i,a,f,p)}function tMt(i){return i instanceof FE||(i=BE(i)),i?(i=i.rgb(),new g0(i.r,i.g,i.b,i.opacity)):new g0}function t1t(i,a,f,p){return arguments.length===1?tMt(i):new g0(i,a,f,p??1)}function g0(i,a,f,p){this.r=+i,this.g=+a,this.b=+f,this.opacity=+p}xN(g0,t1t,wU(FE,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new g0(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new g0(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new g0(RE(this.r),RE(this.g),RE(this.b),xU(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eMt,formatHex:eMt,formatHex8:ake,formatRgb:nMt,toString:nMt}));function eMt(){return`#${jE(this.r)}${jE(this.g)}${jE(this.b)}`}function ake(){return`#${jE(this.r)}${jE(this.g)}${jE(this.b)}${jE((isNaN(this.opacity)?1:this.opacity)*255)}`}function nMt(){const i=xU(this.opacity);return`${i===1?"rgb(":"rgba("}${RE(this.r)}, ${RE(this.g)}, ${RE(this.b)}${i===1?")":`, ${i})`}`}function xU(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function RE(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function jE(i){return i=RE(i),(i<16?"0":"")+i.toString(16)}function rMt(i,a,f,p){return p<=0?i=a=f=NaN:f<=0||f>=1?i=a=NaN:a<=0&&(i=NaN),new Ww(i,a,f,p)}function iMt(i){if(i instanceof Ww)return new Ww(i.h,i.s,i.l,i.opacity);if(i instanceof FE||(i=BE(i)),!i)return new Ww;if(i instanceof Ww)return i;i=i.rgb();var a=i.r/255,f=i.g/255,p=i.b/255,v=Math.min(a,f,p),m=Math.max(a,f,p),b=NaN,E=m-v,C=(m+v)/2;return E?(a===m?b=(f-p)/E+(f0&&C<1?0:b,new Ww(b,E,C,i.opacity)}function oke(i,a,f,p){return arguments.length===1?iMt(i):new Ww(i,a,f,p??1)}function Ww(i,a,f,p){this.h=+i,this.s=+a,this.l=+f,this.opacity=+p}xN(Ww,oke,wU(FE,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new Ww(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new Ww(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,a=isNaN(i)||isNaN(this.s)?0:this.s,f=this.l,p=f+(f<.5?f:1-f)*a,v=2*f-p;return new g0(e1t(i>=240?i-240:i+120,v,p),e1t(i,v,p),e1t(i<120?i+240:i-120,v,p),this.opacity)},clamp(){return new Ww(sMt(this.h),kU(this.s),kU(this.l),xU(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const i=xU(this.opacity);return`${i===1?"hsl(":"hsla("}${sMt(this.h)}, ${kU(this.s)*100}%, ${kU(this.l)*100}%${i===1?")":`, ${i})`}`}}));function sMt(i){return i=(i||0)%360,i<0?i+360:i}function kU(i){return Math.max(0,Math.min(1,i||0))}function e1t(i,a,f){return(i<60?a+(f-a)*i/60:i<180?f:i<240?a+(f-a)*(240-i)/60:a)*255}const cke=Math.PI/180,uke=180/Math.PI,EU=18,aMt=.96422,oMt=1,cMt=.82521,uMt=4/29,xA=6/29,lMt=3*xA*xA,lke=xA*xA*xA;function hMt(i){if(i instanceof a3)return new a3(i.l,i.a,i.b,i.opacity);if(i instanceof p5)return fMt(i);i instanceof g0||(i=tMt(i));var a=s1t(i.r),f=s1t(i.g),p=s1t(i.b),v=n1t((.2225045*a+.7168786*f+.0606169*p)/oMt),m,b;return a===f&&f===p?m=b=v:(m=n1t((.4360747*a+.3850649*f+.1430804*p)/aMt),b=n1t((.0139322*a+.0971045*f+.7141733*p)/cMt)),new a3(116*v-16,500*(m-v),200*(v-b),i.opacity)}function hke(i,a,f,p){return arguments.length===1?hMt(i):new a3(i,a,f,p??1)}function a3(i,a,f,p){this.l=+i,this.a=+a,this.b=+f,this.opacity=+p}xN(a3,hke,wU(FE,{brighter(i){return new a3(this.l+EU*(i??1),this.a,this.b,this.opacity)},darker(i){return new a3(this.l-EU*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,a=isNaN(this.a)?i:i+this.a/500,f=isNaN(this.b)?i:i-this.b/200;return a=aMt*r1t(a),i=oMt*r1t(i),f=cMt*r1t(f),new g0(i1t(3.1338561*a-1.6168667*i-.4906146*f),i1t(-.9787684*a+1.9161415*i+.033454*f),i1t(.0719453*a-.2289914*i+1.4052427*f),this.opacity)}}));function n1t(i){return i>lke?Math.pow(i,1/3):i/lMt+uMt}function r1t(i){return i>xA?i*i*i:lMt*(i-uMt)}function i1t(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function s1t(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function fke(i){if(i instanceof p5)return new p5(i.h,i.c,i.l,i.opacity);if(i instanceof a3||(i=hMt(i)),i.a===0&&i.b===0)return new p5(NaN,0()=>i;function dMt(i,a){return function(f){return i+f*a}}function dke(i,a,f){return i=Math.pow(i,f),a=Math.pow(a,f)-i,f=1/f,function(p){return Math.pow(i+p*a,f)}}function gke(i,a){var f=a-i;return f?dMt(i,f>180||f<-180?f-360*Math.round(f/360):f):TU(isNaN(i)?a:i)}function pke(i){return(i=+i)==1?TN:function(a,f){return f-a?dke(a,f,i):TU(isNaN(a)?f:a)}}function TN(i,a){var f=a-i;return f?dMt(i,f):TU(isNaN(i)?a:i)}const _U=function i(a){var f=pke(a);function p(v,m){var b=f((v=t1t(v)).r,(m=t1t(m)).r),E=f(v.g,m.g),C=f(v.b,m.b),A=TN(v.opacity,m.opacity);return function(P){return v.r=b(P),v.g=E(P),v.b=C(P),v.opacity=A(P),v+""}}return p.gamma=i,p}(1);function bke(i,a){a||(a=[]);var f=i?Math.min(a.length,i.length):0,p=a.slice(),v;return function(m){for(v=0;vf&&(m=a.slice(f,m),E[b]?E[b]+=m:E[++b]=m),(p=p[0])===(v=v[0])?E[b]?E[b]+=v:E[++b]=v:(E[++b]=null,C.push({i:b,x:Kw(p,v)})),f=c1t.lastIndex;return f180?P+=360:P-A>180&&(A+=360),j.push({i:F.push(v(F)+"rotate(",null,p)-2,x:Kw(A,P)})):P&&F.push(v(F)+"rotate("+P+p)}function E(A,P,F,j){A!==P?j.push({i:F.push(v(F)+"skewX(",null,p)-2,x:Kw(A,P)}):P&&F.push(v(F)+"skewX("+P+p)}function C(A,P,F,j,R,H){if(A!==F||P!==j){var Y=R.push(v(R)+"scale(",null,",",null,")");H.push({i:Y-4,x:Kw(A,F)},{i:Y-2,x:Kw(P,j)})}else(F!==1||j!==1)&&R.push(v(R)+"scale("+F+","+j+")")}return function(A,P){var F=[],j=[];return A=i(A),P=i(P),m(A.translateX,A.translateY,P.translateX,P.translateY,F,j),b(A.rotate,P.rotate,F,j),E(A.skewX,P.skewX,F,j),C(A.scaleX,A.scaleY,P.scaleX,P.scaleY,F,j),A=P=null,function(R){for(var H=-1,Y=j.length,rt;++H=0&&i._call.call(void 0,a),i=i._next;--kA}function xMt(){$E=(AU=AN.now())+LU,kA=_N=0;try{Dke()}finally{kA=0,Oke(),$E=0}}function Ike(){var i=AN.now(),a=i-AU;a>wMt&&(LU-=a,AU=i)}function Oke(){for(var i,a=SU,f,p=1/0;a;)a._call?(p>a._time&&(p=a._time),i=a,a=a._next):(f=a._next,a._next=null,a=i?i._next=f:SU=f);SN=i,f1t(p)}function f1t(i){if(!kA){_N&&(_N=clearTimeout(_N));var a=i-$E;a>24?(i<1/0&&(_N=setTimeout(xMt,i-AN.now()-LU)),CN&&(CN=clearInterval(CN))):(CN||(AU=AN.now(),CN=setInterval(Ike,wMt)),kA=1,mMt(xMt))}}function kMt(i,a,f){var p=new MU;return a=a==null?0:+a,p.restart(v=>{p.stop(),i(v+a)},a,f),p}var Nke=NLt("start","end","cancel","interrupt"),Pke=[],EMt=0,TMt=1,d1t=2,DU=3,_Mt=4,g1t=5,IU=6;function OU(i,a,f,p,v,m){var b=i.__transition;if(!b)i.__transition={};else if(f in b)return;Fke(i,f,{name:a,index:p,group:v,on:Nke,tween:Pke,time:m.time,delay:m.delay,duration:m.duration,ease:m.ease,timer:null,state:EMt})}function p1t(i,a){var f=Yw(i,a);if(f.state>EMt)throw new Error("too late; already scheduled");return f}function o3(i,a){var f=Yw(i,a);if(f.state>DU)throw new Error("too late; already running");return f}function Yw(i,a){var f=i.__transition;if(!f||!(f=f[a]))throw new Error("transition not found");return f}function Fke(i,a,f){var p=i.__transition,v;p[a]=f,f.timer=yMt(m,0,f.time);function m(A){f.state=TMt,f.timer.restart(b,f.delay,f.time),f.delay<=A&&b(A-f.delay)}function b(A){var P,F,j,R;if(f.state!==TMt)return C();for(P in p)if(R=p[P],R.name===f.name){if(R.state===DU)return kMt(b);R.state===_Mt?(R.state=IU,R.timer.stop(),R.on.call("interrupt",i,i.__data__,R.index,R.group),delete p[P]):+Pd1t&&p.state=0&&(a=a.slice(0,f)),!a||a==="start"})}function d8e(i,a,f){var p,v,m=f8e(a)?p1t:o3;return function(){var b=m(this,i),E=b.on;E!==p&&(v=(p=E).copy()).on(a,f),b.on=v}}function g8e(i,a){var f=this._id;return arguments.length<2?Yw(this.node(),f).on.on(i):this.each(d8e(f,i,a))}function p8e(i){return function(){var a=this.parentNode;for(var f in this.__transition)if(+f!==i)return;a&&a.removeChild(this)}}function b8e(){return this.on("end.remove",p8e(this._id))}function v8e(i){var a=this._name,f=this._id;typeof i!="function"&&(i=Qft(i));for(var p=this._groups,v=p.length,m=new Array(v),b=0;bzE)if(!(Math.abs(P*E-C*A)>zE)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,H=E*E+C*C,Y=j*j+R*R,rt=Math.sqrt(H),J=Math.sqrt(F),it=v*Math.tan((v1t-Math.acos((H+F-Y)/(2*rt*J)))/2),ft=it/J,Tt=it/rt;Math.abs(ft-1)>zE&&(this._+="L"+(i+ft*A)+","+(a+ft*P)),this._+="A"+v+","+v+",0,0,"+ +(P*j>A*R)+","+(this._x1=i+Tt*E)+","+(this._y1=a+Tt*C)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),C=i+b,A=a+E,P=1^m,F=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+C+","+A:(Math.abs(this._x1-C)>zE||Math.abs(this._y1-A)>zE)&&(this._+="L"+C+","+A),f&&(F<0&&(F=F%w1t+w1t),F>q8e?this._+="A"+f+","+f+",0,1,"+P+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+P+","+(this._x1=C)+","+(this._y1=A):F>zE&&(this._+="A"+f+","+f+",0,"+ +(F>=v1t)+","+P+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function H8e(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function V8e(i,a){return fetch(i,a).then(H8e)}function G8e(i){return(a,f)=>V8e(a,f).then(p=>new DOMParser().parseFromString(p,i))}var U8e=G8e("image/svg+xml");function W8e(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function NU(i,a){if((f=(i=a?i.toExponential(a-1):i.toExponential()).indexOf("e"))<0)return null;var f,p=i.slice(0,f);return[p.length>1?p[0]+p.slice(2):p,+i.slice(f+1)]}function EA(i){return i=NU(Math.abs(i)),i?i[1]:NaN}function K8e(i,a){return function(f,p){for(var v=f.length,m=[],b=0,E=i[0],C=0;v>0&&E>0&&(C+E+1>p&&(E=Math.max(1,p-C)),m.push(f.substring(v-=E,v+E)),!((C+=E+1)>p));)E=i[b=(b+1)%i.length];return m.reverse().join(a)}}function Y8e(i){return function(a){return a.replace(/[0-9]/g,function(f){return i[+f]})}}var X8e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function PU(i){if(!(a=X8e.exec(i)))throw new Error("invalid format: "+i);var a;return new x1t({fill:a[1],align:a[2],sign:a[3],symbol:a[4],zero:a[5],width:a[6],comma:a[7],precision:a[8]&&a[8].slice(1),trim:a[9],type:a[10]})}PU.prototype=x1t.prototype;function x1t(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}x1t.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Q8e(i){t:for(var a=i.length,f=1,p=-1,v;f0&&(p=0);break}return p>0?i.slice(0,p)+i.slice(v+1):i}var LMt;function Z8e(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1],m=v-(LMt=Math.max(-8,Math.min(8,Math.floor(v/3)))*3)+1,b=p.length;return m===b?p:m>b?p+new Array(m-b+1).join("0"):m>0?p.slice(0,m)+"."+p.slice(m):"0."+new Array(1-m).join("0")+NU(i,Math.max(0,a+m-1))[0]}function MMt(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1];return v<0?"0."+new Array(-v).join("0")+p:p.length>v+1?p.slice(0,v+1)+"."+p.slice(v+1):p+new Array(v-p.length+2).join("0")}const DMt={"%":(i,a)=>(i*100).toFixed(a),b:i=>Math.round(i).toString(2),c:i=>i+"",d:W8e,e:(i,a)=>i.toExponential(a),f:(i,a)=>i.toFixed(a),g:(i,a)=>i.toPrecision(a),o:i=>Math.round(i).toString(8),p:(i,a)=>MMt(i*100,a),r:MMt,s:Z8e,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function IMt(i){return i}var OMt=Array.prototype.map,NMt=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function J8e(i){var a=i.grouping===void 0||i.thousands===void 0?IMt:K8e(OMt.call(i.grouping,Number),i.thousands+""),f=i.currency===void 0?"":i.currency[0]+"",p=i.currency===void 0?"":i.currency[1]+"",v=i.decimal===void 0?".":i.decimal+"",m=i.numerals===void 0?IMt:Y8e(OMt.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",E=i.minus===void 0?"−":i.minus+"",C=i.nan===void 0?"NaN":i.nan+"";function A(F){F=PU(F);var j=F.fill,R=F.align,H=F.sign,Y=F.symbol,rt=F.zero,J=F.width,it=F.comma,ft=F.precision,Tt=F.trim,kt=F.type;kt==="n"?(it=!0,kt="g"):DMt[kt]||(ft===void 0&&(ft=12),Tt=!0,kt="g"),(rt||j==="0"&&R==="=")&&(rt=!0,j="0",R="=");var mt=Y==="$"?f:Y==="#"&&/[boxX]/.test(kt)?"0"+kt.toLowerCase():"",ct=Y==="$"?p:/[%p]/.test(kt)?b:"",yt=DMt[kt],st=/[defgprs%]/.test(kt);ft=ft===void 0?6:/[gprs]/.test(kt)?Math.max(1,Math.min(21,ft)):Math.max(0,Math.min(20,ft));function xt(ht){var dt=mt,Ct=ct,tt,Pt,pt;if(kt==="c")Ct=yt(ht)+Ct,ht="";else{ht=+ht;var Ft=ht<0||1/ht<0;if(ht=isNaN(ht)?C:yt(Math.abs(ht),ft),Tt&&(ht=Q8e(ht)),Ft&&+ht==0&&H!=="+"&&(Ft=!1),dt=(Ft?H==="("?H:E:H==="-"||H==="("?"":H)+dt,Ct=(kt==="s"?NMt[8+LMt/3]:"")+Ct+(Ft&&H==="("?")":""),st){for(tt=-1,Pt=ht.length;++ttpt||pt>57){Ct=(pt===46?v+ht.slice(tt+1):ht.slice(tt))+Ct,ht=ht.slice(0,tt);break}}}it&&!rt&&(ht=a(ht,1/0));var X=dt.length+ht.length+Ct.length,Rt=X>1)+dt+ht+Ct+Rt.slice(X);break;default:ht=Rt+dt+ht+Ct;break}return m(ht)}return xt.toString=function(){return F+""},xt}function P(F,j){var R=A((F=PU(F),F.type="f",F)),H=Math.max(-8,Math.min(8,Math.floor(EA(j)/3)))*3,Y=Math.pow(10,-H),rt=NMt[8+H/3];return function(J){return R(Y*J)+rt}}return{format:A,formatPrefix:P}}var FU,PMt,FMt;t7e({thousands:",",grouping:[3],currency:["$",""]});function t7e(i){return FU=J8e(i),PMt=FU.format,FMt=FU.formatPrefix,FU}function e7e(i){return Math.max(0,-EA(Math.abs(i)))}function n7e(i,a){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(EA(a)/3)))*3-EA(Math.abs(i)))}function r7e(i,a){return i=Math.abs(i),a=Math.abs(a)-i,Math.max(0,EA(a)-EA(i))+1}function k1t(i,a){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(a).domain(i);break}return this}const BMt=Symbol("implicit");function E1t(){var i=new LLt,a=[],f=[],p=BMt;function v(m){let b=i.get(m);if(b===void 0){if(p!==BMt)return p;i.set(m,b=a.push(m)-1)}return f[b%f.length]}return v.domain=function(m){if(!arguments.length)return a.slice();a=[],i=new LLt;for(const b of m)i.has(b)||i.set(b,a.push(b)-1);return v},v.range=function(m){return arguments.length?(f=Array.from(m),v):f.slice()},v.unknown=function(m){return arguments.length?(p=m,v):p},v.copy=function(){return E1t(a,f).unknown(p)},k1t.apply(v,arguments),v}function i7e(i){return function(){return i}}function s7e(i){return+i}var RMt=[0,1];function TA(i){return i}function T1t(i,a){return(a-=i=+i)?function(f){return(f-i)/a}:i7e(isNaN(a)?NaN:.5)}function a7e(i,a){var f;return i>a&&(f=i,i=a,a=f),function(p){return Math.max(i,Math.min(a,p))}}function o7e(i,a,f){var p=i[0],v=i[1],m=a[0],b=a[1];return v2?c7e:o7e,C=A=null,F}function F(j){return j==null||isNaN(j=+j)?m:(C||(C=E(i.map(p),a,f)))(p(b(j)))}return F.invert=function(j){return b(v((A||(A=E(a,i.map(p),Kw)))(j)))},F.domain=function(j){return arguments.length?(i=Array.from(j,s7e),P()):i.slice()},F.range=function(j){return arguments.length?(a=Array.from(j),P()):a.slice()},F.rangeRound=function(j){return a=Array.from(j),f=Eke,P()},F.clamp=function(j){return arguments.length?(b=j?!0:TA,P()):b!==TA},F.interpolate=function(j){return arguments.length?(f=j,P()):f},F.unknown=function(j){return arguments.length?(m=j,F):m},function(j,R){return p=j,v=R,P()}}function $Mt(){return u7e()(TA,TA)}function l7e(i,a,f,p){var v=Wft(i,a,f),m;switch(p=PU(p??",f"),p.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(a));return p.precision==null&&!isNaN(m=n7e(v,b))&&(p.precision=m),FMt(p,b)}case"":case"e":case"g":case"p":case"r":{p.precision==null&&!isNaN(m=r7e(v,Math.max(Math.abs(i),Math.abs(a))))&&(p.precision=m-(p.type==="e"));break}case"f":case"%":{p.precision==null&&!isNaN(m=e7e(v))&&(p.precision=m-(p.type==="%")*2);break}}return PMt(p)}function h7e(i){var a=i.domain;return i.ticks=function(f){var p=a();return a6e(p[0],p[p.length-1],f??10)},i.tickFormat=function(f,p){var v=a();return l7e(v[0],v[v.length-1],f??10,p)},i.nice=function(f){f==null&&(f=10);var p=a(),v=0,m=p.length-1,b=p[v],E=p[m],C,A,P=10;for(E0;){if(A=DLt(b,E,f),A===C)return p[v]=b,p[m]=E,a(p);if(A>0)b=Math.floor(b/A)*A,E=Math.ceil(E/A)*A;else if(A<0)b=Math.ceil(b*A)/A,E=Math.floor(E*A)/A;else break;C=A}return i},i}function BU(){var i=$Mt();return i.copy=function(){return jMt(i,BU())},k1t.apply(i,arguments),h7e(i)}function f7e(i,a){i=i.slice();var f=0,p=i.length-1,v=i[f],m=i[p],b;return m0))return C;do C.push(A=new Date(+m)),a(m,E),i(m);while(A=b)for(;i(b),!m(b);)b.setTime(b-1)},function(b,E){if(b>=b)if(E<0)for(;++E<=0;)for(;a(b,-1),!m(b););else for(;--E>=0;)for(;a(b,1),!m(b););})},f&&(v.count=function(m,b){return _1t.setTime(+m),C1t.setTime(+b),i(_1t),i(C1t),Math.floor(f(_1t,C1t))},v.every=function(m){return m=Math.floor(m),!isFinite(m)||!(m>0)?null:m>1?v.filter(p?function(b){return p(b)%m===0}:function(b){return v.count(0,b)%m===0}):v}),v}var RU=rg(function(){},function(i,a){i.setTime(+i+a)},function(i,a){return a-i});RU.every=function(i){return i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?rg(function(a){a.setTime(Math.floor(a/i)*i)},function(a,f){a.setTime(+a+f*i)},function(a,f){return(f-a)/i}):RU};const d7e=RU;RU.range;const w5=1e3,c3=w5*60,qE=c3*60,HE=qE*24,S1t=HE*7,zMt=HE*30,A1t=HE*365;var qMt=rg(function(i){i.setTime(i-i.getMilliseconds())},function(i,a){i.setTime(+i+a*w5)},function(i,a){return(a-i)/w5},function(i){return i.getUTCSeconds()});const LN=qMt;qMt.range;var HMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*w5)},function(i,a){i.setTime(+i+a*c3)},function(i,a){return(a-i)/c3},function(i){return i.getMinutes()});const jU=HMt;HMt.range;var VMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*w5-i.getMinutes()*c3)},function(i,a){i.setTime(+i+a*qE)},function(i,a){return(a-i)/qE},function(i){return i.getHours()});const $U=VMt;VMt.range;var GMt=rg(i=>i.setHours(0,0,0,0),(i,a)=>i.setDate(i.getDate()+a),(i,a)=>(a-i-(a.getTimezoneOffset()-i.getTimezoneOffset())*c3)/HE,i=>i.getDate()-1);const _A=GMt;GMt.range;function VE(i){return rg(function(a){a.setDate(a.getDate()-(a.getDay()+7-i)%7),a.setHours(0,0,0,0)},function(a,f){a.setDate(a.getDate()+f*7)},function(a,f){return(f-a-(f.getTimezoneOffset()-a.getTimezoneOffset())*c3)/S1t})}var MN=VE(0),DN=VE(1),UMt=VE(2),WMt=VE(3),GE=VE(4),KMt=VE(5),YMt=VE(6);MN.range,DN.range,UMt.range,WMt.range,GE.range,KMt.range,YMt.range;var XMt=rg(function(i){i.setDate(1),i.setHours(0,0,0,0)},function(i,a){i.setMonth(i.getMonth()+a)},function(i,a){return a.getMonth()-i.getMonth()+(a.getFullYear()-i.getFullYear())*12},function(i){return i.getMonth()});const zU=XMt;XMt.range;var L1t=rg(function(i){i.setMonth(0,1),i.setHours(0,0,0,0)},function(i,a){i.setFullYear(i.getFullYear()+a)},function(i,a){return a.getFullYear()-i.getFullYear()},function(i){return i.getFullYear()});L1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setFullYear(Math.floor(a.getFullYear()/i)*i),a.setMonth(0,1),a.setHours(0,0,0,0)},function(a,f){a.setFullYear(a.getFullYear()+f*i)})};const UE=L1t;L1t.range;var QMt=rg(function(i){i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCDate(i.getUTCDate()+a)},function(i,a){return(a-i)/HE},function(i){return i.getUTCDate()-1});const ZMt=QMt;QMt.range;function WE(i){return rg(function(a){a.setUTCDate(a.getUTCDate()-(a.getUTCDay()+7-i)%7),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCDate(a.getUTCDate()+f*7)},function(a,f){return(f-a)/S1t})}var JMt=WE(0),qU=WE(1),g7e=WE(2),p7e=WE(3),CA=WE(4),b7e=WE(5),v7e=WE(6);JMt.range,qU.range,g7e.range,p7e.range,CA.range,b7e.range,v7e.range;var M1t=rg(function(i){i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCFullYear(i.getUTCFullYear()+a)},function(i,a){return a.getUTCFullYear()-i.getUTCFullYear()},function(i){return i.getUTCFullYear()});M1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setUTCFullYear(Math.floor(a.getUTCFullYear()/i)*i),a.setUTCMonth(0,1),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCFullYear(a.getUTCFullYear()+f*i)})};const IN=M1t;M1t.range;function w7e(i,a,f,p,v,m){const b=[[LN,1,w5],[LN,5,5*w5],[LN,15,15*w5],[LN,30,30*w5],[m,1,c3],[m,5,5*c3],[m,15,15*c3],[m,30,30*c3],[v,1,qE],[v,3,3*qE],[v,6,6*qE],[v,12,12*qE],[p,1,HE],[p,2,2*HE],[f,1,S1t],[a,1,zMt],[a,3,3*zMt],[i,1,A1t]];function E(A,P,F){const j=Prt).right(b,j);if(R===b.length)return i.every(Wft(A/A1t,P/A1t,F));if(R===0)return d7e.every(Math.max(Wft(A,P,F),1));const[H,Y]=b[j/b[R-1][2]53)return null;"w"in Ee||(Ee.w=1),"Z"in Ee?(Ce=I1t(ON(Ee.y,0,1)),$e=Ce.getUTCDay(),Ce=$e>4||$e===0?qU.ceil(Ce):qU(Ce),Ce=ZMt.offset(Ce,(Ee.V-1)*7),Ee.y=Ce.getUTCFullYear(),Ee.m=Ce.getUTCMonth(),Ee.d=Ce.getUTCDate()+(Ee.w+6)%7):(Ce=D1t(ON(Ee.y,0,1)),$e=Ce.getDay(),Ce=$e>4||$e===0?DN.ceil(Ce):DN(Ce),Ce=_A.offset(Ce,(Ee.V-1)*7),Ee.y=Ce.getFullYear(),Ee.m=Ce.getMonth(),Ee.d=Ce.getDate()+(Ee.w+6)%7)}else("W"in Ee||"U"in Ee)&&("w"in Ee||(Ee.w="u"in Ee?Ee.u%7:"W"in Ee?1:0),$e="Z"in Ee?I1t(ON(Ee.y,0,1)).getUTCDay():D1t(ON(Ee.y,0,1)).getDay(),Ee.m=0,Ee.d="W"in Ee?(Ee.w+6)%7+Ee.W*7-($e+5)%7:Ee.w+Ee.U*7-($e+6)%7);return"Z"in Ee?(Ee.H+=Ee.Z/100|0,Ee.M+=Ee.Z%100,I1t(Ee)):D1t(Ee)}}function yt(ne,ke,Ve,Ee){for(var He=0,Ce=ke.length,$e=Ve.length,ye,fn;He=$e)return-1;if(ye=ke.charCodeAt(He++),ye===37){if(ye=ke.charAt(He++),fn=kt[ye in tDt?ke.charAt(He++):ye],!fn||(Ee=fn(ne,Ve,Ee))<0)return-1}else if(ye!=Ve.charCodeAt(Ee++))return-1}return Ee}function st(ne,ke,Ve){var Ee=A.exec(ke.slice(Ve));return Ee?(ne.p=P.get(Ee[0].toLowerCase()),Ve+Ee[0].length):-1}function xt(ne,ke,Ve){var Ee=R.exec(ke.slice(Ve));return Ee?(ne.w=H.get(Ee[0].toLowerCase()),Ve+Ee[0].length):-1}function ht(ne,ke,Ve){var Ee=F.exec(ke.slice(Ve));return Ee?(ne.w=j.get(Ee[0].toLowerCase()),Ve+Ee[0].length):-1}function dt(ne,ke,Ve){var Ee=J.exec(ke.slice(Ve));return Ee?(ne.m=it.get(Ee[0].toLowerCase()),Ve+Ee[0].length):-1}function Ct(ne,ke,Ve){var Ee=Y.exec(ke.slice(Ve));return Ee?(ne.m=rt.get(Ee[0].toLowerCase()),Ve+Ee[0].length):-1}function tt(ne,ke,Ve){return yt(ne,a,ke,Ve)}function Pt(ne,ke,Ve){return yt(ne,f,ke,Ve)}function pt(ne,ke,Ve){return yt(ne,p,ke,Ve)}function Ft(ne){return b[ne.getDay()]}function X(ne){return m[ne.getDay()]}function Rt(ne){return C[ne.getMonth()]}function Bt(ne){return E[ne.getMonth()]}function vt(ne){return v[+(ne.getHours()>=12)]}function Ot(ne){return 1+~~(ne.getMonth()/3)}function Vt(ne){return b[ne.getUTCDay()]}function qe(ne){return m[ne.getUTCDay()]}function _n(ne){return C[ne.getUTCMonth()]}function Te(ne){return E[ne.getUTCMonth()]}function Wn(ne){return v[+(ne.getUTCHours()>=12)]}function Ae(ne){return 1+~~(ne.getUTCMonth()/3)}return{format:function(ne){var ke=mt(ne+="",ft);return ke.toString=function(){return ne},ke},parse:function(ne){var ke=ct(ne+="",!1);return ke.toString=function(){return ne},ke},utcFormat:function(ne){var ke=mt(ne+="",Tt);return ke.toString=function(){return ne},ke},utcParse:function(ne){var ke=ct(ne+="",!0);return ke.toString=function(){return ne},ke}}}var tDt={"-":"",_:" ",0:"0"},Q1=/^\s*\d+/,k7e=/^%/,E7e=/[\\^$*+?|[\]().{}]/g;function Fc(i,a,f){var p=i<0?"-":"",v=(p?-i:i)+"",m=v.length;return p+(m[a.toLowerCase(),f]))}function _7e(i,a,f){var p=Q1.exec(a.slice(f,f+1));return p?(i.w=+p[0],f+p[0].length):-1}function C7e(i,a,f){var p=Q1.exec(a.slice(f,f+1));return p?(i.u=+p[0],f+p[0].length):-1}function S7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.U=+p[0],f+p[0].length):-1}function A7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.V=+p[0],f+p[0].length):-1}function L7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.W=+p[0],f+p[0].length):-1}function eDt(i,a,f){var p=Q1.exec(a.slice(f,f+4));return p?(i.y=+p[0],f+p[0].length):-1}function nDt(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.y=+p[0]+(+p[0]>68?1900:2e3),f+p[0].length):-1}function M7e(i,a,f){var p=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(a.slice(f,f+6));return p?(i.Z=p[1]?0:-(p[2]+(p[3]||"00")),f+p[0].length):-1}function D7e(i,a,f){var p=Q1.exec(a.slice(f,f+1));return p?(i.q=p[0]*3-3,f+p[0].length):-1}function I7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.m=p[0]-1,f+p[0].length):-1}function rDt(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.d=+p[0],f+p[0].length):-1}function O7e(i,a,f){var p=Q1.exec(a.slice(f,f+3));return p?(i.m=0,i.d=+p[0],f+p[0].length):-1}function iDt(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.H=+p[0],f+p[0].length):-1}function N7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.M=+p[0],f+p[0].length):-1}function P7e(i,a,f){var p=Q1.exec(a.slice(f,f+2));return p?(i.S=+p[0],f+p[0].length):-1}function F7e(i,a,f){var p=Q1.exec(a.slice(f,f+3));return p?(i.L=+p[0],f+p[0].length):-1}function B7e(i,a,f){var p=Q1.exec(a.slice(f,f+6));return p?(i.L=Math.floor(p[0]/1e3),f+p[0].length):-1}function R7e(i,a,f){var p=k7e.exec(a.slice(f,f+1));return p?f+p[0].length:-1}function j7e(i,a,f){var p=Q1.exec(a.slice(f));return p?(i.Q=+p[0],f+p[0].length):-1}function $7e(i,a,f){var p=Q1.exec(a.slice(f));return p?(i.s=+p[0],f+p[0].length):-1}function sDt(i,a){return Fc(i.getDate(),a,2)}function z7e(i,a){return Fc(i.getHours(),a,2)}function q7e(i,a){return Fc(i.getHours()%12||12,a,2)}function H7e(i,a){return Fc(1+_A.count(UE(i),i),a,3)}function aDt(i,a){return Fc(i.getMilliseconds(),a,3)}function V7e(i,a){return aDt(i,a)+"000"}function G7e(i,a){return Fc(i.getMonth()+1,a,2)}function U7e(i,a){return Fc(i.getMinutes(),a,2)}function W7e(i,a){return Fc(i.getSeconds(),a,2)}function K7e(i){var a=i.getDay();return a===0?7:a}function Y7e(i,a){return Fc(MN.count(UE(i)-1,i),a,2)}function oDt(i){var a=i.getDay();return a>=4||a===0?GE(i):GE.ceil(i)}function X7e(i,a){return i=oDt(i),Fc(GE.count(UE(i),i)+(UE(i).getDay()===4),a,2)}function Q7e(i){return i.getDay()}function Z7e(i,a){return Fc(DN.count(UE(i)-1,i),a,2)}function J7e(i,a){return Fc(i.getFullYear()%100,a,2)}function tEe(i,a){return i=oDt(i),Fc(i.getFullYear()%100,a,2)}function eEe(i,a){return Fc(i.getFullYear()%1e4,a,4)}function nEe(i,a){var f=i.getDay();return i=f>=4||f===0?GE(i):GE.ceil(i),Fc(i.getFullYear()%1e4,a,4)}function rEe(i){var a=i.getTimezoneOffset();return(a>0?"-":(a*=-1,"+"))+Fc(a/60|0,"0",2)+Fc(a%60,"0",2)}function cDt(i,a){return Fc(i.getUTCDate(),a,2)}function iEe(i,a){return Fc(i.getUTCHours(),a,2)}function sEe(i,a){return Fc(i.getUTCHours()%12||12,a,2)}function aEe(i,a){return Fc(1+ZMt.count(IN(i),i),a,3)}function uDt(i,a){return Fc(i.getUTCMilliseconds(),a,3)}function oEe(i,a){return uDt(i,a)+"000"}function cEe(i,a){return Fc(i.getUTCMonth()+1,a,2)}function uEe(i,a){return Fc(i.getUTCMinutes(),a,2)}function lEe(i,a){return Fc(i.getUTCSeconds(),a,2)}function hEe(i){var a=i.getUTCDay();return a===0?7:a}function fEe(i,a){return Fc(JMt.count(IN(i)-1,i),a,2)}function lDt(i){var a=i.getUTCDay();return a>=4||a===0?CA(i):CA.ceil(i)}function dEe(i,a){return i=lDt(i),Fc(CA.count(IN(i),i)+(IN(i).getUTCDay()===4),a,2)}function gEe(i){return i.getUTCDay()}function pEe(i,a){return Fc(qU.count(IN(i)-1,i),a,2)}function bEe(i,a){return Fc(i.getUTCFullYear()%100,a,2)}function vEe(i,a){return i=lDt(i),Fc(i.getUTCFullYear()%100,a,2)}function wEe(i,a){return Fc(i.getUTCFullYear()%1e4,a,4)}function mEe(i,a){var f=i.getUTCDay();return i=f>=4||f===0?CA(i):CA.ceil(i),Fc(i.getUTCFullYear()%1e4,a,4)}function yEe(){return"+0000"}function hDt(){return"%"}function fDt(i){return+i}function dDt(i){return Math.floor(+i/1e3)}var SA,HU;xEe({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function xEe(i){return SA=x7e(i),HU=SA.format,SA.parse,SA.utcFormat,SA.utcParse,SA}function kEe(i){return new Date(i)}function EEe(i){return i instanceof Date?+i:+new Date(+i)}function gDt(i,a,f,p,v,m,b,E,C,A){var P=$Mt(),F=P.invert,j=P.domain,R=A(".%L"),H=A(":%S"),Y=A("%I:%M"),rt=A("%I %p"),J=A("%a %d"),it=A("%b %d"),ft=A("%B"),Tt=A("%Y");function kt(mt){return(C(mt)1?0:i<-1?FN:Math.acos(i)}function bDt(i){return i>=1?VU:i<=-1?-VU:Math.asin(i)}function LEe(i){return i.innerRadius}function MEe(i){return i.outerRadius}function DEe(i){return i.startAngle}function IEe(i){return i.endAngle}function OEe(i){return i&&i.padAngle}function NEe(i,a,f,p,v,m,b,E){var C=f-i,A=p-a,P=b-v,F=E-m,j=F*C-P*A;if(!(j*jtt*tt+Pt*Pt&&(yt=xt,st=ht),{cx:yt,cy:st,x01:-P,y01:-F,x11:yt*(v/kt-1),y11:st*(v/kt-1)}}function LA(){var i=LEe,a=MEe,f=Jh(0),p=null,v=DEe,m=IEe,b=OEe,E=null;function C(){var A,P,F=+i.apply(this,arguments),j=+a.apply(this,arguments),R=v.apply(this,arguments)-VU,H=m.apply(this,arguments)-VU,Y=pDt(H-R),rt=H>R;if(E||(E=A=y1t()),jb0))E.moveTo(0,0);else if(Y>GU-b0)E.moveTo(j*KE(R),j*u3(R)),E.arc(0,0,j,R,H,!rt),F>b0&&(E.moveTo(F*KE(H),F*u3(H)),E.arc(0,0,F,H,R,rt));else{var J=R,it=H,ft=R,Tt=H,kt=Y,mt=Y,ct=b.apply(this,arguments)/2,yt=ct>b0&&(p?+p.apply(this,arguments):AA(F*F+j*j)),st=O1t(pDt(j-F)/2,+f.apply(this,arguments)),xt=st,ht=st,dt,Ct;if(yt>b0){var tt=bDt(yt/F*u3(ct)),Pt=bDt(yt/j*u3(ct));(kt-=tt*2)>b0?(tt*=rt?1:-1,ft+=tt,Tt-=tt):(kt=0,ft=Tt=(R+H)/2),(mt-=Pt*2)>b0?(Pt*=rt?1:-1,J+=Pt,it-=Pt):(mt=0,J=it=(R+H)/2)}var pt=j*KE(J),Ft=j*u3(J),X=F*KE(Tt),Rt=F*u3(Tt);if(st>b0){var Bt=j*KE(it),vt=j*u3(it),Ot=F*KE(ft),Vt=F*u3(ft),qe;if(Yb0?ht>b0?(dt=UU(Ot,Vt,pt,Ft,j,ht,rt),Ct=UU(Bt,vt,X,Rt,j,ht,rt),E.moveTo(dt.cx+dt.x01,dt.cy+dt.y01),htb0)||!(kt>b0)?E.lineTo(X,Rt):xt>b0?(dt=UU(X,Rt,Bt,vt,F,-xt,rt),Ct=UU(pt,Ft,Ot,Vt,F,-xt,rt),E.lineTo(dt.cx+dt.x01,dt.cy+dt.y01),xti?1:a>=i?0:NaN}function REe(i){return i}function jEe(){var i=REe,a=BEe,f=null,p=Jh(0),v=Jh(GU),m=Jh(0);function b(E){var C,A=(E=vDt(E)).length,P,F,j=0,R=new Array(A),H=new Array(A),Y=+p.apply(this,arguments),rt=Math.min(GU,Math.max(-GU,v.apply(this,arguments)-Y)),J,it=Math.min(Math.abs(rt)/A,m.apply(this,arguments)),ft=it*(rt<0?-1:1),Tt;for(C=0;C0&&(j+=Tt);for(a!=null?R.sort(function(kt,mt){return a(H[kt],H[mt])}):f!=null&&R.sort(function(kt,mt){return f(E[kt],E[mt])}),C=0,F=j?(rt-A*ft)/j:0;C0?Tt*F:0)+ft,H[P]={data:E[P],index:C,value:Tt,startAngle:Y,endAngle:J,padAngle:it};return H}return b.value=function(E){return arguments.length?(i=typeof E=="function"?E:Jh(+E),b):i},b.sortValues=function(E){return arguments.length?(a=E,f=null,b):a},b.sort=function(E){return arguments.length?(f=E,a=null,b):f},b.startAngle=function(E){return arguments.length?(p=typeof E=="function"?E:Jh(+E),b):p},b.endAngle=function(E){return arguments.length?(v=typeof E=="function"?E:Jh(+E),b):v},b.padAngle=function(E){return arguments.length?(m=typeof E=="function"?E:Jh(+E),b):m},b}class mDt{constructor(a,f){this._context=a,this._x=f}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(a,f){switch(a=+a,f=+f,this._point){case 0:{this._point=1,this._line?this._context.lineTo(a,f):this._context.moveTo(a,f);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+a)/2,this._y0,this._x0,f,a,f):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+f)/2,a,this._y0,a,f);break}}this._x0=a,this._y0=f}}function $Ee(i){return new mDt(i,!0)}function zEe(i){return new mDt(i,!1)}function Qx(){}function WU(i,a,f){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+a)/6,(i._y0+4*i._y1+f)/6)}function KU(i){this._context=i}KU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:WU(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function MA(i){return new KU(i)}function yDt(i){this._context=i}yDt.prototype={areaStart:Qx,areaEnd:Qx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x2=i,this._y2=a;break;case 1:this._point=2,this._x3=i,this._y3=a;break;case 2:this._point=3,this._x4=i,this._y4=a,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+a)/6);break;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function qEe(i){return new yDt(i)}function xDt(i){this._context=i}xDt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var f=(this._x0+4*this._x1+i)/6,p=(this._y0+4*this._y1+a)/6;this._line?this._context.lineTo(f,p):this._context.moveTo(f,p);break;case 3:this._point=4;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function HEe(i){return new xDt(i)}function kDt(i,a){this._basis=new KU(i),this._beta=a}kDt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,a=this._y,f=i.length-1;if(f>0)for(var p=i[0],v=a[0],m=i[f]-p,b=a[f]-v,E=-1,C;++E<=f;)C=E/f,this._basis.point(this._beta*i[E]+(1-this._beta)*(p+C*m),this._beta*a[E]+(1-this._beta)*(v+C*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,a){this._x.push(+i),this._y.push(+a)}};const VEe=function i(a){function f(p){return a===1?new KU(p):new kDt(p,a)}return f.beta=function(p){return i(+p)},f}(.85);function YU(i,a,f){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-a),i._y2+i._k*(i._y1-f),i._x2,i._y2)}function N1t(i,a){this._context=i,this._k=(1-a)/6}N1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:YU(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2,this._x1=i,this._y1=a;break;case 2:this._point=3;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const GEe=function i(a){function f(p){return new N1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function P1t(i,a){this._context=i,this._k=(1-a)/6}P1t.prototype={areaStart:Qx,areaEnd:Qx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const UEe=function i(a){function f(p){return new P1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function F1t(i,a){this._context=i,this._k=(1-a)/6}F1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const WEe=function i(a){function f(p){return new F1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function B1t(i,a,f){var p=i._x1,v=i._y1,m=i._x2,b=i._y2;if(i._l01_a>b0){var E=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,C=3*i._l01_a*(i._l01_a+i._l12_a);p=(p*E-i._x0*i._l12_2a+i._x2*i._l01_2a)/C,v=(v*E-i._y0*i._l12_2a+i._y2*i._l01_2a)/C}if(i._l23_a>b0){var A=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,P=3*i._l23_a*(i._l23_a+i._l12_a);m=(m*A+i._x1*i._l23_2a-a*i._l12_2a)/P,b=(b*A+i._y1*i._l23_2a-f*i._l12_2a)/P}i._context.bezierCurveTo(p,v,m,b,i._x2,i._y2)}function EDt(i,a){this._context=i,this._alpha=a}EDt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3;default:B1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const KEe=function i(a){function f(p){return a?new EDt(p,a):new N1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function TDt(i,a){this._context=i,this._alpha=a}TDt.prototype={areaStart:Qx,areaEnd:Qx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:B1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const YEe=function i(a){function f(p){return a?new TDt(p,a):new P1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function _Dt(i,a){this._context=i,this._alpha=a}_Dt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:B1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const XEe=function i(a){function f(p){return a?new _Dt(p,a):new F1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function CDt(i){this._context=i}CDt.prototype={areaStart:Qx,areaEnd:Qx,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,a){i=+i,a=+a,this._point?this._context.lineTo(i,a):(this._point=1,this._context.moveTo(i,a))}};function QEe(i){return new CDt(i)}function SDt(i){return i<0?-1:1}function ADt(i,a,f){var p=i._x1-i._x0,v=a-i._x1,m=(i._y1-i._y0)/(p||v<0&&-0),b=(f-i._y1)/(v||p<0&&-0),E=(m*v+b*p)/(p+v);return(SDt(m)+SDt(b))*Math.min(Math.abs(m),Math.abs(b),.5*Math.abs(E))||0}function LDt(i,a){var f=i._x1-i._x0;return f?(3*(i._y1-i._y0)/f-a)/2:a}function R1t(i,a,f){var p=i._x0,v=i._y0,m=i._x1,b=i._y1,E=(m-p)/3;i._context.bezierCurveTo(p+E,v+E*a,m-E,b-E*f,m,b)}function XU(i){this._context=i}XU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:R1t(this,this._t0,LDt(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){var f=NaN;if(i=+i,a=+a,!(i===this._x1&&a===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,R1t(this,LDt(this,f=ADt(this,i,a)),f);break;default:R1t(this,this._t0,f=ADt(this,i,a));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a,this._t0=f}}};function MDt(i){this._context=new DDt(i)}(MDt.prototype=Object.create(XU.prototype)).point=function(i,a){XU.prototype.point.call(this,a,i)};function DDt(i){this._context=i}DDt.prototype={moveTo:function(i,a){this._context.moveTo(a,i)},closePath:function(){this._context.closePath()},lineTo:function(i,a){this._context.lineTo(a,i)},bezierCurveTo:function(i,a,f,p,v,m){this._context.bezierCurveTo(a,i,p,f,m,v)}};function ZEe(i){return new XU(i)}function JEe(i){return new MDt(i)}function IDt(i){this._context=i}IDt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,a=this._y,f=i.length;if(f)if(this._line?this._context.lineTo(i[0],a[0]):this._context.moveTo(i[0],a[0]),f===2)this._context.lineTo(i[1],a[1]);else for(var p=ODt(i),v=ODt(a),m=0,b=1;b=0;--a)v[a]=(b[a]-v[a+1])/m[a];for(m[f-1]=(i[f]+v[f-1])/2,a=0;a=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,a),this._context.lineTo(i,a);else{var f=this._x*(1-this._t)+i*this._t;this._context.lineTo(f,this._y),this._context.lineTo(f,a)}break}}this._x=i,this._y=a}};function e9e(i){return new QU(i,.5)}function n9e(i){return new QU(i,0)}function r9e(i){return new QU(i,1)}function BN(i,a,f){this.k=i,this.x=a,this.y=f}BN.prototype={constructor:BN,scale:function(i){return i===1?this:new BN(this.k*i,this.x,this.y)},translate:function(i,a){return i===0&a===0?this:new BN(this.k,this.x+this.k*i,this.y+this.k*a)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},BN.prototype;/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:NDt,setPrototypeOf:PDt,isFrozen:i9e,getPrototypeOf:s9e,getOwnPropertyDescriptor:a9e}=Object;let{freeze:sg,seal:Xw,create:o9e}=Object,{apply:j1t,construct:$1t}=typeof Reflect<"u"&&Reflect;j1t||(j1t=function(a,f,p){return a.apply(f,p)}),sg||(sg=function(a){return a}),Xw||(Xw=function(a){return a}),$1t||($1t=function(a,f){return new a(...f)});const c9e=X2(Array.prototype.forEach),FDt=X2(Array.prototype.pop),RN=X2(Array.prototype.push),ZU=X2(String.prototype.toLowerCase),z1t=X2(String.prototype.toString),u9e=X2(String.prototype.match),Qw=X2(String.prototype.replace),l9e=X2(String.prototype.indexOf),h9e=X2(String.prototype.trim),Ib=X2(RegExp.prototype.test),jN=f9e(TypeError);function X2(i){return function(a){for(var f=arguments.length,p=new Array(f>1?f-1:0),v=1;v/gm),v9e=Xw(/\${[\w\W]*}/gm),w9e=Xw(/^data-[\-\w.\u00B7-\uFFFF]/),m9e=Xw(/^aria-[\-\w]+$/),zDt=Xw(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),y9e=Xw(/^(?:\w+script|data):/i),x9e=Xw(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),qDt=Xw(/^html$/i);var HDt=Object.freeze({__proto__:null,MUSTACHE_EXPR:p9e,ERB_EXPR:b9e,TMPLIT_EXPR:v9e,DATA_ATTR:w9e,ARIA_ATTR:m9e,IS_ALLOWED_URI:zDt,IS_SCRIPT_OR_DATA:y9e,ATTR_WHITESPACE:x9e,DOCTYPE_NAME:qDt});const k9e=()=>typeof window>"u"?null:window,E9e=function(a,f){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let p=null;const v="data-tt-policy-suffix";f&&f.hasAttribute(v)&&(p=f.getAttribute(v));const m="dompurify"+(p?"#"+p:"");try{return a.createPolicy(m,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+m+" could not be created."),null}};function VDt(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:k9e();const a=Vi=>VDt(Vi);if(a.version="3.0.5",a.removed=[],!i||!i.document||i.document.nodeType!==9)return a.isSupported=!1,a;const f=i.document,p=f.currentScript;let{document:v}=i;const{DocumentFragment:m,HTMLTemplateElement:b,Node:E,Element:C,NodeFilter:A,NamedNodeMap:P=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:F,DOMParser:j,trustedTypes:R}=i,H=C.prototype,Y=JU(H,"cloneNode"),rt=JU(H,"nextSibling"),J=JU(H,"childNodes"),it=JU(H,"parentNode");if(typeof b=="function"){const Vi=v.createElement("template");Vi.content&&Vi.content.ownerDocument&&(v=Vi.content.ownerDocument)}let ft,Tt="";const{implementation:kt,createNodeIterator:mt,createDocumentFragment:ct,getElementsByTagName:yt}=v,{importNode:st}=f;let xt={};a.isSupported=typeof NDt=="function"&&typeof it=="function"&&kt&&kt.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:ht,ERB_EXPR:dt,TMPLIT_EXPR:Ct,DATA_ATTR:tt,ARIA_ATTR:Pt,IS_SCRIPT_OR_DATA:pt,ATTR_WHITESPACE:Ft}=HDt;let{IS_ALLOWED_URI:X}=HDt,Rt=null;const Bt=_o({},[...BDt,...q1t,...H1t,...V1t,...RDt]);let vt=null;const Ot=_o({},[...jDt,...G1t,...$Dt,...tW]);let Vt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),qe=null,_n=null,Te=!0,Wn=!0,Ae=!1,ne=!0,ke=!1,Ve=!1,Ee=!1,He=!1,Ce=!1,$e=!1,ye=!1,fn=!0,Yt=!1;const Mi="user-content-";let qt=!0,zi=!1,Se={},ki=null;const Ri=_o({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let pi=null;const bi=_o({},["audio","video","img","source","image","track"]);let dn=null;const Nn=_o({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wr="http://www.w3.org/1998/Math/MathML",Li="http://www.w3.org/2000/svg",is="http://www.w3.org/1999/xhtml";let Ts=is,Aa=!1,Xi=null;const Ga=_o({},[Wr,Li,is],z1t);let _r;const qr=["application/xhtml+xml","text/html"],Oi="text/html";let gr,Js=null;const Vn=v.createElement("form"),Xc=function(Ke){return Ke instanceof RegExp||Ke instanceof Function},Er=function(Ke){if(!(Js&&Js===Ke)){if((!Ke||typeof Ke!="object")&&(Ke={}),Ke=DA(Ke),_r=qr.indexOf(Ke.PARSER_MEDIA_TYPE)===-1?_r=Oi:_r=Ke.PARSER_MEDIA_TYPE,gr=_r==="application/xhtml+xml"?z1t:ZU,Rt="ALLOWED_TAGS"in Ke?_o({},Ke.ALLOWED_TAGS,gr):Bt,vt="ALLOWED_ATTR"in Ke?_o({},Ke.ALLOWED_ATTR,gr):Ot,Xi="ALLOWED_NAMESPACES"in Ke?_o({},Ke.ALLOWED_NAMESPACES,z1t):Ga,dn="ADD_URI_SAFE_ATTR"in Ke?_o(DA(Nn),Ke.ADD_URI_SAFE_ATTR,gr):Nn,pi="ADD_DATA_URI_TAGS"in Ke?_o(DA(bi),Ke.ADD_DATA_URI_TAGS,gr):bi,ki="FORBID_CONTENTS"in Ke?_o({},Ke.FORBID_CONTENTS,gr):Ri,qe="FORBID_TAGS"in Ke?_o({},Ke.FORBID_TAGS,gr):{},_n="FORBID_ATTR"in Ke?_o({},Ke.FORBID_ATTR,gr):{},Se="USE_PROFILES"in Ke?Ke.USE_PROFILES:!1,Te=Ke.ALLOW_ARIA_ATTR!==!1,Wn=Ke.ALLOW_DATA_ATTR!==!1,Ae=Ke.ALLOW_UNKNOWN_PROTOCOLS||!1,ne=Ke.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ke=Ke.SAFE_FOR_TEMPLATES||!1,Ve=Ke.WHOLE_DOCUMENT||!1,Ce=Ke.RETURN_DOM||!1,$e=Ke.RETURN_DOM_FRAGMENT||!1,ye=Ke.RETURN_TRUSTED_TYPE||!1,He=Ke.FORCE_BODY||!1,fn=Ke.SANITIZE_DOM!==!1,Yt=Ke.SANITIZE_NAMED_PROPS||!1,qt=Ke.KEEP_CONTENT!==!1,zi=Ke.IN_PLACE||!1,X=Ke.ALLOWED_URI_REGEXP||zDt,Ts=Ke.NAMESPACE||is,Vt=Ke.CUSTOM_ELEMENT_HANDLING||{},Ke.CUSTOM_ELEMENT_HANDLING&&Xc(Ke.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Vt.tagNameCheck=Ke.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ke.CUSTOM_ELEMENT_HANDLING&&Xc(Ke.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Vt.attributeNameCheck=Ke.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ke.CUSTOM_ELEMENT_HANDLING&&typeof Ke.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Vt.allowCustomizedBuiltInElements=Ke.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ke&&(Wn=!1),$e&&(Ce=!0),Se&&(Rt=_o({},[...RDt]),vt=[],Se.html===!0&&(_o(Rt,BDt),_o(vt,jDt)),Se.svg===!0&&(_o(Rt,q1t),_o(vt,G1t),_o(vt,tW)),Se.svgFilters===!0&&(_o(Rt,H1t),_o(vt,G1t),_o(vt,tW)),Se.mathMl===!0&&(_o(Rt,V1t),_o(vt,$Dt),_o(vt,tW))),Ke.ADD_TAGS&&(Rt===Bt&&(Rt=DA(Rt)),_o(Rt,Ke.ADD_TAGS,gr)),Ke.ADD_ATTR&&(vt===Ot&&(vt=DA(vt)),_o(vt,Ke.ADD_ATTR,gr)),Ke.ADD_URI_SAFE_ATTR&&_o(dn,Ke.ADD_URI_SAFE_ATTR,gr),Ke.FORBID_CONTENTS&&(ki===Ri&&(ki=DA(ki)),_o(ki,Ke.FORBID_CONTENTS,gr)),qt&&(Rt["#text"]=!0),Ve&&_o(Rt,["html","head","body"]),Rt.table&&(_o(Rt,["tbody"]),delete qe.tbody),Ke.TRUSTED_TYPES_POLICY){if(typeof Ke.TRUSTED_TYPES_POLICY.createHTML!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ke.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ft=Ke.TRUSTED_TYPES_POLICY,Tt=ft.createHTML("")}else ft===void 0&&(ft=E9e(R,p)),ft!==null&&typeof Tt=="string"&&(Tt=ft.createHTML(""));sg&&sg(Ke),Js=Ke}},Mc=_o({},["mi","mo","mn","ms","mtext"]),bp=_o({},["foreignobject","desc","title","annotation-xml"]),fm=_o({},["title","style","font","a","script"]),T0=_o({},q1t);_o(T0,H1t),_o(T0,d9e);const Fd=_o({},V1t);_o(Fd,g9e);const No=function(Ke){let kr=it(Ke);(!kr||!kr.tagName)&&(kr={namespaceURI:Ts,tagName:"template"});const ni=ZU(Ke.tagName),eo=ZU(kr.tagName);return Xi[Ke.namespaceURI]?Ke.namespaceURI===Li?kr.namespaceURI===is?ni==="svg":kr.namespaceURI===Wr?ni==="svg"&&(eo==="annotation-xml"||Mc[eo]):!!T0[ni]:Ke.namespaceURI===Wr?kr.namespaceURI===is?ni==="math":kr.namespaceURI===Li?ni==="math"&&bp[eo]:!!Fd[ni]:Ke.namespaceURI===is?kr.namespaceURI===Li&&!bp[eo]||kr.namespaceURI===Wr&&!Mc[eo]?!1:!Fd[ni]&&(fm[ni]||!T0[ni]):!!(_r==="application/xhtml+xml"&&Xi[Ke.namespaceURI]):!1},ta=function(Ke){RN(a.removed,{element:Ke});try{Ke.parentNode.removeChild(Ke)}catch{Ke.remove()}},bu=function(Ke,kr){try{RN(a.removed,{attribute:kr.getAttributeNode(Ke),from:kr})}catch{RN(a.removed,{attribute:null,from:kr})}if(kr.removeAttribute(Ke),Ke==="is"&&!vt[Ke])if(Ce||$e)try{ta(kr)}catch{}else try{kr.setAttribute(Ke,"")}catch{}},Pu=function(Ke){let kr,ni;if(He)Ke=""+Ke;else{const Ju=u9e(Ke,/^[\r\n\t ]+/);ni=Ju&&Ju[0]}_r==="application/xhtml+xml"&&Ts===is&&(Ke=''+Ke+"");const eo=ft?ft.createHTML(Ke):Ke;if(Ts===is)try{kr=new j().parseFromString(eo,_r)}catch{}if(!kr||!kr.documentElement){kr=kt.createDocument(Ts,"template",null);try{kr.documentElement.innerHTML=Aa?Tt:eo}catch{}}const Dc=kr.body||kr.documentElement;return Ke&&ni&&Dc.insertBefore(v.createTextNode(ni),Dc.childNodes[0]||null),Ts===is?yt.call(kr,Ve?"html":"body")[0]:Ve?kr.documentElement:Dc},lo=function(Ke){return mt.call(Ke.ownerDocument||Ke,Ke,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT,null,!1)},mo=function(Ke){return Ke instanceof F&&(typeof Ke.nodeName!="string"||typeof Ke.textContent!="string"||typeof Ke.removeChild!="function"||!(Ke.attributes instanceof P)||typeof Ke.removeAttribute!="function"||typeof Ke.setAttribute!="function"||typeof Ke.namespaceURI!="string"||typeof Ke.insertBefore!="function"||typeof Ke.hasChildNodes!="function")},Os=function(Ke){return typeof E=="object"?Ke instanceof E:Ke&&typeof Ke=="object"&&typeof Ke.nodeType=="number"&&typeof Ke.nodeName=="string"},Tl=function(Ke,kr,ni){xt[Ke]&&c9e(xt[Ke],eo=>{eo.call(a,kr,ni,Js)})},Fu=function(Ke){let kr;if(Tl("beforeSanitizeElements",Ke,null),mo(Ke))return ta(Ke),!0;const ni=gr(Ke.nodeName);if(Tl("uponSanitizeElement",Ke,{tagName:ni,allowedTags:Rt}),Ke.hasChildNodes()&&!Os(Ke.firstElementChild)&&(!Os(Ke.content)||!Os(Ke.content.firstElementChild))&&Ib(/<[/\w]/g,Ke.innerHTML)&&Ib(/<[/\w]/g,Ke.textContent))return ta(Ke),!0;if(!Rt[ni]||qe[ni]){if(!qe[ni]&&nd(ni)&&(Vt.tagNameCheck instanceof RegExp&&Ib(Vt.tagNameCheck,ni)||Vt.tagNameCheck instanceof Function&&Vt.tagNameCheck(ni)))return!1;if(qt&&!ki[ni]){const eo=it(Ke)||Ke.parentNode,Dc=J(Ke)||Ke.childNodes;if(Dc&&eo){const Ju=Dc.length;for(let Qo=Ju-1;Qo>=0;--Qo)eo.insertBefore(Y(Dc[Qo],!0),rt(Ke))}}return ta(Ke),!0}return Ke instanceof C&&!No(Ke)||(ni==="noscript"||ni==="noembed"||ni==="noframes")&&Ib(/<\/no(script|embed|frames)/i,Ke.innerHTML)?(ta(Ke),!0):(ke&&Ke.nodeType===3&&(kr=Ke.textContent,kr=Qw(kr,ht," "),kr=Qw(kr,dt," "),kr=Qw(kr,Ct," "),Ke.textContent!==kr&&(RN(a.removed,{element:Ke.cloneNode()}),Ke.textContent=kr)),Tl("afterSanitizeElements",Ke,null),!1)},zo=function(Ke,kr,ni){if(fn&&(kr==="id"||kr==="name")&&(ni in v||ni in Vn))return!1;if(!(Wn&&!_n[kr]&&Ib(tt,kr))){if(!(Te&&Ib(Pt,kr))){if(!vt[kr]||_n[kr]){if(!(nd(Ke)&&(Vt.tagNameCheck instanceof RegExp&&Ib(Vt.tagNameCheck,Ke)||Vt.tagNameCheck instanceof Function&&Vt.tagNameCheck(Ke))&&(Vt.attributeNameCheck instanceof RegExp&&Ib(Vt.attributeNameCheck,kr)||Vt.attributeNameCheck instanceof Function&&Vt.attributeNameCheck(kr))||kr==="is"&&Vt.allowCustomizedBuiltInElements&&(Vt.tagNameCheck instanceof RegExp&&Ib(Vt.tagNameCheck,ni)||Vt.tagNameCheck instanceof Function&&Vt.tagNameCheck(ni))))return!1}else if(!dn[kr]){if(!Ib(X,Qw(ni,Ft,""))){if(!((kr==="src"||kr==="xlink:href"||kr==="href")&&Ke!=="script"&&l9e(ni,"data:")===0&&pi[Ke])){if(!(Ae&&!Ib(pt,Qw(ni,Ft,"")))){if(ni)return!1}}}}}}return!0},nd=function(Ke){return Ke.indexOf("-")>0},sf=function(Ke){let kr,ni,eo,Dc;Tl("beforeSanitizeAttributes",Ke,null);const{attributes:Ju}=Ke;if(!Ju)return;const Qo={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:vt};for(Dc=Ju.length;Dc--;){kr=Ju[Dc];const{name:jf,namespaceURI:rh}=kr;if(ni=jf==="value"?kr.value:h9e(kr.value),eo=gr(jf),Qo.attrName=eo,Qo.attrValue=ni,Qo.keepAttr=!0,Qo.forceKeepAttr=void 0,Tl("uponSanitizeAttribute",Ke,Qo),ni=Qo.attrValue,Qo.forceKeepAttr||(bu(jf,Ke),!Qo.keepAttr))continue;if(!ne&&Ib(/\/>/i,ni)){bu(jf,Ke);continue}ke&&(ni=Qw(ni,ht," "),ni=Qw(ni,dt," "),ni=Qw(ni,Ct," "));const dm=gr(Ke.nodeName);if(zo(dm,eo,ni)){if(Yt&&(eo==="id"||eo==="name")&&(bu(jf,Ke),ni=Mi+ni),ft&&typeof R=="object"&&typeof R.getAttributeType=="function"&&!rh)switch(R.getAttributeType(dm,eo)){case"TrustedHTML":{ni=ft.createHTML(ni);break}case"TrustedScriptURL":{ni=ft.createScriptURL(ni);break}}try{rh?Ke.setAttributeNS(rh,jf,ni):Ke.setAttribute(jf,ni),FDt(a.removed)}catch{}}}Tl("afterSanitizeAttributes",Ke,null)},ll=function Vi(Ke){let kr;const ni=lo(Ke);for(Tl("beforeSanitizeShadowDOM",Ke,null);kr=ni.nextNode();)Tl("uponSanitizeShadowNode",kr,null),!Fu(kr)&&(kr.content instanceof m&&Vi(kr.content),sf(kr));Tl("afterSanitizeShadowDOM",Ke,null)};return a.sanitize=function(Vi){let Ke=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},kr,ni,eo,Dc;if(Aa=!Vi,Aa&&(Vi=""),typeof Vi!="string"&&!Os(Vi))if(typeof Vi.toString=="function"){if(Vi=Vi.toString(),typeof Vi!="string")throw jN("dirty is not a string, aborting")}else throw jN("toString is not a function");if(!a.isSupported)return Vi;if(Ee||Er(Ke),a.removed=[],typeof Vi=="string"&&(zi=!1),zi){if(Vi.nodeName){const jf=gr(Vi.nodeName);if(!Rt[jf]||qe[jf])throw jN("root node is forbidden and cannot be sanitized in-place")}}else if(Vi instanceof E)kr=Pu(""),ni=kr.ownerDocument.importNode(Vi,!0),ni.nodeType===1&&ni.nodeName==="BODY"||ni.nodeName==="HTML"?kr=ni:kr.appendChild(ni);else{if(!Ce&&!ke&&!Ve&&Vi.indexOf("<")===-1)return ft&&ye?ft.createHTML(Vi):Vi;if(kr=Pu(Vi),!kr)return Ce?null:ye?Tt:""}kr&&He&&ta(kr.firstChild);const Ju=lo(zi?Vi:kr);for(;eo=Ju.nextNode();)Fu(eo)||(eo.content instanceof m&&ll(eo.content),sf(eo));if(zi)return Vi;if(Ce){if($e)for(Dc=ct.call(kr.ownerDocument);kr.firstChild;)Dc.appendChild(kr.firstChild);else Dc=kr;return(vt.shadowroot||vt.shadowrootmode)&&(Dc=st.call(f,Dc,!0)),Dc}let Qo=Ve?kr.outerHTML:kr.innerHTML;return Ve&&Rt["!doctype"]&&kr.ownerDocument&&kr.ownerDocument.doctype&&kr.ownerDocument.doctype.name&&Ib(qDt,kr.ownerDocument.doctype.name)&&(Qo=" -`+Qo),ke&&(Qo=Qw(Qo,ht," "),Qo=Qw(Qo,dt," "),Qo=Qw(Qo,Ct," ")),ft&&ye?ft.createHTML(Qo):Qo},a.setConfig=function(Vi){Er(Vi),Ee=!0},a.clearConfig=function(){Js=null,Ee=!1},a.isValidAttribute=function(Vi,Ke,kr){Js||Er({});const ni=gr(Vi),eo=gr(Ke);return zo(ni,eo,kr)},a.addHook=function(Vi,Ke){typeof Ke=="function"&&(xt[Vi]=xt[Vi]||[],RN(xt[Vi],Ke))},a.removeHook=function(Vi){if(xt[Vi])return FDt(xt[Vi])},a.removeHooks=function(Vi){xt[Vi]&&(xt[Vi]=[])},a.removeAllHooks=function(){xt={}},a}var eW=VDt();const $N=//gi,T9e=i=>i?WDt(i).replace(/\\n/g,"#br#").split("#br#"):[""],GDt=i=>eW.sanitize(i),UDt=(i,a)=>{var f;if(((f=a.flowchart)==null?void 0:f.htmlLabels)!==!1){const p=a.securityLevel;p==="antiscript"||p==="strict"?i=GDt(i):p!=="loose"&&(i=WDt(i),i=i.replace(//g,">"),i=i.replace(/=/g,"="),i=A9e(i))}return i},v0=(i,a)=>i&&(a.dompurifyConfig?i=eW.sanitize(UDt(i,a),a.dompurifyConfig).toString():i=eW.sanitize(UDt(i,a),{FORBID_TAGS:["style"]}).toString(),i),_9e=(i,a)=>typeof i=="string"?v0(i,a):i.flat().map(f=>v0(f,a)),C9e=i=>$N.test(i),S9e=i=>i.split($N),A9e=i=>i.replace(/#br#/g,"
"),WDt=i=>i.replace($N,"#br#"),L9e=i=>{let a="";return i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replaceAll(/\(/g,"\\("),a=a.replaceAll(/\)/g,"\\)")),a},u1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),M9e=function(...i){const a=i.filter(f=>!isNaN(f));return Math.max(...a)},D9e=function(...i){const a=i.filter(f=>!isNaN(f));return Math.min(...a)},zN=function(i){let a=i;if(i.split("~").length-1>=2){let f=a;do a=f,f=a.replace(/~([^\s,:;]+)~/,"<$1>");while(f!=a);return zN(f)}else return a},ui={getRows:T9e,sanitizeText:v0,sanitizeTextOrArray:_9e,hasBreaks:C9e,splitBreaks:S9e,lineBreakRegex:$N,removeScript:GDt,getUrl:L9e,evaluate:u1,getMax:M9e,getMin:D9e},nW={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const a=i/255;return i>.03928?Math.pow((a+.055)/1.055,2.4):a/12.92},hue2rgb:(i,a,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<1/6?i+(a-i)*6*f:f<1/2?a:f<2/3?i+(a-i)*(2/3-f)*6:i),hsl2rgb:({h:i,s:a,l:f},p)=>{if(!a)return f*2.55;i/=360,a/=100,f/=100;const v=f<.5?f*(1+a):f+a-f*a,m=2*f-v;switch(p){case"r":return nW.hue2rgb(m,v,i+1/3)*255;case"g":return nW.hue2rgb(m,v,i)*255;case"b":return nW.hue2rgb(m,v,i-1/3)*255}},rgb2hsl:({r:i,g:a,b:f},p)=>{i/=255,a/=255,f/=255;const v=Math.max(i,a,f),m=Math.min(i,a,f),b=(v+m)/2;if(p==="l")return b*100;if(v===m)return 0;const E=v-m,C=b>.5?E/(2-v-m):E/(v+m);if(p==="s")return C*100;switch(v){case i:return((a-f)/E+(aa>f?Math.min(a,Math.max(f,i)):Math.min(f,Math.max(a,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const a=Math.round(i).toString(16);return a.length>1?a:`0${a}`}}},Zx={};for(let i=0;i<=255;i++)Zx[i]=ka.unit.dec2hex(i);const w0={ALL:0,RGB:1,HSL:2};class I9e{constructor(){this.type=w0.ALL}get(){return this.type}set(a){if(this.type&&this.type!==a)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=a}reset(){this.type=w0.ALL}is(a){return this.type===a}}const O9e=I9e;class N9e{constructor(a,f){this.color=f,this.changed=!1,this.data=a,this.type=new O9e}set(a,f){return this.color=f,this.changed=!1,this.data=a,this.type.type=w0.ALL,this}_ensureHSL(){const a=this.data,{h:f,s:p,l:v}=a;f===void 0&&(a.h=ka.channel.rgb2hsl(a,"h")),p===void 0&&(a.s=ka.channel.rgb2hsl(a,"s")),v===void 0&&(a.l=ka.channel.rgb2hsl(a,"l"))}_ensureRGB(){const a=this.data,{r:f,g:p,b:v}=a;f===void 0&&(a.r=ka.channel.hsl2rgb(a,"r")),p===void 0&&(a.g=ka.channel.hsl2rgb(a,"g")),v===void 0&&(a.b=ka.channel.hsl2rgb(a,"b"))}get r(){const a=this.data,f=a.r;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),ka.channel.hsl2rgb(a,"r"))}get g(){const a=this.data,f=a.g;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),ka.channel.hsl2rgb(a,"g"))}get b(){const a=this.data,f=a.b;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),ka.channel.hsl2rgb(a,"b"))}get h(){const a=this.data,f=a.h;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),ka.channel.rgb2hsl(a,"h"))}get s(){const a=this.data,f=a.s;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),ka.channel.rgb2hsl(a,"s"))}get l(){const a=this.data,f=a.l;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),ka.channel.rgb2hsl(a,"l"))}get a(){return this.data.a}set r(a){this.type.set(w0.RGB),this.changed=!0,this.data.r=a}set g(a){this.type.set(w0.RGB),this.changed=!0,this.data.g=a}set b(a){this.type.set(w0.RGB),this.changed=!0,this.data.b=a}set h(a){this.type.set(w0.HSL),this.changed=!0,this.data.h=a}set s(a){this.type.set(w0.HSL),this.changed=!0,this.data.s=a}set l(a){this.type.set(w0.HSL),this.changed=!0,this.data.l=a}set a(a){this.changed=!0,this.data.a=a}}const P9e=N9e,rW=new P9e({r:0,g:0,b:0,a:0},"transparent"),KDt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const a=i.match(KDt.re);if(!a)return;const f=a[1],p=parseInt(f,16),v=f.length,m=v%4===0,b=v>4,E=b?1:17,C=b?8:4,A=m?0:-1,P=b?255:15;return rW.set({r:(p>>C*(A+3)&P)*E,g:(p>>C*(A+2)&P)*E,b:(p>>C*(A+1)&P)*E,a:m?(p&P)*E/255:1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`#${Zx[Math.round(a)]}${Zx[Math.round(f)]}${Zx[Math.round(p)]}${Zx[Math.round(v*255)]}`:`#${Zx[Math.round(a)]}${Zx[Math.round(f)]}${Zx[Math.round(p)]}`}},qN=KDt,iW={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const a=i.match(iW.hueRe);if(a){const[,f,p]=a;switch(p){case"grad":return ka.channel.clamp.h(parseFloat(f)*.9);case"rad":return ka.channel.clamp.h(parseFloat(f)*180/Math.PI);case"turn":return ka.channel.clamp.h(parseFloat(f)*360)}}return ka.channel.clamp.h(parseFloat(i))},parse:i=>{const a=i.charCodeAt(0);if(a!==104&&a!==72)return;const f=i.match(iW.re);if(!f)return;const[,p,v,m,b,E]=f;return rW.set({h:iW._hue2deg(p),s:ka.channel.clamp.s(parseFloat(v)),l:ka.channel.clamp.l(parseFloat(m)),a:b?ka.channel.clamp.a(E?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:a,s:f,l:p,a:v}=i;return v<1?`hsla(${ka.lang.round(a)}, ${ka.lang.round(f)}%, ${ka.lang.round(p)}%, ${v})`:`hsl(${ka.lang.round(a)}, ${ka.lang.round(f)}%, ${ka.lang.round(p)}%)`}},sW=iW,aW={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const a=aW.colors[i];if(a)return qN.parse(a)},stringify:i=>{const a=qN.stringify(i);for(const f in aW.colors)if(aW.colors[f]===a)return f}},YDt=aW,XDt={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const a=i.charCodeAt(0);if(a!==114&&a!==82)return;const f=i.match(XDt.re);if(!f)return;const[,p,v,m,b,E,C,A,P]=f;return rW.set({r:ka.channel.clamp.r(v?parseFloat(p)*2.55:parseFloat(p)),g:ka.channel.clamp.g(b?parseFloat(m)*2.55:parseFloat(m)),b:ka.channel.clamp.b(C?parseFloat(E)*2.55:parseFloat(E)),a:A?ka.channel.clamp.a(P?parseFloat(A)/100:parseFloat(A)):1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`rgba(${ka.lang.round(a)}, ${ka.lang.round(f)}, ${ka.lang.round(p)}, ${ka.lang.round(v)})`:`rgb(${ka.lang.round(a)}, ${ka.lang.round(f)}, ${ka.lang.round(p)})`}},oW=XDt,Zw={format:{keyword:YDt,hex:qN,rgb:oW,rgba:oW,hsl:sW,hsla:sW},parse:i=>{if(typeof i!="string")return i;const a=qN.parse(i)||oW.parse(i)||sW.parse(i)||YDt.parse(i);if(a)return a;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(w0.HSL)||i.data.r===void 0?sW.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?oW.stringify(i):qN.stringify(i)},QDt=(i,a)=>{const f=Zw.parse(i);for(const p in a)f[p]=ka.channel.clamp[p](a[p]);return Zw.stringify(f)},IA=(i,a,f=0,p=1)=>{if(typeof i!="number")return QDt(i,{a});const v=rW.set({r:ka.channel.clamp.r(i),g:ka.channel.clamp.g(a),b:ka.channel.clamp.b(f),a:ka.channel.clamp.a(p)});return Zw.stringify(v)},F9e=(i,a)=>ka.lang.round(Zw.parse(i)[a]),B9e=i=>{const{r:a,g:f,b:p}=Zw.parse(i),v=.2126*ka.channel.toLinear(a)+.7152*ka.channel.toLinear(f)+.0722*ka.channel.toLinear(p);return ka.lang.round(v)},R9e=i=>B9e(i)>=.5,XE=i=>!R9e(i),ZDt=(i,a,f)=>{const p=Zw.parse(i),v=p[a],m=ka.channel.clamp[a](v+f);return v!==m&&(p[a]=m),Zw.stringify(p)},Ss=(i,a)=>ZDt(i,"l",a),Ys=(i,a)=>ZDt(i,"l",-a),mn=(i,a)=>{const f=Zw.parse(i),p={};for(const v in a)a[v]&&(p[v]=f[v]+a[v]);return QDt(i,p)},j9e=(i,a,f=50)=>{const{r:p,g:v,b:m,a:b}=Zw.parse(i),{r:E,g:C,b:A,a:P}=Zw.parse(a),F=f/100,j=F*2-1,R=b-P,Y=((j*R===-1?j:(j+R)/(1+j*R))+1)/2,rt=1-Y,J=p*Y+E*rt,it=v*Y+C*rt,ft=m*Y+A*rt,Tt=b*F+P*(1-F);return IA(J,it,ft,Tt)},ji=(i,a=100)=>{const f=Zw.parse(i);return f.r=255-f.r,f.g=255-f.g,f.b=255-f.b,j9e(f,i,a)},ag=(i,a)=>a?mn(i,{s:-40,l:10}):mn(i,{s:-40,l:-10}),cW="#ffffff",uW="#f2f2f2";let $9e=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||mn(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||mn(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ag(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ag(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||ji(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||ji(this.tertiaryColor),this.lineColor=this.lineColor||ji(this.background),this.arrowheadColor=this.arrowheadColor||ji(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ys(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ys(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||ji(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Ss(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||mn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||mn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||mn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||mn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||mn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||mn(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||mn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||mn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||mn(this.primaryColor,{h:330}),this.darkMode)for(let f=0;f{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const z9e=i=>{const a=new $9e;return a.calculate(i),a};let q9e=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Ss(this.primaryColor,16),this.tertiaryColor=mn(this.primaryColor,{h:-160}),this.primaryBorderColor=ji(this.background),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=ji(this.primaryColor),this.secondaryTextColor=ji(this.secondaryColor),this.tertiaryTextColor=ji(this.tertiaryColor),this.lineColor=ji(this.background),this.textColor=ji(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Ss(ji("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=IA(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Ys("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ys(this.sectionBkgColor,10),this.taskBorderColor=IA(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=IA(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Ss(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Ss(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Ss(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=mn(this.primaryColor,{h:64}),this.fillType3=mn(this.secondaryColor,{h:64}),this.fillType4=mn(this.primaryColor,{h:-64}),this.fillType5=mn(this.secondaryColor,{h:-64}),this.fillType6=mn(this.primaryColor,{h:128}),this.fillType7=mn(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||mn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||mn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||mn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||mn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||mn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||mn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||mn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||mn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||mn(this.primaryColor,{h:330});for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const H9e=i=>{const a=new q9e;return a.calculate(i),a};let V9e=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=mn(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=mn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=ji(this.primaryColor),this.secondaryTextColor=ji(this.secondaryColor),this.tertiaryTextColor=ji(this.tertiaryColor),this.lineColor=ji(this.background),this.textColor=ji(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=IA(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||mn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||mn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||mn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||mn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||mn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||mn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||mn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||mn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||mn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||Ys(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||Ys(this.tertiaryColor,40);for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const JDt=i=>{const a=new V9e;return a.calculate(i),a};let G9e=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Ss("#cde498",10),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=ji(this.primaryColor),this.secondaryTextColor=ji(this.secondaryColor),this.tertiaryTextColor=ji(this.primaryColor),this.lineColor=ji(this.background),this.textColor=ji(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ys(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||mn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||mn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||mn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||mn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||mn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||mn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||mn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||mn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||mn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||Ys(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||Ys(this.tertiaryColor,40);for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const U9e=i=>{const a=new G9e;return a.calculate(i),a};class W9e{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Ss(this.contrast,55),this.background="#ffffff",this.tertiaryColor=mn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=ji(this.primaryColor),this.secondaryTextColor=ji(this.secondaryColor),this.tertiaryTextColor=ji(this.tertiaryColor),this.lineColor=ji(this.background),this.textColor=ji(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Ss(this.contrast,55),this.border2=this.contrast,this.actorBorder=Ss(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}}const m5={base:{getThemeVariables:z9e},dark:{getThemeVariables:H9e},default:{getThemeVariables:JDt},forest:{getThemeVariables:U9e},neutral:{getThemeVariables:i=>{const a=new W9e;return a.calculate(i),a}}},Jx={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},tIt={...Jx,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:m5.default.getThemeVariables(),sequence:{...Jx.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Jx.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Jx.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Jx.pie,useWidth:984},requirement:{...Jx.requirement,useWidth:void 0},gitGraph:{...Jx.gitGraph,useMaxWidth:!1},sankey:{...Jx.sankey,useMaxWidth:!1}},eIt=(i,a="")=>Object.keys(i).reduce((f,p)=>Array.isArray(i[p])?f:typeof i[p]=="object"&&i[p]!==null?[...f,a+p,...eIt(i[p],"")]:[...f,a+p],[]),K9e=new Set(eIt(tIt,"")),If=tIt,nIt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,lW=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Y9e=/\s*%%.*\n/gm;class rIt extends Error{constructor(a){super(a),this.name="UnknownDiagramError"}}const OA={},hW=function(i,a){i=i.replace(nIt,"").replace(lW,"").replace(Y9e,` -`);for(const[f,{detector:p}]of Object.entries(OA))if(p(i,a))return f;throw new rIt(`No diagram type detected matching given configuration for text: ${i}`)},iIt=(...i)=>{for(const{id:a,detector:f,loader:p}of i)sIt(a,f,p)},sIt=(i,a,f)=>{OA[i]?Wt.error(`Detector with key ${i} already exists`):OA[i]={detector:a,loader:f},Wt.debug(`Detector with key ${i} added${f?" with loader":""}`)},X9e=i=>OA[i].loader,U1t=(i,a,{depth:f=2,clobber:p=!1}={})=>{const v={depth:f,clobber:p};return Array.isArray(a)&&!Array.isArray(i)?(a.forEach(m=>U1t(i,m,v)),i):Array.isArray(a)&&Array.isArray(i)?(a.forEach(m=>{i.includes(m)||i.push(m)}),i):i===void 0||f<=0?i!=null&&typeof i=="object"&&typeof a=="object"?Object.assign(i,a):a:(a!==void 0&&typeof i=="object"&&typeof a=="object"&&Object.keys(a).forEach(m=>{typeof a[m]=="object"&&(i[m]===void 0||typeof i[m]=="object")?(i[m]===void 0&&(i[m]=Array.isArray(a[m])?[]:{}),i[m]=U1t(i[m],a[m],{depth:f-1,clobber:p})):(p||typeof i[m]!="object"&&typeof a[m]!="object")&&(i[m]=a[m])}),i)},Z1=U1t;var Q9e=typeof global=="object"&&global&&global.Object===Object&&global;const aIt=Q9e;var Z9e=typeof self=="object"&&self&&self.Object===Object&&self,J9e=aIt||Z9e||Function("return this")();const Jw=J9e;var tTe=Jw.Symbol;const Q2=tTe;var oIt=Object.prototype,eTe=oIt.hasOwnProperty,nTe=oIt.toString,HN=Q2?Q2.toStringTag:void 0;function rTe(i){var a=eTe.call(i,HN),f=i[HN];try{i[HN]=void 0;var p=!0}catch{}var v=nTe.call(i);return p&&(a?i[HN]=f:delete i[HN]),v}var iTe=Object.prototype,sTe=iTe.toString;function aTe(i){return sTe.call(i)}var oTe="[object Null]",cTe="[object Undefined]",cIt=Q2?Q2.toStringTag:void 0;function QE(i){return i==null?i===void 0?cTe:oTe:cIt&&cIt in Object(i)?rTe(i):aTe(i)}function Ob(i){var a=typeof i;return i!=null&&(a=="object"||a=="function")}var uTe="[object AsyncFunction]",lTe="[object Function]",hTe="[object GeneratorFunction]",fTe="[object Proxy]";function NA(i){if(!Ob(i))return!1;var a=QE(i);return a==lTe||a==hTe||a==uTe||a==fTe}var dTe=Jw["__core-js_shared__"];const W1t=dTe;var uIt=function(){var i=/[^.]+$/.exec(W1t&&W1t.keys&&W1t.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function gTe(i){return!!uIt&&uIt in i}var pTe=Function.prototype,bTe=pTe.toString;function ZE(i){if(i!=null){try{return bTe.call(i)}catch{}try{return i+""}catch{}}return""}var vTe=/[\\^$.*+?()[\]{}|]/g,wTe=/^\[object .+?Constructor\]$/,mTe=Function.prototype,yTe=Object.prototype,xTe=mTe.toString,kTe=yTe.hasOwnProperty,ETe=RegExp("^"+xTe.call(kTe).replace(vTe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function TTe(i){if(!Ob(i)||gTe(i))return!1;var a=NA(i)?ETe:wTe;return a.test(ZE(i))}function _Te(i,a){return i==null?void 0:i[a]}function JE(i,a){var f=_Te(i,a);return TTe(f)?f:void 0}var CTe=JE(Object,"create");const VN=CTe;function STe(){this.__data__=VN?VN(null):{},this.size=0}function ATe(i){var a=this.has(i)&&delete this.__data__[i];return this.size-=a?1:0,a}var LTe="__lodash_hash_undefined__",MTe=Object.prototype,DTe=MTe.hasOwnProperty;function ITe(i){var a=this.__data__;if(VN){var f=a[i];return f===LTe?void 0:f}return DTe.call(a,i)?a[i]:void 0}var OTe=Object.prototype,NTe=OTe.hasOwnProperty;function PTe(i){var a=this.__data__;return VN?a[i]!==void 0:NTe.call(a,i)}var FTe="__lodash_hash_undefined__";function BTe(i,a){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=VN&&a===void 0?FTe:a,this}function t9(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1}function VTe(i,a){var f=this.__data__,p=fW(f,i);return p<0?(++this.size,f.push([i,a])):f[p][1]=a,this}function y5(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1&&i%1==0&&i<=m_e}function tk(i){return i!=null&&Z1t(i.length)&&!NA(i)}function kIt(i){return l3(i)&&tk(i)}function y_e(){return!1}var EIt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,TIt=EIt&&typeof module=="object"&&module&&!module.nodeType&&module,x_e=TIt&&TIt.exports===EIt,_It=x_e?Jw.Buffer:void 0,k_e=_It?_It.isBuffer:void 0,E_e=k_e||y_e;const RA=E_e;var T_e="[object Object]",__e=Function.prototype,C_e=Object.prototype,CIt=__e.toString,S_e=C_e.hasOwnProperty,A_e=CIt.call(Object);function SIt(i){if(!l3(i)||QE(i)!=T_e)return!1;var a=Q1t(i);if(a===null)return!0;var f=S_e.call(a,"constructor")&&a.constructor;return typeof f=="function"&&f instanceof f&&CIt.call(f)==A_e}var L_e="[object Arguments]",M_e="[object Array]",D_e="[object Boolean]",I_e="[object Date]",O_e="[object Error]",N_e="[object Function]",P_e="[object Map]",F_e="[object Number]",B_e="[object Object]",R_e="[object RegExp]",j_e="[object Set]",$_e="[object String]",z_e="[object WeakMap]",q_e="[object ArrayBuffer]",H_e="[object DataView]",V_e="[object Float32Array]",G_e="[object Float64Array]",U_e="[object Int8Array]",W_e="[object Int16Array]",K_e="[object Int32Array]",Y_e="[object Uint8Array]",X_e="[object Uint8ClampedArray]",Q_e="[object Uint16Array]",Z_e="[object Uint32Array]",kl={};kl[V_e]=kl[G_e]=kl[U_e]=kl[W_e]=kl[K_e]=kl[Y_e]=kl[X_e]=kl[Q_e]=kl[Z_e]=!0,kl[L_e]=kl[M_e]=kl[q_e]=kl[D_e]=kl[H_e]=kl[I_e]=kl[O_e]=kl[N_e]=kl[P_e]=kl[F_e]=kl[B_e]=kl[R_e]=kl[j_e]=kl[$_e]=kl[z_e]=!1;function J_e(i){return l3(i)&&Z1t(i.length)&&!!kl[QE(i)]}function wW(i){return function(a){return i(a)}}var AIt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UN=AIt&&typeof module=="object"&&module&&!module.nodeType&&module,tCe=UN&&UN.exports===AIt,J1t=tCe&&aIt.process,eCe=function(){try{var i=UN&&UN.require&&UN.require("util").types;return i||J1t&&J1t.binding&&J1t.binding("util")}catch{}}();const jA=eCe;var LIt=jA&&jA.isTypedArray,nCe=LIt?wW(LIt):J_e;const mW=nCe;function tdt(i,a){if(!(a==="constructor"&&typeof i[a]=="function")&&a!="__proto__")return i[a]}var rCe=Object.prototype,iCe=rCe.hasOwnProperty;function yW(i,a,f){var p=i[a];(!(iCe.call(i,a)&&PA(p,f))||f===void 0&&!(a in i))&&pW(i,a,f)}function WN(i,a,f,p){var v=!f;f||(f={});for(var m=-1,b=a.length;++m-1&&i%1==0&&i0){if(++a>=mCe)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}var ECe=kCe(wCe);const NIt=ECe;function kW(i,a){return NIt(OIt(i,a,n9),i+"")}function KN(i,a,f){if(!Ob(f))return!1;var p=typeof a;return(p=="number"?tk(f)&&xW(a,f.length):p=="string"&&a in f)?PA(f[a],i):!1}function TCe(i){return kW(function(a,f){var p=-1,v=f.length,m=v>1?f[v-1]:void 0,b=v>2?f[2]:void 0;for(m=i.length>3&&typeof m=="function"?(v--,m):void 0,b&&KN(f[0],f[1],b)&&(m=v<3?void 0:m,v=1),a=Object(a);++pb.args);YN(m),p=Z1(p,[...m])}else p=f.args;if(!p)return;let v=hW(i,a);return["config"].forEach(m=>{p[m]!==void 0&&(v==="flowchart-v2"&&(v="flowchart"),p[v]=p[m],delete p[m])}),p},FIt=function(i,a=null){try{const f=new RegExp(`[%]{2}(?![{]${SCe.source})(?=[}][%]{2}).* -`,"ig");i=i.trim().replace(f,"").replace(/'/gm,'"'),Wt.debug(`Detecting diagram directive${a!==null?" type:"+a:""} based on the text:${i}`);let p;const v=[];for(;(p=lW.exec(i))!==null;)if(p.index===lW.lastIndex&&lW.lastIndex++,p&&!a||a&&p[1]&&p[1].match(a)||a&&p[2]&&p[2].match(a)){const m=p[1]?p[1]:p[2],b=p[3]?p[3].trim():p[4]?JSON.parse(p[4].trim()):null;v.push({type:m,args:b})}return v.length===0&&v.push({type:i,args:null}),v.length===1?v[0]:v}catch(f){return Wt.error(`ERROR: ${f.message} - Unable to parse directive - ${a!==null?" type:"+a:""} based on the text:${i}`),{type:null,args:null}}},LCe=function(i,a){for(const[f,p]of a.entries())if(p.match(i))return f;return-1};function Z2(i,a){if(!i)return a;const f=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return CCe[f]||a}function MCe(i,a){const f=i.trim();if(f)return a.securityLevel!=="loose"?Xx(f):f}const DCe=(i,...a)=>{const f=i.split("."),p=f.length-1,v=f[p];let m=window;for(let b=0;b{f+=TW(m,a),a=m});let p=f/2,v;return a=void 0,i.forEach(m=>{if(a&&!v){const b=TW(m,a);if(b=1&&(v={x:m.x,y:m.y}),E>0&&E<1&&(v={x:(1-E)*a.x+E*m.x,y:(1-E)*a.y+E*m.y})}}a=m}),v}function OCe(i){return i.length===1?i[0]:ICe(i)}const NCe=(i,a,f)=>{let p;Wt.info(`our points ${JSON.stringify(a)}`),a[0]!==f&&(a=a.reverse());let m=25,b;p=void 0,a.forEach(P=>{if(p&&!b){const F=TW(P,p);if(F=1&&(b={x:P.x,y:P.y}),j>0&&j<1&&(b={x:(1-j)*p.x+j*P.x,y:(1-j)*p.y+j*P.y})}}p=P});const E=i?10:5,C=Math.atan2(a[0].y-b.y,a[0].x-b.x),A={x:0,y:0};return A.x=Math.sin(C)*E+(a[0].x+b.x)/2,A.y=-Math.cos(C)*E+(a[0].y+b.y)/2,A};function PCe(i,a,f){let p=JSON.parse(JSON.stringify(f)),v;Wt.info("our points",p),a!=="start_left"&&a!=="start_right"&&(p=p.reverse()),p.forEach(F=>{v=F});let b=25+i,E;v=void 0,p.forEach(F=>{if(v&&!E){const j=TW(F,v);if(j=1&&(E={x:F.x,y:F.y}),R>0&&R<1&&(E={x:(1-R)*v.x+R*F.x,y:(1-R)*v.y+R*F.y})}}v=F});const C=10+i*.5,A=Math.atan2(p[0].y-E.y,p[0].x-E.x),P={x:0,y:0};return P.x=Math.sin(A)*C+(p[0].x+E.x)/2,P.y=-Math.cos(A)*C+(p[0].y+E.y)/2,a==="start_left"&&(P.x=Math.sin(A+Math.PI)*C+(p[0].x+E.x)/2,P.y=-Math.cos(A+Math.PI)*C+(p[0].y+E.y)/2),a==="end_right"&&(P.x=Math.sin(A-Math.PI)*C+(p[0].x+E.x)/2-5,P.y=-Math.cos(A-Math.PI)*C+(p[0].y+E.y)/2-5),a==="end_left"&&(P.x=Math.sin(A)*C+(p[0].x+E.x)/2-5,P.y=-Math.cos(A)*C+(p[0].y+E.y)/2-5),P}function em(i){let a="",f="";for(const p of i)p!==void 0&&(p.startsWith("color:")||p.startsWith("text-align:")?f=f+p+";":a=a+p+";");return{style:a,labelStyle:f}}let BIt=0;const RIt=()=>(BIt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+BIt);function FCe(i){let a="";const f="0123456789abcdef",p=f.length;for(let v=0;vFCe(i.length),BCe=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0}},RCe=function(i,a){const f=a.text.replace(ui.lineBreakRegex," "),[,p]=zA(a.fontSize),v=i.append("text");v.attr("x",a.x),v.attr("y",a.y),v.style("text-anchor",a.anchor),v.style("font-family",a.fontFamily),v.style("font-size",p),v.style("font-weight",a.fontWeight),v.attr("fill",a.fill),a.class!==void 0&&v.attr("class",a.class);const m=v.append("tspan");return m.attr("x",a.x+a.textMargin*2),m.attr("fill",a.fill),m.text(f),v},$It=FA((i,a,f)=>{if(!i||(f=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},f),ui.lineBreakRegex.test(i)))return i;const p=i.split(" "),v=[];let m="";return p.forEach((b,E)=>{const C=h3(`${b} `,f),A=h3(m,f);if(C>a){const{hyphenatedStrings:j,remainingWord:R}=jCe(b,a,"-",f);v.push(m,...j),m=R}else A+C>=a?(v.push(m),m=b):m=[m,b].filter(Boolean).join(" ");E+1===p.length&&v.push(m)}),v.filter(b=>b!=="").join(f.joinWith)},(i,a,f)=>`${i}${a}${f.fontSize}${f.fontWeight}${f.fontFamily}${f.joinWith}`),jCe=FA((i,a,f="-",p)=>{p=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},p);const v=[...i],m=[];let b="";return v.forEach((E,C)=>{const A=`${b}${E}`;if(h3(A,p)>=a){const F=C+1,j=v.length===F,R=`${A}${f}`;m.push(j?A:R),b=""}else b=A}),{hyphenatedStrings:m,remainingWord:b}},(i,a,f="-",p)=>`${i}${a}${f}${p.fontSize}${p.fontWeight}${p.fontFamily}`);function edt(i,a){return a=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},a),ndt(i,a).height}function h3(i,a){return a=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},a),ndt(i,a).width}const ndt=FA((i,a)=>{a=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},a);const{fontSize:f,fontFamily:p,fontWeight:v}=a;if(!i)return{width:0,height:0};const[,m]=zA(f),b=["sans-serif",p],E=i.split(ui.lineBreakRegex),C=[],A=xr("body");if(!A.remove)return{width:0,height:0,lineHeight:0};const P=A.append("svg");for(const j of b){let R=0;const H={width:0,height:0,lineHeight:0};for(const Y of E){const rt=BCe();rt.text=Y||PIt;const J=RCe(P,rt).style("font-size",m).style("font-weight",v).style("font-family",j),it=(J._groups||J)[0][0].getBBox();if(it.width===0&&it.height===0)throw new Error("svg element not in render tree");H.width=Math.round(Math.max(H.width,it.width)),R=Math.round(it.height),H.height+=R,H.lineHeight=Math.round(Math.max(H.lineHeight,R))}C.push(H)}P.remove();const F=isNaN(C[1].height)||isNaN(C[1].width)||isNaN(C[1].lineHeight)||C[0].height>C[1].height&&C[0].width>C[1].width&&C[0].lineHeight>C[1].lineHeight?0:1;return C[F]},(i,a)=>`${i}${a.fontSize}${a.fontWeight}${a.fontFamily}`),$Ce=class{constructor(a,f){this.deterministic=a,this.seed=f,this.count=f?f.length:0}next(){return this.deterministic?this.count++:Date.now()}};let _W;const zCe=function(i){return _W=_W||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),_W.innerHTML=i,unescape(_W.textContent)},YN=i=>{if(Wt.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(a=>YN(a));return}for(const a of Object.keys(i)){if(Wt.debug("Checking key",a),a.startsWith("__")||a.includes("proto")||a.includes("constr")||!K9e.has(a)||i[a]==null){Wt.debug("sanitize deleting key: ",a),delete i[a];continue}if(typeof i[a]=="object"){Wt.debug("sanitizing object",a),YN(i[a]);continue}const f=["themeCSS","fontFamily","altFontFamily"];for(const p of f)a.includes(p)&&(Wt.debug("sanitizing css option",a),i[a]=zIt(i[a]))}if(i.themeVariables)for(const a of Object.keys(i.themeVariables)){const f=i.themeVariables[a];f!=null&&f.match&&!f.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[a]="")}Wt.debug("After sanitization",i)}},zIt=i=>{let a=0,f=0;for(const p of i){if(a{if(!p)return;const v=i.node().getBBox();i.append("text").text(p).attr("x",v.x+v.width/2).attr("y",-f).attr("class",a)},zA=i=>{if(typeof i=="number")return[i,i+"px"];const a=parseInt(i,10);return Number.isNaN(a)?[void 0,void 0]:i===String(a)?[a,i+"px"]:[a,i]};function HIt(i,a){return EW({},i,a)}const to={assignWithDepth:Z1,wrapLabel:$It,calculateTextHeight:edt,calculateTextWidth:h3,calculateTextDimensions:ndt,cleanAndMerge:HIt,detectInit:ACe,detectDirective:FIt,isSubstringInArray:LCe,interpolateToCurve:Z2,calcLabelPosition:OCe,calcCardinalityPosition:NCe,calcTerminalLabelPosition:PCe,formatUrl:MCe,getStylesFromArray:em,generateId:RIt,random:jIt,runFunc:DCe,entityDecode:zCe,initIdGenerator:$Ce,sanitizeDirective:YN,sanitizeCss:zIt,insertTitle:qCe,parseFontSize:zA};var VIt="comm",GIt="rule",UIt="decl",HCe="@import",VCe="@keyframes",GCe=Math.abs,rdt=String.fromCharCode;function WIt(i){return i.trim()}function idt(i,a,f){return i.replace(a,f)}function UCe(i,a){return i.indexOf(a)}function XN(i,a){return i.charCodeAt(a)|0}function QN(i,a,f){return i.slice(a,f)}function ek(i){return i.length}function KIt(i){return i.length}function CW(i,a){return a.push(i),i}var SW=1,qA=1,YIt=0,J2=0,Nf=0,HA="";function sdt(i,a,f,p,v,m,b){return{value:i,root:a,parent:f,type:p,props:v,children:m,line:SW,column:qA,length:b,return:""}}function WCe(){return Nf}function KCe(){return Nf=J2>0?XN(HA,--J2):0,qA--,Nf===10&&(qA=1,SW--),Nf}function nm(){return Nf=J22||adt(Nf)>3?"":" "}function ZCe(i,a){for(;--a&&nm()&&!(Nf<48||Nf>102||Nf>57&&Nf<65||Nf>70&&Nf<97););return LW(i,AW()+(a<6&&r9()==32&&nm()==32))}function cdt(i){for(;nm();)switch(Nf){case i:return J2;case 34:case 39:i!==34&&i!==39&&cdt(Nf);break;case 40:i===41&&cdt(i);break;case 92:nm();break}return J2}function JCe(i,a){for(;nm()&&i+Nf!==47+10;)if(i+Nf===42+42&&r9()===47)break;return"/*"+LW(a,J2-1)+"*"+rdt(i===47?i:nm())}function tSe(i){for(;!adt(r9());)nm();return LW(i,J2)}function eSe(i){return XCe(MW("",null,null,null,[""],i=YCe(i),0,[0],i))}function MW(i,a,f,p,v,m,b,E,C){for(var A=0,P=0,F=b,j=0,R=0,H=0,Y=1,rt=1,J=1,it=0,ft="",Tt=v,kt=m,mt=p,ct=ft;rt;)switch(H=it,it=nm()){case 40:if(H!=108&&XN(ct,F-1)==58){UCe(ct+=idt(odt(it),"&","&\f"),"&\f")!=-1&&(J=-1);break}case 34:case 39:case 91:ct+=odt(it);break;case 9:case 10:case 13:case 32:ct+=QCe(H);break;case 92:ct+=ZCe(AW()-1,7);continue;case 47:switch(r9()){case 42:case 47:CW(nSe(JCe(nm(),AW()),a,f),C);break;default:ct+="/"}break;case 123*Y:E[A++]=ek(ct)*J;case 125*Y:case 59:case 0:switch(it){case 0:case 125:rt=0;case 59+P:R>0&&ek(ct)-F&&CW(R>32?QIt(ct+";",p,f,F-1):QIt(idt(ct," ","")+";",p,f,F-2),C);break;case 59:ct+=";";default:if(CW(mt=XIt(ct,a,f,A,P,v,E,ft,Tt=[],kt=[],F),m),it===123)if(P===0)MW(ct,a,mt,mt,Tt,m,F,E,kt);else switch(j===99&&XN(ct,3)===110?100:j){case 100:case 109:case 115:MW(i,mt,mt,p&&CW(XIt(i,mt,mt,0,0,v,E,ft,v,Tt=[],F),kt),v,kt,F,E,p?Tt:kt);break;default:MW(ct,mt,mt,mt,[""],kt,0,E,kt)}}A=P=R=0,Y=J=1,ft=ct="",F=b;break;case 58:F=1+ek(ct),R=H;default:if(Y<1){if(it==123)--Y;else if(it==125&&Y++==0&&KCe()==125)continue}switch(ct+=rdt(it),it*Y){case 38:J=P>0?1:(ct+="\f",-1);break;case 44:E[A++]=(ek(ct)-1)*J,J=1;break;case 64:r9()===45&&(ct+=odt(nm())),j=r9(),P=F=ek(ft=ct+=tSe(AW())),it++;break;case 45:H===45&&ek(ct)==2&&(Y=0)}}return m}function XIt(i,a,f,p,v,m,b,E,C,A,P){for(var F=v-1,j=v===0?m:[""],R=KIt(j),H=0,Y=0,rt=0;H0?j[J]+" "+it:idt(it,/&\f/g,j[J])))&&(C[rt++]=ft);return sdt(i,a,f,v===0?GIt:E,C,A,P)}function nSe(i,a,f){return sdt(i,a,f,VIt,rdt(WCe()),QN(i,2,-2),0)}function QIt(i,a,f,p){return sdt(i,a,f,UIt,QN(i,0,p),QN(i,p+1,-1),p)}function udt(i,a){for(var f="",p=KIt(i),v=0;v{let f=Z1({},i),p={};for(const v of a)nOt(v),p=Z1(p,v);if(f=Z1(f,p),p.theme&&p.theme in m5){const v=Z1({},JIt),m=Z1(v.themeVariables||{},p.themeVariables);f.theme&&f.theme in m5&&(f.themeVariables=m5[f.theme].getThemeVariables(m))}return ZN=f,iOt(ZN),ZN},iSe=i=>(lp=Z1({},i9),lp=Z1(lp,i),i.theme&&m5[i.theme]&&(lp.themeVariables=m5[i.theme].getThemeVariables(i.themeVariables)),DW(lp,VA),lp),sSe=i=>{JIt=Z1({},i)},aSe=i=>(lp=Z1(lp,i),DW(lp,VA),lp),tOt=()=>Z1({},lp),eOt=i=>(iOt(i),Z1(ZN,i),De()),De=()=>Z1({},ZN),nOt=i=>{i&&(["secure",...lp.secure??[]].forEach(a=>{Object.hasOwn(i,a)&&(Wt.debug(`Denied attempt to modify a secure key ${a}`,i[a]),delete i[a])}),Object.keys(i).forEach(a=>{a.startsWith("__")&&delete i[a]}),Object.keys(i).forEach(a=>{typeof i[a]=="string"&&(i[a].includes("<")||i[a].includes(">")||i[a].includes("url(data:"))&&delete i[a],typeof i[a]=="object"&&nOt(i[a])}))},IW=i=>{YN(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),VA.push(i),DW(lp,VA)},OW=(i=lp)=>{VA=[],DW(i,VA)},oSe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},rOt={},cSe=i=>{rOt[i]||(Wt.warn(oSe[i]),rOt[i]=!0)},iOt=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&cSe("LAZY_LOAD_DEPRECATED")},sOt="c4",uSe={id:sOt,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>EDe);return{id:sOt,diagram:i}}},aOt="flowchart",lSe={id:aOt,detector:(i,a)=>{var f,p;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-wrapper"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>A$e);return{id:aOt,diagram:i}}},oOt="flowchart-v2",hSe={id:oOt,detector:(i,a)=>{var f,p,v;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-d3"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((v=a==null?void 0:a.flowchart)==null?void 0:v.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>L$e);return{id:oOt,diagram:i}}},cOt="er",fSe={id:cOt,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>nze);return{id:cOt,diagram:i}}},uOt="gitGraph",dSe={id:uOt,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Aze);return{id:uOt,diagram:i}}},lOt="gantt",gSe={id:lOt,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>wqe);return{id:lOt,diagram:i}}},hOt="info",pSe={id:hOt,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>yqe);return{id:hOt,diagram:i}}},fOt="pie",bSe={id:fOt,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Cqe);return{id:fOt,diagram:i}}},dOt="quadrantChart",vSe={id:dOt,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>qqe);return{id:dOt,diagram:i}}},gOt="requirement",wSe={id:gOt,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Zqe);return{id:gOt,diagram:i}}},pOt="sequence",mSe={id:pOt,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>sVe);return{id:pOt,diagram:i}}},bOt="class",ySe={id:bOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>SVe);return{id:bOt,diagram:i}}},vOt="classDiagram",xSe={id:vOt,detector:(i,a)=>{var f;return/^\s*classDiagram/.test(i)&&((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>OVe);return{id:vOt,diagram:i}}},wOt="state",kSe={id:wOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>xGe);return{id:wOt,diagram:i}}},mOt="stateDiagram",ESe={id:mOt,detector:(i,a)=>{var f;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>$Ge);return{id:mOt,diagram:i}}},yOt="journey",TSe={id:yOt,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aUe);return{id:yOt,diagram:i}}},ldt=i=>{var v;const{securityLevel:a}=De();let f=xr("body");if(a==="sandbox"){const b=((v=xr(`#i${i}`).node())==null?void 0:v.contentDocument)??document;f=xr(b.body)}return f.select(`#${i}`)},_Se=function(i,a){for(let f of a)i.attr(f[0],f[1])},CSe=function(i,a,f){let p=new Map;return f?(p.set("width","100%"),p.set("style",`max-width: ${a}px;`)):(p.set("height",i),p.set("width",a)),p},og=function(i,a,f,p){const v=CSe(a,f,p);_Se(i,v)},s9=function(i,a,f,p){const v=a.node().getBBox(),m=v.width,b=v.height;Wt.info(`SVG bounds: ${m}x${b}`,v);let E=0,C=0;Wt.info(`Graph bounds: ${E}x${C}`,i),E=m+f*2,C=b+f*2,Wt.info(`Calculated bounds: ${E}x${C}`),og(a,C,E,p);const A=`${v.x-f} ${v.y-f} ${v.width+2*f} ${v.height+2*f}`;a.attr("viewBox",A)},xOt={draw:(i,a,f)=>{Wt.debug(`renering svg for syntax error -`);const p=ldt(a);p.attr("viewBox","0 0 2412 512"),og(p,100,512,!0);const v=p.append("g");v.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),v.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),v.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),v.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),v.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),v.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),v.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),v.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${f}`)}},SSe=xOt,ASe={db:{},renderer:xOt,parser:{parser:{yy:{}},parse:()=>{}}},kOt="flowchart-elk",LSe={id:kOt,detector:(i,a)=>{var f;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kUe);return{id:kOt,diagram:i}}},EOt="timeline",MSe={id:EOt,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zUe);return{id:EOt,diagram:i}}},TOt="mindmap",DSe={id:TOt,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>vWe);return{id:TOt,diagram:i}}},_Ot="sankey",ISe={id:_Ot,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>WWe);return{id:_Ot,diagram:i}}},NW={},OSe=(i,a,f)=>{let p="";return i in NW&&NW[i]?p=NW[i](f):Wt.warn(`No theme found for ${i}`),` & { +`)})}p[0]=p[0].replace(/^\r?\n/,"");var b=p[0];return a.forEach(function(E,_){var L=b.match(/(?:^|\n)( *)$/),N=L?L[1]:"",B=E;typeof E=="string"&&E.includes(` +`)&&(B=String(E).split(` +`).map(function(j,R){return R===0?j:""+N+j}).join(` +`)),b+=B+p[_+1]}),b}var d0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function B7(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var ILt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f=1e3,p=6e4,v=36e5,m="millisecond",b="second",E="minute",_="hour",L="day",N="week",B="month",j="quarter",R="year",z="date",K="Invalid Date",it=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,st=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,ut={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(nt){var Ot=["th","st","nd","rd"],Nt=nt%100;return"["+nt+(Ot[(Nt-20)%10]||Ot[Nt]||Ot[0])+"]"}},bt=function(nt,Ot,Nt){var qt=String(nt);return!qt||qt.length>=Ot?nt:""+Array(Ot+1-qt.length).join(Nt)+nt},mt={s:bt,z:function(nt){var Ot=-nt.utcOffset(),Nt=Math.abs(Ot),qt=Math.floor(Nt/60),Ct=Nt%60;return(Ot<=0?"+":"-")+bt(qt,2,"0")+":"+bt(Ct,2,"0")},m:function nt(Ot,Nt){if(Ot.date()1)return nt(Tt[0])}else{var Ht=Ot.name;dt[Ht]=Ot,Ct=Ht}return!qt&&Ct&&(yt=Ct),Ct||!qt&&yt},X=function(nt,Ot){if(ht(nt))return nt.clone();var Nt=typeof Ot=="object"?Ot:{};return Nt.date=nt,Nt.args=arguments,new U(Nt)},pt=mt;pt.l=wt,pt.i=ht,pt.w=function(nt,Ot){return X(nt,{locale:Ot.$L,utc:Ot.$u,x:Ot.$x,$offset:Ot.$offset})};var U=function(){function nt(Nt){this.$L=wt(Nt.locale,null,!0),this.parse(Nt)}var Ot=nt.prototype;return Ot.parse=function(Nt){this.$d=function(qt){var Ct=qt.date,Z=qt.utc;if(Ct===null)return new Date(NaN);if(pt.u(Ct))return new Date;if(Ct instanceof Date)return new Date(Ct);if(typeof Ct=="string"&&!/Z$/i.test(Ct)){var Tt=Ct.match(it);if(Tt){var Ht=Tt[2]-1||0,It=(Tt[7]||"0").substring(0,3);return Z?new Date(Date.UTC(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)):new Date(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)}}return new Date(Ct)}(Nt),this.$x=Nt.x||{},this.init()},Ot.init=function(){var Nt=this.$d;this.$y=Nt.getFullYear(),this.$M=Nt.getMonth(),this.$D=Nt.getDate(),this.$W=Nt.getDay(),this.$H=Nt.getHours(),this.$m=Nt.getMinutes(),this.$s=Nt.getSeconds(),this.$ms=Nt.getMilliseconds()},Ot.$utils=function(){return pt},Ot.isValid=function(){return this.$d.toString()!==K},Ot.isSame=function(Nt,qt){var Ct=X(Nt);return this.startOf(qt)<=Ct&&Ct<=this.endOf(qt)},Ot.isAfter=function(Nt,qt){return X(Nt){},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},jft=function(i="fatal"){let a=d5.fatal;typeof i=="string"?(i=i.toLowerCase(),i in d5&&(a=d5[i])):typeof i=="number"&&(a=i),Ut.trace=()=>{},Ut.debug=()=>{},Ut.info=()=>{},Ut.warn=()=>{},Ut.error=()=>{},Ut.fatal=()=>{},a<=d5.fatal&&(Ut.fatal=console.error?console.error.bind(console,W2("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",W2("FATAL"))),a<=d5.error&&(Ut.error=console.error?console.error.bind(console,W2("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",W2("ERROR"))),a<=d5.warn&&(Ut.warn=console.warn?console.warn.bind(console,W2("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",W2("WARN"))),a<=d5.info&&(Ut.info=console.info?console.info.bind(console,W2("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",W2("INFO"))),a<=d5.debug&&(Ut.debug=console.debug?console.debug.bind(console,W2("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",W2("DEBUG"))),a<=d5.trace&&(Ut.trace=console.debug?console.debug.bind(console,W2("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",W2("TRACE")))},W2=i=>`%c${g0().format("ss.SSS")} : ${i} : `;var $ft={};Object.defineProperty($ft,"__esModule",{value:!0});var Q6=$ft.sanitizeUrl=void 0,V5e=/^([^\w]*)(javascript|data|vbscript)/im,U5e=/&#(\w+)(^\w|;)?/g,W5e=/&(newline|tab);/gi,K5e=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,Y5e=/^.+(:|:)/gim,X5e=[".","/"];function Q5e(i){return X5e.indexOf(i[0])>-1}function Z5e(i){return i.replace(U5e,function(a,f){return String.fromCharCode(f)})}function J5e(i){var a=Z5e(i||"").replace(W5e,"").replace(K5e,"").trim();if(!a)return"about:blank";if(Q5e(a))return a;var f=a.match(Y5e);if(!f)return a;var p=f[0];return V5e.test(p)?"about:blank":a}Q6=$ft.sanitizeUrl=J5e;function fU(i,a){return i==null||a==null?NaN:ia?1:i>=a?0:NaN}function txe(i,a){return i==null||a==null?NaN:ai?1:a>=i?0:NaN}function zft(i){let a,f,p;i.length!==2?(a=fU,f=(E,_)=>fU(i(E),_),p=(E,_)=>i(E)-_):(a=i===fU||i===txe?i:exe,f=i,p=i);function v(E,_,L=0,N=E.length){if(L>>1;f(E[B],_)<0?L=B+1:N=B}while(L>>1;f(E[B],_)<=0?L=B+1:N=B}while(LL&&p(E[B-1],_)>-p(E[B],_)?B-1:B}return{left:v,center:b,right:m}}function exe(){return 0}function nxe(i){return i===null?NaN:+i}const rxe=zft(fU).right;zft(nxe).center;const ixe=rxe;class DLt extends Map{constructor(a,f=oxe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:f}}),a!=null)for(const[p,v]of a)this.set(p,v)}get(a){return super.get(OLt(this,a))}has(a){return super.has(OLt(this,a))}set(a,f){return super.set(sxe(this,a),f)}delete(a){return super.delete(axe(this,a))}}function OLt({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):f}function sxe({_intern:i,_key:a},f){const p=a(f);return i.has(p)?i.get(p):(i.set(p,f),f)}function axe({_intern:i,_key:a},f){const p=a(f);return i.has(p)&&(f=i.get(p),i.delete(p)),f}function oxe(i){return i!==null&&typeof i=="object"?i.valueOf():i}var qft=Math.sqrt(50),Hft=Math.sqrt(10),Gft=Math.sqrt(2);function cxe(i,a,f){var p,v=-1,m,b,E;if(a=+a,i=+i,f=+f,i===a&&f>0)return[i];if((p=a0){let _=Math.round(i/E),L=Math.round(a/E);for(_*Ea&&--L,b=new Array(m=L-_+1);++va&&--L,b=new Array(m=L-_+1);++v=0?(m>=qft?10:m>=Hft?5:m>=Gft?2:1)*Math.pow(10,v):-Math.pow(10,-v)/(m>=qft?10:m>=Hft?5:m>=Gft?2:1)}function Vft(i,a,f){var p=Math.abs(a-i)/Math.max(0,f),v=Math.pow(10,Math.floor(Math.log(p)/Math.LN10)),m=p/v;return m>=qft?v*=10:m>=Hft?v*=5:m>=Gft&&(v*=2),a=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f=v)&&(f=v)}return f}function lxe(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function hxe(i){return i}var dU=1,Uft=2,Wft=3,gU=4,PLt=1e-6;function fxe(i){return"translate("+i+",0)"}function dxe(i){return"translate(0,"+i+")"}function gxe(i){return a=>+i(a)}function pxe(i,a){return a=Math.max(0,i.bandwidth()-a*2)/2,i.round()&&(a=Math.round(a)),f=>+i(f)+a}function bxe(){return!this.__axis}function FLt(i,a){var f=[],p=null,v=null,m=6,b=6,E=3,_=typeof window<"u"&&window.devicePixelRatio>1?0:.5,L=i===dU||i===gU?-1:1,N=i===gU||i===Uft?"x":"y",B=i===dU||i===Wft?fxe:dxe;function j(R){var z=p??(a.ticks?a.ticks.apply(a,f):a.domain()),K=v??(a.tickFormat?a.tickFormat.apply(a,f):hxe),it=Math.max(m,0)+E,st=a.range(),ut=+st[0]+_,bt=+st[st.length-1]+_,mt=(a.bandwidth?pxe:gxe)(a.copy(),_),yt=R.selection?R.selection():R,dt=yt.selectAll(".domain").data([null]),ht=yt.selectAll(".tick").data(z,a).order(),wt=ht.exit(),X=ht.enter().append("g").attr("class","tick"),pt=ht.select("line"),U=ht.select("text");dt=dt.merge(dt.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),ht=ht.merge(X),pt=pt.merge(X.append("line").attr("stroke","currentColor").attr(N+"2",L*m)),U=U.merge(X.append("text").attr("fill","currentColor").attr(N,L*it).attr("dy",i===dU?"0em":i===Wft?"0.71em":"0.32em")),R!==yt&&(dt=dt.transition(R),ht=ht.transition(R),pt=pt.transition(R),U=U.transition(R),wt=wt.transition(R).attr("opacity",PLt).attr("transform",function(xt){return isFinite(xt=mt(xt))?B(xt+_):this.getAttribute("transform")}),X.attr("opacity",PLt).attr("transform",function(xt){var nt=this.parentNode.__axis;return B((nt&&isFinite(nt=nt(xt))?nt:mt(xt))+_)})),wt.remove(),dt.attr("d",i===gU||i===Uft?b?"M"+L*b+","+ut+"H"+_+"V"+bt+"H"+L*b:"M"+_+","+ut+"V"+bt:b?"M"+ut+","+L*b+"V"+_+"H"+bt+"V"+L*b:"M"+ut+","+_+"H"+bt),ht.attr("opacity",1).attr("transform",function(xt){return B(mt(xt)+_)}),pt.attr(N+"2",L*m),U.attr(N,L*it).text(K),yt.filter(bxe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===Uft?"start":i===gU?"end":"middle"),yt.each(function(){this.__axis=mt})}return j.scale=function(R){return arguments.length?(a=R,j):a},j.ticks=function(){return f=Array.from(arguments),j},j.tickArguments=function(R){return arguments.length?(f=R==null?[]:Array.from(R),j):f.slice()},j.tickValues=function(R){return arguments.length?(p=R==null?null:Array.from(R),j):p&&p.slice()},j.tickFormat=function(R){return arguments.length?(v=R,j):v},j.tickSize=function(R){return arguments.length?(m=b=+R,j):m},j.tickSizeInner=function(R){return arguments.length?(m=+R,j):m},j.tickSizeOuter=function(R){return arguments.length?(b=+R,j):b},j.tickPadding=function(R){return arguments.length?(E=+R,j):E},j.offset=function(R){return arguments.length?(_=+R,j):_},j}function vxe(i){return FLt(dU,i)}function wxe(i){return FLt(Wft,i)}var mxe={value:()=>{}};function BLt(){for(var i=0,a=arguments.length,f={},p;i=0&&(p=f.slice(v+1),f=f.slice(0,v)),f&&!a.hasOwnProperty(f))throw new Error("unknown type: "+f);return{type:f,name:p}})}pU.prototype=BLt.prototype={constructor:pU,on:function(i,a){var f=this._,p=yxe(i+"",f),v,m=-1,b=p.length;if(arguments.length<2){for(;++m0)for(var f=new Array(v),p=0,v,m;p=0&&(a=i.slice(0,f))!=="xmlns"&&(i=i.slice(f+1)),jLt.hasOwnProperty(a)?{space:jLt[a],local:i}:i}function kxe(i){return function(){var a=this.ownerDocument,f=this.namespaceURI;return f===Kft&&a.documentElement.namespaceURI===Kft?a.createElement(i):a.createElementNS(f,i)}}function Exe(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function $Lt(i){var a=bU(i);return(a.local?Exe:kxe)(a)}function Txe(){}function Yft(i){return i==null?Txe:function(){return this.querySelector(i)}}function Cxe(i){typeof i!="function"&&(i=Yft(i));for(var a=this._groups,f=a.length,p=new Array(f),v=0;v=bt&&(bt=ut+1);!(yt=it[bt])&&++bt=0;)(b=p[v])&&(m&&b.compareDocumentPosition(m)^4&&m.parentNode.insertBefore(b,m),m=b);return this}function Yxe(i){i||(i=Xxe);function a(B,j){return B&&j?i(B.__data__,j.__data__):!B-!j}for(var f=this._groups,p=f.length,v=new Array(p),m=0;ma?1:i>=a?0:NaN}function Qxe(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function Zxe(){return Array.from(this)}function Jxe(){for(var i=this._groups,a=0,f=i.length;a1?this.each((a==null?l6e:typeof a=="function"?f6e:h6e)(i,a,f??"")):mA(this.node(),i)}function mA(i,a){return i.style.getPropertyValue(a)||ULt(i).getComputedStyle(i,null).getPropertyValue(a)}function g6e(i){return function(){delete this[i]}}function p6e(i,a){return function(){this[i]=a}}function b6e(i,a){return function(){var f=a.apply(this,arguments);f==null?delete this[i]:this[i]=f}}function v6e(i,a){return arguments.length>1?this.each((a==null?g6e:typeof a=="function"?b6e:p6e)(i,a)):this.node()[i]}function WLt(i){return i.trim().split(/^|\s+/)}function Xft(i){return i.classList||new KLt(i)}function KLt(i){this._node=i,this._names=WLt(i.getAttribute("class")||"")}KLt.prototype={add:function(i){var a=this._names.indexOf(i);a<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var a=this._names.indexOf(i);a>=0&&(this._names.splice(a,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function YLt(i,a){for(var f=Xft(i),p=-1,v=a.length;++p=0&&(f=a.slice(p+1),a=a.slice(0,p)),{type:a,name:f}})}function V6e(i){return function(){var a=this.__on;if(a){for(var f=0,p=-1,v=a.length,m;f>8&15|a>>4&240,a>>4&15|a&240,(a&15)<<4|a&15,1):f===8?yU(a>>24&255,a>>16&255,a>>8&255,(a&255)/255):f===4?yU(a>>12&15|a>>8&240,a>>8&15|a>>4&240,a>>4&15|a&240,((a&15)<<4|a&15)/255):null):(a=tke.exec(i))?new p0(a[1],a[2],a[3],1):(a=eke.exec(i))?new p0(a[1]*255/100,a[2]*255/100,a[3]*255/100,1):(a=nke.exec(i))?yU(a[1],a[2],a[3],a[4]):(a=rke.exec(i))?yU(a[1]*255/100,a[2]*255/100,a[3]*255/100,a[4]):(a=ike.exec(i))?aMt(a[1],a[2]/100,a[3]/100,1):(a=ske.exec(i))?aMt(a[1],a[2]/100,a[3]/100,a[4]):JLt.hasOwnProperty(i)?nMt(JLt[i]):i==="transparent"?new p0(NaN,NaN,NaN,0):null}function nMt(i){return new p0(i>>16&255,i>>8&255,i&255,1)}function yU(i,a,f,p){return p<=0&&(i=a=f=NaN),new p0(i,a,f,p)}function rMt(i){return i instanceof R7||(i=j7(i)),i?(i=i.rgb(),new p0(i.r,i.g,i.b,i.opacity)):new p0}function Zft(i,a,f,p){return arguments.length===1?rMt(i):new p0(i,a,f,p??1)}function p0(i,a,f,p){this.r=+i,this.g=+a,this.b=+f,this.opacity=+p}xN(p0,Zft,wU(R7,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new p0(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new p0(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new p0($7(this.r),$7(this.g),$7(this.b),xU(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:iMt,formatHex:iMt,formatHex8:cke,formatRgb:sMt,toString:sMt}));function iMt(){return`#${z7(this.r)}${z7(this.g)}${z7(this.b)}`}function cke(){return`#${z7(this.r)}${z7(this.g)}${z7(this.b)}${z7((isNaN(this.opacity)?1:this.opacity)*255)}`}function sMt(){const i=xU(this.opacity);return`${i===1?"rgb(":"rgba("}${$7(this.r)}, ${$7(this.g)}, ${$7(this.b)}${i===1?")":`, ${i})`}`}function xU(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function $7(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function z7(i){return i=$7(i),(i<16?"0":"")+i.toString(16)}function aMt(i,a,f,p){return p<=0?i=a=f=NaN:f<=0||f>=1?i=a=NaN:a<=0&&(i=NaN),new Ww(i,a,f,p)}function oMt(i){if(i instanceof Ww)return new Ww(i.h,i.s,i.l,i.opacity);if(i instanceof R7||(i=j7(i)),!i)return new Ww;if(i instanceof Ww)return i;i=i.rgb();var a=i.r/255,f=i.g/255,p=i.b/255,v=Math.min(a,f,p),m=Math.max(a,f,p),b=NaN,E=m-v,_=(m+v)/2;return E?(a===m?b=(f-p)/E+(f0&&_<1?0:b,new Ww(b,E,_,i.opacity)}function uke(i,a,f,p){return arguments.length===1?oMt(i):new Ww(i,a,f,p??1)}function Ww(i,a,f,p){this.h=+i,this.s=+a,this.l=+f,this.opacity=+p}xN(Ww,uke,wU(R7,{brighter(i){return i=i==null?mU:Math.pow(mU,i),new Ww(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?kN:Math.pow(kN,i),new Ww(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,a=isNaN(i)||isNaN(this.s)?0:this.s,f=this.l,p=f+(f<.5?f:1-f)*a,v=2*f-p;return new p0(Jft(i>=240?i-240:i+120,v,p),Jft(i,v,p),Jft(i<120?i+240:i-120,v,p),this.opacity)},clamp(){return new Ww(cMt(this.h),kU(this.s),kU(this.l),xU(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const i=xU(this.opacity);return`${i===1?"hsl(":"hsla("}${cMt(this.h)}, ${kU(this.s)*100}%, ${kU(this.l)*100}%${i===1?")":`, ${i})`}`}}));function cMt(i){return i=(i||0)%360,i<0?i+360:i}function kU(i){return Math.max(0,Math.min(1,i||0))}function Jft(i,a,f){return(i<60?a+(f-a)*i/60:i<180?f:i<240?a+(f-a)*(240-i)/60:a)*255}const lke=Math.PI/180,hke=180/Math.PI,EU=18,uMt=.96422,lMt=1,hMt=.82521,fMt=4/29,xA=6/29,dMt=3*xA*xA,fke=xA*xA*xA;function gMt(i){if(i instanceof a3)return new a3(i.l,i.a,i.b,i.opacity);if(i instanceof g5)return pMt(i);i instanceof p0||(i=rMt(i));var a=r1t(i.r),f=r1t(i.g),p=r1t(i.b),v=t1t((.2225045*a+.7168786*f+.0606169*p)/lMt),m,b;return a===f&&f===p?m=b=v:(m=t1t((.4360747*a+.3850649*f+.1430804*p)/uMt),b=t1t((.0139322*a+.0971045*f+.7141733*p)/hMt)),new a3(116*v-16,500*(m-v),200*(v-b),i.opacity)}function dke(i,a,f,p){return arguments.length===1?gMt(i):new a3(i,a,f,p??1)}function a3(i,a,f,p){this.l=+i,this.a=+a,this.b=+f,this.opacity=+p}xN(a3,dke,wU(R7,{brighter(i){return new a3(this.l+EU*(i??1),this.a,this.b,this.opacity)},darker(i){return new a3(this.l-EU*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,a=isNaN(this.a)?i:i+this.a/500,f=isNaN(this.b)?i:i-this.b/200;return a=uMt*e1t(a),i=lMt*e1t(i),f=hMt*e1t(f),new p0(n1t(3.1338561*a-1.6168667*i-.4906146*f),n1t(-.9787684*a+1.9161415*i+.033454*f),n1t(.0719453*a-.2289914*i+1.4052427*f),this.opacity)}}));function t1t(i){return i>fke?Math.pow(i,1/3):i/dMt+fMt}function e1t(i){return i>xA?i*i*i:dMt*(i-fMt)}function n1t(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function r1t(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function gke(i){if(i instanceof g5)return new g5(i.h,i.c,i.l,i.opacity);if(i instanceof a3||(i=gMt(i)),i.a===0&&i.b===0)return new g5(NaN,0()=>i;function bMt(i,a){return function(f){return i+f*a}}function pke(i,a,f){return i=Math.pow(i,f),a=Math.pow(a,f)-i,f=1/f,function(p){return Math.pow(i+p*a,f)}}function bke(i,a){var f=a-i;return f?bMt(i,f>180||f<-180?f-360*Math.round(f/360):f):TU(isNaN(i)?a:i)}function vke(i){return(i=+i)==1?TN:function(a,f){return f-a?pke(a,f,i):TU(isNaN(a)?f:a)}}function TN(i,a){var f=a-i;return f?bMt(i,f):TU(isNaN(i)?a:i)}const CU=function i(a){var f=vke(a);function p(v,m){var b=f((v=Zft(v)).r,(m=Zft(m)).r),E=f(v.g,m.g),_=f(v.b,m.b),L=TN(v.opacity,m.opacity);return function(N){return v.r=b(N),v.g=E(N),v.b=_(N),v.opacity=L(N),v+""}}return p.gamma=i,p}(1);function wke(i,a){a||(a=[]);var f=i?Math.min(a.length,i.length):0,p=a.slice(),v;return function(m){for(v=0;vf&&(m=a.slice(f,m),E[b]?E[b]+=m:E[++b]=m),(p=p[0])===(v=v[0])?E[b]?E[b]+=v:E[++b]=v:(E[++b]=null,_.push({i:b,x:Kw(p,v)})),f=a1t.lastIndex;return f180?N+=360:N-L>180&&(L+=360),j.push({i:B.push(v(B)+"rotate(",null,p)-2,x:Kw(L,N)})):N&&B.push(v(B)+"rotate("+N+p)}function E(L,N,B,j){L!==N?j.push({i:B.push(v(B)+"skewX(",null,p)-2,x:Kw(L,N)}):N&&B.push(v(B)+"skewX("+N+p)}function _(L,N,B,j,R,z){if(L!==B||N!==j){var K=R.push(v(R)+"scale(",null,",",null,")");z.push({i:K-4,x:Kw(L,B)},{i:K-2,x:Kw(N,j)})}else(B!==1||j!==1)&&R.push(v(R)+"scale("+B+","+j+")")}return function(L,N){var B=[],j=[];return L=i(L),N=i(N),m(L.translateX,L.translateY,N.translateX,N.translateY,B,j),b(L.rotate,N.rotate,B,j),E(L.skewX,N.skewX,B,j),_(L.scaleX,L.scaleY,N.scaleX,N.scaleY,B,j),L=N=null,function(R){for(var z=-1,K=j.length,it;++z=0&&i._call.call(void 0,a),i=i._next;--kA}function TMt(){q7=(AU=AN.now())+LU,kA=CN=0;try{Oke()}finally{kA=0,Pke(),q7=0}}function Nke(){var i=AN.now(),a=i-AU;a>xMt&&(LU-=a,AU=i)}function Pke(){for(var i,a=SU,f,p=1/0;a;)a._call?(p>a._time&&(p=a._time),i=a,a=a._next):(f=a._next,a._next=null,a=i?i._next=f:SU=f);SN=i,l1t(p)}function l1t(i){if(!kA){CN&&(CN=clearTimeout(CN));var a=i-q7;a>24?(i<1/0&&(CN=setTimeout(TMt,i-AN.now()-LU)),_N&&(_N=clearInterval(_N))):(_N||(AU=AN.now(),_N=setInterval(Nke,xMt)),kA=1,kMt(TMt))}}function CMt(i,a,f){var p=new MU;return a=a==null?0:+a,p.restart(v=>{p.stop(),i(v+a)},a,f),p}var Fke=BLt("start","end","cancel","interrupt"),Bke=[],_Mt=0,SMt=1,h1t=2,IU=3,AMt=4,f1t=5,DU=6;function OU(i,a,f,p,v,m){var b=i.__transition;if(!b)i.__transition={};else if(f in b)return;Rke(i,f,{name:a,index:p,group:v,on:Fke,tween:Bke,time:m.time,delay:m.delay,duration:m.duration,ease:m.ease,timer:null,state:_Mt})}function d1t(i,a){var f=Yw(i,a);if(f.state>_Mt)throw new Error("too late; already scheduled");return f}function o3(i,a){var f=Yw(i,a);if(f.state>IU)throw new Error("too late; already running");return f}function Yw(i,a){var f=i.__transition;if(!f||!(f=f[a]))throw new Error("transition not found");return f}function Rke(i,a,f){var p=i.__transition,v;p[a]=f,f.timer=EMt(m,0,f.time);function m(L){f.state=SMt,f.timer.restart(b,f.delay,f.time),f.delay<=L&&b(L-f.delay)}function b(L){var N,B,j,R;if(f.state!==SMt)return _();for(N in p)if(R=p[N],R.name===f.name){if(R.state===IU)return CMt(b);R.state===AMt?(R.state=DU,R.timer.stop(),R.on.call("interrupt",i,i.__data__,R.index,R.group),delete p[N]):+Nh1t&&p.state=0&&(a=a.slice(0,f)),!a||a==="start"})}function p8e(i,a,f){var p,v,m=g8e(a)?d1t:o3;return function(){var b=m(this,i),E=b.on;E!==p&&(v=(p=E).copy()).on(a,f),b.on=v}}function b8e(i,a){var f=this._id;return arguments.length<2?Yw(this.node(),f).on.on(i):this.each(p8e(f,i,a))}function v8e(i){return function(){var a=this.parentNode;for(var f in this.__transition)if(+f!==i)return;a&&a.removeChild(this)}}function w8e(){return this.on("end.remove",v8e(this._id))}function m8e(i){var a=this._name,f=this._id;typeof i!="function"&&(i=Yft(i));for(var p=this._groups,v=p.length,m=new Array(v),b=0;bH7)if(!(Math.abs(N*E-_*L)>H7)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,z=E*E+_*_,K=j*j+R*R,it=Math.sqrt(z),st=Math.sqrt(B),ut=v*Math.tan((p1t-Math.acos((z+B-K)/(2*it*st)))/2),bt=ut/st,mt=ut/it;Math.abs(bt-1)>H7&&(this._+="L"+(i+bt*L)+","+(a+bt*N)),this._+="A"+v+","+v+",0,0,"+ +(N*j>L*R)+","+(this._x1=i+mt*E)+","+(this._y1=a+mt*_)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),_=i+b,L=a+E,N=1^m,B=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+_+","+L:(Math.abs(this._x1-_)>H7||Math.abs(this._y1-L)>H7)&&(this._+="L"+_+","+L),f&&(B<0&&(B=B%b1t+b1t),B>G8e?this._+="A"+f+","+f+",0,1,"+N+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+N+","+(this._x1=_)+","+(this._y1=L):B>H7&&(this._+="A"+f+","+f+",0,"+ +(B>=p1t)+","+N+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function V8e(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function U8e(i,a){return fetch(i,a).then(V8e)}function W8e(i){return(a,f)=>U8e(a,f).then(p=>new DOMParser().parseFromString(p,i))}var K8e=W8e("image/svg+xml");function Y8e(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function NU(i,a){if((f=(i=a?i.toExponential(a-1):i.toExponential()).indexOf("e"))<0)return null;var f,p=i.slice(0,f);return[p.length>1?p[0]+p.slice(2):p,+i.slice(f+1)]}function EA(i){return i=NU(Math.abs(i)),i?i[1]:NaN}function X8e(i,a){return function(f,p){for(var v=f.length,m=[],b=0,E=i[0],_=0;v>0&&E>0&&(_+E+1>p&&(E=Math.max(1,p-_)),m.push(f.substring(v-=E,v+E)),!((_+=E+1)>p));)E=i[b=(b+1)%i.length];return m.reverse().join(a)}}function Q8e(i){return function(a){return a.replace(/[0-9]/g,function(f){return i[+f]})}}var Z8e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function PU(i){if(!(a=Z8e.exec(i)))throw new Error("invalid format: "+i);var a;return new m1t({fill:a[1],align:a[2],sign:a[3],symbol:a[4],zero:a[5],width:a[6],comma:a[7],precision:a[8]&&a[8].slice(1),trim:a[9],type:a[10]})}PU.prototype=m1t.prototype;function m1t(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}m1t.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function J8e(i){t:for(var a=i.length,f=1,p=-1,v;f0&&(p=0);break}return p>0?i.slice(0,p)+i.slice(v+1):i}var DMt;function tEe(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1],m=v-(DMt=Math.max(-8,Math.min(8,Math.floor(v/3)))*3)+1,b=p.length;return m===b?p:m>b?p+new Array(m-b+1).join("0"):m>0?p.slice(0,m)+"."+p.slice(m):"0."+new Array(1-m).join("0")+NU(i,Math.max(0,a+m-1))[0]}function OMt(i,a){var f=NU(i,a);if(!f)return i+"";var p=f[0],v=f[1];return v<0?"0."+new Array(-v).join("0")+p:p.length>v+1?p.slice(0,v+1)+"."+p.slice(v+1):p+new Array(v-p.length+2).join("0")}const NMt={"%":(i,a)=>(i*100).toFixed(a),b:i=>Math.round(i).toString(2),c:i=>i+"",d:Y8e,e:(i,a)=>i.toExponential(a),f:(i,a)=>i.toFixed(a),g:(i,a)=>i.toPrecision(a),o:i=>Math.round(i).toString(8),p:(i,a)=>OMt(i*100,a),r:OMt,s:tEe,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function PMt(i){return i}var FMt=Array.prototype.map,BMt=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function eEe(i){var a=i.grouping===void 0||i.thousands===void 0?PMt:X8e(FMt.call(i.grouping,Number),i.thousands+""),f=i.currency===void 0?"":i.currency[0]+"",p=i.currency===void 0?"":i.currency[1]+"",v=i.decimal===void 0?".":i.decimal+"",m=i.numerals===void 0?PMt:Q8e(FMt.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",E=i.minus===void 0?"−":i.minus+"",_=i.nan===void 0?"NaN":i.nan+"";function L(B){B=PU(B);var j=B.fill,R=B.align,z=B.sign,K=B.symbol,it=B.zero,st=B.width,ut=B.comma,bt=B.precision,mt=B.trim,yt=B.type;yt==="n"?(ut=!0,yt="g"):NMt[yt]||(bt===void 0&&(bt=12),mt=!0,yt="g"),(it||j==="0"&&R==="=")&&(it=!0,j="0",R="=");var dt=K==="$"?f:K==="#"&&/[boxX]/.test(yt)?"0"+yt.toLowerCase():"",ht=K==="$"?p:/[%p]/.test(yt)?b:"",wt=NMt[yt],X=/[defgprs%]/.test(yt);bt=bt===void 0?6:/[gprs]/.test(yt)?Math.max(1,Math.min(21,bt)):Math.max(0,Math.min(20,bt));function pt(U){var xt=dt,nt=ht,Ot,Nt,qt;if(yt==="c")nt=wt(U)+nt,U="";else{U=+U;var Ct=U<0||1/U<0;if(U=isNaN(U)?_:wt(Math.abs(U),bt),mt&&(U=J8e(U)),Ct&&+U==0&&z!=="+"&&(Ct=!1),xt=(Ct?z==="("?z:E:z==="-"||z==="("?"":z)+xt,nt=(yt==="s"?BMt[8+DMt/3]:"")+nt+(Ct&&z==="("?")":""),X){for(Ot=-1,Nt=U.length;++Otqt||qt>57){nt=(qt===46?v+U.slice(Ot+1):U.slice(Ot))+nt,U=U.slice(0,Ot);break}}}ut&&!it&&(U=a(U,1/0));var Z=xt.length+U.length+nt.length,Tt=Z>1)+xt+U+nt+Tt.slice(Z);break;default:U=Tt+xt+U+nt;break}return m(U)}return pt.toString=function(){return B+""},pt}function N(B,j){var R=L((B=PU(B),B.type="f",B)),z=Math.max(-8,Math.min(8,Math.floor(EA(j)/3)))*3,K=Math.pow(10,-z),it=BMt[8+z/3];return function(st){return R(K*st)+it}}return{format:L,formatPrefix:N}}var FU,RMt,jMt;nEe({thousands:",",grouping:[3],currency:["$",""]});function nEe(i){return FU=eEe(i),RMt=FU.format,jMt=FU.formatPrefix,FU}function rEe(i){return Math.max(0,-EA(Math.abs(i)))}function iEe(i,a){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(EA(a)/3)))*3-EA(Math.abs(i)))}function sEe(i,a){return i=Math.abs(i),a=Math.abs(a)-i,Math.max(0,EA(a)-EA(i))+1}function y1t(i,a){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(a).domain(i);break}return this}const $Mt=Symbol("implicit");function x1t(){var i=new DLt,a=[],f=[],p=$Mt;function v(m){let b=i.get(m);if(b===void 0){if(p!==$Mt)return p;i.set(m,b=a.push(m)-1)}return f[b%f.length]}return v.domain=function(m){if(!arguments.length)return a.slice();a=[],i=new DLt;for(const b of m)i.has(b)||i.set(b,a.push(b)-1);return v},v.range=function(m){return arguments.length?(f=Array.from(m),v):f.slice()},v.unknown=function(m){return arguments.length?(p=m,v):p},v.copy=function(){return x1t(a,f).unknown(p)},y1t.apply(v,arguments),v}function aEe(i){return function(){return i}}function oEe(i){return+i}var zMt=[0,1];function TA(i){return i}function k1t(i,a){return(a-=i=+i)?function(f){return(f-i)/a}:aEe(isNaN(a)?NaN:.5)}function cEe(i,a){var f;return i>a&&(f=i,i=a,a=f),function(p){return Math.max(i,Math.min(a,p))}}function uEe(i,a,f){var p=i[0],v=i[1],m=a[0],b=a[1];return v2?lEe:uEe,_=L=null,B}function B(j){return j==null||isNaN(j=+j)?m:(_||(_=E(i.map(p),a,f)))(p(b(j)))}return B.invert=function(j){return b(v((L||(L=E(a,i.map(p),Kw)))(j)))},B.domain=function(j){return arguments.length?(i=Array.from(j,oEe),N()):i.slice()},B.range=function(j){return arguments.length?(a=Array.from(j),N()):a.slice()},B.rangeRound=function(j){return a=Array.from(j),f=Cke,N()},B.clamp=function(j){return arguments.length?(b=j?!0:TA,N()):b!==TA},B.interpolate=function(j){return arguments.length?(f=j,N()):f},B.unknown=function(j){return arguments.length?(m=j,B):m},function(j,R){return p=j,v=R,N()}}function HMt(){return hEe()(TA,TA)}function fEe(i,a,f,p){var v=Vft(i,a,f),m;switch(p=PU(p??",f"),p.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(a));return p.precision==null&&!isNaN(m=iEe(v,b))&&(p.precision=m),jMt(p,b)}case"":case"e":case"g":case"p":case"r":{p.precision==null&&!isNaN(m=sEe(v,Math.max(Math.abs(i),Math.abs(a))))&&(p.precision=m-(p.type==="e"));break}case"f":case"%":{p.precision==null&&!isNaN(m=rEe(v))&&(p.precision=m-(p.type==="%")*2);break}}return RMt(p)}function dEe(i){var a=i.domain;return i.ticks=function(f){var p=a();return cxe(p[0],p[p.length-1],f??10)},i.tickFormat=function(f,p){var v=a();return fEe(v[0],v[v.length-1],f??10,p)},i.nice=function(f){f==null&&(f=10);var p=a(),v=0,m=p.length-1,b=p[v],E=p[m],_,L,N=10;for(E0;){if(L=NLt(b,E,f),L===_)return p[v]=b,p[m]=E,a(p);if(L>0)b=Math.floor(b/L)*L,E=Math.ceil(E/L)*L;else if(L<0)b=Math.ceil(b*L)/L,E=Math.floor(E*L)/L;else break;_=L}return i},i}function BU(){var i=HMt();return i.copy=function(){return qMt(i,BU())},y1t.apply(i,arguments),dEe(i)}function gEe(i,a){i=i.slice();var f=0,p=i.length-1,v=i[f],m=i[p],b;return m0))return _;do _.push(L=new Date(+m)),a(m,E),i(m);while(L=b)for(;i(b),!m(b);)b.setTime(b-1)},function(b,E){if(b>=b)if(E<0)for(;++E<=0;)for(;a(b,-1),!m(b););else for(;--E>=0;)for(;a(b,1),!m(b););})},f&&(v.count=function(m,b){return E1t.setTime(+m),T1t.setTime(+b),i(E1t),i(T1t),Math.floor(f(E1t,T1t))},v.every=function(m){return m=Math.floor(m),!isFinite(m)||!(m>0)?null:m>1?v.filter(p?function(b){return p(b)%m===0}:function(b){return v.count(0,b)%m===0}):v}),v}var RU=rg(function(){},function(i,a){i.setTime(+i+a)},function(i,a){return a-i});RU.every=function(i){return i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?rg(function(a){a.setTime(Math.floor(a/i)*i)},function(a,f){a.setTime(+a+f*i)},function(a,f){return(f-a)/i}):RU};const C1t=RU;RU.range;const v5=1e3,c3=v5*60,G7=c3*60,V7=G7*24,_1t=V7*7,GMt=V7*30,S1t=V7*365;var VMt=rg(function(i){i.setTime(i-i.getMilliseconds())},function(i,a){i.setTime(+i+a*v5)},function(i,a){return(a-i)/v5},function(i){return i.getUTCSeconds()});const U7=VMt;VMt.range;var UMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*v5)},function(i,a){i.setTime(+i+a*c3)},function(i,a){return(a-i)/c3},function(i){return i.getMinutes()});const jU=UMt;UMt.range;var WMt=rg(function(i){i.setTime(i-i.getMilliseconds()-i.getSeconds()*v5-i.getMinutes()*c3)},function(i,a){i.setTime(+i+a*G7)},function(i,a){return(a-i)/G7},function(i){return i.getHours()});const $U=WMt;WMt.range;var KMt=rg(i=>i.setHours(0,0,0,0),(i,a)=>i.setDate(i.getDate()+a),(i,a)=>(a-i-(a.getTimezoneOffset()-i.getTimezoneOffset())*c3)/V7,i=>i.getDate()-1);const CA=KMt;KMt.range;function W7(i){return rg(function(a){a.setDate(a.getDate()-(a.getDay()+7-i)%7),a.setHours(0,0,0,0)},function(a,f){a.setDate(a.getDate()+f*7)},function(a,f){return(f-a-(f.getTimezoneOffset()-a.getTimezoneOffset())*c3)/_1t})}var LN=W7(0),MN=W7(1),YMt=W7(2),XMt=W7(3),K7=W7(4),QMt=W7(5),ZMt=W7(6);LN.range,MN.range,YMt.range,XMt.range,K7.range,QMt.range,ZMt.range;var JMt=rg(function(i){i.setDate(1),i.setHours(0,0,0,0)},function(i,a){i.setMonth(i.getMonth()+a)},function(i,a){return a.getMonth()-i.getMonth()+(a.getFullYear()-i.getFullYear())*12},function(i){return i.getMonth()});const zU=JMt;JMt.range;var A1t=rg(function(i){i.setMonth(0,1),i.setHours(0,0,0,0)},function(i,a){i.setFullYear(i.getFullYear()+a)},function(i,a){return a.getFullYear()-i.getFullYear()},function(i){return i.getFullYear()});A1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setFullYear(Math.floor(a.getFullYear()/i)*i),a.setMonth(0,1),a.setHours(0,0,0,0)},function(a,f){a.setFullYear(a.getFullYear()+f*i)})};const Y7=A1t;A1t.range;var tIt=rg(function(i){i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCDate(i.getUTCDate()+a)},function(i,a){return(a-i)/V7},function(i){return i.getUTCDate()-1});const eIt=tIt;tIt.range;function X7(i){return rg(function(a){a.setUTCDate(a.getUTCDate()-(a.getUTCDay()+7-i)%7),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCDate(a.getUTCDate()+f*7)},function(a,f){return(f-a)/_1t})}var nIt=X7(0),qU=X7(1),pEe=X7(2),bEe=X7(3),_A=X7(4),vEe=X7(5),wEe=X7(6);nIt.range,qU.range,pEe.range,bEe.range,_A.range,vEe.range,wEe.range;var L1t=rg(function(i){i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},function(i,a){i.setUTCFullYear(i.getUTCFullYear()+a)},function(i,a){return a.getUTCFullYear()-i.getUTCFullYear()},function(i){return i.getUTCFullYear()});L1t.every=function(i){return!isFinite(i=Math.floor(i))||!(i>0)?null:rg(function(a){a.setUTCFullYear(Math.floor(a.getUTCFullYear()/i)*i),a.setUTCMonth(0,1),a.setUTCHours(0,0,0,0)},function(a,f){a.setUTCFullYear(a.getUTCFullYear()+f*i)})};const IN=L1t;L1t.range;function mEe(i,a,f,p,v,m){const b=[[U7,1,v5],[U7,5,5*v5],[U7,15,15*v5],[U7,30,30*v5],[m,1,c3],[m,5,5*c3],[m,15,15*c3],[m,30,30*c3],[v,1,G7],[v,3,3*G7],[v,6,6*G7],[v,12,12*G7],[p,1,V7],[p,2,2*V7],[f,1,_1t],[a,1,GMt],[a,3,3*GMt],[i,1,S1t]];function E(L,N,B){const j=Nit).right(b,j);if(R===b.length)return i.every(Vft(L/S1t,N/S1t,B));if(R===0)return C1t.every(Math.max(Vft(L,N,B),1));const[z,K]=b[j/b[R-1][2]53)return null;"w"in re||(re.w=1),"Z"in re?(Oe=I1t(DN(re.y,0,1)),oe=Oe.getUTCDay(),Oe=oe>4||oe===0?qU.ceil(Oe):qU(Oe),Oe=eIt.offset(Oe,(re.V-1)*7),re.y=Oe.getUTCFullYear(),re.m=Oe.getUTCMonth(),re.d=Oe.getUTCDate()+(re.w+6)%7):(Oe=M1t(DN(re.y,0,1)),oe=Oe.getDay(),Oe=oe>4||oe===0?MN.ceil(Oe):MN(Oe),Oe=CA.offset(Oe,(re.V-1)*7),re.y=Oe.getFullYear(),re.m=Oe.getMonth(),re.d=Oe.getDate()+(re.w+6)%7)}else("W"in re||"U"in re)&&("w"in re||(re.w="u"in re?re.u%7:"W"in re?1:0),oe="Z"in re?I1t(DN(re.y,0,1)).getUTCDay():M1t(DN(re.y,0,1)).getDay(),re.m=0,re.d="W"in re?(re.w+6)%7+re.W*7-(oe+5)%7:re.w+re.U*7-(oe+6)%7);return"Z"in re?(re.H+=re.Z/100|0,re.M+=re.Z%100,I1t(re)):M1t(re)}}function wt(we,_e,$t,re){for(var ie=0,Oe=_e.length,oe=$t.length,Ne,me;ie=oe)return-1;if(Ne=_e.charCodeAt(ie++),Ne===37){if(Ne=_e.charAt(ie++),me=yt[Ne in rIt?_e.charAt(ie++):Ne],!me||(re=me(we,$t,re))<0)return-1}else if(Ne!=$t.charCodeAt(re++))return-1}return re}function X(we,_e,$t){var re=L.exec(_e.slice($t));return re?(we.p=N.get(re[0].toLowerCase()),$t+re[0].length):-1}function pt(we,_e,$t){var re=R.exec(_e.slice($t));return re?(we.w=z.get(re[0].toLowerCase()),$t+re[0].length):-1}function U(we,_e,$t){var re=B.exec(_e.slice($t));return re?(we.w=j.get(re[0].toLowerCase()),$t+re[0].length):-1}function xt(we,_e,$t){var re=st.exec(_e.slice($t));return re?(we.m=ut.get(re[0].toLowerCase()),$t+re[0].length):-1}function nt(we,_e,$t){var re=K.exec(_e.slice($t));return re?(we.m=it.get(re[0].toLowerCase()),$t+re[0].length):-1}function Ot(we,_e,$t){return wt(we,a,_e,$t)}function Nt(we,_e,$t){return wt(we,f,_e,$t)}function qt(we,_e,$t){return wt(we,p,_e,$t)}function Ct(we){return b[we.getDay()]}function Z(we){return m[we.getDay()]}function Tt(we){return _[we.getMonth()]}function Ht(we){return E[we.getMonth()]}function It(we){return v[+(we.getHours()>=12)]}function Ft(we){return 1+~~(we.getMonth()/3)}function ke(we){return b[we.getUTCDay()]}function pn(we){return m[we.getUTCDay()]}function Me(we){return _[we.getUTCMonth()]}function ve(we){return E[we.getUTCMonth()]}function Ge(we){return v[+(we.getUTCHours()>=12)]}function Ke(we){return 1+~~(we.getUTCMonth()/3)}return{format:function(we){var _e=dt(we+="",bt);return _e.toString=function(){return we},_e},parse:function(we){var _e=ht(we+="",!1);return _e.toString=function(){return we},_e},utcFormat:function(we){var _e=dt(we+="",mt);return _e.toString=function(){return we},_e},utcParse:function(we){var _e=ht(we+="",!0);return _e.toString=function(){return we},_e}}}var rIt={"-":"",_:" ",0:"0"},K1=/^\s*\d+/,EEe=/^%/,TEe=/[\\^$*+?|[\]().{}]/g;function Dc(i,a,f){var p=i<0?"-":"",v=(p?-i:i)+"",m=v.length;return p+(m[a.toLowerCase(),f]))}function _Ee(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.w=+p[0],f+p[0].length):-1}function SEe(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.u=+p[0],f+p[0].length):-1}function AEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.U=+p[0],f+p[0].length):-1}function LEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.V=+p[0],f+p[0].length):-1}function MEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.W=+p[0],f+p[0].length):-1}function iIt(i,a,f){var p=K1.exec(a.slice(f,f+4));return p?(i.y=+p[0],f+p[0].length):-1}function sIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.y=+p[0]+(+p[0]>68?1900:2e3),f+p[0].length):-1}function IEe(i,a,f){var p=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(a.slice(f,f+6));return p?(i.Z=p[1]?0:-(p[2]+(p[3]||"00")),f+p[0].length):-1}function DEe(i,a,f){var p=K1.exec(a.slice(f,f+1));return p?(i.q=p[0]*3-3,f+p[0].length):-1}function OEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.m=p[0]-1,f+p[0].length):-1}function aIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.d=+p[0],f+p[0].length):-1}function NEe(i,a,f){var p=K1.exec(a.slice(f,f+3));return p?(i.m=0,i.d=+p[0],f+p[0].length):-1}function oIt(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.H=+p[0],f+p[0].length):-1}function PEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.M=+p[0],f+p[0].length):-1}function FEe(i,a,f){var p=K1.exec(a.slice(f,f+2));return p?(i.S=+p[0],f+p[0].length):-1}function BEe(i,a,f){var p=K1.exec(a.slice(f,f+3));return p?(i.L=+p[0],f+p[0].length):-1}function REe(i,a,f){var p=K1.exec(a.slice(f,f+6));return p?(i.L=Math.floor(p[0]/1e3),f+p[0].length):-1}function jEe(i,a,f){var p=EEe.exec(a.slice(f,f+1));return p?f+p[0].length:-1}function $Ee(i,a,f){var p=K1.exec(a.slice(f));return p?(i.Q=+p[0],f+p[0].length):-1}function zEe(i,a,f){var p=K1.exec(a.slice(f));return p?(i.s=+p[0],f+p[0].length):-1}function cIt(i,a){return Dc(i.getDate(),a,2)}function qEe(i,a){return Dc(i.getHours(),a,2)}function HEe(i,a){return Dc(i.getHours()%12||12,a,2)}function GEe(i,a){return Dc(1+CA.count(Y7(i),i),a,3)}function uIt(i,a){return Dc(i.getMilliseconds(),a,3)}function VEe(i,a){return uIt(i,a)+"000"}function UEe(i,a){return Dc(i.getMonth()+1,a,2)}function WEe(i,a){return Dc(i.getMinutes(),a,2)}function KEe(i,a){return Dc(i.getSeconds(),a,2)}function YEe(i){var a=i.getDay();return a===0?7:a}function XEe(i,a){return Dc(LN.count(Y7(i)-1,i),a,2)}function lIt(i){var a=i.getDay();return a>=4||a===0?K7(i):K7.ceil(i)}function QEe(i,a){return i=lIt(i),Dc(K7.count(Y7(i),i)+(Y7(i).getDay()===4),a,2)}function ZEe(i){return i.getDay()}function JEe(i,a){return Dc(MN.count(Y7(i)-1,i),a,2)}function t7e(i,a){return Dc(i.getFullYear()%100,a,2)}function e7e(i,a){return i=lIt(i),Dc(i.getFullYear()%100,a,2)}function n7e(i,a){return Dc(i.getFullYear()%1e4,a,4)}function r7e(i,a){var f=i.getDay();return i=f>=4||f===0?K7(i):K7.ceil(i),Dc(i.getFullYear()%1e4,a,4)}function i7e(i){var a=i.getTimezoneOffset();return(a>0?"-":(a*=-1,"+"))+Dc(a/60|0,"0",2)+Dc(a%60,"0",2)}function hIt(i,a){return Dc(i.getUTCDate(),a,2)}function s7e(i,a){return Dc(i.getUTCHours(),a,2)}function a7e(i,a){return Dc(i.getUTCHours()%12||12,a,2)}function o7e(i,a){return Dc(1+eIt.count(IN(i),i),a,3)}function fIt(i,a){return Dc(i.getUTCMilliseconds(),a,3)}function c7e(i,a){return fIt(i,a)+"000"}function u7e(i,a){return Dc(i.getUTCMonth()+1,a,2)}function l7e(i,a){return Dc(i.getUTCMinutes(),a,2)}function h7e(i,a){return Dc(i.getUTCSeconds(),a,2)}function f7e(i){var a=i.getUTCDay();return a===0?7:a}function d7e(i,a){return Dc(nIt.count(IN(i)-1,i),a,2)}function dIt(i){var a=i.getUTCDay();return a>=4||a===0?_A(i):_A.ceil(i)}function g7e(i,a){return i=dIt(i),Dc(_A.count(IN(i),i)+(IN(i).getUTCDay()===4),a,2)}function p7e(i){return i.getUTCDay()}function b7e(i,a){return Dc(qU.count(IN(i)-1,i),a,2)}function v7e(i,a){return Dc(i.getUTCFullYear()%100,a,2)}function w7e(i,a){return i=dIt(i),Dc(i.getUTCFullYear()%100,a,2)}function m7e(i,a){return Dc(i.getUTCFullYear()%1e4,a,4)}function y7e(i,a){var f=i.getUTCDay();return i=f>=4||f===0?_A(i):_A.ceil(i),Dc(i.getUTCFullYear()%1e4,a,4)}function x7e(){return"+0000"}function gIt(){return"%"}function pIt(i){return+i}function bIt(i){return Math.floor(+i/1e3)}var SA,HU;k7e({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function k7e(i){return SA=kEe(i),HU=SA.format,SA.parse,SA.utcFormat,SA.utcParse,SA}function E7e(i){return new Date(i)}function T7e(i){return i instanceof Date?+i:+new Date(+i)}function vIt(i,a,f,p,v,m,b,E,_,L){var N=HMt(),B=N.invert,j=N.domain,R=L(".%L"),z=L(":%S"),K=L("%I:%M"),it=L("%I %p"),st=L("%a %d"),ut=L("%b %d"),bt=L("%B"),mt=L("%Y");function yt(dt){return(_(dt)1?0:i<-1?PN:Math.acos(i)}function mIt(i){return i>=1?GU:i<=-1?-GU:Math.asin(i)}function M7e(i){return i.innerRadius}function I7e(i){return i.outerRadius}function D7e(i){return i.startAngle}function O7e(i){return i.endAngle}function N7e(i){return i&&i.padAngle}function P7e(i,a,f,p,v,m,b,E){var _=f-i,L=p-a,N=b-v,B=E-m,j=B*_-N*L;if(!(j*jOt*Ot+Nt*Nt&&(wt=pt,X=U),{cx:wt,cy:X,x01:-N,y01:-B,x11:wt*(v/yt-1),y11:X*(v/yt-1)}}function LA(){var i=M7e,a=I7e,f=Yh(0),p=null,v=D7e,m=O7e,b=N7e,E=null;function _(){var L,N,B=+i.apply(this,arguments),j=+a.apply(this,arguments),R=v.apply(this,arguments)-GU,z=m.apply(this,arguments)-GU,K=wIt(z-R),it=z>R;if(E||(E=L=w1t()),jv0))E.moveTo(0,0);else if(K>VU-v0)E.moveTo(j*Q7(R),j*u3(R)),E.arc(0,0,j,R,z,!it),B>v0&&(E.moveTo(B*Q7(z),B*u3(z)),E.arc(0,0,B,z,R,it));else{var st=R,ut=z,bt=R,mt=z,yt=K,dt=K,ht=b.apply(this,arguments)/2,wt=ht>v0&&(p?+p.apply(this,arguments):AA(B*B+j*j)),X=D1t(wIt(j-B)/2,+f.apply(this,arguments)),pt=X,U=X,xt,nt;if(wt>v0){var Ot=mIt(wt/B*u3(ht)),Nt=mIt(wt/j*u3(ht));(yt-=Ot*2)>v0?(Ot*=it?1:-1,bt+=Ot,mt-=Ot):(yt=0,bt=mt=(R+z)/2),(dt-=Nt*2)>v0?(Nt*=it?1:-1,st+=Nt,ut-=Nt):(dt=0,st=ut=(R+z)/2)}var qt=j*Q7(st),Ct=j*u3(st),Z=B*Q7(mt),Tt=B*u3(mt);if(X>v0){var Ht=j*Q7(ut),It=j*u3(ut),Ft=B*Q7(bt),ke=B*u3(bt),pn;if(Kv0?U>v0?(xt=UU(Ft,ke,qt,Ct,j,U,it),nt=UU(Ht,It,Z,Tt,j,U,it),E.moveTo(xt.cx+xt.x01,xt.cy+xt.y01),Uv0)||!(yt>v0)?E.lineTo(Z,Tt):pt>v0?(xt=UU(Z,Tt,Ht,It,B,-pt,it),nt=UU(qt,Ct,Ft,ke,B,-pt,it),E.lineTo(xt.cx+xt.x01,xt.cy+xt.y01),pti?1:a>=i?0:NaN}function j7e(i){return i}function $7e(){var i=j7e,a=R7e,f=null,p=Yh(0),v=Yh(VU),m=Yh(0);function b(E){var _,L=(E=yIt(E)).length,N,B,j=0,R=new Array(L),z=new Array(L),K=+p.apply(this,arguments),it=Math.min(VU,Math.max(-VU,v.apply(this,arguments)-K)),st,ut=Math.min(Math.abs(it)/L,m.apply(this,arguments)),bt=ut*(it<0?-1:1),mt;for(_=0;_0&&(j+=mt);for(a!=null?R.sort(function(yt,dt){return a(z[yt],z[dt])}):f!=null&&R.sort(function(yt,dt){return f(E[yt],E[dt])}),_=0,B=j?(it-L*bt)/j:0;_0?mt*B:0)+bt,z[N]={data:E[N],index:_,value:mt,startAngle:K,endAngle:st,padAngle:ut};return z}return b.value=function(E){return arguments.length?(i=typeof E=="function"?E:Yh(+E),b):i},b.sortValues=function(E){return arguments.length?(a=E,f=null,b):a},b.sort=function(E){return arguments.length?(f=E,a=null,b):f},b.startAngle=function(E){return arguments.length?(p=typeof E=="function"?E:Yh(+E),b):p},b.endAngle=function(E){return arguments.length?(v=typeof E=="function"?E:Yh(+E),b):v},b.padAngle=function(E){return arguments.length?(m=typeof E=="function"?E:Yh(+E),b):m},b}class kIt{constructor(a,f){this._context=a,this._x=f}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(a,f){switch(a=+a,f=+f,this._point){case 0:{this._point=1,this._line?this._context.lineTo(a,f):this._context.moveTo(a,f);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+a)/2,this._y0,this._x0,f,a,f):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+f)/2,a,this._y0,a,f);break}}this._x0=a,this._y0=f}}function z7e(i){return new kIt(i,!0)}function q7e(i){return new kIt(i,!1)}function Z6(){}function WU(i,a,f){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+a)/6,(i._y0+4*i._y1+f)/6)}function KU(i){this._context=i}KU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:WU(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function FN(i){return new KU(i)}function EIt(i){this._context=i}EIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x2=i,this._y2=a;break;case 1:this._point=2,this._x3=i,this._y3=a;break;case 2:this._point=3,this._x4=i,this._y4=a,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+a)/6);break;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function H7e(i){return new EIt(i)}function TIt(i){this._context=i}TIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var f=(this._x0+4*this._x1+i)/6,p=(this._y0+4*this._y1+a)/6;this._line?this._context.lineTo(f,p):this._context.moveTo(f,p);break;case 3:this._point=4;default:WU(this,i,a);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a}};function G7e(i){return new TIt(i)}function CIt(i,a){this._basis=new KU(i),this._beta=a}CIt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,a=this._y,f=i.length-1;if(f>0)for(var p=i[0],v=a[0],m=i[f]-p,b=a[f]-v,E=-1,_;++E<=f;)_=E/f,this._basis.point(this._beta*i[E]+(1-this._beta)*(p+_*m),this._beta*a[E]+(1-this._beta)*(v+_*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,a){this._x.push(+i),this._y.push(+a)}};const V7e=function i(a){function f(p){return a===1?new KU(p):new CIt(p,a)}return f.beta=function(p){return i(+p)},f}(.85);function YU(i,a,f){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-a),i._y2+i._k*(i._y1-f),i._x2,i._y2)}function O1t(i,a){this._context=i,this._k=(1-a)/6}O1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:YU(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2,this._x1=i,this._y1=a;break;case 2:this._point=3;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const U7e=function i(a){function f(p){return new O1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function N1t(i,a){this._context=i,this._k=(1-a)/6}N1t.prototype={areaStart:Z6,areaEnd:Z6,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const W7e=function i(a){function f(p){return new N1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function P1t(i,a){this._context=i,this._k=(1-a)/6}P1t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:YU(this,i,a);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const K7e=function i(a){function f(p){return new P1t(p,a)}return f.tension=function(p){return i(+p)},f}(0);function F1t(i,a,f){var p=i._x1,v=i._y1,m=i._x2,b=i._y2;if(i._l01_a>v0){var E=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,_=3*i._l01_a*(i._l01_a+i._l12_a);p=(p*E-i._x0*i._l12_2a+i._x2*i._l01_2a)/_,v=(v*E-i._y0*i._l12_2a+i._y2*i._l01_2a)/_}if(i._l23_a>v0){var L=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,N=3*i._l23_a*(i._l23_a+i._l12_a);m=(m*L+i._x1*i._l23_2a-a*i._l12_2a)/N,b=(b*L+i._y1*i._l23_2a-f*i._l12_2a)/N}i._context.bezierCurveTo(p,v,m,b,i._x2,i._y2)}function _It(i,a){this._context=i,this._alpha=a}_It.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3;default:F1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const Y7e=function i(a){function f(p){return a?new _It(p,a):new O1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function SIt(i,a){this._context=i,this._alpha=a}SIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=a;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=a);break;case 2:this._point=3,this._x5=i,this._y5=a;break;default:F1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const X7e=function i(a){function f(p){return a?new SIt(p,a):new N1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function AIt(i,a){this._context=i,this._alpha=a}AIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){if(i=+i,a=+a,this._point){var f=this._x2-i,p=this._y2-a;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(f*f+p*p,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:F1t(this,i,a);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=a}};const Q7e=function i(a){function f(p){return a?new AIt(p,a):new P1t(p,0)}return f.alpha=function(p){return i(+p)},f}(.5);function LIt(i){this._context=i}LIt.prototype={areaStart:Z6,areaEnd:Z6,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,a){i=+i,a=+a,this._point?this._context.lineTo(i,a):(this._point=1,this._context.moveTo(i,a))}};function Z7e(i){return new LIt(i)}function MIt(i){return i<0?-1:1}function IIt(i,a,f){var p=i._x1-i._x0,v=a-i._x1,m=(i._y1-i._y0)/(p||v<0&&-0),b=(f-i._y1)/(v||p<0&&-0),E=(m*v+b*p)/(p+v);return(MIt(m)+MIt(b))*Math.min(Math.abs(m),Math.abs(b),.5*Math.abs(E))||0}function DIt(i,a){var f=i._x1-i._x0;return f?(3*(i._y1-i._y0)/f-a)/2:a}function B1t(i,a,f){var p=i._x0,v=i._y0,m=i._x1,b=i._y1,E=(m-p)/3;i._context.bezierCurveTo(p+E,v+E*a,m-E,b-E*f,m,b)}function XU(i){this._context=i}XU.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:B1t(this,this._t0,DIt(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,a){var f=NaN;if(i=+i,a=+a,!(i===this._x1&&a===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;break;case 2:this._point=3,B1t(this,DIt(this,f=IIt(this,i,a)),f);break;default:B1t(this,this._t0,f=IIt(this,i,a));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=a,this._t0=f}}};function OIt(i){this._context=new NIt(i)}(OIt.prototype=Object.create(XU.prototype)).point=function(i,a){XU.prototype.point.call(this,a,i)};function NIt(i){this._context=i}NIt.prototype={moveTo:function(i,a){this._context.moveTo(a,i)},closePath:function(){this._context.closePath()},lineTo:function(i,a){this._context.lineTo(a,i)},bezierCurveTo:function(i,a,f,p,v,m){this._context.bezierCurveTo(a,i,p,f,m,v)}};function J7e(i){return new XU(i)}function tTe(i){return new OIt(i)}function PIt(i){this._context=i}PIt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,a=this._y,f=i.length;if(f)if(this._line?this._context.lineTo(i[0],a[0]):this._context.moveTo(i[0],a[0]),f===2)this._context.lineTo(i[1],a[1]);else for(var p=FIt(i),v=FIt(a),m=0,b=1;b=0;--a)v[a]=(b[a]-v[a+1])/m[a];for(m[f-1]=(i[f]+v[f-1])/2,a=0;a=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,a){switch(i=+i,a=+a,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,a):this._context.moveTo(i,a);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,a),this._context.lineTo(i,a);else{var f=this._x*(1-this._t)+i*this._t;this._context.lineTo(f,this._y),this._context.lineTo(f,a)}break}}this._x=i,this._y=a}};function nTe(i){return new QU(i,.5)}function rTe(i){return new QU(i,0)}function iTe(i){return new QU(i,1)}function BN(i,a,f){this.k=i,this.x=a,this.y=f}BN.prototype={constructor:BN,scale:function(i){return i===1?this:new BN(this.k*i,this.x,this.y)},translate:function(i,a){return i===0&a===0?this:new BN(this.k,this.x+this.k*i,this.y+this.k*a)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},BN.prototype;/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:BIt,setPrototypeOf:RIt,isFrozen:sTe,getPrototypeOf:aTe,getOwnPropertyDescriptor:oTe}=Object;let{freeze:sg,seal:Xw,create:cTe}=Object,{apply:R1t,construct:j1t}=typeof Reflect<"u"&&Reflect;R1t||(R1t=function(a,f,p){return a.apply(f,p)}),sg||(sg=function(a){return a}),Xw||(Xw=function(a){return a}),j1t||(j1t=function(a,f){return new a(...f)});const uTe=K2(Array.prototype.forEach),jIt=K2(Array.prototype.pop),RN=K2(Array.prototype.push),ZU=K2(String.prototype.toLowerCase),$1t=K2(String.prototype.toString),lTe=K2(String.prototype.match),Qw=K2(String.prototype.replace),hTe=K2(String.prototype.indexOf),fTe=K2(String.prototype.trim),Mb=K2(RegExp.prototype.test),jN=dTe(TypeError);function K2(i){return function(a){for(var f=arguments.length,p=new Array(f>1?f-1:0),v=1;v/gm),wTe=Xw(/\${[\w\W]*}/gm),mTe=Xw(/^data-[\-\w.\u00B7-\uFFFF]/),yTe=Xw(/^aria-[\-\w]+$/),GIt=Xw(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),xTe=Xw(/^(?:\w+script|data):/i),kTe=Xw(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),VIt=Xw(/^html$/i);var UIt=Object.freeze({__proto__:null,MUSTACHE_EXPR:bTe,ERB_EXPR:vTe,TMPLIT_EXPR:wTe,DATA_ATTR:mTe,ARIA_ATTR:yTe,IS_ALLOWED_URI:GIt,IS_SCRIPT_OR_DATA:xTe,ATTR_WHITESPACE:kTe,DOCTYPE_NAME:VIt});const ETe=()=>typeof window>"u"?null:window,TTe=function(a,f){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let p=null;const v="data-tt-policy-suffix";f&&f.hasAttribute(v)&&(p=f.getAttribute(v));const m="dompurify"+(p?"#"+p:"");try{return a.createPolicy(m,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+m+" could not be created."),null}};function WIt(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ETe();const a=Bi=>WIt(Bi);if(a.version="3.0.5",a.removed=[],!i||!i.document||i.document.nodeType!==9)return a.isSupported=!1,a;const f=i.document,p=f.currentScript;let{document:v}=i;const{DocumentFragment:m,HTMLTemplateElement:b,Node:E,Element:_,NodeFilter:L,NamedNodeMap:N=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:B,DOMParser:j,trustedTypes:R}=i,z=_.prototype,K=JU(z,"cloneNode"),it=JU(z,"nextSibling"),st=JU(z,"childNodes"),ut=JU(z,"parentNode");if(typeof b=="function"){const Bi=v.createElement("template");Bi.content&&Bi.content.ownerDocument&&(v=Bi.content.ownerDocument)}let bt,mt="";const{implementation:yt,createNodeIterator:dt,createDocumentFragment:ht,getElementsByTagName:wt}=v,{importNode:X}=f;let pt={};a.isSupported=typeof BIt=="function"&&typeof ut=="function"&&yt&&yt.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:U,ERB_EXPR:xt,TMPLIT_EXPR:nt,DATA_ATTR:Ot,ARIA_ATTR:Nt,IS_SCRIPT_OR_DATA:qt,ATTR_WHITESPACE:Ct}=UIt;let{IS_ALLOWED_URI:Z}=UIt,Tt=null;const Ht=wo({},[...$It,...z1t,...q1t,...H1t,...zIt]);let It=null;const Ft=wo({},[...qIt,...G1t,...HIt,...tW]);let ke=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),pn=null,Me=null,ve=!0,Ge=!0,Ke=!1,we=!0,_e=!1,$t=!1,re=!1,ie=!1,Oe=!1,oe=!1,Ne=!1,me=!0,cn=!1;const li="user-content-";let ya=!0,da=!1,Oo={},ds=null;const Dr=wo({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let nr=null;const di=wo({},["audio","video","img","source","image","track"]);let Ee=null;const Yn=wo({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),He="http://www.w3.org/1998/Math/MathML",Ti="http://www.w3.org/2000/svg",gn="http://www.w3.org/1999/xhtml";let ks=gn,qa=!1,La=null;const Gs=wo({},[He,Ti,gn],$1t);let No;const vs=["application/xhtml+xml","text/html"],nu="text/html";let $s,Lu=null;const fm=v.createElement("form"),av=function(on){return on instanceof RegExp||on instanceof Function},Uu=function(on){if(!(Lu&&Lu===on)){if((!on||typeof on!="object")&&(on={}),on=MA(on),No=vs.indexOf(on.PARSER_MEDIA_TYPE)===-1?No=nu:No=on.PARSER_MEDIA_TYPE,$s=No==="application/xhtml+xml"?$1t:ZU,Tt="ALLOWED_TAGS"in on?wo({},on.ALLOWED_TAGS,$s):Ht,It="ALLOWED_ATTR"in on?wo({},on.ALLOWED_ATTR,$s):Ft,La="ALLOWED_NAMESPACES"in on?wo({},on.ALLOWED_NAMESPACES,$1t):Gs,Ee="ADD_URI_SAFE_ATTR"in on?wo(MA(Yn),on.ADD_URI_SAFE_ATTR,$s):Yn,nr="ADD_DATA_URI_TAGS"in on?wo(MA(di),on.ADD_DATA_URI_TAGS,$s):di,ds="FORBID_CONTENTS"in on?wo({},on.FORBID_CONTENTS,$s):Dr,pn="FORBID_TAGS"in on?wo({},on.FORBID_TAGS,$s):{},Me="FORBID_ATTR"in on?wo({},on.FORBID_ATTR,$s):{},Oo="USE_PROFILES"in on?on.USE_PROFILES:!1,ve=on.ALLOW_ARIA_ATTR!==!1,Ge=on.ALLOW_DATA_ATTR!==!1,Ke=on.ALLOW_UNKNOWN_PROTOCOLS||!1,we=on.ALLOW_SELF_CLOSE_IN_ATTR!==!1,_e=on.SAFE_FOR_TEMPLATES||!1,$t=on.WHOLE_DOCUMENT||!1,Oe=on.RETURN_DOM||!1,oe=on.RETURN_DOM_FRAGMENT||!1,Ne=on.RETURN_TRUSTED_TYPE||!1,ie=on.FORCE_BODY||!1,me=on.SANITIZE_DOM!==!1,cn=on.SANITIZE_NAMED_PROPS||!1,ya=on.KEEP_CONTENT!==!1,da=on.IN_PLACE||!1,Z=on.ALLOWED_URI_REGEXP||GIt,ks=on.NAMESPACE||gn,ke=on.CUSTOM_ELEMENT_HANDLING||{},on.CUSTOM_ELEMENT_HANDLING&&av(on.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ke.tagNameCheck=on.CUSTOM_ELEMENT_HANDLING.tagNameCheck),on.CUSTOM_ELEMENT_HANDLING&&av(on.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ke.attributeNameCheck=on.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),on.CUSTOM_ELEMENT_HANDLING&&typeof on.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ke.allowCustomizedBuiltInElements=on.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),_e&&(Ge=!1),oe&&(Oe=!0),Oo&&(Tt=wo({},[...zIt]),It=[],Oo.html===!0&&(wo(Tt,$It),wo(It,qIt)),Oo.svg===!0&&(wo(Tt,z1t),wo(It,G1t),wo(It,tW)),Oo.svgFilters===!0&&(wo(Tt,q1t),wo(It,G1t),wo(It,tW)),Oo.mathMl===!0&&(wo(Tt,H1t),wo(It,HIt),wo(It,tW))),on.ADD_TAGS&&(Tt===Ht&&(Tt=MA(Tt)),wo(Tt,on.ADD_TAGS,$s)),on.ADD_ATTR&&(It===Ft&&(It=MA(It)),wo(It,on.ADD_ATTR,$s)),on.ADD_URI_SAFE_ATTR&&wo(Ee,on.ADD_URI_SAFE_ATTR,$s),on.FORBID_CONTENTS&&(ds===Dr&&(ds=MA(ds)),wo(ds,on.FORBID_CONTENTS,$s)),ya&&(Tt["#text"]=!0),$t&&wo(Tt,["html","head","body"]),Tt.table&&(wo(Tt,["tbody"]),delete pn.tbody),on.TRUSTED_TYPES_POLICY){if(typeof on.TRUSTED_TYPES_POLICY.createHTML!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof on.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw jN('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');bt=on.TRUSTED_TYPES_POLICY,mt=bt.createHTML("")}else bt===void 0&&(bt=TTe(R,p)),bt!==null&&typeof mt=="string"&&(mt=bt.createHTML(""));sg&&sg(on),Lu=on}},Zl=wo({},["mi","mo","mn","ms","mtext"]),Pa=wo({},["foreignobject","desc","title","annotation-xml"]),Al=wo({},["title","style","font","a","script"]),ua=wo({},z1t);wo(ua,q1t),wo(ua,gTe);const bc=wo({},H1t);wo(bc,pTe);const Cc=function(on){let kr=ut(on);(!kr||!kr.tagName)&&(kr={namespaceURI:ks,tagName:"template"});const Ei=ZU(on.tagName),Jo=ZU(kr.tagName);return La[on.namespaceURI]?on.namespaceURI===Ti?kr.namespaceURI===gn?Ei==="svg":kr.namespaceURI===He?Ei==="svg"&&(Jo==="annotation-xml"||Zl[Jo]):!!ua[Ei]:on.namespaceURI===He?kr.namespaceURI===gn?Ei==="math":kr.namespaceURI===Ti?Ei==="math"&&Pa[Jo]:!!bc[Ei]:on.namespaceURI===gn?kr.namespaceURI===Ti&&!Pa[Jo]||kr.namespaceURI===He&&!Zl[Jo]?!1:!bc[Ei]&&(Al[Ei]||!ua[Ei]):!!(No==="application/xhtml+xml"&&La[on.namespaceURI]):!1},ga=function(on){RN(a.removed,{element:on});try{on.parentNode.removeChild(on)}catch{on.remove()}},Ma=function(on,kr){try{RN(a.removed,{attribute:kr.getAttributeNode(on),from:kr})}catch{RN(a.removed,{attribute:null,from:kr})}if(kr.removeAttribute(on),on==="is"&&!It[on])if(Oe||oe)try{ga(kr)}catch{}else try{kr.setAttribute(on,"")}catch{}},Ha=function(on){let kr,Ei;if(ie)on=""+on;else{const tf=lTe(on,/^[\r\n\t ]+/);Ei=tf&&tf[0]}No==="application/xhtml+xml"&&ks===gn&&(on=''+on+"");const Jo=bt?bt.createHTML(on):on;if(ks===gn)try{kr=new j().parseFromString(Jo,No)}catch{}if(!kr||!kr.documentElement){kr=yt.createDocument(ks,"template",null);try{kr.documentElement.innerHTML=qa?mt:Jo}catch{}}const vc=kr.body||kr.documentElement;return on&&Ei&&vc.insertBefore(v.createTextNode(Ei),vc.childNodes[0]||null),ks===gn?wt.call(kr,$t?"html":"body")[0]:$t?kr.documentElement:vc},Ll=function(on){return dt.call(on.ownerDocument||on,on,L.SHOW_ELEMENT|L.SHOW_COMMENT|L.SHOW_TEXT,null,!1)},_c=function(on){return on instanceof B&&(typeof on.nodeName!="string"||typeof on.textContent!="string"||typeof on.removeChild!="function"||!(on.attributes instanceof N)||typeof on.removeAttribute!="function"||typeof on.setAttribute!="function"||typeof on.namespaceURI!="string"||typeof on.insertBefore!="function"||typeof on.hasChildNodes!="function")},ov=function(on){return typeof E=="object"?on instanceof E:on&&typeof on=="object"&&typeof on.nodeType=="number"&&typeof on.nodeName=="string"},Jl=function(on,kr,Ei){pt[on]&&uTe(pt[on],Jo=>{Jo.call(a,kr,Ei,Lu)})},Z1=function(on){let kr;if(Jl("beforeSanitizeElements",on,null),_c(on))return ga(on),!0;const Ei=$s(on.nodeName);if(Jl("uponSanitizeElement",on,{tagName:Ei,allowedTags:Tt}),on.hasChildNodes()&&!ov(on.firstElementChild)&&(!ov(on.content)||!ov(on.content.firstElementChild))&&Mb(/<[/\w]/g,on.innerHTML)&&Mb(/<[/\w]/g,on.textContent))return ga(on),!0;if(!Tt[Ei]||pn[Ei]){if(!pn[Ei]&&J1(Ei)&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,Ei)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(Ei)))return!1;if(ya&&!ds[Ei]){const Jo=ut(on)||on.parentNode,vc=st(on)||on.childNodes;if(vc&&Jo){const tf=vc.length;for(let Oc=tf-1;Oc>=0;--Oc)Jo.insertBefore(K(vc[Oc],!0),it(on))}}return ga(on),!0}return on instanceof _&&!Cc(on)||(Ei==="noscript"||Ei==="noembed"||Ei==="noframes")&&Mb(/<\/no(script|embed|frames)/i,on.innerHTML)?(ga(on),!0):(_e&&on.nodeType===3&&(kr=on.textContent,kr=Qw(kr,U," "),kr=Qw(kr,xt," "),kr=Qw(kr,nt," "),on.textContent!==kr&&(RN(a.removed,{element:on.cloneNode()}),on.textContent=kr)),Jl("afterSanitizeElements",on,null),!1)},Fd=function(on,kr,Ei){if(me&&(kr==="id"||kr==="name")&&(Ei in v||Ei in fm))return!1;if(!(Ge&&!Me[kr]&&Mb(Ot,kr))){if(!(ve&&Mb(Nt,kr))){if(!It[kr]||Me[kr]){if(!(J1(on)&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,on)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(on))&&(ke.attributeNameCheck instanceof RegExp&&Mb(ke.attributeNameCheck,kr)||ke.attributeNameCheck instanceof Function&&ke.attributeNameCheck(kr))||kr==="is"&&ke.allowCustomizedBuiltInElements&&(ke.tagNameCheck instanceof RegExp&&Mb(ke.tagNameCheck,Ei)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(Ei))))return!1}else if(!Ee[kr]){if(!Mb(Z,Qw(Ei,Ct,""))){if(!((kr==="src"||kr==="xlink:href"||kr==="href")&&on!=="script"&&hTe(Ei,"data:")===0&&nr[on])){if(!(Ke&&!Mb(qt,Qw(Ei,Ct,"")))){if(Ei)return!1}}}}}}return!0},J1=function(on){return on.indexOf("-")>0},Bd=function(on){let kr,Ei,Jo,vc;Jl("beforeSanitizeAttributes",on,null);const{attributes:tf}=on;if(!tf)return;const Oc={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:It};for(vc=tf.length;vc--;){kr=tf[vc];const{name:ef,namespaceURI:nf}=kr;if(Ei=ef==="value"?kr.value:fTe(kr.value),Jo=$s(ef),Oc.attrName=Jo,Oc.attrValue=Ei,Oc.keepAttr=!0,Oc.forceKeepAttr=void 0,Jl("uponSanitizeAttribute",on,Oc),Ei=Oc.attrValue,Oc.forceKeepAttr||(Ma(ef,on),!Oc.keepAttr))continue;if(!we&&Mb(/\/>/i,Ei)){Ma(ef,on);continue}_e&&(Ei=Qw(Ei,U," "),Ei=Qw(Ei,xt," "),Ei=Qw(Ei,nt," "));const Xi=$s(on.nodeName);if(Fd(Xi,Jo,Ei)){if(cn&&(Jo==="id"||Jo==="name")&&(Ma(ef,on),Ei=li+Ei),bt&&typeof R=="object"&&typeof R.getAttributeType=="function"&&!nf)switch(R.getAttributeType(Xi,Jo)){case"TrustedHTML":{Ei=bt.createHTML(Ei);break}case"TrustedScriptURL":{Ei=bt.createScriptURL(Ei);break}}try{nf?on.setAttributeNS(nf,ef,Ei):on.setAttribute(ef,Ei),jIt(a.removed)}catch{}}}Jl("afterSanitizeAttributes",on,null)},E0=function Bi(on){let kr;const Ei=Ll(on);for(Jl("beforeSanitizeShadowDOM",on,null);kr=Ei.nextNode();)Jl("uponSanitizeShadowNode",kr,null),!Z1(kr)&&(kr.content instanceof m&&Bi(kr.content),Bd(kr));Jl("afterSanitizeShadowDOM",on,null)};return a.sanitize=function(Bi){let on=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},kr,Ei,Jo,vc;if(qa=!Bi,qa&&(Bi=""),typeof Bi!="string"&&!ov(Bi))if(typeof Bi.toString=="function"){if(Bi=Bi.toString(),typeof Bi!="string")throw jN("dirty is not a string, aborting")}else throw jN("toString is not a function");if(!a.isSupported)return Bi;if(re||Uu(on),a.removed=[],typeof Bi=="string"&&(da=!1),da){if(Bi.nodeName){const ef=$s(Bi.nodeName);if(!Tt[ef]||pn[ef])throw jN("root node is forbidden and cannot be sanitized in-place")}}else if(Bi instanceof E)kr=Ha(""),Ei=kr.ownerDocument.importNode(Bi,!0),Ei.nodeType===1&&Ei.nodeName==="BODY"||Ei.nodeName==="HTML"?kr=Ei:kr.appendChild(Ei);else{if(!Oe&&!_e&&!$t&&Bi.indexOf("<")===-1)return bt&&Ne?bt.createHTML(Bi):Bi;if(kr=Ha(Bi),!kr)return Oe?null:Ne?mt:""}kr&&ie&&ga(kr.firstChild);const tf=Ll(da?Bi:kr);for(;Jo=tf.nextNode();)Z1(Jo)||(Jo.content instanceof m&&E0(Jo.content),Bd(Jo));if(da)return Bi;if(Oe){if(oe)for(vc=ht.call(kr.ownerDocument);kr.firstChild;)vc.appendChild(kr.firstChild);else vc=kr;return(It.shadowroot||It.shadowrootmode)&&(vc=X.call(f,vc,!0)),vc}let Oc=$t?kr.outerHTML:kr.innerHTML;return $t&&Tt["!doctype"]&&kr.ownerDocument&&kr.ownerDocument.doctype&&kr.ownerDocument.doctype.name&&Mb(VIt,kr.ownerDocument.doctype.name)&&(Oc=" +`+Oc),_e&&(Oc=Qw(Oc,U," "),Oc=Qw(Oc,xt," "),Oc=Qw(Oc,nt," ")),bt&&Ne?bt.createHTML(Oc):Oc},a.setConfig=function(Bi){Uu(Bi),re=!0},a.clearConfig=function(){Lu=null,re=!1},a.isValidAttribute=function(Bi,on,kr){Lu||Uu({});const Ei=$s(Bi),Jo=$s(on);return Fd(Ei,Jo,kr)},a.addHook=function(Bi,on){typeof on=="function"&&(pt[Bi]=pt[Bi]||[],RN(pt[Bi],on))},a.removeHook=function(Bi){if(pt[Bi])return jIt(pt[Bi])},a.removeHooks=function(Bi){pt[Bi]&&(pt[Bi]=[])},a.removeAllHooks=function(){pt={}},a}var eW=WIt();const $N=//gi,CTe=i=>i?XIt(i).replace(/\\n/g,"#br#").split("#br#"):[""],KIt=i=>eW.sanitize(i),YIt=(i,a)=>{var f;if(((f=a.flowchart)==null?void 0:f.htmlLabels)!==!1){const p=a.securityLevel;p==="antiscript"||p==="strict"?i=KIt(i):p!=="loose"&&(i=XIt(i),i=i.replace(//g,">"),i=i.replace(/=/g,"="),i=LTe(i))}return i},Dd=(i,a)=>i&&(a.dompurifyConfig?i=eW.sanitize(YIt(i,a),a.dompurifyConfig).toString():i=eW.sanitize(YIt(i,a),{FORBID_TAGS:["style"]}).toString(),i),_Te=(i,a)=>typeof i=="string"?Dd(i,a):i.flat().map(f=>Dd(f,a)),STe=i=>$N.test(i),ATe=i=>i.split($N),LTe=i=>i.replace(/#br#/g,"
"),XIt=i=>i.replace($N,"#br#"),MTe=i=>{let a="";return i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replaceAll(/\(/g,"\\("),a=a.replaceAll(/\)/g,"\\)")),a},s1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),ITe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.max(...a)},DTe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.min(...a)},zN=function(i){const a=i.split(/(,)/),f=[];for(let p=0;p0&&p+1Math.max(0,i.split(a).length-1),OTe=(i,a)=>{const f=V1t(i,"~"),p=V1t(a,"~");return f===1&&p===1},NTe=i=>{const a=V1t(i,"~");let f=!1;if(a<=1)return i;a%2!==0&&i.startsWith("~")&&(i=i.substring(1),f=!0);const p=[...i];let v=p.indexOf("~"),m=p.lastIndexOf("~");for(;v!==-1&&m!==-1&&v!==m;)p[v]="<",p[m]=">",v=p.indexOf("~"),m=p.lastIndexOf("~");return f&&p.unshift("~"),p.join("")},Yr={getRows:CTe,sanitizeText:Dd,sanitizeTextOrArray:_Te,hasBreaks:STe,splitBreaks:ATe,lineBreakRegex:$N,removeScript:KIt,getUrl:MTe,evaluate:s1,getMax:ITe,getMin:DTe},nW={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const a=i/255;return i>.03928?Math.pow((a+.055)/1.055,2.4):a/12.92},hue2rgb:(i,a,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<1/6?i+(a-i)*6*f:f<1/2?a:f<2/3?i+(a-i)*(2/3-f)*6:i),hsl2rgb:({h:i,s:a,l:f},p)=>{if(!a)return f*2.55;i/=360,a/=100,f/=100;const v=f<.5?f*(1+a):f+a-f*a,m=2*f-v;switch(p){case"r":return nW.hue2rgb(m,v,i+1/3)*255;case"g":return nW.hue2rgb(m,v,i)*255;case"b":return nW.hue2rgb(m,v,i-1/3)*255}},rgb2hsl:({r:i,g:a,b:f},p)=>{i/=255,a/=255,f/=255;const v=Math.max(i,a,f),m=Math.min(i,a,f),b=(v+m)/2;if(p==="l")return b*100;if(v===m)return 0;const E=v-m,_=b>.5?E/(2-v-m):E/(v+m);if(p==="s")return _*100;switch(v){case i:return((a-f)/E+(aa>f?Math.min(a,Math.max(f,i)):Math.min(f,Math.max(a,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const a=Math.round(i).toString(16);return a.length>1?a:`0${a}`}}},J6={};for(let i=0;i<=255;i++)J6[i]=fa.unit.dec2hex(i);const w0={ALL:0,RGB:1,HSL:2};class PTe{constructor(){this.type=w0.ALL}get(){return this.type}set(a){if(this.type&&this.type!==a)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=a}reset(){this.type=w0.ALL}is(a){return this.type===a}}const FTe=PTe;class BTe{constructor(a,f){this.color=f,this.changed=!1,this.data=a,this.type=new FTe}set(a,f){return this.color=f,this.changed=!1,this.data=a,this.type.type=w0.ALL,this}_ensureHSL(){const a=this.data,{h:f,s:p,l:v}=a;f===void 0&&(a.h=fa.channel.rgb2hsl(a,"h")),p===void 0&&(a.s=fa.channel.rgb2hsl(a,"s")),v===void 0&&(a.l=fa.channel.rgb2hsl(a,"l"))}_ensureRGB(){const a=this.data,{r:f,g:p,b:v}=a;f===void 0&&(a.r=fa.channel.hsl2rgb(a,"r")),p===void 0&&(a.g=fa.channel.hsl2rgb(a,"g")),v===void 0&&(a.b=fa.channel.hsl2rgb(a,"b"))}get r(){const a=this.data,f=a.r;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"r"))}get g(){const a=this.data,f=a.g;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"g"))}get b(){const a=this.data,f=a.b;return!this.type.is(w0.HSL)&&f!==void 0?f:(this._ensureHSL(),fa.channel.hsl2rgb(a,"b"))}get h(){const a=this.data,f=a.h;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"h"))}get s(){const a=this.data,f=a.s;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"s"))}get l(){const a=this.data,f=a.l;return!this.type.is(w0.RGB)&&f!==void 0?f:(this._ensureRGB(),fa.channel.rgb2hsl(a,"l"))}get a(){return this.data.a}set r(a){this.type.set(w0.RGB),this.changed=!0,this.data.r=a}set g(a){this.type.set(w0.RGB),this.changed=!0,this.data.g=a}set b(a){this.type.set(w0.RGB),this.changed=!0,this.data.b=a}set h(a){this.type.set(w0.HSL),this.changed=!0,this.data.h=a}set s(a){this.type.set(w0.HSL),this.changed=!0,this.data.s=a}set l(a){this.type.set(w0.HSL),this.changed=!0,this.data.l=a}set a(a){this.changed=!0,this.data.a=a}}const RTe=BTe,rW=new RTe({r:0,g:0,b:0,a:0},"transparent"),QIt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const a=i.match(QIt.re);if(!a)return;const f=a[1],p=parseInt(f,16),v=f.length,m=v%4===0,b=v>4,E=b?1:17,_=b?8:4,L=m?0:-1,N=b?255:15;return rW.set({r:(p>>_*(L+3)&N)*E,g:(p>>_*(L+2)&N)*E,b:(p>>_*(L+1)&N)*E,a:m?(p&N)*E/255:1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`#${J6[Math.round(a)]}${J6[Math.round(f)]}${J6[Math.round(p)]}${J6[Math.round(v*255)]}`:`#${J6[Math.round(a)]}${J6[Math.round(f)]}${J6[Math.round(p)]}`}},qN=QIt,iW={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const a=i.match(iW.hueRe);if(a){const[,f,p]=a;switch(p){case"grad":return fa.channel.clamp.h(parseFloat(f)*.9);case"rad":return fa.channel.clamp.h(parseFloat(f)*180/Math.PI);case"turn":return fa.channel.clamp.h(parseFloat(f)*360)}}return fa.channel.clamp.h(parseFloat(i))},parse:i=>{const a=i.charCodeAt(0);if(a!==104&&a!==72)return;const f=i.match(iW.re);if(!f)return;const[,p,v,m,b,E]=f;return rW.set({h:iW._hue2deg(p),s:fa.channel.clamp.s(parseFloat(v)),l:fa.channel.clamp.l(parseFloat(m)),a:b?fa.channel.clamp.a(E?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:a,s:f,l:p,a:v}=i;return v<1?`hsla(${fa.lang.round(a)}, ${fa.lang.round(f)}%, ${fa.lang.round(p)}%, ${v})`:`hsl(${fa.lang.round(a)}, ${fa.lang.round(f)}%, ${fa.lang.round(p)}%)`}},sW=iW,aW={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const a=aW.colors[i];if(a)return qN.parse(a)},stringify:i=>{const a=qN.stringify(i);for(const f in aW.colors)if(aW.colors[f]===a)return f}},ZIt=aW,JIt={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const a=i.charCodeAt(0);if(a!==114&&a!==82)return;const f=i.match(JIt.re);if(!f)return;const[,p,v,m,b,E,_,L,N]=f;return rW.set({r:fa.channel.clamp.r(v?parseFloat(p)*2.55:parseFloat(p)),g:fa.channel.clamp.g(b?parseFloat(m)*2.55:parseFloat(m)),b:fa.channel.clamp.b(_?parseFloat(E)*2.55:parseFloat(E)),a:L?fa.channel.clamp.a(N?parseFloat(L)/100:parseFloat(L)):1},i)},stringify:i=>{const{r:a,g:f,b:p,a:v}=i;return v<1?`rgba(${fa.lang.round(a)}, ${fa.lang.round(f)}, ${fa.lang.round(p)}, ${fa.lang.round(v)})`:`rgb(${fa.lang.round(a)}, ${fa.lang.round(f)}, ${fa.lang.round(p)})`}},oW=JIt,Zw={format:{keyword:ZIt,hex:qN,rgb:oW,rgba:oW,hsl:sW,hsla:sW},parse:i=>{if(typeof i!="string")return i;const a=qN.parse(i)||oW.parse(i)||sW.parse(i)||ZIt.parse(i);if(a)return a;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(w0.HSL)||i.data.r===void 0?sW.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?oW.stringify(i):qN.stringify(i)},tDt=(i,a)=>{const f=Zw.parse(i);for(const p in a)f[p]=fa.channel.clamp[p](a[p]);return Zw.stringify(f)},IA=(i,a,f=0,p=1)=>{if(typeof i!="number")return tDt(i,{a});const v=rW.set({r:fa.channel.clamp.r(i),g:fa.channel.clamp.g(a),b:fa.channel.clamp.b(f),a:fa.channel.clamp.a(p)});return Zw.stringify(v)},jTe=(i,a)=>fa.lang.round(Zw.parse(i)[a]),$Te=i=>{const{r:a,g:f,b:p}=Zw.parse(i),v=.2126*fa.channel.toLinear(a)+.7152*fa.channel.toLinear(f)+.0722*fa.channel.toLinear(p);return fa.lang.round(v)},zTe=i=>$Te(i)>=.5,J7=i=>!zTe(i),eDt=(i,a,f)=>{const p=Zw.parse(i),v=p[a],m=fa.channel.clamp[a](v+f);return v!==m&&(p[a]=m),Zw.stringify(p)},bs=(i,a)=>eDt(i,"l",a),js=(i,a)=>eDt(i,"l",-a),xn=(i,a)=>{const f=Zw.parse(i),p={};for(const v in a)a[v]&&(p[v]=f[v]+a[v]);return tDt(i,p)},qTe=(i,a,f=50)=>{const{r:p,g:v,b:m,a:b}=Zw.parse(i),{r:E,g:_,b:L,a:N}=Zw.parse(a),B=f/100,j=B*2-1,R=b-N,K=((j*R===-1?j:(j+R)/(1+j*R))+1)/2,it=1-K,st=p*K+E*it,ut=v*K+_*it,bt=m*K+L*it,mt=b*B+N*(1-B);return IA(st,ut,bt,mt)},Ii=(i,a=100)=>{const f=Zw.parse(i);return f.r=255-f.r,f.g=255-f.g,f.b=255-f.b,qTe(f,i,a)},ag=(i,a)=>a?xn(i,{s:-40,l:10}):xn(i,{s:-40,l:-10}),cW="#ffffff",uW="#f2f2f2";let HTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||xn(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||xn(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ag(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ag(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Ii(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Ii(this.tertiaryColor),this.lineColor=this.lineColor||Ii(this.background),this.arrowheadColor=this.arrowheadColor||Ii(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?js(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||js(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Ii(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||bs(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this.darkMode)for(let f=0;f{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const GTe=i=>{const a=new HTe;return a.calculate(i),a};let VTe=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=bs(this.primaryColor,16),this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=Ii(this.background),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=bs(Ii("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=IA(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=js("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=js(this.sectionBkgColor,10),this.taskBorderColor=IA(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=IA(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=bs(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=bs(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=bs(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=xn(this.primaryColor,{h:64}),this.fillType3=xn(this.secondaryColor,{h:64}),this.fillType4=xn(this.primaryColor,{h:-64}),this.fillType5=xn(this.secondaryColor,{h:-64}),this.fillType6=xn(this.primaryColor,{h:128}),this.fillType7=xn(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330});for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const UTe=i=>{const a=new VTe;return a.calculate(i),a};let WTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=xn(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=IA(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||js(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||js(this.tertiaryColor,40);for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const nDt=i=>{const a=new WTe;return a.calculate(i),a};let KTe=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=bs("#cde498",10),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.primaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=js(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||xn(this.primaryColor,{h:30}),this.cScale4=this.cScale4||xn(this.primaryColor,{h:60}),this.cScale5=this.cScale5||xn(this.primaryColor,{h:90}),this.cScale6=this.cScale6||xn(this.primaryColor,{h:120}),this.cScale7=this.cScale7||xn(this.primaryColor,{h:150}),this.cScale8=this.cScale8||xn(this.primaryColor,{h:210}),this.cScale9=this.cScale9||xn(this.primaryColor,{h:270}),this.cScale10=this.cScale10||xn(this.primaryColor,{h:300}),this.cScale11=this.cScale11||xn(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||js(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||js(this.tertiaryColor,40);for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}};const YTe=i=>{const a=new KTe;return a.calculate(i),a};class XTe{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=bs(this.contrast,55),this.background="#ffffff",this.tertiaryColor=xn(this.primaryColor,{h:-160}),this.primaryBorderColor=ag(this.primaryColor,this.darkMode),this.secondaryBorderColor=ag(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ag(this.tertiaryColor,this.darkMode),this.primaryTextColor=Ii(this.primaryColor),this.secondaryTextColor=Ii(this.secondaryColor),this.tertiaryTextColor=Ii(this.tertiaryColor),this.lineColor=Ii(this.background),this.textColor=Ii(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=bs(this.contrast,55),this.border2=this.contrast,this.actorBorder=bs(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let a=0;a{this[p]=a[p]}),this.updateColors(),f.forEach(p=>{this[p]=a[p]})}}const w5={base:{getThemeVariables:GTe},dark:{getThemeVariables:UTe},default:{getThemeVariables:nDt},forest:{getThemeVariables:YTe},neutral:{getThemeVariables:i=>{const a=new XTe;return a.calculate(i),a}}},tk={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},rDt={...tk,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:w5.default.getThemeVariables(),sequence:{...tk.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...tk.gantt,tickInterval:void 0,useWidth:void 0},c4:{...tk.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...tk.pie,useWidth:984},requirement:{...tk.requirement,useWidth:void 0},gitGraph:{...tk.gitGraph,useMaxWidth:!1},sankey:{...tk.sankey,useMaxWidth:!1}},iDt=(i,a="")=>Object.keys(i).reduce((f,p)=>Array.isArray(i[p])?f:typeof i[p]=="object"&&i[p]!==null?[...f,a+p,...iDt(i[p],"")]:[...f,a+p],[]),QTe=new Set(iDt(rDt,"")),Lf=rDt,lW=i=>{if(Ut.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(a=>lW(a));return}for(const a of Object.keys(i)){if(Ut.debug("Checking key",a),a.startsWith("__")||a.includes("proto")||a.includes("constr")||!QTe.has(a)||i[a]==null){Ut.debug("sanitize deleting key: ",a),delete i[a];continue}if(typeof i[a]=="object"){Ut.debug("sanitizing object",a),lW(i[a]);continue}const f=["themeCSS","fontFamily","altFontFamily"];for(const p of f)a.includes(p)&&(Ut.debug("sanitizing css option",a),i[a]=ZTe(i[a]))}if(i.themeVariables)for(const a of Object.keys(i.themeVariables)){const f=i.themeVariables[a];f!=null&&f.match&&!f.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[a]="")}Ut.debug("After sanitization",i)}},ZTe=i=>{let a=0,f=0;for(const p of i){if(a{for(const{id:a,detector:f,loader:p}of i)cDt(a,f,p)},cDt=(i,a,f)=>{DA[i]?Ut.error(`Detector with key ${i} already exists`):DA[i]={detector:a,loader:f},Ut.debug(`Detector with key ${i} added${f?" with loader":""}`)},t9e=i=>DA[i].loader,U1t=(i,a,{depth:f=2,clobber:p=!1}={})=>{const v={depth:f,clobber:p};return Array.isArray(a)&&!Array.isArray(i)?(a.forEach(m=>U1t(i,m,v)),i):Array.isArray(a)&&Array.isArray(i)?(a.forEach(m=>{i.includes(m)||i.push(m)}),i):i===void 0||f<=0?i!=null&&typeof i=="object"&&typeof a=="object"?Object.assign(i,a):a:(a!==void 0&&typeof i=="object"&&typeof a=="object"&&Object.keys(a).forEach(m=>{typeof a[m]=="object"&&(i[m]===void 0||typeof i[m]=="object")?(i[m]===void 0&&(i[m]=Array.isArray(a[m])?[]:{}),i[m]=U1t(i[m],a[m],{depth:f-1,clobber:p})):(p||typeof i[m]!="object"&&typeof a[m]!="object")&&(i[m]=a[m])}),i)},Y1=U1t;var e9e=typeof global=="object"&&global&&global.Object===Object&&global;const uDt=e9e;var n9e=typeof self=="object"&&self&&self.Object===Object&&self,r9e=uDt||n9e||Function("return this")();const Jw=r9e;var i9e=Jw.Symbol;const Y2=i9e;var lDt=Object.prototype,s9e=lDt.hasOwnProperty,a9e=lDt.toString,GN=Y2?Y2.toStringTag:void 0;function o9e(i){var a=s9e.call(i,GN),f=i[GN];try{i[GN]=void 0;var p=!0}catch{}var v=a9e.call(i);return p&&(a?i[GN]=f:delete i[GN]),v}var c9e=Object.prototype,u9e=c9e.toString;function l9e(i){return u9e.call(i)}var h9e="[object Null]",f9e="[object Undefined]",hDt=Y2?Y2.toStringTag:void 0;function tT(i){return i==null?i===void 0?f9e:h9e:hDt&&hDt in Object(i)?o9e(i):l9e(i)}function Ib(i){var a=typeof i;return i!=null&&(a=="object"||a=="function")}var d9e="[object AsyncFunction]",g9e="[object Function]",p9e="[object GeneratorFunction]",b9e="[object Proxy]";function OA(i){if(!Ib(i))return!1;var a=tT(i);return a==g9e||a==p9e||a==d9e||a==b9e}var v9e=Jw["__core-js_shared__"];const W1t=v9e;var fDt=function(){var i=/[^.]+$/.exec(W1t&&W1t.keys&&W1t.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function w9e(i){return!!fDt&&fDt in i}var m9e=Function.prototype,y9e=m9e.toString;function eT(i){if(i!=null){try{return y9e.call(i)}catch{}try{return i+""}catch{}}return""}var x9e=/[\\^$.*+?()[\]{}|]/g,k9e=/^\[object .+?Constructor\]$/,E9e=Function.prototype,T9e=Object.prototype,C9e=E9e.toString,_9e=T9e.hasOwnProperty,S9e=RegExp("^"+C9e.call(_9e).replace(x9e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function A9e(i){if(!Ib(i)||w9e(i))return!1;var a=OA(i)?S9e:k9e;return a.test(eT(i))}function L9e(i,a){return i==null?void 0:i[a]}function nT(i,a){var f=L9e(i,a);return A9e(f)?f:void 0}var M9e=nT(Object,"create");const VN=M9e;function I9e(){this.__data__=VN?VN(null):{},this.size=0}function D9e(i){var a=this.has(i)&&delete this.__data__[i];return this.size-=a?1:0,a}var O9e="__lodash_hash_undefined__",N9e=Object.prototype,P9e=N9e.hasOwnProperty;function F9e(i){var a=this.__data__;if(VN){var f=a[i];return f===O9e?void 0:f}return P9e.call(a,i)?a[i]:void 0}var B9e=Object.prototype,R9e=B9e.hasOwnProperty;function j9e(i){var a=this.__data__;return VN?a[i]!==void 0:R9e.call(a,i)}var $9e="__lodash_hash_undefined__";function z9e(i,a){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=VN&&a===void 0?$9e:a,this}function rT(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1}function K9e(i,a){var f=this.__data__,p=fW(f,i);return p<0?(++this.size,f.push([i,a])):f[p][1]=a,this}function m5(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a-1&&i%1==0&&i<=ECe}function ek(i){return i!=null&&Z1t(i.length)&&!OA(i)}function CDt(i){return l3(i)&&ek(i)}function TCe(){return!1}var _Dt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,SDt=_Dt&&typeof module=="object"&&module&&!module.nodeType&&module,CCe=SDt&&SDt.exports===_Dt,ADt=CCe?Jw.Buffer:void 0,_Ce=ADt?ADt.isBuffer:void 0,SCe=_Ce||TCe;const BA=SCe;var ACe="[object Object]",LCe=Function.prototype,MCe=Object.prototype,LDt=LCe.toString,ICe=MCe.hasOwnProperty,DCe=LDt.call(Object);function MDt(i){if(!l3(i)||tT(i)!=ACe)return!1;var a=Q1t(i);if(a===null)return!0;var f=ICe.call(a,"constructor")&&a.constructor;return typeof f=="function"&&f instanceof f&&LDt.call(f)==DCe}var OCe="[object Arguments]",NCe="[object Array]",PCe="[object Boolean]",FCe="[object Date]",BCe="[object Error]",RCe="[object Function]",jCe="[object Map]",$Ce="[object Number]",zCe="[object Object]",qCe="[object RegExp]",HCe="[object Set]",GCe="[object String]",VCe="[object WeakMap]",UCe="[object ArrayBuffer]",WCe="[object DataView]",KCe="[object Float32Array]",YCe="[object Float64Array]",XCe="[object Int8Array]",QCe="[object Int16Array]",ZCe="[object Int32Array]",JCe="[object Uint8Array]",t_e="[object Uint8ClampedArray]",e_e="[object Uint16Array]",n_e="[object Uint32Array]",gl={};gl[KCe]=gl[YCe]=gl[XCe]=gl[QCe]=gl[ZCe]=gl[JCe]=gl[t_e]=gl[e_e]=gl[n_e]=!0,gl[OCe]=gl[NCe]=gl[UCe]=gl[PCe]=gl[WCe]=gl[FCe]=gl[BCe]=gl[RCe]=gl[jCe]=gl[$Ce]=gl[zCe]=gl[qCe]=gl[HCe]=gl[GCe]=gl[VCe]=!1;function r_e(i){return l3(i)&&Z1t(i.length)&&!!gl[tT(i)]}function wW(i){return function(a){return i(a)}}var IDt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,WN=IDt&&typeof module=="object"&&module&&!module.nodeType&&module,i_e=WN&&WN.exports===IDt,J1t=i_e&&uDt.process,s_e=function(){try{var i=WN&&WN.require&&WN.require("util").types;return i||J1t&&J1t.binding&&J1t.binding("util")}catch{}}();const RA=s_e;var DDt=RA&&RA.isTypedArray,a_e=DDt?wW(DDt):r_e;const mW=a_e;function tdt(i,a){if(!(a==="constructor"&&typeof i[a]=="function")&&a!="__proto__")return i[a]}var o_e=Object.prototype,c_e=o_e.hasOwnProperty;function yW(i,a,f){var p=i[a];(!(c_e.call(i,a)&&NA(p,f))||f===void 0&&!(a in i))&&pW(i,a,f)}function KN(i,a,f,p){var v=!f;f||(f={});for(var m=-1,b=a.length;++m-1&&i%1==0&&i0){if(++a>=E_e)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}var S_e=__e(k_e);const BDt=S_e;function kW(i,a){return BDt(FDt(i,a,sT),i+"")}function YN(i,a,f){if(!Ib(f))return!1;var p=typeof a;return(p=="number"?ek(f)&&xW(a,f.length):p=="string"&&a in f)?NA(f[a],i):!1}function A_e(i){return kW(function(a,f){var p=-1,v=f.length,m=v>1?f[v-1]:void 0,b=v>2?f[2]:void 0;for(m=i.length>3&&typeof m=="function"?(v--,m):void 0,b&&YN(f[0],f[1],b)&&(m=v<3?void 0:m,v=1),a=Object(a);++pE.args);lW(b),p=Y1(p,[...b])}else p=f.args;if(!p)return;let v=hW(i,a);const m="config";return p[m]!==void 0&&(v==="flowchart-v2"&&(v="flowchart"),p[v]=p[m],delete p[m]),p},jDt=function(i,a=null){try{const f=new RegExp(`[%]{2}(?![{]${I_e.source})(?=[}][%]{2}).* +`,"ig");i=i.trim().replace(f,"").replace(/'/gm,'"'),Ut.debug(`Detecting diagram directive${a!==null?" type:"+a:""} based on the text:${i}`);let p;const v=[];for(;(p=HN.exec(i))!==null;)if(p.index===HN.lastIndex&&HN.lastIndex++,p&&!a||a&&p[1]&&p[1].match(a)||a&&p[2]&&p[2].match(a)){const m=p[1]?p[1]:p[2],b=p[3]?p[3].trim():p[4]?JSON.parse(p[4].trim()):null;v.push({type:m,args:b})}return v.length===0?{type:i,args:null}:v.length===1?v[0]:v}catch(f){return Ut.error(`ERROR: ${f.message} - Unable to parse directive type: '${a}' based on the text: '${i}'`),{type:void 0,args:null}}},O_e=function(i){return i.replace(HN,"")},N_e=function(i,a){for(const[f,p]of a.entries())if(p.match(i))return f;return-1};function X2(i,a){if(!i)return a;const f=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return M_e[f]??a}function P_e(i,a){const f=i.trim();if(f)return a.securityLevel!=="loose"?Q6(f):f}const F_e=(i,...a)=>{const f=i.split("."),p=f.length-1,v=f[p];let m=window;for(let b=0;b{f+=$Dt(v,a),a=v});const p=f/2;return edt(i,p)}function R_e(i){return i.length===1?i[0]:B_e(i)}const zDt=(i,a=2)=>{const f=Math.pow(10,a);return Math.round(i*f)/f},edt=(i,a)=>{let f,p=a;for(const v of i){if(f){const m=$Dt(v,f);if(m=1)return{x:v.x,y:v.y};if(b>0&&b<1)return{x:zDt((1-b)*f.x+b*v.x,5),y:zDt((1-b)*f.y+b*v.y,5)}}}f=v}throw new Error("Could not find a suitable point for the given distance")},j_e=(i,a,f)=>{Ut.info(`our points ${JSON.stringify(a)}`),a[0]!==f&&(a=a.reverse());const v=edt(a,25),m=i?10:5,b=Math.atan2(a[0].y-v.y,a[0].x-v.x),E={x:0,y:0};return E.x=Math.sin(b)*m+(a[0].x+v.x)/2,E.y=-Math.cos(b)*m+(a[0].y+v.y)/2,E};function $_e(i,a,f){const p=structuredClone(f);Ut.info("our points",p),a!=="start_left"&&a!=="start_right"&&p.reverse();const v=25+i,m=edt(p,v),b=10+i*.5,E=Math.atan2(p[0].y-m.y,p[0].x-m.x),_={x:0,y:0};return a==="start_left"?(_.x=Math.sin(E+Math.PI)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E+Math.PI)*b+(p[0].y+m.y)/2):a==="end_right"?(_.x=Math.sin(E-Math.PI)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E-Math.PI)*b+(p[0].y+m.y)/2-5):a==="end_left"?(_.x=Math.sin(E)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2-5):(_.x=Math.sin(E)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2),_}function em(i){let a="",f="";for(const p of i)p!==void 0&&(p.startsWith("color:")||p.startsWith("text-align:")?f=f+p+";":a=a+p+";");return{style:a,labelStyle:f}}let qDt=0;const HDt=()=>(qDt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+qDt);function z_e(i){let a="";const f="0123456789abcdef",p=f.length;for(let v=0;vz_e(i.length),q_e=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},H_e=function(i,a){const f=a.text.replace(Yr.lineBreakRegex," "),[,p]=$A(a.fontSize),v=i.append("text");v.attr("x",a.x),v.attr("y",a.y),v.style("text-anchor",a.anchor),v.style("font-family",a.fontFamily),v.style("font-size",p),v.style("font-weight",a.fontWeight),v.attr("fill",a.fill),a.class!==void 0&&v.attr("class",a.class);const m=v.append("tspan");return m.attr("x",a.x+a.textMargin*2),m.attr("fill",a.fill),m.text(f),v},VDt=PA((i,a,f)=>{if(!i||(f=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},f),Yr.lineBreakRegex.test(i)))return i;const p=i.split(" "),v=[];let m="";return p.forEach((b,E)=>{const _=h3(`${b} `,f),L=h3(m,f);if(_>a){const{hyphenatedStrings:j,remainingWord:R}=G_e(b,a,"-",f);v.push(m,...j),m=R}else L+_>=a?(v.push(m),m=b):m=[m,b].filter(Boolean).join(" ");E+1===p.length&&v.push(m)}),v.filter(b=>b!=="").join(f.joinWith)},(i,a,f)=>`${i}${a}${f.fontSize}${f.fontWeight}${f.fontFamily}${f.joinWith}`),G_e=PA((i,a,f="-",p)=>{p=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},p);const v=[...i],m=[];let b="";return v.forEach((E,_)=>{const L=`${b}${E}`;if(h3(L,p)>=a){const B=_+1,j=v.length===B,R=`${L}${f}`;m.push(j?L:R),b=""}else b=L}),{hyphenatedStrings:m,remainingWord:b}},(i,a,f="-",p)=>`${i}${a}${f}${p.fontSize}${p.fontWeight}${p.fontFamily}`);function ndt(i,a){return rdt(i,a).height}function h3(i,a){return rdt(i,a).width}const rdt=PA((i,a)=>{const{fontSize:f=12,fontFamily:p="Arial",fontWeight:v=400}=a;if(!i)return{width:0,height:0};const[,m]=$A(f),b=["sans-serif",p],E=i.split(Yr.lineBreakRegex),_=[],L=yr("body");if(!L.remove)return{width:0,height:0,lineHeight:0};const N=L.append("svg");for(const j of b){let R=0;const z={width:0,height:0,lineHeight:0};for(const K of E){const it=q_e();it.text=K||RDt;const st=H_e(N,it).style("font-size",m).style("font-weight",v).style("font-family",j),ut=(st._groups||st)[0][0].getBBox();if(ut.width===0&&ut.height===0)throw new Error("svg element not in render tree");z.width=Math.round(Math.max(z.width,ut.width)),R=Math.round(ut.height),z.height+=R,z.lineHeight=Math.round(Math.max(z.lineHeight,R))}_.push(z)}N.remove();const B=isNaN(_[1].height)||isNaN(_[1].width)||isNaN(_[1].lineHeight)||_[0].height>_[1].height&&_[0].width>_[1].width&&_[0].lineHeight>_[1].lineHeight?0:1;return _[B]},(i,a)=>`${i}${a.fontSize}${a.fontWeight}${a.fontFamily}`);class V_e{constructor(a=!1,f){this.count=0,this.count=f?f.length:0,this.next=a?()=>this.count++:()=>Date.now()}}let TW;const U_e=function(i){return TW=TW||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),TW.innerHTML=i,unescape(TW.textContent)};function UDt(i){return"str"in i}const W_e=(i,a,f,p)=>{var m;if(!p)return;const v=(m=i.node())==null?void 0:m.getBBox();v&&i.append("text").text(p).attr("x",v.x+v.width/2).attr("y",-f).attr("class",a)},$A=i=>{if(typeof i=="number")return[i,i+"px"];const a=parseInt(i??"",10);return Number.isNaN(a)?[void 0,void 0]:i===String(a)?[a,i+"px"]:[a,i]};function idt(i,a){return EW({},i,a)}const $a={assignWithDepth:Y1,wrapLabel:VDt,calculateTextHeight:ndt,calculateTextWidth:h3,calculateTextDimensions:rdt,cleanAndMerge:idt,detectInit:D_e,detectDirective:jDt,isSubstringInArray:N_e,interpolateToCurve:X2,calcLabelPosition:R_e,calcCardinalityPosition:j_e,calcTerminalLabelPosition:$_e,formatUrl:P_e,getStylesFromArray:em,generateId:HDt,random:GDt,runFunc:F_e,entityDecode:U_e,insertTitle:W_e,parseFontSize:$A,InitIDGenerator:V_e};var WDt="comm",KDt="rule",YDt="decl",K_e="@import",Y_e="@keyframes",X_e=Math.abs,sdt=String.fromCharCode;function XDt(i){return i.trim()}function adt(i,a,f){return i.replace(a,f)}function Q_e(i,a){return i.indexOf(a)}function XN(i,a){return i.charCodeAt(a)|0}function QN(i,a,f){return i.slice(a,f)}function nk(i){return i.length}function QDt(i){return i.length}function CW(i,a){return a.push(i),i}var _W=1,zA=1,ZDt=0,Q2=0,If=0,qA="";function odt(i,a,f,p,v,m,b){return{value:i,root:a,parent:f,type:p,props:v,children:m,line:_W,column:zA,length:b,return:""}}function Z_e(){return If}function J_e(){return If=Q2>0?XN(qA,--Q2):0,zA--,If===10&&(zA=1,_W--),If}function nm(){return If=Q22||cdt(If)>3?"":" "}function rSe(i,a){for(;--a&&nm()&&!(If<48||If>102||If>57&&If<65||If>70&&If<97););return AW(i,SW()+(a<6&&aT()==32&&nm()==32))}function ldt(i){for(;nm();)switch(If){case i:return Q2;case 34:case 39:i!==34&&i!==39&&ldt(If);break;case 40:i===41&&ldt(i);break;case 92:nm();break}return Q2}function iSe(i,a){for(;nm()&&i+If!==47+10;)if(i+If===42+42&&aT()===47)break;return"/*"+AW(a,Q2-1)+"*"+sdt(i===47?i:nm())}function sSe(i){for(;!cdt(aT());)nm();return AW(i,Q2)}function aSe(i){return eSe(LW("",null,null,null,[""],i=tSe(i),0,[0],i))}function LW(i,a,f,p,v,m,b,E,_){for(var L=0,N=0,B=b,j=0,R=0,z=0,K=1,it=1,st=1,ut=0,bt="",mt=v,yt=m,dt=p,ht=bt;it;)switch(z=ut,ut=nm()){case 40:if(z!=108&&XN(ht,B-1)==58){Q_e(ht+=adt(udt(ut),"&","&\f"),"&\f")!=-1&&(st=-1);break}case 34:case 39:case 91:ht+=udt(ut);break;case 9:case 10:case 13:case 32:ht+=nSe(z);break;case 92:ht+=rSe(SW()-1,7);continue;case 47:switch(aT()){case 42:case 47:CW(oSe(iSe(nm(),SW()),a,f),_);break;default:ht+="/"}break;case 123*K:E[L++]=nk(ht)*st;case 125*K:case 59:case 0:switch(ut){case 0:case 125:it=0;case 59+N:R>0&&nk(ht)-B&&CW(R>32?tOt(ht+";",p,f,B-1):tOt(adt(ht," ","")+";",p,f,B-2),_);break;case 59:ht+=";";default:if(CW(dt=JDt(ht,a,f,L,N,v,E,bt,mt=[],yt=[],B),m),ut===123)if(N===0)LW(ht,a,dt,dt,mt,m,B,E,yt);else switch(j===99&&XN(ht,3)===110?100:j){case 100:case 109:case 115:LW(i,dt,dt,p&&CW(JDt(i,dt,dt,0,0,v,E,bt,v,mt=[],B),yt),v,yt,B,E,p?mt:yt);break;default:LW(ht,dt,dt,dt,[""],yt,0,E,yt)}}L=N=R=0,K=st=1,bt=ht="",B=b;break;case 58:B=1+nk(ht),R=z;default:if(K<1){if(ut==123)--K;else if(ut==125&&K++==0&&J_e()==125)continue}switch(ht+=sdt(ut),ut*K){case 38:st=N>0?1:(ht+="\f",-1);break;case 44:E[L++]=(nk(ht)-1)*st,st=1;break;case 64:aT()===45&&(ht+=udt(nm())),j=aT(),N=B=nk(bt=ht+=sSe(SW())),ut++;break;case 45:z===45&&nk(ht)==2&&(K=0)}}return m}function JDt(i,a,f,p,v,m,b,E,_,L,N){for(var B=v-1,j=v===0?m:[""],R=QDt(j),z=0,K=0,it=0;z0?j[st]+" "+ut:adt(ut,/&\f/g,j[st])))&&(_[it++]=bt);return odt(i,a,f,v===0?KDt:E,_,L,N)}function oSe(i,a,f){return odt(i,a,f,WDt,sdt(Z_e()),QN(i,2,-2),0)}function tOt(i,a,f,p){return odt(i,a,f,YDt,QN(i,0,p),QN(i,p+1,-1),p)}function hdt(i,a){for(var f="",p=QDt(i),v=0;v{let f=Y1({},i),p={};for(const v of a)sOt(v),p=Y1(p,v);if(f=Y1(f,p),p.theme&&p.theme in w5){const v=Y1({},nOt),m=Y1(v.themeVariables||{},p.themeVariables);f.theme&&f.theme in w5&&(f.themeVariables=w5[f.theme].getThemeVariables(m))}return ZN=f,oOt(ZN),ZN},uSe=i=>(sp=Y1({},oT),sp=Y1(sp,i),i.theme&&w5[i.theme]&&(sp.themeVariables=w5[i.theme].getThemeVariables(i.themeVariables)),MW(sp,HA),sp),lSe=i=>{nOt=Y1({},i)},hSe=i=>(sp=Y1(sp,i),MW(sp,HA),sp),rOt=()=>Y1({},sp),iOt=i=>(oOt(i),Y1(ZN,i),Le()),Le=()=>Y1({},ZN),sOt=i=>{i&&(["secure",...sp.secure??[]].forEach(a=>{Object.hasOwn(i,a)&&(Ut.debug(`Denied attempt to modify a secure key ${a}`,i[a]),delete i[a])}),Object.keys(i).forEach(a=>{a.startsWith("__")&&delete i[a]}),Object.keys(i).forEach(a=>{typeof i[a]=="string"&&(i[a].includes("<")||i[a].includes(">")||i[a].includes("url(data:"))&&delete i[a],typeof i[a]=="object"&&sOt(i[a])}))},fSe=i=>{lW(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),HA.push(i),MW(sp,HA)},IW=(i=sp)=>{HA=[],MW(i,HA)},dSe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},aOt={},gSe=i=>{aOt[i]||(Ut.warn(dSe[i]),aOt[i]=!0)},oOt=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&gSe("LAZY_LOAD_DEPRECATED")},cOt="c4",pSe={id:cOt,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>IIe);return{id:cOt,diagram:i}}},uOt="flowchart",bSe={id:uOt,detector:(i,a)=>{var f,p;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-wrapper"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>O$e);return{id:uOt,diagram:i}}},lOt="flowchart-v2",vSe={id:lOt,detector:(i,a)=>{var f,p,v;return((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="dagre-d3"||((p=a==null?void 0:a.flowchart)==null?void 0:p.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((v=a==null?void 0:a.flowchart)==null?void 0:v.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>N$e);return{id:lOt,diagram:i}}},hOt="er",wSe={id:hOt,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aze);return{id:hOt,diagram:i}}},fOt="gitGraph",mSe={id:fOt,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ize);return{id:fOt,diagram:i}}},dOt="gantt",ySe={id:dOt,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>yqe);return{id:dOt,diagram:i}}},gOt="info",xSe={id:gOt,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kqe);return{id:gOt,diagram:i}}},pOt="pie",kSe={id:pOt,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Aqe);return{id:pOt,diagram:i}}},bOt="quadrantChart",ESe={id:bOt,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Gqe);return{id:bOt,diagram:i}}},vOt="requirement",TSe={id:vOt,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>tHe);return{id:vOt,diagram:i}}},wOt="sequence",CSe={id:wOt,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>sGe);return{id:wOt,diagram:i}}},mOt="class",_Se={id:mOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>LGe);return{id:mOt,diagram:i}}},yOt="classDiagram",SSe={id:yOt,detector:(i,a)=>{var f;return/^\s*classDiagram/.test(i)&&((f=a==null?void 0:a.class)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>PGe);return{id:yOt,diagram:i}}},xOt="state",ASe={id:xOt,detector:(i,a)=>{var f;return((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kVe);return{id:xOt,diagram:i}}},kOt="stateDiagram",LSe={id:kOt,detector:(i,a)=>{var f;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((f=a==null?void 0:a.state)==null?void 0:f.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zVe);return{id:kOt,diagram:i}}},EOt="journey",MSe={id:EOt,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>aUe);return{id:EOt,diagram:i}}},fdt=i=>{var v;const{securityLevel:a}=Le();let f=yr("body");if(a==="sandbox"){const b=((v=yr(`#i${i}`).node())==null?void 0:v.contentDocument)??document;f=yr(b.body)}return f.select(`#${i}`)},ISe=function(i,a){for(let f of a)i.attr(f[0],f[1])},DSe=function(i,a,f){let p=new Map;return f?(p.set("width","100%"),p.set("style",`max-width: ${a}px;`)):(p.set("height",i),p.set("width",a)),p},og=function(i,a,f,p){const v=DSe(a,f,p);ISe(i,v)},cT=function(i,a,f,p){const v=a.node().getBBox(),m=v.width,b=v.height;Ut.info(`SVG bounds: ${m}x${b}`,v);let E=0,_=0;Ut.info(`Graph bounds: ${E}x${_}`,i),E=m+f*2,_=b+f*2,Ut.info(`Calculated bounds: ${E}x${_}`),og(a,_,E,p);const L=`${v.x-f} ${v.y-f} ${v.width+2*f} ${v.height+2*f}`;a.attr("viewBox",L)},TOt={draw:(i,a,f)=>{Ut.debug(`renering svg for syntax error +`);const p=fdt(a);p.attr("viewBox","0 0 2412 512"),og(p,100,512,!0);const v=p.append("g");v.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),v.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),v.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),v.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),v.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),v.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),v.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),v.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${f}`)}},OSe=TOt,NSe={db:{},renderer:TOt,parser:{parser:{yy:{}},parse:()=>{}}},COt="flowchart-elk",PSe={id:COt,detector:(i,a)=>{var f;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kUe);return{id:COt,diagram:i}}},_Ot="timeline",FSe={id:_Ot,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zUe);return{id:_Ot,diagram:i}}},SOt="mindmap",BSe={id:SOt,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>vWe);return{id:SOt,diagram:i}}},AOt="sankey",RSe={id:AOt,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>WWe);return{id:AOt,diagram:i}}},DW={},jSe=(i,a,f)=>{let p="";return i in DW&&DW[i]?p=DW[i](f):Ut.warn(`No theme found for ${i}`),` & { font-family: ${f.fontFamily}; font-size: ${f.fontSize}; fill: ${f.textColor} @@ -57,62 +56,61 @@ ${p} ${a} -`},NSe=(i,a)=>{a!==void 0&&(NW[i]=a)},PSe=OSe;let hdt="",PW="",fdt="";const ddt=i=>v0(i,De()),cg=function(){hdt="",fdt="",PW=""},m0=function(i){hdt=ddt(i).replace(/^\s+/g,"")},ug=function(){return hdt||PW},lg=function(i){fdt=ddt(i).replace(/\n\s+/g,` -`)},hg=function(){return fdt},Nb=function(i){PW=ddt(i)},hp=function(){return PW},COt=Object.freeze(Object.defineProperty({__proto__:null,clear:cg,default:{getAccTitle:ug,setAccTitle:m0,getDiagramTitle:hp,setDiagramTitle:Nb,getAccDescription:hg,setAccDescription:lg,clear:cg},getAccDescription:hg,getAccTitle:ug,getDiagramTitle:hp,setAccDescription:lg,setAccTitle:m0,setDiagramTitle:Nb},Symbol.toStringTag,{value:"Module"}));let a9={};const FW=function(i,a,f,p){Wt.debug("parseDirective is being called",a,f,p);try{if(a!==void 0)switch(a=a.trim(),f){case"open_directive":a9={};break;case"type_directive":if(!a9)throw new Error("currentDirective is undefined");a9.type=a.toLowerCase();break;case"arg_directive":if(!a9)throw new Error("currentDirective is undefined");a9.args=JSON.parse(a);break;case"close_directive":FSe(i,a9,p),a9=void 0;break}}catch(v){Wt.error(`Error while rendering sequenceDiagram directive: ${a} jison context: ${f}`),Wt.error(v.message)}},FSe=function(i,a,f){switch(Wt.info(`Directive type=${a.type} with args:`,a.args),a.type){case"init":case"initialize":{["config"].forEach(p=>{a.args[p]!==void 0&&(f==="flowchart-v2"&&(f="flowchart"),a.args[f]=a.args[p],delete a.args[p])}),IW(a.args);break}case"wrap":case"nowrap":i&&i.setWrap&&i.setWrap(a.type==="wrap");break;case"themeCss":Wt.warn("themeCss encountered");break;default:Wt.warn(`Unhandled directive: source: '%%{${a.type}: ${JSON.stringify(a.args?a.args:{})}}%%`,a);break}},BSe=Wt,RSe=zft,JN=De,jSe=i=>v0(i,JN()),SOt=s9,$Se=()=>COt,zSe=(i,a,f,p)=>FW(i,a,f,p),BW={},RW=(i,a,f)=>{if(BW[i])throw new Error(`Diagram ${i} already registered.`);BW[i]=a,f&&sIt(i,f),NSe(i,a.styles),a.injectUtils&&a.injectUtils(BSe,RSe,JN,jSe,SOt,$Se(),zSe)},gdt=i=>{if(i in BW)return BW[i];throw new qSe(i)};class qSe extends Error{constructor(a){super(`Diagram ${a} not found.`)}}let AOt=!1;const pdt=()=>{AOt||(AOt=!0,RW("error",ASe,i=>i.toLowerCase().trim()==="error"),RW("---",{db:{clear:()=>{}},styles:{},renderer:{},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),iIt(uSe,xSe,ySe,fSe,gSe,pSe,bSe,wSe,mSe,LSe,hSe,lSe,DSe,MSe,dSe,ESe,kSe,TSe,vSe,ISe))};/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function LOt(i){return typeof i>"u"||i===null}function HSe(i){return typeof i=="object"&&i!==null}function VSe(i){return Array.isArray(i)?i:LOt(i)?[]:[i]}function GSe(i,a){var f,p,v,m;if(a)for(m=Object.keys(a),f=0,p=m.length;f{a!==void 0&&(DW[i]=a)},zSe=jSe;let ddt="",gdt="",pdt="";const bdt=i=>Dd(i,Le()),ap=()=>{ddt="",pdt="",gdt=""},cg=i=>{ddt=bdt(i).replace(/^\s+/g,"")},op=()=>ddt,cp=i=>{pdt=bdt(i).replace(/\n\s+/g,` +`)},up=()=>pdt,Z2=i=>{gdt=bdt(i)},Db=()=>gdt,LOt=Object.freeze(Object.defineProperty({__proto__:null,clear:ap,getAccDescription:up,getAccTitle:op,getDiagramTitle:Db,setAccDescription:cp,setAccTitle:cg,setDiagramTitle:Z2},Symbol.toStringTag,{value:"Module"})),qSe=Ut,HSe=jft,JN=Le,GSe=i=>Dd(i,JN()),MOt=cT,VSe=()=>LOt,OW={},NW=(i,a,f)=>{var p;if(OW[i])throw new Error(`Diagram ${i} already registered.`);OW[i]=a,f&&cDt(i,f),$Se(i,a.styles),(p=a.injectUtils)==null||p.call(a,qSe,HSe,JN,GSe,MOt,VSe(),()=>{})},vdt=i=>{if(i in OW)return OW[i];throw new USe(i)};class USe extends Error{constructor(a){super(`Diagram ${a} not found.`)}}let IOt=!1;const wdt=()=>{IOt||(IOt=!0,NW("error",NSe,i=>i.toLowerCase().trim()==="error"),NW("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),oDt(pSe,SSe,_Se,wSe,ySe,xSe,kSe,TSe,CSe,PSe,vSe,bSe,BSe,FSe,mSe,LSe,ASe,MSe,ESe,RSe))};class DOt{constructor(a,f={}){this.text=a,this.metadata=f,this.type="graph",this.text+=` +`;const p=Le();try{this.type=hW(a,p)}catch(m){this.type="error",this.detectError=m}const v=vdt(this.type);Ut.debug("Type "+this.type),this.db=v.db,this.renderer=v.renderer,this.parser=v.parser,this.parser.parser.yy=this.db,this.init=v.init,this.parse()}parse(){var f,p,v,m,b;if(this.detectError)throw this.detectError;(p=(f=this.db).clear)==null||p.call(f);const a=Le();(v=this.init)==null||v.call(this,a),this.metadata.title&&((b=(m=this.db).setDiagramTitle)==null||b.call(m,this.metadata.title)),this.parser.parse(this.text)}async render(a,f){await this.renderer.draw(this.text,a,f,this)}getParser(){return this.parser}getType(){return this.type}}const mdt=async(i,a={})=>{const f=hW(i,Le());try{vdt(f)}catch{const v=t9e(f);if(!v)throw new aDt(`Diagram ${f} not found.`);const{id:m,diagram:b}=await v();NW(m,b)}return new DOt(i,a)};let ydt=[];const WSe=i=>{ydt.push(i)},KSe=()=>{ydt.forEach(i=>{i()}),ydt=[]};var YSe=xDt(Object.keys,Object);const XSe=YSe;var QSe=Object.prototype,ZSe=QSe.hasOwnProperty;function OOt(i){if(!vW(i))return XSe(i);var a=[];for(var f in Object(i))ZSe.call(i,f)&&f!="constructor"&&a.push(f);return a}var JSe=nT(Jw,"DataView");const xdt=JSe;var tAe=nT(Jw,"Promise");const kdt=tAe;var eAe=nT(Jw,"Set");const GA=eAe;var nAe=nT(Jw,"WeakMap");const Edt=nAe;var NOt="[object Map]",rAe="[object Object]",POt="[object Promise]",FOt="[object Set]",BOt="[object WeakMap]",ROt="[object DataView]",iAe=eT(xdt),sAe=eT(UN),aAe=eT(kdt),oAe=eT(GA),cAe=eT(Edt),uT=tT;(xdt&&uT(new xdt(new ArrayBuffer(1)))!=ROt||UN&&uT(new UN)!=NOt||kdt&&uT(kdt.resolve())!=POt||GA&&uT(new GA)!=FOt||Edt&&uT(new Edt)!=BOt)&&(uT=function(i){var a=tT(i),f=a==rAe?i.constructor:void 0,p=f?eT(f):"";if(p)switch(p){case iAe:return ROt;case sAe:return NOt;case aAe:return POt;case oAe:return FOt;case cAe:return BOt}return a});const VA=uT;var uAe="[object Map]",lAe="[object Set]",hAe=Object.prototype,fAe=hAe.hasOwnProperty;function tP(i){if(i==null)return!0;if(ek(i)&&(Mf(i)||typeof i=="string"||typeof i.splice=="function"||BA(i)||mW(i)||FA(i)))return!i.length;var a=VA(i);if(a==uAe||a==lAe)return!i.size;if(vW(i))return!OOt(i).length;for(var f in i)if(fAe.call(i,f))return!1;return!0}const dAe="graphics-document document";function gAe(i,a){i.attr("role",dAe),a!==""&&i.attr("aria-roledescription",a)}function pAe(i,a,f,p){if(i.insert!==void 0){if(f){const v=`chart-desc-${p}`;i.attr("aria-describedby",v),i.insert("desc",":first-child").attr("id",v).text(f)}if(a){const v=`chart-title-${p}`;i.attr("aria-labelledby",v),i.insert("title",":first-child").attr("id",v).text(a)}}}const bAe=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function jOt(i){return typeof i>"u"||i===null}function vAe(i){return typeof i=="object"&&i!==null}function wAe(i){return Array.isArray(i)?i:jOt(i)?[]:[i]}function mAe(i,a){var f,p,v,m;if(a)for(m=Object.keys(a),f=0,p=m.length;fE&&(m=" ... ",a=p-E+m.length),f-p>E&&(b=" ...",f=p+E-b.length),{str:m+i.slice(a,f).replace(/\t/g,"→")+b,pos:p-a+m.length}}function vdt(i,a){return fg.repeat(" ",a-i.length)+i}function tAe(i,a){if(a=Object.create(a||null),!i.buffer)return null;a.maxLength||(a.maxLength=79),typeof a.indent!="number"&&(a.indent=1),typeof a.linesBefore!="number"&&(a.linesBefore=3),typeof a.linesAfter!="number"&&(a.linesAfter=2);for(var f=/\r?\n|\r|\0/g,p=[0],v=[],m,b=-1;m=f.exec(i.buffer);)v.push(m.index),p.push(m.index+m[0].length),i.position<=m.index&&b<0&&(b=p.length-2);b<0&&(b=p.length-1);var E="",C,A,P=Math.min(i.line+a.linesAfter,v.length).toString().length,F=a.maxLength-(a.indent+P+3);for(C=1;C<=a.linesBefore&&!(b-C<0);C++)A=bdt(i.buffer,p[b-C],v[b-C],i.position-(p[b]-p[b-C]),F),E=fg.repeat(" ",a.indent)+vdt((i.line-C+1).toString(),P)+" | "+A.str+` -`+E;for(A=bdt(i.buffer,p[b],v[b],i.position,F),E+=fg.repeat(" ",a.indent)+vdt((i.line+1).toString(),P)+" | "+A.str+` -`,E+=fg.repeat("-",a.indent+P+3+A.pos)+`^ -`,C=1;C<=a.linesAfter&&!(b+C>=v.length);C++)A=bdt(i.buffer,p[b+C],v[b+C],i.position-(p[b]-p[b+C]),F),E+=fg.repeat(" ",a.indent)+vdt((i.line+C+1).toString(),P)+" | "+A.str+` -`;return E.replace(/\n$/,"")}var eAe=tAe,nAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],rAe=["scalar","sequence","mapping"];function iAe(i){var a={};return i!==null&&Object.keys(i).forEach(function(f){i[f].forEach(function(p){a[String(p)]=f})}),a}function sAe(i,a){if(a=a||{},Object.keys(a).forEach(function(f){if(nAe.indexOf(f)===-1)throw new k5('Unknown option "'+f+'" is met in definition of "'+i+'" YAML type.')}),this.options=a,this.tag=i,this.kind=a.kind||null,this.resolve=a.resolve||function(){return!0},this.construct=a.construct||function(f){return f},this.instanceOf=a.instanceOf||null,this.predicate=a.predicate||null,this.represent=a.represent||null,this.representName=a.representName||null,this.defaultStyle=a.defaultStyle||null,this.multi=a.multi||!1,this.styleAliases=iAe(a.styleAliases||null),rAe.indexOf(this.kind)===-1)throw new k5('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var y0=sAe;function DOt(i,a){var f=[];return i[a].forEach(function(p){var v=f.length;f.forEach(function(m,b){m.tag===p.tag&&m.kind===p.kind&&m.multi===p.multi&&(v=b)}),f[v]=p}),f}function aAe(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},a,f;function p(v){v.multi?(i.multi[v.kind].push(v),i.multi.fallback.push(v)):i[v.kind][v.tag]=i.fallback[v.tag]=v}for(a=0,f=arguments.length;a=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),SAe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function AAe(i){return!(i===null||!SAe.test(i)||i[i.length-1]==="_")}function LAe(i){var a,f;return a=i.replace(/_/g,"").toLowerCase(),f=a[0]==="-"?-1:1,"+-".indexOf(a[0])>=0&&(a=a.slice(1)),a===".inf"?f===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:a===".nan"?NaN:f*parseFloat(a,10)}var MAe=/^[-+]?[0-9]+e/;function DAe(i,a){var f;if(isNaN(i))switch(a){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(a){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(a){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(fg.isNegativeZero(i))return"-0.0";return f=i.toString(10),MAe.test(f)?f.replace("e",".e"):f}function IAe(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||fg.isNegativeZero(i))}var OAe=new y0("tag:yaml.org,2002:float",{kind:"scalar",resolve:AAe,construct:LAe,predicate:IAe,represent:DAe,defaultStyle:"lowercase"}),IOt=hAe.extend({implicit:[pAe,mAe,CAe,OAe]}),NAe=IOt,OOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),NOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function PAe(i){return i===null?!1:OOt.exec(i)!==null||NOt.exec(i)!==null}function FAe(i){var a,f,p,v,m,b,E,C=0,A=null,P,F,j;if(a=OOt.exec(i),a===null&&(a=NOt.exec(i)),a===null)throw new Error("Date resolve error");if(f=+a[1],p=+a[2]-1,v=+a[3],!a[4])return new Date(Date.UTC(f,p,v));if(m=+a[4],b=+a[5],E=+a[6],a[7]){for(C=a[7].slice(0,3);C.length<3;)C+="0";C=+C}return a[9]&&(P=+a[10],F=+(a[11]||0),A=(P*60+F)*6e4,a[9]==="-"&&(A=-A)),j=new Date(Date.UTC(f,p,v,m,b,E,C)),A&&j.setTime(j.getTime()-A),j}function BAe(i){return i.toISOString()}var RAe=new y0("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:PAe,construct:FAe,instanceOf:Date,represent:BAe});function jAe(i){return i==="<<"||i===null}var $Ae=new y0("tag:yaml.org,2002:merge",{kind:"scalar",resolve:jAe}),mdt=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function zAe(i){if(i===null)return!1;var a,f,p=0,v=i.length,m=mdt;for(f=0;f64)){if(a<0)return!1;p+=6}return p%8===0}function qAe(i){var a,f,p=i.replace(/[\r\n=]/g,""),v=p.length,m=mdt,b=0,E=[];for(a=0;a>16&255),E.push(b>>8&255),E.push(b&255)),b=b<<6|m.indexOf(p.charAt(a));return f=v%4*6,f===0?(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)):f===18?(E.push(b>>10&255),E.push(b>>2&255)):f===12&&E.push(b>>4&255),new Uint8Array(E)}function HAe(i){var a="",f=0,p,v,m=i.length,b=mdt;for(p=0;p>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]),f=(f<<8)+i[p];return v=m%3,v===0?(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]):v===2?(a+=b[f>>10&63],a+=b[f>>4&63],a+=b[f<<2&63],a+=b[64]):v===1&&(a+=b[f>>2&63],a+=b[f<<4&63],a+=b[64],a+=b[64]),a}function VAe(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var GAe=new y0("tag:yaml.org,2002:binary",{kind:"scalar",resolve:zAe,construct:qAe,predicate:VAe,represent:HAe}),UAe=Object.prototype.hasOwnProperty,WAe=Object.prototype.toString;function KAe(i){if(i===null)return!0;var a=[],f,p,v,m,b,E=i;for(f=0,p=E.length;f>10)+55296,(i-65536&1023)+56320)}for(var qOt=new Array(256),HOt=new Array(256),UA=0;UA<256;UA++)qOt[UA]=zOt(UA)?1:0,HOt[UA]=zOt(UA);function gLe(i,a){this.input=i,this.filename=a.filename||null,this.schema=a.schema||sLe,this.onWarning=a.onWarning||null,this.legacy=a.legacy||!1,this.json=a.json||!1,this.listener=a.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function VOt(i,a){var f={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return f.snippet=eAe(f),new k5(a,f)}function Fs(i,a){throw VOt(i,a)}function zW(i,a){i.onWarning&&i.onWarning.call(null,VOt(i,a))}var GOt={YAML:function(a,f,p){var v,m,b;a.version!==null&&Fs(a,"duplication of %YAML directive"),p.length!==1&&Fs(a,"YAML directive accepts exactly one argument"),v=/^([0-9]+)\.([0-9]+)$/.exec(p[0]),v===null&&Fs(a,"ill-formed argument of the YAML directive"),m=parseInt(v[1],10),b=parseInt(v[2],10),m!==1&&Fs(a,"unacceptable YAML version of the document"),a.version=p[0],a.checkLineBreaks=b<2,b!==1&&b!==2&&zW(a,"unsupported YAML version of the document")},TAG:function(a,f,p){var v,m;p.length!==2&&Fs(a,"TAG directive accepts exactly two arguments"),v=p[0],m=p[1],ROt.test(v)||Fs(a,"ill-formed tag handle (first argument) of the TAG directive"),nk.call(a.tagMap,v)&&Fs(a,'there is a previously declared suffix for "'+v+'" tag handle'),jOt.test(m)||Fs(a,"ill-formed tag prefix (second argument) of the TAG directive");try{m=decodeURIComponent(m)}catch{Fs(a,"tag prefix is malformed: "+m)}a.tagMap[v]=m}};function rk(i,a,f,p){var v,m,b,E;if(a1&&(i.result+=fg.repeat(` -`,a-1))}function pLe(i,a,f){var p,v,m,b,E,C,A,P,F=i.kind,j=i.result,R;if(R=i.input.charCodeAt(i.position),fp(R)||GA(R)||R===35||R===38||R===42||R===33||R===124||R===62||R===39||R===34||R===37||R===64||R===96||(R===63||R===45)&&(v=i.input.charCodeAt(i.position+1),fp(v)||f&&GA(v)))return!1;for(i.kind="scalar",i.result="",m=b=i.position,E=!1;R!==0;){if(R===58){if(v=i.input.charCodeAt(i.position+1),fp(v)||f&&GA(v))break}else if(R===35){if(p=i.input.charCodeAt(i.position-1),fp(p))break}else{if(i.position===i.lineStart&&qW(i)||f&&GA(R))break;if(f3(R))if(C=i.line,A=i.lineStart,P=i.lineIndent,Pf(i,!1,-1),i.lineIndent>=a){E=!0,R=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=C,i.lineStart=A,i.lineIndent=P;break}}E&&(rk(i,m,b,!1),kdt(i,i.line-C),m=b=i.position,E=!1),o9(R)||(b=i.position+1),R=i.input.charCodeAt(++i.position)}return rk(i,m,b,!1),i.result?!0:(i.kind=F,i.result=j,!1)}function bLe(i,a){var f,p,v;if(f=i.input.charCodeAt(i.position),f!==39)return!1;for(i.kind="scalar",i.result="",i.position++,p=v=i.position;(f=i.input.charCodeAt(i.position))!==0;)if(f===39)if(rk(i,p,i.position,!0),f=i.input.charCodeAt(++i.position),f===39)p=i.position,i.position++,v=i.position;else return!0;else f3(f)?(rk(i,p,v,!0),kdt(i,Pf(i,!1,a)),p=v=i.position):i.position===i.lineStart&&qW(i)?Fs(i,"unexpected end of the document within a single quoted scalar"):(i.position++,v=i.position);Fs(i,"unexpected end of the stream within a single quoted scalar")}function vLe(i,a){var f,p,v,m,b,E;if(E=i.input.charCodeAt(i.position),E!==34)return!1;for(i.kind="scalar",i.result="",i.position++,f=p=i.position;(E=i.input.charCodeAt(i.position))!==0;){if(E===34)return rk(i,f,i.position,!0),i.position++,!0;if(E===92){if(rk(i,f,i.position,!0),E=i.input.charCodeAt(++i.position),f3(E))Pf(i,!1,a);else if(E<256&&qOt[E])i.result+=HOt[E],i.position++;else if((b=hLe(E))>0){for(v=b,m=0;v>0;v--)E=i.input.charCodeAt(++i.position),(b=lLe(E))>=0?m=(m<<4)+b:Fs(i,"expected hexadecimal character");i.result+=dLe(m),i.position++}else Fs(i,"unknown escape sequence");f=p=i.position}else f3(E)?(rk(i,f,p,!0),kdt(i,Pf(i,!1,a)),f=p=i.position):i.position===i.lineStart&&qW(i)?Fs(i,"unexpected end of the document within a double quoted scalar"):(i.position++,p=i.position)}Fs(i,"unexpected end of the stream within a double quoted scalar")}function wLe(i,a){var f=!0,p,v,m,b=i.tag,E,C=i.anchor,A,P,F,j,R,H=Object.create(null),Y,rt,J,it;if(it=i.input.charCodeAt(i.position),it===91)P=93,R=!1,E=[];else if(it===123)P=125,R=!0,E={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=E),it=i.input.charCodeAt(++i.position);it!==0;){if(Pf(i,!0,a),it=i.input.charCodeAt(i.position),it===P)return i.position++,i.tag=b,i.anchor=C,i.kind=R?"mapping":"sequence",i.result=E,!0;f?it===44&&Fs(i,"expected the node content, but found ','"):Fs(i,"missed comma between flow collection entries"),rt=Y=J=null,F=j=!1,it===63&&(A=i.input.charCodeAt(i.position+1),fp(A)&&(F=j=!0,i.position++,Pf(i,!0,a))),p=i.line,v=i.lineStart,m=i.position,KA(i,a,jW,!1,!0),rt=i.tag,Y=i.result,Pf(i,!0,a),it=i.input.charCodeAt(i.position),(j||i.line===p)&&it===58&&(F=!0,it=i.input.charCodeAt(++i.position),Pf(i,!0,a),KA(i,a,jW,!1,!0),J=i.result),R?WA(i,E,H,rt,Y,J,p,v,m):F?E.push(WA(i,null,H,rt,Y,J,p,v,m)):E.push(Y),Pf(i,!0,a),it=i.input.charCodeAt(i.position),it===44?(f=!0,it=i.input.charCodeAt(++i.position)):f=!1}Fs(i,"unexpected end of the stream within a flow collection")}function mLe(i,a){var f,p,v=ydt,m=!1,b=!1,E=a,C=0,A=!1,P,F;if(F=i.input.charCodeAt(i.position),F===124)p=!1;else if(F===62)p=!0;else return!1;for(i.kind="scalar",i.result="";F!==0;)if(F=i.input.charCodeAt(++i.position),F===43||F===45)ydt===v?v=F===43?BOt:aLe:Fs(i,"repeat of a chomping mode identifier");else if((P=fLe(F))>=0)P===0?Fs(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?Fs(i,"repeat of an indentation width identifier"):(E=a+P-1,b=!0);else break;if(o9(F)){do F=i.input.charCodeAt(++i.position);while(o9(F));if(F===35)do F=i.input.charCodeAt(++i.position);while(!f3(F)&&F!==0)}for(;F!==0;){for(xdt(i),i.lineIndent=0,F=i.input.charCodeAt(i.position);(!b||i.lineIndentE&&(E=i.lineIndent),f3(F)){C++;continue}if(i.lineIndenta)&&C!==0)Fs(i,"bad indentation of a sequence entry");else if(i.lineIndenta)&&(rt&&(b=i.line,E=i.lineStart,C=i.position),KA(i,a,$W,!0,v)&&(rt?H=i.result:Y=i.result),rt||(WA(i,F,j,R,H,Y,b,E,C),R=H=Y=null),Pf(i,!0,-1),it=i.input.charCodeAt(i.position)),(i.line===m||i.lineIndent>a)&&it!==0)Fs(i,"bad indentation of a mapping entry");else if(i.lineIndenta?C=1:i.lineIndent===a?C=0:i.lineIndenta?C=1:i.lineIndent===a?C=0:i.lineIndent tag; it should be "scalar", not "'+i.kind+'"'),F=0,j=i.implicitTypes.length;F"),i.result!==null&&H.kind!==i.kind&&Fs(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+H.kind+'", not "'+i.kind+'"'),H.resolve(i.result,i.tag)?(i.result=H.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):Fs(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||P}function TLe(i){var a=i.position,f,p,v,m=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(Pf(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(m=!0,b=i.input.charCodeAt(++i.position),f=i.position;b!==0&&!fp(b);)b=i.input.charCodeAt(++i.position);for(p=i.input.slice(f,i.position),v=[],p.length<1&&Fs(i,"directive name must not be less than one character in length");b!==0;){for(;o9(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!f3(b));break}if(f3(b))break;for(f=i.position;b!==0&&!fp(b);)b=i.input.charCodeAt(++i.position);v.push(i.input.slice(f,i.position))}b!==0&&xdt(i),nk.call(GOt,p)?GOt[p](i,p,v):zW(i,'unknown document directive "'+p+'"')}if(Pf(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,Pf(i,!0,-1)):m&&Fs(i,"directives end mark is expected"),KA(i,i.lineIndent-1,$W,!1,!0),Pf(i,!0,-1),i.checkLineBreaks&&cLe.test(i.input.slice(a,i.position))&&zW(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&qW(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,Pf(i,!0,-1));return}if(i.position"u"&&(f=a,a=null);var p=KOt(i,f);if(typeof a!="function")return p;for(var v=0,m=p.length;vi.trimStart().replace(/^\s*%%(?!{)[^\n]+\n?/gm,"");class XOt{constructor(a){this.text=a,this.type="graph",this.text+=` -`;const f=De();try{this.type=hW(a,f)}catch(m){this.type="error",this.detectError=m}const p=gdt(this.type);Wt.debug("Type "+this.type),this.db=p.db,this.renderer=p.renderer,this.parser=p.parser;const v=this.parser.parse.bind(this.parser);this.parser.parse=m=>v(ILe(YOt(m,this.db,IW))),this.parser.parser.yy=this.db,this.init=p.init,this.parse()}parse(){var a,f,p;if(this.detectError)throw this.detectError;(f=(a=this.db).clear)==null||f.call(a),(p=this.init)==null||p.call(this,De()),this.parser.parse(this.text)}async render(a,f){await this.renderer.draw(this.text,a,f,this)}getParser(){return this.parser}getType(){return this.type}}const Edt=async i=>{const a=hW(i,De());try{gdt(a)}catch{const p=X9e(a);if(!p)throw new rIt(`Diagram ${a} not found.`);const{id:v,diagram:m}=await p();RW(v,m)}return new XOt(i)};let Tdt=[];const OLe=i=>{Tdt.push(i)},NLe=()=>{Tdt.forEach(i=>{i()}),Tdt=[]};var PLe=wIt(Object.keys,Object);const FLe=PLe;var BLe=Object.prototype,RLe=BLe.hasOwnProperty;function QOt(i){if(!vW(i))return FLe(i);var a=[];for(var f in Object(i))RLe.call(i,f)&&f!="constructor"&&a.push(f);return a}var jLe=JE(Jw,"DataView");const _dt=jLe;var $Le=JE(Jw,"Promise");const Cdt=$Le;var zLe=JE(Jw,"Set");const YA=zLe;var qLe=JE(Jw,"WeakMap");const Sdt=qLe;var ZOt="[object Map]",HLe="[object Object]",JOt="[object Promise]",tNt="[object Set]",eNt="[object WeakMap]",nNt="[object DataView]",VLe=ZE(_dt),GLe=ZE(GN),ULe=ZE(Cdt),WLe=ZE(YA),KLe=ZE(Sdt),c9=QE;(_dt&&c9(new _dt(new ArrayBuffer(1)))!=nNt||GN&&c9(new GN)!=ZOt||Cdt&&c9(Cdt.resolve())!=JOt||YA&&c9(new YA)!=tNt||Sdt&&c9(new Sdt)!=eNt)&&(c9=function(i){var a=QE(i),f=a==HLe?i.constructor:void 0,p=f?ZE(f):"";if(p)switch(p){case VLe:return nNt;case GLe:return ZOt;case ULe:return JOt;case WLe:return tNt;case KLe:return eNt}return a});const XA=c9;var YLe="[object Map]",XLe="[object Set]",QLe=Object.prototype,ZLe=QLe.hasOwnProperty;function eP(i){if(i==null)return!0;if(tk(i)&&(Of(i)||typeof i=="string"||typeof i.splice=="function"||RA(i)||mW(i)||BA(i)))return!i.length;var a=XA(i);if(a==YLe||a==XLe)return!i.size;if(vW(i))return!QOt(i).length;for(var f in i)if(ZLe.call(i,f))return!1;return!0}const JLe="graphics-document document";function tMe(i,a){i.attr("role",JLe),a!==""&&i.attr("aria-roledescription",a)}function eMe(i,a,f,p){if(i.insert!==void 0){if(f){const v=`chart-desc-${p}`;i.attr("aria-describedby",v),i.insert("desc",":first-child").attr("id",v).text(f)}if(a){const v=`chart-title-${p}`;i.attr("aria-labelledby",v),i.insert("title",":first-child").attr("id",v).text(a)}}}const rNt=["graph","flowchart","flowchart-v2","flowchart-elk","stateDiagram","stateDiagram-v2"],nMe=5e4,rMe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",iMe="sandbox",sMe="loose",aMe="http://www.w3.org/2000/svg",oMe="http://www.w3.org/1999/xlink",cMe="http://www.w3.org/1999/xhtml",uMe="100%",lMe="100%",hMe="border:0;margin:0;",fMe="margin:0",dMe="allow-top-navigation-by-user-activation allow-popups",gMe='The "iframe" tag is not supported by your browser.',pMe=["foreignobject"],bMe=["dominant-baseline"];async function vMe(i,a){pdt();try{await Edt(i)}catch(f){if(a!=null&&a.suppressErrors)return!1;throw f}return!0}const wMe=function(i){let a=i;return a=a.replace(/style.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/classDef.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/#\w+;/g,function(f){const p=f.substring(1,f.length-1);return/^\+?\d+$/.test(p)?"fl°°"+p+"¶ß":"fl°"+p+"¶ß"}),a},nP=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},iNt=(i,a,f=[])=>` -.${i} ${a} { ${f.join(" !important; ")} !important; }`,mMe=(i,a,f={})=>{var v;let p="";if(i.themeCSS!==void 0&&(p+=` -${i.themeCSS}`),i.fontFamily!==void 0&&(p+=` -:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(p+=` -:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!eP(f)&&rNt.includes(a)){const C=i.htmlLabels||((v=i.flowchart)==null?void 0:v.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const A in f){const P=f[A];eP(P.styles)||C.forEach(F=>{p+=iNt(P.id,F,P.styles)}),eP(P.textStyles)||(p+=iNt(P.id,"tspan",P.textStyles))}}return p},yMe=(i,a,f,p)=>{const v=mMe(i,a,f),m=PSe(a,v,i.themeVariables);return udt(eSe(`${p}{${m}}`),rSe)},xMe=(i="",a,f)=>{let p=i;return!f&&!a&&(p=p.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),p=nP(p),p=p.replace(/
/g,"
"),p},kMe=(i="",a)=>{var v,m;const f=(m=(v=a==null?void 0:a.viewBox)==null?void 0:v.baseVal)!=null&&m.height?a.viewBox.baseVal.height+"px":lMe,p=btoa(''+i+"");return``},sNt=(i,a,f,p,v)=>{const m=i.append("div");m.attr("id",f),p&&m.attr("style",p);const b=m.append("svg").attr("id",a).attr("width","100%").attr("xmlns",aMe);return v&&b.attr("xmlns:xlink",v),b.append("g"),i};function aNt(i,a){return i.append("iframe").attr("id",a).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const EMe=(i,a,f,p)=>{var v,m,b;(v=i.getElementById(a))==null||v.remove(),(m=i.getElementById(f))==null||m.remove(),(b=i.getElementById(p))==null||b.remove()},TMe=async function(i,a,f){var Ct,tt,Pt,pt;pdt(),OW(),YOt(a,{},IW);const p=to.detectInit(a);p&&IW(p);const v=De();Wt.debug(v),a.length>((v==null?void 0:v.maxTextSize)??nMe)&&(a=rMe),a=a.replace(/\r\n?/g,` -`),a=a.replace(/<(\w+)([^>]*)>/g,(Ft,X,Rt)=>"<"+X+Rt.replace(/="([^"]*)"/g,"='$1'")+">");const m="#"+i,b="i"+i,E="#"+b,C="d"+i,A="#"+C;let P=xr("body");const F=v.securityLevel===iMe,j=v.securityLevel===sMe,R=v.fontFamily;if(f!==void 0){if(f&&(f.innerHTML=""),F){const Ft=aNt(xr(f),b);P=xr(Ft.nodes()[0].contentDocument.body),P.node().style.margin=0}else P=xr(f);sNt(P,i,C,`font-family: ${R}`,oMe)}else{if(EMe(document,i,C,b),F){const Ft=aNt(xr("body"),b);P=xr(Ft.nodes()[0].contentDocument.body),P.node().style.margin=0}else P=xr("body");sNt(P,i,C)}a=wMe(a);let H,Y;try{H=await Edt(a)}catch(Ft){H=new XOt("error"),Y=Ft}const rt=P.select(A).node(),J=H.type,it=rt.firstChild,ft=it.firstChild,Tt=rNt.includes(J)?H.renderer.getClasses(a,H):{},kt=yMe(v,J,Tt,m),mt=document.createElement("style");mt.innerHTML=kt,it.insertBefore(mt,ft);try{await H.renderer.draw(a,i,ZIt,H)}catch(Ft){throw SSe.draw(a,i,ZIt),Ft}const ct=P.select(`${A} svg`),yt=(tt=(Ct=H.db).getAccTitle)==null?void 0:tt.call(Ct),st=(pt=(Pt=H.db).getAccDescription)==null?void 0:pt.call(Pt);CMe(J,ct,yt,st),P.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",cMe);let xt=P.select(A).node().innerHTML;if(Wt.debug("config.arrowMarkerAbsolute",v.arrowMarkerAbsolute),xt=xMe(xt,F,u1(v.arrowMarkerAbsolute)),F){const Ft=P.select(A+" svg").node();xt=kMe(xt,Ft)}else j||(xt=eW.sanitize(xt,{ADD_TAGS:pMe,ADD_ATTR:bMe}));if(NLe(),Y)throw Y;const dt=xr(F?E:A).node();return dt&&"remove"in dt&&dt.remove(),{svg:xt,bindFunctions:H.db.bindFunctions}};function _Me(i={}){var f;i!=null&&i.fontFamily&&!((f=i.themeVariables)!=null&&f.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),sSe(i),i!=null&&i.theme&&i.theme in m5?i.themeVariables=m5[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=m5.default.getThemeVariables(i.themeVariables));const a=typeof i=="object"?iSe(i):tOt();zft(a.logLevel),pdt()}function CMe(i,a,f,p){tMe(a,i),eMe(a,f,p,a.attr("id"))}const J1=Object.freeze({render:TMe,parse:vMe,parseDirective:FW,getDiagramFromText:Edt,initialize:_Me,getConfig:De,setConfig:eOt,getSiteConfig:tOt,updateSiteConfig:aSe,reset:()=>{OW()},globalReset:()=>{OW(i9)},defaultConfig:i9});zft(De().logLevel),OW(De());const SMe=async()=>{Wt.debug("Loading registered diagrams");const a=(await Promise.allSettled(Object.entries(OA).map(async([f,{detector:p,loader:v}])=>{if(v)try{gdt(f)}catch{try{const{diagram:b,id:E}=await v();RW(E,b,p)}catch(b){throw Wt.error(`Failed to load external diagram with key ${f}. Removing from detectors.`),delete OA[f],b}}}))).filter(f=>f.status==="rejected");if(a.length>0){Wt.error(`Failed to load ${a.length} external diagrams`);for(const f of a)Wt.error(f);throw new Error(`Failed to load ${a.length} external diagrams`)}},AMe=(i,a,f)=>{Wt.warn(i),qIt(i)?(f&&f(i.str,i.hash),a.push({...i,message:i.str,error:i})):(f&&f(i),i instanceof Error&&a.push({str:i.message,message:i.message,hash:i.name,error:i}))},oNt=async function(i={querySelector:".mermaid"}){try{await LMe(i)}catch(a){if(qIt(a)&&Wt.error(a.str),Pb.parseError&&Pb.parseError(a),!i.suppressErrors)throw Wt.error("Use the suppressErrors option to suppress these errors"),a}},LMe=async function({postRenderCallback:i,querySelector:a,nodes:f}={querySelector:".mermaid"}){const p=J1.getConfig();Wt.debug(`${i?"":"No "}Callback function found`);let v;if(f)v=f;else if(a)v=document.querySelectorAll(a);else throw new Error("Nodes and querySelector are both undefined");Wt.debug(`Found ${v.length} diagrams`),(p==null?void 0:p.startOnLoad)!==void 0&&(Wt.debug("Start On Load: "+(p==null?void 0:p.startOnLoad)),J1.updateSiteConfig({startOnLoad:p==null?void 0:p.startOnLoad}));const m=new to.initIdGenerator(p.deterministicIds,p.deterministicIDSeed);let b;const E=[];for(const C of Array.from(v)){Wt.info("Rendering diagram: "+C.id);/*! Check if previously processed */if(C.getAttribute("data-processed"))continue;C.setAttribute("data-processed","true");const A=`mermaid-${m.next()}`;b=C.innerHTML,b=wA(to.entityDecode(b)).trim().replace(//gi,"
");const P=to.detectInit(b);P&&Wt.debug("Detected early reinit: ",P);try{const{svg:F,bindFunctions:j}=await hNt(A,b,C);C.innerHTML=F,i&&await i(A),j&&j(C)}catch(F){AMe(F,E,Pb.parseError)}}if(E.length>0)throw E[0]},cNt=function(i){J1.initialize(i)},MMe=async function(i,a,f){Wt.warn("mermaid.init is deprecated. Please use run instead."),i&&cNt(i);const p={postRenderCallback:f,querySelector:".mermaid"};typeof a=="string"?p.querySelector=a:a&&(a instanceof HTMLElement?p.nodes=[a]:p.nodes=a),await oNt(p)},DMe=async(i,{lazyLoad:a=!0}={})=>{iIt(...i),a===!1&&await SMe()},uNt=function(){if(Pb.startOnLoad){const{startOnLoad:i}=J1.getConfig();i&&Pb.run().catch(a=>Wt.error("Mermaid failed to initialize",a))}};if(typeof document<"u"){/*! +`+i.mark.snippet),p+" "+f):p}function eP(i,a){Error.call(this),this.name="YAMLException",this.reason=i,this.mark=a,this.message=$Ot(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}eP.prototype=Object.create(Error.prototype),eP.prototype.constructor=eP,eP.prototype.toString=function(a){return this.name+": "+$Ot(this,a)};var x5=eP;function Tdt(i,a,f,p,v){var m="",b="",E=Math.floor(v/2)-1;return p-a>E&&(m=" ... ",a=p-E+m.length),f-p>E&&(b=" ...",f=p+E-b.length),{str:m+i.slice(a,f).replace(/\t/g,"→")+b,pos:p-a+m.length}}function Cdt(i,a){return ug.repeat(" ",a-i.length)+i}function AAe(i,a){if(a=Object.create(a||null),!i.buffer)return null;a.maxLength||(a.maxLength=79),typeof a.indent!="number"&&(a.indent=1),typeof a.linesBefore!="number"&&(a.linesBefore=3),typeof a.linesAfter!="number"&&(a.linesAfter=2);for(var f=/\r?\n|\r|\0/g,p=[0],v=[],m,b=-1;m=f.exec(i.buffer);)v.push(m.index),p.push(m.index+m[0].length),i.position<=m.index&&b<0&&(b=p.length-2);b<0&&(b=p.length-1);var E="",_,L,N=Math.min(i.line+a.linesAfter,v.length).toString().length,B=a.maxLength-(a.indent+N+3);for(_=1;_<=a.linesBefore&&!(b-_<0);_++)L=Tdt(i.buffer,p[b-_],v[b-_],i.position-(p[b]-p[b-_]),B),E=ug.repeat(" ",a.indent)+Cdt((i.line-_+1).toString(),N)+" | "+L.str+` +`+E;for(L=Tdt(i.buffer,p[b],v[b],i.position,B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+1).toString(),N)+" | "+L.str+` +`,E+=ug.repeat("-",a.indent+N+3+L.pos)+`^ +`,_=1;_<=a.linesAfter&&!(b+_>=v.length);_++)L=Tdt(i.buffer,p[b+_],v[b+_],i.position-(p[b]-p[b+_]),B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+_+1).toString(),N)+" | "+L.str+` +`;return E.replace(/\n$/,"")}var LAe=AAe,MAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],IAe=["scalar","sequence","mapping"];function DAe(i){var a={};return i!==null&&Object.keys(i).forEach(function(f){i[f].forEach(function(p){a[String(p)]=f})}),a}function OAe(i,a){if(a=a||{},Object.keys(a).forEach(function(f){if(MAe.indexOf(f)===-1)throw new x5('Unknown option "'+f+'" is met in definition of "'+i+'" YAML type.')}),this.options=a,this.tag=i,this.kind=a.kind||null,this.resolve=a.resolve||function(){return!0},this.construct=a.construct||function(f){return f},this.instanceOf=a.instanceOf||null,this.predicate=a.predicate||null,this.represent=a.represent||null,this.representName=a.representName||null,this.defaultStyle=a.defaultStyle||null,this.multi=a.multi||!1,this.styleAliases=DAe(a.styleAliases||null),IAe.indexOf(this.kind)===-1)throw new x5('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var m0=OAe;function zOt(i,a){var f=[];return i[a].forEach(function(p){var v=f.length;f.forEach(function(m,b){m.tag===p.tag&&m.kind===p.kind&&m.multi===p.multi&&(v=b)}),f[v]=p}),f}function NAe(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},a,f;function p(v){v.multi?(i.multi[v.kind].push(v),i.multi.fallback.push(v)):i[v.kind][v.tag]=i.fallback[v.tag]=v}for(a=0,f=arguments.length;a=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),eLe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function nLe(i){return!(i===null||!eLe.test(i)||i[i.length-1]==="_")}function rLe(i){var a,f;return a=i.replace(/_/g,"").toLowerCase(),f=a[0]==="-"?-1:1,"+-".indexOf(a[0])>=0&&(a=a.slice(1)),a===".inf"?f===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:a===".nan"?NaN:f*parseFloat(a,10)}var iLe=/^[-+]?[0-9]+e/;function sLe(i,a){var f;if(isNaN(i))switch(a){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(a){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(a){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ug.isNegativeZero(i))return"-0.0";return f=i.toString(10),iLe.test(f)?f.replace("e",".e"):f}function aLe(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||ug.isNegativeZero(i))}var oLe=new m0("tag:yaml.org,2002:float",{kind:"scalar",resolve:nLe,construct:rLe,predicate:aLe,represent:sLe,defaultStyle:"lowercase"}),qOt=jAe.extend({implicit:[HAe,WAe,tLe,oLe]}),cLe=qOt,HOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),GOt=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function uLe(i){return i===null?!1:HOt.exec(i)!==null||GOt.exec(i)!==null}function lLe(i){var a,f,p,v,m,b,E,_=0,L=null,N,B,j;if(a=HOt.exec(i),a===null&&(a=GOt.exec(i)),a===null)throw new Error("Date resolve error");if(f=+a[1],p=+a[2]-1,v=+a[3],!a[4])return new Date(Date.UTC(f,p,v));if(m=+a[4],b=+a[5],E=+a[6],a[7]){for(_=a[7].slice(0,3);_.length<3;)_+="0";_=+_}return a[9]&&(N=+a[10],B=+(a[11]||0),L=(N*60+B)*6e4,a[9]==="-"&&(L=-L)),j=new Date(Date.UTC(f,p,v,m,b,E,_)),L&&j.setTime(j.getTime()-L),j}function hLe(i){return i.toISOString()}var fLe=new m0("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:uLe,construct:lLe,instanceOf:Date,represent:hLe});function dLe(i){return i==="<<"||i===null}var gLe=new m0("tag:yaml.org,2002:merge",{kind:"scalar",resolve:dLe}),Sdt=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function pLe(i){if(i===null)return!1;var a,f,p=0,v=i.length,m=Sdt;for(f=0;f64)){if(a<0)return!1;p+=6}return p%8===0}function bLe(i){var a,f,p=i.replace(/[\r\n=]/g,""),v=p.length,m=Sdt,b=0,E=[];for(a=0;a>16&255),E.push(b>>8&255),E.push(b&255)),b=b<<6|m.indexOf(p.charAt(a));return f=v%4*6,f===0?(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)):f===18?(E.push(b>>10&255),E.push(b>>2&255)):f===12&&E.push(b>>4&255),new Uint8Array(E)}function vLe(i){var a="",f=0,p,v,m=i.length,b=Sdt;for(p=0;p>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]),f=(f<<8)+i[p];return v=m%3,v===0?(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]):v===2?(a+=b[f>>10&63],a+=b[f>>4&63],a+=b[f<<2&63],a+=b[64]):v===1&&(a+=b[f>>2&63],a+=b[f<<4&63],a+=b[64],a+=b[64]),a}function wLe(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var mLe=new m0("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pLe,construct:bLe,predicate:wLe,represent:vLe}),yLe=Object.prototype.hasOwnProperty,xLe=Object.prototype.toString;function kLe(i){if(i===null)return!0;var a=[],f,p,v,m,b,E=i;for(f=0,p=E.length;f>10)+55296,(i-65536&1023)+56320)}for(var ZOt=new Array(256),JOt=new Array(256),WA=0;WA<256;WA++)ZOt[WA]=QOt(WA)?1:0,JOt[WA]=QOt(WA);function qLe(i,a){this.input=i,this.filename=a.filename||null,this.schema=a.schema||OLe,this.onWarning=a.onWarning||null,this.legacy=a.legacy||!1,this.json=a.json||!1,this.listener=a.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function tNt(i,a){var f={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return f.snippet=LAe(f),new x5(a,f)}function _s(i,a){throw tNt(i,a)}function BW(i,a){i.onWarning&&i.onWarning.call(null,tNt(i,a))}var eNt={YAML:function(a,f,p){var v,m,b;a.version!==null&&_s(a,"duplication of %YAML directive"),p.length!==1&&_s(a,"YAML directive accepts exactly one argument"),v=/^([0-9]+)\.([0-9]+)$/.exec(p[0]),v===null&&_s(a,"ill-formed argument of the YAML directive"),m=parseInt(v[1],10),b=parseInt(v[2],10),m!==1&&_s(a,"unacceptable YAML version of the document"),a.version=p[0],a.checkLineBreaks=b<2,b!==1&&b!==2&&BW(a,"unsupported YAML version of the document")},TAG:function(a,f,p){var v,m;p.length!==2&&_s(a,"TAG directive accepts exactly two arguments"),v=p[0],m=p[1],KOt.test(v)||_s(a,"ill-formed tag handle (first argument) of the TAG directive"),rk.call(a.tagMap,v)&&_s(a,'there is a previously declared suffix for "'+v+'" tag handle'),YOt.test(m)||_s(a,"ill-formed tag prefix (second argument) of the TAG directive");try{m=decodeURIComponent(m)}catch{_s(a,"tag prefix is malformed: "+m)}a.tagMap[v]=m}};function ik(i,a,f,p){var v,m,b,E;if(a1&&(i.result+=ug.repeat(` +`,a-1))}function HLe(i,a,f){var p,v,m,b,E,_,L,N,B=i.kind,j=i.result,R;if(R=i.input.charCodeAt(i.position),lp(R)||UA(R)||R===35||R===38||R===42||R===33||R===124||R===62||R===39||R===34||R===37||R===64||R===96||(R===63||R===45)&&(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v)))return!1;for(i.kind="scalar",i.result="",m=b=i.position,E=!1;R!==0;){if(R===58){if(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v))break}else if(R===35){if(p=i.input.charCodeAt(i.position-1),lp(p))break}else{if(i.position===i.lineStart&&RW(i)||f&&UA(R))break;if(f3(R))if(_=i.line,L=i.lineStart,N=i.lineIndent,Df(i,!1,-1),i.lineIndent>=a){E=!0,R=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=_,i.lineStart=L,i.lineIndent=N;break}}E&&(ik(i,m,b,!1),Mdt(i,i.line-_),m=b=i.position,E=!1),lT(R)||(b=i.position+1),R=i.input.charCodeAt(++i.position)}return ik(i,m,b,!1),i.result?!0:(i.kind=B,i.result=j,!1)}function GLe(i,a){var f,p,v;if(f=i.input.charCodeAt(i.position),f!==39)return!1;for(i.kind="scalar",i.result="",i.position++,p=v=i.position;(f=i.input.charCodeAt(i.position))!==0;)if(f===39)if(ik(i,p,i.position,!0),f=i.input.charCodeAt(++i.position),f===39)p=i.position,i.position++,v=i.position;else return!0;else f3(f)?(ik(i,p,v,!0),Mdt(i,Df(i,!1,a)),p=v=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a single quoted scalar"):(i.position++,v=i.position);_s(i,"unexpected end of the stream within a single quoted scalar")}function VLe(i,a){var f,p,v,m,b,E;if(E=i.input.charCodeAt(i.position),E!==34)return!1;for(i.kind="scalar",i.result="",i.position++,f=p=i.position;(E=i.input.charCodeAt(i.position))!==0;){if(E===34)return ik(i,f,i.position,!0),i.position++,!0;if(E===92){if(ik(i,f,i.position,!0),E=i.input.charCodeAt(++i.position),f3(E))Df(i,!1,a);else if(E<256&&ZOt[E])i.result+=JOt[E],i.position++;else if((b=jLe(E))>0){for(v=b,m=0;v>0;v--)E=i.input.charCodeAt(++i.position),(b=RLe(E))>=0?m=(m<<4)+b:_s(i,"expected hexadecimal character");i.result+=zLe(m),i.position++}else _s(i,"unknown escape sequence");f=p=i.position}else f3(E)?(ik(i,f,p,!0),Mdt(i,Df(i,!1,a)),f=p=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a double quoted scalar"):(i.position++,p=i.position)}_s(i,"unexpected end of the stream within a double quoted scalar")}function ULe(i,a){var f=!0,p,v,m,b=i.tag,E,_=i.anchor,L,N,B,j,R,z=Object.create(null),K,it,st,ut;if(ut=i.input.charCodeAt(i.position),ut===91)N=93,R=!1,E=[];else if(ut===123)N=125,R=!0,E={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=E),ut=i.input.charCodeAt(++i.position);ut!==0;){if(Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===N)return i.position++,i.tag=b,i.anchor=_,i.kind=R?"mapping":"sequence",i.result=E,!0;f?ut===44&&_s(i,"expected the node content, but found ','"):_s(i,"missed comma between flow collection entries"),it=K=st=null,B=j=!1,ut===63&&(L=i.input.charCodeAt(i.position+1),lp(L)&&(B=j=!0,i.position++,Df(i,!0,a))),p=i.line,v=i.lineStart,m=i.position,YA(i,a,PW,!1,!0),it=i.tag,K=i.result,Df(i,!0,a),ut=i.input.charCodeAt(i.position),(j||i.line===p)&&ut===58&&(B=!0,ut=i.input.charCodeAt(++i.position),Df(i,!0,a),YA(i,a,PW,!1,!0),st=i.result),R?KA(i,E,z,it,K,st,p,v,m):B?E.push(KA(i,null,z,it,K,st,p,v,m)):E.push(K),Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===44?(f=!0,ut=i.input.charCodeAt(++i.position)):f=!1}_s(i,"unexpected end of the stream within a flow collection")}function WLe(i,a){var f,p,v=Adt,m=!1,b=!1,E=a,_=0,L=!1,N,B;if(B=i.input.charCodeAt(i.position),B===124)p=!1;else if(B===62)p=!0;else return!1;for(i.kind="scalar",i.result="";B!==0;)if(B=i.input.charCodeAt(++i.position),B===43||B===45)Adt===v?v=B===43?WOt:NLe:_s(i,"repeat of a chomping mode identifier");else if((N=$Le(B))>=0)N===0?_s(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?_s(i,"repeat of an indentation width identifier"):(E=a+N-1,b=!0);else break;if(lT(B)){do B=i.input.charCodeAt(++i.position);while(lT(B));if(B===35)do B=i.input.charCodeAt(++i.position);while(!f3(B)&&B!==0)}for(;B!==0;){for(Ldt(i),i.lineIndent=0,B=i.input.charCodeAt(i.position);(!b||i.lineIndentE&&(E=i.lineIndent),f3(B)){_++;continue}if(i.lineIndenta)&&_!==0)_s(i,"bad indentation of a sequence entry");else if(i.lineIndenta)&&(it&&(b=i.line,E=i.lineStart,_=i.position),YA(i,a,FW,!0,v)&&(it?z=i.result:K=i.result),it||(KA(i,B,j,R,z,K,b,E,_),R=z=K=null),Df(i,!0,-1),ut=i.input.charCodeAt(i.position)),(i.line===m||i.lineIndent>a)&&ut!==0)_s(i,"bad indentation of a mapping entry");else if(i.lineIndenta?_=1:i.lineIndent===a?_=0:i.lineIndenta?_=1:i.lineIndent===a?_=0:i.lineIndent tag; it should be "scalar", not "'+i.kind+'"'),B=0,j=i.implicitTypes.length;B"),i.result!==null&&z.kind!==i.kind&&_s(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+z.kind+'", not "'+i.kind+'"'),z.resolve(i.result,i.tag)?(i.result=z.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):_s(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||N}function ZLe(i){var a=i.position,f,p,v,m=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(Df(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(m=!0,b=i.input.charCodeAt(++i.position),f=i.position;b!==0&&!lp(b);)b=i.input.charCodeAt(++i.position);for(p=i.input.slice(f,i.position),v=[],p.length<1&&_s(i,"directive name must not be less than one character in length");b!==0;){for(;lT(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!f3(b));break}if(f3(b))break;for(f=i.position;b!==0&&!lp(b);)b=i.input.charCodeAt(++i.position);v.push(i.input.slice(f,i.position))}b!==0&&Ldt(i),rk.call(eNt,p)?eNt[p](i,p,v):BW(i,'unknown document directive "'+p+'"')}if(Df(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,Df(i,!0,-1)):m&&_s(i,"directives end mark is expected"),YA(i,i.lineIndent-1,FW,!1,!0),Df(i,!0,-1),i.checkLineBreaks&&FLe.test(i.input.slice(a,i.position))&&BW(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&RW(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,Df(i,!0,-1));return}if(i.position"u"&&(f=a,a=null);var p=iNt(i,f);if(typeof a!="function")return p;for(var v=0,m=p.length;vi.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(a,f,p)=>"<"+f+p.replace(/="([^"]*)"/g,"='$1'")+">"),cMe=i=>{const{text:a,metadata:f}=aMe(i),{displayMode:p,title:v,config:m={}}=f;return p&&(m.gantt||(m.gantt={}),m.gantt.displayMode=p),{title:v,config:m,text:a}},uMe=i=>{const a=$a.detectInit(i)??{},f=$a.detectDirective(i,"wrap");return Array.isArray(f)?a.wrap=f.some(({type:p})=>{}):(f==null?void 0:f.type)==="wrap"&&(a.wrap=!0),{text:O_e(i),directive:a}};function lMe(i){const a=oMe(i),f=cMe(a),p=uMe(f.text),v=idt(f.config,p.directive);return i=bAe(p.text),{code:i,title:f.title,config:v}}const hMe=5e4,fMe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",dMe="sandbox",gMe="loose",pMe="http://www.w3.org/2000/svg",bMe="http://www.w3.org/1999/xlink",vMe="http://www.w3.org/1999/xhtml",wMe="100%",mMe="100%",yMe="border:0;margin:0;",xMe="margin:0",kMe="allow-top-navigation-by-user-activation allow-popups",EMe='The "iframe" tag is not supported by your browser.',TMe=["foreignobject"],CMe=["dominant-baseline"];function sNt(i){const a=lMe(i);return IW(),fSe(a.config??{}),a}async function _Me(i,a){wdt(),i=sNt(i).code;try{await mdt(i)}catch(f){if(a!=null&&a.suppressErrors)return!1;throw f}return!0}const SMe=function(i){let a=i;return a=a.replace(/style.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/classDef.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/#\w+;/g,function(f){const p=f.substring(1,f.length-1);return/^\+?\d+$/.test(p)?"fl°°"+p+"¶ß":"fl°"+p+"¶ß"}),a},nP=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},aNt=(i,a,f=[])=>` +.${i} ${a} { ${f.join(" !important; ")} !important; }`,AMe=(i,a={})=>{var p;let f="";if(i.themeCSS!==void 0&&(f+=` +${i.themeCSS}`),i.fontFamily!==void 0&&(f+=` +:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(f+=` +:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!tP(a)){const E=i.htmlLabels||((p=i.flowchart)==null?void 0:p.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const _ in a){const L=a[_];tP(L.styles)||E.forEach(N=>{f+=aNt(L.id,N,L.styles)}),tP(L.textStyles)||(f+=aNt(L.id,"tspan",L.textStyles))}}return f},LMe=(i,a,f,p)=>{const v=AMe(i,f),m=zSe(a,v,i.themeVariables);return hdt(aSe(`${p}{${m}}`),cSe)},MMe=(i="",a,f)=>{let p=i;return!f&&!a&&(p=p.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),p=nP(p),p=p.replace(/
/g,"
"),p},IMe=(i="",a)=>{var v,m;const f=(m=(v=a==null?void 0:a.viewBox)==null?void 0:v.baseVal)!=null&&m.height?a.viewBox.baseVal.height+"px":mMe,p=btoa(''+i+"");return``},oNt=(i,a,f,p,v)=>{const m=i.append("div");m.attr("id",f),p&&m.attr("style",p);const b=m.append("svg").attr("id",a).attr("width","100%").attr("xmlns",pMe);return v&&b.attr("xmlns:xlink",v),b.append("g"),i};function cNt(i,a){return i.append("iframe").attr("id",a).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const DMe=(i,a,f,p)=>{var v,m,b;(v=i.getElementById(a))==null||v.remove(),(m=i.getElementById(f))==null||m.remove(),(b=i.getElementById(p))==null||b.remove()},OMe=async function(i,a,f){var nt,Ot,Nt,qt,Ct,Z;wdt();const p=sNt(a);a=p.code;const v=Le();Ut.debug(v),a.length>((v==null?void 0:v.maxTextSize)??hMe)&&(a=fMe);const m="#"+i,b="i"+i,E="#"+b,_="d"+i,L="#"+_;let N=yr("body");const B=v.securityLevel===dMe,j=v.securityLevel===gMe,R=v.fontFamily;if(f!==void 0){if(f&&(f.innerHTML=""),B){const Tt=cNt(yr(f),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr(f);oNt(N,i,_,`font-family: ${R}`,bMe)}else{if(DMe(document,i,_,b),B){const Tt=cNt(yr("body"),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr("body");oNt(N,i,_)}a=SMe(a);let z,K;try{z=await mdt(a,{title:p.title})}catch(Tt){z=new DOt("error"),K=Tt}const it=N.select(L).node(),st=z.type,ut=it.firstChild,bt=ut.firstChild,mt=(Ot=(nt=z.renderer).getClasses)==null?void 0:Ot.call(nt,a,z),yt=LMe(v,st,mt,m),dt=document.createElement("style");dt.innerHTML=yt,ut.insertBefore(dt,bt);try{await z.renderer.draw(a,i,eOt,z)}catch(Tt){throw OSe.draw(a,i,eOt),Tt}const ht=N.select(`${L} svg`),wt=(qt=(Nt=z.db).getAccTitle)==null?void 0:qt.call(Nt),X=(Z=(Ct=z.db).getAccDescription)==null?void 0:Z.call(Ct);PMe(st,ht,wt,X),N.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",vMe);let pt=N.select(L).node().innerHTML;if(Ut.debug("config.arrowMarkerAbsolute",v.arrowMarkerAbsolute),pt=MMe(pt,B,s1(v.arrowMarkerAbsolute)),B){const Tt=N.select(L+" svg").node();pt=IMe(pt,Tt)}else j||(pt=eW.sanitize(pt,{ADD_TAGS:TMe,ADD_ATTR:CMe}));if(KSe(),K)throw K;const xt=yr(B?E:L).node();return xt&&"remove"in xt&&xt.remove(),{svg:pt,bindFunctions:z.db.bindFunctions}};function NMe(i={}){var f;i!=null&&i.fontFamily&&!((f=i.themeVariables)!=null&&f.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),lSe(i),i!=null&&i.theme&&i.theme in w5?i.themeVariables=w5[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=w5.default.getThemeVariables(i.themeVariables));const a=typeof i=="object"?uSe(i):rOt();jft(a.logLevel),wdt()}function PMe(i,a,f,p){gAe(a,i),pAe(a,f,p,a.attr("id"))}const hT=Object.freeze({render:OMe,parse:_Me,getDiagramFromText:mdt,initialize:NMe,getConfig:Le,setConfig:iOt,getSiteConfig:rOt,updateSiteConfig:hSe,reset:()=>{IW()},globalReset:()=>{IW(oT)},defaultConfig:oT});jft(Le().logLevel),IW(Le());const FMe=async()=>{Ut.debug("Loading registered diagrams");const a=(await Promise.allSettled(Object.entries(DA).map(async([f,{detector:p,loader:v}])=>{if(v)try{vdt(f)}catch{try{const{diagram:b,id:E}=await v();NW(E,b,p)}catch(b){throw Ut.error(`Failed to load external diagram with key ${f}. Removing from detectors.`),delete DA[f],b}}}))).filter(f=>f.status==="rejected");if(a.length>0){Ut.error(`Failed to load ${a.length} external diagrams`);for(const f of a)Ut.error(f);throw new Error(`Failed to load ${a.length} external diagrams`)}},BMe=(i,a,f)=>{Ut.warn(i),UDt(i)?(f&&f(i.str,i.hash),a.push({...i,message:i.str,error:i})):(f&&f(i),i instanceof Error&&a.push({str:i.message,message:i.message,hash:i.name,error:i}))},uNt=async function(i={querySelector:".mermaid"}){try{await RMe(i)}catch(a){if(UDt(a)&&Ut.error(a.str),Ob.parseError&&Ob.parseError(a),!i.suppressErrors)throw Ut.error("Use the suppressErrors option to suppress these errors"),a}},RMe=async function({postRenderCallback:i,querySelector:a,nodes:f}={querySelector:".mermaid"}){const p=hT.getConfig();Ut.debug(`${i?"":"No "}Callback function found`);let v;if(f)v=f;else if(a)v=document.querySelectorAll(a);else throw new Error("Nodes and querySelector are both undefined");Ut.debug(`Found ${v.length} diagrams`),(p==null?void 0:p.startOnLoad)!==void 0&&(Ut.debug("Start On Load: "+(p==null?void 0:p.startOnLoad)),hT.updateSiteConfig({startOnLoad:p==null?void 0:p.startOnLoad}));const m=new $a.InitIDGenerator(p.deterministicIds,p.deterministicIDSeed);let b;const E=[];for(const _ of Array.from(v)){Ut.info("Rendering diagram: "+_.id);/*! Check if previously processed */if(_.getAttribute("data-processed"))continue;_.setAttribute("data-processed","true");const L=`mermaid-${m.next()}`;b=_.innerHTML,b=wA($a.entityDecode(b)).trim().replace(//gi,"
");const N=$a.detectInit(b);N&&Ut.debug("Detected early reinit: ",N);try{const{svg:B,bindFunctions:j}=await dNt(L,b,_);_.innerHTML=B,i&&await i(L),j&&j(_)}catch(B){BMe(B,E,Ob.parseError)}}if(E.length>0)throw E[0]},lNt=function(i){hT.initialize(i)},jMe=async function(i,a,f){Ut.warn("mermaid.init is deprecated. Please use run instead."),i&&lNt(i);const p={postRenderCallback:f,querySelector:".mermaid"};typeof a=="string"?p.querySelector=a:a&&(a instanceof HTMLElement?p.nodes=[a]:p.nodes=a),await uNt(p)},$Me=async(i,{lazyLoad:a=!0}={})=>{oDt(...i),a===!1&&await FMe()},hNt=function(){if(Ob.startOnLoad){const{startOnLoad:i}=hT.getConfig();i&&Ob.run().catch(a=>Ut.error("Mermaid failed to initialize",a))}};if(typeof document<"u"){/*! * Wait for document loaded before starting the execution - */window.addEventListener("load",uNt,!1)}const IMe=function(i){Pb.parseError=i},HW=[];let Adt=!1;const lNt=async()=>{if(!Adt){for(Adt=!0;HW.length>0;){const i=HW.shift();if(i)try{await i()}catch(a){Wt.error("Error executing queue",a)}}Adt=!1}},OMe=async(i,a)=>new Promise((f,p)=>{const v=()=>new Promise((m,b)=>{J1.parse(i,a).then(E=>{m(E),f(E)},E=>{var C;Wt.error("Error parsing",E),(C=Pb.parseError)==null||C.call(Pb,E),b(E),p(E)})});HW.push(v),lNt().catch(p)}),hNt=(i,a,f)=>new Promise((p,v)=>{const m=()=>new Promise((b,E)=>{J1.render(i,a,f).then(C=>{b(C),p(C)},C=>{var A;Wt.error("Error parsing",C),(A=Pb.parseError)==null||A.call(Pb,C),E(C),v(C)})});HW.push(m),lNt().catch(v)}),Pb={startOnLoad:!0,mermaidAPI:J1,parse:OMe,render:hNt,init:MMe,run:oNt,registerExternalDiagrams:DMe,initialize:cNt,parseError:void 0,contentLoaded:uNt,setParseErrorHandler:IMe,detectType:hW};var VW=function(){var i=function(Ga,_r,qr,Oi){for(qr=qr||{},Oi=Ga.length;Oi--;qr[Ga[Oi]]=_r);return qr},a=[1,6],f=[1,7],p=[1,8],v=[1,9],m=[1,16],b=[1,11],E=[1,12],C=[1,13],A=[1,14],P=[1,15],F=[1,27],j=[1,33],R=[1,34],H=[1,35],Y=[1,36],rt=[1,37],J=[1,72],it=[1,73],ft=[1,74],Tt=[1,75],kt=[1,76],mt=[1,77],ct=[1,78],yt=[1,38],st=[1,39],xt=[1,40],ht=[1,41],dt=[1,42],Ct=[1,43],tt=[1,44],Pt=[1,45],pt=[1,46],Ft=[1,47],X=[1,48],Rt=[1,49],Bt=[1,50],vt=[1,51],Ot=[1,52],Vt=[1,53],qe=[1,54],_n=[1,55],Te=[1,56],Wn=[1,57],Ae=[1,59],ne=[1,60],ke=[1,61],Ve=[1,62],Ee=[1,63],He=[1,64],Ce=[1,65],$e=[1,66],ye=[1,67],fn=[1,68],Yt=[1,69],Mi=[24,52],qt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],zi=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],Se=[1,94],ki=[1,95],Ri=[1,96],pi=[1,97],bi=[15,24,52],dn=[7,8,9,10,18,22,25,26,27,28],Nn=[15,24,43,52],Wr=[15,24,43,52,86,87,89,90],Li=[15,43],is=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],Ts={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(_r,qr,Oi,gr,Js,Vn,Xc){var Er=Vn.length-1;switch(Js){case 4:gr.setDirection("TB");break;case 5:gr.setDirection("BT");break;case 6:gr.setDirection("RL");break;case 7:gr.setDirection("LR");break;case 11:gr.parseDirective("%%{","open_directive");break;case 12:break;case 13:Vn[Er]=Vn[Er].trim().replace(/'/g,'"'),gr.parseDirective(Vn[Er],"arg_directive");break;case 14:gr.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:gr.setC4Type(Vn[Er-3]);break;case 26:gr.setTitle(Vn[Er].substring(6)),this.$=Vn[Er].substring(6);break;case 27:gr.setAccDescription(Vn[Er].substring(15)),this.$=Vn[Er].substring(15);break;case 28:this.$=Vn[Er].trim(),gr.setTitle(this.$);break;case 29:case 30:this.$=Vn[Er].trim(),gr.setAccDescription(this.$);break;case 35:case 36:Vn[Er].splice(2,0,"ENTERPRISE"),gr.addPersonOrSystemBoundary(...Vn[Er]),this.$=Vn[Er];break;case 37:gr.addPersonOrSystemBoundary(...Vn[Er]),this.$=Vn[Er];break;case 38:Vn[Er].splice(2,0,"CONTAINER"),gr.addContainerBoundary(...Vn[Er]),this.$=Vn[Er];break;case 39:gr.addDeploymentNode("node",...Vn[Er]),this.$=Vn[Er];break;case 40:gr.addDeploymentNode("nodeL",...Vn[Er]),this.$=Vn[Er];break;case 41:gr.addDeploymentNode("nodeR",...Vn[Er]),this.$=Vn[Er];break;case 42:gr.popBoundaryParseStack();break;case 46:gr.addPersonOrSystem("person",...Vn[Er]),this.$=Vn[Er];break;case 47:gr.addPersonOrSystem("external_person",...Vn[Er]),this.$=Vn[Er];break;case 48:gr.addPersonOrSystem("system",...Vn[Er]),this.$=Vn[Er];break;case 49:gr.addPersonOrSystem("system_db",...Vn[Er]),this.$=Vn[Er];break;case 50:gr.addPersonOrSystem("system_queue",...Vn[Er]),this.$=Vn[Er];break;case 51:gr.addPersonOrSystem("external_system",...Vn[Er]),this.$=Vn[Er];break;case 52:gr.addPersonOrSystem("external_system_db",...Vn[Er]),this.$=Vn[Er];break;case 53:gr.addPersonOrSystem("external_system_queue",...Vn[Er]),this.$=Vn[Er];break;case 54:gr.addContainer("container",...Vn[Er]),this.$=Vn[Er];break;case 55:gr.addContainer("container_db",...Vn[Er]),this.$=Vn[Er];break;case 56:gr.addContainer("container_queue",...Vn[Er]),this.$=Vn[Er];break;case 57:gr.addContainer("external_container",...Vn[Er]),this.$=Vn[Er];break;case 58:gr.addContainer("external_container_db",...Vn[Er]),this.$=Vn[Er];break;case 59:gr.addContainer("external_container_queue",...Vn[Er]),this.$=Vn[Er];break;case 60:gr.addComponent("component",...Vn[Er]),this.$=Vn[Er];break;case 61:gr.addComponent("component_db",...Vn[Er]),this.$=Vn[Er];break;case 62:gr.addComponent("component_queue",...Vn[Er]),this.$=Vn[Er];break;case 63:gr.addComponent("external_component",...Vn[Er]),this.$=Vn[Er];break;case 64:gr.addComponent("external_component_db",...Vn[Er]),this.$=Vn[Er];break;case 65:gr.addComponent("external_component_queue",...Vn[Er]),this.$=Vn[Er];break;case 67:gr.addRel("rel",...Vn[Er]),this.$=Vn[Er];break;case 68:gr.addRel("birel",...Vn[Er]),this.$=Vn[Er];break;case 69:gr.addRel("rel_u",...Vn[Er]),this.$=Vn[Er];break;case 70:gr.addRel("rel_d",...Vn[Er]),this.$=Vn[Er];break;case 71:gr.addRel("rel_l",...Vn[Er]),this.$=Vn[Er];break;case 72:gr.addRel("rel_r",...Vn[Er]),this.$=Vn[Er];break;case 73:gr.addRel("rel_b",...Vn[Er]),this.$=Vn[Er];break;case 74:Vn[Er].splice(0,1),gr.addRel("rel",...Vn[Er]),this.$=Vn[Er];break;case 75:gr.updateElStyle("update_el_style",...Vn[Er]),this.$=Vn[Er];break;case 76:gr.updateRelStyle("update_rel_style",...Vn[Er]),this.$=Vn[Er];break;case 77:gr.updateLayoutConfig("update_layout_config",...Vn[Er]),this.$=Vn[Er];break;case 78:this.$=[Vn[Er]];break;case 79:Vn[Er].unshift(Vn[Er-1]),this.$=Vn[Er];break;case 80:case 82:this.$=Vn[Er].trim();break;case 81:let Mc={};Mc[Vn[Er-1].trim()]=Vn[Er].trim(),this.$=Mc;break;case 83:this.$="";break}},table:[{3:1,4:2,5:3,6:4,7:a,8:f,9:p,10:v,11:5,12:10,18:m,22:b,25:E,26:C,27:A,28:P},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:a,8:f,9:p,10:v,11:5,12:10,18:m,22:b,25:E,26:C,27:A,28:P},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:F},i([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:j,33:R,34:H,36:Y,38:rt,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{23:79,29:29,30:30,31:31,32:j,33:R,34:H,36:Y,38:rt,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{23:80,29:29,30:30,31:31,32:j,33:R,34:H,36:Y,38:rt,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{23:81,29:29,30:30,31:31,32:j,33:R,34:H,36:Y,38:rt,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{23:82,29:29,30:30,31:31,32:j,33:R,34:H,36:Y,38:rt,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},i(Mi,[2,20],{53:32,39:58,40:70,42:71,30:87,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt}),i(Mi,[2,21]),i(qt,[2,23],{15:[1,88]}),i(Mi,[2,43],{15:[1,89]}),i(zi,[2,26]),i(zi,[2,27]),{35:[1,90]},{37:[1,91]},i(zi,[2,30]),{45:92,85:93,86:Se,87:ki,89:Ri,90:pi},{45:98,85:93,86:Se,87:ki,89:Ri,90:pi},{45:99,85:93,86:Se,87:ki,89:Ri,90:pi},{45:100,85:93,86:Se,87:ki,89:Ri,90:pi},{45:101,85:93,86:Se,87:ki,89:Ri,90:pi},{45:102,85:93,86:Se,87:ki,89:Ri,90:pi},{45:103,85:93,86:Se,87:ki,89:Ri,90:pi},{45:104,85:93,86:Se,87:ki,89:Ri,90:pi},{45:105,85:93,86:Se,87:ki,89:Ri,90:pi},{45:106,85:93,86:Se,87:ki,89:Ri,90:pi},{45:107,85:93,86:Se,87:ki,89:Ri,90:pi},{45:108,85:93,86:Se,87:ki,89:Ri,90:pi},{45:109,85:93,86:Se,87:ki,89:Ri,90:pi},{45:110,85:93,86:Se,87:ki,89:Ri,90:pi},{45:111,85:93,86:Se,87:ki,89:Ri,90:pi},{45:112,85:93,86:Se,87:ki,89:Ri,90:pi},{45:113,85:93,86:Se,87:ki,89:Ri,90:pi},{45:114,85:93,86:Se,87:ki,89:Ri,90:pi},{45:115,85:93,86:Se,87:ki,89:Ri,90:pi},{45:116,85:93,86:Se,87:ki,89:Ri,90:pi},i(bi,[2,66]),{45:117,85:93,86:Se,87:ki,89:Ri,90:pi},{45:118,85:93,86:Se,87:ki,89:Ri,90:pi},{45:119,85:93,86:Se,87:ki,89:Ri,90:pi},{45:120,85:93,86:Se,87:ki,89:Ri,90:pi},{45:121,85:93,86:Se,87:ki,89:Ri,90:pi},{45:122,85:93,86:Se,87:ki,89:Ri,90:pi},{45:123,85:93,86:Se,87:ki,89:Ri,90:pi},{45:124,85:93,86:Se,87:ki,89:Ri,90:pi},{45:125,85:93,86:Se,87:ki,89:Ri,90:pi},{45:126,85:93,86:Se,87:ki,89:Ri,90:pi},{45:127,85:93,86:Se,87:ki,89:Ri,90:pi},{30:128,39:58,40:70,42:71,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,53:32,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt},{15:[1,130],43:[1,129]},{45:131,85:93,86:Se,87:ki,89:Ri,90:pi},{45:132,85:93,86:Se,87:ki,89:Ri,90:pi},{45:133,85:93,86:Se,87:ki,89:Ri,90:pi},{45:134,85:93,86:Se,87:ki,89:Ri,90:pi},{45:135,85:93,86:Se,87:ki,89:Ri,90:pi},{45:136,85:93,86:Se,87:ki,89:Ri,90:pi},{45:137,85:93,86:Se,87:ki,89:Ri,90:pi},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},i(dn,[2,9]),{14:142,21:F},{21:[2,13]},{1:[2,15]},i(Mi,[2,22]),i(qt,[2,24],{31:31,29:143,32:j,33:R,34:H,36:Y,38:rt}),i(Mi,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:j,33:R,34:H,36:Y,38:rt,44:J,46:it,47:ft,48:Tt,49:kt,50:mt,51:ct,54:yt,55:st,56:xt,57:ht,58:dt,59:Ct,60:tt,61:Pt,62:pt,63:Ft,64:X,65:Rt,66:Bt,67:vt,68:Ot,69:Vt,70:qe,71:_n,72:Te,73:Wn,74:Ae,75:ne,76:ke,77:Ve,78:Ee,79:He,80:Ce,81:$e,82:ye,83:fn,84:Yt}),i(zi,[2,28]),i(zi,[2,29]),i(bi,[2,46]),i(Nn,[2,78],{85:93,45:145,86:Se,87:ki,89:Ri,90:pi}),i(Wr,[2,80]),{88:[1,146]},i(Wr,[2,82]),i(Wr,[2,83]),i(bi,[2,47]),i(bi,[2,48]),i(bi,[2,49]),i(bi,[2,50]),i(bi,[2,51]),i(bi,[2,52]),i(bi,[2,53]),i(bi,[2,54]),i(bi,[2,55]),i(bi,[2,56]),i(bi,[2,57]),i(bi,[2,58]),i(bi,[2,59]),i(bi,[2,60]),i(bi,[2,61]),i(bi,[2,62]),i(bi,[2,63]),i(bi,[2,64]),i(bi,[2,65]),i(bi,[2,67]),i(bi,[2,68]),i(bi,[2,69]),i(bi,[2,70]),i(bi,[2,71]),i(bi,[2,72]),i(bi,[2,73]),i(bi,[2,74]),i(bi,[2,75]),i(bi,[2,76]),i(bi,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},i(Li,[2,35]),i(Li,[2,36]),i(Li,[2,37]),i(Li,[2,38]),i(Li,[2,39]),i(Li,[2,40]),i(Li,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},i(qt,[2,25]),i(Mi,[2,45]),i(Nn,[2,79]),i(Wr,[2,81]),i(bi,[2,31]),i(bi,[2,42]),i(is,[2,32]),i(is,[2,33],{15:[1,152]}),i(dn,[2,10]),i(is,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(_r,qr){if(qr.recoverable)this.trace(_r);else{var Oi=new Error(_r);throw Oi.hash=qr,Oi}},parse:function(_r){var qr=this,Oi=[0],gr=[],Js=[null],Vn=[],Xc=this.table,Er="",Mc=0,bp=0,fm=2,T0=1,Fd=Vn.slice.call(arguments,1),No=Object.create(this.lexer),ta={yy:{}};for(var bu in this.yy)Object.prototype.hasOwnProperty.call(this.yy,bu)&&(ta.yy[bu]=this.yy[bu]);No.setInput(_r,ta.yy),ta.yy.lexer=No,ta.yy.parser=this,typeof No.yylloc>"u"&&(No.yylloc={});var Pu=No.yylloc;Vn.push(Pu);var lo=No.options&&No.options.ranges;typeof ta.yy.parseError=="function"?this.parseError=ta.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function mo(){var ni;return ni=gr.pop()||No.lex()||T0,typeof ni!="number"&&(ni instanceof Array&&(gr=ni,ni=gr.pop()),ni=qr.symbols_[ni]||ni),ni}for(var Os,Tl,Fu,zo,nd={},sf,ll,Vi,Ke;;){if(Tl=Oi[Oi.length-1],this.defaultActions[Tl]?Fu=this.defaultActions[Tl]:((Os===null||typeof Os>"u")&&(Os=mo()),Fu=Xc[Tl]&&Xc[Tl][Os]),typeof Fu>"u"||!Fu.length||!Fu[0]){var kr="";Ke=[];for(sf in Xc[Tl])this.terminals_[sf]&&sf>fm&&Ke.push("'"+this.terminals_[sf]+"'");No.showPosition?kr="Parse error on line "+(Mc+1)+`: -`+No.showPosition()+` -Expecting `+Ke.join(", ")+", got '"+(this.terminals_[Os]||Os)+"'":kr="Parse error on line "+(Mc+1)+": Unexpected "+(Os==T0?"end of input":"'"+(this.terminals_[Os]||Os)+"'"),this.parseError(kr,{text:No.match,token:this.terminals_[Os]||Os,line:No.yylineno,loc:Pu,expected:Ke})}if(Fu[0]instanceof Array&&Fu.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Tl+", token: "+Os);switch(Fu[0]){case 1:Oi.push(Os),Js.push(No.yytext),Vn.push(No.yylloc),Oi.push(Fu[1]),Os=null,bp=No.yyleng,Er=No.yytext,Mc=No.yylineno,Pu=No.yylloc;break;case 2:if(ll=this.productions_[Fu[1]][1],nd.$=Js[Js.length-ll],nd._$={first_line:Vn[Vn.length-(ll||1)].first_line,last_line:Vn[Vn.length-1].last_line,first_column:Vn[Vn.length-(ll||1)].first_column,last_column:Vn[Vn.length-1].last_column},lo&&(nd._$.range=[Vn[Vn.length-(ll||1)].range[0],Vn[Vn.length-1].range[1]]),zo=this.performAction.apply(nd,[Er,bp,Mc,ta.yy,Fu[1],Js,Vn].concat(Fd)),typeof zo<"u")return zo;ll&&(Oi=Oi.slice(0,-1*ll*2),Js=Js.slice(0,-1*ll),Vn=Vn.slice(0,-1*ll)),Oi.push(this.productions_[Fu[1]][0]),Js.push(nd.$),Vn.push(nd._$),Vi=Xc[Oi[Oi.length-2]][Oi[Oi.length-1]],Oi.push(Vi);break;case 3:return!0}}return!0}},Aa=function(){var Ga={EOF:1,parseError:function(qr,Oi){if(this.yy.parser)this.yy.parser.parseError(qr,Oi);else throw new Error(qr)},setInput:function(_r,qr){return this.yy=qr||this.yy||{},this._input=_r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _r=this._input[0];this.yytext+=_r,this.yyleng++,this.offset++,this.match+=_r,this.matched+=_r;var qr=_r.match(/(?:\r\n?|\n).*/g);return qr?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_r},unput:function(_r){var qr=_r.length,Oi=_r.split(/(?:\r\n?|\n)/g);this._input=_r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qr),this.offset-=qr;var gr=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Oi.length-1&&(this.yylineno-=Oi.length-1);var Js=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Oi?(Oi.length===gr.length?this.yylloc.first_column:0)+gr[gr.length-Oi.length].length-Oi[0].length:this.yylloc.first_column-qr},this.options.ranges&&(this.yylloc.range=[Js[0],Js[0]+this.yyleng-qr]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_r){this.unput(this.match.slice(_r))},pastInput:function(){var _r=this.matched.substr(0,this.matched.length-this.match.length);return(_r.length>20?"...":"")+_r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _r=this.match;return _r.length<20&&(_r+=this._input.substr(0,20-_r.length)),(_r.substr(0,20)+(_r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _r=this.pastInput(),qr=new Array(_r.length+1).join("-");return _r+this.upcomingInput()+` -`+qr+"^"},test_match:function(_r,qr){var Oi,gr,Js;if(this.options.backtrack_lexer&&(Js={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Js.yylloc.range=this.yylloc.range.slice(0))),gr=_r[0].match(/(?:\r\n?|\n).*/g),gr&&(this.yylineno+=gr.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:gr?gr[gr.length-1].length-gr[gr.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_r[0].length},this.yytext+=_r[0],this.match+=_r[0],this.matches=_r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_r[0].length),this.matched+=_r[0],Oi=this.performAction.call(this,this.yy,this,qr,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Oi)return Oi;if(this._backtrack){for(var Vn in Js)this[Vn]=Js[Vn];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _r,qr,Oi,gr;this._more||(this.yytext="",this.match="");for(var Js=this._currentRules(),Vn=0;Vnqr[0].length)){if(qr=Oi,gr=Vn,this.options.backtrack_lexer){if(_r=this.test_match(Oi,Js[Vn]),_r!==!1)return _r;if(this._backtrack){qr=!1;continue}else return!1}else if(!this.options.flex)break}return qr?(_r=this.test_match(qr,Js[gr]),_r!==!1?_r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var qr=this.next();return qr||this.lex()},begin:function(qr){this.conditionStack.push(qr)},popState:function(){var qr=this.conditionStack.length-1;return qr>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(qr){return qr=this.conditionStack.length-1-Math.abs(qr||0),qr>=0?this.conditionStack[qr]:"INITIAL"},pushState:function(qr){this.begin(qr)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(qr,Oi,gr,Js){switch(gr){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:break;case 19:c;break;case 20:return 15;case 21:break;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:return this.begin("node"),49;case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:return this.begin("rel_u"),76;case 58:return this.begin("rel_u"),76;case 59:return this.begin("rel_d"),77;case 60:return this.begin("rel_d"),77;case 61:return this.begin("rel_l"),78;case 62:return this.begin("rel_l"),78;case 63:return this.begin("rel_r"),79;case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:this.popState(),this.popState();break;case 74:return 90;case 75:break;case 76:return 90;case 77:this.begin("string");break;case 78:this.popState();break;case 79:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 84:this.popState(),this.popState();break;case 85:return"STR";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[70,71,72,73],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}};return Ga}();Ts.lexer=Aa;function Xi(){this.yy={}}return Xi.prototype=Ts,Ts.Parser=Xi,new Xi}();VW.parser=VW;const NMe=VW;let rm=[],ik=[""],dg="global",im="",d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],rP=[],Ldt="",Mdt=!1,GW=4,UW=2;var fNt;const PMe=function(){return fNt},FMe=function(i){fNt=v0(i,De())},BMe=function(i,a,f){J1.parseDirective(this,i,a,f)},RMe=function(i,a,f,p,v,m,b,E,C){if(i==null||a===void 0||a===null||f===void 0||f===null||p===void 0||p===null)return;let A={};const P=rP.find(F=>F.from===a&&F.to===f);if(P?A=P:rP.push(A),A.type=i,A.from=a,A.to=f,A.label={text:p},v==null)A.techn={text:""};else if(typeof v=="object"){let[F,j]=Object.entries(v)[0];A[F]={text:j}}else A.techn={text:v};if(m==null)A.descr={text:""};else if(typeof m=="object"){let[F,j]=Object.entries(m)[0];A[F]={text:j}}else A.descr={text:m};if(typeof b=="object"){let[F,j]=Object.entries(b)[0];A[F]=j}else A.sprite=b;if(typeof E=="object"){let[F,j]=Object.entries(E)[0];A[F]=j}else A.tags=E;if(typeof C=="object"){let[F,j]=Object.entries(C)[0];A[F]=j}else A.link=C;A.wrap=sk()},jMe=function(i,a,f,p,v,m,b){if(a===null||f===null)return;let E={};const C=rm.find(A=>A.alias===a);if(C&&a===C.alias?E=C:(E.alias=a,rm.push(E)),f==null?E.label={text:""}:E.label={text:f},p==null)E.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];E[A]={text:P}}else E.descr={text:p};if(typeof v=="object"){let[A,P]=Object.entries(v)[0];E[A]=P}else E.sprite=v;if(typeof m=="object"){let[A,P]=Object.entries(m)[0];E[A]=P}else E.tags=m;if(typeof b=="object"){let[A,P]=Object.entries(b)[0];E[A]=P}else E.link=b;E.typeC4Shape={text:i},E.parentBoundary=dg,E.wrap=sk()},$Me=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let C={};const A=rm.find(P=>P.alias===a);if(A&&a===A.alias?C=A:(C.alias=a,rm.push(C)),f==null?C.label={text:""}:C.label={text:f},p==null)C.techn={text:""};else if(typeof p=="object"){let[P,F]=Object.entries(p)[0];C[P]={text:F}}else C.techn={text:p};if(v==null)C.descr={text:""};else if(typeof v=="object"){let[P,F]=Object.entries(v)[0];C[P]={text:F}}else C.descr={text:v};if(typeof m=="object"){let[P,F]=Object.entries(m)[0];C[P]=F}else C.sprite=m;if(typeof b=="object"){let[P,F]=Object.entries(b)[0];C[P]=F}else C.tags=b;if(typeof E=="object"){let[P,F]=Object.entries(E)[0];C[P]=F}else C.link=E;C.wrap=sk(),C.typeC4Shape={text:i},C.parentBoundary=dg},zMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let C={};const A=rm.find(P=>P.alias===a);if(A&&a===A.alias?C=A:(C.alias=a,rm.push(C)),f==null?C.label={text:""}:C.label={text:f},p==null)C.techn={text:""};else if(typeof p=="object"){let[P,F]=Object.entries(p)[0];C[P]={text:F}}else C.techn={text:p};if(v==null)C.descr={text:""};else if(typeof v=="object"){let[P,F]=Object.entries(v)[0];C[P]={text:F}}else C.descr={text:v};if(typeof m=="object"){let[P,F]=Object.entries(m)[0];C[P]=F}else C.sprite=m;if(typeof b=="object"){let[P,F]=Object.entries(b)[0];C[P]=F}else C.tags=b;if(typeof E=="object"){let[P,F]=Object.entries(E)[0];C[P]=F}else C.link=E;C.wrap=sk(),C.typeC4Shape={text:i},C.parentBoundary=dg},qMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"system"};else if(typeof f=="object"){let[E,C]=Object.entries(f)[0];m[E]={text:C}}else m.type={text:f};if(typeof p=="object"){let[E,C]=Object.entries(p)[0];m[E]=C}else m.tags=p;if(typeof v=="object"){let[E,C]=Object.entries(v)[0];m[E]=C}else m.link=v;m.parentBoundary=dg,m.wrap=sk(),im=dg,dg=i,ik.push(im)},HMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"container"};else if(typeof f=="object"){let[E,C]=Object.entries(f)[0];m[E]={text:C}}else m.type={text:f};if(typeof p=="object"){let[E,C]=Object.entries(p)[0];m[E]=C}else m.tags=p;if(typeof v=="object"){let[E,C]=Object.entries(v)[0];m[E]=C}else m.link=v;m.parentBoundary=dg,m.wrap=sk(),im=dg,dg=i,ik.push(im)},VMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let C={};const A=d3.find(P=>P.alias===a);if(A&&a===A.alias?C=A:(C.alias=a,d3.push(C)),f==null?C.label={text:""}:C.label={text:f},p==null)C.type={text:"node"};else if(typeof p=="object"){let[P,F]=Object.entries(p)[0];C[P]={text:F}}else C.type={text:p};if(v==null)C.descr={text:""};else if(typeof v=="object"){let[P,F]=Object.entries(v)[0];C[P]={text:F}}else C.descr={text:v};if(typeof b=="object"){let[P,F]=Object.entries(b)[0];C[P]=F}else C.tags=b;if(typeof E=="object"){let[P,F]=Object.entries(E)[0];C[P]=F}else C.link=E;C.nodeType=i,C.parentBoundary=dg,C.wrap=sk(),im=dg,dg=a,ik.push(im)},GMe=function(){dg=im,ik.pop(),im=ik.pop(),ik.push(im)},UMe=function(i,a,f,p,v,m,b,E,C,A,P){let F=rm.find(j=>j.alias===a);if(!(F===void 0&&(F=d3.find(j=>j.alias===a),F===void 0))){if(f!=null)if(typeof f=="object"){let[j,R]=Object.entries(f)[0];F[j]=R}else F.bgColor=f;if(p!=null)if(typeof p=="object"){let[j,R]=Object.entries(p)[0];F[j]=R}else F.fontColor=p;if(v!=null)if(typeof v=="object"){let[j,R]=Object.entries(v)[0];F[j]=R}else F.borderColor=v;if(m!=null)if(typeof m=="object"){let[j,R]=Object.entries(m)[0];F[j]=R}else F.shadowing=m;if(b!=null)if(typeof b=="object"){let[j,R]=Object.entries(b)[0];F[j]=R}else F.shape=b;if(E!=null)if(typeof E=="object"){let[j,R]=Object.entries(E)[0];F[j]=R}else F.sprite=E;if(C!=null)if(typeof C=="object"){let[j,R]=Object.entries(C)[0];F[j]=R}else F.techn=C;if(A!=null)if(typeof A=="object"){let[j,R]=Object.entries(A)[0];F[j]=R}else F.legendText=A;if(P!=null)if(typeof P=="object"){let[j,R]=Object.entries(P)[0];F[j]=R}else F.legendSprite=P}},WMe=function(i,a,f,p,v,m,b){const E=rP.find(C=>C.from===a&&C.to===f);if(E!==void 0){if(p!=null)if(typeof p=="object"){let[C,A]=Object.entries(p)[0];E[C]=A}else E.textColor=p;if(v!=null)if(typeof v=="object"){let[C,A]=Object.entries(v)[0];E[C]=A}else E.lineColor=v;if(m!=null)if(typeof m=="object"){let[C,A]=Object.entries(m)[0];E[C]=parseInt(A)}else E.offsetX=parseInt(m);if(b!=null)if(typeof b=="object"){let[C,A]=Object.entries(b)[0];E[C]=parseInt(A)}else E.offsetY=parseInt(b)}},KMe=function(i,a,f){let p=GW,v=UW;if(typeof a=="object"){const m=Object.values(a)[0];p=parseInt(m)}else p=parseInt(a);if(typeof f=="object"){const m=Object.values(f)[0];v=parseInt(m)}else v=parseInt(f);p>=1&&(GW=p),v>=1&&(UW=v)},YMe=function(){return GW},XMe=function(){return UW},QMe=function(){return dg},ZMe=function(){return im},dNt=function(i){return i==null?rm:rm.filter(a=>a.parentBoundary===i)},JMe=function(i){return rm.find(a=>a.alias===i)},tDe=function(i){return Object.keys(dNt(i))},eDe=function(i){return i==null?d3:d3.filter(a=>a.parentBoundary===i)},nDe=function(){return rP},rDe=function(){return Ldt},iDe=function(i){Mdt=i},sk=function(){return Mdt},gNt={addPersonOrSystem:jMe,addPersonOrSystemBoundary:qMe,addContainer:$Me,addContainerBoundary:HMe,addComponent:zMe,addDeploymentNode:VMe,popBoundaryParseStack:GMe,addRel:RMe,updateElStyle:UMe,updateRelStyle:WMe,updateLayoutConfig:KMe,autoWrap:sk,setWrap:iDe,getC4ShapeArray:dNt,getC4Shape:JMe,getC4ShapeKeys:tDe,getBoundarys:eDe,getCurrentBoundaryParse:QMe,getParentBoundaryParse:ZMe,getRels:nDe,getTitle:rDe,getC4Type:PMe,getC4ShapeInRow:YMe,getC4BoundaryInRow:XMe,setAccTitle:m0,getAccTitle:ug,getAccDescription:hg,setAccDescription:lg,parseDirective:BMe,getConfig:()=>De().c4,clear:function(){rm=[],d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],im="",dg="global",ik=[""],rP=[],ik=[""],Ldt="",Mdt=!1,GW=4,UW=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Ldt=v0(i,De())},setC4Type:FMe},WW=(i,a)=>{const f=i.append("rect");if(f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),a.rx!==void 0&&f.attr("rx",a.rx),a.ry!==void 0&&f.attr("ry",a.ry),a.attrs!==void 0)for(const p in a.attrs)f.attr(p,a.attrs[p]);return a.class!==void 0&&f.attr("class",a.class),f},pNt=(i,a)=>{const f={x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,stroke:a.stroke,class:"rect"};WW(i,f).lower()},sDe=(i,a)=>{const f=a.text.replace($N," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},aDe=(i,a,f,p)=>{const v=i.append("image");v.attr("x",a),v.attr("y",f);const m=Xx(p);v.attr("xlink:href",m)},oDe=(i,a,f,p)=>{const v=i.append("use");v.attr("x",a),v.attr("y",f);const m=Xx(p);v.attr("xlink:href",`#${m}`)},u9=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),Ddt=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),Idt=function(i,a){return WW(i,a)},bNt=function(i,a,f,p,v,m){const b=i.append("image");b.attr("width",a),b.attr("height",f),b.attr("x",p),b.attr("y",v);let E=m.startsWith("data:image/png;base64")?m:Xx(m);b.attr("xlink:href",E)},cDe=(i,a,f)=>{const p=i.append("g");let v=0;for(let m of a){let b=m.textColor?m.textColor:"#444444",E=m.lineColor?m.lineColor:"#444444",C=m.offsetX?parseInt(m.offsetX):0,A=m.offsetY?parseInt(m.offsetY):0,P="";if(v===0){let j=p.append("line");j.attr("x1",m.startPoint.x),j.attr("y1",m.startPoint.y),j.attr("x2",m.endPoint.x),j.attr("y2",m.endPoint.y),j.attr("stroke-width","1"),j.attr("stroke",E),j.style("fill","none"),m.type!=="rel_b"&&j.attr("marker-end","url("+P+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+P+"#arrowend)"),v=-1}else{let j=p.append("path");j.attr("fill","none").attr("stroke-width","1").attr("stroke",E).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",m.startPoint.x).replaceAll("starty",m.startPoint.y).replaceAll("controlx",m.startPoint.x+(m.endPoint.x-m.startPoint.x)/2-(m.endPoint.x-m.startPoint.x)/4).replaceAll("controly",m.startPoint.y+(m.endPoint.y-m.startPoint.y)/2).replaceAll("stopx",m.endPoint.x).replaceAll("stopy",m.endPoint.y)),m.type!=="rel_b"&&j.attr("marker-end","url("+P+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+P+"#arrowend)")}let F=f.messageFont();E5(f)(m.label.text,p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+C,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+A,m.label.width,m.label.height,{fill:b},F),m.techn&&m.techn.text!==""&&(F=f.messageFont(),E5(f)("["+m.techn.text+"]",p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+C,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+f.messageFontSize+5+A,Math.max(m.label.width,m.techn.width),m.techn.height,{fill:b,"font-style":"italic"},F))}},uDe=function(i,a,f){const p=i.append("g");let v=a.bgColor?a.bgColor:"none",m=a.borderColor?a.borderColor:"#444444",b=a.fontColor?a.fontColor:"black",E={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};a.nodeType&&(E={"stroke-width":1});let C={x:a.x,y:a.y,fill:v,stroke:m,width:a.width,height:a.height,rx:2.5,ry:2.5,attrs:E};Idt(p,C);let A=f.boundaryFont();A.fontWeight="bold",A.fontSize=A.fontSize+2,A.fontColor=b,E5(f)(a.label.text,p,a.x,a.y+a.label.Y,a.width,a.height,{fill:"#444444"},A),a.type&&a.type.text!==""&&(A=f.boundaryFont(),A.fontColor=b,E5(f)(a.type.text,p,a.x,a.y+a.type.Y,a.width,a.height,{fill:"#444444"},A)),a.descr&&a.descr.text!==""&&(A=f.boundaryFont(),A.fontSize=A.fontSize-2,A.fontColor=b,E5(f)(a.descr.text,p,a.x,a.y+a.descr.Y,a.width,a.height,{fill:"#444444"},A))},lDe=function(i,a,f){var F;let p=a.bgColor?a.bgColor:f[a.typeC4Shape.text+"_bg_color"],v=a.borderColor?a.borderColor:f[a.typeC4Shape.text+"_border_color"],m=a.fontColor?a.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(a.typeC4Shape.text){case"person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const E=i.append("g");E.attr("class","person-man");const C=u9();switch(a.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":C.x=a.x,C.y=a.y,C.fill=p,C.width=a.width,C.height=a.height,C.stroke=v,C.rx=2.5,C.ry=2.5,C.attrs={"stroke-width":.5},Idt(E,C);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2).replaceAll("height",a.height)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("width",a.width).replaceAll("half",a.height/2)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",a.x+a.width).replaceAll("starty",a.y).replaceAll("half",a.height/2));break}let A=mDe(f,a.typeC4Shape.text);switch(E.append("text").attr("fill",m).attr("font-family",A.fontFamily).attr("font-size",A.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",a.typeC4Shape.width).attr("x",a.x+a.width/2-a.typeC4Shape.width/2).attr("y",a.y+a.typeC4Shape.Y).text("<<"+a.typeC4Shape.text+">>"),a.typeC4Shape.text){case"person":case"external_person":bNt(E,48,48,a.x+a.width/2-24,a.y+a.image.Y,b);break}let P=f[a.typeC4Shape.text+"Font"]();return P.fontWeight="bold",P.fontSize=P.fontSize+2,P.fontColor=m,E5(f)(a.label.text,E,a.x,a.y+a.label.Y,a.width,a.height,{fill:m},P),P=f[a.typeC4Shape.text+"Font"](),P.fontColor=m,a.techn&&((F=a.techn)==null?void 0:F.text)!==""?E5(f)(a.techn.text,E,a.x,a.y+a.techn.Y,a.width,a.height,{fill:m,"font-style":"italic"},P):a.type&&a.type.text!==""&&E5(f)(a.type.text,E,a.x,a.y+a.type.Y,a.width,a.height,{fill:m,"font-style":"italic"},P),a.descr&&a.descr.text!==""&&(P=f.personFont(),P.fontColor=m,E5(f)(a.descr.text,E,a.x,a.y+a.descr.Y,a.width,a.height,{fill:m},P)),a.height},hDe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},fDe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},dDe=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},gDe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},pDe=function(i){i.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},bDe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},vDe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},wDe=function(i){const f=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);f.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),f.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},mDe=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),E5=function(){function i(v,m,b,E,C,A,P){const F=m.append("text").attr("x",b+C/2).attr("y",E+A/2+5).style("text-anchor","middle").text(v);p(F,P)}function a(v,m,b,E,C,A,P,F){const{fontSize:j,fontFamily:R,fontWeight:H}=F,Y=v.split(ui.lineBreakRegex);for(let rt=0;rt=this.data.widthLimit||p>=this.data.widthLimit||this.nextData.cnt>vNt)&&(f=this.nextData.startx+a.margin+Es.nextLinePaddingX,v=this.nextData.stopy+a.margin*2,this.nextData.stopx=p=f+a.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=m=v+a.height,this.nextData.cnt=1),a.x=f,a.y=v,this.updateVal(this.data,"startx",f,Math.min),this.updateVal(this.data,"starty",v,Math.min),this.updateVal(this.data,"stopx",p,Math.max),this.updateVal(this.data,"stopy",m,Math.max),this.updateVal(this.nextData,"startx",f,Math.min),this.updateVal(this.nextData,"starty",v,Math.min),this.updateVal(this.nextData,"stopx",p,Math.max),this.updateVal(this.nextData,"stopy",m,Math.max)}init(a){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Ndt(a.db.getConfig())}bumpLastMargin(a){this.data.stopx+=a,this.data.stopy+=a}}const Ndt=function(i){Z1(Es,i),i.fontFamily&&(Es.personFontFamily=Es.systemFontFamily=Es.messageFontFamily=i.fontFamily),i.fontSize&&(Es.personFontSize=Es.systemFontSize=Es.messageFontSize=i.fontSize),i.fontWeight&&(Es.personFontWeight=Es.systemFontWeight=Es.messageFontWeight=i.fontWeight)},iP=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),XW=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),yDe=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function sm(i,a,f,p,v){if(!a[i].width)if(f)a[i].text=$It(a[i].text,v,p),a[i].textLines=a[i].text.split(ui.lineBreakRegex).length,a[i].width=v,a[i].height=edt(a[i].text,p);else{let m=a[i].text.split(ui.lineBreakRegex);a[i].textLines=m.length;let b=0;a[i].height=0,a[i].width=0;for(const E of m)a[i].width=Math.max(h3(E,p),a[i].width),b=edt(E,p),a[i].height=a[i].height+b}}const mNt=function(i,a,f){a.x=f.data.startx,a.y=f.data.starty,a.width=f.data.stopx-f.data.startx,a.height=f.data.stopy-f.data.starty,a.label.y=Es.c4ShapeMargin-35;let p=a.wrap&&Es.wrap,v=XW(Es);v.fontSize=v.fontSize+2,v.fontWeight="bold";let m=h3(a.label.text,v);sm("label",a,p,v,m),g3.drawBoundary(i,a,Es)},yNt=function(i,a,f,p){let v=0;for(const m of p){v=0;const b=f[m];let E=iP(Es,b.typeC4Shape.text);switch(E.fontSize=E.fontSize-2,b.typeC4Shape.width=h3("«"+b.typeC4Shape.text+"»",E),b.typeC4Shape.height=E.fontSize+2,b.typeC4Shape.Y=Es.c4ShapePadding,v=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height);let C=b.wrap&&Es.wrap,A=Es.width-Es.c4ShapePadding*2,P=iP(Es,b.typeC4Shape.text);if(P.fontSize=P.fontSize+2,P.fontWeight="bold",sm("label",b,C,P,A),b.label.Y=v+8,v=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let R=iP(Es,b.typeC4Shape.text);sm("type",b,C,R,A),b.type.Y=v+5,v=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let R=iP(Es,b.techn.text);sm("techn",b,C,R,A),b.techn.Y=v+5,v=b.techn.Y+b.techn.height}let F=v,j=b.label.width;if(b.descr&&b.descr.text!==""){let R=iP(Es,b.typeC4Shape.text);sm("descr",b,C,R,A),b.descr.Y=v+20,v=b.descr.Y+b.descr.height,j=Math.max(b.label.width,b.descr.width),F=v-b.descr.textLines*5}j=j+Es.c4ShapePadding,b.width=Math.max(b.width||Es.width,j,Es.width),b.height=Math.max(b.height||Es.height,F,Es.height),b.margin=b.margin||Es.c4ShapeMargin,i.insert(b),g3.drawC4Shape(a,b,Es)}i.bumpLastMargin(Es.c4ShapeMargin)};let tv=class{constructor(a,f){this.x=a,this.y=f}},xNt=function(i,a){let f=i.x,p=i.y,v=a.x,m=a.y,b=f+i.width/2,E=p+i.height/2,C=Math.abs(f-v),A=Math.abs(p-m),P=A/C,F=i.height/i.width,j=null;return p==m&&fv?j=new tv(f,E):f==v&&pm&&(j=new tv(b,p)),f>v&&p=P?j=new tv(f,E+P*i.width/2):j=new tv(b-C/A*i.height/2,p+i.height):f=P?j=new tv(f+i.width,E+P*i.width/2):j=new tv(b+C/A*i.height/2,p+i.height):fm?F>=P?j=new tv(f+i.width,E-P*i.width/2):j=new tv(b+i.height/2*C/A,p):f>v&&p>m&&(F>=P?j=new tv(f,E-i.width/2*P):j=new tv(b-i.height/2*C/A,p)),j},xDe=function(i,a){let f={x:0,y:0};f.x=a.x+a.width/2,f.y=a.y+a.height/2;let p=xNt(i,f);f.x=i.x+i.width/2,f.y=i.y+i.height/2;let v=xNt(a,f);return{startPoint:p,endPoint:v}};const kDe=function(i,a,f,p){let v=0;for(let m of a){v=v+1;let b=m.wrap&&Es.wrap,E=yDe(Es);p.db.getC4Type()==="C4Dynamic"&&(m.label.text=v+": "+m.label.text);let A=h3(m.label.text,E);sm("label",m,b,E,A),m.techn&&m.techn.text!==""&&(A=h3(m.techn.text,E),sm("techn",m,b,E,A)),m.descr&&m.descr.text!==""&&(A=h3(m.descr.text,E),sm("descr",m,b,E,A));let P=f(m.from),F=f(m.to),j=xDe(P,F);m.startPoint=j.startPoint,m.endPoint=j.endPoint}g3.drawRels(i,a,Es)};function kNt(i,a,f,p,v){let m=new wNt(v);m.data.widthLimit=f.data.widthLimit/Math.min(Odt,p.length);for(let[b,E]of p.entries()){let C=0;E.image={width:0,height:0,Y:0},E.sprite&&(E.image.width=48,E.image.height=48,E.image.Y=C,C=E.image.Y+E.image.height);let A=E.wrap&&Es.wrap,P=XW(Es);if(P.fontSize=P.fontSize+2,P.fontWeight="bold",sm("label",E,A,P,m.data.widthLimit),E.label.Y=C+8,C=E.label.Y+E.label.height,E.type&&E.type.text!==""){E.type.text="["+E.type.text+"]";let H=XW(Es);sm("type",E,A,H,m.data.widthLimit),E.type.Y=C+5,C=E.type.Y+E.type.height}if(E.descr&&E.descr.text!==""){let H=XW(Es);H.fontSize=H.fontSize-2,sm("descr",E,A,H,m.data.widthLimit),E.descr.Y=C+20,C=E.descr.Y+E.descr.height}if(b==0||b%Odt===0){let H=f.data.startx+Es.diagramMarginX,Y=f.data.stopy+Es.diagramMarginY+C;m.setData(H,H,Y,Y)}else{let H=m.data.stopx!==m.data.startx?m.data.stopx+Es.diagramMarginX:m.data.startx,Y=m.data.starty;m.setData(H,H,Y,Y)}m.name=E.alias;let F=v.db.getC4ShapeArray(E.alias),j=v.db.getC4ShapeKeys(E.alias);j.length>0&&yNt(m,i,F,j),a=E.alias;let R=v.db.getBoundarys(a);R.length>0&&kNt(i,a,m,R,v),E.alias!=="global"&&mNt(i,E,m),f.data.stopy=Math.max(m.data.stopy+Es.c4ShapeMargin,f.data.stopy),f.data.stopx=Math.max(m.data.stopx+Es.c4ShapeMargin,f.data.stopx),KW=Math.max(KW,f.data.stopx),YW=Math.max(YW,f.data.stopy)}}const ENt={drawPersonOrSystemArray:yNt,drawBoundary:mNt,setConf:Ndt,draw:function(i,a,f,p){Es=De().c4;const v=De().securityLevel;let m;v==="sandbox"&&(m=xr("#i"+a));const b=xr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body");let E=p.db;p.db.setWrap(Es.wrap),vNt=E.getC4ShapeInRow(),Odt=E.getC4BoundaryInRow(),Wt.debug(`C:${JSON.stringify(Es,null,2)}`);const C=v==="sandbox"?b.select(`[id="${a}"]`):xr(`[id="${a}"]`);g3.insertComputerIcon(C),g3.insertDatabaseIcon(C),g3.insertClockIcon(C);let A=new wNt(p);A.setData(Es.diagramMarginX,Es.diagramMarginX,Es.diagramMarginY,Es.diagramMarginY),A.data.widthLimit=screen.availWidth,KW=Es.diagramMarginX,YW=Es.diagramMarginY;const P=p.db.getTitle();let F=p.db.getBoundarys("");kNt(C,"",A,F,p),g3.insertArrowHead(C),g3.insertArrowEnd(C),g3.insertArrowCrossHead(C),g3.insertArrowFilledHead(C),kDe(C,p.db.getRels(),p.db.getC4Shape,p),A.data.stopx=KW,A.data.stopy=YW;const j=A.data;let H=j.stopy-j.starty+2*Es.diagramMarginY;const rt=j.stopx-j.startx+2*Es.diagramMarginX;P&&C.append("text").text(P).attr("x",(j.stopx-j.startx)/2-4*Es.diagramMarginX).attr("y",j.starty+Es.diagramMarginY),og(C,H,rt,Es.useMaxWidth);const J=P?60:0;C.attr("viewBox",j.startx-Es.diagramMarginX+" -"+(Es.diagramMarginY+J)+" "+rt+" "+(H+J)),Wt.debug("models:",j)}},EDe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:NMe,db:gNt,renderer:ENt,styles:i=>`.person { + */window.addEventListener("load",hNt,!1)}const zMe=function(i){Ob.parseError=i},jW=[];let Idt=!1;const fNt=async()=>{if(!Idt){for(Idt=!0;jW.length>0;){const i=jW.shift();if(i)try{await i()}catch(a){Ut.error("Error executing queue",a)}}Idt=!1}},qMe=async(i,a)=>new Promise((f,p)=>{const v=()=>new Promise((m,b)=>{hT.parse(i,a).then(E=>{m(E),f(E)},E=>{var _;Ut.error("Error parsing",E),(_=Ob.parseError)==null||_.call(Ob,E),b(E),p(E)})});jW.push(v),fNt().catch(p)}),dNt=(i,a,f)=>new Promise((p,v)=>{const m=()=>new Promise((b,E)=>{hT.render(i,a,f).then(_=>{b(_),p(_)},_=>{var L;Ut.error("Error parsing",_),(L=Ob.parseError)==null||L.call(Ob,_),E(_),v(_)})});jW.push(m),fNt().catch(v)}),Ob={startOnLoad:!0,mermaidAPI:hT,parse:qMe,render:dNt,init:jMe,run:uNt,registerExternalDiagrams:$Me,initialize:lNt,parseError:void 0,contentLoaded:hNt,setParseErrorHandler:zMe,detectType:hW};var $W=function(){var i=function(ds,Dr,nr,di){for(nr=nr||{},di=ds.length;di--;nr[ds[di]]=Dr);return nr},a=[1,24],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,63],E=[1,64],_=[1,65],L=[1,66],N=[1,67],B=[1,68],j=[1,69],R=[1,29],z=[1,30],K=[1,31],it=[1,32],st=[1,33],ut=[1,34],bt=[1,35],mt=[1,36],yt=[1,37],dt=[1,38],ht=[1,39],wt=[1,40],X=[1,41],pt=[1,42],U=[1,43],xt=[1,44],nt=[1,45],Ot=[1,46],Nt=[1,47],qt=[1,48],Ct=[1,50],Z=[1,51],Tt=[1,52],Ht=[1,53],It=[1,54],Ft=[1,55],ke=[1,56],pn=[1,57],Me=[1,58],ve=[1,59],Ge=[1,60],Ke=[14,42],we=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],_e=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$t=[1,82],re=[1,83],ie=[1,84],Oe=[1,85],oe=[12,14,42],Ne=[12,14,33,42],me=[12,14,33,42,76,77,79,80],cn=[12,33],li=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ya={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(Dr,nr,di,Ee,Yn,He,Ti){var gn=He.length-1;switch(Yn){case 3:Ee.setDirection("TB");break;case 4:Ee.setDirection("BT");break;case 5:Ee.setDirection("RL");break;case 6:Ee.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Ee.setC4Type(He[gn-3]);break;case 19:Ee.setTitle(He[gn].substring(6)),this.$=He[gn].substring(6);break;case 20:Ee.setAccDescription(He[gn].substring(15)),this.$=He[gn].substring(15);break;case 21:this.$=He[gn].trim(),Ee.setTitle(this.$);break;case 22:case 23:this.$=He[gn].trim(),Ee.setAccDescription(this.$);break;case 28:case 29:He[gn].splice(2,0,"ENTERPRISE"),Ee.addPersonOrSystemBoundary(...He[gn]),this.$=He[gn];break;case 30:Ee.addPersonOrSystemBoundary(...He[gn]),this.$=He[gn];break;case 31:He[gn].splice(2,0,"CONTAINER"),Ee.addContainerBoundary(...He[gn]),this.$=He[gn];break;case 32:Ee.addDeploymentNode("node",...He[gn]),this.$=He[gn];break;case 33:Ee.addDeploymentNode("nodeL",...He[gn]),this.$=He[gn];break;case 34:Ee.addDeploymentNode("nodeR",...He[gn]),this.$=He[gn];break;case 35:Ee.popBoundaryParseStack();break;case 39:Ee.addPersonOrSystem("person",...He[gn]),this.$=He[gn];break;case 40:Ee.addPersonOrSystem("external_person",...He[gn]),this.$=He[gn];break;case 41:Ee.addPersonOrSystem("system",...He[gn]),this.$=He[gn];break;case 42:Ee.addPersonOrSystem("system_db",...He[gn]),this.$=He[gn];break;case 43:Ee.addPersonOrSystem("system_queue",...He[gn]),this.$=He[gn];break;case 44:Ee.addPersonOrSystem("external_system",...He[gn]),this.$=He[gn];break;case 45:Ee.addPersonOrSystem("external_system_db",...He[gn]),this.$=He[gn];break;case 46:Ee.addPersonOrSystem("external_system_queue",...He[gn]),this.$=He[gn];break;case 47:Ee.addContainer("container",...He[gn]),this.$=He[gn];break;case 48:Ee.addContainer("container_db",...He[gn]),this.$=He[gn];break;case 49:Ee.addContainer("container_queue",...He[gn]),this.$=He[gn];break;case 50:Ee.addContainer("external_container",...He[gn]),this.$=He[gn];break;case 51:Ee.addContainer("external_container_db",...He[gn]),this.$=He[gn];break;case 52:Ee.addContainer("external_container_queue",...He[gn]),this.$=He[gn];break;case 53:Ee.addComponent("component",...He[gn]),this.$=He[gn];break;case 54:Ee.addComponent("component_db",...He[gn]),this.$=He[gn];break;case 55:Ee.addComponent("component_queue",...He[gn]),this.$=He[gn];break;case 56:Ee.addComponent("external_component",...He[gn]),this.$=He[gn];break;case 57:Ee.addComponent("external_component_db",...He[gn]),this.$=He[gn];break;case 58:Ee.addComponent("external_component_queue",...He[gn]),this.$=He[gn];break;case 60:Ee.addRel("rel",...He[gn]),this.$=He[gn];break;case 61:Ee.addRel("birel",...He[gn]),this.$=He[gn];break;case 62:Ee.addRel("rel_u",...He[gn]),this.$=He[gn];break;case 63:Ee.addRel("rel_d",...He[gn]),this.$=He[gn];break;case 64:Ee.addRel("rel_l",...He[gn]),this.$=He[gn];break;case 65:Ee.addRel("rel_r",...He[gn]),this.$=He[gn];break;case 66:Ee.addRel("rel_b",...He[gn]),this.$=He[gn];break;case 67:He[gn].splice(0,1),Ee.addRel("rel",...He[gn]),this.$=He[gn];break;case 68:Ee.updateElStyle("update_el_style",...He[gn]),this.$=He[gn];break;case 69:Ee.updateRelStyle("update_rel_style",...He[gn]),this.$=He[gn];break;case 70:Ee.updateLayoutConfig("update_layout_config",...He[gn]),this.$=He[gn];break;case 71:this.$=[He[gn]];break;case 72:He[gn].unshift(He[gn-1]),this.$=He[gn];break;case 73:case 75:this.$=He[gn].trim();break;case 74:let ks={};ks[He[gn-1].trim()]=He[gn].trim(),this.$=ks;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:70,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:71,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:72,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{13:73,19:20,20:21,21:22,22:a,23:f,24:p,26:v,28:m,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{14:[1,74]},i(Ke,[2,13],{43:23,29:49,30:61,32:62,20:75,34:b,36:E,37:_,38:L,39:N,40:B,41:j,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge}),i(Ke,[2,14]),i(we,[2,16],{12:[1,76]}),i(Ke,[2,36],{12:[1,77]}),i(_e,[2,19]),i(_e,[2,20]),{25:[1,78]},{27:[1,79]},i(_e,[2,23]),{35:80,75:81,76:$t,77:re,79:ie,80:Oe},{35:86,75:81,76:$t,77:re,79:ie,80:Oe},{35:87,75:81,76:$t,77:re,79:ie,80:Oe},{35:88,75:81,76:$t,77:re,79:ie,80:Oe},{35:89,75:81,76:$t,77:re,79:ie,80:Oe},{35:90,75:81,76:$t,77:re,79:ie,80:Oe},{35:91,75:81,76:$t,77:re,79:ie,80:Oe},{35:92,75:81,76:$t,77:re,79:ie,80:Oe},{35:93,75:81,76:$t,77:re,79:ie,80:Oe},{35:94,75:81,76:$t,77:re,79:ie,80:Oe},{35:95,75:81,76:$t,77:re,79:ie,80:Oe},{35:96,75:81,76:$t,77:re,79:ie,80:Oe},{35:97,75:81,76:$t,77:re,79:ie,80:Oe},{35:98,75:81,76:$t,77:re,79:ie,80:Oe},{35:99,75:81,76:$t,77:re,79:ie,80:Oe},{35:100,75:81,76:$t,77:re,79:ie,80:Oe},{35:101,75:81,76:$t,77:re,79:ie,80:Oe},{35:102,75:81,76:$t,77:re,79:ie,80:Oe},{35:103,75:81,76:$t,77:re,79:ie,80:Oe},{35:104,75:81,76:$t,77:re,79:ie,80:Oe},i(oe,[2,59]),{35:105,75:81,76:$t,77:re,79:ie,80:Oe},{35:106,75:81,76:$t,77:re,79:ie,80:Oe},{35:107,75:81,76:$t,77:re,79:ie,80:Oe},{35:108,75:81,76:$t,77:re,79:ie,80:Oe},{35:109,75:81,76:$t,77:re,79:ie,80:Oe},{35:110,75:81,76:$t,77:re,79:ie,80:Oe},{35:111,75:81,76:$t,77:re,79:ie,80:Oe},{35:112,75:81,76:$t,77:re,79:ie,80:Oe},{35:113,75:81,76:$t,77:re,79:ie,80:Oe},{35:114,75:81,76:$t,77:re,79:ie,80:Oe},{35:115,75:81,76:$t,77:re,79:ie,80:Oe},{20:116,29:49,30:61,32:62,34:b,36:E,37:_,38:L,39:N,40:B,41:j,43:23,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge},{12:[1,118],33:[1,117]},{35:119,75:81,76:$t,77:re,79:ie,80:Oe},{35:120,75:81,76:$t,77:re,79:ie,80:Oe},{35:121,75:81,76:$t,77:re,79:ie,80:Oe},{35:122,75:81,76:$t,77:re,79:ie,80:Oe},{35:123,75:81,76:$t,77:re,79:ie,80:Oe},{35:124,75:81,76:$t,77:re,79:ie,80:Oe},{35:125,75:81,76:$t,77:re,79:ie,80:Oe},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},i(Ke,[2,15]),i(we,[2,17],{21:22,19:130,22:a,23:f,24:p,26:v,28:m}),i(Ke,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:a,23:f,24:p,26:v,28:m,34:b,36:E,37:_,38:L,39:N,40:B,41:j,44:R,45:z,46:K,47:it,48:st,49:ut,50:bt,51:mt,52:yt,53:dt,54:ht,55:wt,56:X,57:pt,58:U,59:xt,60:nt,61:Ot,62:Nt,63:qt,64:Ct,65:Z,66:Tt,67:Ht,68:It,69:Ft,70:ke,71:pn,72:Me,73:ve,74:Ge}),i(_e,[2,21]),i(_e,[2,22]),i(oe,[2,39]),i(Ne,[2,71],{75:81,35:132,76:$t,77:re,79:ie,80:Oe}),i(me,[2,73]),{78:[1,133]},i(me,[2,75]),i(me,[2,76]),i(oe,[2,40]),i(oe,[2,41]),i(oe,[2,42]),i(oe,[2,43]),i(oe,[2,44]),i(oe,[2,45]),i(oe,[2,46]),i(oe,[2,47]),i(oe,[2,48]),i(oe,[2,49]),i(oe,[2,50]),i(oe,[2,51]),i(oe,[2,52]),i(oe,[2,53]),i(oe,[2,54]),i(oe,[2,55]),i(oe,[2,56]),i(oe,[2,57]),i(oe,[2,58]),i(oe,[2,60]),i(oe,[2,61]),i(oe,[2,62]),i(oe,[2,63]),i(oe,[2,64]),i(oe,[2,65]),i(oe,[2,66]),i(oe,[2,67]),i(oe,[2,68]),i(oe,[2,69]),i(oe,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},i(cn,[2,28]),i(cn,[2,29]),i(cn,[2,30]),i(cn,[2,31]),i(cn,[2,32]),i(cn,[2,33]),i(cn,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},i(we,[2,18]),i(Ke,[2,38]),i(Ne,[2,72]),i(me,[2,74]),i(oe,[2,24]),i(oe,[2,35]),i(li,[2,25]),i(li,[2,26],{12:[1,138]}),i(li,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(Dr,nr){if(nr.recoverable)this.trace(Dr);else{var di=new Error(Dr);throw di.hash=nr,di}},parse:function(Dr){var nr=this,di=[0],Ee=[],Yn=[null],He=[],Ti=this.table,gn="",ks=0,qa=0,La=2,Gs=1,No=He.slice.call(arguments,1),vs=Object.create(this.lexer),nu={yy:{}};for(var $s in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$s)&&(nu.yy[$s]=this.yy[$s]);vs.setInput(Dr,nu.yy),nu.yy.lexer=vs,nu.yy.parser=this,typeof vs.yylloc>"u"&&(vs.yylloc={});var Lu=vs.yylloc;He.push(Lu);var fm=vs.options&&vs.options.ranges;typeof nu.yy.parseError=="function"?this.parseError=nu.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function av(){var Ll;return Ll=Ee.pop()||vs.lex()||Gs,typeof Ll!="number"&&(Ll instanceof Array&&(Ee=Ll,Ll=Ee.pop()),Ll=nr.symbols_[Ll]||Ll),Ll}for(var Uu,Zl,Pa,Al,ua={},bc,Cc,ga,Ma;;){if(Zl=di[di.length-1],this.defaultActions[Zl]?Pa=this.defaultActions[Zl]:((Uu===null||typeof Uu>"u")&&(Uu=av()),Pa=Ti[Zl]&&Ti[Zl][Uu]),typeof Pa>"u"||!Pa.length||!Pa[0]){var Ha="";Ma=[];for(bc in Ti[Zl])this.terminals_[bc]&&bc>La&&Ma.push("'"+this.terminals_[bc]+"'");vs.showPosition?Ha="Parse error on line "+(ks+1)+`: +`+vs.showPosition()+` +Expecting `+Ma.join(", ")+", got '"+(this.terminals_[Uu]||Uu)+"'":Ha="Parse error on line "+(ks+1)+": Unexpected "+(Uu==Gs?"end of input":"'"+(this.terminals_[Uu]||Uu)+"'"),this.parseError(Ha,{text:vs.match,token:this.terminals_[Uu]||Uu,line:vs.yylineno,loc:Lu,expected:Ma})}if(Pa[0]instanceof Array&&Pa.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Zl+", token: "+Uu);switch(Pa[0]){case 1:di.push(Uu),Yn.push(vs.yytext),He.push(vs.yylloc),di.push(Pa[1]),Uu=null,qa=vs.yyleng,gn=vs.yytext,ks=vs.yylineno,Lu=vs.yylloc;break;case 2:if(Cc=this.productions_[Pa[1]][1],ua.$=Yn[Yn.length-Cc],ua._$={first_line:He[He.length-(Cc||1)].first_line,last_line:He[He.length-1].last_line,first_column:He[He.length-(Cc||1)].first_column,last_column:He[He.length-1].last_column},fm&&(ua._$.range=[He[He.length-(Cc||1)].range[0],He[He.length-1].range[1]]),Al=this.performAction.apply(ua,[gn,qa,ks,nu.yy,Pa[1],Yn,He].concat(No)),typeof Al<"u")return Al;Cc&&(di=di.slice(0,-1*Cc*2),Yn=Yn.slice(0,-1*Cc),He=He.slice(0,-1*Cc)),di.push(this.productions_[Pa[1]][0]),Yn.push(ua.$),He.push(ua._$),ga=Ti[di[di.length-2]][di[di.length-1]],di.push(ga);break;case 3:return!0}}return!0}},da=function(){var ds={EOF:1,parseError:function(nr,di){if(this.yy.parser)this.yy.parser.parseError(nr,di);else throw new Error(nr)},setInput:function(Dr,nr){return this.yy=nr||this.yy||{},this._input=Dr,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Dr=this._input[0];this.yytext+=Dr,this.yyleng++,this.offset++,this.match+=Dr,this.matched+=Dr;var nr=Dr.match(/(?:\r\n?|\n).*/g);return nr?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Dr},unput:function(Dr){var nr=Dr.length,di=Dr.split(/(?:\r\n?|\n)/g);this._input=Dr+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nr),this.offset-=nr;var Ee=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),di.length-1&&(this.yylineno-=di.length-1);var Yn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:di?(di.length===Ee.length?this.yylloc.first_column:0)+Ee[Ee.length-di.length].length-di[0].length:this.yylloc.first_column-nr},this.options.ranges&&(this.yylloc.range=[Yn[0],Yn[0]+this.yyleng-nr]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Dr){this.unput(this.match.slice(Dr))},pastInput:function(){var Dr=this.matched.substr(0,this.matched.length-this.match.length);return(Dr.length>20?"...":"")+Dr.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Dr=this.match;return Dr.length<20&&(Dr+=this._input.substr(0,20-Dr.length)),(Dr.substr(0,20)+(Dr.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Dr=this.pastInput(),nr=new Array(Dr.length+1).join("-");return Dr+this.upcomingInput()+` +`+nr+"^"},test_match:function(Dr,nr){var di,Ee,Yn;if(this.options.backtrack_lexer&&(Yn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Yn.yylloc.range=this.yylloc.range.slice(0))),Ee=Dr[0].match(/(?:\r\n?|\n).*/g),Ee&&(this.yylineno+=Ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ee?Ee[Ee.length-1].length-Ee[Ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Dr[0].length},this.yytext+=Dr[0],this.match+=Dr[0],this.matches=Dr,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Dr[0].length),this.matched+=Dr[0],di=this.performAction.call(this,this.yy,this,nr,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),di)return di;if(this._backtrack){for(var He in Yn)this[He]=Yn[He];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Dr,nr,di,Ee;this._more||(this.yytext="",this.match="");for(var Yn=this._currentRules(),He=0;Henr[0].length)){if(nr=di,Ee=He,this.options.backtrack_lexer){if(Dr=this.test_match(di,Yn[He]),Dr!==!1)return Dr;if(this._backtrack){nr=!1;continue}else return!1}else if(!this.options.flex)break}return nr?(Dr=this.test_match(nr,Yn[Ee]),Dr!==!1?Dr:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var nr=this.next();return nr||this.lex()},begin:function(nr){this.conditionStack.push(nr)},popState:function(){var nr=this.conditionStack.length-1;return nr>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(nr){return nr=this.conditionStack.length-1-Math.abs(nr||0),nr>=0?this.conditionStack[nr]:"INITIAL"},pushState:function(nr){this.begin(nr)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(nr,di,Ee,Yn){switch(Ee){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return ds}();ya.lexer=da;function Oo(){this.yy={}}return Oo.prototype=ya,ya.Parser=Oo,new Oo}();$W.parser=$W;const HMe=$W;let rm=[],sk=[""],lg="global",im="",d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],rP=[],Ddt="",Odt=!1,zW=4,qW=2;var gNt;const GMe=function(){return gNt},VMe=function(i){gNt=Dd(i,Le())},UMe=function(i,a,f,p,v,m,b,E,_){if(i==null||a===void 0||a===null||f===void 0||f===null||p===void 0||p===null)return;let L={};const N=rP.find(B=>B.from===a&&B.to===f);if(N?L=N:rP.push(L),L.type=i,L.from=a,L.to=f,L.label={text:p},v==null)L.techn={text:""};else if(typeof v=="object"){let[B,j]=Object.entries(v)[0];L[B]={text:j}}else L.techn={text:v};if(m==null)L.descr={text:""};else if(typeof m=="object"){let[B,j]=Object.entries(m)[0];L[B]={text:j}}else L.descr={text:m};if(typeof b=="object"){let[B,j]=Object.entries(b)[0];L[B]=j}else L.sprite=b;if(typeof E=="object"){let[B,j]=Object.entries(E)[0];L[B]=j}else L.tags=E;if(typeof _=="object"){let[B,j]=Object.entries(_)[0];L[B]=j}else L.link=_;L.wrap=ak()},WMe=function(i,a,f,p,v,m,b){if(a===null||f===null)return;let E={};const _=rm.find(L=>L.alias===a);if(_&&a===_.alias?E=_:(E.alias=a,rm.push(E)),f==null?E.label={text:""}:E.label={text:f},p==null)E.descr={text:""};else if(typeof p=="object"){let[L,N]=Object.entries(p)[0];E[L]={text:N}}else E.descr={text:p};if(typeof v=="object"){let[L,N]=Object.entries(v)[0];E[L]=N}else E.sprite=v;if(typeof m=="object"){let[L,N]=Object.entries(m)[0];E[L]=N}else E.tags=m;if(typeof b=="object"){let[L,N]=Object.entries(b)[0];E[L]=N}else E.link=b;E.typeC4Shape={text:i},E.parentBoundary=lg,E.wrap=ak()},KMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=rm.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,rm.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof m=="object"){let[N,B]=Object.entries(m)[0];_[N]=B}else _.sprite=m;if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.wrap=ak(),_.typeC4Shape={text:i},_.parentBoundary=lg},YMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=rm.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,rm.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.techn={text:""};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof m=="object"){let[N,B]=Object.entries(m)[0];_[N]=B}else _.sprite=m;if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.wrap=ak(),_.typeC4Shape={text:i},_.parentBoundary=lg},XMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"system"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof v=="object"){let[E,_]=Object.entries(v)[0];m[E]=_}else m.link=v;m.parentBoundary=lg,m.wrap=ak(),im=lg,lg=i,sk.push(im)},QMe=function(i,a,f,p,v){if(i===null||a===null)return;let m={};const b=d3.find(E=>E.alias===i);if(b&&i===b.alias?m=b:(m.alias=i,d3.push(m)),a==null?m.label={text:""}:m.label={text:a},f==null)m.type={text:"container"};else if(typeof f=="object"){let[E,_]=Object.entries(f)[0];m[E]={text:_}}else m.type={text:f};if(typeof p=="object"){let[E,_]=Object.entries(p)[0];m[E]=_}else m.tags=p;if(typeof v=="object"){let[E,_]=Object.entries(v)[0];m[E]=_}else m.link=v;m.parentBoundary=lg,m.wrap=ak(),im=lg,lg=i,sk.push(im)},ZMe=function(i,a,f,p,v,m,b,E){if(a===null||f===null)return;let _={};const L=d3.find(N=>N.alias===a);if(L&&a===L.alias?_=L:(_.alias=a,d3.push(_)),f==null?_.label={text:""}:_.label={text:f},p==null)_.type={text:"node"};else if(typeof p=="object"){let[N,B]=Object.entries(p)[0];_[N]={text:B}}else _.type={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[N,B]=Object.entries(v)[0];_[N]={text:B}}else _.descr={text:v};if(typeof b=="object"){let[N,B]=Object.entries(b)[0];_[N]=B}else _.tags=b;if(typeof E=="object"){let[N,B]=Object.entries(E)[0];_[N]=B}else _.link=E;_.nodeType=i,_.parentBoundary=lg,_.wrap=ak(),im=lg,lg=a,sk.push(im)},JMe=function(){lg=im,sk.pop(),im=sk.pop(),sk.push(im)},tIe=function(i,a,f,p,v,m,b,E,_,L,N){let B=rm.find(j=>j.alias===a);if(!(B===void 0&&(B=d3.find(j=>j.alias===a),B===void 0))){if(f!=null)if(typeof f=="object"){let[j,R]=Object.entries(f)[0];B[j]=R}else B.bgColor=f;if(p!=null)if(typeof p=="object"){let[j,R]=Object.entries(p)[0];B[j]=R}else B.fontColor=p;if(v!=null)if(typeof v=="object"){let[j,R]=Object.entries(v)[0];B[j]=R}else B.borderColor=v;if(m!=null)if(typeof m=="object"){let[j,R]=Object.entries(m)[0];B[j]=R}else B.shadowing=m;if(b!=null)if(typeof b=="object"){let[j,R]=Object.entries(b)[0];B[j]=R}else B.shape=b;if(E!=null)if(typeof E=="object"){let[j,R]=Object.entries(E)[0];B[j]=R}else B.sprite=E;if(_!=null)if(typeof _=="object"){let[j,R]=Object.entries(_)[0];B[j]=R}else B.techn=_;if(L!=null)if(typeof L=="object"){let[j,R]=Object.entries(L)[0];B[j]=R}else B.legendText=L;if(N!=null)if(typeof N=="object"){let[j,R]=Object.entries(N)[0];B[j]=R}else B.legendSprite=N}},eIe=function(i,a,f,p,v,m,b){const E=rP.find(_=>_.from===a&&_.to===f);if(E!==void 0){if(p!=null)if(typeof p=="object"){let[_,L]=Object.entries(p)[0];E[_]=L}else E.textColor=p;if(v!=null)if(typeof v=="object"){let[_,L]=Object.entries(v)[0];E[_]=L}else E.lineColor=v;if(m!=null)if(typeof m=="object"){let[_,L]=Object.entries(m)[0];E[_]=parseInt(L)}else E.offsetX=parseInt(m);if(b!=null)if(typeof b=="object"){let[_,L]=Object.entries(b)[0];E[_]=parseInt(L)}else E.offsetY=parseInt(b)}},nIe=function(i,a,f){let p=zW,v=qW;if(typeof a=="object"){const m=Object.values(a)[0];p=parseInt(m)}else p=parseInt(a);if(typeof f=="object"){const m=Object.values(f)[0];v=parseInt(m)}else v=parseInt(f);p>=1&&(zW=p),v>=1&&(qW=v)},rIe=function(){return zW},iIe=function(){return qW},sIe=function(){return lg},aIe=function(){return im},pNt=function(i){return i==null?rm:rm.filter(a=>a.parentBoundary===i)},oIe=function(i){return rm.find(a=>a.alias===i)},cIe=function(i){return Object.keys(pNt(i))},uIe=function(i){return i==null?d3:d3.filter(a=>a.parentBoundary===i)},lIe=function(){return rP},hIe=function(){return Ddt},fIe=function(i){Odt=i},ak=function(){return Odt},Ndt={addPersonOrSystem:WMe,addPersonOrSystemBoundary:XMe,addContainer:KMe,addContainerBoundary:QMe,addComponent:YMe,addDeploymentNode:ZMe,popBoundaryParseStack:JMe,addRel:UMe,updateElStyle:tIe,updateRelStyle:eIe,updateLayoutConfig:nIe,autoWrap:ak,setWrap:fIe,getC4ShapeArray:pNt,getC4Shape:oIe,getC4ShapeKeys:cIe,getBoundarys:uIe,getCurrentBoundaryParse:sIe,getParentBoundaryParse:aIe,getRels:lIe,getTitle:hIe,getC4Type:GMe,getC4ShapeInRow:rIe,getC4BoundaryInRow:iIe,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,getConfig:()=>Le().c4,clear:function(){rm=[],d3=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],im="",lg="global",sk=[""],rP=[],sk=[""],Ddt="",Odt=!1,zW=4,qW=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Ddt=Dd(i,Le())},setC4Type:VMe},HW=(i,a)=>{const f=i.append("rect");if(f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),a.rx!==void 0&&f.attr("rx",a.rx),a.ry!==void 0&&f.attr("ry",a.ry),a.attrs!==void 0)for(const p in a.attrs)f.attr(p,a.attrs[p]);return a.class!==void 0&&f.attr("class",a.class),f},bNt=(i,a)=>{const f={x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,stroke:a.stroke,class:"rect"};HW(i,f).lower()},dIe=(i,a)=>{const f=a.text.replace($N," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},gIe=(i,a,f,p)=>{const v=i.append("image");v.attr("x",a),v.attr("y",f);const m=Q6(p);v.attr("xlink:href",m)},pIe=(i,a,f,p)=>{const v=i.append("use");v.attr("x",a),v.attr("y",f);const m=Q6(p);v.attr("xlink:href",`#${m}`)},fT=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),Pdt=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),Fdt=function(i,a){return HW(i,a)},vNt=function(i,a,f,p,v,m){const b=i.append("image");b.attr("width",a),b.attr("height",f),b.attr("x",p),b.attr("y",v);let E=m.startsWith("data:image/png;base64")?m:Q6(m);b.attr("xlink:href",E)},bIe=(i,a,f)=>{const p=i.append("g");let v=0;for(let m of a){let b=m.textColor?m.textColor:"#444444",E=m.lineColor?m.lineColor:"#444444",_=m.offsetX?parseInt(m.offsetX):0,L=m.offsetY?parseInt(m.offsetY):0,N="";if(v===0){let j=p.append("line");j.attr("x1",m.startPoint.x),j.attr("y1",m.startPoint.y),j.attr("x2",m.endPoint.x),j.attr("y2",m.endPoint.y),j.attr("stroke-width","1"),j.attr("stroke",E),j.style("fill","none"),m.type!=="rel_b"&&j.attr("marker-end","url("+N+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+N+"#arrowend)"),v=-1}else{let j=p.append("path");j.attr("fill","none").attr("stroke-width","1").attr("stroke",E).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",m.startPoint.x).replaceAll("starty",m.startPoint.y).replaceAll("controlx",m.startPoint.x+(m.endPoint.x-m.startPoint.x)/2-(m.endPoint.x-m.startPoint.x)/4).replaceAll("controly",m.startPoint.y+(m.endPoint.y-m.startPoint.y)/2).replaceAll("stopx",m.endPoint.x).replaceAll("stopy",m.endPoint.y)),m.type!=="rel_b"&&j.attr("marker-end","url("+N+"#arrowhead)"),(m.type==="birel"||m.type==="rel_b")&&j.attr("marker-start","url("+N+"#arrowend)")}let B=f.messageFont();k5(f)(m.label.text,p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+L,m.label.width,m.label.height,{fill:b},B),m.techn&&m.techn.text!==""&&(B=f.messageFont(),k5(f)("["+m.techn.text+"]",p,Math.min(m.startPoint.x,m.endPoint.x)+Math.abs(m.endPoint.x-m.startPoint.x)/2+_,Math.min(m.startPoint.y,m.endPoint.y)+Math.abs(m.endPoint.y-m.startPoint.y)/2+f.messageFontSize+5+L,Math.max(m.label.width,m.techn.width),m.techn.height,{fill:b,"font-style":"italic"},B))}},vIe=function(i,a,f){const p=i.append("g");let v=a.bgColor?a.bgColor:"none",m=a.borderColor?a.borderColor:"#444444",b=a.fontColor?a.fontColor:"black",E={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};a.nodeType&&(E={"stroke-width":1});let _={x:a.x,y:a.y,fill:v,stroke:m,width:a.width,height:a.height,rx:2.5,ry:2.5,attrs:E};Fdt(p,_);let L=f.boundaryFont();L.fontWeight="bold",L.fontSize=L.fontSize+2,L.fontColor=b,k5(f)(a.label.text,p,a.x,a.y+a.label.Y,a.width,a.height,{fill:"#444444"},L),a.type&&a.type.text!==""&&(L=f.boundaryFont(),L.fontColor=b,k5(f)(a.type.text,p,a.x,a.y+a.type.Y,a.width,a.height,{fill:"#444444"},L)),a.descr&&a.descr.text!==""&&(L=f.boundaryFont(),L.fontSize=L.fontSize-2,L.fontColor=b,k5(f)(a.descr.text,p,a.x,a.y+a.descr.Y,a.width,a.height,{fill:"#444444"},L))},wIe=function(i,a,f){var B;let p=a.bgColor?a.bgColor:f[a.typeC4Shape.text+"_bg_color"],v=a.borderColor?a.borderColor:f[a.typeC4Shape.text+"_border_color"],m=a.fontColor?a.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(a.typeC4Shape.text){case"person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const E=i.append("g");E.attr("class","person-man");const _=fT();switch(a.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":_.x=a.x,_.y=a.y,_.fill=p,_.width=a.width,_.height=a.height,_.stroke=v,_.rx=2.5,_.ry=2.5,_.attrs={"stroke-width":.5},Fdt(E,_);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2).replaceAll("height",a.height)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("half",a.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":E.append("path").attr("fill",p).attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",a.x).replaceAll("starty",a.y).replaceAll("width",a.width).replaceAll("half",a.height/2)),E.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",v).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",a.x+a.width).replaceAll("starty",a.y).replaceAll("half",a.height/2));break}let L=SIe(f,a.typeC4Shape.text);switch(E.append("text").attr("fill",m).attr("font-family",L.fontFamily).attr("font-size",L.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",a.typeC4Shape.width).attr("x",a.x+a.width/2-a.typeC4Shape.width/2).attr("y",a.y+a.typeC4Shape.Y).text("<<"+a.typeC4Shape.text+">>"),a.typeC4Shape.text){case"person":case"external_person":vNt(E,48,48,a.x+a.width/2-24,a.y+a.image.Y,b);break}let N=f[a.typeC4Shape.text+"Font"]();return N.fontWeight="bold",N.fontSize=N.fontSize+2,N.fontColor=m,k5(f)(a.label.text,E,a.x,a.y+a.label.Y,a.width,a.height,{fill:m},N),N=f[a.typeC4Shape.text+"Font"](),N.fontColor=m,a.techn&&((B=a.techn)==null?void 0:B.text)!==""?k5(f)(a.techn.text,E,a.x,a.y+a.techn.Y,a.width,a.height,{fill:m,"font-style":"italic"},N):a.type&&a.type.text!==""&&k5(f)(a.type.text,E,a.x,a.y+a.type.Y,a.width,a.height,{fill:m,"font-style":"italic"},N),a.descr&&a.descr.text!==""&&(N=f.personFont(),N.fontColor=m,k5(f)(a.descr.text,E,a.x,a.y+a.descr.Y,a.width,a.height,{fill:m},N)),a.height},mIe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},yIe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},xIe=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},kIe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},EIe=function(i){i.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},TIe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},CIe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},_Ie=function(i){const f=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);f.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),f.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},SIe=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),k5=function(){function i(v,m,b,E,_,L,N){const B=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("text-anchor","middle").text(v);p(B,N)}function a(v,m,b,E,_,L,N,B){const{fontSize:j,fontFamily:R,fontWeight:z}=B,K=v.split(Yr.lineBreakRegex);for(let it=0;it=this.data.widthLimit||p>=this.data.widthLimit||this.nextData.cnt>wNt)&&(f=this.nextData.startx+a.margin+fs.nextLinePaddingX,v=this.nextData.stopy+a.margin*2,this.nextData.stopx=p=f+a.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=m=v+a.height,this.nextData.cnt=1),a.x=f,a.y=v,this.updateVal(this.data,"startx",f,Math.min),this.updateVal(this.data,"starty",v,Math.min),this.updateVal(this.data,"stopx",p,Math.max),this.updateVal(this.data,"stopy",m,Math.max),this.updateVal(this.nextData,"startx",f,Math.min),this.updateVal(this.nextData,"starty",v,Math.min),this.updateVal(this.nextData,"stopx",p,Math.max),this.updateVal(this.nextData,"stopy",m,Math.max)}init(a){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Rdt(a.db.getConfig())}bumpLastMargin(a){this.data.stopx+=a,this.data.stopy+=a}}const Rdt=function(i){Y1(fs,i),i.fontFamily&&(fs.personFontFamily=fs.systemFontFamily=fs.messageFontFamily=i.fontFamily),i.fontSize&&(fs.personFontSize=fs.systemFontSize=fs.messageFontSize=i.fontSize),i.fontWeight&&(fs.personFontWeight=fs.systemFontWeight=fs.messageFontWeight=i.fontWeight)},iP=(i,a)=>({fontFamily:i[a+"FontFamily"],fontSize:i[a+"FontSize"],fontWeight:i[a+"FontWeight"]}),UW=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),AIe=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function sm(i,a,f,p,v){if(!a[i].width)if(f)a[i].text=VDt(a[i].text,v,p),a[i].textLines=a[i].text.split(Yr.lineBreakRegex).length,a[i].width=v,a[i].height=ndt(a[i].text,p);else{let m=a[i].text.split(Yr.lineBreakRegex);a[i].textLines=m.length;let b=0;a[i].height=0,a[i].width=0;for(const E of m)a[i].width=Math.max(h3(E,p),a[i].width),b=ndt(E,p),a[i].height=a[i].height+b}}const yNt=function(i,a,f){a.x=f.data.startx,a.y=f.data.starty,a.width=f.data.stopx-f.data.startx,a.height=f.data.stopy-f.data.starty,a.label.y=fs.c4ShapeMargin-35;let p=a.wrap&&fs.wrap,v=UW(fs);v.fontSize=v.fontSize+2,v.fontWeight="bold";let m=h3(a.label.text,v);sm("label",a,p,v,m),g3.drawBoundary(i,a,fs)},xNt=function(i,a,f,p){let v=0;for(const m of p){v=0;const b=f[m];let E=iP(fs,b.typeC4Shape.text);switch(E.fontSize=E.fontSize-2,b.typeC4Shape.width=h3("«"+b.typeC4Shape.text+"»",E),b.typeC4Shape.height=E.fontSize+2,b.typeC4Shape.Y=fs.c4ShapePadding,v=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=v,v=b.image.Y+b.image.height);let _=b.wrap&&fs.wrap,L=fs.width-fs.c4ShapePadding*2,N=iP(fs,b.typeC4Shape.text);if(N.fontSize=N.fontSize+2,N.fontWeight="bold",sm("label",b,_,N,L),b.label.Y=v+8,v=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let R=iP(fs,b.typeC4Shape.text);sm("type",b,_,R,L),b.type.Y=v+5,v=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let R=iP(fs,b.techn.text);sm("techn",b,_,R,L),b.techn.Y=v+5,v=b.techn.Y+b.techn.height}let B=v,j=b.label.width;if(b.descr&&b.descr.text!==""){let R=iP(fs,b.typeC4Shape.text);sm("descr",b,_,R,L),b.descr.Y=v+20,v=b.descr.Y+b.descr.height,j=Math.max(b.label.width,b.descr.width),B=v-b.descr.textLines*5}j=j+fs.c4ShapePadding,b.width=Math.max(b.width||fs.width,j,fs.width),b.height=Math.max(b.height||fs.height,B,fs.height),b.margin=b.margin||fs.c4ShapeMargin,i.insert(b),g3.drawC4Shape(a,b,fs)}i.bumpLastMargin(fs.c4ShapeMargin)};let J2=class{constructor(a,f){this.x=a,this.y=f}},kNt=function(i,a){let f=i.x,p=i.y,v=a.x,m=a.y,b=f+i.width/2,E=p+i.height/2,_=Math.abs(f-v),L=Math.abs(p-m),N=L/_,B=i.height/i.width,j=null;return p==m&&fv?j=new J2(f,E):f==v&&pm&&(j=new J2(b,p)),f>v&&p=N?j=new J2(f,E+N*i.width/2):j=new J2(b-_/L*i.height/2,p+i.height):f=N?j=new J2(f+i.width,E+N*i.width/2):j=new J2(b+_/L*i.height/2,p+i.height):fm?B>=N?j=new J2(f+i.width,E-N*i.width/2):j=new J2(b+i.height/2*_/L,p):f>v&&p>m&&(B>=N?j=new J2(f,E-i.width/2*N):j=new J2(b-i.height/2*_/L,p)),j},LIe=function(i,a){let f={x:0,y:0};f.x=a.x+a.width/2,f.y=a.y+a.height/2;let p=kNt(i,f);f.x=i.x+i.width/2,f.y=i.y+i.height/2;let v=kNt(a,f);return{startPoint:p,endPoint:v}};const MIe=function(i,a,f,p){let v=0;for(let m of a){v=v+1;let b=m.wrap&&fs.wrap,E=AIe(fs);p.db.getC4Type()==="C4Dynamic"&&(m.label.text=v+": "+m.label.text);let L=h3(m.label.text,E);sm("label",m,b,E,L),m.techn&&m.techn.text!==""&&(L=h3(m.techn.text,E),sm("techn",m,b,E,L)),m.descr&&m.descr.text!==""&&(L=h3(m.descr.text,E),sm("descr",m,b,E,L));let N=f(m.from),B=f(m.to),j=LIe(N,B);m.startPoint=j.startPoint,m.endPoint=j.endPoint}g3.drawRels(i,a,fs)};function ENt(i,a,f,p,v){let m=new mNt(v);m.data.widthLimit=f.data.widthLimit/Math.min(Bdt,p.length);for(let[b,E]of p.entries()){let _=0;E.image={width:0,height:0,Y:0},E.sprite&&(E.image.width=48,E.image.height=48,E.image.Y=_,_=E.image.Y+E.image.height);let L=E.wrap&&fs.wrap,N=UW(fs);if(N.fontSize=N.fontSize+2,N.fontWeight="bold",sm("label",E,L,N,m.data.widthLimit),E.label.Y=_+8,_=E.label.Y+E.label.height,E.type&&E.type.text!==""){E.type.text="["+E.type.text+"]";let z=UW(fs);sm("type",E,L,z,m.data.widthLimit),E.type.Y=_+5,_=E.type.Y+E.type.height}if(E.descr&&E.descr.text!==""){let z=UW(fs);z.fontSize=z.fontSize-2,sm("descr",E,L,z,m.data.widthLimit),E.descr.Y=_+20,_=E.descr.Y+E.descr.height}if(b==0||b%Bdt===0){let z=f.data.startx+fs.diagramMarginX,K=f.data.stopy+fs.diagramMarginY+_;m.setData(z,z,K,K)}else{let z=m.data.stopx!==m.data.startx?m.data.stopx+fs.diagramMarginX:m.data.startx,K=m.data.starty;m.setData(z,z,K,K)}m.name=E.alias;let B=v.db.getC4ShapeArray(E.alias),j=v.db.getC4ShapeKeys(E.alias);j.length>0&&xNt(m,i,B,j),a=E.alias;let R=v.db.getBoundarys(a);R.length>0&&ENt(i,a,m,R,v),E.alias!=="global"&&yNt(i,E,m),f.data.stopy=Math.max(m.data.stopy+fs.c4ShapeMargin,f.data.stopy),f.data.stopx=Math.max(m.data.stopx+fs.c4ShapeMargin,f.data.stopx),GW=Math.max(GW,f.data.stopx),VW=Math.max(VW,f.data.stopy)}}const TNt={drawPersonOrSystemArray:xNt,drawBoundary:yNt,setConf:Rdt,draw:function(i,a,f,p){fs=Le().c4;const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const b=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body");let E=p.db;p.db.setWrap(fs.wrap),wNt=E.getC4ShapeInRow(),Bdt=E.getC4BoundaryInRow(),Ut.debug(`C:${JSON.stringify(fs,null,2)}`);const _=v==="sandbox"?b.select(`[id="${a}"]`):yr(`[id="${a}"]`);g3.insertComputerIcon(_),g3.insertDatabaseIcon(_),g3.insertClockIcon(_);let L=new mNt(p);L.setData(fs.diagramMarginX,fs.diagramMarginX,fs.diagramMarginY,fs.diagramMarginY),L.data.widthLimit=screen.availWidth,GW=fs.diagramMarginX,VW=fs.diagramMarginY;const N=p.db.getTitle();let B=p.db.getBoundarys("");ENt(_,"",L,B,p),g3.insertArrowHead(_),g3.insertArrowEnd(_),g3.insertArrowCrossHead(_),g3.insertArrowFilledHead(_),MIe(_,p.db.getRels(),p.db.getC4Shape,p),L.data.stopx=GW,L.data.stopy=VW;const j=L.data;let z=j.stopy-j.starty+2*fs.diagramMarginY;const it=j.stopx-j.startx+2*fs.diagramMarginX;N&&_.append("text").text(N).attr("x",(j.stopx-j.startx)/2-4*fs.diagramMarginX).attr("y",j.starty+fs.diagramMarginY),og(_,z,it,fs.useMaxWidth);const st=N?60:0;_.attr("viewBox",j.startx-fs.diagramMarginX+" -"+(fs.diagramMarginY+st)+" "+it+" "+(z+st)),Ut.debug("models:",j)}},IIe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:HMe,db:Ndt,renderer:TNt,styles:i=>`.person { stroke: ${i.personBorder}; fill: ${i.personBkg}; } -`,init:i=>{ENt.setConf(i.c4)}}},Symbol.toStringTag,{value:"Module"}));var Pdt=function(){var i=function(zb,os,As,ma){for(As=As||{},ma=zb.length;ma--;As[zb[ma]]=os);return As},a=[1,9],f=[1,7],p=[1,6],v=[1,8],m=[1,20,21,22,23,38,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],b=[2,10],E=[1,20],C=[1,21],A=[1,22],P=[1,23],F=[1,30],j=[1,32],R=[1,33],H=[1,34],Y=[1,56],rt=[1,55],J=[1,36],it=[1,37],ft=[1,38],Tt=[1,39],kt=[1,40],mt=[1,51],ct=[1,53],yt=[1,49],st=[1,54],xt=[1,50],ht=[1,57],dt=[1,52],Ct=[1,58],tt=[1,59],Pt=[1,41],pt=[1,42],Ft=[1,43],X=[1,44],Rt=[1,62],Bt=[1,67],vt=[1,20,21,22,23,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],Ot=[1,71],Vt=[1,70],qe=[1,72],_n=[20,21,23,84,86],Te=[1,98],Wn=[1,103],Ae=[1,102],ne=[1,99],ke=[1,95],Ve=[1,101],Ee=[1,97],He=[1,104],Ce=[1,100],$e=[1,105],ye=[1,96],fn=[20,21,22,23,84,86],Yt=[20,21,22,23,55,84,86],Mi=[20,21,22,23,40,53,55,57,59,61,63,65,67,69,72,74,76,77,79,84,86,97,110,113,114,117,119,122,123,124],qt=[20,21,23],zi=[20,21,23,53,69,84,86,97,110,113,114,117,119,122,123,124],Se=[1,12,20,21,22,23,24,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],ki=[53,69,97,110,113,114,117,119,122,123,124],Ri=[1,134],pi=[1,133],bi=[1,141],dn=[1,155],Nn=[1,156],Wr=[1,157],Li=[1,158],is=[1,143],Ts=[1,145],Aa=[1,149],Xi=[1,150],Ga=[1,151],_r=[1,152],qr=[1,153],Oi=[1,154],gr=[1,159],Js=[1,160],Vn=[1,139],Xc=[1,140],Er=[1,147],Mc=[1,142],bp=[1,146],fm=[1,144],T0=[20,21,22,23,38,43,45,47,49,53,69,92,93,94,95,96,97,110,113,114,117,119,122,123,124,129,130,131,132],Fd=[1,162],No=[20,21,22,23,26,53,69,97,113,114,117,119,122,123,124],ta=[1,182],bu=[1,178],Pu=[1,179],lo=[1,183],mo=[1,180],Os=[1,181],Tl=[12,21,22,24],Fu=[86,124,127],zo=[20,21,22,23,24,26,38,40,43,53,69,84,92,93,94,95,96,97,98,113,117,119,122,123,124],nd=[22,114],sf=[42,58,60,62,64,66,71,73,75,76,78,80,124,125,126],ll=[1,250],Vi=[1,248],Ke=[1,252],kr=[1,246],ni=[1,247],eo=[1,249],Dc=[1,251],Ju=[1,253],Qo=[1,270],jf=[20,21,23,114],rh=[20,21,22,23,69,92,113,114,117,118,119,120],dm={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,textNoTags:39,SQS:40,text:41,SQE:42,end:43,direction:44,acc_title:45,acc_title_value:46,acc_descr:47,acc_descr_value:48,acc_descr_multiline_value:49,link:50,node:51,styledVertex:52,AMP:53,vertex:54,STYLE_SEPARATOR:55,idString:56,DOUBLECIRCLESTART:57,DOUBLECIRCLEEND:58,PS:59,PE:60,"(-":61,"-)":62,STADIUMSTART:63,STADIUMEND:64,SUBROUTINESTART:65,SUBROUTINEEND:66,VERTEX_WITH_PROPS_START:67,"NODE_STRING[field]":68,COLON:69,"NODE_STRING[value]":70,PIPE:71,CYLINDERSTART:72,CYLINDEREND:73,DIAMOND_START:74,DIAMOND_STOP:75,TAGEND:76,TRAPSTART:77,TRAPEND:78,INVTRAPSTART:79,INVTRAPEND:80,linkStatement:81,arrowText:82,TESTSTR:83,START_LINK:84,edgeText:85,LINK:86,edgeTextToken:87,STR:88,MD_STR:89,textToken:90,keywords:91,STYLE:92,LINKSTYLE:93,CLASSDEF:94,CLASS:95,CLICK:96,DOWN:97,UP:98,textNoTagsToken:99,stylesOpt:100,"idString[vertex]":101,"idString[class]":102,CALLBACKNAME:103,CALLBACKARGS:104,HREF:105,LINK_TARGET:106,"STR[link]":107,"STR[tooltip]":108,alphaNum:109,DEFAULT:110,numList:111,INTERPOLATE:112,NUM:113,COMMA:114,style:115,styleComponent:116,NODE_STRING:117,UNIT:118,BRKT:119,PCT:120,idStringToken:121,MINUS:122,MULT:123,UNICODE_TEXT:124,TEXT:125,TAGSTART:126,EDGE_TEXT:127,alphaNumToken:128,direction_tb:129,direction_bt:130,direction_rl:131,direction_lr:132,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",42:"SQE",43:"end",45:"acc_title",46:"acc_title_value",47:"acc_descr",48:"acc_descr_value",49:"acc_descr_multiline_value",53:"AMP",55:"STYLE_SEPARATOR",57:"DOUBLECIRCLESTART",58:"DOUBLECIRCLEEND",59:"PS",60:"PE",61:"(-",62:"-)",63:"STADIUMSTART",64:"STADIUMEND",65:"SUBROUTINESTART",66:"SUBROUTINEEND",67:"VERTEX_WITH_PROPS_START",68:"NODE_STRING[field]",69:"COLON",70:"NODE_STRING[value]",71:"PIPE",72:"CYLINDERSTART",73:"CYLINDEREND",74:"DIAMOND_START",75:"DIAMOND_STOP",76:"TAGEND",77:"TRAPSTART",78:"TRAPEND",79:"INVTRAPSTART",80:"INVTRAPEND",83:"TESTSTR",84:"START_LINK",86:"LINK",88:"STR",89:"MD_STR",92:"STYLE",93:"LINKSTYLE",94:"CLASSDEF",95:"CLASS",96:"CLICK",97:"DOWN",98:"UP",101:"idString[vertex]",102:"idString[class]",103:"CALLBACKNAME",104:"CALLBACKARGS",105:"HREF",106:"LINK_TARGET",107:"STR[link]",108:"STR[tooltip]",110:"DEFAULT",112:"INTERPOLATE",113:"NUM",114:"COMMA",117:"NODE_STRING",118:"UNIT",119:"BRKT",120:"PCT",122:"MINUS",123:"MULT",124:"UNICODE_TEXT",125:"TEXT",126:"TAGSTART",127:"EDGE_TEXT",129:"direction_tb",130:"direction_bt",131:"direction_rl",132:"direction_lr"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[51,1],[51,5],[52,1],[52,3],[54,4],[54,4],[54,6],[54,4],[54,4],[54,4],[54,8],[54,4],[54,4],[54,4],[54,6],[54,4],[54,4],[54,4],[54,4],[54,4],[54,1],[50,2],[50,3],[50,3],[50,1],[50,3],[85,1],[85,2],[85,1],[85,1],[81,1],[82,3],[41,1],[41,2],[41,1],[41,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[39,1],[39,2],[39,1],[39,1],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,3],[37,5],[37,5],[37,7],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[111,1],[111,3],[100,1],[100,3],[115,1],[115,2],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[121,1],[90,1],[90,1],[90,1],[90,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[99,1],[87,1],[87,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[56,1],[56,2],[109,1],[109,2],[44,1],[44,1],[44,1],[44,1]],performAction:function(os,As,ma,vi,Qc,me,bg){var Oe=me.length-1;switch(Qc){case 5:vi.parseDirective("%%{","open_directive");break;case 6:vi.parseDirective(me[Oe],"type_directive");break;case 7:me[Oe]=me[Oe].trim().replace(/'/g,'"'),vi.parseDirective(me[Oe],"arg_directive");break;case 8:vi.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:(!Array.isArray(me[Oe])||me[Oe].length>0)&&me[Oe-1].push(me[Oe]),this.$=me[Oe-1];break;case 12:case 184:this.$=me[Oe];break;case 19:vi.setDirection("TB"),this.$="TB";break;case 20:vi.setDirection(me[Oe-1]),this.$=me[Oe-1];break;case 35:this.$=me[Oe-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=vi.addSubGraph(me[Oe-6],me[Oe-1],me[Oe-4]);break;case 42:this.$=vi.addSubGraph(me[Oe-3],me[Oe-1],me[Oe-3]);break;case 43:this.$=vi.addSubGraph(void 0,me[Oe-1],void 0);break;case 45:this.$=me[Oe].trim(),vi.setAccTitle(this.$);break;case 46:case 47:this.$=me[Oe].trim(),vi.setAccDescription(this.$);break;case 51:vi.addLink(me[Oe-2].stmt,me[Oe],me[Oe-1]),this.$={stmt:me[Oe],nodes:me[Oe].concat(me[Oe-2].nodes)};break;case 52:vi.addLink(me[Oe-3].stmt,me[Oe-1],me[Oe-2]),this.$={stmt:me[Oe-1],nodes:me[Oe-1].concat(me[Oe-3].nodes)};break;case 53:this.$={stmt:me[Oe-1],nodes:me[Oe-1]};break;case 54:this.$={stmt:me[Oe],nodes:me[Oe]};break;case 55:this.$=[me[Oe]];break;case 56:this.$=me[Oe-4].concat(me[Oe]);break;case 57:this.$=me[Oe];break;case 58:this.$=me[Oe-2],vi.setClass(me[Oe-2],me[Oe]);break;case 59:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"square");break;case 60:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"doublecircle");break;case 61:this.$=me[Oe-5],vi.addVertex(me[Oe-5],me[Oe-2],"circle");break;case 62:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"ellipse");break;case 63:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"stadium");break;case 64:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"subroutine");break;case 65:this.$=me[Oe-7],vi.addVertex(me[Oe-7],me[Oe-1],"rect",void 0,void 0,void 0,Object.fromEntries([[me[Oe-5],me[Oe-3]]]));break;case 66:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"cylinder");break;case 67:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"round");break;case 68:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"diamond");break;case 69:this.$=me[Oe-5],vi.addVertex(me[Oe-5],me[Oe-2],"hexagon");break;case 70:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"odd");break;case 71:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"trapezoid");break;case 72:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"inv_trapezoid");break;case 73:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"lean_right");break;case 74:this.$=me[Oe-3],vi.addVertex(me[Oe-3],me[Oe-1],"lean_left");break;case 75:this.$=me[Oe],vi.addVertex(me[Oe]);break;case 76:me[Oe-1].text=me[Oe],this.$=me[Oe-1];break;case 77:case 78:me[Oe-2].text=me[Oe-1],this.$=me[Oe-2];break;case 79:this.$=me[Oe];break;case 80:var af=vi.destructLink(me[Oe],me[Oe-2]);this.$={type:af.type,stroke:af.stroke,length:af.length,text:me[Oe-1]};break;case 81:this.$={text:me[Oe],type:"text"};break;case 82:this.$={text:me[Oe-1].text+""+me[Oe],type:me[Oe-1].type};break;case 83:this.$={text:me[Oe],type:"string"};break;case 84:this.$={text:me[Oe],type:"markdown"};break;case 85:var af=vi.destructLink(me[Oe]);this.$={type:af.type,stroke:af.stroke,length:af.length};break;case 86:this.$=me[Oe-1];break;case 87:this.$={text:me[Oe],type:"text"};break;case 88:this.$={text:me[Oe-1].text+""+me[Oe],type:me[Oe-1].type};break;case 89:this.$={text:me[Oe],type:"string"};break;case 90:case 105:this.$={text:me[Oe],type:"markdown"};break;case 102:this.$={text:me[Oe],type:"text"};break;case 103:this.$={text:me[Oe-1].text+""+me[Oe],type:me[Oe-1].type};break;case 104:this.$={text:me[Oe],type:"text"};break;case 106:this.$=me[Oe-4],vi.addClass(me[Oe-2],me[Oe]);break;case 107:this.$=me[Oe-4],vi.setClass(me[Oe-2],me[Oe]);break;case 108:case 116:this.$=me[Oe-1],vi.setClickEvent(me[Oe-1],me[Oe]);break;case 109:case 117:this.$=me[Oe-3],vi.setClickEvent(me[Oe-3],me[Oe-2]),vi.setTooltip(me[Oe-3],me[Oe]);break;case 110:this.$=me[Oe-2],vi.setClickEvent(me[Oe-2],me[Oe-1],me[Oe]);break;case 111:this.$=me[Oe-4],vi.setClickEvent(me[Oe-4],me[Oe-3],me[Oe-2]),vi.setTooltip(me[Oe-4],me[Oe]);break;case 112:this.$=me[Oe-2],vi.setLink(me[Oe-2],me[Oe]);break;case 113:this.$=me[Oe-4],vi.setLink(me[Oe-4],me[Oe-2]),vi.setTooltip(me[Oe-4],me[Oe]);break;case 114:this.$=me[Oe-4],vi.setLink(me[Oe-4],me[Oe-2],me[Oe]);break;case 115:this.$=me[Oe-6],vi.setLink(me[Oe-6],me[Oe-4],me[Oe]),vi.setTooltip(me[Oe-6],me[Oe-2]);break;case 118:this.$=me[Oe-1],vi.setLink(me[Oe-1],me[Oe]);break;case 119:this.$=me[Oe-3],vi.setLink(me[Oe-3],me[Oe-2]),vi.setTooltip(me[Oe-3],me[Oe]);break;case 120:this.$=me[Oe-3],vi.setLink(me[Oe-3],me[Oe-2],me[Oe]);break;case 121:this.$=me[Oe-5],vi.setLink(me[Oe-5],me[Oe-4],me[Oe]),vi.setTooltip(me[Oe-5],me[Oe-2]);break;case 122:this.$=me[Oe-4],vi.addVertex(me[Oe-2],void 0,void 0,me[Oe]);break;case 123:this.$=me[Oe-4],vi.updateLink([me[Oe-2]],me[Oe]);break;case 124:this.$=me[Oe-4],vi.updateLink(me[Oe-2],me[Oe]);break;case 125:this.$=me[Oe-8],vi.updateLinkInterpolate([me[Oe-6]],me[Oe-2]),vi.updateLink([me[Oe-6]],me[Oe]);break;case 126:this.$=me[Oe-8],vi.updateLinkInterpolate(me[Oe-6],me[Oe-2]),vi.updateLink(me[Oe-6],me[Oe]);break;case 127:this.$=me[Oe-6],vi.updateLinkInterpolate([me[Oe-4]],me[Oe]);break;case 128:this.$=me[Oe-6],vi.updateLinkInterpolate(me[Oe-4],me[Oe]);break;case 129:case 131:this.$=[me[Oe]];break;case 130:case 132:me[Oe-2].push(me[Oe]),this.$=me[Oe-2];break;case 134:this.$=me[Oe-1]+me[Oe];break;case 182:this.$=me[Oe];break;case 183:this.$=me[Oe-1]+""+me[Oe];break;case 185:this.$=me[Oe-1]+""+me[Oe];break;case 186:this.$={stmt:"dir",value:"TB"};break;case 187:this.$={stmt:"dir",value:"BT"};break;case 188:this.$={stmt:"dir",value:"RL"};break;case 189:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,5:3,6:5,12:a,16:4,21:f,22:p,24:v},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:a,16:4,21:f,22:p,24:v},i(m,b,{17:11}),{7:12,13:[1,13]},{16:14,21:f,22:p,24:v},{16:15,21:f,22:p,24:v},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:E,21:C,22:A,23:P,32:24,33:25,34:26,35:27,36:28,37:29,38:F,44:31,45:j,47:R,49:H,51:35,52:45,53:Y,54:46,56:47,69:rt,92:J,93:it,94:ft,95:Tt,96:kt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt,129:Pt,130:pt,131:Ft,132:X},{8:60,10:[1,61],15:Rt},i([10,15],[2,6]),i(m,[2,17]),i(m,[2,18]),i(m,[2,19]),{20:[1,64],21:[1,65],22:Bt,27:63,30:66},i(vt,[2,11]),i(vt,[2,12]),i(vt,[2,13]),i(vt,[2,14]),i(vt,[2,15]),i(vt,[2,16]),{9:68,20:Ot,21:Vt,23:qe,50:69,81:73,84:[1,74],86:[1,75]},{9:76,20:Ot,21:Vt,23:qe},{9:77,20:Ot,21:Vt,23:qe},{9:78,20:Ot,21:Vt,23:qe},{9:79,20:Ot,21:Vt,23:qe},{9:80,20:Ot,21:Vt,23:qe},{9:82,20:Ot,21:Vt,22:[1,81],23:qe},i(vt,[2,44]),{46:[1,83]},{48:[1,84]},i(vt,[2,47]),i(_n,[2,54],{30:85,22:Bt}),{22:[1,86]},{22:[1,87]},{22:[1,88]},{22:[1,89]},{26:Te,53:Wn,69:Ae,88:[1,93],97:ne,103:[1,90],105:[1,91],109:92,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye,128:94},i(vt,[2,186]),i(vt,[2,187]),i(vt,[2,188]),i(vt,[2,189]),i(fn,[2,55]),i(fn,[2,57],{55:[1,106]}),i(Yt,[2,75],{121:119,40:[1,107],53:Y,57:[1,108],59:[1,109],61:[1,110],63:[1,111],65:[1,112],67:[1,113],69:rt,72:[1,114],74:[1,115],76:[1,116],77:[1,117],79:[1,118],97:mt,110:ct,113:yt,114:st,117:xt,119:ht,122:dt,123:Ct,124:tt}),i(Mi,[2,182]),i(Mi,[2,143]),i(Mi,[2,144]),i(Mi,[2,145]),i(Mi,[2,146]),i(Mi,[2,147]),i(Mi,[2,148]),i(Mi,[2,149]),i(Mi,[2,150]),i(Mi,[2,151]),i(Mi,[2,152]),i(Mi,[2,153]),{9:120,20:Ot,21:Vt,23:qe},{11:121,14:[1,122]},i(qt,[2,8]),i(m,[2,20]),i(m,[2,26]),i(m,[2,27]),{21:[1,123]},i(zi,[2,34],{30:124,22:Bt}),i(vt,[2,35]),{51:125,52:45,53:Y,54:46,56:47,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},i(Se,[2,48]),i(Se,[2,49]),i(Se,[2,50]),i(ki,[2,79],{82:126,71:[1,128],83:[1,127]}),{85:129,87:130,88:[1,131],89:[1,132],124:Ri,127:pi},i([53,69,71,83,97,110,113,114,117,119,122,123,124],[2,85]),i(vt,[2,36]),i(vt,[2,37]),i(vt,[2,38]),i(vt,[2,39]),i(vt,[2,40]),{22:bi,24:dn,26:Nn,38:Wr,39:135,43:Li,53:is,69:Ts,84:Aa,88:[1,137],89:[1,138],91:148,92:Xi,93:Ga,94:_r,95:qr,96:Oi,97:gr,98:Js,99:136,113:Vn,117:Xc,119:Er,122:Mc,123:bp,124:fm},i(T0,b,{17:161}),i(vt,[2,45]),i(vt,[2,46]),i(_n,[2,53],{53:Fd}),{53:Y,56:163,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},{110:[1,164],111:165,113:[1,166]},{53:Y,56:167,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},{53:Y,56:168,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},i(qt,[2,108],{22:[1,169],104:[1,170]}),{88:[1,171]},i(qt,[2,116],{128:173,22:[1,172],26:Te,53:Wn,69:Ae,97:ne,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye}),i(qt,[2,118],{22:[1,174]}),i(No,[2,184]),i(No,[2,171]),i(No,[2,172]),i(No,[2,173]),i(No,[2,174]),i(No,[2,175]),i(No,[2,176]),i(No,[2,177]),i(No,[2,178]),i(No,[2,179]),i(No,[2,180]),i(No,[2,181]),{53:Y,56:175,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},{41:176,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:184,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:186,59:[1,185],76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:187,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:188,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:189,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{117:[1,190]},{41:191,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:192,74:[1,193],76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:194,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:195,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{41:196,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},i(Mi,[2,183]),i(Tl,[2,3]),{8:197,15:Rt},{15:[2,7]},i(m,[2,28]),i(zi,[2,33]),i(_n,[2,51],{30:198,22:Bt}),i(ki,[2,76],{22:[1,199]}),{22:[1,200]},{41:201,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{86:[1,202],87:203,124:Ri,127:pi},i(Fu,[2,81]),i(Fu,[2,83]),i(Fu,[2,84]),i(Fu,[2,169]),i(Fu,[2,170]),{9:205,20:Ot,21:Vt,22:bi,23:qe,24:dn,26:Nn,38:Wr,40:[1,204],43:Li,53:is,69:Ts,84:Aa,91:148,92:Xi,93:Ga,94:_r,95:qr,96:Oi,97:gr,98:Js,99:206,113:Vn,117:Xc,119:Er,122:Mc,123:bp,124:fm},i(zo,[2,102]),i(zo,[2,104]),i(zo,[2,105]),i(zo,[2,158]),i(zo,[2,159]),i(zo,[2,160]),i(zo,[2,161]),i(zo,[2,162]),i(zo,[2,163]),i(zo,[2,164]),i(zo,[2,165]),i(zo,[2,166]),i(zo,[2,167]),i(zo,[2,168]),i(zo,[2,91]),i(zo,[2,92]),i(zo,[2,93]),i(zo,[2,94]),i(zo,[2,95]),i(zo,[2,96]),i(zo,[2,97]),i(zo,[2,98]),i(zo,[2,99]),i(zo,[2,100]),i(zo,[2,101]),{18:18,19:19,20:E,21:C,22:A,23:P,32:24,33:25,34:26,35:27,36:28,37:29,38:F,43:[1,207],44:31,45:j,47:R,49:H,51:35,52:45,53:Y,54:46,56:47,69:rt,92:J,93:it,94:ft,95:Tt,96:kt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt,129:Pt,130:pt,131:Ft,132:X},{22:Bt,30:208},{22:[1,209],53:Y,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:119,122:dt,123:Ct,124:tt},{22:[1,210]},{22:[1,211],114:[1,212]},i(nd,[2,129]),{22:[1,213],53:Y,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:119,122:dt,123:Ct,124:tt},{22:[1,214],53:Y,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:119,122:dt,123:Ct,124:tt},{88:[1,215]},i(qt,[2,110],{22:[1,216]}),i(qt,[2,112],{22:[1,217]}),{88:[1,218]},i(No,[2,185]),{88:[1,219],106:[1,220]},i(fn,[2,58],{121:119,53:Y,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,122:dt,123:Ct,124:tt}),{42:[1,221],76:ta,90:222,124:lo,125:mo,126:Os},i(sf,[2,87]),i(sf,[2,89]),i(sf,[2,90]),i(sf,[2,154]),i(sf,[2,155]),i(sf,[2,156]),i(sf,[2,157]),{58:[1,223],76:ta,90:222,124:lo,125:mo,126:Os},{41:224,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{60:[1,225],76:ta,90:222,124:lo,125:mo,126:Os},{62:[1,226],76:ta,90:222,124:lo,125:mo,126:Os},{64:[1,227],76:ta,90:222,124:lo,125:mo,126:Os},{66:[1,228],76:ta,90:222,124:lo,125:mo,126:Os},{69:[1,229]},{73:[1,230],76:ta,90:222,124:lo,125:mo,126:Os},{75:[1,231],76:ta,90:222,124:lo,125:mo,126:Os},{41:232,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},{42:[1,233],76:ta,90:222,124:lo,125:mo,126:Os},{76:ta,78:[1,234],80:[1,235],90:222,124:lo,125:mo,126:Os},{76:ta,78:[1,237],80:[1,236],90:222,124:lo,125:mo,126:Os},{9:238,20:Ot,21:Vt,23:qe},i(_n,[2,52],{53:Fd}),i(ki,[2,78]),i(ki,[2,77]),{71:[1,239],76:ta,90:222,124:lo,125:mo,126:Os},i(ki,[2,80]),i(Fu,[2,82]),{41:240,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},i(T0,b,{17:241}),i(zo,[2,103]),i(vt,[2,43]),{52:242,53:Y,54:46,56:47,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},{22:ll,69:Vi,92:Ke,100:243,113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},{22:ll,69:Vi,92:Ke,100:254,112:[1,255],113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},{22:ll,69:Vi,92:Ke,100:256,112:[1,257],113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},{113:[1,258]},{22:ll,69:Vi,92:Ke,100:259,113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},{53:Y,56:260,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt},i(qt,[2,109]),{88:[1,261]},{88:[1,262],106:[1,263]},i(qt,[2,117]),i(qt,[2,119],{22:[1,264]}),i(qt,[2,120]),i(Yt,[2,59]),i(sf,[2,88]),i(Yt,[2,60]),{60:[1,265],76:ta,90:222,124:lo,125:mo,126:Os},i(Yt,[2,67]),i(Yt,[2,62]),i(Yt,[2,63]),i(Yt,[2,64]),{117:[1,266]},i(Yt,[2,66]),i(Yt,[2,68]),{75:[1,267],76:ta,90:222,124:lo,125:mo,126:Os},i(Yt,[2,70]),i(Yt,[2,71]),i(Yt,[2,73]),i(Yt,[2,72]),i(Yt,[2,74]),i(Tl,[2,4]),i([22,53,69,97,110,113,114,117,119,122,123,124],[2,86]),{42:[1,268],76:ta,90:222,124:lo,125:mo,126:Os},{18:18,19:19,20:E,21:C,22:A,23:P,32:24,33:25,34:26,35:27,36:28,37:29,38:F,43:[1,269],44:31,45:j,47:R,49:H,51:35,52:45,53:Y,54:46,56:47,69:rt,92:J,93:it,94:ft,95:Tt,96:kt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt,129:Pt,130:pt,131:Ft,132:X},i(fn,[2,56]),i(qt,[2,122],{114:Qo}),i(jf,[2,131],{116:271,22:ll,69:Vi,92:Ke,113:kr,117:ni,118:eo,119:Dc,120:Ju}),i(rh,[2,133]),i(rh,[2,135]),i(rh,[2,136]),i(rh,[2,137]),i(rh,[2,138]),i(rh,[2,139]),i(rh,[2,140]),i(rh,[2,141]),i(rh,[2,142]),i(qt,[2,123],{114:Qo}),{22:[1,272]},i(qt,[2,124],{114:Qo}),{22:[1,273]},i(nd,[2,130]),i(qt,[2,106],{114:Qo}),i(qt,[2,107],{121:119,53:Y,69:rt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,122:dt,123:Ct,124:tt}),i(qt,[2,111]),i(qt,[2,113],{22:[1,274]}),i(qt,[2,114]),{106:[1,275]},{60:[1,276]},{71:[1,277]},{75:[1,278]},{9:279,20:Ot,21:Vt,23:qe},i(vt,[2,42]),{22:ll,69:Vi,92:Ke,113:kr,115:280,116:245,117:ni,118:eo,119:Dc,120:Ju},i(rh,[2,134]),{26:Te,53:Wn,69:Ae,97:ne,109:281,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye,128:94},{26:Te,53:Wn,69:Ae,97:ne,109:282,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye,128:94},{106:[1,283]},i(qt,[2,121]),i(Yt,[2,61]),{41:284,76:ta,88:bu,89:Pu,90:177,124:lo,125:mo,126:Os},i(Yt,[2,69]),i(T0,b,{17:285}),i(jf,[2,132],{116:271,22:ll,69:Vi,92:Ke,113:kr,117:ni,118:eo,119:Dc,120:Ju}),i(qt,[2,127],{128:173,22:[1,286],26:Te,53:Wn,69:Ae,97:ne,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye}),i(qt,[2,128],{128:173,22:[1,287],26:Te,53:Wn,69:Ae,97:ne,113:ke,114:Ve,117:Ee,119:He,122:Ce,123:$e,124:ye}),i(qt,[2,115]),{42:[1,288],76:ta,90:222,124:lo,125:mo,126:Os},{18:18,19:19,20:E,21:C,22:A,23:P,32:24,33:25,34:26,35:27,36:28,37:29,38:F,43:[1,289],44:31,45:j,47:R,49:H,51:35,52:45,53:Y,54:46,56:47,69:rt,92:J,93:it,94:ft,95:Tt,96:kt,97:mt,110:ct,113:yt,114:st,117:xt,119:ht,121:48,122:dt,123:Ct,124:tt,129:Pt,130:pt,131:Ft,132:X},{22:ll,69:Vi,92:Ke,100:290,113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},{22:ll,69:Vi,92:Ke,100:291,113:kr,115:244,116:245,117:ni,118:eo,119:Dc,120:Ju},i(Yt,[2,65]),i(vt,[2,41]),i(qt,[2,125],{114:Qo}),i(qt,[2,126],{114:Qo})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],122:[2,7]},parseError:function(os,As){if(As.recoverable)this.trace(os);else{var ma=new Error(os);throw ma.hash=As,ma}},parse:function(os){var As=this,ma=[0],vi=[],Qc=[null],me=[],bg=this.table,Oe="",af=0,fk=0,k3=2,gm=1,A9=me.slice.call(arguments,1),au=Object.create(this.lexer),vg={yy:{}};for(var dk in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dk)&&(vg.yy[dk]=this.yy[dk]);au.setInput(os,vg.yy),vg.yy.lexer=au,vg.yy.parser=this,typeof au.yylloc>"u"&&(au.yylloc={});var vp=au.yylloc;me.push(vp);var L9=au.options&&au.options.ranges;typeof vg.yy.parseError=="function"?this.parseError=vg.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M9(){var no;return no=vi.pop()||au.lex()||gm,typeof no!="number"&&(no instanceof Array&&(vi=no,no=vi.pop()),no=As.symbols_[no]||no),no}for(var $f,ov,Bd,E3,cv={},uv,wg,R5,ou;;){if(ov=ma[ma.length-1],this.defaultActions[ov]?Bd=this.defaultActions[ov]:(($f===null||typeof $f>"u")&&($f=M9()),Bd=bg[ov]&&bg[ov][$f]),typeof Bd>"u"||!Bd.length||!Bd[0]){var j5="";ou=[];for(uv in bg[ov])this.terminals_[uv]&&uv>k3&&ou.push("'"+this.terminals_[uv]+"'");au.showPosition?j5="Parse error on line "+(af+1)+`: -`+au.showPosition()+` -Expecting `+ou.join(", ")+", got '"+(this.terminals_[$f]||$f)+"'":j5="Parse error on line "+(af+1)+": Unexpected "+($f==gm?"end of input":"'"+(this.terminals_[$f]||$f)+"'"),this.parseError(j5,{text:au.match,token:this.terminals_[$f]||$f,line:au.yylineno,loc:vp,expected:ou})}if(Bd[0]instanceof Array&&Bd.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ov+", token: "+$f);switch(Bd[0]){case 1:ma.push($f),Qc.push(au.yytext),me.push(au.yylloc),ma.push(Bd[1]),$f=null,fk=au.yyleng,Oe=au.yytext,af=au.yylineno,vp=au.yylloc;break;case 2:if(wg=this.productions_[Bd[1]][1],cv.$=Qc[Qc.length-wg],cv._$={first_line:me[me.length-(wg||1)].first_line,last_line:me[me.length-1].last_line,first_column:me[me.length-(wg||1)].first_column,last_column:me[me.length-1].last_column},L9&&(cv._$.range=[me[me.length-(wg||1)].range[0],me[me.length-1].range[1]]),E3=this.performAction.apply(cv,[Oe,fk,af,vg.yy,Bd[1],Qc,me].concat(A9)),typeof E3<"u")return E3;wg&&(ma=ma.slice(0,-1*wg*2),Qc=Qc.slice(0,-1*wg),me=me.slice(0,-1*wg)),ma.push(this.productions_[Bd[1]][0]),Qc.push(cv.$),me.push(cv._$),R5=bg[ma[ma.length-2]][ma[ma.length-1]],ma.push(R5);break;case 3:return!0}}return!0}},S9=function(){var zb={EOF:1,parseError:function(As,ma){if(this.yy.parser)this.yy.parser.parseError(As,ma);else throw new Error(As)},setInput:function(os,As){return this.yy=As||this.yy||{},this._input=os,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var os=this._input[0];this.yytext+=os,this.yyleng++,this.offset++,this.match+=os,this.matched+=os;var As=os.match(/(?:\r\n?|\n).*/g);return As?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),os},unput:function(os){var As=os.length,ma=os.split(/(?:\r\n?|\n)/g);this._input=os+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-As),this.offset-=As;var vi=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ma.length-1&&(this.yylineno-=ma.length-1);var Qc=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ma?(ma.length===vi.length?this.yylloc.first_column:0)+vi[vi.length-ma.length].length-ma[0].length:this.yylloc.first_column-As},this.options.ranges&&(this.yylloc.range=[Qc[0],Qc[0]+this.yyleng-As]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(os){this.unput(this.match.slice(os))},pastInput:function(){var os=this.matched.substr(0,this.matched.length-this.match.length);return(os.length>20?"...":"")+os.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var os=this.match;return os.length<20&&(os+=this._input.substr(0,20-os.length)),(os.substr(0,20)+(os.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var os=this.pastInput(),As=new Array(os.length+1).join("-");return os+this.upcomingInput()+` -`+As+"^"},test_match:function(os,As){var ma,vi,Qc;if(this.options.backtrack_lexer&&(Qc={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Qc.yylloc.range=this.yylloc.range.slice(0))),vi=os[0].match(/(?:\r\n?|\n).*/g),vi&&(this.yylineno+=vi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:vi?vi[vi.length-1].length-vi[vi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+os[0].length},this.yytext+=os[0],this.match+=os[0],this.matches=os,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(os[0].length),this.matched+=os[0],ma=this.performAction.call(this,this.yy,this,As,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ma)return ma;if(this._backtrack){for(var me in Qc)this[me]=Qc[me];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var os,As,ma,vi;this._more||(this.yytext="",this.match="");for(var Qc=this._currentRules(),me=0;meAs[0].length)){if(As=ma,vi=me,this.options.backtrack_lexer){if(os=this.test_match(ma,Qc[me]),os!==!1)return os;if(this._backtrack){As=!1;continue}else return!1}else if(!this.options.flex)break}return As?(os=this.test_match(As,Qc[vi]),os!==!1?os:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var As=this.next();return As||this.lex()},begin:function(As){this.conditionStack.push(As)},popState:function(){var As=this.conditionStack.length-1;return As>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(As){return As=this.conditionStack.length-1-Math.abs(As||0),As>=0?this.conditionStack[As]:"INITIAL"},pushState:function(As){this.begin(As)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(As,ma,vi,Qc){switch(vi){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:return this.begin("acc_title"),45;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),47;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:this.begin("callbackname");break;case 13:this.popState();break;case 14:this.popState(),this.begin("callbackargs");break;case 15:return 103;case 16:this.popState();break;case 17:return 104;case 18:return"MD_STR";case 19:this.popState();break;case 20:this.begin("md_string");break;case 21:return"STR";case 22:this.popState();break;case 23:this.pushState("string");break;case 24:return 92;case 25:return 110;case 26:return 93;case 27:return 112;case 28:return 94;case 29:return 95;case 30:return 105;case 31:this.begin("click");break;case 32:this.popState();break;case 33:return 96;case 34:return As.lex.firstGraph()&&this.begin("dir"),24;case 35:return As.lex.firstGraph()&&this.begin("dir"),24;case 36:return As.lex.firstGraph()&&this.begin("dir"),24;case 37:return 38;case 38:return 43;case 39:return 106;case 40:return 106;case 41:return 106;case 42:return 106;case 43:return this.popState(),25;case 44:return this.popState(),26;case 45:return this.popState(),26;case 46:return this.popState(),26;case 47:return this.popState(),26;case 48:return this.popState(),26;case 49:return this.popState(),26;case 50:return this.popState(),26;case 51:return this.popState(),26;case 52:return this.popState(),26;case 53:return this.popState(),26;case 54:return 129;case 55:return 130;case 56:return 131;case 57:return 132;case 58:return 113;case 59:return 119;case 60:return 55;case 61:return 69;case 62:return 53;case 63:return 20;case 64:return 114;case 65:return 123;case 66:return this.popState(),86;case 67:return this.pushState("edgeText"),84;case 68:return 127;case 69:return this.popState(),86;case 70:return this.pushState("thickEdgeText"),84;case 71:return 127;case 72:return this.popState(),86;case 73:return this.pushState("dottedEdgeText"),84;case 74:return 127;case 75:return 86;case 76:return this.popState(),62;case 77:return"TEXT";case 78:return this.pushState("ellipseText"),61;case 79:return this.popState(),64;case 80:return this.pushState("text"),63;case 81:return this.popState(),66;case 82:return this.pushState("text"),65;case 83:return 67;case 84:return this.pushState("text"),76;case 85:return this.popState(),73;case 86:return this.pushState("text"),72;case 87:return this.popState(),58;case 88:return this.pushState("text"),57;case 89:return this.popState(),78;case 90:return this.popState(),80;case 91:return 125;case 92:return this.pushState("trapText"),77;case 93:return this.pushState("trapText"),79;case 94:return 126;case 95:return 76;case 96:return 98;case 97:return"SEP";case 98:return 97;case 99:return 123;case 100:return 119;case 101:return 53;case 102:return 117;case 103:return 122;case 104:return 124;case 105:return this.popState(),71;case 106:return this.pushState("text"),71;case 107:return this.popState(),60;case 108:return this.pushState("text"),59;case 109:return this.popState(),42;case 110:return this.pushState("text"),40;case 111:return this.popState(),75;case 112:return this.pushState("text"),74;case 113:return"TEXT";case 114:return"QUOTE";case 115:return 21;case 116:return 22;case 117:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|(?!\)+))/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},arg_directive:{rules:[3,4,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},type_directive:{rules:[2,3,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},open_directive:{rules:[1,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},callbackargs:{rules:[16,17,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},callbackname:{rules:[13,14,15,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},href:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},click:{rules:[20,23,32,33,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},dottedEdgeText:{rules:[20,23,72,74,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},thickEdgeText:{rules:[20,23,69,71,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},edgeText:{rules:[20,23,66,68,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},trapText:{rules:[20,23,75,78,80,82,86,88,89,90,91,92,93,106,108,110,112],inclusive:!1},ellipseText:{rules:[20,23,75,76,77,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},text:{rules:[20,23,75,78,79,80,81,82,85,86,87,88,92,93,105,106,107,108,109,110,111,112,113],inclusive:!1},vertex:{rules:[20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},dir:{rules:[20,23,43,44,45,46,47,48,49,50,51,52,53,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_descr_multiline:{rules:[10,11,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_descr:{rules:[8,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},acc_title:{rules:[6,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},md_string:{rules:[18,19,20,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},string:{rules:[20,21,22,23,75,78,80,82,86,88,92,93,106,108,110,112],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,20,23,24,25,26,27,28,29,30,31,34,35,36,37,38,39,40,41,42,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,70,72,73,75,78,80,82,83,84,86,88,92,93,94,95,96,97,98,99,100,101,102,103,104,106,108,110,112,114,115,116,117],inclusive:!0}}};return zb}();dm.lexer=S9;function x3(){this.yy={}}return x3.prototype=dm,dm.Parser=x3,new x3}();Pdt.parser=Pdt;const Fdt=Pdt,TDe="flowchart-";let TNt=0,Bdt=De(),El={},l9=[],QA={},T5=[],QW={},ZW={},JW=0,Rdt=!0,ev,tK,eK=[];const nK=i=>ui.sanitizeText(i,Bdt),_Nt=function(i,a,f){J1.parseDirective(this,i,a,f)},sP=function(i){const a=Object.keys(El);for(const f of a)if(El[f].id===i)return El[f].domId;return i},CNt=function(i,a,f,p,v,m,b={}){let E,C=i;C!==void 0&&C.trim().length!==0&&(El[C]===void 0&&(El[C]={id:C,labelType:"text",domId:TDe+C+"-"+TNt,styles:[],classes:[]}),TNt++,a!==void 0?(Bdt=De(),E=nK(a.text.trim()),El[C].labelType=a.type,E[0]==='"'&&E[E.length-1]==='"'&&(E=E.substring(1,E.length-1)),El[C].text=E):El[C].text===void 0&&(El[C].text=i),f!==void 0&&(El[C].type=f),p!=null&&p.forEach(function(A){El[C].styles.push(A)}),v!=null&&v.forEach(function(A){El[C].classes.push(A)}),m!==void 0&&(El[C].dir=m),El[C].props===void 0?El[C].props=b:b!==void 0&&Object.assign(El[C].props,b))},SNt=function(i,a,f){const m={start:i,end:a,type:void 0,text:"",labelType:"text"};Wt.info("abc78 Got edge...",m);const b=f.text;b!==void 0&&(m.text=nK(b.text.trim()),m.text[0]==='"'&&m.text[m.text.length-1]==='"'&&(m.text=m.text.substring(1,m.text.length-1)),m.labelType=b.type),f!==void 0&&(m.type=f.type,m.stroke=f.stroke,m.length=f.length),l9.push(m)},ANt=function(i,a,f){Wt.info("addLink (abc78)",i,a,f);let p,v;for(p=0;p/)&&(ev="LR"),ev.match(/.*v/)&&(ev="TB"),ev==="TD"&&(ev="TB")},rK=function(i,a){i.split(",").forEach(function(f){let p=f;El[p]!==void 0&&El[p].classes.push(a),QW[p]!==void 0&&QW[p].classes.push(a)})},_De=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(ZW[tK==="gen-1"?sP(f):f]=nK(a))})},CDe=function(i,a,f){let p=sP(i);if(De().securityLevel!=="loose"||a===void 0)return;let v=[];if(typeof f=="string"){v=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),xr(this).classed("hover",!1)})};eK.push(zNt);const qNt=function(i="gen-1"){El={},QA={},l9=[],eK=[zNt],T5=[],QW={},JW=0,ZW={},Rdt=!0,tK=i,cg()},HNt=i=>{tK=i||"gen-2"},VNt=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},GNt=function(i,a,f){let p=i.text.trim(),v=f.text;i===f&&f.text.match(/\s/)&&(p=void 0);function m(P){const F={boolean:{},number:{},string:{}},j=[];let R;return{nodeList:P.filter(function(Y){const rt=typeof Y;return Y.stmt&&Y.stmt==="dir"?(R=Y.value,!1):Y.trim()===""?!1:rt in F?F[rt].hasOwnProperty(Y)?!1:F[rt][Y]=!0:j.includes(Y)?!1:j.push(Y)}),dir:R}}let b=[];const{nodeList:E,dir:C}=m(b.concat.apply(b,a));if(b=E,tK==="gen-1")for(let P=0;P2e3)return;if(UNt[aP]=a,T5[a].id===i)return{result:!0,count:0};let p=0,v=1;for(;p=0){const b=WNt(i,m);if(b.result)return{result:!0,count:v+b.count};v=v+b.count}p=p+1}return{result:!1,count:v}},KNt=function(i){return UNt[i]},YNt=function(){aP=-1,T5.length>0&&WNt("none",T5.length-1)},XNt=function(){return T5},QNt=()=>Rdt?(Rdt=!1,!0):!1,ADe=i=>{let a=i.trim(),f="arrow_open";switch(a[0]){case"<":f="arrow_point",a=a.slice(1);break;case"x":f="arrow_cross",a=a.slice(1);break;case"o":f="arrow_circle",a=a.slice(1);break}let p="normal";return a.includes("=")&&(p="thick"),a.includes(".")&&(p="dotted"),{type:f,stroke:p}},LDe=(i,a)=>{const f=a.length;let p=0;for(let v=0;v{const a=i.trim();let f=a.slice(0,-1),p="arrow_open";switch(a.slice(-1)){case"x":p="arrow_cross",a[0]==="x"&&(p="double_"+p,f=f.slice(1));break;case">":p="arrow_point",a[0]==="<"&&(p="double_"+p,f=f.slice(1));break;case"o":p="arrow_circle",a[0]==="o"&&(p="double_"+p,f=f.slice(1));break}let v="normal",m=f.length-1;f[0]==="="&&(v="thick"),f[0]==="~"&&(v="invisible");let b=LDe(".",f);return b&&(v="dotted",m=b),{type:p,stroke:v,length:m}},ZNt=(i,a)=>{const f=MDe(i);let p;if(a){if(p=ADe(a),p.stroke!==f.stroke)return{type:"INVALID",stroke:"INVALID"};if(p.type==="arrow_open")p.type=f.type;else{if(p.type!==f.type)return{type:"INVALID",stroke:"INVALID"};p.type="double_"+p.type}return p.type==="double_arrow"&&(p.type="double_arrow_point"),p.length=f.length,p}return f},JNt=(i,a)=>{let f=!1;return i.forEach(p=>{p.nodes.indexOf(a)>=0&&(f=!0)}),f},tPt=(i,a)=>{const f=[];return i.nodes.forEach((p,v)=>{JNt(a,p)||f.push(i.nodes[v])}),{nodes:f}},ePt={firstGraph:QNt},h9={parseDirective:_Nt,defaultConfig:()=>i9.flowchart,setAccTitle:m0,getAccTitle:ug,getAccDescription:hg,setAccDescription:lg,addVertex:CNt,lookUpDomId:sP,addLink:ANt,updateLinkInterpolate:LNt,updateLink:MNt,addClass:DNt,setDirection:INt,setClass:rK,setTooltip:_De,getTooltip:NNt,setClickEvent:PNt,setLink:ONt,bindFunctions:FNt,getDirection:BNt,getVertices:RNt,getEdges:jNt,getClasses:$Nt,clear:qNt,setGen:HNt,defaultStyle:VNt,addSubGraph:GNt,getDepthFirstPos:KNt,indexNodes:YNt,getSubGraphs:XNt,destructLink:ZNt,lex:ePt,exists:JNt,makeUniq:tPt,setDiagramTitle:Nb,getDiagramTitle:hp},DDe=Object.freeze(Object.defineProperty({__proto__:null,addClass:DNt,addLink:ANt,addSingleLink:SNt,addSubGraph:GNt,addVertex:CNt,bindFunctions:FNt,clear:qNt,default:h9,defaultStyle:VNt,destructLink:ZNt,firstGraph:QNt,getClasses:$Nt,getDepthFirstPos:KNt,getDirection:BNt,getEdges:jNt,getSubGraphs:XNt,getTooltip:NNt,getVertices:RNt,indexNodes:YNt,lex:ePt,lookUpDomId:sP,parseDirective:_Nt,setClass:rK,setClickEvent:PNt,setDirection:INt,setGen:HNt,setLink:ONt,updateLink:MNt,updateLinkInterpolate:LNt},Symbol.toStringTag,{value:"Module"}));var IDe="[object Symbol]";function f9(i){return typeof i=="symbol"||l3(i)&&QE(i)==IDe}function ZA(i,a){for(var f=-1,p=i==null?0:i.length,v=Array(p);++f-1}function Fb(i){return tk(i)?MIt(i):QOt(i)}var XDe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,QDe=/^\w*$/;function jdt(i,a){if(Of(i))return!1;var f=typeof i;return f=="number"||f=="symbol"||f=="boolean"||i==null||f9(i)?!0:QDe.test(i)||!XDe.test(i)||a!=null&&i in Object(a)}var ZDe=500;function JDe(i){var a=FA(i,function(p){return f.size===ZDe&&f.clear(),p}),f=a.cache;return a}var tIe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,eIe=/\\(\\)?/g,nIe=JDe(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(tIe,function(f,p,v,m){a.push(v?m.replace(eIe,"$1"):p||f)}),a});const rIe=nIe;function uPt(i){return i==null?"":iPt(i)}function sK(i,a){return Of(i)?i:jdt(i,a)?[i]:rIe(uPt(i))}var iIe=1/0;function oP(i){if(typeof i=="string"||f9(i))return i;var a=i+"";return a=="0"&&1/i==-iIe?"-0":a}function aK(i,a){a=sK(a,i);for(var f=0,p=a.length;i!=null&&f0&&f(E)?a>1?oK(E,a-1,f,p,v):$dt(v,E):p||(v[v.length]=E)}return v}function JA(i){var a=i==null?0:i.length;return a?oK(i,1):[]}function oIe(i){return NIt(OIt(i,void 0,JA),i+"")}function cIe(i,a,f,p){var v=-1,m=i==null?0:i.length;for(p&&m&&(f=i[++v]);++vE))return!1;var A=m.get(i),P=m.get(a);if(A&&P)return A==a&&P==i;var F=-1,j=!0,R=f&FOe?new uP:void 0;for(m.set(i,a),m.set(a,i);++F2?a[2]:void 0;for(v&&KN(a[0],a[1],v)&&(p=1);++f-1?v[m?a[b]:b]:void 0}}var _Ne=Math.max;function CNe(i,a,f){var p=i==null?0:i.length;if(!p)return-1;var v=f==null?0:VDe(f);return v<0&&(v=_Ne(p+v,0)),cPt(i,ak(a),v)}var SNe=TNe(CNe);const Kdt=SNe;function PPt(i,a){var f=-1,p=tk(i)?Array(i.length):[];return uK(i,function(v,m,b){p[++f]=a(v,m,b)}),p}function Ff(i,a){var f=Of(i)?ZA:PPt;return f(i,ak(a))}function ANe(i,a){return i==null?i:Y1t(i,Wdt(a),e9)}function LNe(i,a){return i&&Udt(i,Wdt(a))}function MNe(i,a){return i>a}var DNe=Object.prototype,INe=DNe.hasOwnProperty;function ONe(i,a){return i!=null&&INe.call(i,a)}function Va(i,a){return i!=null&&DPt(i,a,ONe)}function NNe(i,a){return ZA(a,function(f){return i[f]})}function C5(i){return i==null?[]:NNe(i,Fb(i))}function tf(i){return i===void 0}function FPt(i,a){return ia||m&&b&&C&&!E&&!A||p&&b&&C||!f&&C||!v)return 1;if(!p&&!m&&!A&&i=E)return C;var A=f[p];return C*(A=="desc"?-1:1)}}return i.index-a.index}function $Ne(i,a,f){a.length?a=ZA(a,function(m){return Of(m)?function(b){return aK(b,m.length===1?m[0]:m)}:m}):a=[n9];var p=-1;a=ZA(a,wW(ak));var v=PPt(i,function(m,b,E){var C=ZA(a,function(A){return A(m)});return{criteria:C,index:++p,value:m}});return BNe(v,function(m,b){return jNe(m,b,f)})}function zNe(i,a){return FNe(i,a,function(f,p){return IPt(i,p)})}var qNe=oIe(function(i,a){return i==null?{}:zNe(i,a)});const hP=qNe;var HNe=Math.ceil,VNe=Math.max;function GNe(i,a,f,p){for(var v=-1,m=VNe(HNe((a-i)/(f||1)),0),b=Array(m);m--;)b[p?m:++v]=i,i+=f;return b}function UNe(i){return function(a,f,p){return p&&typeof p!="number"&&KN(a,f,p)&&(f=p=void 0),a=iK(a),f===void 0?(f=a,a=0):f=iK(f),p=p===void 0?a1&&KN(i,a[0],a[1])?a=[]:f>2&&KN(a[0],a[1],a[2])&&(a=[a[0]]),$Ne(i,oK(a,1),[])});const dP=YNe;var XNe=1/0,QNe=YA&&1/Hdt(new YA([,-0]))[1]==XNe?function(i){return new YA(i)}:GDe;const ZNe=QNe;var JNe=200;function tPe(i,a,f){var p=-1,v=YDe,m=i.length,b=!0,E=[],C=E;if(f)b=!1,v=kNe;else if(m>=JNe){var A=a?null:ZNe(i);if(A)return Hdt(A);b=!1,v=EPt,C=new uP}else C=a?[]:E;t:for(;++p1?v.setNode(m,f):v.setNode(m)}),this}setNode(a,f){return Va(this._nodes,a)?(arguments.length>1&&(this._nodes[a]=f),this):(this._nodes[a]=arguments.length>1?f:this._defaultNodeLabelFn(a),this._isCompound&&(this._parent[a]=p9,this._children[a]={},this._children[p9][a]=!0),this._in[a]={},this._preds[a]={},this._out[a]={},this._sucs[a]={},++this._nodeCount,this)}node(a){return this._nodes[a]}hasNode(a){return Va(this._nodes,a)}removeNode(a){var f=this;if(Va(this._nodes,a)){var p=function(v){f.removeEdge(f._edgeObjs[v])};delete this._nodes[a],this._isCompound&&(this._removeFromParentsChildList(a),delete this._parent[a],cr(this.children(a),function(v){f.setParent(v)}),delete this._children[a]),cr(Fb(this._in[a]),p),delete this._in[a],delete this._preds[a],cr(Fb(this._out[a]),p),delete this._out[a],delete this._sucs[a],--this._nodeCount}return this}setParent(a,f){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(tf(f))f=p9;else{f+="";for(var p=f;!tf(p);p=this.parent(p))if(p===a)throw new Error("Setting "+f+" as parent of "+a+" would create a cycle");this.setNode(f)}return this.setNode(a),this._removeFromParentsChildList(a),this._parent[a]=f,this._children[f][a]=!0,this}_removeFromParentsChildList(a){delete this._children[this._parent[a]][a]}parent(a){if(this._isCompound){var f=this._parent[a];if(f!==p9)return f}}children(a){if(tf(a)&&(a=p9),this._isCompound){var f=this._children[a];if(f)return Fb(f)}else{if(a===p9)return this.nodes();if(this.hasNode(a))return[]}}predecessors(a){var f=this._preds[a];if(f)return Fb(f)}successors(a){var f=this._sucs[a];if(f)return Fb(f)}neighbors(a){var f=this.predecessors(a);if(f)return nPe(f,this.successors(a))}isLeaf(a){var f;return this.isDirected()?f=this.successors(a):f=this.neighbors(a),f.length===0}filterNodes(a){var f=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});f.setGraph(this.graph());var p=this;cr(this._nodes,function(b,E){a(E)&&f.setNode(E,b)}),cr(this._edgeObjs,function(b){f.hasNode(b.v)&&f.hasNode(b.w)&&f.setEdge(b,p.edge(b))});var v={};function m(b){var E=p.parent(b);return E===void 0||f.hasNode(E)?(v[b]=E,E):E in v?v[E]:m(E)}return this._isCompound&&cr(f.nodes(),function(b){f.setParent(b,m(b))}),f}setDefaultEdgeLabel(a){return NA(a)||(a=$A(a)),this._defaultEdgeLabelFn=a,this}edgeCount(){return this._edgeCount}edges(){return C5(this._edgeObjs)}setPath(a,f){var p=this,v=arguments;return fP(a,function(m,b){return v.length>1?p.setEdge(m,b,f):p.setEdge(m,b),b}),this}setEdge(){var a,f,p,v,m=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(a=b.v,f=b.w,p=b.name,arguments.length===2&&(v=arguments[1],m=!0)):(a=b,f=arguments[1],p=arguments[3],arguments.length>2&&(v=arguments[2],m=!0)),a=""+a,f=""+f,tf(p)||(p=""+p);var E=gP(this._isDirected,a,f,p);if(Va(this._edgeLabels,E))return m&&(this._edgeLabels[E]=v),this;if(!tf(p)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(a),this.setNode(f),this._edgeLabels[E]=m?v:this._defaultEdgeLabelFn(a,f,p);var C=oPe(this._isDirected,a,f,p);return a=C.v,f=C.w,Object.freeze(C),this._edgeObjs[E]=C,RPt(this._preds[f],a),RPt(this._sucs[a],f),this._in[f][E]=C,this._out[a][E]=C,this._edgeCount++,this}edge(a,f,p){var v=arguments.length===1?Qdt(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return this._edgeLabels[v]}hasEdge(a,f,p){var v=arguments.length===1?Qdt(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return Va(this._edgeLabels,v)}removeEdge(a,f,p){var v=arguments.length===1?Qdt(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p),m=this._edgeObjs[v];return m&&(a=m.v,f=m.w,delete this._edgeLabels[v],delete this._edgeObjs[v],jPt(this._preds[f],a),jPt(this._sucs[a],f),delete this._in[f][v],delete this._out[a][v],this._edgeCount--),this}inEdges(a,f){var p=this._in[a];if(p){var v=C5(p);return f?_5(v,function(m){return m.v===f}):v}}outEdges(a,f){var p=this._out[a];if(p){var v=C5(p);return f?_5(v,function(m){return m.w===f}):v}}nodeEdges(a,f){var p=this.inEdges(a,f);if(p)return p.concat(this.outEdges(a,f))}}l1.prototype._nodeCount=0,l1.prototype._edgeCount=0;function RPt(i,a){i[a]?i[a]++:i[a]=1}function jPt(i,a){--i[a]||delete i[a]}function gP(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}return v+BPt+m+BPt+(tf(p)?aPe:p)}function oPe(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}var E={v,w:m};return p&&(E.name=p),E}function Qdt(i,a){return gP(i,a.v,a.w,a.name)}class cPe{constructor(){var a={};a._next=a._prev=a,this._sentinel=a}dequeue(){var a=this._sentinel,f=a._prev;if(f!==a)return $Pt(f),f}enqueue(a){var f=this._sentinel;a._prev&&a._next&&$Pt(a),a._next=f._next,f._next._prev=a,f._next=a,a._prev=f}toString(){for(var a=[],f=this._sentinel,p=f._prev;p!==f;)a.push(JSON.stringify(p,uPe)),p=p._prev;return"["+a.join(", ")+"]"}}function $Pt(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function uPe(i,a){if(i!=="_next"&&i!=="_prev")return a}var lPe=$A(1);function hPe(i,a){if(i.nodeCount()<=1)return[];var f=dPe(i,a||lPe),p=fPe(f.graph,f.buckets,f.zeroIdx);return JA(Ff(p,function(v){return i.outEdges(v.v,v.w)}))}function fPe(i,a,f){for(var p=[],v=a[a.length-1],m=a[0],b;i.nodeCount();){for(;b=m.dequeue();)Zdt(i,a,f,b);for(;b=v.dequeue();)Zdt(i,a,f,b);if(i.nodeCount()){for(var E=a.length-2;E>0;--E)if(b=a[E].dequeue(),b){p=p.concat(Zdt(i,a,f,b,!0));break}}}return p}function Zdt(i,a,f,p,v){var m=v?[]:void 0;return cr(i.inEdges(p.v),function(b){var E=i.edge(b),C=i.node(b.v);v&&m.push({v:b.v,w:b.w}),C.out-=E,Jdt(a,f,C)}),cr(i.outEdges(p.v),function(b){var E=i.edge(b),C=b.w,A=i.node(C);A.in-=E,Jdt(a,f,A)}),i.removeNode(p.v),m}function dPe(i,a){var f=new l1,p=0,v=0;cr(i.nodes(),function(E){f.setNode(E,{v:E,in:0,out:0})}),cr(i.edges(),function(E){var C=f.edge(E.v,E.w)||0,A=a(E),P=C+A;f.setEdge(E.v,E.w,P),v=Math.max(v,f.node(E.v).out+=A),p=Math.max(p,f.node(E.w).in+=A)});var m=g9(v+p+3).map(function(){return new cPe}),b=p+1;return cr(f.nodes(),function(E){Jdt(m,b,f.node(E))}),{graph:f,buckets:m,zeroIdx:b}}function Jdt(i,a,f){f.out?f.in?i[f.out-f.in+a].enqueue(f):i[i.length-1].enqueue(f):i[0].enqueue(f)}function gPe(i){var a=i.graph().acyclicer==="greedy"?hPe(i,f(i)):pPe(i);cr(a,function(p){var v=i.edge(p);i.removeEdge(p),v.forwardName=p.name,v.reversed=!0,i.setEdge(p.w,p.v,v,fK("rev"))});function f(p){return function(v){return p.edge(v).weight}}}function pPe(i){var a=[],f={},p={};function v(m){Va(p,m)||(p[m]=!0,f[m]=!0,cr(i.outEdges(m),function(b){Va(f,b.w)?a.push(b):v(b.w)}),delete f[m])}return cr(i.nodes(),v),a}function bPe(i){cr(i.edges(),function(a){var f=i.edge(a);if(f.reversed){i.removeEdge(a);var p=f.forwardName;delete f.reversed,delete f.forwardName,i.setEdge(a.w,a.v,f,p)}})}function eL(i,a,f,p){var v;do v=fK(p);while(i.hasNode(v));return f.dummy=a,i.setNode(v,f),v}function vPe(i){var a=new l1().setGraph(i.graph());return cr(i.nodes(),function(f){a.setNode(f,i.node(f))}),cr(i.edges(),function(f){var p=a.edge(f.v,f.w)||{weight:0,minlen:1},v=i.edge(f);a.setEdge(f.v,f.w,{weight:p.weight+v.weight,minlen:Math.max(p.minlen,v.minlen)})}),a}function zPt(i){var a=new l1({multigraph:i.isMultigraph()}).setGraph(i.graph());return cr(i.nodes(),function(f){i.children(f).length||a.setNode(f,i.node(f))}),cr(i.edges(),function(f){a.setEdge(f,i.edge(f))}),a}function qPt(i,a){var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2;if(!v&&!m)throw new Error("Not possible to find intersection inside of the rectangle");var C,A;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),C=E*v/m,A=E):(v<0&&(b=-b),C=b,A=b*m/v),{x:f+C,y:p+A}}function dK(i){var a=Ff(g9(VPt(i)+1),function(){return[]});return cr(i.nodes(),function(f){var p=i.node(f),v=p.rank;tf(v)||(a[v][p.order]=f)}),a}function wPe(i){var a=lP(Ff(i.nodes(),function(f){return i.node(f).rank}));cr(i.nodes(),function(f){var p=i.node(f);Va(p,"rank")&&(p.rank-=a)})}function mPe(i){var a=lP(Ff(i.nodes(),function(m){return i.node(m).rank})),f=[];cr(i.nodes(),function(m){var b=i.node(m).rank-a;f[b]||(f[b]=[]),f[b].push(m)});var p=0,v=i.graph().nodeRankFactor;cr(f,function(m,b){tf(m)&&b%v!==0?--p:p&&cr(m,function(E){i.node(E).rank+=p})})}function HPt(i,a,f,p){var v={width:0,height:0};return arguments.length>=4&&(v.rank=f,v.order=p),eL(i,"border",v,a)}function VPt(i){return d9(Ff(i.nodes(),function(a){var f=i.node(a).rank;if(!tf(f))return f}))}function yPe(i,a){var f={lhs:[],rhs:[]};return cr(i,function(p){a(p)?f.lhs.push(p):f.rhs.push(p)}),f}function xPe(i,a){var f=OPt();try{return a()}finally{console.log(i+" time: "+(OPt()-f)+"ms")}}function kPe(i,a){return a()}function EPe(i){function a(f){var p=i.children(f),v=i.node(f);if(p.length&&cr(p,a),Va(v,"minRank")){v.borderLeft=[],v.borderRight=[];for(var m=v.minRank,b=v.maxRank+1;mb.lim&&(E=b,C=!0);var A=_5(a.edges(),function(P){return C===nFt(i,i.node(P.v),E)&&C!==nFt(i,i.node(P.w),E)});return Xdt(A,function(P){return pP(a,P)})}function eFt(i,a,f,p){var v=f.v,m=f.w;i.removeEdge(v,m),i.setEdge(p.v,p.w,{}),i0t(i),r0t(i,a),RPe(i,a)}function RPe(i,a){var f=Kdt(i.nodes(),function(v){return!a.node(v).parent}),p=FPe(i,f);p=p.slice(1),cr(p,function(v){var m=i.node(v).parent,b=a.edge(v,m),E=!1;b||(b=a.edge(m,v),E=!0),a.node(v).rank=a.node(m).rank+(E?b.minlen:-b.minlen)})}function jPe(i,a,f){return i.hasEdge(a,f)}function nFt(i,a,f){return f.low<=a.lim&&a.lim<=f.lim}function $Pe(i){switch(i.graph().ranker){case"network-simplex":rFt(i);break;case"tight-tree":qPe(i);break;case"longest-path":zPe(i);break;default:rFt(i)}}var zPe=n0t;function qPe(i){n0t(i),KPt(i)}function rFt(i){b9(i)}function HPe(i){var a=eL(i,"root",{},"_root"),f=VPe(i),p=d9(C5(f))-1,v=2*p+1;i.graph().nestingRoot=a,cr(i.edges(),function(b){i.edge(b).minlen*=v});var m=GPe(i)+1;cr(i.children(),function(b){iFt(i,a,v,m,p,f,b)}),i.graph().nodeRankFactor=v}function iFt(i,a,f,p,v,m,b){var E=i.children(b);if(!E.length){b!==a&&i.setEdge(a,b,{weight:0,minlen:f});return}var C=HPt(i,"_bt"),A=HPt(i,"_bb"),P=i.node(b);i.setParent(C,b),P.borderTop=C,i.setParent(A,b),P.borderBottom=A,cr(E,function(F){iFt(i,a,f,p,v,m,F);var j=i.node(F),R=j.borderTop?j.borderTop:F,H=j.borderBottom?j.borderBottom:F,Y=j.borderTop?p:2*p,rt=R!==H?1:v-m[b]+1;i.setEdge(C,R,{weight:Y,minlen:rt,nestingEdge:!0}),i.setEdge(H,A,{weight:Y,minlen:rt,nestingEdge:!0})}),i.parent(b)||i.setEdge(a,C,{weight:0,minlen:v+m[b]})}function VPe(i){var a={};function f(p,v){var m=i.children(p);m&&m.length&&cr(m,function(b){f(b,v+1)}),a[p]=v}return cr(i.children(),function(p){f(p,1)}),a}function GPe(i){return fP(i.edges(),function(a,f){return a+i.edge(f).weight},0)}function UPe(i){var a=i.graph();i.removeNode(a.nestingRoot),delete a.nestingRoot,cr(i.edges(),function(f){var p=i.edge(f);p.nestingEdge&&i.removeEdge(f)})}function WPe(i,a,f){var p={},v;cr(f,function(m){for(var b=i.parent(m),E,C;b;){if(E=i.parent(b),E?(C=p[E],p[E]=b):(C=v,v=b),C&&C!==b){a.setEdge(C,b);return}b=E}})}function KPe(i,a,f){var p=YPe(i),v=new l1({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(function(m){return i.node(m)});return cr(i.nodes(),function(m){var b=i.node(m),E=i.parent(m);(b.rank===a||b.minRank<=a&&a<=b.maxRank)&&(v.setNode(m),v.setParent(m,E||p),cr(i[f](m),function(C){var A=C.v===m?C.w:C.v,P=v.edge(A,m),F=tf(P)?0:P.weight;v.setEdge(A,m,{weight:i.edge(C).weight+F})}),Va(b,"minRank")&&v.setNode(m,{borderLeft:b.borderLeft[a],borderRight:b.borderRight[a]}))}),v}function YPe(i){for(var a;i.hasNode(a=fK("_root")););return a}function XPe(i,a){for(var f=0,p=1;p0;)P%2&&(F+=E[P+1]),P=P-1>>1,E[P]+=A.weight;C+=A.weight*F})),C}function ZPe(i){var a={},f=_5(i.nodes(),function(E){return!i.children(E).length}),p=d9(Ff(f,function(E){return i.node(E).rank})),v=Ff(g9(p+1),function(){return[]});function m(E){if(!Va(a,E)){a[E]=!0;var C=i.node(E);v[C.rank].push(E),cr(i.successors(E),m)}}var b=dP(f,function(E){return i.node(E).rank});return cr(b,m),v}function JPe(i,a){return Ff(a,function(f){var p=i.inEdges(f);if(p.length){var v=fP(p,function(m,b){var E=i.edge(b),C=i.node(b.v);return{sum:m.sum+E.weight*C.order,weight:m.weight+E.weight}},{sum:0,weight:0});return{v:f,barycenter:v.sum/v.weight,weight:v.weight}}else return{v:f}})}function tFe(i,a){var f={};cr(i,function(v,m){var b=f[v.v]={indegree:0,in:[],out:[],vs:[v.v],i:m};tf(v.barycenter)||(b.barycenter=v.barycenter,b.weight=v.weight)}),cr(a.edges(),function(v){var m=f[v.v],b=f[v.w];!tf(m)&&!tf(b)&&(b.indegree++,m.out.push(f[v.w]))});var p=_5(f,function(v){return!v.indegree});return eFe(p)}function eFe(i){var a=[];function f(m){return function(b){b.merged||(tf(b.barycenter)||tf(m.barycenter)||b.barycenter>=m.barycenter)&&nFe(m,b)}}function p(m){return function(b){b.in.push(m),--b.indegree===0&&i.push(b)}}for(;i.length;){var v=i.pop();a.push(v),cr(v.in.reverse(),f(v)),cr(v.out,p(v))}return Ff(_5(a,function(m){return!m.merged}),function(m){return hP(m,["vs","i","barycenter","weight"])})}function nFe(i,a){var f=0,p=0;i.weight&&(f+=i.barycenter*i.weight,p+=i.weight),a.weight&&(f+=a.barycenter*a.weight,p+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=f/p,i.weight=p,i.i=Math.min(a.i,i.i),a.merged=!0}function rFe(i,a){var f=yPe(i,function(P){return Va(P,"barycenter")}),p=f.lhs,v=dP(f.rhs,function(P){return-P.i}),m=[],b=0,E=0,C=0;p.sort(iFe(!!a)),C=sFt(m,v,C),cr(p,function(P){C+=P.vs.length,m.push(P.vs),b+=P.barycenter*P.weight,E+=P.weight,C=sFt(m,v,C)});var A={vs:JA(m)};return E&&(A.barycenter=b/E,A.weight=E),A}function sFt(i,a,f){for(var p;a.length&&(p=lK(a)).i<=f;)a.pop(),i.push(p.vs),f++;return f}function iFe(i){return function(a,f){return a.barycenterf.barycenter?1:i?f.i-a.i:a.i-f.i}}function aFt(i,a,f,p){var v=i.children(a),m=i.node(a),b=m?m.borderLeft:void 0,E=m?m.borderRight:void 0,C={};b&&(v=_5(v,function(H){return H!==b&&H!==E}));var A=JPe(i,v);cr(A,function(H){if(i.children(H.v).length){var Y=aFt(i,H.v,f,p);C[H.v]=Y,Va(Y,"barycenter")&&aFe(H,Y)}});var P=tFe(A,f);sFe(P,C);var F=rFe(P,p);if(b&&(F.vs=JA([b,F.vs,E]),i.predecessors(b).length)){var j=i.node(i.predecessors(b)[0]),R=i.node(i.predecessors(E)[0]);Va(F,"barycenter")||(F.barycenter=0,F.weight=0),F.barycenter=(F.barycenter*F.weight+j.order+R.order)/(F.weight+2),F.weight+=2}return F}function sFe(i,a){cr(i,function(f){f.vs=JA(f.vs.map(function(p){return a[p]?a[p].vs:p}))})}function aFe(i,a){tf(i.barycenter)?(i.barycenter=a.barycenter,i.weight=a.weight):(i.barycenter=(i.barycenter*i.weight+a.barycenter*a.weight)/(i.weight+a.weight),i.weight+=a.weight)}function oFe(i){var a=VPt(i),f=oFt(i,g9(1,a+1),"inEdges"),p=oFt(i,g9(a-1,-1,-1),"outEdges"),v=ZPe(i);cFt(i,v);for(var m=Number.POSITIVE_INFINITY,b,E=0,C=0;C<4;++E,++C){cFe(E%2?f:p,E%4>=2),v=dK(i);var A=XPe(i,v);Ab||E>a[C].lim));for(A=C,C=p;(C=i.parent(C))!==A;)m.push(C);return{path:v.concat(m.reverse()),lca:A}}function hFe(i){var a={},f=0;function p(v){var m=f;cr(i.children(v),p),a[v]={low:m,lim:f++}}return cr(i.children(),p),a}function fFe(i,a){var f={};function p(v,m){var b=0,E=0,C=v.length,A=lK(m);return cr(m,function(P,F){var j=gFe(i,P),R=j?i.node(j).order:C;(j||P===A)&&(cr(m.slice(E,F+1),function(H){cr(i.predecessors(H),function(Y){var rt=i.node(Y),J=rt.order;(JA)&&uFt(f,j,P)})})}function v(m,b){var E=-1,C,A=0;return cr(b,function(P,F){if(i.node(P).dummy==="border"){var j=i.predecessors(P);j.length&&(C=i.node(j[0]).order,p(b,A,F,E,C),A=F,E=C)}p(b,A,b.length,C,m.length)}),b}return fP(a,v),f}function gFe(i,a){if(i.node(a).dummy)return Kdt(i.predecessors(a),function(f){return i.node(f).dummy})}function uFt(i,a,f){if(a>f){var p=a;a=f,f=p}var v=i[a];v||(i[a]=v={}),v[f]=!0}function pFe(i,a,f){if(a>f){var p=a;a=f,f=p}return Va(i[a],f)}function bFe(i,a,f,p){var v={},m={},b={};return cr(a,function(E){cr(E,function(C,A){v[C]=C,m[C]=C,b[C]=A})}),cr(a,function(E){var C=-1;cr(E,function(A){var P=p(A);if(P.length){P=dP(P,function(Y){return b[Y]});for(var F=(P.length-1)/2,j=Math.floor(F),R=Math.ceil(F);j<=R;++j){var H=P[j];m[A]===A&&C0}function b3(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;a.forEach(function(H){b=Math.min(b,H.x),E=Math.min(E,H.y)});for(var C=p-i.width/2-b,A=v-i.height/2-E,P=0;P1&&m.sort(function(H,Y){var rt=H.x-f.x,J=H.y-f.y,it=Math.sqrt(rt*rt+J*J),ft=Y.x-f.x,Tt=Y.y-f.y,kt=Math.sqrt(ft*ft+Tt*Tt);return itMath.abs(v)*E?(m<0&&(E=-E),C=m===0?0:E*v/m,A=E):(v<0&&(b=-b),C=b,A=v===0?0:b*m/v),{x:f+C,y:p+A}}var b0t={rect:mBe,ellipse:yBe,circle:xBe,diamond:kBe};function wBe(i){b0t=i}function mBe(i,a,f){var p=i.insert("rect",":first-child").attr("rx",f.rx).attr("ry",f.ry).attr("x",-a.width/2).attr("y",-a.height/2).attr("width",a.width).attr("height",a.height);return f.intersect=function(v){return p0t(f,v)},p}function yBe(i,a,f){var p=a.width/2,v=a.height/2,m=i.insert("ellipse",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("rx",p).attr("ry",v);return f.intersect=function(b){return pFt(f,p,v,b)},m}function xBe(i,a,f){var p=Math.max(a.width,a.height)/2,v=i.insert("circle",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("r",p);return f.intersect=function(m){return bBe(f,p,m)},v}function kBe(i,a,f){var p=a.width*Math.SQRT2/2,v=a.height*Math.SQRT2/2,m=[{x:0,y:-v},{x:-p,y:0},{x:0,y:v},{x:p,y:0}],b=i.insert("polygon",":first-child").attr("points",m.map(function(E){return E.x+","+E.y}).join(" "));return f.intersect=function(E){return b3(f,m,E)},b}function EBe(){var i=function(a,f){CBe(f);var p=bP(a,"output"),v=bP(p,"clusters"),m=bP(p,"edgePaths"),b=f0t(bP(p,"edgeLabels"),f),E=g0t(bP(p,"nodes"),f,b0t);nL(f),pBe(E,f),gBe(b,f),d0t(m,f,c0t);var C=h0t(v,f);dBe(C,f),SBe(f)};return i.createNodes=function(a){return arguments.length?(fBe(a),i):g0t},i.createClusters=function(a){return arguments.length?(iBe(a),i):h0t},i.createEdgeLabels=function(a){return arguments.length?(sBe(a),i):f0t},i.createEdgePaths=function(a){return arguments.length?(aBe(a),i):d0t},i.shapes=function(a){return arguments.length?(wBe(a),i):b0t},i.arrows=function(a){return arguments.length?(QFe(a),i):c0t},i}var TBe={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},_Be={arrowhead:"normal",curve:ig};function CBe(i){i.nodes().forEach(function(a){var f=i.node(a);!Va(f,"label")&&!i.children(a).length&&(f.label=a),Va(f,"paddingX")&&tL(f,{paddingLeft:f.paddingX,paddingRight:f.paddingX}),Va(f,"paddingY")&&tL(f,{paddingTop:f.paddingY,paddingBottom:f.paddingY}),Va(f,"padding")&&tL(f,{paddingLeft:f.padding,paddingRight:f.padding,paddingTop:f.padding,paddingBottom:f.padding}),tL(f,TBe),cr(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(p){f[p]=Number(f[p])}),Va(f,"width")&&(f._prevWidth=f.width),Va(f,"height")&&(f._prevHeight=f.height)}),i.edges().forEach(function(a){var f=i.edge(a);Va(f,"label")||(f.label=""),tL(f,_Be)})}function SBe(i){cr(i.nodes(),function(a){var f=i.node(a);Va(f,"_prevWidth")?f.width=f._prevWidth:delete f.width,Va(f,"_prevHeight")?f.height=f._prevHeight:delete f.height,delete f._prevWidth,delete f._prevHeight})}function bP(i,a){var f=i.select("g."+a);return f.empty()&&(f=i.append("g").attr("class",a)),f}function vFt(i,a,f){const p=a.width,v=a.height,m=(p+v)*.9,b=[{x:m/2,y:0},{x:m,y:-m/2},{x:m/2,y:-m},{x:0,y:-m/2}],E=S5(i,m,m,b);return f.intersect=function(C){return b3(f,b,C)},E}function wFt(i,a,f){const v=a.height,m=v/4,b=a.width+2*m,E=[{x:m,y:0},{x:b-m,y:0},{x:b,y:-v/2},{x:b-m,y:-v},{x:m,y:-v},{x:0,y:-v/2}],C=S5(i,b,v,E);return f.intersect=function(A){return b3(f,E,A)},C}function mFt(i,a,f){const p=a.width,v=a.height,m=[{x:-v/2,y:0},{x:p,y:0},{x:p,y:-v},{x:-v/2,y:-v},{x:0,y:-v/2}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function yFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:v/6,y:-v}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function xFt(i,a,f){const p=a.width,v=a.height,m=[{x:2*v/6,y:0},{x:p+v/6,y:0},{x:p-2*v/6,y:-v},{x:-v/6,y:-v}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function kFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p+2*v/6,y:0},{x:p-v/6,y:-v},{x:v/6,y:-v}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function EFt(i,a,f){const p=a.width,v=a.height,m=[{x:v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:-2*v/6,y:-v}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function TFt(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p+v/2,y:0},{x:p,y:-v/2},{x:p+v/2,y:-v},{x:0,y:-v}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function _Ft(i,a,f){const p=a.height,v=a.width+p/4,m=i.insert("rect",":first-child").attr("rx",p/2).attr("ry",p/2).attr("x",-v/2).attr("y",-p/2).attr("width",v).attr("height",p);return f.intersect=function(b){return p0t(f,b)},m}function CFt(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p,y:0},{x:p,y:-v},{x:0,y:-v},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-v},{x:-8,y:-v},{x:-8,y:0}],b=S5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function SFt(i,a,f){const p=a.width,v=p/2,m=v/(2.5+p/50),b=a.height+m,E="M 0,"+m+" a "+v+","+m+" 0,0,0 "+p+" 0 a "+v+","+m+" 0,0,0 "+-p+" 0 l 0,"+b+" a "+v+","+m+" 0,0,0 "+p+" 0 l 0,"+-b,C=i.attr("label-offset-y",m).insert("path",":first-child").attr("d",E).attr("transform","translate("+-p/2+","+-(b/2+m)+")");return f.intersect=function(A){const P=p0t(f,A),F=P.x-f.x;if(v!=0&&(Math.abs(F)f.height/2-m)){let j=m*m*(1-F*F/(v*v));j!=0&&(j=Math.sqrt(j)),j=m-j,A.y-f.y>0&&(j=-j),P.y+=j}return P},C}function ABe(i){i.shapes().question=vFt,i.shapes().hexagon=wFt,i.shapes().stadium=_Ft,i.shapes().subroutine=CFt,i.shapes().cylinder=SFt,i.shapes().rect_left_inv_arrow=mFt,i.shapes().lean_right=yFt,i.shapes().lean_left=xFt,i.shapes().trapezoid=kFt,i.shapes().inv_trapezoid=EFt,i.shapes().rect_right_inv_arrow=TFt}function LBe(i){i({question:vFt}),i({hexagon:wFt}),i({stadium:_Ft}),i({subroutine:CFt}),i({cylinder:SFt}),i({rect_left_inv_arrow:mFt}),i({lean_right:yFt}),i({lean_left:xFt}),i({trapezoid:kFt}),i({inv_trapezoid:EFt}),i({rect_right_inv_arrow:TFt})}function S5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("transform","translate("+-a/2+","+f/2+")")}const MBe={addToRender:ABe,addToRenderV2:LBe},AFt={},DBe=function(i){const a=Object.keys(i);for(const f of a)AFt[f]=i[f]},LFt=function(i,a,f,p,v,m){const b=p?p.select(`[id="${f}"]`):xr(`[id="${f}"]`),E=v||document;Object.keys(i).forEach(function(A){const P=i[A];let F="default";P.classes.length>0&&(F=P.classes.join(" "));const j=em(P.styles);let R=P.text!==void 0?P.text:P.id,H;if(u1(De().flowchart.htmlLabels)){const J={label:R.replace(/fa[blrs]?:fa-[\w-]+/g,it=>``)};H=u0t(b,J).node(),H.parentNode.removeChild(H)}else{const J=E.createElementNS("http://www.w3.org/2000/svg","text");J.setAttribute("style",j.labelStyle.replace("color:","fill:"));const it=R.split(ui.lineBreakRegex);for(const ft of it){const Tt=E.createElementNS("http://www.w3.org/2000/svg","tspan");Tt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),Tt.setAttribute("dy","1em"),Tt.setAttribute("x","1"),Tt.textContent=ft,J.appendChild(Tt)}H=J}let Y=0,rt="";switch(P.type){case"round":Y=5,rt="rect";break;case"square":rt="rect";break;case"diamond":rt="question";break;case"hexagon":rt="hexagon";break;case"odd":rt="rect_left_inv_arrow";break;case"lean_right":rt="lean_right";break;case"lean_left":rt="lean_left";break;case"trapezoid":rt="trapezoid";break;case"inv_trapezoid":rt="inv_trapezoid";break;case"odd_right":rt="rect_left_inv_arrow";break;case"circle":rt="circle";break;case"ellipse":rt="ellipse";break;case"stadium":rt="stadium";break;case"subroutine":rt="subroutine";break;case"cylinder":rt="cylinder";break;case"group":rt="rect";break;default:rt="rect"}Wt.warn("Adding node",P.id,P.domId),a.setNode(m.db.lookUpDomId(P.id),{labelType:"svg",labelStyle:j.labelStyle,shape:rt,label:H,rx:Y,ry:Y,class:F,style:j.style,id:m.db.lookUpDomId(P.id)})})},MFt=function(i,a,f){let p=0,v,m;if(i.defaultStyle!==void 0){const b=em(i.defaultStyle);v=b.style,m=b.labelStyle}i.forEach(function(b){p++;const E="L-"+b.start+"-"+b.end,C="LS-"+b.start,A="LE-"+b.end,P={};b.type==="arrow_open"?P.arrowhead="none":P.arrowhead="normal";let F="",j="";if(b.style!==void 0){const R=em(b.style);F=R.style,j=R.labelStyle}else switch(b.stroke){case"normal":F="fill:none",v!==void 0&&(F=v),m!==void 0&&(j=m);break;case"dotted":F="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":F=" stroke-width: 3.5px;fill:none";break}P.style=F,P.labelStyle=j,b.interpolate!==void 0?P.curve=Z2(b.interpolate,ig):i.defaultInterpolate!==void 0?P.curve=Z2(i.defaultInterpolate,ig):P.curve=Z2(AFt.curve,ig),b.text===void 0?b.style!==void 0&&(P.arrowheadStyle="fill: #333"):(P.arrowheadStyle="fill: #333",P.labelpos="c",u1(De().flowchart.htmlLabels)?(P.labelType="html",P.label=`${b.text.replace(/fa[blrs]?:fa-[\w-]+/g,R=>``)}`):(P.labelType="text",P.label=b.text.replace(ui.lineBreakRegex,` -`),b.style===void 0&&(P.style=P.style||"stroke: #333; stroke-width: 1.5px;fill:none"),P.labelStyle=P.labelStyle.replace("color:","fill:"))),P.id=E,P.class=C+" "+A,P.minlen=b.length||1,a.setEdge(f.db.lookUpDomId(b.start),f.db.lookUpDomId(b.end),P,p)})},IBe={setConf:DBe,addVertices:LFt,addEdges:MFt,getClasses:function(i,a){return Wt.info("Extracting classes"),a.db.getClasses()},draw:function(i,a,f,p){Wt.info("Drawing flowchart");const{securityLevel:v,flowchart:m}=De();let b;v==="sandbox"&&(b=xr("#i"+a));const E=xr(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),C=v==="sandbox"?b.nodes()[0].contentDocument:document;let A=p.db.getDirection();A===void 0&&(A="TD");const P=m.nodeSpacing||50,F=m.rankSpacing||50,j=new l1({multigraph:!0,compound:!0}).setGraph({rankdir:A,nodesep:P,ranksep:F,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let R;const H=p.db.getSubGraphs();for(let mt=H.length-1;mt>=0;mt--)R=H[mt],p.db.addVertex(R.id,R.title,"group",void 0,R.classes);const Y=p.db.getVertices();Wt.warn("Get vertices",Y);const rt=p.db.getEdges();let J=0;for(J=H.length-1;J>=0;J--){R=H[J],YLt("cluster").append("text");for(let mt=0;mt{a.forEach(v=>{FBe[v](i,f,p)})},FBe={extension:(i,a,f)=>{Wt.trace("Making markers for ",f),i.append("defs").append("marker").attr("id",a+"-extensionStart").attr("class","marker extension "+a).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id",a+"-extensionEnd").attr("class","marker extension "+a).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(i,a)=>{i.append("defs").append("marker").attr("id",a+"-compositionStart").attr("class","marker composition "+a).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",a+"-compositionEnd").attr("class","marker composition "+a).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(i,a)=>{i.append("defs").append("marker").attr("id",a+"-aggregationStart").attr("class","marker aggregation "+a).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",a+"-aggregationEnd").attr("class","marker aggregation "+a).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(i,a)=>{i.append("defs").append("marker").attr("id",a+"-dependencyStart").attr("class","marker dependency "+a).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",a+"-dependencyEnd").attr("class","marker dependency "+a).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(i,a)=>{i.append("defs").append("marker").attr("id",a+"-lollipopStart").attr("class","marker lollipop "+a).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(i,a)=>{i.append("marker").attr("id",a+"-pointEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",a+"-pointStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(i,a)=>{i.append("marker").attr("id",a+"-circleEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",a+"-circleStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(i,a)=>{i.append("marker").attr("id",a+"-crossEnd").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),i.append("marker").attr("id",a+"-crossStart").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(i,a)=>{i.append("defs").append("marker").attr("id",a+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},DFt=PBe;function BBe(i,a){a&&i.attr("style",a)}function RBe(i){const a=xr(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),f=a.append("xhtml:div"),p=i.label,v=i.isNode?"nodeLabel":"edgeLabel";return f.html('"+p+""),BBe(f,i.labelStyle),f.style("display","inline-block"),f.style("white-space","nowrap"),f.attr("xmlns","http://www.w3.org/1999/xhtml"),a.node()}const dp=(i,a,f,p)=>{let v=i||"";if(typeof v=="object"&&(v=v[0]),u1(De().flowchart.htmlLabels)){v=v.replace(/\\n|\n/g,"
"),Wt.info("vertexText"+v);const m={isNode:p,label:nP(v).replace(/fa[blrs]?:fa-[\w-]+/g,E=>``),labelStyle:a.replace("fill:","color:")};return RBe(m)}else{const m=document.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",a.replace("color:","fill:"));let b=[];typeof v=="string"?b=v.split(/\\n|\n|/gi):Array.isArray(v)?b=v:b=[];for(const E of b){const C=document.createElementNS("http://www.w3.org/2000/svg","tspan");C.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),C.setAttribute("dy","1em"),C.setAttribute("x","0"),f?C.setAttribute("class","title-row"):C.setAttribute("class","row"),C.textContent=E.trim(),m.appendChild(C)}return m}};function jBe(i,a){var{includeImageAlt:f=!0}=a||{};return IFt(i,f)}function IFt(i,a){return i&&typeof i=="object"&&(i.value||(a?i.alt:"")||"children"in i&&OFt(i.children,a)||Array.isArray(i)&&OFt(i,a))||""}function OFt(i,a){for(var f=[],p=-1;++pv?0:v+a:a=a>v?v:a,f=f>0?f:0,p.length<1e4)b=Array.from(p),b.unshift(a,f),[].splice.apply(i,b);else for(f&&[].splice.apply(i,[a,f]);m0?(v3(i,i.length,0,a),i):a}const NFt={}.hasOwnProperty;function $Be(i){const a={};let f=-1;for(;++fb))return;const ct=a.events.length;let yt=ct,st,xt;for(;yt--;)if(a.events[yt][0]==="exit"&&a.events[yt][1].type==="chunkFlow"){if(st){xt=a.events[yt][1].end;break}st=!0}for(J(p),mt=ct;mtft;){const kt=f[Tt];a.containerState=kt[1],kt[0].exit.call(a,i)}f.length=ft}function it(){v.write([null]),m=void 0,v=void 0,a.containerState._closeFlow=void 0}}function ZBe(i,a,f){return Qu(i,i.attempt(this.parser.constructs.document,a,f),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function BFt(i){if(i===null||rv(i)||UBe(i))return 1;if(WBe(i))return 2}function m0t(i,a,f){const p=[];let v=-1;for(;++v1&&i[f][1].end.offset-i[f][1].start.offset>1?2:1;const F=Object.assign({},i[p][1].end),j=Object.assign({},i[f][1].start);RFt(F,-C),RFt(j,C),b={type:C>1?"strongSequence":"emphasisSequence",start:F,end:Object.assign({},i[p][1].end)},E={type:C>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[f][1].start),end:j},m={type:C>1?"strongText":"emphasisText",start:Object.assign({},i[p][1].end),end:Object.assign({},i[f][1].start)},v={type:C>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},E.end)},i[p][1].end=Object.assign({},b.start),i[f][1].start=Object.assign({},E.end),A=[],i[p][1].end.offset-i[p][1].start.offset&&(A=nv(A,[["enter",i[p][1],a],["exit",i[p][1],a]])),A=nv(A,[["enter",v,a],["enter",b,a],["exit",b,a],["enter",m,a]]),A=nv(A,m0t(a.parser.constructs.insideSpan.null,i.slice(p+1,f),a)),A=nv(A,[["exit",m,a],["enter",E,a],["exit",E,a],["exit",v,a]]),i[f][1].end.offset-i[f][1].start.offset?(P=2,A=nv(A,[["enter",i[f][1],a],["exit",i[f][1],a]])):P=0,v3(i,p-1,f-p+3,A),f=p+A.length-P-2;break}}for(f=-1;++f=4?b(A):f(A)}function b(A){return A===null?C(A):ja(A)?i.attempt(lRe,b,C)(A):(i.enter("codeFlowValue"),E(A))}function E(A){return A===null||ja(A)?(i.exit("codeFlowValue"),b(A)):(i.consume(A),E)}function C(A){return i.exit("codeIndented"),a(A)}}function fRe(i,a,f){const p=this;return v;function v(b){return p.parser.lazy[p.now().line]?f(b):ja(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v):Qu(i,m,"linePrefix",4+1)(b)}function m(b){const E=p.events[p.events.length-1];return E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?a(b):ja(b)?v(b):f(b)}}const dRe={name:"codeText",tokenize:bRe,resolve:gRe,previous:pRe};function gRe(i){let a=i.length-4,f=3,p,v;if((i[f][1].type==="lineEnding"||i[f][1].type==="space")&&(i[a][1].type==="lineEnding"||i[a][1].type==="space")){for(p=f;++p=4?a(b):i.interrupt(p.parser.constructs.flow,f,a)(b)}}function GFt(i,a,f,p,v,m,b,E,C){const A=C||Number.POSITIVE_INFINITY;let P=0;return F;function F(J){return J===60?(i.enter(p),i.enter(v),i.enter(m),i.consume(J),i.exit(m),j):J===null||J===41||w0t(J)?f(J):(i.enter(p),i.enter(b),i.enter(E),i.enter("chunkString",{contentType:"string"}),Y(J))}function j(J){return J===62?(i.enter(m),i.consume(J),i.exit(m),i.exit(v),i.exit(p),a):(i.enter(E),i.enter("chunkString",{contentType:"string"}),R(J))}function R(J){return J===62?(i.exit("chunkString"),i.exit(E),j(J)):J===null||J===60||ja(J)?f(J):(i.consume(J),J===92?H:R)}function H(J){return J===60||J===62||J===92?(i.consume(J),R):R(J)}function Y(J){return J===40?++P>A?f(J):(i.consume(J),Y):J===41?P--?(i.consume(J),Y):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(J)):J===null||rv(J)?P?f(J):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(J)):w0t(J)?f(J):(i.consume(J),J===92?rt:Y)}function rt(J){return J===40||J===41||J===92?(i.consume(J),Y):Y(J)}}function UFt(i,a,f,p,v,m){const b=this;let E=0,C;return A;function A(R){return i.enter(p),i.enter(v),i.consume(R),i.exit(v),i.enter(m),P}function P(R){return R===null||R===91||R===93&&!C||R===94&&!E&&"_hiddenFootnoteSupport"in b.parser.constructs||E>999?f(R):R===93?(i.exit(m),i.enter(v),i.consume(R),i.exit(v),i.exit(p),a):ja(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),P):(i.enter("chunkString",{contentType:"string"}),F(R))}function F(R){return R===null||R===91||R===93||ja(R)||E++>999?(i.exit("chunkString"),P(R)):(i.consume(R),C=C||!Bf(R),R===92?j:F)}function j(R){return R===91||R===92||R===93?(i.consume(R),E++,F):F(R)}}function WFt(i,a,f,p,v,m){let b;return E;function E(j){return i.enter(p),i.enter(v),i.consume(j),i.exit(v),b=j===40?41:j,C}function C(j){return j===b?(i.enter(v),i.consume(j),i.exit(v),i.exit(p),a):(i.enter(m),A(j))}function A(j){return j===b?(i.exit(m),C(b)):j===null?f(j):ja(j)?(i.enter("lineEnding"),i.consume(j),i.exit("lineEnding"),Qu(i,A,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),P(j))}function P(j){return j===b||j===null||ja(j)?(i.exit("chunkString"),A(j)):(i.consume(j),j===92?F:P)}function F(j){return j===b||j===92?(i.consume(j),P):P(j)}}function vP(i,a){let f;return p;function p(v){return ja(v)?(i.enter("lineEnding"),i.consume(v),i.exit("lineEnding"),f=!0,p):Bf(v)?Qu(i,p,f?"linePrefix":"lineSuffix")(v):a(v)}}function rL(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ERe={name:"definition",tokenize:_Re},TRe={tokenize:CRe,partial:!0};function _Re(i,a,f){const p=this;let v;return m;function m(C){return i.enter("definition"),UFt.call(p,i,b,f,"definitionLabel","definitionLabelMarker","definitionLabelString")(C)}function b(C){return v=rL(p.sliceSerialize(p.events[p.events.length-1][1]).slice(1,-1)),C===58?(i.enter("definitionMarker"),i.consume(C),i.exit("definitionMarker"),vP(i,GFt(i,i.attempt(TRe,Qu(i,E,"whitespace"),Qu(i,E,"whitespace")),f,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):f(C)}function E(C){return C===null||ja(C)?(i.exit("definition"),p.parser.defined.includes(v)||p.parser.defined.push(v),a(C)):f(C)}}function CRe(i,a,f){return p;function p(b){return rv(b)?vP(i,v)(b):f(b)}function v(b){return b===34||b===39||b===40?WFt(i,Qu(i,m,"whitespace"),f,"definitionTitle","definitionTitleMarker","definitionTitleString")(b):f(b)}function m(b){return b===null||ja(b)?a(b):f(b)}}const SRe={name:"hardBreakEscape",tokenize:ARe};function ARe(i,a,f){return p;function p(m){return i.enter("hardBreakEscape"),i.enter("escapeMarker"),i.consume(m),v}function v(m){return ja(m)?(i.exit("escapeMarker"),i.exit("hardBreakEscape"),a(m)):f(m)}}const LRe={name:"headingAtx",tokenize:DRe,resolve:MRe};function MRe(i,a){let f=i.length-2,p=3,v,m;return i[p][1].type==="whitespace"&&(p+=2),f-2>p&&i[f][1].type==="whitespace"&&(f-=2),i[f][1].type==="atxHeadingSequence"&&(p===f-1||f-4>p&&i[f-2][1].type==="whitespace")&&(f-=p+1===f?2:4),f>p&&(v={type:"atxHeadingText",start:i[p][1].start,end:i[f][1].end},m={type:"chunkText",start:i[p][1].start,end:i[f][1].end,contentType:"text"},v3(i,p,f-p+1,[["enter",v,a],["enter",m,a],["exit",m,a],["exit",v,a]])),i}function DRe(i,a,f){const p=this;let v=0;return m;function m(P){return i.enter("atxHeading"),i.enter("atxHeadingSequence"),b(P)}function b(P){return P===35&&v++<6?(i.consume(P),b):P===null||rv(P)?(i.exit("atxHeadingSequence"),p.interrupt?a(P):E(P)):f(P)}function E(P){return P===35?(i.enter("atxHeadingSequence"),C(P)):P===null||ja(P)?(i.exit("atxHeading"),a(P)):Bf(P)?Qu(i,E,"whitespace")(P):(i.enter("atxHeadingText"),A(P))}function C(P){return P===35?(i.consume(P),C):(i.exit("atxHeadingSequence"),E(P))}function A(P){return P===null||P===35||rv(P)?(i.exit("atxHeadingText"),E(P)):(i.consume(P),A)}}const IRe=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],KFt=["pre","script","style","textarea"],ORe={name:"htmlFlow",tokenize:FRe,resolveTo:PRe,concrete:!0},NRe={tokenize:BRe,partial:!0};function PRe(i){let a=i.length;for(;a--&&!(i[a][0]==="enter"&&i[a][1].type==="htmlFlow"););return a>1&&i[a-2][1].type==="linePrefix"&&(i[a][1].start=i[a-2][1].start,i[a+1][1].start=i[a-2][1].start,i.splice(a-2,2)),i}function FRe(i,a,f){const p=this;let v,m,b,E,C;return A;function A(Ot){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ot),P}function P(Ot){return Ot===33?(i.consume(Ot),F):Ot===47?(i.consume(Ot),H):Ot===63?(i.consume(Ot),v=3,p.interrupt?a:Rt):w3(Ot)?(i.consume(Ot),b=String.fromCharCode(Ot),m=!0,Y):f(Ot)}function F(Ot){return Ot===45?(i.consume(Ot),v=2,j):Ot===91?(i.consume(Ot),v=5,b="CDATA[",E=0,R):w3(Ot)?(i.consume(Ot),v=4,p.interrupt?a:Rt):f(Ot)}function j(Ot){return Ot===45?(i.consume(Ot),p.interrupt?a:Rt):f(Ot)}function R(Ot){return Ot===b.charCodeAt(E++)?(i.consume(Ot),E===b.length?p.interrupt?a:ht:R):f(Ot)}function H(Ot){return w3(Ot)?(i.consume(Ot),b=String.fromCharCode(Ot),Y):f(Ot)}function Y(Ot){return Ot===null||Ot===47||Ot===62||rv(Ot)?Ot!==47&&m&&KFt.includes(b.toLowerCase())?(v=1,p.interrupt?a(Ot):ht(Ot)):IRe.includes(b.toLowerCase())?(v=6,Ot===47?(i.consume(Ot),rt):p.interrupt?a(Ot):ht(Ot)):(v=7,p.interrupt&&!p.parser.lazy[p.now().line]?f(Ot):m?it(Ot):J(Ot)):Ot===45||om(Ot)?(i.consume(Ot),b+=String.fromCharCode(Ot),Y):f(Ot)}function rt(Ot){return Ot===62?(i.consume(Ot),p.interrupt?a:ht):f(Ot)}function J(Ot){return Bf(Ot)?(i.consume(Ot),J):st(Ot)}function it(Ot){return Ot===47?(i.consume(Ot),st):Ot===58||Ot===95||w3(Ot)?(i.consume(Ot),ft):Bf(Ot)?(i.consume(Ot),it):st(Ot)}function ft(Ot){return Ot===45||Ot===46||Ot===58||Ot===95||om(Ot)?(i.consume(Ot),ft):Tt(Ot)}function Tt(Ot){return Ot===61?(i.consume(Ot),kt):Bf(Ot)?(i.consume(Ot),Tt):it(Ot)}function kt(Ot){return Ot===null||Ot===60||Ot===61||Ot===62||Ot===96?f(Ot):Ot===34||Ot===39?(i.consume(Ot),C=Ot,mt):Bf(Ot)?(i.consume(Ot),kt):(C=null,ct(Ot))}function mt(Ot){return Ot===null||ja(Ot)?f(Ot):Ot===C?(i.consume(Ot),yt):(i.consume(Ot),mt)}function ct(Ot){return Ot===null||Ot===34||Ot===39||Ot===60||Ot===61||Ot===62||Ot===96||rv(Ot)?Tt(Ot):(i.consume(Ot),ct)}function yt(Ot){return Ot===47||Ot===62||Bf(Ot)?it(Ot):f(Ot)}function st(Ot){return Ot===62?(i.consume(Ot),xt):f(Ot)}function xt(Ot){return Bf(Ot)?(i.consume(Ot),xt):Ot===null||ja(Ot)?ht(Ot):f(Ot)}function ht(Ot){return Ot===45&&v===2?(i.consume(Ot),Pt):Ot===60&&v===1?(i.consume(Ot),pt):Ot===62&&v===4?(i.consume(Ot),Bt):Ot===63&&v===3?(i.consume(Ot),Rt):Ot===93&&v===5?(i.consume(Ot),X):ja(Ot)&&(v===6||v===7)?i.check(NRe,Bt,dt)(Ot):Ot===null||ja(Ot)?dt(Ot):(i.consume(Ot),ht)}function dt(Ot){return i.exit("htmlFlowData"),Ct(Ot)}function Ct(Ot){return Ot===null?vt(Ot):ja(Ot)?i.attempt({tokenize:tt,partial:!0},Ct,vt)(Ot):(i.enter("htmlFlowData"),ht(Ot))}function tt(Ot,Vt,qe){return _n;function _n(Wn){return Ot.enter("lineEnding"),Ot.consume(Wn),Ot.exit("lineEnding"),Te}function Te(Wn){return p.parser.lazy[p.now().line]?qe(Wn):Vt(Wn)}}function Pt(Ot){return Ot===45?(i.consume(Ot),Rt):ht(Ot)}function pt(Ot){return Ot===47?(i.consume(Ot),b="",Ft):ht(Ot)}function Ft(Ot){return Ot===62&&KFt.includes(b.toLowerCase())?(i.consume(Ot),Bt):w3(Ot)&&b.length<8?(i.consume(Ot),b+=String.fromCharCode(Ot),Ft):ht(Ot)}function X(Ot){return Ot===93?(i.consume(Ot),Rt):ht(Ot)}function Rt(Ot){return Ot===62?(i.consume(Ot),Bt):Ot===45&&v===2?(i.consume(Ot),Rt):ht(Ot)}function Bt(Ot){return Ot===null||ja(Ot)?(i.exit("htmlFlowData"),vt(Ot)):(i.consume(Ot),Bt)}function vt(Ot){return i.exit("htmlFlow"),a(Ot)}}function BRe(i,a,f){return p;function p(v){return i.exit("htmlFlowData"),i.enter("lineEndingBlank"),i.consume(v),i.exit("lineEndingBlank"),i.attempt(gK,a,f)}}const RRe={name:"htmlText",tokenize:jRe};function jRe(i,a,f){const p=this;let v,m,b,E;return C;function C(vt){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(vt),A}function A(vt){return vt===33?(i.consume(vt),P):vt===47?(i.consume(vt),ct):vt===63?(i.consume(vt),kt):w3(vt)?(i.consume(vt),xt):f(vt)}function P(vt){return vt===45?(i.consume(vt),F):vt===91?(i.consume(vt),m="CDATA[",b=0,rt):w3(vt)?(i.consume(vt),Tt):f(vt)}function F(vt){return vt===45?(i.consume(vt),j):f(vt)}function j(vt){return vt===null||vt===62?f(vt):vt===45?(i.consume(vt),R):H(vt)}function R(vt){return vt===null||vt===62?f(vt):H(vt)}function H(vt){return vt===null?f(vt):vt===45?(i.consume(vt),Y):ja(vt)?(E=H,X(vt)):(i.consume(vt),H)}function Y(vt){return vt===45?(i.consume(vt),Bt):H(vt)}function rt(vt){return vt===m.charCodeAt(b++)?(i.consume(vt),b===m.length?J:rt):f(vt)}function J(vt){return vt===null?f(vt):vt===93?(i.consume(vt),it):ja(vt)?(E=J,X(vt)):(i.consume(vt),J)}function it(vt){return vt===93?(i.consume(vt),ft):J(vt)}function ft(vt){return vt===62?Bt(vt):vt===93?(i.consume(vt),ft):J(vt)}function Tt(vt){return vt===null||vt===62?Bt(vt):ja(vt)?(E=Tt,X(vt)):(i.consume(vt),Tt)}function kt(vt){return vt===null?f(vt):vt===63?(i.consume(vt),mt):ja(vt)?(E=kt,X(vt)):(i.consume(vt),kt)}function mt(vt){return vt===62?Bt(vt):kt(vt)}function ct(vt){return w3(vt)?(i.consume(vt),yt):f(vt)}function yt(vt){return vt===45||om(vt)?(i.consume(vt),yt):st(vt)}function st(vt){return ja(vt)?(E=st,X(vt)):Bf(vt)?(i.consume(vt),st):Bt(vt)}function xt(vt){return vt===45||om(vt)?(i.consume(vt),xt):vt===47||vt===62||rv(vt)?ht(vt):f(vt)}function ht(vt){return vt===47?(i.consume(vt),Bt):vt===58||vt===95||w3(vt)?(i.consume(vt),dt):ja(vt)?(E=ht,X(vt)):Bf(vt)?(i.consume(vt),ht):Bt(vt)}function dt(vt){return vt===45||vt===46||vt===58||vt===95||om(vt)?(i.consume(vt),dt):Ct(vt)}function Ct(vt){return vt===61?(i.consume(vt),tt):ja(vt)?(E=Ct,X(vt)):Bf(vt)?(i.consume(vt),Ct):ht(vt)}function tt(vt){return vt===null||vt===60||vt===61||vt===62||vt===96?f(vt):vt===34||vt===39?(i.consume(vt),v=vt,Pt):ja(vt)?(E=tt,X(vt)):Bf(vt)?(i.consume(vt),tt):(i.consume(vt),v=void 0,Ft)}function Pt(vt){return vt===v?(i.consume(vt),pt):vt===null?f(vt):ja(vt)?(E=Pt,X(vt)):(i.consume(vt),Pt)}function pt(vt){return vt===62||vt===47||rv(vt)?ht(vt):f(vt)}function Ft(vt){return vt===null||vt===34||vt===39||vt===60||vt===61||vt===96?f(vt):vt===62||rv(vt)?ht(vt):(i.consume(vt),Ft)}function X(vt){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(vt),i.exit("lineEnding"),Qu(i,Rt,"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Rt(vt){return i.enter("htmlTextData"),E(vt)}function Bt(vt){return vt===62?(i.consume(vt),i.exit("htmlTextData"),i.exit("htmlText"),a):f(vt)}}const E0t={name:"labelEnd",tokenize:GRe,resolveTo:VRe,resolveAll:HRe},$Re={tokenize:URe},zRe={tokenize:WRe},qRe={tokenize:KRe};function HRe(i){let a=-1,f;for(;++a-1&&(b[0]=b[0].slice(p)),m>0&&b.push(i[v].slice(0,m))),b}function wje(i,a){let f=-1;const p=[];let v;for(;++f{TNt.setConf(i),Ndt.setWrap(a)}}},Symbol.toStringTag,{value:"Module"}));var jdt=function(){var i=function(nf,Xi,Es,xa){for(Es=Es||{},xa=nf.length;xa--;Es[nf[xa]]=Xi);return Es},a=[1,4],f=[1,3],p=[1,5],v=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],m=[2,2],b=[1,13],E=[1,14],_=[1,15],L=[1,16],N=[1,23],B=[1,25],j=[1,26],R=[1,27],z=[1,49],K=[1,48],it=[1,29],st=[1,30],ut=[1,31],bt=[1,32],mt=[1,33],yt=[1,44],dt=[1,46],ht=[1,42],wt=[1,47],X=[1,43],pt=[1,50],U=[1,45],xt=[1,51],nt=[1,52],Ot=[1,34],Nt=[1,35],qt=[1,36],Ct=[1,37],Z=[1,57],Tt=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Ht=[1,61],It=[1,60],Ft=[1,62],ke=[8,9,11,73,75],pn=[1,88],Me=[1,93],ve=[1,92],Ge=[1,89],Ke=[1,85],we=[1,91],_e=[1,87],$t=[1,94],re=[1,90],ie=[1,95],Oe=[1,86],oe=[8,9,10,11,73,75],Ne=[8,9,10,11,44,73,75],me=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],cn=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],li=[42,58,86,99,102,103,106,108,111,112,113],ya=[1,121],da=[1,120],Oo=[1,128],ds=[1,142],Dr=[1,143],nr=[1,144],di=[1,145],Ee=[1,130],Yn=[1,132],He=[1,136],Ti=[1,137],gn=[1,138],ks=[1,139],qa=[1,140],La=[1,141],Gs=[1,146],No=[1,147],vs=[1,126],nu=[1,127],$s=[1,134],Lu=[1,129],fm=[1,133],av=[1,131],Uu=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Zl=[1,149],Pa=[8,9,11],Al=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],ua=[1,169],bc=[1,165],Cc=[1,166],ga=[1,170],Ma=[1,167],Ha=[1,168],Ll=[75,113,116],_c=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],ov=[10,103],Jl=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Z1=[1,235],Fd=[1,233],J1=[1,237],Bd=[1,231],E0=[1,232],Bi=[1,234],on=[1,236],kr=[1,238],Ei=[1,255],Jo=[8,9,11,103],vc=[8,9,10,11,58,81,102,103,106,107,108,109],tf={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(Xi,Es,xa,xi,Wc,Ce,gp){var Be=Ce.length-1;switch(Wc){case 2:this.$=[];break;case 3:(!Array.isArray(Ce[Be])||Ce[Be].length>0)&&Ce[Be-1].push(Ce[Be]),this.$=Ce[Be-1];break;case 4:case 176:this.$=Ce[Be];break;case 11:xi.setDirection("TB"),this.$="TB";break;case 12:xi.setDirection(Ce[Be-1]),this.$=Ce[Be-1];break;case 27:this.$=Ce[Be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=xi.addSubGraph(Ce[Be-6],Ce[Be-1],Ce[Be-4]);break;case 34:this.$=xi.addSubGraph(Ce[Be-3],Ce[Be-1],Ce[Be-3]);break;case 35:this.$=xi.addSubGraph(void 0,Ce[Be-1],void 0);break;case 37:this.$=Ce[Be].trim(),xi.setAccTitle(this.$);break;case 38:case 39:this.$=Ce[Be].trim(),xi.setAccDescription(this.$);break;case 43:xi.addLink(Ce[Be-2].stmt,Ce[Be],Ce[Be-1]),this.$={stmt:Ce[Be],nodes:Ce[Be].concat(Ce[Be-2].nodes)};break;case 44:xi.addLink(Ce[Be-3].stmt,Ce[Be-1],Ce[Be-2]),this.$={stmt:Ce[Be-1],nodes:Ce[Be-1].concat(Ce[Be-3].nodes)};break;case 45:this.$={stmt:Ce[Be-1],nodes:Ce[Be-1]};break;case 46:this.$={stmt:Ce[Be],nodes:Ce[Be]};break;case 47:this.$=[Ce[Be]];break;case 48:this.$=Ce[Be-4].concat(Ce[Be]);break;case 49:this.$=Ce[Be];break;case 50:this.$=Ce[Be-2],xi.setClass(Ce[Be-2],Ce[Be]);break;case 51:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"square");break;case 52:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"doublecircle");break;case 53:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"circle");break;case 54:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"ellipse");break;case 55:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"stadium");break;case 56:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"subroutine");break;case 57:this.$=Ce[Be-7],xi.addVertex(Ce[Be-7],Ce[Be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ce[Be-5],Ce[Be-3]]]));break;case 58:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"cylinder");break;case 59:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"round");break;case 60:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"diamond");break;case 61:this.$=Ce[Be-5],xi.addVertex(Ce[Be-5],Ce[Be-2],"hexagon");break;case 62:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"odd");break;case 63:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"trapezoid");break;case 64:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"inv_trapezoid");break;case 65:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_right");break;case 66:this.$=Ce[Be-3],xi.addVertex(Ce[Be-3],Ce[Be-1],"lean_left");break;case 67:this.$=Ce[Be],xi.addVertex(Ce[Be]);break;case 68:Ce[Be-1].text=Ce[Be],this.$=Ce[Be-1];break;case 69:case 70:Ce[Be-2].text=Ce[Be-1],this.$=Ce[Be-2];break;case 71:this.$=Ce[Be];break;case 72:var Ff=xi.destructLink(Ce[Be],Ce[Be-2]);this.$={type:Ff.type,stroke:Ff.stroke,length:Ff.length,text:Ce[Be-1]};break;case 73:this.$={text:Ce[Be],type:"text"};break;case 74:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 75:this.$={text:Ce[Be],type:"string"};break;case 76:this.$={text:Ce[Be],type:"markdown"};break;case 77:var Ff=xi.destructLink(Ce[Be]);this.$={type:Ff.type,stroke:Ff.stroke,length:Ff.length};break;case 78:this.$=Ce[Be-1];break;case 79:this.$={text:Ce[Be],type:"text"};break;case 80:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 81:this.$={text:Ce[Be],type:"string"};break;case 82:case 97:this.$={text:Ce[Be],type:"markdown"};break;case 94:this.$={text:Ce[Be],type:"text"};break;case 95:this.$={text:Ce[Be-1].text+""+Ce[Be],type:Ce[Be-1].type};break;case 96:this.$={text:Ce[Be],type:"text"};break;case 98:this.$=Ce[Be-4],xi.addClass(Ce[Be-2],Ce[Be]);break;case 99:this.$=Ce[Be-4],xi.setClass(Ce[Be-2],Ce[Be]);break;case 100:case 108:this.$=Ce[Be-1],xi.setClickEvent(Ce[Be-1],Ce[Be]);break;case 101:case 109:this.$=Ce[Be-3],xi.setClickEvent(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 102:this.$=Ce[Be-2],xi.setClickEvent(Ce[Be-2],Ce[Be-1],Ce[Be]);break;case 103:this.$=Ce[Be-4],xi.setClickEvent(Ce[Be-4],Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 104:this.$=Ce[Be-2],xi.setLink(Ce[Be-2],Ce[Be]);break;case 105:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2]),xi.setTooltip(Ce[Be-4],Ce[Be]);break;case 106:this.$=Ce[Be-4],xi.setLink(Ce[Be-4],Ce[Be-2],Ce[Be]);break;case 107:this.$=Ce[Be-6],xi.setLink(Ce[Be-6],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-6],Ce[Be-2]);break;case 110:this.$=Ce[Be-1],xi.setLink(Ce[Be-1],Ce[Be]);break;case 111:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2]),xi.setTooltip(Ce[Be-3],Ce[Be]);break;case 112:this.$=Ce[Be-3],xi.setLink(Ce[Be-3],Ce[Be-2],Ce[Be]);break;case 113:this.$=Ce[Be-5],xi.setLink(Ce[Be-5],Ce[Be-4],Ce[Be]),xi.setTooltip(Ce[Be-5],Ce[Be-2]);break;case 114:this.$=Ce[Be-4],xi.addVertex(Ce[Be-2],void 0,void 0,Ce[Be]);break;case 115:this.$=Ce[Be-4],xi.updateLink([Ce[Be-2]],Ce[Be]);break;case 116:this.$=Ce[Be-4],xi.updateLink(Ce[Be-2],Ce[Be]);break;case 117:this.$=Ce[Be-8],xi.updateLinkInterpolate([Ce[Be-6]],Ce[Be-2]),xi.updateLink([Ce[Be-6]],Ce[Be]);break;case 118:this.$=Ce[Be-8],xi.updateLinkInterpolate(Ce[Be-6],Ce[Be-2]),xi.updateLink(Ce[Be-6],Ce[Be]);break;case 119:this.$=Ce[Be-6],xi.updateLinkInterpolate([Ce[Be-4]],Ce[Be]);break;case 120:this.$=Ce[Be-6],xi.updateLinkInterpolate(Ce[Be-4],Ce[Be]);break;case 121:case 123:this.$=[Ce[Be]];break;case 122:case 124:Ce[Be-2].push(Ce[Be]),this.$=Ce[Be-2];break;case 126:this.$=Ce[Be-1]+Ce[Be];break;case 174:this.$=Ce[Be];break;case 175:this.$=Ce[Be-1]+""+Ce[Be];break;case 177:this.$=Ce[Be-1]+""+Ce[Be];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:a,10:f,12:p},{1:[3]},i(v,m,{5:6}),{4:7,9:a,10:f,12:p},{4:8,9:a,10:f,12:p},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},i(v,[2,9]),i(v,[2,10]),i(v,[2,11]),{8:[1,54],9:[1,55],10:Z,15:53,18:56},i(Tt,[2,3]),i(Tt,[2,4]),i(Tt,[2,5]),i(Tt,[2,6]),i(Tt,[2,7]),i(Tt,[2,8]),{8:Ht,9:It,11:Ft,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:Ht,9:It,11:Ft,21:66},{8:Ht,9:It,11:Ft,21:67},{8:Ht,9:It,11:Ft,21:68},{8:Ht,9:It,11:Ft,21:69},{8:Ht,9:It,11:Ft,21:70},{8:Ht,9:It,10:[1,71],11:Ft,21:72},i(Tt,[2,36]),{35:[1,73]},{37:[1,74]},i(Tt,[2,39]),i(ke,[2,46],{18:75,10:Z}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:pn,42:Me,58:ve,77:[1,83],86:Ge,92:[1,80],94:[1,81],98:82,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},i(Tt,[2,178]),i(Tt,[2,179]),i(Tt,[2,180]),i(Tt,[2,181]),i(oe,[2,47]),i(oe,[2,49],{44:[1,96]}),i(Ne,[2,67],{110:109,29:[1,97],42:z,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:K,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),i(me,[2,174]),i(me,[2,135]),i(me,[2,136]),i(me,[2,137]),i(me,[2,138]),i(me,[2,139]),i(me,[2,140]),i(me,[2,141]),i(me,[2,142]),i(me,[2,143]),i(me,[2,144]),i(me,[2,145]),i(v,[2,12]),i(v,[2,18]),i(v,[2,19]),{9:[1,110]},i(cn,[2,26],{18:111,10:Z}),i(Tt,[2,27]),{40:112,41:38,42:z,43:39,45:40,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Tt,[2,40]),i(Tt,[2,41]),i(Tt,[2,42]),i(li,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:ya,116:da},i([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),i(Tt,[2,28]),i(Tt,[2,29]),i(Tt,[2,30]),i(Tt,[2,31]),i(Tt,[2,32]),{10:Oo,12:ds,14:Dr,27:nr,28:122,32:di,42:Ee,58:Yn,73:He,77:[1,124],78:[1,125],80:135,81:Ti,82:gn,83:ks,84:qa,85:La,86:Gs,87:No,88:123,102:vs,106:nu,108:$s,111:Lu,112:fm,113:av},i(Uu,m,{5:148}),i(Tt,[2,37]),i(Tt,[2,38]),i(ke,[2,45],{42:Zl}),{42:z,45:150,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{99:[1,151],100:152,102:[1,153]},{42:z,45:154,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{42:z,45:155,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Pa,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},i(Pa,[2,108],{117:160,10:[1,159],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,110],{10:[1,161]}),i(Al,[2,176]),i(Al,[2,163]),i(Al,[2,164]),i(Al,[2,165]),i(Al,[2,166]),i(Al,[2,167]),i(Al,[2,168]),i(Al,[2,169]),i(Al,[2,170]),i(Al,[2,171]),i(Al,[2,172]),i(Al,[2,173]),{42:z,45:162,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{30:163,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:171,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:173,48:[1,172],65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:174,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:175,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:176,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{106:[1,177]},{30:178,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:179,63:[1,180],65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:181,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:182,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{30:183,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(me,[2,175]),i(v,[2,20]),i(cn,[2,25]),i(ke,[2,43],{18:184,10:Z}),i(li,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{75:[1,188],76:189,113:ya,116:da},i(Ll,[2,73]),i(Ll,[2,75]),i(Ll,[2,76]),i(Ll,[2,161]),i(Ll,[2,162]),{8:Ht,9:It,10:Oo,11:Ft,12:ds,14:Dr,21:191,27:nr,29:[1,190],32:di,42:Ee,58:Yn,73:He,80:135,81:Ti,82:gn,83:ks,84:qa,85:La,86:Gs,87:No,88:192,102:vs,106:nu,108:$s,111:Lu,112:fm,113:av},i(_c,[2,94]),i(_c,[2,96]),i(_c,[2,97]),i(_c,[2,150]),i(_c,[2,151]),i(_c,[2,152]),i(_c,[2,153]),i(_c,[2,154]),i(_c,[2,155]),i(_c,[2,156]),i(_c,[2,157]),i(_c,[2,158]),i(_c,[2,159]),i(_c,[2,160]),i(_c,[2,83]),i(_c,[2,84]),i(_c,[2,85]),i(_c,[2,86]),i(_c,[2,87]),i(_c,[2,88]),i(_c,[2,89]),i(_c,[2,90]),i(_c,[2,91]),i(_c,[2,92]),i(_c,[2,93]),{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,193],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},{10:Z,18:194},{10:[1,195],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{10:[1,196]},{10:[1,197],103:[1,198]},i(ov,[2,121]),{10:[1,199],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{10:[1,200],42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:109,111:U,112:xt,113:nt},{77:[1,201]},i(Pa,[2,102],{10:[1,202]}),i(Pa,[2,104],{10:[1,203]}),{77:[1,204]},i(Al,[2,177]),{77:[1,205],95:[1,206]},i(oe,[2,50],{110:109,42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),{31:[1,207],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Jl,[2,79]),i(Jl,[2,81]),i(Jl,[2,82]),i(Jl,[2,146]),i(Jl,[2,147]),i(Jl,[2,148]),i(Jl,[2,149]),{47:[1,209],65:ua,79:208,113:ga,114:Ma,115:Ha},{30:210,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{49:[1,211],65:ua,79:208,113:ga,114:Ma,115:Ha},{51:[1,212],65:ua,79:208,113:ga,114:Ma,115:Ha},{53:[1,213],65:ua,79:208,113:ga,114:Ma,115:Ha},{55:[1,214],65:ua,79:208,113:ga,114:Ma,115:Ha},{58:[1,215]},{62:[1,216],65:ua,79:208,113:ga,114:Ma,115:Ha},{64:[1,217],65:ua,79:208,113:ga,114:Ma,115:Ha},{30:218,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},{31:[1,219],65:ua,79:208,113:ga,114:Ma,115:Ha},{65:ua,67:[1,220],69:[1,221],79:208,113:ga,114:Ma,115:Ha},{65:ua,67:[1,223],69:[1,222],79:208,113:ga,114:Ma,115:Ha},i(ke,[2,44],{42:Zl}),i(li,[2,70]),i(li,[2,69]),{60:[1,224],65:ua,79:208,113:ga,114:Ma,115:Ha},i(li,[2,72]),i(Ll,[2,74]),{30:225,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(Uu,m,{5:226}),i(_c,[2,95]),i(Tt,[2,35]),{41:227,42:z,43:39,45:40,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},{10:Z1,58:Fd,81:J1,89:228,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:239,101:[1,240],102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:241,101:[1,242],102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{102:[1,243]},{10:Z1,58:Fd,81:J1,89:244,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{42:z,45:245,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt},i(Pa,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},i(Pa,[2,109]),i(Pa,[2,111],{10:[1,249]}),i(Pa,[2,112]),i(Ne,[2,51]),i(Jl,[2,80]),i(Ne,[2,52]),{49:[1,250],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Ne,[2,59]),i(Ne,[2,54]),i(Ne,[2,55]),i(Ne,[2,56]),{106:[1,251]},i(Ne,[2,58]),i(Ne,[2,60]),{64:[1,252],65:ua,79:208,113:ga,114:Ma,115:Ha},i(Ne,[2,62]),i(Ne,[2,63]),i(Ne,[2,65]),i(Ne,[2,64]),i(Ne,[2,66]),i([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:ua,79:208,113:ga,114:Ma,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,254],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},i(oe,[2,48]),i(Pa,[2,114],{103:Ei}),i(Jo,[2,123],{105:256,10:Z1,58:Fd,81:J1,102:Bd,106:E0,107:Bi,108:on,109:kr}),i(vc,[2,125]),i(vc,[2,127]),i(vc,[2,128]),i(vc,[2,129]),i(vc,[2,130]),i(vc,[2,131]),i(vc,[2,132]),i(vc,[2,133]),i(vc,[2,134]),i(Pa,[2,115],{103:Ei}),{10:[1,257]},i(Pa,[2,116],{103:Ei}),{10:[1,258]},i(ov,[2,122]),i(Pa,[2,98],{103:Ei}),i(Pa,[2,99],{110:109,42:z,58:K,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,111:U,112:xt,113:nt}),i(Pa,[2,103]),i(Pa,[2,105],{10:[1,259]}),i(Pa,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:Ht,9:It,11:Ft,21:264},i(Tt,[2,34]),{10:Z1,58:Fd,81:J1,102:Bd,104:265,105:230,106:E0,107:Bi,108:on,109:kr},i(vc,[2,126]),{14:pn,42:Me,58:ve,86:Ge,98:266,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},{14:pn,42:Me,58:ve,86:Ge,98:267,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe,117:84},{95:[1,268]},i(Pa,[2,113]),i(Ne,[2,53]),{30:269,65:ua,77:bc,78:Cc,79:164,113:ga,114:Ma,115:Ha},i(Ne,[2,61]),i(Uu,m,{5:270}),i(Jo,[2,124],{105:256,10:Z1,58:Fd,81:J1,102:Bd,106:E0,107:Bi,108:on,109:kr}),i(Pa,[2,119],{117:160,10:[1,271],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,120],{117:160,10:[1,272],14:pn,42:Me,58:ve,86:Ge,102:Ke,103:we,106:_e,108:$t,111:re,112:ie,113:Oe}),i(Pa,[2,107]),{31:[1,273],65:ua,79:208,113:ga,114:Ma,115:Ha},{6:11,7:12,8:b,9:E,10:_,11:L,20:17,22:18,23:19,24:20,25:21,26:22,27:N,32:[1,274],33:24,34:B,36:j,38:R,40:28,41:38,42:z,43:39,45:40,58:K,81:it,82:st,83:ut,84:bt,85:mt,86:yt,99:dt,102:ht,103:wt,106:X,108:pt,110:41,111:U,112:xt,113:nt,118:Ot,119:Nt,120:qt,121:Ct},{10:Z1,58:Fd,81:J1,89:275,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},{10:Z1,58:Fd,81:J1,89:276,102:Bd,104:229,105:230,106:E0,107:Bi,108:on,109:kr},i(Ne,[2,57]),i(Tt,[2,33]),i(Pa,[2,117],{103:Ei}),i(Pa,[2,118],{103:Ei})],defaultActions:{},parseError:function(Xi,Es){if(Es.recoverable)this.trace(Xi);else{var xa=new Error(Xi);throw xa.hash=Es,xa}},parse:function(Xi){var Es=this,xa=[0],xi=[],Wc=[null],Ce=[],gp=this.table,Be="",Ff=0,dg=0,dm=2,pk=1,x3=Ce.slice.call(arguments,1),Ml=Object.create(this.lexer),T0={yy:{}};for(var cv in this.yy)Object.prototype.hasOwnProperty.call(this.yy,cv)&&(T0.yy[cv]=this.yy[cv]);Ml.setInput(Xi,T0.yy),T0.yy.lexer=Ml,T0.yy.parser=this,typeof Ml.yylloc>"u"&&(Ml.yylloc={});var F5=Ml.yylloc;Ce.push(F5);var jb=Ml.options&&Ml.options.ranges;typeof T0.yy.parseError=="function"?this.parseError=T0.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function B5(){var gg;return gg=xi.pop()||Ml.lex()||pk,typeof gg!="number"&&(gg instanceof Array&&(xi=gg,gg=xi.pop()),gg=Es.symbols_[gg]||gg),gg}for(var l1,td,ed,R5,uv={},j5,pp,$5,k3;;){if(td=xa[xa.length-1],this.defaultActions[td]?ed=this.defaultActions[td]:((l1===null||typeof l1>"u")&&(l1=B5()),ed=gp[td]&&gp[td][l1]),typeof ed>"u"||!ed.length||!ed[0]){var gm="";k3=[];for(j5 in gp[td])this.terminals_[j5]&&j5>dm&&k3.push("'"+this.terminals_[j5]+"'");Ml.showPosition?gm="Parse error on line "+(Ff+1)+`: +`+Ml.showPosition()+` +Expecting `+k3.join(", ")+", got '"+(this.terminals_[l1]||l1)+"'":gm="Parse error on line "+(Ff+1)+": Unexpected "+(l1==pk?"end of input":"'"+(this.terminals_[l1]||l1)+"'"),this.parseError(gm,{text:Ml.match,token:this.terminals_[l1]||l1,line:Ml.yylineno,loc:F5,expected:k3})}if(ed[0]instanceof Array&&ed.length>1)throw new Error("Parse Error: multiple actions possible at state: "+td+", token: "+l1);switch(ed[0]){case 1:xa.push(l1),Wc.push(Ml.yytext),Ce.push(Ml.yylloc),xa.push(ed[1]),l1=null,dg=Ml.yyleng,Be=Ml.yytext,Ff=Ml.yylineno,F5=Ml.yylloc;break;case 2:if(pp=this.productions_[ed[1]][1],uv.$=Wc[Wc.length-pp],uv._$={first_line:Ce[Ce.length-(pp||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(pp||1)].first_column,last_column:Ce[Ce.length-1].last_column},jb&&(uv._$.range=[Ce[Ce.length-(pp||1)].range[0],Ce[Ce.length-1].range[1]]),R5=this.performAction.apply(uv,[Be,dg,Ff,T0.yy,ed[1],Wc,Ce].concat(x3)),typeof R5<"u")return R5;pp&&(xa=xa.slice(0,-1*pp*2),Wc=Wc.slice(0,-1*pp),Ce=Ce.slice(0,-1*pp)),xa.push(this.productions_[ed[1]][0]),Wc.push(uv.$),Ce.push(uv._$),$5=gp[xa[xa.length-2]][xa[xa.length-1]],xa.push($5);break;case 3:return!0}}return!0}},Oc=function(){var nf={EOF:1,parseError:function(Es,xa){if(this.yy.parser)this.yy.parser.parseError(Es,xa);else throw new Error(Es)},setInput:function(Xi,Es){return this.yy=Es||this.yy||{},this._input=Xi,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Xi=this._input[0];this.yytext+=Xi,this.yyleng++,this.offset++,this.match+=Xi,this.matched+=Xi;var Es=Xi.match(/(?:\r\n?|\n).*/g);return Es?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Xi},unput:function(Xi){var Es=Xi.length,xa=Xi.split(/(?:\r\n?|\n)/g);this._input=Xi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Es),this.offset-=Es;var xi=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xa.length-1&&(this.yylineno-=xa.length-1);var Wc=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xa?(xa.length===xi.length?this.yylloc.first_column:0)+xi[xi.length-xa.length].length-xa[0].length:this.yylloc.first_column-Es},this.options.ranges&&(this.yylloc.range=[Wc[0],Wc[0]+this.yyleng-Es]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Xi){this.unput(this.match.slice(Xi))},pastInput:function(){var Xi=this.matched.substr(0,this.matched.length-this.match.length);return(Xi.length>20?"...":"")+Xi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Xi=this.match;return Xi.length<20&&(Xi+=this._input.substr(0,20-Xi.length)),(Xi.substr(0,20)+(Xi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Xi=this.pastInput(),Es=new Array(Xi.length+1).join("-");return Xi+this.upcomingInput()+` +`+Es+"^"},test_match:function(Xi,Es){var xa,xi,Wc;if(this.options.backtrack_lexer&&(Wc={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Wc.yylloc.range=this.yylloc.range.slice(0))),xi=Xi[0].match(/(?:\r\n?|\n).*/g),xi&&(this.yylineno+=xi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xi?xi[xi.length-1].length-xi[xi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Xi[0].length},this.yytext+=Xi[0],this.match+=Xi[0],this.matches=Xi,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Xi[0].length),this.matched+=Xi[0],xa=this.performAction.call(this,this.yy,this,Es,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xa)return xa;if(this._backtrack){for(var Ce in Wc)this[Ce]=Wc[Ce];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Xi,Es,xa,xi;this._more||(this.yytext="",this.match="");for(var Wc=this._currentRules(),Ce=0;CeEs[0].length)){if(Es=xa,xi=Ce,this.options.backtrack_lexer){if(Xi=this.test_match(xa,Wc[Ce]),Xi!==!1)return Xi;if(this._backtrack){Es=!1;continue}else return!1}else if(!this.options.flex)break}return Es?(Xi=this.test_match(Es,Wc[xi]),Xi!==!1?Xi:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Es=this.next();return Es||this.lex()},begin:function(Es){this.conditionStack.push(Es)},popState:function(){var Es=this.conditionStack.length-1;return Es>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Es){return Es=this.conditionStack.length-1-Math.abs(Es||0),Es>=0?this.conditionStack[Es]:"INITIAL"},pushState:function(Es){this.begin(Es)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Es,xa,xi,Wc){switch(xi){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return Es.lex.firstGraph()&&this.begin("dir"),12;case 30:return Es.lex.firstGraph()&&this.begin("dir"),12;case 31:return Es.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|(?!\)+))/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return nf}();tf.lexer=Oc;function ef(){this.yy={}}return ef.prototype=tf,tf.Parser=ef,new ef}();jdt.parser=jdt;const $dt=jdt,DIe="flowchart-";let CNt=0,zdt=Le(),pl={},dT=[],XA={},E5=[],WW={},KW={},YW=0,qdt=!0,tv,XW,QW=[];const ZW=i=>Yr.sanitizeText(i,zdt),sP=function(i){const a=Object.keys(pl);for(const f of a)if(pl[f].id===i)return pl[f].domId;return i},_Nt=function(i,a,f,p,v,m,b={}){let E,_=i;_!==void 0&&_.trim().length!==0&&(pl[_]===void 0&&(pl[_]={id:_,labelType:"text",domId:DIe+_+"-"+CNt,styles:[],classes:[]}),CNt++,a!==void 0?(zdt=Le(),E=ZW(a.text.trim()),pl[_].labelType=a.type,E[0]==='"'&&E[E.length-1]==='"'&&(E=E.substring(1,E.length-1)),pl[_].text=E):pl[_].text===void 0&&(pl[_].text=i),f!==void 0&&(pl[_].type=f),p!=null&&p.forEach(function(L){pl[_].styles.push(L)}),v!=null&&v.forEach(function(L){pl[_].classes.push(L)}),m!==void 0&&(pl[_].dir=m),pl[_].props===void 0?pl[_].props=b:b!==void 0&&Object.assign(pl[_].props,b))},SNt=function(i,a,f){const m={start:i,end:a,type:void 0,text:"",labelType:"text"};Ut.info("abc78 Got edge...",m);const b=f.text;b!==void 0&&(m.text=ZW(b.text.trim()),m.text[0]==='"'&&m.text[m.text.length-1]==='"'&&(m.text=m.text.substring(1,m.text.length-1)),m.labelType=b.type),f!==void 0&&(m.type=f.type,m.stroke=f.stroke,m.length=f.length),dT.push(m)},ANt=function(i,a,f){Ut.info("addLink (abc78)",i,a,f);let p,v;for(p=0;p/)&&(tv="LR"),tv.match(/.*v/)&&(tv="TB"),tv==="TD"&&(tv="TB")},JW=function(i,a){i.split(",").forEach(function(f){let p=f;pl[p]!==void 0&&pl[p].classes.push(a),WW[p]!==void 0&&WW[p].classes.push(a)})},OIe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(KW[XW==="gen-1"?sP(f):f]=ZW(a))})},NIe=function(i,a,f){let p=sP(i);if(Le().securityLevel!=="loose"||a===void 0)return;let v=[];if(typeof f=="string"){v=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};QW.push(zNt);const qNt=function(i="gen-1"){pl={},XA={},dT=[],QW=[zNt],E5=[],WW={},YW=0,KW={},qdt=!0,XW=i,ap()},HNt=i=>{XW=i||"gen-2"},GNt=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},VNt=function(i,a,f){let p=i.text.trim(),v=f.text;i===f&&f.text.match(/\s/)&&(p=void 0);function m(N){const B={boolean:{},number:{},string:{}},j=[];let R;return{nodeList:N.filter(function(K){const it=typeof K;return K.stmt&&K.stmt==="dir"?(R=K.value,!1):K.trim()===""?!1:it in B?B[it].hasOwnProperty(K)?!1:B[it][K]=!0:j.includes(K)?!1:j.push(K)}),dir:R}}let b=[];const{nodeList:E,dir:_}=m(b.concat.apply(b,a));if(b=E,XW==="gen-1")for(let N=0;N2e3)return;if(UNt[aP]=a,E5[a].id===i)return{result:!0,count:0};let p=0,v=1;for(;p=0){const b=WNt(i,m);if(b.result)return{result:!0,count:v+b.count};v=v+b.count}p=p+1}return{result:!1,count:v}},KNt=function(i){return UNt[i]},YNt=function(){aP=-1,E5.length>0&&WNt("none",E5.length-1)},XNt=function(){return E5},QNt=()=>qdt?(qdt=!1,!0):!1,FIe=i=>{let a=i.trim(),f="arrow_open";switch(a[0]){case"<":f="arrow_point",a=a.slice(1);break;case"x":f="arrow_cross",a=a.slice(1);break;case"o":f="arrow_circle",a=a.slice(1);break}let p="normal";return a.includes("=")&&(p="thick"),a.includes(".")&&(p="dotted"),{type:f,stroke:p}},BIe=(i,a)=>{const f=a.length;let p=0;for(let v=0;v{const a=i.trim();let f=a.slice(0,-1),p="arrow_open";switch(a.slice(-1)){case"x":p="arrow_cross",a[0]==="x"&&(p="double_"+p,f=f.slice(1));break;case">":p="arrow_point",a[0]==="<"&&(p="double_"+p,f=f.slice(1));break;case"o":p="arrow_circle",a[0]==="o"&&(p="double_"+p,f=f.slice(1));break}let v="normal",m=f.length-1;f[0]==="="&&(v="thick"),f[0]==="~"&&(v="invisible");let b=BIe(".",f);return b&&(v="dotted",m=b),{type:p,stroke:v,length:m}},ZNt=(i,a)=>{const f=RIe(i);let p;if(a){if(p=FIe(a),p.stroke!==f.stroke)return{type:"INVALID",stroke:"INVALID"};if(p.type==="arrow_open")p.type=f.type;else{if(p.type!==f.type)return{type:"INVALID",stroke:"INVALID"};p.type="double_"+p.type}return p.type==="double_arrow"&&(p.type="double_arrow_point"),p.length=f.length,p}return f},JNt=(i,a)=>{let f=!1;return i.forEach(p=>{p.nodes.indexOf(a)>=0&&(f=!0)}),f},tPt=(i,a)=>{const f=[];return i.nodes.forEach((p,v)=>{JNt(a,p)||f.push(i.nodes[v])}),{nodes:f}},ePt={firstGraph:QNt},gT={defaultConfig:()=>oT.flowchart,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,addVertex:_Nt,lookUpDomId:sP,addLink:ANt,updateLinkInterpolate:LNt,updateLink:MNt,addClass:INt,setDirection:DNt,setClass:JW,setTooltip:OIe,getTooltip:NNt,setClickEvent:PNt,setLink:ONt,bindFunctions:FNt,getDirection:BNt,getVertices:RNt,getEdges:jNt,getClasses:$Nt,clear:qNt,setGen:HNt,defaultStyle:GNt,addSubGraph:VNt,getDepthFirstPos:KNt,indexNodes:YNt,getSubGraphs:XNt,destructLink:ZNt,lex:ePt,exists:JNt,makeUniq:tPt,setDiagramTitle:Z2,getDiagramTitle:Db},jIe=Object.freeze(Object.defineProperty({__proto__:null,addClass:INt,addLink:ANt,addSingleLink:SNt,addSubGraph:VNt,addVertex:_Nt,bindFunctions:FNt,clear:qNt,default:gT,defaultStyle:GNt,destructLink:ZNt,firstGraph:QNt,getClasses:$Nt,getDepthFirstPos:KNt,getDirection:BNt,getEdges:jNt,getSubGraphs:XNt,getTooltip:NNt,getVertices:RNt,indexNodes:YNt,lex:ePt,lookUpDomId:sP,setClass:JW,setClickEvent:PNt,setDirection:DNt,setGen:HNt,setLink:ONt,updateLink:MNt,updateLinkInterpolate:LNt},Symbol.toStringTag,{value:"Module"}));var $Ie="[object Symbol]";function pT(i){return typeof i=="symbol"||l3(i)&&tT(i)==$Ie}function QA(i,a){for(var f=-1,p=i==null?0:i.length,v=Array(p);++f-1}function Nb(i){return ek(i)?ODt(i):OOt(i)}var iDe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,sDe=/^\w*$/;function Hdt(i,a){if(Mf(i))return!1;var f=typeof i;return f=="number"||f=="symbol"||f=="boolean"||i==null||pT(i)?!0:sDe.test(i)||!iDe.test(i)||a!=null&&i in Object(a)}var aDe=500;function oDe(i){var a=PA(i,function(p){return f.size===aDe&&f.clear(),p}),f=a.cache;return a}var cDe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,uDe=/\\(\\)?/g,lDe=oDe(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(cDe,function(f,p,v,m){a.push(v?m.replace(uDe,"$1"):p||f)}),a});const hDe=lDe;function uPt(i){return i==null?"":iPt(i)}function eK(i,a){return Mf(i)?i:Hdt(i,a)?[i]:hDe(uPt(i))}var fDe=1/0;function oP(i){if(typeof i=="string"||pT(i))return i;var a=i+"";return a=="0"&&1/i==-fDe?"-0":a}function nK(i,a){a=eK(a,i);for(var f=0,p=a.length;i!=null&&f0&&f(E)?a>1?rK(E,a-1,f,p,v):Gdt(v,E):p||(v[v.length]=E)}return v}function ZA(i){var a=i==null?0:i.length;return a?rK(i,1):[]}function pDe(i){return BDt(FDt(i,void 0,ZA),i+"")}function bDe(i,a,f,p){var v=-1,m=i==null?0:i.length;for(p&&m&&(f=i[++v]);++vE))return!1;var L=m.get(i),N=m.get(a);if(L&&N)return L==a&&N==i;var B=-1,j=!0,R=f&GOe?new uP:void 0;for(m.set(i,a),m.set(a,i);++B2?a[2]:void 0;for(v&&YN(a[0],a[1],v)&&(p=1);++f-1?v[m?a[b]:b]:void 0}}var ONe=Math.max;function NNe(i,a,f){var p=i==null?0:i.length;if(!p)return-1;var v=f==null?0:ZIe(f);return v<0&&(v=ONe(p+v,0)),cPt(i,ok(a),v)}var PNe=DNe(NNe);const Zdt=PNe;function PPt(i,a){var f=-1,p=ek(i)?Array(i.length):[];return sK(i,function(v,m,b){p[++f]=a(v,m,b)}),p}function Of(i,a){var f=Mf(i)?QA:PPt;return f(i,ok(a))}function FNe(i,a){return i==null?i:Y1t(i,Qdt(a),iT)}function BNe(i,a){return i&&Xdt(i,Qdt(a))}function RNe(i,a){return i>a}var jNe=Object.prototype,$Ne=jNe.hasOwnProperty;function zNe(i,a){return i!=null&&$Ne.call(i,a)}function za(i,a){return i!=null&&IPt(i,a,zNe)}function qNe(i,a){return QA(a,function(f){return i[f]})}function C5(i){return i==null?[]:qNe(i,Nb(i))}function Xh(i){return i===void 0}function FPt(i,a){return ia||m&&b&&_&&!E&&!L||p&&b&&_||!f&&_||!v)return 1;if(!p&&!m&&!L&&i=E)return _;var L=f[p];return _*(L=="desc"?-1:1)}}return i.index-a.index}function KNe(i,a,f){a.length?a=QA(a,function(m){return Mf(m)?function(b){return nK(b,m.length===1?m[0]:m)}:m}):a=[sT];var p=-1;a=QA(a,wW(ok));var v=PPt(i,function(m,b,E){var _=QA(a,function(L){return L(m)});return{criteria:_,index:++p,value:m}});return VNe(v,function(m,b){return WNe(m,b,f)})}function YNe(i,a){return GNe(i,a,function(f,p){return DPt(i,p)})}var XNe=pDe(function(i,a){return i==null?{}:YNe(i,a)});const hP=XNe;var QNe=Math.ceil,ZNe=Math.max;function JNe(i,a,f,p){for(var v=-1,m=ZNe(QNe((a-i)/(f||1)),0),b=Array(m);m--;)b[p?m:++v]=i,i+=f;return b}function tPe(i){return function(a,f,p){return p&&typeof p!="number"&&YN(a,f,p)&&(f=p=void 0),a=tK(a),f===void 0?(f=a,a=0):f=tK(f),p=p===void 0?a1&&YN(i,a[0],a[1])?a=[]:f>2&&YN(a[0],a[1],a[2])&&(a=[a[0]]),KNe(i,rK(a,1),[])});const dP=rPe;var iPe=1/0,sPe=GA&&1/Wdt(new GA([,-0]))[1]==iPe?function(i){return new GA(i)}:JIe;const aPe=sPe;var oPe=200;function cPe(i,a,f){var p=-1,v=rDe,m=i.length,b=!0,E=[],_=E;if(f)b=!1,v=MNe;else if(m>=oPe){var L=a?null:aPe(i);if(L)return Wdt(L);b=!1,v=EPt,_=new uP}else _=a?[]:E;t:for(;++p1?v.setNode(m,f):v.setNode(m)}),this}setNode(a,f){return za(this._nodes,a)?(arguments.length>1&&(this._nodes[a]=f),this):(this._nodes[a]=arguments.length>1?f:this._defaultNodeLabelFn(a),this._isCompound&&(this._parent[a]=wT,this._children[a]={},this._children[wT][a]=!0),this._in[a]={},this._preds[a]={},this._out[a]={},this._sucs[a]={},++this._nodeCount,this)}node(a){return this._nodes[a]}hasNode(a){return za(this._nodes,a)}removeNode(a){var f=this;if(za(this._nodes,a)){var p=function(v){f.removeEdge(f._edgeObjs[v])};delete this._nodes[a],this._isCompound&&(this._removeFromParentsChildList(a),delete this._parent[a],cr(this.children(a),function(v){f.setParent(v)}),delete this._children[a]),cr(Nb(this._in[a]),p),delete this._in[a],delete this._preds[a],cr(Nb(this._out[a]),p),delete this._out[a],delete this._sucs[a],--this._nodeCount}return this}setParent(a,f){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Xh(f))f=wT;else{f+="";for(var p=f;!Xh(p);p=this.parent(p))if(p===a)throw new Error("Setting "+f+" as parent of "+a+" would create a cycle");this.setNode(f)}return this.setNode(a),this._removeFromParentsChildList(a),this._parent[a]=f,this._children[f][a]=!0,this}_removeFromParentsChildList(a){delete this._children[this._parent[a]][a]}parent(a){if(this._isCompound){var f=this._parent[a];if(f!==wT)return f}}children(a){if(Xh(a)&&(a=wT),this._isCompound){var f=this._children[a];if(f)return Nb(f)}else{if(a===wT)return this.nodes();if(this.hasNode(a))return[]}}predecessors(a){var f=this._preds[a];if(f)return Nb(f)}successors(a){var f=this._sucs[a];if(f)return Nb(f)}neighbors(a){var f=this.predecessors(a);if(f)return lPe(f,this.successors(a))}isLeaf(a){var f;return this.isDirected()?f=this.successors(a):f=this.neighbors(a),f.length===0}filterNodes(a){var f=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});f.setGraph(this.graph());var p=this;cr(this._nodes,function(b,E){a(E)&&f.setNode(E,b)}),cr(this._edgeObjs,function(b){f.hasNode(b.v)&&f.hasNode(b.w)&&f.setEdge(b,p.edge(b))});var v={};function m(b){var E=p.parent(b);return E===void 0||f.hasNode(E)?(v[b]=E,E):E in v?v[E]:m(E)}return this._isCompound&&cr(f.nodes(),function(b){f.setParent(b,m(b))}),f}setDefaultEdgeLabel(a){return OA(a)||(a=jA(a)),this._defaultEdgeLabelFn=a,this}edgeCount(){return this._edgeCount}edges(){return C5(this._edgeObjs)}setPath(a,f){var p=this,v=arguments;return fP(a,function(m,b){return v.length>1?p.setEdge(m,b,f):p.setEdge(m,b),b}),this}setEdge(){var a,f,p,v,m=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(a=b.v,f=b.w,p=b.name,arguments.length===2&&(v=arguments[1],m=!0)):(a=b,f=arguments[1],p=arguments[3],arguments.length>2&&(v=arguments[2],m=!0)),a=""+a,f=""+f,Xh(p)||(p=""+p);var E=gP(this._isDirected,a,f,p);if(za(this._edgeLabels,E))return m&&(this._edgeLabels[E]=v),this;if(!Xh(p)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(a),this.setNode(f),this._edgeLabels[E]=m?v:this._defaultEdgeLabelFn(a,f,p);var _=pPe(this._isDirected,a,f,p);return a=_.v,f=_.w,Object.freeze(_),this._edgeObjs[E]=_,RPt(this._preds[f],a),RPt(this._sucs[a],f),this._in[f][E]=_,this._out[a][E]=_,this._edgeCount++,this}edge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return this._edgeLabels[v]}hasEdge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p);return za(this._edgeLabels,v)}removeEdge(a,f,p){var v=arguments.length===1?e0t(this._isDirected,arguments[0]):gP(this._isDirected,a,f,p),m=this._edgeObjs[v];return m&&(a=m.v,f=m.w,delete this._edgeLabels[v],delete this._edgeObjs[v],jPt(this._preds[f],a),jPt(this._sucs[a],f),delete this._in[f][v],delete this._out[a][v],this._edgeCount--),this}inEdges(a,f){var p=this._in[a];if(p){var v=C5(p);return f?T5(v,function(m){return m.v===f}):v}}outEdges(a,f){var p=this._out[a];if(p){var v=C5(p);return f?T5(v,function(m){return m.w===f}):v}}nodeEdges(a,f){var p=this.inEdges(a,f);if(p)return p.concat(this.outEdges(a,f))}}a1.prototype._nodeCount=0,a1.prototype._edgeCount=0;function RPt(i,a){i[a]?i[a]++:i[a]=1}function jPt(i,a){--i[a]||delete i[a]}function gP(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}return v+BPt+m+BPt+(Xh(p)?gPe:p)}function pPe(i,a,f,p){var v=""+a,m=""+f;if(!i&&v>m){var b=v;v=m,m=b}var E={v,w:m};return p&&(E.name=p),E}function e0t(i,a){return gP(i,a.v,a.w,a.name)}class bPe{constructor(){var a={};a._next=a._prev=a,this._sentinel=a}dequeue(){var a=this._sentinel,f=a._prev;if(f!==a)return $Pt(f),f}enqueue(a){var f=this._sentinel;a._prev&&a._next&&$Pt(a),a._next=f._next,f._next._prev=a,f._next=a,a._prev=f}toString(){for(var a=[],f=this._sentinel,p=f._prev;p!==f;)a.push(JSON.stringify(p,vPe)),p=p._prev;return"["+a.join(", ")+"]"}}function $Pt(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function vPe(i,a){if(i!=="_next"&&i!=="_prev")return a}var wPe=jA(1);function mPe(i,a){if(i.nodeCount()<=1)return[];var f=xPe(i,a||wPe),p=yPe(f.graph,f.buckets,f.zeroIdx);return ZA(Of(p,function(v){return i.outEdges(v.v,v.w)}))}function yPe(i,a,f){for(var p=[],v=a[a.length-1],m=a[0],b;i.nodeCount();){for(;b=m.dequeue();)n0t(i,a,f,b);for(;b=v.dequeue();)n0t(i,a,f,b);if(i.nodeCount()){for(var E=a.length-2;E>0;--E)if(b=a[E].dequeue(),b){p=p.concat(n0t(i,a,f,b,!0));break}}}return p}function n0t(i,a,f,p,v){var m=v?[]:void 0;return cr(i.inEdges(p.v),function(b){var E=i.edge(b),_=i.node(b.v);v&&m.push({v:b.v,w:b.w}),_.out-=E,r0t(a,f,_)}),cr(i.outEdges(p.v),function(b){var E=i.edge(b),_=b.w,L=i.node(_);L.in-=E,r0t(a,f,L)}),i.removeNode(p.v),m}function xPe(i,a){var f=new a1,p=0,v=0;cr(i.nodes(),function(E){f.setNode(E,{v:E,in:0,out:0})}),cr(i.edges(),function(E){var _=f.edge(E.v,E.w)||0,L=a(E),N=_+L;f.setEdge(E.v,E.w,N),v=Math.max(v,f.node(E.v).out+=L),p=Math.max(p,f.node(E.w).in+=L)});var m=vT(v+p+3).map(function(){return new bPe}),b=p+1;return cr(f.nodes(),function(E){r0t(m,b,f.node(E))}),{graph:f,buckets:m,zeroIdx:b}}function r0t(i,a,f){f.out?f.in?i[f.out-f.in+a].enqueue(f):i[i.length-1].enqueue(f):i[0].enqueue(f)}function kPe(i){var a=i.graph().acyclicer==="greedy"?mPe(i,f(i)):EPe(i);cr(a,function(p){var v=i.edge(p);i.removeEdge(p),v.forwardName=p.name,v.reversed=!0,i.setEdge(p.w,p.v,v,cK("rev"))});function f(p){return function(v){return p.edge(v).weight}}}function EPe(i){var a=[],f={},p={};function v(m){za(p,m)||(p[m]=!0,f[m]=!0,cr(i.outEdges(m),function(b){za(f,b.w)?a.push(b):v(b.w)}),delete f[m])}return cr(i.nodes(),v),a}function TPe(i){cr(i.edges(),function(a){var f=i.edge(a);if(f.reversed){i.removeEdge(a);var p=f.forwardName;delete f.reversed,delete f.forwardName,i.setEdge(a.w,a.v,f,p)}})}function tL(i,a,f,p){var v;do v=cK(p);while(i.hasNode(v));return f.dummy=a,i.setNode(v,f),v}function CPe(i){var a=new a1().setGraph(i.graph());return cr(i.nodes(),function(f){a.setNode(f,i.node(f))}),cr(i.edges(),function(f){var p=a.edge(f.v,f.w)||{weight:0,minlen:1},v=i.edge(f);a.setEdge(f.v,f.w,{weight:p.weight+v.weight,minlen:Math.max(p.minlen,v.minlen)})}),a}function zPt(i){var a=new a1({multigraph:i.isMultigraph()}).setGraph(i.graph());return cr(i.nodes(),function(f){i.children(f).length||a.setNode(f,i.node(f))}),cr(i.edges(),function(f){a.setEdge(f,i.edge(f))}),a}function qPt(i,a){var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2;if(!v&&!m)throw new Error("Not possible to find intersection inside of the rectangle");var _,L;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),_=E*v/m,L=E):(v<0&&(b=-b),_=b,L=b*m/v),{x:f+_,y:p+L}}function uK(i){var a=Of(vT(GPt(i)+1),function(){return[]});return cr(i.nodes(),function(f){var p=i.node(f),v=p.rank;Xh(v)||(a[v][p.order]=f)}),a}function _Pe(i){var a=lP(Of(i.nodes(),function(f){return i.node(f).rank}));cr(i.nodes(),function(f){var p=i.node(f);za(p,"rank")&&(p.rank-=a)})}function SPe(i){var a=lP(Of(i.nodes(),function(m){return i.node(m).rank})),f=[];cr(i.nodes(),function(m){var b=i.node(m).rank-a;f[b]||(f[b]=[]),f[b].push(m)});var p=0,v=i.graph().nodeRankFactor;cr(f,function(m,b){Xh(m)&&b%v!==0?--p:p&&cr(m,function(E){i.node(E).rank+=p})})}function HPt(i,a,f,p){var v={width:0,height:0};return arguments.length>=4&&(v.rank=f,v.order=p),tL(i,"border",v,a)}function GPt(i){return bT(Of(i.nodes(),function(a){var f=i.node(a).rank;if(!Xh(f))return f}))}function APe(i,a){var f={lhs:[],rhs:[]};return cr(i,function(p){a(p)?f.lhs.push(p):f.rhs.push(p)}),f}function LPe(i,a){var f=OPt();try{return a()}finally{console.log(i+" time: "+(OPt()-f)+"ms")}}function MPe(i,a){return a()}function IPe(i){function a(f){var p=i.children(f),v=i.node(f);if(p.length&&cr(p,a),za(v,"minRank")){v.borderLeft=[],v.borderRight=[];for(var m=v.minRank,b=v.maxRank+1;mb.lim&&(E=b,_=!0);var L=T5(a.edges(),function(N){return _===nFt(i,i.node(N.v),E)&&_!==nFt(i,i.node(N.w),E)});return t0t(L,function(N){return pP(a,N)})}function eFt(i,a,f,p){var v=f.v,m=f.w;i.removeEdge(v,m),i.setEdge(p.v,p.w,{}),c0t(i),o0t(i,a),UPe(i,a)}function UPe(i,a){var f=Zdt(i.nodes(),function(v){return!a.node(v).parent}),p=GPe(i,f);p=p.slice(1),cr(p,function(v){var m=i.node(v).parent,b=a.edge(v,m),E=!1;b||(b=a.edge(m,v),E=!0),a.node(v).rank=a.node(m).rank+(E?b.minlen:-b.minlen)})}function WPe(i,a,f){return i.hasEdge(a,f)}function nFt(i,a,f){return f.low<=a.lim&&a.lim<=f.lim}function KPe(i){switch(i.graph().ranker){case"network-simplex":rFt(i);break;case"tight-tree":XPe(i);break;case"longest-path":YPe(i);break;default:rFt(i)}}var YPe=a0t;function XPe(i){a0t(i),KPt(i)}function rFt(i){mT(i)}function QPe(i){var a=tL(i,"root",{},"_root"),f=ZPe(i),p=bT(C5(f))-1,v=2*p+1;i.graph().nestingRoot=a,cr(i.edges(),function(b){i.edge(b).minlen*=v});var m=JPe(i)+1;cr(i.children(),function(b){iFt(i,a,v,m,p,f,b)}),i.graph().nodeRankFactor=v}function iFt(i,a,f,p,v,m,b){var E=i.children(b);if(!E.length){b!==a&&i.setEdge(a,b,{weight:0,minlen:f});return}var _=HPt(i,"_bt"),L=HPt(i,"_bb"),N=i.node(b);i.setParent(_,b),N.borderTop=_,i.setParent(L,b),N.borderBottom=L,cr(E,function(B){iFt(i,a,f,p,v,m,B);var j=i.node(B),R=j.borderTop?j.borderTop:B,z=j.borderBottom?j.borderBottom:B,K=j.borderTop?p:2*p,it=R!==z?1:v-m[b]+1;i.setEdge(_,R,{weight:K,minlen:it,nestingEdge:!0}),i.setEdge(z,L,{weight:K,minlen:it,nestingEdge:!0})}),i.parent(b)||i.setEdge(a,_,{weight:0,minlen:v+m[b]})}function ZPe(i){var a={};function f(p,v){var m=i.children(p);m&&m.length&&cr(m,function(b){f(b,v+1)}),a[p]=v}return cr(i.children(),function(p){f(p,1)}),a}function JPe(i){return fP(i.edges(),function(a,f){return a+i.edge(f).weight},0)}function tFe(i){var a=i.graph();i.removeNode(a.nestingRoot),delete a.nestingRoot,cr(i.edges(),function(f){var p=i.edge(f);p.nestingEdge&&i.removeEdge(f)})}function eFe(i,a,f){var p={},v;cr(f,function(m){for(var b=i.parent(m),E,_;b;){if(E=i.parent(b),E?(_=p[E],p[E]=b):(_=v,v=b),_&&_!==b){a.setEdge(_,b);return}b=E}})}function nFe(i,a,f){var p=rFe(i),v=new a1({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(function(m){return i.node(m)});return cr(i.nodes(),function(m){var b=i.node(m),E=i.parent(m);(b.rank===a||b.minRank<=a&&a<=b.maxRank)&&(v.setNode(m),v.setParent(m,E||p),cr(i[f](m),function(_){var L=_.v===m?_.w:_.v,N=v.edge(L,m),B=Xh(N)?0:N.weight;v.setEdge(L,m,{weight:i.edge(_).weight+B})}),za(b,"minRank")&&v.setNode(m,{borderLeft:b.borderLeft[a],borderRight:b.borderRight[a]}))}),v}function rFe(i){for(var a;i.hasNode(a=cK("_root")););return a}function iFe(i,a){for(var f=0,p=1;p0;)N%2&&(B+=E[N+1]),N=N-1>>1,E[N]+=L.weight;_+=L.weight*B})),_}function aFe(i){var a={},f=T5(i.nodes(),function(E){return!i.children(E).length}),p=bT(Of(f,function(E){return i.node(E).rank})),v=Of(vT(p+1),function(){return[]});function m(E){if(!za(a,E)){a[E]=!0;var _=i.node(E);v[_.rank].push(E),cr(i.successors(E),m)}}var b=dP(f,function(E){return i.node(E).rank});return cr(b,m),v}function oFe(i,a){return Of(a,function(f){var p=i.inEdges(f);if(p.length){var v=fP(p,function(m,b){var E=i.edge(b),_=i.node(b.v);return{sum:m.sum+E.weight*_.order,weight:m.weight+E.weight}},{sum:0,weight:0});return{v:f,barycenter:v.sum/v.weight,weight:v.weight}}else return{v:f}})}function cFe(i,a){var f={};cr(i,function(v,m){var b=f[v.v]={indegree:0,in:[],out:[],vs:[v.v],i:m};Xh(v.barycenter)||(b.barycenter=v.barycenter,b.weight=v.weight)}),cr(a.edges(),function(v){var m=f[v.v],b=f[v.w];!Xh(m)&&!Xh(b)&&(b.indegree++,m.out.push(f[v.w]))});var p=T5(f,function(v){return!v.indegree});return uFe(p)}function uFe(i){var a=[];function f(m){return function(b){b.merged||(Xh(b.barycenter)||Xh(m.barycenter)||b.barycenter>=m.barycenter)&&lFe(m,b)}}function p(m){return function(b){b.in.push(m),--b.indegree===0&&i.push(b)}}for(;i.length;){var v=i.pop();a.push(v),cr(v.in.reverse(),f(v)),cr(v.out,p(v))}return Of(T5(a,function(m){return!m.merged}),function(m){return hP(m,["vs","i","barycenter","weight"])})}function lFe(i,a){var f=0,p=0;i.weight&&(f+=i.barycenter*i.weight,p+=i.weight),a.weight&&(f+=a.barycenter*a.weight,p+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=f/p,i.weight=p,i.i=Math.min(a.i,i.i),a.merged=!0}function hFe(i,a){var f=APe(i,function(N){return za(N,"barycenter")}),p=f.lhs,v=dP(f.rhs,function(N){return-N.i}),m=[],b=0,E=0,_=0;p.sort(fFe(!!a)),_=sFt(m,v,_),cr(p,function(N){_+=N.vs.length,m.push(N.vs),b+=N.barycenter*N.weight,E+=N.weight,_=sFt(m,v,_)});var L={vs:ZA(m)};return E&&(L.barycenter=b/E,L.weight=E),L}function sFt(i,a,f){for(var p;a.length&&(p=aK(a)).i<=f;)a.pop(),i.push(p.vs),f++;return f}function fFe(i){return function(a,f){return a.barycenterf.barycenter?1:i?f.i-a.i:a.i-f.i}}function aFt(i,a,f,p){var v=i.children(a),m=i.node(a),b=m?m.borderLeft:void 0,E=m?m.borderRight:void 0,_={};b&&(v=T5(v,function(z){return z!==b&&z!==E}));var L=oFe(i,v);cr(L,function(z){if(i.children(z.v).length){var K=aFt(i,z.v,f,p);_[z.v]=K,za(K,"barycenter")&&gFe(z,K)}});var N=cFe(L,f);dFe(N,_);var B=hFe(N,p);if(b&&(B.vs=ZA([b,B.vs,E]),i.predecessors(b).length)){var j=i.node(i.predecessors(b)[0]),R=i.node(i.predecessors(E)[0]);za(B,"barycenter")||(B.barycenter=0,B.weight=0),B.barycenter=(B.barycenter*B.weight+j.order+R.order)/(B.weight+2),B.weight+=2}return B}function dFe(i,a){cr(i,function(f){f.vs=ZA(f.vs.map(function(p){return a[p]?a[p].vs:p}))})}function gFe(i,a){Xh(i.barycenter)?(i.barycenter=a.barycenter,i.weight=a.weight):(i.barycenter=(i.barycenter*i.weight+a.barycenter*a.weight)/(i.weight+a.weight),i.weight+=a.weight)}function pFe(i){var a=GPt(i),f=oFt(i,vT(1,a+1),"inEdges"),p=oFt(i,vT(a-1,-1,-1),"outEdges"),v=aFe(i);cFt(i,v);for(var m=Number.POSITIVE_INFINITY,b,E=0,_=0;_<4;++E,++_){bFe(E%2?f:p,E%4>=2),v=uK(i);var L=iFe(i,v);Lb||E>a[_].lim));for(L=_,_=p;(_=i.parent(_))!==L;)m.push(_);return{path:v.concat(m.reverse()),lca:L}}function mFe(i){var a={},f=0;function p(v){var m=f;cr(i.children(v),p),a[v]={low:m,lim:f++}}return cr(i.children(),p),a}function yFe(i,a){var f={};function p(v,m){var b=0,E=0,_=v.length,L=aK(m);return cr(m,function(N,B){var j=kFe(i,N),R=j?i.node(j).order:_;(j||N===L)&&(cr(m.slice(E,B+1),function(z){cr(i.predecessors(z),function(K){var it=i.node(K),st=it.order;(stL)&&uFt(f,j,N)})})}function v(m,b){var E=-1,_,L=0;return cr(b,function(N,B){if(i.node(N).dummy==="border"){var j=i.predecessors(N);j.length&&(_=i.node(j[0]).order,p(b,L,B,E,_),L=B,E=_)}p(b,L,b.length,_,m.length)}),b}return fP(a,v),f}function kFe(i,a){if(i.node(a).dummy)return Zdt(i.predecessors(a),function(f){return i.node(f).dummy})}function uFt(i,a,f){if(a>f){var p=a;a=f,f=p}var v=i[a];v||(i[a]=v={}),v[f]=!0}function EFe(i,a,f){if(a>f){var p=a;a=f,f=p}return za(i[a],f)}function TFe(i,a,f,p){var v={},m={},b={};return cr(a,function(E){cr(E,function(_,L){v[_]=_,m[_]=_,b[_]=L})}),cr(a,function(E){var _=-1;cr(E,function(L){var N=p(L);if(N.length){N=dP(N,function(K){return b[K]});for(var B=(N.length-1)/2,j=Math.floor(B),R=Math.ceil(B);j<=R;++j){var z=N[j];m[L]===L&&_0}function b3(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)});for(var _=p-i.width/2-b,L=v-i.height/2-E,N=0;N1&&m.sort(function(z,K){var it=z.x-f.x,st=z.y-f.y,ut=Math.sqrt(it*it+st*st),bt=K.x-f.x,mt=K.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return utMath.abs(v)*E?(m<0&&(E=-E),_=m===0?0:E*v/m,L=E):(v<0&&(b=-b),_=b,L=v===0?0:b*m/v),{x:f+_,y:p+L}}var y0t={rect:SBe,ellipse:ABe,circle:LBe,diamond:MBe};function _Be(i){y0t=i}function SBe(i,a,f){var p=i.insert("rect",":first-child").attr("rx",f.rx).attr("ry",f.ry).attr("x",-a.width/2).attr("y",-a.height/2).attr("width",a.width).attr("height",a.height);return f.intersect=function(v){return m0t(f,v)},p}function ABe(i,a,f){var p=a.width/2,v=a.height/2,m=i.insert("ellipse",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("rx",p).attr("ry",v);return f.intersect=function(b){return pFt(f,p,v,b)},m}function LBe(i,a,f){var p=Math.max(a.width,a.height)/2,v=i.insert("circle",":first-child").attr("x",-a.width/2).attr("y",-a.height/2).attr("r",p);return f.intersect=function(m){return TBe(f,p,m)},v}function MBe(i,a,f){var p=a.width*Math.SQRT2/2,v=a.height*Math.SQRT2/2,m=[{x:0,y:-v},{x:-p,y:0},{x:0,y:v},{x:p,y:0}],b=i.insert("polygon",":first-child").attr("points",m.map(function(E){return E.x+","+E.y}).join(" "));return f.intersect=function(E){return b3(f,m,E)},b}function IBe(){var i=function(a,f){NBe(f);var p=bP(a,"output"),v=bP(p,"clusters"),m=bP(p,"edgePaths"),b=b0t(bP(p,"edgeLabels"),f),E=w0t(bP(p,"nodes"),f,y0t);eL(f),EBe(E,f),kBe(b,f),v0t(m,f,f0t);var _=p0t(v,f);xBe(_,f),PBe(f)};return i.createNodes=function(a){return arguments.length?(yBe(a),i):w0t},i.createClusters=function(a){return arguments.length?(fBe(a),i):p0t},i.createEdgeLabels=function(a){return arguments.length?(dBe(a),i):b0t},i.createEdgePaths=function(a){return arguments.length?(gBe(a),i):v0t},i.shapes=function(a){return arguments.length?(_Be(a),i):y0t},i.arrows=function(a){return arguments.length?(sBe(a),i):f0t},i}var DBe={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},OBe={arrowhead:"normal",curve:ig};function NBe(i){i.nodes().forEach(function(a){var f=i.node(a);!za(f,"label")&&!i.children(a).length&&(f.label=a),za(f,"paddingX")&&JA(f,{paddingLeft:f.paddingX,paddingRight:f.paddingX}),za(f,"paddingY")&&JA(f,{paddingTop:f.paddingY,paddingBottom:f.paddingY}),za(f,"padding")&&JA(f,{paddingLeft:f.padding,paddingRight:f.padding,paddingTop:f.padding,paddingBottom:f.padding}),JA(f,DBe),cr(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(p){f[p]=Number(f[p])}),za(f,"width")&&(f._prevWidth=f.width),za(f,"height")&&(f._prevHeight=f.height)}),i.edges().forEach(function(a){var f=i.edge(a);za(f,"label")||(f.label=""),JA(f,OBe)})}function PBe(i){cr(i.nodes(),function(a){var f=i.node(a);za(f,"_prevWidth")?f.width=f._prevWidth:delete f.width,za(f,"_prevHeight")?f.height=f._prevHeight:delete f.height,delete f._prevWidth,delete f._prevHeight})}function bP(i,a){var f=i.select("g."+a);return f.empty()&&(f=i.append("g").attr("class",a)),f}function vFt(i,a,f){const p=a.width,v=a.height,m=(p+v)*.9,b=[{x:m/2,y:0},{x:m,y:-m/2},{x:m/2,y:-m},{x:0,y:-m/2}],E=_5(i,m,m,b);return f.intersect=function(_){return b3(f,b,_)},E}function wFt(i,a,f){const v=a.height,m=v/4,b=a.width+2*m,E=[{x:m,y:0},{x:b-m,y:0},{x:b,y:-v/2},{x:b-m,y:-v},{x:m,y:-v},{x:0,y:-v/2}],_=_5(i,b,v,E);return f.intersect=function(L){return b3(f,E,L)},_}function mFt(i,a,f){const p=a.width,v=a.height,m=[{x:-v/2,y:0},{x:p,y:0},{x:p,y:-v},{x:-v/2,y:-v},{x:0,y:-v/2}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function yFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function xFt(i,a,f){const p=a.width,v=a.height,m=[{x:2*v/6,y:0},{x:p+v/6,y:0},{x:p-2*v/6,y:-v},{x:-v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function kFt(i,a,f){const p=a.width,v=a.height,m=[{x:-2*v/6,y:0},{x:p+2*v/6,y:0},{x:p-v/6,y:-v},{x:v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function EFt(i,a,f){const p=a.width,v=a.height,m=[{x:v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:-2*v/6,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function TFt(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p+v/2,y:0},{x:p,y:-v/2},{x:p+v/2,y:-v},{x:0,y:-v}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function CFt(i,a,f){const p=a.height,v=a.width+p/4,m=i.insert("rect",":first-child").attr("rx",p/2).attr("ry",p/2).attr("x",-v/2).attr("y",-p/2).attr("width",v).attr("height",p);return f.intersect=function(b){return m0t(f,b)},m}function _Ft(i,a,f){const p=a.width,v=a.height,m=[{x:0,y:0},{x:p,y:0},{x:p,y:-v},{x:0,y:-v},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-v},{x:-8,y:-v},{x:-8,y:0}],b=_5(i,p,v,m);return f.intersect=function(E){return b3(f,m,E)},b}function SFt(i,a,f){const p=a.width,v=p/2,m=v/(2.5+p/50),b=a.height+m,E="M 0,"+m+" a "+v+","+m+" 0,0,0 "+p+" 0 a "+v+","+m+" 0,0,0 "+-p+" 0 l 0,"+b+" a "+v+","+m+" 0,0,0 "+p+" 0 l 0,"+-b,_=i.attr("label-offset-y",m).insert("path",":first-child").attr("d",E).attr("transform","translate("+-p/2+","+-(b/2+m)+")");return f.intersect=function(L){const N=m0t(f,L),B=N.x-f.x;if(v!=0&&(Math.abs(B)f.height/2-m)){let j=m*m*(1-B*B/(v*v));j!=0&&(j=Math.sqrt(j)),j=m-j,L.y-f.y>0&&(j=-j),N.y+=j}return N},_}function FBe(i){i.shapes().question=vFt,i.shapes().hexagon=wFt,i.shapes().stadium=CFt,i.shapes().subroutine=_Ft,i.shapes().cylinder=SFt,i.shapes().rect_left_inv_arrow=mFt,i.shapes().lean_right=yFt,i.shapes().lean_left=xFt,i.shapes().trapezoid=kFt,i.shapes().inv_trapezoid=EFt,i.shapes().rect_right_inv_arrow=TFt}function BBe(i){i({question:vFt}),i({hexagon:wFt}),i({stadium:CFt}),i({subroutine:_Ft}),i({cylinder:SFt}),i({rect_left_inv_arrow:mFt}),i({lean_right:yFt}),i({lean_left:xFt}),i({trapezoid:kFt}),i({inv_trapezoid:EFt}),i({rect_right_inv_arrow:TFt})}function _5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("transform","translate("+-a/2+","+f/2+")")}const RBe={addToRender:FBe,addToRenderV2:BBe},AFt={},jBe=function(i){const a=Object.keys(i);for(const f of a)AFt[f]=i[f]},LFt=function(i,a,f,p,v,m){const b=p?p.select(`[id="${f}"]`):yr(`[id="${f}"]`),E=v||document;Object.keys(i).forEach(function(L){const N=i[L];let B="default";N.classes.length>0&&(B=N.classes.join(" "));const j=em(N.styles);let R=N.text!==void 0?N.text:N.id,z;if(s1(Le().flowchart.htmlLabels)){const st={label:R.replace(/fa[blrs]?:fa-[\w-]+/g,ut=>``)};z=d0t(b,st).node(),z.parentNode.removeChild(z)}else{const st=E.createElementNS("http://www.w3.org/2000/svg","text");st.setAttribute("style",j.labelStyle.replace("color:","fill:"));const ut=R.split(Yr.lineBreakRegex);for(const bt of ut){const mt=E.createElementNS("http://www.w3.org/2000/svg","tspan");mt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),mt.setAttribute("dy","1em"),mt.setAttribute("x","1"),mt.textContent=bt,st.appendChild(mt)}z=st}let K=0,it="";switch(N.type){case"round":K=5,it="rect";break;case"square":it="rect";break;case"diamond":it="question";break;case"hexagon":it="hexagon";break;case"odd":it="rect_left_inv_arrow";break;case"lean_right":it="lean_right";break;case"lean_left":it="lean_left";break;case"trapezoid":it="trapezoid";break;case"inv_trapezoid":it="inv_trapezoid";break;case"odd_right":it="rect_left_inv_arrow";break;case"circle":it="circle";break;case"ellipse":it="ellipse";break;case"stadium":it="stadium";break;case"subroutine":it="subroutine";break;case"cylinder":it="cylinder";break;case"group":it="rect";break;default:it="rect"}Ut.warn("Adding node",N.id,N.domId),a.setNode(m.db.lookUpDomId(N.id),{labelType:"svg",labelStyle:j.labelStyle,shape:it,label:z,rx:K,ry:K,class:B,style:j.style,id:m.db.lookUpDomId(N.id)})})},MFt=function(i,a,f){let p=0,v,m;if(i.defaultStyle!==void 0){const b=em(i.defaultStyle);v=b.style,m=b.labelStyle}i.forEach(function(b){p++;const E="L-"+b.start+"-"+b.end,_="LS-"+b.start,L="LE-"+b.end,N={};b.type==="arrow_open"?N.arrowhead="none":N.arrowhead="normal";let B="",j="";if(b.style!==void 0){const R=em(b.style);B=R.style,j=R.labelStyle}else switch(b.stroke){case"normal":B="fill:none",v!==void 0&&(B=v),m!==void 0&&(j=m);break;case"dotted":B="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":B=" stroke-width: 3.5px;fill:none";break}N.style=B,N.labelStyle=j,b.interpolate!==void 0?N.curve=X2(b.interpolate,ig):i.defaultInterpolate!==void 0?N.curve=X2(i.defaultInterpolate,ig):N.curve=X2(AFt.curve,ig),b.text===void 0?b.style!==void 0&&(N.arrowheadStyle="fill: #333"):(N.arrowheadStyle="fill: #333",N.labelpos="c",s1(Le().flowchart.htmlLabels)?(N.labelType="html",N.label=`${b.text.replace(/fa[blrs]?:fa-[\w-]+/g,R=>``)}`):(N.labelType="text",N.label=b.text.replace(Yr.lineBreakRegex,` +`),b.style===void 0&&(N.style=N.style||"stroke: #333; stroke-width: 1.5px;fill:none"),N.labelStyle=N.labelStyle.replace("color:","fill:"))),N.id=E,N.class=_+" "+L,N.minlen=b.length||1,a.setEdge(f.db.lookUpDomId(b.start),f.db.lookUpDomId(b.end),N,p)})},$Be={setConf:jBe,addVertices:LFt,addEdges:MFt,getClasses:function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},draw:function(i,a,f,p){Ut.info("Drawing flowchart");const{securityLevel:v,flowchart:m}=Le();let b;v==="sandbox"&&(b=yr("#i"+a));const E=yr(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=v==="sandbox"?b.nodes()[0].contentDocument:document;let L=p.db.getDirection();L===void 0&&(L="TD");const N=m.nodeSpacing||50,B=m.rankSpacing||50,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:L,nodesep:N,ranksep:B,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();for(let dt=z.length-1;dt>=0;dt--)R=z[dt],p.db.addVertex(R.id,R.title,"group",void 0,R.classes);const K=p.db.getVertices();Ut.warn("Get vertices",K);const it=p.db.getEdges();let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let dt=0;dt{a.forEach(v=>{GBe[v](i,f,p)})},GBe={extension:(i,a,f)=>{Ut.trace("Making markers for ",f),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionStart").attr("class","marker extension "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-extensionEnd").attr("class","marker extension "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionStart").attr("class","marker composition "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-compositionEnd").attr("class","marker composition "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationStart").attr("class","marker aggregation "+a).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-aggregationEnd").attr("class","marker aggregation "+a).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyStart").attr("class","marker dependency "+a).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",f+"_"+a+"-dependencyEnd").attr("class","marker dependency "+a).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopStart").attr("class","marker lollipop "+a).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),i.append("defs").append("marker").attr("id",f+"_"+a+"-lollipopEnd").attr("class","marker lollipop "+a).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-pointEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-pointStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-circleEnd").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-circleStart").attr("class","marker "+a).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(i,a,f)=>{i.append("marker").attr("id",f+"_"+a+"-crossEnd").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),i.append("marker").attr("id",f+"_"+a+"-crossStart").attr("class","marker cross "+a).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(i,a,f)=>{i.append("defs").append("marker").attr("id",f+"_"+a+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},IFt=HBe;function VBe(i,a){a&&i.attr("style",a)}function UBe(i){const a=yr(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),f=a.append("xhtml:div"),p=i.label,v=i.isNode?"nodeLabel":"edgeLabel";return f.html('"+p+""),VBe(f,i.labelStyle),f.style("display","inline-block"),f.style("white-space","nowrap"),f.attr("xmlns","http://www.w3.org/1999/xhtml"),a.node()}const hp=(i,a,f,p)=>{let v=i||"";if(typeof v=="object"&&(v=v[0]),s1(Le().flowchart.htmlLabels)){v=v.replace(/\\n|\n/g,"
"),Ut.info("vertexText"+v);const m={isNode:p,label:nP(v).replace(/fa[blrs]?:fa-[\w-]+/g,E=>``),labelStyle:a.replace("fill:","color:")};return UBe(m)}else{const m=document.createElementNS("http://www.w3.org/2000/svg","text");m.setAttribute("style",a.replace("color:","fill:"));let b=[];typeof v=="string"?b=v.split(/\\n|\n|/gi):Array.isArray(v)?b=v:b=[];for(const E of b){const _=document.createElementNS("http://www.w3.org/2000/svg","tspan");_.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),_.setAttribute("dy","1em"),_.setAttribute("x","0"),f?_.setAttribute("class","title-row"):_.setAttribute("class","row"),_.textContent=E.trim(),m.appendChild(_)}return m}};function WBe(i,a){var{includeImageAlt:f=!0}=a||{};return DFt(i,f)}function DFt(i,a){return i&&typeof i=="object"&&(i.value||(a?i.alt:"")||"children"in i&&OFt(i.children,a)||Array.isArray(i)&&OFt(i,a))||""}function OFt(i,a){for(var f=[],p=-1;++pv?0:v+a:a=a>v?v:a,f=f>0?f:0,p.length<1e4)b=Array.from(p),b.unshift(a,f),[].splice.apply(i,b);else for(f&&[].splice.apply(i,[a,f]);m0?(v3(i,i.length,0,a),i):a}const NFt={}.hasOwnProperty;function KBe(i){const a={};let f=-1;for(;++fb))return;const ht=a.events.length;let wt=ht,X,pt;for(;wt--;)if(a.events[wt][0]==="exit"&&a.events[wt][1].type==="chunkFlow"){if(X){pt=a.events[wt][1].end;break}X=!0}for(st(p),dt=ht;dtbt;){const yt=f[mt];a.containerState=yt[1],yt[0].exit.call(a,i)}f.length=bt}function ut(){v.write([null]),m=void 0,v=void 0,a.containerState._closeFlow=void 0}}function aRe(i,a,f){return Gu(i,i.attempt(this.parser.constructs.document,a,f),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function BFt(i){if(i===null||nv(i)||tRe(i))return 1;if(eRe(i))return 2}function E0t(i,a,f){const p=[];let v=-1;for(;++v1&&i[f][1].end.offset-i[f][1].start.offset>1?2:1;const B=Object.assign({},i[p][1].end),j=Object.assign({},i[f][1].start);RFt(B,-_),RFt(j,_),b={type:_>1?"strongSequence":"emphasisSequence",start:B,end:Object.assign({},i[p][1].end)},E={type:_>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[f][1].start),end:j},m={type:_>1?"strongText":"emphasisText",start:Object.assign({},i[p][1].end),end:Object.assign({},i[f][1].start)},v={type:_>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},E.end)},i[p][1].end=Object.assign({},b.start),i[f][1].start=Object.assign({},E.end),L=[],i[p][1].end.offset-i[p][1].start.offset&&(L=ev(L,[["enter",i[p][1],a],["exit",i[p][1],a]])),L=ev(L,[["enter",v,a],["enter",b,a],["exit",b,a],["enter",m,a]]),L=ev(L,E0t(a.parser.constructs.insideSpan.null,i.slice(p+1,f),a)),L=ev(L,[["exit",m,a],["enter",E,a],["exit",E,a],["exit",v,a]]),i[f][1].end.offset-i[f][1].start.offset?(N=2,L=ev(L,[["enter",i[f][1],a],["exit",i[f][1],a]])):N=0,v3(i,p-1,f-p+3,L),f=p+L.length-N-2;break}}for(f=-1;++f=4?b(L):f(L)}function b(L){return L===null?_(L):Na(L)?i.attempt(wRe,b,_)(L):(i.enter("codeFlowValue"),E(L))}function E(L){return L===null||Na(L)?(i.exit("codeFlowValue"),b(L)):(i.consume(L),E)}function _(L){return i.exit("codeIndented"),a(L)}}function yRe(i,a,f){const p=this;return v;function v(b){return p.parser.lazy[p.now().line]?f(b):Na(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v):Gu(i,m,"linePrefix",4+1)(b)}function m(b){const E=p.events[p.events.length-1];return E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?a(b):Na(b)?v(b):f(b)}}const xRe={name:"codeText",tokenize:TRe,resolve:kRe,previous:ERe};function kRe(i){let a=i.length-4,f=3,p,v;if((i[f][1].type==="lineEnding"||i[f][1].type==="space")&&(i[a][1].type==="lineEnding"||i[a][1].type==="space")){for(p=f;++p=4?a(b):i.interrupt(p.parser.constructs.flow,f,a)(b)}}function VFt(i,a,f,p,v,m,b,E,_){const L=_||Number.POSITIVE_INFINITY;let N=0;return B;function B(st){return st===60?(i.enter(p),i.enter(v),i.enter(m),i.consume(st),i.exit(m),j):st===null||st===41||k0t(st)?f(st):(i.enter(p),i.enter(b),i.enter(E),i.enter("chunkString",{contentType:"string"}),K(st))}function j(st){return st===62?(i.enter(m),i.consume(st),i.exit(m),i.exit(v),i.exit(p),a):(i.enter(E),i.enter("chunkString",{contentType:"string"}),R(st))}function R(st){return st===62?(i.exit("chunkString"),i.exit(E),j(st)):st===null||st===60||Na(st)?f(st):(i.consume(st),st===92?z:R)}function z(st){return st===60||st===62||st===92?(i.consume(st),R):R(st)}function K(st){return st===40?++N>L?f(st):(i.consume(st),K):st===41?N--?(i.consume(st),K):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(st)):st===null||nv(st)?N?f(st):(i.exit("chunkString"),i.exit(E),i.exit(b),i.exit(p),a(st)):k0t(st)?f(st):(i.consume(st),st===92?it:K)}function it(st){return st===40||st===41||st===92?(i.consume(st),K):K(st)}}function UFt(i,a,f,p,v,m){const b=this;let E=0,_;return L;function L(R){return i.enter(p),i.enter(v),i.consume(R),i.exit(v),i.enter(m),N}function N(R){return R===null||R===91||R===93&&!_||R===94&&!E&&"_hiddenFootnoteSupport"in b.parser.constructs||E>999?f(R):R===93?(i.exit(m),i.enter(v),i.consume(R),i.exit(v),i.exit(p),a):Na(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),N):(i.enter("chunkString",{contentType:"string"}),B(R))}function B(R){return R===null||R===91||R===93||Na(R)||E++>999?(i.exit("chunkString"),N(R)):(i.consume(R),_=_||!Nf(R),R===92?j:B)}function j(R){return R===91||R===92||R===93?(i.consume(R),E++,B):B(R)}}function WFt(i,a,f,p,v,m){let b;return E;function E(j){return i.enter(p),i.enter(v),i.consume(j),i.exit(v),b=j===40?41:j,_}function _(j){return j===b?(i.enter(v),i.consume(j),i.exit(v),i.exit(p),a):(i.enter(m),L(j))}function L(j){return j===b?(i.exit(m),_(b)):j===null?f(j):Na(j)?(i.enter("lineEnding"),i.consume(j),i.exit("lineEnding"),Gu(i,L,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),N(j))}function N(j){return j===b||j===null||Na(j)?(i.exit("chunkString"),L(j)):(i.consume(j),j===92?B:N)}function B(j){return j===b||j===92?(i.consume(j),N):N(j)}}function vP(i,a){let f;return p;function p(v){return Na(v)?(i.enter("lineEnding"),i.consume(v),i.exit("lineEnding"),f=!0,p):Nf(v)?Gu(i,p,f?"linePrefix":"lineSuffix")(v):a(v)}}function nL(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const IRe={name:"definition",tokenize:ORe},DRe={tokenize:NRe,partial:!0};function ORe(i,a,f){const p=this;let v;return m;function m(_){return i.enter("definition"),UFt.call(p,i,b,f,"definitionLabel","definitionLabelMarker","definitionLabelString")(_)}function b(_){return v=nL(p.sliceSerialize(p.events[p.events.length-1][1]).slice(1,-1)),_===58?(i.enter("definitionMarker"),i.consume(_),i.exit("definitionMarker"),vP(i,VFt(i,i.attempt(DRe,Gu(i,E,"whitespace"),Gu(i,E,"whitespace")),f,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):f(_)}function E(_){return _===null||Na(_)?(i.exit("definition"),p.parser.defined.includes(v)||p.parser.defined.push(v),a(_)):f(_)}}function NRe(i,a,f){return p;function p(b){return nv(b)?vP(i,v)(b):f(b)}function v(b){return b===34||b===39||b===40?WFt(i,Gu(i,m,"whitespace"),f,"definitionTitle","definitionTitleMarker","definitionTitleString")(b):f(b)}function m(b){return b===null||Na(b)?a(b):f(b)}}const PRe={name:"hardBreakEscape",tokenize:FRe};function FRe(i,a,f){return p;function p(m){return i.enter("hardBreakEscape"),i.enter("escapeMarker"),i.consume(m),v}function v(m){return Na(m)?(i.exit("escapeMarker"),i.exit("hardBreakEscape"),a(m)):f(m)}}const BRe={name:"headingAtx",tokenize:jRe,resolve:RRe};function RRe(i,a){let f=i.length-2,p=3,v,m;return i[p][1].type==="whitespace"&&(p+=2),f-2>p&&i[f][1].type==="whitespace"&&(f-=2),i[f][1].type==="atxHeadingSequence"&&(p===f-1||f-4>p&&i[f-2][1].type==="whitespace")&&(f-=p+1===f?2:4),f>p&&(v={type:"atxHeadingText",start:i[p][1].start,end:i[f][1].end},m={type:"chunkText",start:i[p][1].start,end:i[f][1].end,contentType:"text"},v3(i,p,f-p+1,[["enter",v,a],["enter",m,a],["exit",m,a],["exit",v,a]])),i}function jRe(i,a,f){const p=this;let v=0;return m;function m(N){return i.enter("atxHeading"),i.enter("atxHeadingSequence"),b(N)}function b(N){return N===35&&v++<6?(i.consume(N),b):N===null||nv(N)?(i.exit("atxHeadingSequence"),p.interrupt?a(N):E(N)):f(N)}function E(N){return N===35?(i.enter("atxHeadingSequence"),_(N)):N===null||Na(N)?(i.exit("atxHeading"),a(N)):Nf(N)?Gu(i,E,"whitespace")(N):(i.enter("atxHeadingText"),L(N))}function _(N){return N===35?(i.consume(N),_):(i.exit("atxHeadingSequence"),E(N))}function L(N){return N===null||N===35||nv(N)?(i.exit("atxHeadingText"),E(N)):(i.consume(N),L)}}const $Re=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],KFt=["pre","script","style","textarea"],zRe={name:"htmlFlow",tokenize:GRe,resolveTo:HRe,concrete:!0},qRe={tokenize:VRe,partial:!0};function HRe(i){let a=i.length;for(;a--&&!(i[a][0]==="enter"&&i[a][1].type==="htmlFlow"););return a>1&&i[a-2][1].type==="linePrefix"&&(i[a][1].start=i[a-2][1].start,i[a+1][1].start=i[a-2][1].start,i.splice(a-2,2)),i}function GRe(i,a,f){const p=this;let v,m,b,E,_;return L;function L(Ft){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ft),N}function N(Ft){return Ft===33?(i.consume(Ft),B):Ft===47?(i.consume(Ft),z):Ft===63?(i.consume(Ft),v=3,p.interrupt?a:Tt):w3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),m=!0,K):f(Ft)}function B(Ft){return Ft===45?(i.consume(Ft),v=2,j):Ft===91?(i.consume(Ft),v=5,b="CDATA[",E=0,R):w3(Ft)?(i.consume(Ft),v=4,p.interrupt?a:Tt):f(Ft)}function j(Ft){return Ft===45?(i.consume(Ft),p.interrupt?a:Tt):f(Ft)}function R(Ft){return Ft===b.charCodeAt(E++)?(i.consume(Ft),E===b.length?p.interrupt?a:U:R):f(Ft)}function z(Ft){return w3(Ft)?(i.consume(Ft),b=String.fromCharCode(Ft),K):f(Ft)}function K(Ft){return Ft===null||Ft===47||Ft===62||nv(Ft)?Ft!==47&&m&&KFt.includes(b.toLowerCase())?(v=1,p.interrupt?a(Ft):U(Ft)):$Re.includes(b.toLowerCase())?(v=6,Ft===47?(i.consume(Ft),it):p.interrupt?a(Ft):U(Ft)):(v=7,p.interrupt&&!p.parser.lazy[p.now().line]?f(Ft):m?ut(Ft):st(Ft)):Ft===45||om(Ft)?(i.consume(Ft),b+=String.fromCharCode(Ft),K):f(Ft)}function it(Ft){return Ft===62?(i.consume(Ft),p.interrupt?a:U):f(Ft)}function st(Ft){return Nf(Ft)?(i.consume(Ft),st):X(Ft)}function ut(Ft){return Ft===47?(i.consume(Ft),X):Ft===58||Ft===95||w3(Ft)?(i.consume(Ft),bt):Nf(Ft)?(i.consume(Ft),ut):X(Ft)}function bt(Ft){return Ft===45||Ft===46||Ft===58||Ft===95||om(Ft)?(i.consume(Ft),bt):mt(Ft)}function mt(Ft){return Ft===61?(i.consume(Ft),yt):Nf(Ft)?(i.consume(Ft),mt):ut(Ft)}function yt(Ft){return Ft===null||Ft===60||Ft===61||Ft===62||Ft===96?f(Ft):Ft===34||Ft===39?(i.consume(Ft),_=Ft,dt):Nf(Ft)?(i.consume(Ft),yt):(_=null,ht(Ft))}function dt(Ft){return Ft===null||Na(Ft)?f(Ft):Ft===_?(i.consume(Ft),wt):(i.consume(Ft),dt)}function ht(Ft){return Ft===null||Ft===34||Ft===39||Ft===60||Ft===61||Ft===62||Ft===96||nv(Ft)?mt(Ft):(i.consume(Ft),ht)}function wt(Ft){return Ft===47||Ft===62||Nf(Ft)?ut(Ft):f(Ft)}function X(Ft){return Ft===62?(i.consume(Ft),pt):f(Ft)}function pt(Ft){return Nf(Ft)?(i.consume(Ft),pt):Ft===null||Na(Ft)?U(Ft):f(Ft)}function U(Ft){return Ft===45&&v===2?(i.consume(Ft),Nt):Ft===60&&v===1?(i.consume(Ft),qt):Ft===62&&v===4?(i.consume(Ft),Ht):Ft===63&&v===3?(i.consume(Ft),Tt):Ft===93&&v===5?(i.consume(Ft),Z):Na(Ft)&&(v===6||v===7)?i.check(qRe,Ht,xt)(Ft):Ft===null||Na(Ft)?xt(Ft):(i.consume(Ft),U)}function xt(Ft){return i.exit("htmlFlowData"),nt(Ft)}function nt(Ft){return Ft===null?It(Ft):Na(Ft)?i.attempt({tokenize:Ot,partial:!0},nt,It)(Ft):(i.enter("htmlFlowData"),U(Ft))}function Ot(Ft,ke,pn){return Me;function Me(Ge){return Ft.enter("lineEnding"),Ft.consume(Ge),Ft.exit("lineEnding"),ve}function ve(Ge){return p.parser.lazy[p.now().line]?pn(Ge):ke(Ge)}}function Nt(Ft){return Ft===45?(i.consume(Ft),Tt):U(Ft)}function qt(Ft){return Ft===47?(i.consume(Ft),b="",Ct):U(Ft)}function Ct(Ft){return Ft===62&&KFt.includes(b.toLowerCase())?(i.consume(Ft),Ht):w3(Ft)&&b.length<8?(i.consume(Ft),b+=String.fromCharCode(Ft),Ct):U(Ft)}function Z(Ft){return Ft===93?(i.consume(Ft),Tt):U(Ft)}function Tt(Ft){return Ft===62?(i.consume(Ft),Ht):Ft===45&&v===2?(i.consume(Ft),Tt):U(Ft)}function Ht(Ft){return Ft===null||Na(Ft)?(i.exit("htmlFlowData"),It(Ft)):(i.consume(Ft),Ht)}function It(Ft){return i.exit("htmlFlow"),a(Ft)}}function VRe(i,a,f){return p;function p(v){return i.exit("htmlFlowData"),i.enter("lineEndingBlank"),i.consume(v),i.exit("lineEndingBlank"),i.attempt(lK,a,f)}}const URe={name:"htmlText",tokenize:WRe};function WRe(i,a,f){const p=this;let v,m,b,E;return _;function _(It){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(It),L}function L(It){return It===33?(i.consume(It),N):It===47?(i.consume(It),ht):It===63?(i.consume(It),yt):w3(It)?(i.consume(It),pt):f(It)}function N(It){return It===45?(i.consume(It),B):It===91?(i.consume(It),m="CDATA[",b=0,it):w3(It)?(i.consume(It),mt):f(It)}function B(It){return It===45?(i.consume(It),j):f(It)}function j(It){return It===null||It===62?f(It):It===45?(i.consume(It),R):z(It)}function R(It){return It===null||It===62?f(It):z(It)}function z(It){return It===null?f(It):It===45?(i.consume(It),K):Na(It)?(E=z,Z(It)):(i.consume(It),z)}function K(It){return It===45?(i.consume(It),Ht):z(It)}function it(It){return It===m.charCodeAt(b++)?(i.consume(It),b===m.length?st:it):f(It)}function st(It){return It===null?f(It):It===93?(i.consume(It),ut):Na(It)?(E=st,Z(It)):(i.consume(It),st)}function ut(It){return It===93?(i.consume(It),bt):st(It)}function bt(It){return It===62?Ht(It):It===93?(i.consume(It),bt):st(It)}function mt(It){return It===null||It===62?Ht(It):Na(It)?(E=mt,Z(It)):(i.consume(It),mt)}function yt(It){return It===null?f(It):It===63?(i.consume(It),dt):Na(It)?(E=yt,Z(It)):(i.consume(It),yt)}function dt(It){return It===62?Ht(It):yt(It)}function ht(It){return w3(It)?(i.consume(It),wt):f(It)}function wt(It){return It===45||om(It)?(i.consume(It),wt):X(It)}function X(It){return Na(It)?(E=X,Z(It)):Nf(It)?(i.consume(It),X):Ht(It)}function pt(It){return It===45||om(It)?(i.consume(It),pt):It===47||It===62||nv(It)?U(It):f(It)}function U(It){return It===47?(i.consume(It),Ht):It===58||It===95||w3(It)?(i.consume(It),xt):Na(It)?(E=U,Z(It)):Nf(It)?(i.consume(It),U):Ht(It)}function xt(It){return It===45||It===46||It===58||It===95||om(It)?(i.consume(It),xt):nt(It)}function nt(It){return It===61?(i.consume(It),Ot):Na(It)?(E=nt,Z(It)):Nf(It)?(i.consume(It),nt):U(It)}function Ot(It){return It===null||It===60||It===61||It===62||It===96?f(It):It===34||It===39?(i.consume(It),v=It,Nt):Na(It)?(E=Ot,Z(It)):Nf(It)?(i.consume(It),Ot):(i.consume(It),v=void 0,Ct)}function Nt(It){return It===v?(i.consume(It),qt):It===null?f(It):Na(It)?(E=Nt,Z(It)):(i.consume(It),Nt)}function qt(It){return It===62||It===47||nv(It)?U(It):f(It)}function Ct(It){return It===null||It===34||It===39||It===60||It===61||It===96?f(It):It===62||nv(It)?U(It):(i.consume(It),Ct)}function Z(It){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(It),i.exit("lineEnding"),Gu(i,Tt,"linePrefix",p.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Tt(It){return i.enter("htmlTextData"),E(It)}function Ht(It){return It===62?(i.consume(It),i.exit("htmlTextData"),i.exit("htmlText"),a):f(It)}}const S0t={name:"labelEnd",tokenize:JRe,resolveTo:ZRe,resolveAll:QRe},KRe={tokenize:tje},YRe={tokenize:eje},XRe={tokenize:nje};function QRe(i){let a=-1,f;for(;++a-1&&(b[0]=b[0].slice(p)),m>0&&b.push(i[v].slice(0,m))),b}function _je(i,a){let f=-1;const p=[];let v;for(;++f13&&f<32||f>126&&f<160||f>55295&&f<57344||f>64975&&f<65008||(f&65535)===65535||(f&65535)===65534||f>1114111?"�":String.fromCharCode(f)}const Cje=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Sje(i){return i.replace(Cje,Aje)}function Aje(i,a,f){if(a)return a;if(f.charCodeAt(0)===35){const v=f.charCodeAt(1),m=v===120||v===88;return JFt(f.slice(m?2:1),m?16:10)}return x0t(f)||i}function bK(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?tBt(i.position):"start"in i||"end"in i?tBt(i):"line"in i||"column"in i?_0t(i):""}function _0t(i){return eBt(i&&i.line)+":"+eBt(i&&i.column)}function tBt(i){return _0t(i&&i.start)+"-"+_0t(i&&i.end)}function eBt(i){return i&&typeof i=="number"?i:1}const nBt={}.hasOwnProperty,rBt=function(i,a,f){return typeof a!="string"&&(f=a,a=void 0),Lje(f)(_je(Eje(f).document().write(Tje()(i,a,!0))))};function Lje(i){const a={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:E(qt),autolinkProtocol:ht,autolinkEmail:ht,atxHeading:E(ye),blockQuote:E(Ve),characterEscape:ht,characterReference:ht,codeFenced:E(Ee),codeFencedFenceInfo:C,codeFencedFenceMeta:C,codeIndented:E(Ee,C),codeText:E(He,C),codeTextData:ht,data:ht,codeFlowValue:ht,definition:E(Ce),definitionDestinationString:C,definitionLabelString:C,definitionTitleString:C,emphasis:E($e),hardBreakEscape:E(fn),hardBreakTrailing:E(fn),htmlFlow:E(Yt,C),htmlFlowData:ht,htmlText:E(Yt,C),htmlTextData:ht,image:E(Mi),label:C,link:E(qt),listItem:E(Se),listItemValue:H,listOrdered:E(zi,R),listUnordered:E(zi),paragraph:E(ki),reference:_n,referenceString:C,resourceDestinationString:C,resourceTitleString:C,setextHeading:E(ye),strong:E(Ri),thematicBreak:E(bi)},exit:{atxHeading:P(),atxHeadingSequence:ct,autolink:P(),autolinkEmail:ke,autolinkProtocol:ne,blockQuote:P(),characterEscapeValue:dt,characterReferenceMarkerHexadecimal:Wn,characterReferenceMarkerNumeric:Wn,characterReferenceValue:Ae,codeFenced:P(it),codeFencedFence:J,codeFencedFenceInfo:Y,codeFencedFenceMeta:rt,codeFlowValue:dt,codeIndented:P(ft),codeText:P(Ft),codeTextData:dt,data:dt,definition:P(),definitionDestinationString:mt,definitionLabelString:Tt,definitionTitleString:kt,emphasis:P(),hardBreakEscape:P(tt),hardBreakTrailing:P(tt),htmlFlow:P(Pt),htmlFlowData:dt,htmlText:P(pt),htmlTextData:dt,image:P(Rt),label:vt,labelText:Bt,lineEnding:Ct,link:P(X),listItem:P(),listOrdered:P(),listUnordered:P(),paragraph:P(),referenceString:Te,resourceDestinationString:Ot,resourceTitleString:Vt,resource:qe,setextHeading:P(xt),setextHeadingLineSequence:st,setextHeadingText:yt,strong:P(),thematicBreak:P()}};iBt(a,(i||{}).mdastExtensions||[]);const f={};return p;function p(dn){let Nn={type:"root",children:[]};const Wr={stack:[Nn],tokenStack:[],config:a,enter:A,exit:F,buffer:C,resume:j,setData:m,getData:b},Li=[];let is=-1;for(;++is0){const Ts=Wr.tokenStack[Wr.tokenStack.length-1];(Ts[1]||sBt).call(Wr,void 0,Ts[0])}for(Nn.position={start:ck(dn.length>0?dn[0][1].start:{line:1,column:1,offset:0}),end:ck(dn.length>0?dn[dn.length-2][1].end:{line:1,column:1,offset:0})},is=-1;++is{P!==0&&(v++,p.push([])),A.split(" ").forEach(F=>{F&&p[v].push({content:F,type:E})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(C=>{m(C,b.type)})}return f.forEach(b=>{b.type==="paragraph"&&b.children.forEach(E=>{m(E)})}),p}function Oje(i){const{children:a}=rBt(i);function f(p){return p.type==="text"?p.value.replace(/\n/g,"
"):p.type==="strong"?`${p.children.map(f).join("")}`:p.type==="emphasis"?`${p.children.map(f).join("")}`:p.type==="paragraph"?`

${p.children.map(f).join("")}

`:`Unsupported markdown: ${p.type}`}return a.map(f).join("")}function Nje(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(a=>a.segment):[...i]}function Pje(i,a){const f=Nje(a.content);return aBt(i,[],f,a.type)}function aBt(i,a,f,p){if(f.length===0)return[{content:a.join(""),type:p},{content:"",type:p}];const[v,...m]=f,b=[...a,v];return i([{content:b.join(""),type:p}])?aBt(i,b,m,p):(a.length===0&&v&&(a.push(v),f.shift()),[{content:a.join(""),type:p},{content:f.join(""),type:p}])}function Fje(i,a){if(i.some(({content:f})=>f.includes(` -`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return C0t(i,a)}function C0t(i,a,f=[],p=[]){if(i.length===0)return p.length>0&&f.push(p),f.length>0?f:[];let v="";i[0].content===" "&&(v=" ",i.shift());const m=i.shift()??{content:" ",type:"normal"},b=[...p];if(v!==""&&b.push({content:v,type:"normal"}),b.push(m),a(b))return C0t(i,a,f,b);if(p.length>0)f.push(p),i.unshift(m);else if(m.content){const[E,C]=Pje(a,m);f.push([E]),C.content&&i.unshift(C)}return C0t(i,a,f)}function Bje(i,a){a&&i.attr("style",a)}function Rje(i,a,f,p,v=!1){const m=i.append("foreignObject"),b=m.append("xhtml:div"),E=a.label,C=a.isNode?"nodeLabel":"edgeLabel";b.html(` - "+E+""),Bje(b,a.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",f+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),v&&b.attr("class","labelBkg");let A=b.node().getBoundingClientRect();return A.width===f&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",f+"px"),A=b.node().getBoundingClientRect()),m.style("width",A.width),m.style("height",A.height),m.node()}function oBt(i,a,f){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",a*f-.1+"em").attr("dy",f+"em")}function jje(i,a,f){const p=i.append("text"),v=oBt(p,1,a);cBt(v,f);const m=v.node().getComputedTextLength();return p.remove(),m}function $je(i,a,f,p=!1){const m=a.append("g"),b=m.insert("rect").attr("class","background"),E=m.append("text").attr("y","-10.1");let C=0;for(const A of f){const P=j=>jje(m,1.1,j)<=i,F=P(A)?[A]:Fje(A,P);for(const j of F){const R=oBt(E,C,1.1);cBt(R,j),C++}}if(p){const A=E.node().getBBox(),P=2;return b.attr("x",-P).attr("y",-P).attr("width",A.width+2*P).attr("height",A.height+2*P),m.node()}else return E.node()}function cBt(i,a){i.text(""),a.forEach((f,p)=>{const v=i.append("tspan").attr("font-style",f.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",f.type==="strong"?"bold":"normal");p===0?v.text(f.content):v.text(" "+f.content)})}const vK=(i,a="",{style:f="",isTitle:p=!1,classes:v="",useHtmlLabels:m=!0,isNode:b=!0,width:E=200,addSvgBackground:C=!1}={})=>{if(Wt.info("createText",a,f,p,v,m,b,C),m){const A=Oje(a),P={isNode:b,label:nP(A).replace(/fa[blrs]?:fa-[\w-]+/g,j=>``),labelStyle:f.replace("fill:","color:")};return Rje(i,P,E,v,C)}else{const A=Ije(a);return $je(E,i,A,C)}},Od=async(i,a,f,p)=>{let v;const m=a.useHtmlLabels||u1(De().flowchart.htmlLabels);f?v=f:v="node default";const b=i.insert("g").attr("class",v).attr("id",a.domId||a.id),E=b.insert("g").attr("class","label").attr("style",a.labelStyle);let C;a.labelText===void 0?C="":C=typeof a.labelText=="string"?a.labelText:a.labelText[0];const A=E.node();let P;a.labelType==="markdown"?P=vK(E,v0(nP(C),De()),{useHtmlLabels:m,width:a.width||De().flowchart.wrappingWidth,classes:"markdown-node-label"}):P=A.appendChild(dp(v0(nP(C),De()),a.labelStyle,!1,p));let F=P.getBBox();const j=a.padding/2;if(u1(De().flowchart.htmlLabels)){const R=P.children[0],H=xr(P),Y=R.getElementsByTagName("img");if(Y){const rt=C.replace(/]*>/g,"").trim()==="";await Promise.all([...Y].map(J=>new Promise(it=>{function ft(){if(J.style.display="flex",J.style.flexDirection="column",rt){const Tt=De().fontSize?De().fontSize:window.getComputedStyle(document.body).fontSize,kt=5;J.style.width=parseInt(Tt,10)*kt+"px"}else J.style.width="100%";it(J)}setTimeout(()=>{J.complete&&ft()}),J.addEventListener("error",ft),J.addEventListener("load",ft)})))}F=R.getBoundingClientRect(),H.attr("width",F.width),H.attr("height",F.height)}return m?E.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"):E.attr("transform","translate(0, "+-F.height/2+")"),a.centerLabel&&E.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"),E.insert("rect",":first-child"),{shapeSvg:b,bbox:F,halfPadding:j,label:E}},ef=(i,a)=>{const f=a.node().getBBox();i.width=f.width,i.height=f.height};function L5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-a/2+","+f/2+")")}let Xo={},cm={},uBt={};const zje=()=>{cm={},uBt={},Xo={}},wK=(i,a)=>(Wt.trace("In isDecendant",a," ",i," = ",cm[a].includes(i)),!!cm[a].includes(i)),qje=(i,a)=>(Wt.info("Decendants of ",a," is ",cm[a]),Wt.info("Edge is ",i),i.v===a||i.w===a?!1:cm[a]?cm[a].includes(i.v)||wK(i.v,a)||wK(i.w,a)||cm[a].includes(i.w):(Wt.debug("Tilt, ",a,",not in decendants"),!1)),lBt=(i,a,f,p)=>{Wt.warn("Copying children of ",i,"root",p,"data",a.node(i),p);const v=a.children(i)||[];i!==p&&v.push(i),Wt.warn("Copying (nodes) clusterId",i,"nodes",v),v.forEach(m=>{if(a.children(m).length>0)lBt(m,a,f,p);else{const b=a.node(m);Wt.info("cp ",m," to ",p," with parent ",i),f.setNode(m,b),p!==a.parent(m)&&(Wt.warn("Setting parent",m,a.parent(m)),f.setParent(m,a.parent(m))),i!==p&&m!==i?(Wt.debug("Setting parent",m,i),f.setParent(m,i)):(Wt.info("In copy ",i,"root",p,"data",a.node(i),p),Wt.debug("Not Setting parent for node=",m,"cluster!==rootId",i!==p,"node!==clusterId",m!==i));const E=a.edges(m);Wt.debug("Copying Edges",E),E.forEach(C=>{Wt.info("Edge",C);const A=a.edge(C.v,C.w,C.name);Wt.info("Edge data",A,p);try{qje(C,p)?(Wt.info("Copying as ",C.v,C.w,A,C.name),f.setEdge(C.v,C.w,A,C.name),Wt.info("newGraph edges ",f.edges(),f.edge(f.edges()[0]))):Wt.info("Skipping copy of edge ",C.v,"-->",C.w," rootId: ",p," clusterId:",i)}catch(P){Wt.error(P)}})}Wt.debug("Removing node",m),a.removeNode(m)})},hBt=(i,a)=>{const f=a.children(i);let p=[...f];for(const v of f)uBt[v]=i,p=[...p,...hBt(v,a)];return p},wP=(i,a)=>{Wt.trace("Searching",i);const f=a.children(i);if(Wt.trace("Searching children of id ",i,f),f.length<1)return Wt.trace("This is a valid node",i),i;for(const p of f){const v=wP(p,a);if(v)return Wt.trace("Found replacement for",i," => ",v),v}},mK=i=>!Xo[i]||!Xo[i].externalConnections?i:Xo[i]?Xo[i].id:i,Hje=(i,a)=>{if(!i||a>10){Wt.debug("Opting out, no graph ");return}else Wt.debug("Opting in, graph ");i.nodes().forEach(function(f){i.children(f).length>0&&(Wt.warn("Cluster identified",f," Replacement id in edges: ",wP(f,i)),cm[f]=hBt(f,i),Xo[f]={id:wP(f,i),clusterData:i.node(f)})}),i.nodes().forEach(function(f){const p=i.children(f),v=i.edges();p.length>0?(Wt.debug("Cluster identified",f,cm),v.forEach(m=>{if(m.v!==f&&m.w!==f){const b=wK(m.v,f),E=wK(m.w,f);b^E&&(Wt.warn("Edge: ",m," leaves cluster ",f),Wt.warn("Decendants of XXX ",f,": ",cm[f]),Xo[f].externalConnections=!0)}})):Wt.debug("Not a cluster ",f,cm)}),i.edges().forEach(function(f){const p=i.edge(f);Wt.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(f)),Wt.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(i.edge(f)));let v=f.v,m=f.w;if(Wt.warn("Fix XXX",Xo,"ids:",f.v,f.w,"Translating: ",Xo[f.v]," --- ",Xo[f.w]),Xo[f.v]&&Xo[f.w]&&Xo[f.v]===Xo[f.w]){Wt.warn("Fixing and trixing link to self - removing XXX",f.v,f.w,f.name),Wt.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=mK(f.v),m=mK(f.w),i.removeEdge(f.v,f.w,f.name);const b=f.w+"---"+f.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:p.label,padding:0,shape:"labelRect",style:""});const E=JSON.parse(JSON.stringify(p)),C=JSON.parse(JSON.stringify(p));E.label="",E.arrowTypeEnd="none",C.label="",E.fromCluster=f.v,C.toCluster=f.v,i.setEdge(v,b,E,f.name+"-cyclic-special"),i.setEdge(b,m,C,f.name+"-cyclic-special")}else(Xo[f.v]||Xo[f.w])&&(Wt.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=mK(f.v),m=mK(f.w),i.removeEdge(f.v,f.w,f.name),v!==f.v&&(p.fromCluster=f.v),m!==f.w&&(p.toCluster=f.w),Wt.warn("Fix Replacing with XXX",v,m,f.name),i.setEdge(v,m,p,f.name))}),Wt.warn("Adjusted Graph",A5(i)),fBt(i,0),Wt.trace(Xo)},fBt=(i,a)=>{if(Wt.warn("extractor - ",a,A5(i),i.children("D")),a>10){Wt.error("Bailing out");return}let f=i.nodes(),p=!1;for(const v of f){const m=i.children(v);p=p||m.length>0}if(!p){Wt.debug("Done, no node has children",i.nodes());return}Wt.debug("Nodes = ",f,a);for(const v of f)if(Wt.debug("Extracting node",v,Xo,Xo[v]&&!Xo[v].externalConnections,!i.parent(v),i.node(v),i.children("D")," Depth ",a),!Xo[v])Wt.debug("Not a cluster",v,a);else if(!Xo[v].externalConnections&&i.children(v)&&i.children(v).length>0){Wt.warn("Cluster without external connections, without a parent and with children",v,a);let b=i.graph().rankdir==="TB"?"LR":"TB";Xo[v]&&Xo[v].clusterData&&Xo[v].clusterData.dir&&(b=Xo[v].clusterData.dir,Wt.warn("Fixing dir",Xo[v].clusterData.dir,b));const E=new l1({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Wt.warn("Old graph before copy",A5(i)),lBt(v,i,E,v),i.setNode(v,{clusterNode:!0,id:v,clusterData:Xo[v].clusterData,labelText:Xo[v].labelText,graph:E}),Wt.warn("New graph after copy node: (",v,")",A5(E)),Wt.debug("Old graph after copy",A5(i))}else Wt.warn("Cluster ** ",v," **not meeting the criteria !externalConnections:",!Xo[v].externalConnections," no parent: ",!i.parent(v)," children ",i.children(v)&&i.children(v).length>0,i.children("D"),a),Wt.debug(Xo);f=i.nodes(),Wt.warn("New list of nodes",f);for(const v of f){const m=i.node(v);Wt.warn(" Now next level",v,m),m.clusterNode&&fBt(m.graph,a+1)}},dBt=(i,a)=>{if(a.length===0)return[];let f=Object.assign(a);return a.forEach(p=>{const v=i.children(p),m=dBt(i,v);f=[...f,...m]}),f},Vje=i=>dBt(i,i.children());function Gje(i,a){return i.intersect(a)}function gBt(i,a,f,p){var v=i.x,m=i.y,b=v-p.x,E=m-p.y,C=Math.sqrt(a*a*E*E+f*f*b*b),A=Math.abs(a*f*b/C);p.x0}function Kje(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;typeof a.forEach=="function"?a.forEach(function(H){b=Math.min(b,H.x),E=Math.min(E,H.y)}):(b=Math.min(b,a.x),E=Math.min(E,a.y));for(var C=p-i.width/2-b,A=v-i.height/2-E,P=0;P1&&m.sort(function(H,Y){var rt=H.x-f.x,J=H.y-f.y,it=Math.sqrt(rt*rt+J*J),ft=Y.x-f.x,Tt=Y.y-f.y,kt=Math.sqrt(ft*ft+Tt*Tt);return it{var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2,C,A;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),C=m===0?0:E*v/m,A=E):(v<0&&(b=-b),C=b,A=v===0?0:b*m/v),{x:f+C,y:p+A}},Th={node:Gje,circle:Uje,ellipse:gBt,polygon:Kje,rect:mP},Yje=async(i,a)=>{a.useHtmlLabels||De().flowchart.htmlLabels||(a.centerLabel=!0);const{shapeSvg:p,bbox:v,halfPadding:m}=await Od(i,a,"node "+a.classes,!0);Wt.info("Classes = ",a.classes);const b=p.insert("rect",":first-child");return b.attr("rx",a.rx).attr("ry",a.ry).attr("x",-v.width/2-m).attr("y",-v.height/2-m).attr("width",v.width+a.padding).attr("height",v.height+a.padding),ef(a,b),a.intersect=function(E){return Th.rect(a,E)},p};let bBt=0;const Xje=function(i,a,f,p,v){const m=function(it){switch(it){case v.db.relationType.AGGREGATION:return"aggregation";case v.db.relationType.EXTENSION:return"extension";case v.db.relationType.COMPOSITION:return"composition";case v.db.relationType.DEPENDENCY:return"dependency";case v.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(it=>!Number.isNaN(it.y));const b=a.points,E=YE().x(function(it){return it.x}).y(function(it){return it.y}).curve(MA),C=i.append("path").attr("d",E(b)).attr("id","edge"+bBt).attr("class","relation");let A="";p.arrowMarkerAbsolute&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\("),A=A.replace(/\)/g,"\\)")),f.relation.lineType==1&&C.attr("class","relation dashed-line"),f.relation.lineType==10&&C.attr("class","relation dotted-line"),f.relation.type1!=="none"&&C.attr("marker-start","url("+A+"#"+m(f.relation.type1)+"Start)"),f.relation.type2!=="none"&&C.attr("marker-end","url("+A+"#"+m(f.relation.type2)+"End)");let P,F;const j=a.points.length;let R=to.calcLabelPosition(a.points);P=R.x,F=R.y;let H,Y,rt,J;if(j%2!==0&&j>1){let it=to.calcCardinalityPosition(f.relation.type1!=="none",a.points,a.points[0]),ft=to.calcCardinalityPosition(f.relation.type2!=="none",a.points,a.points[j-1]);Wt.debug("cardinality_1_point "+JSON.stringify(it)),Wt.debug("cardinality_2_point "+JSON.stringify(ft)),H=it.x,Y=it.y,rt=ft.x,J=ft.y}if(f.title!==void 0){const it=i.append("g").attr("class","classLabel"),ft=it.append("text").attr("class","label").attr("x",P).attr("y",F).attr("fill","red").attr("text-anchor","middle").text(f.title);window.label=ft;const Tt=ft.node().getBBox();it.insert("rect",":first-child").attr("class","box").attr("x",Tt.x-p.padding/2).attr("y",Tt.y-p.padding/2).attr("width",Tt.width+p.padding).attr("height",Tt.height+p.padding)}Wt.info("Rendering relation "+JSON.stringify(f)),f.relationTitle1!==void 0&&f.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",H).attr("y",Y).attr("fill","black").attr("font-size","6").text(f.relationTitle1),f.relationTitle2!==void 0&&f.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",rt).attr("y",J).attr("fill","black").attr("font-size","6").text(f.relationTitle2),bBt++},Qje=function(i,a,f,p){Wt.debug("Rendering class ",a,f);const v=a.id,m={id:v,label:a.id,width:0,height:0},b=i.append("g").attr("id",p.db.lookUpDomId(v)).attr("class","classGroup");let E;a.link?E=b.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",f.textHeight+f.padding).attr("x",0):E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);let C=!0;a.annotations.forEach(function(kt){const mt=E.append("tspan").text("«"+kt+"»");C||mt.attr("dy",f.textHeight),C=!1});let A=vBt(a);const P=E.append("tspan").text(A).attr("class","title");C||P.attr("dy",f.textHeight);const F=E.node().getBBox().height,j=b.append("line").attr("x1",0).attr("y1",f.padding+F+f.dividerMargin/2).attr("y2",f.padding+F+f.dividerMargin/2),R=b.append("text").attr("x",f.padding).attr("y",F+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText");C=!0,a.members.forEach(function(kt){wBt(R,kt,C,f),C=!1});const H=R.node().getBBox(),Y=b.append("line").attr("x1",0).attr("y1",f.padding+F+f.dividerMargin+H.height).attr("y2",f.padding+F+f.dividerMargin+H.height),rt=b.append("text").attr("x",f.padding).attr("y",F+2*f.dividerMargin+H.height+f.textHeight).attr("fill","white").attr("class","classText");C=!0,a.methods.forEach(function(kt){wBt(rt,kt,C,f),C=!1});const J=b.node().getBBox();var it=" ";a.cssClasses.length>0&&(it=it+a.cssClasses.join(" "));const Tt=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",J.width+2*f.padding).attr("height",J.height+f.padding+.5*f.dividerMargin).attr("class",it).node().getBBox().width;return E.node().childNodes.forEach(function(kt){kt.setAttribute("x",(Tt-kt.getBBox().width)/2)}),a.tooltip&&E.insert("title").text(a.tooltip),j.attr("x2",Tt),Y.attr("x2",Tt),m.width=Tt,m.height=J.height+f.padding+.5*f.dividerMargin,m},vBt=function(i){let a=i.id;return i.type&&(a+="<"+i.type+">"),a},Zje=function(i,a,f,p){Wt.debug("Rendering note ",a,f);const v=a.id,m={id:v,text:a.text,width:0,height:0},b=i.append("g").attr("id",v).attr("class","classGroup");let E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);const C=JSON.parse(`"${a.text}"`).split(` -`);C.forEach(function(j){Wt.debug(`Adding line: ${j}`),E.append("tspan").text(j).attr("class","title").attr("dy",f.textHeight)});const A=b.node().getBBox(),F=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",A.width+2*f.padding).attr("height",A.height+C.length*f.textHeight+f.padding+.5*f.dividerMargin).node().getBBox().width;return E.node().childNodes.forEach(function(j){j.setAttribute("x",(F-j.getBBox().width)/2)}),m.width=F,m.height=A.height+C.length*f.textHeight+f.padding+.5*f.dividerMargin,m},yK=function(i){let a="",f="",p="",v="",m=i.substring(0,1),b=i.substring(i.length-1,i.length);m.match(/[#+~-]/)&&(v=m);let E=/[\s\w)~]/;b.match(E)||(f=mBt(b));const C=v===""?0:1;let A=f===""?i.length:i.length-1;i=i.substring(C,A);const P=i.indexOf("("),F=i.indexOf(")");if(P>1&&F>P&&F<=i.length){let R=i.substring(0,P).trim();const H=i.substring(P+1,F);if(a=v+R+"("+zN(H.trim())+")",Fi?" "+i:"",Bb=(i,a)=>`${a||"node default"}${yBt(i.classes)} ${yBt(i.class)}`,xBt=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=v+m,E=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Wt.info("Question main (Circle)");const C=L5(f,b,b,E);return C.attr("style",a.style),ef(a,C),a.intersect=function(A){return Wt.warn("Intersect called"),Th.polygon(a,E,A)},f},Jje=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=28,v=[{x:0,y:p/2},{x:p/2,y:0},{x:0,y:-p/2},{x:-p/2,y:0}];return f.insert("polygon",":first-child").attr("points",v.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),a.width=28,a.height=28,a.intersect=function(b){return Th.circle(a,14,b)},f},t$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=4,m=p.height+a.padding,b=m/v,E=p.width+2*b+a.padding,C=[{x:b,y:0},{x:E-b,y:0},{x:E,y:-m/2},{x:E-b,y:-m},{x:b,y:-m},{x:0,y:-m/2}],A=L5(f,E,m,C);return A.attr("style",a.style),ef(a,A),a.intersect=function(P){return Th.polygon(a,C,P)},f},e$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-m/2,y:0},{x:v,y:0},{x:v,y:-m},{x:-m/2,y:-m},{x:0,y:-m/2}];return L5(f,v,m,b).attr("style",a.style),a.width=v+m,a.height=m,a.intersect=function(C){return Th.polygon(a,b,C)},f},n$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:m/6,y:-m}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},r$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:2*m/6,y:0},{x:v+m/6,y:0},{x:v-2*m/6,y:-m},{x:-m/6,y:-m}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},i$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v+2*m/6,y:0},{x:v-m/6,y:-m},{x:m/6,y:-m}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},s$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:-2*m/6,y:-m}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},a$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v+m/2,y:0},{x:v,y:-m/2},{x:v+m/2,y:-m},{x:0,y:-m}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},o$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=v/2,b=m/(2.5+v/50),E=p.height+b+a.padding,C="M 0,"+b+" a "+m+","+b+" 0,0,0 "+v+" 0 a "+m+","+b+" 0,0,0 "+-v+" 0 l 0,"+E+" a "+m+","+b+" 0,0,0 "+v+" 0 l 0,"+-E,A=f.attr("label-offset-y",b).insert("path",":first-child").attr("style",a.style).attr("d",C).attr("transform","translate("+-v/2+","+-(E/2+b)+")");return ef(a,A),a.intersect=function(P){const F=Th.rect(a,P),j=F.x-a.x;if(m!=0&&(Math.abs(j)a.height/2-b)){let R=b*b*(1-j*j/(m*m));R!=0&&(R=Math.sqrt(R)),R=b-R,P.y-a.y>0&&(R=-R),F.y+=R}return F},f},c$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,"node "+a.classes+" "+a.class,!0),m=f.insert("rect",":first-child"),b=p.width+a.padding,E=p.height+a.padding;if(m.attr("class","basic label-container").attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",-p.width/2-v).attr("y",-p.height/2-v).attr("width",b).attr("height",E),a.props){const C=new Set(Object.keys(a.props));a.props.borders&&(kBt(m,a.props.borders,b,E),C.delete("borders")),C.forEach(A=>{Wt.warn(`Unknown node property ${A}`)})}return ef(a,m),a.intersect=function(C){return Th.rect(a,C)},f},u$e=async(i,a)=>{const{shapeSvg:f}=await Od(i,a,"label",!0);Wt.trace("Classes = ",a.class);const p=f.insert("rect",":first-child"),v=0,m=0;if(p.attr("width",v).attr("height",m),f.attr("class","label edgeLabel"),a.props){const b=new Set(Object.keys(a.props));a.props.borders&&(kBt(p,a.props.borders,v,m),b.delete("borders")),b.forEach(E=>{Wt.warn(`Unknown node property ${E}`)})}return ef(a,p),a.intersect=function(b){return Th.rect(a,b)},f};function kBt(i,a,f,p){const v=[],m=E=>{v.push(E,0)},b=E=>{v.push(0,E)};a.includes("t")?(Wt.debug("add top border"),m(f)):b(f),a.includes("r")?(Wt.debug("add right border"),m(p)):b(p),a.includes("b")?(Wt.debug("add bottom border"),m(f)):b(f),a.includes("l")?(Wt.debug("add left border"),m(p)):b(p),i.attr("stroke-dasharray",v.join(" "))}const l$e=(i,a)=>{let f;a.classes?f="node "+a.classes:f="node default";const p=i.insert("g").attr("class",f).attr("id",a.domId||a.id),v=p.insert("rect",":first-child"),m=p.insert("line"),b=p.insert("g").attr("class","label"),E=a.labelText.flat?a.labelText.flat():a.labelText;let C="";typeof E=="object"?C=E[0]:C=E,Wt.info("Label text abc79",C,E,typeof E=="object");const A=b.node().appendChild(dp(C,a.labelStyle,!0,!0));let P={width:0,height:0};if(u1(De().flowchart.htmlLabels)){const Y=A.children[0],rt=xr(A);P=Y.getBoundingClientRect(),rt.attr("width",P.width),rt.attr("height",P.height)}Wt.info("Text 2",E);const F=E.slice(1,E.length);let j=A.getBBox();const R=b.node().appendChild(dp(F.join?F.join("
"):F,a.labelStyle,!0,!0));if(u1(De().flowchart.htmlLabels)){const Y=R.children[0],rt=xr(R);P=Y.getBoundingClientRect(),rt.attr("width",P.width),rt.attr("height",P.height)}const H=a.padding/2;return xr(R).attr("transform","translate( "+(P.width>j.width?0:(j.width-P.width)/2)+", "+(j.height+H+5)+")"),xr(A).attr("transform","translate( "+(P.width{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.height+a.padding,m=p.width+v/4+a.padding,b=f.insert("rect",":first-child").attr("style",a.style).attr("rx",v/2).attr("ry",v/2).attr("x",-m/2).attr("y",-v/2).attr("width",m).attr("height",v);return ef(a,b),a.intersect=function(E){return Th.rect(a,E)},f},f$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Bb(a,void 0),!0),m=f.insert("circle",":first-child");return m.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Wt.info("Circle main"),ef(a,m),a.intersect=function(b){return Wt.info("Circle intersect",a,p.width/2+v,b),Th.circle(a,p.width/2+v,b)},f},d$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Bb(a,void 0),!0),m=5,b=f.insert("g",":first-child"),E=b.insert("circle"),C=b.insert("circle");return b.attr("class",a.class),E.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v+m).attr("width",p.width+a.padding+m*2).attr("height",p.height+a.padding+m*2),C.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Wt.info("DoubleCircle main"),ef(a,E),a.intersect=function(A){return Wt.info("DoubleCircle intersect",a,p.width/2+v+m,A),Th.circle(a,p.width/2+v+m,A)},f},g$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Bb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v,y:0},{x:v,y:-m},{x:0,y:-m},{x:0,y:0},{x:-8,y:0},{x:v+8,y:0},{x:v+8,y:-m},{x:-8,y:-m},{x:-8,y:0}],E=L5(f,v,m,b);return E.attr("style",a.style),ef(a,E),a.intersect=function(C){return Th.polygon(a,b,C)},f},p$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ef(a,p),a.intersect=function(v){return Th.circle(a,7,v)},f},EBt=(i,a,f)=>{const p=i.insert("g").attr("class","node default").attr("id",a.domId||a.id);let v=70,m=10;f==="LR"&&(v=10,m=70);const b=p.append("rect").attr("x",-1*v/2).attr("y",-1*m/2).attr("width",v).attr("height",m).attr("class","fork-join");return ef(a,b),a.height=a.height+a.padding/2,a.width=a.width+a.padding/2,a.intersect=function(E){return Th.rect(a,E)},p},TBt={rhombus:xBt,question:xBt,rect:c$e,labelRect:u$e,rectWithTitle:l$e,choice:Jje,circle:f$e,doublecircle:d$e,stadium:h$e,hexagon:t$e,rect_left_inv_arrow:e$e,lean_right:n$e,lean_left:r$e,trapezoid:i$e,inv_trapezoid:s$e,rect_right_inv_arrow:a$e,cylinder:o$e,start:p$e,end:(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child"),v=f.insert("circle",":first-child");return v.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),p.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ef(a,v),a.intersect=function(m){return Th.circle(a,7,m)},f},note:Yje,subroutine:g$e,fork:EBt,join:EBt,class_box:(i,a)=>{const f=a.padding/2,p=4,v=8;let m;a.classes?m="node "+a.classes:m="node default";const b=i.insert("g").attr("class",m).attr("id",a.domId||a.id),E=b.insert("rect",":first-child"),C=b.insert("line"),A=b.insert("line");let P=0,F=p;const j=b.insert("g").attr("class","label");let R=0;const H=a.classData.annotations&&a.classData.annotations[0],Y=a.classData.annotations[0]?"«"+a.classData.annotations[0]+"»":"",rt=j.node().appendChild(dp(Y,a.labelStyle,!0,!0));let J=rt.getBBox();if(u1(De().flowchart.htmlLabels)){const yt=rt.children[0],st=xr(rt);J=yt.getBoundingClientRect(),st.attr("width",J.width),st.attr("height",J.height)}a.classData.annotations[0]&&(F+=J.height+p,P+=J.width);let it=a.classData.label;a.classData.type!==void 0&&a.classData.type!==""&&(De().flowchart.htmlLabels?it+="<"+a.classData.type+">":it+="<"+a.classData.type+">");const ft=j.node().appendChild(dp(it,a.labelStyle,!0,!0));xr(ft).attr("class","classTitle");let Tt=ft.getBBox();if(u1(De().flowchart.htmlLabels)){const yt=ft.children[0],st=xr(ft);Tt=yt.getBoundingClientRect(),st.attr("width",Tt.width),st.attr("height",Tt.height)}F+=Tt.height+p,Tt.width>P&&(P=Tt.width);const kt=[];a.classData.members.forEach(yt=>{const st=yK(yt);let xt=st.displayText;De().flowchart.htmlLabels&&(xt=xt.replace(//g,">"));const ht=j.node().appendChild(dp(xt,st.cssStyle?st.cssStyle:a.labelStyle,!0,!0));let dt=ht.getBBox();if(u1(De().flowchart.htmlLabels)){const Ct=ht.children[0],tt=xr(ht);dt=Ct.getBoundingClientRect(),tt.attr("width",dt.width),tt.attr("height",dt.height)}dt.width>P&&(P=dt.width),F+=dt.height+p,kt.push(ht)}),F+=v;const mt=[];if(a.classData.methods.forEach(yt=>{const st=yK(yt);let xt=st.displayText;De().flowchart.htmlLabels&&(xt=xt.replace(//g,">"));const ht=j.node().appendChild(dp(xt,st.cssStyle?st.cssStyle:a.labelStyle,!0,!0));let dt=ht.getBBox();if(u1(De().flowchart.htmlLabels)){const Ct=ht.children[0],tt=xr(ht);dt=Ct.getBoundingClientRect(),tt.attr("width",dt.width),tt.attr("height",dt.height)}dt.width>P&&(P=dt.width),F+=dt.height+p,mt.push(ht)}),F+=v,H){let yt=(P-J.width)/2;xr(rt).attr("transform","translate( "+(-1*P/2+yt)+", "+-1*F/2+")"),R=J.height+p}let ct=(P-Tt.width)/2;return xr(ft).attr("transform","translate( "+(-1*P/2+ct)+", "+(-1*F/2+R)+")"),R+=Tt.height+p,C.attr("class","divider").attr("x1",-P/2-f).attr("x2",P/2+f).attr("y1",-F/2-f+v+R).attr("y2",-F/2-f+v+R),R+=v,kt.forEach(yt=>{xr(yt).attr("transform","translate( "+-P/2+", "+(-1*F/2+R+v/2)+")");const st=yt==null?void 0:yt.getBBox();R+=((st==null?void 0:st.height)??0)+p}),R+=v,A.attr("class","divider").attr("x1",-P/2-f).attr("x2",P/2+f).attr("y1",-F/2-f+v+R).attr("y2",-F/2-f+v+R),R+=v,mt.forEach(yt=>{xr(yt).attr("transform","translate( "+-P/2+", "+(-1*F/2+R)+")");const st=yt==null?void 0:yt.getBBox();R+=((st==null?void 0:st.height)??0)+p}),E.attr("class","outer title-state").attr("x",-P/2-f).attr("y",-(F/2)-f).attr("width",P+a.padding).attr("height",F+a.padding),ef(a,E),a.intersect=function(yt){return Th.rect(a,yt)},b}};let iL={};const _Bt=async(i,a,f)=>{let p,v;if(a.link){let m;De().securityLevel==="sandbox"?m="_top":a.linkTarget&&(m=a.linkTarget||"_blank"),p=i.insert("svg:a").attr("xlink:href",a.link).attr("target",m),v=await TBt[a.shape](p,a,f)}else v=await TBt[a.shape](i,a,f),p=v;return a.tooltip&&v.attr("title",a.tooltip),a.class&&v.attr("class","node default "+a.class),iL[a.id]=p,a.haveCallback&&iL[a.id].attr("class",iL[a.id].attr("class")+" clickable"),p},b$e=(i,a)=>{iL[a.id]=i},v$e=()=>{iL={}},CBt=i=>{const a=iL[i.id];Wt.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const f=8,p=i.diff||0;return i.clusterNode?a.attr("transform","translate("+(i.x+p-i.width/2)+", "+(i.y-i.height/2-f)+")"):a.attr("transform","translate("+i.x+", "+i.y+")"),p},w$e={rect:(i,a)=>{Wt.info("Creating subgraph rect for ",a.id,a);const f=i.insert("g").attr("class","cluster"+(a.class?" "+a.class:"")).attr("id",a.id),p=f.insert("rect",":first-child"),v=u1(De().flowchart.htmlLabels),m=f.insert("g").attr("class","cluster-label"),b=a.labelType==="markdown"?vK(m,a.labelText,{style:a.labelStyle,useHtmlLabels:v}):m.node().appendChild(dp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(u1(De().flowchart.htmlLabels)){const j=b.children[0],R=xr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}const C=0*a.padding,A=C/2,P=a.width<=E.width+C?E.width+C:a.width;a.width<=E.width+C?a.diff=(E.width-a.width)/2-a.padding/2:a.diff=-a.padding/2,Wt.trace("Data ",a,JSON.stringify(a)),p.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-P/2).attr("y",a.y-a.height/2-A).attr("width",P).attr("height",a.height+C),v?m.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2)+")"):m.attr("transform","translate("+a.x+", "+(a.y-a.height/2)+")");const F=p.node().getBBox();return a.width=F.width,a.height=F.height,a.intersect=function(j){return mP(a,j)},f},roundedWithTitle:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=f.insert("g").attr("class","cluster-label"),m=f.append("rect"),b=v.node().appendChild(dp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(u1(De().flowchart.htmlLabels)){const j=b.children[0],R=xr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}E=b.getBBox();const C=0*a.padding,A=C/2,P=a.width<=E.width+a.padding?E.width+a.padding:a.width;a.width<=E.width+a.padding?a.diff=(E.width+a.padding*0-a.width)/2:a.diff=-a.padding/2,p.attr("class","outer").attr("x",a.x-P/2-A).attr("y",a.y-a.height/2-A).attr("width",P+C).attr("height",a.height+C),m.attr("class","inner").attr("x",a.x-P/2-A).attr("y",a.y-a.height/2-A+E.height-1).attr("width",P+C).attr("height",a.height+C-E.height-3),v.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2-a.padding/3+(u1(De().flowchart.htmlLabels)?5:3))+")");const F=p.node().getBBox();return a.height=F.height,a.intersect=function(j){return mP(a,j)},f},noteGroup:(i,a)=>{const f=i.insert("g").attr("class","note-cluster").attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2-m).attr("width",a.width+v).attr("height",a.height+v).attr("fill","none");const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.intersect=function(E){return mP(a,E)},f},divider:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("class","divider").attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2).attr("width",a.width+v).attr("height",a.height+v);const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.diff=-a.padding/2,a.intersect=function(E){return mP(a,E)},f}};let SBt={};const m$e=(i,a)=>{Wt.trace("Inserting cluster");const f=a.shape||"rect";SBt[a.id]=w$e[f](i,a)},y$e=()=>{SBt={}};let xK={},Nd={};const x$e=()=>{xK={},Nd={}},ABt=(i,a)=>{const f=u1(De().flowchart.htmlLabels),p=a.labelType==="markdown"?vK(i,a.label,{style:a.labelStyle,useHtmlLabels:f,addSvgBackground:!0}):dp(a.label,a.labelStyle);Wt.info("abc82",a,a.labelType);const v=i.insert("g").attr("class","edgeLabel"),m=v.insert("g").attr("class","label");m.node().appendChild(p);let b=p.getBBox();if(f){const C=p.children[0],A=xr(p);b=C.getBoundingClientRect(),A.attr("width",b.width),A.attr("height",b.height)}m.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),xK[a.id]=v,a.width=b.width,a.height=b.height;let E;if(a.startLabelLeft){const C=dp(a.startLabelLeft,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),P=A.insert("g").attr("class","inner");E=P.node().appendChild(C);const F=C.getBBox();P.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startLeft=A,kK(E,a.startLabelLeft)}if(a.startLabelRight){const C=dp(a.startLabelRight,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),P=A.insert("g").attr("class","inner");E=A.node().appendChild(C),P.node().appendChild(C);const F=C.getBBox();P.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startRight=A,kK(E,a.startLabelRight)}if(a.endLabelLeft){const C=dp(a.endLabelLeft,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),P=A.insert("g").attr("class","inner");E=P.node().appendChild(C);const F=C.getBBox();P.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"),A.node().appendChild(C),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endLeft=A,kK(E,a.endLabelLeft)}if(a.endLabelRight){const C=dp(a.endLabelRight,a.labelStyle),A=i.insert("g").attr("class","edgeTerminals"),P=A.insert("g").attr("class","inner");E=P.node().appendChild(C);const F=C.getBBox();P.attr("transform","translate("+-F.width/2+", "+-F.height/2+")"),A.node().appendChild(C),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endRight=A,kK(E,a.endLabelRight)}return p};function kK(i,a){De().flowchart.htmlLabels&&i&&(i.style.width=a.length*9+"px",i.style.height="12px")}const k$e=(i,a)=>{Wt.info("Moving label abc78 ",i.id,i.label,xK[i.id]);let f=a.updatedPath?a.updatedPath:a.originalPath;if(i.label){const p=xK[i.id];let v=i.x,m=i.y;if(f){const b=to.calcLabelPosition(f);Wt.info("Moving label "+i.label+" from (",v,",",m,") to (",b.x,",",b.y,") abc78"),a.updatedPath&&(v=b.x,m=b.y)}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelLeft){const p=Nd[i.id].startLeft;let v=i.x,m=i.y;if(f){const b=to.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelRight){const p=Nd[i.id].startRight;let v=i.x,m=i.y;if(f){const b=to.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelLeft){const p=Nd[i.id].endLeft;let v=i.x,m=i.y;if(f){const b=to.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelRight){const p=Nd[i.id].endRight;let v=i.x,m=i.y;if(f){const b=to.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}},E$e=(i,a)=>{const f=i.x,p=i.y,v=Math.abs(a.x-f),m=Math.abs(a.y-p),b=i.width/2,E=i.height/2;return v>=b||m>=E},T$e=(i,a,f)=>{Wt.warn(`intersection calc abc89: +`;break}case-2:{b=a?" ":" ";break}case-1:{if(!a&&v)continue;b=" ";break}default:b=String.fromCharCode(m)}v=m===-2,p.push(b)}return p.join("")}const Sje={[42]:fp,[43]:fp,[45]:fp,[48]:fp,[49]:fp,[50]:fp,[51]:fp,[52]:fp,[53]:fp,[54]:fp,[55]:fp,[56]:fp,[57]:fp,[62]:jFt},Aje={[91]:IRe},Lje={[-2]:_0t,[-1]:_0t,[32]:_0t},Mje=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:{null:[42,95]},contentInitial:Aje,disable:{null:[]},document:Sje,flow:{[35]:BRe,[42]:hK,[45]:[YFt,hK],[60]:zRe,[61]:YFt,[95]:hK,[96]:HFt,[126]:HFt},flowInitial:Lje,insideSpan:{null:[T0t,yje]},string:{[38]:qFt,[92]:$Ft},text:{[-5]:A0t,[-4]:A0t,[-3]:A0t,[33]:rje,[38]:qFt,[42]:T0t,[60]:[uRe,URe],[91]:sje,[92]:[PRe,$Ft],[93]:S0t,[95]:T0t,[96]:xRe}},Symbol.toStringTag,{value:"Module"}));function Ije(i={}){const a=KBe([Mje].concat(i.extensions||[])),f={defined:[],lazy:{},constructs:a,content:p(nRe),document:p(iRe),flow:p(wje),string:p(xje),text:p(kje)};return f;function p(v){return m;function m(b){return Tje(f,v,b)}}}const ZFt=/[\0\t\n\r]/g;function Dje(){let i=1,a="",f=!0,p;return v;function v(m,b,E){const _=[];let L,N,B,j,R;for(m=a+m.toString(b),B=0,a="",f&&(m.charCodeAt(0)===65279&&B++,f=void 0);B13&&f<32||f>126&&f<160||f>55295&&f<57344||f>64975&&f<65008||(f&65535)===65535||(f&65535)===65534||f>1114111?"�":String.fromCharCode(f)}const Nje=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Pje(i){return i.replace(Nje,Fje)}function Fje(i,a,f){if(a)return a;if(f.charCodeAt(0)===35){const v=f.charCodeAt(1),m=v===120||v===88;return JFt(f.slice(m?2:1),m?16:10)}return C0t(f)||i}function fK(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?tBt(i.position):"start"in i||"end"in i?tBt(i):"line"in i||"column"in i?L0t(i):""}function L0t(i){return eBt(i&&i.line)+":"+eBt(i&&i.column)}function tBt(i){return L0t(i&&i.start)+"-"+L0t(i&&i.end)}function eBt(i){return i&&typeof i=="number"?i:1}const nBt={}.hasOwnProperty,rBt=function(i,a,f){return typeof a!="string"&&(f=a,a=void 0),Bje(f)(Oje(Ije(f).document().write(Dje()(i,a,!0))))};function Bje(i){const a={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:E(ya),autolinkProtocol:U,autolinkEmail:U,atxHeading:E(Ne),blockQuote:E($t),characterEscape:U,characterReference:U,codeFenced:E(re),codeFencedFenceInfo:_,codeFencedFenceMeta:_,codeIndented:E(re,_),codeText:E(ie,_),codeTextData:U,data:U,codeFlowValue:U,definition:E(Oe),definitionDestinationString:_,definitionLabelString:_,definitionTitleString:_,emphasis:E(oe),hardBreakEscape:E(me),hardBreakTrailing:E(me),htmlFlow:E(cn,_),htmlFlowData:U,htmlText:E(cn,_),htmlTextData:U,image:E(li),label:_,link:E(ya),listItem:E(Oo),listItemValue:z,listOrdered:E(da,R),listUnordered:E(da),paragraph:E(ds),reference:Me,referenceString:_,resourceDestinationString:_,resourceTitleString:_,setextHeading:E(Ne),strong:E(Dr),thematicBreak:E(di)},exit:{atxHeading:N(),atxHeadingSequence:ht,autolink:N(),autolinkEmail:_e,autolinkProtocol:we,blockQuote:N(),characterEscapeValue:xt,characterReferenceMarkerHexadecimal:Ge,characterReferenceMarkerNumeric:Ge,characterReferenceValue:Ke,codeFenced:N(ut),codeFencedFence:st,codeFencedFenceInfo:K,codeFencedFenceMeta:it,codeFlowValue:xt,codeIndented:N(bt),codeText:N(Ct),codeTextData:xt,data:xt,definition:N(),definitionDestinationString:dt,definitionLabelString:mt,definitionTitleString:yt,emphasis:N(),hardBreakEscape:N(Ot),hardBreakTrailing:N(Ot),htmlFlow:N(Nt),htmlFlowData:xt,htmlText:N(qt),htmlTextData:xt,image:N(Tt),label:It,labelText:Ht,lineEnding:nt,link:N(Z),listItem:N(),listOrdered:N(),listUnordered:N(),paragraph:N(),referenceString:ve,resourceDestinationString:Ft,resourceTitleString:ke,resource:pn,setextHeading:N(pt),setextHeadingLineSequence:X,setextHeadingText:wt,strong:N(),thematicBreak:N()}};iBt(a,(i||{}).mdastExtensions||[]);const f={};return p;function p(Ee){let Yn={type:"root",children:[]};const He={stack:[Yn],tokenStack:[],config:a,enter:L,exit:B,buffer:_,resume:j,setData:m,getData:b},Ti=[];let gn=-1;for(;++gn0){const ks=He.tokenStack[He.tokenStack.length-1];(ks[1]||sBt).call(He,void 0,ks[0])}for(Yn.position={start:uk(Ee.length>0?Ee[0][1].start:{line:1,column:1,offset:0}),end:uk(Ee.length>0?Ee[Ee.length-2][1].end:{line:1,column:1,offset:0})},gn=-1;++gn{N!==0&&(v++,p.push([])),L.split(" ").forEach(B=>{B&&p[v].push({content:B,type:E})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(_=>{m(_,b.type)})}return f.forEach(b=>{b.type==="paragraph"&&b.children.forEach(E=>{m(E)})}),p}function zje(i){const{children:a}=rBt(i);function f(p){return p.type==="text"?p.value.replace(/\n/g,"
"):p.type==="strong"?`${p.children.map(f).join("")}`:p.type==="emphasis"?`${p.children.map(f).join("")}`:p.type==="paragraph"?`

${p.children.map(f).join("")}

`:`Unsupported markdown: ${p.type}`}return a.map(f).join("")}function qje(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(a=>a.segment):[...i]}function Hje(i,a){const f=qje(a.content);return aBt(i,[],f,a.type)}function aBt(i,a,f,p){if(f.length===0)return[{content:a.join(""),type:p},{content:"",type:p}];const[v,...m]=f,b=[...a,v];return i([{content:b.join(""),type:p}])?aBt(i,b,m,p):(a.length===0&&v&&(a.push(v),f.shift()),[{content:a.join(""),type:p},{content:f.join(""),type:p}])}function Gje(i,a){if(i.some(({content:f})=>f.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return M0t(i,a)}function M0t(i,a,f=[],p=[]){if(i.length===0)return p.length>0&&f.push(p),f.length>0?f:[];let v="";i[0].content===" "&&(v=" ",i.shift());const m=i.shift()??{content:" ",type:"normal"},b=[...p];if(v!==""&&b.push({content:v,type:"normal"}),b.push(m),a(b))return M0t(i,a,f,b);if(p.length>0)f.push(p),i.unshift(m);else if(m.content){const[E,_]=Hje(a,m);f.push([E]),_.content&&i.unshift(_)}return M0t(i,a,f)}function Vje(i,a){a&&i.attr("style",a)}function Uje(i,a,f,p,v=!1){const m=i.append("foreignObject"),b=m.append("xhtml:div"),E=a.label,_=a.isNode?"nodeLabel":"edgeLabel";b.html(` + "+E+""),Vje(b,a.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",f+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),v&&b.attr("class","labelBkg");let L=b.node().getBoundingClientRect();return L.width===f&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",f+"px"),L=b.node().getBoundingClientRect()),m.style("width",L.width),m.style("height",L.height),m.node()}function oBt(i,a,f){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",a*f-.1+"em").attr("dy",f+"em")}function Wje(i,a,f){const p=i.append("text"),v=oBt(p,1,a);cBt(v,f);const m=v.node().getComputedTextLength();return p.remove(),m}function Kje(i,a,f,p=!1){const m=a.append("g"),b=m.insert("rect").attr("class","background"),E=m.append("text").attr("y","-10.1");let _=0;for(const L of f){const N=j=>Wje(m,1.1,j)<=i,B=N(L)?[L]:Gje(L,N);for(const j of B){const R=oBt(E,_,1.1);cBt(R,j),_++}}if(p){const L=E.node().getBBox(),N=2;return b.attr("x",-N).attr("y",-N).attr("width",L.width+2*N).attr("height",L.height+2*N),m.node()}else return E.node()}function cBt(i,a){i.text(""),a.forEach((f,p)=>{const v=i.append("tspan").attr("font-style",f.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",f.type==="strong"?"bold":"normal");p===0?v.text(f.content):v.text(" "+f.content)})}const dK=(i,a="",{style:f="",isTitle:p=!1,classes:v="",useHtmlLabels:m=!0,isNode:b=!0,width:E=200,addSvgBackground:_=!1}={})=>{if(Ut.info("createText",a,f,p,v,m,b,_),m){const L=zje(a),N={isNode:b,label:nP(L).replace(/fa[blrs]?:fa-[\w-]+/g,j=>``),labelStyle:f.replace("fill:","color:")};return Uje(i,N,E,v,_)}else{const L=$je(a);return Kje(E,i,L,_)}},Od=async(i,a,f,p)=>{let v;const m=a.useHtmlLabels||s1(Le().flowchart.htmlLabels);f?v=f:v="node default";const b=i.insert("g").attr("class",v).attr("id",a.domId||a.id),E=b.insert("g").attr("class","label").attr("style",a.labelStyle);let _;a.labelText===void 0?_="":_=typeof a.labelText=="string"?a.labelText:a.labelText[0];const L=E.node();let N;a.labelType==="markdown"?N=dK(E,Dd(nP(_),Le()),{useHtmlLabels:m,width:a.width||Le().flowchart.wrappingWidth,classes:"markdown-node-label"}):N=L.appendChild(hp(Dd(nP(_),Le()),a.labelStyle,!1,p));let B=N.getBBox();const j=a.padding/2;if(s1(Le().flowchart.htmlLabels)){const R=N.children[0],z=yr(N),K=R.getElementsByTagName("img");if(K){const it=_.replace(/]*>/g,"").trim()==="";await Promise.all([...K].map(st=>new Promise(ut=>{function bt(){if(st.style.display="flex",st.style.flexDirection="column",it){const mt=Le().fontSize?Le().fontSize:window.getComputedStyle(document.body).fontSize,yt=5;st.style.width=parseInt(mt,10)*yt+"px"}else st.style.width="100%";ut(st)}setTimeout(()=>{st.complete&&bt()}),st.addEventListener("error",bt),st.addEventListener("load",bt)})))}B=R.getBoundingClientRect(),z.attr("width",B.width),z.attr("height",B.height)}return m?E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"):E.attr("transform","translate(0, "+-B.height/2+")"),a.centerLabel&&E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),E.insert("rect",":first-child"),{shapeSvg:b,bbox:B,halfPadding:j,label:E}},Qh=(i,a)=>{const f=a.node().getBBox();i.width=f.width,i.height=f.height};function A5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-a/2+","+f/2+")")}let Ho={},cm={},uBt={};const Yje=()=>{cm={},uBt={},Ho={}},gK=(i,a)=>(Ut.trace("In isDecendant",a," ",i," = ",cm[a].includes(i)),!!cm[a].includes(i)),Xje=(i,a)=>(Ut.info("Decendants of ",a," is ",cm[a]),Ut.info("Edge is ",i),i.v===a||i.w===a?!1:cm[a]?cm[a].includes(i.v)||gK(i.v,a)||gK(i.w,a)||cm[a].includes(i.w):(Ut.debug("Tilt, ",a,",not in decendants"),!1)),lBt=(i,a,f,p)=>{Ut.warn("Copying children of ",i,"root",p,"data",a.node(i),p);const v=a.children(i)||[];i!==p&&v.push(i),Ut.warn("Copying (nodes) clusterId",i,"nodes",v),v.forEach(m=>{if(a.children(m).length>0)lBt(m,a,f,p);else{const b=a.node(m);Ut.info("cp ",m," to ",p," with parent ",i),f.setNode(m,b),p!==a.parent(m)&&(Ut.warn("Setting parent",m,a.parent(m)),f.setParent(m,a.parent(m))),i!==p&&m!==i?(Ut.debug("Setting parent",m,i),f.setParent(m,i)):(Ut.info("In copy ",i,"root",p,"data",a.node(i),p),Ut.debug("Not Setting parent for node=",m,"cluster!==rootId",i!==p,"node!==clusterId",m!==i));const E=a.edges(m);Ut.debug("Copying Edges",E),E.forEach(_=>{Ut.info("Edge",_);const L=a.edge(_.v,_.w,_.name);Ut.info("Edge data",L,p);try{Xje(_,p)?(Ut.info("Copying as ",_.v,_.w,L,_.name),f.setEdge(_.v,_.w,L,_.name),Ut.info("newGraph edges ",f.edges(),f.edge(f.edges()[0]))):Ut.info("Skipping copy of edge ",_.v,"-->",_.w," rootId: ",p," clusterId:",i)}catch(N){Ut.error(N)}})}Ut.debug("Removing node",m),a.removeNode(m)})},hBt=(i,a)=>{const f=a.children(i);let p=[...f];for(const v of f)uBt[v]=i,p=[...p,...hBt(v,a)];return p},wP=(i,a)=>{Ut.trace("Searching",i);const f=a.children(i);if(Ut.trace("Searching children of id ",i,f),f.length<1)return Ut.trace("This is a valid node",i),i;for(const p of f){const v=wP(p,a);if(v)return Ut.trace("Found replacement for",i," => ",v),v}},pK=i=>!Ho[i]||!Ho[i].externalConnections?i:Ho[i]?Ho[i].id:i,Qje=(i,a)=>{if(!i||a>10){Ut.debug("Opting out, no graph ");return}else Ut.debug("Opting in, graph ");i.nodes().forEach(function(f){i.children(f).length>0&&(Ut.warn("Cluster identified",f," Replacement id in edges: ",wP(f,i)),cm[f]=hBt(f,i),Ho[f]={id:wP(f,i),clusterData:i.node(f)})}),i.nodes().forEach(function(f){const p=i.children(f),v=i.edges();p.length>0?(Ut.debug("Cluster identified",f,cm),v.forEach(m=>{if(m.v!==f&&m.w!==f){const b=gK(m.v,f),E=gK(m.w,f);b^E&&(Ut.warn("Edge: ",m," leaves cluster ",f),Ut.warn("Decendants of XXX ",f,": ",cm[f]),Ho[f].externalConnections=!0)}})):Ut.debug("Not a cluster ",f,cm)}),i.edges().forEach(function(f){const p=i.edge(f);Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(f)),Ut.warn("Edge "+f.v+" -> "+f.w+": "+JSON.stringify(i.edge(f)));let v=f.v,m=f.w;if(Ut.warn("Fix XXX",Ho,"ids:",f.v,f.w,"Translating: ",Ho[f.v]," --- ",Ho[f.w]),Ho[f.v]&&Ho[f.w]&&Ho[f.v]===Ho[f.w]){Ut.warn("Fixing and trixing link to self - removing XXX",f.v,f.w,f.name),Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=pK(f.v),m=pK(f.w),i.removeEdge(f.v,f.w,f.name);const b=f.w+"---"+f.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:p.label,padding:0,shape:"labelRect",style:""});const E=structuredClone(p),_=structuredClone(p);E.label="",E.arrowTypeEnd="none",_.label="",E.fromCluster=f.v,_.toCluster=f.v,i.setEdge(v,b,E,f.name+"-cyclic-special"),i.setEdge(b,m,_,f.name+"-cyclic-special")}else(Ho[f.v]||Ho[f.w])&&(Ut.warn("Fixing and trixing - removing XXX",f.v,f.w,f.name),v=pK(f.v),m=pK(f.w),i.removeEdge(f.v,f.w,f.name),v!==f.v&&(p.fromCluster=f.v),m!==f.w&&(p.toCluster=f.w),Ut.warn("Fix Replacing with XXX",v,m,f.name),i.setEdge(v,m,p,f.name))}),Ut.warn("Adjusted Graph",S5(i)),fBt(i,0),Ut.trace(Ho)},fBt=(i,a)=>{if(Ut.warn("extractor - ",a,S5(i),i.children("D")),a>10){Ut.error("Bailing out");return}let f=i.nodes(),p=!1;for(const v of f){const m=i.children(v);p=p||m.length>0}if(!p){Ut.debug("Done, no node has children",i.nodes());return}Ut.debug("Nodes = ",f,a);for(const v of f)if(Ut.debug("Extracting node",v,Ho,Ho[v]&&!Ho[v].externalConnections,!i.parent(v),i.node(v),i.children("D")," Depth ",a),!Ho[v])Ut.debug("Not a cluster",v,a);else if(!Ho[v].externalConnections&&i.children(v)&&i.children(v).length>0){Ut.warn("Cluster without external connections, without a parent and with children",v,a);let b=i.graph().rankdir==="TB"?"LR":"TB";Ho[v]&&Ho[v].clusterData&&Ho[v].clusterData.dir&&(b=Ho[v].clusterData.dir,Ut.warn("Fixing dir",Ho[v].clusterData.dir,b));const E=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Ut.warn("Old graph before copy",S5(i)),lBt(v,i,E,v),i.setNode(v,{clusterNode:!0,id:v,clusterData:Ho[v].clusterData,labelText:Ho[v].labelText,graph:E}),Ut.warn("New graph after copy node: (",v,")",S5(E)),Ut.debug("Old graph after copy",S5(i))}else Ut.warn("Cluster ** ",v," **not meeting the criteria !externalConnections:",!Ho[v].externalConnections," no parent: ",!i.parent(v)," children ",i.children(v)&&i.children(v).length>0,i.children("D"),a),Ut.debug(Ho);f=i.nodes(),Ut.warn("New list of nodes",f);for(const v of f){const m=i.node(v);Ut.warn(" Now next level",v,m),m.clusterNode&&fBt(m.graph,a+1)}},dBt=(i,a)=>{if(a.length===0)return[];let f=Object.assign(a);return a.forEach(p=>{const v=i.children(p),m=dBt(i,v);f=[...f,...m]}),f},Zje=i=>dBt(i,i.children());function Jje(i,a){return i.intersect(a)}function gBt(i,a,f,p){var v=i.x,m=i.y,b=v-p.x,E=m-p.y,_=Math.sqrt(a*a*E*E+f*f*b*b),L=Math.abs(a*f*b/_);p.x0}function n$e(i,a,f){var p=i.x,v=i.y,m=[],b=Number.POSITIVE_INFINITY,E=Number.POSITIVE_INFINITY;typeof a.forEach=="function"?a.forEach(function(z){b=Math.min(b,z.x),E=Math.min(E,z.y)}):(b=Math.min(b,a.x),E=Math.min(E,a.y));for(var _=p-i.width/2-b,L=v-i.height/2-E,N=0;N1&&m.sort(function(z,K){var it=z.x-f.x,st=z.y-f.y,ut=Math.sqrt(it*it+st*st),bt=K.x-f.x,mt=K.y-f.y,yt=Math.sqrt(bt*bt+mt*mt);return ut{var f=i.x,p=i.y,v=a.x-f,m=a.y-p,b=i.width/2,E=i.height/2,_,L;return Math.abs(m)*b>Math.abs(v)*E?(m<0&&(E=-E),_=m===0?0:E*v/m,L=E):(v<0&&(b=-b),_=b,L=v===0?0:b*m/v),{x:f+_,y:p+L}},yh={node:Jje,circle:t$e,ellipse:gBt,polygon:n$e,rect:mP},r$e=async(i,a)=>{a.useHtmlLabels||Le().flowchart.htmlLabels||(a.centerLabel=!0);const{shapeSvg:p,bbox:v,halfPadding:m}=await Od(i,a,"node "+a.classes,!0);Ut.info("Classes = ",a.classes);const b=p.insert("rect",":first-child");return b.attr("rx",a.rx).attr("ry",a.ry).attr("x",-v.width/2-m).attr("y",-v.height/2-m).attr("width",v.width+a.padding).attr("height",v.height+a.padding),Qh(a,b),a.intersect=function(E){return yh.rect(a,E)},p},bBt=i=>i?" "+i:"",Pb=(i,a)=>`${a||"node default"}${bBt(i.classes)} ${bBt(i.class)}`,vBt=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=v+m,E=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Ut.info("Question main (Circle)");const _=A5(f,b,b,E);return _.attr("style",a.style),Qh(a,_),a.intersect=function(L){return Ut.warn("Intersect called"),yh.polygon(a,E,L)},f},i$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=28,v=[{x:0,y:p/2},{x:p/2,y:0},{x:0,y:-p/2},{x:-p/2,y:0}];return f.insert("polygon",":first-child").attr("points",v.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),a.width=28,a.height=28,a.intersect=function(b){return yh.circle(a,14,b)},f},s$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=4,m=p.height+a.padding,b=m/v,E=p.width+2*b+a.padding,_=[{x:b,y:0},{x:E-b,y:0},{x:E,y:-m/2},{x:E-b,y:-m},{x:b,y:-m},{x:0,y:-m/2}],L=A5(f,E,m,_);return L.attr("style",a.style),Qh(a,L),a.intersect=function(N){return yh.polygon(a,_,N)},f},a$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-m/2,y:0},{x:v,y:0},{x:v,y:-m},{x:-m/2,y:-m},{x:0,y:-m/2}];return A5(f,v,m,b).attr("style",a.style),a.width=v+m,a.height=m,a.intersect=function(_){return yh.polygon(a,b,_)},f},o$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},c$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:2*m/6,y:0},{x:v+m/6,y:0},{x:v-2*m/6,y:-m},{x:-m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},u$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:-2*m/6,y:0},{x:v+2*m/6,y:0},{x:v-m/6,y:-m},{x:m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},l$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:m/6,y:0},{x:v-m/6,y:0},{x:v+2*m/6,y:-m},{x:-2*m/6,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},h$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v+m/2,y:0},{x:v,y:-m/2},{x:v+m/2,y:-m},{x:0,y:-m}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},f$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=v/2,b=m/(2.5+v/50),E=p.height+b+a.padding,_="M 0,"+b+" a "+m+","+b+" 0,0,0 "+v+" 0 a "+m+","+b+" 0,0,0 "+-v+" 0 l 0,"+E+" a "+m+","+b+" 0,0,0 "+v+" 0 l 0,"+-E,L=f.attr("label-offset-y",b).insert("path",":first-child").attr("style",a.style).attr("d",_).attr("transform","translate("+-v/2+","+-(E/2+b)+")");return Qh(a,L),a.intersect=function(N){const B=yh.rect(a,N),j=B.x-a.x;if(m!=0&&(Math.abs(j)a.height/2-b)){let R=b*b*(1-j*j/(m*m));R!=0&&(R=Math.sqrt(R)),R=b-R,N.y-a.y>0&&(R=-R),B.y+=R}return B},f},d$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,"node "+a.classes+" "+a.class,!0),m=f.insert("rect",":first-child"),b=p.width+a.padding,E=p.height+a.padding;if(m.attr("class","basic label-container").attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",-p.width/2-v).attr("y",-p.height/2-v).attr("width",b).attr("height",E),a.props){const _=new Set(Object.keys(a.props));a.props.borders&&(wBt(m,a.props.borders,b,E),_.delete("borders")),_.forEach(L=>{Ut.warn(`Unknown node property ${L}`)})}return Qh(a,m),a.intersect=function(_){return yh.rect(a,_)},f},g$e=async(i,a)=>{const{shapeSvg:f}=await Od(i,a,"label",!0);Ut.trace("Classes = ",a.class);const p=f.insert("rect",":first-child"),v=0,m=0;if(p.attr("width",v).attr("height",m),f.attr("class","label edgeLabel"),a.props){const b=new Set(Object.keys(a.props));a.props.borders&&(wBt(p,a.props.borders,v,m),b.delete("borders")),b.forEach(E=>{Ut.warn(`Unknown node property ${E}`)})}return Qh(a,p),a.intersect=function(b){return yh.rect(a,b)},f};function wBt(i,a,f,p){const v=[],m=E=>{v.push(E,0)},b=E=>{v.push(0,E)};a.includes("t")?(Ut.debug("add top border"),m(f)):b(f),a.includes("r")?(Ut.debug("add right border"),m(p)):b(p),a.includes("b")?(Ut.debug("add bottom border"),m(f)):b(f),a.includes("l")?(Ut.debug("add left border"),m(p)):b(p),i.attr("stroke-dasharray",v.join(" "))}const p$e=(i,a)=>{let f;a.classes?f="node "+a.classes:f="node default";const p=i.insert("g").attr("class",f).attr("id",a.domId||a.id),v=p.insert("rect",":first-child"),m=p.insert("line"),b=p.insert("g").attr("class","label"),E=a.labelText.flat?a.labelText.flat():a.labelText;let _="";typeof E=="object"?_=E[0]:_=E,Ut.info("Label text abc79",_,E,typeof E=="object");const L=b.node().appendChild(hp(_,a.labelStyle,!0,!0));let N={width:0,height:0};if(s1(Le().flowchart.htmlLabels)){const K=L.children[0],it=yr(L);N=K.getBoundingClientRect(),it.attr("width",N.width),it.attr("height",N.height)}Ut.info("Text 2",E);const B=E.slice(1,E.length);let j=L.getBBox();const R=b.node().appendChild(hp(B.join?B.join("
"):B,a.labelStyle,!0,!0));if(s1(Le().flowchart.htmlLabels)){const K=R.children[0],it=yr(R);N=K.getBoundingClientRect(),it.attr("width",N.width),it.attr("height",N.height)}const z=a.padding/2;return yr(R).attr("transform","translate( "+(N.width>j.width?0:(j.width-N.width)/2)+", "+(j.height+z+5)+")"),yr(L).attr("transform","translate( "+(N.width{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.height+a.padding,m=p.width+v/4+a.padding,b=f.insert("rect",":first-child").attr("style",a.style).attr("rx",v/2).attr("ry",v/2).attr("x",-m/2).attr("y",-v/2).attr("width",m).attr("height",v);return Qh(a,b),a.intersect=function(E){return yh.rect(a,E)},f},v$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Pb(a,void 0),!0),m=f.insert("circle",":first-child");return m.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("Circle main"),Qh(a,m),a.intersect=function(b){return Ut.info("Circle intersect",a,p.width/2+v,b),yh.circle(a,p.width/2+v,b)},f},w$e=async(i,a)=>{const{shapeSvg:f,bbox:p,halfPadding:v}=await Od(i,a,Pb(a,void 0),!0),m=5,b=f.insert("g",":first-child"),E=b.insert("circle"),_=b.insert("circle");return b.attr("class",a.class),E.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v+m).attr("width",p.width+a.padding+m*2).attr("height",p.height+a.padding+m*2),_.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("r",p.width/2+v).attr("width",p.width+a.padding).attr("height",p.height+a.padding),Ut.info("DoubleCircle main"),Qh(a,E),a.intersect=function(L){return Ut.info("DoubleCircle intersect",a,p.width/2+v+m,L),yh.circle(a,p.width/2+v+m,L)},f},m$e=async(i,a)=>{const{shapeSvg:f,bbox:p}=await Od(i,a,Pb(a,void 0),!0),v=p.width+a.padding,m=p.height+a.padding,b=[{x:0,y:0},{x:v,y:0},{x:v,y:-m},{x:0,y:-m},{x:0,y:0},{x:-8,y:0},{x:v+8,y:0},{x:v+8,y:-m},{x:-8,y:-m},{x:-8,y:0}],E=A5(f,v,m,b);return E.attr("style",a.style),Qh(a,E),a.intersect=function(_){return yh.polygon(a,b,_)},f},y$e=(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qh(a,p),a.intersect=function(v){return yh.circle(a,7,v)},f},mBt=(i,a,f)=>{const p=i.insert("g").attr("class","node default").attr("id",a.domId||a.id);let v=70,m=10;f==="LR"&&(v=10,m=70);const b=p.append("rect").attr("x",-1*v/2).attr("y",-1*m/2).attr("width",v).attr("height",m).attr("class","fork-join");return Qh(a,b),a.height=a.height+a.padding/2,a.width=a.width+a.padding/2,a.intersect=function(E){return yh.rect(a,E)},p},yBt={rhombus:vBt,question:vBt,rect:d$e,labelRect:g$e,rectWithTitle:p$e,choice:i$e,circle:v$e,doublecircle:w$e,stadium:b$e,hexagon:s$e,rect_left_inv_arrow:a$e,lean_right:o$e,lean_left:c$e,trapezoid:u$e,inv_trapezoid:l$e,rect_right_inv_arrow:h$e,cylinder:f$e,start:y$e,end:(i,a)=>{const f=i.insert("g").attr("class","node default").attr("id",a.domId||a.id),p=f.insert("circle",":first-child"),v=f.insert("circle",":first-child");return v.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),p.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qh(a,v),a.intersect=function(m){return yh.circle(a,7,m)},f},note:r$e,subroutine:m$e,fork:mBt,join:mBt,class_box:(i,a)=>{const f=a.padding/2,p=4,v=8;let m;a.classes?m="node "+a.classes:m="node default";const b=i.insert("g").attr("class",m).attr("id",a.domId||a.id),E=b.insert("rect",":first-child"),_=b.insert("line"),L=b.insert("line");let N=0,B=p;const j=b.insert("g").attr("class","label");let R=0;const z=a.classData.annotations&&a.classData.annotations[0],K=a.classData.annotations[0]?"«"+a.classData.annotations[0]+"»":"",it=j.node().appendChild(hp(K,a.labelStyle,!0,!0));let st=it.getBBox();if(s1(Le().flowchart.htmlLabels)){const wt=it.children[0],X=yr(it);st=wt.getBoundingClientRect(),X.attr("width",st.width),X.attr("height",st.height)}a.classData.annotations[0]&&(B+=st.height+p,N+=st.width);let ut=a.classData.label;a.classData.type!==void 0&&a.classData.type!==""&&(Le().flowchart.htmlLabels?ut+="<"+a.classData.type+">":ut+="<"+a.classData.type+">");const bt=j.node().appendChild(hp(ut,a.labelStyle,!0,!0));yr(bt).attr("class","classTitle");let mt=bt.getBBox();if(s1(Le().flowchart.htmlLabels)){const wt=bt.children[0],X=yr(bt);mt=wt.getBoundingClientRect(),X.attr("width",mt.width),X.attr("height",mt.height)}B+=mt.height+p,mt.width>N&&(N=mt.width);const yt=[];a.classData.members.forEach(wt=>{const X=wt.getDisplayDetails();let pt=X.displayText;Le().flowchart.htmlLabels&&(pt=pt.replace(//g,">"));const U=j.node().appendChild(hp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let xt=U.getBBox();if(s1(Le().flowchart.htmlLabels)){const nt=U.children[0],Ot=yr(U);xt=nt.getBoundingClientRect(),Ot.attr("width",xt.width),Ot.attr("height",xt.height)}xt.width>N&&(N=xt.width),B+=xt.height+p,yt.push(U)}),B+=v;const dt=[];if(a.classData.methods.forEach(wt=>{const X=wt.getDisplayDetails();let pt=X.displayText;Le().flowchart.htmlLabels&&(pt=pt.replace(//g,">"));const U=j.node().appendChild(hp(pt,X.cssStyle?X.cssStyle:a.labelStyle,!0,!0));let xt=U.getBBox();if(s1(Le().flowchart.htmlLabels)){const nt=U.children[0],Ot=yr(U);xt=nt.getBoundingClientRect(),Ot.attr("width",xt.width),Ot.attr("height",xt.height)}xt.width>N&&(N=xt.width),B+=xt.height+p,dt.push(U)}),B+=v,z){let wt=(N-st.width)/2;yr(it).attr("transform","translate( "+(-1*N/2+wt)+", "+-1*B/2+")"),R=st.height+p}let ht=(N-mt.width)/2;return yr(bt).attr("transform","translate( "+(-1*N/2+ht)+", "+(-1*B/2+R)+")"),R+=mt.height+p,_.attr("class","divider").attr("x1",-N/2-f).attr("x2",N/2+f).attr("y1",-B/2-f+v+R).attr("y2",-B/2-f+v+R),R+=v,yt.forEach(wt=>{yr(wt).attr("transform","translate( "+-N/2+", "+(-1*B/2+R+v/2)+")");const X=wt==null?void 0:wt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),R+=v,L.attr("class","divider").attr("x1",-N/2-f).attr("x2",N/2+f).attr("y1",-B/2-f+v+R).attr("y2",-B/2-f+v+R),R+=v,dt.forEach(wt=>{yr(wt).attr("transform","translate( "+-N/2+", "+(-1*B/2+R)+")");const X=wt==null?void 0:wt.getBBox();R+=((X==null?void 0:X.height)??0)+p}),E.attr("class","outer title-state").attr("x",-N/2-f).attr("y",-(B/2)-f).attr("width",N+a.padding).attr("height",B+a.padding),Qh(a,E),a.intersect=function(wt){return yh.rect(a,wt)},b}};let rL={};const xBt=async(i,a,f)=>{let p,v;if(a.link){let m;Le().securityLevel==="sandbox"?m="_top":a.linkTarget&&(m=a.linkTarget||"_blank"),p=i.insert("svg:a").attr("xlink:href",a.link).attr("target",m),v=await yBt[a.shape](p,a,f)}else v=await yBt[a.shape](i,a,f),p=v;return a.tooltip&&v.attr("title",a.tooltip),a.class&&v.attr("class","node default "+a.class),rL[a.id]=p,a.haveCallback&&rL[a.id].attr("class",rL[a.id].attr("class")+" clickable"),p},x$e=(i,a)=>{rL[a.id]=i},k$e=()=>{rL={}},kBt=i=>{const a=rL[i.id];Ut.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const f=8,p=i.diff||0;return i.clusterNode?a.attr("transform","translate("+(i.x+p-i.width/2)+", "+(i.y-i.height/2-f)+")"):a.attr("transform","translate("+i.x+", "+i.y+")"),p},E$e={rect:(i,a)=>{Ut.info("Creating subgraph rect for ",a.id,a);const f=i.insert("g").attr("class","cluster"+(a.class?" "+a.class:"")).attr("id",a.id),p=f.insert("rect",":first-child"),v=s1(Le().flowchart.htmlLabels),m=f.insert("g").attr("class","cluster-label"),b=a.labelType==="markdown"?dK(m,a.labelText,{style:a.labelStyle,useHtmlLabels:v}):m.node().appendChild(hp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(s1(Le().flowchart.htmlLabels)){const j=b.children[0],R=yr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}const _=0*a.padding,L=_/2,N=a.width<=E.width+_?E.width+_:a.width;a.width<=E.width+_?a.diff=(E.width-a.width)/2-a.padding/2:a.diff=-a.padding/2,Ut.trace("Data ",a,JSON.stringify(a)),p.attr("style",a.style).attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-N/2).attr("y",a.y-a.height/2-L).attr("width",N).attr("height",a.height+_),v?m.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2)+")"):m.attr("transform","translate("+a.x+", "+(a.y-a.height/2)+")");const B=p.node().getBBox();return a.width=B.width,a.height=B.height,a.intersect=function(j){return mP(a,j)},f},roundedWithTitle:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=f.insert("g").attr("class","cluster-label"),m=f.append("rect"),b=v.node().appendChild(hp(a.labelText,a.labelStyle,void 0,!0));let E=b.getBBox();if(s1(Le().flowchart.htmlLabels)){const j=b.children[0],R=yr(b);E=j.getBoundingClientRect(),R.attr("width",E.width),R.attr("height",E.height)}E=b.getBBox();const _=0*a.padding,L=_/2,N=a.width<=E.width+a.padding?E.width+a.padding:a.width;a.width<=E.width+a.padding?a.diff=(E.width+a.padding*0-a.width)/2:a.diff=-a.padding/2,p.attr("class","outer").attr("x",a.x-N/2-L).attr("y",a.y-a.height/2-L).attr("width",N+_).attr("height",a.height+_),m.attr("class","inner").attr("x",a.x-N/2-L).attr("y",a.y-a.height/2-L+E.height-1).attr("width",N+_).attr("height",a.height+_-E.height-3),v.attr("transform","translate("+(a.x-E.width/2)+", "+(a.y-a.height/2-a.padding/3+(s1(Le().flowchart.htmlLabels)?5:3))+")");const B=p.node().getBBox();return a.height=B.height,a.intersect=function(j){return mP(a,j)},f},noteGroup:(i,a)=>{const f=i.insert("g").attr("class","note-cluster").attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("rx",a.rx).attr("ry",a.ry).attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2-m).attr("width",a.width+v).attr("height",a.height+v).attr("fill","none");const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.intersect=function(E){return mP(a,E)},f},divider:(i,a)=>{const f=i.insert("g").attr("class",a.classes).attr("id",a.id),p=f.insert("rect",":first-child"),v=0*a.padding,m=v/2;p.attr("class","divider").attr("x",a.x-a.width/2-m).attr("y",a.y-a.height/2).attr("width",a.width+v).attr("height",a.height+v);const b=p.node().getBBox();return a.width=b.width,a.height=b.height,a.diff=-a.padding/2,a.intersect=function(E){return mP(a,E)},f}};let EBt={};const T$e=(i,a)=>{Ut.trace("Inserting cluster");const f=a.shape||"rect";EBt[a.id]=E$e[f](i,a)},C$e=()=>{EBt={}},lk={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function bK(i,a){i=vK(i),a=vK(a);const[f,p]=[i.x,i.y],[v,m]=[a.x,a.y],b=v-f,E=m-p;return{angle:Math.atan(E/b),deltaX:b,deltaY:E}}const vK=i=>Array.isArray(i)?{x:i[0],y:i[1]}:i,TBt=i=>({x:function(a,f,p){let v=0;if(f===0&&Object.hasOwn(lk,i.arrowTypeStart)){const{angle:m,deltaX:b}=bK(p[0],p[1]);v=lk[i.arrowTypeStart]*Math.cos(m)*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(lk,i.arrowTypeEnd)){const{angle:m,deltaX:b}=bK(p[p.length-1],p[p.length-2]);v=lk[i.arrowTypeEnd]*Math.cos(m)*(b>=0?1:-1)}return vK(a).x+v},y:function(a,f,p){let v=0;if(f===0&&Object.hasOwn(lk,i.arrowTypeStart)){const{angle:m,deltaY:b}=bK(p[0],p[1]);v=lk[i.arrowTypeStart]*Math.abs(Math.sin(m))*(b>=0?1:-1)}else if(f===p.length-1&&Object.hasOwn(lk,i.arrowTypeEnd)){const{angle:m,deltaY:b}=bK(p[p.length-1],p[p.length-2]);v=lk[i.arrowTypeEnd]*Math.abs(Math.sin(m))*(b>=0?1:-1)}return vK(a).y+v}});let wK={},Nd={};const _$e=()=>{wK={},Nd={}},CBt=(i,a)=>{const f=s1(Le().flowchart.htmlLabels),p=a.labelType==="markdown"?dK(i,a.label,{style:a.labelStyle,useHtmlLabels:f,addSvgBackground:!0}):hp(a.label,a.labelStyle);Ut.info("abc82",a,a.labelType);const v=i.insert("g").attr("class","edgeLabel"),m=v.insert("g").attr("class","label");m.node().appendChild(p);let b=p.getBBox();if(f){const _=p.children[0],L=yr(p);b=_.getBoundingClientRect(),L.attr("width",b.width),L.attr("height",b.height)}m.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),wK[a.id]=v,a.width=b.width,a.height=b.height;let E;if(a.startLabelLeft){const _=hp(a.startLabelLeft,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startLeft=L,mK(E,a.startLabelLeft)}if(a.startLabelRight){const _=hp(a.startLabelRight,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=L.node().appendChild(_),N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].startRight=L,mK(E,a.startLabelRight)}if(a.endLabelLeft){const _=hp(a.endLabelLeft,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),L.node().appendChild(_),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endLeft=L,mK(E,a.endLabelLeft)}if(a.endLabelRight){const _=hp(a.endLabelRight,a.labelStyle),L=i.insert("g").attr("class","edgeTerminals"),N=L.insert("g").attr("class","inner");E=N.node().appendChild(_);const B=_.getBBox();N.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),L.node().appendChild(_),Nd[a.id]||(Nd[a.id]={}),Nd[a.id].endRight=L,mK(E,a.endLabelRight)}return p};function mK(i,a){Le().flowchart.htmlLabels&&i&&(i.style.width=a.length*9+"px",i.style.height="12px")}const S$e=(i,a)=>{Ut.info("Moving label abc78 ",i.id,i.label,wK[i.id]);let f=a.updatedPath?a.updatedPath:a.originalPath;if(i.label){const p=wK[i.id];let v=i.x,m=i.y;if(f){const b=$a.calcLabelPosition(f);Ut.info("Moving label "+i.label+" from (",v,",",m,") to (",b.x,",",b.y,") abc78"),a.updatedPath&&(v=b.x,m=b.y)}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelLeft){const p=Nd[i.id].startLeft;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.startLabelRight){const p=Nd[i.id].startRight;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelLeft){const p=Nd[i.id].endLeft;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}if(i.endLabelRight){const p=Nd[i.id].endRight;let v=i.x,m=i.y;if(f){const b=$a.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",f);v=b.x,m=b.y}p.attr("transform","translate("+v+", "+m+")")}},A$e=(i,a)=>{const f=i.x,p=i.y,v=Math.abs(a.x-f),m=Math.abs(a.y-p),b=i.width/2,E=i.height/2;return v>=b||m>=E},L$e=(i,a,f)=>{Ut.warn(`intersection calc abc89: outsidePoint: ${JSON.stringify(a)} insidePoint : ${JSON.stringify(f)} - node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const p=i.x,v=i.y,m=Math.abs(p-f.x),b=i.width/2;let E=f.xMath.abs(p-a.x)*C){let F=f.y{Wt.warn("abc88 cutPathAtIntersect",i,a);let f=[],p=i[0],v=!1;return i.forEach(m=>{if(Wt.info("abc88 checking point",m,a),!E$e(a,m)&&!v){const b=T$e(a,p,m);Wt.warn("abc88 inside",m,p,b),Wt.warn("abc88 intersection",b);let E=!1;f.forEach(C=>{E=E||C.x===b.x&&C.y===b.y}),f.some(C=>C.x===b.x&&C.y===b.y)?Wt.warn("abc88 no intersect",b,f):f.push(b),v=!0}else Wt.warn("abc88 outside",m,p),p=m,v||f.push(m)}),Wt.warn("abc88 returning points",f),f},_$e=function(i,a,f,p,v,m){let b=f.points,E=!1;const C=m.node(a.v);var A=m.node(a.w);Wt.info("abc88 InsertEdge: ",f),A.intersect&&C.intersect&&(b=b.slice(1,f.points.length-1),b.unshift(C.intersect(b[0])),Wt.info("Last point",b[b.length-1],A,A.intersect(b[b.length-1])),b.push(A.intersect(b[b.length-1]))),f.toCluster&&(Wt.info("to cluster abc88",p[f.toCluster]),b=LBt(f.points,p[f.toCluster].node),E=!0),f.fromCluster&&(Wt.info("from cluster abc88",p[f.fromCluster]),b=LBt(b.reverse(),p[f.fromCluster].node).reverse(),E=!0);const P=b.filter(J=>!Number.isNaN(J.y));let F;v==="graph"||v==="flowchart"?F=f.curve||MA:F=MA;const j=YE().x(function(J){return J.x}).y(function(J){return J.y}).curve(F);let R;switch(f.thickness){case"normal":R="edge-thickness-normal";break;case"thick":R="edge-thickness-thick";break;case"invisible":R="edge-thickness-thick";break;default:R=""}switch(f.pattern){case"solid":R+=" edge-pattern-solid";break;case"dotted":R+=" edge-pattern-dotted";break;case"dashed":R+=" edge-pattern-dashed";break}const H=i.append("path").attr("d",j(P)).attr("id",f.id).attr("class"," "+R+(f.classes?" "+f.classes:"")).attr("style",f.style);let Y="";switch((De().flowchart.arrowMarkerAbsolute||De().state.arrowMarkerAbsolute)&&(Y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,Y=Y.replace(/\(/g,"\\("),Y=Y.replace(/\)/g,"\\)")),Wt.info("arrowTypeStart",f.arrowTypeStart),Wt.info("arrowTypeEnd",f.arrowTypeEnd),f.arrowTypeStart){case"arrow_cross":H.attr("marker-start","url("+Y+"#"+v+"-crossStart)");break;case"arrow_point":H.attr("marker-start","url("+Y+"#"+v+"-pointStart)");break;case"arrow_barb":H.attr("marker-start","url("+Y+"#"+v+"-barbStart)");break;case"arrow_circle":H.attr("marker-start","url("+Y+"#"+v+"-circleStart)");break;case"aggregation":H.attr("marker-start","url("+Y+"#"+v+"-aggregationStart)");break;case"extension":H.attr("marker-start","url("+Y+"#"+v+"-extensionStart)");break;case"composition":H.attr("marker-start","url("+Y+"#"+v+"-compositionStart)");break;case"dependency":H.attr("marker-start","url("+Y+"#"+v+"-dependencyStart)");break;case"lollipop":H.attr("marker-start","url("+Y+"#"+v+"-lollipopStart)");break}switch(f.arrowTypeEnd){case"arrow_cross":H.attr("marker-end","url("+Y+"#"+v+"-crossEnd)");break;case"arrow_point":H.attr("marker-end","url("+Y+"#"+v+"-pointEnd)");break;case"arrow_barb":H.attr("marker-end","url("+Y+"#"+v+"-barbEnd)");break;case"arrow_circle":H.attr("marker-end","url("+Y+"#"+v+"-circleEnd)");break;case"aggregation":H.attr("marker-end","url("+Y+"#"+v+"-aggregationEnd)");break;case"extension":H.attr("marker-end","url("+Y+"#"+v+"-extensionEnd)");break;case"composition":H.attr("marker-end","url("+Y+"#"+v+"-compositionEnd)");break;case"dependency":H.attr("marker-end","url("+Y+"#"+v+"-dependencyEnd)");break;case"lollipop":H.attr("marker-end","url("+Y+"#"+v+"-lollipopEnd)");break}let rt={};return E&&(rt.updatedPath=b),rt.originalPath=f.points,rt},MBt=async(i,a,f,p)=>{Wt.info("Graph in recursive render: XXX",A5(a),p);const v=a.graph().rankdir;Wt.trace("Dir in recursive render - dir:",v);const m=i.insert("g").attr("class","root");a.nodes()?Wt.info("Recursive render XXX",a.nodes()):Wt.info("No nodes found for",a),a.edges().length>0&&Wt.trace("Recursive edges",a.edge(a.edges()[0]));const b=m.insert("g").attr("class","clusters"),E=m.insert("g").attr("class","edgePaths"),C=m.insert("g").attr("class","edgeLabels"),A=m.insert("g").attr("class","nodes");await Promise.all(a.nodes().map(async function(F){const j=a.node(F);if(p!==void 0){const R=JSON.parse(JSON.stringify(p.clusterData));Wt.info("Setting data for cluster XXX (",F,") ",R,p),a.setNode(p.id,R),a.parent(F)||(Wt.trace("Setting parent",F,p.id),a.setParent(F,p.id,R))}if(Wt.info("(Insert) Node XXX"+F+": "+JSON.stringify(a.node(F))),j&&j.clusterNode){Wt.info("Cluster identified",F,j.width,a.node(F));const R=await MBt(A,j.graph,f,a.node(F)),H=R.elem;ef(j,H),j.diff=R.diff||0,Wt.info("Node bounds (abc123)",F,j,j.width,j.x,j.y),b$e(H,j),Wt.warn("Recursive render complete ",H,j)}else a.children(F).length>0?(Wt.info("Cluster - the non recursive path XXX",F,j.id,j,a),Wt.info(wP(j.id,a)),Xo[j.id]={id:wP(j.id,a),node:j}):(Wt.info("Node - the non recursive path",F,j.id,j),await _Bt(A,a.node(F),v))})),a.edges().forEach(function(F){const j=a.edge(F.v,F.w,F.name);Wt.info("Edge "+F.v+" -> "+F.w+": "+JSON.stringify(F)),Wt.info("Edge "+F.v+" -> "+F.w+": ",F," ",JSON.stringify(a.edge(F))),Wt.info("Fix",Xo,"ids:",F.v,F.w,"Translateing: ",Xo[F.v],Xo[F.w]),ABt(C,j)}),a.edges().forEach(function(F){Wt.info("Edge "+F.v+" -> "+F.w+": "+JSON.stringify(F))}),Wt.info("#############################################"),Wt.info("### Layout ###"),Wt.info("#############################################"),Wt.info(a),nL(a),Wt.info("Graph after layout:",A5(a));let P=0;return Vje(a).forEach(function(F){const j=a.node(F);Wt.info("Position "+F+": "+JSON.stringify(a.node(F))),Wt.info("Position "+F+": ("+j.x,","+j.y,") width: ",j.width," height: ",j.height),j&&j.clusterNode?CBt(j):a.children(F).length>0?(m$e(b,j),Xo[j.id].node=j):CBt(j)}),a.edges().forEach(function(F){const j=a.edge(F);Wt.info("Edge "+F.v+" -> "+F.w+": "+JSON.stringify(j),j);const R=_$e(E,F,j,Xo,f,a);k$e(j,R)}),a.nodes().forEach(function(F){const j=a.node(F);Wt.info(F,j.type,j.diff),j.type==="group"&&(P=j.diff)}),{elem:m,diff:P}},A0t=async(i,a,f,p,v)=>{DFt(i,f,p,v),v$e(),x$e(),y$e(),zje(),Wt.warn("Graph at first:",A5(a)),Hje(a),Wt.warn("Graph after:",A5(a)),await MBt(i,a,p)},DBt={},C$e=function(i){const a=Object.keys(i);for(const f of a)DBt[f]=i[f]},IBt=function(i,a,f,p,v,m){const b=p.select(`[id="${f}"]`);Object.keys(i).forEach(function(C){const A=i[C];let P="default";A.classes.length>0&&(P=A.classes.join(" ")),P=P+" flowchart-label";const F=em(A.styles);let j=A.text!==void 0?A.text:A.id,R;if(Wt.info("vertex",A,A.labelType),A.labelType==="markdown")Wt.info("vertex",A,A.labelType);else if(u1(De().flowchart.htmlLabels)){const rt={label:j.replace(/fa[blrs]?:fa-[\w-]+/g,J=>``)};R=u0t(b,rt).node(),R.parentNode.removeChild(R)}else{const rt=v.createElementNS("http://www.w3.org/2000/svg","text");rt.setAttribute("style",F.labelStyle.replace("color:","fill:"));const J=j.split(ui.lineBreakRegex);for(const it of J){const ft=v.createElementNS("http://www.w3.org/2000/svg","tspan");ft.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),ft.setAttribute("dy","1em"),ft.setAttribute("x","1"),ft.textContent=it,rt.appendChild(ft)}R=rt}let H=0,Y="";switch(A.type){case"round":H=5,Y="rect";break;case"square":Y="rect";break;case"diamond":Y="question";break;case"hexagon":Y="hexagon";break;case"odd":Y="rect_left_inv_arrow";break;case"lean_right":Y="lean_right";break;case"lean_left":Y="lean_left";break;case"trapezoid":Y="trapezoid";break;case"inv_trapezoid":Y="inv_trapezoid";break;case"odd_right":Y="rect_left_inv_arrow";break;case"circle":Y="circle";break;case"ellipse":Y="ellipse";break;case"stadium":Y="stadium";break;case"subroutine":Y="subroutine";break;case"cylinder":Y="cylinder";break;case"group":Y="rect";break;case"doublecircle":Y="doublecircle";break;default:Y="rect"}a.setNode(A.id,{labelStyle:F.labelStyle,shape:Y,labelText:j,labelType:A.labelType,rx:H,ry:H,class:P,style:F.style,id:A.id,link:A.link,linkTarget:A.linkTarget,tooltip:m.db.getTooltip(A.id)||"",domId:m.db.lookUpDomId(A.id),haveCallback:A.haveCallback,width:A.type==="group"?500:void 0,dir:A.dir,type:A.type,props:A.props,padding:De().flowchart.padding}),Wt.info("setNode",{labelStyle:F.labelStyle,labelType:A.labelType,shape:Y,labelText:j,rx:H,ry:H,class:P,style:F.style,id:A.id,domId:m.db.lookUpDomId(A.id),width:A.type==="group"?500:void 0,type:A.type,dir:A.dir,props:A.props,padding:De().flowchart.padding})})},OBt=function(i,a,f){Wt.info("abc78 edges = ",i);let p=0,v={},m,b;if(i.defaultStyle!==void 0){const E=em(i.defaultStyle);m=E.style,b=E.labelStyle}i.forEach(function(E){p++;const C="L-"+E.start+"-"+E.end;v[C]===void 0?(v[C]=0,Wt.info("abc78 new entry",C,v[C])):(v[C]++,Wt.info("abc78 new entry",C,v[C]));let A=C+"-"+v[C];Wt.info("abc78 new link id to be used is",C,A,v[C]);const P="LS-"+E.start,F="LE-"+E.end,j={style:"",labelStyle:""};switch(j.minlen=E.length||1,E.type==="arrow_open"?j.arrowhead="none":j.arrowhead="normal",j.arrowTypeStart="arrow_open",j.arrowTypeEnd="arrow_open",E.type){case"double_arrow_cross":j.arrowTypeStart="arrow_cross";case"arrow_cross":j.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":j.arrowTypeStart="arrow_point";case"arrow_point":j.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":j.arrowTypeStart="arrow_circle";case"arrow_circle":j.arrowTypeEnd="arrow_circle";break}let R="",H="";switch(E.stroke){case"normal":R="fill:none;",m!==void 0&&(R=m),b!==void 0&&(H=b),j.thickness="normal",j.pattern="solid";break;case"dotted":j.thickness="normal",j.pattern="dotted",j.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":j.thickness="thick",j.pattern="solid",j.style="stroke-width: 3.5px;fill:none;";break;case"invisible":j.thickness="invisible",j.pattern="solid",j.style="stroke-width: 0;fill:none;";break}if(E.style!==void 0){const Y=em(E.style);R=Y.style,H=Y.labelStyle}j.style=j.style+=R,j.labelStyle=j.labelStyle+=H,E.interpolate!==void 0?j.curve=Z2(E.interpolate,ig):i.defaultInterpolate!==void 0?j.curve=Z2(i.defaultInterpolate,ig):j.curve=Z2(DBt.curve,ig),E.text===void 0?E.style!==void 0&&(j.arrowheadStyle="fill: #333"):(j.arrowheadStyle="fill: #333",j.labelpos="c"),j.labelType=E.labelType,j.label=E.text.replace(ui.lineBreakRegex,` -`),E.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=A,j.classes="flowchart-link "+P+" "+F,a.setEdge(E.start,E.end,j,p)})},L0t={setConf:C$e,addVertices:IBt,addEdges:OBt,getClasses:function(i,a){return a.db.getClasses()},draw:async function(i,a,f,p){Wt.info("Drawing flowchart");let v=p.db.getDirection();v===void 0&&(v="TD");const{securityLevel:m,flowchart:b}=De(),E=b.nodeSpacing||50,C=b.rankSpacing||50;let A;m==="sandbox"&&(A=xr("#i"+a));const P=xr(m==="sandbox"?A.nodes()[0].contentDocument.body:"body"),F=m==="sandbox"?A.nodes()[0].contentDocument:document,j=new l1({multigraph:!0,compound:!0}).setGraph({rankdir:v,nodesep:E,ranksep:C,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let R;const H=p.db.getSubGraphs();Wt.info("Subgraphs - ",H);for(let kt=H.length-1;kt>=0;kt--)R=H[kt],Wt.info("Subgraph - ",R),p.db.addVertex(R.id,{text:R.title,type:R.labelType},"group",void 0,R.classes,R.dir);const Y=p.db.getVertices(),rt=p.db.getEdges();Wt.info("Edges",rt);let J=0;for(J=H.length-1;J>=0;J--){R=H[J],YLt("cluster").append("text");for(let kt=0;kt{const f=F9e,p=f(i,"r"),v=f(i,"g"),m=f(i,"b");return IA(p,v,m,a)},NBt=i=>`.label { + node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const p=i.x,v=i.y,m=Math.abs(p-f.x),b=i.width/2;let E=f.xMath.abs(p-a.x)*_){let B=f.y{Ut.warn("abc88 cutPathAtIntersect",i,a);let f=[],p=i[0],v=!1;return i.forEach(m=>{if(Ut.info("abc88 checking point",m,a),!A$e(a,m)&&!v){const b=L$e(a,p,m);Ut.warn("abc88 inside",m,p,b),Ut.warn("abc88 intersection",b);let E=!1;f.forEach(_=>{E=E||_.x===b.x&&_.y===b.y}),f.some(_=>_.x===b.x&&_.y===b.y)?Ut.warn("abc88 no intersect",b,f):f.push(b),v=!0}else Ut.warn("abc88 outside",m,p),p=m,v||f.push(m)}),Ut.warn("abc88 returning points",f),f},M$e=function(i,a,f,p,v,m,b){let E=f.points,_=!1;const L=m.node(a.v);var N=m.node(a.w);Ut.info("abc88 InsertEdge: ",f),N.intersect&&L.intersect&&(E=E.slice(1,f.points.length-1),E.unshift(L.intersect(E[0])),Ut.info("Last point",E[E.length-1],N,N.intersect(E[E.length-1])),E.push(N.intersect(E[E.length-1]))),f.toCluster&&(Ut.info("to cluster abc88",p[f.toCluster]),E=_Bt(f.points,p[f.toCluster].node),_=!0),f.fromCluster&&(Ut.info("from cluster abc88",p[f.fromCluster]),E=_Bt(E.reverse(),p[f.fromCluster].node).reverse(),_=!0);const B=E.filter(mt=>!Number.isNaN(mt.y));let j=FN;f.curve&&(v==="graph"||v==="flowchart")&&(j=f.curve);const{x:R,y:z}=TBt(f),K=Z7().x(R).y(z).curve(j);let it;switch(f.thickness){case"normal":it="edge-thickness-normal";break;case"thick":it="edge-thickness-thick";break;case"invisible":it="edge-thickness-thick";break;default:it=""}switch(f.pattern){case"solid":it+=" edge-pattern-solid";break;case"dotted":it+=" edge-pattern-dotted";break;case"dashed":it+=" edge-pattern-dashed";break}const st=i.append("path").attr("d",K(B)).attr("id",f.id).attr("class"," "+it+(f.classes?" "+f.classes:"")).attr("style",f.style);let ut="";switch((Le().flowchart.arrowMarkerAbsolute||Le().state.arrowMarkerAbsolute)&&(ut=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,ut=ut.replace(/\(/g,"\\("),ut=ut.replace(/\)/g,"\\)")),Ut.info("arrowTypeStart",f.arrowTypeStart),Ut.info("arrowTypeEnd",f.arrowTypeEnd),f.arrowTypeStart){case"arrow_cross":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-crossStart)");break;case"arrow_point":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-pointStart)");break;case"arrow_barb":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-barbStart)");break;case"arrow_circle":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-circleStart)");break;case"aggregation":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-aggregationStart)");break;case"extension":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-extensionStart)");break;case"composition":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-compositionStart)");break;case"dependency":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-dependencyStart)");break;case"lollipop":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-lollipopStart)");break}switch(f.arrowTypeEnd){case"arrow_cross":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-crossEnd)");break;case"arrow_point":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-pointEnd)");break;case"arrow_barb":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-barbEnd)");break;case"arrow_circle":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-circleEnd)");break;case"aggregation":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-aggregationEnd)");break;case"extension":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-extensionEnd)");break;case"composition":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-compositionEnd)");break;case"dependency":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-dependencyEnd)");break;case"lollipop":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-lollipopEnd)");break}let bt={};return _&&(bt.updatedPath=E),bt.originalPath=f.points,bt},SBt=async(i,a,f,p,v)=>{Ut.info("Graph in recursive render: XXX",S5(a),v);const m=a.graph().rankdir;Ut.trace("Dir in recursive render - dir:",m);const b=i.insert("g").attr("class","root");a.nodes()?Ut.info("Recursive render XXX",a.nodes()):Ut.info("No nodes found for",a),a.edges().length>0&&Ut.trace("Recursive edges",a.edge(a.edges()[0]));const E=b.insert("g").attr("class","clusters"),_=b.insert("g").attr("class","edgePaths"),L=b.insert("g").attr("class","edgeLabels"),N=b.insert("g").attr("class","nodes");await Promise.all(a.nodes().map(async function(j){const R=a.node(j);if(v!==void 0){const z=JSON.parse(JSON.stringify(v.clusterData));Ut.info("Setting data for cluster XXX (",j,") ",z,v),a.setNode(v.id,z),a.parent(j)||(Ut.trace("Setting parent",j,v.id),a.setParent(j,v.id,z))}if(Ut.info("(Insert) Node XXX"+j+": "+JSON.stringify(a.node(j))),R&&R.clusterNode){Ut.info("Cluster identified",j,R.width,a.node(j));const z=await SBt(N,R.graph,f,p,a.node(j)),K=z.elem;Qh(R,K),R.diff=z.diff||0,Ut.info("Node bounds (abc123)",j,R,R.width,R.x,R.y),x$e(K,R),Ut.warn("Recursive render complete ",K,R)}else a.children(j).length>0?(Ut.info("Cluster - the non recursive path XXX",j,R.id,R,a),Ut.info(wP(R.id,a)),Ho[R.id]={id:wP(R.id,a),node:R}):(Ut.info("Node - the non recursive path",j,R.id,R),await xBt(N,a.node(j),m))})),a.edges().forEach(function(j){const R=a.edge(j.v,j.w,j.name);Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j)),Ut.info("Edge "+j.v+" -> "+j.w+": ",j," ",JSON.stringify(a.edge(j))),Ut.info("Fix",Ho,"ids:",j.v,j.w,"Translateing: ",Ho[j.v],Ho[j.w]),CBt(L,R)}),a.edges().forEach(function(j){Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j))}),Ut.info("#############################################"),Ut.info("### Layout ###"),Ut.info("#############################################"),Ut.info(a),eL(a),Ut.info("Graph after layout:",S5(a));let B=0;return Zje(a).forEach(function(j){const R=a.node(j);Ut.info("Position "+j+": "+JSON.stringify(a.node(j))),Ut.info("Position "+j+": ("+R.x,","+R.y,") width: ",R.width," height: ",R.height),R&&R.clusterNode?kBt(R):a.children(j).length>0?(T$e(E,R),Ho[R.id].node=R):kBt(R)}),a.edges().forEach(function(j){const R=a.edge(j);Ut.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(R),R);const z=M$e(_,j,R,Ho,f,a,p);S$e(R,z)}),a.nodes().forEach(function(j){const R=a.node(j);Ut.info(j,R.type,R.diff),R.type==="group"&&(B=R.diff)}),{elem:b,diff:B}},I0t=async(i,a,f,p,v)=>{IFt(i,f,p,v),k$e(),_$e(),C$e(),Yje(),Ut.warn("Graph at first:",JSON.stringify(S5(a))),Qje(a),Ut.warn("Graph after:",JSON.stringify(S5(a))),await SBt(i,a,p,v)},ABt={},I$e=function(i){const a=Object.keys(i);for(const f of a)ABt[f]=i[f]},LBt=function(i,a,f,p,v,m){const b=p.select(`[id="${f}"]`);Object.keys(i).forEach(function(_){const L=i[_];let N="default";L.classes.length>0&&(N=L.classes.join(" ")),N=N+" flowchart-label";const B=em(L.styles);let j=L.text!==void 0?L.text:L.id,R;if(Ut.info("vertex",L,L.labelType),L.labelType==="markdown")Ut.info("vertex",L,L.labelType);else if(s1(Le().flowchart.htmlLabels)){const it={label:j.replace(/fa[blrs]?:fa-[\w-]+/g,st=>``)};R=d0t(b,it).node(),R.parentNode.removeChild(R)}else{const it=v.createElementNS("http://www.w3.org/2000/svg","text");it.setAttribute("style",B.labelStyle.replace("color:","fill:"));const st=j.split(Yr.lineBreakRegex);for(const ut of st){const bt=v.createElementNS("http://www.w3.org/2000/svg","tspan");bt.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),bt.setAttribute("dy","1em"),bt.setAttribute("x","1"),bt.textContent=ut,it.appendChild(bt)}R=it}let z=0,K="";switch(L.type){case"round":z=5,K="rect";break;case"square":K="rect";break;case"diamond":K="question";break;case"hexagon":K="hexagon";break;case"odd":K="rect_left_inv_arrow";break;case"lean_right":K="lean_right";break;case"lean_left":K="lean_left";break;case"trapezoid":K="trapezoid";break;case"inv_trapezoid":K="inv_trapezoid";break;case"odd_right":K="rect_left_inv_arrow";break;case"circle":K="circle";break;case"ellipse":K="ellipse";break;case"stadium":K="stadium";break;case"subroutine":K="subroutine";break;case"cylinder":K="cylinder";break;case"group":K="rect";break;case"doublecircle":K="doublecircle";break;default:K="rect"}a.setNode(L.id,{labelStyle:B.labelStyle,shape:K,labelText:j,labelType:L.labelType,rx:z,ry:z,class:N,style:B.style,id:L.id,link:L.link,linkTarget:L.linkTarget,tooltip:m.db.getTooltip(L.id)||"",domId:m.db.lookUpDomId(L.id),haveCallback:L.haveCallback,width:L.type==="group"?500:void 0,dir:L.dir,type:L.type,props:L.props,padding:Le().flowchart.padding}),Ut.info("setNode",{labelStyle:B.labelStyle,labelType:L.labelType,shape:K,labelText:j,rx:z,ry:z,class:N,style:B.style,id:L.id,domId:m.db.lookUpDomId(L.id),width:L.type==="group"?500:void 0,type:L.type,dir:L.dir,props:L.props,padding:Le().flowchart.padding})})},MBt=function(i,a,f){Ut.info("abc78 edges = ",i);let p=0,v={},m,b;if(i.defaultStyle!==void 0){const E=em(i.defaultStyle);m=E.style,b=E.labelStyle}i.forEach(function(E){p++;const _="L-"+E.start+"-"+E.end;v[_]===void 0?(v[_]=0,Ut.info("abc78 new entry",_,v[_])):(v[_]++,Ut.info("abc78 new entry",_,v[_]));let L=_+"-"+v[_];Ut.info("abc78 new link id to be used is",_,L,v[_]);const N="LS-"+E.start,B="LE-"+E.end,j={style:"",labelStyle:""};switch(j.minlen=E.length||1,E.type==="arrow_open"?j.arrowhead="none":j.arrowhead="normal",j.arrowTypeStart="arrow_open",j.arrowTypeEnd="arrow_open",E.type){case"double_arrow_cross":j.arrowTypeStart="arrow_cross";case"arrow_cross":j.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":j.arrowTypeStart="arrow_point";case"arrow_point":j.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":j.arrowTypeStart="arrow_circle";case"arrow_circle":j.arrowTypeEnd="arrow_circle";break}let R="",z="";switch(E.stroke){case"normal":R="fill:none;",m!==void 0&&(R=m),b!==void 0&&(z=b),j.thickness="normal",j.pattern="solid";break;case"dotted":j.thickness="normal",j.pattern="dotted",j.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":j.thickness="thick",j.pattern="solid",j.style="stroke-width: 3.5px;fill:none;";break;case"invisible":j.thickness="invisible",j.pattern="solid",j.style="stroke-width: 0;fill:none;";break}if(E.style!==void 0){const K=em(E.style);R=K.style,z=K.labelStyle}j.style=j.style+=R,j.labelStyle=j.labelStyle+=z,E.interpolate!==void 0?j.curve=X2(E.interpolate,ig):i.defaultInterpolate!==void 0?j.curve=X2(i.defaultInterpolate,ig):j.curve=X2(ABt.curve,ig),E.text===void 0?E.style!==void 0&&(j.arrowheadStyle="fill: #333"):(j.arrowheadStyle="fill: #333",j.labelpos="c"),j.labelType=E.labelType,j.label=E.text.replace(Yr.lineBreakRegex,` +`),E.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=L,j.classes="flowchart-link "+N+" "+B,a.setEdge(E.start,E.end,j,p)})},D0t={setConf:I$e,addVertices:LBt,addEdges:MBt,getClasses:function(i,a){return a.db.getClasses()},draw:async function(i,a,f,p){Ut.info("Drawing flowchart");let v=p.db.getDirection();v===void 0&&(v="TD");const{securityLevel:m,flowchart:b}=Le(),E=b.nodeSpacing||50,_=b.rankSpacing||50;let L;m==="sandbox"&&(L=yr("#i"+a));const N=yr(m==="sandbox"?L.nodes()[0].contentDocument.body:"body"),B=m==="sandbox"?L.nodes()[0].contentDocument:document,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:v,nodesep:E,ranksep:_,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();Ut.info("Subgraphs - ",z);for(let yt=z.length-1;yt>=0;yt--)R=z[yt],Ut.info("Subgraph - ",R),p.db.addVertex(R.id,{text:R.title,type:R.labelType},"group",void 0,R.classes,R.dir);const K=p.db.getVertices(),it=p.db.getEdges();Ut.info("Edges",it);let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let yt=0;yt{const f=jTe,p=f(i,"r"),v=f(i,"g"),m=f(i,"b");return IA(p,v,m,a)},IBt=i=>`.label { font-family: ${i.fontFamily}; color: ${i.nodeTextColor||i.textColor}; } @@ -180,7 +178,7 @@ Expecting `+ou.join(", ")+", got '"+(this.terminals_[$f]||$f)+"'":j5="Parse erro /* For html labels only */ .labelBkg { - background-color: ${S$e(i.edgeLabelBackground,.5)}; + background-color: ${D$e(i.edgeLabelBackground,.5)}; // background-color: } @@ -220,12 +218,12 @@ Expecting `+ou.join(", ")+", got '"+(this.terminals_[$f]||$f)+"'":j5="Parse erro font-size: 18px; fill: ${i.textColor}; } -`,A$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Fdt,db:h9,renderer:L0t,styles:NBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,IBe.setConf(i.flowchart),h9.clear(),h9.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),L$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Fdt,db:h9,renderer:L0t,styles:NBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,eOt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),L0t.setConf(i.flowchart),h9.clear(),h9.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var M0t=function(){var i=function(dt,Ct,tt,Pt){for(tt=tt||{},Pt=dt.length;Pt--;tt[dt[Pt]]=Ct);return tt},a=[1,2],f=[1,5],p=[6,9,11,23,25,27,29,30,31,52],v=[1,17],m=[1,18],b=[1,19],E=[1,20],C=[1,21],A=[1,22],P=[1,25],F=[1,30],j=[1,31],R=[1,32],H=[1,33],Y=[1,34],rt=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,48,52],J=[1,46],it=[30,31,49,50],ft=[4,6,9,11,23,25,27,29,30,31,52],Tt=[44,45,46,47,48],kt=[22,37],mt=[1,66],ct=[1,65],yt=[22,37,39,41],st={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,MD_PARENT:48,NON_IDENTIFYING:49,IDENTIFYING:50,WORD:51,open_directive:52,type_directive:53,arg_directive:54,close_directive:55,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"MD_PARENT",49:"NON_IDENTIFYING",50:"IDENTIFYING",51:"WORD",52:"open_directive",53:"type_directive",54:"arg_directive",55:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(Ct,tt,Pt,pt,Ft,X,Rt){var Bt=X.length-1;switch(Ft){case 1:break;case 3:this.$=[];break;case 4:X[Bt-1].push(X[Bt]),this.$=X[Bt-1];break;case 5:case 6:this.$=X[Bt];break;case 7:case 8:this.$=[];break;case 12:pt.addEntity(X[Bt-4]),pt.addEntity(X[Bt-2]),pt.addRelationship(X[Bt-4],X[Bt],X[Bt-2],X[Bt-3]);break;case 13:pt.addEntity(X[Bt-3]),pt.addAttributes(X[Bt-3],X[Bt-1]);break;case 14:pt.addEntity(X[Bt-2]);break;case 15:pt.addEntity(X[Bt]);break;case 16:case 17:this.$=X[Bt].trim(),pt.setAccTitle(this.$);break;case 18:case 19:this.$=X[Bt].trim(),pt.setAccDescription(this.$);break;case 20:case 44:this.$=X[Bt];break;case 21:case 42:case 43:this.$=X[Bt].replace(/"/g,"");break;case 22:case 30:this.$=[X[Bt]];break;case 23:X[Bt].push(X[Bt-1]),this.$=X[Bt];break;case 24:this.$={attributeType:X[Bt-1],attributeName:X[Bt]};break;case 25:this.$={attributeType:X[Bt-2],attributeName:X[Bt-1],attributeKeyTypeList:X[Bt]};break;case 26:this.$={attributeType:X[Bt-2],attributeName:X[Bt-1],attributeComment:X[Bt]};break;case 27:this.$={attributeType:X[Bt-3],attributeName:X[Bt-2],attributeKeyTypeList:X[Bt-1],attributeComment:X[Bt]};break;case 28:case 29:case 32:this.$=X[Bt];break;case 31:X[Bt-2].push(X[Bt]),this.$=X[Bt-2];break;case 33:this.$=X[Bt].replace(/"/g,"");break;case 34:this.$={cardA:X[Bt],relType:X[Bt-1],cardB:X[Bt-2]};break;case 35:this.$=pt.Cardinality.ZERO_OR_ONE;break;case 36:this.$=pt.Cardinality.ZERO_OR_MORE;break;case 37:this.$=pt.Cardinality.ONE_OR_MORE;break;case 38:this.$=pt.Cardinality.ONLY_ONE;break;case 39:this.$=pt.Cardinality.MD_PARENT;break;case 40:this.$=pt.Identification.NON_IDENTIFYING;break;case 41:this.$=pt.Identification.IDENTIFYING;break;case 45:pt.parseDirective("%%{","open_directive");break;case 46:pt.parseDirective(X[Bt],"type_directive");break;case 47:X[Bt]=X[Bt].trim().replace(/'/g,'"'),pt.parseDirective(X[Bt],"arg_directive");break;case 48:pt.parseDirective("}%%","close_directive","er");break}},table:[{3:1,4:a,7:3,12:4,52:f},{1:[3]},i(p,[2,3],{5:6}),{3:7,4:a,7:3,12:4,52:f},{13:8,53:[1,9]},{53:[2,45]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:v,25:m,27:b,29:E,30:C,31:A,52:f},{1:[2,2]},{14:23,15:[1,24],55:P},i([15,55],[2,46]),i(p,[2,8],{1:[2,1]}),i(p,[2,4]),{7:15,10:26,12:4,17:16,23:v,25:m,27:b,29:E,30:C,31:A,52:f},i(p,[2,6]),i(p,[2,7]),i(p,[2,11]),i(p,[2,15],{18:27,42:29,20:[1,28],44:F,45:j,46:R,47:H,48:Y}),{24:[1,35]},{26:[1,36]},{28:[1,37]},i(p,[2,19]),i(rt,[2,20]),i(rt,[2,21]),{11:[1,38]},{16:39,54:[1,40]},{11:[2,48]},i(p,[2,5]),{17:41,30:C,31:A},{21:42,22:[1,43],32:44,33:45,37:J},{43:47,49:[1,48],50:[1,49]},i(it,[2,35]),i(it,[2,36]),i(it,[2,37]),i(it,[2,38]),i(it,[2,39]),i(p,[2,16]),i(p,[2,17]),i(p,[2,18]),i(ft,[2,9]),{14:50,55:P},{55:[2,47]},{15:[1,51]},{22:[1,52]},i(p,[2,14]),{21:53,22:[2,22],32:44,33:45,37:J},{34:54,37:[1,55]},{37:[2,28]},{42:56,44:F,45:j,46:R,47:H,48:Y},i(Tt,[2,40]),i(Tt,[2,41]),{11:[1,57]},{19:58,30:[1,61],31:[1,60],51:[1,59]},i(p,[2,13]),{22:[2,23]},i(kt,[2,24],{35:62,36:63,38:64,40:mt,41:ct}),i([22,37,40,41],[2,29]),i([30,31],[2,34]),i(ft,[2,10]),i(p,[2,12]),i(p,[2,42]),i(p,[2,43]),i(p,[2,44]),i(kt,[2,25],{36:67,39:[1,68],41:ct}),i(kt,[2,26]),i(yt,[2,30]),i(kt,[2,33]),i(yt,[2,32]),i(kt,[2,27]),{38:69,40:mt},i(yt,[2,31])],defaultActions:{5:[2,45],7:[2,2],25:[2,48],40:[2,47],46:[2,28],53:[2,23]},parseError:function(Ct,tt){if(tt.recoverable)this.trace(Ct);else{var Pt=new Error(Ct);throw Pt.hash=tt,Pt}},parse:function(Ct){var tt=this,Pt=[0],pt=[],Ft=[null],X=[],Rt=this.table,Bt="",vt=0,Ot=0,Vt=2,qe=1,_n=X.slice.call(arguments,1),Te=Object.create(this.lexer),Wn={yy:{}};for(var Ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ae)&&(Wn.yy[Ae]=this.yy[Ae]);Te.setInput(Ct,Wn.yy),Wn.yy.lexer=Te,Wn.yy.parser=this,typeof Te.yylloc>"u"&&(Te.yylloc={});var ne=Te.yylloc;X.push(ne);var ke=Te.options&&Te.options.ranges;typeof Wn.yy.parseError=="function"?this.parseError=Wn.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ve(){var Se;return Se=pt.pop()||Te.lex()||qe,typeof Se!="number"&&(Se instanceof Array&&(pt=Se,Se=pt.pop()),Se=tt.symbols_[Se]||Se),Se}for(var Ee,He,Ce,$e,ye={},fn,Yt,Mi,qt;;){if(He=Pt[Pt.length-1],this.defaultActions[He]?Ce=this.defaultActions[He]:((Ee===null||typeof Ee>"u")&&(Ee=Ve()),Ce=Rt[He]&&Rt[He][Ee]),typeof Ce>"u"||!Ce.length||!Ce[0]){var zi="";qt=[];for(fn in Rt[He])this.terminals_[fn]&&fn>Vt&&qt.push("'"+this.terminals_[fn]+"'");Te.showPosition?zi="Parse error on line "+(vt+1)+`: -`+Te.showPosition()+` -Expecting `+qt.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":zi="Parse error on line "+(vt+1)+": Unexpected "+(Ee==qe?"end of input":"'"+(this.terminals_[Ee]||Ee)+"'"),this.parseError(zi,{text:Te.match,token:this.terminals_[Ee]||Ee,line:Te.yylineno,loc:ne,expected:qt})}if(Ce[0]instanceof Array&&Ce.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+Ee);switch(Ce[0]){case 1:Pt.push(Ee),Ft.push(Te.yytext),X.push(Te.yylloc),Pt.push(Ce[1]),Ee=null,Ot=Te.yyleng,Bt=Te.yytext,vt=Te.yylineno,ne=Te.yylloc;break;case 2:if(Yt=this.productions_[Ce[1]][1],ye.$=Ft[Ft.length-Yt],ye._$={first_line:X[X.length-(Yt||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(Yt||1)].first_column,last_column:X[X.length-1].last_column},ke&&(ye._$.range=[X[X.length-(Yt||1)].range[0],X[X.length-1].range[1]]),$e=this.performAction.apply(ye,[Bt,Ot,vt,Wn.yy,Ce[1],Ft,X].concat(_n)),typeof $e<"u")return $e;Yt&&(Pt=Pt.slice(0,-1*Yt*2),Ft=Ft.slice(0,-1*Yt),X=X.slice(0,-1*Yt)),Pt.push(this.productions_[Ce[1]][0]),Ft.push(ye.$),X.push(ye._$),Mi=Rt[Pt[Pt.length-2]][Pt[Pt.length-1]],Pt.push(Mi);break;case 3:return!0}}return!0}},xt=function(){var dt={EOF:1,parseError:function(tt,Pt){if(this.yy.parser)this.yy.parser.parseError(tt,Pt);else throw new Error(tt)},setInput:function(Ct,tt){return this.yy=tt||this.yy||{},this._input=Ct,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Ct=this._input[0];this.yytext+=Ct,this.yyleng++,this.offset++,this.match+=Ct,this.matched+=Ct;var tt=Ct.match(/(?:\r\n?|\n).*/g);return tt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ct},unput:function(Ct){var tt=Ct.length,Pt=Ct.split(/(?:\r\n?|\n)/g);this._input=Ct+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-tt),this.offset-=tt;var pt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Pt.length-1&&(this.yylineno-=Pt.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Pt?(Pt.length===pt.length?this.yylloc.first_column:0)+pt[pt.length-Pt.length].length-Pt[0].length:this.yylloc.first_column-tt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-tt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Ct){this.unput(this.match.slice(Ct))},pastInput:function(){var Ct=this.matched.substr(0,this.matched.length-this.match.length);return(Ct.length>20?"...":"")+Ct.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Ct=this.match;return Ct.length<20&&(Ct+=this._input.substr(0,20-Ct.length)),(Ct.substr(0,20)+(Ct.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Ct=this.pastInput(),tt=new Array(Ct.length+1).join("-");return Ct+this.upcomingInput()+` -`+tt+"^"},test_match:function(Ct,tt){var Pt,pt,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),pt=Ct[0].match(/(?:\r\n?|\n).*/g),pt&&(this.yylineno+=pt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:pt?pt[pt.length-1].length-pt[pt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ct[0].length},this.yytext+=Ct[0],this.match+=Ct[0],this.matches=Ct,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ct[0].length),this.matched+=Ct[0],Pt=this.performAction.call(this,this.yy,this,tt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Pt)return Pt;if(this._backtrack){for(var X in Ft)this[X]=Ft[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ct,tt,Pt,pt;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),X=0;Xtt[0].length)){if(tt=Pt,pt=X,this.options.backtrack_lexer){if(Ct=this.test_match(Pt,Ft[X]),Ct!==!1)return Ct;if(this._backtrack){tt=!1;continue}else return!1}else if(!this.options.flex)break}return tt?(Ct=this.test_match(tt,Ft[pt]),Ct!==!1?Ct:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var tt=this.next();return tt||this.lex()},begin:function(tt){this.conditionStack.push(tt)},popState:function(){var tt=this.conditionStack.length-1;return tt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(tt){return tt=this.conditionStack.length-1-Math.abs(tt||0),tt>=0?this.conditionStack[tt]:"INITIAL"},pushState:function(tt){this.begin(tt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(tt,Pt,pt,Ft){switch(pt){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),52;case 8:return this.begin("type_directive"),53;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),55;case 11:return 54;case 12:return 11;case 13:break;case 14:return 9;case 15:return 31;case 16:return 51;case 17:return 4;case 18:return this.begin("block"),20;case 19:return 39;case 20:break;case 21:return 40;case 22:return 37;case 23:return 37;case 24:return 41;case 25:break;case 26:return this.popState(),22;case 27:return Pt.yytext[0];case 28:return 44;case 29:return 46;case 30:return 46;case 31:return 46;case 32:return 44;case 33:return 44;case 34:return 45;case 35:return 45;case 36:return 45;case 37:return 45;case 38:return 45;case 39:return 46;case 40:return 45;case 41:return 46;case 42:return 47;case 43:return 47;case 44:return 47;case 45:return 47;case 46:return 44;case 47:return 45;case 48:return 46;case 49:return 48;case 50:return 49;case 51:return 50;case 52:return 50;case 53:return 49;case 54:return 49;case 55:return 49;case 56:return 30;case 57:return Pt.yytext[0];case 58:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[19,20,21,22,23,24,25,26,27],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],inclusive:!0}}};return dt}();st.lexer=xt;function ht(){this.yy={}}return ht.prototype=st,st.Parser=ht,new ht}();M0t.parser=M0t;const M$e=M0t;let yP={},D0t=[];const D$e={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},I$e={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},O$e=function(i,a,f){J1.parseDirective(this,i,a,f)},PBt=function(i){return yP[i]===void 0&&(yP[i]={attributes:[]},Wt.info("Added new entity :",i)),yP[i]},N$e={Cardinality:D$e,Identification:I$e,parseDirective:O$e,getConfig:()=>De().er,addEntity:PBt,addAttributes:function(i,a){let f=PBt(i),p;for(p=a.length-1;p>=0;p--)f.attributes.push(a[p]),Wt.debug("Added attribute ",a[p].attributeName)},getEntities:()=>yP,addRelationship:function(i,a,f,p){let v={entityA:i,roleA:a,entityB:f,relSpec:p};D0t.push(v),Wt.debug("Added new relationship :",v)},getRelationships:()=>D0t,clear:function(){yP={},D0t=[],cg()},setAccTitle:m0,getAccTitle:ug,setAccDescription:lg,getAccDescription:hg,setDiagramTitle:Nb,getDiagramTitle:hp},um={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},lm={ERMarkers:um,insertMarkers:function(i,a){let f;i.append("defs").append("marker").attr("id",um.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",um.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},P$e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function F$e(i){return typeof i=="string"&&P$e.test(i)}const Pd=[];for(let i=0;i<256;++i)Pd.push((i+256).toString(16).slice(1));function B$e(i,a=0){return(Pd[i[a+0]]+Pd[i[a+1]]+Pd[i[a+2]]+Pd[i[a+3]]+"-"+Pd[i[a+4]]+Pd[i[a+5]]+"-"+Pd[i[a+6]]+Pd[i[a+7]]+"-"+Pd[i[a+8]]+Pd[i[a+9]]+"-"+Pd[i[a+10]]+Pd[i[a+11]]+Pd[i[a+12]]+Pd[i[a+13]]+Pd[i[a+14]]+Pd[i[a+15]]).toLowerCase()}function R$e(i){if(!F$e(i))throw TypeError("Invalid UUID");let a;const f=new Uint8Array(16);return f[0]=(a=parseInt(i.slice(0,8),16))>>>24,f[1]=a>>>16&255,f[2]=a>>>8&255,f[3]=a&255,f[4]=(a=parseInt(i.slice(9,13),16))>>>8,f[5]=a&255,f[6]=(a=parseInt(i.slice(14,18),16))>>>8,f[7]=a&255,f[8]=(a=parseInt(i.slice(19,23),16))>>>8,f[9]=a&255,f[10]=(a=parseInt(i.slice(24,36),16))/1099511627776&255,f[11]=a/4294967296&255,f[12]=a>>>24&255,f[13]=a>>>16&255,f[14]=a>>>8&255,f[15]=a&255,f}function j$e(i){i=unescape(encodeURIComponent(i));const a=[];for(let f=0;f>>32-a}function V$e(i){const a=[1518500249,1859775393,2400959708,3395469782],f=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let E=0;E>>0;j=F,F=P,P=I0t(A,30)>>>0,A=C,C=Y}f[0]=f[0]+C>>>0,f[1]=f[1]+A>>>0,f[2]=f[2]+P>>>0,f[3]=f[3]+F>>>0,f[4]=f[4]+j>>>0}return[f[0]>>24&255,f[0]>>16&255,f[0]>>8&255,f[0]&255,f[1]>>24&255,f[1]>>16&255,f[1]>>8&255,f[1]&255,f[2]>>24&255,f[2]>>16&255,f[2]>>8&255,f[2]&255,f[3]>>24&255,f[3]>>16&255,f[3]>>8&255,f[3]&255,f[4]>>24&255,f[4]>>16&255,f[4]>>8&255,f[4]&255]}const G$e=q$e("v5",80,V$e),U$e=/[^\dA-Za-z](\W)*/g;let h1={},xP=new Map;const W$e=function(i){const a=Object.keys(i);for(const f of a)h1[f]=i[f]},K$e=(i,a,f)=>{const p=h1.entityPadding/3,v=h1.entityPadding/3,m=h1.fontSize*.85,b=a.node().getBBox(),E=[];let C=!1,A=!1,P=0,F=0,j=0,R=0,H=b.height+p*2,Y=1;f.forEach(ft=>{ft.attributeKeyTypeList!==void 0&&ft.attributeKeyTypeList.length>0&&(C=!0),ft.attributeComment!==void 0&&(A=!0)}),f.forEach(ft=>{const Tt=`${a.node().id}-attr-${Y}`;let kt=0;const mt=zN(ft.attributeType),ct=i.append("text").classed("er entityLabel",!0).attr("id",`${Tt}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",De().fontFamily).style("font-size",m+"px").text(mt),yt=i.append("text").classed("er entityLabel",!0).attr("id",`${Tt}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",De().fontFamily).style("font-size",m+"px").text(ft.attributeName),st={};st.tn=ct,st.nn=yt;const xt=ct.node().getBBox(),ht=yt.node().getBBox();if(P=Math.max(P,xt.width),F=Math.max(F,ht.width),kt=Math.max(xt.height,ht.height),C){const dt=ft.attributeKeyTypeList!==void 0?ft.attributeKeyTypeList.join(","):"",Ct=i.append("text").classed("er entityLabel",!0).attr("id",`${Tt}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",De().fontFamily).style("font-size",m+"px").text(dt);st.kn=Ct;const tt=Ct.node().getBBox();j=Math.max(j,tt.width),kt=Math.max(kt,tt.height)}if(A){const dt=i.append("text").classed("er entityLabel",!0).attr("id",`${Tt}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",De().fontFamily).style("font-size",m+"px").text(ft.attributeComment||"");st.cn=dt;const Ct=dt.node().getBBox();R=Math.max(R,Ct.width),kt=Math.max(kt,Ct.height)}st.height=kt,E.push(st),H+=kt+p*2,Y+=1});let rt=4;C&&(rt+=2),A&&(rt+=2);const J=P+F+j+R,it={width:Math.max(h1.minEntityWidth,Math.max(b.width+h1.entityPadding*2,J+v*rt)),height:f.length>0?H:Math.max(h1.minEntityHeight,b.height+h1.entityPadding*2)};if(f.length>0){const ft=Math.max(0,(it.width-J-v*rt)/(rt/2));a.attr("transform","translate("+it.width/2+","+(p+b.height/2)+")");let Tt=b.height+p*2,kt="attributeBoxOdd";E.forEach(mt=>{const ct=Tt+p+mt.height/2;mt.tn.attr("transform","translate("+v+","+ct+")");const yt=i.insert("rect","#"+mt.tn.node().id).classed(`er ${kt}`,!0).attr("x",0).attr("y",Tt).attr("width",P+v*2+ft).attr("height",mt.height+p*2),st=parseFloat(yt.attr("x"))+parseFloat(yt.attr("width"));mt.nn.attr("transform","translate("+(st+v)+","+ct+")");const xt=i.insert("rect","#"+mt.nn.node().id).classed(`er ${kt}`,!0).attr("x",st).attr("y",Tt).attr("width",F+v*2+ft).attr("height",mt.height+p*2);let ht=parseFloat(xt.attr("x"))+parseFloat(xt.attr("width"));if(C){mt.kn.attr("transform","translate("+(ht+v)+","+ct+")");const dt=i.insert("rect","#"+mt.kn.node().id).classed(`er ${kt}`,!0).attr("x",ht).attr("y",Tt).attr("width",j+v*2+ft).attr("height",mt.height+p*2);ht=parseFloat(dt.attr("x"))+parseFloat(dt.attr("width"))}A&&(mt.cn.attr("transform","translate("+(ht+v)+","+ct+")"),i.insert("rect","#"+mt.cn.node().id).classed(`er ${kt}`,"true").attr("x",ht).attr("y",Tt).attr("width",R+v*2+ft).attr("height",mt.height+p*2)),Tt+=mt.height+p*2,kt=kt==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else it.height=Math.max(h1.minEntityHeight,H),a.attr("transform","translate("+it.width/2+","+it.height/2+")");return it},Y$e=function(i,a,f){const p=Object.keys(a);let v;return p.forEach(function(m){const b=eze(m,"entity");xP.set(m,b);const E=i.append("g").attr("id",b);v=v===void 0?b:v;const C="text-"+b,A=E.append("text").classed("er entityLabel",!0).attr("id",C).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",De().fontFamily).style("font-size",h1.fontSize+"px").text(m),{width:P,height:F}=K$e(E,A,a[m].attributes),R=E.insert("rect","#"+C).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",P).attr("height",F).node().getBBox();f.setNode(b,{width:R.width,height:R.height,shape:"rect",id:b})}),v},X$e=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )")})},FBt=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},Q$e=function(i,a){return i.forEach(function(f){a.setEdge(xP.get(f.entityA),xP.get(f.entityB),{relationship:f},FBt(f))}),i};let BBt=0;const Z$e=function(i,a,f,p,v){BBt++;const m=f.edge(xP.get(a.entityA),xP.get(a.entityB),FBt(a)),b=YE().x(function(H){return H.x}).y(function(H){return H.y}).curve(MA),E=i.insert("path","#"+p).classed("er relationshipLine",!0).attr("d",b(m.points)).style("stroke",h1.stroke).style("fill","none");a.relSpec.relType===v.db.Identification.NON_IDENTIFYING&&E.attr("stroke-dasharray","8,8");let C="";switch(h1.arrowMarkerAbsolute&&(C=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,C=C.replace(/\(/g,"\\("),C=C.replace(/\)/g,"\\)")),a.relSpec.cardA){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-end","url("+C+"#"+lm.ERMarkers.ZERO_OR_ONE_END+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-end","url("+C+"#"+lm.ERMarkers.ZERO_OR_MORE_END+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-end","url("+C+"#"+lm.ERMarkers.ONE_OR_MORE_END+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-end","url("+C+"#"+lm.ERMarkers.ONLY_ONE_END+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-end","url("+C+"#"+lm.ERMarkers.MD_PARENT_END+")");break}switch(a.relSpec.cardB){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-start","url("+C+"#"+lm.ERMarkers.ZERO_OR_ONE_START+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-start","url("+C+"#"+lm.ERMarkers.ZERO_OR_MORE_START+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-start","url("+C+"#"+lm.ERMarkers.ONE_OR_MORE_START+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-start","url("+C+"#"+lm.ERMarkers.ONLY_ONE_START+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-start","url("+C+"#"+lm.ERMarkers.MD_PARENT_START+")");break}const A=E.node().getTotalLength(),P=E.node().getPointAtLength(A*.5),F="rel"+BBt,R=i.append("text").classed("er relationshipLabel",!0).attr("id",F).attr("x",P.x).attr("y",P.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",De().fontFamily).style("font-size",h1.fontSize+"px").text(a.roleA).node().getBBox();i.insert("rect","#"+F).classed("er relationshipLabelBox",!0).attr("x",P.x-R.width/2).attr("y",P.y-R.height/2).attr("width",R.width).attr("height",R.height)},J$e=function(i,a,f,p){h1=De().er,Wt.info("Drawing ER diagram");const v=De().securityLevel;let m;v==="sandbox"&&(m=xr("#i"+a));const E=xr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);lm.insertMarkers(E,h1);let C;C=new l1({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:h1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const A=Y$e(E,p.db.getEntities(),C),P=Q$e(p.db.getRelationships(),C);nL(C),X$e(E,C),P.forEach(function(Y){Z$e(E,Y,C,A,p)});const F=h1.diagramPadding;to.insertTitle(E,"entityTitleText",h1.titleTopMargin,p.db.getDiagramTitle());const j=E.node().getBBox(),R=j.width+F*2,H=j.height+F*2;og(E,H,R,h1.useMaxWidth),E.attr("viewBox",`${j.x-F} ${j.y-F} ${R} ${H}`)},tze="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function eze(i="",a=""){const f=i.replace(U$e,"");return`${RBt(a)}${RBt(f)}${G$e(i,tze)}`}function RBt(i=""){return i.length>0?`${i}-`:""}const nze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:M$e,db:N$e,renderer:{setConf:W$e,draw:J$e},styles:i=>` +`,O$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,$Be.setConf(i.flowchart),gT.clear(),gT.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),N$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,iOt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),D0t.setConf(i.flowchart),gT.clear(),gT.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var O0t=function(){var i=function(wt,X,pt,U){for(pt=pt||{},U=wt.length;U--;pt[wt[U]]=X);return pt},a=[6,8,10,20,22,24,26,27,28],f=[1,10],p=[1,11],v=[1,12],m=[1,13],b=[1,14],E=[1,15],_=[1,21],L=[1,22],N=[1,23],B=[1,24],j=[1,25],R=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],z=[1,34],K=[27,28,46,47],it=[41,42,43,44,45],st=[17,34],ut=[1,54],bt=[1,53],mt=[17,34,36,38],yt={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(X,pt,U,xt,nt,Ot,Nt){var qt=Ot.length-1;switch(nt){case 1:break;case 2:this.$=[];break;case 3:Ot[qt-1].push(Ot[qt]),this.$=Ot[qt-1];break;case 4:case 5:this.$=Ot[qt];break;case 6:case 7:this.$=[];break;case 8:xt.addEntity(Ot[qt-4]),xt.addEntity(Ot[qt-2]),xt.addRelationship(Ot[qt-4],Ot[qt],Ot[qt-2],Ot[qt-3]);break;case 9:xt.addEntity(Ot[qt-3]),xt.addAttributes(Ot[qt-3],Ot[qt-1]);break;case 10:xt.addEntity(Ot[qt-2]);break;case 11:xt.addEntity(Ot[qt]);break;case 12:xt.addEntity(Ot[qt-6],Ot[qt-4]),xt.addAttributes(Ot[qt-6],Ot[qt-1]);break;case 13:xt.addEntity(Ot[qt-5],Ot[qt-3]);break;case 14:xt.addEntity(Ot[qt-3],Ot[qt-1]);break;case 15:case 16:this.$=Ot[qt].trim(),xt.setAccTitle(this.$);break;case 17:case 18:this.$=Ot[qt].trim(),xt.setAccDescription(this.$);break;case 19:case 43:this.$=Ot[qt];break;case 20:case 41:case 42:this.$=Ot[qt].replace(/"/g,"");break;case 21:case 29:this.$=[Ot[qt]];break;case 22:Ot[qt].push(Ot[qt-1]),this.$=Ot[qt];break;case 23:this.$={attributeType:Ot[qt-1],attributeName:Ot[qt]};break;case 24:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeKeyTypeList:Ot[qt]};break;case 25:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeComment:Ot[qt]};break;case 26:this.$={attributeType:Ot[qt-3],attributeName:Ot[qt-2],attributeKeyTypeList:Ot[qt-1],attributeComment:Ot[qt]};break;case 27:case 28:case 31:this.$=Ot[qt];break;case 30:Ot[qt-2].push(Ot[qt]),this.$=Ot[qt-2];break;case 32:this.$=Ot[qt].replace(/"/g,"");break;case 33:this.$={cardA:Ot[qt],relType:Ot[qt-1],cardB:Ot[qt-2]};break;case 34:this.$=xt.Cardinality.ZERO_OR_ONE;break;case 35:this.$=xt.Cardinality.ZERO_OR_MORE;break;case 36:this.$=xt.Cardinality.ONE_OR_MORE;break;case 37:this.$=xt.Cardinality.ONLY_ONE;break;case 38:this.$=xt.Cardinality.MD_PARENT;break;case 39:this.$=xt.Identification.NON_IDENTIFYING;break;case 40:this.$=xt.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:f,22:p,24:v,26:m,27:b,28:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:16,11:9,20:f,22:p,24:v,26:m,27:b,28:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:_,42:L,43:N,44:B,45:j}),{21:[1,26]},{23:[1,27]},{25:[1,28]},i(a,[2,18]),i(R,[2,19]),i(R,[2,20]),i(a,[2,4]),{11:29,27:b,28:E},{16:30,17:[1,31],29:32,30:33,34:z},{11:35,27:b,28:E},{40:36,46:[1,37],47:[1,38]},i(K,[2,34]),i(K,[2,35]),i(K,[2,36]),i(K,[2,37]),i(K,[2,38]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),{13:[1,39]},{17:[1,40]},i(a,[2,10]),{16:41,17:[2,21],29:32,30:33,34:z},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:_,42:L,43:N,44:B,45:j},i(it,[2,39]),i(it,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},i(a,[2,9]),{17:[2,22]},i(st,[2,23],{32:50,33:51,35:52,37:ut,38:bt}),i([17,34,37,38],[2,28]),i(a,[2,14],{15:[1,55]}),i([27,28],[2,33]),i(a,[2,8]),i(a,[2,41]),i(a,[2,42]),i(a,[2,43]),i(st,[2,24],{33:56,36:[1,57],38:bt}),i(st,[2,25]),i(mt,[2,29]),i(st,[2,32]),i(mt,[2,31]),{16:58,17:[1,59],29:32,30:33,34:z},i(st,[2,26]),{35:60,37:ut},{17:[1,61]},i(a,[2,13]),i(mt,[2,30]),i(a,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(X,pt){if(pt.recoverable)this.trace(X);else{var U=new Error(X);throw U.hash=pt,U}},parse:function(X){var pt=this,U=[0],xt=[],nt=[null],Ot=[],Nt=this.table,qt="",Ct=0,Z=0,Tt=2,Ht=1,It=Ot.slice.call(arguments,1),Ft=Object.create(this.lexer),ke={yy:{}};for(var pn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,pn)&&(ke.yy[pn]=this.yy[pn]);Ft.setInput(X,ke.yy),ke.yy.lexer=Ft,ke.yy.parser=this,typeof Ft.yylloc>"u"&&(Ft.yylloc={});var Me=Ft.yylloc;Ot.push(Me);var ve=Ft.options&&Ft.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ge(){var cn;return cn=xt.pop()||Ft.lex()||Ht,typeof cn!="number"&&(cn instanceof Array&&(xt=cn,cn=xt.pop()),cn=pt.symbols_[cn]||cn),cn}for(var Ke,we,_e,$t,re={},ie,Oe,oe,Ne;;){if(we=U[U.length-1],this.defaultActions[we]?_e=this.defaultActions[we]:((Ke===null||typeof Ke>"u")&&(Ke=Ge()),_e=Nt[we]&&Nt[we][Ke]),typeof _e>"u"||!_e.length||!_e[0]){var me="";Ne=[];for(ie in Nt[we])this.terminals_[ie]&&ie>Tt&&Ne.push("'"+this.terminals_[ie]+"'");Ft.showPosition?me="Parse error on line "+(Ct+1)+`: +`+Ft.showPosition()+` +Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Ke]||Ke)+"'":me="Parse error on line "+(Ct+1)+": Unexpected "+(Ke==Ht?"end of input":"'"+(this.terminals_[Ke]||Ke)+"'"),this.parseError(me,{text:Ft.match,token:this.terminals_[Ke]||Ke,line:Ft.yylineno,loc:Me,expected:Ne})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+we+", token: "+Ke);switch(_e[0]){case 1:U.push(Ke),nt.push(Ft.yytext),Ot.push(Ft.yylloc),U.push(_e[1]),Ke=null,Z=Ft.yyleng,qt=Ft.yytext,Ct=Ft.yylineno,Me=Ft.yylloc;break;case 2:if(Oe=this.productions_[_e[1]][1],re.$=nt[nt.length-Oe],re._$={first_line:Ot[Ot.length-(Oe||1)].first_line,last_line:Ot[Ot.length-1].last_line,first_column:Ot[Ot.length-(Oe||1)].first_column,last_column:Ot[Ot.length-1].last_column},ve&&(re._$.range=[Ot[Ot.length-(Oe||1)].range[0],Ot[Ot.length-1].range[1]]),$t=this.performAction.apply(re,[qt,Z,Ct,ke.yy,_e[1],nt,Ot].concat(It)),typeof $t<"u")return $t;Oe&&(U=U.slice(0,-1*Oe*2),nt=nt.slice(0,-1*Oe),Ot=Ot.slice(0,-1*Oe)),U.push(this.productions_[_e[1]][0]),nt.push(re.$),Ot.push(re._$),oe=Nt[U[U.length-2]][U[U.length-1]],U.push(oe);break;case 3:return!0}}return!0}},dt=function(){var wt={EOF:1,parseError:function(pt,U){if(this.yy.parser)this.yy.parser.parseError(pt,U);else throw new Error(pt)},setInput:function(X,pt){return this.yy=pt||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var pt=X.match(/(?:\r\n?|\n).*/g);return pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var pt=X.length,U=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pt),this.offset-=pt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),U.length-1&&(this.yylineno-=U.length-1);var nt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:U?(U.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-U.length].length-U[0].length:this.yylloc.first_column-pt},this.options.ranges&&(this.yylloc.range=[nt[0],nt[0]+this.yyleng-pt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),pt=new Array(X.length+1).join("-");return X+this.upcomingInput()+` +`+pt+"^"},test_match:function(X,pt){var U,xt,nt;if(this.options.backtrack_lexer&&(nt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(nt.yylloc.range=this.yylloc.range.slice(0))),xt=X[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],U=this.performAction.call(this,this.yy,this,pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var Ot in nt)this[Ot]=nt[Ot];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,pt,U,xt;this._more||(this.yytext="",this.match="");for(var nt=this._currentRules(),Ot=0;Otpt[0].length)){if(pt=U,xt=Ot,this.options.backtrack_lexer){if(X=this.test_match(U,nt[Ot]),X!==!1)return X;if(this._backtrack){pt=!1;continue}else return!1}else if(!this.options.flex)break}return pt?(X=this.test_match(pt,nt[xt]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var pt=this.next();return pt||this.lex()},begin:function(pt){this.conditionStack.push(pt)},popState:function(){var pt=this.conditionStack.length-1;return pt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(pt){return pt=this.conditionStack.length-1-Math.abs(pt||0),pt>=0?this.conditionStack[pt]:"INITIAL"},pushState:function(pt){this.begin(pt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(pt,U,xt,nt){switch(xt){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return U.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return U.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return wt}();yt.lexer=dt;function ht(){this.yy={}}return ht.prototype=yt,yt.Parser=ht,new ht}();O0t.parser=O0t;const P$e=O0t;let hk={},N0t=[];const F$e={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},B$e={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},DBt=function(i,a=void 0){return hk[i]===void 0?(hk[i]={attributes:[],alias:a},Ut.info("Added new entity :",i)):hk[i]&&!hk[i].alias&&a&&(hk[i].alias=a,Ut.info(`Add alias '${a}' to entity '${i}'`)),hk[i]},R$e={Cardinality:F$e,Identification:B$e,getConfig:()=>Le().er,addEntity:DBt,addAttributes:function(i,a){let f=DBt(i),p;for(p=a.length-1;p>=0;p--)f.attributes.push(a[p]),Ut.debug("Added attribute ",a[p].attributeName)},getEntities:()=>hk,addRelationship:function(i,a,f,p){let v={entityA:i,roleA:a,entityB:f,relSpec:p};N0t.push(v),Ut.debug("Added new relationship :",v)},getRelationships:()=>N0t,clear:function(){hk={},N0t=[],ap()},setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,setDiagramTitle:Z2,getDiagramTitle:Db},um={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},lm={ERMarkers:um,insertMarkers:function(i,a){let f;i.append("defs").append("marker").attr("id",um.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",um.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",um.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M9,0 L9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",um.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),f=i.append("defs").append("marker").attr("id",um.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),f.append("circle").attr("stroke",a.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),f.append("path").attr("stroke",a.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},j$e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $$e(i){return typeof i=="string"&&j$e.test(i)}const Pd=[];for(let i=0;i<256;++i)Pd.push((i+256).toString(16).slice(1));function z$e(i,a=0){return(Pd[i[a+0]]+Pd[i[a+1]]+Pd[i[a+2]]+Pd[i[a+3]]+"-"+Pd[i[a+4]]+Pd[i[a+5]]+"-"+Pd[i[a+6]]+Pd[i[a+7]]+"-"+Pd[i[a+8]]+Pd[i[a+9]]+"-"+Pd[i[a+10]]+Pd[i[a+11]]+Pd[i[a+12]]+Pd[i[a+13]]+Pd[i[a+14]]+Pd[i[a+15]]).toLowerCase()}function q$e(i){if(!$$e(i))throw TypeError("Invalid UUID");let a;const f=new Uint8Array(16);return f[0]=(a=parseInt(i.slice(0,8),16))>>>24,f[1]=a>>>16&255,f[2]=a>>>8&255,f[3]=a&255,f[4]=(a=parseInt(i.slice(9,13),16))>>>8,f[5]=a&255,f[6]=(a=parseInt(i.slice(14,18),16))>>>8,f[7]=a&255,f[8]=(a=parseInt(i.slice(19,23),16))>>>8,f[9]=a&255,f[10]=(a=parseInt(i.slice(24,36),16))/1099511627776&255,f[11]=a/4294967296&255,f[12]=a>>>24&255,f[13]=a>>>16&255,f[14]=a>>>8&255,f[15]=a&255,f}function H$e(i){i=unescape(encodeURIComponent(i));const a=[];for(let f=0;f>>32-a}function K$e(i){const a=[1518500249,1859775393,2400959708,3395469782],f=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let E=0;E>>0;j=B,B=N,N=P0t(L,30)>>>0,L=_,_=K}f[0]=f[0]+_>>>0,f[1]=f[1]+L>>>0,f[2]=f[2]+N>>>0,f[3]=f[3]+B>>>0,f[4]=f[4]+j>>>0}return[f[0]>>24&255,f[0]>>16&255,f[0]>>8&255,f[0]&255,f[1]>>24&255,f[1]>>16&255,f[1]>>8&255,f[1]&255,f[2]>>24&255,f[2]>>16&255,f[2]>>8&255,f[2]&255,f[3]>>24&255,f[3]>>16&255,f[3]>>8&255,f[3]&255,f[4]>>24&255,f[4]>>16&255,f[4]>>8&255,f[4]&255]}const Y$e=U$e("v5",80,K$e),X$e=/[^\dA-Za-z](\W)*/g;let o1={},yP=new Map;const Q$e=function(i){const a=Object.keys(i);for(const f of a)o1[f]=i[f]},Z$e=(i,a,f)=>{const p=o1.entityPadding/3,v=o1.entityPadding/3,m=o1.fontSize*.85,b=a.node().getBBox(),E=[];let _=!1,L=!1,N=0,B=0,j=0,R=0,z=b.height+p*2,K=1;f.forEach(bt=>{bt.attributeKeyTypeList!==void 0&&bt.attributeKeyTypeList.length>0&&(_=!0),bt.attributeComment!==void 0&&(L=!0)}),f.forEach(bt=>{const mt=`${a.node().id}-attr-${K}`;let yt=0;const dt=zN(bt.attributeType),ht=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(dt),wt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(bt.attributeName),X={};X.tn=ht,X.nn=wt;const pt=ht.node().getBBox(),U=wt.node().getBBox();if(N=Math.max(N,pt.width),B=Math.max(B,U.width),yt=Math.max(pt.height,U.height),_){const xt=bt.attributeKeyTypeList!==void 0?bt.attributeKeyTypeList.join(","):"",nt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(xt);X.kn=nt;const Ot=nt.node().getBBox();j=Math.max(j,Ot.width),yt=Math.max(yt,Ot.height)}if(L){const xt=i.append("text").classed("er entityLabel",!0).attr("id",`${mt}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Le().fontFamily).style("font-size",m+"px").text(bt.attributeComment||"");X.cn=xt;const nt=xt.node().getBBox();R=Math.max(R,nt.width),yt=Math.max(yt,nt.height)}X.height=yt,E.push(X),z+=yt+p*2,K+=1});let it=4;_&&(it+=2),L&&(it+=2);const st=N+B+j+R,ut={width:Math.max(o1.minEntityWidth,Math.max(b.width+o1.entityPadding*2,st+v*it)),height:f.length>0?z:Math.max(o1.minEntityHeight,b.height+o1.entityPadding*2)};if(f.length>0){const bt=Math.max(0,(ut.width-st-v*it)/(it/2));a.attr("transform","translate("+ut.width/2+","+(p+b.height/2)+")");let mt=b.height+p*2,yt="attributeBoxOdd";E.forEach(dt=>{const ht=mt+p+dt.height/2;dt.tn.attr("transform","translate("+v+","+ht+")");const wt=i.insert("rect","#"+dt.tn.node().id).classed(`er ${yt}`,!0).attr("x",0).attr("y",mt).attr("width",N+v*2+bt).attr("height",dt.height+p*2),X=parseFloat(wt.attr("x"))+parseFloat(wt.attr("width"));dt.nn.attr("transform","translate("+(X+v)+","+ht+")");const pt=i.insert("rect","#"+dt.nn.node().id).classed(`er ${yt}`,!0).attr("x",X).attr("y",mt).attr("width",B+v*2+bt).attr("height",dt.height+p*2);let U=parseFloat(pt.attr("x"))+parseFloat(pt.attr("width"));if(_){dt.kn.attr("transform","translate("+(U+v)+","+ht+")");const xt=i.insert("rect","#"+dt.kn.node().id).classed(`er ${yt}`,!0).attr("x",U).attr("y",mt).attr("width",j+v*2+bt).attr("height",dt.height+p*2);U=parseFloat(xt.attr("x"))+parseFloat(xt.attr("width"))}L&&(dt.cn.attr("transform","translate("+(U+v)+","+ht+")"),i.insert("rect","#"+dt.cn.node().id).classed(`er ${yt}`,"true").attr("x",U).attr("y",mt).attr("width",R+v*2+bt).attr("height",dt.height+p*2)),mt+=dt.height+p*2,yt=yt==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else ut.height=Math.max(o1.minEntityHeight,z),a.attr("transform","translate("+ut.width/2+","+ut.height/2+")");return ut},J$e=function(i,a,f){const p=Object.keys(a);let v;return p.forEach(function(m){const b=sze(m,"entity");yP.set(m,b);const E=i.append("g").attr("id",b);v=v===void 0?b:v;const _="text-"+b,L=E.append("text").classed("er entityLabel",!0).attr("id",_).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",Le().fontFamily).style("font-size",o1.fontSize+"px").text(a[m].alias??m),{width:N,height:B}=Z$e(E,L,a[m].attributes),R=E.insert("rect","#"+_).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",N).attr("height",B).node().getBBox();f.setNode(b,{width:R.width,height:R.height,shape:"rect",id:b})}),v},tze=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )")})},OBt=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},eze=function(i,a){return i.forEach(function(f){a.setEdge(yP.get(f.entityA),yP.get(f.entityB),{relationship:f},OBt(f))}),i};let NBt=0;const nze=function(i,a,f,p,v){NBt++;const m=f.edge(yP.get(a.entityA),yP.get(a.entityB),OBt(a)),b=Z7().x(function(z){return z.x}).y(function(z){return z.y}).curve(FN),E=i.insert("path","#"+p).classed("er relationshipLine",!0).attr("d",b(m.points)).style("stroke",o1.stroke).style("fill","none");a.relSpec.relType===v.db.Identification.NON_IDENTIFYING&&E.attr("stroke-dasharray","8,8");let _="";switch(o1.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),a.relSpec.cardA){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ZERO_OR_ONE_END+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ZERO_OR_MORE_END+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ONE_OR_MORE_END+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.ONLY_ONE_END+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-end","url("+_+"#"+lm.ERMarkers.MD_PARENT_END+")");break}switch(a.relSpec.cardB){case v.db.Cardinality.ZERO_OR_ONE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ZERO_OR_ONE_START+")");break;case v.db.Cardinality.ZERO_OR_MORE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ZERO_OR_MORE_START+")");break;case v.db.Cardinality.ONE_OR_MORE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ONE_OR_MORE_START+")");break;case v.db.Cardinality.ONLY_ONE:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.ONLY_ONE_START+")");break;case v.db.Cardinality.MD_PARENT:E.attr("marker-start","url("+_+"#"+lm.ERMarkers.MD_PARENT_START+")");break}const L=E.node().getTotalLength(),N=E.node().getPointAtLength(L*.5),B="rel"+NBt,R=i.append("text").classed("er relationshipLabel",!0).attr("id",B).attr("x",N.x).attr("y",N.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",Le().fontFamily).style("font-size",o1.fontSize+"px").text(a.roleA).node().getBBox();i.insert("rect","#"+B).classed("er relationshipLabelBox",!0).attr("x",N.x-R.width/2).attr("y",N.y-R.height/2).attr("width",R.width).attr("height",R.height)},rze=function(i,a,f,p){o1=Le().er,Ut.info("Drawing ER diagram");const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const E=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);lm.insertMarkers(E,o1);let _;_=new a1({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:o1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const L=J$e(E,p.db.getEntities(),_),N=eze(p.db.getRelationships(),_);eL(_),tze(E,_),N.forEach(function(K){nze(E,K,_,L,p)});const B=o1.diagramPadding;$a.insertTitle(E,"entityTitleText",o1.titleTopMargin,p.db.getDiagramTitle());const j=E.node().getBBox(),R=j.width+B*2,z=j.height+B*2;og(E,z,R,o1.useMaxWidth),E.attr("viewBox",`${j.x-B} ${j.y-B} ${R} ${z}`)},ize="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function sze(i="",a=""){const f=i.replace(X$e,"");return`${PBt(a)}${PBt(f)}${Y$e(i,ize)}`}function PBt(i=""){return i.length>0?`${i}-`:""}const aze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:P$e,db:R$e,renderer:{setConf:Q$e,draw:rze},styles:i=>` .entityBox { fill: ${i.mainBkg}; stroke: ${i.nodeBorder}; @@ -270,25 +268,25 @@ Expecting `+qt.join(", ")+", got '"+(this.terminals_[Ee]||Ee)+"'":zi="Parse erro stroke-width: 1; } -`}},Symbol.toStringTag,{value:"Module"}));var O0t=function(){var i=function(yt,st,xt,ht){for(xt=xt||{},ht=yt.length;ht--;xt[yt[ht]]=st);return xt},a=[1,4],f=[1,7],p=[1,5],v=[1,9],m=[1,6],b=[2,6],E=[1,16],C=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],A=[8,14,20,22,24,25,27,29,32,37,40],P=[8,13,14,20,22,24,25,27,29,32,37,40],F=[1,26],j=[6,8,14,50,55],R=[8,14,55],H=[1,53],Y=[1,52],rt=[8,14,30,33,35,38,55],J=[1,67],it=[1,68],ft=[1,69],Tt=[8,14,33,35,42,55],kt={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(st,xt,ht,dt,Ct,tt,Pt){var pt=tt.length-1;switch(Ct){case 3:return tt[pt];case 4:return tt[pt-1];case 5:return dt.setDirection(tt[pt-3]),tt[pt-1];case 7:dt.setOptions(tt[pt-1]),this.$=tt[pt];break;case 8:tt[pt-1]+=tt[pt],this.$=tt[pt-1];break;case 10:this.$=[];break;case 11:tt[pt-1].push(tt[pt]),this.$=tt[pt-1];break;case 12:this.$=tt[pt-1];break;case 17:this.$=tt[pt].trim(),dt.setAccTitle(this.$);break;case 18:case 19:this.$=tt[pt].trim(),dt.setAccDescription(this.$);break;case 20:dt.addSection(tt[pt].substr(8)),this.$=tt[pt].substr(8);break;case 22:dt.checkout(tt[pt]);break;case 23:dt.branch(tt[pt]);break;case 24:dt.branch(tt[pt-2],tt[pt]);break;case 25:dt.cherryPick(tt[pt],"",void 0);break;case 26:dt.cherryPick(tt[pt-2],"",tt[pt]);break;case 27:case 29:dt.cherryPick(tt[pt-2],"","");break;case 28:dt.cherryPick(tt[pt],"",tt[pt-2]);break;case 30:dt.merge(tt[pt],"","","");break;case 31:dt.merge(tt[pt-2],tt[pt],"","");break;case 32:dt.merge(tt[pt-2],"",tt[pt],"");break;case 33:dt.merge(tt[pt-2],"","",tt[pt]);break;case 34:dt.merge(tt[pt-4],tt[pt],"",tt[pt-2]);break;case 35:dt.merge(tt[pt-4],"",tt[pt],tt[pt-2]);break;case 36:dt.merge(tt[pt-4],"",tt[pt-2],tt[pt]);break;case 37:dt.merge(tt[pt-4],tt[pt-2],tt[pt],"");break;case 38:dt.merge(tt[pt-4],tt[pt-2],"",tt[pt]);break;case 39:dt.merge(tt[pt-4],tt[pt],tt[pt-2],"");break;case 40:dt.merge(tt[pt-6],tt[pt-4],tt[pt-2],tt[pt]);break;case 41:dt.merge(tt[pt-6],tt[pt],tt[pt-4],tt[pt-2]);break;case 42:dt.merge(tt[pt-6],tt[pt-4],tt[pt],tt[pt-2]);break;case 43:dt.merge(tt[pt-6],tt[pt-2],tt[pt-4],tt[pt]);break;case 44:dt.merge(tt[pt-6],tt[pt],tt[pt-2],tt[pt-4]);break;case 45:dt.merge(tt[pt-6],tt[pt-2],tt[pt],tt[pt-4]);break;case 46:dt.commit(tt[pt]);break;case 47:dt.commit("","",dt.commitType.NORMAL,tt[pt]);break;case 48:dt.commit("","",tt[pt],"");break;case 49:dt.commit("","",tt[pt],tt[pt-2]);break;case 50:dt.commit("","",tt[pt-2],tt[pt]);break;case 51:dt.commit("",tt[pt],dt.commitType.NORMAL,"");break;case 52:dt.commit("",tt[pt-2],dt.commitType.NORMAL,tt[pt]);break;case 53:dt.commit("",tt[pt],dt.commitType.NORMAL,tt[pt-2]);break;case 54:dt.commit("",tt[pt-2],tt[pt],"");break;case 55:dt.commit("",tt[pt],tt[pt-2],"");break;case 56:dt.commit("",tt[pt-4],tt[pt-2],tt[pt]);break;case 57:dt.commit("",tt[pt-4],tt[pt],tt[pt-2]);break;case 58:dt.commit("",tt[pt-2],tt[pt-4],tt[pt]);break;case 59:dt.commit("",tt[pt],tt[pt-4],tt[pt-2]);break;case 60:dt.commit("",tt[pt],tt[pt-2],tt[pt-4]);break;case 61:dt.commit("",tt[pt-2],tt[pt],tt[pt-4]);break;case 62:dt.commit(tt[pt],"",dt.commitType.NORMAL,"");break;case 63:dt.commit(tt[pt],"",dt.commitType.NORMAL,tt[pt-2]);break;case 64:dt.commit(tt[pt-2],"",dt.commitType.NORMAL,tt[pt]);break;case 65:dt.commit(tt[pt-2],"",tt[pt],"");break;case 66:dt.commit(tt[pt],"",tt[pt-2],"");break;case 67:dt.commit(tt[pt],tt[pt-2],dt.commitType.NORMAL,"");break;case 68:dt.commit(tt[pt-2],tt[pt],dt.commitType.NORMAL,"");break;case 69:dt.commit(tt[pt-4],"",tt[pt-2],tt[pt]);break;case 70:dt.commit(tt[pt-4],"",tt[pt],tt[pt-2]);break;case 71:dt.commit(tt[pt-2],"",tt[pt-4],tt[pt]);break;case 72:dt.commit(tt[pt],"",tt[pt-4],tt[pt-2]);break;case 73:dt.commit(tt[pt],"",tt[pt-2],tt[pt-4]);break;case 74:dt.commit(tt[pt-2],"",tt[pt],tt[pt-4]);break;case 75:dt.commit(tt[pt-4],tt[pt],tt[pt-2],"");break;case 76:dt.commit(tt[pt-4],tt[pt-2],tt[pt],"");break;case 77:dt.commit(tt[pt-2],tt[pt],tt[pt-4],"");break;case 78:dt.commit(tt[pt],tt[pt-2],tt[pt-4],"");break;case 79:dt.commit(tt[pt],tt[pt-4],tt[pt-2],"");break;case 80:dt.commit(tt[pt-2],tt[pt-4],tt[pt],"");break;case 81:dt.commit(tt[pt-4],tt[pt],dt.commitType.NORMAL,tt[pt-2]);break;case 82:dt.commit(tt[pt-4],tt[pt-2],dt.commitType.NORMAL,tt[pt]);break;case 83:dt.commit(tt[pt-2],tt[pt],dt.commitType.NORMAL,tt[pt-4]);break;case 84:dt.commit(tt[pt],tt[pt-2],dt.commitType.NORMAL,tt[pt-4]);break;case 85:dt.commit(tt[pt],tt[pt-4],dt.commitType.NORMAL,tt[pt-2]);break;case 86:dt.commit(tt[pt-2],tt[pt-4],dt.commitType.NORMAL,tt[pt]);break;case 87:dt.commit(tt[pt-6],tt[pt-4],tt[pt-2],tt[pt]);break;case 88:dt.commit(tt[pt-6],tt[pt-4],tt[pt],tt[pt-2]);break;case 89:dt.commit(tt[pt-6],tt[pt-2],tt[pt-4],tt[pt]);break;case 90:dt.commit(tt[pt-6],tt[pt],tt[pt-4],tt[pt-2]);break;case 91:dt.commit(tt[pt-6],tt[pt-2],tt[pt],tt[pt-4]);break;case 92:dt.commit(tt[pt-6],tt[pt],tt[pt-2],tt[pt-4]);break;case 93:dt.commit(tt[pt-4],tt[pt-6],tt[pt-2],tt[pt]);break;case 94:dt.commit(tt[pt-4],tt[pt-6],tt[pt],tt[pt-2]);break;case 95:dt.commit(tt[pt-2],tt[pt-6],tt[pt-4],tt[pt]);break;case 96:dt.commit(tt[pt],tt[pt-6],tt[pt-4],tt[pt-2]);break;case 97:dt.commit(tt[pt-2],tt[pt-6],tt[pt],tt[pt-4]);break;case 98:dt.commit(tt[pt],tt[pt-6],tt[pt-2],tt[pt-4]);break;case 99:dt.commit(tt[pt],tt[pt-4],tt[pt-2],tt[pt-6]);break;case 100:dt.commit(tt[pt-2],tt[pt-4],tt[pt],tt[pt-6]);break;case 101:dt.commit(tt[pt],tt[pt-2],tt[pt-4],tt[pt-6]);break;case 102:dt.commit(tt[pt-2],tt[pt],tt[pt-4],tt[pt-6]);break;case 103:dt.commit(tt[pt-4],tt[pt-2],tt[pt],tt[pt-6]);break;case 104:dt.commit(tt[pt-4],tt[pt],tt[pt-2],tt[pt-6]);break;case 105:dt.commit(tt[pt-2],tt[pt-4],tt[pt-6],tt[pt]);break;case 106:dt.commit(tt[pt],tt[pt-4],tt[pt-6],tt[pt-2]);break;case 107:dt.commit(tt[pt-2],tt[pt],tt[pt-6],tt[pt-4]);break;case 108:dt.commit(tt[pt],tt[pt-2],tt[pt-6],tt[pt-4]);break;case 109:dt.commit(tt[pt-4],tt[pt-2],tt[pt-6],tt[pt]);break;case 110:dt.commit(tt[pt-4],tt[pt],tt[pt-6],tt[pt-2]);break;case 111:this.$="";break;case 112:this.$=tt[pt];break;case 113:this.$=dt.commitType.NORMAL;break;case 114:this.$=dt.commitType.REVERSE;break;case 115:this.$=dt.commitType.HIGHLIGHT;break;case 118:dt.parseDirective("%%{","open_directive");break;case 119:dt.parseDirective(tt[pt],"type_directive");break;case 120:tt[pt]=tt[pt].trim().replace(/'/g,'"'),dt.parseDirective(tt[pt],"arg_directive");break;case 121:dt.parseDirective("}%%","close_directive","gitGraph");break}},table:[{3:1,4:2,5:3,6:a,8:f,14:p,46:8,50:v,55:m},{1:[3]},{3:10,4:2,5:3,6:a,8:f,14:p,46:8,50:v,55:m},{3:11,4:2,5:3,6:a,8:f,14:p,46:8,50:v,55:m},{7:12,8:b,9:[1,13],10:[1,14],11:15,14:E},i(C,[2,124]),i(C,[2,125]),i(C,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:b,11:15,14:E},{9:[1,21]},i(A,[2,10],{12:22,13:[1,23]}),i(P,[2,9]),{9:[1,25],48:24,53:F},i([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:b,11:15,14:E},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},i(P,[2,8]),i(j,[2,116]),{49:45,52:[1,46]},i(j,[2,121]),{1:[2,4]},{8:[1,47]},i(A,[2,11]),{4:48,8:f,14:p,55:m},i(A,[2,13]),i(R,[2,14]),i(R,[2,15]),i(R,[2,16]),{21:[1,49]},{23:[1,50]},i(R,[2,19]),i(R,[2,20]),i(R,[2,21]),{28:51,34:H,54:Y},i(R,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:H,54:Y},{33:[1,61],35:[1,62]},{28:63,34:H,54:Y},{48:64,53:F},{53:[2,120]},{1:[2,5]},i(A,[2,12]),i(R,[2,17]),i(R,[2,18]),i(R,[2,22]),i(rt,[2,122]),i(rt,[2,123]),i(R,[2,46]),{34:[1,65]},{39:66,43:J,44:it,45:ft},{34:[1,70]},{34:[1,71]},i(R,[2,112]),i(R,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},i(R,[2,23],{30:[1,78]}),i(j,[2,117]),i(R,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),i(R,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),i(Tt,[2,113]),i(Tt,[2,114]),i(Tt,[2,115]),i(R,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),i(R,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:J,44:it,45:ft},{34:[1,93]},i(R,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:J,44:it,45:ft},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:J,44:it,45:ft},{34:[1,106]},{34:[1,107]},{39:108,43:J,44:it,45:ft},{34:[1,109]},i(R,[2,31],{35:[1,111],38:[1,110]}),i(R,[2,32],{33:[1,113],35:[1,112]}),i(R,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},i(R,[2,24]),i(R,[2,49],{33:[1,120],42:[1,121]}),i(R,[2,53],{38:[1,122],42:[1,123]}),i(R,[2,63],{33:[1,125],38:[1,124]}),i(R,[2,50],{33:[1,126],42:[1,127]}),i(R,[2,55],{35:[1,128],42:[1,129]}),i(R,[2,66],{33:[1,131],35:[1,130]}),i(R,[2,52],{38:[1,132],42:[1,133]}),i(R,[2,54],{35:[1,134],42:[1,135]}),i(R,[2,67],{35:[1,137],38:[1,136]}),i(R,[2,64],{33:[1,139],38:[1,138]}),i(R,[2,65],{33:[1,141],35:[1,140]}),i(R,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:J,44:it,45:ft},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:J,44:it,45:ft},i(R,[2,26]),i(R,[2,27]),i(R,[2,28]),i(R,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:J,44:it,45:ft},{34:[1,153]},{39:154,43:J,44:it,45:ft},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:J,44:it,45:ft},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:J,44:it,45:ft},{34:[1,167]},{39:168,43:J,44:it,45:ft},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:J,44:it,45:ft},{34:[1,173]},i(R,[2,37],{35:[1,174]}),i(R,[2,38],{38:[1,175]}),i(R,[2,36],{33:[1,176]}),i(R,[2,39],{35:[1,177]}),i(R,[2,34],{38:[1,178]}),i(R,[2,35],{33:[1,179]}),i(R,[2,60],{42:[1,180]}),i(R,[2,73],{33:[1,181]}),i(R,[2,61],{42:[1,182]}),i(R,[2,84],{38:[1,183]}),i(R,[2,74],{33:[1,184]}),i(R,[2,83],{38:[1,185]}),i(R,[2,59],{42:[1,186]}),i(R,[2,72],{33:[1,187]}),i(R,[2,58],{42:[1,188]}),i(R,[2,78],{35:[1,189]}),i(R,[2,71],{33:[1,190]}),i(R,[2,77],{35:[1,191]}),i(R,[2,57],{42:[1,192]}),i(R,[2,85],{38:[1,193]}),i(R,[2,56],{42:[1,194]}),i(R,[2,79],{35:[1,195]}),i(R,[2,80],{35:[1,196]}),i(R,[2,86],{38:[1,197]}),i(R,[2,70],{33:[1,198]}),i(R,[2,81],{38:[1,199]}),i(R,[2,69],{33:[1,200]}),i(R,[2,75],{35:[1,201]}),i(R,[2,76],{35:[1,202]}),i(R,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:J,44:it,45:ft},{34:[1,206]},{34:[1,207]},{39:208,43:J,44:it,45:ft},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:J,44:it,45:ft},{34:[1,214]},{39:215,43:J,44:it,45:ft},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:J,44:it,45:ft},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:J,44:it,45:ft},{34:[1,228]},{39:229,43:J,44:it,45:ft},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:J,44:it,45:ft},i(R,[2,40]),i(R,[2,42]),i(R,[2,41]),i(R,[2,43]),i(R,[2,45]),i(R,[2,44]),i(R,[2,101]),i(R,[2,102]),i(R,[2,99]),i(R,[2,100]),i(R,[2,104]),i(R,[2,103]),i(R,[2,108]),i(R,[2,107]),i(R,[2,106]),i(R,[2,105]),i(R,[2,110]),i(R,[2,109]),i(R,[2,98]),i(R,[2,97]),i(R,[2,96]),i(R,[2,95]),i(R,[2,93]),i(R,[2,94]),i(R,[2,92]),i(R,[2,91]),i(R,[2,90]),i(R,[2,89]),i(R,[2,87]),i(R,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(st,xt){if(xt.recoverable)this.trace(st);else{var ht=new Error(st);throw ht.hash=xt,ht}},parse:function(st){var xt=this,ht=[0],dt=[],Ct=[null],tt=[],Pt=this.table,pt="",Ft=0,X=0,Rt=2,Bt=1,vt=tt.slice.call(arguments,1),Ot=Object.create(this.lexer),Vt={yy:{}};for(var qe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,qe)&&(Vt.yy[qe]=this.yy[qe]);Ot.setInput(st,Vt.yy),Vt.yy.lexer=Ot,Vt.yy.parser=this,typeof Ot.yylloc>"u"&&(Ot.yylloc={});var _n=Ot.yylloc;tt.push(_n);var Te=Ot.options&&Ot.options.ranges;typeof Vt.yy.parseError=="function"?this.parseError=Vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Wn(){var Yt;return Yt=dt.pop()||Ot.lex()||Bt,typeof Yt!="number"&&(Yt instanceof Array&&(dt=Yt,Yt=dt.pop()),Yt=xt.symbols_[Yt]||Yt),Yt}for(var Ae,ne,ke,Ve,Ee={},He,Ce,$e,ye;;){if(ne=ht[ht.length-1],this.defaultActions[ne]?ke=this.defaultActions[ne]:((Ae===null||typeof Ae>"u")&&(Ae=Wn()),ke=Pt[ne]&&Pt[ne][Ae]),typeof ke>"u"||!ke.length||!ke[0]){var fn="";ye=[];for(He in Pt[ne])this.terminals_[He]&&He>Rt&&ye.push("'"+this.terminals_[He]+"'");Ot.showPosition?fn="Parse error on line "+(Ft+1)+`: -`+Ot.showPosition()+` -Expecting `+ye.join(", ")+", got '"+(this.terminals_[Ae]||Ae)+"'":fn="Parse error on line "+(Ft+1)+": Unexpected "+(Ae==Bt?"end of input":"'"+(this.terminals_[Ae]||Ae)+"'"),this.parseError(fn,{text:Ot.match,token:this.terminals_[Ae]||Ae,line:Ot.yylineno,loc:_n,expected:ye})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+Ae);switch(ke[0]){case 1:ht.push(Ae),Ct.push(Ot.yytext),tt.push(Ot.yylloc),ht.push(ke[1]),Ae=null,X=Ot.yyleng,pt=Ot.yytext,Ft=Ot.yylineno,_n=Ot.yylloc;break;case 2:if(Ce=this.productions_[ke[1]][1],Ee.$=Ct[Ct.length-Ce],Ee._$={first_line:tt[tt.length-(Ce||1)].first_line,last_line:tt[tt.length-1].last_line,first_column:tt[tt.length-(Ce||1)].first_column,last_column:tt[tt.length-1].last_column},Te&&(Ee._$.range=[tt[tt.length-(Ce||1)].range[0],tt[tt.length-1].range[1]]),Ve=this.performAction.apply(Ee,[pt,X,Ft,Vt.yy,ke[1],Ct,tt].concat(vt)),typeof Ve<"u")return Ve;Ce&&(ht=ht.slice(0,-1*Ce*2),Ct=Ct.slice(0,-1*Ce),tt=tt.slice(0,-1*Ce)),ht.push(this.productions_[ke[1]][0]),Ct.push(Ee.$),tt.push(Ee._$),$e=Pt[ht[ht.length-2]][ht[ht.length-1]],ht.push($e);break;case 3:return!0}}return!0}},mt=function(){var yt={EOF:1,parseError:function(xt,ht){if(this.yy.parser)this.yy.parser.parseError(xt,ht);else throw new Error(xt)},setInput:function(st,xt){return this.yy=xt||this.yy||{},this._input=st,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var st=this._input[0];this.yytext+=st,this.yyleng++,this.offset++,this.match+=st,this.matched+=st;var xt=st.match(/(?:\r\n?|\n).*/g);return xt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),st},unput:function(st){var xt=st.length,ht=st.split(/(?:\r\n?|\n)/g);this._input=st+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-xt),this.offset-=xt;var dt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ht.length-1&&(this.yylineno-=ht.length-1);var Ct=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ht?(ht.length===dt.length?this.yylloc.first_column:0)+dt[dt.length-ht.length].length-ht[0].length:this.yylloc.first_column-xt},this.options.ranges&&(this.yylloc.range=[Ct[0],Ct[0]+this.yyleng-xt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(st){this.unput(this.match.slice(st))},pastInput:function(){var st=this.matched.substr(0,this.matched.length-this.match.length);return(st.length>20?"...":"")+st.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var st=this.match;return st.length<20&&(st+=this._input.substr(0,20-st.length)),(st.substr(0,20)+(st.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var st=this.pastInput(),xt=new Array(st.length+1).join("-");return st+this.upcomingInput()+` -`+xt+"^"},test_match:function(st,xt){var ht,dt,Ct;if(this.options.backtrack_lexer&&(Ct={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ct.yylloc.range=this.yylloc.range.slice(0))),dt=st[0].match(/(?:\r\n?|\n).*/g),dt&&(this.yylineno+=dt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:dt?dt[dt.length-1].length-dt[dt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+st[0].length},this.yytext+=st[0],this.match+=st[0],this.matches=st,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(st[0].length),this.matched+=st[0],ht=this.performAction.call(this,this.yy,this,xt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ht)return ht;if(this._backtrack){for(var tt in Ct)this[tt]=Ct[tt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var st,xt,ht,dt;this._more||(this.yytext="",this.match="");for(var Ct=this._currentRules(),tt=0;ttxt[0].length)){if(xt=ht,dt=tt,this.options.backtrack_lexer){if(st=this.test_match(ht,Ct[tt]),st!==!1)return st;if(this._backtrack){xt=!1;continue}else return!1}else if(!this.options.flex)break}return xt?(st=this.test_match(xt,Ct[dt]),st!==!1?st:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var xt=this.next();return xt||this.lex()},begin:function(xt){this.conditionStack.push(xt)},popState:function(){var xt=this.conditionStack.length-1;return xt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(xt){return xt=this.conditionStack.length-1-Math.abs(xt||0),xt>=0?this.conditionStack[xt]:"INITIAL"},pushState:function(xt){this.begin(xt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(xt,ht,dt,Ct){switch(dt){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:break;case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:return 10;case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 34:this.popState();break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 38:this.popState();break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}};return yt}();kt.lexer=mt;function ct(){this.yy={}}return ct.prototype=kt,kt.Parser=ct,new ct}();O0t.parser=O0t;const rze=O0t;let EK=De().gitGraph.mainBranchName,ize=De().gitGraph.mainBranchOrder,f1={},gg=null,kP={};kP[EK]={name:EK,order:ize};let Rf={};Rf[EK]=gg;let td=EK,jBt="LR",v9=0;function N0t(){return jIt({length:7})}const sze=function(i,a,f){J1.parseDirective(this,i,a,f)};function aze(i,a){const f=Object.create(null);return i.reduce((p,v)=>{const m=a(v);return f[m]||(f[m]=!0,p.push(v)),p},[])}const oze=function(i){jBt=i};let $Bt={};const cze=function(i){Wt.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{$Bt=JSON.parse(i)}catch(a){Wt.error("error while parsing gitGraph options",a.message)}},uze=function(){return $Bt},lze=function(i,a,f,p){Wt.debug("Entering commit:",i,a,f,p),a=ui.sanitizeText(a,De()),i=ui.sanitizeText(i,De()),p=ui.sanitizeText(p,De());const v={id:a||v9+"-"+N0t(),message:i,seq:v9++,type:f||EP.NORMAL,tag:p||"",parents:gg==null?[]:[gg.id],branch:td};gg=v,f1[v.id]=v,Rf[td]=v.id,Wt.debug("in pushCommit "+v.id)},hze=function(i,a){if(i=ui.sanitizeText(i,De()),Rf[i]===void 0)Rf[i]=gg!=null?gg.id:null,kP[i]={name:i,order:a?parseInt(a,10):null},zBt(i),Wt.debug("in createBranch");else{let f=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+i+'")');throw f.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},f}},fze=function(i,a,f,p){i=ui.sanitizeText(i,De()),a=ui.sanitizeText(a,De());const v=f1[Rf[td]],m=f1[Rf[i]];if(td===i){let E=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(v===void 0||!v){let E=new Error('Incorrect usage of "merge". Current branch ('+td+")has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},E}else if(Rf[i]===void 0){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},E}else if(m===void 0||!m){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},E}else if(v===m){let E=new Error('Incorrect usage of "merge". Both branches have same head');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(a&&f1[a]!==void 0){let E=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom Id");throw E.hash={text:"merge "+i+a+f+p,token:"merge "+i+a+f+p,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+a+"_UNIQUE "+f+" "+p]},E}const b={id:a||v9+"-"+N0t(),message:"merged branch "+i+" into "+td,seq:v9++,parents:[gg==null?null:gg.id,Rf[i]],branch:td,type:EP.MERGE,customType:f,customId:!!a,tag:p||""};gg=b,f1[b.id]=b,Rf[td]=b.id,Wt.debug(Rf),Wt.debug("in mergeBranch")},dze=function(i,a,f){if(Wt.debug("Entering cherryPick:",i,a,f),i=ui.sanitizeText(i,De()),a=ui.sanitizeText(a,De()),f=ui.sanitizeText(f,De()),!i||f1[i]===void 0){let m=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}let p=f1[i],v=p.branch;if(p.type===EP.MERGE){let m=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}if(!a||f1[a]===void 0){if(v===td){let E=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const m=f1[Rf[td]];if(m===void 0||!m){let E=new Error('Incorrect usage of "cherry-pick". Current branch ('+td+")has no commits");throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const b={id:v9+"-"+N0t(),message:"cherry-picked "+p+" into "+td,seq:v9++,parents:[gg==null?null:gg.id,p.id],branch:td,type:EP.CHERRY_PICK,tag:f??"cherry-pick:"+p.id};gg=b,f1[b.id]=b,Rf[td]=b.id,Wt.debug(Rf),Wt.debug("in cherryPick")}},zBt=function(i){if(i=ui.sanitizeText(i,De()),Rf[i]===void 0){let a=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw a.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},a}else{td=i;const a=Rf[td];gg=f1[a]}};function qBt(i,a,f){const p=i.indexOf(a);p===-1?i.push(f):i.splice(p,1,f)}function HBt(i){const a=i.reduce((v,m)=>v.seq>m.seq?v:m,i[0]);let f="";i.forEach(function(v){v===a?f+=" *":f+=" |"});const p=[f,a.id,a.seq];for(let v in Rf)Rf[v]===a.id&&p.push(v);if(Wt.debug(p.join(" ")),a.parents&&a.parents.length==2){const v=f1[a.parents[0]];qBt(i,a,v),i.push(f1[a.parents[1]])}else{if(a.parents.length==0)return;{const v=f1[a.parents];qBt(i,a,v)}}i=aze(i,v=>v.id),HBt(i)}const gze=function(){Wt.debug(f1);const i=VBt()[0];HBt([i])},pze=function(){f1={},gg=null;let i=De().gitGraph.mainBranchName,a=De().gitGraph.mainBranchOrder;Rf={},Rf[i]=null,kP={},kP[i]={name:i,order:a},td=i,v9=0,cg()},bze=function(){return Object.values(kP).map((a,f)=>a.order!==null?a:{...a,order:parseFloat(`0.${f}`,10)}).sort((a,f)=>a.order-f.order).map(({name:a})=>({name:a}))},vze=function(){return Rf},wze=function(){return f1},VBt=function(){const i=Object.keys(f1).map(function(a){return f1[a]});return i.forEach(function(a){Wt.debug(a.id)}),i.sort((a,f)=>a.seq-f.seq),i},mze=function(){return td},yze=function(){return jBt},xze=function(){return gg},EP={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},kze={parseDirective:sze,getConfig:()=>De().gitGraph,setDirection:oze,setOptions:cze,getOptions:uze,commit:lze,branch:hze,merge:fze,cherryPick:dze,checkout:zBt,prettyPrint:gze,clear:pze,getBranchesAsObjArray:bze,getBranches:vze,getCommits:wze,getCommitsArray:VBt,getCurrentBranch:mze,getDirection:yze,getHead:xze,setAccTitle:m0,getAccTitle:ug,getAccDescription:hg,setAccDescription:lg,setDiagramTitle:Nb,getDiagramTitle:hp,commitType:EP};let TP={};const Rb={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},w9=8;let ed={},_P={},TK=[],CP=0,x0="LR";const Eze=()=>{ed={},_P={},TP={},CP=0,TK=[],x0="LR"},GBt=i=>{const a=document.createElementNS("http://www.w3.org/2000/svg","text");let f=[];typeof i=="string"?f=i.split(/\\n|\n|/gi):Array.isArray(i)?f=i:f=[];for(const p of f){const v=document.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","0"),v.setAttribute("class","row"),v.textContent=p.trim(),a.appendChild(v)}return a},UBt=(i,a,f)=>{const p=JN().gitGraph,v=i.append("g").attr("class","commit-bullets"),m=i.append("g").attr("class","commit-labels");let b=0;x0==="TB"&&(b=30),Object.keys(a).sort((A,P)=>a[A].seq-a[P].seq).forEach(A=>{const P=a[A],F=x0==="TB"?b+10:ed[P.branch].pos,j=x0==="TB"?ed[P.branch].pos:b+10;if(f){let R,H=P.customType!==void 0&&P.customType!==""?P.customType:P.type;switch(H){case Rb.NORMAL:R="commit-normal";break;case Rb.REVERSE:R="commit-reverse";break;case Rb.HIGHLIGHT:R="commit-highlight";break;case Rb.MERGE:R="commit-merge";break;case Rb.CHERRY_PICK:R="commit-cherry-pick";break;default:R="commit-normal"}if(H===Rb.HIGHLIGHT){const Y=v.append("rect");Y.attr("x",j-10),Y.attr("y",F-10),Y.attr("height",20),Y.attr("width",20),Y.attr("class",`commit ${P.id} commit-highlight${ed[P.branch].index%w9} ${R}-outer`),v.append("rect").attr("x",j-6).attr("y",F-6).attr("height",12).attr("width",12).attr("class",`commit ${P.id} commit${ed[P.branch].index%w9} ${R}-inner`)}else if(H===Rb.CHERRY_PICK)v.append("circle").attr("cx",j).attr("cy",F).attr("r",10).attr("class",`commit ${P.id} ${R}`),v.append("circle").attr("cx",j-3).attr("cy",F+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${P.id} ${R}`),v.append("circle").attr("cx",j+3).attr("cy",F+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${P.id} ${R}`),v.append("line").attr("x1",j+3).attr("y1",F+1).attr("x2",j).attr("y2",F-5).attr("stroke","#fff").attr("class",`commit ${P.id} ${R}`),v.append("line").attr("x1",j-3).attr("y1",F+1).attr("x2",j).attr("y2",F-5).attr("stroke","#fff").attr("class",`commit ${P.id} ${R}`);else{const Y=v.append("circle");if(Y.attr("cx",j),Y.attr("cy",F),Y.attr("r",P.type===Rb.MERGE?9:10),Y.attr("class",`commit ${P.id} commit${ed[P.branch].index%w9}`),H===Rb.MERGE){const rt=v.append("circle");rt.attr("cx",j),rt.attr("cy",F),rt.attr("r",6),rt.attr("class",`commit ${R} ${P.id} commit${ed[P.branch].index%w9}`)}H===Rb.REVERSE&&v.append("path").attr("d",`M ${j-5},${F-5}L${j+5},${F+5}M${j-5},${F+5}L${j+5},${F-5}`).attr("class",`commit ${R} ${P.id} commit${ed[P.branch].index%w9}`)}}if(x0==="TB"?_P[P.id]={x:j,y:b+10}:_P[P.id]={x:b+10,y:F},f){if(P.type!==Rb.CHERRY_PICK&&(P.customId&&P.type===Rb.MERGE||P.type!==Rb.MERGE)&&p.showCommitLabel){const Y=m.append("g"),rt=Y.insert("rect").attr("class","commit-label-bkg"),J=Y.append("text").attr("x",b).attr("y",F+25).attr("class","commit-label").text(P.id);let it=J.node().getBBox();if(rt.attr("x",b+10-it.width/2-2).attr("y",F+13.5).attr("width",it.width+2*2).attr("height",it.height+2*2),x0==="TB"&&(rt.attr("x",j-(it.width+4*4+5)).attr("y",F-12),J.attr("x",j-(it.width+4*4)).attr("y",F+it.height-12)),x0!=="TB"&&J.attr("x",b+10-it.width/2),p.rotateCommitLabel)if(x0==="TB")J.attr("transform","rotate(-45, "+j+", "+F+")"),rt.attr("transform","rotate(-45, "+j+", "+F+")");else{let ft=-7.5-(it.width+10)/25*9.5,Tt=10+it.width/25*8.5;Y.attr("transform","translate("+ft+", "+Tt+") rotate(-45, "+b+", "+F+")")}}if(P.tag){const Y=m.insert("polygon"),rt=m.append("circle"),J=m.append("text").attr("y",F-16).attr("class","tag-label").text(P.tag);let it=J.node().getBBox();J.attr("x",b+10-it.width/2);const ft=it.height/2,Tt=F-19.2;Y.attr("class","tag-label-bkg").attr("points",` - ${b-it.width/2-4/2},${Tt+2} - ${b-it.width/2-4/2},${Tt-2} - ${b+10-it.width/2-4},${Tt-ft-2} - ${b+10+it.width/2+4},${Tt-ft-2} - ${b+10+it.width/2+4},${Tt+ft+2} - ${b+10-it.width/2-4},${Tt+ft+2}`),rt.attr("cx",b-it.width/2+4/2).attr("cy",Tt).attr("r",1.5).attr("class","tag-hole"),x0==="TB"&&(Y.attr("class","tag-label-bkg").attr("points",` +`}},Symbol.toStringTag,{value:"Module"}));var F0t=function(){var i=function(yt,dt,ht,wt){for(ht=ht||{},wt=yt.length;wt--;ht[yt[wt]]=dt);return ht},a=[1,3],f=[1,6],p=[1,4],v=[1,5],m=[2,5],b=[1,12],E=[5,7,13,19,21,23,24,26,28,31,36,39,46],_=[7,13,19,21,23,24,26,28,31,36,39],L=[7,12,13,19,21,23,24,26,28,31,36,39],N=[7,13,46],B=[1,42],j=[1,41],R=[7,13,29,32,34,37,46],z=[1,55],K=[1,56],it=[1,57],st=[7,13,32,34,41,46],ut={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,5],[18,5],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(dt,ht,wt,X,pt,U,xt){var nt=U.length-1;switch(pt){case 2:return U[nt];case 3:return U[nt-1];case 4:return X.setDirection(U[nt-3]),U[nt-1];case 6:X.setOptions(U[nt-1]),this.$=U[nt];break;case 7:U[nt-1]+=U[nt],this.$=U[nt-1];break;case 9:this.$=[];break;case 10:U[nt-1].push(U[nt]),this.$=U[nt-1];break;case 11:this.$=U[nt-1];break;case 16:this.$=U[nt].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=U[nt].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(U[nt].substr(8)),this.$=U[nt].substr(8);break;case 21:X.checkout(U[nt]);break;case 22:X.branch(U[nt]);break;case 23:X.branch(U[nt-2],U[nt]);break;case 24:X.cherryPick(U[nt],"",void 0);break;case 25:X.cherryPick(U[nt-2],"",U[nt]);break;case 26:case 28:X.cherryPick(U[nt-2],"","");break;case 27:X.cherryPick(U[nt],"",U[nt-2]);break;case 29:X.merge(U[nt],"","","");break;case 30:X.merge(U[nt-2],U[nt],"","");break;case 31:X.merge(U[nt-2],"",U[nt],"");break;case 32:X.merge(U[nt-2],"","",U[nt]);break;case 33:X.merge(U[nt-4],U[nt],"",U[nt-2]);break;case 34:X.merge(U[nt-4],"",U[nt],U[nt-2]);break;case 35:X.merge(U[nt-4],"",U[nt-2],U[nt]);break;case 36:X.merge(U[nt-4],U[nt-2],U[nt],"");break;case 37:X.merge(U[nt-4],U[nt-2],"",U[nt]);break;case 38:X.merge(U[nt-4],U[nt],U[nt-2],"");break;case 39:X.merge(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 40:X.merge(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 41:X.merge(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 42:X.merge(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 43:X.merge(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 44:X.merge(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 45:X.commit(U[nt]);break;case 46:X.commit("","",X.commitType.NORMAL,U[nt]);break;case 47:X.commit("","",U[nt],"");break;case 48:X.commit("","",U[nt],U[nt-2]);break;case 49:X.commit("","",U[nt-2],U[nt]);break;case 50:X.commit("",U[nt],X.commitType.NORMAL,"");break;case 51:X.commit("",U[nt-2],X.commitType.NORMAL,U[nt]);break;case 52:X.commit("",U[nt],X.commitType.NORMAL,U[nt-2]);break;case 53:X.commit("",U[nt-2],U[nt],"");break;case 54:X.commit("",U[nt],U[nt-2],"");break;case 55:X.commit("",U[nt-4],U[nt-2],U[nt]);break;case 56:X.commit("",U[nt-4],U[nt],U[nt-2]);break;case 57:X.commit("",U[nt-2],U[nt-4],U[nt]);break;case 58:X.commit("",U[nt],U[nt-4],U[nt-2]);break;case 59:X.commit("",U[nt],U[nt-2],U[nt-4]);break;case 60:X.commit("",U[nt-2],U[nt],U[nt-4]);break;case 61:X.commit(U[nt],"",X.commitType.NORMAL,"");break;case 62:X.commit(U[nt],"",X.commitType.NORMAL,U[nt-2]);break;case 63:X.commit(U[nt-2],"",X.commitType.NORMAL,U[nt]);break;case 64:X.commit(U[nt-2],"",U[nt],"");break;case 65:X.commit(U[nt],"",U[nt-2],"");break;case 66:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,"");break;case 67:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,"");break;case 68:X.commit(U[nt-4],"",U[nt-2],U[nt]);break;case 69:X.commit(U[nt-4],"",U[nt],U[nt-2]);break;case 70:X.commit(U[nt-2],"",U[nt-4],U[nt]);break;case 71:X.commit(U[nt],"",U[nt-4],U[nt-2]);break;case 72:X.commit(U[nt],"",U[nt-2],U[nt-4]);break;case 73:X.commit(U[nt-2],"",U[nt],U[nt-4]);break;case 74:X.commit(U[nt-4],U[nt],U[nt-2],"");break;case 75:X.commit(U[nt-4],U[nt-2],U[nt],"");break;case 76:X.commit(U[nt-2],U[nt],U[nt-4],"");break;case 77:X.commit(U[nt],U[nt-2],U[nt-4],"");break;case 78:X.commit(U[nt],U[nt-4],U[nt-2],"");break;case 79:X.commit(U[nt-2],U[nt-4],U[nt],"");break;case 80:X.commit(U[nt-4],U[nt],X.commitType.NORMAL,U[nt-2]);break;case 81:X.commit(U[nt-4],U[nt-2],X.commitType.NORMAL,U[nt]);break;case 82:X.commit(U[nt-2],U[nt],X.commitType.NORMAL,U[nt-4]);break;case 83:X.commit(U[nt],U[nt-2],X.commitType.NORMAL,U[nt-4]);break;case 84:X.commit(U[nt],U[nt-4],X.commitType.NORMAL,U[nt-2]);break;case 85:X.commit(U[nt-2],U[nt-4],X.commitType.NORMAL,U[nt]);break;case 86:X.commit(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 87:X.commit(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 88:X.commit(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 89:X.commit(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 90:X.commit(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 91:X.commit(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 92:X.commit(U[nt-4],U[nt-6],U[nt-2],U[nt]);break;case 93:X.commit(U[nt-4],U[nt-6],U[nt],U[nt-2]);break;case 94:X.commit(U[nt-2],U[nt-6],U[nt-4],U[nt]);break;case 95:X.commit(U[nt],U[nt-6],U[nt-4],U[nt-2]);break;case 96:X.commit(U[nt-2],U[nt-6],U[nt],U[nt-4]);break;case 97:X.commit(U[nt],U[nt-6],U[nt-2],U[nt-4]);break;case 98:X.commit(U[nt],U[nt-4],U[nt-2],U[nt-6]);break;case 99:X.commit(U[nt-2],U[nt-4],U[nt],U[nt-6]);break;case 100:X.commit(U[nt],U[nt-2],U[nt-4],U[nt-6]);break;case 101:X.commit(U[nt-2],U[nt],U[nt-4],U[nt-6]);break;case 102:X.commit(U[nt-4],U[nt-2],U[nt],U[nt-6]);break;case 103:X.commit(U[nt-4],U[nt],U[nt-2],U[nt-6]);break;case 104:X.commit(U[nt-2],U[nt-4],U[nt-6],U[nt]);break;case 105:X.commit(U[nt],U[nt-4],U[nt-6],U[nt-2]);break;case 106:X.commit(U[nt-2],U[nt],U[nt-6],U[nt-4]);break;case 107:X.commit(U[nt],U[nt-2],U[nt-6],U[nt-4]);break;case 108:X.commit(U[nt-4],U[nt-2],U[nt-6],U[nt]);break;case 109:X.commit(U[nt-4],U[nt],U[nt-6],U[nt-2]);break;case 110:this.$="";break;case 111:this.$=U[nt];break;case 112:this.$=X.commitType.NORMAL;break;case 113:this.$=X.commitType.REVERSE;break;case 114:this.$=X.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:a,7:f,13:p,46:v},{1:[3]},{3:7,4:2,5:a,7:f,13:p,46:v},{6:8,7:m,8:[1,9],9:[1,10],10:11,13:b},i(E,[2,117]),i(E,[2,118]),i(E,[2,119]),{1:[2,1]},{7:[1,13]},{6:14,7:m,10:11,13:b},{8:[1,15]},i(_,[2,9],{11:16,12:[1,17]}),i(L,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:m,10:11,13:b},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],36:[1,33],39:[1,32]},i(L,[2,7]),{1:[2,3]},{7:[1,36]},i(_,[2,10]),{4:37,7:f,13:p,46:v},i(_,[2,12]),i(N,[2,13]),i(N,[2,14]),i(N,[2,15]),{20:[1,38]},{22:[1,39]},i(N,[2,18]),i(N,[2,19]),i(N,[2,20]),{27:40,33:B,45:j},i(N,[2,110],{40:43,32:[1,46],33:[1,48],34:[1,44],37:[1,45],41:[1,47]}),{27:49,33:B,45:j},{32:[1,50],34:[1,51]},{27:52,33:B,45:j},{1:[2,4]},i(_,[2,11]),i(N,[2,16]),i(N,[2,17]),i(N,[2,21]),i(R,[2,115]),i(R,[2,116]),i(N,[2,45]),{33:[1,53]},{38:54,42:z,43:K,44:it},{33:[1,58]},{33:[1,59]},i(N,[2,111]),i(N,[2,29],{32:[1,60],34:[1,62],37:[1,61]}),{33:[1,63]},{33:[1,64],35:[1,65]},i(N,[2,22],{29:[1,66]}),i(N,[2,46],{32:[1,68],37:[1,67],41:[1,69]}),i(N,[2,47],{32:[1,71],34:[1,70],41:[1,72]}),i(st,[2,112]),i(st,[2,113]),i(st,[2,114]),i(N,[2,50],{34:[1,73],37:[1,74],41:[1,75]}),i(N,[2,61],{32:[1,78],34:[1,76],37:[1,77]}),{33:[1,79]},{38:80,42:z,43:K,44:it},{33:[1,81]},i(N,[2,24],{34:[1,82]}),{32:[1,83]},{32:[1,84]},{30:[1,85]},{38:86,42:z,43:K,44:it},{33:[1,87]},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{38:93,42:z,43:K,44:it},{33:[1,94]},{33:[1,95]},{38:96,42:z,43:K,44:it},{33:[1,97]},i(N,[2,30],{34:[1,99],37:[1,98]}),i(N,[2,31],{32:[1,101],34:[1,100]}),i(N,[2,32],{32:[1,102],37:[1,103]}),{33:[1,104],35:[1,105]},{33:[1,106]},{33:[1,107]},i(N,[2,23]),i(N,[2,48],{32:[1,108],41:[1,109]}),i(N,[2,52],{37:[1,110],41:[1,111]}),i(N,[2,62],{32:[1,113],37:[1,112]}),i(N,[2,49],{32:[1,114],41:[1,115]}),i(N,[2,54],{34:[1,116],41:[1,117]}),i(N,[2,65],{32:[1,119],34:[1,118]}),i(N,[2,51],{37:[1,120],41:[1,121]}),i(N,[2,53],{34:[1,122],41:[1,123]}),i(N,[2,66],{34:[1,125],37:[1,124]}),i(N,[2,63],{32:[1,127],37:[1,126]}),i(N,[2,64],{32:[1,129],34:[1,128]}),i(N,[2,67],{34:[1,131],37:[1,130]}),{38:132,42:z,43:K,44:it},{33:[1,133]},{33:[1,134]},{33:[1,135]},{33:[1,136]},{38:137,42:z,43:K,44:it},i(N,[2,25]),i(N,[2,26]),i(N,[2,27]),i(N,[2,28]),{33:[1,138]},{33:[1,139]},{38:140,42:z,43:K,44:it},{33:[1,141]},{38:142,42:z,43:K,44:it},{33:[1,143]},{33:[1,144]},{33:[1,145]},{33:[1,146]},{33:[1,147]},{33:[1,148]},{33:[1,149]},{38:150,42:z,43:K,44:it},{33:[1,151]},{33:[1,152]},{33:[1,153]},{38:154,42:z,43:K,44:it},{33:[1,155]},{38:156,42:z,43:K,44:it},{33:[1,157]},{33:[1,158]},{33:[1,159]},{38:160,42:z,43:K,44:it},{33:[1,161]},i(N,[2,36],{34:[1,162]}),i(N,[2,37],{37:[1,163]}),i(N,[2,35],{32:[1,164]}),i(N,[2,38],{34:[1,165]}),i(N,[2,33],{37:[1,166]}),i(N,[2,34],{32:[1,167]}),i(N,[2,59],{41:[1,168]}),i(N,[2,72],{32:[1,169]}),i(N,[2,60],{41:[1,170]}),i(N,[2,83],{37:[1,171]}),i(N,[2,73],{32:[1,172]}),i(N,[2,82],{37:[1,173]}),i(N,[2,58],{41:[1,174]}),i(N,[2,71],{32:[1,175]}),i(N,[2,57],{41:[1,176]}),i(N,[2,77],{34:[1,177]}),i(N,[2,70],{32:[1,178]}),i(N,[2,76],{34:[1,179]}),i(N,[2,56],{41:[1,180]}),i(N,[2,84],{37:[1,181]}),i(N,[2,55],{41:[1,182]}),i(N,[2,78],{34:[1,183]}),i(N,[2,79],{34:[1,184]}),i(N,[2,85],{37:[1,185]}),i(N,[2,69],{32:[1,186]}),i(N,[2,80],{37:[1,187]}),i(N,[2,68],{32:[1,188]}),i(N,[2,74],{34:[1,189]}),i(N,[2,75],{34:[1,190]}),i(N,[2,81],{37:[1,191]}),{33:[1,192]},{38:193,42:z,43:K,44:it},{33:[1,194]},{33:[1,195]},{38:196,42:z,43:K,44:it},{33:[1,197]},{33:[1,198]},{33:[1,199]},{33:[1,200]},{38:201,42:z,43:K,44:it},{33:[1,202]},{38:203,42:z,43:K,44:it},{33:[1,204]},{33:[1,205]},{33:[1,206]},{33:[1,207]},{33:[1,208]},{33:[1,209]},{33:[1,210]},{38:211,42:z,43:K,44:it},{33:[1,212]},{33:[1,213]},{33:[1,214]},{38:215,42:z,43:K,44:it},{33:[1,216]},{38:217,42:z,43:K,44:it},{33:[1,218]},{33:[1,219]},{33:[1,220]},{38:221,42:z,43:K,44:it},i(N,[2,39]),i(N,[2,41]),i(N,[2,40]),i(N,[2,42]),i(N,[2,44]),i(N,[2,43]),i(N,[2,100]),i(N,[2,101]),i(N,[2,98]),i(N,[2,99]),i(N,[2,103]),i(N,[2,102]),i(N,[2,107]),i(N,[2,106]),i(N,[2,105]),i(N,[2,104]),i(N,[2,109]),i(N,[2,108]),i(N,[2,97]),i(N,[2,96]),i(N,[2,95]),i(N,[2,94]),i(N,[2,92]),i(N,[2,93]),i(N,[2,91]),i(N,[2,90]),i(N,[2,89]),i(N,[2,88]),i(N,[2,86]),i(N,[2,87])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(dt,ht){if(ht.recoverable)this.trace(dt);else{var wt=new Error(dt);throw wt.hash=ht,wt}},parse:function(dt){var ht=this,wt=[0],X=[],pt=[null],U=[],xt=this.table,nt="",Ot=0,Nt=0,qt=2,Ct=1,Z=U.slice.call(arguments,1),Tt=Object.create(this.lexer),Ht={yy:{}};for(var It in this.yy)Object.prototype.hasOwnProperty.call(this.yy,It)&&(Ht.yy[It]=this.yy[It]);Tt.setInput(dt,Ht.yy),Ht.yy.lexer=Tt,Ht.yy.parser=this,typeof Tt.yylloc>"u"&&(Tt.yylloc={});var Ft=Tt.yylloc;U.push(Ft);var ke=Tt.options&&Tt.options.ranges;typeof Ht.yy.parseError=="function"?this.parseError=Ht.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pn(){var oe;return oe=X.pop()||Tt.lex()||Ct,typeof oe!="number"&&(oe instanceof Array&&(X=oe,oe=X.pop()),oe=ht.symbols_[oe]||oe),oe}for(var Me,ve,Ge,Ke,we={},_e,$t,re,ie;;){if(ve=wt[wt.length-1],this.defaultActions[ve]?Ge=this.defaultActions[ve]:((Me===null||typeof Me>"u")&&(Me=pn()),Ge=xt[ve]&&xt[ve][Me]),typeof Ge>"u"||!Ge.length||!Ge[0]){var Oe="";ie=[];for(_e in xt[ve])this.terminals_[_e]&&_e>qt&&ie.push("'"+this.terminals_[_e]+"'");Tt.showPosition?Oe="Parse error on line "+(Ot+1)+`: +`+Tt.showPosition()+` +Expecting `+ie.join(", ")+", got '"+(this.terminals_[Me]||Me)+"'":Oe="Parse error on line "+(Ot+1)+": Unexpected "+(Me==Ct?"end of input":"'"+(this.terminals_[Me]||Me)+"'"),this.parseError(Oe,{text:Tt.match,token:this.terminals_[Me]||Me,line:Tt.yylineno,loc:Ft,expected:ie})}if(Ge[0]instanceof Array&&Ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ve+", token: "+Me);switch(Ge[0]){case 1:wt.push(Me),pt.push(Tt.yytext),U.push(Tt.yylloc),wt.push(Ge[1]),Me=null,Nt=Tt.yyleng,nt=Tt.yytext,Ot=Tt.yylineno,Ft=Tt.yylloc;break;case 2:if($t=this.productions_[Ge[1]][1],we.$=pt[pt.length-$t],we._$={first_line:U[U.length-($t||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-($t||1)].first_column,last_column:U[U.length-1].last_column},ke&&(we._$.range=[U[U.length-($t||1)].range[0],U[U.length-1].range[1]]),Ke=this.performAction.apply(we,[nt,Nt,Ot,Ht.yy,Ge[1],pt,U].concat(Z)),typeof Ke<"u")return Ke;$t&&(wt=wt.slice(0,-1*$t*2),pt=pt.slice(0,-1*$t),U=U.slice(0,-1*$t)),wt.push(this.productions_[Ge[1]][0]),pt.push(we.$),U.push(we._$),re=xt[wt[wt.length-2]][wt[wt.length-1]],wt.push(re);break;case 3:return!0}}return!0}},bt=function(){var yt={EOF:1,parseError:function(ht,wt){if(this.yy.parser)this.yy.parser.parseError(ht,wt);else throw new Error(ht)},setInput:function(dt,ht){return this.yy=ht||this.yy||{},this._input=dt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var dt=this._input[0];this.yytext+=dt,this.yyleng++,this.offset++,this.match+=dt,this.matched+=dt;var ht=dt.match(/(?:\r\n?|\n).*/g);return ht?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),dt},unput:function(dt){var ht=dt.length,wt=dt.split(/(?:\r\n?|\n)/g);this._input=dt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ht),this.offset-=ht;var X=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),wt.length-1&&(this.yylineno-=wt.length-1);var pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:wt?(wt.length===X.length?this.yylloc.first_column:0)+X[X.length-wt.length].length-wt[0].length:this.yylloc.first_column-ht},this.options.ranges&&(this.yylloc.range=[pt[0],pt[0]+this.yyleng-ht]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(dt){this.unput(this.match.slice(dt))},pastInput:function(){var dt=this.matched.substr(0,this.matched.length-this.match.length);return(dt.length>20?"...":"")+dt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var dt=this.match;return dt.length<20&&(dt+=this._input.substr(0,20-dt.length)),(dt.substr(0,20)+(dt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var dt=this.pastInput(),ht=new Array(dt.length+1).join("-");return dt+this.upcomingInput()+` +`+ht+"^"},test_match:function(dt,ht){var wt,X,pt;if(this.options.backtrack_lexer&&(pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pt.yylloc.range=this.yylloc.range.slice(0))),X=dt[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+dt[0].length},this.yytext+=dt[0],this.match+=dt[0],this.matches=dt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(dt[0].length),this.matched+=dt[0],wt=this.performAction.call(this,this.yy,this,ht,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),wt)return wt;if(this._backtrack){for(var U in pt)this[U]=pt[U];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var dt,ht,wt,X;this._more||(this.yytext="",this.match="");for(var pt=this._currentRules(),U=0;Uht[0].length)){if(ht=wt,X=U,this.options.backtrack_lexer){if(dt=this.test_match(wt,pt[U]),dt!==!1)return dt;if(this._backtrack){ht=!1;continue}else return!1}else if(!this.options.flex)break}return ht?(dt=this.test_match(ht,pt[X]),dt!==!1?dt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ht=this.next();return ht||this.lex()},begin:function(ht){this.conditionStack.push(ht)},popState:function(){var ht=this.conditionStack.length-1;return ht>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ht){return ht=this.conditionStack.length-1-Math.abs(ht||0),ht>=0?this.conditionStack[ht]:"INITIAL"},pushState:function(ht){this.begin(ht)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ht,wt,X,pt){switch(X){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 39;case 12:return 32;case 13:return 37;case 14:return 41;case 15:return 42;case 16:return 43;case 17:return 44;case 18:return 34;case 19:return 28;case 20:return 29;case 21:return 36;case 22:return 31;case 23:return 26;case 24:return 9;case 25:return 9;case 26:return 8;case 27:return"CARET";case 28:this.begin("options");break;case 29:this.popState();break;case 30:return 12;case 31:return 35;case 32:this.begin("string");break;case 33:this.popState();break;case 34:return 33;case 35:return 30;case 36:return 45;case 37:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[29,30],inclusive:!1},string:{rules:[33,34],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,32,35,36,37,38],inclusive:!0}}};return yt}();ut.lexer=bt;function mt(){this.yy={}}return mt.prototype=ut,ut.Parser=mt,new mt}();F0t.parser=F0t;const oze=F0t;let yK=Le().gitGraph.mainBranchName,cze=Le().gitGraph.mainBranchOrder,c1={},hg=null,xP={};xP[yK]={name:yK,order:cze};let Pf={};Pf[yK]=hg;let X1=yK,FBt="LR",yT=0;function B0t(){return GDt({length:7})}function uze(i,a){const f=Object.create(null);return i.reduce((p,v)=>{const m=a(v);return f[m]||(f[m]=!0,p.push(v)),p},[])}const lze=function(i){FBt=i};let BBt={};const hze=function(i){Ut.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{BBt=JSON.parse(i)}catch(a){Ut.error("error while parsing gitGraph options",a.message)}},fze=function(){return BBt},dze=function(i,a,f,p){Ut.debug("Entering commit:",i,a,f,p),a=Yr.sanitizeText(a,Le()),i=Yr.sanitizeText(i,Le()),p=Yr.sanitizeText(p,Le());const v={id:a||yT+"-"+B0t(),message:i,seq:yT++,type:f||kP.NORMAL,tag:p||"",parents:hg==null?[]:[hg.id],branch:X1};hg=v,c1[v.id]=v,Pf[X1]=v.id,Ut.debug("in pushCommit "+v.id)},gze=function(i,a){if(i=Yr.sanitizeText(i,Le()),Pf[i]===void 0)Pf[i]=hg!=null?hg.id:null,xP[i]={name:i,order:a?parseInt(a,10):null},RBt(i),Ut.debug("in createBranch");else{let f=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+i+'")');throw f.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},f}},pze=function(i,a,f,p){i=Yr.sanitizeText(i,Le()),a=Yr.sanitizeText(a,Le());const v=c1[Pf[X1]],m=c1[Pf[i]];if(X1===i){let E=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(v===void 0||!v){let E=new Error('Incorrect usage of "merge". Current branch ('+X1+")has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},E}else if(Pf[i]===void 0){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},E}else if(m===void 0||!m){let E=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},E}else if(v===m){let E=new Error('Incorrect usage of "merge". Both branches have same head');throw E.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},E}else if(a&&c1[a]!==void 0){let E=new Error('Incorrect usage of "merge". Commit with id:'+a+" already exists, use different custom Id");throw E.hash={text:"merge "+i+a+f+p,token:"merge "+i+a+f+p,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+a+"_UNIQUE "+f+" "+p]},E}const b={id:a||yT+"-"+B0t(),message:"merged branch "+i+" into "+X1,seq:yT++,parents:[hg==null?null:hg.id,Pf[i]],branch:X1,type:kP.MERGE,customType:f,customId:!!a,tag:p||""};hg=b,c1[b.id]=b,Pf[X1]=b.id,Ut.debug(Pf),Ut.debug("in mergeBranch")},bze=function(i,a,f){if(Ut.debug("Entering cherryPick:",i,a,f),i=Yr.sanitizeText(i,Le()),a=Yr.sanitizeText(a,Le()),f=Yr.sanitizeText(f,Le()),!i||c1[i]===void 0){let m=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}let p=c1[i],v=p.branch;if(p.type===kP.MERGE){let m=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw m.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},m}if(!a||c1[a]===void 0){if(v===X1){let E=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const m=c1[Pf[X1]];if(m===void 0||!m){let E=new Error('Incorrect usage of "cherry-pick". Current branch ('+X1+")has no commits");throw E.hash={text:"cherryPick "+i+" "+a,token:"cherryPick "+i+" "+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},E}const b={id:yT+"-"+B0t(),message:"cherry-picked "+p+" into "+X1,seq:yT++,parents:[hg==null?null:hg.id,p.id],branch:X1,type:kP.CHERRY_PICK,tag:f??"cherry-pick:"+p.id};hg=b,c1[b.id]=b,Pf[X1]=b.id,Ut.debug(Pf),Ut.debug("in cherryPick")}},RBt=function(i){if(i=Yr.sanitizeText(i,Le()),Pf[i]===void 0){let a=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw a.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},a}else{X1=i;const a=Pf[X1];hg=c1[a]}};function jBt(i,a,f){const p=i.indexOf(a);p===-1?i.push(f):i.splice(p,1,f)}function $Bt(i){const a=i.reduce((v,m)=>v.seq>m.seq?v:m,i[0]);let f="";i.forEach(function(v){v===a?f+=" *":f+=" |"});const p=[f,a.id,a.seq];for(let v in Pf)Pf[v]===a.id&&p.push(v);if(Ut.debug(p.join(" ")),a.parents&&a.parents.length==2){const v=c1[a.parents[0]];jBt(i,a,v),i.push(c1[a.parents[1]])}else{if(a.parents.length==0)return;{const v=c1[a.parents];jBt(i,a,v)}}i=uze(i,v=>v.id),$Bt(i)}const vze=function(){Ut.debug(c1);const i=zBt()[0];$Bt([i])},wze=function(){c1={},hg=null;let i=Le().gitGraph.mainBranchName,a=Le().gitGraph.mainBranchOrder;Pf={},Pf[i]=null,xP={},xP[i]={name:i,order:a},X1=i,yT=0,ap()},mze=function(){return Object.values(xP).map((a,f)=>a.order!==null?a:{...a,order:parseFloat(`0.${f}`,10)}).sort((a,f)=>a.order-f.order).map(({name:a})=>({name:a}))},yze=function(){return Pf},xze=function(){return c1},zBt=function(){const i=Object.keys(c1).map(function(a){return c1[a]});return i.forEach(function(a){Ut.debug(a.id)}),i.sort((a,f)=>a.seq-f.seq),i},kze=function(){return X1},Eze=function(){return FBt},Tze=function(){return hg},kP={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},Cze={getConfig:()=>Le().gitGraph,setDirection:lze,setOptions:hze,getOptions:fze,commit:dze,branch:gze,merge:pze,cherryPick:bze,checkout:RBt,prettyPrint:vze,clear:wze,getBranchesAsObjArray:mze,getBranches:yze,getCommits:xze,getCommitsArray:zBt,getCurrentBranch:kze,getDirection:Eze,getHead:Tze,setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,setDiagramTitle:Z2,getDiagramTitle:Db,commitType:kP};let EP={};const Fb={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},xT=8;let Q1={},TP={},xK=[],CP=0,y0="LR";const _ze=()=>{Q1={},TP={},EP={},CP=0,xK=[],y0="LR"},qBt=i=>{const a=document.createElementNS("http://www.w3.org/2000/svg","text");let f=[];typeof i=="string"?f=i.split(/\\n|\n|/gi):Array.isArray(i)?f=i:f=[];for(const p of f){const v=document.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","0"),v.setAttribute("class","row"),v.textContent=p.trim(),a.appendChild(v)}return a},HBt=(i,a,f)=>{const p=JN().gitGraph,v=i.append("g").attr("class","commit-bullets"),m=i.append("g").attr("class","commit-labels");let b=0;y0==="TB"&&(b=30),Object.keys(a).sort((L,N)=>a[L].seq-a[N].seq).forEach(L=>{const N=a[L],B=y0==="TB"?b+10:Q1[N.branch].pos,j=y0==="TB"?Q1[N.branch].pos:b+10;if(f){let R,z=N.customType!==void 0&&N.customType!==""?N.customType:N.type;switch(z){case Fb.NORMAL:R="commit-normal";break;case Fb.REVERSE:R="commit-reverse";break;case Fb.HIGHLIGHT:R="commit-highlight";break;case Fb.MERGE:R="commit-merge";break;case Fb.CHERRY_PICK:R="commit-cherry-pick";break;default:R="commit-normal"}if(z===Fb.HIGHLIGHT){const K=v.append("rect");K.attr("x",j-10),K.attr("y",B-10),K.attr("height",20),K.attr("width",20),K.attr("class",`commit ${N.id} commit-highlight${Q1[N.branch].index%xT} ${R}-outer`),v.append("rect").attr("x",j-6).attr("y",B-6).attr("height",12).attr("width",12).attr("class",`commit ${N.id} commit${Q1[N.branch].index%xT} ${R}-inner`)}else if(z===Fb.CHERRY_PICK)v.append("circle").attr("cx",j).attr("cy",B).attr("r",10).attr("class",`commit ${N.id} ${R}`),v.append("circle").attr("cx",j-3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${N.id} ${R}`),v.append("circle").attr("cx",j+3).attr("cy",B+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${N.id} ${R}`),v.append("line").attr("x1",j+3).attr("y1",B+1).attr("x2",j).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${N.id} ${R}`),v.append("line").attr("x1",j-3).attr("y1",B+1).attr("x2",j).attr("y2",B-5).attr("stroke","#fff").attr("class",`commit ${N.id} ${R}`);else{const K=v.append("circle");if(K.attr("cx",j),K.attr("cy",B),K.attr("r",N.type===Fb.MERGE?9:10),K.attr("class",`commit ${N.id} commit${Q1[N.branch].index%xT}`),z===Fb.MERGE){const it=v.append("circle");it.attr("cx",j),it.attr("cy",B),it.attr("r",6),it.attr("class",`commit ${R} ${N.id} commit${Q1[N.branch].index%xT}`)}z===Fb.REVERSE&&v.append("path").attr("d",`M ${j-5},${B-5}L${j+5},${B+5}M${j-5},${B+5}L${j+5},${B-5}`).attr("class",`commit ${R} ${N.id} commit${Q1[N.branch].index%xT}`)}}if(y0==="TB"?TP[N.id]={x:j,y:b+10}:TP[N.id]={x:b+10,y:B},f){if(N.type!==Fb.CHERRY_PICK&&(N.customId&&N.type===Fb.MERGE||N.type!==Fb.MERGE)&&p.showCommitLabel){const K=m.append("g"),it=K.insert("rect").attr("class","commit-label-bkg"),st=K.append("text").attr("x",b).attr("y",B+25).attr("class","commit-label").text(N.id);let ut=st.node().getBBox();if(it.attr("x",b+10-ut.width/2-2).attr("y",B+13.5).attr("width",ut.width+2*2).attr("height",ut.height+2*2),y0==="TB"&&(it.attr("x",j-(ut.width+4*4+5)).attr("y",B-12),st.attr("x",j-(ut.width+4*4)).attr("y",B+ut.height-12)),y0!=="TB"&&st.attr("x",b+10-ut.width/2),p.rotateCommitLabel)if(y0==="TB")st.attr("transform","rotate(-45, "+j+", "+B+")"),it.attr("transform","rotate(-45, "+j+", "+B+")");else{let bt=-7.5-(ut.width+10)/25*9.5,mt=10+ut.width/25*8.5;K.attr("transform","translate("+bt+", "+mt+") rotate(-45, "+b+", "+B+")")}}if(N.tag){const K=m.insert("polygon"),it=m.append("circle"),st=m.append("text").attr("y",B-16).attr("class","tag-label").text(N.tag);let ut=st.node().getBBox();st.attr("x",b+10-ut.width/2);const bt=ut.height/2,mt=B-19.2;K.attr("class","tag-label-bkg").attr("points",` + ${b-ut.width/2-4/2},${mt+2} + ${b-ut.width/2-4/2},${mt-2} + ${b+10-ut.width/2-4},${mt-bt-2} + ${b+10+ut.width/2+4},${mt-bt-2} + ${b+10+ut.width/2+4},${mt+bt+2} + ${b+10-ut.width/2-4},${mt+bt+2}`),it.attr("cx",b-ut.width/2+4/2).attr("cy",mt).attr("r",1.5).attr("class","tag-hole"),y0==="TB"&&(K.attr("class","tag-label-bkg").attr("points",` ${j},${b+2} ${j},${b-2} - ${j+10},${b-ft-2} - ${j+10+it.width+4},${b-ft-2} - ${j+10+it.width+4},${b+ft+2} - ${j+10},${b+ft+2}`).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),rt.attr("cx",j+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),J.attr("x",j+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+j+","+b+")"))}}b+=50,b>CP&&(CP=b)})},Tze=(i,a,f)=>Object.keys(f).filter(m=>f[m].branch===a.branch&&f[m].seq>i.seq&&f[m].seq0,SP=(i,a,f=0)=>{const p=i+Math.abs(i-a)/2;if(f>5)return p;if(TK.every(b=>Math.abs(b-p)>=10))return TK.push(p),p;const m=Math.abs(i-a);return SP(i,a-m/5,f+1)},_ze=(i,a,f,p)=>{const v=_P[a.id],m=_P[f.id],b=Tze(a,f,p);let E="",C="",A=0,P=0,F=ed[f.branch].index,j;if(b){E="A 10 10, 0, 0, 0,",C="A 10 10, 0, 0, 1,",A=10,P=10,F=ed[f.branch].index;const R=v.ym.x&&(E="A 20 20, 0, 0, 0,",C="A 20 20, 0, 0, 1,",A=20,P=20,F=ed[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-A} ${C} ${v.x-P} ${m.y} L ${m.x} ${m.y}`),v.x===m.x&&(F=ed[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x+A} ${v.y} ${E} ${v.x+P} ${m.y+A} L ${m.x} ${m.y}`)):(v.ym.y&&(E="A 20 20, 0, 0, 0,",A=20,P=20,F=ed[a.branch].index,j=`M ${v.x} ${v.y} L ${m.x-A} ${v.y} ${E} ${m.x} ${v.y-P} L ${m.x} ${m.y}`),v.y===m.y&&(F=ed[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-A} ${E} ${v.x+P} ${m.y} L ${m.x} ${m.y}`));i.append("path").attr("d",j).attr("class","arrow arrow"+F%w9)},Cze=(i,a)=>{const f=i.append("g").attr("class","commit-arrows");Object.keys(a).forEach(p=>{const v=a[p];v.parents&&v.parents.length>0&&v.parents.forEach(m=>{_ze(f,a[m],v,a)})})},Sze=(i,a)=>{const f=JN().gitGraph,p=i.append("g");a.forEach((v,m)=>{const b=m%w9,E=ed[v.name].pos,C=p.append("line");C.attr("x1",0),C.attr("y1",E),C.attr("x2",CP),C.attr("y2",E),C.attr("class","branch branch"+b),x0==="TB"&&(C.attr("y1",30),C.attr("x1",E),C.attr("y2",CP),C.attr("x2",E)),TK.push(E);let A=v.name;const P=GBt(A),F=p.insert("rect"),R=p.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);R.node().appendChild(P);let H=P.getBBox();F.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-H.width-4-(f.rotateCommitLabel===!0?30:0)).attr("y",-H.height/2+8).attr("width",H.width+18).attr("height",H.height+4),R.attr("transform","translate("+(-H.width-14-(f.rotateCommitLabel===!0?30:0))+", "+(E-H.height/2-1)+")"),x0==="TB"&&(F.attr("x",E-H.width/2-10).attr("y",0),R.attr("transform","translate("+(E-H.width/2-5)+", 0)")),x0!=="TB"&&F.attr("transform","translate(-19, "+(E-H.height/2)+")")})},Aze=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:rze,db:kze,renderer:{draw:function(i,a,f,p){Eze();const v=JN(),m=v.gitGraph;Wt.debug("in gitgraph renderer",i+` -`,"id:",a,f),TP=p.db.getCommits();const b=p.db.getBranchesAsObjArray();x0=p.db.getDirection();const E=xr(`[id="${a}"]`);let C=0;b.forEach((A,P)=>{const F=GBt(A.name),j=E.append("g"),R=j.insert("g").attr("class","branchLabel"),H=R.insert("g").attr("class","label branch-label");H.node().appendChild(F);let Y=F.getBBox();ed[A.name]={pos:C,index:P},C+=50+(m.rotateCommitLabel?40:0)+(x0==="TB"?Y.width/2:0),H.remove(),R.remove(),j.remove()}),UBt(E,TP,!1),m.showBranches&&Sze(E,b),Cze(E,TP),UBt(E,TP,!0),to.insertTitle(E,"gitTitleText",m.titleTopMargin,p.db.getDiagramTitle()),SOt(void 0,E,m.diagramPadding,m.useMaxWidth??v.useMaxWidth)}},styles:i=>` + ${j+10},${b-bt-2} + ${j+10+ut.width+4},${b-bt-2} + ${j+10+ut.width+4},${b+bt+2} + ${j+10},${b+bt+2}`).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),it.attr("cx",j+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),st.attr("x",j+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+j+","+b+")"))}}b+=50,b>CP&&(CP=b)})},Sze=(i,a,f)=>Object.keys(f).filter(m=>f[m].branch===a.branch&&f[m].seq>i.seq&&f[m].seq0,_P=(i,a,f=0)=>{const p=i+Math.abs(i-a)/2;if(f>5)return p;if(xK.every(b=>Math.abs(b-p)>=10))return xK.push(p),p;const m=Math.abs(i-a);return _P(i,a-m/5,f+1)},Aze=(i,a,f,p)=>{const v=TP[a.id],m=TP[f.id],b=Sze(a,f,p);let E="",_="",L=0,N=0,B=Q1[f.branch].index,j;if(b){E="A 10 10, 0, 0, 0,",_="A 10 10, 0, 0, 1,",L=10,N=10,B=Q1[f.branch].index;const R=v.ym.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${_} ${v.x-N} ${m.y} L ${m.x} ${m.y}`),v.x===m.x&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x+L} ${v.y} ${E} ${v.x+N} ${m.y+L} L ${m.x} ${m.y}`)):(v.ym.y&&(E="A 20 20, 0, 0, 0,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${m.x-L} ${v.y} ${E} ${m.x} ${v.y-N} L ${m.x} ${m.y}`),v.y===m.y&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${E} ${v.x+N} ${m.y} L ${m.x} ${m.y}`));i.append("path").attr("d",j).attr("class","arrow arrow"+B%xT)},Lze=(i,a)=>{const f=i.append("g").attr("class","commit-arrows");Object.keys(a).forEach(p=>{const v=a[p];v.parents&&v.parents.length>0&&v.parents.forEach(m=>{Aze(f,a[m],v,a)})})},Mze=(i,a)=>{const f=JN().gitGraph,p=i.append("g");a.forEach((v,m)=>{const b=m%xT,E=Q1[v.name].pos,_=p.append("line");_.attr("x1",0),_.attr("y1",E),_.attr("x2",CP),_.attr("y2",E),_.attr("class","branch branch"+b),y0==="TB"&&(_.attr("y1",30),_.attr("x1",E),_.attr("y2",CP),_.attr("x2",E)),xK.push(E);let L=v.name;const N=qBt(L),B=p.insert("rect"),R=p.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);R.node().appendChild(N);let z=N.getBBox();B.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-z.width-4-(f.rotateCommitLabel===!0?30:0)).attr("y",-z.height/2+8).attr("width",z.width+18).attr("height",z.height+4),R.attr("transform","translate("+(-z.width-14-(f.rotateCommitLabel===!0?30:0))+", "+(E-z.height/2-1)+")"),y0==="TB"&&(B.attr("x",E-z.width/2-10).attr("y",0),R.attr("transform","translate("+(E-z.width/2-5)+", 0)")),y0!=="TB"&&B.attr("transform","translate(-19, "+(E-z.height/2)+")")})},Ize=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oze,db:Cze,renderer:{draw:function(i,a,f,p){_ze();const v=JN(),m=v.gitGraph;Ut.debug("in gitgraph renderer",i+` +`,"id:",a,f),EP=p.db.getCommits();const b=p.db.getBranchesAsObjArray();y0=p.db.getDirection();const E=yr(`[id="${a}"]`);let _=0;b.forEach((L,N)=>{const B=qBt(L.name),j=E.append("g"),R=j.insert("g").attr("class","branchLabel"),z=R.insert("g").attr("class","label branch-label");z.node().appendChild(B);let K=B.getBBox();Q1[L.name]={pos:_,index:N},_+=50+(m.rotateCommitLabel?40:0)+(y0==="TB"?K.width/2:0),z.remove(),R.remove(),j.remove()}),HBt(E,EP,!1),m.showBranches&&Mze(E,b),Lze(E,EP),HBt(E,EP,!0),$a.insertTitle(E,"gitTitleText",m.titleTopMargin,p.db.getDiagramTitle()),MOt(void 0,E,m.diagramPadding,m.useMaxWidth??v.useMaxWidth)}},styles:i=>` .commit-id, .commit-msg, .branch-label { @@ -339,12 +337,12 @@ Expecting `+ye.join(", ")+", got '"+(this.terminals_[Ae]||Ae)+"'":fn="Parse erro font-size: 18px; fill: ${i.textColor}; } -`}},Symbol.toStringTag,{value:"Module"}));var P0t=function(){var i=function(Pt,pt,Ft,X){for(Ft=Ft||{},X=Pt.length;X--;Ft[Pt[X]]=pt);return Ft},a=[1,3],f=[1,5],p=[7,9,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,36,43,48],v=[1,32],m=[1,33],b=[1,34],E=[1,35],C=[1,36],A=[1,37],P=[1,38],F=[1,15],j=[1,16],R=[1,17],H=[1,18],Y=[1,19],rt=[1,20],J=[1,21],it=[1,22],ft=[1,24],Tt=[1,25],kt=[1,26],mt=[1,27],ct=[1,28],yt=[1,30],st=[1,39],xt=[1,42],ht=[5,7,9,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,36,43,48],dt={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,weekday:12,weekday_monday:13,weekday_tuesday:14,weekday_wednesday:15,weekday_thursday:16,weekday_friday:17,weekday_saturday:18,weekday_sunday:19,dateFormat:20,inclusiveEndDates:21,topAxis:22,axisFormat:23,tickInterval:24,excludes:25,includes:26,todayMarker:27,title:28,acc_title:29,acc_title_value:30,acc_descr:31,acc_descr_value:32,acc_descr_multiline_value:33,section:34,clickStatement:35,taskTxt:36,taskData:37,openDirective:38,typeDirective:39,closeDirective:40,":":41,argDirective:42,click:43,callbackname:44,callbackargs:45,href:46,clickStatementDebug:47,open_directive:48,type_directive:49,arg_directive:50,close_directive:51,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",13:"weekday_monday",14:"weekday_tuesday",15:"weekday_wednesday",16:"weekday_thursday",17:"weekday_friday",18:"weekday_saturday",19:"weekday_sunday",20:"dateFormat",21:"inclusiveEndDates",22:"topAxis",23:"axisFormat",24:"tickInterval",25:"excludes",26:"includes",27:"todayMarker",28:"title",29:"acc_title",30:"acc_title_value",31:"acc_descr",32:"acc_descr_value",33:"acc_descr_multiline_value",34:"section",36:"taskTxt",37:"taskData",41:":",43:"click",44:"callbackname",45:"callbackargs",46:"href",48:"open_directive",49:"type_directive",50:"arg_directive",51:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[12,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[35,2],[35,3],[35,3],[35,4],[35,3],[35,4],[35,2],[47,2],[47,3],[47,3],[47,4],[47,3],[47,4],[47,2],[38,1],[39,1],[42,1],[40,1]],performAction:function(pt,Ft,X,Rt,Bt,vt,Ot){var Vt=vt.length-1;switch(Bt){case 2:return vt[Vt-1];case 3:this.$=[];break;case 4:vt[Vt-1].push(vt[Vt]),this.$=vt[Vt-1];break;case 5:case 6:this.$=vt[Vt];break;case 7:case 8:this.$=[];break;case 9:Rt.setWeekday("monday");break;case 10:Rt.setWeekday("tuesday");break;case 11:Rt.setWeekday("wednesday");break;case 12:Rt.setWeekday("thursday");break;case 13:Rt.setWeekday("friday");break;case 14:Rt.setWeekday("saturday");break;case 15:Rt.setWeekday("sunday");break;case 16:Rt.setDateFormat(vt[Vt].substr(11)),this.$=vt[Vt].substr(11);break;case 17:Rt.enableInclusiveEndDates(),this.$=vt[Vt].substr(18);break;case 18:Rt.TopAxis(),this.$=vt[Vt].substr(8);break;case 19:Rt.setAxisFormat(vt[Vt].substr(11)),this.$=vt[Vt].substr(11);break;case 20:Rt.setTickInterval(vt[Vt].substr(13)),this.$=vt[Vt].substr(13);break;case 21:Rt.setExcludes(vt[Vt].substr(9)),this.$=vt[Vt].substr(9);break;case 22:Rt.setIncludes(vt[Vt].substr(9)),this.$=vt[Vt].substr(9);break;case 23:Rt.setTodayMarker(vt[Vt].substr(12)),this.$=vt[Vt].substr(12);break;case 25:Rt.setDiagramTitle(vt[Vt].substr(6)),this.$=vt[Vt].substr(6);break;case 26:this.$=vt[Vt].trim(),Rt.setAccTitle(this.$);break;case 27:case 28:this.$=vt[Vt].trim(),Rt.setAccDescription(this.$);break;case 29:Rt.addSection(vt[Vt].substr(8)),this.$=vt[Vt].substr(8);break;case 31:Rt.addTask(vt[Vt-1],vt[Vt]),this.$="task";break;case 35:this.$=vt[Vt-1],Rt.setClickEvent(vt[Vt-1],vt[Vt],null);break;case 36:this.$=vt[Vt-2],Rt.setClickEvent(vt[Vt-2],vt[Vt-1],vt[Vt]);break;case 37:this.$=vt[Vt-2],Rt.setClickEvent(vt[Vt-2],vt[Vt-1],null),Rt.setLink(vt[Vt-2],vt[Vt]);break;case 38:this.$=vt[Vt-3],Rt.setClickEvent(vt[Vt-3],vt[Vt-2],vt[Vt-1]),Rt.setLink(vt[Vt-3],vt[Vt]);break;case 39:this.$=vt[Vt-2],Rt.setClickEvent(vt[Vt-2],vt[Vt],null),Rt.setLink(vt[Vt-2],vt[Vt-1]);break;case 40:this.$=vt[Vt-3],Rt.setClickEvent(vt[Vt-3],vt[Vt-1],vt[Vt]),Rt.setLink(vt[Vt-3],vt[Vt-2]);break;case 41:this.$=vt[Vt-1],Rt.setLink(vt[Vt-1],vt[Vt]);break;case 42:case 48:this.$=vt[Vt-1]+" "+vt[Vt];break;case 43:case 44:case 46:this.$=vt[Vt-2]+" "+vt[Vt-1]+" "+vt[Vt];break;case 45:case 47:this.$=vt[Vt-3]+" "+vt[Vt-2]+" "+vt[Vt-1]+" "+vt[Vt];break;case 49:Rt.parseDirective("%%{","open_directive");break;case 50:Rt.parseDirective(vt[Vt],"type_directive");break;case 51:vt[Vt]=vt[Vt].trim().replace(/'/g,'"'),Rt.parseDirective(vt[Vt],"arg_directive");break;case 52:Rt.parseDirective("}%%","close_directive","gantt");break}},table:[{3:1,4:2,5:a,38:4,48:f},{1:[3]},{3:6,4:2,5:a,38:4,48:f},i(p,[2,3],{6:7}),{39:8,49:[1,9]},{49:[2,49]},{1:[2,1]},{4:31,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:23,13:v,14:m,15:b,16:E,17:C,18:A,19:P,20:F,21:j,22:R,23:H,24:Y,25:rt,26:J,27:it,28:ft,29:Tt,31:kt,33:mt,34:ct,35:29,36:yt,38:4,43:st,48:f},{40:40,41:[1,41],51:xt},i([41,51],[2,50]),i(p,[2,8],{1:[2,2]}),i(p,[2,4]),{4:31,10:43,12:23,13:v,14:m,15:b,16:E,17:C,18:A,19:P,20:F,21:j,22:R,23:H,24:Y,25:rt,26:J,27:it,28:ft,29:Tt,31:kt,33:mt,34:ct,35:29,36:yt,38:4,43:st,48:f},i(p,[2,6]),i(p,[2,7]),i(p,[2,16]),i(p,[2,17]),i(p,[2,18]),i(p,[2,19]),i(p,[2,20]),i(p,[2,21]),i(p,[2,22]),i(p,[2,23]),i(p,[2,24]),i(p,[2,25]),{30:[1,44]},{32:[1,45]},i(p,[2,28]),i(p,[2,29]),i(p,[2,30]),{37:[1,46]},i(p,[2,32]),i(p,[2,9]),i(p,[2,10]),i(p,[2,11]),i(p,[2,12]),i(p,[2,13]),i(p,[2,14]),i(p,[2,15]),{44:[1,47],46:[1,48]},{11:[1,49]},{42:50,50:[1,51]},{11:[2,52]},i(p,[2,5]),i(p,[2,26]),i(p,[2,27]),i(p,[2,31]),i(p,[2,35],{45:[1,52],46:[1,53]}),i(p,[2,41],{44:[1,54]}),i(ht,[2,33]),{40:55,51:xt},{51:[2,51]},i(p,[2,36],{46:[1,56]}),i(p,[2,37]),i(p,[2,39],{45:[1,57]}),{11:[1,58]},i(p,[2,38]),i(p,[2,40]),i(ht,[2,34])],defaultActions:{5:[2,49],6:[2,1],42:[2,52],51:[2,51]},parseError:function(pt,Ft){if(Ft.recoverable)this.trace(pt);else{var X=new Error(pt);throw X.hash=Ft,X}},parse:function(pt){var Ft=this,X=[0],Rt=[],Bt=[null],vt=[],Ot=this.table,Vt="",qe=0,_n=0,Te=2,Wn=1,Ae=vt.slice.call(arguments,1),ne=Object.create(this.lexer),ke={yy:{}};for(var Ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ve)&&(ke.yy[Ve]=this.yy[Ve]);ne.setInput(pt,ke.yy),ke.yy.lexer=ne,ke.yy.parser=this,typeof ne.yylloc>"u"&&(ne.yylloc={});var Ee=ne.yylloc;vt.push(Ee);var He=ne.options&&ne.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ce(){var pi;return pi=Rt.pop()||ne.lex()||Wn,typeof pi!="number"&&(pi instanceof Array&&(Rt=pi,pi=Rt.pop()),pi=Ft.symbols_[pi]||pi),pi}for(var $e,ye,fn,Yt,Mi={},qt,zi,Se,ki;;){if(ye=X[X.length-1],this.defaultActions[ye]?fn=this.defaultActions[ye]:(($e===null||typeof $e>"u")&&($e=Ce()),fn=Ot[ye]&&Ot[ye][$e]),typeof fn>"u"||!fn.length||!fn[0]){var Ri="";ki=[];for(qt in Ot[ye])this.terminals_[qt]&&qt>Te&&ki.push("'"+this.terminals_[qt]+"'");ne.showPosition?Ri="Parse error on line "+(qe+1)+`: -`+ne.showPosition()+` -Expecting `+ki.join(", ")+", got '"+(this.terminals_[$e]||$e)+"'":Ri="Parse error on line "+(qe+1)+": Unexpected "+($e==Wn?"end of input":"'"+(this.terminals_[$e]||$e)+"'"),this.parseError(Ri,{text:ne.match,token:this.terminals_[$e]||$e,line:ne.yylineno,loc:Ee,expected:ki})}if(fn[0]instanceof Array&&fn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ye+", token: "+$e);switch(fn[0]){case 1:X.push($e),Bt.push(ne.yytext),vt.push(ne.yylloc),X.push(fn[1]),$e=null,_n=ne.yyleng,Vt=ne.yytext,qe=ne.yylineno,Ee=ne.yylloc;break;case 2:if(zi=this.productions_[fn[1]][1],Mi.$=Bt[Bt.length-zi],Mi._$={first_line:vt[vt.length-(zi||1)].first_line,last_line:vt[vt.length-1].last_line,first_column:vt[vt.length-(zi||1)].first_column,last_column:vt[vt.length-1].last_column},He&&(Mi._$.range=[vt[vt.length-(zi||1)].range[0],vt[vt.length-1].range[1]]),Yt=this.performAction.apply(Mi,[Vt,_n,qe,ke.yy,fn[1],Bt,vt].concat(Ae)),typeof Yt<"u")return Yt;zi&&(X=X.slice(0,-1*zi*2),Bt=Bt.slice(0,-1*zi),vt=vt.slice(0,-1*zi)),X.push(this.productions_[fn[1]][0]),Bt.push(Mi.$),vt.push(Mi._$),Se=Ot[X[X.length-2]][X[X.length-1]],X.push(Se);break;case 3:return!0}}return!0}},Ct=function(){var Pt={EOF:1,parseError:function(Ft,X){if(this.yy.parser)this.yy.parser.parseError(Ft,X);else throw new Error(Ft)},setInput:function(pt,Ft){return this.yy=Ft||this.yy||{},this._input=pt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var pt=this._input[0];this.yytext+=pt,this.yyleng++,this.offset++,this.match+=pt,this.matched+=pt;var Ft=pt.match(/(?:\r\n?|\n).*/g);return Ft?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),pt},unput:function(pt){var Ft=pt.length,X=pt.split(/(?:\r\n?|\n)/g);this._input=pt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ft),this.offset-=Ft;var Rt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),X.length-1&&(this.yylineno-=X.length-1);var Bt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:X?(X.length===Rt.length?this.yylloc.first_column:0)+Rt[Rt.length-X.length].length-X[0].length:this.yylloc.first_column-Ft},this.options.ranges&&(this.yylloc.range=[Bt[0],Bt[0]+this.yyleng-Ft]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(pt){this.unput(this.match.slice(pt))},pastInput:function(){var pt=this.matched.substr(0,this.matched.length-this.match.length);return(pt.length>20?"...":"")+pt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var pt=this.match;return pt.length<20&&(pt+=this._input.substr(0,20-pt.length)),(pt.substr(0,20)+(pt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var pt=this.pastInput(),Ft=new Array(pt.length+1).join("-");return pt+this.upcomingInput()+` -`+Ft+"^"},test_match:function(pt,Ft){var X,Rt,Bt;if(this.options.backtrack_lexer&&(Bt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Bt.yylloc.range=this.yylloc.range.slice(0))),Rt=pt[0].match(/(?:\r\n?|\n).*/g),Rt&&(this.yylineno+=Rt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Rt?Rt[Rt.length-1].length-Rt[Rt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+pt[0].length},this.yytext+=pt[0],this.match+=pt[0],this.matches=pt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(pt[0].length),this.matched+=pt[0],X=this.performAction.call(this,this.yy,this,Ft,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),X)return X;if(this._backtrack){for(var vt in Bt)this[vt]=Bt[vt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var pt,Ft,X,Rt;this._more||(this.yytext="",this.match="");for(var Bt=this._currentRules(),vt=0;vtFt[0].length)){if(Ft=X,Rt=vt,this.options.backtrack_lexer){if(pt=this.test_match(X,Bt[vt]),pt!==!1)return pt;if(this._backtrack){Ft=!1;continue}else return!1}else if(!this.options.flex)break}return Ft?(pt=this.test_match(Ft,Bt[Rt]),pt!==!1?pt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ft=this.next();return Ft||this.lex()},begin:function(Ft){this.conditionStack.push(Ft)},popState:function(){var Ft=this.conditionStack.length-1;return Ft>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ft){return Ft=this.conditionStack.length-1-Math.abs(Ft||0),Ft>=0?this.conditionStack[Ft]:"INITIAL"},pushState:function(Ft){this.begin(Ft)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ft,X,Rt,Bt){switch(Rt){case 0:return this.begin("open_directive"),48;case 1:return this.begin("type_directive"),49;case 2:return this.popState(),this.begin("arg_directive"),41;case 3:return this.popState(),this.popState(),51;case 4:return 50;case 5:return this.begin("acc_title"),29;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),31;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:break;case 13:break;case 14:break;case 15:return 11;case 16:break;case 17:break;case 18:break;case 19:this.begin("href");break;case 20:this.popState();break;case 21:return 46;case 22:this.begin("callbackname");break;case 23:this.popState();break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 44;case 26:this.popState();break;case 27:return 45;case 28:this.begin("click");break;case 29:this.popState();break;case 30:return 43;case 31:return 5;case 32:return 20;case 33:return 21;case 34:return 22;case 35:return 23;case 36:return 24;case 37:return 26;case 38:return 25;case 39:return 27;case 40:return 13;case 41:return 14;case 42:return 15;case 43:return 16;case 44:return 17;case 45:return 18;case 46:return 19;case 47:return"date";case 48:return 28;case 49:return"accDescription";case 50:return 34;case 51:return 36;case 52:return 37;case 53:return 41;case 54:return 7;case 55:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return Pt}();dt.lexer=Ct;function tt(){this.yy={}}return tt.prototype=dt,dt.Parser=tt,new tt}();P0t.parser=P0t;const Lze=P0t;var WBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f="day";return function(p,v,m){var b=function(A){return A.add(4-A.isoWeekday(),f)},E=v.prototype;E.isoWeekYear=function(){return b(this).year()},E.isoWeek=function(A){if(!this.$utils().u(A))return this.add(7*(A-this.isoWeek()),f);var P,F,j,R,H=b(this),Y=(P=this.isoWeekYear(),F=this.$u,j=(F?m.utc:m)().year(P).startOf("year"),R=4-j.isoWeekday(),j.isoWeekday()>4&&(R+=7),j.add(R,f));return H.diff(Y,"week")+1},E.isoWeekday=function(A){return this.$utils().u(A)?this.day()||7:this.day(this.day()%7?A:A-7)};var C=E.startOf;E.startOf=function(A,P){var F=this.$utils(),j=!!F.u(P)||P;return F.p(A)==="isoweek"?j?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):C.bind(this)(A,P)}}})})(WBt);var Mze=WBt.exports;const Dze=PE(Mze);var KBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},p=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,v=/\d\d/,m=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,E={},C=function(Y){return(Y=+Y)+(Y>68?1900:2e3)},A=function(Y){return function(rt){this[Y]=+rt}},P=[/[+-]\d\d:?(\d\d)?|Z/,function(Y){(this.zone||(this.zone={})).offset=function(rt){if(!rt||rt==="Z")return 0;var J=rt.match(/([+-]|\d\d)/g),it=60*J[1]+(+J[2]||0);return it===0?0:J[0]==="+"?-it:it}(Y)}],F=function(Y){var rt=E[Y];return rt&&(rt.indexOf?rt:rt.s.concat(rt.f))},j=function(Y,rt){var J,it=E.meridiem;if(it){for(var ft=1;ft<=24;ft+=1)if(Y.indexOf(it(ft,0,rt))>-1){J=ft>12;break}}else J=Y===(rt?"pm":"PM");return J},R={A:[b,function(Y){this.afternoon=j(Y,!1)}],a:[b,function(Y){this.afternoon=j(Y,!0)}],S:[/\d/,function(Y){this.milliseconds=100*+Y}],SS:[v,function(Y){this.milliseconds=10*+Y}],SSS:[/\d{3}/,function(Y){this.milliseconds=+Y}],s:[m,A("seconds")],ss:[m,A("seconds")],m:[m,A("minutes")],mm:[m,A("minutes")],H:[m,A("hours")],h:[m,A("hours")],HH:[m,A("hours")],hh:[m,A("hours")],D:[m,A("day")],DD:[v,A("day")],Do:[b,function(Y){var rt=E.ordinal,J=Y.match(/\d+/);if(this.day=J[0],rt)for(var it=1;it<=31;it+=1)rt(it).replace(/\[|\]/g,"")===Y&&(this.day=it)}],M:[m,A("month")],MM:[v,A("month")],MMM:[b,function(Y){var rt=F("months"),J=(F("monthsShort")||rt.map(function(it){return it.slice(0,3)})).indexOf(Y)+1;if(J<1)throw new Error;this.month=J%12||J}],MMMM:[b,function(Y){var rt=F("months").indexOf(Y)+1;if(rt<1)throw new Error;this.month=rt%12||rt}],Y:[/[+-]?\d+/,A("year")],YY:[v,function(Y){this.year=C(Y)}],YYYY:[/\d{4}/,A("year")],Z:P,ZZ:P};function H(Y){var rt,J;rt=Y,J=E&&E.formats;for(var it=(Y=rt.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(st,xt,ht){var dt=ht&&ht.toUpperCase();return xt||J[ht]||f[ht]||J[dt].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(Ct,tt,Pt){return tt||Pt.slice(1)})})).match(p),ft=it.length,Tt=0;Tt-1)return new Date((Ft==="X"?1e3:1)*pt);var Rt=H(Ft)(pt),Bt=Rt.year,vt=Rt.month,Ot=Rt.day,Vt=Rt.hours,qe=Rt.minutes,_n=Rt.seconds,Te=Rt.milliseconds,Wn=Rt.zone,Ae=new Date,ne=Ot||(Bt||vt?1:Ae.getDate()),ke=Bt||Ae.getFullYear(),Ve=0;Bt&&!vt||(Ve=vt>0?vt-1:Ae.getMonth());var Ee=Vt||0,He=qe||0,Ce=_n||0,$e=Te||0;return Wn?new Date(Date.UTC(ke,Ve,ne,Ee,He,Ce,$e+60*Wn.offset*1e3)):X?new Date(Date.UTC(ke,Ve,ne,Ee,He,Ce,$e)):new Date(ke,Ve,ne,Ee,He,Ce,$e)}catch{return new Date("")}}(kt,yt,mt),this.init(),dt&&dt!==!0&&(this.$L=this.locale(dt).$L),ht&&kt!=this.format(yt)&&(this.$d=new Date("")),E={}}else if(yt instanceof Array)for(var Ct=yt.length,tt=1;tt<=Ct;tt+=1){ct[1]=yt[tt-1];var Pt=J.apply(this,ct);if(Pt.isValid()){this.$d=Pt.$d,this.$L=Pt.$L,this.init();break}tt===Ct&&(this.$d=new Date(""))}else ft.call(this,Tt)}}})})(KBt);var Ize=KBt.exports;const Oze=PE(Ize);var YBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){return function(f,p){var v=p.prototype,m=v.format;v.format=function(b){var E=this,C=this.$locale();if(!this.isValid())return m.bind(this)(b);var A=this.$utils(),P=(b||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(F){switch(F){case"Q":return Math.ceil((E.$M+1)/3);case"Do":return C.ordinal(E.$D);case"gggg":return E.weekYear();case"GGGG":return E.isoWeekYear();case"wo":return C.ordinal(E.week(),"W");case"w":case"ww":return A.s(E.week(),F==="w"?1:2,"0");case"W":case"WW":return A.s(E.isoWeek(),F==="W"?1:2,"0");case"k":case"kk":return A.s(String(E.$H===0?24:E.$H),F==="k"?1:2,"0");case"X":return Math.floor(E.$d.getTime()/1e3);case"x":return E.$d.getTime();case"z":return"["+E.offsetName()+"]";case"zzz":return"["+E.offsetName("long")+"]";default:return F}});return m.bind(this)(P)}}})})(YBt);var Nze=YBt.exports;const Pze=PE(Nze);up.extend(Dze),up.extend(Oze),up.extend(Pze);let m3="",F0t="",B0t,R0t="",AP=[],LP=[],j0t={},$0t=[],_K=[],sL="",z0t="";const XBt=["active","done","crit","milestone"];let q0t=[],MP=!1,H0t=!1,V0t="sunday",G0t=0;const Fze=function(i,a,f){J1.parseDirective(this,i,a,f)},Bze=function(){$0t=[],_K=[],sL="",q0t=[],CK=0,W0t=void 0,SK=void 0,d1=[],m3="",F0t="",z0t="",B0t=void 0,R0t="",AP=[],LP=[],MP=!1,H0t=!1,G0t=0,j0t={},cg(),V0t="sunday"},Rze=function(i){F0t=i},jze=function(){return F0t},$ze=function(i){B0t=i},zze=function(){return B0t},qze=function(i){R0t=i},Hze=function(){return R0t},Vze=function(i){m3=i},Gze=function(){MP=!0},Uze=function(){return MP},Wze=function(){H0t=!0},Kze=function(){return H0t},Yze=function(i){z0t=i},Xze=function(){return z0t},Qze=function(){return m3},Zze=function(i){AP=i.toLowerCase().split(/[\s,]+/)},Jze=function(){return AP},tqe=function(i){LP=i.toLowerCase().split(/[\s,]+/)},eqe=function(){return LP},nqe=function(){return j0t},rqe=function(i){sL=i,$0t.push(i)},iqe=function(){return $0t},sqe=function(){let i=nRt();const a=10;let f=0;for(;!i&&f=6&&f.includes("weekends")||f.includes(i.format("dddd").toLowerCase())?!0:f.includes(i.format(a.trim()))},aqe=function(i){V0t=i},oqe=function(){return V0t},ZBt=function(i,a,f,p){if(!f.length||i.manualEndTime)return;let v;i.startTime instanceof Date?v=up(i.startTime):v=up(i.startTime,a,!0),v=v.add(1,"d");let m;i.endTime instanceof Date?m=up(i.endTime):m=up(i.endTime,a,!0);const[b,E]=cqe(v,m,a,f,p);i.endTime=b.toDate(),i.renderEndTime=E},cqe=function(i,a,f,p,v){let m=!1,b=null;for(;i<=a;)m||(b=a.toDate()),m=QBt(i,f,p,v),m&&(a=a.add(1,"d")),i=i.add(1,"d");return[a,b]},U0t=function(i,a,f){f=f.trim();const v=/^after\s+([\d\w- ]+)/.exec(f.trim());if(v!==null){let b=null;if(v[1].split(" ").forEach(function(E){let C=oL(E);C!==void 0&&(b?C.endTime>b.endTime&&(b=C):b=C)}),b)return b.endTime;{const E=new Date;return E.setHours(0,0,0,0),E}}let m=up(f,a.trim(),!0);if(m.isValid())return m.toDate();{Wt.debug("Invalid date:"+f),Wt.debug("With date format:"+a.trim());const b=new Date(f);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+f);return b}},JBt=function(i){const a=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return a!==null?[Number.parseFloat(a[1]),a[2]]:[NaN,"ms"]},tRt=function(i,a,f,p=!1){f=f.trim();let v=up(f,a.trim(),!0);if(v.isValid())return p&&(v=v.add(1,"d")),v.toDate();let m=up(i);const[b,E]=JBt(f);if(!Number.isNaN(b)){const C=m.add(b,E);C.isValid()&&(m=C)}return m.toDate()};let CK=0;const aL=function(i){return i===void 0?(CK=CK+1,"task"+CK):i},uqe=function(i,a){let f;a.substr(0,1)===":"?f=a.substr(1,a.length):f=a;const p=f.split(","),v={};sRt(p,v,XBt);for(let b=0;b{window.open(f,"_self")}),j0t[p]=f)}),rRt(i,"clickable")},rRt=function(i,a){i.split(",").forEach(function(f){let p=oL(f);p!==void 0&&p.classes.push(a)})},gqe=function(i,a,f){if(De().securityLevel!=="loose"||a===void 0)return;let p=[];if(typeof f=="string"){p=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m{to.runFunc(a,...p)})},iRt=function(i,a){q0t.push(function(){const f=document.querySelector(`[id="${i}"]`);f!==null&&f.addEventListener("click",function(){a()})},function(){const f=document.querySelector(`[id="${i}-text"]`);f!==null&&f.addEventListener("click",function(){a()})})},pqe={parseDirective:Fze,getConfig:()=>De().gantt,clear:Bze,setDateFormat:Vze,getDateFormat:Qze,enableInclusiveEndDates:Gze,endDatesAreInclusive:Uze,enableTopAxis:Wze,topAxisEnabled:Kze,setAxisFormat:Rze,getAxisFormat:jze,setTickInterval:$ze,getTickInterval:zze,setTodayMarker:qze,getTodayMarker:Hze,setAccTitle:m0,getAccTitle:ug,setDiagramTitle:Nb,getDiagramTitle:hp,setDisplayMode:Yze,getDisplayMode:Xze,setAccDescription:lg,getAccDescription:hg,addSection:rqe,getSections:iqe,getTasks:sqe,addTask:hqe,findTaskById:oL,addTaskOrg:fqe,setIncludes:Zze,getIncludes:Jze,setExcludes:tqe,getExcludes:eqe,setClickEvent:function(i,a,f){i.split(",").forEach(function(p){gqe(p,a,f)}),rRt(i,"clickable")},setLink:dqe,getLinks:nqe,bindFunctions:function(i){q0t.forEach(function(a){a(i)})},parseDuration:JBt,isInvalidDate:QBt,setWeekday:aqe,getWeekday:oqe};function sRt(i,a,f){let p=!0;for(;p;)p=!1,f.forEach(function(v){const m="^\\s*"+v+"\\s*$",b=new RegExp(m);i[0].match(b)&&(a[v]=!0,i.shift(1),p=!0)})}const bqe=function(){Wt.debug("Something is calling, setConf, remove the call")},aRt={monday:DN,tuesday:UMt,wednesday:WMt,thursday:GE,friday:KMt,saturday:YMt,sunday:MN},vqe=(i,a)=>{let f=[...i].map(()=>-1/0),p=[...i].sort((m,b)=>m.startTime-b.startTime||m.order-b.order),v=0;for(const m of p)for(let b=0;b=f[b]){f[b]=m.endTime,m.order=b+a,b>v&&(v=b);break}return v};let M5;const wqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Lze,db:pqe,renderer:{setConf:bqe,draw:function(i,a,f,p){const v=De().gantt,m=De().securityLevel;let b;m==="sandbox"&&(b=xr("#i"+a));const E=xr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),C=m==="sandbox"?b.nodes()[0].contentDocument:document,A=C.getElementById(a);M5=A.parentElement.offsetWidth,M5===void 0&&(M5=1200),v.useWidth!==void 0&&(M5=v.useWidth);const P=p.db.getTasks();let F=[];for(const yt of P)F.push(yt.type);F=ct(F);const j={};let R=2*v.topPadding;if(p.db.getDisplayMode()==="compact"||v.displayMode==="compact"){const yt={};for(const xt of P)yt[xt.section]===void 0?yt[xt.section]=[xt]:yt[xt.section].push(xt);let st=0;for(const xt of Object.keys(yt)){const ht=vqe(yt[xt],st)+1;st+=ht,R+=ht*(v.barHeight+v.barGap),j[xt]=ht}}else{R+=P.length*(v.barHeight+v.barGap);for(const yt of F)j[yt]=P.filter(st=>st.type===yt).length}A.setAttribute("viewBox","0 0 "+M5+" "+R);const H=E.select(`[id="${a}"]`),Y=TEe().domain([c6e(P,function(yt){return yt.startTime}),o6e(P,function(yt){return yt.endTime})]).rangeRound([0,M5-v.leftPadding-v.rightPadding]);function rt(yt,st){const xt=yt.startTime,ht=st.startTime;let dt=0;return xt>ht?dt=1:xtBt.order))].map(Bt=>yt.find(vt=>vt.order===Bt));H.append("g").selectAll("rect").data(pt).enter().append("rect").attr("x",0).attr("y",function(Bt,vt){return vt=Bt.order,vt*st+xt-2}).attr("width",function(){return tt-v.rightPadding/2}).attr("height",st).attr("class",function(Bt){for(const[vt,Ot]of F.entries())if(Bt.type===Ot)return"section section"+vt%v.numberSectionStyles;return"section section0"});const Ft=H.append("g").selectAll("rect").data(yt).enter(),X=p.db.getLinks();if(Ft.append("rect").attr("id",function(Bt){return Bt.id}).attr("rx",3).attr("ry",3).attr("x",function(Bt){return Bt.milestone?Y(Bt.startTime)+ht+.5*(Y(Bt.endTime)-Y(Bt.startTime))-.5*dt:Y(Bt.startTime)+ht}).attr("y",function(Bt,vt){return vt=Bt.order,vt*st+xt}).attr("width",function(Bt){return Bt.milestone?dt:Y(Bt.renderEndTime||Bt.endTime)-Y(Bt.startTime)}).attr("height",dt).attr("transform-origin",function(Bt,vt){return vt=Bt.order,(Y(Bt.startTime)+ht+.5*(Y(Bt.endTime)-Y(Bt.startTime))).toString()+"px "+(vt*st+xt+.5*dt).toString()+"px"}).attr("class",function(Bt){const vt="task";let Ot="";Bt.classes.length>0&&(Ot=Bt.classes.join(" "));let Vt=0;for(const[_n,Te]of F.entries())Bt.type===Te&&(Vt=_n%v.numberSectionStyles);let qe="";return Bt.active?Bt.crit?qe+=" activeCrit":qe=" active":Bt.done?Bt.crit?qe=" doneCrit":qe=" done":Bt.crit&&(qe+=" crit"),qe.length===0&&(qe=" task"),Bt.milestone&&(qe=" milestone "+qe),qe+=Vt,qe+=" "+Ot,vt+qe}),Ft.append("text").attr("id",function(Bt){return Bt.id+"-text"}).text(function(Bt){return Bt.task}).attr("font-size",v.fontSize).attr("x",function(Bt){let vt=Y(Bt.startTime),Ot=Y(Bt.renderEndTime||Bt.endTime);Bt.milestone&&(vt+=.5*(Y(Bt.endTime)-Y(Bt.startTime))-.5*dt),Bt.milestone&&(Ot=vt+dt);const Vt=this.getBBox().width;return Vt>Ot-vt?Ot+Vt+1.5*v.leftPadding>tt?vt+ht-5:Ot+ht+5:(Ot-vt)/2+vt+ht}).attr("y",function(Bt,vt){return vt=Bt.order,vt*st+v.barHeight/2+(v.fontSize/2-2)+xt}).attr("text-height",dt).attr("class",function(Bt){const vt=Y(Bt.startTime);let Ot=Y(Bt.endTime);Bt.milestone&&(Ot=vt+dt);const Vt=this.getBBox().width;let qe="";Bt.classes.length>0&&(qe=Bt.classes.join(" "));let _n=0;for(const[Wn,Ae]of F.entries())Bt.type===Ae&&(_n=Wn%v.numberSectionStyles);let Te="";return Bt.active&&(Bt.crit?Te="activeCritText"+_n:Te="activeText"+_n),Bt.done?Bt.crit?Te=Te+" doneCritText"+_n:Te=Te+" doneText"+_n:Bt.crit&&(Te=Te+" critText"+_n),Bt.milestone&&(Te+=" milestoneText"),Vt>Ot-vt?Ot+Vt+1.5*v.leftPadding>tt?qe+" taskTextOutsideLeft taskTextOutside"+_n+" "+Te:qe+" taskTextOutsideRight taskTextOutside"+_n+" "+Te+" width-"+Vt:qe+" taskText taskText"+_n+" "+Te+" width-"+Vt}),De().securityLevel==="sandbox"){let Bt;Bt=xr("#i"+a);const vt=Bt.nodes()[0].contentDocument;Ft.filter(function(Ot){return X[Ot.id]!==void 0}).each(function(Ot){var Vt=vt.querySelector("#"+Ot.id),qe=vt.querySelector("#"+Ot.id+"-text");const _n=Vt.parentNode;var Te=vt.createElement("a");Te.setAttribute("xlink:href",X[Ot.id]),Te.setAttribute("target","_top"),_n.appendChild(Te),Te.appendChild(Vt),Te.appendChild(qe)})}}function ft(yt,st,xt,ht,dt,Ct,tt,Pt){const pt=Ct.reduce((Vt,{startTime:qe})=>Vt?Math.min(Vt,qe):qe,0),Ft=Ct.reduce((Vt,{endTime:qe})=>Vt?Math.max(Vt,qe):qe,0),X=p.db.getDateFormat();if(!pt||!Ft)return;const Rt=[];let Bt=null,vt=up(pt);for(;vt.valueOf()<=Ft;)p.db.isInvalidDate(vt,X,tt,Pt)?Bt?Bt.end=vt:Bt={start:vt,end:vt}:Bt&&(Rt.push(Bt),Bt=null),vt=vt.add(1,"d");H.append("g").selectAll("rect").data(Rt).enter().append("rect").attr("id",function(Vt){return"exclude-"+Vt.start.format("YYYY-MM-DD")}).attr("x",function(Vt){return Y(Vt.start)+xt}).attr("y",v.gridLineStartPadding).attr("width",function(Vt){const qe=Vt.end.add(1,"day");return Y(qe)-Y(Vt.start)}).attr("height",dt-st-v.gridLineStartPadding).attr("transform-origin",function(Vt,qe){return(Y(Vt.start)+xt+.5*(Y(Vt.end)-Y(Vt.start))).toString()+"px "+(qe*yt+.5*dt).toString()+"px"}).attr("class","exclude-range")}function Tt(yt,st,xt,ht){let dt=b6e(Y).tickSize(-ht+st+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));const tt=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(p.db.getTickInterval()||v.tickInterval);if(tt!==null){const Pt=tt[1],pt=tt[2],Ft=p.db.getWeekday()||v.weekday;switch(pt){case"minute":dt.ticks(jU.every(Pt));break;case"hour":dt.ticks($U.every(Pt));break;case"day":dt.ticks(_A.every(Pt));break;case"week":dt.ticks(aRt[Ft].every(Pt));break;case"month":dt.ticks(zU.every(Pt));break}}if(H.append("g").attr("class","grid").attr("transform","translate("+yt+", "+(ht-50)+")").call(dt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),p.db.topAxisEnabled()||v.topAxis){let Pt=p6e(Y).tickSize(-ht+st+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));if(tt!==null){const pt=tt[1],Ft=tt[2],X=p.db.getWeekday()||v.weekday;switch(Ft){case"minute":Pt.ticks(jU.every(pt));break;case"hour":Pt.ticks($U.every(pt));break;case"day":Pt.ticks(_A.every(pt));break;case"week":Pt.ticks(aRt[X].every(pt));break;case"month":Pt.ticks(zU.every(pt));break}}H.append("g").attr("class","grid").attr("transform","translate("+yt+", "+st+")").call(Pt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function kt(yt,st){let xt=0;const ht=Object.keys(j).map(dt=>[dt,j[dt]]);H.append("g").selectAll("text").data(ht).enter().append(function(dt){const Ct=dt[0].split(ui.lineBreakRegex),tt=-(Ct.length-1)/2,Pt=C.createElementNS("http://www.w3.org/2000/svg","text");Pt.setAttribute("dy",tt+"em");for(const[pt,Ft]of Ct.entries()){const X=C.createElementNS("http://www.w3.org/2000/svg","tspan");X.setAttribute("alignment-baseline","central"),X.setAttribute("x","10"),pt>0&&X.setAttribute("dy","1em"),X.textContent=Ft,Pt.appendChild(X)}return Pt}).attr("x",10).attr("y",function(dt,Ct){if(Ct>0)for(let tt=0;tt` +`}},Symbol.toStringTag,{value:"Module"}));var R0t=function(){var i=function(U,xt,nt,Ot){for(nt=nt||{},Ot=U.length;Ot--;nt[U[Ot]]=xt);return nt},a=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,29],E=[1,30],_=[1,31],L=[1,9],N=[1,10],B=[1,11],j=[1,12],R=[1,13],z=[1,14],K=[1,15],it=[1,16],st=[1,18],ut=[1,19],bt=[1,20],mt=[1,21],yt=[1,22],dt=[1,24],ht=[1,32],wt={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(xt,nt,Ot,Nt,qt,Ct,Z){var Tt=Ct.length-1;switch(qt){case 1:return Ct[Tt-1];case 2:this.$=[];break;case 3:Ct[Tt-1].push(Ct[Tt]),this.$=Ct[Tt-1];break;case 4:case 5:this.$=Ct[Tt];break;case 6:case 7:this.$=[];break;case 8:Nt.setWeekday("monday");break;case 9:Nt.setWeekday("tuesday");break;case 10:Nt.setWeekday("wednesday");break;case 11:Nt.setWeekday("thursday");break;case 12:Nt.setWeekday("friday");break;case 13:Nt.setWeekday("saturday");break;case 14:Nt.setWeekday("sunday");break;case 15:Nt.setDateFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 16:Nt.enableInclusiveEndDates(),this.$=Ct[Tt].substr(18);break;case 17:Nt.TopAxis(),this.$=Ct[Tt].substr(8);break;case 18:Nt.setAxisFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 19:Nt.setTickInterval(Ct[Tt].substr(13)),this.$=Ct[Tt].substr(13);break;case 20:Nt.setExcludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 21:Nt.setIncludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 22:Nt.setTodayMarker(Ct[Tt].substr(12)),this.$=Ct[Tt].substr(12);break;case 24:Nt.setDiagramTitle(Ct[Tt].substr(6)),this.$=Ct[Tt].substr(6);break;case 25:this.$=Ct[Tt].trim(),Nt.setAccTitle(this.$);break;case 26:case 27:this.$=Ct[Tt].trim(),Nt.setAccDescription(this.$);break;case 28:Nt.addSection(Ct[Tt].substr(8)),this.$=Ct[Tt].substr(8);break;case 30:Nt.addTask(Ct[Tt-1],Ct[Tt]),this.$="task";break;case 31:this.$=Ct[Tt-1],Nt.setClickEvent(Ct[Tt-1],Ct[Tt],null);break;case 32:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],Ct[Tt]);break;case 33:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],null),Nt.setLink(Ct[Tt-2],Ct[Tt]);break;case 34:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-2],Ct[Tt-1]),Nt.setLink(Ct[Tt-3],Ct[Tt]);break;case 35:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt],null),Nt.setLink(Ct[Tt-2],Ct[Tt-1]);break;case 36:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-1],Ct[Tt]),Nt.setLink(Ct[Tt-3],Ct[Tt-2]);break;case 37:this.$=Ct[Tt-1],Nt.setLink(Ct[Tt-1],Ct[Tt]);break;case 38:case 44:this.$=Ct[Tt-1]+" "+Ct[Tt];break;case 39:case 40:case 42:this.$=Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break;case 41:case 43:this.$=Ct[Tt-3]+" "+Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:f,13:p,14:v,15:m,16:b,17:E,18:_,19:L,20:N,21:B,22:j,23:R,24:z,25:K,26:it,27:st,28:ut,30:bt,32:mt,33:yt,34:23,35:dt,37:ht},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:33,11:17,12:f,13:p,14:v,15:m,16:b,17:E,18:_,19:L,20:N,21:B,22:j,23:R,24:z,25:K,26:it,27:st,28:ut,30:bt,32:mt,33:yt,34:23,35:dt,37:ht},i(a,[2,5]),i(a,[2,6]),i(a,[2,15]),i(a,[2,16]),i(a,[2,17]),i(a,[2,18]),i(a,[2,19]),i(a,[2,20]),i(a,[2,21]),i(a,[2,22]),i(a,[2,23]),i(a,[2,24]),{29:[1,34]},{31:[1,35]},i(a,[2,27]),i(a,[2,28]),i(a,[2,29]),{36:[1,36]},i(a,[2,8]),i(a,[2,9]),i(a,[2,10]),i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),{38:[1,37],40:[1,38]},i(a,[2,4]),i(a,[2,25]),i(a,[2,26]),i(a,[2,30]),i(a,[2,31],{39:[1,39],40:[1,40]}),i(a,[2,37],{38:[1,41]}),i(a,[2,32],{40:[1,42]}),i(a,[2,33]),i(a,[2,35],{39:[1,43]}),i(a,[2,34]),i(a,[2,36])],defaultActions:{},parseError:function(xt,nt){if(nt.recoverable)this.trace(xt);else{var Ot=new Error(xt);throw Ot.hash=nt,Ot}},parse:function(xt){var nt=this,Ot=[0],Nt=[],qt=[null],Ct=[],Z=this.table,Tt="",Ht=0,It=0,Ft=2,ke=1,pn=Ct.slice.call(arguments,1),Me=Object.create(this.lexer),ve={yy:{}};for(var Ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ge)&&(ve.yy[Ge]=this.yy[Ge]);Me.setInput(xt,ve.yy),ve.yy.lexer=Me,ve.yy.parser=this,typeof Me.yylloc>"u"&&(Me.yylloc={});var Ke=Me.yylloc;Ct.push(Ke);var we=Me.options&&Me.options.ranges;typeof ve.yy.parseError=="function"?this.parseError=ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _e(){var da;return da=Nt.pop()||Me.lex()||ke,typeof da!="number"&&(da instanceof Array&&(Nt=da,da=Nt.pop()),da=nt.symbols_[da]||da),da}for(var $t,re,ie,Oe,oe={},Ne,me,cn,li;;){if(re=Ot[Ot.length-1],this.defaultActions[re]?ie=this.defaultActions[re]:(($t===null||typeof $t>"u")&&($t=_e()),ie=Z[re]&&Z[re][$t]),typeof ie>"u"||!ie.length||!ie[0]){var ya="";li=[];for(Ne in Z[re])this.terminals_[Ne]&&Ne>Ft&&li.push("'"+this.terminals_[Ne]+"'");Me.showPosition?ya="Parse error on line "+(Ht+1)+`: +`+Me.showPosition()+` +Expecting `+li.join(", ")+", got '"+(this.terminals_[$t]||$t)+"'":ya="Parse error on line "+(Ht+1)+": Unexpected "+($t==ke?"end of input":"'"+(this.terminals_[$t]||$t)+"'"),this.parseError(ya,{text:Me.match,token:this.terminals_[$t]||$t,line:Me.yylineno,loc:Ke,expected:li})}if(ie[0]instanceof Array&&ie.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+$t);switch(ie[0]){case 1:Ot.push($t),qt.push(Me.yytext),Ct.push(Me.yylloc),Ot.push(ie[1]),$t=null,It=Me.yyleng,Tt=Me.yytext,Ht=Me.yylineno,Ke=Me.yylloc;break;case 2:if(me=this.productions_[ie[1]][1],oe.$=qt[qt.length-me],oe._$={first_line:Ct[Ct.length-(me||1)].first_line,last_line:Ct[Ct.length-1].last_line,first_column:Ct[Ct.length-(me||1)].first_column,last_column:Ct[Ct.length-1].last_column},we&&(oe._$.range=[Ct[Ct.length-(me||1)].range[0],Ct[Ct.length-1].range[1]]),Oe=this.performAction.apply(oe,[Tt,It,Ht,ve.yy,ie[1],qt,Ct].concat(pn)),typeof Oe<"u")return Oe;me&&(Ot=Ot.slice(0,-1*me*2),qt=qt.slice(0,-1*me),Ct=Ct.slice(0,-1*me)),Ot.push(this.productions_[ie[1]][0]),qt.push(oe.$),Ct.push(oe._$),cn=Z[Ot[Ot.length-2]][Ot[Ot.length-1]],Ot.push(cn);break;case 3:return!0}}return!0}},X=function(){var U={EOF:1,parseError:function(nt,Ot){if(this.yy.parser)this.yy.parser.parseError(nt,Ot);else throw new Error(nt)},setInput:function(xt,nt){return this.yy=nt||this.yy||{},this._input=xt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var xt=this._input[0];this.yytext+=xt,this.yyleng++,this.offset++,this.match+=xt,this.matched+=xt;var nt=xt.match(/(?:\r\n?|\n).*/g);return nt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xt},unput:function(xt){var nt=xt.length,Ot=xt.split(/(?:\r\n?|\n)/g);this._input=xt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nt),this.offset-=nt;var Nt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ot.length-1&&(this.yylineno-=Ot.length-1);var qt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ot?(Ot.length===Nt.length?this.yylloc.first_column:0)+Nt[Nt.length-Ot.length].length-Ot[0].length:this.yylloc.first_column-nt},this.options.ranges&&(this.yylloc.range=[qt[0],qt[0]+this.yyleng-nt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(xt){this.unput(this.match.slice(xt))},pastInput:function(){var xt=this.matched.substr(0,this.matched.length-this.match.length);return(xt.length>20?"...":"")+xt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var xt=this.match;return xt.length<20&&(xt+=this._input.substr(0,20-xt.length)),(xt.substr(0,20)+(xt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var xt=this.pastInput(),nt=new Array(xt.length+1).join("-");return xt+this.upcomingInput()+` +`+nt+"^"},test_match:function(xt,nt){var Ot,Nt,qt;if(this.options.backtrack_lexer&&(qt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(qt.yylloc.range=this.yylloc.range.slice(0))),Nt=xt[0].match(/(?:\r\n?|\n).*/g),Nt&&(this.yylineno+=Nt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Nt?Nt[Nt.length-1].length-Nt[Nt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xt[0].length},this.yytext+=xt[0],this.match+=xt[0],this.matches=xt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(xt[0].length),this.matched+=xt[0],Ot=this.performAction.call(this,this.yy,this,nt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ot)return Ot;if(this._backtrack){for(var Ct in qt)this[Ct]=qt[Ct];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xt,nt,Ot,Nt;this._more||(this.yytext="",this.match="");for(var qt=this._currentRules(),Ct=0;Ctnt[0].length)){if(nt=Ot,Nt=Ct,this.options.backtrack_lexer){if(xt=this.test_match(Ot,qt[Ct]),xt!==!1)return xt;if(this._backtrack){nt=!1;continue}else return!1}else if(!this.options.flex)break}return nt?(xt=this.test_match(nt,qt[Nt]),xt!==!1?xt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var nt=this.next();return nt||this.lex()},begin:function(nt){this.conditionStack.push(nt)},popState:function(){var nt=this.conditionStack.length-1;return nt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(nt){return nt=this.conditionStack.length-1-Math.abs(nt||0),nt>=0?this.conditionStack[nt]:"INITIAL"},pushState:function(nt){this.begin(nt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(nt,Ot,Nt,qt){switch(Nt){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:break;case 15:this.begin("href");break;case 16:this.popState();break;case 17:return 40;case 18:this.begin("callbackname");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callbackargs");break;case 21:return 38;case 22:this.popState();break;case 23:return 39;case 24:this.begin("click");break;case 25:this.popState();break;case 26:return 37;case 27:return 4;case 28:return 19;case 29:return 20;case 30:return 21;case 31:return 22;case 32:return 23;case 33:return 25;case 34:return 24;case 35:return 26;case 36:return 12;case 37:return 13;case 38:return 14;case 39:return 15;case 40:return 16;case 41:return 17;case 42:return 18;case 43:return"date";case 44:return 27;case 45:return"accDescription";case 46:return 33;case 47:return 35;case 48:return 36;case 49:return":";case 50:return 6;case 51:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[22,23],inclusive:!1},callbackname:{rules:[19,20,21],inclusive:!1},href:{rules:[16,17],inclusive:!1},click:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,18,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return U}();wt.lexer=X;function pt(){this.yy={}}return pt.prototype=wt,wt.Parser=pt,new pt}();R0t.parser=R0t;const Dze=R0t;var GBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f="day";return function(p,v,m){var b=function(L){return L.add(4-L.isoWeekday(),f)},E=v.prototype;E.isoWeekYear=function(){return b(this).year()},E.isoWeek=function(L){if(!this.$utils().u(L))return this.add(7*(L-this.isoWeek()),f);var N,B,j,R,z=b(this),K=(N=this.isoWeekYear(),B=this.$u,j=(B?m.utc:m)().year(N).startOf("year"),R=4-j.isoWeekday(),j.isoWeekday()>4&&(R+=7),j.add(R,f));return z.diff(K,"week")+1},E.isoWeekday=function(L){return this.$utils().u(L)?this.day()||7:this.day(this.day()%7?L:L-7)};var _=E.startOf;E.startOf=function(L,N){var B=this.$utils(),j=!!B.u(N)||N;return B.p(L)==="isoweek"?j?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):_.bind(this)(L,N)}}})})(GBt);var Oze=GBt.exports;const Nze=B7(Oze);var VBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},p=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,v=/\d\d/,m=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,E={},_=function(K){return(K=+K)+(K>68?1900:2e3)},L=function(K){return function(it){this[K]=+it}},N=[/[+-]\d\d:?(\d\d)?|Z/,function(K){(this.zone||(this.zone={})).offset=function(it){if(!it||it==="Z")return 0;var st=it.match(/([+-]|\d\d)/g),ut=60*st[1]+(+st[2]||0);return ut===0?0:st[0]==="+"?-ut:ut}(K)}],B=function(K){var it=E[K];return it&&(it.indexOf?it:it.s.concat(it.f))},j=function(K,it){var st,ut=E.meridiem;if(ut){for(var bt=1;bt<=24;bt+=1)if(K.indexOf(ut(bt,0,it))>-1){st=bt>12;break}}else st=K===(it?"pm":"PM");return st},R={A:[b,function(K){this.afternoon=j(K,!1)}],a:[b,function(K){this.afternoon=j(K,!0)}],S:[/\d/,function(K){this.milliseconds=100*+K}],SS:[v,function(K){this.milliseconds=10*+K}],SSS:[/\d{3}/,function(K){this.milliseconds=+K}],s:[m,L("seconds")],ss:[m,L("seconds")],m:[m,L("minutes")],mm:[m,L("minutes")],H:[m,L("hours")],h:[m,L("hours")],HH:[m,L("hours")],hh:[m,L("hours")],D:[m,L("day")],DD:[v,L("day")],Do:[b,function(K){var it=E.ordinal,st=K.match(/\d+/);if(this.day=st[0],it)for(var ut=1;ut<=31;ut+=1)it(ut).replace(/\[|\]/g,"")===K&&(this.day=ut)}],M:[m,L("month")],MM:[v,L("month")],MMM:[b,function(K){var it=B("months"),st=(B("monthsShort")||it.map(function(ut){return ut.slice(0,3)})).indexOf(K)+1;if(st<1)throw new Error;this.month=st%12||st}],MMMM:[b,function(K){var it=B("months").indexOf(K)+1;if(it<1)throw new Error;this.month=it%12||it}],Y:[/[+-]?\d+/,L("year")],YY:[v,function(K){this.year=_(K)}],YYYY:[/\d{4}/,L("year")],Z:N,ZZ:N};function z(K){var it,st;it=K,st=E&&E.formats;for(var ut=(K=it.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(X,pt,U){var xt=U&&U.toUpperCase();return pt||st[U]||f[U]||st[xt].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(nt,Ot,Nt){return Ot||Nt.slice(1)})})).match(p),bt=ut.length,mt=0;mt-1)return new Date((Ct==="X"?1e3:1)*qt);var Tt=z(Ct)(qt),Ht=Tt.year,It=Tt.month,Ft=Tt.day,ke=Tt.hours,pn=Tt.minutes,Me=Tt.seconds,ve=Tt.milliseconds,Ge=Tt.zone,Ke=new Date,we=Ft||(Ht||It?1:Ke.getDate()),_e=Ht||Ke.getFullYear(),$t=0;Ht&&!It||($t=It>0?It-1:Ke.getMonth());var re=ke||0,ie=pn||0,Oe=Me||0,oe=ve||0;return Ge?new Date(Date.UTC(_e,$t,we,re,ie,Oe,oe+60*Ge.offset*1e3)):Z?new Date(Date.UTC(_e,$t,we,re,ie,Oe,oe)):new Date(_e,$t,we,re,ie,Oe,oe)}catch{return new Date("")}}(yt,wt,dt),this.init(),xt&&xt!==!0&&(this.$L=this.locale(xt).$L),U&&yt!=this.format(wt)&&(this.$d=new Date("")),E={}}else if(wt instanceof Array)for(var nt=wt.length,Ot=1;Ot<=nt;Ot+=1){ht[1]=wt[Ot-1];var Nt=st.apply(this,ht);if(Nt.isValid()){this.$d=Nt.$d,this.$L=Nt.$L,this.init();break}Ot===nt&&(this.$d=new Date(""))}else bt.call(this,mt)}}})})(VBt);var Pze=VBt.exports;const Fze=B7(Pze);var UBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){return function(f,p){var v=p.prototype,m=v.format;v.format=function(b){var E=this,_=this.$locale();if(!this.isValid())return m.bind(this)(b);var L=this.$utils(),N=(b||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(B){switch(B){case"Q":return Math.ceil((E.$M+1)/3);case"Do":return _.ordinal(E.$D);case"gggg":return E.weekYear();case"GGGG":return E.isoWeekYear();case"wo":return _.ordinal(E.week(),"W");case"w":case"ww":return L.s(E.week(),B==="w"?1:2,"0");case"W":case"WW":return L.s(E.isoWeek(),B==="W"?1:2,"0");case"k":case"kk":return L.s(String(E.$H===0?24:E.$H),B==="k"?1:2,"0");case"X":return Math.floor(E.$d.getTime()/1e3);case"x":return E.$d.getTime();case"z":return"["+E.offsetName()+"]";case"zzz":return"["+E.offsetName("long")+"]";default:return B}});return m.bind(this)(N)}}})})(UBt);var Bze=UBt.exports;const Rze=B7(Bze);g0.extend(Nze),g0.extend(Fze),g0.extend(Rze);let m3="",j0t="",$0t,z0t="",SP=[],AP=[],q0t={},H0t=[],kK=[],iL="",G0t="";const WBt=["active","done","crit","milestone"];let V0t=[],LP=!1,U0t=!1,W0t="sunday",K0t=0;const jze=function(){H0t=[],kK=[],iL="",V0t=[],EK=0,X0t=void 0,TK=void 0,u1=[],m3="",j0t="",G0t="",$0t=void 0,z0t="",SP=[],AP=[],LP=!1,U0t=!1,K0t=0,q0t={},ap(),W0t="sunday"},$ze=function(i){j0t=i},zze=function(){return j0t},qze=function(i){$0t=i},Hze=function(){return $0t},Gze=function(i){z0t=i},Vze=function(){return z0t},Uze=function(i){m3=i},Wze=function(){LP=!0},Kze=function(){return LP},Yze=function(){U0t=!0},Xze=function(){return U0t},Qze=function(i){G0t=i},Zze=function(){return G0t},Jze=function(){return m3},tqe=function(i){SP=i.toLowerCase().split(/[\s,]+/)},eqe=function(){return SP},nqe=function(i){AP=i.toLowerCase().split(/[\s,]+/)},rqe=function(){return AP},iqe=function(){return q0t},sqe=function(i){iL=i,H0t.push(i)},aqe=function(){return H0t},oqe=function(){let i=JBt();const a=10;let f=0;for(;!i&&f=6&&f.includes("weekends")||f.includes(i.format("dddd").toLowerCase())?!0:f.includes(i.format(a.trim()))},cqe=function(i){W0t=i},uqe=function(){return W0t},YBt=function(i,a,f,p){if(!f.length||i.manualEndTime)return;let v;i.startTime instanceof Date?v=g0(i.startTime):v=g0(i.startTime,a,!0),v=v.add(1,"d");let m;i.endTime instanceof Date?m=g0(i.endTime):m=g0(i.endTime,a,!0);const[b,E]=lqe(v,m,a,f,p);i.endTime=b.toDate(),i.renderEndTime=E},lqe=function(i,a,f,p,v){let m=!1,b=null;for(;i<=a;)m||(b=a.toDate()),m=KBt(i,f,p,v),m&&(a=a.add(1,"d")),i=i.add(1,"d");return[a,b]},Y0t=function(i,a,f){f=f.trim();const v=/^after\s+([\d\w- ]+)/.exec(f.trim());if(v!==null){let b=null;if(v[1].split(" ").forEach(function(E){let _=aL(E);_!==void 0&&(b?_.endTime>b.endTime&&(b=_):b=_)}),b)return b.endTime;{const E=new Date;return E.setHours(0,0,0,0),E}}let m=g0(f,a.trim(),!0);if(m.isValid())return m.toDate();{Ut.debug("Invalid date:"+f),Ut.debug("With date format:"+a.trim());const b=new Date(f);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+f);return b}},XBt=function(i){const a=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return a!==null?[Number.parseFloat(a[1]),a[2]]:[NaN,"ms"]},QBt=function(i,a,f,p=!1){f=f.trim();let v=g0(f,a.trim(),!0);if(v.isValid())return p&&(v=v.add(1,"d")),v.toDate();let m=g0(i);const[b,E]=XBt(f);if(!Number.isNaN(b)){const _=m.add(b,E);_.isValid()&&(m=_)}return m.toDate()};let EK=0;const sL=function(i){return i===void 0?(EK=EK+1,"task"+EK):i},hqe=function(i,a){let f;a.substr(0,1)===":"?f=a.substr(1,a.length):f=a;const p=f.split(","),v={};nRt(p,v,WBt);for(let b=0;b{window.open(f,"_self")}),q0t[p]=f)}),tRt(i,"clickable")},tRt=function(i,a){i.split(",").forEach(function(f){let p=aL(f);p!==void 0&&p.classes.push(a)})},bqe=function(i,a,f){if(Le().securityLevel!=="loose"||a===void 0)return;let p=[];if(typeof f=="string"){p=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let m=0;m{$a.runFunc(a,...p)})},eRt=function(i,a){V0t.push(function(){const f=document.querySelector(`[id="${i}"]`);f!==null&&f.addEventListener("click",function(){a()})},function(){const f=document.querySelector(`[id="${i}-text"]`);f!==null&&f.addEventListener("click",function(){a()})})},vqe={getConfig:()=>Le().gantt,clear:jze,setDateFormat:Uze,getDateFormat:Jze,enableInclusiveEndDates:Wze,endDatesAreInclusive:Kze,enableTopAxis:Yze,topAxisEnabled:Xze,setAxisFormat:$ze,getAxisFormat:zze,setTickInterval:qze,getTickInterval:Hze,setTodayMarker:Gze,getTodayMarker:Vze,setAccTitle:cg,getAccTitle:op,setDiagramTitle:Z2,getDiagramTitle:Db,setDisplayMode:Qze,getDisplayMode:Zze,setAccDescription:cp,getAccDescription:up,addSection:sqe,getSections:aqe,getTasks:oqe,addTask:dqe,findTaskById:aL,addTaskOrg:gqe,setIncludes:tqe,getIncludes:eqe,setExcludes:nqe,getExcludes:rqe,setClickEvent:function(i,a,f){i.split(",").forEach(function(p){bqe(p,a,f)}),tRt(i,"clickable")},setLink:pqe,getLinks:iqe,bindFunctions:function(i){V0t.forEach(function(a){a(i)})},parseDuration:XBt,isInvalidDate:KBt,setWeekday:cqe,getWeekday:uqe};function nRt(i,a,f){let p=!0;for(;p;)p=!1,f.forEach(function(v){const m="^\\s*"+v+"\\s*$",b=new RegExp(m);i[0].match(b)&&(a[v]=!0,i.shift(1),p=!0)})}const wqe=function(){Ut.debug("Something is calling, setConf, remove the call")},rRt={monday:MN,tuesday:YMt,wednesday:XMt,thursday:K7,friday:QMt,saturday:ZMt,sunday:LN},mqe=(i,a)=>{let f=[...i].map(()=>-1/0),p=[...i].sort((m,b)=>m.startTime-b.startTime||m.order-b.order),v=0;for(const m of p)for(let b=0;b=f[b]){f[b]=m.endTime,m.order=b+a,b>v&&(v=b);break}return v};let L5;const yqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Dze,db:vqe,renderer:{setConf:wqe,draw:function(i,a,f,p){const v=Le().gantt,m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=m==="sandbox"?b.nodes()[0].contentDocument:document,L=_.getElementById(a);L5=L.parentElement.offsetWidth,L5===void 0&&(L5=1200),v.useWidth!==void 0&&(L5=v.useWidth);const N=p.db.getTasks();let B=[];for(const wt of N)B.push(wt.type);B=ht(B);const j={};let R=2*v.topPadding;if(p.db.getDisplayMode()==="compact"||v.displayMode==="compact"){const wt={};for(const pt of N)wt[pt.section]===void 0?wt[pt.section]=[pt]:wt[pt.section].push(pt);let X=0;for(const pt of Object.keys(wt)){const U=mqe(wt[pt],X)+1;X+=U,R+=U*(v.barHeight+v.barGap),j[pt]=U}}else{R+=N.length*(v.barHeight+v.barGap);for(const wt of B)j[wt]=N.filter(X=>X.type===wt).length}L.setAttribute("viewBox","0 0 "+L5+" "+R);const z=E.select(`[id="${a}"]`),K=C7e().domain([lxe(N,function(wt){return wt.startTime}),uxe(N,function(wt){return wt.endTime})]).rangeRound([0,L5-v.leftPadding-v.rightPadding]);function it(wt,X){const pt=wt.startTime,U=X.startTime;let xt=0;return pt>U?xt=1:ptHt.order))].map(Ht=>wt.find(It=>It.order===Ht));z.append("g").selectAll("rect").data(qt).enter().append("rect").attr("x",0).attr("y",function(Ht,It){return It=Ht.order,It*X+pt-2}).attr("width",function(){return Ot-v.rightPadding/2}).attr("height",X).attr("class",function(Ht){for(const[It,Ft]of B.entries())if(Ht.type===Ft)return"section section"+It%v.numberSectionStyles;return"section section0"});const Ct=z.append("g").selectAll("rect").data(wt).enter(),Z=p.db.getLinks();if(Ct.append("rect").attr("id",function(Ht){return Ht.id}).attr("rx",3).attr("ry",3).attr("x",function(Ht){return Ht.milestone?K(Ht.startTime)+U+.5*(K(Ht.endTime)-K(Ht.startTime))-.5*xt:K(Ht.startTime)+U}).attr("y",function(Ht,It){return It=Ht.order,It*X+pt}).attr("width",function(Ht){return Ht.milestone?xt:K(Ht.renderEndTime||Ht.endTime)-K(Ht.startTime)}).attr("height",xt).attr("transform-origin",function(Ht,It){return It=Ht.order,(K(Ht.startTime)+U+.5*(K(Ht.endTime)-K(Ht.startTime))).toString()+"px "+(It*X+pt+.5*xt).toString()+"px"}).attr("class",function(Ht){const It="task";let Ft="";Ht.classes.length>0&&(Ft=Ht.classes.join(" "));let ke=0;for(const[Me,ve]of B.entries())Ht.type===ve&&(ke=Me%v.numberSectionStyles);let pn="";return Ht.active?Ht.crit?pn+=" activeCrit":pn=" active":Ht.done?Ht.crit?pn=" doneCrit":pn=" done":Ht.crit&&(pn+=" crit"),pn.length===0&&(pn=" task"),Ht.milestone&&(pn=" milestone "+pn),pn+=ke,pn+=" "+Ft,It+pn}),Ct.append("text").attr("id",function(Ht){return Ht.id+"-text"}).text(function(Ht){return Ht.task}).attr("font-size",v.fontSize).attr("x",function(Ht){let It=K(Ht.startTime),Ft=K(Ht.renderEndTime||Ht.endTime);Ht.milestone&&(It+=.5*(K(Ht.endTime)-K(Ht.startTime))-.5*xt),Ht.milestone&&(Ft=It+xt);const ke=this.getBBox().width;return ke>Ft-It?Ft+ke+1.5*v.leftPadding>Ot?It+U-5:Ft+U+5:(Ft-It)/2+It+U}).attr("y",function(Ht,It){return It=Ht.order,It*X+v.barHeight/2+(v.fontSize/2-2)+pt}).attr("text-height",xt).attr("class",function(Ht){const It=K(Ht.startTime);let Ft=K(Ht.endTime);Ht.milestone&&(Ft=It+xt);const ke=this.getBBox().width;let pn="";Ht.classes.length>0&&(pn=Ht.classes.join(" "));let Me=0;for(const[Ge,Ke]of B.entries())Ht.type===Ke&&(Me=Ge%v.numberSectionStyles);let ve="";return Ht.active&&(Ht.crit?ve="activeCritText"+Me:ve="activeText"+Me),Ht.done?Ht.crit?ve=ve+" doneCritText"+Me:ve=ve+" doneText"+Me:Ht.crit&&(ve=ve+" critText"+Me),Ht.milestone&&(ve+=" milestoneText"),ke>Ft-It?Ft+ke+1.5*v.leftPadding>Ot?pn+" taskTextOutsideLeft taskTextOutside"+Me+" "+ve:pn+" taskTextOutsideRight taskTextOutside"+Me+" "+ve+" width-"+ke:pn+" taskText taskText"+Me+" "+ve+" width-"+ke}),Le().securityLevel==="sandbox"){let Ht;Ht=yr("#i"+a);const It=Ht.nodes()[0].contentDocument;Ct.filter(function(Ft){return Z[Ft.id]!==void 0}).each(function(Ft){var ke=It.querySelector("#"+Ft.id),pn=It.querySelector("#"+Ft.id+"-text");const Me=ke.parentNode;var ve=It.createElement("a");ve.setAttribute("xlink:href",Z[Ft.id]),ve.setAttribute("target","_top"),Me.appendChild(ve),ve.appendChild(ke),ve.appendChild(pn)})}}function bt(wt,X,pt,U,xt,nt,Ot,Nt){if(Ot.length===0&&Nt.length===0)return;let qt,Ct;for(const{startTime:ke,endTime:pn}of nt)(qt===void 0||keCt)&&(Ct=pn);if(!qt||!Ct)return;if(g0(Ct).diff(g0(qt),"year")>5){Ut.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const Z=p.db.getDateFormat(),Tt=[];let Ht=null,It=g0(qt);for(;It.valueOf()<=Ct;)p.db.isInvalidDate(It,Z,Ot,Nt)?Ht?Ht.end=It:Ht={start:It,end:It}:Ht&&(Tt.push(Ht),Ht=null),It=It.add(1,"d");z.append("g").selectAll("rect").data(Tt).enter().append("rect").attr("id",function(ke){return"exclude-"+ke.start.format("YYYY-MM-DD")}).attr("x",function(ke){return K(ke.start)+pt}).attr("y",v.gridLineStartPadding).attr("width",function(ke){const pn=ke.end.add(1,"day");return K(pn)-K(ke.start)}).attr("height",xt-X-v.gridLineStartPadding).attr("transform-origin",function(ke,pn){return(K(ke.start)+pt+.5*(K(ke.end)-K(ke.start))).toString()+"px "+(pn*wt+.5*xt).toString()+"px"}).attr("class","exclude-range")}function mt(wt,X,pt,U){let xt=wxe(K).tickSize(-U+X+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));const Ot=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(p.db.getTickInterval()||v.tickInterval);if(Ot!==null){const Nt=Ot[1],qt=Ot[2],Ct=p.db.getWeekday()||v.weekday;switch(qt){case"millisecond":xt.ticks(C1t.every(Nt));break;case"second":xt.ticks(U7.every(Nt));break;case"minute":xt.ticks(jU.every(Nt));break;case"hour":xt.ticks($U.every(Nt));break;case"day":xt.ticks(CA.every(Nt));break;case"week":xt.ticks(rRt[Ct].every(Nt));break;case"month":xt.ticks(zU.every(Nt));break}}if(z.append("g").attr("class","grid").attr("transform","translate("+wt+", "+(U-50)+")").call(xt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),p.db.topAxisEnabled()||v.topAxis){let Nt=vxe(K).tickSize(-U+X+v.gridLineStartPadding).tickFormat(HU(p.db.getAxisFormat()||v.axisFormat||"%Y-%m-%d"));if(Ot!==null){const qt=Ot[1],Ct=Ot[2],Z=p.db.getWeekday()||v.weekday;switch(Ct){case"millisecond":Nt.ticks(C1t.every(qt));break;case"second":Nt.ticks(U7.every(qt));break;case"minute":Nt.ticks(jU.every(qt));break;case"hour":Nt.ticks($U.every(qt));break;case"day":Nt.ticks(CA.every(qt));break;case"week":Nt.ticks(rRt[Z].every(qt));break;case"month":Nt.ticks(zU.every(qt));break}}z.append("g").attr("class","grid").attr("transform","translate("+wt+", "+X+")").call(Nt).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function yt(wt,X){let pt=0;const U=Object.keys(j).map(xt=>[xt,j[xt]]);z.append("g").selectAll("text").data(U).enter().append(function(xt){const nt=xt[0].split(Yr.lineBreakRegex),Ot=-(nt.length-1)/2,Nt=_.createElementNS("http://www.w3.org/2000/svg","text");Nt.setAttribute("dy",Ot+"em");for(const[qt,Ct]of nt.entries()){const Z=_.createElementNS("http://www.w3.org/2000/svg","tspan");Z.setAttribute("alignment-baseline","central"),Z.setAttribute("x","10"),qt>0&&Z.setAttribute("dy","1em"),Z.textContent=Ct,Nt.appendChild(Z)}return Nt}).attr("x",10).attr("y",function(xt,nt){if(nt>0)for(let Ot=0;Ot` .mermaid-main-font { font-family: "trebuchet ms", verdana, arial, sans-serif; font-family: var(--mermaid-font-family); @@ -604,18 +602,18 @@ Expecting `+ki.join(", ")+", got '"+(this.terminals_[$e]||$e)+"'":Ri="Parse erro font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } -`}},Symbol.toStringTag,{value:"Module"}));var K0t=function(){var i=function(m,b,E,C){for(E=E||{},C=m.length;C--;E[m[C]]=b);return E},a=[6,9,10],f={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,E,C,A,P,F,j){switch(F.length-1,P){case 1:return A;case 4:break;case 6:A.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(a,[2,3]),i(a,[2,4]),i(a,[2,5]),i(a,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,E){if(E.recoverable)this.trace(b);else{var C=new Error(b);throw C.hash=E,C}},parse:function(b){var E=this,C=[0],A=[],P=[null],F=[],j=this.table,R="",H=0,Y=0,rt=2,J=1,it=F.slice.call(arguments,1),ft=Object.create(this.lexer),Tt={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(Tt.yy[kt]=this.yy[kt]);ft.setInput(b,Tt.yy),Tt.yy.lexer=ft,Tt.yy.parser=this,typeof ft.yylloc>"u"&&(ft.yylloc={});var mt=ft.yylloc;F.push(mt);var ct=ft.options&&ft.options.ranges;typeof Tt.yy.parseError=="function"?this.parseError=Tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function yt(){var Rt;return Rt=A.pop()||ft.lex()||J,typeof Rt!="number"&&(Rt instanceof Array&&(A=Rt,Rt=A.pop()),Rt=E.symbols_[Rt]||Rt),Rt}for(var st,xt,ht,dt,Ct={},tt,Pt,pt,Ft;;){if(xt=C[C.length-1],this.defaultActions[xt]?ht=this.defaultActions[xt]:((st===null||typeof st>"u")&&(st=yt()),ht=j[xt]&&j[xt][st]),typeof ht>"u"||!ht.length||!ht[0]){var X="";Ft=[];for(tt in j[xt])this.terminals_[tt]&&tt>rt&&Ft.push("'"+this.terminals_[tt]+"'");ft.showPosition?X="Parse error on line "+(H+1)+`: -`+ft.showPosition()+` -Expecting `+Ft.join(", ")+", got '"+(this.terminals_[st]||st)+"'":X="Parse error on line "+(H+1)+": Unexpected "+(st==J?"end of input":"'"+(this.terminals_[st]||st)+"'"),this.parseError(X,{text:ft.match,token:this.terminals_[st]||st,line:ft.yylineno,loc:mt,expected:Ft})}if(ht[0]instanceof Array&&ht.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+st);switch(ht[0]){case 1:C.push(st),P.push(ft.yytext),F.push(ft.yylloc),C.push(ht[1]),st=null,Y=ft.yyleng,R=ft.yytext,H=ft.yylineno,mt=ft.yylloc;break;case 2:if(Pt=this.productions_[ht[1]][1],Ct.$=P[P.length-Pt],Ct._$={first_line:F[F.length-(Pt||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(Pt||1)].first_column,last_column:F[F.length-1].last_column},ct&&(Ct._$.range=[F[F.length-(Pt||1)].range[0],F[F.length-1].range[1]]),dt=this.performAction.apply(Ct,[R,Y,H,Tt.yy,ht[1],P,F].concat(it)),typeof dt<"u")return dt;Pt&&(C=C.slice(0,-1*Pt*2),P=P.slice(0,-1*Pt),F=F.slice(0,-1*Pt)),C.push(this.productions_[ht[1]][0]),P.push(Ct.$),F.push(Ct._$),pt=j[C[C.length-2]][C[C.length-1]],C.push(pt);break;case 3:return!0}}return!0}},p=function(){var m={EOF:1,parseError:function(E,C){if(this.yy.parser)this.yy.parser.parseError(E,C);else throw new Error(E)},setInput:function(b,E){return this.yy=E||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var E=b.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},unput:function(b){var E=b.length,C=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),C.length-1&&(this.yylineno-=C.length-1);var P=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:C?(C.length===A.length?this.yylloc.first_column:0)+A[A.length-C.length].length-C[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[P[0],P[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`}},Symbol.toStringTag,{value:"Module"}));var Q0t=function(){var i=function(m,b,E,_){for(E=E||{},_=m.length;_--;E[m[_]]=b);return E},a=[6,9,10],f={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,E,_,L,N,B,j){switch(B.length-1,N){case 1:return L;case 4:break;case 6:L.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(a,[2,3]),i(a,[2,4]),i(a,[2,5]),i(a,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,E){if(E.recoverable)this.trace(b);else{var _=new Error(b);throw _.hash=E,_}},parse:function(b){var E=this,_=[0],L=[],N=[null],B=[],j=this.table,R="",z=0,K=0,it=2,st=1,ut=B.slice.call(arguments,1),bt=Object.create(this.lexer),mt={yy:{}};for(var yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,yt)&&(mt.yy[yt]=this.yy[yt]);bt.setInput(b,mt.yy),mt.yy.lexer=bt,mt.yy.parser=this,typeof bt.yylloc>"u"&&(bt.yylloc={});var dt=bt.yylloc;B.push(dt);var ht=bt.options&&bt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wt(){var Tt;return Tt=L.pop()||bt.lex()||st,typeof Tt!="number"&&(Tt instanceof Array&&(L=Tt,Tt=L.pop()),Tt=E.symbols_[Tt]||Tt),Tt}for(var X,pt,U,xt,nt={},Ot,Nt,qt,Ct;;){if(pt=_[_.length-1],this.defaultActions[pt]?U=this.defaultActions[pt]:((X===null||typeof X>"u")&&(X=wt()),U=j[pt]&&j[pt][X]),typeof U>"u"||!U.length||!U[0]){var Z="";Ct=[];for(Ot in j[pt])this.terminals_[Ot]&&Ot>it&&Ct.push("'"+this.terminals_[Ot]+"'");bt.showPosition?Z="Parse error on line "+(z+1)+`: +`+bt.showPosition()+` +Expecting `+Ct.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Z="Parse error on line "+(z+1)+": Unexpected "+(X==st?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Z,{text:bt.match,token:this.terminals_[X]||X,line:bt.yylineno,loc:dt,expected:Ct})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+X);switch(U[0]){case 1:_.push(X),N.push(bt.yytext),B.push(bt.yylloc),_.push(U[1]),X=null,K=bt.yyleng,R=bt.yytext,z=bt.yylineno,dt=bt.yylloc;break;case 2:if(Nt=this.productions_[U[1]][1],nt.$=N[N.length-Nt],nt._$={first_line:B[B.length-(Nt||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(Nt||1)].first_column,last_column:B[B.length-1].last_column},ht&&(nt._$.range=[B[B.length-(Nt||1)].range[0],B[B.length-1].range[1]]),xt=this.performAction.apply(nt,[R,K,z,mt.yy,U[1],N,B].concat(ut)),typeof xt<"u")return xt;Nt&&(_=_.slice(0,-1*Nt*2),N=N.slice(0,-1*Nt),B=B.slice(0,-1*Nt)),_.push(this.productions_[U[1]][0]),N.push(nt.$),B.push(nt._$),qt=j[_[_.length-2]][_[_.length-1]],_.push(qt);break;case 3:return!0}}return!0}},p=function(){var m={EOF:1,parseError:function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},setInput:function(b,E){return this.yy=E||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var E=b.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},unput:function(b){var E=b.length,_=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var L=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),_.length-1&&(this.yylineno-=_.length-1);var N=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:_?(_.length===L.length?this.yylloc.first_column:0)+L[L.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[N[0],N[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var b=this.pastInput(),E=new Array(b.length+1).join("-");return b+this.upcomingInput()+` -`+E+"^"},test_match:function(b,E){var C,A,P;if(this.options.backtrack_lexer&&(P={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(P.yylloc.range=this.yylloc.range.slice(0))),A=b[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],C=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),C)return C;if(this._backtrack){for(var F in P)this[F]=P[F];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,E,C,A;this._more||(this.yytext="",this.match="");for(var P=this._currentRules(),F=0;FE[0].length)){if(E=C,A=F,this.options.backtrack_lexer){if(b=this.test_match(C,P[F]),b!==!1)return b;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(b=this.test_match(E,P[A]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var E=this.next();return E||this.lex()},begin:function(E){this.conditionStack.push(E)},popState:function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},pushState:function(E){this.begin(E)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(E,C,A,P){switch(A){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return m}();f.lexer=p;function v(){this.yy={}}return v.prototype=f,f.Parser=v,new v}();K0t.parser=K0t;const mqe=K0t,oRt={info:!1};let Y0t=oRt.info;const yqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:mqe,db:{clear:()=>{Y0t=oRt.info},setInfo:i=>{Y0t=i},getInfo:()=>Y0t},renderer:{draw:(i,a,f)=>{Wt.debug(`rendering info diagram -`+i);const p=ldt(a);og(p,100,400,!0),p.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${f}`)}}}},Symbol.toStringTag,{value:"Module"}));var X0t=function(){var i=function(mt,ct,yt,st){for(yt=yt||{},st=mt.length;st--;yt[mt[st]]=ct);return yt},a=[1,4],f=[1,5],p=[1,6],v=[1,7],m=[1,9],b=[1,11,13,15,17,19,20,26,27,28,29],E=[2,5],C=[1,6,11,13,15,17,19,20,26,27,28,29],A=[26,27,28],P=[2,8],F=[1,18],j=[1,19],R=[1,20],H=[1,21],Y=[1,22],rt=[1,23],J=[1,28],it=[6,26,27,28,29],ft={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(ct,yt,st,xt,ht,dt,Ct){var tt=dt.length-1;switch(ht){case 4:xt.setShowData(!0);break;case 7:this.$=dt[tt-1];break;case 9:xt.addSection(dt[tt-1],xt.cleanupValue(dt[tt]));break;case 10:this.$=dt[tt].trim(),xt.setDiagramTitle(this.$);break;case 11:this.$=dt[tt].trim(),xt.setAccTitle(this.$);break;case 12:case 13:this.$=dt[tt].trim(),xt.setAccDescription(this.$);break;case 14:xt.addSection(dt[tt].substr(8)),this.$=dt[tt].substr(8);break;case 21:xt.parseDirective("%%{","open_directive");break;case 22:xt.parseDirective(dt[tt],"type_directive");break;case 23:dt[tt]=dt[tt].trim().replace(/'/g,'"'),xt.parseDirective(dt[tt],"arg_directive");break;case 24:xt.parseDirective("}%%","close_directive","pie");break}},table:[{3:1,4:2,5:3,6:a,21:8,26:f,27:p,28:v,29:m},{1:[3]},{3:10,4:2,5:3,6:a,21:8,26:f,27:p,28:v,29:m},{3:11,4:2,5:3,6:a,21:8,26:f,27:p,28:v,29:m},i(b,E,{7:12,8:[1,13]}),i(C,[2,18]),i(C,[2,19]),i(C,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},i(A,P,{21:8,9:16,10:17,5:24,1:[2,3],11:F,13:j,15:R,17:H,19:Y,20:rt,29:m}),i(b,E,{7:25}),{23:26,24:[1,27],32:J},i([24,32],[2,22]),i(b,[2,6]),{4:29,26:f,27:p,28:v},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},i(A,[2,13]),i(A,[2,14]),i(A,[2,15]),i(A,P,{21:8,9:16,10:17,5:24,1:[2,4],11:F,13:j,15:R,17:H,19:Y,20:rt,29:m}),i(it,[2,16]),{25:34,31:[1,35]},i(it,[2,24]),i(b,[2,7]),i(A,[2,9]),i(A,[2,10]),i(A,[2,11]),i(A,[2,12]),{23:36,32:J},{32:[2,23]},i(it,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(ct,yt){if(yt.recoverable)this.trace(ct);else{var st=new Error(ct);throw st.hash=yt,st}},parse:function(ct){var yt=this,st=[0],xt=[],ht=[null],dt=[],Ct=this.table,tt="",Pt=0,pt=0,Ft=2,X=1,Rt=dt.slice.call(arguments,1),Bt=Object.create(this.lexer),vt={yy:{}};for(var Ot in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ot)&&(vt.yy[Ot]=this.yy[Ot]);Bt.setInput(ct,vt.yy),vt.yy.lexer=Bt,vt.yy.parser=this,typeof Bt.yylloc>"u"&&(Bt.yylloc={});var Vt=Bt.yylloc;dt.push(Vt);var qe=Bt.options&&Bt.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _n(){var ye;return ye=xt.pop()||Bt.lex()||X,typeof ye!="number"&&(ye instanceof Array&&(xt=ye,ye=xt.pop()),ye=yt.symbols_[ye]||ye),ye}for(var Te,Wn,Ae,ne,ke={},Ve,Ee,He,Ce;;){if(Wn=st[st.length-1],this.defaultActions[Wn]?Ae=this.defaultActions[Wn]:((Te===null||typeof Te>"u")&&(Te=_n()),Ae=Ct[Wn]&&Ct[Wn][Te]),typeof Ae>"u"||!Ae.length||!Ae[0]){var $e="";Ce=[];for(Ve in Ct[Wn])this.terminals_[Ve]&&Ve>Ft&&Ce.push("'"+this.terminals_[Ve]+"'");Bt.showPosition?$e="Parse error on line "+(Pt+1)+`: -`+Bt.showPosition()+` -Expecting `+Ce.join(", ")+", got '"+(this.terminals_[Te]||Te)+"'":$e="Parse error on line "+(Pt+1)+": Unexpected "+(Te==X?"end of input":"'"+(this.terminals_[Te]||Te)+"'"),this.parseError($e,{text:Bt.match,token:this.terminals_[Te]||Te,line:Bt.yylineno,loc:Vt,expected:Ce})}if(Ae[0]instanceof Array&&Ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Wn+", token: "+Te);switch(Ae[0]){case 1:st.push(Te),ht.push(Bt.yytext),dt.push(Bt.yylloc),st.push(Ae[1]),Te=null,pt=Bt.yyleng,tt=Bt.yytext,Pt=Bt.yylineno,Vt=Bt.yylloc;break;case 2:if(Ee=this.productions_[Ae[1]][1],ke.$=ht[ht.length-Ee],ke._$={first_line:dt[dt.length-(Ee||1)].first_line,last_line:dt[dt.length-1].last_line,first_column:dt[dt.length-(Ee||1)].first_column,last_column:dt[dt.length-1].last_column},qe&&(ke._$.range=[dt[dt.length-(Ee||1)].range[0],dt[dt.length-1].range[1]]),ne=this.performAction.apply(ke,[tt,pt,Pt,vt.yy,Ae[1],ht,dt].concat(Rt)),typeof ne<"u")return ne;Ee&&(st=st.slice(0,-1*Ee*2),ht=ht.slice(0,-1*Ee),dt=dt.slice(0,-1*Ee)),st.push(this.productions_[Ae[1]][0]),ht.push(ke.$),dt.push(ke._$),He=Ct[st[st.length-2]][st[st.length-1]],st.push(He);break;case 3:return!0}}return!0}},Tt=function(){var mt={EOF:1,parseError:function(yt,st){if(this.yy.parser)this.yy.parser.parseError(yt,st);else throw new Error(yt)},setInput:function(ct,yt){return this.yy=yt||this.yy||{},this._input=ct,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ct=this._input[0];this.yytext+=ct,this.yyleng++,this.offset++,this.match+=ct,this.matched+=ct;var yt=ct.match(/(?:\r\n?|\n).*/g);return yt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ct},unput:function(ct){var yt=ct.length,st=ct.split(/(?:\r\n?|\n)/g);this._input=ct+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-yt),this.offset-=yt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),st.length-1&&(this.yylineno-=st.length-1);var ht=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:st?(st.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-st.length].length-st[0].length:this.yylloc.first_column-yt},this.options.ranges&&(this.yylloc.range=[ht[0],ht[0]+this.yyleng-yt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ct){this.unput(this.match.slice(ct))},pastInput:function(){var ct=this.matched.substr(0,this.matched.length-this.match.length);return(ct.length>20?"...":"")+ct.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ct=this.match;return ct.length<20&&(ct+=this._input.substr(0,20-ct.length)),(ct.substr(0,20)+(ct.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ct=this.pastInput(),yt=new Array(ct.length+1).join("-");return ct+this.upcomingInput()+` -`+yt+"^"},test_match:function(ct,yt){var st,xt,ht;if(this.options.backtrack_lexer&&(ht={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ht.yylloc.range=this.yylloc.range.slice(0))),xt=ct[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ct[0].length},this.yytext+=ct[0],this.match+=ct[0],this.matches=ct,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ct[0].length),this.matched+=ct[0],st=this.performAction.call(this,this.yy,this,yt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),st)return st;if(this._backtrack){for(var dt in ht)this[dt]=ht[dt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ct,yt,st,xt;this._more||(this.yytext="",this.match="");for(var ht=this._currentRules(),dt=0;dtyt[0].length)){if(yt=st,xt=dt,this.options.backtrack_lexer){if(ct=this.test_match(st,ht[dt]),ct!==!1)return ct;if(this._backtrack){yt=!1;continue}else return!1}else if(!this.options.flex)break}return yt?(ct=this.test_match(yt,ht[xt]),ct!==!1?ct:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var yt=this.next();return yt||this.lex()},begin:function(yt){this.conditionStack.push(yt)},popState:function(){var yt=this.conditionStack.length-1;return yt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(yt){return yt=this.conditionStack.length-1-Math.abs(yt||0),yt>=0?this.conditionStack[yt]:"INITIAL"},pushState:function(yt){this.begin(yt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(yt,st,xt,ht){switch(xt){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:break;case 6:break;case 7:return 26;case 8:break;case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 20:this.popState();break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};return mt}();ft.lexer=Tt;function kt(){this.yy={}}return kt.prototype=ft,ft.Parser=kt,new kt}();X0t.parser=X0t;const xqe=X0t,cRt=If.pie,AK={sections:{},showData:!1,config:cRt};let LK=AK.sections,Q0t=AK.showData;const kqe=structuredClone(cRt),Eqe={getConfig:()=>structuredClone(kqe),parseDirective:(i,a,f)=>{FW(void 0,i,a,f)},clear:()=>{LK=structuredClone(AK.sections),Q0t=AK.showData,cg()},setDiagramTitle:Nb,getDiagramTitle:hp,setAccTitle:m0,getAccTitle:ug,setAccDescription:lg,getAccDescription:hg,addSection:(i,a)=>{i=v0(i,De()),LK[i]===void 0&&(LK[i]=a,Wt.debug(`added new section: ${i}, with value: ${a}`))},getSections:()=>LK,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{Q0t=i},getShowData:()=>Q0t},Tqe=i=>` +`+E+"^"},test_match:function(b,E){var _,L,N;if(this.options.backtrack_lexer&&(N={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(N.yylloc.range=this.yylloc.range.slice(0))),L=b[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],_=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),_)return _;if(this._backtrack){for(var B in N)this[B]=N[B];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,E,_,L;this._more||(this.yytext="",this.match="");for(var N=this._currentRules(),B=0;BE[0].length)){if(E=_,L=B,this.options.backtrack_lexer){if(b=this.test_match(_,N[B]),b!==!1)return b;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(b=this.test_match(E,N[L]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var E=this.next();return E||this.lex()},begin:function(E){this.conditionStack.push(E)},popState:function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},pushState:function(E){this.begin(E)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(E,_,L,N){switch(L){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return m}();f.lexer=p;function v(){this.yy={}}return v.prototype=f,f.Parser=v,new v}();Q0t.parser=Q0t;const xqe=Q0t,iRt={info:!1};let Z0t=iRt.info;const kqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:xqe,db:{clear:()=>{Z0t=iRt.info},setInfo:i=>{Z0t=i},getInfo:()=>Z0t},renderer:{draw:(i,a,f)=>{Ut.debug(`rendering info diagram +`+i);const p=fdt(a);og(p,100,400,!0),p.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${f}`)}}}},Symbol.toStringTag,{value:"Module"}));var J0t=function(){var i=function(bt,mt,yt,dt){for(yt=yt||{},dt=bt.length;dt--;yt[bt[dt]]=mt);return yt},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,10,12,14,16,18,19,20,21,22],b=[2,4],E=[1,5,10,12,14,16,18,19,20,21,22],_=[20,21,22],L=[2,7],N=[1,12],B=[1,13],j=[1,14],R=[1,15],z=[1,16],K=[1,17],it={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(mt,yt,dt,ht,wt,X,pt){var U=X.length-1;switch(wt){case 3:ht.setShowData(!0);break;case 6:this.$=X[U-1];break;case 8:ht.addSection(X[U-1],ht.cleanupValue(X[U]));break;case 9:this.$=X[U].trim(),ht.setDiagramTitle(this.$);break;case 10:this.$=X[U].trim(),ht.setAccTitle(this.$);break;case 11:case 12:this.$=X[U].trim(),ht.setAccDescription(this.$);break;case 13:ht.addSection(X[U].substr(8)),this.$=X[U].substr(8);break}},table:[{3:1,4:2,5:a,20:f,21:p,22:v},{1:[3]},{3:7,4:2,5:a,20:f,21:p,22:v},i(m,b,{6:8,7:[1,9]}),i(E,[2,14]),i(E,[2,15]),i(E,[2,16]),{1:[2,1]},i(_,L,{8:10,9:11,1:[2,2],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,b,{6:18}),i(m,[2,5]),{4:19,20:f,21:p,22:v},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(_,[2,12]),i(_,[2,13]),i(_,L,{8:10,9:11,1:[2,3],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,[2,6]),i(_,[2,8]),i(_,[2,9]),i(_,[2,10]),i(_,[2,11])],defaultActions:{7:[2,1]},parseError:function(mt,yt){if(yt.recoverable)this.trace(mt);else{var dt=new Error(mt);throw dt.hash=yt,dt}},parse:function(mt){var yt=this,dt=[0],ht=[],wt=[null],X=[],pt=this.table,U="",xt=0,nt=0,Ot=2,Nt=1,qt=X.slice.call(arguments,1),Ct=Object.create(this.lexer),Z={yy:{}};for(var Tt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Tt)&&(Z.yy[Tt]=this.yy[Tt]);Ct.setInput(mt,Z.yy),Z.yy.lexer=Ct,Z.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var Ht=Ct.yylloc;X.push(Ht);var It=Ct.options&&Ct.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var ie;return ie=ht.pop()||Ct.lex()||Nt,typeof ie!="number"&&(ie instanceof Array&&(ht=ie,ie=ht.pop()),ie=yt.symbols_[ie]||ie),ie}for(var ke,pn,Me,ve,Ge={},Ke,we,_e,$t;;){if(pn=dt[dt.length-1],this.defaultActions[pn]?Me=this.defaultActions[pn]:((ke===null||typeof ke>"u")&&(ke=Ft()),Me=pt[pn]&&pt[pn][ke]),typeof Me>"u"||!Me.length||!Me[0]){var re="";$t=[];for(Ke in pt[pn])this.terminals_[Ke]&&Ke>Ot&&$t.push("'"+this.terminals_[Ke]+"'");Ct.showPosition?re="Parse error on line "+(xt+1)+`: +`+Ct.showPosition()+` +Expecting `+$t.join(", ")+", got '"+(this.terminals_[ke]||ke)+"'":re="Parse error on line "+(xt+1)+": Unexpected "+(ke==Nt?"end of input":"'"+(this.terminals_[ke]||ke)+"'"),this.parseError(re,{text:Ct.match,token:this.terminals_[ke]||ke,line:Ct.yylineno,loc:Ht,expected:$t})}if(Me[0]instanceof Array&&Me.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pn+", token: "+ke);switch(Me[0]){case 1:dt.push(ke),wt.push(Ct.yytext),X.push(Ct.yylloc),dt.push(Me[1]),ke=null,nt=Ct.yyleng,U=Ct.yytext,xt=Ct.yylineno,Ht=Ct.yylloc;break;case 2:if(we=this.productions_[Me[1]][1],Ge.$=wt[wt.length-we],Ge._$={first_line:X[X.length-(we||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(we||1)].first_column,last_column:X[X.length-1].last_column},It&&(Ge._$.range=[X[X.length-(we||1)].range[0],X[X.length-1].range[1]]),ve=this.performAction.apply(Ge,[U,nt,xt,Z.yy,Me[1],wt,X].concat(qt)),typeof ve<"u")return ve;we&&(dt=dt.slice(0,-1*we*2),wt=wt.slice(0,-1*we),X=X.slice(0,-1*we)),dt.push(this.productions_[Me[1]][0]),wt.push(Ge.$),X.push(Ge._$),_e=pt[dt[dt.length-2]][dt[dt.length-1]],dt.push(_e);break;case 3:return!0}}return!0}},st=function(){var bt={EOF:1,parseError:function(yt,dt){if(this.yy.parser)this.yy.parser.parseError(yt,dt);else throw new Error(yt)},setInput:function(mt,yt){return this.yy=yt||this.yy||{},this._input=mt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var mt=this._input[0];this.yytext+=mt,this.yyleng++,this.offset++,this.match+=mt,this.matched+=mt;var yt=mt.match(/(?:\r\n?|\n).*/g);return yt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),mt},unput:function(mt){var yt=mt.length,dt=mt.split(/(?:\r\n?|\n)/g);this._input=mt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-yt),this.offset-=yt;var ht=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),dt.length-1&&(this.yylineno-=dt.length-1);var wt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:dt?(dt.length===ht.length?this.yylloc.first_column:0)+ht[ht.length-dt.length].length-dt[0].length:this.yylloc.first_column-yt},this.options.ranges&&(this.yylloc.range=[wt[0],wt[0]+this.yyleng-yt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(mt){this.unput(this.match.slice(mt))},pastInput:function(){var mt=this.matched.substr(0,this.matched.length-this.match.length);return(mt.length>20?"...":"")+mt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var mt=this.match;return mt.length<20&&(mt+=this._input.substr(0,20-mt.length)),(mt.substr(0,20)+(mt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var mt=this.pastInput(),yt=new Array(mt.length+1).join("-");return mt+this.upcomingInput()+` +`+yt+"^"},test_match:function(mt,yt){var dt,ht,wt;if(this.options.backtrack_lexer&&(wt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(wt.yylloc.range=this.yylloc.range.slice(0))),ht=mt[0].match(/(?:\r\n?|\n).*/g),ht&&(this.yylineno+=ht.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ht?ht[ht.length-1].length-ht[ht.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+mt[0].length},this.yytext+=mt[0],this.match+=mt[0],this.matches=mt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(mt[0].length),this.matched+=mt[0],dt=this.performAction.call(this,this.yy,this,yt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),dt)return dt;if(this._backtrack){for(var X in wt)this[X]=wt[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var mt,yt,dt,ht;this._more||(this.yytext="",this.match="");for(var wt=this._currentRules(),X=0;Xyt[0].length)){if(yt=dt,ht=X,this.options.backtrack_lexer){if(mt=this.test_match(dt,wt[X]),mt!==!1)return mt;if(this._backtrack){yt=!1;continue}else return!1}else if(!this.options.flex)break}return yt?(mt=this.test_match(yt,wt[ht]),mt!==!1?mt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var yt=this.next();return yt||this.lex()},begin:function(yt){this.conditionStack.push(yt)},popState:function(){var yt=this.conditionStack.length-1;return yt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(yt){return yt=this.conditionStack.length-1-Math.abs(yt||0),yt>=0?this.conditionStack[yt]:"INITIAL"},pushState:function(yt){this.begin(yt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(yt,dt,ht,wt){switch(ht){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return bt}();it.lexer=st;function ut(){this.yy={}}return ut.prototype=it,it.Parser=ut,new ut}();J0t.parser=J0t;const Eqe=J0t,sRt=Lf.pie,CK={sections:{},showData:!1,config:sRt};let _K=CK.sections,tgt=CK.showData;const Tqe=structuredClone(sRt),Cqe={getConfig:()=>structuredClone(Tqe),clear:()=>{_K=structuredClone(CK.sections),tgt=CK.showData,ap()},setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:(i,a)=>{i=Dd(i,Le()),_K[i]===void 0&&(_K[i]=a,Ut.debug(`added new section: ${i}, with value: ${a}`))},getSections:()=>_K,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{tgt=i},getShowData:()=>tgt},_qe=i=>` .pieCircle{ stroke: ${i.pieStrokeColor}; stroke-width : ${i.pieStrokeWidth}; @@ -643,19 +641,19 @@ Expecting `+Ce.join(", ")+", got '"+(this.terminals_[Te]||Te)+"'":$e="Parse erro font-family: ${i.fontFamily}; font-size: ${i.pieLegendTextSize}; } -`,_qe=i=>{const a=Object.entries(i).map(p=>({label:p[0],value:p[1]}));return jEe().value(p=>p.value)(a)},Cqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:xqe,db:Eqe,renderer:{draw:(i,a,f,p)=>{var xt,ht;Wt.debug(`rendering pie chart -`+i);const v=p.db,m=De(),b=HIt(v.getConfig(),m.pie),E=450,C=((ht=(xt=document.getElementById(a))==null?void 0:xt.parentElement)==null?void 0:ht.offsetWidth)??b.useWidth,A=ldt(a);A.attr("viewBox",`0 0 ${C} ${E}`),og(A,E,C,b.useMaxWidth);const P=40,F=18,j=4,R=A.append("g");R.attr("transform","translate("+C/2+","+E/2+")");const{themeVariables:H}=m;let[Y]=zA(H.pieOuterStrokeWidth);Y??(Y=2);const rt=b.textPosition,J=Math.min(C,E)/2-P,it=LA().innerRadius(0).outerRadius(J),ft=LA().innerRadius(J*rt).outerRadius(J*rt);R.append("circle").attr("cx",0).attr("cy",0).attr("r",J+Y/2).attr("class","pieOuterCircle");const Tt=v.getSections(),kt=_qe(Tt),mt=[H.pie1,H.pie2,H.pie3,H.pie4,H.pie5,H.pie6,H.pie7,H.pie8,H.pie9,H.pie10,H.pie11,H.pie12],ct=E1t(mt);R.selectAll("mySlices").data(kt).enter().append("path").attr("d",it).attr("fill",dt=>ct(dt.data.label)).attr("class","pieCircle");let yt=0;Object.keys(Tt).forEach(dt=>{yt+=Tt[dt]}),R.selectAll("mySlices").data(kt).enter().append("text").text(dt=>(dt.data.value/yt*100).toFixed(0)+"%").attr("transform",dt=>"translate("+ft.centroid(dt)+")").style("text-anchor","middle").attr("class","slice"),R.append("text").text(v.getDiagramTitle()).attr("x",0).attr("y",-(E-50)/2).attr("class","pieTitleText");const st=R.selectAll(".legend").data(ct.domain()).enter().append("g").attr("class","legend").attr("transform",(dt,Ct)=>{const tt=F+j,Pt=tt*ct.domain().length/2,pt=12*F,Ft=Ct*tt-Pt;return"translate("+pt+","+Ft+")"});st.append("rect").attr("width",F).attr("height",F).style("fill",ct).style("stroke",ct),st.data(kt).append("text").attr("x",F+j).attr("y",F-j).text(dt=>{const{label:Ct,value:tt}=dt.data;return v.getShowData()?`${Ct} [${tt}]`:Ct})}},styles:Tqe}},Symbol.toStringTag,{value:"Module"}));var Z0t=function(){var i=function(Ae,ne,ke,Ve){for(ke=ke||{},Ve=Ae.length;Ve--;ke[Ae[Ve]]=ne);return ke},a=[1,3],f=[1,5],p=[1,6],v=[1,7],m=[1,8],b=[1,10],E=[1,5,14,16,18,20,21,26,28,29,30,31,32,38,39,40,41,47,48,50,51,52,53,54,55,56,57,58,59,60],C=[1,5,7,14,16,18,20,21,26,28,29,30,31,32,38,39,40,41,47,48,50,51,52,53,54,55,56,57,58,59,60],A=[38,39,40],P=[2,8],F=[1,19],j=[1,23],R=[1,24],H=[1,25],Y=[1,26],rt=[1,27],J=[1,29],it=[1,30],ft=[1,31],Tt=[1,32],kt=[1,33],mt=[1,34],ct=[1,37],yt=[1,38],st=[1,39],xt=[1,40],ht=[1,41],dt=[1,42],Ct=[1,43],tt=[1,44],Pt=[1,45],pt=[1,46],Ft=[1,47],X=[1,48],Rt=[1,49],Bt=[1,52],vt=[1,67],Ot=[1,68],Vt=[5,23,27,38,39,40,50,51,52,53,54,55,56,57,58,59,60,61],qe=[5,7,38,39,40,41],_n={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,directive:6,QUADRANT:7,document:8,line:9,statement:10,axisDetails:11,quadrantDetails:12,points:13,title:14,title_value:15,acc_title:16,acc_title_value:17,acc_descr:18,acc_descr_value:19,acc_descr_multiline_value:20,section:21,text:22,point_start:23,point_x:24,point_y:25,"X-AXIS":26,"AXIS-TEXT-DELIMITER":27,"Y-AXIS":28,QUADRANT_1:29,QUADRANT_2:30,QUADRANT_3:31,QUADRANT_4:32,openDirective:33,typeDirective:34,closeDirective:35,":":36,argDirective:37,NEWLINE:38,SEMI:39,EOF:40,open_directive:41,type_directive:42,arg_directive:43,close_directive:44,alphaNumToken:45,textNoTagsToken:46,STR:47,MD_STR:48,alphaNum:49,PUNCTUATION:50,AMP:51,NUM:52,ALPHA:53,COMMA:54,PLUS:55,EQUALS:56,MULT:57,DOT:58,BRKT:59,UNDERSCORE:60,MINUS:61,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",7:"QUADRANT",14:"title",15:"title_value",16:"acc_title",17:"acc_title_value",18:"acc_descr",19:"acc_descr_value",20:"acc_descr_multiline_value",21:"section",23:"point_start",24:"point_x",25:"point_y",26:"X-AXIS",27:"AXIS-TEXT-DELIMITER",28:"Y-AXIS",29:"QUADRANT_1",30:"QUADRANT_2",31:"QUADRANT_3",32:"QUADRANT_4",36:":",38:"NEWLINE",39:"SEMI",40:"EOF",41:"open_directive",42:"type_directive",43:"arg_directive",44:"close_directive",47:"STR",48:"MD_STR",50:"PUNCTUATION",51:"AMP",52:"NUM",53:"ALPHA",54:"COMMA",55:"PLUS",56:"EQUALS",57:"MULT",58:"DOT",59:"BRKT",60:"UNDERSCORE",61:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[10,0],[10,2],[10,1],[10,1],[10,1],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[13,4],[11,4],[11,3],[11,2],[11,4],[11,3],[11,2],[12,2],[12,2],[12,2],[12,2],[6,3],[6,5],[4,1],[4,1],[4,1],[33,1],[34,1],[37,1],[35,1],[22,1],[22,2],[22,1],[22,1],[49,1],[49,2],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[46,1],[46,1],[46,1]],performAction:function(ne,ke,Ve,Ee,He,Ce,$e){var ye=Ce.length-1;switch(He){case 13:this.$=Ce[ye].trim(),Ee.setDiagramTitle(this.$);break;case 14:this.$=Ce[ye].trim(),Ee.setAccTitle(this.$);break;case 15:case 16:this.$=Ce[ye].trim(),Ee.setAccDescription(this.$);break;case 17:Ee.addSection(Ce[ye].substr(8)),this.$=Ce[ye].substr(8);break;case 19:Ee.addPoint(Ce[ye-3],Ce[ye-1],Ce[ye]);break;case 20:Ee.setXAxisLeftText(Ce[ye-2]),Ee.setXAxisRightText(Ce[ye]);break;case 21:Ce[ye-1].text+=" ⟶ ",Ee.setXAxisLeftText(Ce[ye-1]);break;case 22:Ee.setXAxisLeftText(Ce[ye]);break;case 23:Ee.setYAxisBottomText(Ce[ye-2]),Ee.setYAxisTopText(Ce[ye]);break;case 24:Ce[ye-1].text+=" ⟶ ",Ee.setYAxisBottomText(Ce[ye-1]);break;case 25:Ee.setYAxisBottomText(Ce[ye]);break;case 26:Ee.setQuadrant1Text(Ce[ye]);break;case 27:Ee.setQuadrant2Text(Ce[ye]);break;case 28:Ee.setQuadrant3Text(Ce[ye]);break;case 29:Ee.setQuadrant4Text(Ce[ye]);break;case 35:Ee.parseDirective("%%{","open_directive");break;case 36:Ee.parseDirective(Ce[ye],"type_directive");break;case 37:Ce[ye]=Ce[ye].trim().replace(/'/g,'"'),Ee.parseDirective(Ce[ye],"arg_directive");break;case 38:Ee.parseDirective("}%%","close_directive","quadrantChart");break;case 39:this.$={text:Ce[ye],type:"text"};break;case 40:this.$={text:Ce[ye-1].text+""+Ce[ye],type:Ce[ye-1].type};break;case 41:this.$={text:Ce[ye],type:"text"};break;case 42:this.$={text:Ce[ye],type:"markdown"};break;case 43:this.$=Ce[ye];break;case 44:this.$=Ce[ye-1]+""+Ce[ye];break}},table:[{3:1,4:2,5:a,6:4,7:f,33:9,38:p,39:v,40:m,41:b},{1:[3]},{3:11,4:2,5:a,6:4,7:f,33:9,38:p,39:v,40:m,41:b},{3:12,4:2,5:a,6:4,7:f,33:9,38:p,39:v,40:m,41:b},{3:13,4:2,5:a,6:4,7:f,33:9,38:p,39:v,40:m,41:b},i(E,[2,5],{8:14}),i(C,[2,32]),i(C,[2,33]),i(C,[2,34]),{34:15,42:[1,16]},{42:[2,35]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(A,P,{33:9,9:17,10:18,11:20,12:21,13:22,6:28,22:35,45:36,1:[2,4],5:F,14:j,16:R,18:H,20:Y,21:rt,26:J,28:it,29:ft,30:Tt,31:kt,32:mt,41:b,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt}),{35:50,36:[1,51],44:Bt},i([36,44],[2,36]),i(E,[2,6]),{4:53,38:p,39:v,40:m},i(A,P,{33:9,11:20,12:21,13:22,6:28,22:35,45:36,10:54,5:F,14:j,16:R,18:H,20:Y,21:rt,26:J,28:it,29:ft,30:Tt,31:kt,32:mt,41:b,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt}),i(A,[2,10]),i(A,[2,11]),i(A,[2,12]),{15:[1,55]},{17:[1,56]},{19:[1,57]},i(A,[2,16]),i(A,[2,17]),i(A,[2,18]),{22:58,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{22:59,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{22:60,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{22:61,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{22:62,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{22:63,45:36,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt},{5:vt,23:[1,64],45:66,46:65,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot},i(Vt,[2,39]),i(Vt,[2,41]),i(Vt,[2,42]),i(Vt,[2,45]),i(Vt,[2,46]),i(Vt,[2,47]),i(Vt,[2,48]),i(Vt,[2,49]),i(Vt,[2,50]),i(Vt,[2,51]),i(Vt,[2,52]),i(Vt,[2,53]),i(Vt,[2,54]),i(Vt,[2,55]),i(qe,[2,30]),{37:69,43:[1,70]},i(qe,[2,38]),i(E,[2,7]),i(A,[2,9]),i(A,[2,13]),i(A,[2,14]),i(A,[2,15]),i(A,[2,22],{46:65,45:66,5:vt,27:[1,71],50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,25],{46:65,45:66,5:vt,27:[1,72],50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,26],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,27],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,28],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,29],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),{24:[1,73]},i(Vt,[2,40]),i(Vt,[2,56]),i(Vt,[2,57]),i(Vt,[2,58]),{35:74,44:Bt},{44:[2,37]},i(A,[2,21],{45:36,22:75,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt}),i(A,[2,24],{45:36,22:76,47:ct,48:yt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt}),{25:[1,77]},i(qe,[2,31]),i(A,[2,20],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,23],{46:65,45:66,5:vt,50:st,51:xt,52:ht,53:dt,54:Ct,55:tt,56:Pt,57:pt,58:Ft,59:X,60:Rt,61:Ot}),i(A,[2,19])],defaultActions:{10:[2,35],11:[2,1],12:[2,2],13:[2,3],70:[2,37]},parseError:function(ne,ke){if(ke.recoverable)this.trace(ne);else{var Ve=new Error(ne);throw Ve.hash=ke,Ve}},parse:function(ne){var ke=this,Ve=[0],Ee=[],He=[null],Ce=[],$e=this.table,ye="",fn=0,Yt=0,Mi=2,qt=1,zi=Ce.slice.call(arguments,1),Se=Object.create(this.lexer),ki={yy:{}};for(var Ri in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ri)&&(ki.yy[Ri]=this.yy[Ri]);Se.setInput(ne,ki.yy),ki.yy.lexer=Se,ki.yy.parser=this,typeof Se.yylloc>"u"&&(Se.yylloc={});var pi=Se.yylloc;Ce.push(pi);var bi=Se.options&&Se.options.ranges;typeof ki.yy.parseError=="function"?this.parseError=ki.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dn(){var Oi;return Oi=Ee.pop()||Se.lex()||qt,typeof Oi!="number"&&(Oi instanceof Array&&(Ee=Oi,Oi=Ee.pop()),Oi=ke.symbols_[Oi]||Oi),Oi}for(var Nn,Wr,Li,is,Ts={},Aa,Xi,Ga,_r;;){if(Wr=Ve[Ve.length-1],this.defaultActions[Wr]?Li=this.defaultActions[Wr]:((Nn===null||typeof Nn>"u")&&(Nn=dn()),Li=$e[Wr]&&$e[Wr][Nn]),typeof Li>"u"||!Li.length||!Li[0]){var qr="";_r=[];for(Aa in $e[Wr])this.terminals_[Aa]&&Aa>Mi&&_r.push("'"+this.terminals_[Aa]+"'");Se.showPosition?qr="Parse error on line "+(fn+1)+`: -`+Se.showPosition()+` -Expecting `+_r.join(", ")+", got '"+(this.terminals_[Nn]||Nn)+"'":qr="Parse error on line "+(fn+1)+": Unexpected "+(Nn==qt?"end of input":"'"+(this.terminals_[Nn]||Nn)+"'"),this.parseError(qr,{text:Se.match,token:this.terminals_[Nn]||Nn,line:Se.yylineno,loc:pi,expected:_r})}if(Li[0]instanceof Array&&Li.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Wr+", token: "+Nn);switch(Li[0]){case 1:Ve.push(Nn),He.push(Se.yytext),Ce.push(Se.yylloc),Ve.push(Li[1]),Nn=null,Yt=Se.yyleng,ye=Se.yytext,fn=Se.yylineno,pi=Se.yylloc;break;case 2:if(Xi=this.productions_[Li[1]][1],Ts.$=He[He.length-Xi],Ts._$={first_line:Ce[Ce.length-(Xi||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(Xi||1)].first_column,last_column:Ce[Ce.length-1].last_column},bi&&(Ts._$.range=[Ce[Ce.length-(Xi||1)].range[0],Ce[Ce.length-1].range[1]]),is=this.performAction.apply(Ts,[ye,Yt,fn,ki.yy,Li[1],He,Ce].concat(zi)),typeof is<"u")return is;Xi&&(Ve=Ve.slice(0,-1*Xi*2),He=He.slice(0,-1*Xi),Ce=Ce.slice(0,-1*Xi)),Ve.push(this.productions_[Li[1]][0]),He.push(Ts.$),Ce.push(Ts._$),Ga=$e[Ve[Ve.length-2]][Ve[Ve.length-1]],Ve.push(Ga);break;case 3:return!0}}return!0}},Te=function(){var Ae={EOF:1,parseError:function(ke,Ve){if(this.yy.parser)this.yy.parser.parseError(ke,Ve);else throw new Error(ke)},setInput:function(ne,ke){return this.yy=ke||this.yy||{},this._input=ne,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ne=this._input[0];this.yytext+=ne,this.yyleng++,this.offset++,this.match+=ne,this.matched+=ne;var ke=ne.match(/(?:\r\n?|\n).*/g);return ke?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ne},unput:function(ne){var ke=ne.length,Ve=ne.split(/(?:\r\n?|\n)/g);this._input=ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ke),this.offset-=ke;var Ee=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ve.length-1&&(this.yylineno-=Ve.length-1);var He=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ve?(Ve.length===Ee.length?this.yylloc.first_column:0)+Ee[Ee.length-Ve.length].length-Ve[0].length:this.yylloc.first_column-ke},this.options.ranges&&(this.yylloc.range=[He[0],He[0]+this.yyleng-ke]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ne){this.unput(this.match.slice(ne))},pastInput:function(){var ne=this.matched.substr(0,this.matched.length-this.match.length);return(ne.length>20?"...":"")+ne.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ne=this.match;return ne.length<20&&(ne+=this._input.substr(0,20-ne.length)),(ne.substr(0,20)+(ne.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ne=this.pastInput(),ke=new Array(ne.length+1).join("-");return ne+this.upcomingInput()+` -`+ke+"^"},test_match:function(ne,ke){var Ve,Ee,He;if(this.options.backtrack_lexer&&(He={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(He.yylloc.range=this.yylloc.range.slice(0))),Ee=ne[0].match(/(?:\r\n?|\n).*/g),Ee&&(this.yylineno+=Ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ee?Ee[Ee.length-1].length-Ee[Ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ne[0].length},this.yytext+=ne[0],this.match+=ne[0],this.matches=ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ne[0].length),this.matched+=ne[0],Ve=this.performAction.call(this,this.yy,this,ke,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ve)return Ve;if(this._backtrack){for(var Ce in He)this[Ce]=He[Ce];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ne,ke,Ve,Ee;this._more||(this.yytext="",this.match="");for(var He=this._currentRules(),Ce=0;Ceke[0].length)){if(ke=Ve,Ee=Ce,this.options.backtrack_lexer){if(ne=this.test_match(Ve,He[Ce]),ne!==!1)return ne;if(this._backtrack){ke=!1;continue}else return!1}else if(!this.options.flex)break}return ke?(ne=this.test_match(ke,He[Ee]),ne!==!1?ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ke=this.next();return ke||this.lex()},begin:function(ke){this.conditionStack.push(ke)},popState:function(){var ke=this.conditionStack.length-1;return ke>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ke){return ke=this.conditionStack.length-1-Math.abs(ke||0),ke>=0?this.conditionStack[ke]:"INITIAL"},pushState:function(ke){this.begin(ke)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ke,Ve,Ee,He){switch(Ee){case 0:return this.begin("open_directive"),41;case 1:return this.begin("type_directive"),42;case 2:return this.popState(),this.begin("arg_directive"),36;case 3:return this.popState(),this.popState(),44;case 4:return 43;case 5:break;case 6:break;case 7:return 38;case 8:break;case 9:return this.begin("title"),14;case 10:return this.popState(),"title_value";case 11:return this.begin("acc_title"),16;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),18;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 26;case 19:return 28;case 20:return 27;case 21:return 29;case 22:return 30;case 23:return 31;case 24:return 32;case 25:this.begin("md_string");break;case 26:return"MD_STR";case 27:this.popState();break;case 28:this.begin("string");break;case 29:this.popState();break;case 30:return"STR";case 31:return this.begin("point_start"),23;case 32:return this.begin("point_x"),24;case 33:this.popState();break;case 34:this.popState(),this.begin("point_y");break;case 35:return this.popState(),25;case 36:return 7;case 37:return 53;case 38:return"COLON";case 39:return 55;case 40:return 54;case 41:return 56;case 42:return 56;case 43:return 57;case 44:return 59;case 45:return 60;case 46:return 58;case 47:return 51;case 48:return 61;case 49:return 52;case 50:return 5;case 51:return 39;case 52:return 50;case 53:return 40}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[35],inclusive:!1},point_x:{rules:[34],inclusive:!1},point_start:{rules:[32,33],inclusive:!1},acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[10],inclusive:!1},md_string:{rules:[26,27],inclusive:!1},string:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,11,13,15,18,19,20,21,22,23,24,25,28,31,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],inclusive:!0}}};return Ae}();_n.lexer=Te;function Wn(){this.yy={}}return Wn.prototype=_n,_n.Parser=Wn,new Wn}();Z0t.parser=Z0t;const Sqe=Z0t,pg=JDt();class Aqe{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var a,f,p,v,m,b,E,C,A,P,F,j,R,H,Y,rt,J,it;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((a=If.quadrantChart)==null?void 0:a.chartWidth)||500,chartWidth:((f=If.quadrantChart)==null?void 0:f.chartHeight)||500,titlePadding:((p=If.quadrantChart)==null?void 0:p.titlePadding)||10,titleFontSize:((v=If.quadrantChart)==null?void 0:v.titleFontSize)||20,quadrantPadding:((m=If.quadrantChart)==null?void 0:m.quadrantPadding)||5,xAxisLabelPadding:((b=If.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((E=If.quadrantChart)==null?void 0:E.yAxisLabelPadding)||5,xAxisLabelFontSize:((C=If.quadrantChart)==null?void 0:C.xAxisLabelFontSize)||16,yAxisLabelFontSize:((A=If.quadrantChart)==null?void 0:A.yAxisLabelFontSize)||16,quadrantLabelFontSize:((P=If.quadrantChart)==null?void 0:P.quadrantLabelFontSize)||16,quadrantTextTopPadding:((F=If.quadrantChart)==null?void 0:F.quadrantTextTopPadding)||5,pointTextPadding:((j=If.quadrantChart)==null?void 0:j.pointTextPadding)||5,pointLabelFontSize:((R=If.quadrantChart)==null?void 0:R.pointLabelFontSize)||12,pointRadius:((H=If.quadrantChart)==null?void 0:H.pointRadius)||5,xAxisPosition:((Y=If.quadrantChart)==null?void 0:Y.xAxisPosition)||"top",yAxisPosition:((rt=If.quadrantChart)==null?void 0:rt.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((J=If.quadrantChart)==null?void 0:J.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((it=If.quadrantChart)==null?void 0:it.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:pg.quadrant1Fill,quadrant2Fill:pg.quadrant2Fill,quadrant3Fill:pg.quadrant3Fill,quadrant4Fill:pg.quadrant4Fill,quadrant1TextFill:pg.quadrant1TextFill,quadrant2TextFill:pg.quadrant2TextFill,quadrant3TextFill:pg.quadrant3TextFill,quadrant4TextFill:pg.quadrant4TextFill,quadrantPointFill:pg.quadrantPointFill,quadrantPointTextFill:pg.quadrantPointTextFill,quadrantXAxisTextFill:pg.quadrantXAxisTextFill,quadrantYAxisTextFill:pg.quadrantYAxisTextFill,quadrantTitleFill:pg.quadrantTitleFill,quadrantInternalBorderStrokeFill:pg.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:pg.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Wt.info("clear called")}setData(a){this.data={...this.data,...a}}addPoints(a){this.data.points=[...a,...this.data.points]}setConfig(a){Wt.trace("setConfig called with: ",a),this.config={...this.config,...a}}setThemeConfig(a){Wt.trace("setThemeConfig called with: ",a),this.themeConfig={...this.themeConfig,...a}}calculateSpace(a,f,p,v){const m=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:a==="top"&&f?m:0,bottom:a==="bottom"&&f?m:0},E=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,C={left:this.config.yAxisPosition==="left"&&p?E:0,right:this.config.yAxisPosition==="right"&&p?E:0},A=this.config.titleFontSize+this.config.titlePadding*2,P={top:v?A:0},F=this.config.quadrantPadding+C.left,j=this.config.quadrantPadding+b.top+P.top,R=this.config.chartWidth-this.config.quadrantPadding*2-C.left-C.right,H=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-P.top,Y=R/2,rt=H/2;return{xAxisSpace:b,yAxisSpace:C,titleSpace:P,quadrantSpace:{quadrantLeft:F,quadrantTop:j,quadrantWidth:R,quadrantHalfWidth:Y,quadrantHeight:H,quadrantHalfHeight:rt}}}getAxisLabels(a,f,p,v){const{quadrantSpace:m,titleSpace:b}=v,{quadrantHalfHeight:E,quadrantHeight:C,quadrantLeft:A,quadrantHalfWidth:P,quadrantTop:F,quadrantWidth:j}=m,R=this.data.points.length===0,H=[];return this.data.xAxisLeftText&&f&&H.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+(R?P/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+F+C+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&f&&H.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:A+P+(R?P/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+F+C+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&p&&H.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+j+this.config.quadrantPadding,y:F+C-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&p&&H.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+A+j+this.config.quadrantPadding,y:F+E-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),H}getQuadrants(a){const{quadrantSpace:f}=a,{quadrantHalfHeight:p,quadrantLeft:v,quadrantHalfWidth:m,quadrantTop:b}=f,E=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v+m,y:b,width:m,height:p,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v,y:b,width:m,height:p,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v+m,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant4Fill}];for(const C of E)C.text.x=C.x+C.width/2,this.data.points.length===0?(C.text.y=C.y+C.height/2,C.text.horizontalPos="middle"):(C.text.y=C.y+this.config.quadrantTextTopPadding,C.text.horizontalPos="top");return E}getQuadrantPoints(a){const{quadrantSpace:f}=a,{quadrantHeight:p,quadrantLeft:v,quadrantTop:m,quadrantWidth:b}=f,E=BU().domain([0,1]).range([v,b+v]),C=BU().domain([0,1]).range([p+m,m]);return this.data.points.map(P=>({x:E(P.x),y:C(P.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:P.text,fill:this.themeConfig.quadrantPointTextFill,x:E(P.x),y:C(P.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(a){const f=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:p}=a,{quadrantHalfHeight:v,quadrantHeight:m,quadrantLeft:b,quadrantHalfWidth:E,quadrantTop:C,quadrantWidth:A}=p;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:C,x2:b+A+f,y2:C},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+A,y1:C+f,x2:b+A,y2:C+m-f},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:C+m,x2:b+A+f,y2:C+m},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:C+f,x2:b,y2:C+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+E,y1:C+f,x2:b+E,y2:C+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+f,y1:C+v,x2:b+A-f,y2:C+v}]}getTitle(a){if(a)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const a=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),f=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),p=this.config.showTitle&&!!this.data.titleText,v=this.data.points.length>0?"bottom":this.config.xAxisPosition,m=this.calculateSpace(v,a,f,p);return{points:this.getQuadrantPoints(m),quadrants:this.getQuadrants(m),axisLabels:this.getAxisLabels(v,a,f,m),borderLines:this.getBorders(m),title:this.getTitle(p)}}}const Lqe=De();function D5(i){return v0(i.trim(),Lqe)}const k0=new Aqe;function Mqe(i){k0.setData({quadrant1Text:D5(i.text)})}function Dqe(i){k0.setData({quadrant2Text:D5(i.text)})}function Iqe(i){k0.setData({quadrant3Text:D5(i.text)})}function Oqe(i){k0.setData({quadrant4Text:D5(i.text)})}function Nqe(i){k0.setData({xAxisLeftText:D5(i.text)})}function Pqe(i){k0.setData({xAxisRightText:D5(i.text)})}function Fqe(i){k0.setData({yAxisTopText:D5(i.text)})}function Bqe(i){k0.setData({yAxisBottomText:D5(i.text)})}function Rqe(i,a,f){k0.addPoints([{x:a,y:f,text:D5(i.text)}])}function jqe(i){k0.setConfig({chartWidth:i})}function $qe(i){k0.setConfig({chartHeight:i})}function zqe(){const i=De(),{themeVariables:a,quadrantChart:f}=i;return f&&k0.setConfig(f),k0.setThemeConfig({quadrant1Fill:a.quadrant1Fill,quadrant2Fill:a.quadrant2Fill,quadrant3Fill:a.quadrant3Fill,quadrant4Fill:a.quadrant4Fill,quadrant1TextFill:a.quadrant1TextFill,quadrant2TextFill:a.quadrant2TextFill,quadrant3TextFill:a.quadrant3TextFill,quadrant4TextFill:a.quadrant4TextFill,quadrantPointFill:a.quadrantPointFill,quadrantPointTextFill:a.quadrantPointTextFill,quadrantXAxisTextFill:a.quadrantXAxisTextFill,quadrantYAxisTextFill:a.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:a.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:a.quadrantInternalBorderStrokeFill,quadrantTitleFill:a.quadrantTitleFill}),k0.setData({titleText:hp()}),k0.build()}const qqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Sqe,db:{setWidth:jqe,setHeight:$qe,setQuadrant1Text:Mqe,setQuadrant2Text:Dqe,setQuadrant3Text:Iqe,setQuadrant4Text:Oqe,setXAxisLeftText:Nqe,setXAxisRightText:Pqe,setYAxisTopText:Fqe,setYAxisBottomText:Bqe,addPoint:Rqe,getQuadrantData:zqe,parseDirective:function(i,a,f){J1.parseDirective(this,i,a,f)},clear:function(){k0.clear(),cg()},setAccTitle:m0,getAccTitle:ug,setDiagramTitle:Nb,getDiagramTitle:hp,getAccDescription:hg,setAccDescription:lg},renderer:{draw:(i,a,f,p)=>{var yt,st,xt;function v(ht){return ht==="top"?"hanging":"middle"}function m(ht){return ht==="left"?"start":"middle"}function b(ht){return`translate(${ht.x}, ${ht.y}) rotate(${ht.rotation||0})`}const E=De();Wt.debug(`Rendering quadrant chart -`+i);const C=E.securityLevel;let A;C==="sandbox"&&(A=xr("#i"+a));const F=xr(C==="sandbox"?A.nodes()[0].contentDocument.body:"body").select(`[id="${a}"]`),j=F.append("g").attr("class","main"),R=((yt=E.quadrantChart)==null?void 0:yt.chartWidth)||500,H=((st=E.quadrantChart)==null?void 0:st.chartHeight)||500;og(F,H,R,((xt=E.quadrantChart)==null?void 0:xt.useMaxWidth)||!0),F.attr("viewBox","0 0 "+R+" "+H),p.db.setHeight(H),p.db.setWidth(R);const Y=p.db.getQuadrantData(),rt=j.append("g").attr("class","quadrants"),J=j.append("g").attr("class","border"),it=j.append("g").attr("class","data-points"),ft=j.append("g").attr("class","labels"),Tt=j.append("g").attr("class","title");Y.title&&Tt.append("text").attr("x",0).attr("y",0).attr("fill",Y.title.fill).attr("font-size",Y.title.fontSize).attr("dominant-baseline",v(Y.title.horizontalPos)).attr("text-anchor",m(Y.title.verticalPos)).attr("transform",b(Y.title)).text(Y.title.text),Y.borderLines&&J.selectAll("line").data(Y.borderLines).enter().append("line").attr("x1",ht=>ht.x1).attr("y1",ht=>ht.y1).attr("x2",ht=>ht.x2).attr("y2",ht=>ht.y2).style("stroke",ht=>ht.strokeFill).style("stroke-width",ht=>ht.strokeWidth);const kt=rt.selectAll("g.quadrant").data(Y.quadrants).enter().append("g").attr("class","quadrant");kt.append("rect").attr("x",ht=>ht.x).attr("y",ht=>ht.y).attr("width",ht=>ht.width).attr("height",ht=>ht.height).attr("fill",ht=>ht.fill),kt.append("text").attr("x",0).attr("y",0).attr("fill",ht=>ht.text.fill).attr("font-size",ht=>ht.text.fontSize).attr("dominant-baseline",ht=>v(ht.text.horizontalPos)).attr("text-anchor",ht=>m(ht.text.verticalPos)).attr("transform",ht=>b(ht.text)).text(ht=>ht.text.text),ft.selectAll("g.label").data(Y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(ht=>ht.text).attr("fill",ht=>ht.fill).attr("font-size",ht=>ht.fontSize).attr("dominant-baseline",ht=>v(ht.horizontalPos)).attr("text-anchor",ht=>m(ht.verticalPos)).attr("transform",ht=>b(ht));const ct=it.selectAll("g.data-point").data(Y.points).enter().append("g").attr("class","data-point");ct.append("circle").attr("cx",ht=>ht.x).attr("cy",ht=>ht.y).attr("r",ht=>ht.radius).attr("fill",ht=>ht.fill),ct.append("text").attr("x",0).attr("y",0).text(ht=>ht.text.text).attr("fill",ht=>ht.text.fill).attr("font-size",ht=>ht.text.fontSize).attr("dominant-baseline",ht=>v(ht.text.horizontalPos)).attr("text-anchor",ht=>m(ht.text.verticalPos)).attr("transform",ht=>b(ht.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var J0t=function(){var i=function(Wn,Ae,ne,ke){for(ne=ne||{},ke=Wn.length;ke--;ne[Wn[ke]]=Ae);return ne},a=[1,3],f=[1,5],p=[1,6],v=[1,7],m=[1,8],b=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],E=[1,22],C=[2,13],A=[1,26],P=[1,27],F=[1,28],j=[1,29],R=[1,30],H=[1,31],Y=[1,24],rt=[1,32],J=[1,33],it=[1,36],ft=[71,72],Tt=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],kt=[1,56],mt=[1,57],ct=[1,58],yt=[1,59],st=[1,60],xt=[1,61],ht=[1,62],dt=[62,63],Ct=[1,74],tt=[1,70],Pt=[1,71],pt=[1,72],Ft=[1,73],X=[1,75],Rt=[1,79],Bt=[1,80],vt=[1,77],Ot=[1,78],Vt=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],qe={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(Ae,ne,ke,Ve,Ee,He,Ce){var $e=He.length-1;switch(Ee){case 6:this.$=He[$e].trim(),Ve.setAccTitle(this.$);break;case 7:case 8:this.$=He[$e].trim(),Ve.setAccDescription(this.$);break;case 9:Ve.parseDirective("%%{","open_directive");break;case 10:Ve.parseDirective(He[$e],"type_directive");break;case 11:He[$e]=He[$e].trim().replace(/'/g,'"'),Ve.parseDirective(He[$e],"arg_directive");break;case 12:Ve.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:Ve.addRequirement(He[$e-3],He[$e-4]);break;case 20:Ve.setNewReqId(He[$e-2]);break;case 21:Ve.setNewReqText(He[$e-2]);break;case 22:Ve.setNewReqRisk(He[$e-2]);break;case 23:Ve.setNewReqVerifyMethod(He[$e-2]);break;case 26:this.$=Ve.RequirementType.REQUIREMENT;break;case 27:this.$=Ve.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=Ve.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=Ve.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=Ve.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=Ve.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=Ve.RiskLevel.LOW_RISK;break;case 33:this.$=Ve.RiskLevel.MED_RISK;break;case 34:this.$=Ve.RiskLevel.HIGH_RISK;break;case 35:this.$=Ve.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=Ve.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=Ve.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=Ve.VerifyType.VERIFY_TEST;break;case 39:Ve.addElement(He[$e-3]);break;case 40:Ve.setNewElementType(He[$e-2]);break;case 41:Ve.setNewElementDocRef(He[$e-2]);break;case 44:Ve.addRelationship(He[$e-2],He[$e],He[$e-4]);break;case 45:Ve.addRelationship(He[$e-2],He[$e-4],He[$e]);break;case 46:this.$=Ve.Relationships.CONTAINS;break;case 47:this.$=Ve.Relationships.COPIES;break;case 48:this.$=Ve.Relationships.DERIVES;break;case 49:this.$=Ve.Relationships.SATISFIES;break;case 50:this.$=Ve.Relationships.VERIFIES;break;case 51:this.$=Ve.Relationships.REFINES;break;case 52:this.$=Ve.Relationships.TRACES;break}},table:[{3:1,4:2,6:a,9:4,14:f,16:p,18:v,19:m},{1:[3]},{3:10,4:2,5:[1,9],6:a,9:4,14:f,16:p,18:v,19:m},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},i(b,[2,8]),{20:[2,9]},{3:16,4:2,6:a,9:4,14:f,16:p,18:v,19:m},{1:[2,2]},{4:21,5:E,7:17,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{11:34,12:[1,35],22:it},i([12,22],[2,10]),i(b,[2,6]),i(b,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:E,7:38,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{4:21,5:E,7:39,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{4:21,5:E,7:40,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{4:21,5:E,7:41,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{4:21,5:E,7:42,8:C,9:4,14:f,16:p,18:v,19:m,23:18,24:19,25:20,26:23,32:25,40:A,41:P,42:F,43:j,44:R,45:H,53:Y,71:rt,72:J},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},i(ft,[2,26]),i(ft,[2,27]),i(ft,[2,28]),i(ft,[2,29]),i(ft,[2,30]),i(ft,[2,31]),i(Tt,[2,55]),i(Tt,[2,56]),i(b,[2,4]),{13:51,21:[1,52]},i(b,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:kt,65:mt,66:ct,67:yt,68:st,69:xt,70:ht},{61:63,64:kt,65:mt,66:ct,67:yt,68:st,69:xt,70:ht},{11:64,22:it},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},i(dt,[2,46]),i(dt,[2,47]),i(dt,[2,48]),i(dt,[2,49]),i(dt,[2,50]),i(dt,[2,51]),i(dt,[2,52]),{63:[1,68]},i(b,[2,5]),{5:Ct,29:69,30:tt,33:Pt,35:pt,37:Ft,39:X},{5:Rt,39:Bt,55:76,56:vt,58:Ot},{32:81,71:rt,72:J},{32:82,71:rt,72:J},i(Vt,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:Ct,29:87,30:tt,33:Pt,35:pt,37:Ft,39:X},i(Vt,[2,25]),i(Vt,[2,39]),{31:[1,88]},{31:[1,89]},{5:Rt,39:Bt,55:90,56:vt,58:Ot},i(Vt,[2,43]),i(Vt,[2,44]),i(Vt,[2,45]),{32:91,71:rt,72:J},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},i(Vt,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},i(Vt,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:Ct,29:116,30:tt,33:Pt,35:pt,37:Ft,39:X},{5:Ct,29:117,30:tt,33:Pt,35:pt,37:Ft,39:X},{5:Ct,29:118,30:tt,33:Pt,35:pt,37:Ft,39:X},{5:Ct,29:119,30:tt,33:Pt,35:pt,37:Ft,39:X},{5:Rt,39:Bt,55:120,56:vt,58:Ot},{5:Rt,39:Bt,55:121,56:vt,58:Ot},i(Vt,[2,20]),i(Vt,[2,21]),i(Vt,[2,22]),i(Vt,[2,23]),i(Vt,[2,40]),i(Vt,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(Ae,ne){if(ne.recoverable)this.trace(Ae);else{var ke=new Error(Ae);throw ke.hash=ne,ke}},parse:function(Ae){var ne=this,ke=[0],Ve=[],Ee=[null],He=[],Ce=this.table,$e="",ye=0,fn=0,Yt=2,Mi=1,qt=He.slice.call(arguments,1),zi=Object.create(this.lexer),Se={yy:{}};for(var ki in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ki)&&(Se.yy[ki]=this.yy[ki]);zi.setInput(Ae,Se.yy),Se.yy.lexer=zi,Se.yy.parser=this,typeof zi.yylloc>"u"&&(zi.yylloc={});var Ri=zi.yylloc;He.push(Ri);var pi=zi.options&&zi.options.ranges;typeof Se.yy.parseError=="function"?this.parseError=Se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function bi(){var qr;return qr=Ve.pop()||zi.lex()||Mi,typeof qr!="number"&&(qr instanceof Array&&(Ve=qr,qr=Ve.pop()),qr=ne.symbols_[qr]||qr),qr}for(var dn,Nn,Wr,Li,is={},Ts,Aa,Xi,Ga;;){if(Nn=ke[ke.length-1],this.defaultActions[Nn]?Wr=this.defaultActions[Nn]:((dn===null||typeof dn>"u")&&(dn=bi()),Wr=Ce[Nn]&&Ce[Nn][dn]),typeof Wr>"u"||!Wr.length||!Wr[0]){var _r="";Ga=[];for(Ts in Ce[Nn])this.terminals_[Ts]&&Ts>Yt&&Ga.push("'"+this.terminals_[Ts]+"'");zi.showPosition?_r="Parse error on line "+(ye+1)+`: -`+zi.showPosition()+` -Expecting `+Ga.join(", ")+", got '"+(this.terminals_[dn]||dn)+"'":_r="Parse error on line "+(ye+1)+": Unexpected "+(dn==Mi?"end of input":"'"+(this.terminals_[dn]||dn)+"'"),this.parseError(_r,{text:zi.match,token:this.terminals_[dn]||dn,line:zi.yylineno,loc:Ri,expected:Ga})}if(Wr[0]instanceof Array&&Wr.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Nn+", token: "+dn);switch(Wr[0]){case 1:ke.push(dn),Ee.push(zi.yytext),He.push(zi.yylloc),ke.push(Wr[1]),dn=null,fn=zi.yyleng,$e=zi.yytext,ye=zi.yylineno,Ri=zi.yylloc;break;case 2:if(Aa=this.productions_[Wr[1]][1],is.$=Ee[Ee.length-Aa],is._$={first_line:He[He.length-(Aa||1)].first_line,last_line:He[He.length-1].last_line,first_column:He[He.length-(Aa||1)].first_column,last_column:He[He.length-1].last_column},pi&&(is._$.range=[He[He.length-(Aa||1)].range[0],He[He.length-1].range[1]]),Li=this.performAction.apply(is,[$e,fn,ye,Se.yy,Wr[1],Ee,He].concat(qt)),typeof Li<"u")return Li;Aa&&(ke=ke.slice(0,-1*Aa*2),Ee=Ee.slice(0,-1*Aa),He=He.slice(0,-1*Aa)),ke.push(this.productions_[Wr[1]][0]),Ee.push(is.$),He.push(is._$),Xi=Ce[ke[ke.length-2]][ke[ke.length-1]],ke.push(Xi);break;case 3:return!0}}return!0}},_n=function(){var Wn={EOF:1,parseError:function(ne,ke){if(this.yy.parser)this.yy.parser.parseError(ne,ke);else throw new Error(ne)},setInput:function(Ae,ne){return this.yy=ne||this.yy||{},this._input=Ae,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Ae=this._input[0];this.yytext+=Ae,this.yyleng++,this.offset++,this.match+=Ae,this.matched+=Ae;var ne=Ae.match(/(?:\r\n?|\n).*/g);return ne?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ae},unput:function(Ae){var ne=Ae.length,ke=Ae.split(/(?:\r\n?|\n)/g);this._input=Ae+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ne),this.offset-=ne;var Ve=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ke.length-1&&(this.yylineno-=ke.length-1);var Ee=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ke?(ke.length===Ve.length?this.yylloc.first_column:0)+Ve[Ve.length-ke.length].length-ke[0].length:this.yylloc.first_column-ne},this.options.ranges&&(this.yylloc.range=[Ee[0],Ee[0]+this.yyleng-ne]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Ae){this.unput(this.match.slice(Ae))},pastInput:function(){var Ae=this.matched.substr(0,this.matched.length-this.match.length);return(Ae.length>20?"...":"")+Ae.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Ae=this.match;return Ae.length<20&&(Ae+=this._input.substr(0,20-Ae.length)),(Ae.substr(0,20)+(Ae.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Ae=this.pastInput(),ne=new Array(Ae.length+1).join("-");return Ae+this.upcomingInput()+` -`+ne+"^"},test_match:function(Ae,ne){var ke,Ve,Ee;if(this.options.backtrack_lexer&&(Ee={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ee.yylloc.range=this.yylloc.range.slice(0))),Ve=Ae[0].match(/(?:\r\n?|\n).*/g),Ve&&(this.yylineno+=Ve.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ve?Ve[Ve.length-1].length-Ve[Ve.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ae[0].length},this.yytext+=Ae[0],this.match+=Ae[0],this.matches=Ae,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ae[0].length),this.matched+=Ae[0],ke=this.performAction.call(this,this.yy,this,ne,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ke)return ke;if(this._backtrack){for(var He in Ee)this[He]=Ee[He];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ae,ne,ke,Ve;this._more||(this.yytext="",this.match="");for(var Ee=this._currentRules(),He=0;Hene[0].length)){if(ne=ke,Ve=He,this.options.backtrack_lexer){if(Ae=this.test_match(ke,Ee[He]),Ae!==!1)return Ae;if(this._backtrack){ne=!1;continue}else return!1}else if(!this.options.flex)break}return ne?(Ae=this.test_match(ne,Ee[Ve]),Ae!==!1?Ae:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ne=this.next();return ne||this.lex()},begin:function(ne){this.conditionStack.push(ne)},popState:function(){var ne=this.conditionStack.length-1;return ne>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ne){return ne=this.conditionStack.length-1-Math.abs(ne||0),ne>=0?this.conditionStack[ne]:"INITIAL"},pushState:function(ne){this.begin(ne)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ne,ke,Ve,Ee){switch(Ve){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:break;case 15:break;case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 53:this.popState();break;case 54:return"qString";case 55:return ke.yytext=ke.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}};return Wn}();qe.lexer=_n;function Te(){this.yy={}}return Te.prototype=qe,qe.Parser=Te,new Te}();J0t.parser=J0t;const Hqe=J0t;let tgt=[],pp={},DP={},uk={},IP={};const Vqe={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(i,a,f){J1.parseDirective(this,i,a,f)},getConfig:()=>De().req,addRequirement:(i,a)=>(DP[i]===void 0&&(DP[i]={name:i,type:a,id:pp.id,text:pp.text,risk:pp.risk,verifyMethod:pp.verifyMethod}),pp={},DP[i]),getRequirements:()=>DP,setNewReqId:i=>{pp!==void 0&&(pp.id=i)},setNewReqText:i=>{pp!==void 0&&(pp.text=i)},setNewReqRisk:i=>{pp!==void 0&&(pp.risk=i)},setNewReqVerifyMethod:i=>{pp!==void 0&&(pp.verifyMethod=i)},setAccTitle:m0,getAccTitle:ug,setAccDescription:lg,getAccDescription:hg,addElement:i=>(IP[i]===void 0&&(IP[i]={name:i,type:uk.type,docRef:uk.docRef},Wt.info("Added new requirement: ",i)),uk={},IP[i]),getElements:()=>IP,setNewElementType:i=>{uk!==void 0&&(uk.type=i)},setNewElementDocRef:i=>{uk!==void 0&&(uk.docRef=i)},addRelationship:(i,a,f)=>{tgt.push({type:i,src:a,dst:f})},getRelationships:()=>tgt,clear:()=>{tgt=[],pp={},DP={},uk={},IP={},cg()}},Gqe=i=>` +`,Sqe=i=>{const a=Object.entries(i).map(p=>({label:p[0],value:p[1]})).sort((p,v)=>v.value-p.value);return $7e().value(p=>p.value)(a)},Aqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Eqe,db:Cqe,renderer:{draw:(i,a,f,p)=>{var pt,U;Ut.debug(`rendering pie chart +`+i);const v=p.db,m=Le(),b=idt(v.getConfig(),m.pie),E=450,_=((U=(pt=document.getElementById(a))==null?void 0:pt.parentElement)==null?void 0:U.offsetWidth)??b.useWidth,L=fdt(a);L.attr("viewBox",`0 0 ${_} ${E}`),og(L,E,_,b.useMaxWidth);const N=40,B=18,j=4,R=L.append("g");R.attr("transform","translate("+_/2+","+E/2+")");const{themeVariables:z}=m;let[K]=$A(z.pieOuterStrokeWidth);K??(K=2);const it=b.textPosition,st=Math.min(_,E)/2-N,ut=LA().innerRadius(0).outerRadius(st),bt=LA().innerRadius(st*it).outerRadius(st*it);R.append("circle").attr("cx",0).attr("cy",0).attr("r",st+K/2).attr("class","pieOuterCircle");const mt=v.getSections(),yt=Sqe(mt),dt=[z.pie1,z.pie2,z.pie3,z.pie4,z.pie5,z.pie6,z.pie7,z.pie8,z.pie9,z.pie10,z.pie11,z.pie12],ht=x1t(dt);R.selectAll("mySlices").data(yt).enter().append("path").attr("d",ut).attr("fill",xt=>ht(xt.data.label)).attr("class","pieCircle");let wt=0;Object.keys(mt).forEach(xt=>{wt+=mt[xt]}),R.selectAll("mySlices").data(yt).enter().append("text").text(xt=>(xt.data.value/wt*100).toFixed(0)+"%").attr("transform",xt=>"translate("+bt.centroid(xt)+")").style("text-anchor","middle").attr("class","slice"),R.append("text").text(v.getDiagramTitle()).attr("x",0).attr("y",-(E-50)/2).attr("class","pieTitleText");const X=R.selectAll(".legend").data(ht.domain()).enter().append("g").attr("class","legend").attr("transform",(xt,nt)=>{const Ot=B+j,Nt=Ot*ht.domain().length/2,qt=12*B,Ct=nt*Ot-Nt;return"translate("+qt+","+Ct+")"});X.append("rect").attr("width",B).attr("height",B).style("fill",ht).style("stroke",ht),X.data(yt).append("text").attr("x",B+j).attr("y",B-j).text(xt=>{const{label:nt,value:Ot}=xt.data;return v.getShowData()?`${nt} [${Ot}]`:nt})}},styles:_qe}},Symbol.toStringTag,{value:"Module"}));var egt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,7],b=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],E=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],_=[32,33,34],L=[2,7],N=[1,13],B=[1,17],j=[1,18],R=[1,19],z=[1,20],K=[1,21],it=[1,22],st=[1,23],ut=[1,24],bt=[1,25],mt=[1,26],yt=[1,27],dt=[1,30],ht=[1,31],wt=[1,32],X=[1,33],pt=[1,34],U=[1,35],xt=[1,36],nt=[1,37],Ot=[1,38],Nt=[1,39],qt=[1,40],Ct=[1,41],Z=[1,42],Tt=[1,57],Ht=[1,58],It=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(ve,Ge,Ke,we,_e,$t,re){var ie=$t.length-1;switch(_e){case 12:this.$=$t[ie].trim(),we.setDiagramTitle(this.$);break;case 13:this.$=$t[ie].trim(),we.setAccTitle(this.$);break;case 14:case 15:this.$=$t[ie].trim(),we.setAccDescription(this.$);break;case 16:we.addSection($t[ie].substr(8)),this.$=$t[ie].substr(8);break;case 17:we.addPoint($t[ie-3],$t[ie-1],$t[ie]);break;case 18:we.setXAxisLeftText($t[ie-2]),we.setXAxisRightText($t[ie]);break;case 19:$t[ie-1].text+=" ⟶ ",we.setXAxisLeftText($t[ie-1]);break;case 20:we.setXAxisLeftText($t[ie]);break;case 21:we.setYAxisBottomText($t[ie-2]),we.setYAxisTopText($t[ie]);break;case 22:$t[ie-1].text+=" ⟶ ",we.setYAxisBottomText($t[ie-1]);break;case 23:we.setYAxisBottomText($t[ie]);break;case 24:we.setQuadrant1Text($t[ie]);break;case 25:we.setQuadrant2Text($t[ie]);break;case 26:we.setQuadrant3Text($t[ie]);break;case 27:we.setQuadrant4Text($t[ie]);break;case 31:this.$={text:$t[ie],type:"text"};break;case 32:this.$={text:$t[ie-1].text+""+$t[ie],type:$t[ie-1].type};break;case 33:this.$={text:$t[ie],type:"text"};break;case 34:this.$={text:$t[ie],type:"markdown"};break;case 35:this.$=$t[ie];break;case 36:this.$=$t[ie-1]+""+$t[ie];break}},table:[{3:1,4:2,5:a,6:f,32:p,33:v,34:m},{1:[3]},{3:8,4:2,5:a,6:f,32:p,33:v,34:m},{3:9,4:2,5:a,6:f,32:p,33:v,34:m},i(b,[2,4],{7:10}),i(E,[2,28]),i(E,[2,29]),i(E,[2,30]),{1:[2,1]},{1:[2,2]},i(_,L,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:N,13:B,15:j,17:R,19:z,20:K,25:it,27:st,28:ut,29:bt,30:mt,31:yt,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(b,[2,5]),{4:43,32:p,33:v,34:m},i(_,L,{10:14,11:15,12:16,21:28,35:29,9:44,5:N,13:B,15:j,17:R,19:z,20:K,25:it,27:st,28:ut,29:bt,30:mt,31:yt,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(_,[2,9]),i(_,[2,10]),i(_,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},i(_,[2,15]),i(_,[2,16]),{21:48,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:49,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:50,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:51,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:52,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{21:53,35:29,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z},{5:Tt,22:[1,54],35:56,36:55,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht},i(It,[2,31]),i(It,[2,33]),i(It,[2,34]),i(It,[2,37]),i(It,[2,38]),i(It,[2,39]),i(It,[2,40]),i(It,[2,41]),i(It,[2,42]),i(It,[2,43]),i(It,[2,44]),i(It,[2,45]),i(It,[2,46]),i(It,[2,47]),i(b,[2,6]),i(_,[2,8]),i(_,[2,12]),i(_,[2,13]),i(_,[2,14]),i(_,[2,20],{36:55,35:56,5:Tt,26:[1,59],40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,23],{36:55,35:56,5:Tt,26:[1,60],40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,24],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,25],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,26],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,27],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),{23:[1,61]},i(It,[2,32]),i(It,[2,48]),i(It,[2,49]),i(It,[2,50]),i(_,[2,19],{35:29,21:62,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),i(_,[2,22],{35:29,21:63,37:dt,38:ht,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z}),{24:[1,64]},i(_,[2,18],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,21],{36:55,35:56,5:Tt,40:wt,41:X,42:pt,43:U,44:xt,45:nt,46:Ot,47:Nt,48:qt,49:Ct,50:Z,51:Ht}),i(_,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(ve,Ge){if(Ge.recoverable)this.trace(ve);else{var Ke=new Error(ve);throw Ke.hash=Ge,Ke}},parse:function(ve){var Ge=this,Ke=[0],we=[],_e=[null],$t=[],re=this.table,ie="",Oe=0,oe=0,Ne=2,me=1,cn=$t.slice.call(arguments,1),li=Object.create(this.lexer),ya={yy:{}};for(var da in this.yy)Object.prototype.hasOwnProperty.call(this.yy,da)&&(ya.yy[da]=this.yy[da]);li.setInput(ve,ya.yy),ya.yy.lexer=li,ya.yy.parser=this,typeof li.yylloc>"u"&&(li.yylloc={});var Oo=li.yylloc;$t.push(Oo);var ds=li.options&&li.options.ranges;typeof ya.yy.parseError=="function"?this.parseError=ya.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Dr(){var Gs;return Gs=we.pop()||li.lex()||me,typeof Gs!="number"&&(Gs instanceof Array&&(we=Gs,Gs=we.pop()),Gs=Ge.symbols_[Gs]||Gs),Gs}for(var nr,di,Ee,Yn,He={},Ti,gn,ks,qa;;){if(di=Ke[Ke.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((nr===null||typeof nr>"u")&&(nr=Dr()),Ee=re[di]&&re[di][nr]),typeof Ee>"u"||!Ee.length||!Ee[0]){var La="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Ne&&qa.push("'"+this.terminals_[Ti]+"'");li.showPosition?La="Parse error on line "+(Oe+1)+`: +`+li.showPosition()+` +Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ke.length-1&&(this.yylineno-=Ke.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+` +`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();egt.parser=egt;const Lqe=egt,fg=nDt();class Mqe{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var a,f,p,v,m,b,E,_,L,N,B,j,R,z,K,it,st,ut;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((a=Lf.quadrantChart)==null?void 0:a.chartWidth)||500,chartWidth:((f=Lf.quadrantChart)==null?void 0:f.chartHeight)||500,titlePadding:((p=Lf.quadrantChart)==null?void 0:p.titlePadding)||10,titleFontSize:((v=Lf.quadrantChart)==null?void 0:v.titleFontSize)||20,quadrantPadding:((m=Lf.quadrantChart)==null?void 0:m.quadrantPadding)||5,xAxisLabelPadding:((b=Lf.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((E=Lf.quadrantChart)==null?void 0:E.yAxisLabelPadding)||5,xAxisLabelFontSize:((_=Lf.quadrantChart)==null?void 0:_.xAxisLabelFontSize)||16,yAxisLabelFontSize:((L=Lf.quadrantChart)==null?void 0:L.yAxisLabelFontSize)||16,quadrantLabelFontSize:((N=Lf.quadrantChart)==null?void 0:N.quadrantLabelFontSize)||16,quadrantTextTopPadding:((B=Lf.quadrantChart)==null?void 0:B.quadrantTextTopPadding)||5,pointTextPadding:((j=Lf.quadrantChart)==null?void 0:j.pointTextPadding)||5,pointLabelFontSize:((R=Lf.quadrantChart)==null?void 0:R.pointLabelFontSize)||12,pointRadius:((z=Lf.quadrantChart)==null?void 0:z.pointRadius)||5,xAxisPosition:((K=Lf.quadrantChart)==null?void 0:K.xAxisPosition)||"top",yAxisPosition:((it=Lf.quadrantChart)==null?void 0:it.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((st=Lf.quadrantChart)==null?void 0:st.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((ut=Lf.quadrantChart)==null?void 0:ut.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:fg.quadrant1Fill,quadrant2Fill:fg.quadrant2Fill,quadrant3Fill:fg.quadrant3Fill,quadrant4Fill:fg.quadrant4Fill,quadrant1TextFill:fg.quadrant1TextFill,quadrant2TextFill:fg.quadrant2TextFill,quadrant3TextFill:fg.quadrant3TextFill,quadrant4TextFill:fg.quadrant4TextFill,quadrantPointFill:fg.quadrantPointFill,quadrantPointTextFill:fg.quadrantPointTextFill,quadrantXAxisTextFill:fg.quadrantXAxisTextFill,quadrantYAxisTextFill:fg.quadrantYAxisTextFill,quadrantTitleFill:fg.quadrantTitleFill,quadrantInternalBorderStrokeFill:fg.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:fg.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Ut.info("clear called")}setData(a){this.data={...this.data,...a}}addPoints(a){this.data.points=[...a,...this.data.points]}setConfig(a){Ut.trace("setConfig called with: ",a),this.config={...this.config,...a}}setThemeConfig(a){Ut.trace("setThemeConfig called with: ",a),this.themeConfig={...this.themeConfig,...a}}calculateSpace(a,f,p,v){const m=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:a==="top"&&f?m:0,bottom:a==="bottom"&&f?m:0},E=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,_={left:this.config.yAxisPosition==="left"&&p?E:0,right:this.config.yAxisPosition==="right"&&p?E:0},L=this.config.titleFontSize+this.config.titlePadding*2,N={top:v?L:0},B=this.config.quadrantPadding+_.left,j=this.config.quadrantPadding+b.top+N.top,R=this.config.chartWidth-this.config.quadrantPadding*2-_.left-_.right,z=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-N.top,K=R/2,it=z/2;return{xAxisSpace:b,yAxisSpace:_,titleSpace:N,quadrantSpace:{quadrantLeft:B,quadrantTop:j,quadrantWidth:R,quadrantHalfWidth:K,quadrantHeight:z,quadrantHalfHeight:it}}}getAxisLabels(a,f,p,v){const{quadrantSpace:m,titleSpace:b}=v,{quadrantHalfHeight:E,quadrantHeight:_,quadrantLeft:L,quadrantHalfWidth:N,quadrantTop:B,quadrantWidth:j}=m,R=this.data.points.length===0,z=[];return this.data.xAxisLeftText&&f&&z.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:L+(R?N/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&f&&z.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:L+N+(R?N/2:0),y:a==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+B+_+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&p&&z.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+L+j+this.config.quadrantPadding,y:B+_-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&p&&z.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+L+j+this.config.quadrantPadding,y:B+E-(R?E/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:R?"center":"left",horizontalPos:"top",rotation:-90}),z}getQuadrants(a){const{quadrantSpace:f}=a,{quadrantHalfHeight:p,quadrantLeft:v,quadrantHalfWidth:m,quadrantTop:b}=f,E=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v+m,y:b,width:m,height:p,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v,y:b,width:m,height:p,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:v+m,y:b+p,width:m,height:p,fill:this.themeConfig.quadrant4Fill}];for(const _ of E)_.text.x=_.x+_.width/2,this.data.points.length===0?(_.text.y=_.y+_.height/2,_.text.horizontalPos="middle"):(_.text.y=_.y+this.config.quadrantTextTopPadding,_.text.horizontalPos="top");return E}getQuadrantPoints(a){const{quadrantSpace:f}=a,{quadrantHeight:p,quadrantLeft:v,quadrantTop:m,quadrantWidth:b}=f,E=BU().domain([0,1]).range([v,b+v]),_=BU().domain([0,1]).range([p+m,m]);return this.data.points.map(N=>({x:E(N.x),y:_(N.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:N.text,fill:this.themeConfig.quadrantPointTextFill,x:E(N.x),y:_(N.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(a){const f=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:p}=a,{quadrantHalfHeight:v,quadrantHeight:m,quadrantLeft:b,quadrantHalfWidth:E,quadrantTop:_,quadrantWidth:L}=p;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_,x2:b+L+f,y2:_},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+L,y1:_+f,x2:b+L,y2:_+m-f},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-f,y1:_+m,x2:b+L+f,y2:_+m},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:_+f,x2:b,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+E,y1:_+f,x2:b+E,y2:_+m-f},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+f,y1:_+v,x2:b+L-f,y2:_+v}]}getTitle(a){if(a)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const a=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),f=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),p=this.config.showTitle&&!!this.data.titleText,v=this.data.points.length>0?"bottom":this.config.xAxisPosition,m=this.calculateSpace(v,a,f,p);return{points:this.getQuadrantPoints(m),quadrants:this.getQuadrants(m),axisLabels:this.getAxisLabels(v,a,f,m),borderLines:this.getBorders(m),title:this.getTitle(p)}}}const Iqe=Le();function M5(i){return Dd(i.trim(),Iqe)}const x0=new Mqe;function Dqe(i){x0.setData({quadrant1Text:M5(i.text)})}function Oqe(i){x0.setData({quadrant2Text:M5(i.text)})}function Nqe(i){x0.setData({quadrant3Text:M5(i.text)})}function Pqe(i){x0.setData({quadrant4Text:M5(i.text)})}function Fqe(i){x0.setData({xAxisLeftText:M5(i.text)})}function Bqe(i){x0.setData({xAxisRightText:M5(i.text)})}function Rqe(i){x0.setData({yAxisTopText:M5(i.text)})}function jqe(i){x0.setData({yAxisBottomText:M5(i.text)})}function $qe(i,a,f){x0.addPoints([{x:a,y:f,text:M5(i.text)}])}function zqe(i){x0.setConfig({chartWidth:i})}function qqe(i){x0.setConfig({chartHeight:i})}function Hqe(){const i=Le(),{themeVariables:a,quadrantChart:f}=i;return f&&x0.setConfig(f),x0.setThemeConfig({quadrant1Fill:a.quadrant1Fill,quadrant2Fill:a.quadrant2Fill,quadrant3Fill:a.quadrant3Fill,quadrant4Fill:a.quadrant4Fill,quadrant1TextFill:a.quadrant1TextFill,quadrant2TextFill:a.quadrant2TextFill,quadrant3TextFill:a.quadrant3TextFill,quadrant4TextFill:a.quadrant4TextFill,quadrantPointFill:a.quadrantPointFill,quadrantPointTextFill:a.quadrantPointTextFill,quadrantXAxisTextFill:a.quadrantXAxisTextFill,quadrantYAxisTextFill:a.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:a.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:a.quadrantInternalBorderStrokeFill,quadrantTitleFill:a.quadrantTitleFill}),x0.setData({titleText:Db()}),x0.build()}const Gqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Lqe,db:{setWidth:zqe,setHeight:qqe,setQuadrant1Text:Dqe,setQuadrant2Text:Oqe,setQuadrant3Text:Nqe,setQuadrant4Text:Pqe,setXAxisLeftText:Fqe,setXAxisRightText:Bqe,setYAxisTopText:Rqe,setYAxisBottomText:jqe,addPoint:$qe,getQuadrantData:Hqe,clear:function(){x0.clear(),ap()},setAccTitle:cg,getAccTitle:op,setDiagramTitle:Z2,getDiagramTitle:Db,getAccDescription:up,setAccDescription:cp},renderer:{draw:(i,a,f,p)=>{var wt,X,pt;function v(U){return U==="top"?"hanging":"middle"}function m(U){return U==="left"?"start":"middle"}function b(U){return`translate(${U.x}, ${U.y}) rotate(${U.rotation||0})`}const E=Le();Ut.debug(`Rendering quadrant chart +`+i);const _=E.securityLevel;let L;_==="sandbox"&&(L=yr("#i"+a));const B=yr(_==="sandbox"?L.nodes()[0].contentDocument.body:"body").select(`[id="${a}"]`),j=B.append("g").attr("class","main"),R=((wt=E.quadrantChart)==null?void 0:wt.chartWidth)||500,z=((X=E.quadrantChart)==null?void 0:X.chartHeight)||500;og(B,z,R,((pt=E.quadrantChart)==null?void 0:pt.useMaxWidth)||!0),B.attr("viewBox","0 0 "+R+" "+z),p.db.setHeight(z),p.db.setWidth(R);const K=p.db.getQuadrantData(),it=j.append("g").attr("class","quadrants"),st=j.append("g").attr("class","border"),ut=j.append("g").attr("class","data-points"),bt=j.append("g").attr("class","labels"),mt=j.append("g").attr("class","title");K.title&&mt.append("text").attr("x",0).attr("y",0).attr("fill",K.title.fill).attr("font-size",K.title.fontSize).attr("dominant-baseline",v(K.title.horizontalPos)).attr("text-anchor",m(K.title.verticalPos)).attr("transform",b(K.title)).text(K.title.text),K.borderLines&&st.selectAll("line").data(K.borderLines).enter().append("line").attr("x1",U=>U.x1).attr("y1",U=>U.y1).attr("x2",U=>U.x2).attr("y2",U=>U.y2).style("stroke",U=>U.strokeFill).style("stroke-width",U=>U.strokeWidth);const yt=it.selectAll("g.quadrant").data(K.quadrants).enter().append("g").attr("class","quadrant");yt.append("rect").attr("x",U=>U.x).attr("y",U=>U.y).attr("width",U=>U.width).attr("height",U=>U.height).attr("fill",U=>U.fill),yt.append("text").attr("x",0).attr("y",0).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text)).text(U=>U.text.text),bt.selectAll("g.label").data(K.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(U=>U.text).attr("fill",U=>U.fill).attr("font-size",U=>U.fontSize).attr("dominant-baseline",U=>v(U.horizontalPos)).attr("text-anchor",U=>m(U.verticalPos)).attr("transform",U=>b(U));const ht=ut.selectAll("g.data-point").data(K.points).enter().append("g").attr("class","data-point");ht.append("circle").attr("cx",U=>U.x).attr("cy",U=>U.y).attr("r",U=>U.radius).attr("fill",U=>U.fill),ht.append("text").attr("x",0).attr("y",0).text(U=>U.text.text).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var ngt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],E=[2,7],_=[1,22],L=[1,23],N=[1,24],B=[1,25],j=[1,26],R=[1,27],z=[1,20],K=[1,28],it=[1,29],st=[62,63],ut=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],bt=[1,47],mt=[1,48],yt=[1,49],dt=[1,50],ht=[1,51],wt=[1,52],X=[1,53],pt=[53,54],U=[1,64],xt=[1,60],nt=[1,61],Ot=[1,62],Nt=[1,63],qt=[1,65],Ct=[1,69],Z=[1,70],Tt=[1,67],Ht=[1,68],It=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(ve,Ge,Ke,we,_e,$t,re){var ie=$t.length-1;switch(_e){case 4:this.$=$t[ie].trim(),we.setAccTitle(this.$);break;case 5:case 6:this.$=$t[ie].trim(),we.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:we.addRequirement($t[ie-3],$t[ie-4]);break;case 14:we.setNewReqId($t[ie-2]);break;case 15:we.setNewReqText($t[ie-2]);break;case 16:we.setNewReqRisk($t[ie-2]);break;case 17:we.setNewReqVerifyMethod($t[ie-2]);break;case 20:this.$=we.RequirementType.REQUIREMENT;break;case 21:this.$=we.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=we.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=we.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=we.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=we.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=we.RiskLevel.LOW_RISK;break;case 27:this.$=we.RiskLevel.MED_RISK;break;case 28:this.$=we.RiskLevel.HIGH_RISK;break;case 29:this.$=we.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=we.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=we.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=we.VerifyType.VERIFY_TEST;break;case 33:we.addElement($t[ie-3]);break;case 34:we.setNewElementType($t[ie-2]);break;case 35:we.setNewElementDocRef($t[ie-2]);break;case 38:we.addRelationship($t[ie-2],$t[ie],$t[ie-4]);break;case 39:we.addRelationship($t[ie-2],$t[ie-4],$t[ie]);break;case 40:this.$=we.Relationships.CONTAINS;break;case 41:this.$=we.Relationships.COPIES;break;case 42:this.$=we.Relationships.DERIVES;break;case 43:this.$=we.Relationships.SATISFIES;break;case 44:this.$=we.Relationships.VERIFIES;break;case 45:this.$=we.Relationships.REFINES;break;case 46:this.$=we.Relationships.TRACES;break}},table:[{3:1,4:2,6:a,9:f,11:p,13:v},{1:[3]},{3:8,4:2,5:[1,7],6:a,9:f,11:p,13:v},{5:[1,9]},{10:[1,10]},{12:[1,11]},i(m,[2,6]),{3:12,4:2,6:a,9:f,11:p,13:v},{1:[2,2]},{4:17,5:b,7:13,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},i(m,[2,4]),i(m,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:b,7:31,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:32,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:33,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:34,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{4:17,5:b,7:35,8:E,9:f,11:p,13:v,14:14,15:15,16:16,17:19,23:21,31:_,32:L,33:N,34:B,35:j,36:R,44:z,62:K,63:it},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},i(st,[2,20]),i(st,[2,21]),i(st,[2,22]),i(st,[2,23]),i(st,[2,24]),i(st,[2,25]),i(ut,[2,49]),i(ut,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:bt,56:mt,57:yt,58:dt,59:ht,60:wt,61:X},{52:54,55:bt,56:mt,57:yt,58:dt,59:ht,60:wt,61:X},{5:[1,55]},{5:[1,56]},{53:[1,57]},i(pt,[2,40]),i(pt,[2,41]),i(pt,[2,42]),i(pt,[2,43]),i(pt,[2,44]),i(pt,[2,45]),i(pt,[2,46]),{54:[1,58]},{5:U,20:59,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:Ct,30:Z,46:66,47:Tt,49:Ht},{23:71,62:K,63:it},{23:72,62:K,63:it},i(It,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:U,20:77,21:xt,24:nt,26:Ot,28:Nt,30:qt},i(It,[2,19]),i(It,[2,33]),{22:[1,78]},{22:[1,79]},{5:Ct,30:Z,46:80,47:Tt,49:Ht},i(It,[2,37]),i(It,[2,38]),i(It,[2,39]),{23:81,62:K,63:it},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},i(It,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},i(It,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:U,20:106,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:107,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:108,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:U,20:109,21:xt,24:nt,26:Ot,28:Nt,30:qt},{5:Ct,30:Z,46:110,47:Tt,49:Ht},{5:Ct,30:Z,46:111,47:Tt,49:Ht},i(It,[2,14]),i(It,[2,15]),i(It,[2,16]),i(It,[2,17]),i(It,[2,34]),i(It,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(ve,Ge){if(Ge.recoverable)this.trace(ve);else{var Ke=new Error(ve);throw Ke.hash=Ge,Ke}},parse:function(ve){var Ge=this,Ke=[0],we=[],_e=[null],$t=[],re=this.table,ie="",Oe=0,oe=0,Ne=2,me=1,cn=$t.slice.call(arguments,1),li=Object.create(this.lexer),ya={yy:{}};for(var da in this.yy)Object.prototype.hasOwnProperty.call(this.yy,da)&&(ya.yy[da]=this.yy[da]);li.setInput(ve,ya.yy),ya.yy.lexer=li,ya.yy.parser=this,typeof li.yylloc>"u"&&(li.yylloc={});var Oo=li.yylloc;$t.push(Oo);var ds=li.options&&li.options.ranges;typeof ya.yy.parseError=="function"?this.parseError=ya.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Dr(){var Gs;return Gs=we.pop()||li.lex()||me,typeof Gs!="number"&&(Gs instanceof Array&&(we=Gs,Gs=we.pop()),Gs=Ge.symbols_[Gs]||Gs),Gs}for(var nr,di,Ee,Yn,He={},Ti,gn,ks,qa;;){if(di=Ke[Ke.length-1],this.defaultActions[di]?Ee=this.defaultActions[di]:((nr===null||typeof nr>"u")&&(nr=Dr()),Ee=re[di]&&re[di][nr]),typeof Ee>"u"||!Ee.length||!Ee[0]){var La="";qa=[];for(Ti in re[di])this.terminals_[Ti]&&Ti>Ne&&qa.push("'"+this.terminals_[Ti]+"'");li.showPosition?La="Parse error on line "+(Oe+1)+`: +`+li.showPosition()+` +Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ke.length-1&&(this.yylineno-=Ke.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+` +`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return Ke.yytext=Ke.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();ngt.parser=ngt;const Vqe=ngt;let rgt=[],dp={},MP={},fk={},IP={};const Uqe={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>Le().req,addRequirement:(i,a)=>(MP[i]===void 0&&(MP[i]={name:i,type:a,id:dp.id,text:dp.text,risk:dp.risk,verifyMethod:dp.verifyMethod}),dp={},MP[i]),getRequirements:()=>MP,setNewReqId:i=>{dp!==void 0&&(dp.id=i)},setNewReqText:i=>{dp!==void 0&&(dp.text=i)},setNewReqRisk:i=>{dp!==void 0&&(dp.risk=i)},setNewReqVerifyMethod:i=>{dp!==void 0&&(dp.verifyMethod=i)},setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addElement:i=>(IP[i]===void 0&&(IP[i]={name:i,type:fk.type,docRef:fk.docRef},Ut.info("Added new requirement: ",i)),fk={},IP[i]),getElements:()=>IP,setNewElementType:i=>{fk!==void 0&&(fk.type=i)},setNewElementDocRef:i=>{fk!==void 0&&(fk.docRef=i)},addRelationship:(i,a,f)=>{rgt.push({type:i,src:a,dst:f})},getRelationships:()=>rgt,clear:()=>{rgt=[],dp={},MP={},fk={},IP={},ap()}},Wqe=i=>` marker { fill: ${i.relationColor}; @@ -698,15 +696,15 @@ Expecting `+Ga.join(", ")+", got '"+(this.terminals_[dn]||dn)+"'":_r="Parse erro fill: ${i.relationLabelColor}; } -`,egt={CONTAINS:"contains",ARROW:"arrow"},uRt={ReqMarkers:egt,insertLineEndings:(i,a)=>{let f=i.append("defs").append("marker").attr("id",egt.CONTAINS+"_line_ending").attr("refX",0).attr("refY",a.line_height/2).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("g");f.append("circle").attr("cx",a.line_height/2).attr("cy",a.line_height/2).attr("r",a.line_height/2).attr("fill","none"),f.append("line").attr("x1",0).attr("x2",a.line_height).attr("y1",a.line_height/2).attr("y2",a.line_height/2).attr("stroke-width",1),f.append("line").attr("y1",0).attr("y2",a.line_height).attr("x1",a.line_height/2).attr("x2",a.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",egt.ARROW+"_line_ending").attr("refX",a.line_height).attr("refY",.5*a.line_height).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("path").attr("d",`M0,0 +`,igt={CONTAINS:"contains",ARROW:"arrow"},aRt={ReqMarkers:igt,insertLineEndings:(i,a)=>{let f=i.append("defs").append("marker").attr("id",igt.CONTAINS+"_line_ending").attr("refX",0).attr("refY",a.line_height/2).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("g");f.append("circle").attr("cx",a.line_height/2).attr("cy",a.line_height/2).attr("r",a.line_height/2).attr("fill","none"),f.append("line").attr("x1",0).attr("x2",a.line_height).attr("y1",a.line_height/2).attr("y2",a.line_height/2).attr("stroke-width",1),f.append("line").attr("y1",0).attr("y2",a.line_height).attr("x1",a.line_height/2).attr("x2",a.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",igt.ARROW+"_line_ending").attr("refX",a.line_height).attr("refY",.5*a.line_height).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("path").attr("d",`M0,0 L${a.line_height},${a.line_height/2} M${a.line_height},${a.line_height/2} - L0,${a.line_height}`).attr("stroke-width",1)}};let _h={},lRt=0;const hRt=(i,a)=>i.insert("rect","#"+a).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",_h.rect_min_width+"px").attr("height",_h.rect_min_height+"px"),fRt=(i,a,f)=>{let p=_h.rect_min_width/2,v=i.append("text").attr("class","req reqLabel reqTitle").attr("id",a).attr("x",p).attr("y",_h.rect_padding).attr("dominant-baseline","hanging"),m=0;f.forEach(A=>{m==0?v.append("tspan").attr("text-anchor","middle").attr("x",_h.rect_min_width/2).attr("dy",0).text(A):v.append("tspan").attr("text-anchor","middle").attr("x",_h.rect_min_width/2).attr("dy",_h.line_height*.75).text(A),m++});let b=1.5*_h.rect_padding,E=m*_h.line_height*.75,C=b+E;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",_h.rect_min_width).attr("y1",C).attr("y2",C),{titleNode:v,y:C}},dRt=(i,a,f,p)=>{let v=i.append("text").attr("class","req reqLabel").attr("id",a).attr("x",_h.rect_padding).attr("y",p).attr("dominant-baseline","hanging"),m=0;const b=30;let E=[];return f.forEach(C=>{let A=C.length;for(;A>b&&m<3;){let P=C.substring(0,b);C=C.substring(b,C.length),A=C.length,E[E.length]=P,m++}if(m==3){let P=E[E.length-1];E[E.length-1]=P.substring(0,P.length-4)+"..."}else E[E.length]=C;m=0}),E.forEach(C=>{v.append("tspan").attr("x",_h.rect_padding).attr("dy",_h.line_height).text(C)}),v},Uqe=(i,a,f,p)=>{const v=a.node().getTotalLength(),m=a.node().getPointAtLength(v*.5),b="rel"+lRt;lRt++;const C=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",m.x).attr("y",m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(p).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",m.x-C.width/2).attr("y",m.y-C.height/2).attr("width",C.width).attr("height",C.height).attr("fill","white").attr("fill-opacity","85%")},Wqe=function(i,a,f,p,v){const m=f.edge(cL(a.src),cL(a.dst)),b=YE().x(function(C){return C.x}).y(function(C){return C.y}),E=i.insert("path","#"+p).attr("class","er relationshipLine").attr("d",b(m.points)).attr("fill","none");a.type==v.db.Relationships.CONTAINS?E.attr("marker-start","url("+ui.getUrl(_h.arrowMarkerAbsolute)+"#"+a.type+"_line_ending)"):(E.attr("stroke-dasharray","10,7"),E.attr("marker-end","url("+ui.getUrl(_h.arrowMarkerAbsolute)+"#"+uRt.ReqMarkers.ARROW+"_line_ending)")),Uqe(i,E,_h,`<<${a.type}>>`)},Kqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];p=cL(p),Wt.info("Added new requirement: ",p);const m=f.append("g").attr("id",p),b="req-"+p,E=hRt(m,b);let C=fRt(m,p+"_title",[`<<${v.type}>>`,`${v.name}`]);dRt(m,p+"_body",[`Id: ${v.id}`,`Text: ${v.text}`,`Risk: ${v.risk}`,`Verification: ${v.verifyMethod}`],C.y);const A=E.node().getBBox();a.setNode(p,{width:A.width,height:A.height,shape:"rect",id:p})})},Yqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];const m=cL(p),b=f.append("g").attr("id",m),E="element-"+m,C=hRt(b,E);let A=fRt(b,E+"_title",["<>",`${p}`]);dRt(b,E+"_body",[`Type: ${v.type||"Not Specified"}`,`Doc Ref: ${v.docRef||"None"}`],A.y);const P=C.node().getBBox();a.setNode(m,{width:P.width,height:P.height,shape:"rect",id:m})})},Xqe=(i,a)=>(i.forEach(function(f){let p=cL(f.src),v=cL(f.dst);a.setEdge(p,v,{relationship:f})}),i),Qqe=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&(i.select("#"+f),i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )"))})},cL=i=>i.replace(/\s/g,"").replace(/\./g,"_"),Zqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Hqe,db:Vqe,renderer:{draw:(i,a,f,p)=>{_h=De().requirement;const v=_h.securityLevel;let m;v==="sandbox"&&(m=xr("#i"+a));const E=xr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);uRt.insertLineEndings(E,_h);const C=new l1({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:_h.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let A=p.db.getRequirements(),P=p.db.getElements(),F=p.db.getRelationships();Kqe(A,C,E),Yqe(P,C,E),Xqe(F,C),nL(C),Qqe(E,C),F.forEach(function(rt){Wqe(E,rt,C,a,p)});const j=_h.rect_padding,R=E.node().getBBox(),H=R.width+j*2,Y=R.height+j*2;og(E,Y,H,_h.useMaxWidth),E.attr("viewBox",`${R.x-j} ${R.y-j} ${H} ${Y}`)}},styles:Gqe}},Symbol.toStringTag,{value:"Module"}));var ngt=function(){var i=function(Ee,He,Ce,$e){for(Ce=Ce||{},$e=Ee.length;$e--;Ce[Ee[$e]]=He);return Ce},a=[1,2],f=[1,3],p=[1,5],v=[1,7],m=[2,5],b=[1,15],E=[1,17],C=[1,19],A=[1,20],P=[1,22],F=[1,23],j=[1,24],R=[1,30],H=[1,31],Y=[1,32],rt=[1,33],J=[1,34],it=[1,35],ft=[1,36],Tt=[1,37],kt=[1,38],mt=[1,39],ct=[1,40],yt=[1,41],st=[1,42],xt=[1,44],ht=[1,45],dt=[1,46],Ct=[1,48],tt=[1,49],Pt=[1,50],pt=[1,51],Ft=[1,52],X=[1,53],Rt=[1,56],Bt=[1,4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,54,55,56,58,59,60,65,66,67,68,76,86],vt=[4,5,22,56,58,59],Ot=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,56,58,59,60,65,66,67,68,76,86],Vt=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,55,56,58,59,60,65,66,67,68,76,86],qe=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,54,56,58,59,60,65,66,67,68,76,86],_n=[4,5,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,56,58,59,60,65,66,67,68,76,86],Te=[74,75,76],Wn=[1,133],Ae=[1,4,5,7,19,20,22,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,53,54,55,56,58,59,60,65,66,67,68,76,86],ne={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,create:19,box:20,restOfLine:21,end:22,signal:23,autonumber:24,NUM:25,off:26,activate:27,actor:28,deactivate:29,note_statement:30,links_statement:31,link_statement:32,properties_statement:33,details_statement:34,title:35,legacy_title:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,loop:42,rect:43,opt:44,alt:45,else_sections:46,par:47,par_sections:48,par_over:49,critical:50,option_sections:51,break:52,option:53,and:54,else:55,participant:56,AS:57,participant_actor:58,destroy:59,note:60,placement:61,text2:62,over:63,actor_pair:64,links:65,link:66,properties:67,details:68,spaceList:69,",":70,left_of:71,right_of:72,signaltype:73,"+":74,"-":75,ACTOR:76,SOLID_OPEN_ARROW:77,DOTTED_OPEN_ARROW:78,SOLID_ARROW:79,DOTTED_ARROW:80,SOLID_CROSS:81,DOTTED_CROSS:82,SOLID_POINT:83,DOTTED_POINT:84,TXT:85,open_directive:86,type_directive:87,arg_directive:88,close_directive:89,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"create",20:"box",21:"restOfLine",22:"end",24:"autonumber",25:"NUM",26:"off",27:"activate",29:"deactivate",35:"title",36:"legacy_title",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"loop",43:"rect",44:"opt",45:"alt",47:"par",49:"par_over",50:"critical",52:"break",53:"option",54:"and",55:"else",56:"participant",57:"AS",58:"participant_actor",59:"destroy",60:"note",63:"over",65:"links",66:"link",67:"properties",68:"details",70:",",71:"left_of",72:"right_of",74:"+",75:"-",76:"ACTOR",77:"SOLID_OPEN_ARROW",78:"DOTTED_OPEN_ARROW",79:"SOLID_ARROW",80:"DOTTED_ARROW",81:"SOLID_CROSS",82:"DOTTED_CROSS",83:"SOLID_POINT",84:"DOTTED_POINT",85:"TXT",86:"open_directive",87:"type_directive",88:"arg_directive",89:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,2],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[51,1],[51,4],[48,1],[48,4],[46,1],[46,4],[13,5],[13,3],[13,5],[13,3],[13,3],[30,4],[30,4],[31,3],[32,3],[33,3],[34,3],[69,2],[69,1],[64,3],[64,1],[61,1],[61,1],[23,5],[23,5],[23,4],[28,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[62,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(He,Ce,$e,ye,fn,Yt,Mi){var qt=Yt.length-1;switch(fn){case 4:return ye.apply(Yt[qt]),Yt[qt];case 5:case 10:this.$=[];break;case 6:case 11:Yt[qt-1].push(Yt[qt]),this.$=Yt[qt-1];break;case 7:case 8:case 12:case 13:this.$=Yt[qt];break;case 9:case 14:this.$=[];break;case 18:Yt[qt].type="createParticipant",this.$=Yt[qt];break;case 19:Yt[qt-1].unshift({type:"boxStart",boxData:ye.parseBoxData(Yt[qt-2])}),Yt[qt-1].push({type:"boxEnd",boxText:Yt[qt-2]}),this.$=Yt[qt-1];break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(Yt[qt-2]),sequenceIndexStep:Number(Yt[qt-1]),sequenceVisible:!0,signalType:ye.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceIndex:Number(Yt[qt-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ye.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ye.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ye.LINETYPE.AUTONUMBER};break;case 25:this.$={type:"activeStart",signalType:ye.LINETYPE.ACTIVE_START,actor:Yt[qt-1]};break;case 26:this.$={type:"activeEnd",signalType:ye.LINETYPE.ACTIVE_END,actor:Yt[qt-1]};break;case 32:ye.setDiagramTitle(Yt[qt].substring(6)),this.$=Yt[qt].substring(6);break;case 33:ye.setDiagramTitle(Yt[qt].substring(7)),this.$=Yt[qt].substring(7);break;case 34:this.$=Yt[qt].trim(),ye.setAccTitle(this.$);break;case 35:case 36:this.$=Yt[qt].trim(),ye.setAccDescription(this.$);break;case 37:Yt[qt-1].unshift({type:"loopStart",loopText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.LOOP_START}),Yt[qt-1].push({type:"loopEnd",loopText:Yt[qt-2],signalType:ye.LINETYPE.LOOP_END}),this.$=Yt[qt-1];break;case 38:Yt[qt-1].unshift({type:"rectStart",color:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.RECT_START}),Yt[qt-1].push({type:"rectEnd",color:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.RECT_END}),this.$=Yt[qt-1];break;case 39:Yt[qt-1].unshift({type:"optStart",optText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.OPT_START}),Yt[qt-1].push({type:"optEnd",optText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.OPT_END}),this.$=Yt[qt-1];break;case 40:Yt[qt-1].unshift({type:"altStart",altText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.ALT_START}),Yt[qt-1].push({type:"altEnd",signalType:ye.LINETYPE.ALT_END}),this.$=Yt[qt-1];break;case 41:Yt[qt-1].unshift({type:"parStart",parText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.PAR_START}),Yt[qt-1].push({type:"parEnd",signalType:ye.LINETYPE.PAR_END}),this.$=Yt[qt-1];break;case 42:Yt[qt-1].unshift({type:"parStart",parText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.PAR_OVER_START}),Yt[qt-1].push({type:"parEnd",signalType:ye.LINETYPE.PAR_END}),this.$=Yt[qt-1];break;case 43:Yt[qt-1].unshift({type:"criticalStart",criticalText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.CRITICAL_START}),Yt[qt-1].push({type:"criticalEnd",signalType:ye.LINETYPE.CRITICAL_END}),this.$=Yt[qt-1];break;case 44:Yt[qt-1].unshift({type:"breakStart",breakText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.BREAK_START}),Yt[qt-1].push({type:"breakEnd",optText:ye.parseMessage(Yt[qt-2]),signalType:ye.LINETYPE.BREAK_END}),this.$=Yt[qt-1];break;case 47:this.$=Yt[qt-3].concat([{type:"option",optionText:ye.parseMessage(Yt[qt-1]),signalType:ye.LINETYPE.CRITICAL_OPTION},Yt[qt]]);break;case 49:this.$=Yt[qt-3].concat([{type:"and",parText:ye.parseMessage(Yt[qt-1]),signalType:ye.LINETYPE.PAR_AND},Yt[qt]]);break;case 51:this.$=Yt[qt-3].concat([{type:"else",altText:ye.parseMessage(Yt[qt-1]),signalType:ye.LINETYPE.ALT_ELSE},Yt[qt]]);break;case 52:Yt[qt-3].draw="participant",Yt[qt-3].type="addParticipant",Yt[qt-3].description=ye.parseMessage(Yt[qt-1]),this.$=Yt[qt-3];break;case 53:Yt[qt-1].draw="participant",Yt[qt-1].type="addParticipant",this.$=Yt[qt-1];break;case 54:Yt[qt-3].draw="actor",Yt[qt-3].type="addParticipant",Yt[qt-3].description=ye.parseMessage(Yt[qt-1]),this.$=Yt[qt-3];break;case 55:Yt[qt-1].draw="actor",Yt[qt-1].type="addParticipant",this.$=Yt[qt-1];break;case 56:Yt[qt-1].type="destroyParticipant",this.$=Yt[qt-1];break;case 57:this.$=[Yt[qt-1],{type:"addNote",placement:Yt[qt-2],actor:Yt[qt-1].actor,text:Yt[qt]}];break;case 58:Yt[qt-2]=[].concat(Yt[qt-1],Yt[qt-1]).slice(0,2),Yt[qt-2][0]=Yt[qt-2][0].actor,Yt[qt-2][1]=Yt[qt-2][1].actor,this.$=[Yt[qt-1],{type:"addNote",placement:ye.PLACEMENT.OVER,actor:Yt[qt-2].slice(0,2),text:Yt[qt]}];break;case 59:this.$=[Yt[qt-1],{type:"addLinks",actor:Yt[qt-1].actor,text:Yt[qt]}];break;case 60:this.$=[Yt[qt-1],{type:"addALink",actor:Yt[qt-1].actor,text:Yt[qt]}];break;case 61:this.$=[Yt[qt-1],{type:"addProperties",actor:Yt[qt-1].actor,text:Yt[qt]}];break;case 62:this.$=[Yt[qt-1],{type:"addDetails",actor:Yt[qt-1].actor,text:Yt[qt]}];break;case 65:this.$=[Yt[qt-2],Yt[qt]];break;case 66:this.$=Yt[qt];break;case 67:this.$=ye.PLACEMENT.LEFTOF;break;case 68:this.$=ye.PLACEMENT.RIGHTOF;break;case 69:this.$=[Yt[qt-4],Yt[qt-1],{type:"addMessage",from:Yt[qt-4].actor,to:Yt[qt-1].actor,signalType:Yt[qt-3],msg:Yt[qt]},{type:"activeStart",signalType:ye.LINETYPE.ACTIVE_START,actor:Yt[qt-1]}];break;case 70:this.$=[Yt[qt-4],Yt[qt-1],{type:"addMessage",from:Yt[qt-4].actor,to:Yt[qt-1].actor,signalType:Yt[qt-3],msg:Yt[qt]},{type:"activeEnd",signalType:ye.LINETYPE.ACTIVE_END,actor:Yt[qt-4]}];break;case 71:this.$=[Yt[qt-3],Yt[qt-1],{type:"addMessage",from:Yt[qt-3].actor,to:Yt[qt-1].actor,signalType:Yt[qt-2],msg:Yt[qt]}];break;case 72:this.$={type:"addParticipant",actor:Yt[qt]};break;case 73:this.$=ye.LINETYPE.SOLID_OPEN;break;case 74:this.$=ye.LINETYPE.DOTTED_OPEN;break;case 75:this.$=ye.LINETYPE.SOLID;break;case 76:this.$=ye.LINETYPE.DOTTED;break;case 77:this.$=ye.LINETYPE.SOLID_CROSS;break;case 78:this.$=ye.LINETYPE.DOTTED_CROSS;break;case 79:this.$=ye.LINETYPE.SOLID_POINT;break;case 80:this.$=ye.LINETYPE.DOTTED_POINT;break;case 81:this.$=ye.parseMessage(Yt[qt].trim().substring(1));break;case 82:ye.parseDirective("%%{","open_directive");break;case 83:ye.parseDirective(Yt[qt],"type_directive");break;case 84:Yt[qt]=Yt[qt].trim().replace(/'/g,'"'),ye.parseDirective(Yt[qt],"arg_directive");break;case 85:ye.parseDirective("}%%","close_directive","sequence");break}},table:[{3:1,4:a,5:f,6:4,7:p,14:6,86:v},{1:[3]},{3:8,4:a,5:f,6:4,7:p,14:6,86:v},{3:9,4:a,5:f,6:4,7:p,14:6,86:v},{3:10,4:a,5:f,6:4,7:p,14:6,86:v},i([1,4,5,19,20,24,27,29,35,36,37,39,41,42,43,44,45,47,49,50,52,56,58,59,60,65,66,67,68,76,86],m,{8:11}),{15:12,87:[1,13]},{87:[2,82]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{16:54,17:[1,55],89:Rt},i([17,89],[2,83]),i(Bt,[2,6]),{6:43,10:57,13:18,14:6,19:C,20:A,23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},i(Bt,[2,8]),i(Bt,[2,9]),i(Bt,[2,17]),{13:58,56:xt,58:ht,59:dt},{21:[1,59]},{5:[1,60]},{5:[1,63],25:[1,61],26:[1,62]},{28:64,76:X},{28:65,76:X},{5:[1,66]},{5:[1,67]},{5:[1,68]},{5:[1,69]},{5:[1,70]},i(Bt,[2,32]),i(Bt,[2,33]),{38:[1,71]},{40:[1,72]},i(Bt,[2,36]),{21:[1,73]},{21:[1,74]},{21:[1,75]},{21:[1,76]},{21:[1,77]},{21:[1,78]},{21:[1,79]},{21:[1,80]},i(Bt,[2,45]),{28:81,76:X},{28:82,76:X},{28:83,76:X},{73:84,77:[1,85],78:[1,86],79:[1,87],80:[1,88],81:[1,89],82:[1,90],83:[1,91],84:[1,92]},{61:93,63:[1,94],71:[1,95],72:[1,96]},{28:97,76:X},{28:98,76:X},{28:99,76:X},{28:100,76:X},i([5,57,70,77,78,79,80,81,82,83,84,85],[2,72]),{5:[1,101]},{18:102,88:[1,103]},{5:[2,85]},i(Bt,[2,7]),i(Bt,[2,18]),i(vt,[2,10],{11:104}),i(Bt,[2,20]),{5:[1,106],25:[1,105]},{5:[1,107]},i(Bt,[2,24]),{5:[1,108]},{5:[1,109]},i(Bt,[2,27]),i(Bt,[2,28]),i(Bt,[2,29]),i(Bt,[2,30]),i(Bt,[2,31]),i(Bt,[2,34]),i(Bt,[2,35]),i(Ot,m,{8:110}),i(Ot,m,{8:111}),i(Ot,m,{8:112}),i(Vt,m,{46:113,8:114}),i(qe,m,{48:115,8:116}),i(qe,m,{8:116,48:117}),i(_n,m,{51:118,8:119}),i(Ot,m,{8:120}),{5:[1,122],57:[1,121]},{5:[1,124],57:[1,123]},{5:[1,125]},{28:128,74:[1,126],75:[1,127],76:X},i(Te,[2,73]),i(Te,[2,74]),i(Te,[2,75]),i(Te,[2,76]),i(Te,[2,77]),i(Te,[2,78]),i(Te,[2,79]),i(Te,[2,80]),{28:129,76:X},{28:131,64:130,76:X},{76:[2,67]},{76:[2,68]},{62:132,85:Wn},{62:134,85:Wn},{62:135,85:Wn},{62:136,85:Wn},i(Ae,[2,15]),{16:137,89:Rt},{89:[2,84]},{4:[1,140],5:[1,142],12:139,13:141,22:[1,138],56:xt,58:ht,59:dt},{5:[1,143]},i(Bt,[2,22]),i(Bt,[2,23]),i(Bt,[2,25]),i(Bt,[2,26]),{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[1,144],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[1,145],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[1,146],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{22:[1,147]},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[2,50],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,55:[1,148],56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{22:[1,149]},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[2,48],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,54:[1,150],56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{22:[1,151]},{22:[1,152]},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[2,46],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,53:[1,153],56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{4:b,5:E,6:43,9:14,10:16,13:18,14:6,19:C,20:A,22:[1,154],23:21,24:P,27:F,28:47,29:j,30:25,31:26,32:27,33:28,34:29,35:R,36:H,37:Y,39:rt,41:J,42:it,43:ft,44:Tt,45:kt,47:mt,49:ct,50:yt,52:st,56:xt,58:ht,59:dt,60:Ct,65:tt,66:Pt,67:pt,68:Ft,76:X,86:v},{21:[1,155]},i(Bt,[2,53]),{21:[1,156]},i(Bt,[2,55]),i(Bt,[2,56]),{28:157,76:X},{28:158,76:X},{62:159,85:Wn},{62:160,85:Wn},{62:161,85:Wn},{70:[1,162],85:[2,66]},{5:[2,59]},{5:[2,81]},{5:[2,60]},{5:[2,61]},{5:[2,62]},{5:[1,163]},i(Bt,[2,19]),i(vt,[2,11]),{13:164,56:xt,58:ht,59:dt},i(vt,[2,13]),i(vt,[2,14]),i(Bt,[2,21]),i(Bt,[2,37]),i(Bt,[2,38]),i(Bt,[2,39]),i(Bt,[2,40]),{21:[1,165]},i(Bt,[2,41]),{21:[1,166]},i(Bt,[2,42]),i(Bt,[2,43]),{21:[1,167]},i(Bt,[2,44]),{5:[1,168]},{5:[1,169]},{62:170,85:Wn},{62:171,85:Wn},{5:[2,71]},{5:[2,57]},{5:[2,58]},{28:172,76:X},i(Ae,[2,16]),i(vt,[2,12]),i(Vt,m,{8:114,46:173}),i(qe,m,{8:116,48:174}),i(_n,m,{8:119,51:175}),i(Bt,[2,52]),i(Bt,[2,54]),{5:[2,69]},{5:[2,70]},{85:[2,65]},{22:[2,51]},{22:[2,49]},{22:[2,47]}],defaultActions:{7:[2,82],8:[2,1],9:[2,2],10:[2,3],56:[2,85],95:[2,67],96:[2,68],103:[2,84],132:[2,59],133:[2,81],134:[2,60],135:[2,61],136:[2,62],159:[2,71],160:[2,57],161:[2,58],170:[2,69],171:[2,70],172:[2,65],173:[2,51],174:[2,49],175:[2,47]},parseError:function(He,Ce){if(Ce.recoverable)this.trace(He);else{var $e=new Error(He);throw $e.hash=Ce,$e}},parse:function(He){var Ce=this,$e=[0],ye=[],fn=[null],Yt=[],Mi=this.table,qt="",zi=0,Se=0,ki=2,Ri=1,pi=Yt.slice.call(arguments,1),bi=Object.create(this.lexer),dn={yy:{}};for(var Nn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Nn)&&(dn.yy[Nn]=this.yy[Nn]);bi.setInput(He,dn.yy),dn.yy.lexer=bi,dn.yy.parser=this,typeof bi.yylloc>"u"&&(bi.yylloc={});var Wr=bi.yylloc;Yt.push(Wr);var Li=bi.options&&bi.options.ranges;typeof dn.yy.parseError=="function"?this.parseError=dn.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function is(){var Xc;return Xc=ye.pop()||bi.lex()||Ri,typeof Xc!="number"&&(Xc instanceof Array&&(ye=Xc,Xc=ye.pop()),Xc=Ce.symbols_[Xc]||Xc),Xc}for(var Ts,Aa,Xi,Ga,_r={},qr,Oi,gr,Js;;){if(Aa=$e[$e.length-1],this.defaultActions[Aa]?Xi=this.defaultActions[Aa]:((Ts===null||typeof Ts>"u")&&(Ts=is()),Xi=Mi[Aa]&&Mi[Aa][Ts]),typeof Xi>"u"||!Xi.length||!Xi[0]){var Vn="";Js=[];for(qr in Mi[Aa])this.terminals_[qr]&&qr>ki&&Js.push("'"+this.terminals_[qr]+"'");bi.showPosition?Vn="Parse error on line "+(zi+1)+`: -`+bi.showPosition()+` -Expecting `+Js.join(", ")+", got '"+(this.terminals_[Ts]||Ts)+"'":Vn="Parse error on line "+(zi+1)+": Unexpected "+(Ts==Ri?"end of input":"'"+(this.terminals_[Ts]||Ts)+"'"),this.parseError(Vn,{text:bi.match,token:this.terminals_[Ts]||Ts,line:bi.yylineno,loc:Wr,expected:Js})}if(Xi[0]instanceof Array&&Xi.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Aa+", token: "+Ts);switch(Xi[0]){case 1:$e.push(Ts),fn.push(bi.yytext),Yt.push(bi.yylloc),$e.push(Xi[1]),Ts=null,Se=bi.yyleng,qt=bi.yytext,zi=bi.yylineno,Wr=bi.yylloc;break;case 2:if(Oi=this.productions_[Xi[1]][1],_r.$=fn[fn.length-Oi],_r._$={first_line:Yt[Yt.length-(Oi||1)].first_line,last_line:Yt[Yt.length-1].last_line,first_column:Yt[Yt.length-(Oi||1)].first_column,last_column:Yt[Yt.length-1].last_column},Li&&(_r._$.range=[Yt[Yt.length-(Oi||1)].range[0],Yt[Yt.length-1].range[1]]),Ga=this.performAction.apply(_r,[qt,Se,zi,dn.yy,Xi[1],fn,Yt].concat(pi)),typeof Ga<"u")return Ga;Oi&&($e=$e.slice(0,-1*Oi*2),fn=fn.slice(0,-1*Oi),Yt=Yt.slice(0,-1*Oi)),$e.push(this.productions_[Xi[1]][0]),fn.push(_r.$),Yt.push(_r._$),gr=Mi[$e[$e.length-2]][$e[$e.length-1]],$e.push(gr);break;case 3:return!0}}return!0}},ke=function(){var Ee={EOF:1,parseError:function(Ce,$e){if(this.yy.parser)this.yy.parser.parseError(Ce,$e);else throw new Error(Ce)},setInput:function(He,Ce){return this.yy=Ce||this.yy||{},this._input=He,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var He=this._input[0];this.yytext+=He,this.yyleng++,this.offset++,this.match+=He,this.matched+=He;var Ce=He.match(/(?:\r\n?|\n).*/g);return Ce?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),He},unput:function(He){var Ce=He.length,$e=He.split(/(?:\r\n?|\n)/g);this._input=He+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ce),this.offset-=Ce;var ye=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$e.length-1&&(this.yylineno-=$e.length-1);var fn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$e?($e.length===ye.length?this.yylloc.first_column:0)+ye[ye.length-$e.length].length-$e[0].length:this.yylloc.first_column-Ce},this.options.ranges&&(this.yylloc.range=[fn[0],fn[0]+this.yyleng-Ce]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(He){this.unput(this.match.slice(He))},pastInput:function(){var He=this.matched.substr(0,this.matched.length-this.match.length);return(He.length>20?"...":"")+He.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var He=this.match;return He.length<20&&(He+=this._input.substr(0,20-He.length)),(He.substr(0,20)+(He.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var He=this.pastInput(),Ce=new Array(He.length+1).join("-");return He+this.upcomingInput()+` -`+Ce+"^"},test_match:function(He,Ce){var $e,ye,fn;if(this.options.backtrack_lexer&&(fn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(fn.yylloc.range=this.yylloc.range.slice(0))),ye=He[0].match(/(?:\r\n?|\n).*/g),ye&&(this.yylineno+=ye.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ye?ye[ye.length-1].length-ye[ye.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+He[0].length},this.yytext+=He[0],this.match+=He[0],this.matches=He,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(He[0].length),this.matched+=He[0],$e=this.performAction.call(this,this.yy,this,Ce,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$e)return $e;if(this._backtrack){for(var Yt in fn)this[Yt]=fn[Yt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var He,Ce,$e,ye;this._more||(this.yytext="",this.match="");for(var fn=this._currentRules(),Yt=0;YtCe[0].length)){if(Ce=$e,ye=Yt,this.options.backtrack_lexer){if(He=this.test_match($e,fn[Yt]),He!==!1)return He;if(this._backtrack){Ce=!1;continue}else return!1}else if(!this.options.flex)break}return Ce?(He=this.test_match(Ce,fn[ye]),He!==!1?He:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ce=this.next();return Ce||this.lex()},begin:function(Ce){this.conditionStack.push(Ce)},popState:function(){var Ce=this.conditionStack.length-1;return Ce>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ce){return Ce=this.conditionStack.length-1-Math.abs(Ce||0),Ce>=0?this.conditionStack[Ce]:"INITIAL"},pushState:function(Ce){this.begin(Ce)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ce,$e,ye,fn){switch(ye){case 0:return this.begin("open_directive"),86;case 1:return this.begin("type_directive"),87;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),89;case 4:return 88;case 5:return 5;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:return 25;case 12:return this.begin("LINE"),20;case 13:return this.begin("ID"),56;case 14:return this.begin("ID"),58;case 15:return 19;case 16:return this.begin("ID"),59;case 17:return $e.yytext=$e.yytext.trim(),this.begin("ALIAS"),76;case 18:return this.popState(),this.popState(),this.begin("LINE"),57;case 19:return this.popState(),this.popState(),5;case 20:return this.begin("LINE"),42;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),44;case 23:return this.begin("LINE"),45;case 24:return this.begin("LINE"),55;case 25:return this.begin("LINE"),47;case 26:return this.begin("LINE"),49;case 27:return this.begin("LINE"),54;case 28:return this.begin("LINE"),50;case 29:return this.begin("LINE"),53;case 30:return this.begin("LINE"),52;case 31:return this.popState(),21;case 32:return 22;case 33:return 71;case 34:return 72;case 35:return 65;case 36:return 66;case 37:return 67;case 38:return 68;case 39:return 63;case 40:return 60;case 41:return this.begin("ID"),27;case 42:return this.begin("ID"),29;case 43:return 35;case 44:return 36;case 45:return this.begin("acc_title"),37;case 46:return this.popState(),"acc_title_value";case 47:return this.begin("acc_descr"),39;case 48:return this.popState(),"acc_descr_value";case 49:this.begin("acc_descr_multiline");break;case 50:this.popState();break;case 51:return"acc_descr_multiline_value";case 52:return 7;case 53:return 24;case 54:return 26;case 55:return 70;case 56:return 5;case 57:return $e.yytext=$e.yytext.trim(),76;case 58:return 79;case 59:return 80;case 60:return 77;case 61:return 78;case 62:return 81;case 63:return 82;case 64:return 83;case 65:return 84;case 66:return 85;case 67:return 74;case 68:return 75;case 69:return 5;case 70:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[50,51],inclusive:!1},acc_descr:{rules:[48],inclusive:!1},acc_title:{rules:[46],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,17],inclusive:!1},ALIAS:{rules:[7,8,18,19],inclusive:!1},LINE:{rules:[7,8,31],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,47,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],inclusive:!0}}};return Ee}();ne.lexer=ke;function Ve(){this.yy={}}return Ve.prototype=ne,ne.Parser=Ve,new Ve}();ngt.parser=ngt;const Jqe=ngt;let OP,I5={},rgt={},igt={},uL=[],jb=[],MK=!1,sgt,O5,NP,lL;const tHe=function(i,a,f){J1.parseDirective(this,i,a,f)},eHe=function(i){uL.push({name:i.text,wrap:i.wrap===void 0&&m9()||!!i.wrap,fill:i.color,actorKeys:[]}),O5=uL.slice(-1)[0]},agt=function(i,a,f,p){let v=O5;const m=I5[i];if(m){if(O5&&m.box&&O5!==m.box)throw new Error("A same participant should only be defined in one Box: "+m.name+" can't be in '"+m.box.name+"' and in '"+O5.name+"' at the same time.");if(v=m.box?m.box:O5,m.box=v,m&&a===m.name&&f==null)return}(f==null||f.text==null)&&(f={text:a,wrap:null,type:p}),(p==null||f.text==null)&&(f={text:a,wrap:null,type:p}),I5[i]={box:v,name:a,description:f.text,wrap:f.wrap===void 0&&m9()||!!f.wrap,prevActor:OP,links:{},properties:{},actorCnt:null,rectData:null,type:p||"participant"},OP&&I5[OP]&&(I5[OP].nextActor=i),O5&&O5.actorKeys.push(i),OP=i},nHe=i=>{let a,f=0;for(a=0;a>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},m}return jb.push({from:i,to:a,message:f.text,wrap:f.wrap===void 0&&m9()||!!f.wrap,type:p}),!0},iHe=function(){return uL.length>0},sHe=function(){return uL.some(i=>i.name)},aHe=function(){return jb},oHe=function(){return uL},cHe=function(){return I5},uHe=function(){return rgt},lHe=function(){return igt},PP=function(i){return I5[i]},hHe=function(){return Object.keys(I5)},fHe=function(){MK=!0},dHe=function(){MK=!1},gHe=()=>MK,pHe=function(i){sgt=i},m9=()=>sgt!==void 0?sgt:De().sequence.wrap,bHe=function(){I5={},rgt={},igt={},uL=[],jb=[],MK=!1,cg()},vHe=function(i){const a=i.trim(),f={text:a.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:a.match(/^:?wrap:/)!==null?!0:a.match(/^:?nowrap:/)!==null?!1:void 0};return Wt.debug("parseMessage:",f),f},wHe=function(i){const a=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let f=a!=null&&a[1]?a[1].trim():"transparent",p=a!=null&&a[2]?a[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",f)||(f="transparent",p=i.trim());else{const m=new Option().style;m.color=f,m.color!==f&&(f="transparent",p=i.trim())}return{color:f,text:p!==void 0?v0(p.replace(/^:?(?:no)?wrap:/,""),De()):void 0,wrap:p!==void 0?p.match(/^:?wrap:/)!==null?!0:p.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},FP={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},mHe={FILLED:0,OPEN:1},yHe={LEFTOF:0,RIGHTOF:1,OVER:2},gRt=function(i,a,f){f.text,f.wrap===void 0&&m9()||f.wrap;const p=[].concat(i,i);jb.push({from:p[0],to:p[1],message:f.text,wrap:f.wrap===void 0&&m9()||!!f.wrap,type:FP.NOTE,placement:a})},pRt=function(i,a){const f=PP(i);try{let p=v0(a.text,De());p=p.replace(/&/g,"&"),p=p.replace(/=/g,"=");const v=JSON.parse(p);ogt(f,v)}catch(p){Wt.error("error while parsing actor link text",p)}},xHe=function(i,a){const f=PP(i);try{const b={};let E=v0(a.text,De());var p=E.indexOf("@");E=E.replace(/&/g,"&"),E=E.replace(/=/g,"=");var v=E.slice(0,p-1).trim(),m=E.slice(p+1).trim();b[v]=m,ogt(f,b)}catch(b){Wt.error("error while parsing actor link text",b)}};function ogt(i,a){if(i.links==null)i.links=a;else for(let f in a)i.links[f]=a[f]}const bRt=function(i,a){const f=PP(i);try{let p=v0(a.text,De());const v=JSON.parse(p);vRt(f,v)}catch(p){Wt.error("error while parsing actor properties text",p)}};function vRt(i,a){if(i.properties==null)i.properties=a;else for(let f in a)i.properties[f]=a[f]}function kHe(){O5=void 0}const wRt=function(i,a){const f=PP(i),p=document.getElementById(a.text);try{const v=p.innerHTML,m=JSON.parse(v);m.properties&&vRt(f,m.properties),m.links&&ogt(f,m.links)}catch(v){Wt.error("error while parsing actor details text",v)}},EHe=function(i,a){if(i!==void 0&&i.properties!==void 0)return i.properties[a]},mRt=function(i){if(Array.isArray(i))i.forEach(function(a){mRt(a)});else switch(i.type){case"sequenceIndex":jb.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":agt(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(I5[i.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");NP=i.actor,agt(i.actor,i.actor,i.description,i.draw),rgt[i.actor]=jb.length;break;case"destroyParticipant":lL=i.actor,igt[i.actor]=jb.length;break;case"activeStart":nf(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":nf(i.actor,void 0,void 0,i.signalType);break;case"addNote":gRt(i.actor,i.placement,i.text);break;case"addLinks":pRt(i.actor,i.text);break;case"addALink":xHe(i.actor,i.text);break;case"addProperties":bRt(i.actor,i.text);break;case"addDetails":wRt(i.actor,i.text);break;case"addMessage":if(NP){if(i.to!==NP)throw new Error("The created participant "+NP+" does not have an associated creating message after its declaration. Please check the sequence diagram.");NP=void 0}else if(lL){if(i.to!==lL&&i.from!==lL)throw new Error("The destroyed participant "+lL+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");lL=void 0}nf(i.from,i.to,i.msg,i.signalType);break;case"boxStart":eHe(i.boxData);break;case"boxEnd":kHe();break;case"loopStart":nf(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":nf(void 0,void 0,void 0,i.signalType);break;case"rectStart":nf(void 0,void 0,i.color,i.signalType);break;case"rectEnd":nf(void 0,void 0,void 0,i.signalType);break;case"optStart":nf(void 0,void 0,i.optText,i.signalType);break;case"optEnd":nf(void 0,void 0,void 0,i.signalType);break;case"altStart":nf(void 0,void 0,i.altText,i.signalType);break;case"else":nf(void 0,void 0,i.altText,i.signalType);break;case"altEnd":nf(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":m0(i.text);break;case"parStart":nf(void 0,void 0,i.parText,i.signalType);break;case"and":nf(void 0,void 0,i.parText,i.signalType);break;case"parEnd":nf(void 0,void 0,void 0,i.signalType);break;case"criticalStart":nf(void 0,void 0,i.criticalText,i.signalType);break;case"option":nf(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":nf(void 0,void 0,void 0,i.signalType);break;case"breakStart":nf(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":nf(void 0,void 0,void 0,i.signalType);break}},THe={addActor:agt,addMessage:rHe,addSignal:nf,addLinks:pRt,addDetails:wRt,addProperties:bRt,autoWrap:m9,setWrap:pHe,enableSequenceNumbers:fHe,disableSequenceNumbers:dHe,showSequenceNumbers:gHe,getMessages:aHe,getActors:cHe,getCreatedActors:uHe,getDestroyedActors:lHe,getActor:PP,getActorKeys:hHe,getActorProperty:EHe,getAccTitle:ug,getBoxes:oHe,getDiagramTitle:hp,setDiagramTitle:Nb,parseDirective:tHe,getConfig:()=>De().sequence,clear:bHe,parseMessage:vHe,parseBoxData:wHe,LINETYPE:FP,ARROWTYPE:mHe,PLACEMENT:yHe,addNote:gRt,setAccTitle:m0,apply:mRt,setAccDescription:lg,getAccDescription:hg,hasAtLeastOneBox:iHe,hasAtLeastOneBoxWithTitle:sHe},_He=i=>`.actor { + L0,${a.line_height}`).attr("stroke-width",1)}};let xh={},oRt=0;const cRt=(i,a)=>i.insert("rect","#"+a).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",xh.rect_min_width+"px").attr("height",xh.rect_min_height+"px"),uRt=(i,a,f)=>{let p=xh.rect_min_width/2,v=i.append("text").attr("class","req reqLabel reqTitle").attr("id",a).attr("x",p).attr("y",xh.rect_padding).attr("dominant-baseline","hanging"),m=0;f.forEach(L=>{m==0?v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",0).text(L):v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",xh.line_height*.75).text(L),m++});let b=1.5*xh.rect_padding,E=m*xh.line_height*.75,_=b+E;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",xh.rect_min_width).attr("y1",_).attr("y2",_),{titleNode:v,y:_}},lRt=(i,a,f,p)=>{let v=i.append("text").attr("class","req reqLabel").attr("id",a).attr("x",xh.rect_padding).attr("y",p).attr("dominant-baseline","hanging"),m=0;const b=30;let E=[];return f.forEach(_=>{let L=_.length;for(;L>b&&m<3;){let N=_.substring(0,b);_=_.substring(b,_.length),L=_.length,E[E.length]=N,m++}if(m==3){let N=E[E.length-1];E[E.length-1]=N.substring(0,N.length-4)+"..."}else E[E.length]=_;m=0}),E.forEach(_=>{v.append("tspan").attr("x",xh.rect_padding).attr("dy",xh.line_height).text(_)}),v},Kqe=(i,a,f,p)=>{const v=a.node().getTotalLength(),m=a.node().getPointAtLength(v*.5),b="rel"+oRt;oRt++;const _=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",m.x).attr("y",m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(p).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",m.x-_.width/2).attr("y",m.y-_.height/2).attr("width",_.width).attr("height",_.height).attr("fill","white").attr("fill-opacity","85%")},Yqe=function(i,a,f,p,v){const m=f.edge(oL(a.src),oL(a.dst)),b=Z7().x(function(_){return _.x}).y(function(_){return _.y}),E=i.insert("path","#"+p).attr("class","er relationshipLine").attr("d",b(m.points)).attr("fill","none");a.type==v.db.Relationships.CONTAINS?E.attr("marker-start","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+a.type+"_line_ending)"):(E.attr("stroke-dasharray","10,7"),E.attr("marker-end","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+aRt.ReqMarkers.ARROW+"_line_ending)")),Kqe(i,E,xh,`<<${a.type}>>`)},Xqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];p=oL(p),Ut.info("Added new requirement: ",p);const m=f.append("g").attr("id",p),b="req-"+p,E=cRt(m,b);let _=uRt(m,p+"_title",[`<<${v.type}>>`,`${v.name}`]);lRt(m,p+"_body",[`Id: ${v.id}`,`Text: ${v.text}`,`Risk: ${v.risk}`,`Verification: ${v.verifyMethod}`],_.y);const L=E.node().getBBox();a.setNode(p,{width:L.width,height:L.height,shape:"rect",id:p})})},Qqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];const m=oL(p),b=f.append("g").attr("id",m),E="element-"+m,_=cRt(b,E);let L=uRt(b,E+"_title",["<>",`${p}`]);lRt(b,E+"_body",[`Type: ${v.type||"Not Specified"}`,`Doc Ref: ${v.docRef||"None"}`],L.y);const N=_.node().getBBox();a.setNode(m,{width:N.width,height:N.height,shape:"rect",id:m})})},Zqe=(i,a)=>(i.forEach(function(f){let p=oL(f.src),v=oL(f.dst);a.setEdge(p,v,{relationship:f})}),i),Jqe=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&(i.select("#"+f),i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )"))})},oL=i=>i.replace(/\s/g,"").replace(/\./g,"_"),tHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Vqe,db:Uqe,renderer:{draw:(i,a,f,p)=>{xh=Le().requirement;const v=xh.securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const E=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);aRt.insertLineEndings(E,xh);const _=new a1({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:xh.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let L=p.db.getRequirements(),N=p.db.getElements(),B=p.db.getRelationships();Xqe(L,_,E),Qqe(N,_,E),Zqe(B,_),eL(_),Jqe(E,_),B.forEach(function(it){Yqe(E,it,_,a,p)});const j=xh.rect_padding,R=E.node().getBBox(),z=R.width+j*2,K=R.height+j*2;og(E,K,z,xh.useMaxWidth),E.attr("viewBox",`${R.x-j} ${R.y-j} ${z} ${K}`)}},styles:Wqe}},Symbol.toStringTag,{value:"Module"}));var sgt=function(){var i=function(we,_e,$t,re){for($t=$t||{},re=we.length;re--;$t[we[re]]=_e);return $t},a=[1,2],f=[1,3],p=[1,4],v=[2,4],m=[1,9],b=[1,11],E=[1,13],_=[1,14],L=[1,16],N=[1,17],B=[1,18],j=[1,24],R=[1,25],z=[1,26],K=[1,27],it=[1,28],st=[1,29],ut=[1,30],bt=[1,31],mt=[1,32],yt=[1,33],dt=[1,34],ht=[1,35],wt=[1,36],X=[1,37],pt=[1,38],U=[1,39],xt=[1,41],nt=[1,42],Ot=[1,43],Nt=[1,44],qt=[1,45],Ct=[1,46],Z=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],Tt=[4,5,16,50,52,53],Ht=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],It=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],ke=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],pn=[68,69,70],Me=[1,120],ve={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(_e,$t,re,ie,Oe,oe,Ne){var me=oe.length-1;switch(Oe){case 3:return ie.apply(oe[me]),oe[me];case 4:case 9:this.$=[];break;case 5:case 10:oe[me-1].push(oe[me]),this.$=oe[me-1];break;case 6:case 7:case 11:case 12:this.$=oe[me];break;case 8:case 13:this.$=[];break;case 15:oe[me].type="createParticipant",this.$=oe[me];break;case 16:oe[me-1].unshift({type:"boxStart",boxData:ie.parseBoxData(oe[me-2])}),oe[me-1].push({type:"boxEnd",boxText:oe[me-2]}),this.$=oe[me-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(oe[me-2]),sequenceIndexStep:Number(oe[me-1]),sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(oe[me-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ie.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ie.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ie.LINETYPE.ACTIVE_START,actor:oe[me-1]};break;case 23:this.$={type:"activeEnd",signalType:ie.LINETYPE.ACTIVE_END,actor:oe[me-1]};break;case 29:ie.setDiagramTitle(oe[me].substring(6)),this.$=oe[me].substring(6);break;case 30:ie.setDiagramTitle(oe[me].substring(7)),this.$=oe[me].substring(7);break;case 31:this.$=oe[me].trim(),ie.setAccTitle(this.$);break;case 32:case 33:this.$=oe[me].trim(),ie.setAccDescription(this.$);break;case 34:oe[me-1].unshift({type:"loopStart",loopText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.LOOP_START}),oe[me-1].push({type:"loopEnd",loopText:oe[me-2],signalType:ie.LINETYPE.LOOP_END}),this.$=oe[me-1];break;case 35:oe[me-1].unshift({type:"rectStart",color:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.RECT_START}),oe[me-1].push({type:"rectEnd",color:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.RECT_END}),this.$=oe[me-1];break;case 36:oe[me-1].unshift({type:"optStart",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.OPT_START}),oe[me-1].push({type:"optEnd",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.OPT_END}),this.$=oe[me-1];break;case 37:oe[me-1].unshift({type:"altStart",altText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.ALT_START}),oe[me-1].push({type:"altEnd",signalType:ie.LINETYPE.ALT_END}),this.$=oe[me-1];break;case 38:oe[me-1].unshift({type:"parStart",parText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.PAR_START}),oe[me-1].push({type:"parEnd",signalType:ie.LINETYPE.PAR_END}),this.$=oe[me-1];break;case 39:oe[me-1].unshift({type:"parStart",parText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.PAR_OVER_START}),oe[me-1].push({type:"parEnd",signalType:ie.LINETYPE.PAR_END}),this.$=oe[me-1];break;case 40:oe[me-1].unshift({type:"criticalStart",criticalText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.CRITICAL_START}),oe[me-1].push({type:"criticalEnd",signalType:ie.LINETYPE.CRITICAL_END}),this.$=oe[me-1];break;case 41:oe[me-1].unshift({type:"breakStart",breakText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.BREAK_START}),oe[me-1].push({type:"breakEnd",optText:ie.parseMessage(oe[me-2]),signalType:ie.LINETYPE.BREAK_END}),this.$=oe[me-1];break;case 43:this.$=oe[me-3].concat([{type:"option",optionText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.CRITICAL_OPTION},oe[me]]);break;case 45:this.$=oe[me-3].concat([{type:"and",parText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.PAR_AND},oe[me]]);break;case 47:this.$=oe[me-3].concat([{type:"else",altText:ie.parseMessage(oe[me-1]),signalType:ie.LINETYPE.ALT_ELSE},oe[me]]);break;case 48:oe[me-3].draw="participant",oe[me-3].type="addParticipant",oe[me-3].description=ie.parseMessage(oe[me-1]),this.$=oe[me-3];break;case 49:oe[me-1].draw="participant",oe[me-1].type="addParticipant",this.$=oe[me-1];break;case 50:oe[me-3].draw="actor",oe[me-3].type="addParticipant",oe[me-3].description=ie.parseMessage(oe[me-1]),this.$=oe[me-3];break;case 51:oe[me-1].draw="actor",oe[me-1].type="addParticipant",this.$=oe[me-1];break;case 52:oe[me-1].type="destroyParticipant",this.$=oe[me-1];break;case 53:this.$=[oe[me-1],{type:"addNote",placement:oe[me-2],actor:oe[me-1].actor,text:oe[me]}];break;case 54:oe[me-2]=[].concat(oe[me-1],oe[me-1]).slice(0,2),oe[me-2][0]=oe[me-2][0].actor,oe[me-2][1]=oe[me-2][1].actor,this.$=[oe[me-1],{type:"addNote",placement:ie.PLACEMENT.OVER,actor:oe[me-2].slice(0,2),text:oe[me]}];break;case 55:this.$=[oe[me-1],{type:"addLinks",actor:oe[me-1].actor,text:oe[me]}];break;case 56:this.$=[oe[me-1],{type:"addALink",actor:oe[me-1].actor,text:oe[me]}];break;case 57:this.$=[oe[me-1],{type:"addProperties",actor:oe[me-1].actor,text:oe[me]}];break;case 58:this.$=[oe[me-1],{type:"addDetails",actor:oe[me-1].actor,text:oe[me]}];break;case 61:this.$=[oe[me-2],oe[me]];break;case 62:this.$=oe[me];break;case 63:this.$=ie.PLACEMENT.LEFTOF;break;case 64:this.$=ie.PLACEMENT.RIGHTOF;break;case 65:this.$=[oe[me-4],oe[me-1],{type:"addMessage",from:oe[me-4].actor,to:oe[me-1].actor,signalType:oe[me-3],msg:oe[me],activate:!0},{type:"activeStart",signalType:ie.LINETYPE.ACTIVE_START,actor:oe[me-1]}];break;case 66:this.$=[oe[me-4],oe[me-1],{type:"addMessage",from:oe[me-4].actor,to:oe[me-1].actor,signalType:oe[me-3],msg:oe[me]},{type:"activeEnd",signalType:ie.LINETYPE.ACTIVE_END,actor:oe[me-4]}];break;case 67:this.$=[oe[me-3],oe[me-1],{type:"addMessage",from:oe[me-3].actor,to:oe[me-1].actor,signalType:oe[me-2],msg:oe[me]}];break;case 68:this.$={type:"addParticipant",actor:oe[me]};break;case 69:this.$=ie.LINETYPE.SOLID_OPEN;break;case 70:this.$=ie.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ie.LINETYPE.SOLID;break;case 72:this.$=ie.LINETYPE.DOTTED;break;case 73:this.$=ie.LINETYPE.SOLID_CROSS;break;case 74:this.$=ie.LINETYPE.DOTTED_CROSS;break;case 75:this.$=ie.LINETYPE.SOLID_POINT;break;case 76:this.$=ie.LINETYPE.DOTTED_POINT;break;case 77:this.$=ie.parseMessage(oe[me].trim().substring(1));break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],v,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,12:12,13:E,14:_,17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},i(Z,[2,5]),{9:47,12:12,13:E,14:_,17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},i(Z,[2,7]),i(Z,[2,8]),i(Z,[2,14]),{12:48,50:X,52:pt,53:U},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:Ct},{22:55,70:Ct},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},i(Z,[2,29]),i(Z,[2,30]),{32:[1,61]},{34:[1,62]},i(Z,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:Ct},{22:72,70:Ct},{22:73,70:Ct},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:Ct},{22:88,70:Ct},{22:89,70:Ct},{22:90,70:Ct},i([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),i(Z,[2,6]),i(Z,[2,15]),i(Tt,[2,9],{10:91}),i(Z,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},i(Z,[2,21]),{5:[1,95]},{5:[1,96]},i(Z,[2,24]),i(Z,[2,25]),i(Z,[2,26]),i(Z,[2,27]),i(Z,[2,28]),i(Z,[2,31]),i(Z,[2,32]),i(Ht,v,{7:97}),i(Ht,v,{7:98}),i(Ht,v,{7:99}),i(It,v,{40:100,7:101}),i(Ft,v,{42:102,7:103}),i(Ft,v,{7:103,42:104}),i(ke,v,{45:105,7:106}),i(Ht,v,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:Ct},i(pn,[2,69]),i(pn,[2,70]),i(pn,[2,71]),i(pn,[2,72]),i(pn,[2,73]),i(pn,[2,74]),i(pn,[2,75]),i(pn,[2,76]),{22:116,70:Ct},{22:118,58:117,70:Ct},{70:[2,63]},{70:[2,64]},{56:119,79:Me},{56:121,79:Me},{56:122,79:Me},{56:123,79:Me},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:X,52:pt,53:U},{5:[1,129]},i(Z,[2,19]),i(Z,[2,20]),i(Z,[2,22]),i(Z,[2,23]),{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,130],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,131],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,132],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,133]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,46],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,49:[1,134],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,135]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,44],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,48:[1,136],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{16:[1,137]},{16:[1,138]},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[2,42],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,47:[1,139],50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{4:m,5:b,8:8,9:10,12:12,13:E,14:_,16:[1,140],17:15,18:L,21:N,22:40,23:B,24:19,25:20,26:21,27:22,28:23,29:j,30:R,31:z,33:K,35:it,36:st,37:ut,38:bt,39:mt,41:yt,43:dt,44:ht,46:wt,50:X,52:pt,53:U,54:xt,59:nt,60:Ot,61:Nt,62:qt,70:Ct},{15:[1,141]},i(Z,[2,49]),{15:[1,142]},i(Z,[2,51]),i(Z,[2,52]),{22:143,70:Ct},{22:144,70:Ct},{56:145,79:Me},{56:146,79:Me},{56:147,79:Me},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},i(Z,[2,16]),i(Tt,[2,10]),{12:149,50:X,52:pt,53:U},i(Tt,[2,12]),i(Tt,[2,13]),i(Z,[2,18]),i(Z,[2,34]),i(Z,[2,35]),i(Z,[2,36]),i(Z,[2,37]),{15:[1,150]},i(Z,[2,38]),{15:[1,151]},i(Z,[2,39]),i(Z,[2,40]),{15:[1,152]},i(Z,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:Me},{56:156,79:Me},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:Ct},i(Tt,[2,11]),i(It,v,{7:101,40:158}),i(Ft,v,{7:103,42:159}),i(ke,v,{7:106,45:160}),i(Z,[2,48]),i(Z,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(_e,$t){if($t.recoverable)this.trace(_e);else{var re=new Error(_e);throw re.hash=$t,re}},parse:function(_e){var $t=this,re=[0],ie=[],Oe=[null],oe=[],Ne=this.table,me="",cn=0,li=0,ya=2,da=1,Oo=oe.slice.call(arguments,1),ds=Object.create(this.lexer),Dr={yy:{}};for(var nr in this.yy)Object.prototype.hasOwnProperty.call(this.yy,nr)&&(Dr.yy[nr]=this.yy[nr]);ds.setInput(_e,Dr.yy),Dr.yy.lexer=ds,Dr.yy.parser=this,typeof ds.yylloc>"u"&&(ds.yylloc={});var di=ds.yylloc;oe.push(di);var Ee=ds.options&&ds.options.ranges;typeof Dr.yy.parseError=="function"?this.parseError=Dr.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yn(){var $s;return $s=ie.pop()||ds.lex()||da,typeof $s!="number"&&($s instanceof Array&&(ie=$s,$s=ie.pop()),$s=$t.symbols_[$s]||$s),$s}for(var He,Ti,gn,ks,qa={},La,Gs,No,vs;;){if(Ti=re[re.length-1],this.defaultActions[Ti]?gn=this.defaultActions[Ti]:((He===null||typeof He>"u")&&(He=Yn()),gn=Ne[Ti]&&Ne[Ti][He]),typeof gn>"u"||!gn.length||!gn[0]){var nu="";vs=[];for(La in Ne[Ti])this.terminals_[La]&&La>ya&&vs.push("'"+this.terminals_[La]+"'");ds.showPosition?nu="Parse error on line "+(cn+1)+`: +`+ds.showPosition()+` +Expecting `+vs.join(", ")+", got '"+(this.terminals_[He]||He)+"'":nu="Parse error on line "+(cn+1)+": Unexpected "+(He==da?"end of input":"'"+(this.terminals_[He]||He)+"'"),this.parseError(nu,{text:ds.match,token:this.terminals_[He]||He,line:ds.yylineno,loc:di,expected:vs})}if(gn[0]instanceof Array&&gn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ti+", token: "+He);switch(gn[0]){case 1:re.push(He),Oe.push(ds.yytext),oe.push(ds.yylloc),re.push(gn[1]),He=null,li=ds.yyleng,me=ds.yytext,cn=ds.yylineno,di=ds.yylloc;break;case 2:if(Gs=this.productions_[gn[1]][1],qa.$=Oe[Oe.length-Gs],qa._$={first_line:oe[oe.length-(Gs||1)].first_line,last_line:oe[oe.length-1].last_line,first_column:oe[oe.length-(Gs||1)].first_column,last_column:oe[oe.length-1].last_column},Ee&&(qa._$.range=[oe[oe.length-(Gs||1)].range[0],oe[oe.length-1].range[1]]),ks=this.performAction.apply(qa,[me,li,cn,Dr.yy,gn[1],Oe,oe].concat(Oo)),typeof ks<"u")return ks;Gs&&(re=re.slice(0,-1*Gs*2),Oe=Oe.slice(0,-1*Gs),oe=oe.slice(0,-1*Gs)),re.push(this.productions_[gn[1]][0]),Oe.push(qa.$),oe.push(qa._$),No=Ne[re[re.length-2]][re[re.length-1]],re.push(No);break;case 3:return!0}}return!0}},Ge=function(){var we={EOF:1,parseError:function($t,re){if(this.yy.parser)this.yy.parser.parseError($t,re);else throw new Error($t)},setInput:function(_e,$t){return this.yy=$t||this.yy||{},this._input=_e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _e=this._input[0];this.yytext+=_e,this.yyleng++,this.offset++,this.match+=_e,this.matched+=_e;var $t=_e.match(/(?:\r\n?|\n).*/g);return $t?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_e},unput:function(_e){var $t=_e.length,re=_e.split(/(?:\r\n?|\n)/g);this._input=_e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$t),this.offset-=$t;var ie=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),re.length-1&&(this.yylineno-=re.length-1);var Oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:re?(re.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-re.length].length-re[0].length:this.yylloc.first_column-$t},this.options.ranges&&(this.yylloc.range=[Oe[0],Oe[0]+this.yyleng-$t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_e){this.unput(this.match.slice(_e))},pastInput:function(){var _e=this.matched.substr(0,this.matched.length-this.match.length);return(_e.length>20?"...":"")+_e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _e=this.match;return _e.length<20&&(_e+=this._input.substr(0,20-_e.length)),(_e.substr(0,20)+(_e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _e=this.pastInput(),$t=new Array(_e.length+1).join("-");return _e+this.upcomingInput()+` +`+$t+"^"},test_match:function(_e,$t){var re,ie,Oe;if(this.options.backtrack_lexer&&(Oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Oe.yylloc.range=this.yylloc.range.slice(0))),ie=_e[0].match(/(?:\r\n?|\n).*/g),ie&&(this.yylineno+=ie.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ie?ie[ie.length-1].length-ie[ie.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_e[0].length},this.yytext+=_e[0],this.match+=_e[0],this.matches=_e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_e[0].length),this.matched+=_e[0],re=this.performAction.call(this,this.yy,this,$t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),re)return re;if(this._backtrack){for(var oe in Oe)this[oe]=Oe[oe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _e,$t,re,ie;this._more||(this.yytext="",this.match="");for(var Oe=this._currentRules(),oe=0;oe$t[0].length)){if($t=re,ie=oe,this.options.backtrack_lexer){if(_e=this.test_match(re,Oe[oe]),_e!==!1)return _e;if(this._backtrack){$t=!1;continue}else return!1}else if(!this.options.flex)break}return $t?(_e=this.test_match($t,Oe[ie]),_e!==!1?_e:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var $t=this.next();return $t||this.lex()},begin:function($t){this.conditionStack.push($t)},popState:function(){var $t=this.conditionStack.length-1;return $t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function($t){return $t=this.conditionStack.length-1-Math.abs($t||0),$t>=0?this.conditionStack[$t]:"INITIAL"},pushState:function($t){this.begin($t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function($t,re,ie,Oe){switch(ie){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return re.yytext=re.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return re.yytext=re.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};return we}();ve.lexer=Ge;function Ke(){this.yy={}}return Ke.prototype=ve,ve.Parser=Ke,new Ke}();sgt.parser=sgt;const eHe=sgt;let DP,I5={},agt={},ogt={},cL=[],Bb=[],SK=!1,cgt,D5,OP,uL;const nHe=function(i){cL.push({name:i.text,wrap:i.wrap===void 0&&kT()||!!i.wrap,fill:i.color,actorKeys:[]}),D5=cL.slice(-1)[0]},ugt=function(i,a,f,p){let v=D5;const m=I5[i];if(m){if(D5&&m.box&&D5!==m.box)throw new Error("A same participant should only be defined in one Box: "+m.name+" can't be in '"+m.box.name+"' and in '"+D5.name+"' at the same time.");if(v=m.box?m.box:D5,m.box=v,m&&a===m.name&&f==null)return}(f==null||f.text==null)&&(f={text:a,wrap:null,type:p}),(p==null||f.text==null)&&(f={text:a,wrap:null,type:p}),I5[i]={box:v,name:a,description:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,prevActor:DP,links:{},properties:{},actorCnt:null,rectData:null,type:p||"participant"},DP&&I5[DP]&&(I5[DP].nextActor=i),D5&&D5.actorKeys.push(i),DP=i},rHe=i=>{let a,f=0;for(a=0;a>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},b}return Bb.push({from:i,to:a,message:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,type:p,activate:v}),!0},sHe=function(){return cL.length>0},aHe=function(){return cL.some(i=>i.name)},oHe=function(){return Bb},cHe=function(){return cL},uHe=function(){return I5},lHe=function(){return agt},hHe=function(){return ogt},NP=function(i){return I5[i]},fHe=function(){return Object.keys(I5)},dHe=function(){SK=!0},gHe=function(){SK=!1},pHe=()=>SK,bHe=function(i){cgt=i},kT=()=>cgt!==void 0?cgt:Le().sequence.wrap,vHe=function(){I5={},agt={},ogt={},cL=[],Bb=[],SK=!1,ap()},wHe=function(i){const a=i.trim(),f={text:a.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:a.match(/^:?wrap:/)!==null?!0:a.match(/^:?nowrap:/)!==null?!1:void 0};return Ut.debug("parseMessage:",f),f},mHe=function(i){const a=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let f=a!=null&&a[1]?a[1].trim():"transparent",p=a!=null&&a[2]?a[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",f)||(f="transparent",p=i.trim());else{const m=new Option().style;m.color=f,m.color!==f&&(f="transparent",p=i.trim())}return{color:f,text:p!==void 0?Dd(p.replace(/^:?(?:no)?wrap:/,""),Le()):void 0,wrap:p!==void 0?p.match(/^:?wrap:/)!==null?!0:p.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},PP={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},yHe={FILLED:0,OPEN:1},xHe={LEFTOF:0,RIGHTOF:1,OVER:2},hRt=function(i,a,f){f.text,f.wrap===void 0&&kT()||f.wrap;const p=[].concat(i,i);Bb.push({from:p[0],to:p[1],message:f.text,wrap:f.wrap===void 0&&kT()||!!f.wrap,type:PP.NOTE,placement:a})},fRt=function(i,a){const f=NP(i);try{let p=Dd(a.text,Le());p=p.replace(/&/g,"&"),p=p.replace(/=/g,"=");const v=JSON.parse(p);lgt(f,v)}catch(p){Ut.error("error while parsing actor link text",p)}},kHe=function(i,a){const f=NP(i);try{const b={};let E=Dd(a.text,Le());var p=E.indexOf("@");E=E.replace(/&/g,"&"),E=E.replace(/=/g,"=");var v=E.slice(0,p-1).trim(),m=E.slice(p+1).trim();b[v]=m,lgt(f,b)}catch(b){Ut.error("error while parsing actor link text",b)}};function lgt(i,a){if(i.links==null)i.links=a;else for(let f in a)i.links[f]=a[f]}const dRt=function(i,a){const f=NP(i);try{let p=Dd(a.text,Le());const v=JSON.parse(p);gRt(f,v)}catch(p){Ut.error("error while parsing actor properties text",p)}};function gRt(i,a){if(i.properties==null)i.properties=a;else for(let f in a)i.properties[f]=a[f]}function EHe(){D5=void 0}const pRt=function(i,a){const f=NP(i),p=document.getElementById(a.text);try{const v=p.innerHTML,m=JSON.parse(v);m.properties&&gRt(f,m.properties),m.links&&lgt(f,m.links)}catch(v){Ut.error("error while parsing actor details text",v)}},THe=function(i,a){if(i!==void 0&&i.properties!==void 0)return i.properties[a]},bRt=function(i){if(Array.isArray(i))i.forEach(function(a){bRt(a)});else switch(i.type){case"sequenceIndex":Bb.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":ugt(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(I5[i.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");OP=i.actor,ugt(i.actor,i.actor,i.description,i.draw),agt[i.actor]=Bb.length;break;case"destroyParticipant":uL=i.actor,ogt[i.actor]=Bb.length;break;case"activeStart":Zh(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":Zh(i.actor,void 0,void 0,i.signalType);break;case"addNote":hRt(i.actor,i.placement,i.text);break;case"addLinks":fRt(i.actor,i.text);break;case"addALink":kHe(i.actor,i.text);break;case"addProperties":dRt(i.actor,i.text);break;case"addDetails":pRt(i.actor,i.text);break;case"addMessage":if(OP){if(i.to!==OP)throw new Error("The created participant "+OP+" does not have an associated creating message after its declaration. Please check the sequence diagram.");OP=void 0}else if(uL){if(i.to!==uL&&i.from!==uL)throw new Error("The destroyed participant "+uL+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");uL=void 0}Zh(i.from,i.to,i.msg,i.signalType,i.activate);break;case"boxStart":nHe(i.boxData);break;case"boxEnd":EHe();break;case"loopStart":Zh(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"rectStart":Zh(void 0,void 0,i.color,i.signalType);break;case"rectEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"optStart":Zh(void 0,void 0,i.optText,i.signalType);break;case"optEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"altStart":Zh(void 0,void 0,i.altText,i.signalType);break;case"else":Zh(void 0,void 0,i.altText,i.signalType);break;case"altEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":cg(i.text);break;case"parStart":Zh(void 0,void 0,i.parText,i.signalType);break;case"and":Zh(void 0,void 0,i.parText,i.signalType);break;case"parEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"criticalStart":Zh(void 0,void 0,i.criticalText,i.signalType);break;case"option":Zh(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":Zh(void 0,void 0,void 0,i.signalType);break;case"breakStart":Zh(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":Zh(void 0,void 0,void 0,i.signalType);break}},vRt={addActor:ugt,addMessage:iHe,addSignal:Zh,addLinks:fRt,addDetails:pRt,addProperties:dRt,autoWrap:kT,setWrap:bHe,enableSequenceNumbers:dHe,disableSequenceNumbers:gHe,showSequenceNumbers:pHe,getMessages:oHe,getActors:uHe,getCreatedActors:lHe,getDestroyedActors:hHe,getActor:NP,getActorKeys:fHe,getActorProperty:THe,getAccTitle:op,getBoxes:cHe,getDiagramTitle:Db,setDiagramTitle:Z2,getConfig:()=>Le().sequence,clear:vHe,parseMessage:wHe,parseBoxData:mHe,LINETYPE:PP,ARROWTYPE:yHe,PLACEMENT:xHe,addNote:hRt,setAccTitle:cg,apply:bRt,setAccDescription:cp,getAccDescription:up,hasAtLeastOneBox:sHe,hasAtLeastOneBoxWithTitle:aHe},CHe=i=>`.actor { stroke: ${i.actorBorder}; fill: ${i.actorBkg}; } @@ -822,12 +820,12 @@ Expecting `+Js.join(", ")+", got '"+(this.terminals_[Ts]||Ts)+"'":Vn="Parse erro fill: ${i.actorBkg}; stroke-width: 2px; } -`,y9=18*2,cgt=function(i,a){return WW(i,a)},yRt=(i,a)=>{OLe(()=>{const f=document.querySelectorAll(i);f.length!==0&&(f[0].addEventListener("mouseover",function(){LHe("actor"+a+"_popup")}),f[0].addEventListener("mouseout",function(){MHe("actor"+a+"_popup")}))})},CHe=function(i,a,f,p,v){if(a.links===void 0||a.links===null||Object.keys(a.links).length===0)return{height:0,width:0};const m=a.links,b=a.actorCnt,E=a.rectData;var C="none";v&&(C="block !important");const A=i.append("g");A.attr("id","actor"+b+"_popup"),A.attr("class","actorPopupMenu"),A.attr("display",C),yRt("#actor"+b+"_popup",b);var P="";E.class!==void 0&&(P=" "+E.class);let F=E.width>f?E.width:f;const j=A.append("rect");if(j.attr("class","actorPopupMenuPanel"+P),j.attr("x",E.x),j.attr("y",E.height),j.attr("fill",E.fill),j.attr("stroke",E.stroke),j.attr("width",F),j.attr("height",E.height),j.attr("rx",E.rx),j.attr("ry",E.ry),m!=null){var R=20;for(let rt in m){var H=A.append("a"),Y=Xx(m[rt]);H.attr("xlink:href",Y),H.attr("target","_blank"),UHe(p)(rt,H,E.x+10,E.height+R,F,20,{class:"actor"},p),R+=30}}return j.attr("height",R),{height:E.height+R,width:F}},SHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'block'; }"},AHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'none'; }"},LHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="block")},MHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="none")},hL=function(i,a){let f=0,p=0;const v=a.text.split(ui.lineBreakRegex),[m,b]=zA(a.fontSize);let E=[],C=0,A=()=>a.y;if(a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0)switch(a.valign){case"top":case"start":A=()=>Math.round(a.y+a.textMargin);break;case"middle":case"center":A=()=>Math.round(a.y+(f+p+a.textMargin)/2);break;case"bottom":case"end":A=()=>Math.round(a.y+(f+p+2*a.textMargin)-a.textMargin);break}if(a.anchor!==void 0&&a.textMargin!==void 0&&a.width!==void 0)switch(a.anchor){case"left":case"start":a.x=Math.round(a.x+a.textMargin),a.anchor="start",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"middle":case"center":a.x=Math.round(a.x+a.width/2),a.anchor="middle",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"right":case"end":a.x=Math.round(a.x+a.width-a.textMargin),a.anchor="end",a.dominantBaseline="middle",a.alignmentBaseline="middle";break}for(let[P,F]of v.entries()){a.textMargin!==void 0&&a.textMargin===0&&m!==void 0&&(C=P*m);const j=i.append("text");j.attr("x",a.x),j.attr("y",A()),a.anchor!==void 0&&j.attr("text-anchor",a.anchor).attr("dominant-baseline",a.dominantBaseline).attr("alignment-baseline",a.alignmentBaseline),a.fontFamily!==void 0&&j.style("font-family",a.fontFamily),b!==void 0&&j.style("font-size",b),a.fontWeight!==void 0&&j.style("font-weight",a.fontWeight),a.fill!==void 0&&j.attr("fill",a.fill),a.class!==void 0&&j.attr("class",a.class),a.dy!==void 0?j.attr("dy",a.dy):C!==0&&j.attr("dy",C);const R=F||PIt;if(a.tspan){const H=j.append("tspan");H.attr("x",a.x),a.fill!==void 0&&H.attr("fill",a.fill),H.text(R)}else j.text(R);a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0&&(p+=(j._groups||j)[0][0].getBBox().height,f=p),E.push(j)}return E},xRt=function(i,a){function f(v,m,b,E,C){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-C)+" "+(v+b-C*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");return p.attr("points",f(a.x,a.y,a.width,a.height,7)),p.attr("class","labelBox"),a.y=a.y+a.height/2,hL(i,a),p};let hm=-1;const kRt=(i,a,f,p)=>{i.select&&f.forEach(v=>{const m=a[v],b=i.select("#actor"+m.actorCnt);!p.mirrorActors&&m.stopy?b.attr("y2",m.stopy+m.height/2):p.mirrorActors&&b.attr("y2",m.stopy)})},DHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+5,E=i.append("g").lower();var C=E;p||(hm++,C.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),C=E.append("g"),a.actorCnt=hm,a.links!=null&&(C.attr("id","root-"+hm),yRt("#root-"+hm,hm)));const A=u9();var P="actor";a.properties!=null&&a.properties.class?P=a.properties.class:A.fill="#eaeaea",A.x=a.x,A.y=v,A.width=a.width,A.height=a.height,A.class=P,A.rx=3,A.ry=3;const F=cgt(C,A);if(a.rectData=A,a.properties!=null&&a.properties.icon){const R=a.properties.icon.trim();R.charAt(0)==="@"?oDe(C,A.x+A.width-20,A.y+10,R.substr(1)):aDe(C,A.x+A.width-20,A.y+10,R)}ugt(f)(a.description,C,A.x,A.y,A.width,A.height,{class:"actor"},f);let j=a.height;if(F.node){const R=F.node().getBBox();a.height=R.height,j=R.height}return j},IHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+80;i.lower(),p||(hm++,i.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),a.actorCnt=hm);const E=i.append("g");E.attr("class","actor-man");const C=u9();C.x=a.x,C.y=v,C.fill="#eaeaea",C.width=a.width,C.height=a.height,C.class="actor",C.rx=3,C.ry=3,E.append("line").attr("id","actor-man-torso"+hm).attr("x1",m).attr("y1",v+25).attr("x2",m).attr("y2",v+45),E.append("line").attr("id","actor-man-arms"+hm).attr("x1",m-y9/2).attr("y1",v+33).attr("x2",m+y9/2).attr("y2",v+33),E.append("line").attr("x1",m-y9/2).attr("y1",v+60).attr("x2",m).attr("y2",v+45),E.append("line").attr("x1",m).attr("y1",v+45).attr("x2",m+y9/2-2).attr("y2",v+60);const A=E.append("circle");A.attr("cx",a.x+a.width/2),A.attr("cy",v+10),A.attr("r",15),A.attr("width",a.width),A.attr("height",a.height);const P=E.node().getBBox();return a.height=P.height,ugt(f)(a.description,E,C.x,C.y+35,C.width,C.height,{class:"actor"},f),a.height},OHe=function(i,a,f,p){switch(a.type){case"actor":return IHe(i,a,f,p);case"participant":return DHe(i,a,f,p)}},NHe=function(i,a,f){const v=i.append("g");ERt(v,a),a.name&&ugt(f)(a.name,v,a.x,a.y+(a.textMaxHeight||0)/2,a.width,0,{class:"text"},f),v.lower()},PHe=function(i){return i.append("g")},FHe=function(i,a,f,p,v){const m=u9(),b=a.anchored;m.x=a.startx,m.y=a.starty,m.class="activation"+v%3,m.width=a.stopx-a.startx,m.height=f-a.starty,cgt(b,m)},BHe=function(i,a,f,p){const{boxMargin:v,boxTextMargin:m,labelBoxHeight:b,labelBoxWidth:E,messageFontFamily:C,messageFontSize:A,messageFontWeight:P}=p,F=i.append("g"),j=function(Y,rt,J,it){return F.append("line").attr("x1",Y).attr("y1",rt).attr("x2",J).attr("y2",it).attr("class","loopLine")};j(a.startx,a.starty,a.stopx,a.starty),j(a.stopx,a.starty,a.stopx,a.stopy),j(a.startx,a.stopy,a.stopx,a.stopy),j(a.startx,a.starty,a.startx,a.stopy),a.sections!==void 0&&a.sections.forEach(function(Y){j(a.startx,Y.y,a.stopx,Y.y).style("stroke-dasharray","3, 3")});let R=Ddt();R.text=f,R.x=a.startx,R.y=a.starty,R.fontFamily=C,R.fontSize=A,R.fontWeight=P,R.anchor="middle",R.valign="middle",R.tspan=!1,R.width=E||50,R.height=b||20,R.textMargin=m,R.class="labelText",xRt(F,R),R=TRt(),R.text=a.title,R.x=a.startx+E/2+(a.stopx-a.startx)/2,R.y=a.starty+v+m,R.anchor="middle",R.valign="middle",R.textMargin=m,R.class="loopText",R.fontFamily=C,R.fontSize=A,R.fontWeight=P,R.wrap=!0;let H=hL(F,R);return a.sectionTitles!==void 0&&a.sectionTitles.forEach(function(Y,rt){if(Y.message){R.text=Y.message,R.x=a.startx+(a.stopx-a.startx)/2,R.y=a.sections[rt].y+v+m,R.class="loopText",R.anchor="middle",R.valign="middle",R.tspan=!1,R.fontFamily=C,R.fontSize=A,R.fontWeight=P,R.wrap=a.wrap,H=hL(F,R);let J=Math.round(H.map(it=>(it._groups||it)[0][0].getBBox().height).reduce((it,ft)=>it+ft));a.sections[rt].height+=J-(v+m)}}),a.height=Math.round(a.stopy-a.starty),F},ERt=function(i,a){pNt(i,a)},RHe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},jHe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},$He=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},zHe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},qHe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},HHe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},VHe=function(i){i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},TRt=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},GHe=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},ugt=function(){function i(v,m,b,E,C,A,P){const F=m.append("text").attr("x",b+C/2).attr("y",E+A/2+5).style("text-anchor","middle").text(v);p(F,P)}function a(v,m,b,E,C,A,P,F){const{actorFontSize:j,actorFontFamily:R,actorFontWeight:H}=F,[Y,rt]=zA(j),J=v.split(ui.lineBreakRegex);for(let it=0;iti.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,a)=>i+a))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,CRt(De())},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=this;let m=0;function b(E){return function(A){m++;const P=v.sequenceItems.length-m+1;v.updateVal(A,"starty",a-P*hn.boxMargin,Math.min),v.updateVal(A,"stopy",p+P*hn.boxMargin,Math.max),v.updateVal(Br.data,"startx",i-P*hn.boxMargin,Math.min),v.updateVal(Br.data,"stopx",f+P*hn.boxMargin,Math.max),E!=="activation"&&(v.updateVal(A,"startx",i-P*hn.boxMargin,Math.min),v.updateVal(A,"stopx",f+P*hn.boxMargin,Math.max),v.updateVal(Br.data,"starty",a-P*hn.boxMargin,Math.min),v.updateVal(Br.data,"stopy",p+P*hn.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,a,f,p){const v=ui.getMin(i,f),m=ui.getMax(i,f),b=ui.getMin(a,p),E=ui.getMax(a,p);this.updateVal(Br.data,"startx",v,Math.min),this.updateVal(Br.data,"starty",b,Math.min),this.updateVal(Br.data,"stopx",m,Math.max),this.updateVal(Br.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},newActivation:function(i,a,f){const p=f[i.from.actor],v=DK(i.from.actor).length||0,m=p.x+p.width/2+(v-1)*hn.activationWidth/2;this.activations.push({startx:m,starty:this.verticalPos+2,stopx:m+hn.activationWidth,stopy:void 0,actor:i.from.actor,anchored:rf.anchorElement(a)})},endActivation:function(i){const a=this.activations.map(function(f){return f.actor}).lastIndexOf(i.from.actor);return this.activations.splice(a,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},a){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:a}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},a){this.sequenceItems.push(this.createLoop(i,a))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const a=this.sequenceItems.pop();a.sections=a.sections||[],a.sectionTitles=a.sectionTitles||[],a.sections.push({y:Br.getVerticalPos(),height:0}),a.sectionTitles.push(i),this.sequenceItems.push(a)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=ui.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},WHe=function(i,a){Br.bumpVerticalPos(hn.boxMargin),a.height=hn.boxMargin,a.starty=Br.getVerticalPos();const f=u9();f.x=a.startx,f.y=a.starty,f.width=a.width||hn.width,f.class="note";const p=i.append("g"),v=rf.drawRect(p,f),m=Ddt();m.x=a.startx,m.y=a.starty,m.width=f.width,m.dy="1em",m.text=a.message,m.class="noteText",m.fontFamily=hn.noteFontFamily,m.fontSize=hn.noteFontSize,m.fontWeight=hn.noteFontWeight,m.anchor=hn.noteAlign,m.textMargin=hn.noteMargin,m.valign="center";const b=hL(p,m),E=Math.round(b.map(C=>(C._groups||C)[0][0].getBBox().height).reduce((C,A)=>C+A));v.attr("height",E+2*hn.noteMargin),a.height+=E+2*hn.noteMargin,Br.bumpVerticalPos(E+2*hn.noteMargin),a.stopy=a.starty+E+2*hn.noteMargin,a.stopx=a.startx+f.width,Br.insert(a.startx,a.starty,a.stopx,a.stopy),Br.models.addNote(a)},x9=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),fL=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),lgt=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});function KHe(i,a){Br.bumpVerticalPos(10);const{startx:f,stopx:p,message:v}=a,m=ui.splitBreaks(v).length,b=to.calculateTextDimensions(v,x9(hn)),E=b.height/m;a.height+=E,Br.bumpVerticalPos(E);let C,A=b.height-10;const P=b.width;if(f===p){C=Br.getVerticalPos()+A,hn.rightAngles||(A+=hn.boxMargin,C=Br.getVerticalPos()+A),A+=30;const F=ui.getMax(P/2,hn.width/2);Br.insert(f-F,Br.getVerticalPos()-10+A,p+F,Br.getVerticalPos()+30+A)}else A+=hn.boxMargin,C=Br.getVerticalPos()+A,Br.insert(f,C-10,p,C);return Br.bumpVerticalPos(A),a.height+=A,a.stopy=a.starty+a.height,Br.insert(a.fromBounds,a.starty,a.toBounds,a.stopy),C}const YHe=function(i,a,f,p){const{startx:v,stopx:m,starty:b,message:E,type:C,sequenceIndex:A,sequenceVisible:P}=a,F=to.calculateTextDimensions(E,x9(hn)),j=Ddt();j.x=v,j.y=b+10,j.width=m-v,j.class="messageText",j.dy="1em",j.text=E,j.fontFamily=hn.messageFontFamily,j.fontSize=hn.messageFontSize,j.fontWeight=hn.messageFontWeight,j.anchor=hn.messageAlign,j.valign="center",j.textMargin=hn.wrapPadding,j.tspan=!1,hL(i,j);const R=F.width;let H;v===m?hn.rightAngles?H=i.append("path").attr("d",`M ${v},${f} H ${v+ui.getMax(hn.width/2,R/2)} V ${f+25} H ${v}`):H=i.append("path").attr("d","M "+v+","+f+" C "+(v+60)+","+(f-10)+" "+(v+60)+","+(f+30)+" "+v+","+(f+20)):(H=i.append("line"),H.attr("x1",v),H.attr("y1",f),H.attr("x2",m),H.attr("y2",f)),C===p.db.LINETYPE.DOTTED||C===p.db.LINETYPE.DOTTED_CROSS||C===p.db.LINETYPE.DOTTED_POINT||C===p.db.LINETYPE.DOTTED_OPEN?(H.style("stroke-dasharray","3, 3"),H.attr("class","messageLine1")):H.attr("class","messageLine0");let Y="";hn.arrowMarkerAbsolute&&(Y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,Y=Y.replace(/\(/g,"\\("),Y=Y.replace(/\)/g,"\\)")),H.attr("stroke-width",2),H.attr("stroke","none"),H.style("fill","none"),(C===p.db.LINETYPE.SOLID||C===p.db.LINETYPE.DOTTED)&&H.attr("marker-end","url("+Y+"#arrowhead)"),(C===p.db.LINETYPE.SOLID_POINT||C===p.db.LINETYPE.DOTTED_POINT)&&H.attr("marker-end","url("+Y+"#filled-head)"),(C===p.db.LINETYPE.SOLID_CROSS||C===p.db.LINETYPE.DOTTED_CROSS)&&H.attr("marker-end","url("+Y+"#crosshead)"),(P||hn.showSequenceNumbers)&&(H.attr("marker-start","url("+Y+"#sequencenumber)"),i.append("text").attr("x",v).attr("y",f+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(A))},XHe=function(i,a,f,p,v,m,b){let E=0,C=0,A,P=0;for(const F of p){const j=a[F],R=j.box;A&&A!=R&&(b||Br.models.addBox(A),C+=hn.boxMargin+A.margin),R&&R!=A&&(b||(R.x=E+C,R.y=v),C+=R.margin),j.width=j.width||hn.width,j.height=ui.getMax(j.height||hn.height,hn.height),j.margin=j.margin||hn.actorMargin,P=ui.getMax(P,j.height),f[j.name]&&(C+=j.width/2),j.x=E+C,j.starty=Br.getVerticalPos(),Br.insert(j.x,v,j.x+j.width,j.height),E+=j.width+C,j.box&&(j.box.width=E+R.margin-j.box.x),C=j.margin,A=j.box,Br.models.addActor(j)}A&&!b&&Br.models.addBox(A),Br.bumpVerticalPos(P)},hgt=function(i,a,f,p){if(p){let v=0;Br.bumpVerticalPos(hn.boxMargin*2);for(const m of f){const b=a[m];b.stopy||(b.stopy=Br.getVerticalPos());const E=rf.drawActor(i,b,hn,!0);v=ui.getMax(v,E)}Br.bumpVerticalPos(v+hn.boxMargin)}else for(const v of f){const m=a[v];rf.drawActor(i,m,hn,!1)}},_Rt=function(i,a,f,p){let v=0,m=0;for(const b of f){const E=a[b],C=tVe(E),A=rf.drawPopup(i,E,C,hn,hn.forceMenus,p);A.height>v&&(v=A.height),A.width+E.x>m&&(m=A.width+E.x)}return{maxHeight:v,maxWidth:m}},CRt=function(i){Z1(hn,i),i.fontFamily&&(hn.actorFontFamily=hn.noteFontFamily=hn.messageFontFamily=i.fontFamily),i.fontSize&&(hn.actorFontSize=hn.noteFontSize=hn.messageFontSize=i.fontSize),i.fontWeight&&(hn.actorFontWeight=hn.noteFontWeight=hn.messageFontWeight=i.fontWeight)},DK=function(i){return Br.activations.filter(function(a){return a.actor===i})},SRt=function(i,a){const f=a[i],p=DK(i),v=p.reduce(function(b,E){return ui.getMin(b,E.startx)},f.x+f.width/2),m=p.reduce(function(b,E){return ui.getMax(b,E.stopx)},f.x+f.width/2);return[v,m]};function y3(i,a,f,p,v){Br.bumpVerticalPos(f);let m=p;if(a.id&&a.message&&i[a.id]){const b=i[a.id].width,E=x9(hn);a.message=to.wrapLabel(`[${a.message}]`,b-2*hn.wrapPadding,E),a.width=b,a.wrap=!0;const C=to.calculateTextDimensions(a.message,E),A=ui.getMax(C.height,hn.labelBoxHeight);m=p+A,Wt.debug(`${A} - ${a.message}`)}v(a),Br.bumpVerticalPos(m)}function QHe(i,a,f,p,v,m,b){function E(A,P){A.x{Ft.add(X.from),Ft.add(X.to)}),H=H.filter(X=>Ft.has(X))}XHe(A,P,F,H,0,Y,!1);const Tt=iVe(Y,P,ft,p);rf.insertArrowHead(A),rf.insertArrowCrossHead(A),rf.insertArrowFilledHead(A),rf.insertSequenceNumber(A);function kt(Ft,X){const Rt=Br.endActivation(Ft);Rt.starty+18>X&&(Rt.starty=X-6,X+=12),rf.drawActivation(A,Rt,X,hn,DK(Ft.from.actor).length),Br.insert(Rt.startx,X-10,Rt.stopx,X)}let mt=1,ct=1;const yt=[],st=[];Y.forEach(function(Ft,X){let Rt,Bt,vt;switch(Ft.type){case p.db.LINETYPE.NOTE:Br.resetVerticalPos(),Bt=Ft.noteModel,WHe(A,Bt);break;case p.db.LINETYPE.ACTIVE_START:Br.newActivation(Ft,A,P);break;case p.db.LINETYPE.ACTIVE_END:kt(Ft,Br.getVerticalPos());break;case p.db.LINETYPE.LOOP_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot));break;case p.db.LINETYPE.LOOP_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"loop",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;case p.db.LINETYPE.RECT_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin,Ot=>Br.newLoop(void 0,Ot.message));break;case p.db.LINETYPE.RECT_END:Rt=Br.endLoop(),st.push(Rt),Br.models.addLoop(Rt),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos());break;case p.db.LINETYPE.OPT_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot));break;case p.db.LINETYPE.OPT_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"opt",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;case p.db.LINETYPE.ALT_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot));break;case p.db.LINETYPE.ALT_ELSE:y3(Tt,Ft,hn.boxMargin+hn.boxTextMargin,hn.boxMargin,Ot=>Br.addSectionToLoop(Ot));break;case p.db.LINETYPE.ALT_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"alt",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot)),Br.saveVerticalPos();break;case p.db.LINETYPE.PAR_AND:y3(Tt,Ft,hn.boxMargin+hn.boxTextMargin,hn.boxMargin,Ot=>Br.addSectionToLoop(Ot));break;case p.db.LINETYPE.PAR_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"par",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;case p.db.LINETYPE.AUTONUMBER:mt=Ft.message.start||mt,ct=Ft.message.step||ct,Ft.message.visible?p.db.enableSequenceNumbers():p.db.disableSequenceNumbers();break;case p.db.LINETYPE.CRITICAL_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot));break;case p.db.LINETYPE.CRITICAL_OPTION:y3(Tt,Ft,hn.boxMargin+hn.boxTextMargin,hn.boxMargin,Ot=>Br.addSectionToLoop(Ot));break;case p.db.LINETYPE.CRITICAL_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"critical",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;case p.db.LINETYPE.BREAK_START:y3(Tt,Ft,hn.boxMargin,hn.boxMargin+hn.boxTextMargin,Ot=>Br.newLoop(Ot));break;case p.db.LINETYPE.BREAK_END:Rt=Br.endLoop(),rf.drawLoop(A,Rt,"break",hn),Br.bumpVerticalPos(Rt.stopy-Br.getVerticalPos()),Br.models.addLoop(Rt);break;default:try{vt=Ft.msgModel,vt.starty=Br.getVerticalPos(),vt.sequenceIndex=mt,vt.sequenceVisible=p.db.showSequenceNumbers();const Ot=KHe(A,vt);QHe(Ft,vt,Ot,X,P,F,j),yt.push({messageModel:vt,lineStartY:Ot}),Br.models.addMessage(vt)}catch(Ot){Wt.error("error while drawing message",Ot)}}[p.db.LINETYPE.SOLID_OPEN,p.db.LINETYPE.DOTTED_OPEN,p.db.LINETYPE.SOLID,p.db.LINETYPE.DOTTED,p.db.LINETYPE.SOLID_CROSS,p.db.LINETYPE.DOTTED_CROSS,p.db.LINETYPE.SOLID_POINT,p.db.LINETYPE.DOTTED_POINT].includes(Ft.type)&&(mt=mt+ct)}),Wt.debug("createdActors",F),Wt.debug("destroyedActors",j),hgt(A,P,H,!1),yt.forEach(Ft=>YHe(A,Ft.messageModel,Ft.lineStartY,p)),hn.mirrorActors&&hgt(A,P,H,!0),st.forEach(Ft=>rf.drawBackgroundRect(A,Ft)),kRt(A,P,H,hn),Br.models.boxes.forEach(function(Ft){Ft.height=Br.getVerticalPos()-Ft.y,Br.insert(Ft.x,Ft.y,Ft.x+Ft.width,Ft.height),Ft.startx=Ft.x,Ft.starty=Ft.y,Ft.stopx=Ft.startx+Ft.width,Ft.stopy=Ft.starty+Ft.height,Ft.stroke="rgb(0,0,0, 0.5)",rf.drawBox(A,Ft,hn)}),J&&Br.bumpVerticalPos(hn.boxMargin);const xt=_Rt(A,P,H,C),{bounds:ht}=Br.getBounds();let dt=ht.stopy-ht.starty;dt{const b=i[m];b.wrap&&(b.description=to.wrapLabel(b.description,hn.width-2*hn.wrapPadding,lgt(hn)));const E=to.calculateTextDimensions(b.description,lgt(hn));b.width=b.wrap?hn.width:ui.getMax(hn.width,E.width+2*hn.wrapPadding),b.height=b.wrap?ui.getMax(E.height,hn.height):hn.height,p=ui.getMax(p,b.height)});for(const m in a){const b=i[m];if(!b)continue;const E=i[b.nextActor];if(!E){const F=a[m]+hn.actorMargin-b.width/2;b.margin=ui.getMax(F,hn.actorMargin);continue}const A=a[m]+hn.actorMargin-b.width/2-E.width/2;b.margin=ui.getMax(A,hn.actorMargin)}let v=0;return f.forEach(m=>{const b=x9(hn);let E=m.actorKeys.reduce((P,F)=>P+=i[F].width+(i[F].margin||0),0);E-=2*hn.boxTextMargin,m.wrap&&(m.name=to.wrapLabel(m.name,E-2*hn.wrapPadding,b));const C=to.calculateTextDimensions(m.name,b);v=ui.getMax(C.height,v);const A=ui.getMax(E,C.width+2*hn.wrapPadding);if(m.margin=hn.boxTextMargin,Em.textMaxHeight=v),ui.getMax(p,hn.height)}const nVe=function(i,a,f){const p=a[i.from].x,v=a[i.to].x,m=i.wrap&&i.message;let b=to.calculateTextDimensions(m?to.wrapLabel(i.message,hn.width,fL(hn)):i.message,fL(hn));const E={width:m?hn.width:ui.getMax(hn.width,b.width+2*hn.noteMargin),height:0,startx:a[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===f.db.PLACEMENT.RIGHTOF?(E.width=m?ui.getMax(hn.width,b.width):ui.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*hn.noteMargin),E.startx=p+(a[i.from].width+hn.actorMargin)/2):i.placement===f.db.PLACEMENT.LEFTOF?(E.width=m?ui.getMax(hn.width,b.width+2*hn.noteMargin):ui.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*hn.noteMargin),E.startx=p-E.width+(a[i.from].width-hn.actorMargin)/2):i.to===i.from?(b=to.calculateTextDimensions(m?to.wrapLabel(i.message,ui.getMax(hn.width,a[i.from].width),fL(hn)):i.message,fL(hn)),E.width=m?ui.getMax(hn.width,a[i.from].width):ui.getMax(a[i.from].width,hn.width,b.width+2*hn.noteMargin),E.startx=p+(a[i.from].width-E.width)/2):(E.width=Math.abs(p+a[i.from].width/2-(v+a[i.to].width/2))+hn.actorMargin,E.startx=pj.actor).lastIndexOf(A.from.actor);delete Br.activations.splice(F,1)[0]}break}A.placement!==void 0?(E=nVe(A,a,p),A.noteModel=E,m.forEach(F=>{b=F,b.from=ui.getMin(b.from,E.startx),b.to=ui.getMax(b.to,E.startx+E.width),b.width=ui.getMax(b.width,Math.abs(b.from-b.to))-hn.labelBoxWidth})):(C=rVe(A,a,p),A.msgModel=C,C.startx&&C.stopx&&m.length>0&&m.forEach(F=>{if(b=F,C.startx===C.stopx){const j=a[A.from],R=a[A.to];b.from=ui.getMin(j.x-C.width/2,j.x-j.width/2,b.from),b.to=ui.getMax(R.x+C.width/2,R.x+j.width/2,b.to),b.width=ui.getMax(b.width,Math.abs(b.to-b.from))-hn.labelBoxWidth}else b.from=ui.getMin(C.startx,b.from),b.to=ui.getMax(C.stopx,b.to),b.width=ui.getMax(b.width,C.width)-hn.labelBoxWidth}))}),Br.activations=[],Wt.debug("Loop type widths:",v),v},sVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Jqe,db:THe,renderer:{bounds:Br,drawActors:hgt,drawActorsPopup:_Rt,setConf:CRt,draw:ZHe},styles:_He}},Symbol.toStringTag,{value:"Module"}));var fgt=function(){var i=function(Ce,$e,ye,fn){for(ye=ye||{},fn=Ce.length;fn--;ye[Ce[fn]]=$e);return ye},a=[1,34],f=[1,35],p=[1,36],v=[1,37],m=[1,9],b=[1,8],E=[1,19],C=[1,20],A=[1,21],P=[1,40],F=[1,41],j=[1,27],R=[1,25],H=[1,26],Y=[1,32],rt=[1,33],J=[1,28],it=[1,29],ft=[1,30],Tt=[1,31],kt=[1,45],mt=[1,42],ct=[1,43],yt=[1,44],st=[1,46],xt=[1,24],ht=[1,16,24],dt=[1,60],Ct=[1,61],tt=[1,62],Pt=[1,63],pt=[1,64],Ft=[1,65],X=[1,66],Rt=[1,16,24,52],Bt=[1,77],vt=[1,16,24,27,28,36,50,52,55,68,69,70,71,72,73,74,79,81],Ot=[1,16,24,27,28,34,36,50,52,55,59,68,69,70,71,72,73,74,79,81,94,96,97,98,99],Vt=[1,86],qe=[28,94,96,97,98,99],_n=[28,73,74,94,96,97,98,99],Te=[28,68,69,70,71,72,94,96,97,98,99],Wn=[1,99],Ae=[1,16,24,50,52,55],ne=[1,16,24,36],ke=[8,9,10,11,19,23,44,46,48,53,57,58,60,61,63,65,75,76,78,82,94,96,97,98,99],Ve={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,statements:6,direction:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,EOF:24,statement:25,classLabel:26,SQS:27,STR:28,SQE:29,namespaceName:30,alphaNumToken:31,className:32,classLiteralName:33,GENERICTYPE:34,relationStatement:35,LABEL:36,namespaceStatement:37,classStatement:38,methodStatement:39,annotationStatement:40,clickStatement:41,cssClassStatement:42,noteStatement:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,namespaceIdentifier:49,STRUCT_START:50,classStatements:51,STRUCT_STOP:52,NAMESPACE:53,classIdentifier:54,STYLE_SEPARATOR:55,members:56,CLASS:57,ANNOTATION_START:58,ANNOTATION_END:59,MEMBER:60,SEPARATOR:61,relation:62,NOTE_FOR:63,noteText:64,NOTE:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,CSSCLASS:82,commentToken:83,textToken:84,graphCodeTokens:85,textNoTagsToken:86,TAGSTART:87,TAGEND:88,"==":89,"--":90,PCT:91,DEFAULT:92,SPACE:93,MINUS:94,keywords:95,UNICODE_TEXT:96,NUM:97,ALPHA:98,BQUOTE_STR:99,$accept:0,$end:1},terminals_:{2:"error",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",24:"EOF",27:"SQS",28:"STR",29:"SQE",34:"GENERICTYPE",36:"LABEL",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",50:"STRUCT_START",52:"STRUCT_STOP",53:"NAMESPACE",55:"STYLE_SEPARATOR",57:"CLASS",58:"ANNOTATION_START",59:"ANNOTATION_END",60:"MEMBER",61:"SEPARATOR",63:"NOTE_FOR",65:"NOTE",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"CSSCLASS",85:"graphCodeTokens",87:"TAGSTART",88:"TAGEND",89:"==",90:"--",91:"PCT",92:"DEFAULT",93:"SPACE",94:"MINUS",95:"keywords",96:"UNICODE_TEXT",97:"NUM",98:"ALPHA",99:"BQUOTE_STR"},productions_:[0,[3,1],[3,2],[3,1],[7,1],[7,1],[7,1],[7,1],[4,1],[5,4],[5,6],[13,1],[14,1],[18,1],[15,1],[12,4],[6,1],[6,2],[6,3],[26,3],[30,1],[30,2],[32,1],[32,1],[32,2],[32,2],[32,2],[25,1],[25,2],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,2],[25,2],[25,1],[37,4],[37,5],[49,2],[51,1],[51,2],[51,3],[38,1],[38,3],[38,4],[38,6],[54,2],[54,3],[40,4],[56,1],[56,2],[39,1],[39,2],[39,1],[39,1],[35,3],[35,4],[35,4],[35,5],[43,3],[43,2],[62,3],[62,2],[62,2],[62,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[41,3],[41,4],[41,3],[41,4],[41,4],[41,5],[41,3],[41,4],[41,4],[41,5],[41,4],[41,5],[41,5],[41,6],[42,3],[83,1],[83,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[84,1],[86,1],[86,1],[86,1],[86,1],[31,1],[31,1],[31,1],[31,1],[33,1],[64,1]],performAction:function($e,ye,fn,Yt,Mi,qt,zi){var Se=qt.length-1;switch(Mi){case 4:Yt.setDirection("TB");break;case 5:Yt.setDirection("BT");break;case 6:Yt.setDirection("RL");break;case 7:Yt.setDirection("LR");break;case 11:Yt.parseDirective("%%{","open_directive");break;case 12:Yt.parseDirective(qt[Se],"type_directive");break;case 13:qt[Se]=qt[Se].trim().replace(/'/g,'"'),Yt.parseDirective(qt[Se],"arg_directive");break;case 14:Yt.parseDirective("}%%","close_directive","class");break;case 19:this.$=qt[Se-1];break;case 20:case 22:case 23:this.$=qt[Se];break;case 21:case 24:this.$=qt[Se-1]+qt[Se];break;case 25:case 26:this.$=qt[Se-1]+"~"+qt[Se]+"~";break;case 27:Yt.addRelation(qt[Se]);break;case 28:qt[Se-1].title=Yt.cleanupLabel(qt[Se]),Yt.addRelation(qt[Se-1]);break;case 37:this.$=qt[Se].trim(),Yt.setAccTitle(this.$);break;case 38:case 39:this.$=qt[Se].trim(),Yt.setAccDescription(this.$);break;case 40:Yt.addClassesToNamespace(qt[Se-3],qt[Se-1]);break;case 41:Yt.addClassesToNamespace(qt[Se-4],qt[Se-1]);break;case 42:this.$=qt[Se],Yt.addNamespace(qt[Se]);break;case 43:this.$=[qt[Se]];break;case 44:this.$=[qt[Se-1]];break;case 45:qt[Se].unshift(qt[Se-2]),this.$=qt[Se];break;case 47:Yt.setCssClass(qt[Se-2],qt[Se]);break;case 48:Yt.addMembers(qt[Se-3],qt[Se-1]);break;case 49:Yt.setCssClass(qt[Se-5],qt[Se-3]),Yt.addMembers(qt[Se-5],qt[Se-1]);break;case 50:this.$=qt[Se],Yt.addClass(qt[Se]);break;case 51:this.$=qt[Se-1],Yt.addClass(qt[Se-1]),Yt.setClassLabel(qt[Se-1],qt[Se]);break;case 52:Yt.addAnnotation(qt[Se],qt[Se-2]);break;case 53:this.$=[qt[Se]];break;case 54:qt[Se].push(qt[Se-1]),this.$=qt[Se];break;case 55:break;case 56:Yt.addMember(qt[Se-1],Yt.cleanupLabel(qt[Se]));break;case 57:break;case 58:break;case 59:this.$={id1:qt[Se-2],id2:qt[Se],relation:qt[Se-1],relationTitle1:"none",relationTitle2:"none"};break;case 60:this.$={id1:qt[Se-3],id2:qt[Se],relation:qt[Se-1],relationTitle1:qt[Se-2],relationTitle2:"none"};break;case 61:this.$={id1:qt[Se-3],id2:qt[Se],relation:qt[Se-2],relationTitle1:"none",relationTitle2:qt[Se-1]};break;case 62:this.$={id1:qt[Se-4],id2:qt[Se],relation:qt[Se-2],relationTitle1:qt[Se-3],relationTitle2:qt[Se-1]};break;case 63:Yt.addNote(qt[Se],qt[Se-1]);break;case 64:Yt.addNote(qt[Se]);break;case 65:this.$={type1:qt[Se-2],type2:qt[Se],lineType:qt[Se-1]};break;case 66:this.$={type1:"none",type2:qt[Se],lineType:qt[Se-1]};break;case 67:this.$={type1:qt[Se-1],type2:"none",lineType:qt[Se]};break;case 68:this.$={type1:"none",type2:"none",lineType:qt[Se]};break;case 69:this.$=Yt.relationType.AGGREGATION;break;case 70:this.$=Yt.relationType.EXTENSION;break;case 71:this.$=Yt.relationType.COMPOSITION;break;case 72:this.$=Yt.relationType.DEPENDENCY;break;case 73:this.$=Yt.relationType.LOLLIPOP;break;case 74:this.$=Yt.lineType.LINE;break;case 75:this.$=Yt.lineType.DOTTED_LINE;break;case 76:case 82:this.$=qt[Se-2],Yt.setClickEvent(qt[Se-1],qt[Se]);break;case 77:case 83:this.$=qt[Se-3],Yt.setClickEvent(qt[Se-2],qt[Se-1]),Yt.setTooltip(qt[Se-2],qt[Se]);break;case 78:this.$=qt[Se-2],Yt.setLink(qt[Se-1],qt[Se]);break;case 79:this.$=qt[Se-3],Yt.setLink(qt[Se-2],qt[Se-1],qt[Se]);break;case 80:this.$=qt[Se-3],Yt.setLink(qt[Se-2],qt[Se-1]),Yt.setTooltip(qt[Se-2],qt[Se]);break;case 81:this.$=qt[Se-4],Yt.setLink(qt[Se-3],qt[Se-2],qt[Se]),Yt.setTooltip(qt[Se-3],qt[Se-1]);break;case 84:this.$=qt[Se-3],Yt.setClickEvent(qt[Se-2],qt[Se-1],qt[Se]);break;case 85:this.$=qt[Se-4],Yt.setClickEvent(qt[Se-3],qt[Se-2],qt[Se-1]),Yt.setTooltip(qt[Se-3],qt[Se]);break;case 86:this.$=qt[Se-3],Yt.setLink(qt[Se-2],qt[Se]);break;case 87:this.$=qt[Se-4],Yt.setLink(qt[Se-3],qt[Se-1],qt[Se]);break;case 88:this.$=qt[Se-4],Yt.setLink(qt[Se-3],qt[Se-1]),Yt.setTooltip(qt[Se-3],qt[Se]);break;case 89:this.$=qt[Se-5],Yt.setLink(qt[Se-4],qt[Se-2],qt[Se]),Yt.setTooltip(qt[Se-4],qt[Se-1]);break;case 90:Yt.setCssClass(qt[Se-1],qt[Se]);break}},table:[{3:1,4:2,5:3,6:4,7:18,8:a,9:f,10:p,11:v,12:5,13:6,19:m,23:b,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:E,46:C,48:A,49:23,53:P,54:24,57:F,58:j,60:R,61:H,63:Y,65:rt,75:J,76:it,78:ft,82:Tt,94:kt,96:mt,97:ct,98:yt,99:st},{1:[3]},{1:[2,1]},{3:47,4:2,5:3,6:4,7:18,8:a,9:f,10:p,11:v,12:5,13:6,19:m,23:b,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:E,46:C,48:A,49:23,53:P,54:24,57:F,58:j,60:R,61:H,63:Y,65:rt,75:J,76:it,78:ft,82:Tt,94:kt,96:mt,97:ct,98:yt,99:st},{1:[2,3]},{1:[2,8]},{14:48,20:[1,49]},i(xt,[2,16],{16:[1,50]}),{16:[1,51]},{20:[2,11]},i(ht,[2,27],{36:[1,52]}),i(ht,[2,29]),i(ht,[2,30]),i(ht,[2,31]),i(ht,[2,32]),i(ht,[2,33]),i(ht,[2,34]),i(ht,[2,35]),i(ht,[2,36]),{45:[1,53]},{47:[1,54]},i(ht,[2,39]),i(ht,[2,55],{62:55,66:58,67:59,28:[1,56],36:[1,57],68:dt,69:Ct,70:tt,71:Pt,72:pt,73:Ft,74:X}),{50:[1,67]},i(Rt,[2,46],{50:[1,69],55:[1,68]}),i(ht,[2,57]),i(ht,[2,58]),{31:70,94:kt,96:mt,97:ct,98:yt},{31:38,32:71,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{31:38,32:72,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{31:38,32:73,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{28:[1,74]},{31:38,32:75,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{28:Bt,64:76},i(ht,[2,4]),i(ht,[2,5]),i(ht,[2,6]),i(ht,[2,7]),i(vt,[2,22],{31:38,33:39,32:78,34:[1,79],94:kt,96:mt,97:ct,98:yt,99:st}),i(vt,[2,23],{34:[1,80]}),{30:81,31:82,94:kt,96:mt,97:ct,98:yt},{31:38,32:83,33:39,94:kt,96:mt,97:ct,98:yt,99:st},i(Ot,[2,104]),i(Ot,[2,105]),i(Ot,[2,106]),i(Ot,[2,107]),i([1,16,24,27,28,34,36,50,52,55,68,69,70,71,72,73,74,79,81],[2,108]),{1:[2,2]},{15:84,17:[1,85],22:Vt},i([17,22],[2,12]),i(xt,[2,17],{25:7,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,7:18,32:22,49:23,54:24,31:38,33:39,6:87,8:a,9:f,10:p,11:v,44:E,46:C,48:A,53:P,57:F,58:j,60:R,61:H,63:Y,65:rt,75:J,76:it,78:ft,82:Tt,94:kt,96:mt,97:ct,98:yt,99:st}),{6:88,7:18,8:a,9:f,10:p,11:v,25:7,31:38,32:22,33:39,35:10,37:11,38:12,39:13,40:14,41:15,42:16,43:17,44:E,46:C,48:A,49:23,53:P,54:24,57:F,58:j,60:R,61:H,63:Y,65:rt,75:J,76:it,78:ft,82:Tt,94:kt,96:mt,97:ct,98:yt,99:st},i(ht,[2,28]),i(ht,[2,37]),i(ht,[2,38]),{28:[1,90],31:38,32:89,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{62:91,66:58,67:59,68:dt,69:Ct,70:tt,71:Pt,72:pt,73:Ft,74:X},i(ht,[2,56]),{67:92,73:Ft,74:X},i(qe,[2,68],{66:93,68:dt,69:Ct,70:tt,71:Pt,72:pt}),i(_n,[2,69]),i(_n,[2,70]),i(_n,[2,71]),i(_n,[2,72]),i(_n,[2,73]),i(Te,[2,74]),i(Te,[2,75]),{16:[1,95],38:96,51:94,54:24,57:F},{31:97,94:kt,96:mt,97:ct,98:yt},{56:98,60:Wn},{59:[1,100]},{28:[1,101]},{28:[1,102]},{79:[1,103],81:[1,104]},{31:105,94:kt,96:mt,97:ct,98:yt},{28:Bt,64:106},i(ht,[2,64]),i(ht,[2,109]),i(vt,[2,24]),i(vt,[2,25]),i(vt,[2,26]),{50:[2,42]},{30:107,31:82,50:[2,20],94:kt,96:mt,97:ct,98:yt},i(Ae,[2,50],{26:108,27:[1,109]}),{16:[1,110]},{18:111,21:[1,112]},{16:[2,14]},i(xt,[2,18]),{24:[1,113]},i(ne,[2,59]),{31:38,32:114,33:39,94:kt,96:mt,97:ct,98:yt,99:st},{28:[1,116],31:38,32:115,33:39,94:kt,96:mt,97:ct,98:yt,99:st},i(qe,[2,67],{66:117,68:dt,69:Ct,70:tt,71:Pt,72:pt}),i(qe,[2,66]),{52:[1,118]},{38:96,51:119,54:24,57:F},{16:[1,120],52:[2,43]},i(Rt,[2,47],{50:[1,121]}),{52:[1,122]},{52:[2,53],56:123,60:Wn},{31:38,32:124,33:39,94:kt,96:mt,97:ct,98:yt,99:st},i(ht,[2,76],{28:[1,125]}),i(ht,[2,78],{28:[1,127],77:[1,126]}),i(ht,[2,82],{28:[1,128],80:[1,129]}),{28:[1,130]},i(ht,[2,90]),i(ht,[2,63]),{50:[2,21]},i(Ae,[2,51]),{28:[1,131]},i(ke,[2,9]),{15:132,22:Vt},{22:[2,13]},{1:[2,15]},i(ne,[2,61]),i(ne,[2,60]),{31:38,32:133,33:39,94:kt,96:mt,97:ct,98:yt,99:st},i(qe,[2,65]),i(ht,[2,40]),{52:[1,134]},{38:96,51:135,52:[2,44],54:24,57:F},{56:136,60:Wn},i(Rt,[2,48]),{52:[2,54]},i(ht,[2,52]),i(ht,[2,77]),i(ht,[2,79]),i(ht,[2,80],{77:[1,137]}),i(ht,[2,83]),i(ht,[2,84],{28:[1,138]}),i(ht,[2,86],{28:[1,140],77:[1,139]}),{29:[1,141]},{16:[1,142]},i(ne,[2,62]),i(ht,[2,41]),{52:[2,45]},{52:[1,143]},i(ht,[2,81]),i(ht,[2,85]),i(ht,[2,87]),i(ht,[2,88],{77:[1,144]}),i(Ae,[2,19]),i(ke,[2,10]),i(Rt,[2,49]),i(ht,[2,89])],defaultActions:{2:[2,1],4:[2,3],5:[2,8],9:[2,11],47:[2,2],81:[2,42],86:[2,14],107:[2,21],112:[2,13],113:[2,15],123:[2,54],135:[2,45]},parseError:function($e,ye){if(ye.recoverable)this.trace($e);else{var fn=new Error($e);throw fn.hash=ye,fn}},parse:function($e){var ye=this,fn=[0],Yt=[],Mi=[null],qt=[],zi=this.table,Se="",ki=0,Ri=0,pi=2,bi=1,dn=qt.slice.call(arguments,1),Nn=Object.create(this.lexer),Wr={yy:{}};for(var Li in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Li)&&(Wr.yy[Li]=this.yy[Li]);Nn.setInput($e,Wr.yy),Wr.yy.lexer=Nn,Wr.yy.parser=this,typeof Nn.yylloc>"u"&&(Nn.yylloc={});var is=Nn.yylloc;qt.push(is);var Ts=Nn.options&&Nn.options.ranges;typeof Wr.yy.parseError=="function"?this.parseError=Wr.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Aa(){var Mc;return Mc=Yt.pop()||Nn.lex()||bi,typeof Mc!="number"&&(Mc instanceof Array&&(Yt=Mc,Mc=Yt.pop()),Mc=ye.symbols_[Mc]||Mc),Mc}for(var Xi,Ga,_r,qr,Oi={},gr,Js,Vn,Xc;;){if(Ga=fn[fn.length-1],this.defaultActions[Ga]?_r=this.defaultActions[Ga]:((Xi===null||typeof Xi>"u")&&(Xi=Aa()),_r=zi[Ga]&&zi[Ga][Xi]),typeof _r>"u"||!_r.length||!_r[0]){var Er="";Xc=[];for(gr in zi[Ga])this.terminals_[gr]&&gr>pi&&Xc.push("'"+this.terminals_[gr]+"'");Nn.showPosition?Er="Parse error on line "+(ki+1)+`: -`+Nn.showPosition()+` -Expecting `+Xc.join(", ")+", got '"+(this.terminals_[Xi]||Xi)+"'":Er="Parse error on line "+(ki+1)+": Unexpected "+(Xi==bi?"end of input":"'"+(this.terminals_[Xi]||Xi)+"'"),this.parseError(Er,{text:Nn.match,token:this.terminals_[Xi]||Xi,line:Nn.yylineno,loc:is,expected:Xc})}if(_r[0]instanceof Array&&_r.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ga+", token: "+Xi);switch(_r[0]){case 1:fn.push(Xi),Mi.push(Nn.yytext),qt.push(Nn.yylloc),fn.push(_r[1]),Xi=null,Ri=Nn.yyleng,Se=Nn.yytext,ki=Nn.yylineno,is=Nn.yylloc;break;case 2:if(Js=this.productions_[_r[1]][1],Oi.$=Mi[Mi.length-Js],Oi._$={first_line:qt[qt.length-(Js||1)].first_line,last_line:qt[qt.length-1].last_line,first_column:qt[qt.length-(Js||1)].first_column,last_column:qt[qt.length-1].last_column},Ts&&(Oi._$.range=[qt[qt.length-(Js||1)].range[0],qt[qt.length-1].range[1]]),qr=this.performAction.apply(Oi,[Se,Ri,ki,Wr.yy,_r[1],Mi,qt].concat(dn)),typeof qr<"u")return qr;Js&&(fn=fn.slice(0,-1*Js*2),Mi=Mi.slice(0,-1*Js),qt=qt.slice(0,-1*Js)),fn.push(this.productions_[_r[1]][0]),Mi.push(Oi.$),qt.push(Oi._$),Vn=zi[fn[fn.length-2]][fn[fn.length-1]],fn.push(Vn);break;case 3:return!0}}return!0}},Ee=function(){var Ce={EOF:1,parseError:function(ye,fn){if(this.yy.parser)this.yy.parser.parseError(ye,fn);else throw new Error(ye)},setInput:function($e,ye){return this.yy=ye||this.yy||{},this._input=$e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var $e=this._input[0];this.yytext+=$e,this.yyleng++,this.offset++,this.match+=$e,this.matched+=$e;var ye=$e.match(/(?:\r\n?|\n).*/g);return ye?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),$e},unput:function($e){var ye=$e.length,fn=$e.split(/(?:\r\n?|\n)/g);this._input=$e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ye),this.offset-=ye;var Yt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),fn.length-1&&(this.yylineno-=fn.length-1);var Mi=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:fn?(fn.length===Yt.length?this.yylloc.first_column:0)+Yt[Yt.length-fn.length].length-fn[0].length:this.yylloc.first_column-ye},this.options.ranges&&(this.yylloc.range=[Mi[0],Mi[0]+this.yyleng-ye]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function($e){this.unput(this.match.slice($e))},pastInput:function(){var $e=this.matched.substr(0,this.matched.length-this.match.length);return($e.length>20?"...":"")+$e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var $e=this.match;return $e.length<20&&($e+=this._input.substr(0,20-$e.length)),($e.substr(0,20)+($e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var $e=this.pastInput(),ye=new Array($e.length+1).join("-");return $e+this.upcomingInput()+` -`+ye+"^"},test_match:function($e,ye){var fn,Yt,Mi;if(this.options.backtrack_lexer&&(Mi={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Mi.yylloc.range=this.yylloc.range.slice(0))),Yt=$e[0].match(/(?:\r\n?|\n).*/g),Yt&&(this.yylineno+=Yt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Yt?Yt[Yt.length-1].length-Yt[Yt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+$e[0].length},this.yytext+=$e[0],this.match+=$e[0],this.matches=$e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice($e[0].length),this.matched+=$e[0],fn=this.performAction.call(this,this.yy,this,ye,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),fn)return fn;if(this._backtrack){for(var qt in Mi)this[qt]=Mi[qt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var $e,ye,fn,Yt;this._more||(this.yytext="",this.match="");for(var Mi=this._currentRules(),qt=0;qtye[0].length)){if(ye=fn,Yt=qt,this.options.backtrack_lexer){if($e=this.test_match(fn,Mi[qt]),$e!==!1)return $e;if(this._backtrack){ye=!1;continue}else return!1}else if(!this.options.flex)break}return ye?($e=this.test_match(ye,Mi[Yt]),$e!==!1?$e:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ye=this.next();return ye||this.lex()},begin:function(ye){this.conditionStack.push(ye)},popState:function(){var ye=this.conditionStack.length-1;return ye>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ye){return ye=this.conditionStack.length-1-Math.abs(ye||0),ye>=0?this.conditionStack[ye]:"INITIAL"},pushState:function(ye){this.begin(ye)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(ye,fn,Yt,Mi){switch(Yt){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:break;case 10:break;case 11:return this.begin("acc_title"),44;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),46;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 19:break;case 20:return 23;case 21:return 23;case 22:return"EDGE_STATE";case 23:this.begin("callback_name");break;case 24:this.popState();break;case 25:this.popState(),this.begin("callback_args");break;case 26:return 79;case 27:this.popState();break;case 28:return 80;case 29:this.popState();break;case 30:return"STR";case 31:this.begin("string");break;case 32:return this.begin("namespace"),53;case 33:return this.popState(),16;case 34:break;case 35:return this.begin("namespace-body"),50;case 36:return this.popState(),52;case 37:return"EOF_IN_STRUCT";case 38:return 16;case 39:break;case 40:return"EDGE_STATE";case 41:return this.begin("class"),57;case 42:return this.popState(),16;case 43:break;case 44:return this.popState(),this.popState(),52;case 45:return this.begin("class-body"),50;case 46:return this.popState(),52;case 47:return"EOF_IN_STRUCT";case 48:return"EDGE_STATE";case 49:return"OPEN_IN_STRUCT";case 50:break;case 51:return"MEMBER";case 52:return 82;case 53:return 75;case 54:return 76;case 55:return 78;case 56:return 63;case 57:return 65;case 58:return 58;case 59:return 59;case 60:return 81;case 61:this.popState();break;case 62:return"GENERICTYPE";case 63:this.begin("generic");break;case 64:this.popState();break;case 65:return"BQUOTE_STR";case 66:this.begin("bqstring");break;case 67:return 77;case 68:return 77;case 69:return 77;case 70:return 77;case 71:return 69;case 72:return 69;case 73:return 71;case 74:return 71;case 75:return 70;case 76:return 68;case 77:return 72;case 78:return 73;case 79:return 74;case 80:return 36;case 81:return 55;case 82:return 94;case 83:return"DOT";case 84:return"PLUS";case 85:return 91;case 86:return"EQUALS";case 87:return"EQUALS";case 88:return 98;case 89:return 27;case 90:return 29;case 91:return"PUNCTUATION";case 92:return 97;case 93:return 96;case 94:return 93;case 95:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[31,36,37,38,39,40,41,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},namespace:{rules:[31,32,33,34,35,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},"class-body":{rules:[31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},class:{rules:[31,42,43,44,45,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_descr_multiline:{rules:[16,17,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_descr:{rules:[14,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},acc_title:{rules:[12,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},arg_directive:{rules:[7,8,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},type_directive:{rules:[6,7,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},open_directive:{rules:[5,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},callback_args:{rules:[27,28,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},callback_name:{rules:[24,25,26,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},href:{rules:[31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},struct:{rules:[31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},generic:{rules:[31,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},bqstring:{rules:[31,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},string:{rules:[29,30,31,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,31,32,41,52,53,54,55,56,57,58,59,60,63,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],inclusive:!0}}};return Ce}();Ve.lexer=Ee;function He(){this.yy={}}return He.prototype=Ve,Ve.Parser=He,new He}();fgt.parser=fgt;const ARt=fgt,IK="classId-";let dgt=[],nh={},OK=[],LRt=0,lk={},ggt=0,BP=[];const N5=i=>ui.sanitizeText(i,De()),aVe=function(i,a,f){J1.parseDirective(this,i,a,f)},dL=function(i){let a="",f=i;if(i.indexOf("~")>0){const p=i.split("~");f=N5(p[0]),a=N5(p[1])}return{className:f,type:a}},oVe=function(i,a){a&&(a=N5(a));const{className:f}=dL(i);nh[f].label=a},pgt=function(i){const a=dL(i);nh[a.className]===void 0&&(nh[a.className]={id:a.className,type:a.type,label:a.className,cssClasses:[],methods:[],members:[],annotations:[],domId:IK+a.className+"-"+LRt},LRt++)},MRt=function(i){if(i in nh)return nh[i].domId;throw new Error("Class not found: "+i)},cVe=function(){dgt=[],nh={},OK=[],BP=[],BP.push(IRt),lk={},ggt=0,cg()},uVe=function(i){return nh[i]},lVe=function(){return nh},hVe=function(){return dgt},fVe=function(){return OK},dVe=function(i){Wt.debug("Adding relation: "+JSON.stringify(i)),pgt(i.id1),pgt(i.id2),i.id1=dL(i.id1).className,i.id2=dL(i.id2).className,i.relationTitle1=ui.sanitizeText(i.relationTitle1.trim(),De()),i.relationTitle2=ui.sanitizeText(i.relationTitle2.trim(),De()),dgt.push(i)},gVe=function(i,a){const f=dL(i).className;nh[f].annotations.push(a)},DRt=function(i,a){const f=dL(i).className,p=nh[f];if(typeof a=="string"){const v=a.trim();v.startsWith("<<")&&v.endsWith(">>")?p.annotations.push(N5(v.substring(2,v.length-2))):v.indexOf(")")>0?p.methods.push(N5(v)):v&&p.members.push(N5(v))}},pVe=function(i,a){Array.isArray(a)&&(a.reverse(),a.forEach(f=>DRt(i,f)))},bVe=function(i,a){const f={id:`note${OK.length}`,class:a,text:i};OK.push(f)},vVe=function(i){return i.startsWith(":")&&(i=i.substring(1)),N5(i.trim())},bgt=function(i,a){i.split(",").forEach(function(f){let p=f;f[0].match(/\d/)&&(p=IK+p),nh[p]!==void 0&&nh[p].cssClasses.push(a)})},wVe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(nh[f].tooltip=N5(a))})},mVe=function(i,a){return a?lk[a].classes[i].tooltip:nh[i].tooltip},yVe=function(i,a,f){const p=De();i.split(",").forEach(function(v){let m=v;v[0].match(/\d/)&&(m=IK+m),nh[m]!==void 0&&(nh[m].link=to.formatUrl(a,p),p.securityLevel==="sandbox"?nh[m].linkTarget="_top":typeof f=="string"?nh[m].linkTarget=N5(f):nh[m].linkTarget="_blank")}),bgt(i,"clickable")},xVe=function(i,a,f){i.split(",").forEach(function(p){kVe(p,a,f),nh[p].haveCallback=!0}),bgt(i,"clickable")},kVe=function(i,a,f){if(De().securityLevel!=="loose"||a===void 0)return;const v=i;if(nh[v]!==void 0){const m=MRt(v);let b=[];if(typeof f=="string"){b=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let E=0;E")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),xr(this).classed("hover",!1)})};BP.push(IRt);let ORt="TB";const NK={parseDirective:aVe,setAccTitle:m0,getAccTitle:ug,getAccDescription:hg,setAccDescription:lg,getConfig:()=>De().class,addClass:pgt,bindFunctions:EVe,clear:cVe,getClass:uVe,getClasses:lVe,getNotes:fVe,addAnnotation:gVe,addNote:bVe,getRelations:hVe,addRelation:dVe,getDirection:()=>ORt,setDirection:i=>{ORt=i},addMember:DRt,addMembers:pVe,cleanupLabel:vVe,lineType:TVe,relationType:_Ve,setClickEvent:xVe,setCssClass:bgt,setLink:yVe,getTooltip:mVe,setTooltip:wVe,lookUpDomId:MRt,setDiagramTitle:Nb,getDiagramTitle:hp,setClassLabel:oVe,addNamespace:function(i){lk[i]===void 0&&(lk[i]={id:i,classes:{},children:{},domId:IK+i+"-"+ggt},ggt++)},addClassesToNamespace:function(i,a){lk[i]!==void 0&&a.map(f=>{nh[f].parent=i,lk[i].classes[f]=nh[f]})},getNamespace:function(i){return lk[i]},getNamespaces:function(){return lk}},NRt=i=>`g.classGroup text { +`,ET=18*2,hgt=function(i,a){return HW(i,a)},wRt=(i,a)=>{WSe(()=>{const f=document.querySelectorAll(i);f.length!==0&&(f[0].addEventListener("mouseover",function(){LHe("actor"+a+"_popup")}),f[0].addEventListener("mouseout",function(){MHe("actor"+a+"_popup")}))})},_He=function(i,a,f,p,v){if(a.links===void 0||a.links===null||Object.keys(a.links).length===0)return{height:0,width:0};const m=a.links,b=a.actorCnt,E=a.rectData;var _="none";v&&(_="block !important");const L=i.append("g");L.attr("id","actor"+b+"_popup"),L.attr("class","actorPopupMenu"),L.attr("display",_),wRt("#actor"+b+"_popup",b);var N="";E.class!==void 0&&(N=" "+E.class);let B=E.width>f?E.width:f;const j=L.append("rect");if(j.attr("class","actorPopupMenuPanel"+N),j.attr("x",E.x),j.attr("y",E.height),j.attr("fill",E.fill),j.attr("stroke",E.stroke),j.attr("width",B),j.attr("height",E.height),j.attr("rx",E.rx),j.attr("ry",E.ry),m!=null){var R=20;for(let it in m){var z=L.append("a"),K=Q6(m[it]);z.attr("xlink:href",K),z.attr("target","_blank"),UHe(p)(it,z,E.x+10,E.height+R,B,20,{class:"actor"},p),R+=30}}return j.attr("height",R),{height:E.height+R,width:B}},SHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'block'; }"},AHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'none'; }"},LHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="block")},MHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="none")},lL=function(i,a){let f=0,p=0;const v=a.text.split(Yr.lineBreakRegex),[m,b]=$A(a.fontSize);let E=[],_=0,L=()=>a.y;if(a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0)switch(a.valign){case"top":case"start":L=()=>Math.round(a.y+a.textMargin);break;case"middle":case"center":L=()=>Math.round(a.y+(f+p+a.textMargin)/2);break;case"bottom":case"end":L=()=>Math.round(a.y+(f+p+2*a.textMargin)-a.textMargin);break}if(a.anchor!==void 0&&a.textMargin!==void 0&&a.width!==void 0)switch(a.anchor){case"left":case"start":a.x=Math.round(a.x+a.textMargin),a.anchor="start",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"middle":case"center":a.x=Math.round(a.x+a.width/2),a.anchor="middle",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"right":case"end":a.x=Math.round(a.x+a.width-a.textMargin),a.anchor="end",a.dominantBaseline="middle",a.alignmentBaseline="middle";break}for(let[N,B]of v.entries()){a.textMargin!==void 0&&a.textMargin===0&&m!==void 0&&(_=N*m);const j=i.append("text");j.attr("x",a.x),j.attr("y",L()),a.anchor!==void 0&&j.attr("text-anchor",a.anchor).attr("dominant-baseline",a.dominantBaseline).attr("alignment-baseline",a.alignmentBaseline),a.fontFamily!==void 0&&j.style("font-family",a.fontFamily),b!==void 0&&j.style("font-size",b),a.fontWeight!==void 0&&j.style("font-weight",a.fontWeight),a.fill!==void 0&&j.attr("fill",a.fill),a.class!==void 0&&j.attr("class",a.class),a.dy!==void 0?j.attr("dy",a.dy):_!==0&&j.attr("dy",_);const R=B||RDt;if(a.tspan){const z=j.append("tspan");z.attr("x",a.x),a.fill!==void 0&&z.attr("fill",a.fill),z.text(R)}else j.text(R);a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0&&(p+=(j._groups||j)[0][0].getBBox().height,f=p),E.push(j)}return E},mRt=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");return p.attr("points",f(a.x,a.y,a.width,a.height,7)),p.attr("class","labelBox"),a.y=a.y+a.height/2,lL(i,a),p};let hm=-1;const yRt=(i,a,f,p)=>{i.select&&f.forEach(v=>{const m=a[v],b=i.select("#actor"+m.actorCnt);!p.mirrorActors&&m.stopy?b.attr("y2",m.stopy+m.height/2):p.mirrorActors&&b.attr("y2",m.stopy)})},IHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+5,E=i.append("g").lower();var _=E;p||(hm++,_.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),_=E.append("g"),a.actorCnt=hm,a.links!=null&&(_.attr("id","root-"+hm),wRt("#root-"+hm,hm)));const L=fT();var N="actor";a.properties!=null&&a.properties.class?N=a.properties.class:L.fill="#eaeaea",L.x=a.x,L.y=v,L.width=a.width,L.height=a.height,L.class=N,L.rx=3,L.ry=3;const B=hgt(_,L);if(a.rectData=L,a.properties!=null&&a.properties.icon){const R=a.properties.icon.trim();R.charAt(0)==="@"?pIe(_,L.x+L.width-20,L.y+10,R.substr(1)):gIe(_,L.x+L.width-20,L.y+10,R)}fgt(f)(a.description,_,L.x,L.y,L.width,L.height,{class:"actor"},f);let j=a.height;if(B.node){const R=B.node().getBBox();a.height=R.height,j=R.height}return j},DHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+80;i.lower(),p||(hm++,i.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),a.actorCnt=hm);const E=i.append("g");E.attr("class","actor-man");const _=fT();_.x=a.x,_.y=v,_.fill="#eaeaea",_.width=a.width,_.height=a.height,_.class="actor",_.rx=3,_.ry=3,E.append("line").attr("id","actor-man-torso"+hm).attr("x1",m).attr("y1",v+25).attr("x2",m).attr("y2",v+45),E.append("line").attr("id","actor-man-arms"+hm).attr("x1",m-ET/2).attr("y1",v+33).attr("x2",m+ET/2).attr("y2",v+33),E.append("line").attr("x1",m-ET/2).attr("y1",v+60).attr("x2",m).attr("y2",v+45),E.append("line").attr("x1",m).attr("y1",v+45).attr("x2",m+ET/2-2).attr("y2",v+60);const L=E.append("circle");L.attr("cx",a.x+a.width/2),L.attr("cy",v+10),L.attr("r",15),L.attr("width",a.width),L.attr("height",a.height);const N=E.node().getBBox();return a.height=N.height,fgt(f)(a.description,E,_.x,_.y+35,_.width,_.height,{class:"actor"},f),a.height},OHe=function(i,a,f,p){switch(a.type){case"actor":return DHe(i,a,f,p);case"participant":return IHe(i,a,f,p)}},NHe=function(i,a,f){const v=i.append("g");xRt(v,a),a.name&&fgt(f)(a.name,v,a.x,a.y+(a.textMaxHeight||0)/2,a.width,0,{class:"text"},f),v.lower()},PHe=function(i){return i.append("g")},FHe=function(i,a,f,p,v){const m=fT(),b=a.anchored;m.x=a.startx,m.y=a.starty,m.class="activation"+v%3,m.width=a.stopx-a.startx,m.height=f-a.starty,hgt(b,m)},BHe=function(i,a,f,p){const{boxMargin:v,boxTextMargin:m,labelBoxHeight:b,labelBoxWidth:E,messageFontFamily:_,messageFontSize:L,messageFontWeight:N}=p,B=i.append("g"),j=function(K,it,st,ut){return B.append("line").attr("x1",K).attr("y1",it).attr("x2",st).attr("y2",ut).attr("class","loopLine")};j(a.startx,a.starty,a.stopx,a.starty),j(a.stopx,a.starty,a.stopx,a.stopy),j(a.startx,a.stopy,a.stopx,a.stopy),j(a.startx,a.starty,a.startx,a.stopy),a.sections!==void 0&&a.sections.forEach(function(K){j(a.startx,K.y,a.stopx,K.y).style("stroke-dasharray","3, 3")});let R=Pdt();R.text=f,R.x=a.startx,R.y=a.starty,R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.anchor="middle",R.valign="middle",R.tspan=!1,R.width=E||50,R.height=b||20,R.textMargin=m,R.class="labelText",mRt(B,R),R=kRt(),R.text=a.title,R.x=a.startx+E/2+(a.stopx-a.startx)/2,R.y=a.starty+v+m,R.anchor="middle",R.valign="middle",R.textMargin=m,R.class="loopText",R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.wrap=!0;let z=lL(B,R);return a.sectionTitles!==void 0&&a.sectionTitles.forEach(function(K,it){if(K.message){R.text=K.message,R.x=a.startx+(a.stopx-a.startx)/2,R.y=a.sections[it].y+v+m,R.class="loopText",R.anchor="middle",R.valign="middle",R.tspan=!1,R.fontFamily=_,R.fontSize=L,R.fontWeight=N,R.wrap=a.wrap,z=lL(B,R);let st=Math.round(z.map(ut=>(ut._groups||ut)[0][0].getBBox().height).reduce((ut,bt)=>ut+bt));a.sections[it].height+=st-(v+m)}}),a.height=Math.round(a.stopy-a.starty),B},xRt=function(i,a){bNt(i,a)},RHe=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},jHe=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},$He=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},zHe=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},qHe=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},HHe=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},GHe=function(i){i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},kRt=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},VHe=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},fgt=function(){function i(v,m,b,E,_,L,N){const B=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("text-anchor","middle").text(v);p(B,N)}function a(v,m,b,E,_,L,N,B){const{actorFontSize:j,actorFontFamily:R,actorFontWeight:z}=B,[K,it]=$A(j),st=v.split(Yr.lineBreakRegex);for(let ut=0;uti.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,a)=>i+a))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,a)=>i+a))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,TRt(Le())},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=this;let m=0;function b(E){return function(L){m++;const N=v.sequenceItems.length-m+1;v.updateVal(L,"starty",a-N*fn.boxMargin,Math.min),v.updateVal(L,"stopy",p+N*fn.boxMargin,Math.max),v.updateVal(Pr.data,"startx",i-N*fn.boxMargin,Math.min),v.updateVal(Pr.data,"stopx",f+N*fn.boxMargin,Math.max),E!=="activation"&&(v.updateVal(L,"startx",i-N*fn.boxMargin,Math.min),v.updateVal(L,"stopx",f+N*fn.boxMargin,Math.max),v.updateVal(Pr.data,"starty",a-N*fn.boxMargin,Math.min),v.updateVal(Pr.data,"stopy",p+N*fn.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,a,f,p){const v=Yr.getMin(i,f),m=Yr.getMax(i,f),b=Yr.getMin(a,p),E=Yr.getMax(a,p);this.updateVal(Pr.data,"startx",v,Math.min),this.updateVal(Pr.data,"starty",b,Math.min),this.updateVal(Pr.data,"stopx",m,Math.max),this.updateVal(Pr.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},newActivation:function(i,a,f){const p=f[i.from.actor],v=AK(i.from.actor).length||0,m=p.x+p.width/2+(v-1)*fn.activationWidth/2;this.activations.push({startx:m,starty:this.verticalPos+2,stopx:m+fn.activationWidth,stopy:void 0,actor:i.from.actor,anchored:Jh.anchorElement(a)})},endActivation:function(i){const a=this.activations.map(function(f){return f.actor}).lastIndexOf(i.from.actor);return this.activations.splice(a,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},a){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:a}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},a){this.sequenceItems.push(this.createLoop(i,a))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const a=this.sequenceItems.pop();a.sections=a.sections||[],a.sectionTitles=a.sectionTitles||[],a.sections.push({y:Pr.getVerticalPos(),height:0}),a.sectionTitles.push(i),this.sequenceItems.push(a)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=Yr.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},WHe=function(i,a){Pr.bumpVerticalPos(fn.boxMargin),a.height=fn.boxMargin,a.starty=Pr.getVerticalPos();const f=fT();f.x=a.startx,f.y=a.starty,f.width=a.width||fn.width,f.class="note";const p=i.append("g"),v=Jh.drawRect(p,f),m=Pdt();m.x=a.startx,m.y=a.starty,m.width=f.width,m.dy="1em",m.text=a.message,m.class="noteText",m.fontFamily=fn.noteFontFamily,m.fontSize=fn.noteFontSize,m.fontWeight=fn.noteFontWeight,m.anchor=fn.noteAlign,m.textMargin=fn.noteMargin,m.valign="center";const b=lL(p,m),E=Math.round(b.map(_=>(_._groups||_)[0][0].getBBox().height).reduce((_,L)=>_+L));v.attr("height",E+2*fn.noteMargin),a.height+=E+2*fn.noteMargin,Pr.bumpVerticalPos(E+2*fn.noteMargin),a.stopy=a.starty+E+2*fn.noteMargin,a.stopx=a.startx+f.width,Pr.insert(a.startx,a.starty,a.stopx,a.stopy),Pr.models.addNote(a)},TT=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),hL=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),dgt=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});function KHe(i,a){Pr.bumpVerticalPos(10);const{startx:f,stopx:p,message:v}=a,m=Yr.splitBreaks(v).length,b=$a.calculateTextDimensions(v,TT(fn)),E=b.height/m;a.height+=E,Pr.bumpVerticalPos(E);let _,L=b.height-10;const N=b.width;if(f===p){_=Pr.getVerticalPos()+L,fn.rightAngles||(L+=fn.boxMargin,_=Pr.getVerticalPos()+L),L+=30;const B=Yr.getMax(N/2,fn.width/2);Pr.insert(f-B,Pr.getVerticalPos()-10+L,p+B,Pr.getVerticalPos()+30+L)}else L+=fn.boxMargin,_=Pr.getVerticalPos()+L,Pr.insert(f,_-10,p,_);return Pr.bumpVerticalPos(L),a.height+=L,a.stopy=a.starty+a.height,Pr.insert(a.fromBounds,a.starty,a.toBounds,a.stopy),_}const YHe=function(i,a,f,p){const{startx:v,stopx:m,starty:b,message:E,type:_,sequenceIndex:L,sequenceVisible:N}=a,B=$a.calculateTextDimensions(E,TT(fn)),j=Pdt();j.x=v,j.y=b+10,j.width=m-v,j.class="messageText",j.dy="1em",j.text=E,j.fontFamily=fn.messageFontFamily,j.fontSize=fn.messageFontSize,j.fontWeight=fn.messageFontWeight,j.anchor=fn.messageAlign,j.valign="center",j.textMargin=fn.wrapPadding,j.tspan=!1,lL(i,j);const R=B.width;let z;v===m?fn.rightAngles?z=i.append("path").attr("d",`M ${v},${f} H ${v+Yr.getMax(fn.width/2,R/2)} V ${f+25} H ${v}`):z=i.append("path").attr("d","M "+v+","+f+" C "+(v+60)+","+(f-10)+" "+(v+60)+","+(f+30)+" "+v+","+(f+20)):(z=i.append("line"),z.attr("x1",v),z.attr("y1",f),z.attr("x2",m),z.attr("y2",f)),_===p.db.LINETYPE.DOTTED||_===p.db.LINETYPE.DOTTED_CROSS||_===p.db.LINETYPE.DOTTED_POINT||_===p.db.LINETYPE.DOTTED_OPEN?(z.style("stroke-dasharray","3, 3"),z.attr("class","messageLine1")):z.attr("class","messageLine0");let K="";fn.arrowMarkerAbsolute&&(K=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,K=K.replace(/\(/g,"\\("),K=K.replace(/\)/g,"\\)")),z.attr("stroke-width",2),z.attr("stroke","none"),z.style("fill","none"),(_===p.db.LINETYPE.SOLID||_===p.db.LINETYPE.DOTTED)&&z.attr("marker-end","url("+K+"#arrowhead)"),(_===p.db.LINETYPE.SOLID_POINT||_===p.db.LINETYPE.DOTTED_POINT)&&z.attr("marker-end","url("+K+"#filled-head)"),(_===p.db.LINETYPE.SOLID_CROSS||_===p.db.LINETYPE.DOTTED_CROSS)&&z.attr("marker-end","url("+K+"#crosshead)"),(N||fn.showSequenceNumbers)&&(z.attr("marker-start","url("+K+"#sequencenumber)"),i.append("text").attr("x",v).attr("y",f+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(L))},XHe=function(i,a,f,p,v,m,b){let E=0,_=0,L,N=0;for(const B of p){const j=a[B],R=j.box;L&&L!=R&&(b||Pr.models.addBox(L),_+=fn.boxMargin+L.margin),R&&R!=L&&(b||(R.x=E+_,R.y=v),_+=R.margin),j.width=j.width||fn.width,j.height=Yr.getMax(j.height||fn.height,fn.height),j.margin=j.margin||fn.actorMargin,N=Yr.getMax(N,j.height),f[j.name]&&(_+=j.width/2),j.x=E+_,j.starty=Pr.getVerticalPos(),Pr.insert(j.x,v,j.x+j.width,j.height),E+=j.width+_,j.box&&(j.box.width=E+R.margin-j.box.x),_=j.margin,L=j.box,Pr.models.addActor(j)}L&&!b&&Pr.models.addBox(L),Pr.bumpVerticalPos(N)},ggt=function(i,a,f,p){if(p){let v=0;Pr.bumpVerticalPos(fn.boxMargin*2);for(const m of f){const b=a[m];b.stopy||(b.stopy=Pr.getVerticalPos());const E=Jh.drawActor(i,b,fn,!0);v=Yr.getMax(v,E)}Pr.bumpVerticalPos(v+fn.boxMargin)}else for(const v of f){const m=a[v];Jh.drawActor(i,m,fn,!1)}},ERt=function(i,a,f,p){let v=0,m=0;for(const b of f){const E=a[b],_=tGe(E),L=Jh.drawPopup(i,E,_,fn,fn.forceMenus,p);L.height>v&&(v=L.height),L.width+E.x>m&&(m=L.width+E.x)}return{maxHeight:v,maxWidth:m}},TRt=function(i){Y1(fn,i),i.fontFamily&&(fn.actorFontFamily=fn.noteFontFamily=fn.messageFontFamily=i.fontFamily),i.fontSize&&(fn.actorFontSize=fn.noteFontSize=fn.messageFontSize=i.fontSize),i.fontWeight&&(fn.actorFontWeight=fn.noteFontWeight=fn.messageFontWeight=i.fontWeight)},AK=function(i){return Pr.activations.filter(function(a){return a.actor===i})},CRt=function(i,a){const f=a[i],p=AK(i),v=p.reduce(function(b,E){return Yr.getMin(b,E.startx)},f.x+f.width/2-1),m=p.reduce(function(b,E){return Yr.getMax(b,E.stopx)},f.x+f.width/2+1);return[v,m]};function y3(i,a,f,p,v){Pr.bumpVerticalPos(f);let m=p;if(a.id&&a.message&&i[a.id]){const b=i[a.id].width,E=TT(fn);a.message=$a.wrapLabel(`[${a.message}]`,b-2*fn.wrapPadding,E),a.width=b,a.wrap=!0;const _=$a.calculateTextDimensions(a.message,E),L=Yr.getMax(_.height,fn.labelBoxHeight);m=p+L,Ut.debug(`${L} - ${a.message}`)}v(a),Pr.bumpVerticalPos(m)}function QHe(i,a,f,p,v,m,b){function E(L,N){L.x{Ct.add(Z.from),Ct.add(Z.to)}),z=z.filter(Z=>Ct.has(Z))}XHe(L,N,B,z,0,K,!1);const mt=iGe(K,N,bt,p);Jh.insertArrowHead(L),Jh.insertArrowCrossHead(L),Jh.insertArrowFilledHead(L),Jh.insertSequenceNumber(L);function yt(Ct,Z){const Tt=Pr.endActivation(Ct);Tt.starty+18>Z&&(Tt.starty=Z-6,Z+=12),Jh.drawActivation(L,Tt,Z,fn,AK(Ct.from.actor).length),Pr.insert(Tt.startx,Z-10,Tt.stopx,Z)}let dt=1,ht=1;const wt=[],X=[];K.forEach(function(Ct,Z){let Tt,Ht,It;switch(Ct.type){case p.db.LINETYPE.NOTE:Pr.resetVerticalPos(),Ht=Ct.noteModel,WHe(L,Ht);break;case p.db.LINETYPE.ACTIVE_START:Pr.newActivation(Ct,L,N);break;case p.db.LINETYPE.ACTIVE_END:yt(Ct,Pr.getVerticalPos());break;case p.db.LINETYPE.LOOP_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.LOOP_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"loop",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.RECT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin,Ft=>Pr.newLoop(void 0,Ft.message));break;case p.db.LINETYPE.RECT_END:Tt=Pr.endLoop(),X.push(Tt),Pr.models.addLoop(Tt),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos());break;case p.db.LINETYPE.OPT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.OPT_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"opt",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.ALT_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.ALT_ELSE:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.ALT_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"alt",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft)),Pr.saveVerticalPos();break;case p.db.LINETYPE.PAR_AND:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.PAR_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"par",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.AUTONUMBER:dt=Ct.message.start||dt,ht=Ct.message.step||ht,Ct.message.visible?p.db.enableSequenceNumbers():p.db.disableSequenceNumbers();break;case p.db.LINETYPE.CRITICAL_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.CRITICAL_OPTION:y3(mt,Ct,fn.boxMargin+fn.boxTextMargin,fn.boxMargin,Ft=>Pr.addSectionToLoop(Ft));break;case p.db.LINETYPE.CRITICAL_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"critical",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;case p.db.LINETYPE.BREAK_START:y3(mt,Ct,fn.boxMargin,fn.boxMargin+fn.boxTextMargin,Ft=>Pr.newLoop(Ft));break;case p.db.LINETYPE.BREAK_END:Tt=Pr.endLoop(),Jh.drawLoop(L,Tt,"break",fn),Pr.bumpVerticalPos(Tt.stopy-Pr.getVerticalPos()),Pr.models.addLoop(Tt);break;default:try{It=Ct.msgModel,It.starty=Pr.getVerticalPos(),It.sequenceIndex=dt,It.sequenceVisible=p.db.showSequenceNumbers();const Ft=KHe(L,It);QHe(Ct,It,Ft,Z,N,B,j),wt.push({messageModel:It,lineStartY:Ft}),Pr.models.addMessage(It)}catch(Ft){Ut.error("error while drawing message",Ft)}}[p.db.LINETYPE.SOLID_OPEN,p.db.LINETYPE.DOTTED_OPEN,p.db.LINETYPE.SOLID,p.db.LINETYPE.DOTTED,p.db.LINETYPE.SOLID_CROSS,p.db.LINETYPE.DOTTED_CROSS,p.db.LINETYPE.SOLID_POINT,p.db.LINETYPE.DOTTED_POINT].includes(Ct.type)&&(dt=dt+ht)}),Ut.debug("createdActors",B),Ut.debug("destroyedActors",j),ggt(L,N,z,!1),wt.forEach(Ct=>YHe(L,Ct.messageModel,Ct.lineStartY,p)),fn.mirrorActors&&ggt(L,N,z,!0),X.forEach(Ct=>Jh.drawBackgroundRect(L,Ct)),yRt(L,N,z,fn),Pr.models.boxes.forEach(function(Ct){Ct.height=Pr.getVerticalPos()-Ct.y,Pr.insert(Ct.x,Ct.y,Ct.x+Ct.width,Ct.height),Ct.startx=Ct.x,Ct.starty=Ct.y,Ct.stopx=Ct.startx+Ct.width,Ct.stopy=Ct.starty+Ct.height,Ct.stroke="rgb(0,0,0, 0.5)",Jh.drawBox(L,Ct,fn)}),st&&Pr.bumpVerticalPos(fn.boxMargin);const pt=ERt(L,N,z,_),{bounds:U}=Pr.getBounds();let xt=U.stopy-U.starty;xt{const b=i[m];b.wrap&&(b.description=$a.wrapLabel(b.description,fn.width-2*fn.wrapPadding,dgt(fn)));const E=$a.calculateTextDimensions(b.description,dgt(fn));b.width=b.wrap?fn.width:Yr.getMax(fn.width,E.width+2*fn.wrapPadding),b.height=b.wrap?Yr.getMax(E.height,fn.height):fn.height,p=Yr.getMax(p,b.height)});for(const m in a){const b=i[m];if(!b)continue;const E=i[b.nextActor];if(!E){const B=a[m]+fn.actorMargin-b.width/2;b.margin=Yr.getMax(B,fn.actorMargin);continue}const L=a[m]+fn.actorMargin-b.width/2-E.width/2;b.margin=Yr.getMax(L,fn.actorMargin)}let v=0;return f.forEach(m=>{const b=TT(fn);let E=m.actorKeys.reduce((N,B)=>N+=i[B].width+(i[B].margin||0),0);E-=2*fn.boxTextMargin,m.wrap&&(m.name=$a.wrapLabel(m.name,E-2*fn.wrapPadding,b));const _=$a.calculateTextDimensions(m.name,b);v=Yr.getMax(_.height,v);const L=Yr.getMax(E,_.width+2*fn.wrapPadding);if(m.margin=fn.boxTextMargin,Em.textMaxHeight=v),Yr.getMax(p,fn.height)}const nGe=function(i,a,f){const p=a[i.from].x,v=a[i.to].x,m=i.wrap&&i.message;let b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,fn.width,hL(fn)):i.message,hL(fn));const E={width:m?fn.width:Yr.getMax(fn.width,b.width+2*fn.noteMargin),height:0,startx:a[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===f.db.PLACEMENT.RIGHTOF?(E.width=m?Yr.getMax(fn.width,b.width):Yr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width+fn.actorMargin)/2):i.placement===f.db.PLACEMENT.LEFTOF?(E.width=m?Yr.getMax(fn.width,b.width+2*fn.noteMargin):Yr.getMax(a[i.from].width/2+a[i.to].width/2,b.width+2*fn.noteMargin),E.startx=p-E.width+(a[i.from].width-fn.actorMargin)/2):i.to===i.from?(b=$a.calculateTextDimensions(m?$a.wrapLabel(i.message,Yr.getMax(fn.width,a[i.from].width),hL(fn)):i.message,hL(fn)),E.width=m?Yr.getMax(fn.width,a[i.from].width):Yr.getMax(a[i.from].width,fn.width,b.width+2*fn.noteMargin),E.startx=p+(a[i.from].width-E.width)/2):(E.width=Math.abs(p+a[i.from].width/2-(v+a[i.to].width/2))+fn.actorMargin,E.startx=p2,B=K=>E?-K:K;i.from===i.to?L=_:(i.activate&&!N&&(L+=B(fn.activationWidth/2-1)),[f.db.LINETYPE.SOLID_OPEN,f.db.LINETYPE.DOTTED_OPEN].includes(i.type)||(L+=B(3)));const j=[p,v,m,b],R=Math.abs(_-L);i.wrap&&i.message&&(i.message=$a.wrapLabel(i.message,Yr.getMax(R+2*fn.wrapPadding,fn.width),TT(fn)));const z=$a.calculateTextDimensions(i.message,TT(fn));return{width:Yr.getMax(i.wrap?0:z.width+2*fn.wrapPadding,R+2*fn.wrapPadding,fn.width),height:0,startx:_,stopx:L,starty:0,stopy:0,message:i.message,type:i.type,wrap:i.wrap,fromBounds:Math.min.apply(null,j),toBounds:Math.max.apply(null,j)}},iGe=function(i,a,f,p){const v={},m=[];let b,E,_;return i.forEach(function(L){switch(L.id=$a.random({length:10}),L.type){case p.db.LINETYPE.LOOP_START:case p.db.LINETYPE.ALT_START:case p.db.LINETYPE.OPT_START:case p.db.LINETYPE.PAR_START:case p.db.LINETYPE.PAR_OVER_START:case p.db.LINETYPE.CRITICAL_START:case p.db.LINETYPE.BREAK_START:m.push({id:L.id,msg:L.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case p.db.LINETYPE.ALT_ELSE:case p.db.LINETYPE.PAR_AND:case p.db.LINETYPE.CRITICAL_OPTION:L.message&&(b=m.pop(),v[b.id]=b,v[L.id]=b,m.push(b));break;case p.db.LINETYPE.LOOP_END:case p.db.LINETYPE.ALT_END:case p.db.LINETYPE.OPT_END:case p.db.LINETYPE.PAR_END:case p.db.LINETYPE.CRITICAL_END:case p.db.LINETYPE.BREAK_END:b=m.pop(),v[b.id]=b;break;case p.db.LINETYPE.ACTIVE_START:{const B=a[L.from?L.from.actor:L.to.actor],j=AK(L.from?L.from.actor:L.to.actor).length,R=B.x+B.width/2+(j-1)*fn.activationWidth/2,z={startx:R,stopx:R+fn.activationWidth,actor:L.from.actor,enabled:!0};Pr.activations.push(z)}break;case p.db.LINETYPE.ACTIVE_END:{const B=Pr.activations.map(j=>j.actor).lastIndexOf(L.from.actor);delete Pr.activations.splice(B,1)[0]}break}L.placement!==void 0?(E=nGe(L,a,p),L.noteModel=E,m.forEach(B=>{b=B,b.from=Yr.getMin(b.from,E.startx),b.to=Yr.getMax(b.to,E.startx+E.width),b.width=Yr.getMax(b.width,Math.abs(b.from-b.to))-fn.labelBoxWidth})):(_=rGe(L,a,p),L.msgModel=_,_.startx&&_.stopx&&m.length>0&&m.forEach(B=>{if(b=B,_.startx===_.stopx){const j=a[L.from],R=a[L.to];b.from=Yr.getMin(j.x-_.width/2,j.x-j.width/2,b.from),b.to=Yr.getMax(R.x+_.width/2,R.x+j.width/2,b.to),b.width=Yr.getMax(b.width,Math.abs(b.to-b.from))-fn.labelBoxWidth}else b.from=Yr.getMin(_.startx,b.from),b.to=Yr.getMax(_.stopx,b.to),b.width=Yr.getMax(b.width,_.width)-fn.labelBoxWidth}))}),Pr.activations=[],Ut.debug("Loop type widths:",v),v},sGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:eHe,db:vRt,renderer:{bounds:Pr,drawActors:ggt,drawActorsPopup:ERt,setConf:TRt,draw:ZHe},styles:CHe,init:({wrap:i})=>{vRt.setWrap(i)}}},Symbol.toStringTag,{value:"Module"}));var pgt=function(){var i=function(_e,$t,re,ie){for(re=re||{},ie=_e.length;ie--;re[_e[ie]]=$t);return re},a=[1,16],f=[1,17],p=[1,18],v=[1,37],m=[1,38],b=[1,24],E=[1,22],_=[1,23],L=[1,29],N=[1,30],B=[1,31],j=[1,32],R=[1,33],z=[1,34],K=[1,25],it=[1,26],st=[1,27],ut=[1,28],bt=[1,42],mt=[1,39],yt=[1,40],dt=[1,41],ht=[1,43],wt=[1,9],X=[1,8,9],pt=[1,54],U=[1,55],xt=[1,56],nt=[1,57],Ot=[1,58],Nt=[1,59],qt=[1,60],Ct=[1,8,9,38],Z=[1,71],Tt=[1,8,9,12,13,21,36,38,41,58,59,60,61,62,63,64,69,71],Ht=[1,8,9,12,13,19,21,36,38,41,45,58,59,60,61,62,63,64,69,71,84,86,87,88,89],It=[13,84,86,87,88,89],Ft=[13,63,64,84,86,87,88,89],ke=[13,58,59,60,61,62,84,86,87,88,89],pn=[1,90],Me=[1,8,9,36,38,41],ve=[1,8,9,21],Ge={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,cssClassStatement:27,noteStatement:28,direction:29,acc_title:30,acc_title_value:31,acc_descr:32,acc_descr_value:33,acc_descr_multiline_value:34,namespaceIdentifier:35,STRUCT_START:36,classStatements:37,STRUCT_STOP:38,NAMESPACE:39,classIdentifier:40,STYLE_SEPARATOR:41,members:42,CLASS:43,ANNOTATION_START:44,ANNOTATION_END:45,MEMBER:46,SEPARATOR:47,relation:48,NOTE_FOR:49,noteText:50,NOTE:51,direction_tb:52,direction_bt:53,direction_rl:54,direction_lr:55,relationType:56,lineType:57,AGGREGATION:58,EXTENSION:59,COMPOSITION:60,DEPENDENCY:61,LOLLIPOP:62,LINE:63,DOTTED_LINE:64,CALLBACK:65,LINK:66,LINK_TARGET:67,CLICK:68,CALLBACK_NAME:69,CALLBACK_ARGS:70,HREF:71,CSSCLASS:72,commentToken:73,textToken:74,graphCodeTokens:75,textNoTagsToken:76,TAGSTART:77,TAGEND:78,"==":79,"--":80,PCT:81,DEFAULT:82,SPACE:83,MINUS:84,keywords:85,UNICODE_TEXT:86,NUM:87,ALPHA:88,BQUOTE_STR:89,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",30:"acc_title",31:"acc_title_value",32:"acc_descr",33:"acc_descr_value",34:"acc_descr_multiline_value",36:"STRUCT_START",38:"STRUCT_STOP",39:"NAMESPACE",41:"STYLE_SEPARATOR",43:"CLASS",44:"ANNOTATION_START",45:"ANNOTATION_END",46:"MEMBER",47:"SEPARATOR",49:"NOTE_FOR",51:"NOTE",52:"direction_tb",53:"direction_bt",54:"direction_rl",55:"direction_lr",58:"AGGREGATION",59:"EXTENSION",60:"COMPOSITION",61:"DEPENDENCY",62:"LOLLIPOP",63:"LINE",64:"DOTTED_LINE",65:"CALLBACK",66:"LINK",67:"LINK_TARGET",68:"CLICK",69:"CALLBACK_NAME",70:"CALLBACK_ARGS",71:"HREF",72:"CSSCLASS",75:"graphCodeTokens",77:"TAGSTART",78:"TAGEND",79:"==",80:"--",81:"PCT",82:"DEFAULT",83:"SPACE",84:"MINUS",85:"keywords",86:"UNICODE_TEXT",87:"NUM",88:"ALPHA",89:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[35,2],[37,1],[37,2],[37,3],[23,1],[23,3],[23,4],[23,6],[40,2],[40,3],[25,4],[42,1],[42,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[28,3],[28,2],[29,1],[29,1],[29,1],[29,1],[48,3],[48,2],[48,2],[48,1],[56,1],[56,1],[56,1],[56,1],[56,1],[57,1],[57,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[73,1],[73,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[74,1],[76,1],[76,1],[76,1],[76,1],[16,1],[16,1],[16,1],[16,1],[18,1],[50,1]],performAction:function($t,re,ie,Oe,oe,Ne,me){var cn=Ne.length-1;switch(oe){case 8:this.$=Ne[cn-1];break;case 9:case 11:case 12:this.$=Ne[cn];break;case 10:case 13:this.$=Ne[cn-1]+Ne[cn];break;case 14:case 15:this.$=Ne[cn-1]+"~"+Ne[cn]+"~";break;case 16:Oe.addRelation(Ne[cn]);break;case 17:Ne[cn-1].title=Oe.cleanupLabel(Ne[cn]),Oe.addRelation(Ne[cn-1]);break;case 26:this.$=Ne[cn].trim(),Oe.setAccTitle(this.$);break;case 27:case 28:this.$=Ne[cn].trim(),Oe.setAccDescription(this.$);break;case 29:Oe.addClassesToNamespace(Ne[cn-3],Ne[cn-1]);break;case 30:Oe.addClassesToNamespace(Ne[cn-4],Ne[cn-1]);break;case 31:this.$=Ne[cn],Oe.addNamespace(Ne[cn]);break;case 32:this.$=[Ne[cn]];break;case 33:this.$=[Ne[cn-1]];break;case 34:Ne[cn].unshift(Ne[cn-2]),this.$=Ne[cn];break;case 36:Oe.setCssClass(Ne[cn-2],Ne[cn]);break;case 37:Oe.addMembers(Ne[cn-3],Ne[cn-1]);break;case 38:Oe.setCssClass(Ne[cn-5],Ne[cn-3]),Oe.addMembers(Ne[cn-5],Ne[cn-1]);break;case 39:this.$=Ne[cn],Oe.addClass(Ne[cn]);break;case 40:this.$=Ne[cn-1],Oe.addClass(Ne[cn-1]),Oe.setClassLabel(Ne[cn-1],Ne[cn]);break;case 41:Oe.addAnnotation(Ne[cn],Ne[cn-2]);break;case 42:this.$=[Ne[cn]];break;case 43:Ne[cn].push(Ne[cn-1]),this.$=Ne[cn];break;case 44:break;case 45:Oe.addMember(Ne[cn-1],Oe.cleanupLabel(Ne[cn]));break;case 46:break;case 47:break;case 48:this.$={id1:Ne[cn-2],id2:Ne[cn],relation:Ne[cn-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:Ne[cn-3],id2:Ne[cn],relation:Ne[cn-1],relationTitle1:Ne[cn-2],relationTitle2:"none"};break;case 50:this.$={id1:Ne[cn-3],id2:Ne[cn],relation:Ne[cn-2],relationTitle1:"none",relationTitle2:Ne[cn-1]};break;case 51:this.$={id1:Ne[cn-4],id2:Ne[cn],relation:Ne[cn-2],relationTitle1:Ne[cn-3],relationTitle2:Ne[cn-1]};break;case 52:Oe.addNote(Ne[cn],Ne[cn-1]);break;case 53:Oe.addNote(Ne[cn]);break;case 54:Oe.setDirection("TB");break;case 55:Oe.setDirection("BT");break;case 56:Oe.setDirection("RL");break;case 57:Oe.setDirection("LR");break;case 58:this.$={type1:Ne[cn-2],type2:Ne[cn],lineType:Ne[cn-1]};break;case 59:this.$={type1:"none",type2:Ne[cn],lineType:Ne[cn-1]};break;case 60:this.$={type1:Ne[cn-1],type2:"none",lineType:Ne[cn]};break;case 61:this.$={type1:"none",type2:"none",lineType:Ne[cn]};break;case 62:this.$=Oe.relationType.AGGREGATION;break;case 63:this.$=Oe.relationType.EXTENSION;break;case 64:this.$=Oe.relationType.COMPOSITION;break;case 65:this.$=Oe.relationType.DEPENDENCY;break;case 66:this.$=Oe.relationType.LOLLIPOP;break;case 67:this.$=Oe.lineType.LINE;break;case 68:this.$=Oe.lineType.DOTTED_LINE;break;case 69:case 75:this.$=Ne[cn-2],Oe.setClickEvent(Ne[cn-1],Ne[cn]);break;case 70:case 76:this.$=Ne[cn-3],Oe.setClickEvent(Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-2],Ne[cn]);break;case 71:this.$=Ne[cn-2],Oe.setLink(Ne[cn-1],Ne[cn]);break;case 72:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn-1],Ne[cn]);break;case 73:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-2],Ne[cn]);break;case 74:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-2],Ne[cn]),Oe.setTooltip(Ne[cn-3],Ne[cn-1]);break;case 77:this.$=Ne[cn-3],Oe.setClickEvent(Ne[cn-2],Ne[cn-1],Ne[cn]);break;case 78:this.$=Ne[cn-4],Oe.setClickEvent(Ne[cn-3],Ne[cn-2],Ne[cn-1]),Oe.setTooltip(Ne[cn-3],Ne[cn]);break;case 79:this.$=Ne[cn-3],Oe.setLink(Ne[cn-2],Ne[cn]);break;case 80:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-1],Ne[cn]);break;case 81:this.$=Ne[cn-4],Oe.setLink(Ne[cn-3],Ne[cn-1]),Oe.setTooltip(Ne[cn-3],Ne[cn]);break;case 82:this.$=Ne[cn-5],Oe.setLink(Ne[cn-4],Ne[cn-2],Ne[cn]),Oe.setTooltip(Ne[cn-4],Ne[cn-1]);break;case 83:Oe.setCssClass(Ne[cn-1],Ne[cn]);break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:v,40:21,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(wt,[2,5],{8:[1,44]}),{8:[1,45]},i(X,[2,16],{21:[1,46]}),i(X,[2,18]),i(X,[2,19]),i(X,[2,20]),i(X,[2,21]),i(X,[2,22]),i(X,[2,23]),i(X,[2,24]),i(X,[2,25]),{31:[1,47]},{33:[1,48]},i(X,[2,28]),i(X,[2,44],{48:49,56:52,57:53,13:[1,50],21:[1,51],58:pt,59:U,60:xt,61:nt,62:Ot,63:Nt,64:qt}),{36:[1,61]},i(Ct,[2,35],{36:[1,63],41:[1,62]}),i(X,[2,46]),i(X,[2,47]),{16:64,84:bt,86:mt,87:yt,88:dt},{16:35,17:65,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{16:35,17:66,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{16:35,17:67,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:[1,68]},{16:35,17:69,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:Z,50:70},i(X,[2,54]),i(X,[2,55]),i(X,[2,56]),i(X,[2,57]),i(Tt,[2,11],{16:35,18:36,17:72,19:[1,73],84:bt,86:mt,87:yt,88:dt,89:ht}),i(Tt,[2,12],{19:[1,74]}),{15:75,16:76,84:bt,86:mt,87:yt,88:dt},{16:35,17:77,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(Ht,[2,97]),i(Ht,[2,98]),i(Ht,[2,99]),i(Ht,[2,100]),i([1,8,9,12,13,19,21,36,38,41,58,59,60,61,62,63,64,69,71],[2,101]),i(wt,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,17:19,35:20,40:21,16:35,18:36,5:78,30:a,32:f,34:p,39:v,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht}),{5:79,10:5,16:35,17:19,18:36,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:a,32:f,34:p,35:20,39:v,40:21,43:m,44:b,46:E,47:_,49:L,51:N,52:B,53:j,54:R,55:z,65:K,66:it,68:st,72:ut,84:bt,86:mt,87:yt,88:dt,89:ht},i(X,[2,17]),i(X,[2,26]),i(X,[2,27]),{13:[1,81],16:35,17:80,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{48:82,56:52,57:53,58:pt,59:U,60:xt,61:nt,62:Ot,63:Nt,64:qt},i(X,[2,45]),{57:83,63:Nt,64:qt},i(It,[2,61],{56:84,58:pt,59:U,60:xt,61:nt,62:Ot}),i(Ft,[2,62]),i(Ft,[2,63]),i(Ft,[2,64]),i(Ft,[2,65]),i(Ft,[2,66]),i(ke,[2,67]),i(ke,[2,68]),{8:[1,86],23:87,37:85,40:21,43:m},{16:88,84:bt,86:mt,87:yt,88:dt},{42:89,46:pn},{45:[1,91]},{13:[1,92]},{13:[1,93]},{69:[1,94],71:[1,95]},{16:96,84:bt,86:mt,87:yt,88:dt},{13:Z,50:97},i(X,[2,53]),i(X,[2,102]),i(Tt,[2,13]),i(Tt,[2,14]),i(Tt,[2,15]),{36:[2,31]},{15:98,16:76,36:[2,9],84:bt,86:mt,87:yt,88:dt},i(Me,[2,39],{11:99,12:[1,100]}),i(wt,[2,7]),{9:[1,101]},i(ve,[2,48]),{16:35,17:102,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},{13:[1,104],16:35,17:103,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(It,[2,60],{56:105,58:pt,59:U,60:xt,61:nt,62:Ot}),i(It,[2,59]),{38:[1,106]},{23:87,37:107,40:21,43:m},{8:[1,108],38:[2,32]},i(Ct,[2,36],{36:[1,109]}),{38:[1,110]},{38:[2,42],42:111,46:pn},{16:35,17:112,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(X,[2,69],{13:[1,113]}),i(X,[2,71],{13:[1,115],67:[1,114]}),i(X,[2,75],{13:[1,116],70:[1,117]}),{13:[1,118]},i(X,[2,83]),i(X,[2,52]),{36:[2,10]},i(Me,[2,40]),{13:[1,119]},{1:[2,4]},i(ve,[2,50]),i(ve,[2,49]),{16:35,17:120,18:36,84:bt,86:mt,87:yt,88:dt,89:ht},i(It,[2,58]),i(X,[2,29]),{38:[1,121]},{23:87,37:122,38:[2,33],40:21,43:m},{42:123,46:pn},i(Ct,[2,37]),{38:[2,43]},i(X,[2,41]),i(X,[2,70]),i(X,[2,72]),i(X,[2,73],{67:[1,124]}),i(X,[2,76]),i(X,[2,77],{13:[1,125]}),i(X,[2,79],{13:[1,127],67:[1,126]}),{14:[1,128]},i(ve,[2,51]),i(X,[2,30]),{38:[2,34]},{38:[1,129]},i(X,[2,74]),i(X,[2,78]),i(X,[2,80]),i(X,[2,81],{67:[1,130]}),i(Me,[2,8]),i(Ct,[2,38]),i(X,[2,82])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],75:[2,31],98:[2,10],101:[2,4],111:[2,43],122:[2,34]},parseError:function($t,re){if(re.recoverable)this.trace($t);else{var ie=new Error($t);throw ie.hash=re,ie}},parse:function($t){var re=this,ie=[0],Oe=[],oe=[null],Ne=[],me=this.table,cn="",li=0,ya=0,da=2,Oo=1,ds=Ne.slice.call(arguments,1),Dr=Object.create(this.lexer),nr={yy:{}};for(var di in this.yy)Object.prototype.hasOwnProperty.call(this.yy,di)&&(nr.yy[di]=this.yy[di]);Dr.setInput($t,nr.yy),nr.yy.lexer=Dr,nr.yy.parser=this,typeof Dr.yylloc>"u"&&(Dr.yylloc={});var Ee=Dr.yylloc;Ne.push(Ee);var Yn=Dr.options&&Dr.options.ranges;typeof nr.yy.parseError=="function"?this.parseError=nr.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function He(){var Lu;return Lu=Oe.pop()||Dr.lex()||Oo,typeof Lu!="number"&&(Lu instanceof Array&&(Oe=Lu,Lu=Oe.pop()),Lu=re.symbols_[Lu]||Lu),Lu}for(var Ti,gn,ks,qa,La={},Gs,No,vs,nu;;){if(gn=ie[ie.length-1],this.defaultActions[gn]?ks=this.defaultActions[gn]:((Ti===null||typeof Ti>"u")&&(Ti=He()),ks=me[gn]&&me[gn][Ti]),typeof ks>"u"||!ks.length||!ks[0]){var $s="";nu=[];for(Gs in me[gn])this.terminals_[Gs]&&Gs>da&&nu.push("'"+this.terminals_[Gs]+"'");Dr.showPosition?$s="Parse error on line "+(li+1)+`: +`+Dr.showPosition()+` +Expecting `+nu.join(", ")+", got '"+(this.terminals_[Ti]||Ti)+"'":$s="Parse error on line "+(li+1)+": Unexpected "+(Ti==Oo?"end of input":"'"+(this.terminals_[Ti]||Ti)+"'"),this.parseError($s,{text:Dr.match,token:this.terminals_[Ti]||Ti,line:Dr.yylineno,loc:Ee,expected:nu})}if(ks[0]instanceof Array&&ks.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ti);switch(ks[0]){case 1:ie.push(Ti),oe.push(Dr.yytext),Ne.push(Dr.yylloc),ie.push(ks[1]),Ti=null,ya=Dr.yyleng,cn=Dr.yytext,li=Dr.yylineno,Ee=Dr.yylloc;break;case 2:if(No=this.productions_[ks[1]][1],La.$=oe[oe.length-No],La._$={first_line:Ne[Ne.length-(No||1)].first_line,last_line:Ne[Ne.length-1].last_line,first_column:Ne[Ne.length-(No||1)].first_column,last_column:Ne[Ne.length-1].last_column},Yn&&(La._$.range=[Ne[Ne.length-(No||1)].range[0],Ne[Ne.length-1].range[1]]),qa=this.performAction.apply(La,[cn,ya,li,nr.yy,ks[1],oe,Ne].concat(ds)),typeof qa<"u")return qa;No&&(ie=ie.slice(0,-1*No*2),oe=oe.slice(0,-1*No),Ne=Ne.slice(0,-1*No)),ie.push(this.productions_[ks[1]][0]),oe.push(La.$),Ne.push(La._$),vs=me[ie[ie.length-2]][ie[ie.length-1]],ie.push(vs);break;case 3:return!0}}return!0}},Ke=function(){var _e={EOF:1,parseError:function(re,ie){if(this.yy.parser)this.yy.parser.parseError(re,ie);else throw new Error(re)},setInput:function($t,re){return this.yy=re||this.yy||{},this._input=$t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var $t=this._input[0];this.yytext+=$t,this.yyleng++,this.offset++,this.match+=$t,this.matched+=$t;var re=$t.match(/(?:\r\n?|\n).*/g);return re?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),$t},unput:function($t){var re=$t.length,ie=$t.split(/(?:\r\n?|\n)/g);this._input=$t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-re),this.offset-=re;var Oe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ie.length-1&&(this.yylineno-=ie.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ie?(ie.length===Oe.length?this.yylloc.first_column:0)+Oe[Oe.length-ie.length].length-ie[0].length:this.yylloc.first_column-re},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-re]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function($t){this.unput(this.match.slice($t))},pastInput:function(){var $t=this.matched.substr(0,this.matched.length-this.match.length);return($t.length>20?"...":"")+$t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var $t=this.match;return $t.length<20&&($t+=this._input.substr(0,20-$t.length)),($t.substr(0,20)+($t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var $t=this.pastInput(),re=new Array($t.length+1).join("-");return $t+this.upcomingInput()+` +`+re+"^"},test_match:function($t,re){var ie,Oe,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),Oe=$t[0].match(/(?:\r\n?|\n).*/g),Oe&&(this.yylineno+=Oe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Oe?Oe[Oe.length-1].length-Oe[Oe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+$t[0].length},this.yytext+=$t[0],this.match+=$t[0],this.matches=$t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice($t[0].length),this.matched+=$t[0],ie=this.performAction.call(this,this.yy,this,re,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ie)return ie;if(this._backtrack){for(var Ne in oe)this[Ne]=oe[Ne];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var $t,re,ie,Oe;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),Ne=0;Nere[0].length)){if(re=ie,Oe=Ne,this.options.backtrack_lexer){if($t=this.test_match(ie,oe[Ne]),$t!==!1)return $t;if(this._backtrack){re=!1;continue}else return!1}else if(!this.options.flex)break}return re?($t=this.test_match(re,oe[Oe]),$t!==!1?$t:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var re=this.next();return re||this.lex()},begin:function(re){this.conditionStack.push(re)},popState:function(){var re=this.conditionStack.length-1;return re>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(re){return re=this.conditionStack.length-1-Math.abs(re||0),re>=0?this.conditionStack[re]:"INITIAL"},pushState:function(re){this.begin(re)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(re,ie,Oe,oe){switch(Oe){case 0:return 52;case 1:return 53;case 2:return 54;case 3:return 55;case 4:break;case 5:break;case 6:return this.begin("acc_title"),30;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),32;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 69;case 22:this.popState();break;case 23:return 70;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return this.begin("namespace"),39;case 28:return this.popState(),8;case 29:break;case 30:return this.begin("namespace-body"),36;case 31:return this.popState(),38;case 32:return"EOF_IN_STRUCT";case 33:return 8;case 34:break;case 35:return"EDGE_STATE";case 36:return this.begin("class"),43;case 37:return this.popState(),8;case 38:break;case 39:return this.popState(),this.popState(),38;case 40:return this.begin("class-body"),36;case 41:return this.popState(),38;case 42:return"EOF_IN_STRUCT";case 43:return"EDGE_STATE";case 44:return"OPEN_IN_STRUCT";case 45:break;case 46:return"MEMBER";case 47:return 72;case 48:return 65;case 49:return 66;case 50:return 68;case 51:return 49;case 52:return 51;case 53:return 44;case 54:return 45;case 55:return 71;case 56:this.popState();break;case 57:return"GENERICTYPE";case 58:this.begin("generic");break;case 59:this.popState();break;case 60:return"BQUOTE_STR";case 61:this.begin("bqstring");break;case 62:return 67;case 63:return 67;case 64:return 67;case 65:return 67;case 66:return 59;case 67:return 59;case 68:return 61;case 69:return 61;case 70:return 60;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 64;case 75:return 21;case 76:return 41;case 77:return 84;case 78:return"DOT";case 79:return"PLUS";case 80:return 81;case 81:return"EQUALS";case 82:return"EQUALS";case 83:return 88;case 84:return 12;case 85:return 14;case 86:return"PUNCTUATION";case 87:return 87;case 88:return 86;case 89:return 83;case 90:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,31,32,33,34,35,36,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},namespace:{rules:[26,27,28,29,30,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},"class-body":{rules:[26,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},class:{rules:[26,37,38,39,40,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_descr:{rules:[9,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},acc_title:{rules:[7,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},callback_args:{rules:[22,23,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},callback_name:{rules:[19,20,21,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},href:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},struct:{rules:[26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},generic:{rules:[26,47,48,49,50,51,52,53,54,55,56,57,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},bqstring:{rules:[26,47,48,49,50,51,52,53,54,55,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},string:{rules:[24,25,26,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,36,47,48,49,50,51,52,53,54,55,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],inclusive:!0}}};return _e}();Ge.lexer=Ke;function we(){this.yy={}}return we.prototype=Ge,Ge.Parser=we,new we}();pgt.parser=pgt;const _Rt=pgt,SRt=["#","+","~","-",""];class ARt{constructor(a,f){this.memberType=f,this.visibility="",this.classifier="";const p=Dd(a,Le());this.parseMember(p)}getDisplayDetails(){let a=this.visibility+zN(this.id);this.memberType==="method"&&(a+=`(${zN(this.parameters.trim())})`,this.returnType&&(a+=" : "+zN(this.returnType))),a=a.trim();const f=this.parseClassifier();return{displayText:a,cssStyle:f}}parseMember(a){let f="";if(this.memberType==="method"){const p=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,v=a.match(p);if(v){const m=v[1]?v[1].trim():"";if(SRt.includes(m)&&(this.visibility=m),this.id=v[2].trim(),this.parameters=v[3]?v[3].trim():"",f=v[4]?v[4].trim():"",this.returnType=v[5]?v[5].trim():"",f===""){const b=this.returnType.substring(this.returnType.length-1);b.match(/[$*]/)&&(f=b,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const p=a.length,v=a.substring(0,1),m=a.substring(p-1);SRt.includes(v)&&(this.visibility=v),m.match(/[*?]/)&&(f=m),this.id=a.substring(this.visibility===""?0:1,f===""?p:p-1)}this.classifier=f}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const LK="classId-";let bgt=[],Ql={},MK=[],LRt=0,dk={},vgt=0,FP=[];const CT=i=>Yr.sanitizeText(i,Le()),fL=function(i){const a=Yr.sanitizeText(i,Le());let f="",p=a;if(a.indexOf("~")>0){const v=a.split("~");p=CT(v[0]),f=CT(v[1])}return{className:p,type:f}},aGe=function(i,a){const f=Yr.sanitizeText(i,Le());a&&(a=CT(a));const{className:p}=fL(f);Ql[p].label=a},IK=function(i){const a=Yr.sanitizeText(i,Le()),{className:f,type:p}=fL(a);if(Object.hasOwn(Ql,f))return;const v=Yr.sanitizeText(f,Le());Ql[v]={id:v,type:p,label:v,cssClasses:[],methods:[],members:[],annotations:[],domId:LK+v+"-"+LRt},LRt++},MRt=function(i){const a=Yr.sanitizeText(i,Le());if(a in Ql)return Ql[a].domId;throw new Error("Class not found: "+a)},oGe=function(){bgt=[],Ql={},MK=[],FP=[],FP.push(DRt),dk={},vgt=0,ap()},cGe=function(i){return Ql[i]},uGe=function(){return Ql},lGe=function(){return bgt},hGe=function(){return MK},fGe=function(i){Ut.debug("Adding relation: "+JSON.stringify(i)),IK(i.id1),IK(i.id2),i.id1=fL(i.id1).className,i.id2=fL(i.id2).className,i.relationTitle1=Yr.sanitizeText(i.relationTitle1.trim(),Le()),i.relationTitle2=Yr.sanitizeText(i.relationTitle2.trim(),Le()),bgt.push(i)},dGe=function(i,a){const f=fL(i).className;Ql[f].annotations.push(a)},IRt=function(i,a){IK(i);const f=fL(i).className,p=Ql[f];if(typeof a=="string"){const v=a.trim();v.startsWith("<<")&&v.endsWith(">>")?p.annotations.push(CT(v.substring(2,v.length-2))):v.indexOf(")")>0?p.methods.push(new ARt(v,"method")):v&&p.members.push(new ARt(v,"attribute"))}},gGe=function(i,a){Array.isArray(a)&&(a.reverse(),a.forEach(f=>IRt(i,f)))},pGe=function(i,a){const f={id:`note${MK.length}`,class:a,text:i};MK.push(f)},bGe=function(i){return i.startsWith(":")&&(i=i.substring(1)),CT(i.trim())},wgt=function(i,a){i.split(",").forEach(function(f){let p=f;f[0].match(/\d/)&&(p=LK+p),Ql[p]!==void 0&&Ql[p].cssClasses.push(a)})},vGe=function(i,a){i.split(",").forEach(function(f){a!==void 0&&(Ql[f].tooltip=CT(a))})},wGe=function(i,a){return a?dk[a].classes[i].tooltip:Ql[i].tooltip},mGe=function(i,a,f){const p=Le();i.split(",").forEach(function(v){let m=v;v[0].match(/\d/)&&(m=LK+m),Ql[m]!==void 0&&(Ql[m].link=$a.formatUrl(a,p),p.securityLevel==="sandbox"?Ql[m].linkTarget="_top":typeof f=="string"?Ql[m].linkTarget=CT(f):Ql[m].linkTarget="_blank")}),wgt(i,"clickable")},yGe=function(i,a,f){i.split(",").forEach(function(p){xGe(p,a,f),Ql[p].haveCallback=!0}),wgt(i,"clickable")},xGe=function(i,a,f){const p=Yr.sanitizeText(i,Le());if(Le().securityLevel!=="loose"||a===void 0)return;const m=p;if(Ql[m]!==void 0){const b=MRt(m);let E=[];if(typeof f=="string"){E=f.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let _=0;_")),v.classed("hover",!0)}).on("mouseout",function(){a.transition().duration(500).style("opacity",0),yr(this).classed("hover",!1)})};FP.push(DRt);let ORt="TB";const DK={setAccTitle:cg,getAccTitle:op,getAccDescription:up,setAccDescription:cp,getConfig:()=>Le().class,addClass:IK,bindFunctions:kGe,clear:oGe,getClass:cGe,getClasses:uGe,getNotes:hGe,addAnnotation:dGe,addNote:pGe,getRelations:lGe,addRelation:fGe,getDirection:()=>ORt,setDirection:i=>{ORt=i},addMember:IRt,addMembers:gGe,cleanupLabel:bGe,lineType:EGe,relationType:TGe,setClickEvent:yGe,setCssClass:wgt,setLink:mGe,getTooltip:wGe,setTooltip:vGe,lookUpDomId:MRt,setDiagramTitle:Z2,getDiagramTitle:Db,setClassLabel:aGe,addNamespace:function(i){dk[i]===void 0&&(dk[i]={id:i,classes:{},children:{},domId:LK+i+"-"+vgt},vgt++)},addClassesToNamespace:function(i,a){dk[i]!==void 0&&a.map(f=>{Ql[f].parent=i,dk[i].classes[f]=Ql[f]})},getNamespace:function(i){return dk[i]},getNamespaces:function(){return dk}},NRt=i=>`g.classGroup text { fill: ${i.nodeBorder}; fill: ${i.classText}; stroke: none; @@ -937,25 +935,25 @@ g.classGroup line { } #extensionStart, .extension { - fill: ${i.mainBkg} !important; + fill: transparent !important; stroke: ${i.lineColor} !important; stroke-width: 1; } #extensionEnd, .extension { - fill: ${i.mainBkg} !important; + fill: transparent !important; stroke: ${i.lineColor} !important; stroke-width: 1; } #aggregationStart, .aggregation { - fill: ${i.mainBkg} !important; + fill: transparent !important; stroke: ${i.lineColor} !important; stroke-width: 1; } #aggregationEnd, .aggregation { - fill: ${i.mainBkg} !important; + fill: transparent !important; stroke: ${i.lineColor} !important; stroke-width: 1; } @@ -981,13 +979,14 @@ g.classGroup line { font-size: 18px; fill: ${i.textColor}; } -`;let PK={};const FK=20,RP=function(i){const a=Object.entries(PK).find(f=>f[1].label===i);if(a)return a[0]},CVe=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},SVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ARt,db:NK,renderer:{draw:function(i,a,f,p){const v=De().class;PK={},Wt.info("Rendering diagram "+i);const m=De().securityLevel;let b;m==="sandbox"&&(b=xr("#i"+a));const E=xr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),C=E.select(`[id='${a}']`);CVe(C);const A=new l1({multigraph:!0});A.setGraph({isMultiGraph:!0}),A.setDefaultEdgeLabel(function(){return{}});const P=p.db.getClasses(),F=Object.keys(P);for(const it of F){const ft=P[it],Tt=S0t.drawClass(C,ft,v,p);PK[Tt.id]=Tt,A.setNode(Tt.id,Tt),Wt.info("Org height: "+Tt.height)}p.db.getRelations().forEach(function(it){Wt.info("tjoho"+RP(it.id1)+RP(it.id2)+JSON.stringify(it)),A.setEdge(RP(it.id1),RP(it.id2),{relation:it},it.title||"DEFAULT")}),p.db.getNotes().forEach(function(it){Wt.debug(`Adding note: ${JSON.stringify(it)}`);const ft=S0t.drawNote(C,it,v,p);PK[ft.id]=ft,A.setNode(ft.id,ft),it.class&&it.class in P&&A.setEdge(it.id,RP(it.class),{relation:{id1:it.id,id2:it.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),nL(A),A.nodes().forEach(function(it){it!==void 0&&A.node(it)!==void 0&&(Wt.debug("Node "+it+": "+JSON.stringify(A.node(it))),E.select("#"+(p.db.lookUpDomId(it)||it)).attr("transform","translate("+(A.node(it).x-A.node(it).width/2)+","+(A.node(it).y-A.node(it).height/2)+" )"))}),A.edges().forEach(function(it){it!==void 0&&A.edge(it)!==void 0&&(Wt.debug("Edge "+it.v+" -> "+it.w+": "+JSON.stringify(A.edge(it))),S0t.drawEdge(C,A.edge(it),A.edge(it).relation,v,p))});const H=C.node().getBBox(),Y=H.width+FK*2,rt=H.height+FK*2;og(C,rt,Y,v.useMaxWidth);const J=`${H.x-FK} ${H.y-FK} ${Y} ${rt}`;Wt.debug(`viewBox ${J}`),C.attr("viewBox",J)}},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,NK.clear()}}},Symbol.toStringTag,{value:"Module"})),vgt=i=>ui.sanitizeText(i,De());let wgt={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const AVe=function(i,a,f,p){const v=Object.keys(i);Wt.info("keys:",v),Wt.info(i),v.forEach(function(m){var A,P;const b=i[m],C={shape:"rect",id:b.id,domId:b.domId,labelText:vgt(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((A=De().flowchart)==null?void 0:A.padding)??((P=De().class)==null?void 0:P.padding)};a.setNode(b.id,C),PRt(b.classes,a,f,p,b.id),Wt.info("setNode",C)})},PRt=function(i,a,f,p,v){const m=Object.keys(i);Wt.info("keys:",m),Wt.info(i),m.filter(b=>i[b].parent==v).forEach(function(b){var H,Y;const E=i[b],C=E.cssClasses.join(" "),A={labelStyle:"",style:""},P=E.label??E.id,F=0,j="class_box",R={labelStyle:A.labelStyle,shape:j,labelText:vgt(P),classData:E,rx:F,ry:F,class:C,style:A.style,id:E.id,domId:E.domId,tooltip:p.db.getTooltip(E.id,v)||"",haveCallback:E.haveCallback,link:E.link,width:E.type==="group"?500:void 0,type:E.type,padding:((H=De().flowchart)==null?void 0:H.padding)??((Y=De().class)==null?void 0:Y.padding)};a.setNode(E.id,R),v&&a.setParent(E.id,v),Wt.info("setNode",R)})},LVe=function(i,a,f,p){Wt.info(i),i.forEach(function(v,m){var Y,rt;const b=v,E="",C={labelStyle:"",style:""},A=b.text,P=0,F="note",j={labelStyle:C.labelStyle,shape:F,labelText:vgt(A),noteData:b,rx:P,ry:P,class:E,style:C.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((Y=De().flowchart)==null?void 0:Y.padding)??((rt=De().class)==null?void 0:rt.padding)};if(a.setNode(b.id,j),Wt.info("setNode",j),!b.class||!(b.class in p))return;const R=f+m,H={id:`edgeNote${R}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:Z2(wgt.curve,ig)};a.setEdge(b.id,b.class,H,R)})},MVe=function(i,a){const f=De().flowchart;let p=0;i.forEach(function(v){var b;p++;const m={classes:"relation",pattern:v.relation.lineType==1?"dashed":"solid",id:"id"+p,arrowhead:v.type==="arrow_open"?"none":"normal",startLabelRight:v.relationTitle1==="none"?"":v.relationTitle1,endLabelLeft:v.relationTitle2==="none"?"":v.relationTitle2,arrowTypeStart:FRt(v.relation.type1),arrowTypeEnd:FRt(v.relation.type2),style:"fill:none",labelStyle:"",curve:Z2(f==null?void 0:f.curve,ig)};if(Wt.info(m,v),v.style!==void 0){const E=em(v.style);m.style=E.style,m.labelStyle=E.labelStyle}v.text=v.title,v.text===void 0?v.style!==void 0&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c",((b=De().flowchart)==null?void 0:b.htmlLabels)??De().htmlLabels?(m.labelType="html",m.label=''+v.text+""):(m.labelType="text",m.label=v.text.replace(ui.lineBreakRegex,` -`),v.style===void 0&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none"),m.labelStyle=m.labelStyle.replace("color:","fill:"))),a.setEdge(v.id1,v.id2,m,p)})},DVe=function(i){wgt={...wgt,...i}},IVe=async function(i,a,f,p){Wt.info("Drawing class - ",a);const v=De().flowchart??De().class,m=De().securityLevel;Wt.info("config:",v);const b=(v==null?void 0:v.nodeSpacing)??50,E=(v==null?void 0:v.rankSpacing)??50,C=new l1({multigraph:!0,compound:!0}).setGraph({rankdir:p.db.getDirection(),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),A=p.db.getNamespaces(),P=p.db.getClasses(),F=p.db.getRelations(),j=p.db.getNotes();Wt.info(F),AVe(A,C,a,p),PRt(P,C,a,p),MVe(F,C),LVe(j,C,F.length+1,P);let R;m==="sandbox"&&(R=xr("#i"+a));const H=xr(m==="sandbox"?R.nodes()[0].contentDocument.body:"body"),Y=H.select(`[id="${a}"]`),rt=H.select("#"+a+" g");if(await A0t(rt,C,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",a),to.insertTitle(Y,"classTitleText",(v==null?void 0:v.titleTopMargin)??5,p.db.getDiagramTitle()),s9(C,Y,v==null?void 0:v.diagramPadding,v==null?void 0:v.useMaxWidth),!(v!=null&&v.htmlLabels)){const J=m==="sandbox"?R.nodes()[0].contentDocument:document,it=J.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const ft of it){const Tt=ft.getBBox(),kt=J.createElementNS("http://www.w3.org/2000/svg","rect");kt.setAttribute("rx",0),kt.setAttribute("ry",0),kt.setAttribute("width",Tt.width),kt.setAttribute("height",Tt.height),ft.insertBefore(kt,ft.firstChild)}}};function FRt(i){let a;switch(i){case 0:a="aggregation";break;case 1:a="extension";break;case 2:a="composition";break;case 3:a="dependency";break;case 4:a="lollipop";break;default:a="none"}return a}const OVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ARt,db:NK,renderer:{setConf:DVe,draw:IVe},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,NK.clear()}}},Symbol.toStringTag,{value:"Module"}));var mgt=function(){var i=function(Bt,vt,Ot,Vt){for(Ot=Ot||{},Vt=Bt.length;Vt--;Ot[Bt[Vt]]=vt);return Ot},a=[1,2],f=[1,3],p=[1,5],v=[1,7],m=[2,5],b=[1,15],E=[1,17],C=[1,21],A=[1,22],P=[1,23],F=[1,24],j=[1,37],R=[1,25],H=[1,26],Y=[1,27],rt=[1,28],J=[1,29],it=[1,32],ft=[1,33],Tt=[1,34],kt=[1,35],mt=[1,36],ct=[1,39],yt=[1,40],st=[1,41],xt=[1,42],ht=[1,38],dt=[1,45],Ct=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],tt=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],Pt=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],pt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,class:42,CLASSENTITY_IDS:43,STYLECLASS:44,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(vt,Ot,Vt,qe,_n,Te,Wn){var Ae=Te.length-1;switch(_n){case 4:return qe.setRootDoc(Te[Ae]),Te[Ae];case 5:this.$=[];break;case 6:Te[Ae]!="nl"&&(Te[Ae-1].push(Te[Ae]),this.$=Te[Ae-1]);break;case 7:case 8:this.$=Te[Ae];break;case 9:this.$="nl";break;case 12:this.$=Te[Ae];break;case 13:const Ee=Te[Ae-1];Ee.description=qe.trimColon(Te[Ae]),this.$=Ee;break;case 14:this.$={stmt:"relation",state1:Te[Ae-2],state2:Te[Ae]};break;case 15:const He=qe.trimColon(Te[Ae]);this.$={stmt:"relation",state1:Te[Ae-3],state2:Te[Ae-1],description:He};break;case 19:this.$={stmt:"state",id:Te[Ae-3],type:"default",description:"",doc:Te[Ae-1]};break;case 20:var ne=Te[Ae],ke=Te[Ae-2].trim();if(Te[Ae].match(":")){var Ve=Te[Ae].split(":");ne=Ve[0],ke=[ke,Ve[1]]}this.$={stmt:"state",id:ne,type:"default",description:ke};break;case 21:this.$={stmt:"state",id:Te[Ae-3],type:"default",description:Te[Ae-5],doc:Te[Ae-1]};break;case 22:this.$={stmt:"state",id:Te[Ae],type:"fork"};break;case 23:this.$={stmt:"state",id:Te[Ae],type:"join"};break;case 24:this.$={stmt:"state",id:Te[Ae],type:"choice"};break;case 25:this.$={stmt:"state",id:qe.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:Te[Ae-1].trim(),note:{position:Te[Ae-2].trim(),text:Te[Ae].trim()}};break;case 30:this.$=Te[Ae].trim(),qe.setAccTitle(this.$);break;case 31:case 32:this.$=Te[Ae].trim(),qe.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:Te[Ae-1].trim(),classes:Te[Ae].trim()};break;case 35:this.$={stmt:"applyClass",id:Te[Ae-1].trim(),styleClass:Te[Ae].trim()};break;case 38:qe.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:qe.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:qe.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:qe.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:Te[Ae].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:Te[Ae-2].trim(),classes:[Te[Ae].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:Te[Ae-2].trim(),classes:[Te[Ae].trim()],type:"default",description:""};break;case 50:qe.parseDirective("%%{","open_directive");break;case 51:qe.parseDirective(Te[Ae],"type_directive");break;case 52:Te[Ae]=Te[Ae].trim().replace(/'/g,'"'),qe.parseDirective(Te[Ae],"arg_directive");break;case 53:qe.parseDirective("}%%","close_directive","state");break}},table:[{3:1,4:a,5:f,6:4,7:p,45:6,60:v},{1:[3]},{3:8,4:a,5:f,6:4,7:p,45:6,60:v},{3:9,4:a,5:f,6:4,7:p,45:6,60:v},{3:10,4:a,5:f,6:4,7:p,45:6,60:v},i([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],m,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:b,5:E,6:30,9:14,10:16,11:18,12:19,13:20,16:C,17:A,19:P,22:F,24:j,25:R,26:H,27:Y,28:rt,29:J,32:31,33:it,35:ft,37:Tt,38:kt,42:mt,45:6,50:ct,51:yt,52:st,53:xt,56:ht,60:v},{47:43,48:[1,44],63:dt},i([48,63],[2,51]),i(Ct,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:C,17:A,19:P,22:F,24:j,25:R,26:H,27:Y,28:rt,29:J,32:31,33:it,35:ft,37:Tt,38:kt,42:mt,45:6,50:ct,51:yt,52:st,53:xt,56:ht,60:v},i(Ct,[2,8]),i(Ct,[2,9]),i(Ct,[2,10]),i(Ct,[2,11]),i(Ct,[2,12],{14:[1,47],15:[1,48]}),i(Ct,[2,16]),{18:[1,49]},i(Ct,[2,18],{20:[1,50]}),{23:[1,51]},i(Ct,[2,22]),i(Ct,[2,23]),i(Ct,[2,24]),i(Ct,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},i(Ct,[2,28]),i(Ct,[2,29]),{34:[1,56]},{36:[1,57]},i(Ct,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},i(tt,[2,44],{57:[1,61]}),i(tt,[2,45],{57:[1,62]}),i(Ct,[2,38]),i(Ct,[2,39]),i(Ct,[2,40]),i(Ct,[2,41]),i(Pt,[2,36]),{49:63,62:[1,64]},i(Pt,[2,53]),i(Ct,[2,7]),i(Ct,[2,13]),{13:65,24:j,56:ht},i(Ct,[2,17]),i(pt,m,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},i(Ct,[2,30]),i(Ct,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:dt},{63:[2,52]},i(Ct,[2,14],{14:[1,76]}),{4:b,5:E,6:30,9:14,10:16,11:18,12:19,13:20,16:C,17:A,19:P,21:[1,77],22:F,24:j,25:R,26:H,27:Y,28:rt,29:J,32:31,33:it,35:ft,37:Tt,38:kt,42:mt,45:6,50:ct,51:yt,52:st,53:xt,56:ht,60:v},i(Ct,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},i(Ct,[2,33]),i(Ct,[2,34]),i(Ct,[2,35]),i(tt,[2,46]),i(tt,[2,47]),i(Pt,[2,37]),i(Ct,[2,15]),i(Ct,[2,19]),i(pt,m,{8:81}),i(Ct,[2,26]),i(Ct,[2,27]),{4:b,5:E,6:30,9:14,10:16,11:18,12:19,13:20,16:C,17:A,19:P,21:[1,82],22:F,24:j,25:R,26:H,27:Y,28:rt,29:J,32:31,33:it,35:ft,37:Tt,38:kt,42:mt,45:6,50:ct,51:yt,52:st,53:xt,56:ht,60:v},i(Ct,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},parseError:function(vt,Ot){if(Ot.recoverable)this.trace(vt);else{var Vt=new Error(vt);throw Vt.hash=Ot,Vt}},parse:function(vt){var Ot=this,Vt=[0],qe=[],_n=[null],Te=[],Wn=this.table,Ae="",ne=0,ke=0,Ve=2,Ee=1,He=Te.slice.call(arguments,1),Ce=Object.create(this.lexer),$e={yy:{}};for(var ye in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ye)&&($e.yy[ye]=this.yy[ye]);Ce.setInput(vt,$e.yy),$e.yy.lexer=Ce,$e.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var fn=Ce.yylloc;Te.push(fn);var Yt=Ce.options&&Ce.options.ranges;typeof $e.yy.parseError=="function"?this.parseError=$e.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Mi(){var Li;return Li=qe.pop()||Ce.lex()||Ee,typeof Li!="number"&&(Li instanceof Array&&(qe=Li,Li=qe.pop()),Li=Ot.symbols_[Li]||Li),Li}for(var qt,zi,Se,ki,Ri={},pi,bi,dn,Nn;;){if(zi=Vt[Vt.length-1],this.defaultActions[zi]?Se=this.defaultActions[zi]:((qt===null||typeof qt>"u")&&(qt=Mi()),Se=Wn[zi]&&Wn[zi][qt]),typeof Se>"u"||!Se.length||!Se[0]){var Wr="";Nn=[];for(pi in Wn[zi])this.terminals_[pi]&&pi>Ve&&Nn.push("'"+this.terminals_[pi]+"'");Ce.showPosition?Wr="Parse error on line "+(ne+1)+`: -`+Ce.showPosition()+` -Expecting `+Nn.join(", ")+", got '"+(this.terminals_[qt]||qt)+"'":Wr="Parse error on line "+(ne+1)+": Unexpected "+(qt==Ee?"end of input":"'"+(this.terminals_[qt]||qt)+"'"),this.parseError(Wr,{text:Ce.match,token:this.terminals_[qt]||qt,line:Ce.yylineno,loc:fn,expected:Nn})}if(Se[0]instanceof Array&&Se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+zi+", token: "+qt);switch(Se[0]){case 1:Vt.push(qt),_n.push(Ce.yytext),Te.push(Ce.yylloc),Vt.push(Se[1]),qt=null,ke=Ce.yyleng,Ae=Ce.yytext,ne=Ce.yylineno,fn=Ce.yylloc;break;case 2:if(bi=this.productions_[Se[1]][1],Ri.$=_n[_n.length-bi],Ri._$={first_line:Te[Te.length-(bi||1)].first_line,last_line:Te[Te.length-1].last_line,first_column:Te[Te.length-(bi||1)].first_column,last_column:Te[Te.length-1].last_column},Yt&&(Ri._$.range=[Te[Te.length-(bi||1)].range[0],Te[Te.length-1].range[1]]),ki=this.performAction.apply(Ri,[Ae,ke,ne,$e.yy,Se[1],_n,Te].concat(He)),typeof ki<"u")return ki;bi&&(Vt=Vt.slice(0,-1*bi*2),_n=_n.slice(0,-1*bi),Te=Te.slice(0,-1*bi)),Vt.push(this.productions_[Se[1]][0]),_n.push(Ri.$),Te.push(Ri._$),dn=Wn[Vt[Vt.length-2]][Vt[Vt.length-1]],Vt.push(dn);break;case 3:return!0}}return!0}},X=function(){var Bt={EOF:1,parseError:function(Ot,Vt){if(this.yy.parser)this.yy.parser.parseError(Ot,Vt);else throw new Error(Ot)},setInput:function(vt,Ot){return this.yy=Ot||this.yy||{},this._input=vt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var vt=this._input[0];this.yytext+=vt,this.yyleng++,this.offset++,this.match+=vt,this.matched+=vt;var Ot=vt.match(/(?:\r\n?|\n).*/g);return Ot?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),vt},unput:function(vt){var Ot=vt.length,Vt=vt.split(/(?:\r\n?|\n)/g);this._input=vt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ot),this.offset-=Ot;var qe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Vt.length-1&&(this.yylineno-=Vt.length-1);var _n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Vt?(Vt.length===qe.length?this.yylloc.first_column:0)+qe[qe.length-Vt.length].length-Vt[0].length:this.yylloc.first_column-Ot},this.options.ranges&&(this.yylloc.range=[_n[0],_n[0]+this.yyleng-Ot]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(vt){this.unput(this.match.slice(vt))},pastInput:function(){var vt=this.matched.substr(0,this.matched.length-this.match.length);return(vt.length>20?"...":"")+vt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var vt=this.match;return vt.length<20&&(vt+=this._input.substr(0,20-vt.length)),(vt.substr(0,20)+(vt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var vt=this.pastInput(),Ot=new Array(vt.length+1).join("-");return vt+this.upcomingInput()+` -`+Ot+"^"},test_match:function(vt,Ot){var Vt,qe,_n;if(this.options.backtrack_lexer&&(_n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_n.yylloc.range=this.yylloc.range.slice(0))),qe=vt[0].match(/(?:\r\n?|\n).*/g),qe&&(this.yylineno+=qe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:qe?qe[qe.length-1].length-qe[qe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+vt[0].length},this.yytext+=vt[0],this.match+=vt[0],this.matches=vt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(vt[0].length),this.matched+=vt[0],Vt=this.performAction.call(this,this.yy,this,Ot,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Vt)return Vt;if(this._backtrack){for(var Te in _n)this[Te]=_n[Te];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var vt,Ot,Vt,qe;this._more||(this.yytext="",this.match="");for(var _n=this._currentRules(),Te=0;Te<_n.length;Te++)if(Vt=this._input.match(this.rules[_n[Te]]),Vt&&(!Ot||Vt[0].length>Ot[0].length)){if(Ot=Vt,qe=Te,this.options.backtrack_lexer){if(vt=this.test_match(Vt,_n[Te]),vt!==!1)return vt;if(this._backtrack){Ot=!1;continue}else return!1}else if(!this.options.flex)break}return Ot?(vt=this.test_match(Ot,_n[qe]),vt!==!1?vt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ot=this.next();return Ot||this.lex()},begin:function(Ot){this.conditionStack.push(Ot)},popState:function(){var Ot=this.conditionStack.length-1;return Ot>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ot){return Ot=this.conditionStack.length-1-Math.abs(Ot||0),Ot>=0?this.conditionStack[Ot]:"INITIAL"},pushState:function(Ot){this.begin(Ot)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ot,Vt,qe,_n){switch(qe){case 0:return 41;case 1:return 50;case 2:return 51;case 3:return 52;case 4:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:break;case 11:break;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:break;case 17:return this.pushState("SCALE"),17;case 18:return 18;case 19:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 25:this.popState();break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 34:return this.pushState("SCALE"),17;case 35:return 18;case 36:this.popState();break;case 37:this.pushState("STATE");break;case 38:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-8).trim(),25;case 39:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-8).trim(),26;case 40:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-10).trim(),27;case 41:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-8).trim(),25;case 42:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-8).trim(),26;case 43:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-10).trim(),27;case 44:return 50;case 45:return 51;case 46:return 52;case 47:return 53;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:return this.popState(),"ID";case 51:this.popState();break;case 52:return"STATE_DESCR";case 53:return 19;case 54:this.popState();break;case 55:return this.popState(),this.pushState("struct"),20;case 56:break;case 57:return this.popState(),21;case 58:break;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 64:break;case 65:return"NOTE_TEXT";case 66:return this.popState(),"ID";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),Vt.yytext=Vt.yytext.substr(2).trim(),31;case 69:return this.popState(),Vt.yytext=Vt.yytext.slice(0,-8).trim(),31;case 70:return 7;case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return Vt.yytext=Vt.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 79:return 5;case 80:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}};return Bt}();Ft.lexer=X;function Rt(){this.yy={}}return Rt.prototype=Ft,Ft.Parser=Rt,new Rt}();mgt.parser=mgt;const BRt=mgt,NVe="LR",PVe="TB",BK="state",ygt="relation",FVe="classDef",BVe="applyClass",jP="default",RRt="divider",xgt="[*]",jRt="start",$Rt=xgt,zRt="end",qRt="color",HRt="fill",RVe="bgFill",jVe=",";function VRt(){return{}}let GRt=NVe,RK=[],$P=VRt();const URt=()=>({relations:[],states:{},documents:{}});let jK={root:URt()},E0=jK.root,zP=0,WRt=0;const $Ve={LINE:0,DOTTED_LINE:1},zVe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},$K=i=>JSON.parse(JSON.stringify(i)),qVe=function(i,a,f){J1.parseDirective(this,i,a,f)},HVe=i=>{Wt.info("Setting root doc",i),RK=i},VVe=()=>RK,zK=(i,a,f)=>{if(a.stmt===ygt)zK(i,a.state1,!0),zK(i,a.state2,!1);else if(a.stmt===BK&&(a.id==="[*]"?(a.id=f?i.id+"_start":i.id+"_end",a.start=f):a.id=a.id.trim()),a.doc){const p=[];let v=[],m;for(m=0;m0&&v.length>0){const b={stmt:BK,id:RIt(),type:"divider",doc:$K(v)};p.push($K(b)),a.doc=p}a.doc.forEach(b=>zK(a,b,!0))}},GVe=()=>(zK({id:"root"},{id:"root",doc:RK},!0),{id:"root",doc:RK}),UVe=i=>{let a;i.doc?a=i.doc:a=i,Wt.info(a),KRt(!0),Wt.info("Extract",a),a.forEach(f=>{switch(f.stmt){case BK:k9(f.id.trim(),f.type,f.doc,f.description,f.note,f.classes,f.styles,f.textStyles);break;case ygt:YRt(f.state1,f.state2,f.description);break;case FVe:XRt(f.id.trim(),f.classes);break;case BVe:_gt(f.id.trim(),f.styleClass);break}})},k9=function(i,a=jP,f=null,p=null,v=null,m=null,b=null,E=null){const C=i==null?void 0:i.trim();E0.states[C]===void 0?(Wt.info("Adding state ",C,p),E0.states[C]={id:C,descriptions:[],type:a,doc:f,note:v,classes:[],styles:[],textStyles:[]}):(E0.states[C].doc||(E0.states[C].doc=f),E0.states[C].type||(E0.states[C].type=a)),p&&(Wt.info("Setting state description",C,p),typeof p=="string"&&Tgt(C,p.trim()),typeof p=="object"&&p.forEach(A=>Tgt(C,A.trim()))),v&&(E0.states[C].note=v,E0.states[C].note.text=ui.sanitizeText(E0.states[C].note.text,De())),m&&(Wt.info("Setting state classes",C,m),(typeof m=="string"?[m]:m).forEach(P=>_gt(C,P.trim()))),b&&(Wt.info("Setting state styles",C,b),(typeof b=="string"?[b]:b).forEach(P=>nGe(C,P.trim()))),E&&(Wt.info("Setting state styles",C,b),(typeof E=="string"?[E]:E).forEach(P=>rGe(C,P.trim())))},KRt=function(i){jK={root:URt()},E0=jK.root,zP=0,$P=VRt(),i||cg()},qP=function(i){return E0.states[i]},WVe=function(){return E0.states},KVe=function(){Wt.info("Documents = ",jK)},YVe=function(){return E0.relations};function kgt(i=""){let a=i;return i===xgt&&(zP++,a=`${jRt}${zP}`),a}function Egt(i="",a=jP){return i===xgt?jRt:a}function XVe(i=""){let a=i;return i===$Rt&&(zP++,a=`${zRt}${zP}`),a}function QVe(i="",a=jP){return i===$Rt?zRt:a}function ZVe(i,a,f){let p=kgt(i.id.trim()),v=Egt(i.id.trim(),i.type),m=kgt(a.id.trim()),b=Egt(a.id.trim(),a.type);k9(p,v,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),k9(m,b,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles),E0.relations.push({id1:p,id2:m,relationTitle:ui.sanitizeText(f,De())})}const YRt=function(i,a,f){if(typeof i=="object")ZVe(i,a,f);else{const p=kgt(i.trim()),v=Egt(i),m=XVe(a.trim()),b=QVe(a);k9(p,v),k9(m,b),E0.relations.push({id1:p,id2:m,title:ui.sanitizeText(f,De())})}},Tgt=function(i,a){const f=E0.states[i],p=a.startsWith(":")?a.replace(":","").trim():a;f.descriptions.push(ui.sanitizeText(p,De()))},JVe=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},tGe=()=>(WRt++,"divider-id-"+WRt),XRt=function(i,a=""){$P[i]===void 0&&($P[i]={id:i,styles:[],textStyles:[]});const f=$P[i];a!=null&&a.split(jVe).forEach(p=>{const v=p.replace(/([^;]*);/,"$1").trim();if(p.match(qRt)){const b=v.replace(HRt,RVe).replace(qRt,HRt);f.textStyles.push(b)}f.styles.push(v)})},eGe=function(){return $P},_gt=function(i,a){i.split(",").forEach(function(f){let p=qP(f);if(p===void 0){const v=f.trim();k9(v),p=qP(v)}p.classes.push(a)})},nGe=function(i,a){const f=qP(i);f!==void 0&&f.textStyles.push(a)},rGe=function(i,a){const f=qP(i);f!==void 0&&f.textStyles.push(a)},P5={parseDirective:qVe,getConfig:()=>De().state,addState:k9,clear:KRt,getState:qP,getStates:WVe,getRelations:YVe,getClasses:eGe,getDirection:()=>GRt,addRelation:YRt,getDividerId:tGe,setDirection:i=>{GRt=i},cleanupLabel:JVe,lineType:$Ve,relationType:zVe,logDocuments:KVe,getRootDoc:VVe,setRootDoc:HVe,getRootDocV2:GVe,extract:UVe,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:ug,setAccTitle:m0,getAccDescription:hg,setAccDescription:lg,addStyleClass:XRt,setCssClass:_gt,addDescription:Tgt,setDiagramTitle:Nb,getDiagramTitle:hp},QRt=i=>` +`;let PRt=0;const CGe=function(i,a,f,p,v){const m=function(ut){switch(ut){case v.db.relationType.AGGREGATION:return"aggregation";case v.db.relationType.EXTENSION:return"extension";case v.db.relationType.COMPOSITION:return"composition";case v.db.relationType.DEPENDENCY:return"dependency";case v.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(ut=>!Number.isNaN(ut.y));const b=a.points,E=Z7().x(function(ut){return ut.x}).y(function(ut){return ut.y}).curve(FN),_=i.append("path").attr("d",E(b)).attr("id","edge"+PRt).attr("class","relation");let L="";p.arrowMarkerAbsolute&&(L=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,L=L.replace(/\(/g,"\\("),L=L.replace(/\)/g,"\\)")),f.relation.lineType==1&&_.attr("class","relation dashed-line"),f.relation.lineType==10&&_.attr("class","relation dotted-line"),f.relation.type1!=="none"&&_.attr("marker-start","url("+L+"#"+m(f.relation.type1)+"Start)"),f.relation.type2!=="none"&&_.attr("marker-end","url("+L+"#"+m(f.relation.type2)+"End)");let N,B;const j=a.points.length;let R=$a.calcLabelPosition(a.points);N=R.x,B=R.y;let z,K,it,st;if(j%2!==0&&j>1){let ut=$a.calcCardinalityPosition(f.relation.type1!=="none",a.points,a.points[0]),bt=$a.calcCardinalityPosition(f.relation.type2!=="none",a.points,a.points[j-1]);Ut.debug("cardinality_1_point "+JSON.stringify(ut)),Ut.debug("cardinality_2_point "+JSON.stringify(bt)),z=ut.x,K=ut.y,it=bt.x,st=bt.y}if(f.title!==void 0){const ut=i.append("g").attr("class","classLabel"),bt=ut.append("text").attr("class","label").attr("x",N).attr("y",B).attr("fill","red").attr("text-anchor","middle").text(f.title);window.label=bt;const mt=bt.node().getBBox();ut.insert("rect",":first-child").attr("class","box").attr("x",mt.x-p.padding/2).attr("y",mt.y-p.padding/2).attr("width",mt.width+p.padding).attr("height",mt.height+p.padding)}Ut.info("Rendering relation "+JSON.stringify(f)),f.relationTitle1!==void 0&&f.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",z).attr("y",K).attr("fill","black").attr("font-size","6").text(f.relationTitle1),f.relationTitle2!==void 0&&f.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",it).attr("y",st).attr("fill","black").attr("font-size","6").text(f.relationTitle2),PRt++},_Ge=function(i,a,f,p){Ut.debug("Rendering class ",a,f);const v=a.id,m={id:v,label:a.id,width:0,height:0},b=i.append("g").attr("id",p.db.lookUpDomId(v)).attr("class","classGroup");let E;a.link?E=b.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",f.textHeight+f.padding).attr("x",0):E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);let _=!0;a.annotations.forEach(function(bt){const mt=E.append("tspan").text("«"+bt+"»");_||mt.attr("dy",f.textHeight),_=!1});let L=FRt(a);const N=E.append("tspan").text(L).attr("class","title");_||N.attr("dy",f.textHeight);const B=E.node().getBBox().height;let j,R,z;if(a.members.length>0){j=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin/2).attr("y2",f.padding+B+f.dividerMargin/2);const bt=b.append("text").attr("x",f.padding).attr("y",B+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.members.forEach(function(mt){BRt(bt,mt,_,f),_=!1}),R=bt.node().getBBox()}if(a.methods.length>0){z=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin+R.height).attr("y2",f.padding+B+f.dividerMargin+R.height);const bt=b.append("text").attr("x",f.padding).attr("y",B+2*f.dividerMargin+R.height+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.methods.forEach(function(mt){BRt(bt,mt,_,f),_=!1})}const K=b.node().getBBox();var it=" ";a.cssClasses.length>0&&(it=it+a.cssClasses.join(" "));const ut=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",K.width+2*f.padding).attr("height",K.height+f.padding+.5*f.dividerMargin).attr("class",it).node().getBBox().width;return E.node().childNodes.forEach(function(bt){bt.setAttribute("x",(ut-bt.getBBox().width)/2)}),a.tooltip&&E.insert("title").text(a.tooltip),j&&j.attr("x2",ut),z&&z.attr("x2",ut),m.width=ut,m.height=K.height+f.padding+.5*f.dividerMargin,m},FRt=function(i){let a=i.id;return i.type&&(a+="<"+zN(i.type)+">"),a},SGe=function(i,a,f,p){Ut.debug("Rendering note ",a,f);const v=a.id,m={id:v,text:a.text,width:0,height:0},b=i.append("g").attr("id",v).attr("class","classGroup");let E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);const _=JSON.parse(`"${a.text}"`).split(` +`);_.forEach(function(j){Ut.debug(`Adding line: ${j}`),E.append("tspan").text(j).attr("class","title").attr("dy",f.textHeight)});const L=b.node().getBBox(),B=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",L.width+2*f.padding).attr("height",L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin).node().getBBox().width;return E.node().childNodes.forEach(function(j){j.setAttribute("x",(B-j.getBBox().width)/2)}),m.width=B,m.height=L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin,m},BRt=function(i,a,f,p){const{displayText:v,cssStyle:m}=a.getDisplayDetails(),b=i.append("tspan").attr("x",p.padding).text(v);m!==""&&b.attr("style",a.cssStyle),f||b.attr("dy",p.textHeight)},mgt={getClassTitleString:FRt,drawClass:_Ge,drawEdge:CGe,drawNote:SGe};let OK={};const NK=20,BP=function(i){const a=Object.entries(OK).find(f=>f[1].label===i);if(a)return a[0]},AGe=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},LGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{draw:function(i,a,f,p){const v=Le().class;OK={},Ut.info("Rendering diagram "+i);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=E.select(`[id='${a}']`);AGe(_);const L=new a1({multigraph:!0});L.setGraph({isMultiGraph:!0}),L.setDefaultEdgeLabel(function(){return{}});const N=p.db.getClasses(),B=Object.keys(N);for(const ut of B){const bt=N[ut],mt=mgt.drawClass(_,bt,v,p);OK[mt.id]=mt,L.setNode(mt.id,mt),Ut.info("Org height: "+mt.height)}p.db.getRelations().forEach(function(ut){Ut.info("tjoho"+BP(ut.id1)+BP(ut.id2)+JSON.stringify(ut)),L.setEdge(BP(ut.id1),BP(ut.id2),{relation:ut},ut.title||"DEFAULT")}),p.db.getNotes().forEach(function(ut){Ut.debug(`Adding note: ${JSON.stringify(ut)}`);const bt=mgt.drawNote(_,ut,v,p);OK[bt.id]=bt,L.setNode(bt.id,bt),ut.class&&ut.class in N&&L.setEdge(ut.id,BP(ut.class),{relation:{id1:ut.id,id2:ut.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),eL(L),L.nodes().forEach(function(ut){ut!==void 0&&L.node(ut)!==void 0&&(Ut.debug("Node "+ut+": "+JSON.stringify(L.node(ut))),E.select("#"+(p.db.lookUpDomId(ut)||ut)).attr("transform","translate("+(L.node(ut).x-L.node(ut).width/2)+","+(L.node(ut).y-L.node(ut).height/2)+" )"))}),L.edges().forEach(function(ut){ut!==void 0&&L.edge(ut)!==void 0&&(Ut.debug("Edge "+ut.v+" -> "+ut.w+": "+JSON.stringify(L.edge(ut))),mgt.drawEdge(_,L.edge(ut),L.edge(ut).relation,v,p))});const z=_.node().getBBox(),K=z.width+NK*2,it=z.height+NK*2;og(_,it,K,v.useMaxWidth);const st=`${z.x-NK} ${z.y-NK} ${K} ${it}`;Ut.debug(`viewBox ${st}`),_.attr("viewBox",st)}},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,DK.clear()}}},Symbol.toStringTag,{value:"Module"})),ygt=i=>Yr.sanitizeText(i,Le());let xgt={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const MGe=function(i,a,f,p){const v=Object.keys(i);Ut.info("keys:",v),Ut.info(i),v.forEach(function(m){var L,N;const b=i[m],_={shape:"rect",id:b.id,domId:b.domId,labelText:ygt(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((L=Le().flowchart)==null?void 0:L.padding)??((N=Le().class)==null?void 0:N.padding)};a.setNode(b.id,_),RRt(b.classes,a,f,p,b.id),Ut.info("setNode",_)})},RRt=function(i,a,f,p,v){const m=Object.keys(i);Ut.info("keys:",m),Ut.info(i),m.filter(b=>i[b].parent==v).forEach(function(b){var z,K;const E=i[b],_=E.cssClasses.join(" "),L={labelStyle:"",style:""},N=E.label??E.id,B=0,j="class_box",R={labelStyle:L.labelStyle,shape:j,labelText:ygt(N),classData:E,rx:B,ry:B,class:_,style:L.style,id:E.id,domId:E.domId,tooltip:p.db.getTooltip(E.id,v)||"",haveCallback:E.haveCallback,link:E.link,width:E.type==="group"?500:void 0,type:E.type,padding:((z=Le().flowchart)==null?void 0:z.padding)??((K=Le().class)==null?void 0:K.padding)};a.setNode(E.id,R),v&&a.setParent(E.id,v),Ut.info("setNode",R)})},IGe=function(i,a,f,p){Ut.info(i),i.forEach(function(v,m){var K,it;const b=v,E="",_={labelStyle:"",style:""},L=b.text,N=0,B="note",j={labelStyle:_.labelStyle,shape:B,labelText:ygt(L),noteData:b,rx:N,ry:N,class:E,style:_.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((K=Le().flowchart)==null?void 0:K.padding)??((it=Le().class)==null?void 0:it.padding)};if(a.setNode(b.id,j),Ut.info("setNode",j),!b.class||!(b.class in p))return;const R=f+m,z={id:`edgeNote${R}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:X2(xgt.curve,ig)};a.setEdge(b.id,b.class,z,R)})},DGe=function(i,a){const f=Le().flowchart;let p=0;i.forEach(function(v){var b;p++;const m={classes:"relation",pattern:v.relation.lineType==1?"dashed":"solid",id:"id"+p,arrowhead:v.type==="arrow_open"?"none":"normal",startLabelRight:v.relationTitle1==="none"?"":v.relationTitle1,endLabelLeft:v.relationTitle2==="none"?"":v.relationTitle2,arrowTypeStart:jRt(v.relation.type1),arrowTypeEnd:jRt(v.relation.type2),style:"fill:none",labelStyle:"",curve:X2(f==null?void 0:f.curve,ig)};if(Ut.info(m,v),v.style!==void 0){const E=em(v.style);m.style=E.style,m.labelStyle=E.labelStyle}v.text=v.title,v.text===void 0?v.style!==void 0&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c",((b=Le().flowchart)==null?void 0:b.htmlLabels)??Le().htmlLabels?(m.labelType="html",m.label=''+v.text+""):(m.labelType="text",m.label=v.text.replace(Yr.lineBreakRegex,` +`),v.style===void 0&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none"),m.labelStyle=m.labelStyle.replace("color:","fill:"))),a.setEdge(v.id1,v.id2,m,p)})},OGe=function(i){xgt={...xgt,...i}},NGe=async function(i,a,f,p){Ut.info("Drawing class - ",a);const v=Le().flowchart??Le().class,m=Le().securityLevel;Ut.info("config:",v);const b=(v==null?void 0:v.nodeSpacing)??50,E=(v==null?void 0:v.rankSpacing)??50,_=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:p.db.getDirection(),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),L=p.db.getNamespaces(),N=p.db.getClasses(),B=p.db.getRelations(),j=p.db.getNotes();Ut.info(B),MGe(L,_,a,p),RRt(N,_,a,p),DGe(B,_),IGe(j,_,B.length+1,N);let R;m==="sandbox"&&(R=yr("#i"+a));const z=yr(m==="sandbox"?R.nodes()[0].contentDocument.body:"body"),K=z.select(`[id="${a}"]`),it=z.select("#"+a+" g");if(await I0t(it,_,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",a),$a.insertTitle(K,"classTitleText",(v==null?void 0:v.titleTopMargin)??5,p.db.getDiagramTitle()),cT(_,K,v==null?void 0:v.diagramPadding,v==null?void 0:v.useMaxWidth),!(v!=null&&v.htmlLabels)){const st=m==="sandbox"?R.nodes()[0].contentDocument:document,ut=st.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const bt of ut){const mt=bt.getBBox(),yt=st.createElementNS("http://www.w3.org/2000/svg","rect");yt.setAttribute("rx",0),yt.setAttribute("ry",0),yt.setAttribute("width",mt.width),yt.setAttribute("height",mt.height),bt.insertBefore(yt,bt.firstChild)}}};function jRt(i){let a;switch(i){case 0:a="aggregation";break;case 1:a="extension";break;case 2:a="composition";break;case 3:a="dependency";break;case 4:a="lollipop";break;default:a="none"}return a}const PGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{setConf:OGe,draw:NGe},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,DK.clear()}}},Symbol.toStringTag,{value:"Module"}));var kgt=function(){var i=function(Ct,Z,Tt,Ht){for(Tt=Tt||{},Ht=Ct.length;Ht--;Tt[Ct[Ht]]=Z);return Tt},a=[1,2],f=[1,3],p=[1,4],v=[2,4],m=[1,9],b=[1,11],E=[1,15],_=[1,16],L=[1,17],N=[1,18],B=[1,30],j=[1,19],R=[1,20],z=[1,21],K=[1,22],it=[1,23],st=[1,25],ut=[1,26],bt=[1,27],mt=[1,28],yt=[1,29],dt=[1,32],ht=[1,33],wt=[1,34],X=[1,35],pt=[1,31],U=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],xt=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],nt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Ot={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(Z,Tt,Ht,It,Ft,ke,pn){var Me=ke.length-1;switch(Ft){case 3:return It.setRootDoc(ke[Me]),ke[Me];case 4:this.$=[];break;case 5:ke[Me]!="nl"&&(ke[Me-1].push(ke[Me]),this.$=ke[Me-1]);break;case 6:case 7:this.$=ke[Me];break;case 8:this.$="nl";break;case 11:this.$=ke[Me];break;case 12:const we=ke[Me-1];we.description=It.trimColon(ke[Me]),this.$=we;break;case 13:this.$={stmt:"relation",state1:ke[Me-2],state2:ke[Me]};break;case 14:const _e=It.trimColon(ke[Me]);this.$={stmt:"relation",state1:ke[Me-3],state2:ke[Me-1],description:_e};break;case 18:this.$={stmt:"state",id:ke[Me-3],type:"default",description:"",doc:ke[Me-1]};break;case 19:var ve=ke[Me],Ge=ke[Me-2].trim();if(ke[Me].match(":")){var Ke=ke[Me].split(":");ve=Ke[0],Ge=[Ge,Ke[1]]}this.$={stmt:"state",id:ve,type:"default",description:Ge};break;case 20:this.$={stmt:"state",id:ke[Me-3],type:"default",description:ke[Me-5],doc:ke[Me-1]};break;case 21:this.$={stmt:"state",id:ke[Me],type:"fork"};break;case 22:this.$={stmt:"state",id:ke[Me],type:"join"};break;case 23:this.$={stmt:"state",id:ke[Me],type:"choice"};break;case 24:this.$={stmt:"state",id:It.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:ke[Me-1].trim(),note:{position:ke[Me-2].trim(),text:ke[Me].trim()}};break;case 28:this.$=ke[Me].trim(),It.setAccTitle(this.$);break;case 29:case 30:this.$=ke[Me].trim(),It.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:ke[Me-1].trim(),classes:ke[Me].trim()};break;case 33:this.$={stmt:"applyClass",id:ke[Me-1].trim(),styleClass:ke[Me].trim()};break;case 34:It.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:It.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:It.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:It.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:ke[Me].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:ke[Me-2].trim(),classes:[ke[Me].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:ke[Me-2].trim(),classes:[ke[Me].trim()],type:"default",description:""};break}},table:[{3:1,4:a,5:f,6:p},{1:[3]},{3:5,4:a,5:f,6:p},{3:6,4:a,5:f,6:p},i([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],v,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,5]),{9:36,10:12,11:13,12:14,15:E,16:_,18:L,21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,7]),i(U,[2,8]),i(U,[2,9]),i(U,[2,10]),i(U,[2,11],{13:[1,37],14:[1,38]}),i(U,[2,15]),{17:[1,39]},i(U,[2,17],{19:[1,40]}),{22:[1,41]},i(U,[2,21]),i(U,[2,22]),i(U,[2,23]),i(U,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},i(U,[2,27]),{33:[1,46]},{35:[1,47]},i(U,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},i(xt,[2,40],{51:[1,51]}),i(xt,[2,41],{51:[1,52]}),i(U,[2,34]),i(U,[2,35]),i(U,[2,36]),i(U,[2,37]),i(U,[2,6]),i(U,[2,12]),{12:53,23:B,50:pt},i(U,[2,16]),i(nt,v,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},i(U,[2,28]),i(U,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},i(U,[2,13],{13:[1,63]}),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,20:[1,64],21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},i(U,[2,31]),i(U,[2,32]),i(U,[2,33]),i(xt,[2,42]),i(xt,[2,43]),i(U,[2,14]),i(U,[2,18]),i(nt,v,{7:68}),i(U,[2,25]),i(U,[2,26]),{4:m,5:b,8:8,9:10,10:12,11:13,12:14,15:E,16:_,18:L,20:[1,69],21:N,23:B,24:j,25:R,26:z,27:K,28:it,31:24,32:st,34:ut,36:bt,37:mt,41:yt,44:dt,45:ht,46:wt,47:X,50:pt},i(U,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(Z,Tt){if(Tt.recoverable)this.trace(Z);else{var Ht=new Error(Z);throw Ht.hash=Tt,Ht}},parse:function(Z){var Tt=this,Ht=[0],It=[],Ft=[null],ke=[],pn=this.table,Me="",ve=0,Ge=0,Ke=2,we=1,_e=ke.slice.call(arguments,1),$t=Object.create(this.lexer),re={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(re.yy[ie]=this.yy[ie]);$t.setInput(Z,re.yy),re.yy.lexer=$t,re.yy.parser=this,typeof $t.yylloc>"u"&&($t.yylloc={});var Oe=$t.yylloc;ke.push(Oe);var oe=$t.options&&$t.options.ranges;typeof re.yy.parseError=="function"?this.parseError=re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ne(){var Ee;return Ee=It.pop()||$t.lex()||we,typeof Ee!="number"&&(Ee instanceof Array&&(It=Ee,Ee=It.pop()),Ee=Tt.symbols_[Ee]||Ee),Ee}for(var me,cn,li,ya,da={},Oo,ds,Dr,nr;;){if(cn=Ht[Ht.length-1],this.defaultActions[cn]?li=this.defaultActions[cn]:((me===null||typeof me>"u")&&(me=Ne()),li=pn[cn]&&pn[cn][me]),typeof li>"u"||!li.length||!li[0]){var di="";nr=[];for(Oo in pn[cn])this.terminals_[Oo]&&Oo>Ke&&nr.push("'"+this.terminals_[Oo]+"'");$t.showPosition?di="Parse error on line "+(ve+1)+`: +`+$t.showPosition()+` +Expecting `+nr.join(", ")+", got '"+(this.terminals_[me]||me)+"'":di="Parse error on line "+(ve+1)+": Unexpected "+(me==we?"end of input":"'"+(this.terminals_[me]||me)+"'"),this.parseError(di,{text:$t.match,token:this.terminals_[me]||me,line:$t.yylineno,loc:Oe,expected:nr})}if(li[0]instanceof Array&&li.length>1)throw new Error("Parse Error: multiple actions possible at state: "+cn+", token: "+me);switch(li[0]){case 1:Ht.push(me),Ft.push($t.yytext),ke.push($t.yylloc),Ht.push(li[1]),me=null,Ge=$t.yyleng,Me=$t.yytext,ve=$t.yylineno,Oe=$t.yylloc;break;case 2:if(ds=this.productions_[li[1]][1],da.$=Ft[Ft.length-ds],da._$={first_line:ke[ke.length-(ds||1)].first_line,last_line:ke[ke.length-1].last_line,first_column:ke[ke.length-(ds||1)].first_column,last_column:ke[ke.length-1].last_column},oe&&(da._$.range=[ke[ke.length-(ds||1)].range[0],ke[ke.length-1].range[1]]),ya=this.performAction.apply(da,[Me,Ge,ve,re.yy,li[1],Ft,ke].concat(_e)),typeof ya<"u")return ya;ds&&(Ht=Ht.slice(0,-1*ds*2),Ft=Ft.slice(0,-1*ds),ke=ke.slice(0,-1*ds)),Ht.push(this.productions_[li[1]][0]),Ft.push(da.$),ke.push(da._$),Dr=pn[Ht[Ht.length-2]][Ht[Ht.length-1]],Ht.push(Dr);break;case 3:return!0}}return!0}},Nt=function(){var Ct={EOF:1,parseError:function(Tt,Ht){if(this.yy.parser)this.yy.parser.parseError(Tt,Ht);else throw new Error(Tt)},setInput:function(Z,Tt){return this.yy=Tt||this.yy||{},this._input=Z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var Tt=Z.match(/(?:\r\n?|\n).*/g);return Tt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var Tt=Z.length,Ht=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Tt),this.offset-=Tt;var It=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ht.length-1&&(this.yylineno-=Ht.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ht?(Ht.length===It.length?this.yylloc.first_column:0)+It[It.length-Ht.length].length-Ht[0].length:this.yylloc.first_column-Tt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Tt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),Tt=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+` +`+Tt+"^"},test_match:function(Z,Tt){var Ht,It,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),It=Z[0].match(/(?:\r\n?|\n).*/g),It&&(this.yylineno+=It.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:It?It[It.length-1].length-It[It.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Z[0].length),this.matched+=Z[0],Ht=this.performAction.call(this,this.yy,this,Tt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ht)return Ht;if(this._backtrack){for(var ke in Ft)this[ke]=Ft[ke];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,Tt,Ht,It;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),ke=0;keTt[0].length)){if(Tt=Ht,It=ke,this.options.backtrack_lexer){if(Z=this.test_match(Ht,Ft[ke]),Z!==!1)return Z;if(this._backtrack){Tt=!1;continue}else return!1}else if(!this.options.flex)break}return Tt?(Z=this.test_match(Tt,Ft[It]),Z!==!1?Z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Tt=this.next();return Tt||this.lex()},begin:function(Tt){this.conditionStack.push(Tt)},popState:function(){var Tt=this.conditionStack.length-1;return Tt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Tt){return Tt=this.conditionStack.length-1-Math.abs(Tt||0),Tt>=0?this.conditionStack[Tt]:"INITIAL"},pushState:function(Tt){this.begin(Tt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Tt,Ht,It,Ft){switch(It){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),Ht.yytext=Ht.yytext.substr(2).trim(),30;case 64:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return Ht.yytext=Ht.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return Ct}();Ot.lexer=Nt;function qt(){this.yy={}}return qt.prototype=Ot,Ot.Parser=qt,new qt}();kgt.parser=kgt;const $Rt=kgt,FGe="LR",BGe="TB",PK="state",Egt="relation",RGe="classDef",jGe="applyClass",RP="default",zRt="divider",Tgt="[*]",qRt="start",HRt=Tgt,GRt="end",VRt="color",URt="fill",$Ge="bgFill",zGe=",";function WRt(){return{}}let KRt=FGe,FK=[],jP=WRt();const YRt=()=>({relations:[],states:{},documents:{}});let BK={root:YRt()},k0=BK.root,$P=0,XRt=0;const qGe={LINE:0,DOTTED_LINE:1},HGe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},RK=i=>JSON.parse(JSON.stringify(i)),GGe=i=>{Ut.info("Setting root doc",i),FK=i},VGe=()=>FK,jK=(i,a,f)=>{if(a.stmt===Egt)jK(i,a.state1,!0),jK(i,a.state2,!1);else if(a.stmt===PK&&(a.id==="[*]"?(a.id=f?i.id+"_start":i.id+"_end",a.start=f):a.id=a.id.trim()),a.doc){const p=[];let v=[],m;for(m=0;m0&&v.length>0){const b={stmt:PK,id:HDt(),type:"divider",doc:RK(v)};p.push(RK(b)),a.doc=p}a.doc.forEach(b=>jK(a,b,!0))}},UGe=()=>(jK({id:"root"},{id:"root",doc:FK},!0),{id:"root",doc:FK}),WGe=i=>{let a;i.doc?a=i.doc:a=i,Ut.info(a),QRt(!0),Ut.info("Extract",a),a.forEach(f=>{switch(f.stmt){case PK:_T(f.id.trim(),f.type,f.doc,f.description,f.note,f.classes,f.styles,f.textStyles);break;case Egt:ZRt(f.state1,f.state2,f.description);break;case RGe:JRt(f.id.trim(),f.classes);break;case jGe:Agt(f.id.trim(),f.styleClass);break}})},_T=function(i,a=RP,f=null,p=null,v=null,m=null,b=null,E=null){const _=i==null?void 0:i.trim();k0.states[_]===void 0?(Ut.info("Adding state ",_,p),k0.states[_]={id:_,descriptions:[],type:a,doc:f,note:v,classes:[],styles:[],textStyles:[]}):(k0.states[_].doc||(k0.states[_].doc=f),k0.states[_].type||(k0.states[_].type=a)),p&&(Ut.info("Setting state description",_,p),typeof p=="string"&&Sgt(_,p.trim()),typeof p=="object"&&p.forEach(L=>Sgt(_,L.trim()))),v&&(k0.states[_].note=v,k0.states[_].note.text=Yr.sanitizeText(k0.states[_].note.text,Le())),m&&(Ut.info("Setting state classes",_,m),(typeof m=="string"?[m]:m).forEach(N=>Agt(_,N.trim()))),b&&(Ut.info("Setting state styles",_,b),(typeof b=="string"?[b]:b).forEach(N=>rVe(_,N.trim()))),E&&(Ut.info("Setting state styles",_,b),(typeof E=="string"?[E]:E).forEach(N=>iVe(_,N.trim())))},QRt=function(i){BK={root:YRt()},k0=BK.root,$P=0,jP=WRt(),i||ap()},zP=function(i){return k0.states[i]},KGe=function(){return k0.states},YGe=function(){Ut.info("Documents = ",BK)},XGe=function(){return k0.relations};function Cgt(i=""){let a=i;return i===Tgt&&($P++,a=`${qRt}${$P}`),a}function _gt(i="",a=RP){return i===Tgt?qRt:a}function QGe(i=""){let a=i;return i===HRt&&($P++,a=`${GRt}${$P}`),a}function ZGe(i="",a=RP){return i===HRt?GRt:a}function JGe(i,a,f){let p=Cgt(i.id.trim()),v=_gt(i.id.trim(),i.type),m=Cgt(a.id.trim()),b=_gt(a.id.trim(),a.type);_T(p,v,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),_T(m,b,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles),k0.relations.push({id1:p,id2:m,relationTitle:Yr.sanitizeText(f,Le())})}const ZRt=function(i,a,f){if(typeof i=="object")JGe(i,a,f);else{const p=Cgt(i.trim()),v=_gt(i),m=QGe(a.trim()),b=ZGe(a);_T(p,v),_T(m,b),k0.relations.push({id1:p,id2:m,title:Yr.sanitizeText(f,Le())})}},Sgt=function(i,a){const f=k0.states[i],p=a.startsWith(":")?a.replace(":","").trim():a;f.descriptions.push(Yr.sanitizeText(p,Le()))},tVe=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},eVe=()=>(XRt++,"divider-id-"+XRt),JRt=function(i,a=""){jP[i]===void 0&&(jP[i]={id:i,styles:[],textStyles:[]});const f=jP[i];a!=null&&a.split(zGe).forEach(p=>{const v=p.replace(/([^;]*);/,"$1").trim();if(p.match(VRt)){const b=v.replace(URt,$Ge).replace(VRt,URt);f.textStyles.push(b)}f.styles.push(v)})},nVe=function(){return jP},Agt=function(i,a){i.split(",").forEach(function(f){let p=zP(f);if(p===void 0){const v=f.trim();_T(v),p=zP(v)}p.classes.push(a)})},rVe=function(i,a){const f=zP(i);f!==void 0&&f.textStyles.push(a)},iVe=function(i,a){const f=zP(i);f!==void 0&&f.textStyles.push(a)},O5={getConfig:()=>Le().state,addState:_T,clear:QRt,getState:zP,getStates:KGe,getRelations:XGe,getClasses:nVe,getDirection:()=>KRt,addRelation:ZRt,getDividerId:eVe,setDirection:i=>{KRt=i},cleanupLabel:tVe,lineType:qGe,relationType:HGe,logDocuments:YGe,getRootDoc:VGe,setRootDoc:GGe,getRootDocV2:UGe,extract:WGe,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:op,setAccTitle:cg,getAccDescription:up,setAccDescription:cp,addStyleClass:JRt,setCssClass:Agt,addDescription:Sgt,setDiagramTitle:Z2,getDiagramTitle:Db},tjt=i=>` defs #statediagram-barbEnd { fill: ${i.transitionColor}; stroke: ${i.transitionColor}; @@ -1188,12 +1187,12 @@ g.stateGroup line { font-size: 18px; fill: ${i.textColor}; } -`,Cgt={},iGe=(i,a)=>{Cgt[i]=a},sGe=i=>Cgt[i],ZRt=()=>Object.keys(Cgt),aGe={get:sGe,set:iGe,keys:ZRt,size:()=>ZRt().length},oGe=i=>i.append("circle").attr("class","start-state").attr("r",De().state.sizeUnit).attr("cx",De().state.padding+De().state.sizeUnit).attr("cy",De().state.padding+De().state.sizeUnit),cGe=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",De().state.textHeight).attr("class","divider").attr("x2",De().state.textHeight*2).attr("y1",0).attr("y2",0),uGe=(i,a)=>{const f=i.append("text").attr("x",2*De().state.padding).attr("y",De().state.textHeight+2*De().state.padding).attr("font-size",De().state.fontSize).attr("class","state-title").text(a.id),p=f.node().getBBox();return i.insert("rect",":first-child").attr("x",De().state.padding).attr("y",De().state.padding).attr("width",p.width+2*De().state.padding).attr("height",p.height+2*De().state.padding).attr("rx",De().state.radius),f},lGe=(i,a)=>{const f=function(j,R,H){const Y=j.append("tspan").attr("x",2*De().state.padding).text(R);H||Y.attr("dy",De().state.textHeight)},v=i.append("text").attr("x",2*De().state.padding).attr("y",De().state.textHeight+1.3*De().state.padding).attr("font-size",De().state.fontSize).attr("class","state-title").text(a.descriptions[0]).node().getBBox(),m=v.height,b=i.append("text").attr("x",De().state.padding).attr("y",m+De().state.padding*.4+De().state.dividerMargin+De().state.textHeight).attr("class","state-description");let E=!0,C=!0;a.descriptions.forEach(function(j){E||(f(b,j,C),C=!1),E=!1});const A=i.append("line").attr("x1",De().state.padding).attr("y1",De().state.padding+m+De().state.dividerMargin/2).attr("y2",De().state.padding+m+De().state.dividerMargin/2).attr("class","descr-divider"),P=b.node().getBBox(),F=Math.max(P.width,v.width);return A.attr("x2",F+3*De().state.padding),i.insert("rect",":first-child").attr("x",De().state.padding).attr("y",De().state.padding).attr("width",F+2*De().state.padding).attr("height",P.height+m+2*De().state.padding).attr("rx",De().state.radius),i},hGe=(i,a,f)=>{const p=De().state.padding,v=2*De().state.padding,m=i.node().getBBox(),b=m.width,E=m.x,C=i.append("text").attr("x",0).attr("y",De().state.titleShift).attr("font-size",De().state.fontSize).attr("class","state-title").text(a.id),P=C.node().getBBox().width+v;let F=Math.max(P,b);F===b&&(F=F+v);let j;const R=i.node().getBBox();a.doc,j=E-p,P>b&&(j=(b-F)/2+p),Math.abs(E-R.x)b&&(j=E-(P-b)/2);const H=1-De().state.textHeight;return i.insert("rect",":first-child").attr("x",j).attr("y",H).attr("class",f?"alt-composit":"composit").attr("width",F).attr("height",R.height+De().state.textHeight+De().state.titleShift+1).attr("rx","0"),C.attr("x",j+p),P<=b&&C.attr("x",E+(F-v)/2-P/2+p),i.insert("rect",":first-child").attr("x",j).attr("y",De().state.titleShift-De().state.textHeight-De().state.padding).attr("width",F).attr("height",De().state.textHeight*3).attr("rx",De().state.radius),i.insert("rect",":first-child").attr("x",j).attr("y",De().state.titleShift-De().state.textHeight-De().state.padding).attr("width",F).attr("height",R.height+3+2*De().state.textHeight).attr("rx",De().state.radius),i},fGe=i=>(i.append("circle").attr("class","end-state-outer").attr("r",De().state.sizeUnit+De().state.miniPadding).attr("cx",De().state.padding+De().state.sizeUnit+De().state.miniPadding).attr("cy",De().state.padding+De().state.sizeUnit+De().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",De().state.sizeUnit).attr("cx",De().state.padding+De().state.sizeUnit+2).attr("cy",De().state.padding+De().state.sizeUnit+2)),dGe=(i,a)=>{let f=De().state.forkWidth,p=De().state.forkHeight;if(a.parentId){let v=f;f=p,p=v}return i.append("rect").style("stroke","black").style("fill","black").attr("width",f).attr("height",p).attr("x",De().state.padding).attr("y",De().state.padding)},gGe=(i,a,f,p)=>{let v=0;const m=p.append("text");m.style("text-anchor","start"),m.attr("class","noteText");let b=i.replace(/\r\n/g,"
");b=b.replace(/\n/g,"
");const E=b.split(ui.lineBreakRegex);let C=1.25*De().state.noteMargin;for(const A of E){const P=A.trim();if(P.length>0){const F=m.append("tspan");if(F.text(P),C===0){const j=F.node().getBBox();C+=j.height}v+=C,F.attr("x",a+De().state.noteMargin),F.attr("y",f+v+1.25*De().state.noteMargin)}}return{textWidth:m.node().getBBox().width,textHeight:v}},pGe=(i,a)=>{a.attr("class","state-note");const f=a.append("rect").attr("x",0).attr("y",De().state.padding),p=a.append("g"),{textWidth:v,textHeight:m}=gGe(i,0,0,p);return f.attr("height",m+2*De().state.noteMargin),f.attr("width",v+De().state.noteMargin*2),f},JRt=function(i,a){const f=a.id,p={id:f,label:a.id,width:0,height:0},v=i.append("g").attr("id",f).attr("class","stateGroup");a.type==="start"&&oGe(v),a.type==="end"&&fGe(v),(a.type==="fork"||a.type==="join")&&dGe(v,a),a.type==="note"&&pGe(a.note.text,v),a.type==="divider"&&cGe(v),a.type==="default"&&a.descriptions.length===0&&uGe(v,a),a.type==="default"&&a.descriptions.length>0&&lGe(v,a);const m=v.node().getBBox();return p.width=m.width+2*De().state.padding,p.height=m.height+2*De().state.padding,aGe.set(f,p),p};let tjt=0;const bGe=function(i,a,f){const p=function(C){switch(C){case P5.relationType.AGGREGATION:return"aggregation";case P5.relationType.EXTENSION:return"extension";case P5.relationType.COMPOSITION:return"composition";case P5.relationType.DEPENDENCY:return"dependency"}};a.points=a.points.filter(C=>!Number.isNaN(C.y));const v=a.points,m=YE().x(function(C){return C.x}).y(function(C){return C.y}).curve(MA),b=i.append("path").attr("d",m(v)).attr("id","edge"+tjt).attr("class","transition");let E="";if(De().state.arrowMarkerAbsolute&&(E=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,E=E.replace(/\(/g,"\\("),E=E.replace(/\)/g,"\\)")),b.attr("marker-end","url("+E+"#"+p(P5.relationType.DEPENDENCY)+"End)"),f.title!==void 0){const C=i.append("g").attr("class","stateLabel"),{x:A,y:P}=to.calcLabelPosition(a.points),F=ui.getRows(f.title);let j=0;const R=[];let H=0,Y=0;for(let it=0;it<=F.length;it++){const ft=C.append("text").attr("text-anchor","middle").text(F[it]).attr("x",A).attr("y",P+j),Tt=ft.node().getBBox();H=Math.max(H,Tt.width),Y=Math.min(Y,Tt.x),Wt.info(Tt.x,A,P+j),j===0&&(j=ft.node().getBBox().height,Wt.info("Title height",j,P)),R.push(ft)}let rt=j*F.length;if(F.length>1){const it=(F.length-1)*j*.5;R.forEach((ft,Tt)=>ft.attr("y",P+Tt*j-it)),rt=j*F.length}const J=C.node().getBBox();C.insert("rect",":first-child").attr("class","box").attr("x",A-H/2-De().state.padding/2).attr("y",P-rt/2-De().state.padding/2-3.5).attr("width",H+De().state.padding).attr("height",rt+De().state.padding),Wt.info(J)}tjt++};let $b;const Sgt={},vGe=function(){},wGe=function(i){i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},mGe=function(i,a,f,p){$b=De().state;const v=De().securityLevel;let m;v==="sandbox"&&(m=xr("#i"+a));const b=xr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body"),E=v==="sandbox"?m.nodes()[0].contentDocument:document;Wt.debug("Rendering diagram "+i);const C=b.select(`[id='${a}']`);wGe(C);const A=p.db.getRootDoc();ejt(A,C,void 0,!1,b,E,p);const P=$b.padding,F=C.node().getBBox(),j=F.width+P*2,R=F.height+P*2,H=j*1.75;og(C,R,H,$b.useMaxWidth),C.attr("viewBox",`${F.x-$b.padding} ${F.y-$b.padding} `+j+" "+R)},yGe=i=>i?i.length*$b.fontSizeFactor:1,ejt=(i,a,f,p,v,m,b)=>{const E=new l1({compound:!0,multigraph:!0});let C,A=!0;for(C=0;C{const Tt=ft.parentElement;let kt=0,mt=0;Tt&&(Tt.parentElement&&(kt=Tt.parentElement.getBBox().width),mt=parseInt(Tt.getAttribute("data-x-shift"),10),Number.isNaN(mt)&&(mt=0)),ft.setAttribute("x1",0-mt+8),ft.setAttribute("x2",kt-mt-8)})):Wt.debug("No Node "+J+": "+JSON.stringify(E.node(J)))});let Y=H.getBBox();E.edges().forEach(function(J){J!==void 0&&E.edge(J)!==void 0&&(Wt.debug("Edge "+J.v+" -> "+J.w+": "+JSON.stringify(E.edge(J))),bGe(a,E.edge(J),E.edge(J).relation))}),Y=H.getBBox();const rt={id:f||"root",label:f||"root",width:0,height:0};return rt.width=Y.width+2*$b.padding,rt.height=Y.height+2*$b.padding,Wt.debug("Doc rendered",rt,E),rt},xGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:BRt,db:P5,renderer:{setConf:vGe,draw:mGe},styles:QRt,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,P5.clear()}}},Symbol.toStringTag,{value:"Module"})),qK="rect",Agt="rectWithTitle",kGe="start",EGe="end",TGe="divider",_Ge="roundedWithTitle",CGe="note",SGe="noteGroup",gL="statediagram",AGe=`${gL}-state`,njt="transition",LGe="note",MGe=`${njt} note-edge`,DGe=`${gL}-${LGe}`,IGe=`${gL}-cluster`,OGe=`${gL}-cluster-alt`,rjt="parent",ijt="note",NGe="state",Lgt="----",PGe=`${Lgt}${ijt}`,sjt=`${Lgt}${rjt}`,ajt="fill:none",ojt="fill: #333",cjt="c",ujt="text",ljt="normal";let HK={},hk=0;const FGe=function(i){const a=Object.keys(i);for(const f of a)i[f]},BGe=function(i,a){return a.db.extract(a.db.getRootDocV2()),a.db.getClasses()};function RGe(i){return i==null?"":i.classes?i.classes.join(" "):""}function Mgt(i="",a=0,f="",p=Lgt){const v=f!==null&&f.length>0?`${p}${f}`:"";return`${NGe}-${i}${v}-${a}`}const HP=(i,a,f,p,v,m)=>{const b=f.id,E=RGe(p[b]);if(b!=="root"){let C=qK;f.start===!0&&(C=kGe),f.start===!1&&(C=EGe),f.type!==jP&&(C=f.type),HK[b]||(HK[b]={id:b,shape:C,description:ui.sanitizeText(b,De()),classes:`${E} ${AGe}`});const A=HK[b];f.description&&(Array.isArray(A.description)?(A.shape=Agt,A.description.push(f.description)):A.description.length>0?(A.shape=Agt,A.description===b?A.description=[f.description]:A.description=[A.description,f.description]):(A.shape=qK,A.description=f.description),A.description=ui.sanitizeTextOrArray(A.description,De())),A.description.length===1&&A.shape===Agt&&(A.shape=qK),!A.type&&f.doc&&(Wt.info("Setting cluster for ",b,Dgt(f)),A.type="group",A.dir=Dgt(f),A.shape=f.type===RRt?TGe:_Ge,A.classes=A.classes+" "+IGe+" "+(m?OGe:""));const P={labelStyle:"",shape:A.shape,labelText:A.description,classes:A.classes,style:"",id:b,dir:A.dir,domId:Mgt(b,hk),type:A.type,padding:15};if(P.centerLabel=!0,f.note){const F={labelStyle:"",shape:CGe,labelText:f.note.text,classes:DGe,style:"",id:b+PGe+"-"+hk,domId:Mgt(b,hk,ijt),type:A.type,padding:15},j={labelStyle:"",shape:SGe,labelText:f.note.text,classes:A.classes,style:"",id:b+sjt,domId:Mgt(b,hk,rjt),type:"group",padding:0};hk++;const R=b+sjt;i.setNode(R,j),i.setNode(F.id,F),i.setNode(b,P),i.setParent(b,R),i.setParent(F.id,R);let H=b,Y=F.id;f.note.position==="left of"&&(H=F.id,Y=b),i.setEdge(H,Y,{arrowhead:"none",arrowType:"",style:ajt,labelStyle:"",classes:MGe,arrowheadStyle:ojt,labelpos:cjt,labelType:ujt,thickness:ljt})}else i.setNode(b,P)}a&&a.id!=="root"&&(Wt.trace("Setting node ",b," to be child of its parent ",a.id),i.setParent(b,a.id)),f.doc&&(Wt.trace("Adding nodes children "),jGe(i,f,f.doc,p,v,!m))},jGe=(i,a,f,p,v,m)=>{Wt.trace("items",f),f.forEach(b=>{switch(b.stmt){case BK:HP(i,a,b,p,v,m);break;case jP:HP(i,a,b,p,v,m);break;case ygt:{HP(i,a,b.state1,p,v,m),HP(i,a,b.state2,p,v,m);const E={id:"edge"+hk,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:ajt,labelStyle:"",label:ui.sanitizeText(b.description,De()),arrowheadStyle:ojt,labelpos:cjt,labelType:ujt,thickness:ljt,classes:njt};i.setEdge(b.state1.id,b.state2.id,E,hk),hk++}break}})},Dgt=(i,a=PVe)=>{let f=a;if(i.doc)for(let p=0;p{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,P5.clear()}}},Symbol.toStringTag,{value:"Module"}));var Igt=function(){var i=function(Y,rt,J,it){for(J=J||{},it=Y.length;it--;J[Y[it]]=rt);return J},a=[1,2],f=[1,5],p=[6,9,11,17,18,20,22,23,24,26],v=[1,15],m=[1,16],b=[1,17],E=[1,18],C=[1,19],A=[1,20],P=[1,24],F=[4,6,9,11,17,18,20,22,23,24,26],j={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(rt,J,it,ft,Tt,kt,mt){var ct=kt.length-1;switch(Tt){case 1:return kt[ct-1];case 3:this.$=[];break;case 4:kt[ct-1].push(kt[ct]),this.$=kt[ct-1];break;case 5:case 6:this.$=kt[ct];break;case 7:case 8:this.$=[];break;case 11:ft.setDiagramTitle(kt[ct].substr(6)),this.$=kt[ct].substr(6);break;case 12:this.$=kt[ct].trim(),ft.setAccTitle(this.$);break;case 13:case 14:this.$=kt[ct].trim(),ft.setAccDescription(this.$);break;case 15:ft.addSection(kt[ct].substr(8)),this.$=kt[ct].substr(8);break;case 16:ft.addTask(kt[ct-1],kt[ct]),this.$="task";break;case 18:ft.parseDirective("%%{","open_directive");break;case 19:ft.parseDirective(kt[ct],"type_directive");break;case 20:kt[ct]=kt[ct].trim().replace(/'/g,'"'),ft.parseDirective(kt[ct],"arg_directive");break;case 21:ft.parseDirective("}%%","close_directive","journey");break}},table:[{3:1,4:a,7:3,12:4,26:f},{1:[3]},i(p,[2,3],{5:6}),{3:7,4:a,7:3,12:4,26:f},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:v,18:m,20:b,22:E,23:C,24:A,26:f},{1:[2,2]},{14:22,15:[1,23],29:P},i([15,29],[2,19]),i(p,[2,8],{1:[2,1]}),i(p,[2,4]),{7:21,10:25,12:4,17:v,18:m,20:b,22:E,23:C,24:A,26:f},i(p,[2,6]),i(p,[2,7]),i(p,[2,11]),{19:[1,26]},{21:[1,27]},i(p,[2,14]),i(p,[2,15]),{25:[1,28]},i(p,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},i(p,[2,5]),i(p,[2,12]),i(p,[2,13]),i(p,[2,16]),i(F,[2,9]),{14:32,29:P},{29:[2,20]},{11:[1,33]},i(F,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(rt,J){if(J.recoverable)this.trace(rt);else{var it=new Error(rt);throw it.hash=J,it}},parse:function(rt){var J=this,it=[0],ft=[],Tt=[null],kt=[],mt=this.table,ct="",yt=0,st=0,xt=2,ht=1,dt=kt.slice.call(arguments,1),Ct=Object.create(this.lexer),tt={yy:{}};for(var Pt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Pt)&&(tt.yy[Pt]=this.yy[Pt]);Ct.setInput(rt,tt.yy),tt.yy.lexer=Ct,tt.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var pt=Ct.yylloc;kt.push(pt);var Ft=Ct.options&&Ct.options.ranges;typeof tt.yy.parseError=="function"?this.parseError=tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(){var ne;return ne=ft.pop()||Ct.lex()||ht,typeof ne!="number"&&(ne instanceof Array&&(ft=ne,ne=ft.pop()),ne=J.symbols_[ne]||ne),ne}for(var Rt,Bt,vt,Ot,Vt={},qe,_n,Te,Wn;;){if(Bt=it[it.length-1],this.defaultActions[Bt]?vt=this.defaultActions[Bt]:((Rt===null||typeof Rt>"u")&&(Rt=X()),vt=mt[Bt]&&mt[Bt][Rt]),typeof vt>"u"||!vt.length||!vt[0]){var Ae="";Wn=[];for(qe in mt[Bt])this.terminals_[qe]&&qe>xt&&Wn.push("'"+this.terminals_[qe]+"'");Ct.showPosition?Ae="Parse error on line "+(yt+1)+`: -`+Ct.showPosition()+` -Expecting `+Wn.join(", ")+", got '"+(this.terminals_[Rt]||Rt)+"'":Ae="Parse error on line "+(yt+1)+": Unexpected "+(Rt==ht?"end of input":"'"+(this.terminals_[Rt]||Rt)+"'"),this.parseError(Ae,{text:Ct.match,token:this.terminals_[Rt]||Rt,line:Ct.yylineno,loc:pt,expected:Wn})}if(vt[0]instanceof Array&&vt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Bt+", token: "+Rt);switch(vt[0]){case 1:it.push(Rt),Tt.push(Ct.yytext),kt.push(Ct.yylloc),it.push(vt[1]),Rt=null,st=Ct.yyleng,ct=Ct.yytext,yt=Ct.yylineno,pt=Ct.yylloc;break;case 2:if(_n=this.productions_[vt[1]][1],Vt.$=Tt[Tt.length-_n],Vt._$={first_line:kt[kt.length-(_n||1)].first_line,last_line:kt[kt.length-1].last_line,first_column:kt[kt.length-(_n||1)].first_column,last_column:kt[kt.length-1].last_column},Ft&&(Vt._$.range=[kt[kt.length-(_n||1)].range[0],kt[kt.length-1].range[1]]),Ot=this.performAction.apply(Vt,[ct,st,yt,tt.yy,vt[1],Tt,kt].concat(dt)),typeof Ot<"u")return Ot;_n&&(it=it.slice(0,-1*_n*2),Tt=Tt.slice(0,-1*_n),kt=kt.slice(0,-1*_n)),it.push(this.productions_[vt[1]][0]),Tt.push(Vt.$),kt.push(Vt._$),Te=mt[it[it.length-2]][it[it.length-1]],it.push(Te);break;case 3:return!0}}return!0}},R=function(){var Y={EOF:1,parseError:function(J,it){if(this.yy.parser)this.yy.parser.parseError(J,it);else throw new Error(J)},setInput:function(rt,J){return this.yy=J||this.yy||{},this._input=rt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var rt=this._input[0];this.yytext+=rt,this.yyleng++,this.offset++,this.match+=rt,this.matched+=rt;var J=rt.match(/(?:\r\n?|\n).*/g);return J?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),rt},unput:function(rt){var J=rt.length,it=rt.split(/(?:\r\n?|\n)/g);this._input=rt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-J),this.offset-=J;var ft=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),it.length-1&&(this.yylineno-=it.length-1);var Tt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:it?(it.length===ft.length?this.yylloc.first_column:0)+ft[ft.length-it.length].length-it[0].length:this.yylloc.first_column-J},this.options.ranges&&(this.yylloc.range=[Tt[0],Tt[0]+this.yyleng-J]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(rt){this.unput(this.match.slice(rt))},pastInput:function(){var rt=this.matched.substr(0,this.matched.length-this.match.length);return(rt.length>20?"...":"")+rt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var rt=this.match;return rt.length<20&&(rt+=this._input.substr(0,20-rt.length)),(rt.substr(0,20)+(rt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var rt=this.pastInput(),J=new Array(rt.length+1).join("-");return rt+this.upcomingInput()+` -`+J+"^"},test_match:function(rt,J){var it,ft,Tt;if(this.options.backtrack_lexer&&(Tt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Tt.yylloc.range=this.yylloc.range.slice(0))),ft=rt[0].match(/(?:\r\n?|\n).*/g),ft&&(this.yylineno+=ft.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ft?ft[ft.length-1].length-ft[ft.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+rt[0].length},this.yytext+=rt[0],this.match+=rt[0],this.matches=rt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(rt[0].length),this.matched+=rt[0],it=this.performAction.call(this,this.yy,this,J,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),it)return it;if(this._backtrack){for(var kt in Tt)this[kt]=Tt[kt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var rt,J,it,ft;this._more||(this.yytext="",this.match="");for(var Tt=this._currentRules(),kt=0;ktJ[0].length)){if(J=it,ft=kt,this.options.backtrack_lexer){if(rt=this.test_match(it,Tt[kt]),rt!==!1)return rt;if(this._backtrack){J=!1;continue}else return!1}else if(!this.options.flex)break}return J?(rt=this.test_match(J,Tt[ft]),rt!==!1?rt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var J=this.next();return J||this.lex()},begin:function(J){this.conditionStack.push(J)},popState:function(){var J=this.conditionStack.length-1;return J>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(J){return J=this.conditionStack.length-1-Math.abs(J||0),J>=0?this.conditionStack[J]:"INITIAL"},pushState:function(J){this.begin(J)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(J,it,ft,Tt){switch(ft){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:break;case 6:break;case 7:return 11;case 8:break;case 9:break;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};return Y}();j.lexer=R;function H(){this.yy={}}return H.prototype=j,j.Parser=H,new H}();Igt.parser=Igt;const zGe=Igt;let pL="";const Ogt=[],VP=[],GP=[],qGe=function(i,a,f){J1.parseDirective(this,i,a,f)},HGe=function(){Ogt.length=0,VP.length=0,pL="",GP.length=0,cg()},VGe=function(i){pL=i,Ogt.push(i)},GGe=function(){return Ogt},UGe=function(){let i=hjt();const a=100;let f=0;for(;!i&&f{f.people&&i.push(...f.people)}),[...new Set(i)].sort()},KGe=function(i,a){const f=a.substr(1).split(":");let p=0,v=[];f.length===1?(p=Number(f[0]),v=[]):(p=Number(f[0]),v=f[1].split(","));const m=v.map(E=>E.trim()),b={section:pL,type:pL,people:m,task:i,score:p};GP.push(b)},YGe=function(i){const a={section:pL,type:pL,description:i,task:i,classes:[]};VP.push(a)},hjt=function(){const i=function(f){return GP[f].processed};let a=!0;for(const[f,p]of GP.entries())i(f),a=a&&p.processed;return a},fjt={parseDirective:qGe,getConfig:()=>De().journey,clear:HGe,setDiagramTitle:Nb,getDiagramTitle:hp,setAccTitle:m0,getAccTitle:ug,setAccDescription:lg,getAccDescription:hg,addSection:VGe,getSections:GGe,getTasks:UGe,addTask:KGe,addTaskOrg:YGe,getActors:function(){return WGe()}},XGe=i=>`.label { +`,Lgt={},sVe=(i,a)=>{Lgt[i]=a},aVe=i=>Lgt[i],ejt=()=>Object.keys(Lgt),oVe={get:aVe,set:sVe,keys:ejt,size:()=>ejt().length},cVe=i=>i.append("circle").attr("class","start-state").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit).attr("cy",Le().state.padding+Le().state.sizeUnit),uVe=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Le().state.textHeight).attr("class","divider").attr("x2",Le().state.textHeight*2).attr("y1",0).attr("y2",0),lVe=(i,a)=>{const f=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+2*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),p=f.node().getBBox();return i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",p.width+2*Le().state.padding).attr("height",p.height+2*Le().state.padding).attr("rx",Le().state.radius),f},hVe=(i,a)=>{const f=function(j,R,z){const K=j.append("tspan").attr("x",2*Le().state.padding).text(R);z||K.attr("dy",Le().state.textHeight)},v=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+1.3*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.descriptions[0]).node().getBBox(),m=v.height,b=i.append("text").attr("x",Le().state.padding).attr("y",m+Le().state.padding*.4+Le().state.dividerMargin+Le().state.textHeight).attr("class","state-description");let E=!0,_=!0;a.descriptions.forEach(function(j){E||(f(b,j,_),_=!1),E=!1});const L=i.append("line").attr("x1",Le().state.padding).attr("y1",Le().state.padding+m+Le().state.dividerMargin/2).attr("y2",Le().state.padding+m+Le().state.dividerMargin/2).attr("class","descr-divider"),N=b.node().getBBox(),B=Math.max(N.width,v.width);return L.attr("x2",B+3*Le().state.padding),i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",B+2*Le().state.padding).attr("height",N.height+m+2*Le().state.padding).attr("rx",Le().state.radius),i},fVe=(i,a,f)=>{const p=Le().state.padding,v=2*Le().state.padding,m=i.node().getBBox(),b=m.width,E=m.x,_=i.append("text").attr("x",0).attr("y",Le().state.titleShift).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),N=_.node().getBBox().width+v;let B=Math.max(N,b);B===b&&(B=B+v);let j;const R=i.node().getBBox();a.doc,j=E-p,N>b&&(j=(b-B)/2+p),Math.abs(E-R.x)b&&(j=E-(N-b)/2);const z=1-Le().state.textHeight;return i.insert("rect",":first-child").attr("x",j).attr("y",z).attr("class",f?"alt-composit":"composit").attr("width",B).attr("height",R.height+Le().state.textHeight+Le().state.titleShift+1).attr("rx","0"),_.attr("x",j+p),N<=b&&_.attr("x",E+(B-v)/2-N/2+p),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",Le().state.textHeight*3).attr("rx",Le().state.radius),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",R.height+3+2*Le().state.textHeight).attr("rx",Le().state.radius),i},dVe=i=>(i.append("circle").attr("class","end-state-outer").attr("r",Le().state.sizeUnit+Le().state.miniPadding).attr("cx",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding).attr("cy",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit+2).attr("cy",Le().state.padding+Le().state.sizeUnit+2)),gVe=(i,a)=>{let f=Le().state.forkWidth,p=Le().state.forkHeight;if(a.parentId){let v=f;f=p,p=v}return i.append("rect").style("stroke","black").style("fill","black").attr("width",f).attr("height",p).attr("x",Le().state.padding).attr("y",Le().state.padding)},pVe=(i,a,f,p)=>{let v=0;const m=p.append("text");m.style("text-anchor","start"),m.attr("class","noteText");let b=i.replace(/\r\n/g,"
");b=b.replace(/\n/g,"
");const E=b.split(Yr.lineBreakRegex);let _=1.25*Le().state.noteMargin;for(const L of E){const N=L.trim();if(N.length>0){const B=m.append("tspan");if(B.text(N),_===0){const j=B.node().getBBox();_+=j.height}v+=_,B.attr("x",a+Le().state.noteMargin),B.attr("y",f+v+1.25*Le().state.noteMargin)}}return{textWidth:m.node().getBBox().width,textHeight:v}},bVe=(i,a)=>{a.attr("class","state-note");const f=a.append("rect").attr("x",0).attr("y",Le().state.padding),p=a.append("g"),{textWidth:v,textHeight:m}=pVe(i,0,0,p);return f.attr("height",m+2*Le().state.noteMargin),f.attr("width",v+Le().state.noteMargin*2),f},njt=function(i,a){const f=a.id,p={id:f,label:a.id,width:0,height:0},v=i.append("g").attr("id",f).attr("class","stateGroup");a.type==="start"&&cVe(v),a.type==="end"&&dVe(v),(a.type==="fork"||a.type==="join")&&gVe(v,a),a.type==="note"&&bVe(a.note.text,v),a.type==="divider"&&uVe(v),a.type==="default"&&a.descriptions.length===0&&lVe(v,a),a.type==="default"&&a.descriptions.length>0&&hVe(v,a);const m=v.node().getBBox();return p.width=m.width+2*Le().state.padding,p.height=m.height+2*Le().state.padding,oVe.set(f,p),p};let rjt=0;const vVe=function(i,a,f){const p=function(_){switch(_){case O5.relationType.AGGREGATION:return"aggregation";case O5.relationType.EXTENSION:return"extension";case O5.relationType.COMPOSITION:return"composition";case O5.relationType.DEPENDENCY:return"dependency"}};a.points=a.points.filter(_=>!Number.isNaN(_.y));const v=a.points,m=Z7().x(function(_){return _.x}).y(function(_){return _.y}).curve(FN),b=i.append("path").attr("d",m(v)).attr("id","edge"+rjt).attr("class","transition");let E="";if(Le().state.arrowMarkerAbsolute&&(E=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,E=E.replace(/\(/g,"\\("),E=E.replace(/\)/g,"\\)")),b.attr("marker-end","url("+E+"#"+p(O5.relationType.DEPENDENCY)+"End)"),f.title!==void 0){const _=i.append("g").attr("class","stateLabel"),{x:L,y:N}=$a.calcLabelPosition(a.points),B=Yr.getRows(f.title);let j=0;const R=[];let z=0,K=0;for(let ut=0;ut<=B.length;ut++){const bt=_.append("text").attr("text-anchor","middle").text(B[ut]).attr("x",L).attr("y",N+j),mt=bt.node().getBBox();z=Math.max(z,mt.width),K=Math.min(K,mt.x),Ut.info(mt.x,L,N+j),j===0&&(j=bt.node().getBBox().height,Ut.info("Title height",j,N)),R.push(bt)}let it=j*B.length;if(B.length>1){const ut=(B.length-1)*j*.5;R.forEach((bt,mt)=>bt.attr("y",N+mt*j-ut)),it=j*B.length}const st=_.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",L-z/2-Le().state.padding/2).attr("y",N-it/2-Le().state.padding/2-3.5).attr("width",z+Le().state.padding).attr("height",it+Le().state.padding),Ut.info(st)}rjt++};let Rb;const Mgt={},wVe=function(){},mVe=function(i){i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},yVe=function(i,a,f,p){Rb=Le().state;const v=Le().securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const b=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body"),E=v==="sandbox"?m.nodes()[0].contentDocument:document;Ut.debug("Rendering diagram "+i);const _=b.select(`[id='${a}']`);mVe(_);const L=p.db.getRootDoc();ijt(L,_,void 0,!1,b,E,p);const N=Rb.padding,B=_.node().getBBox(),j=B.width+N*2,R=B.height+N*2,z=j*1.75;og(_,R,z,Rb.useMaxWidth),_.attr("viewBox",`${B.x-Rb.padding} ${B.y-Rb.padding} `+j+" "+R)},xVe=i=>i?i.length*Rb.fontSizeFactor:1,ijt=(i,a,f,p,v,m,b)=>{const E=new a1({compound:!0,multigraph:!0});let _,L=!0;for(_=0;_{const mt=bt.parentElement;let yt=0,dt=0;mt&&(mt.parentElement&&(yt=mt.parentElement.getBBox().width),dt=parseInt(mt.getAttribute("data-x-shift"),10),Number.isNaN(dt)&&(dt=0)),bt.setAttribute("x1",0-dt+8),bt.setAttribute("x2",yt-dt-8)})):Ut.debug("No Node "+st+": "+JSON.stringify(E.node(st)))});let K=z.getBBox();E.edges().forEach(function(st){st!==void 0&&E.edge(st)!==void 0&&(Ut.debug("Edge "+st.v+" -> "+st.w+": "+JSON.stringify(E.edge(st))),vVe(a,E.edge(st),E.edge(st).relation))}),K=z.getBBox();const it={id:f||"root",label:f||"root",width:0,height:0};return it.width=K.width+2*Rb.padding,it.height=K.height+2*Rb.padding,Ut.debug("Doc rendered",it,E),it},kVe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$Rt,db:O5,renderer:{setConf:wVe,draw:yVe},styles:tjt,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,O5.clear()}}},Symbol.toStringTag,{value:"Module"})),$K="rect",Igt="rectWithTitle",EVe="start",TVe="end",CVe="divider",_Ve="roundedWithTitle",SVe="note",AVe="noteGroup",dL="statediagram",LVe=`${dL}-state`,sjt="transition",MVe="note",IVe=`${sjt} note-edge`,DVe=`${dL}-${MVe}`,OVe=`${dL}-cluster`,NVe=`${dL}-cluster-alt`,ajt="parent",ojt="note",PVe="state",Dgt="----",FVe=`${Dgt}${ojt}`,cjt=`${Dgt}${ajt}`,ujt="fill:none",ljt="fill: #333",hjt="c",fjt="text",djt="normal";let zK={},gk=0;const BVe=function(i){const a=Object.keys(i);for(const f of a)i[f]},RVe=function(i,a){return a.db.extract(a.db.getRootDocV2()),a.db.getClasses()};function jVe(i){return i==null?"":i.classes?i.classes.join(" "):""}function Ogt(i="",a=0,f="",p=Dgt){const v=f!==null&&f.length>0?`${p}${f}`:"";return`${PVe}-${i}${v}-${a}`}const qP=(i,a,f,p,v,m)=>{const b=f.id,E=jVe(p[b]);if(b!=="root"){let _=$K;f.start===!0&&(_=EVe),f.start===!1&&(_=TVe),f.type!==RP&&(_=f.type),zK[b]||(zK[b]={id:b,shape:_,description:Yr.sanitizeText(b,Le()),classes:`${E} ${LVe}`});const L=zK[b];f.description&&(Array.isArray(L.description)?(L.shape=Igt,L.description.push(f.description)):L.description.length>0?(L.shape=Igt,L.description===b?L.description=[f.description]:L.description=[L.description,f.description]):(L.shape=$K,L.description=f.description),L.description=Yr.sanitizeTextOrArray(L.description,Le())),L.description.length===1&&L.shape===Igt&&(L.shape=$K),!L.type&&f.doc&&(Ut.info("Setting cluster for ",b,Ngt(f)),L.type="group",L.dir=Ngt(f),L.shape=f.type===zRt?CVe:_Ve,L.classes=L.classes+" "+OVe+" "+(m?NVe:""));const N={labelStyle:"",shape:L.shape,labelText:L.description,classes:L.classes,style:"",id:b,dir:L.dir,domId:Ogt(b,gk),type:L.type,padding:15};if(N.centerLabel=!0,f.note){const B={labelStyle:"",shape:SVe,labelText:f.note.text,classes:DVe,style:"",id:b+FVe+"-"+gk,domId:Ogt(b,gk,ojt),type:L.type,padding:15},j={labelStyle:"",shape:AVe,labelText:f.note.text,classes:L.classes,style:"",id:b+cjt,domId:Ogt(b,gk,ajt),type:"group",padding:0};gk++;const R=b+cjt;i.setNode(R,j),i.setNode(B.id,B),i.setNode(b,N),i.setParent(b,R),i.setParent(B.id,R);let z=b,K=B.id;f.note.position==="left of"&&(z=B.id,K=b),i.setEdge(z,K,{arrowhead:"none",arrowType:"",style:ujt,labelStyle:"",classes:IVe,arrowheadStyle:ljt,labelpos:hjt,labelType:fjt,thickness:djt})}else i.setNode(b,N)}a&&a.id!=="root"&&(Ut.trace("Setting node ",b," to be child of its parent ",a.id),i.setParent(b,a.id)),f.doc&&(Ut.trace("Adding nodes children "),$Ve(i,f,f.doc,p,v,!m))},$Ve=(i,a,f,p,v,m)=>{Ut.trace("items",f),f.forEach(b=>{switch(b.stmt){case PK:qP(i,a,b,p,v,m);break;case RP:qP(i,a,b,p,v,m);break;case Egt:{qP(i,a,b.state1,p,v,m),qP(i,a,b.state2,p,v,m);const E={id:"edge"+gk,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:ujt,labelStyle:"",label:Yr.sanitizeText(b.description,Le()),arrowheadStyle:ljt,labelpos:hjt,labelType:fjt,thickness:djt,classes:sjt};i.setEdge(b.state1.id,b.state2.id,E,gk),gk++}break}})},Ngt=(i,a=BGe)=>{let f=a;if(i.doc)for(let p=0;p{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,O5.clear()}}},Symbol.toStringTag,{value:"Module"}));var Pgt=function(){var i=function(B,j,R,z){for(R=R||{},z=B.length;z--;R[B[z]]=j);return R},a=[6,8,10,11,12,14,16,17,18],f=[1,9],p=[1,10],v=[1,11],m=[1,12],b=[1,13],E=[1,14],_={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(j,R,z,K,it,st,ut){var bt=st.length-1;switch(it){case 1:return st[bt-1];case 2:this.$=[];break;case 3:st[bt-1].push(st[bt]),this.$=st[bt-1];break;case 4:case 5:this.$=st[bt];break;case 6:case 7:this.$=[];break;case 8:K.setDiagramTitle(st[bt].substr(6)),this.$=st[bt].substr(6);break;case 9:this.$=st[bt].trim(),K.setAccTitle(this.$);break;case 10:case 11:this.$=st[bt].trim(),K.setAccDescription(this.$);break;case 12:K.addSection(st[bt].substr(8)),this.$=st[bt].substr(8);break;case 13:K.addTask(st[bt-1],st[bt]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:v,16:m,17:b,18:E},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:15,11:f,12:p,14:v,16:m,17:b,18:E},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,16]},{15:[1,17]},i(a,[2,11]),i(a,[2,12]),{19:[1,18]},i(a,[2,4]),i(a,[2,9]),i(a,[2,10]),i(a,[2,13])],defaultActions:{},parseError:function(j,R){if(R.recoverable)this.trace(j);else{var z=new Error(j);throw z.hash=R,z}},parse:function(j){var R=this,z=[0],K=[],it=[null],st=[],ut=this.table,bt="",mt=0,yt=0,dt=2,ht=1,wt=st.slice.call(arguments,1),X=Object.create(this.lexer),pt={yy:{}};for(var U in this.yy)Object.prototype.hasOwnProperty.call(this.yy,U)&&(pt.yy[U]=this.yy[U]);X.setInput(j,pt.yy),pt.yy.lexer=X,pt.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var xt=X.yylloc;st.push(xt);var nt=X.options&&X.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var Me;return Me=K.pop()||X.lex()||ht,typeof Me!="number"&&(Me instanceof Array&&(K=Me,Me=K.pop()),Me=R.symbols_[Me]||Me),Me}for(var Nt,qt,Ct,Z,Tt={},Ht,It,Ft,ke;;){if(qt=z[z.length-1],this.defaultActions[qt]?Ct=this.defaultActions[qt]:((Nt===null||typeof Nt>"u")&&(Nt=Ot()),Ct=ut[qt]&&ut[qt][Nt]),typeof Ct>"u"||!Ct.length||!Ct[0]){var pn="";ke=[];for(Ht in ut[qt])this.terminals_[Ht]&&Ht>dt&&ke.push("'"+this.terminals_[Ht]+"'");X.showPosition?pn="Parse error on line "+(mt+1)+`: +`+X.showPosition()+` +Expecting `+ke.join(", ")+", got '"+(this.terminals_[Nt]||Nt)+"'":pn="Parse error on line "+(mt+1)+": Unexpected "+(Nt==ht?"end of input":"'"+(this.terminals_[Nt]||Nt)+"'"),this.parseError(pn,{text:X.match,token:this.terminals_[Nt]||Nt,line:X.yylineno,loc:xt,expected:ke})}if(Ct[0]instanceof Array&&Ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+qt+", token: "+Nt);switch(Ct[0]){case 1:z.push(Nt),it.push(X.yytext),st.push(X.yylloc),z.push(Ct[1]),Nt=null,yt=X.yyleng,bt=X.yytext,mt=X.yylineno,xt=X.yylloc;break;case 2:if(It=this.productions_[Ct[1]][1],Tt.$=it[it.length-It],Tt._$={first_line:st[st.length-(It||1)].first_line,last_line:st[st.length-1].last_line,first_column:st[st.length-(It||1)].first_column,last_column:st[st.length-1].last_column},nt&&(Tt._$.range=[st[st.length-(It||1)].range[0],st[st.length-1].range[1]]),Z=this.performAction.apply(Tt,[bt,yt,mt,pt.yy,Ct[1],it,st].concat(wt)),typeof Z<"u")return Z;It&&(z=z.slice(0,-1*It*2),it=it.slice(0,-1*It),st=st.slice(0,-1*It)),z.push(this.productions_[Ct[1]][0]),it.push(Tt.$),st.push(Tt._$),Ft=ut[z[z.length-2]][z[z.length-1]],z.push(Ft);break;case 3:return!0}}return!0}},L=function(){var B={EOF:1,parseError:function(R,z){if(this.yy.parser)this.yy.parser.parseError(R,z);else throw new Error(R)},setInput:function(j,R){return this.yy=R||this.yy||{},this._input=j,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var R=j.match(/(?:\r\n?|\n).*/g);return R?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),j},unput:function(j){var R=j.length,z=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-R),this.offset-=R;var K=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var it=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===K.length?this.yylloc.first_column:0)+K[K.length-z.length].length-z[0].length:this.yylloc.first_column-R},this.options.ranges&&(this.yylloc.range=[it[0],it[0]+this.yyleng-R]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(j){this.unput(this.match.slice(j))},pastInput:function(){var j=this.matched.substr(0,this.matched.length-this.match.length);return(j.length>20?"...":"")+j.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var j=this.match;return j.length<20&&(j+=this._input.substr(0,20-j.length)),(j.substr(0,20)+(j.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var j=this.pastInput(),R=new Array(j.length+1).join("-");return j+this.upcomingInput()+` +`+R+"^"},test_match:function(j,R){var z,K,it;if(this.options.backtrack_lexer&&(it={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(it.yylloc.range=this.yylloc.range.slice(0))),K=j[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+j[0].length},this.yytext+=j[0],this.match+=j[0],this.matches=j,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(j[0].length),this.matched+=j[0],z=this.performAction.call(this,this.yy,this,R,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var st in it)this[st]=it[st];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,R,z,K;this._more||(this.yytext="",this.match="");for(var it=this._currentRules(),st=0;stR[0].length)){if(R=z,K=st,this.options.backtrack_lexer){if(j=this.test_match(z,it[st]),j!==!1)return j;if(this._backtrack){R=!1;continue}else return!1}else if(!this.options.flex)break}return R?(j=this.test_match(R,it[K]),j!==!1?j:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var R=this.next();return R||this.lex()},begin:function(R){this.conditionStack.push(R)},popState:function(){var R=this.conditionStack.length-1;return R>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(R){return R=this.conditionStack.length-1-Math.abs(R||0),R>=0?this.conditionStack[R]:"INITIAL"},pushState:function(R){this.begin(R)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(R,z,K,it){switch(K){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return B}();_.lexer=L;function N(){this.yy={}}return N.prototype=_,_.Parser=N,new N}();Pgt.parser=Pgt;const qVe=Pgt;let gL="";const Fgt=[],HP=[],GP=[],HVe=function(){Fgt.length=0,HP.length=0,gL="",GP.length=0,ap()},GVe=function(i){gL=i,Fgt.push(i)},VVe=function(){return Fgt},UVe=function(){let i=gjt();const a=100;let f=0;for(;!i&&f{f.people&&i.push(...f.people)}),[...new Set(i)].sort()},KVe=function(i,a){const f=a.substr(1).split(":");let p=0,v=[];f.length===1?(p=Number(f[0]),v=[]):(p=Number(f[0]),v=f[1].split(","));const m=v.map(E=>E.trim()),b={section:gL,type:gL,people:m,task:i,score:p};GP.push(b)},YVe=function(i){const a={section:gL,type:gL,description:i,task:i,classes:[]};HP.push(a)},gjt=function(){const i=function(f){return GP[f].processed};let a=!0;for(const[f,p]of GP.entries())i(f),a=a&&p.processed;return a},pjt={getConfig:()=>Le().journey,clear:HVe,setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:GVe,getSections:VVe,getTasks:UVe,addTask:KVe,addTaskOrg:YVe,getActors:function(){return WVe()}},XVe=i=>`.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); color: ${i.textColor}; @@ -1326,38 +1325,38 @@ Expecting `+Wn.join(", ")+", got '"+(this.terminals_[Rt]||Rt)+"'":Ae="Parse erro .actor-5 { ${i.actor5?`fill: ${i.actor5}`:""}; } -`,Ngt=function(i,a){return WW(i,a)},QGe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(C){const A=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);C.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(C){const A=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);C.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(C){C.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},djt=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},gjt=function(i,a){return sDe(i,a)},ZGe=function(i,a){function f(v,m,b,E,C){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-C)+" "+(v+b-C*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,gjt(i,a)},JGe=function(i,a,f){const p=i.append("g"),v=u9();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width*a.taskCount+f.diagramMarginX*(a.taskCount-1),v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,Ngt(p,v),bjt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let pjt=-1;const tUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");pjt++;const m=300+5*30;v.append("line").attr("id","task"+pjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),QGe(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=u9();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,Ngt(v,b);let E=a.x+14;a.people.forEach(C=>{const A=a.actors[C].color,P={cx:E,cy:a.y,r:7,fill:A,stroke:"#000",title:C,pos:a.actors[C].position};djt(v,P),E+=10}),bjt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},eUe=function(i,a){pNt(i,a)},bjt=function(){function i(v,m,b,E,C,A,P,F){const j=m.append("text").attr("x",b+C/2).attr("y",E+A/2+5).style("font-color",F).style("text-anchor","middle").text(v);p(j,P)}function a(v,m,b,E,C,A,P,F,j){const{taskFontSize:R,taskFontFamily:H}=F,Y=v.split(//gi);for(let rt=0;rt{const v=F5[p].color,m={cx:20,cy:f,r:7,fill:v,stroke:"#000",pos:F5[p].position};UP.drawCircle(i,m);const b={x:40,y:f+7,fill:"#666",text:p,textMargin:a.boxTextMargin|5};UP.drawText(i,b),f+=20})}const VK=De().journey,E9=VK.leftMargin,iUe=function(i,a,f,p){const v=De().journey,m=De().securityLevel;let b;m==="sandbox"&&(b=xr("#i"+a));const E=xr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body");iv.init();const C=E.select("#"+a);UP.initGraphics(C);const A=p.db.getTasks(),P=p.db.getDiagramTitle(),F=p.db.getActors();for(const J in F5)delete F5[J];let j=0;F.forEach(J=>{F5[J]={color:v.actorColours[j%v.actorColours.length],position:j},j++}),rUe(C),iv.insert(0,0,E9,Object.keys(F5).length*50),sUe(C,A,0);const R=iv.getBounds();P&&C.append("text").text(P).attr("x",E9).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const H=R.stopy-R.starty+2*v.diagramMarginY,Y=E9+R.stopx+2*v.diagramMarginX;og(C,H,Y,v.useMaxWidth),C.append("line").attr("x1",E9).attr("y1",v.height*4).attr("x2",Y-E9-4).attr("y2",v.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const rt=P?70:0;C.attr("viewBox",`${R.startx} -25 ${Y} ${H+rt}`),C.attr("preserveAspectRatio","xMinYMin meet"),C.attr("height",H+rt+25)},iv={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=De().journey,m=this;let b=0;function E(C){return function(P){b++;const F=m.sequenceItems.length-b+1;m.updateVal(P,"starty",a-F*v.boxMargin,Math.min),m.updateVal(P,"stopy",p+F*v.boxMargin,Math.max),m.updateVal(iv.data,"startx",i-F*v.boxMargin,Math.min),m.updateVal(iv.data,"stopx",f+F*v.boxMargin,Math.max),C!=="activation"&&(m.updateVal(P,"startx",i-F*v.boxMargin,Math.min),m.updateVal(P,"stopx",f+F*v.boxMargin,Math.max),m.updateVal(iv.data,"starty",a-F*v.boxMargin,Math.min),m.updateVal(iv.data,"stopy",p+F*v.boxMargin,Math.max))}}this.sequenceItems.forEach(E())},insert:function(i,a,f,p){const v=Math.min(i,f),m=Math.max(i,f),b=Math.min(a,p),E=Math.max(a,p);this.updateVal(iv.data,"startx",v,Math.min),this.updateVal(iv.data,"starty",b,Math.min),this.updateVal(iv.data,"stopx",m,Math.max),this.updateVal(iv.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Pgt=VK.sectionFills,vjt=VK.sectionColours,sUe=function(i,a,f){const p=De().journey;let v="";const m=p.height*2+p.diagramMarginY,b=f+m;let E=0,C="#CCC",A="black",P=0;for(const[F,j]of a.entries()){if(v!==j.section){C=Pgt[E%Pgt.length],P=E%Pgt.length,A=vjt[E%vjt.length];let H=0;const Y=j.section;for(let J=F;J(F5[Y]&&(H[Y]=F5[Y]),H),{});j.x=F*p.taskMargin+F*p.width+E9,j.y=b,j.width=p.diagramMarginX,j.height=p.diagramMarginY,j.colour=A,j.fill=C,j.num=P,j.actors=R,UP.drawTask(i,j,p),iv.insert(j.x,j.y,j.x+j.width+p.taskMargin,300+5*30)}},wjt={setConf:nUe,draw:iUe},aUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:zGe,db:fjt,renderer:wjt,styles:XGe,init:i=>{wjt.setConf(i.journey),fjt.clear()}}},Symbol.toStringTag,{value:"Module"})),oUe=(i,a,f)=>{const{parentById:p}=f,v=new Set;let m=i;for(;m;){if(v.add(m),m===a)return m;m=p[m]}for(m=a;m;){if(v.has(m))return m;m=p[m]}return"root"};function GK(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var mjt={exports:{}};(function(i,a){(function(f){i.exports=f()})(function(){return function(){function f(p,v,m){function b(A,P){if(!v[A]){if(!p[A]){var F=typeof GK=="function"&&GK;if(!P&&F)return F(A,!0);if(E)return E(A,!0);var j=new Error("Cannot find module '"+A+"'");throw j.code="MODULE_NOT_FOUND",j}var R=v[A]={exports:{}};p[A][0].call(R.exports,function(H){var Y=p[A][1][H];return b(Y||H)},R,R.exports,f,p,v,m)}return v[A].exports}for(var E=typeof GK=="function"&&GK,C=0;C0&&arguments[0]!==void 0?arguments[0]:{},j=F.defaultLayoutOptions,R=j===void 0?{}:j,H=F.algorithms,Y=H===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:H,rt=F.workerFactory,J=F.workerUrl;if(b(this,A),this.defaultLayoutOptions=R,this.initialized=!1,typeof J>"u"&&typeof rt>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var it=rt;typeof J<"u"&&typeof rt>"u"&&(it=function(kt){return new Worker(kt)});var ft=it(J);if(typeof ft.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new C(ft),this.worker.postMessage({cmd:"register",algorithms:Y}).then(function(Tt){return P.initialized=!0}).catch(console.err)}return m(A,[{key:"layout",value:function(F){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R=j.layoutOptions,H=R===void 0?this.defaultLayoutOptions:R,Y=j.logging,rt=Y===void 0?!1:Y,J=j.measureExecutionTime,it=J===void 0?!1:J;return F?this.worker.postMessage({cmd:"layout",graph:F,layoutOptions:H,options:{logging:rt,measureExecutionTime:it}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),A}();v.default=E;var C=function(){function A(P){var F=this;if(b(this,A),P===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=P,this.worker.onmessage=function(j){setTimeout(function(){F.receive(F,j)},0)}}return m(A,[{key:"postMessage",value:function(F){var j=this.id||0;this.id=j+1,F.id=j;var R=this;return new Promise(function(H,Y){R.resolvers[j]=function(rt,J){rt?(R.convertGwtStyleError(rt),Y(rt)):H(J)},R.worker.postMessage(F)})}},{key:"receive",value:function(F,j){var R=j.data,H=F.resolvers[R.id];H&&(delete F.resolvers[R.id],R.error?H(R.error):H(null,R.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(F){if(F){var j=F.__java$exception;j&&(j.cause&&j.cause.backingJsObject&&(F.cause=j.cause.backingJsObject,this.convertGwtStyleError(F.cause)),delete F.__java$exception)}}}]),A}()},{}],2:[function(f,p,v){(function(m){(function(){var b;typeof window<"u"?b=window:typeof m<"u"?b=m:typeof self<"u"&&(b=self);var E;function C(){}function A(){}function P(){}function F(){}function j(){}function R(){}function H(){}function Y(){}function rt(){}function J(){}function it(){}function ft(){}function Tt(){}function kt(){}function mt(){}function ct(){}function yt(){}function st(){}function xt(){}function ht(){}function dt(){}function Ct(){}function tt(){}function Pt(){}function pt(){}function Ft(){}function X(){}function Rt(){}function Bt(){}function vt(){}function Ot(){}function Vt(){}function qe(){}function _n(){}function Te(){}function Wn(){}function Ae(){}function ne(){}function ke(){}function Ve(){}function Ee(){}function He(){}function Ce(){}function $e(){}function ye(){}function fn(){}function Yt(){}function Mi(){}function qt(){}function zi(){}function Se(){}function ki(){}function Ri(){}function pi(){}function bi(){}function dn(){}function Nn(){}function Wr(){}function Li(){}function is(){}function Ts(){}function Aa(){}function Xi(){}function Ga(){}function _r(){}function qr(){}function Oi(){}function gr(){}function Js(){}function Vn(){}function Xc(){}function Er(){}function Mc(){}function bp(){}function fm(){}function T0(){}function Fd(){}function No(){}function ta(){}function bu(){}function Pu(){}function lo(){}function mo(){}function Os(){}function Tl(){}function Fu(){}function zo(){}function nd(){}function sf(){}function ll(){}function Vi(){}function Ke(){}function kr(){}function ni(){}function eo(){}function Dc(){}function Ju(){}function Qo(){}function jf(){}function rh(){}function dm(){}function S9(){}function x3(){}function zb(){}function os(){}function As(){}function ma(){}function vi(){}function Qc(){}function me(){}function bg(){}function Oe(){}function af(){}function fk(){}function k3(){}function gm(){}function A9(){}function au(){}function vg(){}function dk(){}function vp(){}function L9(){}function M9(){}function $f(){}function ov(){}function Bd(){}function E3(){}function cv(){}function uv(){}function wg(){}function R5(){}function ou(){}function j5(){}function no(){}function JK(){}function qb(){}function tY(){}function D9(){}function eY(){}function KP(){}function zf(){}function pm(){}function mL(){}function YP(){}function wp(){}function bm(){}function nY(){}function Hb(){}function rY(){}function iY(){}function $5(){}function I9(){}function XP(){}function gk(){}function sY(){}function pk(){}function aY(){}function oY(){}function cY(){}function uY(){}function lY(){}function hY(){}function fY(){}function dY(){}function gY(){}function pY(){}function bY(){}function yL(){}function vY(){}function wY(){}function O9(){}function QP(){}function z5(){}function mY(){}function yY(){}function xY(){}function kY(){}function EY(){}function N9(){}function xL(){}function ZP(){}function T3(){}function _3(){}function TY(){}function of(){}function q5(){}function _Y(){}function bk(){}function Rd(){}function CY(){}function SY(){}function AY(){}function LY(){}function P9(){}function kL(){}function JP(){}function EL(){}function H5(){}function MY(){}function tF(){}function eF(){}function DY(){}function IY(){}function OY(){}function NY(){}function PY(){}function FY(){}function jd(){}function lv(){}function BY(){}function nF(){}function rF(){}function RY(){}function C3(){}function vk(){}function TL(){}function vm(){}function wk(){}function jY(){}function F9(){}function rd(){}function iF(){}function _L(){}function mk(){}function CL(){}function sF(){}function $Y(){}function SL(){}function zY(){}function qY(){}function aF(){}function V5(){}function oF(){}function G5(){}function HY(){}function AL(){}function VY(){}function GY(){}function UY(){}function WY(){}function cF(){}function KY(){}function YY(){}function XY(){}function uF(){}function QY(){}function ZY(){}function JY(){}function lF(){}function tX(){}function eX(){}function hF(){}function fF(){}function dF(){}function nX(){}function rX(){}function yk(){}function U5(){}function B9(){}function iX(){}function LL(){}function R9(){}function ML(){}function gF(){}function pF(){}function sX(){}function aX(){}function oX(){}function bF(){}function vF(){}function cX(){}function uX(){}function lX(){}function hX(){}function fX(){}function wF(){}function dX(){}function gX(){}function pX(){}function bX(){}function mF(){}function j9(){}function vX(){}function wX(){}function yF(){}function mX(){}function yX(){}function xX(){}function kX(){}function EX(){}function TX(){}function xF(){}function _X(){}function kF(){}function CX(){}function SX(){}function AX(){}function $9(){}function LX(){}function z9(){}function MX(){}function EF(){}function TF(){}function _F(){}function CF(){}function hv(){}function SF(){}function AF(){}function LF(){}function MF(){}function DX(){}function W5(){}function q9(){}function S3(){}function IX(){}function OX(){}function H9(){}function NX(){}function PX(){}function FX(){}function BX(){}function RX(){}function jX(){}function $X(){}function zX(){}function qX(){}function HX(){}function VX(){}function DL(){}function DF(){}function GX(){}function UX(){}function WX(){}function IF(){}function KX(){}function YX(){}function XX(){}function QX(){}function ZX(){}function JX(){}function OF(){}function NF(){}function tQ(){}function PF(){}function FF(){}function eQ(){}function nQ(){}function rQ(){}function IL(){}function iQ(){}function xk(){}function sQ(){}function aQ(){}function oQ(){}function BF(){}function cQ(){}function uQ(){}function lQ(){}function hQ(){}function fQ(){}function dQ(){}function gQ(){}function pQ(){}function bQ(){}function vQ(){}function wQ(){}function mQ(){}function K5(){}function RF(){}function yQ(){}function xQ(){}function kQ(){}function jF(){}function EQ(){}function V9(){}function TQ(){}function _Q(){}function CQ(){}function SQ(){}function AQ(){}function LQ(){}function MQ(){}function DQ(){}function IQ(){}function OQ(){}function Y5(){}function NQ(){}function PQ(){}function FQ(){}function BQ(){}function RQ(){}function jQ(){}function $Q(){}function zQ(){}function G9(){}function qQ(){}function HQ(){}function VQ(){}function GQ(){}function UQ(){}function WQ(){}function KQ(){}function YQ(){}function X5(){}function $F(){}function XQ(){}function OL(){}function QQ(){}function ZQ(){}function JQ(){}function tZ(){}function eZ(){}function nZ(){}function rZ(){}function zF(){}function iZ(){}function qF(){}function sZ(){}function HF(){}function VF(){}function GF(){}function aZ(){}function oZ(){}function U9(){}function NL(){}function W9(){}function cZ(){}function uZ(){}function PL(){}function lZ(){}function hZ(){}function UF(){}function fZ(){}function dZ(){}function gZ(){}function pZ(){}function bZ(){}function vZ(){}function wZ(){}function mZ(){}function yZ(){}function xZ(){}function mg(){}function kZ(){}function wm(){}function WF(){}function EZ(){}function TZ(){}function _Z(){}function CZ(){}function SZ(){}function AZ(){}function LZ(){}function MZ(){}function DZ(){}function Ic(){}function IZ(){}function K9(){}function oc(){}function Zc(){}function Qi(){}function FL(){}function OZ(){}function NZ(){}function PZ(){}function Q5(){}function mm(){}function Ue(){}function FZ(){}function BZ(){}function RZ(){}function jZ(){}function $Z(){}function KF(){}function zZ(){}function qZ(){}function BL(){}function HZ(){}function tl(){}function Bu(){}function VZ(){}function GZ(){}function UZ(){}function ym(){}function fv(){}function mp(){}function id(){}function Z5(){}function Y9(){}function kk(){}function YF(){}function WZ(){}function Ek(){}function XF(){}function KZ(){}function X9(){}function J5(){}function t6(){}function yp(){}function QF(){}function Tk(){}function ZF(){}function JF(){}function e6(){}function Vb(){}function _0(){}function xp(){}function A3(){}function _k(){}function Q9(){}function tB(){}function YZ(){}function eB(){}function nB(){}function rB(){}function Ck(){}function iB(){}function sB(){}function XZ(){}function Sk(){}function Ak(){}function xm(){}function RL(){}function QZ(){}function ZZ(){}function JZ(){}function tJ(){}function eJ(){}function nJ(){}function rJ(){}function iJ(){}function aB(){}function sJ(){}function aJ(){}function oJ(){}function oB(){}function Lk(){}function Z9(){}function cB(){}function cJ(){}function uB(){}function lB(){}function uJ(){}function J9(){}function km(){}function hB(){}function fB(){}function lJ(){}function hJ(){}function tT(){}function dB(){}function gB(){}function bc(){}function fJ(){}function pB(){}function eT(){}function dJ(){}function gJ(){}function nT(){}function bB(){}function rT(){}function iT(){}function qf(){}function jL(){}function $L(){}function n6(){}function pJ(){}function bJ(){}function vJ(){}function wJ(){}function Em(){}function vB(){}function r6(){}function g1(){}function wB(){}function mB(){}function yB(){}function xB(){}function kB(){}function EB(){}function Hf(){}function vu(){}function mJ(){}function yJ(){}function xJ(){}function wu(){}function sT(){}function TB(){}function _B(){}function i6(){}function kJ(){}function Mk(){}function EJ(){}function CB(){}function TJ(){}function _J(){}function aT(){}function SB(){}function zL(){}function oT(){}function CJ(){}function SJ(){}function qL(){}function cT(){}function p1(){}function Dk(){}function AJ(){}function Ik(){}function HL(){}function Gb(){}function uT(){}function VL(){}function Vf(){}function lT(){}function b1(){}function v1(){}function LJ(){}function MJ(){}function L3(){}function Ok(){}function Nk(){}function hT(){}function DJ(){}function s6(){}function GL(){}function AB(){}function IJ(){}function fT(){DT()}function OJ(){Lit()}function LB(){iC()}function UL(){Kz()}function NJ(){I4t()}function dT(){n1()}function PJ(){H3t()}function FJ(){JD()}function BJ(){wM()}function RJ(){vM()}function jJ(){VM()}function MB(){wVt()}function $J(){Y6()}function zJ(){LR()}function qJ(){LJt()}function DB(){qee()}function HJ(){ote()}function VJ(){TQt()}function gT(){Q8()}function GJ(){tb()}function UJ(){Hee()}function WJ(){vZt()}function KJ(){_6t()}function YJ(){Mse()}function XJ(){_Qt()}function IB(){xe()}function QJ(){EQt()}function OB(){Vee()}function ZJ(){Wne()}function WL(){SQt()}function JJ(){fte()}function NB(){mVt()}function ttt(){d5t()}function PB(){ay()}function ett(){vne()}function FB(){rI()}function BB(){iat()}function RB(){hst()}function KL(){hw()}function M3(){uyt()}function pT(){CQt()}function sd(){Rue()}function jB(){l5t()}function Pk(){Xst()}function YL(){O$()}function ntt(){eq()}function kp(){di()}function $B(){bz()}function zB(){v3t()}function qB(){yq()}function ih(){dKt()}function XL(){dit()}function HB(){Q5t()}function Fk(t){In(t)}function bT(t){this.a=t}function Bk(t){this.a=t}function VB(t){this.a=t}function a6(t){this.a=t}function dv(t){this.a=t}function Rk(t){this.a=t}function GB(t){this.a=t}function rtt(t){this.a=t}function QL(t){this.a=t}function D3(t){this.a=t}function ZL(t){this.a=t}function vT(t){this.a=t}function itt(t){this.a=t}function wT(t){this.a=t}function mT(t){this.a=t}function o6(t){this.a=t}function JL(t){this.a=t}function tM(t){this.a=t}function stt(t){this.a=t}function att(t){this.a=t}function ott(t){this.a=t}function UB(t){this.b=t}function ctt(t){this.c=t}function utt(t){this.a=t}function ltt(t){this.a=t}function htt(t){this.a=t}function ftt(t){this.a=t}function dtt(t){this.a=t}function gtt(t){this.a=t}function ptt(t){this.a=t}function btt(t){this.a=t}function c6(t){this.a=t}function vtt(t){this.a=t}function jk(t){this.a=t}function Ch(t){this.a=t}function wtt(t){this.a=t}function u6(t){this.a=t}function $k(t){this.a=t}function yT(t){this.a=t}function zk(t){this.a=t}function yg(){this.a=[]}function mtt(t,e){t.a=e}function Zgt(t,e){t.a=e}function Jgt(t,e){t.b=e}function tpt(t,e){t.b=e}function ept(t,e){t.b=e}function eM(t,e){t.j=e}function npt(t,e){t.g=e}function rpt(t,e){t.i=e}function ytt(t,e){t.c=e}function w1(t,e){t.d=e}function xtt(t,e){t.d=e}function ipt(t,e){t.c=e}function C0(t,e){t.k=e}function ktt(t,e){t.c=e}function WB(t,e){t.c=e}function KB(t,e){t.a=e}function Ett(t,e){t.a=e}function spt(t,e){t.f=e}function apt(t,e){t.a=e}function gv(t,e){t.b=e}function nM(t,e){t.d=e}function xT(t,e){t.i=e}function YB(t,e){t.o=e}function opt(t,e){t.r=e}function cpt(t,e){t.a=e}function XB(t,e){t.b=e}function pv(t,e){t.e=e}function Ttt(t,e){t.f=e}function kT(t,e){t.g=e}function l6(t,e){t.e=e}function upt(t,e){t.f=e}function qk(t,e){t.f=e}function _tt(t,e){t.n=e}function xg(t,e){t.a=e}function lpt(t,e){t.a=e}function I3(t,e){t.c=e}function Ctt(t,e){t.c=e}function Stt(t,e){t.d=e}function QB(t,e){t.e=e}function ZB(t,e){t.g=e}function Att(t,e){t.a=e}function Hk(t,e){t.c=e}function ET(t,e){t.d=e}function hpt(t,e){t.e=e}function Ltt(t,e){t.f=e}function Mtt(t,e){t.j=e}function Dtt(t,e){t.a=e}function fpt(t,e){t.b=e}function Ec(t,e){t.a=e}function JB(t){t.b=t.a}function Itt(t){t.c=t.d.d}function h6(t){this.d=t}function kg(t){this.a=t}function Tm(t){this.a=t}function rM(t){this.a=t}function m1(t){this.a=t}function f6(t){this.a=t}function Ott(t){this.a=t}function tR(t){this.a=t}function O3(t){this.a=t}function iM(t){this.a=t}function _m(t){this.a=t}function eR(t){this.a=t}function y1(t){this.a=t}function y(t){this.a=t}function g(t){this.a=t}function x(t){this.b=t}function T(t){this.b=t}function L(t){this.b=t}function I(t){this.a=t}function O(t){this.a=t}function $(t){this.a=t}function z(t){this.c=t}function S(t){this.c=t}function V(t){this.c=t}function U(t){this.a=t}function et(t){this.a=t}function at(t){this.a=t}function lt(t){this.a=t}function gt(t){this.a=t}function Lt(t){this.a=t}function Et(t){this.a=t}function Dt(t){this.a=t}function It(t){this.a=t}function zt(t){this.a=t}function te(t){this.a=t}function Xt(t){this.a=t}function Ht(t){this.a=t}function ie(t){this.a=t}function Ut(t){this.a=t}function fe(t){this.a=t}function ge(t){this.a=t}function se(t){this.a=t}function Ne(t){this.a=t}function pe(t){this.a=t}function gn(t){this.a=t}function je(t){this.a=t}function Ge(t){this.a=t}function xn(t){this.a=t}function Dn(t){this.a=t}function Xn(t){this.a=t}function Cn(t){this.a=t}function Yn(t){this.a=t}function rr(t){this.a=t}function wr(t){this.a=t}function ur(t){this.a=t}function er(t){this.a=t}function bn(t){this.a=t}function pr(t){this.a=t}function fr(t){this.a=t}function ri(t){this.a=t}function _i(t){this.a=t}function ia(t){this.a=t}function La(t){this.a=t}function Di(t){this.a=t}function wi(t){this.a=t}function _s(t){this.a=t}function Zi(t){this.a=t}function Ni(t){this.a=t}function ns(t){this.a=t}function Ua(t){this.e=t}function sa(t){this.a=t}function Xs(t){this.a=t}function Cr(t){this.a=t}function Jt(t){this.a=t}function jn(t){this.a=t}function Lr(t){this.a=t}function ir(t){this.a=t}function sr(t){this.a=t}function Fa(t){this.a=t}function Hr(t){this.a=t}function ss(t){this.a=t}function qo(t){this.a=t}function Bc(t){this.a=t}function ro(t){this.a=t}function Tc(t){this.a=t}function Ma(t){this.a=t}function io(t){this.a=t}function _l(t){this.a=t}function Gf(t){this.a=t}function Ep(t){this.a=t}function Tp(t){this.a=t}function Uf(t){this.a=t}function Eg(t){this.a=t}function ad(t){this.a=t}function bv(t){this.a=t}function Cm(t){this.a=t}function d6(t){this.a=t}function N3(t){this.a=t}function g6(t){this.a=t}function TT(t){this.a=t}function P3(t){this.a=t}function $d(t){this.a=t}function x1(t){this.a=t}function zd(t){this.a=t}function _T(t){this.a=t}function Ub(t){this.a=t}function nR(t){this.a=t}function Ntt(t){this.a=t}function Ptt(t){this.a=t}function Ftt(t){this.a=t}function Btt(t){this.a=t}function Rtt(t){this.a=t}function jtt(t){this.a=t}function $tt(t){this.a=t}function Vk(t){this.a=t}function sM(t){this.a=t}function CT(t){this.a=t}function rR(t){this.a=t}function iR(t){this.a=t}function ztt(t){this.a=t}function _p(t){this.a=t}function aM(t){this.a=t}function sR(t){this.a=t}function Gk(t){this.c=t}function Cp(t){this.b=t}function qtt(t){this.a=t}function c$t(t){this.a=t}function u$t(t){this.a=t}function l$t(t){this.a=t}function h$t(t){this.a=t}function f$t(t){this.a=t}function d$t(t){this.a=t}function g$t(t){this.a=t}function p$t(t){this.a=t}function b$t(t){this.a=t}function v$t(t){this.a=t}function w$t(t){this.a=t}function m$t(t){this.a=t}function y$t(t){this.a=t}function x$t(t){this.a=t}function k$t(t){this.a=t}function E$t(t){this.a=t}function T$t(t){this.a=t}function _$t(t){this.a=t}function C$t(t){this.a=t}function S$t(t){this.a=t}function A$t(t){this.a=t}function L$t(t){this.a=t}function M$t(t){this.a=t}function Sp(t){this.a=t}function p6(t){this.a=t}function D$t(t){this.a=t}function I$t(t){this.a=t}function O$t(t){this.a=t}function N$t(t){this.a=t}function P$t(t){this.a=t}function F$t(t){this.a=t}function B$t(t){this.a=t}function R$t(t){this.a=t}function j$t(t){this.a=t}function $$t(t){this.a=t}function z$t(t){this.a=t}function q$t(t){this.a=t}function H$t(t){this.a=t}function V$t(t){this.a=t}function G$t(t){this.a=t}function U$t(t){this.a=t}function aR(t){this.a=t}function W$t(t){this.a=t}function K$t(t){this.a=t}function Y$t(t){this.a=t}function X$t(t){this.a=t}function Q$t(t){this.a=t}function Z$t(t){this.a=t}function J$t(t){this.a=t}function tzt(t){this.a=t}function ezt(t){this.a=t}function nzt(t){this.a=t}function rzt(t){this.a=t}function izt(t){this.a=t}function szt(t){this.a=t}function azt(t){this.a=t}function ozt(t){this.a=t}function czt(t){this.a=t}function uzt(t){this.a=t}function lzt(t){this.a=t}function hzt(t){this.a=t}function fzt(t){this.a=t}function dzt(t){this.a=t}function gzt(t){this.a=t}function pzt(t){this.a=t}function bzt(t){this.a=t}function vzt(t){this.a=t}function wzt(t){this.a=t}function mzt(t){this.a=t}function yzt(t){this.a=t}function dpt(t){this.a=t}function ts(t){this.b=t}function xzt(t){this.f=t}function gpt(t){this.a=t}function kzt(t){this.a=t}function Ezt(t){this.a=t}function Tzt(t){this.a=t}function _zt(t){this.a=t}function Czt(t){this.a=t}function Szt(t){this.a=t}function Azt(t){this.a=t}function Lzt(t){this.a=t}function oM(t){this.a=t}function Mzt(t){this.a=t}function Dzt(t){this.b=t}function ppt(t){this.c=t}function oR(t){this.e=t}function Izt(t){this.a=t}function cR(t){this.a=t}function uR(t){this.a=t}function Htt(t){this.a=t}function Ozt(t){this.a=t}function Nzt(t){this.d=t}function bpt(t){this.a=t}function vpt(t){this.a=t}function vv(t){this.e=t}function KWe(){this.a=0}function F3(){dUt(this)}function le(){Qet(this)}function Ar(){nl(this)}function Vtt(){vXt(this)}function Pzt(){}function wv(){this.c=QAt}function YWe(t,e){e.Wb(t)}function Fzt(t,e){t.b+=e}function Bzt(t){t.b=new oet}function nt(t){return t.e}function XWe(t){return t.a}function QWe(t){return t.a}function ZWe(t){return t.a}function JWe(t){return t.a}function tKe(t){return t.a}function eKe(){return null}function nKe(){return null}function rKe(){rbt(),g5n()}function iKe(t){t.b.tf(t.e)}function ST(t,e){t.b=e-t.b}function AT(t,e){t.a=e-t.a}function Rzt(t,e){e.ad(t.a)}function sKe(t,e){Us(e,t)}function aKe(t,e,n){t.Od(n,e)}function cM(t,e){t.e=e,e.b=t}function wpt(t){fd(),this.a=t}function jzt(t){fd(),this.a=t}function $zt(t){fd(),this.a=t}function mpt(t){Vm(),this.a=t}function zzt(t){k8(),Tut.be(t)}function Wb(){XUt.call(this)}function ypt(){XUt.call(this)}function xpt(){Wb.call(this)}function Gtt(){Wb.call(this)}function qzt(){Wb.call(this)}function uM(){Wb.call(this)}function Ru(){Wb.call(this)}function LT(){Wb.call(this)}function Pr(){Wb.call(this)}function sh(){Wb.call(this)}function Hzt(){Wb.call(this)}function vc(){Wb.call(this)}function Vzt(){Wb.call(this)}function Gzt(){this.a=this}function lR(){this.Bb|=256}function Uzt(){this.b=new KGt}function kpt(){kpt=X,new Ar}function Ept(){xpt.call(this)}function Wzt(t,e){t.length=e}function hR(t,e){ue(t.a,e)}function oKe(t,e){N4t(t.c,e)}function cKe(t,e){Vs(t.b,e)}function uKe(t,e){qz(t.a,e)}function lKe(t,e){Rit(t.a,e)}function Uk(t,e){Ci(t.e,e)}function b6(t){iq(t.c,t.b)}function hKe(t,e){t.kc().Nb(e)}function Tpt(t){this.a=uln(t)}function Qs(){this.a=new Ar}function Kzt(){this.a=new Ar}function fR(){this.a=new le}function Utt(){this.a=new le}function _pt(){this.a=new le}function Sh(){this.a=new Xc}function Kb(){this.a=new _Jt}function Cpt(){this.a=new A9}function Spt(){this.a=new lVt}function Yzt(){this.a=new ZQt}function Apt(){this.a=new gQt}function Lpt(){this.a=new RWt}function Xzt(){this.a=new le}function Mpt(){this.a=new le}function Qzt(){this.a=new le}function Zzt(){this.a=new le}function Jzt(){this.d=new le}function tqt(){this.a=new Qs}function eqt(){this.a=new Ar}function nqt(){this.b=new Ar}function rqt(){this.b=new le}function Dpt(){this.e=new le}function iqt(){this.d=new le}function sqt(){this.a=new GJ}function aqt(){le.call(this)}function Ipt(){fR.call(this)}function oqt(){xj.call(this)}function cqt(){Mpt.call(this)}function Wtt(){MT.call(this)}function MT(){Pzt.call(this)}function v6(){Pzt.call(this)}function Opt(){v6.call(this)}function uqt(){GXt.call(this)}function lqt(){GXt.call(this)}function hqt(){$pt.call(this)}function fqt(){$pt.call(this)}function dqt(){$pt.call(this)}function gqt(){zpt.call(this)}function ju(){cs.call(this)}function Npt(){ym.call(this)}function Ppt(){ym.call(this)}function pqt(){Dqt.call(this)}function bqt(){Dqt.call(this)}function vqt(){Ar.call(this)}function wqt(){Ar.call(this)}function mqt(){Ar.call(this)}function yqt(){Qs.call(this)}function Ktt(){jee.call(this)}function xqt(){lR.call(this)}function Ytt(){h2t.call(this)}function Xtt(){h2t.call(this)}function Fpt(){Ar.call(this)}function Qtt(){Ar.call(this)}function kqt(){Ar.call(this)}function Bpt(){Tk.call(this)}function Eqt(){Tk.call(this)}function Tqt(){Bpt.call(this)}function _qt(){GL.call(this)}function Cqt(t){lee.call(this,t)}function Sqt(t){lee.call(this,t)}function Rpt(t){QL.call(this,t)}function jpt(t){tVt.call(this,t)}function fKe(t){jpt.call(this,t)}function dKe(t){tVt.call(this,t)}function Wk(){this.a=new cs}function $pt(){this.a=new Qs}function zpt(){this.a=new Ar}function Aqt(){this.a=new le}function Lqt(){this.j=new le}function qpt(){this.a=new GF}function Mqt(){this.a=new _Ht}function Dqt(){this.a=new QF}function Ztt(){Ztt=X,wut=new Yqt}function Jtt(){Jtt=X,vut=new Kqt}function DT(){DT=X,but=new A}function dR(){dR=X,xut=new KUt}function gKe(t){jpt.call(this,t)}function pKe(t){jpt.call(this,t)}function Iqt(t){Drt.call(this,t)}function Oqt(t){Drt.call(this,t)}function Nqt(t){aKt.call(this,t)}function tet(t){P0n.call(this,t)}function mv(t){Mm.call(this,t)}function IT(t){_R.call(this,t)}function Hpt(t){_R.call(this,t)}function Pqt(t){_R.call(this,t)}function Zo(t){yYt.call(this,t)}function Fqt(t){Zo.call(this,t)}function w6(){zk.call(this,{})}function gR(t){o8(),this.a=t}function OT(t){t.b=null,t.c=0}function bKe(t,e){t.e=e,Bce(t,e)}function vKe(t,e){t.a=e,xgn(t)}function eet(t,e,n){t.a[e.g]=n}function wKe(t,e,n){B1n(n,t,e)}function mKe(t,e){VQe(e.i,t.n)}function Bqt(t,e){Gcn(t).td(e)}function yKe(t,e){return t*t/e}function Rqt(t,e){return t.g-e.g}function xKe(t){return new yT(t)}function kKe(t){return new Hm(t)}function pR(t){Zo.call(this,t)}function Co(t){Zo.call(this,t)}function jqt(t){Zo.call(this,t)}function net(t){yYt.call(this,t)}function ret(t){oyt(),this.a=t}function $qt(t){fKt(),this.a=t}function Sm(t){Pnt(),this.f=t}function iet(t){Pnt(),this.f=t}function Kk(t){Zo.call(this,t)}function Pn(t){Zo.call(this,t)}function Ho(t){Zo.call(this,t)}function zqt(t){Zo.call(this,t)}function m6(t){Zo.call(this,t)}function Be(t){return In(t),t}function Zt(t){return In(t),t}function lM(t){return In(t),t}function Vpt(t){return In(t),t}function EKe(t){return In(t),t}function NT(t){return t.b==t.c}function Am(t){return!!t&&t.b}function TKe(t){return!!t&&t.k}function _Ke(t){return!!t&&t.j}function Cl(t){In(t),this.a=t}function Gpt(t){return f2(t),t}function PT(t){rwt(t,t.length)}function Tg(t){Zo.call(this,t)}function od(t){Zo.call(this,t)}function set(t){Zo.call(this,t)}function B3(t){Zo.call(this,t)}function FT(t){Zo.call(this,t)}function Rr(t){Zo.call(this,t)}function aet(t){L2t.call(this,t,0)}function oet(){Bwt.call(this,12,3)}function Upt(){Upt=X,W8t=new xt}function qqt(){qqt=X,U8t=new C}function bR(){bR=X,sS=new Tt}function Hqt(){Hqt=X,wge=new mt}function Vqt(){throw nt(new Pr)}function Wpt(){throw nt(new Pr)}function Gqt(){throw nt(new Pr)}function CKe(){throw nt(new Pr)}function SKe(){throw nt(new Pr)}function AKe(){throw nt(new Pr)}function cet(){this.a=jr(Dr(Xa))}function y6(t){fd(),this.a=Dr(t)}function Uqt(t,e){t.Td(e),e.Sd(t)}function LKe(t,e){t.a.ec().Mc(e)}function MKe(t,e,n){t.c.lf(e,n)}function Kpt(t){Co.call(this,t)}function cd(t){Pn.call(this,t)}function _g(){f6.call(this,"")}function BT(){f6.call(this,"")}function Ap(){f6.call(this,"")}function Lm(){f6.call(this,"")}function Ypt(t){Co.call(this,t)}function Yk(t){T.call(this,t)}function uet(t){fj.call(this,t)}function Wqt(t){Yk.call(this,t)}function Kqt(){wT.call(this,null)}function Yqt(){wT.call(this,null)}function vR(){vR=X,k8()}function Xqt(){Xqt=X,Age=ldn()}function Qqt(t){return t.a?t.b:0}function DKe(t){return t.a?t.b:0}function IKe(t,e){return t.a-e.a}function OKe(t,e){return t.a-e.a}function NKe(t,e){return t.a-e.a}function wR(t,e){return Smt(t,e)}function ot(t,e){return vQt(t,e)}function PKe(t,e){return e in t.a}function Zqt(t,e){return t.f=e,t}function FKe(t,e){return t.b=e,t}function Jqt(t,e){return t.c=e,t}function BKe(t,e){return t.g=e,t}function Xpt(t,e){return t.a=e,t}function Qpt(t,e){return t.f=e,t}function RKe(t,e){return t.k=e,t}function Zpt(t,e){return t.a=e,t}function jKe(t,e){return t.e=e,t}function Jpt(t,e){return t.e=e,t}function $Ke(t,e){return t.f=e,t}function zKe(t,e){t.b=!0,t.d=e}function qKe(t,e){t.b=new So(e)}function HKe(t,e,n){e.td(t.a[n])}function VKe(t,e,n){e.we(t.a[n])}function GKe(t,e){return t.b-e.b}function UKe(t,e){return t.g-e.g}function WKe(t,e){return t.s-e.s}function KKe(t,e){return t?0:e-1}function tHt(t,e){return t?0:e-1}function YKe(t,e){return t?e-1:0}function XKe(t,e){return e.Yf(t)}function yv(t,e){return t.b=e,t}function mR(t,e){return t.a=e,t}function xv(t,e){return t.c=e,t}function kv(t,e){return t.d=e,t}function Ev(t,e){return t.e=e,t}function tbt(t,e){return t.f=e,t}function RT(t,e){return t.a=e,t}function Xk(t,e){return t.b=e,t}function Qk(t,e){return t.c=e,t}function Ze(t,e){return t.c=e,t}function yn(t,e){return t.b=e,t}function Je(t,e){return t.d=e,t}function tn(t,e){return t.e=e,t}function QKe(t,e){return t.f=e,t}function en(t,e){return t.g=e,t}function nn(t,e){return t.a=e,t}function rn(t,e){return t.i=e,t}function sn(t,e){return t.j=e,t}function eHt(t,e){return t.k=e,t}function ZKe(t,e){return t.j=e,t}function JKe(t,e){tb(),tc(e,t)}function tYe(t,e,n){Ktn(t.a,e,n)}function nHt(t){mXt.call(this,t)}function ebt(t){mXt.call(this,t)}function yR(t){wnt.call(this,t)}function rHt(t){vln.call(this,t)}function Lp(t){Kv.call(this,t)}function iHt(t){art.call(this,t)}function sHt(t){art.call(this,t)}function aHt(){a2t.call(this,"")}function Da(){this.a=0,this.b=0}function oHt(){this.b=0,this.a=0}function cHt(t,e){t.b=0,ty(t,e)}function eYe(t,e){t.c=e,t.b=!0}function uHt(t,e){return t.c._b(e)}function Wf(t){return t.e&&t.e()}function het(t){return t?t.d:null}function lHt(t,e){return Fre(t.b,e)}function nYe(t){return t?t.g:null}function rYe(t){return t?t.i:null}function Mp(t){return L0(t),t.o}function Tv(){Tv=X,C4e=x1n()}function hHt(){hHt=X,la=Odn()}function Zk(){Zk=X,XAt=E1n()}function fHt(){fHt=X,l5e=k1n()}function nbt(){nbt=X,kc=wgn()}function rbt(){rbt=X,Cb=j8()}function dHt(){throw nt(new Pr)}function gHt(){throw nt(new Pr)}function pHt(){throw nt(new Pr)}function bHt(){throw nt(new Pr)}function vHt(){throw nt(new Pr)}function wHt(){throw nt(new Pr)}function xR(t){this.a=new x6(t)}function ibt(t){dhe(),S5n(this,t)}function Dp(t){this.a=new jnt(t)}function R3(t,e){for(;t.ye(e););}function sbt(t,e){for(;t.sd(e););}function j3(t,e){return t.a+=e,t}function fet(t,e){return t.a+=e,t}function Cg(t,e){return t.a+=e,t}function _v(t,e){return t.a+=e,t}function jT(t){return qp(t),t.a}function kR(t){return t.b!=t.d.c}function mHt(t){return t.l|t.m<<22}function abt(t,e){return t.d[e.p]}function yHt(t,e){return ovn(t,e)}function obt(t,e,n){t.splice(e,n)}function xHt(t){t.c?iue(t):sue(t)}function ER(t){this.a=0,this.b=t}function kHt(){this.a=new dI(uCt)}function EHt(){this.b=new dI(Y_t)}function THt(){this.b=new dI(Hht)}function _Ht(){this.b=new dI(Hht)}function CHt(){throw nt(new Pr)}function SHt(){throw nt(new Pr)}function AHt(){throw nt(new Pr)}function LHt(){throw nt(new Pr)}function MHt(){throw nt(new Pr)}function DHt(){throw nt(new Pr)}function IHt(){throw nt(new Pr)}function OHt(){throw nt(new Pr)}function NHt(){throw nt(new Pr)}function PHt(){throw nt(new Pr)}function iYe(){throw nt(new vc)}function sYe(){throw nt(new vc)}function hM(t){this.a=new FHt(t)}function FHt(t){bon(this,t,bdn())}function fM(t){return!t||rXt(t)}function dM(t){return Y1[t]!=-1}function aYe(){zH!=0&&(zH=0),qH=-1}function BHt(){put==null&&(put=[])}function oYe(t,e){Gst(Kt(t.a),e)}function cYe(t,e){Gst(Kt(t.a),e)}function gM(t,e){K3.call(this,t,e)}function Jk(t,e){gM.call(this,t,e)}function cbt(t,e){this.b=t,this.c=e}function RHt(t,e){this.b=t,this.a=e}function jHt(t,e){this.a=t,this.b=e}function $Ht(t,e){this.a=t,this.b=e}function zHt(t,e){this.a=t,this.b=e}function qHt(t,e){this.a=t,this.b=e}function HHt(t,e){this.a=t,this.b=e}function VHt(t,e){this.a=t,this.b=e}function GHt(t,e){this.a=t,this.b=e}function UHt(t,e){this.a=t,this.b=e}function WHt(t,e){this.b=t,this.a=e}function KHt(t,e){this.b=t,this.a=e}function YHt(t,e){this.b=t,this.a=e}function XHt(t,e){this.b=t,this.a=e}function Kr(t,e){this.f=t,this.g=e}function t8(t,e){this.e=t,this.d=e}function Cv(t,e){this.g=t,this.i=e}function det(t,e){this.a=t,this.b=e}function QHt(t,e){this.a=t,this.f=e}function ZHt(t,e){this.b=t,this.c=e}function uYe(t,e){this.a=t,this.b=e}function JHt(t,e){this.a=t,this.b=e}function get(t,e){this.a=t,this.b=e}function tVt(t){w2t(t.dc()),this.c=t}function TR(t){this.b=u(Dr(t),83)}function eVt(t){this.a=u(Dr(t),83)}function Mm(t){this.a=u(Dr(t),15)}function nVt(t){this.a=u(Dr(t),15)}function _R(t){this.b=u(Dr(t),47)}function CR(){this.q=new b.Date}function qd(){qd=X,c7t=new Rt}function e8(){e8=X,X7=new Pt}function $T(t){return t.f.c+t.g.c}function pM(t,e){return t.b.Hc(e)}function rVt(t,e){return t.b.Ic(e)}function iVt(t,e){return t.b.Qc(e)}function sVt(t,e){return t.b.Hc(e)}function aVt(t,e){return t.c.uc(e)}function S0(t,e){return t.a._b(e)}function oVt(t,e){return Si(t.c,e)}function cVt(t,e){return Ml(t.b,e)}function uVt(t,e){return t>e&&e0}function bet(t,e){return _c(t,e)<0}function UT(t,e){return t.a.get(e)}function kYe(t,e){return e.split(t)}function AVt(t,e){return Ml(t.e,e)}function bbt(t){return In(t),!1}function FR(t){Tn.call(this,t,21)}function EYe(t,e){sQt.call(this,t,e)}function BR(t,e){Kr.call(this,t,e)}function vet(t,e){Kr.call(this,t,e)}function vbt(t){Znt(),aKt.call(this,t)}function wbt(t,e){uYt(t,t.length,e)}function yM(t,e){RYt(t,t.length,e)}function TYe(t,e,n){e.ud(t.a.Ge(n))}function _Ye(t,e,n){e.we(t.a.Fe(n))}function CYe(t,e,n){e.td(t.a.Kb(n))}function SYe(t,e,n){t.Mb(n)&&e.td(n)}function WT(t,e,n){t.splice(e,0,n)}function AYe(t,e){return zu(t.e,e)}function RR(t,e){this.d=t,this.e=e}function LVt(t,e){this.b=t,this.a=e}function MVt(t,e){this.b=t,this.a=e}function mbt(t,e){this.b=t,this.a=e}function DVt(t,e){this.a=t,this.b=e}function IVt(t,e){this.a=t,this.b=e}function OVt(t,e){this.a=t,this.b=e}function NVt(t,e){this.a=t,this.b=e}function E6(t,e){this.a=t,this.b=e}function ybt(t,e){this.b=t,this.a=e}function xbt(t,e){this.b=t,this.a=e}function jR(t,e){Kr.call(this,t,e)}function $R(t,e){Kr.call(this,t,e)}function kbt(t,e){Kr.call(this,t,e)}function Ebt(t,e){Kr.call(this,t,e)}function $3(t,e){Kr.call(this,t,e)}function wet(t,e){Kr.call(this,t,e)}function met(t,e){Kr.call(this,t,e)}function yet(t,e){Kr.call(this,t,e)}function zR(t,e){Kr.call(this,t,e)}function Tbt(t,e){Kr.call(this,t,e)}function xet(t,e){Kr.call(this,t,e)}function xM(t,e){Kr.call(this,t,e)}function qR(t,e){Kr.call(this,t,e)}function ket(t,e){Kr.call(this,t,e)}function KT(t,e){Kr.call(this,t,e)}function _bt(t,e){Kr.call(this,t,e)}function Ls(t,e){Kr.call(this,t,e)}function HR(t,e){Kr.call(this,t,e)}function PVt(t,e){this.a=t,this.b=e}function FVt(t,e){this.a=t,this.b=e}function BVt(t,e){this.a=t,this.b=e}function RVt(t,e){this.a=t,this.b=e}function jVt(t,e){this.a=t,this.b=e}function $Vt(t,e){this.a=t,this.b=e}function zVt(t,e){this.a=t,this.b=e}function qVt(t,e){this.a=t,this.b=e}function HVt(t,e){this.a=t,this.b=e}function Cbt(t,e){this.b=t,this.a=e}function VVt(t,e){this.b=t,this.a=e}function GVt(t,e){this.b=t,this.a=e}function UVt(t,e){this.b=t,this.a=e}function i8(t,e){this.c=t,this.d=e}function WVt(t,e){this.e=t,this.d=e}function KVt(t,e){this.a=t,this.b=e}function YVt(t,e){this.b=e,this.c=t}function VR(t,e){Kr.call(this,t,e)}function kM(t,e){Kr.call(this,t,e)}function Eet(t,e){Kr.call(this,t,e)}function YT(t,e){Kr.call(this,t,e)}function Sbt(t,e){Kr.call(this,t,e)}function Tet(t,e){Kr.call(this,t,e)}function _et(t,e){Kr.call(this,t,e)}function EM(t,e){Kr.call(this,t,e)}function Abt(t,e){Kr.call(this,t,e)}function Cet(t,e){Kr.call(this,t,e)}function XT(t,e){Kr.call(this,t,e)}function Lbt(t,e){Kr.call(this,t,e)}function QT(t,e){Kr.call(this,t,e)}function ZT(t,e){Kr.call(this,t,e)}function Im(t,e){Kr.call(this,t,e)}function Aet(t,e){Kr.call(this,t,e)}function Let(t,e){Kr.call(this,t,e)}function Mbt(t,e){Kr.call(this,t,e)}function JT(t,e){Kr.call(this,t,e)}function Met(t,e){Kr.call(this,t,e)}function GR(t,e){Kr.call(this,t,e)}function TM(t,e){Kr.call(this,t,e)}function _M(t,e){Kr.call(this,t,e)}function T6(t,e){Kr.call(this,t,e)}function Det(t,e){Kr.call(this,t,e)}function Dbt(t,e){Kr.call(this,t,e)}function Iet(t,e){Kr.call(this,t,e)}function Oet(t,e){Kr.call(this,t,e)}function Ibt(t,e){Kr.call(this,t,e)}function Net(t,e){Kr.call(this,t,e)}function Pet(t,e){Kr.call(this,t,e)}function Fet(t,e){Kr.call(this,t,e)}function Bet(t,e){Kr.call(this,t,e)}function Obt(t,e){Kr.call(this,t,e)}function XVt(t,e){this.b=t,this.a=e}function QVt(t,e){this.a=t,this.b=e}function ZVt(t,e){this.a=t,this.b=e}function JVt(t,e){this.a=t,this.b=e}function tGt(t,e){this.a=t,this.b=e}function Nbt(t,e){Kr.call(this,t,e)}function Pbt(t,e){Kr.call(this,t,e)}function eGt(t,e){this.b=t,this.d=e}function Fbt(t,e){Kr.call(this,t,e)}function Bbt(t,e){Kr.call(this,t,e)}function nGt(t,e){this.a=t,this.b=e}function rGt(t,e){this.a=t,this.b=e}function UR(t,e){Kr.call(this,t,e)}function t_(t,e){Kr.call(this,t,e)}function Rbt(t,e){Kr.call(this,t,e)}function jbt(t,e){Kr.call(this,t,e)}function $bt(t,e){Kr.call(this,t,e)}function Ret(t,e){Kr.call(this,t,e)}function zbt(t,e){Kr.call(this,t,e)}function jet(t,e){Kr.call(this,t,e)}function WR(t,e){Kr.call(this,t,e)}function $et(t,e){Kr.call(this,t,e)}function zet(t,e){Kr.call(this,t,e)}function CM(t,e){Kr.call(this,t,e)}function qet(t,e){Kr.call(this,t,e)}function qbt(t,e){Kr.call(this,t,e)}function SM(t,e){Kr.call(this,t,e)}function Hbt(t,e){Kr.call(this,t,e)}function LYe(t,e){return zu(t.c,e)}function MYe(t,e){return zu(e.b,t)}function DYe(t,e){return-t.b.Je(e)}function Vbt(t,e){return zu(t.g,e)}function AM(t,e){Kr.call(this,t,e)}function _6(t,e){Kr.call(this,t,e)}function iGt(t,e){this.a=t,this.b=e}function sGt(t,e){this.a=t,this.b=e}function Re(t,e){this.a=t,this.b=e}function e_(t,e){Kr.call(this,t,e)}function n_(t,e){Kr.call(this,t,e)}function LM(t,e){Kr.call(this,t,e)}function Het(t,e){Kr.call(this,t,e)}function KR(t,e){Kr.call(this,t,e)}function r_(t,e){Kr.call(this,t,e)}function Vet(t,e){Kr.call(this,t,e)}function YR(t,e){Kr.call(this,t,e)}function z3(t,e){Kr.call(this,t,e)}function MM(t,e){Kr.call(this,t,e)}function i_(t,e){Kr.call(this,t,e)}function s_(t,e){Kr.call(this,t,e)}function DM(t,e){Kr.call(this,t,e)}function XR(t,e){Kr.call(this,t,e)}function q3(t,e){Kr.call(this,t,e)}function QR(t,e){Kr.call(this,t,e)}function aGt(t,e){this.a=t,this.b=e}function oGt(t,e){this.a=t,this.b=e}function cGt(t,e){this.a=t,this.b=e}function uGt(t,e){this.a=t,this.b=e}function lGt(t,e){this.a=t,this.b=e}function hGt(t,e){this.a=t,this.b=e}function ya(t,e){this.a=t,this.b=e}function ZR(t,e){Kr.call(this,t,e)}function fGt(t,e){this.a=t,this.b=e}function dGt(t,e){this.a=t,this.b=e}function gGt(t,e){this.a=t,this.b=e}function pGt(t,e){this.a=t,this.b=e}function bGt(t,e){this.a=t,this.b=e}function vGt(t,e){this.a=t,this.b=e}function wGt(t,e){this.b=t,this.a=e}function mGt(t,e){this.b=t,this.a=e}function yGt(t,e){this.b=t,this.a=e}function xGt(t,e){this.b=t,this.a=e}function kGt(t,e){this.a=t,this.b=e}function EGt(t,e){this.a=t,this.b=e}function IYe(t,e){c2n(t.a,u(e,56))}function TGt(t,e){yan(t.a,u(e,11))}function OYe(t,e){return f8(),e!=t}function _Gt(){return Xqt(),new Age}function CGt(){vrt(),this.b=new Qs}function SGt(){hq(),this.a=new Qs}function AGt(){Fwt(),Gvt.call(this)}function C6(t,e){Kr.call(this,t,e)}function LGt(t,e){this.a=t,this.b=e}function MGt(t,e){this.a=t,this.b=e}function JR(t,e){this.a=t,this.b=e}function DGt(t,e){this.a=t,this.b=e}function IGt(t,e){this.a=t,this.b=e}function OGt(t,e){this.a=t,this.b=e}function NGt(t,e){this.d=t,this.b=e}function Gbt(t,e){this.d=t,this.e=e}function PGt(t,e){this.f=t,this.c=e}function IM(t,e){this.b=t,this.c=e}function Ubt(t,e){this.i=t,this.g=e}function FGt(t,e){this.e=t,this.a=e}function BGt(t,e){this.a=t,this.b=e}function Wbt(t,e){t.i=null,ez(t,e)}function NYe(t,e){t&&Ai(cN,t,e)}function RGt(t,e){return Yit(t.a,e)}function tj(t){return GD(t.c,t.b)}function cc(t){return t?t.dd():null}function Gt(t){return t??null}function Om(t){return typeof t===cx}function Nm(t){return typeof t===C6t}function ha(t){return typeof t===Pat}function Np(t,e){return t.Hd().Xb(e)}function ej(t,e){return Xon(t.Kc(),e)}function Av(t,e){return _c(t,e)==0}function PYe(t,e){return _c(t,e)>=0}function a_(t,e){return _c(t,e)!=0}function FYe(t){return""+(In(t),t)}function OM(t,e){return t.substr(e)}function jGt(t){return gl(t),t.d.gc()}function Get(t){return Ipn(t,t.c),t}function nj(t){return m_(t==null),t}function o_(t,e){return t.a+=""+e,t}function yo(t,e){return t.a+=""+e,t}function c_(t,e){return t.a+=""+e,t}function wc(t,e){return t.a+=""+e,t}function Yr(t,e){return t.a+=""+e,t}function Kbt(t,e){return t.a+=""+e,t}function $Gt(t,e){ks(t,e,t.a,t.a.a)}function Xb(t,e){ks(t,e,t.c.b,t.c)}function BYe(t,e,n){Yse(e,Rst(t,n))}function RYe(t,e,n){Yse(e,Rst(t,n))}function jYe(t,e){Dan(new nr(t),e)}function zGt(t,e){t.q.setTime(Gv(e))}function qGt(t,e){twt.call(this,t,e)}function HGt(t,e){twt.call(this,t,e)}function Uet(t,e){twt.call(this,t,e)}function VGt(t){nl(this),G_(this,t)}function Ybt(t){return Sn(t,0),null}function Kf(t){return t.a=0,t.b=0,t}function GGt(t,e){return t.a=e.g+1,t}function $Ye(t,e){return t.j[e.p]==2}function Xbt(t){return ken(u(t,79))}function UGt(){UGt=X,kpe=Qr(est())}function WGt(){WGt=X,jbe=Qr(Lce())}function KGt(){this.b=new x6(Qm(12))}function YGt(){this.b=0,this.a=!1}function XGt(){this.b=0,this.a=!1}function u_(t){this.a=t,fT.call(this)}function QGt(t){this.a=t,fT.call(this)}function vn(t,e){Hs.call(this,t,e)}function Wet(t,e){jm.call(this,t,e)}function H3(t,e){Ubt.call(this,t,e)}function Ket(t,e){V8.call(this,t,e)}function ZGt(t,e){NM.call(this,t,e)}function oi(t,e){NR(),Ai(nU,t,e)}function Yet(t,e){return Bl(t.a,0,e)}function JGt(t,e){return t.a.a.a.cc(e)}function tUt(t,e){return Gt(t)===Gt(e)}function zYe(t,e){return js(t.a,e.a)}function qYe(t,e){return mu(t.a,e.a)}function HYe(t,e){return PYt(t.a,e.a)}function ud(t,e){return t.indexOf(e)}function Lv(t,e){return t==e?0:t?1:-1}function rj(t){return t<10?"0"+t:""+t}function VYe(t){return Dr(t),new u_(t)}function eUt(t){return cu(t.l,t.m,t.h)}function s8(t){return Cs((In(t),t))}function GYe(t){return Cs((In(t),t))}function nUt(t,e){return mu(t.g,e.g)}function Vo(t){return typeof t===C6t}function UYe(t){return t==Cw||t==Iy}function WYe(t){return t==Cw||t==Dy}function Qbt(t){return Go(t.b.b,t,0)}function rUt(t){this.a=_Gt(),this.b=t}function iUt(t){this.a=_Gt(),this.b=t}function KYe(t,e){return ue(t.a,e),e}function YYe(t,e){return ue(t.c,e),t}function sUt(t,e){return Hl(t.a,e),t}function XYe(t,e){return df(),e.a+=t}function QYe(t,e){return df(),e.a+=t}function ZYe(t,e){return df(),e.c+=t}function Zbt(t,e){M8(t,0,t.length,e)}function A0(){Et.call(this,new i2)}function aUt(){Fj.call(this,0,0,0,0)}function S6(){ch.call(this,0,0,0,0)}function So(t){this.a=t.a,this.b=t.b}function Pp(t){return t==Hh||t==_f}function a8(t){return t==Z0||t==Q0}function oUt(t){return t==e5||t==t5}function V3(t){return t!=U1&&t!=kb}function Sl(t){return t.Lg()&&t.Mg()}function cUt(t){return Zj(u(t,118))}function ij(t){return Hl(new Zs,t)}function uUt(t,e){return new V8(e,t)}function JYe(t,e){return new V8(e,t)}function Jbt(t,e,n){W$(t,e),K$(t,n)}function sj(t,e,n){Qv(t,e),Xv(t,n)}function k1(t,e,n){Cu(t,e),Su(t,n)}function aj(t,e,n){N8(t,e),F8(t,n)}function oj(t,e,n){P8(t,e),B8(t,n)}function Xet(t,e){X8(t,e),R8(t,t.D)}function t2t(t){PGt.call(this,t,!0)}function lUt(t,e,n){H2t.call(this,t,e,n)}function Fp(t){eb(),tcn.call(this,t)}function hUt(){BR.call(this,"Head",1)}function fUt(){BR.call(this,"Tail",3)}function Qet(t){t.c=Nt(Qn,Me,1,0,5,1)}function dUt(t){t.a=Nt(Qn,Me,1,8,5,1)}function gUt(t){_u(t.xf(),new ur(t))}function G3(t){return t!=null?Ji(t):0}function tXe(t,e){return Zm(e,_1(t))}function eXe(t,e){return Zm(e,_1(t))}function nXe(t,e){return t[t.length]=e}function rXe(t,e){return t[t.length]=e}function e2t(t){return ntn(t.b.Kc(),t.a)}function iXe(t,e){return tz(Xnt(t.d),e)}function sXe(t,e){return tz(Xnt(t.g),e)}function aXe(t,e){return tz(Xnt(t.j),e)}function ao(t,e){Hs.call(this,t.b,e)}function Mv(t){Fj.call(this,t,t,t,t)}function n2t(t){return t.b&&wat(t),t.a}function r2t(t){return t.b&&wat(t),t.c}function oXe(t,e){z1||(t.b=e)}function Zet(t,e,n){return ls(t,e,n),n}function pUt(t,e,n){ls(t.c[e.g],e.g,n)}function cXe(t,e,n){u(t.c,69).Xh(e,n)}function uXe(t,e,n){k1(n,n.i+t,n.j+e)}function lXe(t,e){Or(Oc(t.a),LQt(e))}function hXe(t,e){Or(fl(t.a),MQt(e))}function l_(t){yi(),vv.call(this,t)}function fXe(t){return t==null?0:Ji(t)}function bUt(){bUt=X,kht=new eC(vft)}function Fr(){Fr=X,new vUt,new le}function vUt(){new Ar,new Ar,new Ar}function i2t(){i2t=X,kpt(),K8t=new Ar}function E1(){E1=X,b.Math.log(2)}function ah(){ah=X,f0=(EVt(),I4e)}function dXe(){throw nt(new Tg(rge))}function gXe(){throw nt(new Tg(rge))}function pXe(){throw nt(new Tg(ige))}function bXe(){throw nt(new Tg(ige))}function wUt(t){this.a=t,kvt.call(this,t)}function Jet(t){this.a=t,TR.call(this,t)}function tnt(t){this.a=t,TR.call(this,t)}function aa(t,e){Dnt(t.c,t.c.length,e)}function Jo(t){return t.ae?1:0}function yUt(t,e){return _c(t,e)>0?t:e}function cu(t,e,n){return{l:t,m:e,h:n}}function vXe(t,e){t.a!=null&&TGt(e,t.a)}function xUt(t){t.a=new Bt,t.c=new Bt}function cj(t){this.b=t,this.a=new le}function kUt(t){this.b=new As,this.a=t}function a2t(t){Z2t.call(this),this.a=t}function EUt(){BR.call(this,"Range",2)}function TUt(){t4t(),this.a=new dI(kEt)}function wXe(t,e){Dr(e),X3(t).Jc(new J)}function mXe(t,e){return Rl(),e.n.b+=t}function yXe(t,e,n){return Ai(t.g,n,e)}function xXe(t,e,n){return Ai(t.k,n,e)}function kXe(t,e){return Ai(t.a,e.a,e)}function U3(t,e,n){return y3t(e,n,t.c)}function o2t(t){return new Re(t.c,t.d)}function EXe(t){return new Re(t.c,t.d)}function uc(t){return new Re(t.a,t.b)}function _Ut(t,e){return U3n(t.a,e,null)}function TXe(t){Ba(t,null),pa(t,null)}function CUt(t){mrt(t,null),yrt(t,null)}function SUt(){NM.call(this,null,null)}function AUt(){bj.call(this,null,null)}function c2t(t){this.a=t,Ar.call(this)}function _Xe(t){this.b=(pn(),new z(t))}function uj(t){t.j=Nt(o7t,re,310,0,0,1)}function CXe(t,e,n){t.c.Vc(e,u(n,133))}function SXe(t,e,n){t.c.ji(e,u(n,133))}function LUt(t,e){Tr(t),t.Gc(u(e,15))}function h_(t,e){return c3n(t.c,t.b,e)}function AXe(t,e){return new QUt(t.Kc(),e)}function ent(t,e){return Scn(t.Kc(),e)!=-1}function u2t(t,e){return t.a.Bc(e)!=null}function lj(t){return t.Ob()?t.Pb():null}function MUt(t){return Ih(t,0,t.length)}function _t(t,e){return t!=null&&sst(t,e)}function LXe(t,e){t.q.setHours(e),yC(t,e)}function DUt(t,e){t.c&&(Ovt(e),rQt(e))}function MXe(t,e,n){u(t.Kb(n),164).Nb(e)}function DXe(t,e,n){return j3n(t,e,n),n}function IUt(t,e,n){t.a=e^1502,t.b=n^got}function nnt(t,e,n){return t.a[e.g][n.g]}function T1(t,e){return t.a[e.c.p][e.p]}function IXe(t,e){return t.e[e.c.p][e.p]}function OXe(t,e){return t.c[e.c.p][e.p]}function NXe(t,e){return t.j[e.p]=Hbn(e)}function PXe(t,e){return fmt(t.f,e.tg())}function FXe(t,e){return fmt(t.b,e.tg())}function BXe(t,e){return t.a0?e*e/t:e*e*100}function cQe(t,e){return t>0?e/(t*t):e*100}function uQe(t,e,n){return ue(e,eie(t,n))}function lQe(t,e,n){O$(),t.Xe(e)&&n.td(t)}function u8(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function Fm(t,e,n){return t.a+=e,t.b+=n,t}function hQe(t,e,n){return t.a*=e,t.b*=n,t}function BM(t,e,n){return t.a-=e,t.b-=n,t}function O2t(t,e){return t.a=e.a,t.b=e.b,t}function mj(t){return t.a=-t.a,t.b=-t.b,t}function uWt(t){this.c=t,this.a=1,this.b=1}function lWt(t){this.c=t,Cu(t,0),Su(t,0)}function hWt(t){cs.call(this),z_(this,t)}function fWt(t){Oat(),Bzt(this),this.mf(t)}function dWt(t,e){GT(),NM.call(this,t,e)}function N2t(t,e){Sg(),bj.call(this,t,e)}function gWt(t,e){Sg(),bj.call(this,t,e)}function pWt(t,e){Sg(),N2t.call(this,t,e)}function Al(t,e,n){Il.call(this,t,e,n,2)}function unt(t,e){ah(),Pj.call(this,t,e)}function bWt(t,e){ah(),unt.call(this,t,e)}function P2t(t,e){ah(),unt.call(this,t,e)}function vWt(t,e){ah(),P2t.call(this,t,e)}function F2t(t,e){ah(),Pj.call(this,t,e)}function wWt(t,e){ah(),F2t.call(this,t,e)}function mWt(t,e){ah(),Pj.call(this,t,e)}function fQe(t,e){return t.c.Fc(u(e,133))}function B2t(t,e,n){return Eq(mD(t,e),n)}function dQe(t,e,n){return e.Qk(t.e,t.c,n)}function gQe(t,e,n){return e.Rk(t.e,t.c,n)}function lnt(t,e){return Xp(t.e,u(e,49))}function pQe(t,e,n){J_(fl(t.a),e,MQt(n))}function bQe(t,e,n){J_(Oc(t.a),e,LQt(n))}function R2t(t,e){e.$modCount=t.$modCount}function b_(){b_=X,$S=new ts("root")}function l8(){l8=X,lN=new pqt,new bqt}function yWt(){this.a=new Hv,this.b=new Hv}function j2t(){jee.call(this),this.Bb|=Qa}function xWt(){Kr.call(this,"GROW_TREE",0)}function vQe(t){return t==null?null:P4n(t)}function wQe(t){return t==null?null:H0n(t)}function mQe(t){return t==null?null:Wo(t)}function yQe(t){return t==null?null:Wo(t)}function L0(t){t.o==null&&vbn(t)}function Fe(t){return m_(t==null||Om(t)),t}function ve(t){return m_(t==null||Nm(t)),t}function jr(t){return m_(t==null||ha(t)),t}function $2t(t){this.q=new b.Date(Gv(t))}function RM(t,e){this.c=t,t8.call(this,t,e)}function yj(t,e){this.a=t,RM.call(this,t,e)}function xQe(t,e){this.d=t,Itt(this),this.b=e}function z2t(t,e){zrt.call(this,t),this.a=e}function q2t(t,e){zrt.call(this,t),this.a=e}function kQe(t){p3t.call(this,0,0),this.f=t}function H2t(t,e,n){D$.call(this,t,e,n,null)}function kWt(t,e,n){D$.call(this,t,e,n,null)}function EQe(t,e,n){return t.ue(e,n)<=0?n:e}function TQe(t,e,n){return t.ue(e,n)<=0?e:n}function _Qe(t,e){return u(Wv(t.b,e),149)}function CQe(t,e){return u(Wv(t.c,e),229)}function hnt(t){return u(Pe(t.a,t.b),287)}function EWt(t){return new Re(t.c,t.d+t.a)}function TWt(t){return Rl(),oUt(u(t,197))}function Bm(){Bm=X,Q7t=on((Nl(),W2))}function SQe(t,e){e.a?fvn(t,e):rnt(t.a,e.b)}function _Wt(t,e){z1||ue(t.a,e)}function AQe(t,e){return vM(),H8(e.d.i,t)}function LQe(t,e){return Y6(),new Sue(e,t)}function hd(t,e){return tD(e,U6t),t.f=e,t}function V2t(t,e,n){return n=Ul(t,e,3,n),n}function G2t(t,e,n){return n=Ul(t,e,6,n),n}function U2t(t,e,n){return n=Ul(t,e,9,n),n}function jM(t,e,n){++t.j,t.Ki(),jrt(t,e,n)}function CWt(t,e,n){++t.j,t.Hi(e,t.oi(e,n))}function SWt(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function AWt(t,e,n){return a6t(t.c,t.b,e,n)}function W2t(t,e){return(e&Ti)%t.d.length}function Hs(t,e){ts.call(this,t),this.a=e}function K2t(t,e){ppt.call(this,t),this.a=e}function fnt(t,e){ppt.call(this,t),this.a=e}function LWt(t,e){this.c=t,Kv.call(this,e)}function MWt(t,e){this.a=t,Dzt.call(this,e)}function $M(t,e){this.a=t,Dzt.call(this,e)}function DWt(t){this.a=(ql(t,my),new Jc(t))}function IWt(t){this.a=(ql(t,my),new Jc(t))}function zM(t){return!t.a&&(t.a=new it),t.a}function OWt(t){return t>8?0:t+1}function MQe(t,e){return Fn(),t==e?0:t?1:-1}function Y2t(t,e,n){return O6(t,u(e,22),n)}function DQe(t,e,n){return t.apply(e,n)}function NWt(t,e,n){return t.a+=Ih(e,0,n),t}function X2t(t,e){var n;return n=t.e,t.e=e,n}function IQe(t,e){var n;n=t[dot],n.call(t,e)}function OQe(t,e){var n;n=t[dot],n.call(t,e)}function Rm(t,e){t.a.Vc(t.b,e),++t.b,t.c=-1}function PWt(t){nl(t.e),t.d.b=t.d,t.d.a=t.d}function qM(t){t.b?qM(t.b):t.f.c.zc(t.e,t.d)}function NQe(t,e,n){Yb(),mtt(t,e.Ce(t.a,n))}function PQe(t,e){return het(vie(t.a,e,!0))}function FQe(t,e){return het(wie(t.a,e,!0))}function ff(t,e){return wR(new Array(e),t)}function dnt(t){return String.fromCharCode(t)}function BQe(t){return t==null?null:t.message}function FWt(){this.a=new le,this.b=new le}function BWt(){this.a=new A9,this.b=new Uzt}function RWt(){this.b=new Da,this.c=new le}function Q2t(){this.d=new Da,this.e=new Da}function Z2t(){this.n=new Da,this.o=new Da}function xj(){this.n=new v6,this.i=new S6}function jWt(){this.a=new zJ,this.b=new HX}function $Wt(){this.a=new le,this.d=new le}function zWt(){this.b=new Qs,this.a=new Qs}function qWt(){this.b=new Ar,this.a=new Ar}function HWt(){this.b=new EHt,this.a=new FQ}function VWt(){xj.call(this),this.a=new Da}function v_(t){ccn.call(this,t,(P$(),Mut))}function J2t(t,e,n,r){Fj.call(this,t,e,n,r)}function RQe(t,e,n){n!=null&&Z$(e,bst(t,n))}function jQe(t,e,n){n!=null&&J$(e,bst(t,n))}function tvt(t,e,n){return n=Ul(t,e,11,n),n}function Fi(t,e){return t.a+=e.a,t.b+=e.b,t}function fa(t,e){return t.a-=e.a,t.b-=e.b,t}function $Qe(t,e){return t.n.a=(In(e),e+10)}function zQe(t,e){return t.n.a=(In(e),e+10)}function qQe(t,e){return e==t||l7(cq(e),t)}function GWt(t,e){return Ai(t.a,e,"")==null}function HQe(t,e){return vM(),!H8(e.d.i,t)}function VQe(t,e){Pp(t.f)?obn(t,e):Gdn(t,e)}function GQe(t,e){var n;return n=e.Hh(t.a),n}function jm(t,e){Co.call(this,XC+t+L2+e)}function M6(t,e,n,r){he.call(this,t,e,n,r)}function evt(t,e,n,r){he.call(this,t,e,n,r)}function UWt(t,e,n,r){evt.call(this,t,e,n,r)}function WWt(t,e,n,r){Uj.call(this,t,e,n,r)}function gnt(t,e,n,r){Uj.call(this,t,e,n,r)}function nvt(t,e,n,r){Uj.call(this,t,e,n,r)}function KWt(t,e,n,r){gnt.call(this,t,e,n,r)}function rvt(t,e,n,r){gnt.call(this,t,e,n,r)}function En(t,e,n,r){nvt.call(this,t,e,n,r)}function YWt(t,e,n,r){rvt.call(this,t,e,n,r)}function XWt(t,e,n,r){ewt.call(this,t,e,n,r)}function QWt(t,e,n){this.a=t,L2t.call(this,e,n)}function ZWt(t,e,n){this.c=e,this.b=n,this.a=t}function UQe(t,e,n){return t.d=u(e.Kb(n),164)}function ivt(t,e){return t.Aj().Nh().Kh(t,e)}function svt(t,e){return t.Aj().Nh().Ih(t,e)}function JWt(t,e){return In(t),Gt(t)===Gt(e)}function un(t,e){return In(t),Gt(t)===Gt(e)}function pnt(t,e){return het(vie(t.a,e,!1))}function bnt(t,e){return het(wie(t.a,e,!1))}function WQe(t,e){return t.b.sd(new IVt(t,e))}function KQe(t,e){return t.b.sd(new OVt(t,e))}function tKt(t,e){return t.b.sd(new NVt(t,e))}function avt(t,e,n){return t.lastIndexOf(e,n)}function YQe(t,e,n){return js(t[e.b],t[n.b])}function XQe(t,e){return ee(e,(xe(),CO),t)}function QQe(t,e){return mu(e.a.d.p,t.a.d.p)}function ZQe(t,e){return mu(t.a.d.p,e.a.d.p)}function JQe(t,e){return js(t.c-t.s,e.c-e.s)}function eKt(t){return t.c?Go(t.c.a,t,0):-1}function tZe(t){return t<100?null:new Lp(t)}function D6(t){return t==U2||t==h0||t==Kc}function nKt(t,e){return _t(e,15)&&cue(t.c,e)}function eZe(t,e){z1||e&&(t.d=e)}function vnt(t,e){var n;return n=e,!!Lyt(t,n)}function ovt(t,e){this.c=t,Vnt.call(this,t,e)}function rKt(t){this.c=t,Uet.call(this,Dq,0)}function iKt(t,e){atn.call(this,t,t.length,e)}function nZe(t,e,n){return u(t.c,69).lk(e,n)}function kj(t,e,n){return u(t.c,69).mk(e,n)}function rZe(t,e,n){return dQe(t,u(e,332),n)}function cvt(t,e,n){return gQe(t,u(e,332),n)}function iZe(t,e,n){return nae(t,u(e,332),n)}function sKt(t,e,n){return n0n(t,u(e,332),n)}function w_(t,e){return e==null?null:ny(t.b,e)}function uvt(t){return Nm(t)?(In(t),t):t.ke()}function Ej(t){return!isNaN(t)&&!isFinite(t)}function aKt(t){fd(),this.a=(pn(),new Yk(t))}function HM(t){f8(),this.d=t,this.a=new F3}function oh(t,e,n){this.a=t,this.b=e,this.c=n}function oKt(t,e,n){this.a=t,this.b=e,this.c=n}function cKt(t,e,n){this.d=t,this.b=n,this.a=e}function wnt(t){xUt(this),Mh(this),Ka(this,t)}function qu(t){Qet(this),Tvt(this.c,0,t.Pc())}function uKt(t){Dl(t.a),ate(t.c,t.b),t.b=null}function lKt(t){this.a=t,qd(),Au(Date.now())}function hKt(){hKt=X,A7t=new C,YH=new C}function mnt(){mnt=X,m7t=new vt,Lge=new Ot}function fKt(){fKt=X,B4e=Nt(Qn,Me,1,0,5,1)}function dKt(){dKt=X,e5e=Nt(Qn,Me,1,0,5,1)}function lvt(){lvt=X,n5e=Nt(Qn,Me,1,0,5,1)}function fd(){fd=X,new wpt((pn(),pn(),uo))}function sZe(t){return P$(),Xr((vte(),Ige),t)}function aZe(t){return N1(),Xr((FJt(),Rge),t)}function oZe(t){return Nz(),Xr((HZt(),Vge),t)}function cZe(t){return $$(),Xr((VZt(),Gge),t)}function uZe(t){return gq(),Xr((Mne(),Uge),t)}function lZe(t){return Zf(),Xr((OJt(),Yge),t)}function hZe(t){return rl(),Xr((NJt(),Qge),t)}function fZe(t){return Tu(),Xr((PJt(),Jge),t)}function dZe(t){return Lq(),Xr((UGt(),kpe),t)}function gZe(t){return tw(),Xr((mte(),Tpe),t)}function pZe(t){return ex(),Xr((yte(),Cpe),t)}function bZe(t){return sC(),Xr((xte(),Lpe),t)}function vZe(t){return AR(),Xr((xZt(),Mpe),t)}function wZe(t){return z$(),Xr((GZt(),Wpe),t)}function mZe(t){return j_(),Xr((BJt(),gbe),t)}function yZe(t){return Ya(),Xr((Qte(),wbe),t)}function xZe(t){return U8(),Xr((wte(),Ebe),t)}function kZe(t){return ew(),Xr((RJt(),Lbe),t)}function hvt(t,e){if(!t)throw nt(new Pn(e))}function EZe(t){return Gn(),Xr((wee(),Obe),t)}function fvt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function ynt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function dvt(t,e,n){this.b=t,this.c=e,this.a=n}function Tj(t,e,n){this.b=t,this.a=e,this.c=n}function gKt(t,e,n){this.a=t,this.b=e,this.c=n}function gvt(t,e,n){this.a=t,this.b=e,this.c=n}function pKt(t,e,n){this.a=t,this.b=e,this.c=n}function pvt(t,e,n){this.a=t,this.b=e,this.c=n}function bKt(t,e,n){this.b=t,this.a=e,this.c=n}function _j(t,e,n){this.e=e,this.b=t,this.d=n}function TZe(t,e,n){return Yb(),t.a.Od(e,n),e}function xnt(t){var e;return e=new Er,e.e=t,e}function bvt(t){var e;return e=new Jzt,e.b=t,e}function VM(){VM=X,cV=new AY,uV=new LY}function df(){df=X,Wbe=new wX,Kbe=new yF}function _Ze(t){return dz(),Xr((Ete(),qbe),t)}function CZe(t){return O1(),Xr((_te(),Qbe),t)}function SZe(t){return fq(),Xr((mne(),s2e),t)}function AZe(t){return rx(),Xr((xee(),a2e),t)}function LZe(t){return I$(),Xr((QZt(),o2e),t)}function MZe(t){return K6(),Xr((jJt(),c2e),t)}function DZe(t){return p4(),Xr((Ute(),Jbe),t)}function IZe(t){return Jv(),Xr((qJt(),i2e),t)}function OZe(t){return X$(),Xr(($Jt(),u2e),t)}function NZe(t){return m2(),Xr((Vte(),l2e),t)}function PZe(t){return TD(),Xr((WZt(),h2e),t)}function FZe(t){return h2(),Xr((zJt(),d2e),t)}function BZe(t){return nq(),Xr((_ee(),g2e),t)}function RZe(t){return bD(),Xr((KZt(),p2e),t)}function jZe(t){return nI(),Xr((Eee(),b2e),t)}function $Ze(t){return f7(),Xr((kee(),v2e),t)}function zZe(t){return go(),Xr((Gne(),w2e),t)}function qZe(t){return G8(),Xr((VJt(),m2e),t)}function HZe(t){return B0(),Xr((HJt(),x2e),t)}function VZe(t){return x$(),Xr((ZZt(),k2e),t)}function GZe(t){return ph(),Xr((Wte(),E2e),t)}function UZe(t){return Zz(),Xr((Tee(),Rwe),t)}function WZe(t){return Y_(),Xr((GJt(),jwe),t)}function KZe(t){return sy(),Xr((Cte(),$we),t)}function YZe(t){return ho(),Xr((KJt(),Uwe),t)}function XZe(t){return m4(),Xr((wne(),qwe),t)}function QZe(t){return j0(),Xr((WJt(),Hwe),t)}function ZZe(t){return yD(),Xr((XZt(),Vwe),t)}function JZe(t){return uz(),Xr((UJt(),Wwe),t)}function tJe(t){return aC(),Xr((Gte(),zwe),t)}function eJe(t){return lD(),Xr((YZt(),Kwe),t)}function nJe(t){return Z8(),Xr((XJt(),Ywe),t)}function rJe(t){return oz(),Xr((QJt(),Xwe),t)}function iJe(t){return gz(),Xr((YJt(),Qwe),t)}function sJe(t){return Zv(),Xr((ZJt(),lme),t)}function aJe(t){return B_(),Xr((tJt(),pme),t)}function oJe(t){return gd(),Xr((eJt(),kme),t)}function cJe(t){return C1(),Xr((nJt(),Tme),t)}function uJe(t){return Yf(),Xr((JZt(),jme),t)}function lJe(t){return qv(),Xr((rJt(),Ume),t)}function hJe(t){return o7(),Xr((kte(),Wme),t)}function fJe(t){return fC(),Xr((Cee(),Yme),t)}function dJe(t){return d$(),Xr((aJt(),uye),t)}function gJe(t){return iz(),Xr((sJt(),pye),t)}function pJe(t){return v$(),Xr((iJt(),lye),t)}function bJe(t){return _z(),Xr((JJt(),vye),t)}function vJe(t){return N$(),Xr((oJt(),wye),t)}function wJe(t){return RD(),Xr((tte(),mye),t)}function mJe(t){return Vz(),Xr((Tte(),Nye),t)}function yJe(t){return cz(),Xr((nte(),Pye),t)}function xJe(t){return Tz(),Xr((ete(),Fye),t)}function kJe(t){return w7(),Xr((Xte(),n3e),t)}function EJe(t){return VD(),Xr((rte(),r3e),t)}function TJe(t){return MR(),Xr((mZt(),i3e),t)}function _Je(t){return DR(),Xr((wZt(),a3e),t)}function CJe(t){return hD(),Xr((uJt(),o3e),t)}function SJe(t){return iI(),Xr((Kte(),c3e),t)}function AJe(t){return HT(),Xr((yZt(),T3e),t)}function LJe(t){return ND(),Xr((cJt(),_3e),t)}function MJe(t){return t1(),Xr((Yte(),D3e),t)}function DJe(t){return Hg(),Xr((yne(),O3e),t)}function IJe(t){return Qd(),Xr((yee(),N3e),t)}function OJe(t){return cy(),Xr((mee(),$3e),t)}function NJe(t){return co(),Xr((WGt(),jbe),t)}function PJe(t){return $8(),Xr((UZt(),Rbe),t)}function FJe(t){return fo(),Xr((Zte(),e4e),t)}function BJe(t){return D1(),Xr((ste(),n4e),t)}function RJe(t){return q0(),Xr((Lte(),r4e),t)}function jJe(t){return tq(),Xr((Aee(),i4e),t)}function $Je(t){return $0(),Xr((ite(),a4e),t)}function zJe(t){return Vl(),Xr((Ate(),c4e),t)}function qJe(t){return fy(),Xr((Lne(),u4e),t)}function HJe(t){return u4(),Xr((Jte(),l4e),t)}function VJe(t){return va(),Xr((gee(),h4e),t)}function GJe(t){return il(),Xr((See(),f4e),t)}function UJe(t){return Nl(),Xr((Dte(),w4e),t)}function WJe(t){return bl(),Xr((Une(),m4e),t)}function KJe(t){return be(),Xr((tee(),d4e),t)}function YJe(t){return Az(),Xr((Mte(),y4e),t)}function XJe(t){return Ol(),Xr((Ste(),E4e),t)}function QJe(t){return p7(),Xr((xne(),F4e),t)}function ZJe(t,e){return In(t),t+(In(e),e)}function JJe(t,e){return qd(),Or(Kt(t.a),e)}function ttn(t,e){return qd(),Or(Kt(t.a),e)}function knt(t,e){this.c=t,this.a=e,this.b=e-t}function vKt(t,e,n){this.a=t,this.b=e,this.c=n}function vvt(t,e,n){this.a=t,this.b=e,this.c=n}function wvt(t,e,n){this.a=t,this.b=e,this.c=n}function wKt(t,e,n){this.a=t,this.b=e,this.c=n}function mKt(t,e,n){this.a=t,this.b=e,this.c=n}function Lg(t,e,n){this.e=t,this.a=e,this.c=n}function yKt(t,e,n){ah(),Mwt.call(this,t,e,n)}function Ent(t,e,n){ah(),gwt.call(this,t,e,n)}function mvt(t,e,n){ah(),gwt.call(this,t,e,n)}function yvt(t,e,n){ah(),gwt.call(this,t,e,n)}function xKt(t,e,n){ah(),Ent.call(this,t,e,n)}function xvt(t,e,n){ah(),Ent.call(this,t,e,n)}function kKt(t,e,n){ah(),xvt.call(this,t,e,n)}function EKt(t,e,n){ah(),mvt.call(this,t,e,n)}function TKt(t,e,n){ah(),yvt.call(this,t,e,n)}function GM(t,e){return Dr(t),Dr(e),new GHt(t,e)}function I6(t,e){return Dr(t),Dr(e),new BKt(t,e)}function etn(t,e){return Dr(t),Dr(e),new RKt(t,e)}function ntn(t,e){return Dr(t),Dr(e),new WHt(t,e)}function u(t,e){return m_(t==null||sst(t,e)),t}function h8(t){var e;return e=new le,Zrt(e,t),e}function rtn(t){var e;return e=new Qs,Zrt(e,t),e}function _Kt(t){var e;return e=new Spt,fit(e,t),e}function UM(t){var e;return e=new cs,fit(e,t),e}function itn(t){return!t.e&&(t.e=new le),t.e}function stn(t){return!t.c&&(t.c=new xm),t.c}function ue(t,e){return t.c[t.c.length]=e,!0}function CKt(t,e){this.c=t,this.b=e,this.a=!1}function kvt(t){this.d=t,Itt(this),this.b=Qtn(t.d)}function SKt(){this.a=";,;",this.b="",this.c=""}function atn(t,e,n){AYt.call(this,e,n),this.a=t}function AKt(t,e,n){this.b=t,qGt.call(this,e,n)}function Evt(t,e,n){this.c=t,RR.call(this,e,n)}function Tvt(t,e,n){U4t(n,0,t,e,n.length,!1)}function Vd(t,e,n,r,s){t.b=e,t.c=n,t.d=r,t.a=s}function otn(t,e){e&&(t.b=e,t.a=(qp(e),e.a))}function _vt(t,e,n,r,s){t.d=e,t.c=n,t.a=r,t.b=s}function Cvt(t){var e,n;e=t.b,n=t.c,t.b=n,t.c=e}function Svt(t){var e,n;n=t.d,e=t.a,t.d=e,t.a=n}function Avt(t){return Wp(den(Vo(t)?Dh(t):t))}function ctn(t,e){return mu(VKt(t.d),VKt(e.d))}function utn(t,e){return e==(be(),Bn)?t.c:t.d}function f8(){f8=X,W_t=(be(),Bn),gG=Hn}function LKt(){this.b=Zt(ve(Ie((n1(),Wut))))}function MKt(t){return Yb(),Nt(Qn,Me,1,t,5,1)}function ltn(t){return new Re(t.c+t.b,t.d+t.a)}function htn(t,e){return LR(),mu(t.d.p,e.d.p)}function Tnt(t){return Zn(t.b!=0),fh(t,t.a.a)}function ftn(t){return Zn(t.b!=0),fh(t,t.c.b)}function Lvt(t,e){if(!t)throw nt(new jqt(e))}function Cj(t,e){if(!t)throw nt(new Pn(e))}function Mvt(t,e,n){i8.call(this,t,e),this.b=n}function WM(t,e,n){Gbt.call(this,t,e),this.c=n}function DKt(t,e,n){cee.call(this,e,n),this.d=t}function Dvt(t){lvt(),Tk.call(this),this.th(t)}function IKt(t,e,n){this.a=t,H3.call(this,e,n)}function OKt(t,e,n){this.a=t,H3.call(this,e,n)}function Sj(t,e,n){Gbt.call(this,t,e),this.c=n}function NKt(){S8(),Den.call(this,(Ip(),Xh))}function PKt(t){return t!=null&&!Git(t,iA,sA)}function dtn(t,e){return(Vre(t)<<4|Vre(e))&Ms}function gtn(t,e){return Qj(),dst(t,e),new cXt(t,e)}function Qb(t,e){var n;t.n&&(n=e,ue(t.f,n))}function d8(t,e,n){var r;r=new Hm(n),Qf(t,e,r)}function ptn(t,e){var n;return n=t.c,Ymt(t,e),n}function Ivt(t,e){return e<0?t.g=-1:t.g=e,t}function Aj(t,e){return Jan(t),t.a*=e,t.b*=e,t}function FKt(t,e,n,r,s){t.c=e,t.d=n,t.b=r,t.a=s}function ai(t,e){return ks(t,e,t.c.b,t.c),!0}function Ovt(t){t.a.b=t.b,t.b.a=t.a,t.a=t.b=null}function _nt(t){this.b=t,this.a=Pv(this.b.a).Ed()}function BKt(t,e){this.b=t,this.a=e,fT.call(this)}function RKt(t,e){this.a=t,this.b=e,fT.call(this)}function jKt(t,e){AYt.call(this,e,1040),this.a=t}function KM(t){return t==0||isNaN(t)?t:t<0?-1:1}function btn(t){return R6(),Zd(t)==hs(Zp(t))}function vtn(t){return R6(),Zp(t)==hs(Zd(t))}function Nv(t,e){return lC(t,new i8(e.a,e.b))}function wtn(t){return!Wa(t)&&t.c.i.c==t.d.i.c}function Lj(t){var e;return e=t.n,t.a.b+e.d+e.a}function $Kt(t){var e;return e=t.n,t.e.b+e.d+e.a}function Nvt(t){var e;return e=t.n,t.e.a+e.b+e.c}function zKt(t){return yi(),new Gd(0,t)}function mtn(t){return t.a?t.a:srt(t)}function m_(t){if(!t)throw nt(new Kk(null))}function qKt(){qKt=X,Dft=(pn(),new I(aut))}function Mj(){Mj=X,new D3t((Ztt(),wut),(Jtt(),vut))}function HKt(){HKt=X,n7t=Nt(Ha,re,19,256,0,1)}function Cnt(t,e,n,r){a3t.call(this,t,e,n,r,0,0)}function ytn(t,e,n){return Ai(t.b,u(n.b,17),e)}function xtn(t,e,n){return Ai(t.b,u(n.b,17),e)}function ktn(t,e){return ue(t,new Re(e.a,e.b))}function Etn(t,e){return t.c=e)throw nt(new Ept)}function sen(t,e,n){return ls(e,0,Rvt(e[0],n[0])),e}function aen(t,e,n){e.Ye(n,Zt(ve(tr(t.b,n)))*t.a)}function SYt(t,e,n){return x4(),z8(t,e)&&z8(t,n)}function T_(t){return il(),!t.Hc(tg)&&!t.Hc(Eb)}function Vj(t){return new Re(t.c+t.b/2,t.d+t.a/2)}function Rnt(t,e){return e.kh()?Xp(t.b,u(e,49)):e}function twt(t,e){this.e=t,this.d=e&64?e|vd:e}function AYt(t,e){this.c=0,this.d=t,this.b=e|64|vd}function Gj(t){this.b=new Jc(11),this.a=(Q3(),t)}function jnt(t){this.b=null,this.a=(Q3(),t||b7t)}function LYt(t){this.a=Zie(t.a),this.b=new qu(t.b)}function MYt(t){this.b=t,A6.call(this,t),OUt(this)}function DYt(t){this.b=t,PM.call(this,t),NUt(this)}function qm(t,e,n){this.a=t,M6.call(this,e,n,5,6)}function ewt(t,e,n,r){this.b=t,Bs.call(this,e,n,r)}function oa(t,e,n,r,s){Vrt.call(this,t,e,n,r,s,-1)}function __(t,e,n,r,s){gD.call(this,t,e,n,r,s,-1)}function he(t,e,n,r){Bs.call(this,t,e,n),this.b=r}function Uj(t,e,n,r){WM.call(this,t,e,n),this.b=r}function IYt(t){PGt.call(this,t,!1),this.a=!1}function OYt(t,e){this.b=t,ctt.call(this,t.b),this.a=e}function NYt(t,e){Vm(),uYe.call(this,t,yz(new Cl(e)))}function Wj(t,e){return yi(),new pwt(t,e,0)}function $nt(t,e){return yi(),new pwt(6,t,e)}function oen(t,e){return un(t.substr(0,e.length),e)}function Ml(t,e){return ha(e)?crt(t,e):!!Fo(t.f,e)}function Ea(t,e){for(In(e);t.Ob();)e.td(t.Pb())}function Y3(t,e,n){eb(),this.e=t,this.d=e,this.a=n}function Mg(t,e,n,r){var s;s=t.i,s.i=e,s.a=n,s.b=r}function nwt(t){var e;for(e=t;e.f;)e=e.f;return e}function P6(t){var e;return e=K_(t),Zn(e!=null),e}function cen(t){var e;return e=Wun(t),Zn(e!=null),e}function p8(t,e){var n;return n=t.a.gc(),dmt(e,n),n-e}function rwt(t,e){var n;for(n=0;n0?b.Math.log(t/e):-100}function PYt(t,e){return _c(t,e)<0?-1:_c(t,e)>0?1:0}function cwt(t,e,n){return Cle(t,u(e,46),u(n,167))}function FYt(t,e){return u(Zvt(Pv(t.a)).Xb(e),42).cd()}function ven(t,e){return $an(e,t.length),new jKt(t,e)}function Vnt(t,e){this.d=t,nr.call(this,t),this.e=e}function Fv(t){this.d=(In(t),t),this.a=0,this.c=Dq}function uwt(t,e){vv.call(this,1),this.a=t,this.b=e}function BYt(t,e){return t.c?BYt(t.c,e):ue(t.b,e),t}function wen(t,e,n){var r;return r=Xm(t,e),Art(t,e,n),r}function lwt(t,e){var n;return n=t.slice(0,e),Smt(n,t)}function RYt(t,e,n){var r;for(r=0;r=t.g}function Jnt(t,e,n){var r;return r=lit(t,e,n),R5t(t,r)}function F6(t,e){var n;n=t.a.length,Xm(t,n),Art(t,n,e)}function JYt(t,e){var n;n=console[t],n.call(console,e)}function tXt(t,e){var n;++t.j,n=t.Vi(),t.Ii(t.oi(n,e))}function Men(t,e,n){u(e.b,65),_u(e.a,new vvt(t,n,e))}function gwt(t,e,n){oR.call(this,e),this.a=t,this.b=n}function pwt(t,e,n){vv.call(this,t),this.a=e,this.b=n}function bwt(t,e,n){this.a=t,ppt.call(this,e),this.b=n}function eXt(t,e,n){this.a=t,Uwt.call(this,8,e,null,n)}function Den(t){this.a=(In(Zr),Zr),this.b=t,new Fpt}function nXt(t){this.c=t,this.b=this.c.a,this.a=this.c.e}function vwt(t){this.c=t,this.b=t.a.d.a,R2t(t.a.e,this)}function Dl(t){Pm(t.c!=-1),t.d.$c(t.c),t.b=t.c,t.c=-1}function A_(t){return b.Math.sqrt(t.a*t.a+t.b*t.b)}function Rv(t,e){return g8(e,t.a.c.length),Pe(t.a,e)}function dd(t,e){return Gt(t)===Gt(e)||t!=null&&Si(t,e)}function Ien(t){return 0>=t?new ubt:won(t-1)}function Oen(t){return n3?crt(n3,t):!1}function rXt(t){return t?t.dc():!t.Kc().Ob()}function $a(t){return!t.a&&t.c?t.c.b:t.a}function Nen(t){return!t.a&&(t.a=new Bs(Tb,t,4)),t.a}function jv(t){return!t.d&&(t.d=new Bs(wo,t,1)),t.d}function In(t){if(t==null)throw nt(new LT);return t}function L_(t){t.c?t.c.He():(t.d=!0,j2n(t))}function qp(t){t.c?qp(t.c):(p2(t),t.d=!0)}function iXt(t){xwt(t.a),t.b=Nt(Qn,Me,1,t.b.length,5,1)}function Pen(t,e){return mu(e.j.c.length,t.j.c.length)}function Fen(t,e){t.c<0||t.b.b=0?t.Bh(n):K4t(t,e)}function sXt(t){var e,n;return e=t.c.i.c,n=t.d.i.c,e==n}function Ren(t){if(t.p!=4)throw nt(new Ru);return t.e}function jen(t){if(t.p!=3)throw nt(new Ru);return t.e}function $en(t){if(t.p!=6)throw nt(new Ru);return t.f}function zen(t){if(t.p!=6)throw nt(new Ru);return t.k}function qen(t){if(t.p!=3)throw nt(new Ru);return t.j}function Hen(t){if(t.p!=4)throw nt(new Ru);return t.j}function wwt(t){return!t.b&&(t.b=new cR(new Qtt)),t.b}function $v(t){return t.c==-2&&Hk(t,o0n(t.g,t.b)),t.c}function w8(t,e){var n;return n=Knt("",t),n.n=e,n.i=1,n}function Ven(t,e){Ont(u(e.b,65),t),_u(e.a,new ri(t))}function Gen(t,e){Or((!t.a&&(t.a=new $M(t,t)),t.a),e)}function aXt(t,e){this.b=t,Vnt.call(this,t,e),OUt(this)}function oXt(t,e){this.b=t,ovt.call(this,t,e),NUt(this)}function mwt(t,e,n,r){Cv.call(this,t,e),this.d=n,this.a=r}function Xj(t,e,n,r){Cv.call(this,t,n),this.a=e,this.f=r}function cXt(t,e){_Xe.call(this,mon(Dr(t),Dr(e))),this.a=e}function uXt(){C4t.call(this,D2,(fHt(),l5e)),d3n(this)}function lXt(){C4t.call(this,jh,(Zk(),XAt)),kyn(this)}function hXt(){Kr.call(this,"DELAUNAY_TRIANGULATION",0)}function Uen(t){return String.fromCharCode.apply(null,t)}function Ai(t,e,n){return ha(e)?Ao(t,e,n):lu(t.f,e,n)}function ywt(t){return pn(),t?t.ve():(Q3(),Q3(),w7t)}function Wen(t,e,n){return X6(),n.pg(t,u(e.cd(),146))}function fXt(t,e){return Mj(),new D3t(new WUt(t),new UUt(e))}function Ken(t){return ql(t,jat),q$(Ra(Ra(5,t),t/10|0))}function Qj(){Qj=X,uge=new tet(ut(ot(I2,1),Iq,42,0,[]))}function dXt(t){return!t.d&&(t.d=new T(t.c.Cc())),t.d}function m8(t){return!t.a&&(t.a=new Wqt(t.c.vc())),t.a}function gXt(t){return!t.b&&(t.b=new Yk(t.c.ec())),t.b}function Wd(t,e){for(;e-- >0;)t=t<<1|(t<0?1:0);return t}function Rc(t,e){return Gt(t)===Gt(e)||t!=null&&Si(t,e)}function Yen(t,e){return Fn(),u(e.b,19).ar&&++r,r}function D0(t){var e,n;return n=(e=new wv,e),O8(n,t),n}function irt(t){var e,n;return n=(e=new wv,e),L4t(n,t),n}function lnn(t,e){var n;return n=tr(t.f,e),ayt(e,n),null}function srt(t){var e;return e=xon(t),e||null}function TXt(t){return!t.b&&(t.b=new he(ra,t,12,3)),t.b}function hnn(t){return t!=null&&pM(rU,t.toLowerCase())}function fnn(t,e){return js(Hu(t)*Ll(t),Hu(e)*Ll(e))}function dnn(t,e){return js(Hu(t)*Ll(t),Hu(e)*Ll(e))}function gnn(t,e){return js(t.d.c+t.d.b/2,e.d.c+e.d.b/2)}function pnn(t,e){return js(t.g.c+t.g.b/2,e.g.c+e.g.b/2)}function _Xt(t,e,n){n.a?Su(t,e.b-t.f/2):Cu(t,e.a-t.g/2)}function CXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function SXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function t2(t,e,n,r){this.e=t,this.a=e,this.c=n,this.d=r}function AXt(t,e,n,r){this.a=t,this.c=e,this.d=n,this.b=r}function LXt(t,e,n,r){ah(),xJt.call(this,e,n,r),this.a=t}function MXt(t,e,n,r){ah(),xJt.call(this,e,n,r),this.a=t}function DXt(t,e){this.a=t,xQe.call(this,t,u(t.d,15).Zc(e))}function art(t){this.f=t,this.c=this.f.e,t.f>0&&Hse(this)}function IXt(t,e,n,r){this.b=t,this.c=r,Uet.call(this,e,n)}function OXt(t){return Zn(t.b=0&&un(t.substr(n,e.length),e)}function Hp(t,e,n,r,s,o,h){return new Mrt(t.e,e,n,r,s,o,h)}function XXt(t,e,n,r,s,o){this.a=t,rit.call(this,e,n,r,s,o)}function QXt(t,e,n,r,s,o){this.a=t,rit.call(this,e,n,r,s,o)}function ZXt(t,e){this.g=t,this.d=ut(ot(o0,1),Gg,10,0,[e])}function Dg(t,e){this.e=t,this.a=Qn,this.b=xue(e),this.c=e}function JXt(t,e){xj.call(this),Pmt(this),this.a=t,this.c=e}function eD(t,e,n,r){ls(t.c[e.g],n.g,r),ls(t.c[n.g],e.g,r)}function hrt(t,e,n,r){ls(t.c[e.g],e.g,n),ls(t.b[e.g],e.g,r)}function Bnn(){return lD(),ut(ot(R_t,1),oe,376,0,[wht,IO])}function Rnn(){return bD(),ut(ot(M9t,1),oe,479,0,[L9t,FV])}function jnn(){return TD(),ut(ot(S9t,1),oe,419,0,[NV,C9t])}function $nn(){return I$(),ut(ot(m9t,1),oe,422,0,[w9t,mlt])}function znn(){return x$(),ut(ot(H9t,1),oe,420,0,[Nlt,q9t])}function qnn(){return yD(),ut(ot(N_t,1),oe,421,0,[pht,bht])}function Hnn(){return B_(),ut(ot(gme,1),oe,523,0,[NS,OS])}function Vnn(){return Yf(),ut(ot(Rme,1),oe,520,0,[Uy,vb])}function Gnn(){return gd(),ut(ot(xme,1),oe,516,0,[Rw,Zg])}function Unn(){return C1(),ut(ot(Eme,1),oe,515,0,[z2,V1])}function Wnn(){return qv(),ut(ot(Gme,1),oe,455,0,[wb,n5])}function Knn(){return v$(),ut(ot(cCt,1),oe,425,0,[Oht,oCt])}function Ynn(){return d$(),ut(ot(aCt,1),oe,480,0,[Iht,sCt])}function Xnn(){return iz(),ut(ot(uCt,1),oe,495,0,[TG,xE])}function Qnn(){return N$(),ut(ot(hCt,1),oe,426,0,[lCt,Bht])}function Znn(){return ND(),ut(ot(gSt,1),oe,429,0,[OG,dSt])}function Jnn(){return hD(),ut(ot(UCt,1),oe,430,0,[Uht,DG])}function trn(){return Nz(),ut(ot(D7t,1),oe,428,0,[Out,M7t])}function ern(){return $$(),ut(ot(O7t,1),oe,427,0,[I7t,Nut])}function nrn(){return z$(),ut(ot(oEt,1),oe,424,0,[Gut,rV])}function rrn(){return $8(),ut(ot(Bbe,1),oe,511,0,[pO,ilt])}function c$(t,e,n,r){return n>=0?t.jh(e,n,r):t.Sg(null,n,r)}function frt(t){return t.b.b==0?t.a.$e():Tnt(t.b)}function irn(t){if(t.p!=5)throw nt(new Ru);return Mr(t.f)}function srn(t){if(t.p!=5)throw nt(new Ru);return Mr(t.k)}function Lwt(t){return Gt(t.a)===Gt((dit(),Aft))&&a3n(t),t.a}function tQt(t){this.a=u(Dr(t),271),this.b=(pn(),new k2t(t))}function eQt(t,e){cpt(this,new Re(t.a,t.b)),XB(this,UM(e))}function qv(){qv=X,wb=new Bbt(fx,0),n5=new Bbt(dx,1)}function gd(){gd=X,Rw=new Pbt(dx,0),Zg=new Pbt(fx,1)}function Hv(){pKe.call(this,new x6(Qm(12))),w2t(!0),this.a=2}function drt(t,e,n){yi(),vv.call(this,t),this.b=e,this.a=n}function Mwt(t,e,n){ah(),oR.call(this,e),this.a=t,this.b=n}function nQt(t){xj.call(this),Pmt(this),this.a=t,this.c=!0}function rQt(t){var e;e=t.c.d.b,t.b=e,t.a=t.c.d,e.a=t.c.d.b=t}function u$(t){var e;fon(t.a),gUt(t.a),e=new er(t.a),s3t(e)}function arn(t,e){fue(t,!0),_u(t.e.wf(),new dvt(t,!0,e))}function l$(t,e){return FZt(e),uon(t,Nt(Sr,Jr,25,e,15,1),e)}function orn(t,e){return R6(),t==hs(Zd(e))||t==hs(Zp(e))}function jc(t,e){return e==null?cc(Fo(t.f,null)):UT(t.g,e)}function crn(t){return t.b==0?null:(Zn(t.b!=0),fh(t,t.a.a))}function Cs(t){return Math.max(Math.min(t,Ti),-2147483648)|0}function urn(t,e){var n=Eut[t.charCodeAt(0)];return n??t}function h$(t,e){return r$(t,"set1"),r$(e,"set2"),new JHt(t,e)}function lrn(t,e){var n;return n=ion(t.f,e),Fi(mj(n),t.f.d)}function D_(t,e){var n,r;return n=e,r=new Ve,the(t,n,r),r.d}function grt(t,e,n,r){var s;s=new VWt,e.a[n.g]=s,O6(t.b,r,s)}function Dwt(t,e,n){var r;r=t.Yg(e),r>=0?t.sh(r,n):y5t(t,e,n)}function Z3(t,e,n){g$(),t&&Ai(_ft,t,e),t&&Ai(cN,t,n)}function iQt(t,e,n){this.i=new le,this.b=t,this.g=e,this.a=n}function f$(t,e,n){this.c=new le,this.e=t,this.f=e,this.b=n}function Iwt(t,e,n){this.a=new le,this.e=t,this.f=e,this.c=n}function sQt(t,e){uj(this),this.f=e,this.g=t,n$(this),this._d()}function nD(t,e){var n;n=t.q.getHours(),t.q.setDate(e),yC(t,n)}function aQt(t,e){var n;for(Dr(e),n=t.a;n;n=n.c)e.Od(n.g,n.i)}function oQt(t){var e;return e=new xR(Qm(t.length)),Eyt(e,t),e}function hrn(t){function e(){}return e.prototype=t||{},new e}function frn(t,e){return Fne(t,e)?(Nee(t),!0):!1}function I0(t,e){if(e==null)throw nt(new LT);return uhn(t,e)}function drn(t){if(t.qe())return null;var e=t.n;return $H[e]}function rD(t){return t.Db>>16!=3?null:u(t.Cb,33)}function _1(t){return t.Db>>16!=9?null:u(t.Cb,33)}function cQt(t){return t.Db>>16!=6?null:u(t.Cb,79)}function uQt(t){return t.Db>>16!=7?null:u(t.Cb,235)}function lQt(t){return t.Db>>16!=7?null:u(t.Cb,160)}function hs(t){return t.Db>>16!=11?null:u(t.Cb,33)}function hQt(t,e){var n;return n=t.Yg(e),n>=0?t.lh(n):Hst(t,e)}function fQt(t,e){var n;return n=new Bvt(e),dae(n,t),new qu(n)}function Owt(t){var e;return e=t.d,e=t.si(t.f),Or(t,e),e.Ob()}function dQt(t,e){return t.b+=e.b,t.c+=e.c,t.d+=e.d,t.a+=e.a,t}function prt(t,e){return b.Math.abs(t)0}function gQt(){this.a=new A0,this.e=new Qs,this.g=0,this.i=0}function pQt(t){this.a=t,this.b=Nt(hme,re,1944,t.e.length,0,2)}function brt(t,e,n){var r;r=nre(t,e,n),t.b=new rz(r.c.length)}function C1(){C1=X,z2=new Nbt(kot,0),V1=new Nbt("UP",1)}function d$(){d$=X,Iht=new Rbt(L1e,0),sCt=new Rbt("FAN",1)}function g$(){g$=X,_ft=new Ar,cN=new Ar,NYe(Sge,new X9)}function prn(t){if(t.p!=0)throw nt(new Ru);return a_(t.f,0)}function brn(t){if(t.p!=0)throw nt(new Ru);return a_(t.k,0)}function bQt(t){return t.Db>>16!=3?null:u(t.Cb,147)}function E8(t){return t.Db>>16!=6?null:u(t.Cb,235)}function Gm(t){return t.Db>>16!=17?null:u(t.Cb,26)}function vQt(t,e){var n=t.a=t.a||[];return n[e]||(n[e]=t.le(e))}function vrn(t,e){var n;return n=t.a.get(e),n??new Array}function wrn(t,e){var n;n=t.q.getHours(),t.q.setMonth(e),yC(t,n)}function Ao(t,e,n){return e==null?lu(t.f,null,n):nw(t.g,e,n)}function I_(t,e,n,r,s,o){return new F0(t.e,e,t.aj(),n,r,s,o)}function iD(t,e,n){return t.a=Bl(t.a,0,e)+(""+n)+OM(t.a,e),t}function mrn(t,e,n){return ue(t.a,(Qj(),dst(e,n),new Cv(e,n))),t}function Nwt(t){return y2t(t.c),t.e=t.a=t.c,t.c=t.c.c,++t.d,t.a.f}function wQt(t){return y2t(t.e),t.c=t.a=t.e,t.e=t.e.e,--t.d,t.a.f}function pa(t,e){t.d&&Eu(t.d.e,t),t.d=e,t.d&&ue(t.d.e,t)}function Ba(t,e){t.c&&Eu(t.c.g,t),t.c=e,t.c&&ue(t.c.g,t)}function Lo(t,e){t.c&&Eu(t.c.a,t),t.c=e,t.c&&ue(t.c.a,t)}function tc(t,e){t.i&&Eu(t.i.j,t),t.i=e,t.i&&ue(t.i.j,t)}function mQt(t,e,n){this.a=e,this.c=t,this.b=(Dr(n),new qu(n))}function yQt(t,e,n){this.a=e,this.c=t,this.b=(Dr(n),new qu(n))}function xQt(t,e){this.a=t,this.c=uc(this.a),this.b=new o$(e)}function yrn(t){var e;return p2(t),e=new Qs,Wi(t,new Ge(e))}function Um(t,e){if(t<0||t>e)throw nt(new Co(j6t+t+$6t+e))}function Pwt(t,e){return hYt(t.a,e)?swt(t,u(e,22).g,null):null}function xrn(t){return Oit(),Fn(),u(t.a,81).d.e!=0}function kQt(){kQt=X,fge=Qr((dR(),ut(ot(hge,1),oe,538,0,[xut])))}function EQt(){EQt=X,Zwe=el(new Zs,(Ya(),jo),(co(),bO))}function Fwt(){Fwt=X,Jwe=el(new Zs,(Ya(),jo),(co(),bO))}function TQt(){TQt=X,eme=el(new Zs,(Ya(),jo),(co(),bO))}function _Qt(){_Qt=X,bme=Ei(new Zs,(Ya(),jo),(co(),fS))}function Rl(){Rl=X,mme=Ei(new Zs,(Ya(),jo),(co(),fS))}function CQt(){CQt=X,yme=Ei(new Zs,(Ya(),jo),(co(),fS))}function vrt(){vrt=X,_me=Ei(new Zs,(Ya(),jo),(co(),fS))}function SQt(){SQt=X,hye=el(new Zs,(o7(),FS),(fC(),Eht))}function n2(t,e,n,r){this.c=t,this.d=r,mrt(this,e),yrt(this,n)}function $6(t){this.c=new cs,this.b=t.b,this.d=t.c,this.a=t.a}function wrt(t){this.a=b.Math.cos(t),this.b=b.Math.sin(t)}function mrt(t,e){t.a&&Eu(t.a.k,t),t.a=e,t.a&&ue(t.a.k,t)}function yrt(t,e){t.b&&Eu(t.b.f,t),t.b=e,t.b&&ue(t.b.f,t)}function AQt(t,e){Men(t,t.b,t.c),u(t.b.b,65),e&&u(e.b,65).b}function krn(t,e){Zyt(t,e),_t(t.Cb,88)&&hy(hl(u(t.Cb,88)),2)}function xrt(t,e){_t(t.Cb,88)&&hy(hl(u(t.Cb,88)),4),tu(t,e)}function p$(t,e){_t(t.Cb,179)&&(u(t.Cb,179).tb=null),tu(t,e)}function $c(t,e){return so(),Qrt(e)?new Dj(e,t):new IM(e,t)}function Ern(t,e){var n,r;n=e.c,r=n!=null,r&&F6(t,new Hm(e.c))}function LQt(t){var e,n;return n=(Zk(),e=new wv,e),O8(n,t),n}function MQt(t){var e,n;return n=(Zk(),e=new wv,e),O8(n,t),n}function DQt(t,e){var n;return n=new Lh(t),e.c[e.c.length]=n,n}function IQt(t,e){var n;return n=u(ny(j6(t.a),e),14),n?n.gc():0}function OQt(t){var e;return p2(t),e=(Q3(),Q3(),v7t),V$(t,e)}function NQt(t){for(var e;;)if(e=t.Pb(),!t.Ob())return e}function Bwt(t,e){dKe.call(this,new x6(Qm(t))),ql(e,Whe),this.a=e}function Kd(t,e,n){zre(e,n,t.gc()),this.c=t,this.a=e,this.b=n-e}function PQt(t,e,n){var r;zre(e,n,t.c.length),r=n-e,obt(t.c,e,r)}function Trn(t,e){IUt(t,Mr(Gs(Rp(e,24),Pq)),Mr(Gs(e,Pq)))}function Sn(t,e){if(t<0||t>=e)throw nt(new Co(j6t+t+$6t+e))}function $r(t,e){if(t<0||t>=e)throw nt(new Ypt(j6t+t+$6t+e))}function Tn(t,e){this.b=(In(t),t),this.a=e&yy?e:e|64|vd}function FQt(t){dUt(this),Wzt(this.a,xyt(b.Math.max(8,t))<<1)}function S1(t){return nc(ut(ot(na,1),re,8,0,[t.i.n,t.n,t.a]))}function _rn(){return N1(),ut(ot(wl,1),oe,132,0,[S7t,Yl,Ly])}function Crn(){return Zf(),ut(ot(My,1),oe,232,0,[fc,iu,dc])}function Srn(){return rl(),ut(ot(Xge,1),oe,461,0,[Ad,lb,kf])}function Arn(){return Tu(),ut(ot(Zge,1),oe,462,0,[s1,hb,Ef])}function Lrn(){return ew(),ut(ot(_Et,1),oe,423,0,[z4,TEt,elt])}function Mrn(){return j_(),ut(ot(xEt,1),oe,379,0,[Yut,Kut,Xut])}function Drn(){return Y_(),ut(ot(T_t,1),oe,378,0,[uht,E_t,uG])}function Irn(){return K6(),ut(ot(x9t,1),oe,314,0,[Cx,wO,y9t])}function Orn(){return X$(),ut(ot(E9t,1),oe,337,0,[k9t,OV,ylt])}function Nrn(){return h2(),ut(ot(f2e,1),oe,450,0,[Elt,oE,G4])}function Prn(){return Jv(),ut(ot(llt,1),oe,361,0,[Aw,db,Sw])}function Frn(){return B0(),ut(ot(y2e,1),oe,303,0,[yO,W4,Sx])}function Brn(){return G8(),ut(ot(Olt,1),oe,292,0,[Dlt,Ilt,mO])}function Rrn(){return ho(),ut(ot(Gwe,1),oe,452,0,[MS,al,su])}function jrn(){return j0(),ut(ot(O_t,1),oe,339,0,[bb,I_t,ght])}function $rn(){return uz(),ut(ot(B_t,1),oe,375,0,[P_t,vht,F_t])}function zrn(){return gz(),ut(ot(V_t,1),oe,377,0,[xht,mE,Gy])}function qrn(){return Z8(),ut(ot($_t,1),oe,336,0,[mht,j_t,DS])}function Hrn(){return oz(),ut(ot(H_t,1),oe,338,0,[q_t,yht,z_t])}function Vrn(){return Zv(),ut(ot(ume,1),oe,454,0,[OO,IS,dG])}function Grn(){return _z(),ut(ot(bye,1),oe,442,0,[Fht,Nht,Pht])}function Urn(){return RD(),ut(ot(gCt,1),oe,380,0,[_G,fCt,dCt])}function Wrn(){return Tz(),ut(ot(ICt,1),oe,381,0,[DCt,qht,MCt])}function Krn(){return cz(),ut(ot(ACt,1),oe,293,0,[zht,SCt,CCt])}function Yrn(){return VD(),ut(ot(Hht,1),oe,437,0,[AG,LG,MG])}function Xrn(){return $0(),ut(ot(xAt,1),oe,334,0,[HG,np,YS])}function Qrn(){return D1(),ut(ot(uAt,1),oe,272,0,[TE,Yy,_E])}function Zrn(t,e){return mbn(t,e,_t(e,99)&&(u(e,18).Bb&Qa)!=0)}function Jrn(t,e,n){var r;return r=EC(t,e,!1),r.b<=e&&r.a<=n}function BQt(t,e,n){var r;r=new SQ,r.b=e,r.a=n,++e.b,ue(t.d,r)}function tin(t,e){var n;return n=(In(t),t).g,I2t(!!n),In(e),n(e)}function Rwt(t,e){var n,r;return r=p8(t,e),n=t.a.Zc(r),new ZHt(t,n)}function ein(t){return t.Db>>16!=6?null:u(Ust(t),235)}function nin(t){if(t.p!=2)throw nt(new Ru);return Mr(t.f)&Ms}function rin(t){if(t.p!=2)throw nt(new Ru);return Mr(t.k)&Ms}function iin(t){return t.a==(S8(),oU)&&Att(t,Pbn(t.g,t.b)),t.a}function z6(t){return t.d==(S8(),oU)&&ET(t,Awn(t.g,t.b)),t.d}function Q(t){return Zn(t.ar?1:0}function RQt(t,e){var n,r;return n=Urt(e),r=n,u(tr(t.c,r),19).a}function jQt(t,e){var n;for(n=t+"";n.length0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function iZt(t){return t.a?t.e.length==0?t.a.a:t.a.a+(""+t.e):t.c}function pin(t){return!!t.a&&fl(t.a.a).i!=0&&!(t.b&&lst(t.b))}function bin(t){return!!t.u&&Oc(t.u.a).i!=0&&!(t.n&&ust(t.n))}function sZt(t){return Ant(t.e.Hd().gc()*t.c.Hd().gc(),16,new a6(t))}function vin(t,e){return PYt(Au(t.q.getTime()),Au(e.q.getTime()))}function pd(t){return u(P1(t,Nt(nlt,Rot,17,t.c.length,0,1)),474)}function sD(t){return u(P1(t,Nt(o0,Gg,10,t.c.length,0,1)),193)}function win(t){return Rl(),!Wa(t)&&!(!Wa(t)&&t.c.i.c==t.d.i.c)}function aZt(t,e,n){var r;r=(Dr(t),new qu(t)),Kfn(new mQt(r,e,n))}function aD(t,e,n){var r;r=(Dr(t),new qu(t)),Yfn(new yQt(r,e,n))}function oZt(t,e){var n;return n=1-e,t.a[n]=nz(t.a[n],n),nz(t,e)}function cZt(t,e){var n;t.e=new qpt,n=gy(e),aa(n,t.c),eue(t,n,0)}function ba(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ai(t.a,s)}function we(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ai(t.b,s)}function pf(t){var e,n,r;return e=new qYt,n=hat(e,t),r4n(e),r=n,r}function Vwt(){var t,e,n;return e=(n=(t=new wv,t),n),ue(aLt,e),e}function w$(t){return t.j.c=Nt(Qn,Me,1,0,5,1),xwt(t.c),Zen(t.a),t}function J3(t){return qT(),_t(t.g,10)?u(t.g,10):null}function min(t){return X3(t).dc()?!1:(wXe(t,new ct),!0)}function yin(t){if(!("stack"in t))try{throw t}catch{}return t}function oD(t,e){if(t<0||t>=e)throw nt(new Co(Ogn(t,e)));return t}function uZt(t,e,n){if(t<0||en)throw nt(new Co(ign(t,e,n)))}function _rt(t,e){if(Vs(t.a,e),e.d)throw nt(new Zo(pfe));e.d=t}function Crt(t,e){if(e.$modCount!=t.$modCount)throw nt(new sh)}function lZt(t,e){return _t(e,42)?pst(t.a,u(e,42)):!1}function hZt(t,e){return _t(e,42)?pst(t.a,u(e,42)):!1}function fZt(t,e){return _t(e,42)?pst(t.a,u(e,42)):!1}function xin(t,e){return t.a<=t.b?(e.ud(t.a++),!0):!1}function Gv(t){var e;return Vo(t)?(e=t,e==-0?0:e):Man(t)}function m$(t){var e;return qp(t),e=new Ae,R3(t.a,new gn(e)),e}function dZt(t){var e;return qp(t),e=new Wn,R3(t.a,new pe(e)),e}function xa(t,e){this.a=t,h6.call(this,t),Um(e,t.gc()),this.b=e}function Gwt(t){this.e=t,this.b=this.e.a.entries(),this.a=new Array}function kin(t){return Ant(t.e.Hd().gc()*t.c.Hd().gc(),273,new VB(t))}function y$(t){return new Jc((ql(t,jat),q$(Ra(Ra(5,t),t/10|0))))}function gZt(t){return u(P1(t,Nt(Nbe,Ufe,11,t.c.length,0,1)),1943)}function Ein(t,e,n){return n.f.c.length>0?cwt(t.a,e,n):cwt(t.b,e,n)}function Tin(t,e,n){t.d&&Eu(t.d.e,t),t.d=e,t.d&&$m(t.d.e,n,t)}function Srt(t,e){v5n(e,t),Svt(t.d),Svt(u(K(t,(xe(),nG)),207))}function N_(t,e){b5n(e,t),Cvt(t.d),Cvt(u(K(t,(xe(),nG)),207))}function Uv(t,e){var n,r;return n=I0(t,e),r=null,n&&(r=n.fe()),r}function T8(t,e){var n,r;return n=Xm(t,e),r=null,n&&(r=n.ie()),r}function P_(t,e){var n,r;return n=I0(t,e),r=null,n&&(r=n.ie()),r}function O0(t,e){var n,r;return n=I0(t,e),r=null,n&&(r=F4t(n)),r}function _in(t,e,n){var r;return r=s7(n),vq(t.g,r,e),vq(t.i,e,n),e}function Cin(t,e,n){var r;r=thn();try{return DQe(t,e,n)}finally{Bin(r)}}function pZt(t){var e;e=t.Wg(),this.a=_t(e,69)?u(e,69).Zh():e.Kc()}function Zs(){Lqt.call(this),this.j.c=Nt(Qn,Me,1,0,5,1),this.a=-1}function Uwt(t,e,n,r){this.d=t,this.n=e,this.g=n,this.o=r,this.p=-1}function bZt(t,e,n,r){this.e=r,this.d=null,this.c=t,this.a=e,this.b=n}function Wwt(t,e,n){this.d=new sR(this),this.e=t,this.i=e,this.f=n}function x$(){x$=X,Nlt=new Mbt(I7,0),q9t=new Mbt("TOP_LEFT",1)}function vZt(){vZt=X,U_t=fXt(de(1),de(4)),G_t=fXt(de(1),de(2))}function wZt(){wZt=X,a3e=Qr((DR(),ut(ot(s3e,1),oe,551,0,[Ght])))}function mZt(){mZt=X,i3e=Qr((MR(),ut(ot(GCt,1),oe,482,0,[Vht])))}function yZt(){yZt=X,T3e=Qr((HT(),ut(ot(fSt,1),oe,530,0,[jO])))}function xZt(){xZt=X,Mpe=Qr((AR(),ut(ot(tEt,1),oe,481,0,[$ut])))}function Sin(){return tw(),ut(ot(Epe,1),oe,406,0,[aO,sO,Rut,jut])}function Ain(){return P$(),ut(ot(KH,1),oe,297,0,[Mut,E7t,T7t,_7t])}function Lin(){return sC(),ut(ot(Ape,1),oe,394,0,[hO,JH,tV,fO])}function Min(){return ex(),ut(ot(_pe,1),oe,323,0,[cO,oO,uO,lO])}function Din(){return U8(),ut(ot(kbe,1),oe,405,0,[Cw,Iy,Dy,$4])}function Iin(){return dz(),ut(ot(zbe,1),oe,360,0,[clt,CV,SV,vO])}function kZt(t,e,n,r){return _t(n,54)?new cWt(t,e,n,r):new Qvt(t,e,n,r)}function Oin(){return O1(),ut(ot(Xbe,1),oe,411,0,[_x,nE,rE,ult])}function Nin(t){var e;return t.j==(be(),yr)&&(e=Voe(t),zu(e,Hn))}function Pin(t,e){var n;n=e.a,Ba(n,e.c.d),pa(n,e.d.d),Jm(n.a,t.n)}function EZt(t,e){return u(Ov(qj(u(Pi(t.k,e),15).Oc(),q4)),113)}function TZt(t,e){return u(Ov(Hj(u(Pi(t.k,e),15).Oc(),q4)),113)}function Fin(t){return new Tn(Oon(u(t.a.dd(),14).gc(),t.a.cd()),16)}function _8(t){return _t(t,14)?u(t,14).dc():!t.Kc().Ob()}function q6(t){return qT(),_t(t.g,145)?u(t.g,145):null}function _Zt(t){if(t.e.g!=t.b)throw nt(new sh);return!!t.c&&t.d>0}function ii(t){return Zn(t.b!=t.d.c),t.c=t.b,t.b=t.b.a,++t.a,t.c.c}function Kwt(t,e){In(e),ls(t.a,t.c,e),t.c=t.c+1&t.a.length-1,Cse(t)}function Vp(t,e){In(e),t.b=t.b-1&t.a.length-1,ls(t.a,t.b,e),Cse(t)}function CZt(t,e){var n;for(n=t.j.c.length;n0&&Pc(t.g,0,e,0,t.i),e}function MZt(t,e){NR();var n;return n=u(tr(nU,t),55),!n||n.wj(e)}function Yin(t){if(t.p!=1)throw nt(new Ru);return Mr(t.f)<<24>>24}function Xin(t){if(t.p!=1)throw nt(new Ru);return Mr(t.k)<<24>>24}function Qin(t){if(t.p!=7)throw nt(new Ru);return Mr(t.k)<<16>>16}function Zin(t){if(t.p!=7)throw nt(new Ru);return Mr(t.f)<<16>>16}function N0(t){var e;for(e=0;t.Ob();)t.Pb(),e=Ra(e,1);return q$(e)}function DZt(t,e){var n;return n=new Lm,t.xd(n),n.a+="..",e.yd(n),n.a}function Jin(t,e,n){var r;r=u(tr(t.g,n),57),ue(t.a.c,new ya(e,r))}function tsn(t,e,n){return Bnt(ve(cc(Fo(t.f,e))),ve(cc(Fo(t.f,n))))}function k$(t,e,n){return mq(t,e,n,_t(e,99)&&(u(e,18).Bb&Qa)!=0)}function esn(t,e,n){return x7(t,e,n,_t(e,99)&&(u(e,18).Bb&Qa)!=0)}function nsn(t,e,n){return _bn(t,e,n,_t(e,99)&&(u(e,18).Bb&Qa)!=0)}function Qwt(t,e){return t==(Gn(),qs)&&e==qs?4:t==qs||e==qs?8:32}function IZt(t,e){return Gt(e)===Gt(t)?"(this Map)":e==null?Mu:Wo(e)}function rsn(t,e){return u(e==null?cc(Fo(t.f,null)):UT(t.g,e),281)}function OZt(t,e,n){var r;return r=s7(n),Ai(t.b,r,e),Ai(t.c,e,n),e}function NZt(t,e){var n;for(n=e;n;)Fm(t,n.i,n.j),n=hs(n);return t}function Zwt(t,e){var n;return n=JM(h8(new Wrt(t,e))),Oj(new Wrt(t,e)),n}function Yd(t,e){so();var n;return n=u(t,66).Mj(),B0n(n,e),n.Ok(e)}function isn(t,e,n,r,s){var o;o=Mbn(s,n,r),ue(e,Agn(s,o)),m0n(t,s,e)}function PZt(t,e,n){t.i=0,t.e=0,e!=n&&(are(t,e,n),sre(t,e,n))}function Jwt(t,e){var n;n=t.q.getHours(),t.q.setFullYear(e+ib),yC(t,n)}function ssn(t,e,n){if(n){var r=n.ee();t.a[e]=r(n)}else delete t.a[e]}function Art(t,e,n){if(n){var r=n.ee();n=r(n)}else n=void 0;t.a[e]=n}function FZt(t){if(t<0)throw nt(new zqt("Negative array size: "+t))}function Oc(t){return t.n||(hl(t),t.n=new pYt(t,wo,t),Po(t)),t.n}function F_(t){return Zn(t.a=0&&t.a[n]===e[n];n--);return n<0}function zZt(t,e){Q8();var n;return n=t.j.g-e.j.g,n!=0?n:0}function qZt(t,e){return In(e),t.a!=null?Vtn(e.Kb(t.a)):WH}function E$(t){var e;return t?new Bvt(t):(e=new A0,fit(e,t),e)}function $l(t,e){var n;return e.b.Kb(Nte(t,e.c.Ee(),(n=new Dn(e),n)))}function T$(t){y4t(),IUt(this,Mr(Gs(Rp(t,24),Pq)),Mr(Gs(t,Pq)))}function HZt(){HZt=X,Vge=Qr((Nz(),ut(ot(D7t,1),oe,428,0,[Out,M7t])))}function VZt(){VZt=X,Gge=Qr(($$(),ut(ot(O7t,1),oe,427,0,[I7t,Nut])))}function GZt(){GZt=X,Wpe=Qr((z$(),ut(ot(oEt,1),oe,424,0,[Gut,rV])))}function UZt(){UZt=X,Rbe=Qr(($8(),ut(ot(Bbe,1),oe,511,0,[pO,ilt])))}function WZt(){WZt=X,h2e=Qr((TD(),ut(ot(S9t,1),oe,419,0,[NV,C9t])))}function KZt(){KZt=X,p2e=Qr((bD(),ut(ot(M9t,1),oe,479,0,[L9t,FV])))}function YZt(){YZt=X,Kwe=Qr((lD(),ut(ot(R_t,1),oe,376,0,[wht,IO])))}function XZt(){XZt=X,Vwe=Qr((yD(),ut(ot(N_t,1),oe,421,0,[pht,bht])))}function QZt(){QZt=X,o2e=Qr((I$(),ut(ot(m9t,1),oe,422,0,[w9t,mlt])))}function ZZt(){ZZt=X,k2e=Qr((x$(),ut(ot(H9t,1),oe,420,0,[Nlt,q9t])))}function JZt(){JZt=X,jme=Qr((Yf(),ut(ot(Rme,1),oe,520,0,[Uy,vb])))}function tJt(){tJt=X,pme=Qr((B_(),ut(ot(gme,1),oe,523,0,[NS,OS])))}function eJt(){eJt=X,kme=Qr((gd(),ut(ot(xme,1),oe,516,0,[Rw,Zg])))}function nJt(){nJt=X,Tme=Qr((C1(),ut(ot(Eme,1),oe,515,0,[z2,V1])))}function rJt(){rJt=X,Ume=Qr((qv(),ut(ot(Gme,1),oe,455,0,[wb,n5])))}function iJt(){iJt=X,lye=Qr((v$(),ut(ot(cCt,1),oe,425,0,[Oht,oCt])))}function sJt(){sJt=X,pye=Qr((iz(),ut(ot(uCt,1),oe,495,0,[TG,xE])))}function aJt(){aJt=X,uye=Qr((d$(),ut(ot(aCt,1),oe,480,0,[Iht,sCt])))}function oJt(){oJt=X,wye=Qr((N$(),ut(ot(hCt,1),oe,426,0,[lCt,Bht])))}function cJt(){cJt=X,_3e=Qr((ND(),ut(ot(gSt,1),oe,429,0,[OG,dSt])))}function uJt(){uJt=X,o3e=Qr((hD(),ut(ot(UCt,1),oe,430,0,[Uht,DG])))}function B_(){B_=X,NS=new Obt("UPPER",0),OS=new Obt("LOWER",1)}function usn(t,e){var n;n=new w6,e2(n,"x",e.a),e2(n,"y",e.b),F6(t,n)}function lsn(t,e){var n;n=new w6,e2(n,"x",e.a),e2(n,"y",e.b),F6(t,n)}function hsn(t,e){var n,r;r=!1;do n=Qne(t,e),r=r|n;while(n);return r}function nmt(t,e){var n,r;for(n=e,r=0;n>0;)r+=t.a[n],n-=n&-n;return r}function lJt(t,e){var n;for(n=e;n;)Fm(t,-n.i,-n.j),n=hs(n);return t}function _a(t,e){var n,r;for(In(e),r=t.Kc();r.Ob();)n=r.Pb(),e.td(n)}function hJt(t,e){var n;return n=e.cd(),new Cv(n,t.e.pc(n,u(e.dd(),14)))}function ks(t,e,n,r){var s;s=new Bt,s.c=e,s.b=n,s.a=r,r.b=n.a=s,++t.b}function lh(t,e,n){var r;return r=(Sn(e,t.c.length),t.c[e]),t.c[e]=n,r}function fsn(t,e,n){return u(e==null?lu(t.f,null,n):nw(t.g,e,n),281)}function Irt(t){return t.c&&t.d?jwt(t.c)+"->"+jwt(t.d):"e_"+Dv(t)}function C8(t,e){return(p2(t),jT(new kn(t,new Cmt(e,t.a)))).sd(Q7)}function dsn(){return Ya(),ut(ot(kEt,1),oe,356,0,[Ld,fb,fu,Gc,jo])}function gsn(){return be(),ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn])}function psn(t){return vR(),function(){return Cin(t,this,arguments)}}function bsn(){return Date.now?Date.now():new Date().getTime()}function Wa(t){return!t.c||!t.d?!1:!!t.c.i&&t.c.i==t.d.i}function fJt(t){if(!t.c.Sb())throw nt(new vc);return t.a=!0,t.c.Ub()}function cD(t){t.i=0,yM(t.b,null),yM(t.c,null),t.a=null,t.e=null,++t.g}function rmt(t){EYe.call(this,t==null?Mu:Wo(t),_t(t,78)?u(t,78):null)}function dJt(t){Rhe(),Bzt(this),this.a=new cs,Myt(this,t),ai(this.a,t)}function gJt(){Qet(this),this.b=new Re(bs,bs),this.a=new Re(Ns,Ns)}function pJt(t,e){this.c=0,this.b=e,HGt.call(this,t,17493),this.a=this.c}function Ort(t){_$(),!z1&&(this.c=t,this.e=!0,this.a=new le)}function _$(){_$=X,z1=!0,Nge=!1,Pge=!1,Bge=!1,Fge=!1}function imt(t,e){return _t(e,149)?un(t.c,u(e,149).c):!1}function smt(t,e){var n;return n=0,t&&(n+=t.f.a/2),e&&(n+=e.f.a/2),n}function Nrt(t,e){var n;return n=u(Wv(t.d,e),23),n||u(Wv(t.e,e),23)}function bJt(t){this.b=t,nr.call(this,t),this.a=u(Mn(this.b.a,4),126)}function vJt(t){this.b=t,L6.call(this,t),this.a=u(Mn(this.b.a,4),126)}function hl(t){return t.t||(t.t=new Szt(t),J_(new $qt(t),0,t.t)),t.t}function vsn(){return fo(),ut(ot(WS,1),oe,103,0,[c0,_f,Hh,Q0,Z0])}function wsn(){return u4(),ut(ot(QS,1),oe,249,0,[xb,JO,kAt,XS,EAt])}function msn(){return t1(),ut(ot(ep,1),oe,175,0,[qn,ua,Id,q2,tp])}function ysn(){return iI(),ut(ot(XCt,1),oe,316,0,[WCt,Wht,YCt,Kht,KCt])}function xsn(){return aC(),ut(ot(C_t,1),oe,315,0,[__t,fht,dht,AS,LS])}function ksn(){return m2(),ut(ot(_9t,1),oe,335,0,[xlt,T9t,klt,pS,gS])}function Esn(){return w7(),ut(ot(e3e,1),oe,355,0,[r5,Bx,qS,zS,HS])}function Tsn(){return p4(),ut(ot(Zbe,1),oe,363,0,[LV,DV,IV,MV,AV])}function _sn(){return ph(),ut(ot(nTt,1),oe,163,0,[_O,yS,gb,xS,Fy])}function S8(){S8=X;var t,e;aU=(Zk(),e=new lR,e),oU=(t=new Ktt,t)}function wJt(t){var e;return t.c||(e=t.r,_t(e,88)&&(t.c=u(e,26))),t.c}function Csn(t){return t.e=3,t.d=t.Yb(),t.e!=2?(t.e=0,!0):!1}function Prt(t){var e,n,r;return e=t&vl,n=t>>22&vl,r=t<0?W0:0,cu(e,n,r)}function Ssn(t){var e,n,r,s;for(n=t,r=0,s=n.length;r0?bie(t,e):Rce(t,-e)}function amt(t,e){return e==0||t.e==0?t:e>0?Rce(t,e):bie(t,-e)}function Ir(t){if(Vr(t))return t.c=t.a,t.a.Pb();throw nt(new vc)}function yJt(t){var e,n;return e=t.c.i,n=t.d.i,e.k==(Gn(),Is)&&n.k==Is}function Frt(t){var e;return e=new zv,Bo(e,t),ee(e,(xe(),Oo),null),e}function Brt(t,e,n){var r;return r=t.Yg(e),r>=0?t._g(r,n,!0):lw(t,e,n)}function omt(t,e,n,r){var s;for(s=0;se)throw nt(new Co(H4t(t,e,"index")));return t}function Rrt(t,e,n,r){var s;return s=Nt(Sr,Jr,25,e,15,1),$dn(s,t,e,n,r),s}function Lsn(t,e){var n;n=t.q.getHours()+(e/60|0),t.q.setMinutes(e),yC(t,n)}function Msn(t,e){return b.Math.min(Gp(e.a,t.d.d.c),Gp(e.b,t.d.d.c))}function G6(t,e){return ha(e)?e==null?a5t(t.f,null):One(t.g,e):a5t(t.f,e)}function M1(t){this.c=t,this.a=new S(this.c.a),this.b=new S(this.c.b)}function C$(){this.e=new le,this.c=new le,this.d=new le,this.b=new le}function _Jt(){this.g=new _pt,this.b=new _pt,this.a=new le,this.k=new le}function CJt(t,e,n){this.a=t,this.c=e,this.d=n,ue(e.e,this),ue(n.b,this)}function SJt(t,e){qGt.call(this,e.rd(),e.qd()&-6),In(t),this.a=t,this.b=e}function AJt(t,e){HGt.call(this,e.rd(),e.qd()&-6),In(t),this.a=t,this.b=e}function gmt(t,e){Uet.call(this,e.rd(),e.qd()&-6),In(t),this.a=t,this.b=e}function S$(t,e,n){this.a=t,this.b=e,this.c=n,ue(t.t,this),ue(e.i,this)}function A$(){this.b=new cs,this.a=new cs,this.b=new cs,this.a=new cs}function L$(){L$=X,VS=new ts("org.eclipse.elk.labels.labelManager")}function LJt(){LJt=X,d9t=new Hs("separateLayerConnections",(dz(),clt))}function Yf(){Yf=X,Uy=new Fbt("REGULAR",0),vb=new Fbt("CRITICAL",1)}function lD(){lD=X,wht=new Ibt("STACKED",0),IO=new Ibt("SEQUENCED",1)}function hD(){hD=X,Uht=new qbt("FIXED",0),DG=new qbt("CENTER_NODE",1)}function Dsn(t,e){var n;return n=P3n(t,e),t.b=new rz(n.c.length),Wyn(t,n)}function Isn(t,e,n){var r;return++t.e,--t.f,r=u(t.d[e].$c(n),133),r.dd()}function MJt(t){var e;return t.a||(e=t.r,_t(e,148)&&(t.a=u(e,148))),t.a}function pmt(t){if(t.a){if(t.e)return pmt(t.e)}else return t;return null}function Osn(t,e){return t.pe.p?-1:0}function M$(t,e){return In(e),t.c=0,"Initial capacity must not be negative")}function OJt(){OJt=X,Yge=Qr((Zf(),ut(ot(My,1),oe,232,0,[fc,iu,dc])))}function NJt(){NJt=X,Qge=Qr((rl(),ut(ot(Xge,1),oe,461,0,[Ad,lb,kf])))}function PJt(){PJt=X,Jge=Qr((Tu(),ut(ot(Zge,1),oe,462,0,[s1,hb,Ef])))}function FJt(){FJt=X,Rge=Qr((N1(),ut(ot(wl,1),oe,132,0,[S7t,Yl,Ly])))}function BJt(){BJt=X,gbe=Qr((j_(),ut(ot(xEt,1),oe,379,0,[Yut,Kut,Xut])))}function RJt(){RJt=X,Lbe=Qr((ew(),ut(ot(_Et,1),oe,423,0,[z4,TEt,elt])))}function jJt(){jJt=X,c2e=Qr((K6(),ut(ot(x9t,1),oe,314,0,[Cx,wO,y9t])))}function $Jt(){$Jt=X,u2e=Qr((X$(),ut(ot(E9t,1),oe,337,0,[k9t,OV,ylt])))}function zJt(){zJt=X,d2e=Qr((h2(),ut(ot(f2e,1),oe,450,0,[Elt,oE,G4])))}function qJt(){qJt=X,i2e=Qr((Jv(),ut(ot(llt,1),oe,361,0,[Aw,db,Sw])))}function HJt(){HJt=X,x2e=Qr((B0(),ut(ot(y2e,1),oe,303,0,[yO,W4,Sx])))}function VJt(){VJt=X,m2e=Qr((G8(),ut(ot(Olt,1),oe,292,0,[Dlt,Ilt,mO])))}function GJt(){GJt=X,jwe=Qr((Y_(),ut(ot(T_t,1),oe,378,0,[uht,E_t,uG])))}function UJt(){UJt=X,Wwe=Qr((uz(),ut(ot(B_t,1),oe,375,0,[P_t,vht,F_t])))}function WJt(){WJt=X,Hwe=Qr((j0(),ut(ot(O_t,1),oe,339,0,[bb,I_t,ght])))}function KJt(){KJt=X,Uwe=Qr((ho(),ut(ot(Gwe,1),oe,452,0,[MS,al,su])))}function YJt(){YJt=X,Qwe=Qr((gz(),ut(ot(V_t,1),oe,377,0,[xht,mE,Gy])))}function XJt(){XJt=X,Ywe=Qr((Z8(),ut(ot($_t,1),oe,336,0,[mht,j_t,DS])))}function QJt(){QJt=X,Xwe=Qr((oz(),ut(ot(H_t,1),oe,338,0,[q_t,yht,z_t])))}function ZJt(){ZJt=X,lme=Qr((Zv(),ut(ot(ume,1),oe,454,0,[OO,IS,dG])))}function JJt(){JJt=X,vye=Qr((_z(),ut(ot(bye,1),oe,442,0,[Fht,Nht,Pht])))}function tte(){tte=X,mye=Qr((RD(),ut(ot(gCt,1),oe,380,0,[_G,fCt,dCt])))}function ete(){ete=X,Fye=Qr((Tz(),ut(ot(ICt,1),oe,381,0,[DCt,qht,MCt])))}function nte(){nte=X,Pye=Qr((cz(),ut(ot(ACt,1),oe,293,0,[zht,SCt,CCt])))}function rte(){rte=X,r3e=Qr((VD(),ut(ot(Hht,1),oe,437,0,[AG,LG,MG])))}function ite(){ite=X,a4e=Qr(($0(),ut(ot(xAt,1),oe,334,0,[HG,np,YS])))}function ste(){ste=X,n4e=Qr((D1(),ut(ot(uAt,1),oe,272,0,[TE,Yy,_E])))}function $sn(){return va(),ut(ot(TAt,1),oe,98,0,[kb,U1,SE,U2,h0,Kc])}function s2(t,e){return!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),Yit(t.o,e)}function zsn(t){return!t.g&&(t.g=new kk),!t.g.d&&(t.g.d=new Tzt(t)),t.g.d}function qsn(t){return!t.g&&(t.g=new kk),!t.g.a&&(t.g.a=new _zt(t)),t.g.a}function Hsn(t){return!t.g&&(t.g=new kk),!t.g.b&&(t.g.b=new Ezt(t)),t.g.b}function fD(t){return!t.g&&(t.g=new kk),!t.g.c&&(t.g.c=new Czt(t)),t.g.c}function Vsn(t,e,n){var r,s;for(s=new V8(e,t),r=0;rn||e=0?t._g(n,!0,!0):lw(t,e,!0)}function oan(t,e){return js(Zt(ve(K(t,(ae(),Iw)))),Zt(ve(K(e,Iw))))}function fte(){fte=X,fye=aw(aw(OR(new Zs,(o7(),PS)),(fC(),wG)),Tht)}function can(t,e,n){var r;return r=nre(t,e,n),t.b=new rz(r.c.length),D5t(t,r)}function uan(t){if(t.b<=0)throw nt(new vc);return--t.b,t.a-=t.c.c,de(t.a)}function lan(t){var e;if(!t.a)throw nt(new bXt);return e=t.a,t.a=hs(t.a),e}function han(t){for(;!t.a;)if(!tKt(t.c,new je(t)))return!1;return!0}function W6(t){var e;return Dr(t),_t(t,198)?(e=u(t,198),e):new ott(t)}function fan(t){O$(),u(t.We((di(),Ky)),174).Fc((il(),tN)),t.Ye(dft,null)}function O$(){O$=X,A3e=new yZ,M3e=new xZ,L3e=Xcn((di(),dft),A3e,mb,M3e)}function N$(){N$=X,lCt=new zbt("LEAF_NUMBER",0),Bht=new zbt("NODE_SIZE",1)}function dan(t,e,n){t.a=e,t.c=n,t.b.a.$b(),Mh(t.d),t.e.a.c=Nt(Qn,Me,1,0,5,1)}function Grt(t){t.a=Nt(Sr,Jr,25,t.b+1,15,1),t.c=Nt(Sr,Jr,25,t.b,15,1),t.d=0}function gan(t,e){t.a.ue(e.d,t.b)>0&&(ue(t.c,new Mvt(e.c,e.d,t.d)),t.b=e.d)}function _mt(t,e){if(t.g==null||e>=t.i)throw nt(new Wet(e,t.i));return t.g[e]}function dte(t,e,n){if(Y8(t,n),n!=null&&!t.wj(n))throw nt(new Gtt);return n}function gte(t){var e;if(t.Ek())for(e=t.i-1;e>=0;--e)At(t,e);return Xwt(t)}function pan(t){var e,n;if(!t.b)return null;for(n=t.b;e=n.a[0];)n=e;return n}function ban(t,e){var n,r;return FZt(e),n=(r=t.slice(0,e),Smt(r,t)),n.length=e,n}function M8(t,e,n,r){var s;r=(Q3(),r||b7t),s=t.slice(e,n),V4t(s,t,e,n,-e,r)}function hh(t,e,n,r,s){return e<0?lw(t,n,r):u(n,66).Nj().Pj(t,t.yh(),e,r,s)}function van(t){return _t(t,172)?""+u(t,172).a:t==null?null:Wo(t)}function wan(t){return _t(t,172)?""+u(t,172).a:t==null?null:Wo(t)}function pte(t,e){if(e.a)throw nt(new Zo(pfe));Vs(t.a,e),e.a=t,!t.j&&(t.j=e)}function Cmt(t,e){Uet.call(this,e.rd(),e.qd()&-16449),In(t),this.a=t,this.c=e}function bte(t,e){var n,r;return r=e/t.c.Hd().gc()|0,n=e%t.c.Hd().gc(),U6(t,r,n)}function rl(){rl=X,Ad=new met(fx,0),lb=new met(I7,1),kf=new met(dx,2)}function P$(){P$=X,Mut=new BR("All",0),E7t=new hUt,T7t=new EUt,_7t=new fUt}function vte(){vte=X,Ige=Qr((P$(),ut(ot(KH,1),oe,297,0,[Mut,E7t,T7t,_7t])))}function wte(){wte=X,Ebe=Qr((U8(),ut(ot(kbe,1),oe,405,0,[Cw,Iy,Dy,$4])))}function mte(){mte=X,Tpe=Qr((tw(),ut(ot(Epe,1),oe,406,0,[aO,sO,Rut,jut])))}function yte(){yte=X,Cpe=Qr((ex(),ut(ot(_pe,1),oe,323,0,[cO,oO,uO,lO])))}function xte(){xte=X,Lpe=Qr((sC(),ut(ot(Ape,1),oe,394,0,[hO,JH,tV,fO])))}function kte(){kte=X,Wme=Qr((o7(),ut(ot(Y_t,1),oe,393,0,[vG,PS,PO,FS])))}function Ete(){Ete=X,qbe=Qr((dz(),ut(ot(zbe,1),oe,360,0,[clt,CV,SV,vO])))}function Tte(){Tte=X,Nye=Qr((Vz(),ut(ot(_Ct,1),oe,340,0,[$ht,ECt,TCt,kCt])))}function _te(){_te=X,Qbe=Qr((O1(),ut(ot(Xbe,1),oe,411,0,[_x,nE,rE,ult])))}function Cte(){Cte=X,$we=Qr((sy(),ut(ot(hht,1),oe,197,0,[lG,lht,e5,t5])))}function Ste(){Ste=X,E4e=Qr((Ol(),ut(ot(k4e,1),oe,396,0,[th,IAt,DAt,OAt])))}function Ate(){Ate=X,c4e=Qr((Vl(),ut(ot(o4e,1),oe,285,0,[ZO,u0,yb,QO])))}function Lte(){Lte=X,r4e=Qr((q0(),ut(ot(vft,1),oe,218,0,[bft,XO,CE,qx])))}function Mte(){Mte=X,y4e=Qr((Az(),ut(ot(MAt,1),oe,311,0,[yft,SAt,LAt,AAt])))}function Dte(){Dte=X,w4e=Qr((Nl(),ut(ot(tA,1),oe,374,0,[nN,W2,eN,Xy])))}function Ite(){Ite=X,yq(),gLt=bs,_5e=Ns,pLt=new O3(bs),C5e=new O3(Ns)}function bD(){bD=X,L9t=new Lbt(K0,0),FV=new Lbt("IMPROVE_STRAIGHTNESS",1)}function man(t,e){return f8(),ue(t,new ya(e,de(e.e.c.length+e.g.c.length)))}function yan(t,e){return f8(),ue(t,new ya(e,de(e.e.c.length+e.g.c.length)))}function Smt(t,e){return xD(e)!=10&&ut(dl(e),e.hm,e.__elementTypeId$,xD(e),t),t}function Eu(t,e){var n;return n=Go(t,e,0),n==-1?!1:(Ig(t,n),!0)}function Ote(t,e){var n;return n=u(G6(t.e,e),387),n?(Ovt(n),n.e):null}function D8(t){var e;return Vo(t)&&(e=0-t,!isNaN(e))?e:Wp(W8(t))}function Go(t,e,n){for(;n=0?jz(t,n,!0,!0):lw(t,e,!0)}function Imt(t,e){qT();var n,r;return n=q6(t),r=q6(e),!!n&&!!r&&!Yie(n.k,r.k)}function Ean(t,e){Cu(t,e==null||Ej((In(e),e))||isNaN((In(e),e))?0:(In(e),e))}function Tan(t,e){Su(t,e==null||Ej((In(e),e))||isNaN((In(e),e))?0:(In(e),e))}function _an(t,e){Qv(t,e==null||Ej((In(e),e))||isNaN((In(e),e))?0:(In(e),e))}function Can(t,e){Xv(t,e==null||Ej((In(e),e))||isNaN((In(e),e))?0:(In(e),e))}function Rte(t){(this.q?this.q:(pn(),pn(),a0)).Ac(t.q?t.q:(pn(),pn(),a0))}function San(t,e){return _t(e,99)&&u(e,18).Bb&Qa?new Ket(e,t):new V8(e,t)}function Aan(t,e){return _t(e,99)&&u(e,18).Bb&Qa?new Ket(e,t):new V8(e,t)}function jte(t,e){Z7t=new ma,Spe=e,cS=t,u(cS.b,65),wmt(cS,Z7t,null),Ile(cS)}function Xrt(t,e,n){var r;return r=t.g[e],f_(t,e,t.oi(e,n)),t.gi(e,n,r),t.ci(),r}function j$(t,e){var n;return n=t.Xc(e),n>=0?(t.$c(n),!0):!1}function Qrt(t){var e;return t.d!=t.r&&(e=Oh(t),t.e=!!e&&e.Cj()==y0e,t.d=e),t.e}function Zrt(t,e){var n;for(Dr(t),Dr(e),n=!1;e.Ob();)n=n|t.Fc(e.Pb());return n}function Wv(t,e){var n;return n=u(tr(t.e,e),387),n?(DUt(t,n),n.e):null}function $te(t){var e,n;return e=t/60|0,n=t%60,n==0?""+e:""+e+":"+(""+n)}function ec(t,e){var n,r;return p2(t),r=new gmt(e,t.a),n=new rKt(r),new kn(t,n)}function Xm(t,e){var n=t.a[e],r=(vit(),_ut)[typeof n];return r?r(n):Fyt(typeof n)}function Lan(t){switch(t.g){case 0:return Ti;case 1:return-1;default:return 0}}function Man(t){return J3t(t,(I8(),Q8t))<0?-UXe(W8(t)):t.l+t.m*hx+t.h*E2}function xD(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function Jrt(t){var e;return e=t.b.c.length==0?null:Pe(t.b,0),e!=null&&uit(t,0),e}function zte(t,e){for(;e[0]=0;)++e[0]}function kD(t,e){this.e=e,this.a=Nne(t),this.a<54?this.f=Gv(t):this.c=KD(t)}function qte(t,e,n,r){yi(),vv.call(this,26),this.c=t,this.a=e,this.d=n,this.b=r}function Xd(t,e,n){var r,s;for(r=10,s=0;st.a[r]&&(r=n);return r}function Fan(t,e){var n;return n=rw(t.e.c,e.e.c),n==0?js(t.e.d,e.e.d):n}function t4(t,e){return e.e==0||t.e==0?Y7:(g7(),tat(t,e))}function Ban(t,e){if(!t)throw nt(new Pn($2n("Enum constant undefined: %s",e)))}function $_(){$_=X,Cbe=new wg,Sbe=new cv,Tbe=new JK,_be=new qb,Abe=new tY}function $$(){$$=X,I7t=new Ebt("BY_SIZE",0),Nut=new Ebt("BY_SIZE_AND_SHAPE",1)}function z$(){z$=X,Gut=new Tbt("EADES",0),rV=new Tbt("FRUCHTERMAN_REINGOLD",1)}function TD(){TD=X,NV=new Abt("READING_DIRECTION",0),C9t=new Abt("ROTATION",1)}function Vte(){Vte=X,l2e=Qr((m2(),ut(ot(_9t,1),oe,335,0,[xlt,T9t,klt,pS,gS])))}function Gte(){Gte=X,zwe=Qr((aC(),ut(ot(C_t,1),oe,315,0,[__t,fht,dht,AS,LS])))}function Ute(){Ute=X,Jbe=Qr((p4(),ut(ot(Zbe,1),oe,363,0,[LV,DV,IV,MV,AV])))}function Wte(){Wte=X,E2e=Qr((ph(),ut(ot(nTt,1),oe,163,0,[_O,yS,gb,xS,Fy])))}function Kte(){Kte=X,c3e=Qr((iI(),ut(ot(XCt,1),oe,316,0,[WCt,Wht,YCt,Kht,KCt])))}function Yte(){Yte=X,D3e=Qr((t1(),ut(ot(ep,1),oe,175,0,[qn,ua,Id,q2,tp])))}function Xte(){Xte=X,n3e=Qr((w7(),ut(ot(e3e,1),oe,355,0,[r5,Bx,qS,zS,HS])))}function Qte(){Qte=X,wbe=Qr((Ya(),ut(ot(kEt,1),oe,356,0,[Ld,fb,fu,Gc,jo])))}function Zte(){Zte=X,e4e=Qr((fo(),ut(ot(WS,1),oe,103,0,[c0,_f,Hh,Q0,Z0])))}function Jte(){Jte=X,l4e=Qr((u4(),ut(ot(QS,1),oe,249,0,[xb,JO,kAt,XS,EAt])))}function tee(){tee=X,d4e=Qr((be(),ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn])))}function tit(t,e){var n;return n=u(tr(t.a,e),134),n||(n=new x3,Ai(t.a,e,n)),n}function eee(t){var e;return e=u(K(t,(ae(),Lw)),305),e?e.a==t:!1}function nee(t){var e;return e=u(K(t,(ae(),Lw)),305),e?e.i==t:!1}function ree(t,e){return In(e),Jvt(t),t.d.Ob()?(e.td(t.d.Pb()),!0):!1}function q$(t){return _c(t,Ti)>0?Ti:_c(t,Oa)<0?Oa:Mr(t)}function Qm(t){return t<3?(ql(t,Qhe),t+1):t=0&&e=-.01&&t.a<=R1&&(t.a=0),t.b>=-.01&&t.b<=R1&&(t.b=0),t}function see(t,e){return e==(mnt(),mnt(),Lge)?t.toLocaleLowerCase():t.toLowerCase()}function Nmt(t){return(t.i&2?"interface ":t.i&1?"":"class ")+(L0(t),t.o)}function Do(t){var e,n;n=(e=new Ytt,e),Or((!t.q&&(t.q=new he(Yh,t,11,10)),t.q),n)}function Ran(t,e){var n;return n=e>0?e-1:e,eHt(ZKe(Mee(Ivt(new Wk,n),t.n),t.j),t.k)}function jan(t,e,n,r){var s;t.j=-1,r5t(t,B4t(t,e,n),(so(),s=u(e,66).Mj(),s.Ok(r)))}function aee(t){this.g=t,this.f=new le,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function oee(t){this.b=new le,this.a=new le,this.c=new le,this.d=new le,this.e=t}function cee(t,e){this.a=new Ar,this.e=new Ar,this.b=(Y_(),uG),this.c=t,this.b=e}function uee(t,e,n){xj.call(this),Pmt(this),this.a=t,this.c=n,this.b=e.d,this.f=e.e}function lee(t){this.d=t,this.c=t.c.vc().Kc(),this.b=null,this.a=null,this.e=(dR(),xut)}function Kv(t){if(t<0)throw nt(new Pn("Illegal Capacity: "+t));this.g=this.ri(t)}function $an(t,e){if(0>t||t>e)throw nt(new Kpt("fromIndex: 0, toIndex: "+t+F6t+e))}function zan(t){var e;if(t.a==t.b.a)throw nt(new vc);return e=t.a,t.c=e,t.a=t.a.e,e}function H$(t){var e;Pm(!!t.c),e=t.c.a,fh(t.d,t.c),t.b==t.c?t.b=e:--t.a,t.c=null}function V$(t,e){var n;return p2(t),n=new IXt(t,t.a.rd(),t.a.qd()|4,e),new kn(t,n)}function qan(t,e){var n,r;return n=u(ny(t.d,e),14),n?(r=e,t.e.pc(r,n)):null}function G$(t,e){var n,r;for(r=t.Kc();r.Ob();)n=u(r.Pb(),70),ee(n,(ae(),Dx),e)}function Han(t){var e;return e=Zt(ve(K(t,(xe(),Xg)))),e<0&&(e=0,ee(t,Xg,e)),e}function Van(t,e,n){var r;r=b.Math.max(0,t.b/2-.5),cC(n,r,1),ue(e,new FVt(n,r))}function Gan(t,e,n){var r;return r=t.a.e[u(e.a,10).p]-t.a.e[u(n.a,10).p],Cs(KM(r))}function hee(t,e,n,r,s,o){var h;h=Frt(r),Ba(h,s),pa(h,o),cn(t.a,r,new Tj(h,e,n.f))}function fee(t,e){var n;if(n=gI(t.Tg(),e),!n)throw nt(new Pn(cb+e+Rct));return n}function Zm(t,e){var n;for(n=t;hs(n);)if(n=hs(n),n==e)return!0;return!1}function Uan(t,e){var n,r,s;for(r=e.a.cd(),n=u(e.a.dd(),14).gc(),s=0;s0&&(t.a/=e,t.b/=e),t}function zl(t){var e;return t.w?t.w:(e=ein(t),e&&!e.kh()&&(t.w=e),e)}function ton(t){var e;return t==null?null:(e=u(t,190),e0n(e,e.length))}function At(t,e){if(t.g==null||e>=t.i)throw nt(new Wet(e,t.i));return t.li(e,t.g[e])}function eon(t){var e,n;for(e=t.a.d.j,n=t.c.d.j;e!=n;)wf(t.b,e),e=kz(e);wf(t.b,e)}function non(t){var e;for(e=0;e=14&&e<=16))),t}function bee(t,e,n){var r=function(){return t.apply(r,arguments)};return e.apply(r,n),r}function vee(t,e,n){var r,s;r=e;do s=Zt(t.p[r.p])+n,t.p[r.p]=s,r=t.a[r.p];while(r!=e)}function O8(t,e){var n,r;r=t.a,n=Fun(t,e,null),r!=e&&!t.e&&(n=T7(t,e,n)),n&&n.Fi()}function Fmt(t,e){return E1(),vf(rb),b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)}function Bmt(t,e){return E1(),vf(rb),b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)}function son(t,e){return tb(),mu(t.b.c.length-t.e.c.length,e.b.c.length-e.e.c.length)}function e4(t,e){return rYe(H_(t,e,Mr(Ia(e0,Wd(Mr(Ia(e==null?0:Ji(e),n0)),15)))))}function wee(){wee=X,Obe=Qr((Gn(),ut(ot(rlt,1),oe,267,0,[qs,ca,Is,Uc,Pl,q1])))}function mee(){mee=X,$3e=Qr((cy(),ut(ot(ift,1),oe,291,0,[rft,GO,VO,nft,qO,HO])))}function yee(){yee=X,N3e=Qr((Qd(),ut(ot(mSt,1),oe,248,0,[tft,$O,zO,FG,NG,PG])))}function xee(){xee=X,a2e=Qr((rx(),ut(ot(aE,1),oe,227,0,[sE,dS,iE,Oy,V4,H4])))}function kee(){kee=X,v2e=Qr((f7(),ut(ot(z9t,1),oe,275,0,[bS,B9t,$9t,j9t,R9t,F9t])))}function Eee(){Eee=X,b2e=Qr((nI(),ut(ot(P9t,1),oe,274,0,[BV,I9t,N9t,D9t,O9t,Llt])))}function Tee(){Tee=X,Rwe=Qr((Zz(),ut(ot(k_t,1),oe,313,0,[cht,y_t,oht,m_t,x_t,cG])))}function _ee(){_ee=X,g2e=Qr((nq(),ut(ot(A9t,1),oe,276,0,[_lt,Tlt,Slt,Clt,Alt,PV])))}function Cee(){Cee=X,Yme=Qr((fC(),ut(ot(Kme,1),oe,327,0,[wG,Tht,Cht,_ht,Sht,Eht])))}function See(){See=X,f4e=Qr((il(),ut(ot(VG,1),oe,273,0,[Eb,tg,tN,JS,ZS,Hx])))}function Aee(){Aee=X,i4e=Qr((tq(),ut(ot(pAt,1),oe,312,0,[wft,fAt,gAt,lAt,dAt,hAt])))}function aon(){return fy(),ut(ot(vo,1),oe,93,0,[Cf,J0,Sf,Lf,l0,Gh,Ql,Af,Vh])}function W$(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,0,n,t.a))}function K$(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,1,n,t.b))}function N8(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,3,n,t.b))}function Xv(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,3,n,t.f))}function Qv(t,e){var n;n=t.g,t.g=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,4,n,t.g))}function Cu(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,5,n,t.i))}function Su(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,6,n,t.j))}function P8(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,1,n,t.j))}function F8(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,4,n,t.c))}function B8(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Km(t,2,n,t.k))}function nit(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Lrt(t,2,n,t.d))}function Pg(t,e){var n;n=t.s,t.s=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Lrt(t,4,n,t.s))}function ty(t,e){var n;n=t.t,t.t=e,t.Db&4&&!(t.Db&1)&&Ci(t,new Lrt(t,5,n,t.t))}function R8(t,e){var n;n=t.F,t.F=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,5,n,e))}function _D(t,e){var n;return n=u(tr((NR(),nU),t),55),n?n.xj(e):Nt(Qn,Me,1,e,5,1)}function R0(t,e){var n,r;return n=e in t.a,n&&(r=I0(t,e).he(),r)?r.a:null}function oon(t,e){var n,r,s;return n=(r=(Tv(),s=new Y9,s),e&&_5t(r,e),r),Umt(n,t),n}function Lee(t,e,n){if(Y8(t,n),!t.Bk()&&n!=null&&!t.wj(n))throw nt(new Gtt);return n}function Mee(t,e){return t.n=e,t.n?(t.f=new le,t.e=new le):(t.f=null,t.e=null),t}function zr(t,e,n,r,s,o){var h;return h=Knt(t,e),Iee(n,h),h.i=s?8:0,h.f=r,h.e=s,h.g=o,h}function Rmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=1,this.c=t,this.a=n}function jmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=2,this.c=t,this.a=n}function $mt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=6,this.c=t,this.a=n}function zmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=7,this.c=t,this.a=n}function qmt(t,e,n,r,s){this.d=e,this.j=r,this.e=s,this.o=-1,this.p=4,this.c=t,this.a=n}function Dee(t,e){var n,r,s,o;for(r=e,s=0,o=r.length;s=0),ohn(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function Hmt(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=jD(t.f)),t.c).e}function vf(t){if(!(t>=0))throw nt(new Pn("tolerance ("+t+") must be >= 0"));return t}function j8(){return Zht||(Zht=new yue,a4(Zht,ut(ot(j4,1),Me,130,0,[new kp]))),Zht}function ho(){ho=X,MS=new Iet(OC,0),al=new Iet("INPUT",1),su=new Iet("OUTPUT",2)}function X$(){X$=X,k9t=new _et("ARD",0),OV=new _et("MSD",1),ylt=new _et("MANUAL",2)}function Zv(){Zv=X,OO=new Bet("BARYCENTER",0),IS=new Bet(i1e,1),dG=new Bet(s1e,2)}function CD(t,e){var n;if(n=t.gc(),e<0||e>n)throw nt(new jm(e,n));return new ovt(t,e)}function Pee(t,e){var n;return _t(e,42)?t.c.Mc(e):(n=Yit(t,e),Dz(t,e),n)}function ko(t,e,n){return g2(t,e),tu(t,n),Pg(t,0),ty(t,1),jg(t,!0),Rg(t,!0),t}function ql(t,e){if(t<0)throw nt(new Pn(e+" cannot be negative but was: "+t));return t}function Fee(t,e){var n,r;for(n=0,r=t.gc();n0?u(Pe(n.a,r-1),10):null}function q_(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,2,n,t.k))}function Z$(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,8,n,t.f))}function J$(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,7,n,t.i))}function Umt(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,8,n,t.a))}function Wmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,0,n,t.b))}function Kmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,0,n,t.b))}function Ymt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,1,n,t.c))}function Xmt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,1,n,t.c))}function iit(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,4,n,t.c))}function Qmt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,1,n,t.d))}function sit(t,e){var n;n=t.D,t.D=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,2,n,t.D))}function ait(t,e){t.r>0&&t.c0&&t.g!=0&&ait(t.i,e/t.r*t.i.d))}function bon(t,e,n){var r;t.b=e,t.a=n,r=(t.a&512)==512?new _qt:new GL,t.c=Ivn(r,t.b,t.a)}function Gee(t,e){return G0(t.e,e)?(so(),Qrt(e)?new Dj(e,t):new IM(e,t)):new BGt(e,t)}function tz(t,e){return nYe(V_(t.a,e,Mr(Ia(e0,Wd(Mr(Ia(e==null?0:Ji(e),n0)),15)))))}function von(t,e,n){return Ym(t,new fe(e),new Nn,new ge(n),ut(ot(wl,1),oe,132,0,[]))}function won(t){var e,n;return 0>t?new ubt:(e=t+1,n=new pJt(e,t),new q2t(null,n))}function mon(t,e){pn();var n;return n=new x6(1),ha(t)?Ao(n,t,e):lu(n.f,t,e),new z(n)}function yon(t,e){var n,r;return n=t.o+t.p,r=e.o+e.p,ne?(e<<=1,e>0?e:AC):e}function oit(t){switch(m2t(t.e!=3),t.e){case 2:return!1;case 0:return!0}return Csn(t)}function Wee(t,e){var n;return _t(e,8)?(n=u(e,8),t.a==n.a&&t.b==n.b):!1}function cit(t,e,n){var r,s,o;return o=e>>5,s=e&31,r=Gs(zm(t.n[n][o],Mr(M0(s,1))),3),r}function kon(t,e){var n,r;for(r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),Yz(t,n.cd(),n.dd())}function Eon(t,e){var n;n=new ma,u(e.b,65),u(e.b,65),u(e.b,65),_u(e.a,new wvt(t,n,e))}function Zmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,21,n,t.b))}function Jmt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,11,n,t.d))}function ez(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,13,n,t.j))}function Kee(t,e,n){var r,s,o;for(o=t.a.length-1,s=t.b,r=0;r>>31;r!=0&&(t[n]=r)}function Oon(t,e){pn();var n,r;for(r=new le,n=0;n0&&(this.g=this.ri(this.i+(this.i/8|0)+1),t.Qc(this.g))}function ps(t,e){Sj.call(this,i5e,t,e),this.b=this,this.a=hu(t.Tg(),wn(this.e.Tg(),this.c))}function G_(t,e){var n,r;for(In(e),r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),t.zc(n.cd(),n.dd())}function Hon(t,e,n){var r;for(r=n.Kc();r.Ob();)if(!k$(t,e,r.Pb()))return!1;return!0}function Von(t,e,n,r,s){var o;return n&&(o=es(e.Tg(),t.c),s=n.gh(e,-1-(o==-1?r:o),null,s)),s}function Gon(t,e,n,r,s){var o;return n&&(o=es(e.Tg(),t.c),s=n.ih(e,-1-(o==-1?r:o),null,s)),s}function dne(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function gne(t){switch(t.g){case 2:return be(),Bn;case 4:return be(),Hn;default:return t}}function pne(t){switch(t.g){case 1:return be(),yr;case 3:return be(),On;default:return t}}function Uon(t){var e,n,r;return t.j==(be(),On)&&(e=Voe(t),n=zu(e,Hn),r=zu(e,Bn),r||r&&n)}function Won(t){var e,n;return e=u(t.e&&t.e(),9),n=u(lwt(e,e.length),9),new oh(e,n,e.length)}function Kon(t,e){mr(e,r1e,1),s3t(gYe(new er((zT(),new nrt(t,!1,!1,new YP))))),or(e)}function SD(t,e){return Fn(),ha(t)?fmt(t,jr(e)):Nm(t)?Bnt(t,ve(e)):Om(t)?Ztn(t,Fe(e)):t.wd(e)}function syt(t,e){e.q=t,t.d=b.Math.max(t.d,e.r),t.b+=e.d+(t.a.c.length==0?0:t.c),ue(t.a,e)}function z8(t,e){var n,r,s,o;return s=t.c,n=t.c+t.b,o=t.d,r=t.d+t.a,e.a>s&&e.ao&&e.b1||t.Ob())return++t.a,t.g=0,e=t.i,t.Ob(),e;throw nt(new vc)}function acn(t){bUt();var e;return CVt(kht,t)||(e=new LQ,e.a=t,Y2t(kht,t,e)),u(xo(kht,t),635)}function Dh(t){var e,n,r,s;return s=t,r=0,s<0&&(s+=E2,r=W0),n=Cs(s/hx),e=Cs(s-n*hx),cu(e,n,r)}function AD(t){var e,n,r;for(r=0,n=new k6(t.a);n.a>22),s=t.h+e.h+(r>>22),cu(n&vl,r&vl,s&W0)}function Pne(t,e){var n,r,s;return n=t.l-e.l,r=t.m-e.m+(n>>22),s=t.h-e.h+(r>>22),cu(n&vl,r&vl,s&W0)}function ID(t){var e;return t<128?(e=(XKt(),e7t)[t],!e&&(e=e7t[t]=new tR(t)),e):new tR(t)}function rs(t){var e;return _t(t,78)?t:(e=t&&t.__java$exception,e||(e=new Tre(t),zzt(e)),e)}function OD(t){if(_t(t,186))return u(t,118);if(t)return null;throw nt(new m6(Mde))}function Fne(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(Si(e,mz(t)))return!0;return!1}function hyt(t){return t.a.Ob()?!0:t.a!=t.d?!1:(t.a=new Gwt(t.e.f),t.a.Ob())}function Rs(t,e){var n,r;return n=e.Pc(),r=n.length,r==0?!1:(Tvt(t.c,t.c.length,n),!0)}function xcn(t,e,n){var r,s;for(s=e.vc().Kc();s.Ob();)r=u(s.Pb(),42),t.yc(r.cd(),r.dd(),n);return t}function Bne(t,e){var n,r;for(r=new S(t.b);r.a=0,"Negative initial capacity"),Cj(e>=0,"Non-positive load factor"),nl(this)}function wit(t,e,n){return t>=128?!1:t<64?a_(Gs(M0(1,t),n),0):a_(Gs(M0(1,t-64),e),0)}function Mcn(t,e){return!t||!e||t==e?!1:rw(t.b.c,e.b.c+e.b.b)<0&&rw(e.b.c,t.b.c+t.b.b)<0}function Yne(t){var e,n,r;return n=t.n,r=t.o,e=t.d,new ch(n.a-e.b,n.b-e.d,r.a+(e.b+e.c),r.b+(e.d+e.a))}function Dcn(t){var e,n,r,s;for(n=t.a,r=0,s=n.length;rr)throw nt(new jm(e,r));return t.hi()&&(n=fQt(t,n)),t.Vh(e,n)}function FD(t,e,n){return n==null?(!t.q&&(t.q=new Ar),G6(t.q,e)):(!t.q&&(t.q=new Ar),Ai(t.q,e,n)),t}function ee(t,e,n){return n==null?(!t.q&&(t.q=new Ar),G6(t.q,e)):(!t.q&&(t.q=new Ar),Ai(t.q,e,n)),t}function Xne(t){var e,n;return n=new C$,Bo(n,t),ee(n,(Up(),Tx),t),e=new Ar,Pmn(t,n,e),o4n(t,n,e),n}function Ncn(t){x4();var e,n,r;for(n=Nt(na,re,8,2,0,1),r=0,e=0;e<2;e++)r+=.5,n[e]=pfn(r,t);return n}function Qne(t,e){var n,r,s,o;for(n=!1,r=t.a[e].length,o=0;o>=1);return e}function Jne(t){var e,n;return n=lI(t.h),n==32?(e=lI(t.m),e==32?lI(t.l)+32:e+20-10):n-12}function K_(t){var e;return e=t.a[t.b],e==null?null:(ls(t.a,t.b,null),t.b=t.b+1&t.a.length-1,e)}function tre(t){var e,n;return e=t.t-t.k[t.o.p]*t.d+t.j[t.o.p]>t.f,n=t.u+t.e[t.o.p]*t.d>t.f*t.s*t.d,e||n}function pz(t,e,n){var r,s;return r=new qrt(e,n),s=new Ve,t.b=Gce(t,t.b,r,s),s.b||++t.c,t.b.b=!1,s.d}function ere(t,e,n){var r,s,o,h;for(h=Q_(e,n),o=0,s=h.Kc();s.Ob();)r=u(s.Pb(),11),Ai(t.c,r,de(o++))}function Kp(t){var e,n;for(n=new S(t.a.b);n.an&&(n=t[e]);return n}function nre(t,e,n){var r;return r=new le,A5t(t,e,r,(be(),Hn),!0,!1),A5t(t,n,r,Bn,!1,!1),r}function yit(t,e,n){var r,s,o,h;return o=null,h=e,s=Uv(h,"labels"),r=new kGt(t,n),o=(Jpn(r.a,r.b,s),s),o}function Fcn(t,e,n,r){var s;return s=p5t(t,e,n,r),!s&&(s=Bun(t,n,r),s&&!T4(t,e,s))?null:s}function Bcn(t,e,n,r){var s;return s=b5t(t,e,n,r),!s&&(s=Bit(t,n,r),s&&!T4(t,e,s))?null:s}function rre(t,e){var n;for(n=0;n1||e>=0&&t.b<3)}function BD(t){var e,n,r;for(e=new ju,r=si(t,0);r.b!=r.d.c;)n=u(ii(r),8),u8(e,0,new So(n));return e}function f2(t){var e,n;for(n=new S(t.a.b);n.ar?1:0}function Myt(t,e){return Sce(t,e)?(cn(t.b,u(K(e,(ae(),Ny)),21),e),ai(t.a,e),!0):!1}function Ycn(t){var e,n;e=u(K(t,(ae(),sl)),10),e&&(n=e.c,Eu(n.a,e),n.a.c.length==0&&Eu($a(e).b,n))}function ure(t){return z1?Nt(Oge,hfe,572,0,0,1):u(P1(t.a,Nt(Oge,hfe,572,t.a.c.length,0,1)),842)}function Xcn(t,e,n,r){return Qj(),new tet(ut(ot(I2,1),Iq,42,0,[(dst(t,e),new Cv(t,e)),(dst(n,r),new Cv(n,r))]))}function s4(t,e,n){var r,s;return s=(r=new Ytt,r),ko(s,e,n),Or((!t.q&&(t.q=new he(Yh,t,11,10)),t.q),s),s}function Tit(t){var e,n,r,s;for(s=kYe(O4e,t),n=s.length,r=Nt(Le,re,2,n,6,1),e=0;e=t.b.c.length||(Dyt(t,2*e+1),n=2*e+2,n=0&&t[r]===e[r];r--);return r<0?0:bet(Gs(t[r],po),Gs(e[r],po))?-1:1}function Qcn(t,e){var n,r;for(r=si(t,0);r.b!=r.d.c;)n=u(ii(r),214),n.e.length>0&&(e.td(n),n.i&&Gun(n))}function Cit(t,e){var n,r;return r=u(Mn(t.a,4),126),n=Nt(Cft,eut,415,e,0,1),r!=null&&Pc(r,0,n,0,r.length),n}function hre(t,e){var n;return n=new rat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,e),t.e!=null||(n.c=t),n}function Zcn(t,e){var n,r;for(r=t.Zb().Cc().Kc();r.Ob();)if(n=u(r.Pb(),14),n.Hc(e))return!0;return!1}function Sit(t,e,n,r,s){var o,h;for(h=n;h<=s;h++)for(o=e;o<=r;o++)if(h4(t,o,h))return!0;return!1}function fre(t,e,n){var r,s,o,h;for(In(n),h=!1,o=t.Zc(e),s=n.Kc();s.Ob();)r=s.Pb(),o.Rb(r),h=!0;return h}function Jcn(t,e){var n;return t===e?!0:_t(e,83)?(n=u(e,83),O4t(Pv(t),n.vc())):!1}function dre(t,e,n){var r,s;for(s=n.Kc();s.Ob();)if(r=u(s.Pb(),42),t.re(e,r.dd()))return!0;return!1}function gre(t,e,n){return t.d[e.p][n.p]||(Yhn(t,e,n),t.d[e.p][n.p]=!0,t.d[n.p][e.p]=!0),t.a[e.p][n.p]}function Y8(t,e){if(!t.ai()&&e==null)throw nt(new Pn("The 'no null' constraint is violated"));return e}function X8(t,e){t.D==null&&t.B!=null&&(t.D=t.B,t.B=null),sit(t,e==null?null:(In(e),e)),t.C&&t.yk(null)}function tun(t,e){var n;return!t||t==e||!ea(e,(ae(),Dw))?!1:(n=u(K(e,(ae(),Dw)),10),n!=t)}function Ait(t){switch(t.i){case 2:return!0;case 1:return!1;case-1:++t.c;default:return t.pl()}}function pre(t){switch(t.i){case-2:return!0;case-1:return!1;case 1:--t.c;default:return t.ql()}}function bre(t){sQt.call(this,"The given string does not match the expected format for individual spacings.",t)}function Ol(){Ol=X,th=new ZR("ELK",0),IAt=new ZR("JSON",1),DAt=new ZR("DOT",2),OAt=new ZR("SVG",3)}function RD(){RD=X,_G=new jet(K0,0),fCt=new jet("RADIAL_COMPACTION",1),dCt=new jet("WEDGE_COMPACTION",2)}function N1(){N1=X,S7t=new vet("CONCURRENT",0),Yl=new vet("IDENTITY_FINISH",1),Ly=new vet("UNORDERED",2)}function Lit(){Lit=X,nEt=(AR(),$ut),eEt=new vn(Q6t,nEt),Dpe=new ts(Z6t),Ipe=new ts(J6t),Ope=new ts(txt)}function Q8(){Q8=X,p9t=new G5,b9t=new HY,Gbe=new AL,Vbe=new VY,Hbe=new GY,g9t=(In(Hbe),new qe)}function Z8(){Z8=X,mht=new Net("CONSERVATIVE",0),j_t=new Net("CONSERVATIVE_SOFT",1),DS=new Net("SLOPPY",2)}function bz(){bz=X,yAt=new Mv(15),s4e=new ao((di(),V2),yAt),KS=$x,bAt=q3e,vAt=H2,mAt=o5,wAt=jG}function Mit(t,e,n){var r,s,o;for(r=new cs,o=si(n,0);o.b!=o.d.c;)s=u(ii(o),8),ai(r,new So(s));fre(t,e,r)}function eun(t){var e,n,r;for(e=0,r=Nt(na,re,8,t.b,0,1),n=si(t,0);n.b!=n.d.c;)r[e++]=u(ii(n),8);return r}function Oyt(t){var e;return e=(!t.a&&(t.a=new he(eg,t,9,5)),t.a),e.i!=0?mYe(u(At(e,0),678)):null}function nun(t,e){var n;return n=Ra(t,e),bet(krt(t,e),0)|PYe(krt(t,n),0)?n:Ra(Dq,krt(zm(n,63),1))}function run(t,e){var n;n=Ie((Wit(),oG))!=null&&e.wg()!=null?Zt(ve(e.wg()))/Zt(ve(Ie(oG))):1,Ai(t.b,e,n)}function iun(t,e){var n,r;return n=u(t.d.Bc(e),14),n?(r=t.e.hc(),r.Gc(n),t.e.d-=n.gc(),n.$b(),r):null}function Nyt(t,e){var n,r;if(r=t.c[e],r!=0)for(t.c[e]=0,t.d-=r,n=e+1;n0)return g8(e-1,t.a.c.length),Ig(t.a,e-1);throw nt(new Hzt)}function sun(t,e,n){if(e<0)throw nt(new Co($1e+e));ee)throw nt(new Pn(Fq+t+ffe+e));if(t<0||e>n)throw nt(new Kpt(Fq+t+R6t+e+F6t+n))}function mre(t){if(!t.a||!(t.a.i&8))throw nt(new Ho("Enumeration class expected for layout option "+t.f))}function ey(t){var e;++t.j,t.i==0?t.g=null:t.ihH?t-n>hH:n-t>hH}function Iit(t,e){return!t||e&&!t.j||_t(t,124)&&u(t,124).a.b==0?0:t.Re()}function wz(t,e){return!t||e&&!t.k||_t(t,124)&&u(t,124).a.a==0?0:t.Se()}function jD(t){return eb(),t<0?t!=-1?new L3t(-1,-t):Aut:t<=10?p7t[Cs(t)]:new L3t(1,t)}function Fyt(t){throw vit(),nt(new Fqt("Unexpected typeof result '"+t+"'; please report this bug to the GWT team"))}function Tre(t){qqt(),uj(this),n$(this),this.e=t,Bce(this,t),this.g=t==null?Mu:Wo(t),this.a="",this.b=t,this.a=""}function Byt(){this.a=new uZ,this.f=new D$t(this),this.b=new I$t(this),this.i=new O$t(this),this.e=new N$t(this)}function _re(){gKe.call(this,new ymt(Qm(16))),ql(2,Whe),this.b=2,this.a=new mwt(null,null,0,null),cM(this.a,this.a)}function Y_(){Y_=X,uht=new Met("DUMMY_NODE_OVER",0),E_t=new Met("DUMMY_NODE_UNDER",1),uG=new Met("EQUAL",2)}function Oit(){Oit=X,Zut=oQt(ut(ot(WS,1),oe,103,0,[(fo(),Hh),_f])),Jut=oQt(ut(ot(WS,1),oe,103,0,[Z0,Q0]))}function Nit(t){return(be(),Iu).Hc(t.j)?Zt(ve(K(t,(ae(),fE)))):nc(ut(ot(na,1),re,8,0,[t.i.n,t.n,t.a])).b}function lun(t){var e,n,r,s;for(r=t.b.a,n=r.a.ec().Kc();n.Ob();)e=u(n.Pb(),561),s=new vce(e,t.e,t.f),ue(t.g,s)}function g2(t,e){var n,r,s;r=t.nk(e,null),s=null,e&&(s=(Zk(),n=new wv,n),O8(s,t.r)),r=F1(t,s,r),r&&r.Fi()}function hun(t,e){var n,r;for(r=pl(t.d,1)!=0,n=!0;n;)n=!1,n=e.c.Tf(e.e,r),n=n|pI(t,e,r,!1),r=!r;eyt(t)}function Ryt(t,e){var n,r,s;return r=!1,n=e.q.d,e.ds&&(Qse(e.q,s),r=n!=e.q.d)),r}function Cre(t,e){var n,r,s,o,h,d,w,k;return w=e.i,k=e.j,r=t.f,s=r.i,o=r.j,h=w-s,d=k-o,n=b.Math.sqrt(h*h+d*d),n}function jyt(t,e){var n,r;return r=Iz(t),r||(n=(Cat(),Zae(e)),r=new Nzt(n),Or(r.Vk(),t)),r}function $D(t,e){var n,r;return n=u(t.c.Bc(e),14),n?(r=t.hc(),r.Gc(n),t.d-=n.gc(),n.$b(),t.mc(r)):t.jc()}function Sre(t,e){var n;for(n=0;n=t.c.b:t.a<=t.c.b))throw nt(new vc);return e=t.a,t.a+=t.c.c,++t.b,de(e)}function gun(t){var e;return e=new aee(t),aD(t.a,Abe,new Cl(ut(ot(gO,1),Me,369,0,[e]))),e.d&&ue(e.f,e.d),e.f}function Pit(t){var e;return e=new a2t(t.a),Bo(e,t),ee(e,(ae(),Ii),t),e.o.a=t.g,e.o.b=t.f,e.n.a=t.i,e.n.b=t.j,e}function pun(t,e,n,r){var s,o;for(o=t.Kc();o.Ob();)s=u(o.Pb(),70),s.n.a=e.a+(r.a-s.o.a)/2,s.n.b=e.b,e.b+=s.o.b+n}function bun(t,e,n){var r,s;for(s=e.a.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),57),$Xt(t,r,n))return!0;return!1}function vun(t){var e,n;for(n=new S(t.r);n.a=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function xun(t,e){var n,r,s;for(s=1,n=t,r=e>=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function Nre(t){var e,n;if(t!=null)for(n=0;n0&&(n=u(Pe(t.a,t.a.c.length-1),570),Myt(n,e))||ue(t.a,new dJt(e))}function Cun(t){df();var e,n;e=t.d.c-t.e.c,n=u(t.g,145),_u(n.b,new _T(e)),_u(n.c,new Ub(e)),_a(n.i,new nR(e))}function Rre(t){var e;return e=new Ap,e.a+="VerticalSegment ",wc(e,t.e),e.a+=" ",Yr(e,b2t(new cet,new S(t.k))),e.a}function Sun(t){var e;return e=u(Wv(t.c.c,""),229),e||(e=new $6(Qk(Xk(new wm,""),"Other")),v2(t.c.c,"",e)),e}function X_(t){var e;return t.Db&64?mf(t):(e=new Ah(mf(t)),e.a+=" (name: ",yo(e,t.zb),e.a+=")",e.a)}function Vyt(t,e,n){var r,s;return s=t.sb,t.sb=e,t.Db&4&&!(t.Db&1)&&(r=new oa(t,1,4,s,e),n?n.Ei(r):n=r),n}function Fit(t,e){var n,r,s;for(n=0,s=rc(t,e).Kc();s.Ob();)r=u(s.Pb(),11),n+=K(r,(ae(),sl))!=null?1:0;return n}function o4(t,e,n){var r,s,o;for(r=0,o=si(t,0);o.b!=o.d.c&&(s=Zt(ve(ii(o))),!(s>n));)s>=e&&++r;return r}function Aun(t,e,n){var r,s;return r=new F0(t.e,3,13,null,(s=e.c,s||(ln(),K1)),$g(t,e),!1),n?n.Ei(r):n=r,n}function Lun(t,e,n){var r,s;return r=new F0(t.e,4,13,(s=e.c,s||(ln(),K1)),null,$g(t,e),!1),n?n.Ei(r):n=r,n}function Gyt(t,e,n){var r,s;return s=t.r,t.r=e,t.Db&4&&!(t.Db&1)&&(r=new oa(t,1,8,s,t.r),n?n.Ei(r):n=r),n}function Bg(t,e){var n,r;return n=u(e,676),r=n.vk(),!r&&n.wk(r=_t(e,88)?new NGt(t,u(e,26)):new eZt(t,u(e,148))),r}function zD(t,e,n){var r;t.qi(t.i+1),r=t.oi(e,n),e!=t.i&&Pc(t.g,e,t.g,e+1,t.i-e),ls(t.g,e,r),++t.i,t.bi(e,n),t.ci()}function Mun(t,e){var n;return e.a&&(n=e.a.a.length,t.a?Yr(t.a,t.b):t.a=new Fl(t.d),rZt(t.a,e.a,e.d.length,n)),t}function Dun(t,e){var n,r,s,o;if(e.vi(t.a),o=u(Mn(t.a,8),1936),o!=null)for(n=o,r=0,s=n.length;rn)throw nt(new Co(Fq+t+R6t+e+", size: "+n));if(t>e)throw nt(new Pn(Fq+t+ffe+e))}function gh(t,e,n){if(e<0)K4t(t,n);else{if(!n.Ij())throw nt(new Pn(cb+n.ne()+WC));u(n,66).Nj().Vj(t,t.yh(),e)}}function Nun(t,e,n,r,s,o,h,d){var w;for(w=n;o=r||e=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:t>=48&&t<=57?t-48:0}function Gre(t){var e;return t.Db&64?mf(t):(e=new Ah(mf(t)),e.a+=" (source: ",yo(e,t.d),e.a+=")",e.a)}function Fun(t,e,n){var r,s;return s=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&(r=new oa(t,1,5,s,t.a),n?g4t(n,r):n=r),n}function Rg(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,2,n,e))}function Wyt(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,8,n,e))}function xz(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,8,n,e))}function jg(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,3,n,e))}function Kyt(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,9,n,e))}function Z_(t,e){var n;return t.b==-1&&t.a&&(n=t.a.Gj(),t.b=n?t.c.Xg(t.a.aj(),n):es(t.c.Tg(),t.a)),t.c.Og(t.b,e)}function de(t){var e,n;return t>-129&&t<128?(e=t+128,n=(HKt(),n7t)[e],!n&&(n=n7t[e]=new iM(t)),n):new iM(t)}function J8(t){var e,n;return t>-129&&t<128?(e=t+128,n=(YKt(),a7t)[e],!n&&(n=a7t[e]=new eR(t)),n):new eR(t)}function Yyt(t){var e,n;return e=t.k,e==(Gn(),Is)?(n=u(K(t,(ae(),gc)),61),n==(be(),On)||n==yr):!1}function Bun(t,e,n){var r,s,o;return o=(s=b7(t.b,e),s),o&&(r=u(Eq(mD(t,o),""),26),r)?p5t(t,r,e,n):null}function Bit(t,e,n){var r,s,o;return o=(s=b7(t.b,e),s),o&&(r=u(Eq(mD(t,o),""),26),r)?b5t(t,r,e,n):null}function Ure(t,e){var n,r;for(r=new nr(t);r.e!=r.i.gc();)if(n=u(dr(r),138),Gt(e)===Gt(n))return!0;return!1}function J_(t,e,n){var r;if(r=t.gc(),e>r)throw nt(new jm(e,r));if(t.hi()&&t.Hc(n))throw nt(new Pn(XI));t.Xh(e,n)}function Run(t,e){var n;if(n=e4(t.i,e),n==null)throw nt(new od("Node did not exist in input."));return ayt(e,n),null}function jun(t,e){var n;if(n=gI(t,e),_t(n,322))return u(n,34);throw nt(new Pn(cb+e+"' is not a valid attribute"))}function $un(t,e,n){var r,s;for(s=_t(e,99)&&u(e,18).Bb&Qa?new Ket(e,t):new V8(e,t),r=0;re?1:t==e?t==0?js(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function Yun(t,e){mr(e,"Sort end labels",1),ys(Wi(ec(new kn(null,new Tn(t.b,16)),new QP),new z5),new mY),or(e)}function tC(t,e,n){var r,s;return t.ej()?(s=t.fj(),r=Vst(t,e,n),t.$i(t.Zi(7,de(n),r,e,s)),r):Vst(t,e,n)}function Rit(t,e){var n,r,s;t.d==null?(++t.e,--t.f):(s=e.cd(),n=e.Sh(),r=(n&Ti)%t.d.length,Isn(t,r,lce(t,r,n,s)))}function t7(t,e){var n;n=(t.Bb&xf)!=0,e?t.Bb|=xf:t.Bb&=-1025,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,10,n,e))}function e7(t,e){var n;n=(t.Bb&yy)!=0,e?t.Bb|=yy:t.Bb&=-4097,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,12,n,e))}function n7(t,e){var n;n=(t.Bb&Ku)!=0,e?t.Bb|=Ku:t.Bb&=-8193,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,15,n,e))}function r7(t,e){var n;n=(t.Bb&Ay)!=0,e?t.Bb|=Ay:t.Bb&=-2049,t.Db&4&&!(t.Db&1)&&Ci(t,new bf(t,1,11,n,e))}function Xun(t,e){var n;return n=js(t.b.c,e.b.c),n!=0||(n=js(t.a.a,e.a.a),n!=0)?n:js(t.a.b,e.a.b)}function Qun(t,e){var n;if(n=tr(t.k,e),n==null)throw nt(new od("Port did not exist in input."));return ayt(e,n),null}function Zun(t){var e,n;for(n=pce(zl(t)).Kc();n.Ob();)if(e=jr(n.Pb()),mC(t,e))return asn((TVt(),G4e),e);return null}function Jun(t,e){var n,r,s,o,h;for(h=hu(t.e.Tg(),e),o=0,n=u(t.g,119),s=0;s>10)+OI&Ms,e[1]=(t&1023)+56320&Ms,Ih(e,0,e.length)}function Ez(t){var e,n;return n=u(K(t,(xe(),Xl)),103),n==(fo(),c0)?(e=Zt(ve(K(t,UV))),e>=1?_f:Q0):n}function nln(t){switch(u(K(t,(xe(),X0)),218).g){case 1:return new jX;case 3:return new VX;default:return new RX}}function p2(t){if(t.c)p2(t.c);else if(t.d)throw nt(new Ho("Stream already terminated, can't be modified or used"))}function zit(t){var e;return t.Db&64?mf(t):(e=new Ah(mf(t)),e.a+=" (identifier: ",yo(e,t.k),e.a+=")",e.a)}function Xre(t,e,n){var r,s;return r=(Tv(),s=new mp,s),W$(r,e),K$(r,n),t&&Or((!t.a&&(t.a=new Bs(Wh,t,5)),t.a),r),r}function qit(t,e,n,r){var s,o;return In(r),In(n),s=t.xc(e),o=s==null?n:hVt(u(s,15),u(n,14)),o==null?t.Bc(e):t.zc(e,o),o}function on(t){var e,n,r,s;return n=(e=u(Wf((r=t.gm,s=r.f,s==Ur?r:s)),9),new oh(e,u(ff(e,e.length),9),0)),wf(n,t),n}function rln(t,e,n){var r,s;for(s=t.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),10),DD(n,u(Pe(e,r.p),14)))return r;return null}function iln(t,e,n){var r;try{Rcn(t,e,n)}catch(s){throw s=rs(s),_t(s,597)?(r=s,nt(new rmt(r))):nt(s)}return e}function Qp(t,e){var n;return Vo(t)&&Vo(e)&&(n=t-e,II>1,t.k=n-1>>1}function Hit(){y4t();var t,e,n;n=t6n+++Date.now(),t=Cs(b.Math.floor(n*PI))&Pq,e=Cs(n-t*P6t),this.a=t^1502,this.b=e^got}function z0(t){var e,n,r;for(e=new le,r=new S(t.j);r.a34028234663852886e22?bs:e<-34028234663852886e22?Ns:e}function Qre(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function Zre(t){var e,n,r,s;for(e=new IWt(t.Hd().gc()),s=0,r=W6(t.Hd().Kc());r.Ob();)n=r.Pb(),mrn(e,n,de(s++));return V0n(e.a)}function lln(t,e){var n,r,s;for(s=new Ar,r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),Ai(s,n.cd(),ecn(t,u(n.dd(),15)));return s}function e3t(t,e){t.n.c.length==0&&ue(t.n,new f$(t.s,t.t,t.i)),ue(t.b,e),B3t(u(Pe(t.n,t.n.c.length-1),211),e),cle(t,e)}function c4(t){return(t.c!=t.b.b||t.i!=t.g.b)&&(t.a.c=Nt(Qn,Me,1,0,5,1),Rs(t.a,t.b),Rs(t.a,t.g),t.c=t.b.b,t.i=t.g.b),t.a}function Vit(t,e){var n,r,s;for(s=0,r=u(e.Kb(t),20).Kc();r.Ob();)n=u(r.Pb(),17),Be(Fe(K(n,(ae(),H1))))||++s;return s}function hln(t,e){var n,r,s;r=J3(e),s=Zt(ve(iy(r,(xe(),Tf)))),n=b.Math.max(0,s/2-.5),cC(e,n,1),ue(t,new VVt(e,n))}function ph(){ph=X,_O=new _M(K0,0),yS=new _M("FIRST",1),gb=new _M(a1e,2),xS=new _M("LAST",3),Fy=new _M(o1e,4)}function q0(){q0=X,bft=new KR(OC,0),XO=new KR("POLYLINE",1),CE=new KR("ORTHOGONAL",2),qx=new KR("SPLINES",3)}function Tz(){Tz=X,DCt=new zet("ASPECT_RATIO_DRIVEN",0),qht=new zet("MAX_SCALE_DRIVEN",1),MCt=new zet("AREA_DRIVEN",2)}function VD(){VD=X,AG=new qet("P1_STRUCTURE",0),LG=new qet("P2_PROCESSING_ORDER",1),MG=new qet("P3_EXECUTION",2)}function _z(){_z=X,Fht=new Ret("OVERLAP_REMOVAL",0),Nht=new Ret("COMPACTION",1),Pht=new Ret("GRAPH_SIZE_CALCULATION",2)}function rw(t,e){return E1(),vf(rb),b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e))}function Jre(t,e){var n,r;for(n=si(t,0);n.b!=n.d.c;){if(r=lM(ve(ii(n))),r==e)return;if(r>e){Trt(n);break}}XM(n,e)}function an(t,e){var n,r,s,o,h;if(n=e.f,v2(t.c.d,n,e),e.g!=null)for(s=e.g,o=0,h=s.length;oe&&r.ue(t[o-1],t[o])>0;--o)h=t[o],ls(t,o,t[o-1]),ls(t,o-1,h)}function bh(t,e,n,r){if(e<0)y5t(t,n,r);else{if(!n.Ij())throw nt(new Pn(cb+n.ne()+WC));u(n,66).Nj().Tj(t,t.yh(),e,r)}}function Cz(t,e){if(e==t.d)return t.e;if(e==t.e)return t.d;throw nt(new Pn("Node "+e+" not part of edge "+t))}function dln(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function tie(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function n3t(t,e,n,r){switch(e){case 3:return t.f;case 4:return t.g;case 5:return t.i;case 6:return t.j}return Uyt(t,e,n,r)}function gln(t){return t.k!=(Gn(),qs)?!1:C8(new kn(null,new Fv(new ar(lr($s(t).a.Kc(),new H)))),new LF)}function pln(t){return t.e==null?t:(!t.c&&(t.c=new rat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,null)),t.c)}function bln(t,e){return t.h==DI&&t.m==0&&t.l==0?(e&&(ub=cu(0,0,0)),eUt((I8(),X8t))):(e&&(ub=cu(t.l,t.m,t.h)),cu(0,0,0))}function Wo(t){var e;return Array.isArray(t)&&t.im===Ft?Mp(dl(t))+"@"+(e=Ji(t)>>>0,e.toString(16)):t.toString()}function eC(t){var e;this.a=(e=u(t.e&&t.e(),9),new oh(e,u(ff(e,e.length),9),0)),this.b=Nt(Qn,Me,1,this.a.a.length,5,1)}function vln(t){var e,n,r;for(this.a=new A0,r=new S(t);r.a0&&($r(e-1,t.length),t.charCodeAt(e-1)==58)&&!Git(t,iA,sA))}function Git(t,e,n){var r,s;for(r=0,s=t.length;r=s)return e.c+n;return e.c+e.b.gc()}function kln(t,e){l8();var n,r,s,o;for(r=gte(t),s=e,M8(r,0,r.length,s),n=0;n0&&(r+=s,++n);return n>1&&(r+=t.d*(n-1)),r}function i3t(t){var e,n,r;for(r=new _g,r.a+="[",e=0,n=t.gc();e0&&this.b>0&&jvt(this.c,this.b,this.a)}function o3t(t){Wit(),this.c=L1(ut(ot(w6n,1),Me,831,0,[Fwe])),this.b=new Ar,this.a=t,Ai(this.b,oG,1),_u(Bwe,new H$t(this))}function eie(t,e){var n;return t.d?Ml(t.b,e)?u(tr(t.b,e),51):(n=e.Kf(),Ai(t.b,e,n),n):e.Kf()}function c3t(t,e){var n;return Gt(t)===Gt(e)?!0:_t(e,91)?(n=u(e,91),t.e==n.e&&t.d==n.d&&csn(t,n.a)):!1}function Z6(t){switch(be(),t.g){case 4:return On;case 1:return Hn;case 3:return yr;case 2:return Bn;default:return ac}}function u3t(t,e){switch(e){case 3:return t.f!=0;case 4:return t.g!=0;case 5:return t.i!=0;case 6:return t.j!=0}return cyt(t,e)}function Aln(t){switch(t.g){case 0:return new sZ;case 1:return new HF;default:throw nt(new Pn(Ect+(t.f!=null?t.f:""+t.g)))}}function nie(t){switch(t.g){case 0:return new qF;case 1:return new VF;default:throw nt(new Pn(jot+(t.f!=null?t.f:""+t.g)))}}function rie(t){switch(t.g){case 0:return new zpt;case 1:return new gqt;default:throw nt(new Pn(pH+(t.f!=null?t.f:""+t.g)))}}function Lln(t){switch(t.g){case 1:return new tZ;case 2:return new yWt;default:throw nt(new Pn(Ect+(t.f!=null?t.f:""+t.g)))}}function Mln(t){var e,n;if(t.b)return t.b;for(n=z1?null:t.d;n;){if(e=z1?null:n.b,e)return e;n=z1?null:n.d}return r8(),C7t}function Dln(t){var e,n,r;return t.e==0?0:(e=t.d<<5,n=t.a[t.d-1],t.e<0&&(r=dne(t),r==t.d-1&&(--n,n=n|0)),e-=lI(n),e)}function Iln(t){var e,n,r;return t>5,e=t&31,r=Nt(Sr,Jr,25,n+1,15,1),r[n]=1<3;)s*=10,--o;t=(t+(s>>1))/s|0}return r.i=t,!0}function Nln(t){return Oit(),Fn(),!!(tie(u(t.a,81).j,u(t.b,103))||u(t.a,81).d.e!=0&&tie(u(t.a,81).j,u(t.b,103)))}function Pln(t){O$(),u(t.We((di(),mb)),174).Hc((bl(),WG))&&(u(t.We(Ky),174).Fc((il(),Hx)),u(t.We(mb),174).Mc(WG))}function sie(t,e){var n,r;if(e){for(n=0;n=0;--r)for(e=n[r],s=0;s>1,this.k=e-1>>1}function zln(t,e){mr(e,"End label post-processing",1),ys(Wi(ec(new kn(null,new Tn(t.b,16)),new dY),new gY),new pY),or(e)}function qln(t,e,n){var r,s;return r=Zt(t.p[e.i.p])+Zt(t.d[e.i.p])+e.n.b+e.a.b,s=Zt(t.p[n.i.p])+Zt(t.d[n.i.p])+n.n.b+n.a.b,s-r}function Hln(t,e,n){var r,s;for(r=Gs(n,po),s=0;_c(r,0)!=0&&s0&&($r(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function Gln(t){var e;return t==null?null:new Fp((e=Hc(t,!0),e.length>0&&($r(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function b3t(t,e){var n;return t.i>0&&(e.lengtht.i&&ls(e,t.i,null),e}function eu(t,e,n){var r,s,o;return t.ej()?(r=t.i,o=t.fj(),zD(t,r,e),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):zD(t,t.i,e),n}function Uln(t,e,n){var r,s;return r=new F0(t.e,4,10,(s=e.c,_t(s,88)?u(s,26):(ln(),Qh)),null,$g(t,e),!1),n?n.Ei(r):n=r,n}function Wln(t,e,n){var r,s;return r=new F0(t.e,3,10,null,(s=e.c,_t(s,88)?u(s,26):(ln(),Qh)),$g(t,e),!1),n?n.Ei(r):n=r,n}function cie(t){Bm();var e;return e=new So(u(t.e.We((di(),o5)),8)),t.B.Hc((bl(),AE))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function uie(t){sy();var e;return(t.q?t.q:(pn(),pn(),a0))._b((xe(),Nw))?e=u(K(t,Nw),197):e=u(K($a(t),_S),197),e}function iy(t,e){var n,r;return r=null,ea(t,(xe(),sG))&&(n=u(K(t,sG),94),n.Xe(e)&&(r=n.We(e))),r==null&&(r=K($a(t),e)),r}function lie(t,e){var n,r,s;return _t(e,42)?(n=u(e,42),r=n.cd(),s=ny(t.Rc(),r),dd(s,n.dd())&&(s!=null||t.Rc()._b(r))):!1}function Yit(t,e){var n,r,s;return t.f>0?(t.qj(),r=e==null?0:Ji(e),s=(r&Ti)%t.d.length,n=lce(t,s,r,e),n!=-1):!1}function Jf(t,e){var n,r,s;return t.f>0&&(t.qj(),r=e==null?0:Ji(e),s=(r&Ti)%t.d.length,n=t5t(t,s,r,e),n)?n.dd():null}function GD(t,e){var n,r,s,o;for(o=hu(t.e.Tg(),e),n=u(t.g,119),s=0;s1?A1(M0(e.a[1],32),Gs(e.a[0],po)):Gs(e.a[0],po),Gv(Ia(e.e,n))))}function UD(t,e){var n;return Vo(t)&&Vo(e)&&(n=t%e,II>5,e&=31,s=t.d+n+(e==0?0:1),r=Nt(Sr,Jr,25,s,15,1),Kdn(r,t.a,n,e),o=new Y3(t.e,s,r),O_(o),o}function w3t(t,e,n){var r,s;r=u(jc(DE,e),117),s=u(jc(hA,e),117),n?(Ao(DE,t,r),Ao(hA,t,s)):(Ao(hA,t,r),Ao(DE,t,s))}function vie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r>=0?o=o.a[1]:(s=o,o=o.a[0])}return s}function wie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(s=o,o=o.a[1])}return s}function Zln(t,e,n,r){var s,o,h;return s=!1,O3n(t.f,n,r)&&(Ehn(t.f,t.a[e][n],t.a[e][r]),o=t.a[e],h=o[r],o[r]=o[n],o[n]=h,s=!0),s}function m3t(t,e,n,r,s){var o,h,d;for(h=s;e.b!=e.c;)o=u(P6(e),10),d=u(rc(o,r).Xb(0),11),t.d[d.p]=h++,n.c[n.c.length]=d;return h}function y3t(t,e,n){var r,s,o,h,d;return h=t.k,d=e.k,r=n[h.g][d.g],s=ve(iy(t,r)),o=ve(iy(e,r)),b.Math.max((In(s),s),(In(o),o))}function Jln(t,e,n){var r,s,o,h;for(r=n/t.c.length,s=0,h=new S(t);h.a2e3&&(pge=t,qH=b.setTimeout(aYe,10))),zH++==0?(Nan((Upt(),W8t)),!0):!1}function ehn(t,e){var n,r,s;for(r=new ar(lr($s(t).a.Kc(),new H));Vr(r);)if(n=u(Ir(r),17),s=n.d.i,s.c==e)return!1;return!0}function x3t(t,e){var n,r;if(_t(e,245)){r=u(e,245);try{return n=t.vd(r),n==0}catch(s){if(s=rs(s),!_t(s,205))throw nt(s)}}return!1}function nhn(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function rhn(t,e){return E1(),E1(),vf(rb),(b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))>0}function k3t(t,e){return E1(),E1(),vf(rb),(b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))<0}function xie(t,e){return E1(),E1(),vf(rb),(b.Math.abs(t-e)<=rb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))<=0}function Qit(t,e){for(var n=0;!e[n]||e[n]=="";)n++;for(var r=e[n++];nuot)return n.fh();if(r=n.Zg(),r||n==t)break}return r}function E3t(t){return g$(),_t(t,156)?u(tr(cN,Sge),288).vg(t):Ml(cN,dl(t))?u(tr(cN,dl(t)),288).vg(t):null}function shn(t){if(Oz($7,t))return Fn(),W7;if(Oz(Pct,t))return Fn(),O2;throw nt(new Pn("Expecting true or false"))}function ahn(t,e){if(e.c==t)return e.d;if(e.d==t)return e.c;throw nt(new Pn("Input edge is not connected to the input port."))}function Sie(t,e){return t.e>e.e?1:t.ee.d?t.e:t.d=48&&t<48+b.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function Lie(t,e){var n;return Gt(e)===Gt(t)?!0:!_t(e,21)||(n=u(e,21),n.gc()!=t.gc())?!1:t.Ic(n)}function ohn(t,e){var n,r,s,o;return r=t.a.length-1,n=e-t.b&r,o=t.c-e&r,s=t.c-t.b&r,sWt(n=o?(aun(t,e),-1):(oun(t,e),1)}function chn(t,e){var n,r;for(n=($r(e,t.length),t.charCodeAt(e)),r=e+1;re.e?1:t.fe.f?1:Ji(t)-Ji(e)}function Oz(t,e){return In(t),e==null?!1:un(t,e)?!0:t.length==e.length&&un(t.toLowerCase(),e.toLowerCase())}function vhn(t,e){var n,r,s,o;for(r=0,s=e.gc();r0&&_c(t,128)<0?(e=Mr(t)+128,n=(KKt(),r7t)[e],!n&&(n=r7t[e]=new _m(t)),n):new _m(t)}function Die(t,e){var n,r;return n=e.Hh(t.a),n&&(r=jr(Jf((!n.b&&(n.b=new Al((ln(),Ja),pc,n)),n.b),fi)),r!=null)?r:e.ne()}function whn(t,e){var n,r;return n=e.Hh(t.a),n&&(r=jr(Jf((!n.b&&(n.b=new Al((ln(),Ja),pc,n)),n.b),fi)),r!=null)?r:e.ne()}function mhn(t,e){vrt();var n,r;for(r=new ar(lr(z0(t).a.Kc(),new H));Vr(r);)if(n=u(Ir(r),17),n.d.i==e||n.c.i==e)return n;return null}function C3t(t,e,n){this.c=t,this.f=new le,this.e=new Da,this.j=new Pvt,this.n=new Pvt,this.b=e,this.g=new ch(e.c,e.d,e.b,e.a),this.a=n}function Zit(t){var e,n,r,s;for(this.a=new A0,this.d=new Qs,this.e=0,n=t,r=0,s=n.length;r0):!1}function Nie(t){var e;Gt(ze(t,(di(),i5)))===Gt(($0(),HG))&&(hs(t)?(e=u(ze(hs(t),i5),334),Eo(t,i5,e)):Eo(t,i5,YS))}function Ehn(t,e,n){var r,s;Ost(t.e,e,n,(be(),Bn)),Ost(t.i,e,n,Hn),t.a&&(s=u(K(e,(ae(),Ii)),11),r=u(K(n,Ii),11),Ert(t.g,s,r))}function Pie(t,e,n){var r,s,o;r=e.c.p,o=e.p,t.b[r][o]=new ZXt(t,e),n&&(t.a[r][o]=new Gk(e),s=u(K(e,(ae(),Dw)),10),s&&cn(t.d,s,e))}function Fie(t,e){var n,r,s;if(ue(nV,t),e.Fc(t),n=u(tr(Vut,t),21),n)for(s=n.Kc();s.Ob();)r=u(s.Pb(),33),Go(nV,r,0)!=-1||Fie(r,e)}function Thn(t,e,n){var r;(Nge?(Mln(t),!0):Pge||Bge?(r8(),!0):Fge&&(r8(),!1))&&(r=new lKt(e),r.b=n,S0n(t,r))}function Jit(t,e){var n;n=!t.A.Hc((Nl(),W2))||t.q==(va(),Kc),t.u.Hc((il(),tg))?n?U4n(t,e):fhe(t,e):t.u.Hc(Eb)&&(n?h4n(t,e):Che(t,e))}function a7(t,e){var n,r;if(++t.j,e!=null&&(n=(r=t.a.Cb,_t(r,97)?u(r,97).Jg():null),mpn(e,n))){J6(t.a,4,n);return}J6(t.a,4,u(e,126))}function Bie(t,e,n){return new ch(b.Math.min(t.a,e.a)-n/2,b.Math.min(t.b,e.b)-n/2,b.Math.abs(t.a-e.a)+n,b.Math.abs(t.b-e.b)+n)}function _hn(t,e){var n,r;return n=mu(t.a.c.p,e.a.c.p),n!=0?n:(r=mu(t.a.d.i.p,e.a.d.i.p),r!=0?r:mu(e.a.d.p,t.a.d.p))}function Chn(t,e,n){var r,s,o,h;return o=e.j,h=n.j,o!=h?o.g-h.g:(r=t.f[e.p],s=t.f[n.p],r==0&&s==0?0:r==0?-1:s==0?1:js(r,s))}function Rie(t,e,n){var r,s,o;if(!n[e.d])for(n[e.d]=!0,s=new S(c4(e));s.a=s)return s;for(e=e>0?e:0;er&&ls(e,r,null),e}function $ie(t,e){var n,r;for(r=t.a.length,e.lengthr&&ls(e,r,null),e}function v2(t,e,n){var r,s,o;return s=u(tr(t.e,e),387),s?(o=X2t(s,n),DUt(t,s),o):(r=new Evt(t,e,n),Ai(t.e,e,r),rQt(r),null)}function Lhn(t){var e;if(t==null)return null;if(e=Ebn(Hc(t,!0)),e==null)throw nt(new set("Invalid hexBinary value: '"+t+"'"));return e}function KD(t){return eb(),_c(t,0)<0?_c(t,-1)!=0?new h4t(-1,D8(t)):Aut:_c(t,10)<=0?p7t[Mr(t)]:new h4t(1,t)}function est(){return Lq(),ut(ot(xpe,1),oe,159,0,[mpe,wpe,ype,lpe,upe,hpe,gpe,dpe,fpe,vpe,bpe,ppe,ope,ape,cpe,ipe,rpe,spe,epe,tpe,npe,But])}function zie(t){var e;this.d=new le,this.j=new Da,this.g=new Da,e=t.g.b,this.f=u(K($a(e),(xe(),Xl)),103),this.e=Zt(ve(Fz(e,Vy)))}function qie(t){this.b=new le,this.e=new le,this.d=t,this.a=!jT(Wi(new kn(null,new Fv(new M1(t.b))),new te(new MF))).sd((Yb(),Q7))}function t1(){t1=X,qn=new AM("PARENTS",0),ua=new AM("NODES",1),Id=new AM("EDGES",2),q2=new AM("PORTS",3),tp=new AM("LABELS",4)}function u4(){u4=X,xb=new MM("DISTRIBUTED",0),JO=new MM("JUSTIFIED",1),kAt=new MM("BEGIN",2),XS=new MM(I7,3),EAt=new MM("END",4)}function Mhn(t){var e;switch(e=t.yi(null),e){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function nst(t){switch(t.g){case 1:return fo(),Z0;case 4:return fo(),Hh;case 2:return fo(),_f;case 3:return fo(),Q0}return fo(),c0}function Dhn(t,e,n){var r;switch(r=n.q.getFullYear()-ib+ib,r<0&&(r=-r),e){case 1:t.a+=r;break;case 2:Xd(t,r%100,2);break;default:Xd(t,r,e)}}function si(t,e){var n,r;if(Um(e,t.b),e>=t.b>>1)for(r=t.c,n=t.b;n>e;--n)r=r.b;else for(r=t.a.a,n=0;n=64&&e<128&&(s=A1(s,M0(1,e-64)));return s}function Fz(t,e){var n,r;return r=null,ea(t,(di(),zx))&&(n=u(K(t,zx),94),n.Xe(e)&&(r=n.We(e))),r==null&&$a(t)&&(r=K($a(t),e)),r}function Gie(t,e){var n,r,s;s=e.d.i,r=s.k,!(r==(Gn(),qs)||r==q1)&&(n=new ar(lr($s(s).a.Kc(),new H)),Vr(n)&&Ai(t.k,e,u(Ir(n),17)))}function rst(t,e){var n,r,s;return r=wn(t.Tg(),e),n=e-t.Ah(),n<0?(s=t.Yg(r),s>=0?t.lh(s):Hst(t,r)):n<0?Hst(t,r):u(r,66).Nj().Sj(t,t.yh(),n)}function Ie(t){var e;if(_t(t.a,4)){if(e=E3t(t.a),e==null)throw nt(new Ho(q1e+t.b+"'. "+z1e+(L0(uN),uN.k)+r8t));return e}else return t.a}function Nhn(t){var e;if(t==null)return null;if(e=t5n(Hc(t,!0)),e==null)throw nt(new set("Invalid base64Binary value: '"+t+"'"));return e}function dr(t){var e;try{return e=t.i.Xb(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=rs(n),_t(n,73)?(t.mj(),nt(new vc)):nt(n)}}function ist(t){var e;try{return e=t.c.ki(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=rs(n),_t(n,73)?(t.mj(),nt(new vc)):nt(n)}}function iC(){iC=X,sEt=(di(),eAt),qut=OSt,Npe=jx,iEt=V2,Rpe=(Kz(),B7t),Bpe=P7t,jpe=j7t,Fpe=N7t,Ppe=(Lit(),eEt),zut=Dpe,rEt=Ipe,eV=Ope}function Bz(t){switch(fbt(),this.c=new le,this.d=t,t.g){case 0:case 2:this.a=ywt(EEt),this.b=bs;break;case 3:case 1:this.a=EEt,this.b=Ns}}function Uie(t,e,n){var r,s;if(t.c)Cu(t.c,t.c.i+e),Su(t.c,t.c.j+n);else for(s=new S(t.b);s.a0&&(ue(t.b,new CKt(e.a,n)),r=e.a.length,0r&&(e.a+=MUt(Nt(Eh,wd,25,-r,15,1))))}function Wie(t,e){var n,r,s;for(n=t.o,s=u(u(Pi(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.e.a=Bfn(r,n.a),r.e.b=n.b*Zt(ve(r.b.We(ZH)))}function Fhn(t,e){var n,r,s,o;return s=t.k,n=Zt(ve(K(t,(ae(),Iw)))),o=e.k,r=Zt(ve(K(e,Iw))),o!=(Gn(),Is)?-1:s!=Is?1:n==r?0:n=0?t.hh(e,n,r):(t.eh()&&(r=(s=t.Vg(),s>=0?t.Qg(r):t.eh().ih(t,-1-s,null,r))),t.Sg(e,n,r))}function A3t(t,e){switch(e){case 7:!t.e&&(t.e=new En(ra,t,7,4)),Tr(t.e);return;case 8:!t.d&&(t.d=new En(ra,t,8,5)),Tr(t.d);return}g3t(t,e)}function e1(t,e){var n;n=t.Zc(e);try{return n.Pb()}catch(r){throw r=rs(r),_t(r,109)?nt(new Co("Can't get element "+e)):nt(r)}}function L3t(t,e){this.e=t,e=0&&(n.d=t.t);break;case 3:t.t>=0&&(n.a=t.t)}t.C&&(n.b=t.C.b,n.c=t.C.c)}function ex(){ex=X,cO=new $R(Rq,0),oO=new $R(Eot,1),uO=new $R(Tot,2),lO=new $R(_ot,3),cO.a=!1,oO.a=!0,uO.a=!1,lO.a=!0}function sC(){sC=X,hO=new jR(Rq,0),JH=new jR(Eot,1),tV=new jR(Tot,2),fO=new jR(_ot,3),hO.a=!1,JH.a=!0,tV.a=!1,fO.a=!0}function zhn(t){var e;e=t.a;do e=u(Ir(new ar(lr(Uo(e).a.Kc(),new H))),17).c.i,e.k==(Gn(),ca)&&t.b.Fc(e);while(e.k==(Gn(),ca));t.b=c2(t.b)}function qhn(t){var e,n,r;for(r=t.c.a,t.p=(Dr(r),new qu(r)),n=new S(r);n.an.b)return!0}return!1}function sst(t,e){return ha(t)?!!cge[e]:t.hm?!!t.hm[e]:Nm(t)?!!oge[e]:Om(t)?!!age[e]:!1}function Eo(t,e,n){return n==null?(!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),Dz(t.o,e)):(!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),Yz(t.o,e,n)),t}function Uhn(t,e,n,r){var s,o;o=e.Xe((di(),a5))?u(e.We(a5),21):t.j,s=Pun(o),s!=(Lq(),But)&&(n&&!T3t(s)||N4t(Tbn(t,s,r),e))}function jz(t,e,n,r){var s,o,h;return o=wn(t.Tg(),e),s=e-t.Ah(),s<0?(h=t.Yg(o),h>=0?t._g(h,n,!0):lw(t,o,n)):u(o,66).Nj().Pj(t,t.yh(),s,n,r)}function Whn(t,e,n,r){var s,o,h;n.mh(e)&&(so(),Qrt(e)?(s=u(n.ah(e),153),vhn(t,s)):(o=(h=e,h?u(r,49).xh(h):null),o&&YWe(n.ah(e),o)))}function Khn(t){switch(t.g){case 1:return tw(),aO;case 3:return tw(),sO;case 2:return tw(),jut;case 4:return tw(),Rut;default:return null}}function M3t(t){switch(typeof t){case Pat:return zg(t);case C6t:return Cs(t);case cx:return Fn(),t?1231:1237;default:return t==null?0:Dv(t)}}function Yhn(t,e,n){if(t.e)switch(t.b){case 1:Tnn(t.c,e,n);break;case 0:_nn(t.c,e,n)}else PZt(t.c,e,n);t.a[e.p][n.p]=t.c.i,t.a[n.p][e.p]=t.c.e}function Zie(t){var e,n;if(t==null)return null;for(n=Nt(o0,re,193,t.length,0,2),e=0;e=0)return s;if(t.Fk()){for(r=0;r=s)throw nt(new jm(e,s));if(t.hi()&&(r=t.Xc(n),r>=0&&r!=e))throw nt(new Pn(XI));return t.mi(e,n)}function D3t(t,e){if(this.a=u(Dr(t),245),this.b=u(Dr(e),245),t.vd(e)>0||t==(Jtt(),vut)||e==(Ztt(),wut))throw nt(new Pn("Invalid range: "+DZt(t,e)))}function Jie(t){var e,n;for(this.b=new le,this.c=t,this.a=!1,n=new S(t.a);n.a0),(e&-e)==e)return Cs(e*pl(t,31)*4656612873077393e-25);do n=pl(t,31),r=n%e;while(n-r+(e-1)<0);return Cs(r)}function zg(t){hKt();var e,n,r;return n=":"+t,r=YH[n],r!=null?Cs((In(r),r)):(r=A7t[n],e=r==null?z2n(t):Cs((In(r),r)),bnn(),YH[n]=e,e)}function ese(t,e,n){mr(n,"Compound graph preprocessor",1),t.a=new Hv,ohe(t,e,null),Ayn(t,e),l2n(t),ee(e,(ae(),W9t),t.a),t.a=null,nl(t.b),or(n)}function Zhn(t,e,n){switch(n.g){case 1:t.a=e.a/2,t.b=0;break;case 2:t.a=e.a,t.b=e.b/2;break;case 3:t.a=e.a/2,t.b=e.b;break;case 4:t.a=0,t.b=e.b/2}}function Jhn(t){var e,n,r;for(r=u(Pi(t.a,(p4(),DV)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=V3t(n),b8(t,n,e[0],(Jv(),Sw),0),b8(t,n,e[1],Aw,1)}function tfn(t){var e,n,r;for(r=u(Pi(t.a,(p4(),IV)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=V3t(n),b8(t,n,e[0],(Jv(),Sw),0),b8(t,n,e[1],Aw,1)}function ast(t){switch(t.g){case 0:return null;case 1:return new ene;case 2:return new qpt;default:throw nt(new Pn(Ect+(t.f!=null?t.f:""+t.g)))}}function YD(t,e,n){var r,s;for(kcn(t,e-t.s,n-t.t),s=new S(t.n);s.a1&&(o=Qhn(t,e)),o}function ost(t){var e;return t.f&&t.f.kh()&&(e=u(t.f,49),t.f=u(Xp(t,e),82),t.f!=e&&t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,9,8,e,t.f))),t.f}function cst(t){var e;return t.i&&t.i.kh()&&(e=u(t.i,49),t.i=u(Xp(t,e),82),t.i!=e&&t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,9,7,e,t.i))),t.i}function oo(t){var e;return t.b&&t.b.Db&64&&(e=t.b,t.b=u(Xp(t,e),18),t.b!=e&&t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,9,21,e,t.b))),t.b}function qz(t,e){var n,r,s;t.d==null?(++t.e,++t.f):(r=e.Sh(),v2n(t,t.f+1),s=(r&Ti)%t.d.length,n=t.d[s],!n&&(n=t.d[s]=t.uj()),n.Fc(e),++t.f)}function N3t(t,e,n){var r;return e.Kj()?!1:e.Zj()!=-2?(r=e.zj(),r==null?n==null:Si(r,n)):e.Hj()==t.e.Tg()&&n==null}function Hz(){var t;ql(16,Qhe),t=Uee(16),this.b=Nt(yut,LI,317,t,0,1),this.c=Nt(yut,LI,317,t,0,1),this.a=null,this.e=null,this.i=0,this.f=t-1,this.g=0}function H0(t){Z2t.call(this),this.k=(Gn(),qs),this.j=(ql(6,my),new Jc(6)),this.b=(ql(2,my),new Jc(2)),this.d=new Wtt,this.f=new Opt,this.a=t}function nfn(t){var e,n;t.c.length<=1||(e=Jce(t,(be(),yr)),zae(t,u(e.a,19).a,u(e.b,19).a),n=Jce(t,Bn),zae(t,u(n.a,19).a,u(n.b,19).a))}function aC(){aC=X,__t=new TM("SIMPLE",0),fht=new TM(zot,1),dht=new TM("LINEAR_SEGMENTS",2),AS=new TM("BRANDES_KOEPF",3),LS=new TM(E1e,4)}function P3t(t,e,n){D6(u(K(e,(xe(),ws)),98))||(Lmt(t,e,qg(e,n)),Lmt(t,e,qg(e,(be(),yr))),Lmt(t,e,qg(e,On)),pn(),aa(e.j,new aM(t)))}function nse(t,e,n,r){var s,o,h;for(s=u(Pi(r?t.a:t.b,e),21),h=s.Kc();h.Ob();)if(o=u(h.Pb(),33),dq(t,n,o))return!0;return!1}function ust(t){var e,n;for(n=new nr(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Bs(wo,e,1)),e.d).i!=0)return!0;return!1}function lst(t){var e,n;for(n=new nr(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Bs(wo,e,1)),e.d).i!=0)return!0;return!1}function rfn(t){var e,n,r;for(e=0,r=new S(t.c.a);r.a102?-1:t<=57?t-48:t<65?-1:t<=70?t-65+10:t<97?-1:t-97+10}function dst(t,e){if(t==null)throw nt(new m6("null key in entry: null="+e));if(e==null)throw nt(new m6("null value in entry: "+t+"=null"))}function ifn(t,e){for(var n,r;t.Ob();)if(!e.Ob()||(n=t.Pb(),r=e.Pb(),!(Gt(n)===Gt(r)||n!=null&&Si(n,r))))return!1;return!e.Ob()}function ise(t,e){var n;return n=ut(ot(ga,1),To,25,15,[Iit(t.a[0],e),Iit(t.a[1],e),Iit(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function sse(t,e){var n;return n=ut(ot(ga,1),To,25,15,[wz(t.a[0],e),wz(t.a[1],e),wz(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function m2(){m2=X,xlt=new EM("GREEDY",0),T9t=new EM(u1e,1),klt=new EM(zot,2),pS=new EM("MODEL_ORDER",3),gS=new EM("GREEDY_MODEL_ORDER",4)}function ase(t,e){var n,r,s;for(t.b[e.g]=1,r=si(e.d,0);r.b!=r.d.c;)n=u(ii(r),188),s=n.c,t.b[s.g]==1?ai(t.a,n):t.b[s.g]==2?t.b[s.g]=1:ase(t,s)}function sfn(t,e){var n,r,s;for(s=new Jc(e.gc()),r=e.Kc();r.Ob();)n=u(r.Pb(),286),n.c==n.f?d7(t,n,n.c):rgn(t,n)||(s.c[s.c.length]=n);return s}function afn(t,e,n){var r,s,o,h,d;for(d=t.r+e,t.r+=e,t.d+=n,r=n/t.n.c.length,s=0,h=new S(t.n);h.ao&&ls(e,o,null),e}function yfn(t,e){var n,r;if(r=t.gc(),e==null){for(n=0;n0&&(w+=s),k[_]=h,h+=d*(w+r)}function gse(t){var e,n,r;for(r=t.f,t.n=Nt(ga,To,25,r,15,1),t.d=Nt(ga,To,25,r,15,1),e=0;e0?t.c:0),++s;t.b=r,t.d=o}function Sfn(t,e){var n,r,s,o,h;for(r=0,s=0,n=0,h=new S(e);h.a0?t.g:0),++n;t.c=s,t.d=r}function mse(t,e){var n;return n=ut(ot(ga,1),To,25,15,[O3t(t,(Zf(),fc),e),O3t(t,iu,e),O3t(t,dc,e)]),t.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Afn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!1,!0)}catch(s){throw s=rs(s),_t(s,73)?(r=s,nt(new Co(r.g+$q+e+Xa+n+")."))):nt(s)}}function Lfn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!0,!1)}catch(s){throw s=rs(s),_t(s,73)?(r=s,nt(new Co(r.g+$q+e+Xa+n+")."))):nt(s)}}function yse(t){var e;ea(t,(xe(),Ow))&&(e=u(K(t,Ow),21),e.Hc((fy(),Cf))?(e.Mc(Cf),e.Fc(Sf)):e.Hc(Sf)&&(e.Mc(Sf),e.Fc(Cf)))}function xse(t){var e;ea(t,(xe(),Ow))&&(e=u(K(t,Ow),21),e.Hc((fy(),Lf))?(e.Mc(Lf),e.Fc(Gh)):e.Hc(Gh)&&(e.Mc(Gh),e.Fc(Lf)))}function Mfn(t,e,n){mr(n,"Self-Loop ordering",1),ys(xu(Wi(Wi(ec(new kn(null,new Tn(e.b,16)),new cF),new KY),new YY),new XY),new Cm(t)),or(n)}function QD(t,e,n,r){var s,o;for(s=e;s0&&(s.b+=e),s}function Uz(t,e){var n,r,s;for(s=new Da,r=t.Kc();r.Ob();)n=u(r.Pb(),37),wC(n,0,s.b),s.b+=n.f.b+e,s.a=b.Math.max(s.a,n.f.a);return s.a>0&&(s.a+=e),s}function Ese(t){var e,n,r;for(r=Ti,n=new S(t.a);n.a>16==6?t.Cb.ih(t,5,o1,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Pfn(t){k8();var e=t.e;if(e&&e.stack){var n=e.stack,r=e+` +`,Bgt=function(i,a){return HW(i,a)},QVe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},bjt=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},vjt=function(i,a){return dIe(i,a)},ZVe=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,vjt(i,a)},JVe=function(i,a,f){const p=i.append("g"),v=fT();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width*a.taskCount+f.diagramMarginX*(a.taskCount-1),v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,Bgt(p,v),mjt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let wjt=-1;const tUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");wjt++;const m=300+5*30;v.append("line").attr("id","task"+wjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),QVe(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=fT();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,Bgt(v,b);let E=a.x+14;a.people.forEach(_=>{const L=a.actors[_].color,N={cx:E,cy:a.y,r:7,fill:L,stroke:"#000",title:_,pos:a.actors[_].position};bjt(v,N),E+=10}),mjt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},eUe=function(i,a){bNt(i,a)},mjt=function(){function i(v,m,b,E,_,L,N,B){const j=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("font-color",B).style("text-anchor","middle").text(v);p(j,N)}function a(v,m,b,E,_,L,N,B,j){const{taskFontSize:R,taskFontFamily:z}=B,K=v.split(//gi);for(let it=0;it{const v=N5[p].color,m={cx:20,cy:f,r:7,fill:v,stroke:"#000",pos:N5[p].position};VP.drawCircle(i,m);const b={x:40,y:f+7,fill:"#666",text:p,textMargin:a.boxTextMargin|5};VP.drawText(i,b),f+=20})}const qK=Le().journey,ST=qK.leftMargin,iUe=function(i,a,f,p){const v=Le().journey,m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body");rv.init();const _=E.select("#"+a);VP.initGraphics(_);const L=p.db.getTasks(),N=p.db.getDiagramTitle(),B=p.db.getActors();for(const st in N5)delete N5[st];let j=0;B.forEach(st=>{N5[st]={color:v.actorColours[j%v.actorColours.length],position:j},j++}),rUe(_),rv.insert(0,0,ST,Object.keys(N5).length*50),sUe(_,L,0);const R=rv.getBounds();N&&_.append("text").text(N).attr("x",ST).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const z=R.stopy-R.starty+2*v.diagramMarginY,K=ST+R.stopx+2*v.diagramMarginX;og(_,z,K,v.useMaxWidth),_.append("line").attr("x1",ST).attr("y1",v.height*4).attr("x2",K-ST-4).attr("y2",v.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const it=N?70:0;_.attr("viewBox",`${R.startx} -25 ${K} ${z+it}`),_.attr("preserveAspectRatio","xMinYMin meet"),_.attr("height",z+it+25)},rv={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,a,f,p){i[a]===void 0?i[a]=f:i[a]=p(f,i[a])},updateBounds:function(i,a,f,p){const v=Le().journey,m=this;let b=0;function E(_){return function(N){b++;const B=m.sequenceItems.length-b+1;m.updateVal(N,"starty",a-B*v.boxMargin,Math.min),m.updateVal(N,"stopy",p+B*v.boxMargin,Math.max),m.updateVal(rv.data,"startx",i-B*v.boxMargin,Math.min),m.updateVal(rv.data,"stopx",f+B*v.boxMargin,Math.max),_!=="activation"&&(m.updateVal(N,"startx",i-B*v.boxMargin,Math.min),m.updateVal(N,"stopx",f+B*v.boxMargin,Math.max),m.updateVal(rv.data,"starty",a-B*v.boxMargin,Math.min),m.updateVal(rv.data,"stopy",p+B*v.boxMargin,Math.max))}}this.sequenceItems.forEach(E())},insert:function(i,a,f,p){const v=Math.min(i,f),m=Math.max(i,f),b=Math.min(a,p),E=Math.max(a,p);this.updateVal(rv.data,"startx",v,Math.min),this.updateVal(rv.data,"starty",b,Math.min),this.updateVal(rv.data,"stopx",m,Math.max),this.updateVal(rv.data,"stopy",E,Math.max),this.updateBounds(v,b,m,E)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Rgt=qK.sectionFills,yjt=qK.sectionColours,sUe=function(i,a,f){const p=Le().journey;let v="";const m=p.height*2+p.diagramMarginY,b=f+m;let E=0,_="#CCC",L="black",N=0;for(const[B,j]of a.entries()){if(v!==j.section){_=Rgt[E%Rgt.length],N=E%Rgt.length,L=yjt[E%yjt.length];let z=0;const K=j.section;for(let st=B;st(N5[K]&&(z[K]=N5[K]),z),{});j.x=B*p.taskMargin+B*p.width+ST,j.y=b,j.width=p.diagramMarginX,j.height=p.diagramMarginY,j.colour=L,j.fill=_,j.num=N,j.actors=R,VP.drawTask(i,j,p),rv.insert(j.x,j.y,j.x+j.width+p.taskMargin,300+5*30)}},xjt={setConf:nUe,draw:iUe},aUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:qVe,db:pjt,renderer:xjt,styles:XVe,init:i=>{xjt.setConf(i.journey),pjt.clear()}}},Symbol.toStringTag,{value:"Module"})),oUe=(i,a,f)=>{const{parentById:p}=f,v=new Set;let m=i;for(;m;){if(v.add(m),m===a)return m;m=p[m]}for(m=a;m;){if(v.has(m))return m;m=p[m]}return"root"};function HK(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var kjt={exports:{}};(function(i,a){(function(f){i.exports=f()})(function(){return function(){function f(p,v,m){function b(L,N){if(!v[L]){if(!p[L]){var B=typeof HK=="function"&&HK;if(!N&&B)return B(L,!0);if(E)return E(L,!0);var j=new Error("Cannot find module '"+L+"'");throw j.code="MODULE_NOT_FOUND",j}var R=v[L]={exports:{}};p[L][0].call(R.exports,function(z){var K=p[L][1][z];return b(K||z)},R,R.exports,f,p,v,m)}return v[L].exports}for(var E=typeof HK=="function"&&HK,_=0;_0&&arguments[0]!==void 0?arguments[0]:{},j=B.defaultLayoutOptions,R=j===void 0?{}:j,z=B.algorithms,K=z===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:z,it=B.workerFactory,st=B.workerUrl;if(b(this,L),this.defaultLayoutOptions=R,this.initialized=!1,typeof st>"u"&&typeof it>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var ut=it;typeof st<"u"&&typeof it>"u"&&(ut=function(yt){return new Worker(yt)});var bt=ut(st);if(typeof bt.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new _(bt),this.worker.postMessage({cmd:"register",algorithms:K}).then(function(mt){return N.initialized=!0}).catch(console.err)}return m(L,[{key:"layout",value:function(B){var j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},R=j.layoutOptions,z=R===void 0?this.defaultLayoutOptions:R,K=j.logging,it=K===void 0?!1:K,st=j.measureExecutionTime,ut=st===void 0?!1:st;return B?this.worker.postMessage({cmd:"layout",graph:B,layoutOptions:z,options:{logging:it,measureExecutionTime:ut}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),L}();v.default=E;var _=function(){function L(N){var B=this;if(b(this,L),N===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=N,this.worker.onmessage=function(j){setTimeout(function(){B.receive(B,j)},0)}}return m(L,[{key:"postMessage",value:function(B){var j=this.id||0;this.id=j+1,B.id=j;var R=this;return new Promise(function(z,K){R.resolvers[j]=function(it,st){it?(R.convertGwtStyleError(it),K(it)):z(st)},R.worker.postMessage(B)})}},{key:"receive",value:function(B,j){var R=j.data,z=B.resolvers[R.id];z&&(delete B.resolvers[R.id],R.error?z(R.error):z(null,R.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(B){if(B){var j=B.__java$exception;j&&(j.cause&&j.cause.backingJsObject&&(B.cause=j.cause.backingJsObject,this.convertGwtStyleError(B.cause)),delete B.__java$exception)}}}]),L}()},{}],2:[function(f,p,v){(function(m){(function(){var b;typeof window<"u"?b=window:typeof m<"u"?b=m:typeof self<"u"&&(b=self);var E;function _(){}function L(){}function N(){}function B(){}function j(){}function R(){}function z(){}function K(){}function it(){}function st(){}function ut(){}function bt(){}function mt(){}function yt(){}function dt(){}function ht(){}function wt(){}function X(){}function pt(){}function U(){}function xt(){}function nt(){}function Ot(){}function Nt(){}function qt(){}function Ct(){}function Z(){}function Tt(){}function Ht(){}function It(){}function Ft(){}function ke(){}function pn(){}function Me(){}function ve(){}function Ge(){}function Ke(){}function we(){}function _e(){}function $t(){}function re(){}function ie(){}function Oe(){}function oe(){}function Ne(){}function me(){}function cn(){}function li(){}function ya(){}function da(){}function Oo(){}function ds(){}function Dr(){}function nr(){}function di(){}function Ee(){}function Yn(){}function He(){}function Ti(){}function gn(){}function ks(){}function qa(){}function La(){}function Gs(){}function No(){}function vs(){}function nu(){}function $s(){}function Lu(){}function fm(){}function av(){}function Uu(){}function Zl(){}function Pa(){}function Al(){}function ua(){}function bc(){}function Cc(){}function ga(){}function Ma(){}function Ha(){}function Ll(){}function _c(){}function ov(){}function Jl(){}function Z1(){}function Fd(){}function J1(){}function Bd(){}function E0(){}function Bi(){}function on(){}function kr(){}function Ei(){}function Jo(){}function vc(){}function tf(){}function Oc(){}function ef(){}function nf(){}function Xi(){}function Es(){}function xa(){}function xi(){}function Wc(){}function Ce(){}function gp(){}function Be(){}function Ff(){}function dg(){}function dm(){}function pk(){}function x3(){}function Ml(){}function T0(){}function cv(){}function F5(){}function jb(){}function B5(){}function l1(){}function td(){}function ed(){}function R5(){}function uv(){}function j5(){}function pp(){}function $5(){}function k3(){}function gm(){}function gg(){}function wL(){}function bl(){}function WP(){}function Sc(){}function QK(){}function $b(){}function ZK(){}function IT(){}function JK(){}function KP(){}function Bf(){}function pm(){}function mL(){}function YP(){}function bp(){}function bm(){}function tY(){}function zb(){}function eY(){}function nY(){}function z5(){}function DT(){}function XP(){}function bk(){}function rY(){}function vk(){}function iY(){}function sY(){}function aY(){}function oY(){}function cY(){}function uY(){}function lY(){}function hY(){}function fY(){}function dY(){}function gY(){}function yL(){}function pY(){}function bY(){}function OT(){}function QP(){}function q5(){}function vY(){}function wY(){}function mY(){}function yY(){}function xY(){}function NT(){}function xL(){}function ZP(){}function E3(){}function T3(){}function kY(){}function rf(){}function H5(){}function EY(){}function wk(){}function Rd(){}function TY(){}function CY(){}function _Y(){}function SY(){}function PT(){}function kL(){}function JP(){}function EL(){}function G5(){}function AY(){}function tF(){}function eF(){}function LY(){}function MY(){}function IY(){}function DY(){}function OY(){}function NY(){}function jd(){}function lv(){}function PY(){}function nF(){}function rF(){}function FY(){}function C3(){}function mk(){}function TL(){}function vm(){}function yk(){}function BY(){}function FT(){}function nd(){}function iF(){}function CL(){}function xk(){}function _L(){}function sF(){}function RY(){}function SL(){}function jY(){}function $Y(){}function aF(){}function V5(){}function oF(){}function U5(){}function zY(){}function AL(){}function qY(){}function HY(){}function GY(){}function VY(){}function cF(){}function UY(){}function WY(){}function KY(){}function uF(){}function YY(){}function XY(){}function QY(){}function lF(){}function ZY(){}function JY(){}function hF(){}function fF(){}function dF(){}function tX(){}function eX(){}function kk(){}function W5(){}function BT(){}function nX(){}function LL(){}function RT(){}function ML(){}function gF(){}function pF(){}function rX(){}function iX(){}function sX(){}function bF(){}function vF(){}function aX(){}function oX(){}function cX(){}function uX(){}function lX(){}function wF(){}function hX(){}function fX(){}function dX(){}function gX(){}function mF(){}function jT(){}function pX(){}function bX(){}function yF(){}function vX(){}function wX(){}function mX(){}function yX(){}function xX(){}function kX(){}function xF(){}function EX(){}function kF(){}function TX(){}function CX(){}function _X(){}function $T(){}function SX(){}function zT(){}function AX(){}function EF(){}function TF(){}function CF(){}function _F(){}function hv(){}function SF(){}function AF(){}function LF(){}function MF(){}function LX(){}function K5(){}function qT(){}function _3(){}function MX(){}function IX(){}function HT(){}function DX(){}function OX(){}function NX(){}function PX(){}function FX(){}function BX(){}function RX(){}function jX(){}function $X(){}function zX(){}function qX(){}function IL(){}function IF(){}function HX(){}function GX(){}function VX(){}function DF(){}function UX(){}function WX(){}function KX(){}function YX(){}function XX(){}function QX(){}function OF(){}function NF(){}function ZX(){}function PF(){}function FF(){}function JX(){}function tQ(){}function eQ(){}function DL(){}function nQ(){}function Ek(){}function rQ(){}function iQ(){}function sQ(){}function BF(){}function aQ(){}function oQ(){}function cQ(){}function uQ(){}function lQ(){}function hQ(){}function fQ(){}function dQ(){}function gQ(){}function pQ(){}function bQ(){}function vQ(){}function Y5(){}function RF(){}function wQ(){}function mQ(){}function yQ(){}function jF(){}function xQ(){}function GT(){}function kQ(){}function EQ(){}function TQ(){}function CQ(){}function _Q(){}function SQ(){}function AQ(){}function LQ(){}function MQ(){}function IQ(){}function X5(){}function DQ(){}function OQ(){}function NQ(){}function PQ(){}function FQ(){}function BQ(){}function RQ(){}function jQ(){}function VT(){}function $Q(){}function zQ(){}function qQ(){}function HQ(){}function GQ(){}function VQ(){}function UQ(){}function WQ(){}function Q5(){}function $F(){}function KQ(){}function OL(){}function YQ(){}function XQ(){}function QQ(){}function ZQ(){}function JQ(){}function tZ(){}function eZ(){}function zF(){}function nZ(){}function qF(){}function rZ(){}function HF(){}function GF(){}function VF(){}function iZ(){}function sZ(){}function UT(){}function NL(){}function WT(){}function aZ(){}function oZ(){}function PL(){}function cZ(){}function uZ(){}function UF(){}function lZ(){}function hZ(){}function fZ(){}function dZ(){}function gZ(){}function pZ(){}function bZ(){}function vZ(){}function wZ(){}function mZ(){}function pg(){}function yZ(){}function wm(){}function WF(){}function xZ(){}function kZ(){}function EZ(){}function TZ(){}function CZ(){}function _Z(){}function SZ(){}function AZ(){}function LZ(){}function Ac(){}function MZ(){}function KT(){}function tc(){}function Kc(){}function zi(){}function FL(){}function IZ(){}function DZ(){}function OZ(){}function Z5(){}function mm(){}function Ue(){}function NZ(){}function PZ(){}function FZ(){}function BZ(){}function RZ(){}function KF(){}function jZ(){}function $Z(){}function BL(){}function zZ(){}function Wu(){}function Mu(){}function qZ(){}function HZ(){}function GZ(){}function ym(){}function fv(){}function vp(){}function rd(){}function J5(){}function YT(){}function Tk(){}function YF(){}function VZ(){}function Ck(){}function XF(){}function UZ(){}function XT(){}function tx(){}function ex(){}function wp(){}function QF(){}function _k(){}function ZF(){}function JF(){}function nx(){}function qb(){}function C0(){}function mp(){}function S3(){}function Sk(){}function QT(){}function tB(){}function WZ(){}function eB(){}function nB(){}function rB(){}function Ak(){}function iB(){}function sB(){}function KZ(){}function Lk(){}function Mk(){}function xm(){}function RL(){}function YZ(){}function XZ(){}function QZ(){}function ZZ(){}function JZ(){}function tJ(){}function eJ(){}function nJ(){}function aB(){}function rJ(){}function iJ(){}function sJ(){}function oB(){}function Ik(){}function ZT(){}function cB(){}function aJ(){}function uB(){}function lB(){}function oJ(){}function JT(){}function km(){}function hB(){}function fB(){}function cJ(){}function uJ(){}function t9(){}function dB(){}function gB(){}function uc(){}function lJ(){}function pB(){}function e9(){}function hJ(){}function fJ(){}function n9(){}function bB(){}function r9(){}function i9(){}function Rf(){}function jL(){}function $L(){}function rx(){}function dJ(){}function gJ(){}function pJ(){}function bJ(){}function Em(){}function vB(){}function ix(){}function h1(){}function wB(){}function mB(){}function yB(){}function xB(){}function kB(){}function EB(){}function jf(){}function hu(){}function vJ(){}function wJ(){}function mJ(){}function fu(){}function s9(){}function TB(){}function CB(){}function sx(){}function yJ(){}function Dk(){}function xJ(){}function _B(){}function kJ(){}function EJ(){}function a9(){}function SB(){}function zL(){}function o9(){}function TJ(){}function CJ(){}function qL(){}function c9(){}function f1(){}function Ok(){}function _J(){}function Nk(){}function HL(){}function Hb(){}function u9(){}function GL(){}function $f(){}function l9(){}function d1(){}function g1(){}function SJ(){}function AJ(){}function A3(){}function Pk(){}function Fk(){}function h9(){}function LJ(){}function ax(){}function VL(){}function AB(){}function MJ(){}function f9(){I9()}function IJ(){Sit()}function LB(){i_()}function UL(){Kz()}function DJ(){P4t()}function d9(){Zf()}function OJ(){U3t()}function NJ(){JI()}function PJ(){wM()}function FJ(){vM()}function BJ(){GM()}function MB(){yGt()}function RJ(){Xx()}function jJ(){LR()}function $J(){IJt()}function IB(){Gee()}function zJ(){ute()}function qJ(){_Qt()}function g9(){J8()}function HJ(){Zp()}function GJ(){Vee()}function VJ(){mZt()}function UJ(){Axt()}function WJ(){Dse()}function KJ(){SQt()}function DB(){Te()}function YJ(){CQt()}function OB(){Uee()}function XJ(){Yne()}function WL(){LQt()}function QJ(){gte()}function NB(){xGt()}function ZJ(){b5t()}function PB(){ay()}function JJ(){mne()}function FB(){rD()}function BB(){nat()}function RB(){ust()}function KL(){hw()}function L3(){fyt()}function p9(){AQt()}function id(){$ue()}function jB(){d5t()}function Bk(){Kst()}function YL(){O$()}function ttt(){eq()}function yp(){ci()}function $B(){bz()}function zB(){y3t()}function qB(){yq()}function th(){pKt()}function XL(){hit()}function HB(){txt()}function Rk(t){On(t)}function b9(t){this.a=t}function jk(t){this.a=t}function GB(t){this.a=t}function ox(t){this.a=t}function dv(t){this.a=t}function $k(t){this.a=t}function VB(t){this.a=t}function ett(t){this.a=t}function QL(t){this.a=t}function M3(t){this.a=t}function ZL(t){this.a=t}function v9(t){this.a=t}function ntt(t){this.a=t}function w9(t){this.a=t}function m9(t){this.a=t}function cx(t){this.a=t}function JL(t){this.a=t}function tM(t){this.a=t}function rtt(t){this.a=t}function itt(t){this.a=t}function stt(t){this.a=t}function UB(t){this.b=t}function att(t){this.c=t}function ott(t){this.a=t}function ctt(t){this.a=t}function utt(t){this.a=t}function ltt(t){this.a=t}function htt(t){this.a=t}function ftt(t){this.a=t}function dtt(t){this.a=t}function gtt(t){this.a=t}function ux(t){this.a=t}function ptt(t){this.a=t}function zk(t){this.a=t}function kh(t){this.a=t}function btt(t){this.a=t}function lx(t){this.a=t}function qk(t){this.a=t}function y9(t){this.a=t}function Hk(t){this.a=t}function bg(){this.a=[]}function vtt(t,e){t.a=e}function ept(t,e){t.a=e}function npt(t,e){t.b=e}function rpt(t,e){t.b=e}function ipt(t,e){t.b=e}function eM(t,e){t.j=e}function spt(t,e){t.g=e}function apt(t,e){t.i=e}function wtt(t,e){t.c=e}function p1(t,e){t.d=e}function mtt(t,e){t.d=e}function opt(t,e){t.c=e}function _0(t,e){t.k=e}function ytt(t,e){t.c=e}function WB(t,e){t.c=e}function KB(t,e){t.a=e}function xtt(t,e){t.a=e}function cpt(t,e){t.f=e}function upt(t,e){t.a=e}function gv(t,e){t.b=e}function nM(t,e){t.d=e}function x9(t,e){t.i=e}function YB(t,e){t.o=e}function lpt(t,e){t.r=e}function hpt(t,e){t.a=e}function XB(t,e){t.b=e}function pv(t,e){t.e=e}function ktt(t,e){t.f=e}function k9(t,e){t.g=e}function hx(t,e){t.e=e}function fpt(t,e){t.f=e}function Gk(t,e){t.f=e}function Ett(t,e){t.n=e}function vg(t,e){t.a=e}function dpt(t,e){t.a=e}function I3(t,e){t.c=e}function Ttt(t,e){t.c=e}function Ctt(t,e){t.d=e}function QB(t,e){t.e=e}function ZB(t,e){t.g=e}function _tt(t,e){t.a=e}function Vk(t,e){t.c=e}function E9(t,e){t.d=e}function gpt(t,e){t.e=e}function Stt(t,e){t.f=e}function Att(t,e){t.j=e}function Ltt(t,e){t.a=e}function ppt(t,e){t.b=e}function wc(t,e){t.a=e}function JB(t){t.b=t.a}function Mtt(t){t.c=t.d.d}function fx(t){this.d=t}function wg(t){this.a=t}function Tm(t){this.a=t}function rM(t){this.a=t}function b1(t){this.a=t}function dx(t){this.a=t}function Itt(t){this.a=t}function tR(t){this.a=t}function D3(t){this.a=t}function iM(t){this.a=t}function Cm(t){this.a=t}function eR(t){this.a=t}function v1(t){this.a=t}function y(t){this.a=t}function g(t){this.a=t}function x(t){this.b=t}function T(t){this.b=t}function A(t){this.b=t}function D(t){this.a=t}function O(t){this.a=t}function $(t){this.a=t}function q(t){this.c=t}function S(t){this.c=t}function G(t){this.c=t}function W(t){this.a=t}function et(t){this.a=t}function at(t){this.a=t}function lt(t){this.a=t}function ft(t){this.a=t}function At(t){this.a=t}function kt(t){this.a=t}function Mt(t){this.a=t}function Dt(t){this.a=t}function jt(t){this.a=t}function Zt(t){this.a=t}function Kt(t){this.a=t}function zt(t){this.a=t}function ee(t){this.a=t}function Vt(t){this.a=t}function fe(t){this.a=t}function ge(t){this.a=t}function ne(t){this.a=t}function Pe(t){this.a=t}function pe(t){this.a=t}function bn(t){this.a=t}function ze(t){this.a=t}function Ve(t){this.a=t}function En(t){this.a=t}function Dn(t){this.a=t}function Kn(t){this.a=t}function Sn(t){this.a=t}function Wn(t){this.a=t}function rr(t){this.a=t}function vr(t){this.a=t}function ur(t){this.a=t}function tr(t){this.a=t}function wn(t){this.a=t}function gr(t){this.a=t}function fr(t){this.a=t}function Jr(t){this.a=t}function wi(t){this.a=t}function Ks(t){this.a=t}function ka(t){this.a=t}function Ci(t){this.a=t}function hi(t){this.a=t}function gs(t){this.a=t}function qi(t){this.a=t}function Si(t){this.a=t}function Ui(t){this.a=t}function Ga(t){this.e=t}function Ys(t){this.a=t}function zs(t){this.a=t}function Er(t){this.a=t}function Qt(t){this.a=t}function jn(t){this.a=t}function _r(t){this.a=t}function ir(t){this.a=t}function sr(t){this.a=t}function Ia(t){this.a=t}function $r(t){this.a=t}function Ki(t){this.a=t}function Po(t){this.a=t}function Nc(t){this.a=t}function Za(t){this.a=t}function mc(t){this.a=t}function Ea(t){this.a=t}function Ja(t){this.a=t}function vl(t){this.a=t}function zf(t){this.a=t}function xp(t){this.a=t}function kp(t){this.a=t}function qf(t){this.a=t}function mg(t){this.a=t}function sd(t){this.a=t}function bv(t){this.a=t}function _m(t){this.a=t}function gx(t){this.a=t}function O3(t){this.a=t}function px(t){this.a=t}function T9(t){this.a=t}function N3(t){this.a=t}function $d(t){this.a=t}function w1(t){this.a=t}function zd(t){this.a=t}function C9(t){this.a=t}function Gb(t){this.a=t}function nR(t){this.a=t}function Dtt(t){this.a=t}function Ott(t){this.a=t}function Ntt(t){this.a=t}function Ptt(t){this.a=t}function Ftt(t){this.a=t}function Btt(t){this.a=t}function Rtt(t){this.a=t}function Uk(t){this.a=t}function sM(t){this.a=t}function _9(t){this.a=t}function rR(t){this.a=t}function iR(t){this.a=t}function jtt(t){this.a=t}function Ep(t){this.a=t}function aM(t){this.a=t}function sR(t){this.a=t}function Wk(t){this.c=t}function Tp(t){this.b=t}function $tt(t){this.a=t}function l$t(t){this.a=t}function h$t(t){this.a=t}function f$t(t){this.a=t}function d$t(t){this.a=t}function g$t(t){this.a=t}function p$t(t){this.a=t}function b$t(t){this.a=t}function v$t(t){this.a=t}function w$t(t){this.a=t}function m$t(t){this.a=t}function y$t(t){this.a=t}function x$t(t){this.a=t}function k$t(t){this.a=t}function E$t(t){this.a=t}function T$t(t){this.a=t}function C$t(t){this.a=t}function _$t(t){this.a=t}function S$t(t){this.a=t}function A$t(t){this.a=t}function L$t(t){this.a=t}function M$t(t){this.a=t}function I$t(t){this.a=t}function D$t(t){this.a=t}function Cp(t){this.a=t}function bx(t){this.a=t}function O$t(t){this.a=t}function N$t(t){this.a=t}function P$t(t){this.a=t}function F$t(t){this.a=t}function B$t(t){this.a=t}function R$t(t){this.a=t}function j$t(t){this.a=t}function $$t(t){this.a=t}function z$t(t){this.a=t}function q$t(t){this.a=t}function H$t(t){this.a=t}function G$t(t){this.a=t}function V$t(t){this.a=t}function U$t(t){this.a=t}function W$t(t){this.a=t}function K$t(t){this.a=t}function aR(t){this.a=t}function Y$t(t){this.a=t}function X$t(t){this.a=t}function Q$t(t){this.a=t}function Z$t(t){this.a=t}function J$t(t){this.a=t}function tzt(t){this.a=t}function ezt(t){this.a=t}function nzt(t){this.a=t}function rzt(t){this.a=t}function izt(t){this.a=t}function szt(t){this.a=t}function azt(t){this.a=t}function ozt(t){this.a=t}function czt(t){this.a=t}function uzt(t){this.a=t}function lzt(t){this.a=t}function hzt(t){this.a=t}function fzt(t){this.a=t}function dzt(t){this.a=t}function gzt(t){this.a=t}function pzt(t){this.a=t}function bzt(t){this.a=t}function vzt(t){this.a=t}function wzt(t){this.a=t}function mzt(t){this.a=t}function yzt(t){this.a=t}function xzt(t){this.a=t}function kzt(t){this.a=t}function bpt(t){this.a=t}function Gi(t){this.b=t}function Ezt(t){this.f=t}function vpt(t){this.a=t}function Tzt(t){this.a=t}function Czt(t){this.a=t}function _zt(t){this.a=t}function Szt(t){this.a=t}function Azt(t){this.a=t}function Lzt(t){this.a=t}function Mzt(t){this.a=t}function Izt(t){this.a=t}function oM(t){this.a=t}function Dzt(t){this.a=t}function Ozt(t){this.b=t}function wpt(t){this.c=t}function oR(t){this.e=t}function Nzt(t){this.a=t}function cR(t){this.a=t}function uR(t){this.a=t}function ztt(t){this.a=t}function Pzt(t){this.a=t}function Fzt(t){this.d=t}function mpt(t){this.a=t}function ypt(t){this.a=t}function vv(t){this.e=t}function KWe(){this.a=0}function P3(){pUt(this)}function le(){Yet(this)}function Cr(){Yu(this)}function qtt(){mXt(this)}function Bzt(){}function wv(){this.c=tLt}function YWe(t,e){e.Wb(t)}function Rzt(t,e){t.b+=e}function jzt(t){t.b=new set}function rt(t){return t.e}function XWe(t){return t.a}function QWe(t){return t.a}function ZWe(t){return t.a}function JWe(t){return t.a}function tKe(t){return t.a}function eKe(){return null}function nKe(){return null}function rKe(){abt(),g5n()}function iKe(t){t.b.tf(t.e)}function S9(t,e){t.b=e-t.b}function A9(t,e){t.a=e-t.a}function $zt(t,e){e.ad(t.a)}function sKe(t,e){Fs(e,t)}function aKe(t,e,n){t.Od(n,e)}function cM(t,e){t.e=e,e.b=t}function xpt(t){hd(),this.a=t}function zzt(t){hd(),this.a=t}function qzt(t){hd(),this.a=t}function kpt(t){Gm(),this.a=t}function Hzt(t){T8(),kut.be(t)}function Vb(){ZUt.call(this)}function Ept(){ZUt.call(this)}function Tpt(){Vb.call(this)}function Htt(){Vb.call(this)}function Gzt(){Vb.call(this)}function uM(){Vb.call(this)}function Iu(){Vb.call(this)}function L9(){Vb.call(this)}function Or(){Vb.call(this)}function eh(){Vb.call(this)}function Vzt(){Vb.call(this)}function lc(){Vb.call(this)}function Uzt(){Vb.call(this)}function Wzt(){this.a=this}function lR(){this.Bb|=256}function Kzt(){this.b=new XVt}function Cpt(){Cpt=Z,new Cr}function _pt(){Tpt.call(this)}function Yzt(t,e){t.length=e}function hR(t,e){ue(t.a,e)}function oKe(t,e){B4t(t.c,e)}function cKe(t,e){Ns(t.b,e)}function uKe(t,e){qz(t.a,e)}function lKe(t,e){Fit(t.a,e)}function Kk(t,e){mi(t.e,e)}function vx(t){iq(t.c,t.b)}function hKe(t,e){t.kc().Nb(e)}function Spt(t){this.a=uln(t)}function qs(){this.a=new Cr}function Xzt(){this.a=new Cr}function fR(){this.a=new le}function Gtt(){this.a=new le}function Apt(){this.a=new le}function Eh(){this.a=new av}function Ub(){this.a=new SJt}function Lpt(){this.a=new F5}function Mpt(){this.a=new fGt}function Qzt(){this.a=new tZt}function Ipt(){this.a=new bQt}function Dpt(){this.a=new $Wt}function Zzt(){this.a=new le}function Opt(){this.a=new le}function Jzt(){this.a=new le}function tqt(){this.a=new le}function eqt(){this.d=new le}function nqt(){this.a=new qs}function rqt(){this.a=new Cr}function iqt(){this.b=new Cr}function sqt(){this.b=new le}function Npt(){this.e=new le}function aqt(){this.d=new le}function oqt(){this.a=new HJ}function cqt(){le.call(this)}function Ppt(){fR.call(this)}function uqt(){xj.call(this)}function lqt(){Opt.call(this)}function Vtt(){M9.call(this)}function M9(){Bzt.call(this)}function wx(){Bzt.call(this)}function Fpt(){wx.call(this)}function hqt(){WXt.call(this)}function fqt(){WXt.call(this)}function dqt(){Hpt.call(this)}function gqt(){Hpt.call(this)}function pqt(){Hpt.call(this)}function bqt(){Gpt.call(this)}function Du(){Qi.call(this)}function Bpt(){ym.call(this)}function Rpt(){ym.call(this)}function vqt(){Oqt.call(this)}function wqt(){Oqt.call(this)}function mqt(){Cr.call(this)}function yqt(){Cr.call(this)}function xqt(){Cr.call(this)}function kqt(){qs.call(this)}function Utt(){zee.call(this)}function Eqt(){lR.call(this)}function Wtt(){g2t.call(this)}function Ktt(){g2t.call(this)}function jpt(){Cr.call(this)}function Ytt(){Cr.call(this)}function Tqt(){Cr.call(this)}function $pt(){_k.call(this)}function Cqt(){_k.call(this)}function _qt(){$pt.call(this)}function Sqt(){VL.call(this)}function Aqt(t){fee.call(this,t)}function Lqt(t){fee.call(this,t)}function zpt(t){QL.call(this,t)}function qpt(t){nGt.call(this,t)}function fKe(t){qpt.call(this,t)}function dKe(t){nGt.call(this,t)}function Yk(){this.a=new Qi}function Hpt(){this.a=new qs}function Gpt(){this.a=new Cr}function Mqt(){this.a=new le}function Iqt(){this.j=new le}function Vpt(){this.a=new VF}function Dqt(){this.a=new SHt}function Oqt(){this.a=new QF}function Xtt(){Xtt=Z,but=new Qqt}function Qtt(){Qtt=Z,put=new Xqt}function I9(){I9=Z,gut=new L}function dR(){dR=Z,mut=new XUt}function gKe(t){qpt.call(this,t)}function pKe(t){qpt.call(this,t)}function Nqt(t){Lrt.call(this,t)}function Pqt(t){Lrt.call(this,t)}function Fqt(t){cKt.call(this,t)}function Ztt(t){P0n.call(this,t)}function mv(t){Mm.call(this,t)}function D9(t){CR.call(this,t)}function Upt(t){CR.call(this,t)}function Bqt(t){CR.call(this,t)}function Go(t){kYt.call(this,t)}function Rqt(t){Go.call(this,t)}function mx(){Hk.call(this,{})}function gR(t){u8(),this.a=t}function O9(t){t.b=null,t.c=0}function bKe(t,e){t.e=e,jce(t,e)}function vKe(t,e){t.a=e,xgn(t)}function Jtt(t,e,n){t.a[e.g]=n}function wKe(t,e,n){B1n(n,t,e)}function mKe(t,e){GQe(e.i,t.n)}function jqt(t,e){Vcn(t).td(e)}function yKe(t,e){return t*t/e}function $qt(t,e){return t.g-e.g}function xKe(t){return new y9(t)}function kKe(t){return new Hm(t)}function pR(t){Go.call(this,t)}function mo(t){Go.call(this,t)}function zqt(t){Go.call(this,t)}function tet(t){kYt.call(this,t)}function eet(t){lyt(),this.a=t}function qqt(t){gKt(),this.a=t}function Sm(t){Ont(),this.f=t}function net(t){Ont(),this.f=t}function Xk(t){Go.call(this,t)}function Pn(t){Go.call(this,t)}function Fo(t){Go.call(this,t)}function Hqt(t){Go.call(this,t)}function yx(t){Go.call(this,t)}function je(t){return On(t),t}function Xt(t){return On(t),t}function lM(t){return On(t),t}function Wpt(t){return On(t),t}function EKe(t){return On(t),t}function N9(t){return t.b==t.c}function Am(t){return!!t&&t.b}function TKe(t){return!!t&&t.k}function CKe(t){return!!t&&t.j}function wl(t){On(t),this.a=t}function Kpt(t){return l2(t),t}function P9(t){awt(t,t.length)}function yg(t){Go.call(this,t)}function ad(t){Go.call(this,t)}function ret(t){Go.call(this,t)}function F3(t){Go.call(this,t)}function F9(t){Go.call(this,t)}function Fr(t){Go.call(this,t)}function iet(t){D2t.call(this,t,0)}function set(){$wt.call(this,12,3)}function Ypt(){Ypt=Z,X8t=new pt}function Gqt(){Gqt=Z,Y8t=new _}function bR(){bR=Z,sS=new mt}function Vqt(){Vqt=Z,yge=new dt}function Uqt(){throw rt(new Or)}function Xpt(){throw rt(new Or)}function Wqt(){throw rt(new Or)}function _Ke(){throw rt(new Or)}function SKe(){throw rt(new Or)}function AKe(){throw rt(new Or)}function aet(){this.a=Br(Ar(Ka))}function xx(t){hd(),this.a=Ar(t)}function Kqt(t,e){t.Td(e),e.Sd(t)}function LKe(t,e){t.a.ec().Mc(e)}function MKe(t,e,n){t.c.lf(e,n)}function Qpt(t){mo.call(this,t)}function od(t){Pn.call(this,t)}function xg(){dx.call(this,"")}function B9(){dx.call(this,"")}function _p(){dx.call(this,"")}function Lm(){dx.call(this,"")}function Zpt(t){mo.call(this,t)}function Qk(t){T.call(this,t)}function oet(t){fj.call(this,t)}function Yqt(t){Qk.call(this,t)}function Xqt(){w9.call(this,null)}function Qqt(){w9.call(this,null)}function vR(){vR=Z,T8()}function Zqt(){Zqt=Z,Mge=ldn()}function Jqt(t){return t.a?t.b:0}function IKe(t){return t.a?t.b:0}function DKe(t,e){return t.a-e.a}function OKe(t,e){return t.a-e.a}function NKe(t,e){return t.a-e.a}function wR(t,e){return Mmt(t,e)}function ot(t,e){return mQt(t,e)}function PKe(t,e){return e in t.a}function tHt(t,e){return t.f=e,t}function FKe(t,e){return t.b=e,t}function eHt(t,e){return t.c=e,t}function BKe(t,e){return t.g=e,t}function Jpt(t,e){return t.a=e,t}function tbt(t,e){return t.f=e,t}function RKe(t,e){return t.k=e,t}function ebt(t,e){return t.a=e,t}function jKe(t,e){return t.e=e,t}function nbt(t,e){return t.e=e,t}function $Ke(t,e){return t.f=e,t}function zKe(t,e){t.b=!0,t.d=e}function qKe(t,e){t.b=new yo(e)}function HKe(t,e,n){e.td(t.a[n])}function GKe(t,e,n){e.we(t.a[n])}function VKe(t,e){return t.b-e.b}function UKe(t,e){return t.g-e.g}function WKe(t,e){return t.s-e.s}function KKe(t,e){return t?0:e-1}function nHt(t,e){return t?0:e-1}function YKe(t,e){return t?e-1:0}function XKe(t,e){return e.Yf(t)}function yv(t,e){return t.b=e,t}function mR(t,e){return t.a=e,t}function xv(t,e){return t.c=e,t}function kv(t,e){return t.d=e,t}function Ev(t,e){return t.e=e,t}function rbt(t,e){return t.f=e,t}function R9(t,e){return t.a=e,t}function Zk(t,e){return t.b=e,t}function Jk(t,e){return t.c=e,t}function Ze(t,e){return t.c=e,t}function kn(t,e){return t.b=e,t}function Je(t,e){return t.d=e,t}function tn(t,e){return t.e=e,t}function QKe(t,e){return t.f=e,t}function en(t,e){return t.g=e,t}function nn(t,e){return t.a=e,t}function rn(t,e){return t.i=e,t}function sn(t,e){return t.j=e,t}function rHt(t,e){return t.k=e,t}function ZKe(t,e){return t.j=e,t}function JKe(t,e){Zp(),Uo(e,t)}function tYe(t,e,n){Ktn(t.a,e,n)}function iHt(t){xXt.call(this,t)}function ibt(t){xXt.call(this,t)}function yR(t){bnt.call(this,t)}function sHt(t){vln.call(this,t)}function Sp(t){Kv.call(this,t)}function aHt(t){irt.call(this,t)}function oHt(t){irt.call(this,t)}function cHt(){u2t.call(this,"")}function Ta(){this.a=0,this.b=0}function uHt(){this.b=0,this.a=0}function lHt(t,e){t.b=0,ty(t,e)}function eYe(t,e){t.c=e,t.b=!0}function hHt(t,e){return t.c._b(e)}function Hf(t){return t.e&&t.e()}function cet(t){return t?t.d:null}function fHt(t,e){return Rre(t.b,e)}function nYe(t){return t?t.g:null}function rYe(t){return t?t.i:null}function Ap(t){return L0(t),t.o}function Tv(){Tv=Z,A4e=x1n()}function dHt(){dHt=Z,ta=Odn()}function t8(){t8=Z,JAt=E1n()}function gHt(){gHt=Z,f5e=k1n()}function sbt(){sbt=Z,pc=wgn()}function abt(){abt=Z,Tb=z8()}function pHt(){throw rt(new Or)}function bHt(){throw rt(new Or)}function vHt(){throw rt(new Or)}function wHt(){throw rt(new Or)}function mHt(){throw rt(new Or)}function yHt(){throw rt(new Or)}function xR(t){this.a=new kx(t)}function obt(t){phe(),S5n(this,t)}function Lp(t){this.a=new Bnt(t)}function B3(t,e){for(;t.ye(e););}function cbt(t,e){for(;t.sd(e););}function R3(t,e){return t.a+=e,t}function uet(t,e){return t.a+=e,t}function kg(t,e){return t.a+=e,t}function Cv(t,e){return t.a+=e,t}function j9(t){return $p(t),t.a}function kR(t){return t.b!=t.d.c}function xHt(t){return t.l|t.m<<22}function ubt(t,e){return t.d[e.p]}function kHt(t,e){return ovn(t,e)}function lbt(t,e,n){t.splice(e,n)}function EHt(t){t.c?aue(t):oue(t)}function ER(t){this.a=0,this.b=t}function THt(){this.a=new dD(f_t)}function CHt(){this.b=new dD(ZCt)}function _Ht(){this.b=new dD(zht)}function SHt(){this.b=new dD(zht)}function AHt(){throw rt(new Or)}function LHt(){throw rt(new Or)}function MHt(){throw rt(new Or)}function IHt(){throw rt(new Or)}function DHt(){throw rt(new Or)}function OHt(){throw rt(new Or)}function NHt(){throw rt(new Or)}function PHt(){throw rt(new Or)}function FHt(){throw rt(new Or)}function BHt(){throw rt(new Or)}function iYe(){throw rt(new lc)}function sYe(){throw rt(new lc)}function hM(t){this.a=new RHt(t)}function RHt(t){bon(this,t,bdn())}function fM(t){return!t||sXt(t)}function dM(t){return U1[t]!=-1}function aYe(){zH!=0&&(zH=0),qH=-1}function jHt(){dut==null&&(dut=[])}function oYe(t,e){Hst(Wt(t.a),e)}function cYe(t,e){Hst(Wt(t.a),e)}function gM(t,e){W3.call(this,t,e)}function e8(t,e){gM.call(this,t,e)}function hbt(t,e){this.b=t,this.c=e}function $Ht(t,e){this.b=t,this.a=e}function zHt(t,e){this.a=t,this.b=e}function qHt(t,e){this.a=t,this.b=e}function HHt(t,e){this.a=t,this.b=e}function GHt(t,e){this.a=t,this.b=e}function VHt(t,e){this.a=t,this.b=e}function UHt(t,e){this.a=t,this.b=e}function WHt(t,e){this.a=t,this.b=e}function KHt(t,e){this.a=t,this.b=e}function YHt(t,e){this.b=t,this.a=e}function XHt(t,e){this.b=t,this.a=e}function QHt(t,e){this.b=t,this.a=e}function ZHt(t,e){this.b=t,this.a=e}function Gr(t,e){this.f=t,this.g=e}function n8(t,e){this.e=t,this.d=e}function _v(t,e){this.g=t,this.i=e}function het(t,e){this.a=t,this.b=e}function JHt(t,e){this.a=t,this.f=e}function tGt(t,e){this.b=t,this.c=e}function uYe(t,e){this.a=t,this.b=e}function eGt(t,e){this.a=t,this.b=e}function fet(t,e){this.a=t,this.b=e}function nGt(t){x2t(t.dc()),this.c=t}function TR(t){this.b=u(Ar(t),83)}function rGt(t){this.a=u(Ar(t),83)}function Mm(t){this.a=u(Ar(t),15)}function iGt(t){this.a=u(Ar(t),15)}function CR(t){this.b=u(Ar(t),47)}function _R(){this.q=new b.Date}function qd(){qd=Z,hEt=new Tt}function r8(){r8=Z,ZE=new Nt}function $9(t){return t.f.c+t.g.c}function pM(t,e){return t.b.Hc(e)}function sGt(t,e){return t.b.Ic(e)}function aGt(t,e){return t.b.Qc(e)}function oGt(t,e){return t.b.Hc(e)}function cGt(t,e){return t.c.uc(e)}function S0(t,e){return t.a._b(e)}function uGt(t,e){return yi(t.c,e)}function lGt(t,e){return kl(t.b,e)}function hGt(t,e){return t>e&&e0}function get(t,e){return yc(t,e)<0}function U9(t,e){return t.a.get(e)}function kYe(t,e){return e.split(t)}function MGt(t,e){return kl(t.e,e)}function mbt(t){return On(t),!1}function FR(t){_n.call(this,t,21)}function EYe(t,e){oQt.call(this,t,e)}function BR(t,e){Gr.call(this,t,e)}function pet(t,e){Gr.call(this,t,e)}function ybt(t){Xnt(),cKt.call(this,t)}function xbt(t,e){hYt(t,t.length,e)}function yM(t,e){$Yt(t,t.length,e)}function TYe(t,e,n){e.ud(t.a.Ge(n))}function CYe(t,e,n){e.we(t.a.Fe(n))}function _Ye(t,e,n){e.td(t.a.Kb(n))}function SYe(t,e,n){t.Mb(n)&&e.td(n)}function W9(t,e,n){t.splice(e,0,n)}function AYe(t,e){return Nu(t.e,e)}function RR(t,e){this.d=t,this.e=e}function IGt(t,e){this.b=t,this.a=e}function DGt(t,e){this.b=t,this.a=e}function kbt(t,e){this.b=t,this.a=e}function OGt(t,e){this.a=t,this.b=e}function NGt(t,e){this.a=t,this.b=e}function PGt(t,e){this.a=t,this.b=e}function FGt(t,e){this.a=t,this.b=e}function Tx(t,e){this.a=t,this.b=e}function Ebt(t,e){this.b=t,this.a=e}function Tbt(t,e){this.b=t,this.a=e}function jR(t,e){Gr.call(this,t,e)}function $R(t,e){Gr.call(this,t,e)}function Cbt(t,e){Gr.call(this,t,e)}function _bt(t,e){Gr.call(this,t,e)}function j3(t,e){Gr.call(this,t,e)}function bet(t,e){Gr.call(this,t,e)}function vet(t,e){Gr.call(this,t,e)}function wet(t,e){Gr.call(this,t,e)}function zR(t,e){Gr.call(this,t,e)}function Sbt(t,e){Gr.call(this,t,e)}function met(t,e){Gr.call(this,t,e)}function xM(t,e){Gr.call(this,t,e)}function qR(t,e){Gr.call(this,t,e)}function yet(t,e){Gr.call(this,t,e)}function K9(t,e){Gr.call(this,t,e)}function Abt(t,e){Gr.call(this,t,e)}function ws(t,e){Gr.call(this,t,e)}function HR(t,e){Gr.call(this,t,e)}function BGt(t,e){this.a=t,this.b=e}function RGt(t,e){this.a=t,this.b=e}function jGt(t,e){this.a=t,this.b=e}function $Gt(t,e){this.a=t,this.b=e}function zGt(t,e){this.a=t,this.b=e}function qGt(t,e){this.a=t,this.b=e}function HGt(t,e){this.a=t,this.b=e}function GGt(t,e){this.a=t,this.b=e}function VGt(t,e){this.a=t,this.b=e}function Lbt(t,e){this.b=t,this.a=e}function UGt(t,e){this.b=t,this.a=e}function WGt(t,e){this.b=t,this.a=e}function KGt(t,e){this.b=t,this.a=e}function a8(t,e){this.c=t,this.d=e}function YGt(t,e){this.e=t,this.d=e}function XGt(t,e){this.a=t,this.b=e}function QGt(t,e){this.b=e,this.c=t}function GR(t,e){Gr.call(this,t,e)}function kM(t,e){Gr.call(this,t,e)}function xet(t,e){Gr.call(this,t,e)}function Y9(t,e){Gr.call(this,t,e)}function Mbt(t,e){Gr.call(this,t,e)}function ket(t,e){Gr.call(this,t,e)}function Eet(t,e){Gr.call(this,t,e)}function EM(t,e){Gr.call(this,t,e)}function Ibt(t,e){Gr.call(this,t,e)}function Tet(t,e){Gr.call(this,t,e)}function X9(t,e){Gr.call(this,t,e)}function Dbt(t,e){Gr.call(this,t,e)}function Q9(t,e){Gr.call(this,t,e)}function Z9(t,e){Gr.call(this,t,e)}function Dm(t,e){Gr.call(this,t,e)}function Cet(t,e){Gr.call(this,t,e)}function _et(t,e){Gr.call(this,t,e)}function Obt(t,e){Gr.call(this,t,e)}function J9(t,e){Gr.call(this,t,e)}function Aet(t,e){Gr.call(this,t,e)}function VR(t,e){Gr.call(this,t,e)}function TM(t,e){Gr.call(this,t,e)}function CM(t,e){Gr.call(this,t,e)}function Cx(t,e){Gr.call(this,t,e)}function Let(t,e){Gr.call(this,t,e)}function Nbt(t,e){Gr.call(this,t,e)}function Met(t,e){Gr.call(this,t,e)}function Iet(t,e){Gr.call(this,t,e)}function Pbt(t,e){Gr.call(this,t,e)}function Det(t,e){Gr.call(this,t,e)}function Oet(t,e){Gr.call(this,t,e)}function Net(t,e){Gr.call(this,t,e)}function Pet(t,e){Gr.call(this,t,e)}function Fbt(t,e){Gr.call(this,t,e)}function ZGt(t,e){this.b=t,this.a=e}function JGt(t,e){this.a=t,this.b=e}function tVt(t,e){this.a=t,this.b=e}function eVt(t,e){this.a=t,this.b=e}function nVt(t,e){this.a=t,this.b=e}function Bbt(t,e){Gr.call(this,t,e)}function Rbt(t,e){Gr.call(this,t,e)}function rVt(t,e){this.b=t,this.d=e}function jbt(t,e){Gr.call(this,t,e)}function $bt(t,e){Gr.call(this,t,e)}function iVt(t,e){this.a=t,this.b=e}function sVt(t,e){this.a=t,this.b=e}function UR(t,e){Gr.call(this,t,e)}function tC(t,e){Gr.call(this,t,e)}function zbt(t,e){Gr.call(this,t,e)}function qbt(t,e){Gr.call(this,t,e)}function Hbt(t,e){Gr.call(this,t,e)}function Fet(t,e){Gr.call(this,t,e)}function Gbt(t,e){Gr.call(this,t,e)}function Bet(t,e){Gr.call(this,t,e)}function WR(t,e){Gr.call(this,t,e)}function Ret(t,e){Gr.call(this,t,e)}function jet(t,e){Gr.call(this,t,e)}function _M(t,e){Gr.call(this,t,e)}function $et(t,e){Gr.call(this,t,e)}function Vbt(t,e){Gr.call(this,t,e)}function SM(t,e){Gr.call(this,t,e)}function Ubt(t,e){Gr.call(this,t,e)}function LYe(t,e){return Nu(t.c,e)}function MYe(t,e){return Nu(e.b,t)}function IYe(t,e){return-t.b.Je(e)}function Wbt(t,e){return Nu(t.g,e)}function AM(t,e){Gr.call(this,t,e)}function _x(t,e){Gr.call(this,t,e)}function aVt(t,e){this.a=t,this.b=e}function oVt(t,e){this.a=t,this.b=e}function $e(t,e){this.a=t,this.b=e}function eC(t,e){Gr.call(this,t,e)}function nC(t,e){Gr.call(this,t,e)}function LM(t,e){Gr.call(this,t,e)}function zet(t,e){Gr.call(this,t,e)}function KR(t,e){Gr.call(this,t,e)}function rC(t,e){Gr.call(this,t,e)}function qet(t,e){Gr.call(this,t,e)}function YR(t,e){Gr.call(this,t,e)}function $3(t,e){Gr.call(this,t,e)}function MM(t,e){Gr.call(this,t,e)}function iC(t,e){Gr.call(this,t,e)}function sC(t,e){Gr.call(this,t,e)}function IM(t,e){Gr.call(this,t,e)}function XR(t,e){Gr.call(this,t,e)}function z3(t,e){Gr.call(this,t,e)}function QR(t,e){Gr.call(this,t,e)}function cVt(t,e){this.a=t,this.b=e}function uVt(t,e){this.a=t,this.b=e}function lVt(t,e){this.a=t,this.b=e}function hVt(t,e){this.a=t,this.b=e}function fVt(t,e){this.a=t,this.b=e}function dVt(t,e){this.a=t,this.b=e}function la(t,e){this.a=t,this.b=e}function ZR(t,e){Gr.call(this,t,e)}function gVt(t,e){this.a=t,this.b=e}function pVt(t,e){this.a=t,this.b=e}function bVt(t,e){this.a=t,this.b=e}function vVt(t,e){this.a=t,this.b=e}function wVt(t,e){this.a=t,this.b=e}function mVt(t,e){this.a=t,this.b=e}function yVt(t,e){this.b=t,this.a=e}function xVt(t,e){this.b=t,this.a=e}function kVt(t,e){this.b=t,this.a=e}function EVt(t,e){this.b=t,this.a=e}function TVt(t,e){this.a=t,this.b=e}function CVt(t,e){this.a=t,this.b=e}function DYe(t,e){c2n(t.a,u(e,56))}function _Vt(t,e){yan(t.a,u(e,11))}function OYe(t,e){return g8(),e!=t}function SVt(){return Zqt(),new Mge}function AVt(){prt(),this.b=new qs}function LVt(){hq(),this.a=new qs}function MVt(){jwt(),Kvt.call(this)}function Sx(t,e){Gr.call(this,t,e)}function IVt(t,e){this.a=t,this.b=e}function DVt(t,e){this.a=t,this.b=e}function JR(t,e){this.a=t,this.b=e}function OVt(t,e){this.a=t,this.b=e}function NVt(t,e){this.a=t,this.b=e}function PVt(t,e){this.a=t,this.b=e}function FVt(t,e){this.d=t,this.b=e}function Kbt(t,e){this.d=t,this.e=e}function BVt(t,e){this.f=t,this.c=e}function DM(t,e){this.b=t,this.c=e}function Ybt(t,e){this.i=t,this.g=e}function RVt(t,e){this.e=t,this.a=e}function jVt(t,e){this.a=t,this.b=e}function Xbt(t,e){t.i=null,ez(t,e)}function NYe(t,e){t&&ki(cN,t,e)}function $Vt(t,e){return Wit(t.a,e)}function tj(t){return VI(t.c,t.b)}function ec(t){return t?t.dd():null}function Gt(t){return t??null}function Om(t){return typeof t===u6}function Nm(t){return typeof t===Lxt}function ea(t){return typeof t===Oat}function Dp(t,e){return t.Hd().Xb(e)}function ej(t,e){return Xon(t.Kc(),e)}function Av(t,e){return yc(t,e)==0}function PYe(t,e){return yc(t,e)>=0}function aC(t,e){return yc(t,e)!=0}function FYe(t){return""+(On(t),t)}function OM(t,e){return t.substr(e)}function zVt(t){return al(t),t.d.gc()}function Het(t){return Dpn(t,t.c),t}function nj(t){return mC(t==null),t}function oC(t,e){return t.a+=""+e,t}function fo(t,e){return t.a+=""+e,t}function cC(t,e){return t.a+=""+e,t}function hc(t,e){return t.a+=""+e,t}function Vr(t,e){return t.a+=""+e,t}function Qbt(t,e){return t.a+=""+e,t}function qVt(t,e){hs(t,e,t.a,t.a.a)}function Kb(t,e){hs(t,e,t.c.b,t.c)}function BYe(t,e,n){Qse(e,Fst(t,n))}function RYe(t,e,n){Qse(e,Fst(t,n))}function jYe(t,e){Ian(new er(t),e)}function HVt(t,e){t.q.setTime(Vv(e))}function GVt(t,e){rwt.call(this,t,e)}function VVt(t,e){rwt.call(this,t,e)}function Get(t,e){rwt.call(this,t,e)}function UVt(t){Yu(this),VC(this,t)}function Zbt(t){return An(t,0),null}function Gf(t){return t.a=0,t.b=0,t}function WVt(t,e){return t.a=e.g+1,t}function $Ye(t,e){return t.j[e.p]==2}function Jbt(t){return ken(u(t,79))}function KVt(){KVt=Z,Tpe=Wr(Jit())}function YVt(){YVt=Z,zbe=Wr(Ice())}function XVt(){this.b=new kx(Qm(12))}function QVt(){this.b=0,this.a=!1}function ZVt(){this.b=0,this.a=!1}function uC(t){this.a=t,f9.call(this)}function JVt(t){this.a=t,f9.call(this)}function mn(t,e){Os.call(this,t,e)}function Vet(t,e){jm.call(this,t,e)}function q3(t,e){Ybt.call(this,t,e)}function Uet(t,e){U8.call(this,t,e)}function tUt(t,e){NM.call(this,t,e)}function ri(t,e){NR(),ki(nU,t,e)}function Wet(t,e){return Dl(t.a,0,e)}function eUt(t,e){return t.a.a.a.cc(e)}function nUt(t,e){return Gt(t)===Gt(e)}function zYe(t,e){return Ls(t.a,e.a)}function qYe(t,e){return du(t.a,e.a)}function HYe(t,e){return BYt(t.a,e.a)}function cd(t,e){return t.indexOf(e)}function Lv(t,e){return t==e?0:t?1:-1}function rj(t){return t<10?"0"+t:""+t}function GYe(t){return Ar(t),new uC(t)}function rUt(t){return ru(t.l,t.m,t.h)}function o8(t){return ps((On(t),t))}function VYe(t){return ps((On(t),t))}function iUt(t,e){return du(t.g,e.g)}function Bo(t){return typeof t===Lxt}function UYe(t){return t==_w||t==Dy}function WYe(t){return t==_w||t==Iy}function t2t(t){return Ro(t.b.b,t,0)}function sUt(t){this.a=SVt(),this.b=t}function aUt(t){this.a=SVt(),this.b=t}function KYe(t,e){return ue(t.a,e),e}function YYe(t,e){return ue(t.c,e),t}function oUt(t,e){return Rl(t.a,e),t}function XYe(t,e){return lf(),e.a+=t}function QYe(t,e){return lf(),e.a+=t}function ZYe(t,e){return lf(),e.c+=t}function e2t(t,e){D8(t,0,t.length,e)}function A0(){kt.call(this,new n2)}function cUt(){Fj.call(this,0,0,0,0)}function Ax(){ih.call(this,0,0,0,0)}function yo(t){this.a=t.a,this.b=t.b}function Op(t){return t==jh||t==kf}function c8(t){return t==Z0||t==Q0}function uUt(t){return t==t5||t==J4}function H3(t){return t!=H1&&t!=yb}function ml(t){return t.Lg()&&t.Mg()}function lUt(t){return Zj(u(t,118))}function ij(t){return Rl(new Hs,t)}function hUt(t,e){return new U8(e,t)}function JYe(t,e){return new U8(e,t)}function n2t(t,e,n){W$(t,e),K$(t,n)}function sj(t,e,n){Qv(t,e),Xv(t,n)}function m1(t,e,n){yu(t,e),xu(t,n)}function aj(t,e,n){F8(t,e),R8(t,n)}function oj(t,e,n){B8(t,e),j8(t,n)}function Ket(t,e){Z8(t,e),$8(t,t.D)}function r2t(t){BVt.call(this,t,!0)}function fUt(t,e,n){U2t.call(this,t,e,n)}function Np(t){Jp(),tcn.call(this,t)}function dUt(){BR.call(this,"Head",1)}function gUt(){BR.call(this,"Tail",3)}function Yet(t){t.c=Pt(Xn,Ie,1,0,5,1)}function pUt(t){t.a=Pt(Xn,Ie,1,8,5,1)}function bUt(t){mu(t.xf(),new ur(t))}function G3(t){return t!=null?Hi(t):0}function tXe(t,e){return Zm(e,k1(t))}function eXe(t,e){return Zm(e,k1(t))}function nXe(t,e){return t[t.length]=e}function rXe(t,e){return t[t.length]=e}function i2t(t){return ntn(t.b.Kc(),t.a)}function iXe(t,e){return tz(Knt(t.d),e)}function sXe(t,e){return tz(Knt(t.g),e)}function aXe(t,e){return tz(Knt(t.j),e)}function eo(t,e){Os.call(this,t.b,e)}function Mv(t){Fj.call(this,t,t,t,t)}function s2t(t){return t.b&&bat(t),t.a}function a2t(t){return t.b&&bat(t),t.c}function oXe(t,e){R1||(t.b=e)}function Xet(t,e,n){return Ji(t,e,n),n}function vUt(t,e,n){Ji(t.c[e.g],e.g,n)}function cXe(t,e,n){u(t.c,69).Xh(e,n)}function uXe(t,e,n){m1(n,n.i+t,n.j+e)}function lXe(t,e){Mr(Lc(t.a),IQt(e))}function hXe(t,e){Mr(il(t.a),DQt(e))}function lC(t){gi(),vv.call(this,t)}function fXe(t){return t==null?0:Hi(t)}function wUt(){wUt=Z,yht=new e_(pft)}function Nr(){Nr=Z,new mUt,new le}function mUt(){new Cr,new Cr,new Cr}function o2t(){o2t=Z,Cpt(),Q8t=new Cr}function y1(){y1=Z,b.Math.log(2)}function nh(){nh=Z,f0=(CGt(),N4e)}function dXe(){throw rt(new yg(sge))}function gXe(){throw rt(new yg(sge))}function pXe(){throw rt(new yg(age))}function bXe(){throw rt(new yg(age))}function yUt(t){this.a=t,Cvt.call(this,t)}function Qet(t){this.a=t,TR.call(this,t)}function Zet(t){this.a=t,TR.call(this,t)}function Xs(t,e){Lnt(t.c,t.c.length,e)}function Vo(t){return t.ae?1:0}function kUt(t,e){return yc(t,e)>0?t:e}function ru(t,e,n){return{l:t,m:e,h:n}}function vXe(t,e){t.a!=null&&_Vt(e,t.a)}function EUt(t){t.a=new Ht,t.c=new Ht}function cj(t){this.b=t,this.a=new le}function TUt(t){this.b=new Ce,this.a=t}function u2t(t){evt.call(this),this.a=t}function CUt(){BR.call(this,"Range",2)}function _Ut(){r4t(),this.a=new dD(C7t)}function wXe(t,e){Ar(e),Y3(t).Jc(new st)}function mXe(t,e){return Ol(),e.n.b+=t}function yXe(t,e,n){return ki(t.g,n,e)}function xXe(t,e,n){return ki(t.k,n,e)}function kXe(t,e){return ki(t.a,e.a,e)}function V3(t,e,n){return E3t(e,n,t.c)}function l2t(t){return new $e(t.c,t.d)}function EXe(t){return new $e(t.c,t.d)}function nc(t){return new $e(t.a,t.b)}function SUt(t,e){return U3n(t.a,e,null)}function TXe(t){Da(t,null),sa(t,null)}function AUt(t){vrt(t,null),wrt(t,null)}function LUt(){NM.call(this,null,null)}function MUt(){bj.call(this,null,null)}function h2t(t){this.a=t,Cr.call(this)}function CXe(t){this.b=(vn(),new q(t))}function uj(t){t.j=Pt(lEt,te,310,0,0,1)}function _Xe(t,e,n){t.c.Vc(e,u(n,133))}function SXe(t,e,n){t.c.ji(e,u(n,133))}function IUt(t,e){xr(t),t.Gc(u(e,15))}function hC(t,e){return c3n(t.c,t.b,e)}function AXe(t,e){return new JUt(t.Kc(),e)}function Jet(t,e){return Scn(t.Kc(),e)!=-1}function f2t(t,e){return t.a.Bc(e)!=null}function lj(t){return t.Ob()?t.Pb():null}function DUt(t){return Ah(t,0,t.length)}function Et(t,e){return t!=null&&rst(t,e)}function LXe(t,e){t.q.setHours(e),y_(t,e)}function OUt(t,e){t.c&&(Fvt(e),sQt(e))}function MXe(t,e,n){u(t.Kb(n),164).Nb(e)}function IXe(t,e,n){return j3n(t,e,n),n}function NUt(t,e,n){t.a=e^1502,t.b=n^fot}function tnt(t,e,n){return t.a[e.g][n.g]}function x1(t,e){return t.a[e.c.p][e.p]}function DXe(t,e){return t.e[e.c.p][e.p]}function OXe(t,e){return t.c[e.c.p][e.p]}function NXe(t,e){return t.j[e.p]=Hbn(e)}function PXe(t,e){return pmt(t.f,e.tg())}function FXe(t,e){return pmt(t.b,e.tg())}function BXe(t,e){return t.a0?e*e/t:e*e*100}function cQe(t,e){return t>0?e/(t*t):e*100}function uQe(t,e,n){return ue(e,rie(t,n))}function lQe(t,e,n){O$(),t.Xe(e)&&n.td(t)}function h8(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function Fm(t,e,n){return t.a+=e,t.b+=n,t}function hQe(t,e,n){return t.a*=e,t.b*=n,t}function BM(t,e,n){return t.a-=e,t.b-=n,t}function F2t(t,e){return t.a=e.a,t.b=e.b,t}function mj(t){return t.a=-t.a,t.b=-t.b,t}function hWt(t){this.c=t,this.a=1,this.b=1}function fWt(t){this.c=t,yu(t,0),xu(t,0)}function dWt(t){Qi.call(this),zC(this,t)}function gWt(t){Iat(),jzt(this),this.mf(t)}function pWt(t,e){V9(),NM.call(this,t,e)}function B2t(t,e){Eg(),bj.call(this,t,e)}function bWt(t,e){Eg(),bj.call(this,t,e)}function vWt(t,e){Eg(),B2t.call(this,t,e)}function yl(t,e,n){Tl.call(this,t,e,n,2)}function ont(t,e){nh(),Pj.call(this,t,e)}function wWt(t,e){nh(),ont.call(this,t,e)}function R2t(t,e){nh(),ont.call(this,t,e)}function mWt(t,e){nh(),R2t.call(this,t,e)}function j2t(t,e){nh(),Pj.call(this,t,e)}function yWt(t,e){nh(),j2t.call(this,t,e)}function xWt(t,e){nh(),Pj.call(this,t,e)}function fQe(t,e){return t.c.Fc(u(e,133))}function $2t(t,e,n){return Eq(mI(t,e),n)}function dQe(t,e,n){return e.Qk(t.e,t.c,n)}function gQe(t,e,n){return e.Rk(t.e,t.c,n)}function cnt(t,e){return Kp(t.e,u(e,49))}function pQe(t,e,n){JC(il(t.a),e,DQt(n))}function bQe(t,e,n){JC(Lc(t.a),e,IQt(n))}function z2t(t,e){e.$modCount=t.$modCount}function bC(){bC=Z,$S=new Gi("root")}function f8(){f8=Z,lN=new vqt,new wqt}function kWt(){this.a=new Hv,this.b=new Hv}function q2t(){zee.call(this),this.Bb|=Ya}function EWt(){Gr.call(this,"GROW_TREE",0)}function vQe(t){return t==null?null:P4n(t)}function wQe(t){return t==null?null:H0n(t)}function mQe(t){return t==null?null:$o(t)}function yQe(t){return t==null?null:$o(t)}function L0(t){t.o==null&&vbn(t)}function Re(t){return mC(t==null||Om(t)),t}function ye(t){return mC(t==null||Nm(t)),t}function Br(t){return mC(t==null||ea(t)),t}function H2t(t){this.q=new b.Date(Vv(t))}function RM(t,e){this.c=t,n8.call(this,t,e)}function yj(t,e){this.a=t,RM.call(this,t,e)}function xQe(t,e){this.d=t,Mtt(this),this.b=e}function G2t(t,e){jrt.call(this,t),this.a=e}function V2t(t,e){jrt.call(this,t),this.a=e}function kQe(t){w3t.call(this,0,0),this.f=t}function U2t(t,e,n){I$.call(this,t,e,n,null)}function TWt(t,e,n){I$.call(this,t,e,n,null)}function EQe(t,e,n){return t.ue(e,n)<=0?n:e}function TQe(t,e,n){return t.ue(e,n)<=0?e:n}function CQe(t,e){return u(Wv(t.b,e),149)}function _Qe(t,e){return u(Wv(t.c,e),229)}function unt(t){return u(Fe(t.a,t.b),287)}function CWt(t){return new $e(t.c,t.d+t.a)}function _Wt(t){return Ol(),uUt(u(t,197))}function Bm(){Bm=Z,t7t=un((_l(),V2))}function SQe(t,e){e.a?fvn(t,e):ent(t.a,e.b)}function SWt(t,e){R1||ue(t.a,e)}function AQe(t,e){return vM(),V8(e.d.i,t)}function LQe(t,e){return Xx(),new Lue(e,t)}function ld(t,e){return tI(e,Yxt),t.f=e,t}function W2t(t,e,n){return n=zl(t,e,3,n),n}function K2t(t,e,n){return n=zl(t,e,6,n),n}function Y2t(t,e,n){return n=zl(t,e,9,n),n}function jM(t,e,n){++t.j,t.Ki(),Brt(t,e,n)}function AWt(t,e,n){++t.j,t.Hi(e,t.oi(e,n))}function LWt(t,e,n){var r;r=t.Zc(e),r.Rb(n)}function MWt(t,e,n){return uxt(t.c,t.b,e,n)}function X2t(t,e){return(e&vi)%t.d.length}function Os(t,e){Gi.call(this,t),this.a=e}function Q2t(t,e){wpt.call(this,t),this.a=e}function lnt(t,e){wpt.call(this,t),this.a=e}function IWt(t,e){this.c=t,Kv.call(this,e)}function DWt(t,e){this.a=t,Ozt.call(this,e)}function $M(t,e){this.a=t,Ozt.call(this,e)}function OWt(t){this.a=(Bl(t,my),new Yc(t))}function NWt(t){this.a=(Bl(t,my),new Yc(t))}function zM(t){return!t.a&&(t.a=new ut),t.a}function PWt(t){return t>8?0:t+1}function MQe(t,e){return Fn(),t==e?0:t?1:-1}function Z2t(t,e,n){return Nx(t,u(e,22),n)}function IQe(t,e,n){return t.apply(e,n)}function FWt(t,e,n){return t.a+=Ah(e,0,n),t}function J2t(t,e){var n;return n=t.e,t.e=e,n}function DQe(t,e){var n;n=t[hot],n.call(t,e)}function OQe(t,e){var n;n=t[hot],n.call(t,e)}function Rm(t,e){t.a.Vc(t.b,e),++t.b,t.c=-1}function BWt(t){Yu(t.e),t.d.b=t.d,t.d.a=t.d}function qM(t){t.b?qM(t.b):t.f.c.zc(t.e,t.d)}function NQe(t,e,n){Wb(),vtt(t,e.Ce(t.a,n))}function PQe(t,e){return cet(mie(t.a,e,!0))}function FQe(t,e){return cet(yie(t.a,e,!0))}function uf(t,e){return wR(new Array(e),t)}function hnt(t){return String.fromCharCode(t)}function BQe(t){return t==null?null:t.message}function RWt(){this.a=new le,this.b=new le}function jWt(){this.a=new F5,this.b=new Kzt}function $Wt(){this.b=new Ta,this.c=new le}function tvt(){this.d=new Ta,this.e=new Ta}function evt(){this.n=new Ta,this.o=new Ta}function xj(){this.n=new wx,this.i=new Ax}function zWt(){this.a=new jJ,this.b=new zX}function qWt(){this.a=new le,this.d=new le}function HWt(){this.b=new qs,this.a=new qs}function GWt(){this.b=new Cr,this.a=new Cr}function VWt(){this.b=new CHt,this.a=new NQ}function UWt(){xj.call(this),this.a=new Ta}function vC(t){ccn.call(this,t,(P$(),Aut))}function nvt(t,e,n,r){Fj.call(this,t,e,n,r)}function RQe(t,e,n){n!=null&&Z$(e,gst(t,n))}function jQe(t,e,n){n!=null&&J$(e,gst(t,n))}function rvt(t,e,n){return n=zl(t,e,11,n),n}function Li(t,e){return t.a+=e.a,t.b+=e.b,t}function na(t,e){return t.a-=e.a,t.b-=e.b,t}function $Qe(t,e){return t.n.a=(On(e),e+10)}function zQe(t,e){return t.n.a=(On(e),e+10)}function qQe(t,e){return e==t||fE(cq(e),t)}function WWt(t,e){return ki(t.a,e,"")==null}function HQe(t,e){return vM(),!V8(e.d.i,t)}function GQe(t,e){Op(t.f)?obn(t,e):Vdn(t,e)}function VQe(t,e){var n;return n=e.Hh(t.a),n}function jm(t,e){mo.call(this,X_+t+S2+e)}function Ix(t,e,n,r){he.call(this,t,e,n,r)}function ivt(t,e,n,r){he.call(this,t,e,n,r)}function KWt(t,e,n,r){ivt.call(this,t,e,n,r)}function YWt(t,e,n,r){Uj.call(this,t,e,n,r)}function fnt(t,e,n,r){Uj.call(this,t,e,n,r)}function svt(t,e,n,r){Uj.call(this,t,e,n,r)}function XWt(t,e,n,r){fnt.call(this,t,e,n,r)}function avt(t,e,n,r){fnt.call(this,t,e,n,r)}function Cn(t,e,n,r){svt.call(this,t,e,n,r)}function QWt(t,e,n,r){avt.call(this,t,e,n,r)}function ZWt(t,e,n,r){iwt.call(this,t,e,n,r)}function JWt(t,e,n){this.a=t,D2t.call(this,e,n)}function tKt(t,e,n){this.c=e,this.b=n,this.a=t}function UQe(t,e,n){return t.d=u(e.Kb(n),164)}function ovt(t,e){return t.Aj().Nh().Kh(t,e)}function cvt(t,e){return t.Aj().Nh().Ih(t,e)}function eKt(t,e){return On(t),Gt(t)===Gt(e)}function hn(t,e){return On(t),Gt(t)===Gt(e)}function dnt(t,e){return cet(mie(t.a,e,!1))}function gnt(t,e){return cet(yie(t.a,e,!1))}function WQe(t,e){return t.b.sd(new NGt(t,e))}function KQe(t,e){return t.b.sd(new PGt(t,e))}function nKt(t,e){return t.b.sd(new FGt(t,e))}function uvt(t,e,n){return t.lastIndexOf(e,n)}function YQe(t,e,n){return Ls(t[e.b],t[n.b])}function XQe(t,e){return Jt(e,(Te(),_O),t)}function QQe(t,e){return du(e.a.d.p,t.a.d.p)}function ZQe(t,e){return du(t.a.d.p,e.a.d.p)}function JQe(t,e){return Ls(t.c-t.s,e.c-e.s)}function rKt(t){return t.c?Ro(t.c.a,t,0):-1}function tZe(t){return t<100?null:new Sp(t)}function Dx(t){return t==G2||t==h0||t==Vc}function iKt(t,e){return Et(e,15)&&lue(t.c,e)}function eZe(t,e){R1||e&&(t.d=e)}function pnt(t,e){var n;return n=e,!!Dyt(t,n)}function lvt(t,e){this.c=t,qnt.call(this,t,e)}function sKt(t){this.c=t,Get.call(this,Iq,0)}function aKt(t,e){atn.call(this,t,t.length,e)}function nZe(t,e,n){return u(t.c,69).lk(e,n)}function kj(t,e,n){return u(t.c,69).mk(e,n)}function rZe(t,e,n){return dQe(t,u(e,332),n)}function hvt(t,e,n){return gQe(t,u(e,332),n)}function iZe(t,e,n){return iae(t,u(e,332),n)}function oKt(t,e,n){return n0n(t,u(e,332),n)}function wC(t,e){return e==null?null:ny(t.b,e)}function fvt(t){return Nm(t)?(On(t),t):t.ke()}function Ej(t){return!isNaN(t)&&!isFinite(t)}function cKt(t){hd(),this.a=(vn(),new Qk(t))}function HM(t){g8(),this.d=t,this.a=new P3}function rh(t,e,n){this.a=t,this.b=e,this.c=n}function uKt(t,e,n){this.a=t,this.b=e,this.c=n}function lKt(t,e,n){this.d=t,this.b=n,this.a=e}function bnt(t){EUt(this),_h(this),Ua(this,t)}function Pu(t){Yet(this),Svt(this.c,0,t.Pc())}function hKt(t){El(t.a),cte(t.c,t.b),t.b=null}function fKt(t){this.a=t,qd(),ku(Date.now())}function dKt(){dKt=Z,IEt=new _,YH=new _}function vnt(){vnt=Z,kEt=new It,Ige=new Ft}function gKt(){gKt=Z,j4e=Pt(Xn,Ie,1,0,5,1)}function pKt(){pKt=Z,r5e=Pt(Xn,Ie,1,0,5,1)}function dvt(){dvt=Z,i5e=Pt(Xn,Ie,1,0,5,1)}function hd(){hd=Z,new xpt((vn(),vn(),io))}function sZe(t){return P$(),Ur((mte(),Nge),t)}function aZe(t){return I1(),Ur((RJt(),$ge),t)}function oZe(t){return Nz(),Ur((VZt(),Uge),t)}function cZe(t){return $$(),Ur((UZt(),Wge),t)}function uZe(t){return gq(),Ur((Dne(),Kge),t)}function lZe(t){return Kf(),Ur((PJt(),Qge),t)}function hZe(t){return Xu(),Ur((FJt(),Jge),t)}function fZe(t){return wu(),Ur((BJt(),epe),t)}function dZe(t){return Lq(),Ur((KVt(),Tpe),t)}function gZe(t){return tw(),Ur((xte(),_pe),t)}function pZe(t){return n6(),Ur((kte(),Ape),t)}function bZe(t){return s_(),Ur((Ete(),Ipe),t)}function vZe(t){return AR(),Ur((EZt(),Dpe),t)}function wZe(t){return z$(),Ur((WZt(),Ype),t)}function mZe(t){return jC(),Ur((jJt(),bbe),t)}function yZe(t){return Wa(),Ur((Jte(),ybe),t)}function xZe(t){return K8(),Ur((yte(),Cbe),t)}function kZe(t){return ew(),Ur(($Jt(),Ibe),t)}function gvt(t,e){if(!t)throw rt(new Pn(e))}function EZe(t){return Gn(),Ur((yee(),Pbe),t)}function pvt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function wnt(t){Fj.call(this,t.d,t.c,t.a,t.b)}function bvt(t,e,n){this.b=t,this.c=e,this.a=n}function Tj(t,e,n){this.b=t,this.a=e,this.c=n}function bKt(t,e,n){this.a=t,this.b=e,this.c=n}function vvt(t,e,n){this.a=t,this.b=e,this.c=n}function vKt(t,e,n){this.a=t,this.b=e,this.c=n}function wvt(t,e,n){this.a=t,this.b=e,this.c=n}function wKt(t,e,n){this.b=t,this.a=e,this.c=n}function Cj(t,e,n){this.e=e,this.b=t,this.d=n}function TZe(t,e,n){return Wb(),t.a.Od(e,n),e}function mnt(t){var e;return e=new Uu,e.e=t,e}function mvt(t){var e;return e=new eqt,e.b=t,e}function GM(){GM=Z,cG=new _Y,uG=new SY}function lf(){lf=Z,Ybe=new bX,Xbe=new yF}function CZe(t){return dz(),Ur((Cte(),Gbe),t)}function _Ze(t){return M1(),Ur((Ste(),Jbe),t)}function SZe(t){return fq(),Ur((xne(),o2e),t)}function AZe(t){return i6(),Ur((Eee(),c2e),t)}function LZe(t){return D$(),Ur((JZt(),u2e),t)}function MZe(t){return Yx(),Ur((zJt(),l2e),t)}function IZe(t){return g4(),Ur((Kte(),e2e),t)}function DZe(t){return Jv(),Ur((GJt(),a2e),t)}function OZe(t){return X$(),Ur((qJt(),h2e),t)}function NZe(t){return v2(),Ur((Ute(),f2e),t)}function PZe(t){return TI(),Ur((YZt(),d2e),t)}function FZe(t){return u2(),Ur((HJt(),p2e),t)}function BZe(t){return nq(),Ur((See(),b2e),t)}function RZe(t){return bI(),Ur((XZt(),v2e),t)}function jZe(t){return nD(),Ur((Cee(),w2e),t)}function $Ze(t){return gE(),Ur((Tee(),m2e),t)}function zZe(t){return oo(),Ur((Wne(),y2e),t)}function qZe(t){return W8(),Ur((UJt(),x2e),t)}function HZe(t){return B0(),Ur((VJt(),E2e),t)}function GZe(t){return x$(),Ur((tJt(),T2e),t)}function VZe(t){return hh(),Ur((Yte(),C2e),t)}function UZe(t){return Zz(),Ur((_ee(),$we),t)}function WZe(t){return YC(),Ur((WJt(),zwe),t)}function KZe(t){return sy(),Ur((Ate(),qwe),t)}function YZe(t){return so(),Ur((XJt(),Kwe),t)}function XZe(t){return w4(),Ur((yne(),Gwe),t)}function QZe(t){return j0(),Ur((YJt(),Vwe),t)}function ZZe(t){return yI(),Ur((ZZt(),Uwe),t)}function JZe(t){return uz(),Ur((KJt(),Ywe),t)}function tJe(t){return a_(),Ur((Wte(),Hwe),t)}function eJe(t){return lI(),Ur((QZt(),Xwe),t)}function nJe(t){return tE(),Ur((ZJt(),Qwe),t)}function rJe(t){return oz(),Ur((JJt(),Zwe),t)}function iJe(t){return gz(),Ur((QJt(),Jwe),t)}function sJe(t){return Zv(),Ur((tte(),fme),t)}function aJe(t){return BC(),Ur((nJt(),vme),t)}function oJe(t){return dd(),Ur((rJt(),Tme),t)}function cJe(t){return E1(),Ur((iJt(),_me),t)}function uJe(t){return Vf(),Ur((eJt(),zme),t)}function lJe(t){return qv(),Ur((sJt(),Kme),t)}function hJe(t){return uE(),Ur((Tte(),Yme),t)}function fJe(t){return f_(),Ur((Aee(),Qme),t)}function dJe(t){return d$(),Ur((cJt(),hye),t)}function gJe(t){return iz(),Ur((oJt(),vye),t)}function pJe(t){return v$(),Ur((aJt(),fye),t)}function bJe(t){return Cz(),Ur((ete(),mye),t)}function vJe(t){return N$(),Ur((uJt(),yye),t)}function wJe(t){return RI(),Ur((nte(),xye),t)}function mJe(t){return Gz(),Ur((_te(),Fye),t)}function yJe(t){return cz(),Ur((ite(),Bye),t)}function xJe(t){return Tz(),Ur((rte(),Rye),t)}function kJe(t){return yE(),Ur((Zte(),i3e),t)}function EJe(t){return GI(),Ur((ste(),s3e),t)}function TJe(t){return MR(),Ur((xZt(),a3e),t)}function CJe(t){return IR(),Ur((yZt(),c3e),t)}function _Je(t){return hI(),Ur((hJt(),u3e),t)}function SJe(t){return iD(),Ur((Xte(),l3e),t)}function AJe(t){return H9(),Ur((kZt(),_3e),t)}function LJe(t){return NI(),Ur((lJt(),S3e),t)}function MJe(t){return Xf(),Ur((Qte(),O3e),t)}function IJe(t){return jg(),Ur((kne(),P3e),t)}function DJe(t){return Qd(),Ur((kee(),F3e),t)}function OJe(t){return cy(),Ur((xee(),q3e),t)}function NJe(t){return ro(),Ur((YVt(),zbe),t)}function PJe(t){return q8(),Ur((KZt(),$be),t)}function FJe(t){return ao(),Ur((tee(),r4e),t)}function BJe(t){return A1(),Ur((ote(),i4e),t)}function RJe(t){return q0(),Ur((Ite(),s4e),t)}function jJe(t){return tq(),Ur((Mee(),a4e),t)}function $Je(t){return $0(),Ur((ate(),c4e),t)}function zJe(t){return jl(),Ur((Mte(),l4e),t)}function qJe(t){return fy(),Ur((Ine(),h4e),t)}function HJe(t){return c4(),Ur((eee(),f4e),t)}function GJe(t){return oa(),Ur((bee(),d4e),t)}function VJe(t){return Qu(),Ur((Lee(),g4e),t)}function UJe(t){return _l(),Ur((Ote(),y4e),t)}function WJe(t){return cl(),Ur((Kne(),x4e),t)}function KJe(t){return be(),Ur((nee(),p4e),t)}function YJe(t){return Az(),Ur((Dte(),k4e),t)}function XJe(t){return Cl(),Ur((Lte(),C4e),t)}function QJe(t){return vE(),Ur((Ene(),R4e),t)}function ZJe(t,e){return On(t),t+(On(e),e)}function JJe(t,e){return qd(),Mr(Wt(t.a),e)}function ttn(t,e){return qd(),Mr(Wt(t.a),e)}function ynt(t,e){this.c=t,this.a=e,this.b=e-t}function mKt(t,e,n){this.a=t,this.b=e,this.c=n}function yvt(t,e,n){this.a=t,this.b=e,this.c=n}function xvt(t,e,n){this.a=t,this.b=e,this.c=n}function yKt(t,e,n){this.a=t,this.b=e,this.c=n}function xKt(t,e,n){this.a=t,this.b=e,this.c=n}function Cg(t,e,n){this.e=t,this.a=e,this.c=n}function kKt(t,e,n){nh(),Owt.call(this,t,e,n)}function xnt(t,e,n){nh(),vwt.call(this,t,e,n)}function kvt(t,e,n){nh(),vwt.call(this,t,e,n)}function Evt(t,e,n){nh(),vwt.call(this,t,e,n)}function EKt(t,e,n){nh(),xnt.call(this,t,e,n)}function Tvt(t,e,n){nh(),xnt.call(this,t,e,n)}function TKt(t,e,n){nh(),Tvt.call(this,t,e,n)}function CKt(t,e,n){nh(),kvt.call(this,t,e,n)}function _Kt(t,e,n){nh(),Evt.call(this,t,e,n)}function VM(t,e){return Ar(t),Ar(e),new WHt(t,e)}function Ox(t,e){return Ar(t),Ar(e),new jKt(t,e)}function etn(t,e){return Ar(t),Ar(e),new $Kt(t,e)}function ntn(t,e){return Ar(t),Ar(e),new YHt(t,e)}function u(t,e){return mC(t==null||rst(t,e)),t}function d8(t){var e;return e=new le,Xrt(e,t),e}function rtn(t){var e;return e=new qs,Xrt(e,t),e}function SKt(t){var e;return e=new Mpt,lit(e,t),e}function UM(t){var e;return e=new Qi,lit(e,t),e}function itn(t){return!t.e&&(t.e=new le),t.e}function stn(t){return!t.c&&(t.c=new xm),t.c}function ue(t,e){return t.c[t.c.length]=e,!0}function AKt(t,e){this.c=t,this.b=e,this.a=!1}function Cvt(t){this.d=t,Mtt(this),this.b=Qtn(t.d)}function LKt(){this.a=";,;",this.b="",this.c=""}function atn(t,e,n){MYt.call(this,e,n),this.a=t}function MKt(t,e,n){this.b=t,GVt.call(this,e,n)}function _vt(t,e,n){this.c=t,RR.call(this,e,n)}function Svt(t,e,n){Y4t(n,0,t,e,n.length,!1)}function Gd(t,e,n,r,s){t.b=e,t.c=n,t.d=r,t.a=s}function otn(t,e){e&&(t.b=e,t.a=($p(e),e.a))}function Avt(t,e,n,r,s){t.d=e,t.c=n,t.a=r,t.b=s}function Lvt(t){var e,n;e=t.b,n=t.c,t.b=n,t.c=e}function Mvt(t){var e,n;n=t.d,e=t.a,t.d=e,t.a=n}function Ivt(t){return Vp(den(Bo(t)?Sh(t):t))}function ctn(t,e){return du(UKt(t.d),UKt(e.d))}function utn(t,e){return e==(be(),Bn)?t.c:t.d}function g8(){g8=Z,XCt=(be(),Bn),gV=Hn}function IKt(){this.b=Xt(ye(De((Zf(),Vut))))}function DKt(t){return Wb(),Pt(Xn,Ie,1,t,5,1)}function ltn(t){return new $e(t.c+t.b,t.d+t.a)}function htn(t,e){return LR(),du(t.d.p,e.d.p)}function knt(t){return Qn(t.b!=0),ch(t,t.a.a)}function ftn(t){return Qn(t.b!=0),ch(t,t.c.b)}function Dvt(t,e){if(!t)throw rt(new zqt(e))}function _j(t,e){if(!t)throw rt(new Pn(e))}function Ovt(t,e,n){a8.call(this,t,e),this.b=n}function WM(t,e,n){Kbt.call(this,t,e),this.c=n}function OKt(t,e,n){lee.call(this,e,n),this.d=t}function Nvt(t){dvt(),_k.call(this),this.th(t)}function NKt(t,e,n){this.a=t,q3.call(this,e,n)}function PKt(t,e,n){this.a=t,q3.call(this,e,n)}function Sj(t,e,n){Kbt.call(this,t,e),this.c=n}function FKt(){L8(),Ien.call(this,(Mp(),Uh))}function BKt(t){return t!=null&&!Hit(t,iA,sA)}function dtn(t,e){return(Ure(t)<<4|Ure(e))&ms}function gtn(t,e){return Qj(),hst(t,e),new lXt(t,e)}function Yb(t,e){var n;t.n&&(n=e,ue(t.f,n))}function p8(t,e,n){var r;r=new Hm(n),Wf(t,e,r)}function ptn(t,e){var n;return n=t.c,Zmt(t,e),n}function Pvt(t,e){return e<0?t.g=-1:t.g=e,t}function Aj(t,e){return Jan(t),t.a*=e,t.b*=e,t}function RKt(t,e,n,r,s){t.c=e,t.d=n,t.b=r,t.a=s}function ni(t,e){return hs(t,e,t.c.b,t.c),!0}function Fvt(t){t.a.b=t.b,t.b.a=t.a,t.a=t.b=null}function Ent(t){this.b=t,this.a=Pv(this.b.a).Ed()}function jKt(t,e){this.b=t,this.a=e,f9.call(this)}function $Kt(t,e){this.a=t,this.b=e,f9.call(this)}function zKt(t,e){MYt.call(this,e,1040),this.a=t}function KM(t){return t==0||isNaN(t)?t:t<0?-1:1}function btn(t){return jx(),Zd(t)==ts(Xp(t))}function vtn(t){return jx(),Xp(t)==ts(Zd(t))}function Nv(t,e){return l_(t,new a8(e.a,e.b))}function wtn(t){return!Va(t)&&t.c.i.c==t.d.i.c}function Lj(t){var e;return e=t.n,t.a.b+e.d+e.a}function qKt(t){var e;return e=t.n,t.e.b+e.d+e.a}function Bvt(t){var e;return e=t.n,t.e.a+e.b+e.c}function HKt(t){return gi(),new Vd(0,t)}function mtn(t){return t.a?t.a:rrt(t)}function mC(t){if(!t)throw rt(new Xk(null))}function GKt(){GKt=Z,Lft=(vn(),new D(iut))}function Mj(){Mj=Z,new N3t((Xtt(),but),(Qtt(),put))}function VKt(){VKt=Z,sEt=Pt(ja,te,19,256,0,1)}function Tnt(t,e,n,r){u3t.call(this,t,e,n,r,0,0)}function ytn(t,e,n){return ki(t.b,u(n.b,17),e)}function xtn(t,e,n){return ki(t.b,u(n.b,17),e)}function ktn(t,e){return ue(t,new $e(e.a,e.b))}function Etn(t,e){return t.c=e)throw rt(new _pt)}function sen(t,e,n){return Ji(e,0,zvt(e[0],n[0])),e}function aen(t,e,n){e.Ye(n,Xt(ye(Jn(t.b,n)))*t.a)}function LYt(t,e,n){return y4(),H8(t,e)&&H8(t,n)}function TC(t){return Qu(),!t.Hc(tg)&&!t.Hc(xb)}function Gj(t){return new $e(t.c+t.b/2,t.d+t.a/2)}function Fnt(t,e){return e.kh()?Kp(t.b,u(e,49)):e}function rwt(t,e){this.e=t,this.d=e&64?e|bd:e}function MYt(t,e){this.c=0,this.d=t,this.b=e|64|bd}function Vj(t){this.b=new Yc(11),this.a=(X3(),t)}function Bnt(t){this.b=null,this.a=(X3(),t||mEt)}function IYt(t){this.a=tse(t.a),this.b=new Pu(t.b)}function DYt(t){this.b=t,Lx.call(this,t),PUt(this)}function OYt(t){this.b=t,PM.call(this,t),FUt(this)}function qm(t,e,n){this.a=t,Ix.call(this,e,n,5,6)}function iwt(t,e,n,r){this.b=t,Ss.call(this,e,n,r)}function Qs(t,e,n,r,s){qrt.call(this,t,e,n,r,s,-1)}function CC(t,e,n,r,s){gI.call(this,t,e,n,r,s,-1)}function he(t,e,n,r){Ss.call(this,t,e,n),this.b=r}function Uj(t,e,n,r){WM.call(this,t,e,n),this.b=r}function NYt(t){BVt.call(this,t,!1),this.a=!1}function PYt(t,e){this.b=t,att.call(this,t.b),this.a=e}function FYt(t,e){Gm(),uYe.call(this,t,yz(new wl(e)))}function Wj(t,e){return gi(),new wwt(t,e,0)}function Rnt(t,e){return gi(),new wwt(6,t,e)}function oen(t,e){return hn(t.substr(0,e.length),e)}function kl(t,e){return ea(e)?art(t,e):!!Ao(t.f,e)}function pa(t,e){for(On(e);t.Ob();)e.td(t.Pb())}function K3(t,e,n){Jp(),this.e=t,this.d=e,this.a=n}function _g(t,e,n,r){var s;s=t.i,s.i=e,s.a=n,s.b=r}function swt(t){var e;for(e=t;e.f;)e=e.f;return e}function Fx(t){var e;return e=KC(t),Qn(e!=null),e}function cen(t){var e;return e=Wun(t),Qn(e!=null),e}function v8(t,e){var n;return n=t.a.gc(),bmt(e,n),n-e}function awt(t,e){var n;for(n=0;n0?b.Math.log(t/e):-100}function BYt(t,e){return yc(t,e)<0?-1:yc(t,e)>0?1:0}function hwt(t,e,n){return Ale(t,u(e,46),u(n,167))}function RYt(t,e){return u(ewt(Pv(t.a)).Xb(e),42).cd()}function ven(t,e){return $an(e,t.length),new zKt(t,e)}function qnt(t,e){this.d=t,er.call(this,t),this.e=e}function Fv(t){this.d=(On(t),t),this.a=0,this.c=Iq}function fwt(t,e){vv.call(this,1),this.a=t,this.b=e}function jYt(t,e){return t.c?jYt(t.c,e):ue(t.b,e),t}function wen(t,e,n){var r;return r=Xm(t,e),_rt(t,e,n),r}function dwt(t,e){var n;return n=t.slice(0,e),Mmt(n,t)}function $Yt(t,e,n){var r;for(r=0;r=t.g}function Qnt(t,e,n){var r;return r=cit(t,e,n),z5t(t,r)}function Bx(t,e){var n;n=t.a.length,Xm(t,n),_rt(t,n,e)}function eXt(t,e){var n;n=console[t],n.call(console,e)}function nXt(t,e){var n;++t.j,n=t.Vi(),t.Ii(t.oi(n,e))}function Men(t,e,n){u(e.b,65),mu(e.a,new yvt(t,n,e))}function vwt(t,e,n){oR.call(this,e),this.a=t,this.b=n}function wwt(t,e,n){vv.call(this,t),this.a=e,this.b=n}function mwt(t,e,n){this.a=t,wpt.call(this,e),this.b=n}function rXt(t,e,n){this.a=t,Ywt.call(this,8,e,null,n)}function Ien(t){this.a=(On(Kr),Kr),this.b=t,new jpt}function iXt(t){this.c=t,this.b=this.c.a,this.a=this.c.e}function ywt(t){this.c=t,this.b=t.a.d.a,z2t(t.a.e,this)}function El(t){Pm(t.c!=-1),t.d.$c(t.c),t.b=t.c,t.c=-1}function AC(t){return b.Math.sqrt(t.a*t.a+t.b*t.b)}function Rv(t,e){return b8(e,t.a.c.length),Fe(t.a,e)}function fd(t,e){return Gt(t)===Gt(e)||t!=null&&yi(t,e)}function Den(t){return 0>=t?new fbt:won(t-1)}function Oen(t){return n3?art(n3,t):!1}function sXt(t){return t?t.dc():!t.Kc().Ob()}function Fa(t){return!t.a&&t.c?t.c.b:t.a}function Nen(t){return!t.a&&(t.a=new Ss(kb,t,4)),t.a}function jv(t){return!t.d&&(t.d=new Ss(ho,t,1)),t.d}function On(t){if(t==null)throw rt(new L9);return t}function LC(t){t.c?t.c.He():(t.d=!0,j2n(t))}function $p(t){t.c?$p(t.c):(d2(t),t.d=!0)}function aXt(t){Twt(t.a),t.b=Pt(Xn,Ie,1,t.b.length,5,1)}function Pen(t,e){return du(e.j.c.length,t.j.c.length)}function Fen(t,e){t.c<0||t.b.b=0?t.Bh(n):Q4t(t,e)}function oXt(t){var e,n;return e=t.c.i.c,n=t.d.i.c,e==n}function Ren(t){if(t.p!=4)throw rt(new Iu);return t.e}function jen(t){if(t.p!=3)throw rt(new Iu);return t.e}function $en(t){if(t.p!=6)throw rt(new Iu);return t.f}function zen(t){if(t.p!=6)throw rt(new Iu);return t.k}function qen(t){if(t.p!=3)throw rt(new Iu);return t.j}function Hen(t){if(t.p!=4)throw rt(new Iu);return t.j}function xwt(t){return!t.b&&(t.b=new cR(new Ytt)),t.b}function $v(t){return t.c==-2&&Vk(t,o0n(t.g,t.b)),t.c}function y8(t,e){var n;return n=Unt("",t),n.n=e,n.i=1,n}function Gen(t,e){Int(u(e.b,65),t),mu(e.a,new Jr(t))}function Ven(t,e){Mr((!t.a&&(t.a=new $M(t,t)),t.a),e)}function cXt(t,e){this.b=t,qnt.call(this,t,e),PUt(this)}function uXt(t,e){this.b=t,lvt.call(this,t,e),FUt(this)}function kwt(t,e,n,r){_v.call(this,t,e),this.d=n,this.a=r}function Xj(t,e,n,r){_v.call(this,t,n),this.a=e,this.f=r}function lXt(t,e){CXe.call(this,mon(Ar(t),Ar(e))),this.a=e}function hXt(){L4t.call(this,L2,(gHt(),f5e)),d3n(this)}function fXt(){L4t.call(this,Ph,(t8(),JAt)),kyn(this)}function dXt(){Gr.call(this,"DELAUNAY_TRIANGULATION",0)}function Uen(t){return String.fromCharCode.apply(null,t)}function ki(t,e,n){return ea(e)?xo(t,e,n):su(t.f,e,n)}function Ewt(t){return vn(),t?t.ve():(X3(),X3(),xEt)}function Wen(t,e,n){return Qx(),n.pg(t,u(e.cd(),146))}function gXt(t,e){return Mj(),new N3t(new YUt(t),new KUt(e))}function Ken(t){return Bl(t,Bat),q$(Oa(Oa(5,t),t/10|0))}function Qj(){Qj=Z,hge=new Ztt(ct(ot(M2,1),Dq,42,0,[]))}function pXt(t){return!t.d&&(t.d=new T(t.c.Cc())),t.d}function x8(t){return!t.a&&(t.a=new Yqt(t.c.vc())),t.a}function bXt(t){return!t.b&&(t.b=new Qk(t.c.ec())),t.b}function Wd(t,e){for(;e-- >0;)t=t<<1|(t<0?1:0);return t}function Pc(t,e){return Gt(t)===Gt(e)||t!=null&&yi(t,e)}function Yen(t,e){return Fn(),u(e.b,19).ar&&++r,r}function I0(t){var e,n;return n=(e=new wv,e),P8(n,t),n}function nrt(t){var e,n;return n=(e=new wv,e),D4t(n,t),n}function lnn(t,e){var n;return n=Jn(t.f,e),uyt(e,n),null}function rrt(t){var e;return e=xon(t),e||null}function _Xt(t){return!t.b&&(t.b=new he(Ws,t,12,3)),t.b}function hnn(t){return t!=null&&pM(rU,t.toLowerCase())}function fnn(t,e){return Ls(Fu(t)*xl(t),Fu(e)*xl(e))}function dnn(t,e){return Ls(Fu(t)*xl(t),Fu(e)*xl(e))}function gnn(t,e){return Ls(t.d.c+t.d.b/2,e.d.c+e.d.b/2)}function pnn(t,e){return Ls(t.g.c+t.g.b/2,e.g.c+e.g.b/2)}function SXt(t,e,n){n.a?xu(t,e.b-t.f/2):yu(t,e.a-t.g/2)}function AXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function LXt(t,e,n,r){this.a=t,this.b=e,this.c=n,this.d=r}function Zb(t,e,n,r){this.e=t,this.a=e,this.c=n,this.d=r}function MXt(t,e,n,r){this.a=t,this.c=e,this.d=n,this.b=r}function IXt(t,e,n,r){nh(),EJt.call(this,e,n,r),this.a=t}function DXt(t,e,n,r){nh(),EJt.call(this,e,n,r),this.a=t}function OXt(t,e){this.a=t,xQe.call(this,t,u(t.d,15).Zc(e))}function irt(t){this.f=t,this.c=this.f.e,t.f>0&&Vse(this)}function NXt(t,e,n,r){this.b=t,this.c=r,Get.call(this,e,n)}function PXt(t){return Qn(t.b=0&&hn(t.substr(n,e.length),e)}function zp(t,e,n,r,s,o,h){return new Art(t.e,e,n,r,s,o,h)}function ZXt(t,e,n,r,s,o){this.a=t,eit.call(this,e,n,r,s,o)}function JXt(t,e,n,r,s,o){this.a=t,eit.call(this,e,n,r,s,o)}function tQt(t,e){this.g=t,this.d=ct(ot(o0,1),zg,10,0,[e])}function Sg(t,e){this.e=t,this.a=Xn,this.b=Eue(e),this.c=e}function eQt(t,e){xj.call(this),Rmt(this),this.a=t,this.c=e}function eI(t,e,n,r){Ji(t.c[e.g],n.g,r),Ji(t.c[n.g],e.g,r)}function urt(t,e,n,r){Ji(t.c[e.g],e.g,n),Ji(t.b[e.g],e.g,r)}function Bnn(){return lI(),ct(ot(zCt,1),ae,376,0,[bht,DO])}function Rnn(){return bI(),ct(ot(OTt,1),ae,479,0,[DTt,FG])}function jnn(){return TI(),ct(ot(MTt,1),ae,419,0,[NG,LTt])}function $nn(){return D$(),ct(ot(kTt,1),ae,422,0,[xTt,vlt])}function znn(){return x$(),ct(ot(UTt,1),ae,420,0,[Dlt,VTt])}function qnn(){return yI(),ct(ot(BCt,1),ae,421,0,[dht,ght])}function Hnn(){return BC(),ct(ot(bme,1),ae,523,0,[NS,OS])}function Gnn(){return Vf(),ct(ot($me,1),ae,520,0,[Uy,pb])}function Vnn(){return dd(),ct(ot(Eme,1),ae,516,0,[Rw,Kg])}function Unn(){return E1(),ct(ot(Cme,1),ae,515,0,[j2,z1])}function Wnn(){return qv(),ct(ot(Wme,1),ae,455,0,[bb,e5])}function Knn(){return v$(),ct(ot(h_t,1),ae,425,0,[Iht,l_t])}function Ynn(){return d$(),ct(ot(u_t,1),ae,480,0,[Mht,c_t])}function Xnn(){return iz(),ct(ot(f_t,1),ae,495,0,[TV,E7])}function Qnn(){return N$(),ct(ot(g_t,1),ae,426,0,[d_t,Pht])}function Znn(){return NI(),ct(ot(vSt,1),ae,429,0,[OV,bSt])}function Jnn(){return hI(),ct(ot(Y_t,1),ae,430,0,[Ght,IV])}function trn(){return Nz(),ct(ot(NEt,1),ae,428,0,[Iut,OEt])}function ern(){return $$(),ct(ot(FEt,1),ae,427,0,[PEt,Dut])}function nrn(){return z$(),ct(ot(l7t,1),ae,424,0,[Hut,rG])}function rrn(){return q8(),ct(ot(jbe,1),ae,511,0,[pO,nlt])}function c$(t,e,n,r){return n>=0?t.jh(e,n,r):t.Sg(null,n,r)}function lrt(t){return t.b.b==0?t.a.$e():knt(t.b)}function irn(t){if(t.p!=5)throw rt(new Iu);return Sr(t.f)}function srn(t){if(t.p!=5)throw rt(new Iu);return Sr(t.k)}function Dwt(t){return Gt(t.a)===Gt((hit(),_ft))&&a3n(t),t.a}function nQt(t){this.a=u(Ar(t),271),this.b=(vn(),new C2t(t))}function rQt(t,e){hpt(this,new $e(t.a,t.b)),XB(this,UM(e))}function qv(){qv=Z,bb=new $bt(d6,0),e5=new $bt(g6,1)}function dd(){dd=Z,Rw=new Rbt(g6,0),Kg=new Rbt(d6,1)}function Hv(){pKe.call(this,new kx(Qm(12))),x2t(!0),this.a=2}function hrt(t,e,n){gi(),vv.call(this,t),this.b=e,this.a=n}function Owt(t,e,n){nh(),oR.call(this,e),this.a=t,this.b=n}function iQt(t){xj.call(this),Rmt(this),this.a=t,this.c=!0}function sQt(t){var e;e=t.c.d.b,t.b=e,t.a=t.c.d,e.a=t.c.d.b=t}function u$(t){var e;fon(t.a),bUt(t.a),e=new tr(t.a),c3t(e)}function arn(t,e){gue(t,!0),mu(t.e.wf(),new bvt(t,!0,e))}function l$(t,e){return RZt(e),uon(t,Pt(Tr,Xr,25,e,15,1),e)}function orn(t,e){return jx(),t==ts(Zd(e))||t==ts(Xp(e))}function Fc(t,e){return e==null?ec(Ao(t.f,null)):U9(t.g,e)}function crn(t){return t.b==0?null:(Qn(t.b!=0),ch(t,t.a.a))}function ps(t){return Math.max(Math.min(t,vi),-2147483648)|0}function urn(t,e){var n=xut[t.charCodeAt(0)];return n??t}function h$(t,e){return r$(t,"set1"),r$(e,"set2"),new eGt(t,e)}function lrn(t,e){var n;return n=ion(t.f,e),Li(mj(n),t.f.d)}function IC(t,e){var n,r;return n=e,r=new $t,nhe(t,n,r),r.d}function frt(t,e,n,r){var s;s=new UWt,e.a[n.g]=s,Nx(t.b,r,s)}function Nwt(t,e,n){var r;r=t.Yg(e),r>=0?t.sh(r,n):E5t(t,e,n)}function Q3(t,e,n){g$(),t&&ki(Eft,t,e),t&&ki(cN,t,n)}function aQt(t,e,n){this.i=new le,this.b=t,this.g=e,this.a=n}function f$(t,e,n){this.c=new le,this.e=t,this.f=e,this.b=n}function Pwt(t,e,n){this.a=new le,this.e=t,this.f=e,this.c=n}function oQt(t,e){uj(this),this.f=e,this.g=t,n$(this),this._d()}function nI(t,e){var n;n=t.q.getHours(),t.q.setDate(e),y_(t,n)}function cQt(t,e){var n;for(Ar(e),n=t.a;n;n=n.c)e.Od(n.g,n.i)}function uQt(t){var e;return e=new xR(Qm(t.length)),_yt(e,t),e}function hrn(t){function e(){}return e.prototype=t||{},new e}function frn(t,e){return Rne(t,e)?(Fee(t),!0):!1}function D0(t,e){if(e==null)throw rt(new L9);return uhn(t,e)}function drn(t){if(t.qe())return null;var e=t.n;return $H[e]}function rI(t){return t.Db>>16!=3?null:u(t.Cb,33)}function k1(t){return t.Db>>16!=9?null:u(t.Cb,33)}function lQt(t){return t.Db>>16!=6?null:u(t.Cb,79)}function hQt(t){return t.Db>>16!=7?null:u(t.Cb,235)}function fQt(t){return t.Db>>16!=7?null:u(t.Cb,160)}function ts(t){return t.Db>>16!=11?null:u(t.Cb,33)}function dQt(t,e){var n;return n=t.Yg(e),n>=0?t.lh(n):zst(t,e)}function gQt(t,e){var n;return n=new $vt(e),pae(n,t),new Pu(n)}function Fwt(t){var e;return e=t.d,e=t.si(t.f),Mr(t,e),e.Ob()}function pQt(t,e){return t.b+=e.b,t.c+=e.c,t.d+=e.d,t.a+=e.a,t}function drt(t,e){return b.Math.abs(t)0}function bQt(){this.a=new A0,this.e=new qs,this.g=0,this.i=0}function vQt(t){this.a=t,this.b=Pt(dme,te,1944,t.e.length,0,2)}function grt(t,e,n){var r;r=ire(t,e,n),t.b=new rz(r.c.length)}function E1(){E1=Z,j2=new Bbt(yot,0),z1=new Bbt("UP",1)}function d$(){d$=Z,Mht=new zbt(I1e,0),c_t=new zbt("FAN",1)}function g$(){g$=Z,Eft=new Cr,cN=new Cr,NYe(Lge,new XT)}function prn(t){if(t.p!=0)throw rt(new Iu);return aC(t.f,0)}function brn(t){if(t.p!=0)throw rt(new Iu);return aC(t.k,0)}function wQt(t){return t.Db>>16!=3?null:u(t.Cb,147)}function C8(t){return t.Db>>16!=6?null:u(t.Cb,235)}function Vm(t){return t.Db>>16!=17?null:u(t.Cb,26)}function mQt(t,e){var n=t.a=t.a||[];return n[e]||(n[e]=t.le(e))}function vrn(t,e){var n;return n=t.a.get(e),n??new Array}function wrn(t,e){var n;n=t.q.getHours(),t.q.setMonth(e),y_(t,n)}function xo(t,e,n){return e==null?su(t.f,null,n):nw(t.g,e,n)}function DC(t,e,n,r,s,o){return new F0(t.e,e,t.aj(),n,r,s,o)}function iI(t,e,n){return t.a=Dl(t.a,0,e)+(""+n)+OM(t.a,e),t}function mrn(t,e,n){return ue(t.a,(Qj(),hst(e,n),new _v(e,n))),t}function Bwt(t){return E2t(t.c),t.e=t.a=t.c,t.c=t.c.c,++t.d,t.a.f}function yQt(t){return E2t(t.e),t.c=t.a=t.e,t.e=t.e.e,--t.d,t.a.f}function sa(t,e){t.d&&vu(t.d.e,t),t.d=e,t.d&&ue(t.d.e,t)}function Da(t,e){t.c&&vu(t.c.g,t),t.c=e,t.c&&ue(t.c.g,t)}function ko(t,e){t.c&&vu(t.c.a,t),t.c=e,t.c&&ue(t.c.a,t)}function Uo(t,e){t.i&&vu(t.i.j,t),t.i=e,t.i&&ue(t.i.j,t)}function xQt(t,e,n){this.a=e,this.c=t,this.b=(Ar(n),new Pu(n))}function kQt(t,e,n){this.a=e,this.c=t,this.b=(Ar(n),new Pu(n))}function EQt(t,e){this.a=t,this.c=nc(this.a),this.b=new o$(e)}function yrn(t){var e;return d2(t),e=new qs,Ri(t,new Ve(e))}function Um(t,e){if(t<0||t>e)throw rt(new mo(qxt+t+Hxt+e))}function Rwt(t,e){return dYt(t.a,e)?cwt(t,u(e,22).g,null):null}function xrn(t){return Iit(),Fn(),u(t.a,81).d.e!=0}function TQt(){TQt=Z,gge=Wr((dR(),ct(ot(dge,1),ae,538,0,[mut])))}function CQt(){CQt=Z,tme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function jwt(){jwt=Z,eme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function _Qt(){_Qt=Z,rme=Ku(new Hs,(Wa(),Io),(ro(),bO))}function SQt(){SQt=Z,wme=bi(new Hs,(Wa(),Io),(ro(),fS))}function Ol(){Ol=Z,xme=bi(new Hs,(Wa(),Io),(ro(),fS))}function AQt(){AQt=Z,kme=bi(new Hs,(Wa(),Io),(ro(),fS))}function prt(){prt=Z,Sme=bi(new Hs,(Wa(),Io),(ro(),fS))}function LQt(){LQt=Z,dye=Ku(new Hs,(uE(),FS),(f_(),xht))}function t2(t,e,n,r){this.c=t,this.d=r,vrt(this,e),wrt(this,n)}function zx(t){this.c=new Qi,this.b=t.b,this.d=t.c,this.a=t.a}function brt(t){this.a=b.Math.cos(t),this.b=b.Math.sin(t)}function vrt(t,e){t.a&&vu(t.a.k,t),t.a=e,t.a&&ue(t.a.k,t)}function wrt(t,e){t.b&&vu(t.b.f,t),t.b=e,t.b&&ue(t.b.f,t)}function MQt(t,e){Men(t,t.b,t.c),u(t.b.b,65),e&&u(e.b,65).b}function krn(t,e){e3t(t,e),Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),2)}function mrt(t,e){Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),4),Xc(t,e)}function p$(t,e){Et(t.Cb,179)&&(u(t.Cb,179).tb=null),Xc(t,e)}function Bc(t,e){return to(),Yrt(e)?new Ij(e,t):new DM(e,t)}function Ern(t,e){var n,r;n=e.c,r=n!=null,r&&Bx(t,new Hm(e.c))}function IQt(t){var e,n;return n=(t8(),e=new wv,e),P8(n,t),n}function DQt(t){var e,n;return n=(t8(),e=new wv,e),P8(n,t),n}function OQt(t,e){var n;return n=new Ch(t),e.c[e.c.length]=n,n}function NQt(t,e){var n;return n=u(ny($x(t.a),e),14),n?n.gc():0}function PQt(t){var e;return d2(t),e=(X3(),X3(),yEt),G$(t,e)}function FQt(t){for(var e;;)if(e=t.Pb(),!t.Ob())return e}function $wt(t,e){dKe.call(this,new kx(Qm(t))),Bl(e,Yhe),this.a=e}function Kd(t,e,n){Hre(e,n,t.gc()),this.c=t,this.a=e,this.b=n-e}function BQt(t,e,n){var r;Hre(e,n,t.c.length),r=n-e,lbt(t.c,e,r)}function Trn(t,e){NUt(t,Sr(Ps(Fp(e,24),Pq)),Sr(Ps(e,Pq)))}function An(t,e){if(t<0||t>=e)throw rt(new mo(qxt+t+Hxt+e))}function Rr(t,e){if(t<0||t>=e)throw rt(new Zpt(qxt+t+Hxt+e))}function _n(t,e){this.b=(On(t),t),this.a=e&yy?e:e|64|bd}function RQt(t){pUt(this),Yzt(this.a,Tyt(b.Math.max(8,t))<<1)}function T1(t){return Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a]))}function Crn(){return I1(),ct(ot(ll,1),ae,132,0,[MEt,Gl,Ly])}function _rn(){return Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])}function Srn(){return Xu(),ct(ot(Zge,1),ae,461,0,[Sd,cb,mf])}function Arn(){return wu(),ct(ot(tpe,1),ae,462,0,[e1,ub,yf])}function Lrn(){return ew(),ct(ot(A7t,1),ae,423,0,[$4,S7t,Jut])}function Mrn(){return jC(),ct(ot(T7t,1),ae,379,0,[Wut,Uut,Kut])}function Irn(){return YC(),ct(ot(SCt,1),ae,378,0,[oht,_Ct,uV])}function Drn(){return Yx(),ct(ot(TTt,1),ae,314,0,[S6,wO,ETt])}function Orn(){return X$(),ct(ot(_Tt,1),ae,337,0,[CTt,OG,wlt])}function Nrn(){return u2(),ct(ot(g2e,1),ae,450,0,[xlt,u7,G4])}function Prn(){return Jv(),ct(ot(clt,1),ae,361,0,[Aw,hb,Sw])}function Frn(){return B0(),ct(ot(k2e,1),ae,303,0,[yO,U4,A6])}function Brn(){return W8(),ct(ot(Ilt,1),ae,292,0,[Llt,Mlt,mO])}function Rrn(){return so(),ct(ot(Wwe,1),ae,452,0,[MS,Ju,eu])}function jrn(){return j0(),ct(ot(FCt,1),ae,339,0,[gb,PCt,fht])}function $rn(){return uz(),ct(ot($Ct,1),ae,375,0,[RCt,pht,jCt])}function zrn(){return gz(),ct(ot(WCt,1),ae,377,0,[mht,x7,Vy])}function qrn(){return tE(),ct(ot(HCt,1),ae,336,0,[vht,qCt,IS])}function Hrn(){return oz(),ct(ot(UCt,1),ae,338,0,[VCt,wht,GCt])}function Grn(){return Zv(),ct(ot(hme,1),ae,454,0,[OO,DS,dV])}function Vrn(){return Cz(),ct(ot(wye,1),ae,442,0,[Nht,Dht,Oht])}function Urn(){return RI(),ct(ot(v_t,1),ae,380,0,[CV,p_t,b_t])}function Wrn(){return Tz(),ct(ot(P_t,1),ae,381,0,[N_t,$ht,O_t])}function Krn(){return cz(),ct(ot(I_t,1),ae,293,0,[jht,M_t,L_t])}function Yrn(){return GI(),ct(ot(zht,1),ae,437,0,[AV,LV,MV])}function Xrn(){return $0(),ct(ot(TAt,1),ae,334,0,[HV,Zg,YS])}function Qrn(){return A1(),ct(ot(fAt,1),ae,272,0,[_7,Yy,S7])}function Zrn(t,e){return mbn(t,e,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function Jrn(t,e,n){var r;return r=E_(t,e,!1),r.b<=e&&r.a<=n}function jQt(t,e,n){var r;r=new CQ,r.b=e,r.a=n,++e.b,ue(t.d,r)}function tin(t,e){var n;return n=(On(t),t).g,P2t(!!n),On(e),n(e)}function zwt(t,e){var n,r;return r=v8(t,e),n=t.a.Zc(r),new tGt(t,n)}function ein(t){return t.Db>>16!=6?null:u(Gst(t),235)}function nin(t){if(t.p!=2)throw rt(new Iu);return Sr(t.f)&ms}function rin(t){if(t.p!=2)throw rt(new Iu);return Sr(t.k)&ms}function iin(t){return t.a==(L8(),oU)&&_tt(t,Pbn(t.g,t.b)),t.a}function qx(t){return t.d==(L8(),oU)&&E9(t,Awn(t.g,t.b)),t.d}function J(t){return Qn(t.ar?1:0}function $Qt(t,e){var n,r;return n=Grt(e),r=n,u(Jn(t.c,r),19).a}function zQt(t,e){var n;for(n=t+"";n.length0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function aZt(t){return t.a?t.e.length==0?t.a.a:t.a.a+(""+t.e):t.c}function pin(t){return!!t.a&&il(t.a.a).i!=0&&!(t.b&&cst(t.b))}function bin(t){return!!t.u&&Lc(t.u.a).i!=0&&!(t.n&&ost(t.n))}function oZt(t){return _nt(t.e.Hd().gc()*t.c.Hd().gc(),16,new ox(t))}function vin(t,e){return BYt(ku(t.q.getTime()),ku(e.q.getTime()))}function gd(t){return u(D1(t,Pt(tlt,Fot,17,t.c.length,0,1)),474)}function sI(t){return u(D1(t,Pt(o0,zg,10,t.c.length,0,1)),193)}function win(t){return Ol(),!Va(t)&&!(!Va(t)&&t.c.i.c==t.d.i.c)}function cZt(t,e,n){var r;r=(Ar(t),new Pu(t)),Kfn(new xQt(r,e,n))}function aI(t,e,n){var r;r=(Ar(t),new Pu(t)),Yfn(new kQt(r,e,n))}function uZt(t,e){var n;return n=1-e,t.a[n]=nz(t.a[n],n),nz(t,e)}function lZt(t,e){var n;t.e=new Vpt,n=gy(e),Xs(n,t.c),rue(t,n,0)}function aa(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ni(t.a,s)}function xe(t,e,n,r){var s;s=new WF,s.a=e,s.b=n,s.c=r,ni(t.b,s)}function ff(t){var e,n,r;return e=new GYt,n=uat(e,t),r4n(e),r=n,r}function Wwt(){var t,e,n;return e=(n=(t=new wv,t),n),ue(uLt,e),e}function w$(t){return t.j.c=Pt(Xn,Ie,1,0,5,1),Twt(t.c),Zen(t.a),t}function Z3(t){return q9(),Et(t.g,10)?u(t.g,10):null}function min(t){return Y3(t).dc()?!1:(wXe(t,new ht),!0)}function yin(t){if(!("stack"in t))try{throw t}catch{}return t}function oI(t,e){if(t<0||t>=e)throw rt(new mo(Ogn(t,e)));return t}function hZt(t,e,n){if(t<0||en)throw rt(new mo(ign(t,e,n)))}function Ert(t,e){if(Ns(t.a,e),e.d)throw rt(new Go(vfe));e.d=t}function Trt(t,e){if(e.$modCount!=t.$modCount)throw rt(new eh)}function fZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function dZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function gZt(t,e){return Et(e,42)?dst(t.a,u(e,42)):!1}function xin(t,e){return t.a<=t.b?(e.ud(t.a++),!0):!1}function Vv(t){var e;return Bo(t)?(e=t,e==-0?0:e):Man(t)}function m$(t){var e;return $p(t),e=new Ke,B3(t.a,new bn(e)),e}function pZt(t){var e;return $p(t),e=new Ge,B3(t.a,new pe(e)),e}function ha(t,e){this.a=t,fx.call(this,t),Um(e,t.gc()),this.b=e}function Kwt(t){this.e=t,this.b=this.e.a.entries(),this.a=new Array}function kin(t){return _nt(t.e.Hd().gc()*t.c.Hd().gc(),273,new GB(t))}function y$(t){return new Yc((Bl(t,Bat),q$(Oa(Oa(5,t),t/10|0))))}function bZt(t){return u(D1(t,Pt(Fbe,Kfe,11,t.c.length,0,1)),1943)}function Ein(t,e,n){return n.f.c.length>0?hwt(t.a,e,n):hwt(t.b,e,n)}function Tin(t,e,n){t.d&&vu(t.d.e,t),t.d=e,t.d&&$m(t.d.e,n,t)}function Crt(t,e){v5n(e,t),Mvt(t.d),Mvt(u(Q(t,(Te(),nV)),207))}function NC(t,e){b5n(e,t),Lvt(t.d),Lvt(u(Q(t,(Te(),nV)),207))}function Uv(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=n.fe()),r}function _8(t,e){var n,r;return n=Xm(t,e),r=null,n&&(r=n.ie()),r}function PC(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=n.ie()),r}function O0(t,e){var n,r;return n=D0(t,e),r=null,n&&(r=j4t(n)),r}function Cin(t,e,n){var r;return r=oE(n),vq(t.g,r,e),vq(t.i,e,n),e}function _in(t,e,n){var r;r=thn();try{return IQe(t,e,n)}finally{Bin(r)}}function vZt(t){var e;e=t.Wg(),this.a=Et(e,69)?u(e,69).Zh():e.Kc()}function Hs(){Iqt.call(this),this.j.c=Pt(Xn,Ie,1,0,5,1),this.a=-1}function Ywt(t,e,n,r){this.d=t,this.n=e,this.g=n,this.o=r,this.p=-1}function wZt(t,e,n,r){this.e=r,this.d=null,this.c=t,this.a=e,this.b=n}function Xwt(t,e,n){this.d=new sR(this),this.e=t,this.i=e,this.f=n}function x$(){x$=Z,Dlt=new Obt(NE,0),VTt=new Obt("TOP_LEFT",1)}function mZt(){mZt=Z,YCt=gXt(de(1),de(4)),KCt=gXt(de(1),de(2))}function yZt(){yZt=Z,c3e=Wr((IR(),ct(ot(o3e,1),ae,551,0,[Hht])))}function xZt(){xZt=Z,a3e=Wr((MR(),ct(ot(K_t,1),ae,482,0,[qht])))}function kZt(){kZt=Z,_3e=Wr((H9(),ct(ot(pSt,1),ae,530,0,[jO])))}function EZt(){EZt=Z,Dpe=Wr((AR(),ct(ot(r7t,1),ae,481,0,[Rut])))}function Sin(){return tw(),ct(ot(Cpe,1),ae,406,0,[aO,sO,Fut,But])}function Ain(){return P$(),ct(ot(KH,1),ae,297,0,[Aut,_Et,SEt,AEt])}function Lin(){return s_(),ct(ot(Mpe,1),ae,394,0,[hO,JH,tG,fO])}function Min(){return n6(),ct(ot(Spe,1),ae,323,0,[cO,oO,uO,lO])}function Iin(){return K8(),ct(ot(Tbe,1),ae,405,0,[_w,Dy,Iy,j4])}function Din(){return dz(),ct(ot(Hbe,1),ae,360,0,[alt,_G,SG,vO])}function TZt(t,e,n,r){return Et(n,54)?new lWt(t,e,n,r):new twt(t,e,n,r)}function Oin(){return M1(),ct(ot(Zbe,1),ae,411,0,[_6,i7,s7,olt])}function Nin(t){var e;return t.j==(be(),mr)&&(e=Uoe(t),Nu(e,Hn))}function Pin(t,e){var n;n=e.a,Da(n,e.c.d),sa(n,e.d.d),Jm(n.a,t.n)}function CZt(t,e){return u(Ov(qj(u(Ai(t.k,e),15).Oc(),z4)),113)}function _Zt(t,e){return u(Ov(Hj(u(Ai(t.k,e),15).Oc(),z4)),113)}function Fin(t){return new _n(Oon(u(t.a.dd(),14).gc(),t.a.cd()),16)}function S8(t){return Et(t,14)?u(t,14).dc():!t.Kc().Ob()}function Hx(t){return q9(),Et(t.g,145)?u(t.g,145):null}function SZt(t){if(t.e.g!=t.b)throw rt(new eh);return!!t.c&&t.d>0}function ti(t){return Qn(t.b!=t.d.c),t.c=t.b,t.b=t.b.a,++t.a,t.c.c}function Qwt(t,e){On(e),Ji(t.a,t.c,e),t.c=t.c+1&t.a.length-1,Ase(t)}function qp(t,e){On(e),t.b=t.b-1&t.a.length-1,Ji(t.a,t.b,e),Ase(t)}function AZt(t,e){var n;for(n=t.j.c.length;n0&&Ic(t.g,0,e,0,t.i),e}function DZt(t,e){NR();var n;return n=u(Jn(nU,t),55),!n||n.wj(e)}function Yin(t){if(t.p!=1)throw rt(new Iu);return Sr(t.f)<<24>>24}function Xin(t){if(t.p!=1)throw rt(new Iu);return Sr(t.k)<<24>>24}function Qin(t){if(t.p!=7)throw rt(new Iu);return Sr(t.k)<<16>>16}function Zin(t){if(t.p!=7)throw rt(new Iu);return Sr(t.f)<<16>>16}function N0(t){var e;for(e=0;t.Ob();)t.Pb(),e=Oa(e,1);return q$(e)}function OZt(t,e){var n;return n=new Lm,t.xd(n),n.a+="..",e.yd(n),n.a}function Jin(t,e,n){var r;r=u(Jn(t.g,n),57),ue(t.a.c,new la(e,r))}function tsn(t,e,n){return Pnt(ye(ec(Ao(t.f,e))),ye(ec(Ao(t.f,n))))}function k$(t,e,n){return mq(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function esn(t,e,n){return EE(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function nsn(t,e,n){return Cbn(t,e,n,Et(e,99)&&(u(e,18).Bb&Ya)!=0)}function tmt(t,e){return t==(Gn(),Ds)&&e==Ds?4:t==Ds||e==Ds?8:32}function NZt(t,e){return Gt(e)===Gt(t)?"(this Map)":e==null?Tu:$o(e)}function rsn(t,e){return u(e==null?ec(Ao(t.f,null)):U9(t.g,e),281)}function PZt(t,e,n){var r;return r=oE(n),ki(t.b,r,e),ki(t.c,e,n),e}function FZt(t,e){var n;for(n=e;n;)Fm(t,n.i,n.j),n=ts(n);return t}function emt(t,e){var n;return n=JM(d8(new Vrt(t,e))),Oj(new Vrt(t,e)),n}function Yd(t,e){to();var n;return n=u(t,66).Mj(),B0n(n,e),n.Ok(e)}function isn(t,e,n,r,s){var o;o=Mbn(s,n,r),ue(e,Agn(s,o)),m0n(t,s,e)}function BZt(t,e,n){t.i=0,t.e=0,e!=n&&(cre(t,e,n),ore(t,e,n))}function nmt(t,e){var n;n=t.q.getHours(),t.q.setFullYear(e+nb),y_(t,n)}function ssn(t,e,n){if(n){var r=n.ee();t.a[e]=r(n)}else delete t.a[e]}function _rt(t,e,n){if(n){var r=n.ee();n=r(n)}else n=void 0;t.a[e]=n}function RZt(t){if(t<0)throw rt(new Hqt("Negative array size: "+t))}function Lc(t){return t.n||(rl(t),t.n=new vYt(t,ho,t),So(t)),t.n}function FC(t){return Qn(t.a=0&&t.a[n]===e[n];n--);return n<0}function HZt(t,e){J8();var n;return n=t.j.g-e.j.g,n!=0?n:0}function GZt(t,e){return On(e),t.a!=null?Gtn(e.Kb(t.a)):WH}function E$(t){var e;return t?new $vt(t):(e=new A0,lit(e,t),e)}function Pl(t,e){var n;return e.b.Kb(Fte(t,e.c.Ee(),(n=new Dn(e),n)))}function T$(t){E4t(),NUt(this,Sr(Ps(Fp(t,24),Pq)),Sr(Ps(t,Pq)))}function VZt(){VZt=Z,Uge=Wr((Nz(),ct(ot(NEt,1),ae,428,0,[Iut,OEt])))}function UZt(){UZt=Z,Wge=Wr(($$(),ct(ot(FEt,1),ae,427,0,[PEt,Dut])))}function WZt(){WZt=Z,Ype=Wr((z$(),ct(ot(l7t,1),ae,424,0,[Hut,rG])))}function KZt(){KZt=Z,$be=Wr((q8(),ct(ot(jbe,1),ae,511,0,[pO,nlt])))}function YZt(){YZt=Z,d2e=Wr((TI(),ct(ot(MTt,1),ae,419,0,[NG,LTt])))}function XZt(){XZt=Z,v2e=Wr((bI(),ct(ot(OTt,1),ae,479,0,[DTt,FG])))}function QZt(){QZt=Z,Xwe=Wr((lI(),ct(ot(zCt,1),ae,376,0,[bht,DO])))}function ZZt(){ZZt=Z,Uwe=Wr((yI(),ct(ot(BCt,1),ae,421,0,[dht,ght])))}function JZt(){JZt=Z,u2e=Wr((D$(),ct(ot(kTt,1),ae,422,0,[xTt,vlt])))}function tJt(){tJt=Z,T2e=Wr((x$(),ct(ot(UTt,1),ae,420,0,[Dlt,VTt])))}function eJt(){eJt=Z,zme=Wr((Vf(),ct(ot($me,1),ae,520,0,[Uy,pb])))}function nJt(){nJt=Z,vme=Wr((BC(),ct(ot(bme,1),ae,523,0,[NS,OS])))}function rJt(){rJt=Z,Tme=Wr((dd(),ct(ot(Eme,1),ae,516,0,[Rw,Kg])))}function iJt(){iJt=Z,_me=Wr((E1(),ct(ot(Cme,1),ae,515,0,[j2,z1])))}function sJt(){sJt=Z,Kme=Wr((qv(),ct(ot(Wme,1),ae,455,0,[bb,e5])))}function aJt(){aJt=Z,fye=Wr((v$(),ct(ot(h_t,1),ae,425,0,[Iht,l_t])))}function oJt(){oJt=Z,vye=Wr((iz(),ct(ot(f_t,1),ae,495,0,[TV,E7])))}function cJt(){cJt=Z,hye=Wr((d$(),ct(ot(u_t,1),ae,480,0,[Mht,c_t])))}function uJt(){uJt=Z,yye=Wr((N$(),ct(ot(g_t,1),ae,426,0,[d_t,Pht])))}function lJt(){lJt=Z,S3e=Wr((NI(),ct(ot(vSt,1),ae,429,0,[OV,bSt])))}function hJt(){hJt=Z,u3e=Wr((hI(),ct(ot(Y_t,1),ae,430,0,[Ght,IV])))}function BC(){BC=Z,NS=new Fbt("UPPER",0),OS=new Fbt("LOWER",1)}function usn(t,e){var n;n=new mx,Jb(n,"x",e.a),Jb(n,"y",e.b),Bx(t,n)}function lsn(t,e){var n;n=new mx,Jb(n,"x",e.a),Jb(n,"y",e.b),Bx(t,n)}function hsn(t,e){var n,r;r=!1;do n=Jne(t,e),r=r|n;while(n);return r}function smt(t,e){var n,r;for(n=e,r=0;n>0;)r+=t.a[n],n-=n&-n;return r}function fJt(t,e){var n;for(n=e;n;)Fm(t,-n.i,-n.j),n=ts(n);return t}function va(t,e){var n,r;for(On(e),r=t.Kc();r.Ob();)n=r.Pb(),e.td(n)}function dJt(t,e){var n;return n=e.cd(),new _v(n,t.e.pc(n,u(e.dd(),14)))}function hs(t,e,n,r){var s;s=new Ht,s.c=e,s.b=n,s.a=r,r.b=n.a=s,++t.b}function ah(t,e,n){var r;return r=(An(e,t.c.length),t.c[e]),t.c[e]=n,r}function fsn(t,e,n){return u(e==null?su(t.f,null,n):nw(t.g,e,n),281)}function Mrt(t){return t.c&&t.d?qwt(t.c)+"->"+qwt(t.d):"e_"+Iv(t)}function A8(t,e){return(d2(t),j9(new Tn(t,new Lmt(e,t.a)))).sd(JE)}function dsn(){return Wa(),ct(ot(C7t,1),ae,356,0,[Ad,lb,ou,qc,Io])}function gsn(){return be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])}function psn(t){return vR(),function(){return _in(t,this,arguments)}}function bsn(){return Date.now?Date.now():new Date().getTime()}function Va(t){return!t.c||!t.d?!1:!!t.c.i&&t.c.i==t.d.i}function gJt(t){if(!t.c.Sb())throw rt(new lc);return t.a=!0,t.c.Ub()}function cI(t){t.i=0,yM(t.b,null),yM(t.c,null),t.a=null,t.e=null,++t.g}function amt(t){EYe.call(this,t==null?Tu:$o(t),Et(t,78)?u(t,78):null)}function pJt(t){$he(),jzt(this),this.a=new Qi,Oyt(this,t),ni(this.a,t)}function bJt(){Yet(this),this.b=new $e(ss,ss),this.a=new $e(Ts,Ts)}function vJt(t,e){this.c=0,this.b=e,VVt.call(this,t,17493),this.a=this.c}function Irt(t){C$(),!R1&&(this.c=t,this.e=!0,this.a=new le)}function C$(){C$=Z,R1=!0,Fge=!1,Bge=!1,jge=!1,Rge=!1}function omt(t,e){return Et(e,149)?hn(t.c,u(e,149).c):!1}function cmt(t,e){var n;return n=0,t&&(n+=t.f.a/2),e&&(n+=e.f.a/2),n}function Drt(t,e){var n;return n=u(Wv(t.d,e),23),n||u(Wv(t.e,e),23)}function wJt(t){this.b=t,er.call(this,t),this.a=u(In(this.b.a,4),126)}function mJt(t){this.b=t,Mx.call(this,t),this.a=u(In(this.b.a,4),126)}function rl(t){return t.t||(t.t=new Lzt(t),JC(new qqt(t),0,t.t)),t.t}function vsn(){return ao(),ct(ot(WS,1),ae,103,0,[c0,kf,jh,Q0,Z0])}function wsn(){return c4(),ct(ot(QS,1),ae,249,0,[mb,JO,CAt,XS,_At])}function msn(){return Xf(),ct(ot(Qg,1),ae,175,0,[qn,Js,Id,$2,Xg])}function ysn(){return iD(),ct(ot(J_t,1),ae,316,0,[X_t,Vht,Z_t,Uht,Q_t])}function xsn(){return a_(),ct(ot(LCt,1),ae,315,0,[ACt,lht,hht,AS,LS])}function ksn(){return v2(),ct(ot(ATt,1),ae,335,0,[mlt,STt,ylt,pS,gS])}function Esn(){return yE(),ct(ot(r3e,1),ae,355,0,[n5,R6,qS,zS,HS])}function Tsn(){return g4(),ct(ot(t2e,1),ae,363,0,[LG,IG,DG,MG,AG])}function Csn(){return hh(),ct(ot(s9t,1),ae,163,0,[CO,yS,fb,xS,Fy])}function L8(){L8=Z;var t,e;aU=(t8(),e=new lR,e),oU=(t=new Utt,t)}function yJt(t){var e;return t.c||(e=t.r,Et(e,88)&&(t.c=u(e,26))),t.c}function _sn(t){return t.e=3,t.d=t.Yb(),t.e!=2?(t.e=0,!0):!1}function Ort(t){var e,n,r;return e=t&ul,n=t>>22&ul,r=t<0?W0:0,ru(e,n,r)}function Ssn(t){var e,n,r,s;for(n=t,r=0,s=n.length;r0?wie(t,e):$ce(t,-e)}function umt(t,e){return e==0||t.e==0?t:e>0?$ce(t,e):wie(t,-e)}function Lr(t){if(zr(t))return t.c=t.a,t.a.Pb();throw rt(new lc)}function kJt(t){var e,n;return e=t.c.i,n=t.d.i,e.k==(Gn(),xs)&&n.k==xs}function Nrt(t){var e;return e=new zv,Lo(e,t),Jt(e,(Te(),_o),null),e}function Prt(t,e,n){var r;return r=t.Yg(e),r>=0?t._g(r,n,!0):lw(t,e,n)}function lmt(t,e,n,r){var s;for(s=0;se)throw rt(new mo(U4t(t,e,"index")));return t}function Frt(t,e,n,r){var s;return s=Pt(Tr,Xr,25,e,15,1),$dn(s,t,e,n,r),s}function Lsn(t,e){var n;n=t.q.getHours()+(e/60|0),t.q.setMinutes(e),y_(t,n)}function Msn(t,e){return b.Math.min(Hp(e.a,t.d.d.c),Hp(e.b,t.d.d.c))}function Ux(t,e){return ea(e)?e==null?u5t(t.f,null):Pne(t.g,e):u5t(t.f,e)}function S1(t){this.c=t,this.a=new S(this.c.a),this.b=new S(this.c.b)}function _$(){this.e=new le,this.c=new le,this.d=new le,this.b=new le}function SJt(){this.g=new Apt,this.b=new Apt,this.a=new le,this.k=new le}function AJt(t,e,n){this.a=t,this.c=e,this.d=n,ue(e.e,this),ue(n.b,this)}function LJt(t,e){GVt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function MJt(t,e){VVt.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function vmt(t,e){Get.call(this,e.rd(),e.qd()&-6),On(t),this.a=t,this.b=e}function S$(t,e,n){this.a=t,this.b=e,this.c=n,ue(t.t,this),ue(e.i,this)}function A$(){this.b=new Qi,this.a=new Qi,this.b=new Qi,this.a=new Qi}function L$(){L$=Z,GS=new Gi("org.eclipse.elk.labels.labelManager")}function IJt(){IJt=Z,bTt=new Os("separateLayerConnections",(dz(),alt))}function Vf(){Vf=Z,Uy=new jbt("REGULAR",0),pb=new jbt("CRITICAL",1)}function lI(){lI=Z,bht=new Pbt("STACKED",0),DO=new Pbt("SEQUENCED",1)}function hI(){hI=Z,Ght=new Vbt("FIXED",0),IV=new Vbt("CENTER_NODE",1)}function Isn(t,e){var n;return n=P3n(t,e),t.b=new rz(n.c.length),Wyn(t,n)}function Dsn(t,e,n){var r;return++t.e,--t.f,r=u(t.d[e].$c(n),133),r.dd()}function DJt(t){var e;return t.a||(e=t.r,Et(e,148)&&(t.a=u(e,148))),t.a}function wmt(t){if(t.a){if(t.e)return wmt(t.e)}else return t;return null}function Osn(t,e){return t.pe.p?-1:0}function M$(t,e){return On(e),t.c=0,"Initial capacity must not be negative")}function PJt(){PJt=Z,Qge=Wr((Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])))}function FJt(){FJt=Z,Jge=Wr((Xu(),ct(ot(Zge,1),ae,461,0,[Sd,cb,mf])))}function BJt(){BJt=Z,epe=Wr((wu(),ct(ot(tpe,1),ae,462,0,[e1,ub,yf])))}function RJt(){RJt=Z,$ge=Wr((I1(),ct(ot(ll,1),ae,132,0,[MEt,Gl,Ly])))}function jJt(){jJt=Z,bbe=Wr((jC(),ct(ot(T7t,1),ae,379,0,[Wut,Uut,Kut])))}function $Jt(){$Jt=Z,Ibe=Wr((ew(),ct(ot(A7t,1),ae,423,0,[$4,S7t,Jut])))}function zJt(){zJt=Z,l2e=Wr((Yx(),ct(ot(TTt,1),ae,314,0,[S6,wO,ETt])))}function qJt(){qJt=Z,h2e=Wr((X$(),ct(ot(_Tt,1),ae,337,0,[CTt,OG,wlt])))}function HJt(){HJt=Z,p2e=Wr((u2(),ct(ot(g2e,1),ae,450,0,[xlt,u7,G4])))}function GJt(){GJt=Z,a2e=Wr((Jv(),ct(ot(clt,1),ae,361,0,[Aw,hb,Sw])))}function VJt(){VJt=Z,E2e=Wr((B0(),ct(ot(k2e,1),ae,303,0,[yO,U4,A6])))}function UJt(){UJt=Z,x2e=Wr((W8(),ct(ot(Ilt,1),ae,292,0,[Llt,Mlt,mO])))}function WJt(){WJt=Z,zwe=Wr((YC(),ct(ot(SCt,1),ae,378,0,[oht,_Ct,uV])))}function KJt(){KJt=Z,Ywe=Wr((uz(),ct(ot($Ct,1),ae,375,0,[RCt,pht,jCt])))}function YJt(){YJt=Z,Vwe=Wr((j0(),ct(ot(FCt,1),ae,339,0,[gb,PCt,fht])))}function XJt(){XJt=Z,Kwe=Wr((so(),ct(ot(Wwe,1),ae,452,0,[MS,Ju,eu])))}function QJt(){QJt=Z,Jwe=Wr((gz(),ct(ot(WCt,1),ae,377,0,[mht,x7,Vy])))}function ZJt(){ZJt=Z,Qwe=Wr((tE(),ct(ot(HCt,1),ae,336,0,[vht,qCt,IS])))}function JJt(){JJt=Z,Zwe=Wr((oz(),ct(ot(UCt,1),ae,338,0,[VCt,wht,GCt])))}function tte(){tte=Z,fme=Wr((Zv(),ct(ot(hme,1),ae,454,0,[OO,DS,dV])))}function ete(){ete=Z,mye=Wr((Cz(),ct(ot(wye,1),ae,442,0,[Nht,Dht,Oht])))}function nte(){nte=Z,xye=Wr((RI(),ct(ot(v_t,1),ae,380,0,[CV,p_t,b_t])))}function rte(){rte=Z,Rye=Wr((Tz(),ct(ot(P_t,1),ae,381,0,[N_t,$ht,O_t])))}function ite(){ite=Z,Bye=Wr((cz(),ct(ot(I_t,1),ae,293,0,[jht,M_t,L_t])))}function ste(){ste=Z,s3e=Wr((GI(),ct(ot(zht,1),ae,437,0,[AV,LV,MV])))}function ate(){ate=Z,c4e=Wr(($0(),ct(ot(TAt,1),ae,334,0,[HV,Zg,YS])))}function ote(){ote=Z,i4e=Wr((A1(),ct(ot(fAt,1),ae,272,0,[_7,Yy,S7])))}function $sn(){return oa(),ct(ot(SAt,1),ae,98,0,[yb,H1,L7,G2,h0,Vc])}function r2(t,e){return!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Wit(t.o,e)}function zsn(t){return!t.g&&(t.g=new Tk),!t.g.d&&(t.g.d=new _zt(t)),t.g.d}function qsn(t){return!t.g&&(t.g=new Tk),!t.g.a&&(t.g.a=new Szt(t)),t.g.a}function Hsn(t){return!t.g&&(t.g=new Tk),!t.g.b&&(t.g.b=new Czt(t)),t.g.b}function fI(t){return!t.g&&(t.g=new Tk),!t.g.c&&(t.g.c=new Azt(t)),t.g.c}function Gsn(t,e,n){var r,s;for(s=new U8(e,t),r=0;rn||e=0?t._g(n,!0,!0):lw(t,e,!0)}function oan(t,e){return Ls(Xt(ye(Q(t,(se(),Dw)))),Xt(ye(Q(e,Dw))))}function gte(){gte=Z,gye=aw(aw(OR(new Hs,(uE(),PS)),(f_(),wV)),kht)}function can(t,e,n){var r;return r=ire(t,e,n),t.b=new rz(r.c.length),N5t(t,r)}function uan(t){if(t.b<=0)throw rt(new lc);return--t.b,t.a-=t.c.c,de(t.a)}function lan(t){var e;if(!t.a)throw rt(new wXt);return e=t.a,t.a=ts(t.a),e}function han(t){for(;!t.a;)if(!nKt(t.c,new ze(t)))return!1;return!0}function Kx(t){var e;return Ar(t),Et(t,198)?(e=u(t,198),e):new stt(t)}function fan(t){O$(),u(t.We((ci(),Ky)),174).Fc((Qu(),tN)),t.Ye(hft,null)}function O$(){O$=Z,M3e=new wZ,D3e=new mZ,I3e=Xcn((ci(),hft),M3e,vb,D3e)}function N$(){N$=Z,d_t=new Gbt("LEAF_NUMBER",0),Pht=new Gbt("NODE_SIZE",1)}function dan(t,e,n){t.a=e,t.c=n,t.b.a.$b(),_h(t.d),t.e.a.c=Pt(Xn,Ie,1,0,5,1)}function Hrt(t){t.a=Pt(Tr,Xr,25,t.b+1,15,1),t.c=Pt(Tr,Xr,25,t.b,15,1),t.d=0}function gan(t,e){t.a.ue(e.d,t.b)>0&&(ue(t.c,new Ovt(e.c,e.d,t.d)),t.b=e.d)}function Amt(t,e){if(t.g==null||e>=t.i)throw rt(new Vet(e,t.i));return t.g[e]}function pte(t,e,n){if(Q8(t,n),n!=null&&!t.wj(n))throw rt(new Htt);return n}function bte(t){var e;if(t.Ek())for(e=t.i-1;e>=0;--e)St(t,e);return Jwt(t)}function pan(t){var e,n;if(!t.b)return null;for(n=t.b;e=n.a[0];)n=e;return n}function ban(t,e){var n,r;return RZt(e),n=(r=t.slice(0,e),Mmt(r,t)),n.length=e,n}function D8(t,e,n,r){var s;r=(X3(),r||mEt),s=t.slice(e,n),W4t(s,t,e,n,-e,r)}function oh(t,e,n,r,s){return e<0?lw(t,n,r):u(n,66).Nj().Pj(t,t.yh(),e,r,s)}function van(t){return Et(t,172)?""+u(t,172).a:t==null?null:$o(t)}function wan(t){return Et(t,172)?""+u(t,172).a:t==null?null:$o(t)}function vte(t,e){if(e.a)throw rt(new Go(vfe));Ns(t.a,e),e.a=t,!t.j&&(t.j=e)}function Lmt(t,e){Get.call(this,e.rd(),e.qd()&-16449),On(t),this.a=t,this.c=e}function wte(t,e){var n,r;return r=e/t.c.Hd().gc()|0,n=e%t.c.Hd().gc(),Wx(t,r,n)}function Xu(){Xu=Z,Sd=new vet(d6,0),cb=new vet(NE,1),mf=new vet(g6,2)}function P$(){P$=Z,Aut=new BR("All",0),_Et=new dUt,SEt=new CUt,AEt=new gUt}function mte(){mte=Z,Nge=Wr((P$(),ct(ot(KH,1),ae,297,0,[Aut,_Et,SEt,AEt])))}function yte(){yte=Z,Cbe=Wr((K8(),ct(ot(Tbe,1),ae,405,0,[_w,Dy,Iy,j4])))}function xte(){xte=Z,_pe=Wr((tw(),ct(ot(Cpe,1),ae,406,0,[aO,sO,Fut,But])))}function kte(){kte=Z,Ape=Wr((n6(),ct(ot(Spe,1),ae,323,0,[cO,oO,uO,lO])))}function Ete(){Ete=Z,Ipe=Wr((s_(),ct(ot(Mpe,1),ae,394,0,[hO,JH,tG,fO])))}function Tte(){Tte=Z,Yme=Wr((uE(),ct(ot(ZCt,1),ae,393,0,[vV,PS,PO,FS])))}function Cte(){Cte=Z,Gbe=Wr((dz(),ct(ot(Hbe,1),ae,360,0,[alt,_G,SG,vO])))}function _te(){_te=Z,Fye=Wr((Gz(),ct(ot(A_t,1),ae,340,0,[Rht,__t,S_t,C_t])))}function Ste(){Ste=Z,Jbe=Wr((M1(),ct(ot(Zbe,1),ae,411,0,[_6,i7,s7,olt])))}function Ate(){Ate=Z,qwe=Wr((sy(),ct(ot(uht,1),ae,197,0,[lV,cht,t5,J4])))}function Lte(){Lte=Z,C4e=Wr((Cl(),ct(ot(T4e,1),ae,396,0,[Yl,PAt,NAt,FAt])))}function Mte(){Mte=Z,l4e=Wr((jl(),ct(ot(u4e,1),ae,285,0,[ZO,u0,wb,QO])))}function Ite(){Ite=Z,s4e=Wr((q0(),ct(ot(pft,1),ae,218,0,[gft,XO,A7,H6])))}function Dte(){Dte=Z,k4e=Wr((Az(),ct(ot(OAt,1),ae,311,0,[wft,MAt,DAt,IAt])))}function Ote(){Ote=Z,y4e=Wr((_l(),ct(ot(tA,1),ae,374,0,[nN,V2,eN,Xy])))}function Nte(){Nte=Z,yq(),vLt=ss,S5e=Ts,wLt=new D3(ss),A5e=new D3(Ts)}function bI(){bI=Z,DTt=new Dbt(K0,0),FG=new Dbt("IMPROVE_STRAIGHTNESS",1)}function man(t,e){return g8(),ue(t,new la(e,de(e.e.c.length+e.g.c.length)))}function yan(t,e){return g8(),ue(t,new la(e,de(e.e.c.length+e.g.c.length)))}function Mmt(t,e){return xI(e)!=10&&ct(sl(e),e.hm,e.__elementTypeId$,xI(e),t),t}function vu(t,e){var n;return n=Ro(t,e,0),n==-1?!1:(Ag(t,n),!0)}function Pte(t,e){var n;return n=u(Ux(t.e,e),387),n?(Fvt(n),n.e):null}function O8(t){var e;return Bo(t)&&(e=0-t,!isNaN(e))?e:Vp(Y8(t))}function Ro(t,e,n){for(;n=0?jz(t,n,!0,!0):lw(t,e,!0)}function Pmt(t,e){q9();var n,r;return n=Hx(t),r=Hx(e),!!n&&!!r&&!Qie(n.k,r.k)}function Ean(t,e){yu(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Tan(t,e){xu(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function Can(t,e){Qv(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function _an(t,e){Xv(t,e==null||Ej((On(e),e))||isNaN((On(e),e))?0:(On(e),e))}function $te(t){(this.q?this.q:(vn(),vn(),a0)).Ac(t.q?t.q:(vn(),vn(),a0))}function San(t,e){return Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t)}function Aan(t,e){return Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t)}function zte(t,e){e7t=new gp,Lpe=e,cS=t,u(cS.b,65),xmt(cS,e7t,null),Nle(cS)}function Krt(t,e,n){var r;return r=t.g[e],fC(t,e,t.oi(e,n)),t.gi(e,n,r),t.ci(),r}function j$(t,e){var n;return n=t.Xc(e),n>=0?(t.$c(n),!0):!1}function Yrt(t){var e;return t.d!=t.r&&(e=Lh(t),t.e=!!e&&e.Cj()==k0e,t.d=e),t.e}function Xrt(t,e){var n;for(Ar(t),Ar(e),n=!1;e.Ob();)n=n|t.Fc(e.Pb());return n}function Wv(t,e){var n;return n=u(Jn(t.e,e),387),n?(OUt(t,n),n.e):null}function qte(t){var e,n;return e=t/60|0,n=t%60,n==0?""+e:""+e+":"+(""+n)}function Wo(t,e){var n,r;return d2(t),r=new vmt(e,t.a),n=new sKt(r),new Tn(t,n)}function Xm(t,e){var n=t.a[e],r=(pit(),Eut)[typeof n];return r?r(n):jyt(typeof n)}function Lan(t){switch(t.g){case 0:return vi;case 1:return-1;default:return 0}}function Man(t){return n4t(t,(N8(),tEt))<0?-UXe(Y8(t)):t.l+t.m*f6+t.h*x2}function xI(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function Qrt(t){var e;return e=t.b.c.length==0?null:Fe(t.b,0),e!=null&&oit(t,0),e}function Hte(t,e){for(;e[0]=0;)++e[0]}function kI(t,e){this.e=e,this.a=Fne(t),this.a<54?this.f=Vv(t):this.c=KI(t)}function Gte(t,e,n,r){gi(),vv.call(this,26),this.c=t,this.a=e,this.d=n,this.b=r}function Xd(t,e,n){var r,s;for(r=10,s=0;st.a[r]&&(r=n);return r}function Fan(t,e){var n;return n=rw(t.e.c,e.e.c),n==0?Ls(t.e.d,e.e.d):n}function J3(t,e){return e.e==0||t.e==0?QE:(bE(),Zst(t,e))}function Ban(t,e){if(!t)throw rt(new Pn($2n("Enum constant undefined: %s",e)))}function $C(){$C=Z,Abe=new gg,Lbe=new k3,_be=new QK,Sbe=new $b,Mbe=new ZK}function $$(){$$=Z,PEt=new _bt("BY_SIZE",0),Dut=new _bt("BY_SIZE_AND_SHAPE",1)}function z$(){z$=Z,Hut=new Sbt("EADES",0),rG=new Sbt("FRUCHTERMAN_REINGOLD",1)}function TI(){TI=Z,NG=new Ibt("READING_DIRECTION",0),LTt=new Ibt("ROTATION",1)}function Ute(){Ute=Z,f2e=Wr((v2(),ct(ot(ATt,1),ae,335,0,[mlt,STt,ylt,pS,gS])))}function Wte(){Wte=Z,Hwe=Wr((a_(),ct(ot(LCt,1),ae,315,0,[ACt,lht,hht,AS,LS])))}function Kte(){Kte=Z,e2e=Wr((g4(),ct(ot(t2e,1),ae,363,0,[LG,IG,DG,MG,AG])))}function Yte(){Yte=Z,C2e=Wr((hh(),ct(ot(s9t,1),ae,163,0,[CO,yS,fb,xS,Fy])))}function Xte(){Xte=Z,l3e=Wr((iD(),ct(ot(J_t,1),ae,316,0,[X_t,Vht,Z_t,Uht,Q_t])))}function Qte(){Qte=Z,O3e=Wr((Xf(),ct(ot(Qg,1),ae,175,0,[qn,Js,Id,$2,Xg])))}function Zte(){Zte=Z,i3e=Wr((yE(),ct(ot(r3e,1),ae,355,0,[n5,R6,qS,zS,HS])))}function Jte(){Jte=Z,ybe=Wr((Wa(),ct(ot(C7t,1),ae,356,0,[Ad,lb,ou,qc,Io])))}function tee(){tee=Z,r4e=Wr((ao(),ct(ot(WS,1),ae,103,0,[c0,kf,jh,Q0,Z0])))}function eee(){eee=Z,f4e=Wr((c4(),ct(ot(QS,1),ae,249,0,[mb,JO,CAt,XS,_At])))}function nee(){nee=Z,p4e=Wr((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])))}function Zrt(t,e){var n;return n=u(Jn(t.a,e),134),n||(n=new xa,ki(t.a,e,n)),n}function ree(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.a==t:!1}function iee(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.i==t:!1}function see(t,e){return On(e),nwt(t),t.d.Ob()?(e.td(t.d.Pb()),!0):!1}function q$(t){return yc(t,vi)>0?vi:yc(t,_a)<0?_a:Sr(t)}function Qm(t){return t<3?(Bl(t,Jhe),t+1):t=0&&e=-.01&&t.a<=P1&&(t.a=0),t.b>=-.01&&t.b<=P1&&(t.b=0),t}function oee(t,e){return e==(vnt(),vnt(),Ige)?t.toLocaleLowerCase():t.toLowerCase()}function Bmt(t){return(t.i&2?"interface ":t.i&1?"":"class ")+(L0(t),t.o)}function To(t){var e,n;n=(e=new Wtt,e),Mr((!t.q&&(t.q=new he(Vh,t,11,10)),t.q),n)}function Ran(t,e){var n;return n=e>0?e-1:e,rHt(ZKe(Dee(Pvt(new Yk,n),t.n),t.j),t.k)}function jan(t,e,n,r){var s;t.j=-1,a5t(t,$4t(t,e,n),(to(),s=u(e,66).Mj(),s.Ok(r)))}function cee(t){this.g=t,this.f=new le,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function uee(t){this.b=new le,this.a=new le,this.c=new le,this.d=new le,this.e=t}function lee(t,e){this.a=new Cr,this.e=new Cr,this.b=(YC(),uV),this.c=t,this.b=e}function hee(t,e,n){xj.call(this),Rmt(this),this.a=t,this.c=n,this.b=e.d,this.f=e.e}function fee(t){this.d=t,this.c=t.c.vc().Kc(),this.b=null,this.a=null,this.e=(dR(),mut)}function Kv(t){if(t<0)throw rt(new Pn("Illegal Capacity: "+t));this.g=this.ri(t)}function $an(t,e){if(0>t||t>e)throw rt(new Qpt("fromIndex: 0, toIndex: "+t+jxt+e))}function zan(t){var e;if(t.a==t.b.a)throw rt(new lc);return e=t.a,t.c=e,t.a=t.a.e,e}function H$(t){var e;Pm(!!t.c),e=t.c.a,ch(t.d,t.c),t.b==t.c?t.b=e:--t.a,t.c=null}function G$(t,e){var n;return d2(t),n=new NXt(t,t.a.rd(),t.a.qd()|4,e),new Tn(t,n)}function qan(t,e){var n,r;return n=u(ny(t.d,e),14),n?(r=e,t.e.pc(r,n)):null}function V$(t,e){var n,r;for(r=t.Kc();r.Ob();)n=u(r.Pb(),70),Jt(n,(se(),D6),e)}function Han(t){var e;return e=Xt(ye(Q(t,(Te(),Ug)))),e<0&&(e=0,Jt(t,Ug,e)),e}function Gan(t,e,n){var r;r=b.Math.max(0,t.b/2-.5),c_(n,r,1),ue(e,new RGt(n,r))}function Van(t,e,n){var r;return r=t.a.e[u(e.a,10).p]-t.a.e[u(n.a,10).p],ps(KM(r))}function dee(t,e,n,r,s,o){var h;h=Nrt(r),Da(h,s),sa(h,o),ln(t.a,r,new Tj(h,e,n.f))}function gee(t,e){var n;if(n=gD(t.Tg(),e),!n)throw rt(new Pn(ab+e+Fct));return n}function Zm(t,e){var n;for(n=t;ts(n);)if(n=ts(n),n==e)return!0;return!1}function Uan(t,e){var n,r,s;for(r=e.a.cd(),n=u(e.a.dd(),14).gc(),s=0;s0&&(t.a/=e,t.b/=e),t}function Fl(t){var e;return t.w?t.w:(e=ein(t),e&&!e.kh()&&(t.w=e),e)}function ton(t){var e;return t==null?null:(e=u(t,190),e0n(e,e.length))}function St(t,e){if(t.g==null||e>=t.i)throw rt(new Vet(e,t.i));return t.li(e,t.g[e])}function eon(t){var e,n;for(e=t.a.d.j,n=t.c.d.j;e!=n;)pf(t.b,e),e=kz(e);pf(t.b,e)}function non(t){var e;for(e=0;e=14&&e<=16))),t}function wee(t,e,n){var r=function(){return t.apply(r,arguments)};return e.apply(r,n),r}function mee(t,e,n){var r,s;r=e;do s=Xt(t.p[r.p])+n,t.p[r.p]=s,r=t.a[r.p];while(r!=e)}function P8(t,e){var n,r;r=t.a,n=Fun(t,e,null),r!=e&&!t.e&&(n=_E(t,e,n)),n&&n.Fi()}function jmt(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)}function $mt(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)}function son(t,e){return Zp(),du(t.b.c.length-t.e.c.length,e.b.c.length-e.e.c.length)}function t4(t,e){return rYe(HC(t,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))))}function yee(){yee=Z,Pbe=Wr((Gn(),ct(ot(elt,1),ae,267,0,[Ds,Zs,xs,Hc,Sl,j1])))}function xee(){xee=Z,q3e=Wr((cy(),ct(ot(nft,1),ae,291,0,[eft,VO,GO,tft,qO,HO])))}function kee(){kee=Z,F3e=Wr((Qd(),ct(ot(kSt,1),ae,248,0,[Zht,$O,zO,FV,NV,PV])))}function Eee(){Eee=Z,c2e=Wr((i6(),ct(ot(c7,1),ae,227,0,[o7,dS,a7,Oy,H4,q4])))}function Tee(){Tee=Z,m2e=Wr((gE(),ct(ot(GTt,1),ae,275,0,[bS,$Tt,HTt,qTt,zTt,jTt])))}function Cee(){Cee=Z,w2e=Wr((nD(),ct(ot(RTt,1),ae,274,0,[BG,PTt,BTt,NTt,FTt,Slt])))}function _ee(){_ee=Z,$we=Wr((Zz(),ct(ot(CCt,1),ae,313,0,[aht,ECt,sht,kCt,TCt,cV])))}function See(){See=Z,b2e=Wr((nq(),ct(ot(ITt,1),ae,276,0,[Elt,klt,Clt,Tlt,_lt,PG])))}function Aee(){Aee=Z,Qme=Wr((f_(),ct(ot(Xme,1),ae,327,0,[wV,kht,Tht,Eht,Cht,xht])))}function Lee(){Lee=Z,g4e=Wr((Qu(),ct(ot(GV,1),ae,273,0,[xb,tg,tN,JS,ZS,G6])))}function Mee(){Mee=Z,a4e=Wr((tq(),ct(ot(wAt,1),ae,312,0,[bft,pAt,vAt,dAt,bAt,gAt])))}function aon(){return fy(),ct(ot(lo,1),ae,93,0,[Ef,J0,Tf,_f,l0,zh,Ul,Cf,$h])}function W$(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,0,n,t.a))}function K$(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,1,n,t.b))}function F8(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,3,n,t.b))}function Xv(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,3,n,t.f))}function Qv(t,e){var n;n=t.g,t.g=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,4,n,t.g))}function yu(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,5,n,t.i))}function xu(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,6,n,t.j))}function B8(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,1,n,t.j))}function R8(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,4,n,t.c))}function j8(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Km(t,2,n,t.k))}function tit(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,2,n,t.d))}function Ig(t,e){var n;n=t.s,t.s=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,4,n,t.s))}function ty(t,e){var n;n=t.t,t.t=e,t.Db&4&&!(t.Db&1)&&mi(t,new Srt(t,5,n,t.t))}function $8(t,e){var n;n=t.F,t.F=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,5,n,e))}function CI(t,e){var n;return n=u(Jn((NR(),nU),t),55),n?n.xj(e):Pt(Xn,Ie,1,e,5,1)}function R0(t,e){var n,r;return n=e in t.a,n&&(r=D0(t,e).he(),r)?r.a:null}function oon(t,e){var n,r,s;return n=(r=(Tv(),s=new YT,s),e&&A5t(r,e),r),Ymt(n,t),n}function Iee(t,e,n){if(Q8(t,n),!t.Bk()&&n!=null&&!t.wj(n))throw rt(new Htt);return n}function Dee(t,e){return t.n=e,t.n?(t.f=new le,t.e=new le):(t.f=null,t.e=null),t}function jr(t,e,n,r,s,o){var h;return h=Unt(t,e),Nee(n,h),h.i=s?8:0,h.f=r,h.e=s,h.g=o,h}function zmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=1,this.c=t,this.a=n}function qmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=2,this.c=t,this.a=n}function Hmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=6,this.c=t,this.a=n}function Gmt(t,e,n,r,s){this.d=e,this.k=r,this.f=s,this.o=-1,this.p=7,this.c=t,this.a=n}function Vmt(t,e,n,r,s){this.d=e,this.j=r,this.e=s,this.o=-1,this.p=4,this.c=t,this.a=n}function Oee(t,e){var n,r,s,o;for(r=e,s=0,o=r.length;s=0),ohn(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function Umt(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=jI(t.f)),t.c).e}function gf(t){if(!(t>=0))throw rt(new Pn("tolerance ("+t+") must be >= 0"));return t}function z8(){return Xht||(Xht=new kue,s4(Xht,ct(ot(R4,1),Ie,130,0,[new yp]))),Xht}function so(){so=Z,MS=new Met(O_,0),Ju=new Met("INPUT",1),eu=new Met("OUTPUT",2)}function X$(){X$=Z,CTt=new Eet("ARD",0),OG=new Eet("MSD",1),wlt=new Eet("MANUAL",2)}function Zv(){Zv=Z,OO=new Pet("BARYCENTER",0),DS=new Pet(a1e,1),dV=new Pet(o1e,2)}function _I(t,e){var n;if(n=t.gc(),e<0||e>n)throw rt(new jm(e,n));return new lvt(t,e)}function Bee(t,e){var n;return Et(e,42)?t.c.Mc(e):(n=Wit(t,e),Iz(t,e),n)}function po(t,e,n){return f2(t,e),Xc(t,n),Ig(t,0),ty(t,1),Pg(t,!0),Ng(t,!0),t}function Bl(t,e){if(t<0)throw rt(new Pn(e+" cannot be negative but was: "+t));return t}function Ree(t,e){var n,r;for(n=0,r=t.gc();n0?u(Fe(n.a,r-1),10):null}function qC(t,e){var n;n=t.k,t.k=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,2,n,t.k))}function Z$(t,e){var n;n=t.f,t.f=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,8,n,t.f))}function J$(t,e){var n;n=t.i,t.i=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,7,n,t.i))}function Ymt(t,e){var n;n=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,8,n,t.a))}function Xmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,n,t.b))}function Qmt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,n,t.b))}function Zmt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.c))}function Jmt(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.c))}function nit(t,e){var n;n=t.c,t.c=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,4,n,t.c))}function tyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,1,n,t.d))}function rit(t,e){var n;n=t.D,t.D=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,2,n,t.D))}function iit(t,e){t.r>0&&t.c0&&t.g!=0&&iit(t.i,e/t.r*t.i.d))}function bon(t,e,n){var r;t.b=e,t.a=n,r=(t.a&512)==512?new Sqt:new VL,t.c=Dvn(r,t.b,t.a)}function Wee(t,e){return V0(t.e,e)?(to(),Yrt(e)?new Ij(e,t):new DM(e,t)):new jVt(e,t)}function tz(t,e){return nYe(GC(t.a,e,Sr(Ca(e0,Wd(Sr(Ca(e==null?0:Hi(e),n0)),15)))))}function von(t,e,n){return Ym(t,new fe(e),new Yn,new ge(n),ct(ot(ll,1),ae,132,0,[]))}function won(t){var e,n;return 0>t?new fbt:(e=t+1,n=new vJt(e,t),new V2t(null,n))}function mon(t,e){vn();var n;return n=new kx(1),ea(t)?xo(n,t,e):su(n.f,t,e),new q(n)}function yon(t,e){var n,r;return n=t.o+t.p,r=e.o+e.p,ne?(e<<=1,e>0?e:A_):e}function sit(t){switch(k2t(t.e!=3),t.e){case 2:return!1;case 0:return!0}return _sn(t)}function Yee(t,e){var n;return Et(e,8)?(n=u(e,8),t.a==n.a&&t.b==n.b):!1}function ait(t,e,n){var r,s,o;return o=e>>5,s=e&31,r=Ps(zm(t.n[n][o],Sr(M0(s,1))),3),r}function kon(t,e){var n,r;for(r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),Yz(t,n.cd(),n.dd())}function Eon(t,e){var n;n=new gp,u(e.b,65),u(e.b,65),u(e.b,65),mu(e.a,new xvt(t,n,e))}function eyt(t,e){var n;n=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,21,n,t.b))}function nyt(t,e){var n;n=t.d,t.d=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,11,n,t.d))}function ez(t,e){var n;n=t.j,t.j=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,13,n,t.j))}function Xee(t,e,n){var r,s,o;for(o=t.a.length-1,s=t.b,r=0;r>>31;r!=0&&(t[n]=r)}function Oon(t,e){vn();var n,r;for(r=new le,n=0;n0&&(this.g=this.ri(this.i+(this.i/8|0)+1),t.Qc(this.g))}function is(t,e){Sj.call(this,a5e,t,e),this.b=this,this.a=au(t.Tg(),yn(this.e.Tg(),this.c))}function VC(t,e){var n,r;for(On(e),r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),t.zc(n.cd(),n.dd())}function Hon(t,e,n){var r;for(r=n.Kc();r.Ob();)if(!k$(t,e,r.Pb()))return!1;return!0}function Gon(t,e,n,r,s){var o;return n&&(o=Vi(e.Tg(),t.c),s=n.gh(e,-1-(o==-1?r:o),null,s)),s}function Von(t,e,n,r,s){var o;return n&&(o=Vi(e.Tg(),t.c),s=n.ih(e,-1-(o==-1?r:o),null,s)),s}function pne(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function bne(t){switch(t.g){case 2:return be(),Bn;case 4:return be(),Hn;default:return t}}function vne(t){switch(t.g){case 1:return be(),mr;case 3:return be(),Nn;default:return t}}function Uon(t){var e,n,r;return t.j==(be(),Nn)&&(e=Uoe(t),n=Nu(e,Hn),r=Nu(e,Bn),r||r&&n)}function Won(t){var e,n;return e=u(t.e&&t.e(),9),n=u(dwt(e,e.length),9),new rh(e,n,e.length)}function Kon(t,e){wr(e,s1e,1),c3t(gYe(new tr((z9(),new trt(t,!1,!1,new YP))))),or(e)}function SI(t,e){return Fn(),ea(t)?pmt(t,Br(e)):Nm(t)?Pnt(t,ye(e)):Om(t)?Ztn(t,Re(e)):t.wd(e)}function cyt(t,e){e.q=t,t.d=b.Math.max(t.d,e.r),t.b+=e.d+(t.a.c.length==0?0:t.c),ue(t.a,e)}function H8(t,e){var n,r,s,o;return s=t.c,n=t.c+t.b,o=t.d,r=t.d+t.a,e.a>s&&e.ao&&e.b1||t.Ob())return++t.a,t.g=0,e=t.i,t.Ob(),e;throw rt(new lc)}function acn(t){wUt();var e;return AGt(yht,t)||(e=new SQ,e.a=t,Z2t(yht,t,e)),u(go(yht,t),635)}function Sh(t){var e,n,r,s;return s=t,r=0,s<0&&(s+=x2,r=W0),n=ps(s/f6),e=ps(s-n*f6),ru(e,n,r)}function AI(t){var e,n,r;for(r=0,n=new Ex(t.a);n.a>22),s=t.h+e.h+(r>>22),ru(n&ul,r&ul,s&W0)}function Bne(t,e){var n,r,s;return n=t.l-e.l,r=t.m-e.m+(n>>22),s=t.h-e.h+(r>>22),ru(n&ul,r&ul,s&W0)}function DI(t){var e;return t<128?(e=(ZKt(),iEt)[t],!e&&(e=iEt[t]=new tR(t)),e):new tR(t)}function Wi(t){var e;return Et(t,78)?t:(e=t&&t.__java$exception,e||(e=new _re(t),Hzt(e)),e)}function OI(t){if(Et(t,186))return u(t,118);if(t)return null;throw rt(new yx(Dde))}function Rne(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(yi(e,mz(t)))return!0;return!1}function gyt(t){return t.a.Ob()?!0:t.a!=t.d?!1:(t.a=new Kwt(t.e.f),t.a.Ob())}function As(t,e){var n,r;return n=e.Pc(),r=n.length,r==0?!1:(Svt(t.c,t.c.length,n),!0)}function xcn(t,e,n){var r,s;for(s=e.vc().Kc();s.Ob();)r=u(s.Pb(),42),t.yc(r.cd(),r.dd(),n);return t}function jne(t,e){var n,r;for(r=new S(t.b);r.a=0,"Negative initial capacity"),_j(e>=0,"Non-positive load factor"),Yu(this)}function bit(t,e,n){return t>=128?!1:t<64?aC(Ps(M0(1,t),n),0):aC(Ps(M0(1,t-64),e),0)}function Mcn(t,e){return!t||!e||t==e?!1:rw(t.b.c,e.b.c+e.b.b)<0&&rw(e.b.c,t.b.c+t.b.b)<0}function Qne(t){var e,n,r;return n=t.n,r=t.o,e=t.d,new ih(n.a-e.b,n.b-e.d,r.a+(e.b+e.c),r.b+(e.d+e.a))}function Icn(t){var e,n,r,s;for(n=t.a,r=0,s=n.length;rr)throw rt(new jm(e,r));return t.hi()&&(n=gQt(t,n)),t.Vh(e,n)}function FI(t,e,n){return n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n)),t}function Jt(t,e,n){return n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n)),t}function Zne(t){var e,n;return n=new _$,Lo(n,t),Jt(n,(Gp(),C6),t),e=new Cr,Pmn(t,n,e),o4n(t,n,e),n}function Ncn(t){y4();var e,n,r;for(n=Pt(Us,te,8,2,0,1),r=0,e=0;e<2;e++)r+=.5,n[e]=pfn(r,t);return n}function Jne(t,e){var n,r,s,o;for(n=!1,r=t.a[e].length,o=0;o>=1);return e}function ere(t){var e,n;return n=lD(t.h),n==32?(e=lD(t.m),e==32?lD(t.l)+32:e+20-10):n-12}function KC(t){var e;return e=t.a[t.b],e==null?null:(Ji(t.a,t.b,null),t.b=t.b+1&t.a.length-1,e)}function nre(t){var e,n;return e=t.t-t.k[t.o.p]*t.d+t.j[t.o.p]>t.f,n=t.u+t.e[t.o.p]*t.d>t.f*t.s*t.d,e||n}function pz(t,e,n){var r,s;return r=new $rt(e,n),s=new $t,t.b=Wce(t,t.b,r,s),s.b||++t.c,t.b.b=!1,s.d}function rre(t,e,n){var r,s,o,h;for(h=QC(e,n),o=0,s=h.Kc();s.Ob();)r=u(s.Pb(),11),ki(t.c,r,de(o++))}function Up(t){var e,n;for(n=new S(t.a.b);n.an&&(n=t[e]);return n}function ire(t,e,n){var r;return r=new le,I5t(t,e,r,(be(),Hn),!0,!1),I5t(t,n,r,Bn,!1,!1),r}function wit(t,e,n){var r,s,o,h;return o=null,h=e,s=Uv(h,"labels"),r=new TVt(t,n),o=(Jpn(r.a,r.b,s),s),o}function Fcn(t,e,n,r){var s;return s=w5t(t,e,n,r),!s&&(s=Bun(t,n,r),s&&!E4(t,e,s))?null:s}function Bcn(t,e,n,r){var s;return s=m5t(t,e,n,r),!s&&(s=Pit(t,n,r),s&&!E4(t,e,s))?null:s}function sre(t,e){var n;for(n=0;n1||e>=0&&t.b<3)}function BI(t){var e,n,r;for(e=new Du,r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),8),h8(e,0,new yo(n));return e}function l2(t){var e,n;for(n=new S(t.a.b);n.ar?1:0}function Oyt(t,e){return Lce(t,e)?(ln(t.b,u(Q(e,(se(),Ny)),21),e),ni(t.a,e),!0):!1}function Ycn(t){var e,n;e=u(Q(t,(se(),Zu)),10),e&&(n=e.c,vu(n.a,e),n.a.c.length==0&&vu(Fa(e).b,n))}function hre(t){return R1?Pt(Pge,dfe,572,0,0,1):u(D1(t.a,Pt(Pge,dfe,572,t.a.c.length,0,1)),842)}function Xcn(t,e,n,r){return Qj(),new Ztt(ct(ot(M2,1),Dq,42,0,[(hst(t,e),new _v(t,e)),(hst(n,r),new _v(n,r))]))}function i4(t,e,n){var r,s;return s=(r=new Wtt,r),po(s,e,n),Mr((!t.q&&(t.q=new he(Vh,t,11,10)),t.q),s),s}function kit(t){var e,n,r,s;for(s=kYe(P4e,t),n=s.length,r=Pt(Ae,te,2,n,6,1),e=0;e=t.b.c.length||(Nyt(t,2*e+1),n=2*e+2,n=0&&t[r]===e[r];r--);return r<0?0:get(Ps(t[r],co),Ps(e[r],co))?-1:1}function Qcn(t,e){var n,r;for(r=ei(t,0);r.b!=r.d.c;)n=u(ti(r),214),n.e.length>0&&(e.td(n),n.i&&Vun(n))}function Tit(t,e){var n,r;return r=u(In(t.a,4),126),n=Pt(Tft,Jct,415,e,0,1),r!=null&&Ic(r,0,n,0,r.length),n}function dre(t,e){var n;return n=new eat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,e),t.e!=null||(n.c=t),n}function Zcn(t,e){var n,r;for(r=t.Zb().Cc().Kc();r.Ob();)if(n=u(r.Pb(),14),n.Hc(e))return!0;return!1}function Cit(t,e,n,r,s){var o,h;for(h=n;h<=s;h++)for(o=e;o<=r;o++)if(l4(t,o,h))return!0;return!1}function gre(t,e,n){var r,s,o,h;for(On(n),h=!1,o=t.Zc(e),s=n.Kc();s.Ob();)r=s.Pb(),o.Rb(r),h=!0;return h}function Jcn(t,e){var n;return t===e?!0:Et(e,83)?(n=u(e,83),F4t(Pv(t),n.vc())):!1}function pre(t,e,n){var r,s;for(s=n.Kc();s.Ob();)if(r=u(s.Pb(),42),t.re(e,r.dd()))return!0;return!1}function bre(t,e,n){return t.d[e.p][n.p]||(Yhn(t,e,n),t.d[e.p][n.p]=!0,t.d[n.p][e.p]=!0),t.a[e.p][n.p]}function Q8(t,e){if(!t.ai()&&e==null)throw rt(new Pn("The 'no null' constraint is violated"));return e}function Z8(t,e){t.D==null&&t.B!=null&&(t.D=t.B,t.B=null),rit(t,e==null?null:(On(e),e)),t.C&&t.yk(null)}function tun(t,e){var n;return!t||t==e||!Vs(e,(se(),Iw))?!1:(n=u(Q(e,(se(),Iw)),10),n!=t)}function _it(t){switch(t.i){case 2:return!0;case 1:return!1;case-1:++t.c;default:return t.pl()}}function vre(t){switch(t.i){case-2:return!0;case-1:return!1;case 1:--t.c;default:return t.ql()}}function wre(t){oQt.call(this,"The given string does not match the expected format for individual spacings.",t)}function Cl(){Cl=Z,Yl=new ZR("ELK",0),PAt=new ZR("JSON",1),NAt=new ZR("DOT",2),FAt=new ZR("SVG",3)}function RI(){RI=Z,CV=new Bet(K0,0),p_t=new Bet("RADIAL_COMPACTION",1),b_t=new Bet("WEDGE_COMPACTION",2)}function I1(){I1=Z,MEt=new pet("CONCURRENT",0),Gl=new pet("IDENTITY_FINISH",1),Ly=new pet("UNORDERED",2)}function Sit(){Sit=Z,s7t=(AR(),Rut),i7t=new mn(t6t,s7t),Ope=new Gi(e6t),Npe=new Gi(n6t),Ppe=new Gi(r6t)}function J8(){J8=Z,wTt=new U5,mTt=new zY,Wbe=new AL,Ube=new qY,Vbe=new HY,vTt=(On(Vbe),new pn)}function tE(){tE=Z,vht=new Det("CONSERVATIVE",0),qCt=new Det("CONSERVATIVE_SOFT",1),IS=new Det("SLOPPY",2)}function bz(){bz=Z,EAt=new Mv(15),o4e=new eo((ci(),q2),EAt),KS=z6,mAt=G3e,yAt=z2,kAt=a5,xAt=jV}function Ait(t,e,n){var r,s,o;for(r=new Qi,o=ei(n,0);o.b!=o.d.c;)s=u(ti(o),8),ni(r,new yo(s));gre(t,e,r)}function eun(t){var e,n,r;for(e=0,r=Pt(Us,te,8,t.b,0,1),n=ei(t,0);n.b!=n.d.c;)r[e++]=u(ti(n),8);return r}function Fyt(t){var e;return e=(!t.a&&(t.a=new he(eg,t,9,5)),t.a),e.i!=0?mYe(u(St(e,0),678)):null}function nun(t,e){var n;return n=Oa(t,e),get(yrt(t,e),0)|PYe(yrt(t,n),0)?n:Oa(Iq,yrt(zm(n,63),1))}function run(t,e){var n;n=De((Vit(),oV))!=null&&e.wg()!=null?Xt(ye(e.wg()))/Xt(ye(De(oV))):1,ki(t.b,e,n)}function iun(t,e){var n,r;return n=u(t.d.Bc(e),14),n?(r=t.e.hc(),r.Gc(n),t.e.d-=n.gc(),n.$b(),r):null}function Byt(t,e){var n,r;if(r=t.c[e],r!=0)for(t.c[e]=0,t.d-=r,n=e+1;n0)return b8(e-1,t.a.c.length),Ag(t.a,e-1);throw rt(new Vzt)}function sun(t,e,n){if(e<0)throw rt(new mo(q1e+e));ee)throw rt(new Pn(Fq+t+gfe+e));if(t<0||e>n)throw rt(new Qpt(Fq+t+zxt+e+jxt+n))}function xre(t){if(!t.a||!(t.a.i&8))throw rt(new Fo("Enumeration class expected for layout option "+t.f))}function ey(t){var e;++t.j,t.i==0?t.g=null:t.ihH?t-n>hH:n-t>hH}function Mit(t,e){return!t||e&&!t.j||Et(t,124)&&u(t,124).a.b==0?0:t.Re()}function wz(t,e){return!t||e&&!t.k||Et(t,124)&&u(t,124).a.a==0?0:t.Se()}function jI(t){return Jp(),t<0?t!=-1?new D3t(-1,-t):_ut:t<=10?wEt[ps(t)]:new D3t(1,t)}function jyt(t){throw pit(),rt(new Rqt("Unexpected typeof result '"+t+"'; please report this bug to the GWT team"))}function _re(t){Gqt(),uj(this),n$(this),this.e=t,jce(this,t),this.g=t==null?Tu:$o(t),this.a="",this.b=t,this.a=""}function $yt(){this.a=new oZ,this.f=new O$t(this),this.b=new N$t(this),this.i=new P$t(this),this.e=new F$t(this)}function Sre(){gKe.call(this,new Emt(Qm(16))),Bl(2,Yhe),this.b=2,this.a=new kwt(null,null,0,null),cM(this.a,this.a)}function YC(){YC=Z,oht=new Aet("DUMMY_NODE_OVER",0),_Ct=new Aet("DUMMY_NODE_UNDER",1),uV=new Aet("EQUAL",2)}function Iit(){Iit=Z,Xut=uQt(ct(ot(WS,1),ae,103,0,[(ao(),jh),kf])),Qut=uQt(ct(ot(WS,1),ae,103,0,[Z0,Q0]))}function Dit(t){return(be(),_u).Hc(t.j)?Xt(ye(Q(t,(se(),g7)))):Ko(ct(ot(Us,1),te,8,0,[t.i.n,t.n,t.a])).b}function lun(t){var e,n,r,s;for(r=t.b.a,n=r.a.ec().Kc();n.Ob();)e=u(n.Pb(),561),s=new mce(e,t.e,t.f),ue(t.g,s)}function f2(t,e){var n,r,s;r=t.nk(e,null),s=null,e&&(s=(t8(),n=new wv,n),P8(s,t.r)),r=O1(t,s,r),r&&r.Fi()}function hun(t,e){var n,r;for(r=ol(t.d,1)!=0,n=!0;n;)n=!1,n=e.c.Tf(e.e,r),n=n|pD(t,e,r,!1),r=!r;iyt(t)}function zyt(t,e){var n,r,s;return r=!1,n=e.q.d,e.ds&&(Jse(e.q,s),r=n!=e.q.d)),r}function Are(t,e){var n,r,s,o,h,d,w,k;return w=e.i,k=e.j,r=t.f,s=r.i,o=r.j,h=w-s,d=k-o,n=b.Math.sqrt(h*h+d*d),n}function qyt(t,e){var n,r;return r=Dz(t),r||(n=(Tat(),toe(e)),r=new Fzt(n),Mr(r.Vk(),t)),r}function $I(t,e){var n,r;return n=u(t.c.Bc(e),14),n?(r=t.hc(),r.Gc(n),t.d-=n.gc(),n.$b(),t.mc(r)):t.jc()}function Lre(t,e){var n;for(n=0;n=t.c.b:t.a<=t.c.b))throw rt(new lc);return e=t.a,t.a+=t.c.c,++t.b,de(e)}function gun(t){var e;return e=new cee(t),aI(t.a,Mbe,new wl(ct(ot(gO,1),Ie,369,0,[e]))),e.d&&ue(e.f,e.d),e.f}function Oit(t){var e;return e=new u2t(t.a),Lo(e,t),Jt(e,(se(),_i),t),e.o.a=t.g,e.o.b=t.f,e.n.a=t.i,e.n.b=t.j,e}function pun(t,e,n,r){var s,o;for(o=t.Kc();o.Ob();)s=u(o.Pb(),70),s.n.a=e.a+(r.a-s.o.a)/2,s.n.b=e.b,e.b+=s.o.b+n}function bun(t,e,n){var r,s;for(s=e.a.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),57),qXt(t,r,n))return!0;return!1}function vun(t){var e,n;for(n=new S(t.r);n.a=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function xun(t,e){var n,r,s;for(s=1,n=t,r=e>=0?e:-e;r>0;)r%2==0?(n*=n,r=r/2|0):(s*=n,r-=1);return e<0?1/s:s}function Fre(t){var e,n;if(t!=null)for(n=0;n0&&(n=u(Fe(t.a,t.a.c.length-1),570),Oyt(n,e))||ue(t.a,new pJt(e))}function _un(t){lf();var e,n;e=t.d.c-t.e.c,n=u(t.g,145),mu(n.b,new C9(e)),mu(n.c,new Gb(e)),va(n.i,new nR(e))}function $re(t){var e;return e=new _p,e.a+="VerticalSegment ",hc(e,t.e),e.a+=" ",Vr(e,m2t(new aet,new S(t.k))),e.a}function Sun(t){var e;return e=u(Wv(t.c.c,""),229),e||(e=new zx(Jk(Zk(new wm,""),"Other")),p2(t.c.c,"",e)),e}function XC(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (name: ",fo(e,t.zb),e.a+=")",e.a)}function Wyt(t,e,n){var r,s;return s=t.sb,t.sb=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,4,s,e),n?n.Ei(r):n=r),n}function Nit(t,e){var n,r,s;for(n=0,s=Yo(t,e).Kc();s.Ob();)r=u(s.Pb(),11),n+=Q(r,(se(),Zu))!=null?1:0;return n}function a4(t,e,n){var r,s,o;for(r=0,o=ei(t,0);o.b!=o.d.c&&(s=Xt(ye(ti(o))),!(s>n));)s>=e&&++r;return r}function Aun(t,e,n){var r,s;return r=new F0(t.e,3,13,null,(s=e.c,s||(dn(),V1)),Fg(t,e),!1),n?n.Ei(r):n=r,n}function Lun(t,e,n){var r,s;return r=new F0(t.e,4,13,(s=e.c,s||(dn(),V1)),null,Fg(t,e),!1),n?n.Ei(r):n=r,n}function Kyt(t,e,n){var r,s;return s=t.r,t.r=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,8,s,t.r),n?n.Ei(r):n=r),n}function Og(t,e){var n,r;return n=u(e,676),r=n.vk(),!r&&n.wk(r=Et(e,88)?new FVt(t,u(e,26)):new rZt(t,u(e,148))),r}function zI(t,e,n){var r;t.qi(t.i+1),r=t.oi(e,n),e!=t.i&&Ic(t.g,e,t.g,e+1,t.i-e),Ji(t.g,e,r),++t.i,t.bi(e,n),t.ci()}function Mun(t,e){var n;return e.a&&(n=e.a.a.length,t.a?Vr(t.a,t.b):t.a=new Il(t.d),sZt(t.a,e.a,e.d.length,n)),t}function Iun(t,e){var n,r,s,o;if(e.vi(t.a),o=u(In(t.a,8),1936),o!=null)for(n=o,r=0,s=n.length;rn)throw rt(new mo(Fq+t+zxt+e+", size: "+n));if(t>e)throw rt(new Pn(Fq+t+gfe+e))}function lh(t,e,n){if(e<0)Q4t(t,n);else{if(!n.Ij())throw rt(new Pn(ab+n.ne()+W_));u(n,66).Nj().Vj(t,t.yh(),e)}}function Nun(t,e,n,r,s,o,h,d){var w;for(w=n;o=r||e=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:t>=48&&t<=57?t-48:0}function Wre(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (source: ",fo(e,t.d),e.a+=")",e.a)}function Fun(t,e,n){var r,s;return s=t.a,t.a=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,5,s,t.a),n?v4t(n,r):n=r),n}function Ng(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,2,n,e))}function Xyt(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,8,n,e))}function xz(t,e){var n;n=(t.Bb&256)!=0,e?t.Bb|=256:t.Bb&=-257,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,8,n,e))}function Pg(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,3,n,e))}function Qyt(t,e){var n;n=(t.Bb&512)!=0,e?t.Bb|=512:t.Bb&=-513,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,9,n,e))}function ZC(t,e){var n;return t.b==-1&&t.a&&(n=t.a.Gj(),t.b=n?t.c.Xg(t.a.aj(),n):Vi(t.c.Tg(),t.a)),t.c.Og(t.b,e)}function de(t){var e,n;return t>-129&&t<128?(e=t+128,n=(VKt(),sEt)[e],!n&&(n=sEt[e]=new iM(t)),n):new iM(t)}function eE(t){var e,n;return t>-129&&t<128?(e=t+128,n=(QKt(),uEt)[e],!n&&(n=uEt[e]=new eR(t)),n):new eR(t)}function Zyt(t){var e,n;return e=t.k,e==(Gn(),xs)?(n=u(Q(t,(se(),oc)),61),n==(be(),Nn)||n==mr):!1}function Bun(t,e,n){var r,s,o;return o=(s=wE(t.b,e),s),o&&(r=u(Eq(mI(t,o),""),26),r)?w5t(t,r,e,n):null}function Pit(t,e,n){var r,s,o;return o=(s=wE(t.b,e),s),o&&(r=u(Eq(mI(t,o),""),26),r)?m5t(t,r,e,n):null}function Kre(t,e){var n,r;for(r=new er(t);r.e!=r.i.gc();)if(n=u(dr(r),138),Gt(e)===Gt(n))return!0;return!1}function JC(t,e,n){var r;if(r=t.gc(),e>r)throw rt(new jm(e,r));if(t.hi()&&t.Hc(n))throw rt(new Pn(XD));t.Xh(e,n)}function Run(t,e){var n;if(n=t4(t.i,e),n==null)throw rt(new ad("Node did not exist in input."));return uyt(e,n),null}function jun(t,e){var n;if(n=gD(t,e),Et(n,322))return u(n,34);throw rt(new Pn(ab+e+"' is not a valid attribute"))}function $un(t,e,n){var r,s;for(s=Et(e,99)&&u(e,18).Bb&Ya?new Uet(e,t):new U8(e,t),r=0;re?1:t==e?t==0?Ls(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function Yun(t,e){wr(e,"Sort end labels",1),us(Ri(Wo(new Tn(null,new _n(t.b,16)),new QP),new q5),new vY),or(e)}function t_(t,e,n){var r,s;return t.ej()?(s=t.fj(),r=qst(t,e,n),t.$i(t.Zi(7,de(n),r,e,s)),r):qst(t,e,n)}function Fit(t,e){var n,r,s;t.d==null?(++t.e,--t.f):(s=e.cd(),n=e.Sh(),r=(n&vi)%t.d.length,Dsn(t,r,fce(t,r,n,s)))}function nE(t,e){var n;n=(t.Bb&wf)!=0,e?t.Bb|=wf:t.Bb&=-1025,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,10,n,e))}function rE(t,e){var n;n=(t.Bb&yy)!=0,e?t.Bb|=yy:t.Bb&=-4097,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,12,n,e))}function iE(t,e){var n;n=(t.Bb&zu)!=0,e?t.Bb|=zu:t.Bb&=-8193,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,15,n,e))}function sE(t,e){var n;n=(t.Bb&Ay)!=0,e?t.Bb|=Ay:t.Bb&=-2049,t.Db&4&&!(t.Db&1)&&mi(t,new df(t,1,11,n,e))}function Xun(t,e){var n;return n=Ls(t.b.c,e.b.c),n!=0||(n=Ls(t.a.a,e.a.a),n!=0)?n:Ls(t.a.b,e.a.b)}function Qun(t,e){var n;if(n=Jn(t.k,e),n==null)throw rt(new ad("Port did not exist in input."));return uyt(e,n),null}function Zun(t){var e,n;for(n=vce(Fl(t)).Kc();n.Ob();)if(e=Br(n.Pb()),m_(t,e))return asn((_Gt(),W4e),e);return null}function Jun(t,e){var n,r,s,o,h;for(h=au(t.e.Tg(),e),o=0,n=u(t.g,119),s=0;s>10)+OD&ms,e[1]=(t&1023)+56320&ms,Ah(e,0,e.length)}function Ez(t){var e,n;return n=u(Q(t,(Te(),Vl)),103),n==(ao(),c0)?(e=Xt(ye(Q(t,UG))),e>=1?kf:Q0):n}function nln(t){switch(u(Q(t,(Te(),X0)),218).g){case 1:return new BX;case 3:return new qX;default:return new FX}}function d2(t){if(t.c)d2(t.c);else if(t.d)throw rt(new Fo("Stream already terminated, can't be modified or used"))}function jit(t){var e;return t.Db&64?bf(t):(e=new Th(bf(t)),e.a+=" (identifier: ",fo(e,t.k),e.a+=")",e.a)}function Zre(t,e,n){var r,s;return r=(Tv(),s=new vp,s),W$(r,e),K$(r,n),t&&Mr((!t.a&&(t.a=new Ss(Hh,t,5)),t.a),r),r}function $it(t,e,n,r){var s,o;return On(r),On(n),s=t.xc(e),o=s==null?n:dGt(u(s,15),u(n,14)),o==null?t.Bc(e):t.zc(e,o),o}function un(t){var e,n,r,s;return n=(e=u(Hf((r=t.gm,s=r.f,s==Hr?r:s)),9),new rh(e,u(uf(e,e.length),9),0)),pf(n,t),n}function rln(t,e,n){var r,s;for(s=t.a.ec().Kc();s.Ob();)if(r=u(s.Pb(),10),II(n,u(Fe(e,r.p),14)))return r;return null}function iln(t,e,n){var r;try{Rcn(t,e,n)}catch(s){throw s=Wi(s),Et(s,597)?(r=s,rt(new amt(r))):rt(s)}return e}function Yp(t,e){var n;return Bo(t)&&Bo(e)&&(n=t-e,DD>1,t.k=n-1>>1}function zit(){E4t();var t,e,n;n=txn+++Date.now(),t=ps(b.Math.floor(n*PD))&Pq,e=ps(n-t*Rxt),this.a=t^1502,this.b=e^fot}function z0(t){var e,n,r;for(e=new le,r=new S(t.j);r.a34028234663852886e22?ss:e<-34028234663852886e22?Ts:e}function Jre(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function tie(t){var e,n,r,s;for(e=new NWt(t.Hd().gc()),s=0,r=Kx(t.Hd().Kc());r.Ob();)n=r.Pb(),mrn(e,n,de(s++));return G0n(e.a)}function lln(t,e){var n,r,s;for(s=new Cr,r=e.vc().Kc();r.Ob();)n=u(r.Pb(),42),ki(s,n.cd(),ecn(t,u(n.dd(),15)));return s}function i3t(t,e){t.n.c.length==0&&ue(t.n,new f$(t.s,t.t,t.i)),ue(t.b,e),$3t(u(Fe(t.n,t.n.c.length-1),211),e),lle(t,e)}function o4(t){return(t.c!=t.b.b||t.i!=t.g.b)&&(t.a.c=Pt(Xn,Ie,1,0,5,1),As(t.a,t.b),As(t.a,t.g),t.c=t.b.b,t.i=t.g.b),t.a}function qit(t,e){var n,r,s;for(s=0,r=u(e.Kb(t),20).Kc();r.Ob();)n=u(r.Pb(),17),je(Re(Q(n,(se(),$1))))||++s;return s}function hln(t,e){var n,r,s;r=Z3(e),s=Xt(ye(iy(r,(Te(),xf)))),n=b.Math.max(0,s/2-.5),c_(e,n,1),ue(t,new UGt(e,n))}function hh(){hh=Z,CO=new CM(K0,0),yS=new CM("FIRST",1),fb=new CM(c1e,2),xS=new CM("LAST",3),Fy=new CM(u1e,4)}function q0(){q0=Z,gft=new KR(O_,0),XO=new KR("POLYLINE",1),A7=new KR("ORTHOGONAL",2),H6=new KR("SPLINES",3)}function Tz(){Tz=Z,N_t=new jet("ASPECT_RATIO_DRIVEN",0),$ht=new jet("MAX_SCALE_DRIVEN",1),O_t=new jet("AREA_DRIVEN",2)}function GI(){GI=Z,AV=new $et("P1_STRUCTURE",0),LV=new $et("P2_PROCESSING_ORDER",1),MV=new $et("P3_EXECUTION",2)}function Cz(){Cz=Z,Nht=new Fet("OVERLAP_REMOVAL",0),Dht=new Fet("COMPACTION",1),Oht=new Fet("GRAPH_SIZE_CALCULATION",2)}function rw(t,e){return y1(),gf(eb),b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e))}function eie(t,e){var n,r;for(n=ei(t,0);n.b!=n.d.c;){if(r=lM(ye(ti(n))),r==e)return;if(r>e){krt(n);break}}XM(n,e)}function an(t,e){var n,r,s,o,h;if(n=e.f,p2(t.c.d,n,e),e.g!=null)for(s=e.g,o=0,h=s.length;oe&&r.ue(t[o-1],t[o])>0;--o)h=t[o],Ji(t,o,t[o-1]),Ji(t,o-1,h)}function fh(t,e,n,r){if(e<0)E5t(t,n,r);else{if(!n.Ij())throw rt(new Pn(ab+n.ne()+W_));u(n,66).Nj().Tj(t,t.yh(),e,r)}}function _z(t,e){if(e==t.d)return t.e;if(e==t.e)return t.d;throw rt(new Pn("Node "+e+" not part of edge "+t))}function dln(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function nie(t,e){switch(e.g){case 2:return t.b;case 1:return t.c;case 4:return t.d;case 3:return t.a;default:return!1}}function s3t(t,e,n,r){switch(e){case 3:return t.f;case 4:return t.g;case 5:return t.i;case 6:return t.j}return Yyt(t,e,n,r)}function gln(t){return t.k!=(Gn(),Ds)?!1:A8(new Tn(null,new Fv(new ar(lr(Ms(t).a.Kc(),new z)))),new LF)}function pln(t){return t.e==null?t:(!t.c&&(t.c=new eat((t.f&256)!=0,t.i,t.a,t.d,(t.f&16)!=0,t.j,t.g,null)),t.c)}function bln(t,e){return t.h==ID&&t.m==0&&t.l==0?(e&&(ob=ru(0,0,0)),rUt((N8(),J8t))):(e&&(ob=ru(t.l,t.m,t.h)),ru(0,0,0))}function $o(t){var e;return Array.isArray(t)&&t.im===Ct?Ap(sl(t))+"@"+(e=Hi(t)>>>0,e.toString(16)):t.toString()}function e_(t){var e;this.a=(e=u(t.e&&t.e(),9),new rh(e,u(uf(e,e.length),9),0)),this.b=Pt(Xn,Ie,1,this.a.a.length,5,1)}function vln(t){var e,n,r;for(this.a=new A0,r=new S(t);r.a0&&(Rr(e-1,t.length),t.charCodeAt(e-1)==58)&&!Hit(t,iA,sA))}function Hit(t,e,n){var r,s;for(r=0,s=t.length;r=s)return e.c+n;return e.c+e.b.gc()}function kln(t,e){f8();var n,r,s,o;for(r=bte(t),s=e,D8(r,0,r.length,s),n=0;n0&&(r+=s,++n);return n>1&&(r+=t.d*(n-1)),r}function o3t(t){var e,n,r;for(r=new xg,r.a+="[",e=0,n=t.gc();e0&&this.b>0&&qvt(this.c,this.b,this.a)}function l3t(t){Vit(),this.c=_1(ct(ot(wxn,1),Ie,831,0,[Rwe])),this.b=new Cr,this.a=t,ki(this.b,oV,1),mu(jwe,new V$t(this))}function rie(t,e){var n;return t.d?kl(t.b,e)?u(Jn(t.b,e),51):(n=e.Kf(),ki(t.b,e,n),n):e.Kf()}function h3t(t,e){var n;return Gt(t)===Gt(e)?!0:Et(e,91)?(n=u(e,91),t.e==n.e&&t.d==n.d&&csn(t,n.a)):!1}function Jx(t){switch(be(),t.g){case 4:return Nn;case 1:return Hn;case 3:return mr;case 2:return Bn;default:return Zo}}function f3t(t,e){switch(e){case 3:return t.f!=0;case 4:return t.g!=0;case 5:return t.i!=0;case 6:return t.j!=0}return hyt(t,e)}function Aln(t){switch(t.g){case 0:return new rZ;case 1:return new HF;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function iie(t){switch(t.g){case 0:return new qF;case 1:return new GF;default:throw rt(new Pn(Bot+(t.f!=null?t.f:""+t.g)))}}function sie(t){switch(t.g){case 0:return new Gpt;case 1:return new bqt;default:throw rt(new Pn(pH+(t.f!=null?t.f:""+t.g)))}}function Lln(t){switch(t.g){case 1:return new ZQ;case 2:return new kWt;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function Mln(t){var e,n;if(t.b)return t.b;for(n=R1?null:t.d;n;){if(e=R1?null:n.b,e)return e;n=R1?null:n.d}return s8(),LEt}function Iln(t){var e,n,r;return t.e==0?0:(e=t.d<<5,n=t.a[t.d-1],t.e<0&&(r=pne(t),r==t.d-1&&(--n,n=n|0)),e-=lD(n),e)}function Dln(t){var e,n,r;return t>5,e=t&31,r=Pt(Tr,Xr,25,n+1,15,1),r[n]=1<3;)s*=10,--o;t=(t+(s>>1))/s|0}return r.i=t,!0}function Nln(t){return Iit(),Fn(),!!(nie(u(t.a,81).j,u(t.b,103))||u(t.a,81).d.e!=0&&nie(u(t.a,81).j,u(t.b,103)))}function Pln(t){O$(),u(t.We((ci(),vb)),174).Hc((cl(),WV))&&(u(t.We(Ky),174).Fc((Qu(),G6)),u(t.We(vb),174).Mc(WV))}function oie(t,e){var n,r;if(e){for(n=0;n=0;--r)for(e=n[r],s=0;s>1,this.k=e-1>>1}function zln(t,e){wr(e,"End label post-processing",1),us(Ri(Wo(new Tn(null,new _n(t.b,16)),new hY),new fY),new dY),or(e)}function qln(t,e,n){var r,s;return r=Xt(t.p[e.i.p])+Xt(t.d[e.i.p])+e.n.b+e.a.b,s=Xt(t.p[n.i.p])+Xt(t.d[n.i.p])+n.n.b+n.a.b,s-r}function Hln(t,e,n){var r,s;for(r=Ps(n,co),s=0;yc(r,0)!=0&&s0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function Vln(t){var e;return t==null?null:new Np((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function m3t(t,e){var n;return t.i>0&&(e.lengtht.i&&Ji(e,t.i,null),e}function Qc(t,e,n){var r,s,o;return t.ej()?(r=t.i,o=t.fj(),zI(t,r,e),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):zI(t,t.i,e),n}function Uln(t,e,n){var r,s;return r=new F0(t.e,4,10,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),null,Fg(t,e),!1),n?n.Ei(r):n=r,n}function Wln(t,e,n){var r,s;return r=new F0(t.e,3,10,null,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),Fg(t,e),!1),n?n.Ei(r):n=r,n}function lie(t){Bm();var e;return e=new yo(u(t.e.We((ci(),a5)),8)),t.B.Hc((cl(),M7))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function hie(t){sy();var e;return(t.q?t.q:(vn(),vn(),a0))._b((Te(),Nw))?e=u(Q(t,Nw),197):e=u(Q(Fa(t),CS),197),e}function iy(t,e){var n,r;return r=null,Vs(t,(Te(),sV))&&(n=u(Q(t,sV),94),n.Xe(e)&&(r=n.We(e))),r==null&&(r=Q(Fa(t),e)),r}function fie(t,e){var n,r,s;return Et(e,42)?(n=u(e,42),r=n.cd(),s=ny(t.Rc(),r),fd(s,n.dd())&&(s!=null||t.Rc()._b(r))):!1}function Wit(t,e){var n,r,s;return t.f>0?(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=fce(t,s,r,e),n!=-1):!1}function Yf(t,e){var n,r,s;return t.f>0&&(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=r5t(t,s,r,e),n)?n.dd():null}function VI(t,e){var n,r,s,o;for(o=au(t.e.Tg(),e),n=u(t.g,119),s=0;s1?C1(M0(e.a[1],32),Ps(e.a[0],co)):Ps(e.a[0],co),Vv(Ca(e.e,n))))}function UI(t,e){var n;return Bo(t)&&Bo(e)&&(n=t%e,DD>5,e&=31,s=t.d+n+(e==0?0:1),r=Pt(Tr,Xr,25,s,15,1),Kdn(r,t.a,n,e),o=new K3(t.e,s,r),OC(o),o}function x3t(t,e,n){var r,s;r=u(Fc(O7,e),117),s=u(Fc(hA,e),117),n?(xo(O7,t,r),xo(hA,t,s)):(xo(hA,t,r),xo(O7,t,s))}function mie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r>=0?o=o.a[1]:(s=o,o=o.a[0])}return s}function yie(t,e,n){var r,s,o;for(s=null,o=t.b;o;){if(r=t.a.ue(e,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(s=o,o=o.a[1])}return s}function Zln(t,e,n,r){var s,o,h;return s=!1,O3n(t.f,n,r)&&(Ehn(t.f,t.a[e][n],t.a[e][r]),o=t.a[e],h=o[r],o[r]=o[n],o[n]=h,s=!0),s}function k3t(t,e,n,r,s){var o,h,d;for(h=s;e.b!=e.c;)o=u(Fx(e),10),d=u(Yo(o,r).Xb(0),11),t.d[d.p]=h++,n.c[n.c.length]=d;return h}function E3t(t,e,n){var r,s,o,h,d;return h=t.k,d=e.k,r=n[h.g][d.g],s=ye(iy(t,r)),o=ye(iy(e,r)),b.Math.max((On(s),s),(On(o),o))}function Jln(t,e,n){var r,s,o,h;for(r=n/t.c.length,s=0,h=new S(t);h.a2e3&&(vge=t,qH=b.setTimeout(aYe,10))),zH++==0?(Nan((Ypt(),X8t)),!0):!1}function ehn(t,e){var n,r,s;for(r=new ar(lr(Ms(t).a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),s=n.d.i,s.c==e)return!1;return!0}function T3t(t,e){var n,r;if(Et(e,245)){r=u(e,245);try{return n=t.vd(r),n==0}catch(s){if(s=Wi(s),!Et(s,205))throw rt(s)}}return!1}function nhn(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function rhn(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))>0}function C3t(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))<0}function Eie(t,e){return y1(),y1(),gf(eb),(b.Math.abs(t-e)<=eb||t==e||isNaN(t)&&isNaN(e)?0:te?1:Lv(isNaN(t),isNaN(e)))<=0}function Yit(t,e){for(var n=0;!e[n]||e[n]=="";)n++;for(var r=e[n++];noot)return n.fh();if(r=n.Zg(),r||n==t)break}return r}function _3t(t){return g$(),Et(t,156)?u(Jn(cN,Lge),288).vg(t):kl(cN,sl(t))?u(Jn(cN,sl(t)),288).vg(t):null}function shn(t){if(Oz(qE,t))return Fn(),YE;if(Oz(Oct,t))return Fn(),I2;throw rt(new Pn("Expecting true or false"))}function ahn(t,e){if(e.c==t)return e.d;if(e.d==t)return e.c;throw rt(new Pn("Input edge is not connected to the input port."))}function Lie(t,e){return t.e>e.e?1:t.ee.d?t.e:t.d=48&&t<48+b.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function Iie(t,e){var n;return Gt(e)===Gt(t)?!0:!Et(e,21)||(n=u(e,21),n.gc()!=t.gc())?!1:t.Ic(n)}function ohn(t,e){var n,r,s,o;return r=t.a.length-1,n=e-t.b&r,o=t.c-e&r,s=t.c-t.b&r,oWt(n=o?(aun(t,e),-1):(oun(t,e),1)}function chn(t,e){var n,r;for(n=(Rr(e,t.length),t.charCodeAt(e)),r=e+1;re.e?1:t.fe.f?1:Hi(t)-Hi(e)}function Oz(t,e){return On(t),e==null?!1:hn(t,e)?!0:t.length==e.length&&hn(t.toLowerCase(),e.toLowerCase())}function vhn(t,e){var n,r,s,o;for(r=0,s=e.gc();r0&&yc(t,128)<0?(e=Sr(t)+128,n=(XKt(),aEt)[e],!n&&(n=aEt[e]=new Cm(t)),n):new Cm(t)}function Oie(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),oi)),r!=null)?r:e.ne()}function whn(t,e){var n,r;return n=e.Hh(t.a),n&&(r=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),oi)),r!=null)?r:e.ne()}function mhn(t,e){prt();var n,r;for(r=new ar(lr(z0(t).a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),n.d.i==e||n.c.i==e)return n;return null}function L3t(t,e,n){this.c=t,this.f=new le,this.e=new Ta,this.j=new Rvt,this.n=new Rvt,this.b=e,this.g=new ih(e.c,e.d,e.b,e.a),this.a=n}function Xit(t){var e,n,r,s;for(this.a=new A0,this.d=new qs,this.e=0,n=t,r=0,s=n.length;r0):!1}function Fie(t){var e;Gt(qe(t,(ci(),r5)))===Gt(($0(),HV))&&(ts(t)?(e=u(qe(ts(t),r5),334),bo(t,r5,e)):bo(t,r5,YS))}function Ehn(t,e,n){var r,s;Ist(t.e,e,n,(be(),Bn)),Ist(t.i,e,n,Hn),t.a&&(s=u(Q(e,(se(),_i)),11),r=u(Q(n,_i),11),xrt(t.g,s,r))}function Bie(t,e,n){var r,s,o;r=e.c.p,o=e.p,t.b[r][o]=new tQt(t,e),n&&(t.a[r][o]=new Wk(e),s=u(Q(e,(se(),Iw)),10),s&&ln(t.d,s,e))}function Rie(t,e){var n,r,s;if(ue(nG,t),e.Fc(t),n=u(Jn(qut,t),21),n)for(s=n.Kc();s.Ob();)r=u(s.Pb(),33),Ro(nG,r,0)!=-1||Rie(r,e)}function Thn(t,e,n){var r;(Fge?(Mln(t),!0):Bge||jge?(s8(),!0):Rge&&(s8(),!1))&&(r=new fKt(e),r.b=n,S0n(t,r))}function Qit(t,e){var n;n=!t.A.Hc((_l(),V2))||t.q==(oa(),Vc),t.u.Hc((Qu(),tg))?n?U4n(t,e):ghe(t,e):t.u.Hc(xb)&&(n?h4n(t,e):Ahe(t,e))}function cE(t,e){var n,r;if(++t.j,e!=null&&(n=(r=t.a.Cb,Et(r,97)?u(r,97).Jg():null),mpn(e,n))){t6(t.a,4,n);return}t6(t.a,4,u(e,126))}function jie(t,e,n){return new ih(b.Math.min(t.a,e.a)-n/2,b.Math.min(t.b,e.b)-n/2,b.Math.abs(t.a-e.a)+n,b.Math.abs(t.b-e.b)+n)}function Chn(t,e){var n,r;return n=du(t.a.c.p,e.a.c.p),n!=0?n:(r=du(t.a.d.i.p,e.a.d.i.p),r!=0?r:du(e.a.d.p,t.a.d.p))}function _hn(t,e,n){var r,s,o,h;return o=e.j,h=n.j,o!=h?o.g-h.g:(r=t.f[e.p],s=t.f[n.p],r==0&&s==0?0:r==0?-1:s==0?1:Ls(r,s))}function $ie(t,e,n){var r,s,o;if(!n[e.d])for(n[e.d]=!0,s=new S(o4(e));s.a=s)return s;for(e=e>0?e:0;er&&Ji(e,r,null),e}function qie(t,e){var n,r;for(r=t.a.length,e.lengthr&&Ji(e,r,null),e}function p2(t,e,n){var r,s,o;return s=u(Jn(t.e,e),387),s?(o=J2t(s,n),OUt(t,s),o):(r=new _vt(t,e,n),ki(t.e,e,r),sQt(r),null)}function Lhn(t){var e;if(t==null)return null;if(e=Ebn($c(t,!0)),e==null)throw rt(new ret("Invalid hexBinary value: '"+t+"'"));return e}function KI(t){return Jp(),yc(t,0)<0?yc(t,-1)!=0?new g4t(-1,O8(t)):_ut:yc(t,10)<=0?wEt[Sr(t)]:new g4t(1,t)}function Jit(){return Lq(),ct(ot(Epe,1),ae,159,0,[xpe,ype,kpe,fpe,hpe,dpe,bpe,ppe,gpe,mpe,wpe,vpe,upe,cpe,lpe,ape,spe,ope,rpe,npe,ipe,Put])}function Hie(t){var e;this.d=new le,this.j=new Ta,this.g=new Ta,e=t.g.b,this.f=u(Q(Fa(e),(Te(),Vl)),103),this.e=Xt(ye(Fz(e,Gy)))}function Gie(t){this.b=new le,this.e=new le,this.d=t,this.a=!j9(Ri(new Tn(null,new Fv(new S1(t.b))),new Zt(new MF))).sd((Wb(),JE))}function Xf(){Xf=Z,qn=new AM("PARENTS",0),Js=new AM("NODES",1),Id=new AM("EDGES",2),$2=new AM("PORTS",3),Xg=new AM("LABELS",4)}function c4(){c4=Z,mb=new MM("DISTRIBUTED",0),JO=new MM("JUSTIFIED",1),CAt=new MM("BEGIN",2),XS=new MM(NE,3),_At=new MM("END",4)}function Mhn(t){var e;switch(e=t.yi(null),e){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function tst(t){switch(t.g){case 1:return ao(),Z0;case 4:return ao(),jh;case 2:return ao(),kf;case 3:return ao(),Q0}return ao(),c0}function Ihn(t,e,n){var r;switch(r=n.q.getFullYear()-nb+nb,r<0&&(r=-r),e){case 1:t.a+=r;break;case 2:Xd(t,r%100,2);break;default:Xd(t,r,e)}}function ei(t,e){var n,r;if(Um(e,t.b),e>=t.b>>1)for(r=t.c,n=t.b;n>e;--n)r=r.b;else for(r=t.a.a,n=0;n=64&&e<128&&(s=C1(s,M0(1,e-64)));return s}function Fz(t,e){var n,r;return r=null,Vs(t,(ci(),q6))&&(n=u(Q(t,q6),94),n.Xe(e)&&(r=n.We(e))),r==null&&Fa(t)&&(r=Q(Fa(t),e)),r}function Wie(t,e){var n,r,s;s=e.d.i,r=s.k,!(r==(Gn(),Ds)||r==j1)&&(n=new ar(lr(Ms(s).a.Kc(),new z)),zr(n)&&ki(t.k,e,u(Lr(n),17)))}function est(t,e){var n,r,s;return r=yn(t.Tg(),e),n=e-t.Ah(),n<0?(s=t.Yg(r),s>=0?t.lh(s):zst(t,r)):n<0?zst(t,r):u(r,66).Nj().Sj(t,t.yh(),n)}function De(t){var e;if(Et(t.a,4)){if(e=_3t(t.a),e==null)throw rt(new Fo(G1e+t.b+"'. "+H1e+(L0(uN),uN.k)+a8t));return e}else return t.a}function Nhn(t){var e;if(t==null)return null;if(e=t5n($c(t,!0)),e==null)throw rt(new ret("Invalid base64Binary value: '"+t+"'"));return e}function dr(t){var e;try{return e=t.i.Xb(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(t.mj(),rt(new lc)):rt(n)}}function nst(t){var e;try{return e=t.c.ki(t.e),t.mj(),t.g=t.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(t.mj(),rt(new lc)):rt(n)}}function i_(){i_=Z,c7t=(ci(),iAt),$ut=FSt,Fpe=$6,o7t=q2,$pe=(Kz(),$Et),jpe=REt,zpe=qEt,Rpe=BEt,Bpe=(Sit(),i7t),jut=Ope,a7t=Npe,eG=Ppe}function Bz(t){switch(pbt(),this.c=new le,this.d=t,t.g){case 0:case 2:this.a=Ewt(_7t),this.b=ss;break;case 3:case 1:this.a=_7t,this.b=Ts}}function Kie(t,e,n){var r,s;if(t.c)yu(t.c,t.c.i+e),xu(t.c,t.c.j+n);else for(s=new S(t.b);s.a0&&(ue(t.b,new AKt(e.a,n)),r=e.a.length,0r&&(e.a+=DUt(Pt(mh,vd,25,-r,15,1))))}function Yie(t,e){var n,r,s;for(n=t.o,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.e.a=Bfn(r,n.a),r.e.b=n.b*Xt(ye(r.b.We(ZH)))}function Fhn(t,e){var n,r,s,o;return s=t.k,n=Xt(ye(Q(t,(se(),Dw)))),o=e.k,r=Xt(ye(Q(e,Dw))),o!=(Gn(),xs)?-1:s!=xs?1:n==r?0:n=0?t.hh(e,n,r):(t.eh()&&(r=(s=t.Vg(),s>=0?t.Qg(r):t.eh().ih(t,-1-s,null,r))),t.Sg(e,n,r))}function I3t(t,e){switch(e){case 7:!t.e&&(t.e=new Cn(Ws,t,7,4)),xr(t.e);return;case 8:!t.d&&(t.d=new Cn(Ws,t,8,5)),xr(t.d);return}v3t(t,e)}function Qf(t,e){var n;n=t.Zc(e);try{return n.Pb()}catch(r){throw r=Wi(r),Et(r,109)?rt(new mo("Can't get element "+e)):rt(r)}}function D3t(t,e){this.e=t,e=0&&(n.d=t.t);break;case 3:t.t>=0&&(n.a=t.t)}t.C&&(n.b=t.C.b,n.c=t.C.c)}function n6(){n6=Z,cO=new $R(Rq,0),oO=new $R(xot,1),uO=new $R(kot,2),lO=new $R(Eot,3),cO.a=!1,oO.a=!0,uO.a=!1,lO.a=!0}function s_(){s_=Z,hO=new jR(Rq,0),JH=new jR(xot,1),tG=new jR(kot,2),fO=new jR(Eot,3),hO.a=!1,JH.a=!0,tG.a=!1,fO.a=!0}function zhn(t){var e;e=t.a;do e=u(Lr(new ar(lr(jo(e).a.Kc(),new z))),17).c.i,e.k==(Gn(),Zs)&&t.b.Fc(e);while(e.k==(Gn(),Zs));t.b=a2(t.b)}function qhn(t){var e,n,r;for(r=t.c.a,t.p=(Ar(r),new Pu(r)),n=new S(r);n.an.b)return!0}return!1}function rst(t,e){return ea(t)?!!lge[e]:t.hm?!!t.hm[e]:Nm(t)?!!uge[e]:Om(t)?!!cge[e]:!1}function bo(t,e,n){return n==null?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Iz(t.o,e)):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),Yz(t.o,e,n)),t}function Uhn(t,e,n,r){var s,o;o=e.Xe((ci(),s5))?u(e.We(s5),21):t.j,s=Pun(o),s!=(Lq(),Put)&&(n&&!S3t(s)||B4t(Tbn(t,s,r),e))}function jz(t,e,n,r){var s,o,h;return o=yn(t.Tg(),e),s=e-t.Ah(),s<0?(h=t.Yg(o),h>=0?t._g(h,n,!0):lw(t,o,n)):u(o,66).Nj().Pj(t,t.yh(),s,n,r)}function Whn(t,e,n,r){var s,o,h;n.mh(e)&&(to(),Yrt(e)?(s=u(n.ah(e),153),vhn(t,s)):(o=(h=e,h?u(r,49).xh(h):null),o&&YWe(n.ah(e),o)))}function Khn(t){switch(t.g){case 1:return tw(),aO;case 3:return tw(),sO;case 2:return tw(),But;case 4:return tw(),Fut;default:return null}}function O3t(t){switch(typeof t){case Oat:return Bg(t);case Lxt:return ps(t);case u6:return Fn(),t?1231:1237;default:return t==null?0:Iv(t)}}function Yhn(t,e,n){if(t.e)switch(t.b){case 1:Tnn(t.c,e,n);break;case 0:Cnn(t.c,e,n)}else BZt(t.c,e,n);t.a[e.p][n.p]=t.c.i,t.a[n.p][e.p]=t.c.e}function tse(t){var e,n;if(t==null)return null;for(n=Pt(o0,te,193,t.length,0,2),e=0;e=0)return s;if(t.Fk()){for(r=0;r=s)throw rt(new jm(e,s));if(t.hi()&&(r=t.Xc(n),r>=0&&r!=e))throw rt(new Pn(XD));return t.mi(e,n)}function N3t(t,e){if(this.a=u(Ar(t),245),this.b=u(Ar(e),245),t.vd(e)>0||t==(Qtt(),put)||e==(Xtt(),but))throw rt(new Pn("Invalid range: "+OZt(t,e)))}function ese(t){var e,n;for(this.b=new le,this.c=t,this.a=!1,n=new S(t.a);n.a0),(e&-e)==e)return ps(e*ol(t,31)*4656612873077393e-25);do n=ol(t,31),r=n%e;while(n-r+(e-1)<0);return ps(r)}function Bg(t){dKt();var e,n,r;return n=":"+t,r=YH[n],r!=null?ps((On(r),r)):(r=IEt[n],e=r==null?z2n(t):ps((On(r),r)),bnn(),YH[n]=e,e)}function rse(t,e,n){wr(n,"Compound graph preprocessor",1),t.a=new Hv,uhe(t,e,null),Ayn(t,e),l2n(t),Jt(e,(se(),XTt),t.a),t.a=null,Yu(t.b),or(n)}function Zhn(t,e,n){switch(n.g){case 1:t.a=e.a/2,t.b=0;break;case 2:t.a=e.a,t.b=e.b/2;break;case 3:t.a=e.a/2,t.b=e.b;break;case 4:t.a=0,t.b=e.b/2}}function Jhn(t){var e,n,r;for(r=u(Ai(t.a,(g4(),IG)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=W3t(n),w8(t,n,e[0],(Jv(),Sw),0),w8(t,n,e[1],Aw,1)}function tfn(t){var e,n,r;for(r=u(Ai(t.a,(g4(),DG)),15).Kc();r.Ob();)n=u(r.Pb(),101),e=W3t(n),w8(t,n,e[0],(Jv(),Sw),0),w8(t,n,e[1],Aw,1)}function ist(t){switch(t.g){case 0:return null;case 1:return new rne;case 2:return new Vpt;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function YI(t,e,n){var r,s;for(kcn(t,e-t.s,n-t.t),s=new S(t.n);s.a1&&(o=Qhn(t,e)),o}function sst(t){var e;return t.f&&t.f.kh()&&(e=u(t.f,49),t.f=u(Kp(t,e),82),t.f!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,8,e,t.f))),t.f}function ast(t){var e;return t.i&&t.i.kh()&&(e=u(t.i,49),t.i=u(Kp(t,e),82),t.i!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,7,e,t.i))),t.i}function no(t){var e;return t.b&&t.b.Db&64&&(e=t.b,t.b=u(Kp(t,e),18),t.b!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,21,e,t.b))),t.b}function qz(t,e){var n,r,s;t.d==null?(++t.e,++t.f):(r=e.Sh(),v2n(t,t.f+1),s=(r&vi)%t.d.length,n=t.d[s],!n&&(n=t.d[s]=t.uj()),n.Fc(e),++t.f)}function B3t(t,e,n){var r;return e.Kj()?!1:e.Zj()!=-2?(r=e.zj(),r==null?n==null:yi(r,n)):e.Hj()==t.e.Tg()&&n==null}function Hz(){var t;Bl(16,Jhe),t=Kee(16),this.b=Pt(wut,LD,317,t,0,1),this.c=Pt(wut,LD,317,t,0,1),this.a=null,this.e=null,this.i=0,this.f=t-1,this.g=0}function H0(t){evt.call(this),this.k=(Gn(),Ds),this.j=(Bl(6,my),new Yc(6)),this.b=(Bl(2,my),new Yc(2)),this.d=new Vtt,this.f=new Fpt,this.a=t}function nfn(t){var e,n;t.c.length<=1||(e=eue(t,(be(),mr)),Hae(t,u(e.a,19).a,u(e.b,19).a),n=eue(t,Bn),Hae(t,u(n.a,19).a,u(n.b,19).a))}function a_(){a_=Z,ACt=new TM("SIMPLE",0),lht=new TM(jot,1),hht=new TM("LINEAR_SEGMENTS",2),AS=new TM("BRANDES_KOEPF",3),LS=new TM(C1e,4)}function R3t(t,e,n){Dx(u(Q(e,(Te(),os)),98))||(Dmt(t,e,Rg(e,n)),Dmt(t,e,Rg(e,(be(),mr))),Dmt(t,e,Rg(e,Nn)),vn(),Xs(e.j,new aM(t)))}function ise(t,e,n,r){var s,o,h;for(s=u(Ai(r?t.a:t.b,e),21),h=s.Kc();h.Ob();)if(o=u(h.Pb(),33),dq(t,n,o))return!0;return!1}function ost(t){var e,n;for(n=new er(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Ss(ho,e,1)),e.d).i!=0)return!0;return!1}function cst(t){var e,n;for(n=new er(t);n.e!=n.i.gc();)if(e=u(dr(n),87),e.e||(!e.d&&(e.d=new Ss(ho,e,1)),e.d).i!=0)return!0;return!1}function rfn(t){var e,n,r;for(e=0,r=new S(t.c.a);r.a102?-1:t<=57?t-48:t<65?-1:t<=70?t-65+10:t<97?-1:t-97+10}function hst(t,e){if(t==null)throw rt(new yx("null key in entry: null="+e));if(e==null)throw rt(new yx("null value in entry: "+t+"=null"))}function ifn(t,e){for(var n,r;t.Ob();)if(!e.Ob()||(n=t.Pb(),r=e.Pb(),!(Gt(n)===Gt(r)||n!=null&&yi(n,r))))return!1;return!e.Ob()}function ase(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[Mit(t.a[0],e),Mit(t.a[1],e),Mit(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function ose(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[wz(t.a[0],e),wz(t.a[1],e),wz(t.a[2],e)]),t.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function v2(){v2=Z,mlt=new EM("GREEDY",0),STt=new EM(h1e,1),ylt=new EM(jot,2),pS=new EM("MODEL_ORDER",3),gS=new EM("GREEDY_MODEL_ORDER",4)}function cse(t,e){var n,r,s;for(t.b[e.g]=1,r=ei(e.d,0);r.b!=r.d.c;)n=u(ti(r),188),s=n.c,t.b[s.g]==1?ni(t.a,n):t.b[s.g]==2?t.b[s.g]=1:cse(t,s)}function sfn(t,e){var n,r,s;for(s=new Yc(e.gc()),r=e.Kc();r.Ob();)n=u(r.Pb(),286),n.c==n.f?pE(t,n,n.c):rgn(t,n)||(s.c[s.c.length]=n);return s}function afn(t,e,n){var r,s,o,h,d;for(d=t.r+e,t.r+=e,t.d+=n,r=n/t.n.c.length,s=0,h=new S(t.n);h.ao&&Ji(e,o,null),e}function yfn(t,e){var n,r;if(r=t.gc(),e==null){for(n=0;n0&&(w+=s),k[C]=h,h+=d*(w+r)}function bse(t){var e,n,r;for(r=t.f,t.n=Pt(ia,vo,25,r,15,1),t.d=Pt(ia,vo,25,r,15,1),e=0;e0?t.c:0),++s;t.b=r,t.d=o}function Sfn(t,e){var n,r,s,o,h;for(r=0,s=0,n=0,h=new S(e);h.a0?t.g:0),++n;t.c=s,t.d=r}function xse(t,e){var n;return n=ct(ot(ia,1),vo,25,15,[F3t(t,(Kf(),sc),e),F3t(t,tu,e),F3t(t,ac,e)]),t.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Afn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!1,!0)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function Lfn(t,e,n){var r;try{bq(t,e+t.j,n+t.k,!0,!1)}catch(s){throw s=Wi(s),Et(s,73)?(r=s,rt(new mo(r.g+$q+e+Ka+n+")."))):rt(s)}}function kse(t){var e;Vs(t,(Te(),Ow))&&(e=u(Q(t,Ow),21),e.Hc((fy(),Ef))?(e.Mc(Ef),e.Fc(Tf)):e.Hc(Tf)&&(e.Mc(Tf),e.Fc(Ef)))}function Ese(t){var e;Vs(t,(Te(),Ow))&&(e=u(Q(t,Ow),21),e.Hc((fy(),_f))?(e.Mc(_f),e.Fc(zh)):e.Hc(zh)&&(e.Mc(zh),e.Fc(_f)))}function Mfn(t,e,n){wr(n,"Self-Loop ordering",1),us(pu(Ri(Ri(Wo(new Tn(null,new _n(e.b,16)),new cF),new UY),new WY),new KY),new _m(t)),or(n)}function QI(t,e,n,r){var s,o;for(s=e;s0&&(s.b+=e),s}function Uz(t,e){var n,r,s;for(s=new Ta,r=t.Kc();r.Ob();)n=u(r.Pb(),37),w_(n,0,s.b),s.b+=n.f.b+e,s.a=b.Math.max(s.a,n.f.a);return s.a>0&&(s.a+=e),s}function Cse(t){var e,n,r;for(r=vi,n=new S(t.a);n.a>16==6?t.Cb.ih(t,5,r1,e):(r=no(u(yn((n=u(In(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Pfn(t){T8();var e=t.e;if(e&&e.stack){var n=e.stack,r=e+` `;return n.substring(0,r.length)==r&&(n=n.substring(r.length)),n.split(` -`)}return[]}function Ffn(t){var e;return e=($ee(),yge),e[t>>>28]|e[t>>24&15]<<4|e[t>>20&15]<<8|e[t>>16&15]<<12|e[t>>12&15]<<16|e[t>>8&15]<<20|e[t>>4&15]<<24|e[t&15]<<28}function Cse(t){var e,n,r;t.b==t.c&&(r=t.a.length,n=xyt(b.Math.max(8,r))<<1,t.b!=0?(e=ff(t.a,n),Kee(t,e,r),t.a=e,t.b=0):Wzt(t.a,n),t.c=r)}function Bfn(t,e){var n;return n=t.b,n.Xe((di(),ml))?n.Hf()==(be(),Bn)?-n.rf().a-Zt(ve(n.We(ml))):e+Zt(ve(n.We(ml))):n.Hf()==(be(),Bn)?-n.rf().a:e}function ZD(t){var e;return t.b.c.length!=0&&u(Pe(t.b,0),70).a?u(Pe(t.b,0),70).a:(e=srt(t),e??""+(t.c?Go(t.c.a,t,0):-1))}function Wz(t){var e;return t.f.c.length!=0&&u(Pe(t.f,0),70).a?u(Pe(t.f,0),70).a:(e=srt(t),e??""+(t.i?Go(t.i.j,t,0):-1))}function Rfn(t,e){var n,r;if(e<0||e>=t.gc())return null;for(n=e;n0?t.c:0),s=b.Math.max(s,e.d),++r;t.e=o,t.b=s}function $fn(t){var e,n;if(!t.b)for(t.b=y$(u(t.f,118).Ag().i),n=new nr(u(t.f,118).Ag());n.e!=n.i.gc();)e=u(dr(n),137),ue(t.b,new iet(e));return t.b}function zfn(t,e){var n,r,s;if(e.dc())return l8(),l8(),lN;for(n=new LWt(t,e.gc()),s=new nr(t);s.e!=s.i.gc();)r=dr(s),e.Hc(r)&&Or(n,r);return n}function q3t(t,e,n,r){return e==0?r?(!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),t.o):(!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),fD(t.o)):jz(t,e,n,r)}function xst(t){var e,n;if(t.rb)for(e=0,n=t.rb.i;e>22),s+=r>>22,s<0)?!1:(t.l=n&vl,t.m=r&vl,t.h=s&W0,!0)}function Gfn(t,e,n,r,s,o,h){var d,w;return!(e.Ae()&&(w=t.a.ue(n,r),w<0||!s&&w==0)||e.Be()&&(d=t.a.ue(n,o),d>0||!h&&d==0))}function Ufn(t,e){Q8();var n;if(n=t.j.g-e.j.g,n!=0)return 0;switch(t.j.g){case 2:return Vit(e,b9t)-Vit(t,b9t);case 4:return Vit(t,p9t)-Vit(e,p9t)}return 0}function Wfn(t){switch(t.g){case 0:return Tlt;case 1:return _lt;case 2:return Clt;case 3:return Slt;case 4:return PV;case 5:return Alt;default:return null}}function Io(t,e,n){var r,s;return r=(s=new Xtt,g2(s,e),tu(s,n),Or((!t.c&&(t.c=new he(zw,t,12,10)),t.c),s),s),Pg(r,0),ty(r,1),jg(r,!0),Rg(r,!0),r}function nx(t,e){var n,r;if(e>=t.i)throw nt(new Wet(e,t.i));return++t.j,n=t.g[e],r=t.i-e-1,r>0&&Pc(t.g,e+1,t.g,e,r),ls(t.g,--t.i,null),t.fi(e,n),t.ci(),n}function Sse(t,e){var n,r;return t.Db>>16==17?t.Cb.ih(t,21,Kh,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Kfn(t){var e,n,r,s;for(pn(),aa(t.c,t.a),s=new S(t.c);s.an.a.c.length))throw nt(new Pn("index must be >= 0 and <= layer node count"));t.c&&Eu(t.c.a,t),t.c=n,n&&$m(n.a,e,t)}function Ise(t,e){var n,r,s;for(r=new ar(lr(z0(t).a.Kc(),new H));Vr(r);)return n=u(Ir(r),17),s=u(e.Kb(n),10),new Bk(Dr(s.n.b+s.o.b/2));return DT(),DT(),but}function Ose(t,e){this.c=new Ar,this.a=t,this.b=e,this.d=u(K(t,(ae(),X4)),304),Gt(K(t,(xe(),e_t)))===Gt((bD(),FV))?this.e=new lqt:this.e=new uqt}function t1n(t,e){var n,r,s,o;for(o=0,r=new S(t);r.a>16==6?t.Cb.ih(t,6,ra,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(nu(),YG)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function K3t(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,1,sN,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(nu(),PAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Y3t(t,e){var n,r;return t.Db>>16==9?t.Cb.ih(t,9,ds,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(nu(),BAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Pse(t,e){var n,r;return t.Db>>16==5?t.Cb.ih(t,9,iU,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(ln(),ip)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function X3t(t,e){var n,r;return t.Db>>16==3?t.Cb.ih(t,0,oN,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(ln(),rp)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Fse(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,6,o1,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(ln(),ap)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Bse(){this.a=new XF,this.g=new Hz,this.j=new Hz,this.b=new Ar,this.d=new Hz,this.i=new Hz,this.k=new Ar,this.c=new Ar,this.e=new Ar,this.f=new Ar}function i1n(t,e,n){var r,s,o;for(n<0&&(n=0),o=t.i,s=n;suot)return c7(t,r);if(r==t)return!0}}return!1}function a1n(t){switch(gj(),t.q.g){case 5:xoe(t,(be(),On)),xoe(t,yr);break;case 4:bce(t,(be(),On)),bce(t,yr);break;default:bhe(t,(be(),On)),bhe(t,yr)}}function o1n(t){switch(gj(),t.q.g){case 5:Foe(t,(be(),Hn)),Foe(t,Bn);break;case 4:Wie(t,(be(),Hn)),Wie(t,Bn);break;default:vhe(t,(be(),Hn)),vhe(t,Bn)}}function c1n(t){var e,n;e=u(K(t,(n1(),ebe)),19),e?(n=e.a,n==0?ee(t,(Up(),aV),new Hit):ee(t,(Up(),aV),new T$(n))):ee(t,(Up(),aV),new T$(1))}function u1n(t,e){var n;switch(n=t.i,e.g){case 1:return-(t.n.b+t.o.b);case 2:return t.n.a-n.o.a;case 3:return t.n.b-n.o.b;case 4:return-(t.n.a+t.o.a)}return 0}function l1n(t,e){switch(t.g){case 0:return e==(ph(),gb)?CV:SV;case 1:return e==(ph(),gb)?CV:vO;case 2:return e==(ph(),gb)?vO:SV;default:return vO}}function tI(t,e){var n,r,s;for(Eu(t.a,e),t.e-=e.r+(t.a.c.length==0?0:t.c),s=Fkt,r=new S(t.a);r.a>16==3?t.Cb.ih(t,12,ds,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(nu(),NAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Z3t(t,e){var n,r;return t.Db>>16==11?t.Cb.ih(t,10,ds,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(nu(),FAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Rse(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,11,Kh,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(ln(),sp)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function jse(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,12,Yh,e):(r=oo(u(wn((n=u(Mn(t,16),26),n||(ln(),e3)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Oh(t){var e;return!(t.Bb&1)&&t.r&&t.r.kh()&&(e=u(t.r,49),t.r=u(Xp(t,e),138),t.r!=e&&t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,9,8,e,t.r))),t.r}function Est(t,e,n){var r;return r=ut(ot(ga,1),To,25,15,[E4t(t,(Zf(),fc),e,n),E4t(t,iu,e,n),E4t(t,dc,e,n)]),t.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function h1n(t,e){var n,r,s;if(s=sfn(t,e),s.c.length!=0)for(aa(s,new RY),n=s.c.length,r=0;r>19,k=e.h>>19,w!=k?k-w:(s=t.h,d=e.h,s!=d?s-d:(r=t.m,h=e.m,r!=h?r-h:(n=t.l,o=e.l,n-o)))}function Kz(){Kz=X,$7t=(gq(),Put),j7t=new vn(z6t,$7t),R7t=($$(),Nut),B7t=new vn(q6t,R7t),F7t=(Nz(),Out),P7t=new vn(H6t,F7t),N7t=new vn(V6t,(Fn(),!0))}function cC(t,e,n){var r,s;r=e*n,_t(t.g,145)?(s=q6(t),s.f.d?s.f.a||(t.d.a+=r+R1):(t.d.d-=r+R1,t.d.a+=r+R1)):_t(t.g,10)&&(t.d.d-=r,t.d.a+=2*r)}function $se(t,e,n){var r,s,o,h,d;for(s=t[n.g],d=new S(e.d);d.a0?t.g:0),++n;e.b=r,e.e=s}function zse(t){var e,n,r;if(r=t.b,uVt(t.i,r.length)){for(n=r.length*2,t.b=Nt(yut,LI,317,n,0,1),t.c=Nt(yut,LI,317,n,0,1),t.f=n-1,t.i=0,e=t.a;e;e=e.c)oI(t,e,e);++t.g}}function m1n(t,e,n,r){var s,o,h,d;for(s=0;sh&&(d=h/r),s>o&&(w=o/s),ld(t,b.Math.min(d,w)),t}function x1n(){yq();var t,e;try{if(e=u(u4t((Ip(),Xh),q7),2014),e)return e}catch(n){if(n=rs(n),_t(n,102))t=n,Xvt((Fr(),t));else throw nt(n)}return new Z5}function k1n(){Ite();var t,e;try{if(e=u(u4t((Ip(),Xh),D2),2024),e)return e}catch(n){if(n=rs(n),_t(n,102))t=n,Xvt((Fr(),t));else throw nt(n)}return new Em}function E1n(){yq();var t,e;try{if(e=u(u4t((Ip(),Xh),jh),1941),e)return e}catch(n){if(n=rs(n),_t(n,102))t=n,Xvt((Fr(),t));else throw nt(n)}return new QZ}function T1n(t,e,n){var r,s;return s=t.e,t.e=e,t.Db&4&&!(t.Db&1)&&(r=new oa(t,1,4,s,e),n?n.Ei(r):n=r),s!=e&&(e?n=T7(t,oq(t,e),n):n=T7(t,t.a,n)),n}function qse(){CR.call(this),this.e=-1,this.a=!1,this.p=Oa,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=Oa}function _1n(t,e){var n,r,s;if(r=t.b.d.d,t.a||(r+=t.b.d.a),s=e.b.d.d,e.a||(s+=e.b.d.a),n=js(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function C1n(t,e){var n,r,s;if(r=t.b.b.d,t.a||(r+=t.b.b.a),s=e.b.b.d,e.a||(s+=e.b.b.a),n=js(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function S1n(t,e){var n,r,s;if(r=t.b.g.d,t.a||(r+=t.b.g.a),s=e.b.g.d,e.a||(s+=e.b.g.a),n=js(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function t4t(){t4t=X,pbe=el(Ei(Ei(Ei(new Zs,(Ya(),Gc),(co(),e9t)),Gc,n9t),jo,r9t),jo,VEt),vbe=Ei(Ei(new Zs,Gc,BEt),Gc,GEt),bbe=el(new Zs,jo,WEt)}function A1n(t){var e,n,r,s,o;for(e=u(K(t,(ae(),mS)),83),o=t.n,r=e.Cc().Kc();r.Ob();)n=u(r.Pb(),306),s=n.i,s.c+=o.a,s.d+=o.b,n.c?iue(n):sue(n);ee(t,mS,null)}function L1n(t,e,n){var r,s;switch(s=t.b,r=s.d,e.g){case 1:return-r.d-n;case 2:return s.o.a+r.c+n;case 3:return s.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function M1n(t){var e,n,r,s,o;if(r=0,s=N7,t.b)for(e=0;e<360;e++)n=e*.017453292519943295,V5t(t,t.d,0,0,I4,n),o=t.b.ig(t.d),o0&&(h=(o&Ti)%t.d.length,s=t5t(t,h,o,e),s)?(d=s.ed(n),d):(r=t.tj(o,e,n),t.c.Fc(r),null)}function r4t(t,e){var n,r,s,o;switch(Bg(t,e)._k()){case 3:case 2:{for(n=E4(e),s=0,o=n.i;s=0;r--)if(un(t[r].d,e)||un(t[r].d,n)){t.length>=r+1&&t.splice(0,r+1);break}return t}function eI(t,e){var n;return Vo(t)&&Vo(e)&&(n=t/e,II0&&(t.b+=2,t.a+=r):(t.b+=1,t.a+=b.Math.min(r,s))}function Yse(t,e){var n,r;if(r=!1,ha(e)&&(r=!0,F6(t,new Hm(jr(e)))),r||_t(e,236)&&(r=!0,F6(t,(n=uvt(u(e,236)),new yT(n)))),!r)throw nt(new net(w8t))}function K1n(t,e,n,r){var s,o,h;return s=new F0(t.e,1,10,(h=e.c,_t(h,88)?u(h,26):(ln(),Qh)),(o=n.c,_t(o,88)?u(o,26):(ln(),Qh)),$g(t,e),!1),r?r.Ei(s):r=s,r}function a4t(t){var e,n;switch(u(K($a(t),(xe(),WTt)),420).g){case 0:return e=t.n,n=t.o,new Re(e.a+n.a/2,e.b+n.b/2);case 1:return new So(t.n);default:return null}}function nI(){nI=X,BV=new QT(K0,0),I9t=new QT("LEFTUP",1),N9t=new QT("RIGHTUP",2),D9t=new QT("LEFTDOWN",3),O9t=new QT("RIGHTDOWN",4),Llt=new QT("BALANCED",5)}function Y1n(t,e,n){var r,s,o;if(r=js(t.a[e.p],t.a[n.p]),r==0){if(s=u(K(e,(ae(),Mx)),15),o=u(K(n,Mx),15),s.Hc(n))return-1;if(o.Hc(e))return 1}return r}function X1n(t){switch(t.g){case 1:return new nZ;case 2:return new rZ;case 3:return new eZ;case 0:return null;default:throw nt(new Pn(Ect+(t.f!=null?t.f:""+t.g)))}}function o4t(t,e,n){switch(e){case 1:!t.n&&(t.n=new he(Yo,t,1,7)),Tr(t.n),!t.n&&(t.n=new he(Yo,t,1,7)),gs(t.n,u(n,14));return;case 2:q_(t,jr(n));return}Syt(t,e,n)}function c4t(t,e,n){switch(e){case 3:Xv(t,Zt(ve(n)));return;case 4:Qv(t,Zt(ve(n)));return;case 5:Cu(t,Zt(ve(n)));return;case 6:Su(t,Zt(ve(n)));return}o4t(t,e,n)}function Xz(t,e,n){var r,s,o;o=(r=new Xtt,r),s=F1(o,e,null),s&&s.Fi(),tu(o,n),Or((!t.c&&(t.c=new he(zw,t,12,10)),t.c),o),Pg(o,0),ty(o,1),jg(o,!0),Rg(o,!0)}function u4t(t,e){var n,r,s;return n=UT(t.g,e),_t(n,235)?(s=u(n,235),s.Qh()==null,s.Nh()):_t(n,498)?(r=u(n,1938),s=r.b,s):null}function Q1n(t,e,n,r){var s,o;return Dr(e),Dr(n),o=u(w_(t.d,e),19),Bte(!!o,"Row %s not in %s",e,t.e),s=u(w_(t.b,n),19),Bte(!!s,"Column %s not in %s",n,t.c),qne(t,o.a,s.a,r)}function Xse(t,e,n,r,s,o,h){var d,w,k,_,M;if(_=s[o],k=o==h-1,d=k?r:0,M=vse(d,_),r!=10&&ut(ot(t,h-o),e[o],n[o],d,M),!k)for(++o,w=0;w<_;++w)M[w]=Xse(t,e,n,r,s,o,h);return M}function uC(t){if(t.g==-1)throw nt(new Ru);t.mj();try{t.i.$c(t.g),t.f=t.i.j,t.g1||d==-1?(o=u(w,15),s.Wb(ihn(t,o))):s.Wb(hat(t,u(w,56)))))}function idn(t,e,n,r){BHt();var s=put;function o(){for(var h=0;hyct)return n;s>-1e-6&&++n}return n}function f4t(t,e){var n;e!=t.b?(n=null,t.b&&(n=c$(t.b,t,-4,n)),e&&(n=tx(e,t,-4,n)),n=Ire(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,3,e,e))}function Jse(t,e){var n;e!=t.f?(n=null,t.f&&(n=c$(t.f,t,-1,n)),e&&(n=tx(e,t,-1,n)),n=Ore(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,0,e,e))}function tae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new _g,e=n.Kc();e.Ob();)yo(r,($i(),jr(e.Pb()))),r.a+=" ";return Yet(r,r.a.length-1)}function eae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new _g,e=n.Kc();e.Ob();)yo(r,($i(),jr(e.Pb()))),r.a+=" ";return Yet(r,r.a.length-1)}function fdn(t,e,n){var r,s;return r=t.c[e.c.p][e.p],s=t.c[n.c.p][n.p],r.a!=null&&s.a!=null?Bnt(r.a,s.a):r.a!=null?-1:s.a!=null?1:0}function ddn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Jb(o),d=(n.b-n.a)*n.c<0?(Op(),Mb):new Bp(n);d.Ob();)h=u(d.Pb(),19),s=T8(e,h.a),r=new nzt(t),nnn(r.a,s)}function gdn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Jb(o),d=(n.b-n.a)*n.c<0?(Op(),Mb):new Bp(n);d.Ob();)h=u(d.Pb(),19),s=T8(e,h.a),r=new W$t(t),enn(r.a,s)}function pdn(t){var e;if(t!=null&&t.length>0&&Ta(t,t.length-1)==33)try{return e=Zae(Bl(t,0,t.length-1)),e.e==null}catch(n){if(n=rs(n),!_t(n,32))throw nt(n)}return!1}function nae(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?Hp(t,3,r,null,o,x7(t,r,o,_t(r,99)&&(u(r,18).Bb&Qa)!=0),!0):Hp(t,1,r,r.zj(),o,-1,!0),n?n.Ei(s):n=s,n}function bdn(){var t,e,n;for(e=0,t=0;t<1;t++){if(n=i5t(($r(t,1),"X".charCodeAt(t))),n==0)throw nt(new Rr("Unknown Option: "+"X".substr(t)));e|=n}return e}function vdn(t,e,n){var r,s,o;switch(r=$a(e),s=Ez(r),o=new Nc,tc(o,e),n.g){case 1:Us(o,HD(Z6(s)));break;case 2:Us(o,Z6(s))}return ee(o,(xe(),zy),ve(K(t,zy))),o}function d4t(t){var e,n;return e=u(Ir(new ar(lr(Uo(t.a).a.Kc(),new H))),17),n=u(Ir(new ar(lr($s(t.a).a.Kc(),new H))),17),Be(Fe(K(e,(ae(),H1))))||Be(Fe(K(n,H1)))}function p4(){p4=X,LV=new kM("ONE_SIDE",0),DV=new kM("TWO_SIDES_CORNER",1),IV=new kM("TWO_SIDES_OPPOSING",2),MV=new kM("THREE_SIDES",3),AV=new kM("FOUR_SIDES",4)}function Sst(t,e,n,r,s){var o,h;o=u($l(Wi(e.Oc(),new PX),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)]))),15),h=u(u2(t.b,n,r),15),s==0?h.Wc(0,o):h.Gc(o)}function wdn(t,e){var n,r,s,o,h;for(o=new S(e.a);o.a0&&Ase(this,this.c-1,(be(),Hn)),this.c0&&t[0].length>0&&(this.c=Be(Fe(K($a(t[0][0]),(ae(),Y9t))))),this.a=Nt(sme,re,2018,t.length,0,2),this.b=Nt(ame,re,2019,t.length,0,2),this.d=new _re}function Edn(t){return t.c.length==0?!1:(Sn(0,t.c.length),u(t.c[0],17)).c.i.k==(Gn(),ca)?!0:C8(xu(new kn(null,new Tn(t,16)),new lQ),new hQ)}function Tdn(t,e,n){return mr(n,"Tree layout",1),w$(t.b),Ud(t.b,(o7(),vG),vG),Ud(t.b,PS,PS),Ud(t.b,PO,PO),Ud(t.b,FS,FS),t.a=Tq(t.b,e),J2n(t,e,zc(n,1)),or(n),e}function iae(t,e){var n,r,s,o,h,d,w;for(d=gy(e),o=e.f,w=e.g,h=b.Math.sqrt(o*o+w*w),s=0,r=new S(d);r.a=0?(n=eI(t,Nq),r=UD(t,Nq)):(e=zm(t,1),n=eI(e,5e8),r=UD(e,5e8),r=Ra(M0(r,1),Gs(t,1))),A1(M0(r,32),Gs(n,po))}function oae(t,e,n){var r,s;switch(r=(Zn(e.b!=0),u(fh(e,e.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=t.f;break;case 3:r.a=0;break;default:r.a=t.g}return s=si(e,0),XM(s,r),e}function cae(t,e,n,r){var s,o,h,d,w;switch(w=t.b,o=e.d,h=o.j,d=S3t(h,w.d[h.g],n),s=Fi(uc(o.n),o.a),o.j.g){case 1:case 3:d.a+=s.a;break;case 2:case 4:d.b+=s.b}ks(r,d,r.c.b,r.c)}function Fdn(t,e,n){var r,s,o,h;for(h=Go(t.e,e,0),o=new Dpt,o.b=n,r=new xa(t.e,h);r.b1;e>>=1)e&1&&(r=t4(r,n)),n.d==1?n=t4(n,n):n=new Iie(zue(n.a,n.d,Nt(Sr,Jr,25,n.d<<1,15,1)));return r=t4(r,n),r}function y4t(){y4t=X;var t,e,n,r;for(x7t=Nt(ga,To,25,25,15,1),k7t=Nt(ga,To,25,33,15,1),r=152587890625e-16,e=32;e>=0;e--)k7t[e]=r,r*=.5;for(n=1,t=24;t>=0;t--)x7t[t]=n,n*=.5}function qdn(t){var e,n;if(Be(Fe(ze(t,(xe(),$y))))){for(n=new ar(lr(V0(t).a.Kc(),new H));Vr(n);)if(e=u(Ir(n),79),uw(e)&&Be(Fe(ze(e,B2))))return!0}return!1}function uae(t,e){var n,r,s;Vs(t.f,e)&&(e.b=t,r=e.c,Go(t.j,r,0)!=-1||ue(t.j,r),s=e.d,Go(t.j,s,0)!=-1||ue(t.j,s),n=e.a.b,n.c.length!=0&&(!t.i&&(t.i=new zie(t)),icn(t.i,n)))}function Hdn(t){var e,n,r,s,o;return n=t.c.d,r=n.j,s=t.d.d,o=s.j,r==o?n.p=0&&un(t.substr(e,3),"GMT")||e>=0&&un(t.substr(e,3),"UTC"))&&(n[0]=e+3),W5t(t,n,r)}function Gdn(t,e){var n,r,s,o,h;for(o=t.g.a,h=t.g.b,r=new S(t.d);r.an;o--)t[o]|=e[o-n-1]>>>h,t[o-1]=e[o-n-1]<=t.f)break;o.c[o.c.length]=n}return o}function k4t(t){var e,n,r,s;for(e=null,s=new S(t.wf());s.a0&&Pc(t.g,e,t.g,e+r,d),h=n.Kc(),t.i+=r,s=0;so&&oen(k,see(n[d],m7t))&&(s=d,o=w);return s>=0&&(r[0]=e+o),s}function Zdn(t,e){var n;if(n=nUt(t.b.Hf(),e.b.Hf()),n!=0)return n;switch(t.b.Hf().g){case 1:case 2:return mu(t.b.sf(),e.b.sf());case 3:case 4:return mu(e.b.sf(),t.b.sf())}return 0}function Jdn(t){var e,n,r;for(r=t.e.c.length,t.a=Zb(Sr,[re,Jr],[48,25],15,[r,r],2),n=new S(t.c);n.a>4&15,o=t[r]&15,h[s++]=RAt[n],h[s++]=RAt[o];return Ih(h,0,h.length)}function n0n(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?Hp(t,4,r,o,null,x7(t,r,o,_t(r,99)&&(u(r,18).Bb&Qa)!=0),!0):Hp(t,r.Kj()?2:1,r,o,r.zj(),-1,!0),n?n.Ei(s):n=s,n}function Lu(t){var e,n;return t>=Qa?(e=OI+(t-Qa>>10&1023)&Ms,n=56320+(t-Qa&1023)&Ms,String.fromCharCode(e)+(""+String.fromCharCode(n))):String.fromCharCode(t&Ms)}function r0n(t,e){Bm();var n,r,s,o;return s=u(u(Pi(t.r,e),21),84),s.gc()>=2?(r=u(s.Kc().Pb(),111),n=t.u.Hc((il(),JS)),o=t.u.Hc(Hx),!r.a&&!n&&(s.gc()==2||o)):!1}function fae(t,e,n,r,s){var o,h,d;for(o=Yce(t,e,n,r,s),d=!1;!o;)sq(t,s,!0),d=!0,o=Yce(t,e,n,r,s);d&&sq(t,s,!1),h=bit(s),h.c.length!=0&&(t.d&&t.d.lg(h),fae(t,s,n,r,h))}function tq(){tq=X,wft=new r_(K0,0),fAt=new r_("DIRECTED",1),gAt=new r_("UNDIRECTED",2),lAt=new r_("ASSOCIATION",3),dAt=new r_("GENERALIZATION",4),hAt=new r_("DEPENDENCY",5)}function i0n(t,e){var n;if(!_1(t))throw nt(new Ho(ode));switch(n=_1(t),e.g){case 1:return-(t.j+t.f);case 2:return t.i-n.g;case 3:return t.j-n.f;case 4:return-(t.i+t.g)}return 0}function h7(t,e){var n,r;for(In(e),r=t.b.c.length,ue(t.b,e);r>0;){if(n=r,r=(r-1)/2|0,t.a.ue(Pe(t.b,r),e)<=0)return lh(t.b,n,e),!0;lh(t.b,n,Pe(t.b,r))}return lh(t.b,r,e),!0}function E4t(t,e,n,r){var s,o;if(s=0,n)s=wz(t.a[n.g][e.g],r);else for(o=0;o=d)}function T4t(t,e,n,r){var s;if(s=!1,ha(r)&&(s=!0,d8(e,n,jr(r))),s||Om(r)&&(s=!0,T4t(t,e,n,r)),s||_t(r,236)&&(s=!0,e2(e,n,u(r,236))),!s)throw nt(new net(w8t))}function a0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Jf((!n.b&&(n.b=new Al((ln(),Ja),pc,n)),n.b),Rh),s!=null)){for(r=1;r<(Gu(),cLt).length;++r)if(un(cLt[r],s))return r}return 0}function o0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Jf((!n.b&&(n.b=new Al((ln(),Ja),pc,n)),n.b),Rh),s!=null)){for(r=1;r<(Gu(),uLt).length;++r)if(un(uLt[r],s))return r}return 0}function dae(t,e){var n,r,s,o;if(In(e),o=t.a.gc(),o0?1:0;o.a[s]!=n;)o=o.a[s],s=t.a.ue(n.d,o.d)>0?1:0;o.a[s]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function l0n(t){il();var e,n;return e=Ki(tg,ut(ot(VG,1),oe,273,0,[Eb])),!(AD(h$(e,t))>1||(n=Ki(JS,ut(ot(VG,1),oe,273,0,[ZS,Hx])),AD(h$(n,t))>1))}function C4t(t,e){var n;n=jc((Ip(),Xh),t),_t(n,498)?Ao(Xh,t,new IGt(this,e)):Ao(Xh,t,this),Nst(this,e),e==(Zk(),XAt)?(this.wb=u(this,1939),u(e,1941)):this.wb=(zp(),An)}function h0n(t){var e,n,r;if(t==null)return null;for(e=null,n=0;n=Vg?"error":r>=900?"warn":r>=800?"info":"log"),JYt(n,t.a),t.b&&C5t(e,n,t.b,"Exception: ",!0))}function K(t,e){var n,r;return r=(!t.q&&(t.q=new Ar),tr(t.q,e)),r??(n=e.wg(),_t(n,4)&&(n==null?(!t.q&&(t.q=new Ar),G6(t.q,e)):(!t.q&&(t.q=new Ar),Ai(t.q,e,n))),n)}function Ya(){Ya=X,Ld=new xM("P1_CYCLE_BREAKING",0),fb=new xM("P2_LAYERING",1),fu=new xM("P3_NODE_ORDERING",2),Gc=new xM("P4_NODE_PLACEMENT",3),jo=new xM("P5_EDGE_ROUTING",4)}function vae(t,e){var n,r,s,o,h;for(s=e==1?Jut:Zut,r=s.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),103),h=u(Pi(t.f.c,n),21).Kc();h.Ob();)o=u(h.Pb(),46),Eu(t.b.b,o.b),Eu(t.b.a,u(o.b,81).d)}function f0n(t,e){$_();var n;if(t.c==e.c){if(t.b==e.b||Bon(t.b,e.b)){if(n=UYe(t.b)?1:-1,t.a&&!e.a)return n;if(!t.a&&e.a)return-n}return mu(t.b.g,e.b.g)}else return js(t.c,e.c)}function d0n(t,e){var n;mr(e,"Hierarchical port position processing",1),n=t.b,n.c.length>0&&Fue((Sn(0,n.c.length),u(n.c[0],29)),t),n.c.length>1&&Fue(u(Pe(n,n.c.length-1),29),t),or(e)}function wae(t,e){var n,r,s;if(A4t(t,e))return!0;for(r=new S(e);r.a=s||e<0)throw nt(new Co(Yct+e+L2+s));if(n>=s||n<0)throw nt(new Co(Xct+n+L2+s));return e!=n?r=(o=t.Ti(n),t.Hi(e,o),o):r=t.Oi(n),r}function xae(t){var e,n,r;if(r=t,t)for(e=0,n=t.Ug();n;n=n.Ug()){if(++e>uot)return xae(n);if(r=n,n==t)throw nt(new Ho("There is a cycle in the containment hierarchy of "+t))}return r}function Jp(t){var e,n,r;for(r=new l2(Xa,"[","]"),n=t.Kc();n.Ob();)e=n.Pb(),P0(r,Gt(e)===Gt(t)?"(this Collection)":e==null?Mu:Wo(e));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function A4t(t,e){var n,r;if(r=!1,e.gc()<2)return!1;for(n=0;nr&&($r(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return r>0||e1&&(t.j.b+=t.e)):(t.j.a+=n.a,t.j.b=b.Math.max(t.j.b,n.b),t.d.c.length>1&&(t.j.a+=t.e))}function tb(){tb=X,e2e=ut(ot(Za,1),Cc,61,0,[(be(),On),Hn,yr]),t2e=ut(ot(Za,1),Cc,61,0,[Hn,yr,Bn]),n2e=ut(ot(Za,1),Cc,61,0,[yr,Bn,On]),r2e=ut(ot(Za,1),Cc,61,0,[Bn,On,Hn])}function p0n(t,e,n,r){var s,o,h,d,w,k,_;if(h=t.c.d,d=t.d.d,h.j!=d.j)for(_=t.b,s=h.j,w=null;s!=d.j;)w=e==0?kz(s):Qyt(s),o=S3t(s,_.d[s.g],n),k=S3t(w,_.d[w.g],n),ai(r,Fi(o,k)),s=w}function b0n(t,e,n,r){var s,o,h,d,w;return h=Lse(t.a,e,n),d=u(h.a,19).a,o=u(h.b,19).a,r&&(w=u(K(e,(ae(),sl)),10),s=u(K(n,sl),10),w&&s&&(PZt(t.b,w,s),d+=t.b.i,o+=t.b.e)),d>o}function Eae(t){var e,n,r,s,o,h,d,w,k;for(this.a=Zie(t),this.b=new le,n=t,r=0,s=n.length;rhnt(t.d).c?(t.i+=t.g.c,Xit(t.d)):hnt(t.d).c>hnt(t.g).c?(t.e+=t.d.c,Xit(t.g)):(t.i+=tYt(t.g),t.e+=tYt(t.d),Xit(t.g),Xit(t.d))}function m0n(t,e,n){var r,s,o,h;for(o=e.q,h=e.r,new n2((Yf(),vb),e,o,1),new n2(vb,o,h,1),s=new S(n);s.ad&&(w=d/r),s>o&&(k=o/s),h=b.Math.min(w,k),t.a+=h*(e.a-t.a),t.b+=h*(e.b-t.b)}function E0n(t,e,n,r,s){var o,h;for(h=!1,o=u(Pe(n.b,0),33);Rmn(t,e,o,r,s)&&(h=!0,ndn(n,o),n.b.c.length!=0);)o=u(Pe(n.b,0),33);return n.b.c.length==0&&tI(n.j,n),h&&Gz(e.q),h}function T0n(t,e){x4();var n,r,s,o;if(e.b<2)return!1;for(o=si(e,0),n=u(ii(o),8),r=n;o.b!=o.d.c;){if(s=u(ii(o),8),Jst(t,r,s))return!0;r=s}return!!Jst(t,r,n)}function M4t(t,e,n,r){var s,o;return n==0?(!t.o&&(t.o=new Il((nu(),_b),$w,t,0)),kj(t.o,e,r)):(o=u(wn((s=u(Mn(t,16),26),s||t.zh()),n),66),o.Nj().Rj(t,uu(t),n-Jn(t.zh()),e,r))}function Nst(t,e){var n;e!=t.sb?(n=null,t.sb&&(n=u(t.sb,49).ih(t,1,nA,n)),e&&(n=u(e,49).gh(t,1,nA,n)),n=Vyt(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,4,e,e))}function _0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new J$t(t),N8(n.a,(In(s),s)),o=R0(e,"y"),r=new tzt(t),F8(r.a,(In(o),o));else throw nt(new od("All edge sections need an end point."))}function C0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new X$t(t),P8(n.a,(In(s),s)),o=R0(e,"y"),r=new Q$t(t),B8(r.a,(In(o),o));else throw nt(new od("All edge sections need a start point."))}function S0n(t,e){var n,r,s,o,h,d,w;for(r=ure(t),o=0,d=r.length;o>22-e,s=t.h<>22-e):e<44?(n=0,r=t.l<>44-e):(n=0,r=0,s=t.l<t)throw nt(new Pn("k must be smaller than n"));return e==0||e==t?1:t==0?0:i4t(t)/(i4t(e)*i4t(t-e))}function D4t(t,e){var n,r,s,o;for(n=new t2t(t);n.g==null&&!n.c?Owt(n):n.g==null||n.i!=0&&u(n.g[n.i-1],47).Ob();)if(o=u(aq(n),56),_t(o,160))for(r=u(o,160),s=0;s>4],e[n*2+1]=uU[o&15];return Ih(e,0,e.length)}function V0n(t){Qj();var e,n,r;switch(r=t.c.length,r){case 0:return uge;case 1:return e=u(doe(new S(t)),42),gtn(e.cd(),e.dd());default:return n=u(P1(t,Nt(I2,Iq,42,t.c.length,0,1)),165),new tet(n)}}function G0n(t){var e,n,r,s,o,h;for(e=new F3,n=new F3,Vp(e,t),Vp(n,t);n.b!=n.c;)for(s=u(P6(n),37),h=new S(s.a);h.a0&&vI(t,n,e),s):Spn(t,e,n)}function Dae(t,e,n){var r,s,o,h;if(e.b!=0){for(r=new cs,h=si(e,0);h.b!=h.d.c;)o=u(ii(h),86),Ka(r,dyt(o)),s=o.e,s.a=u(K(o,(mc(),Dht)),19).a,s.b=u(K(o,Q_t),19).a;Dae(t,r,zc(n,r.b/t.a|0))}}function Iae(t,e){var n,r,s,o,h;if(t.e<=e||Jrn(t,t.g,e))return t.g;for(o=t.r,r=t.g,h=t.r,s=(o-r)/2+r;r+11&&(t.e.b+=t.a)):(t.e.a+=n.a,t.e.b=b.Math.max(t.e.b,n.b),t.d.c.length>1&&(t.e.a+=t.a))}function X0n(t){var e,n,r,s;switch(s=t.i,e=s.b,r=s.j,n=s.g,s.a.g){case 0:n.a=(t.g.b.o.a-r.a)/2;break;case 1:n.a=e.d.n.a+e.d.a.a;break;case 2:n.a=e.d.n.a+e.d.a.a-r.a;break;case 3:n.b=e.d.n.b+e.d.a.b}}function Oae(t,e,n,r,s){if(rr&&(t.a=r),t.bs&&(t.b=s),t}function Q0n(t){if(_t(t,149))return C2n(u(t,149));if(_t(t,229))return Eln(u(t,229));if(_t(t,23))return M0n(u(t,23));throw nt(new Pn(m8t+Jp(new Cl(ut(ot(Qn,1),Me,1,5,[t])))))}function Z0n(t,e,n,r,s){var o,h,d;for(o=!0,h=0;h>>s|n[h+r+1]<>>s,++h}return o}function P4t(t,e,n,r){var s,o,h;if(e.k==(Gn(),ca)){for(o=new ar(lr(Uo(e).a.Kc(),new H));Vr(o);)if(s=u(Ir(o),17),h=s.c.i.k,h==ca&&t.c.a[s.c.i.c.p]==r&&t.c.a[e.c.p]==n)return!0}return!1}function J0n(t,e){var n,r,s,o;return e&=63,n=t.h&W0,e<22?(o=n>>>e,s=t.m>>e|n<<22-e,r=t.l>>e|t.m<<22-e):e<44?(o=0,s=n>>>e-22,r=t.m>>e-22|t.h<<44-e):(o=0,s=0,r=n>>>e-44),cu(r&vl,s&vl,o&W0)}function Nae(t,e,n,r){var s;this.b=r,this.e=t==(Zv(),IS),s=e[n],this.d=Zb(xl,[re,i0],[177,25],16,[s.length,s.length],2),this.a=Zb(Sr,[re,Jr],[48,25],15,[s.length,s.length],2),this.c=new v4t(e,n)}function tgn(t){var e,n,r;for(t.k=new Bwt((be(),ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn])).length,t.j.c.length),r=new S(t.j);r.a=n)return d7(t,e,r.p),!0;return!1}function Fae(t){var e;return t.Db&64?Pst(t):(e=new Fl(c8t),!t.a||Yr(Yr((e.a+=' "',e),t.a),'"'),Yr(_v(Yr(_v(Yr(_v(Yr(_v((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function Bae(t,e,n){var r,s,o,h,d;for(d=hu(t.e.Tg(),e),s=u(t.g,119),r=0,h=0;hn?H4t(t,n,"start index"):e<0||e>n?H4t(e,n,"end index"):vC("end index (%s) must not be less than start index (%s)",ut(ot(Qn,1),Me,1,5,[de(e),de(t)]))}function jae(t,e){var n,r,s,o;for(r=0,s=t.length;r0&&$ae(t,o,n));e.p=0}function Xe(t){var e;this.c=new cs,this.f=t.e,this.e=t.d,this.i=t.g,this.d=t.c,this.b=t.b,this.k=t.j,this.a=t.a,t.i?this.j=t.i:this.j=(e=u(Wf(ep),9),new oh(e,u(ff(e,e.length),9),0)),this.g=t.f}function agn(t){var e,n,r,s;for(e=$p(Yr(new Fl("Predicates."),"and"),40),n=!0,s=new h6(t);s.b0?d[h-1]:Nt(o0,Gg,10,0,0,1),s=d[h],k=h=0?t.Bh(s):K4t(t,r);else throw nt(new Pn(cb+r.ne()+WC));else throw nt(new Pn(wde+e+mde));else gh(t,n,r)}function F4t(t){var e,n;if(n=null,e=!1,_t(t,204)&&(e=!0,n=u(t,204).a),e||_t(t,258)&&(e=!0,n=""+u(t,258).a),e||_t(t,483)&&(e=!0,n=""+u(t,483).a),!e)throw nt(new net(w8t));return n}function Vae(t,e){var n,r;if(t.f){for(;e.Ob();)if(n=u(e.Pb(),72),r=n.ak(),_t(r,99)&&u(r,18).Bb&yc&&(!t.e||r.Gj()!=LE||r.aj()!=0)&&n.dd()!=null)return e.Ub(),!0;return!1}else return e.Ob()}function Gae(t,e){var n,r;if(t.f){for(;e.Sb();)if(n=u(e.Ub(),72),r=n.ak(),_t(r,99)&&u(r,18).Bb&yc&&(!t.e||r.Gj()!=LE||r.aj()!=0)&&n.dd()!=null)return e.Pb(),!0;return!1}else return e.Sb()}function B4t(t,e,n){var r,s,o,h,d,w;for(w=hu(t.e.Tg(),e),r=0,d=t.i,s=u(t.g,119),h=0;h1&&(e.c[e.c.length]=o))}function lgn(t){var e,n,r,s;for(n=new cs,Ka(n,t.o),r=new Ipt;n.b!=0;)e=u(n.b==0?null:(Zn(n.b!=0),fh(n,n.a.a)),508),s=The(t,e,!0),s&&ue(r.a,e);for(;r.a.c.length!=0;)e=u(vre(r),508),The(t,e,!1)}function Hg(){Hg=X,bSt=new _6(OC,0),Pa=new _6("BOOLEAN",1),xc=new _6("INT",2),kE=new _6("STRING",3),$o=new _6("DOUBLE",4),ms=new _6("ENUM",5),Rx=new _6("ENUMSET",6),G1=new _6("OBJECT",7)}function hC(t,e){var n,r,s,o,h;r=b.Math.min(t.c,e.c),o=b.Math.min(t.d,e.d),s=b.Math.max(t.c+t.b,e.c+e.b),h=b.Math.max(t.d+t.a,e.d+e.a),s=(s/2|0))for(this.e=r?r.c:null,this.d=s;n++0;)Nwt(this);this.b=e,this.a=null}function dgn(t,e){var n,r;e.a?F2n(t,e):(n=u(bnt(t.b,e.b),57),n&&n==t.a[e.b.f]&&n.a&&n.a!=e.b.a&&n.c.Fc(e.b),r=u(pnt(t.b,e.b),57),r&&t.a[r.f]==e.b&&r.a&&r.a!=e.b.a&&e.b.c.Fc(r),rnt(t.b,e.b))}function Wae(t,e){var n,r;if(n=u(xo(t.b,e),124),u(u(Pi(t.r,e),21),84).dc()){n.n.b=0,n.n.c=0;return}n.n.b=t.C.b,n.n.c=t.C.c,t.A.Hc((Nl(),W2))&&vue(t,e),r=Hhn(t,e),eat(t,e)==(u4(),xb)&&(r+=2*t.w),n.a.a=r}function Kae(t,e){var n,r;if(n=u(xo(t.b,e),124),u(u(Pi(t.r,e),21),84).dc()){n.n.d=0,n.n.a=0;return}n.n.d=t.C.d,n.n.a=t.C.a,t.A.Hc((Nl(),W2))&&wue(t,e),r=Vhn(t,e),eat(t,e)==(u4(),xb)&&(r+=2*t.w),n.a.b=r}function ggn(t,e){var n,r,s,o;for(o=new le,r=new S(e);r.an.a&&(r.Hc((cy(),qO))?s=(e.a-n.a)/2:r.Hc(HO)&&(s=e.a-n.a)),e.b>n.b&&(r.Hc((cy(),GO))?o=(e.b-n.b)/2:r.Hc(VO)&&(o=e.b-n.b)),_4t(t,s,o)}function noe(t,e,n,r,s,o,h,d,w,k,_,M,B){_t(t.Cb,88)&&hy(hl(u(t.Cb,88)),4),tu(t,n),t.f=h,e7(t,d),r7(t,w),t7(t,k),n7(t,_),jg(t,M),i7(t,B),Rg(t,!0),Pg(t,s),t.ok(o),g2(t,e),r!=null&&(t.i=null,ez(t,r))}function roe(t){var e,n;if(t.f){for(;t.n>0;){if(e=u(t.k.Xb(t.n-1),72),n=e.ak(),_t(n,99)&&u(n,18).Bb&yc&&(!t.e||n.Gj()!=LE||n.aj()!=0)&&e.dd()!=null)return!0;--t.n}return!1}else return t.n>0}function H4t(t,e,n){if(t<0)return vC(zhe,ut(ot(Qn,1),Me,1,5,[n,de(t)]));if(e<0)throw nt(new Pn(qhe+e));return vC("%s (%s) must not be greater than size (%s)",ut(ot(Qn,1),Me,1,5,[n,de(t),de(e)]))}function V4t(t,e,n,r,s,o){var h,d,w,k;if(h=r-n,h<7){fln(e,n,r,o);return}if(w=n+s,d=r+s,k=w+(d-w>>1),V4t(e,t,w,k,-s,o),V4t(e,t,k,d,-s,o),o.ue(t[k-1],t[k])<=0){for(;n=0?t.sh(o,n):y5t(t,s,n);else throw nt(new Pn(cb+s.ne()+WC));else throw nt(new Pn(wde+e+mde));else bh(t,r,s,n)}function ioe(t){var e,n,r,s;if(n=u(t,49).qh(),n)try{if(r=null,e=b7((Ip(),Xh),$ue(pln(n))),e&&(s=e.rh(),s&&(r=s.Wk(EKe(n.e)))),r&&r!=t)return ioe(r)}catch(o){if(o=rs(o),!_t(o,60))throw nt(o)}return t}function lu(t,e,n){var r,s,o,h;if(h=e==null?0:t.b.se(e),s=(r=t.a.get(h),r??new Array),s.length==0)t.a.set(h,s);else if(o=yre(t,e,s),o)return o.ed(n);return ls(s,s.length,new RR(e,n)),++t.c,a$(t.b),null}function soe(t,e){var n,r;return w$(t.a),Ud(t.a,(iz(),TG),TG),Ud(t.a,xE,xE),r=new Zs,Ei(r,xE,(_z(),Fht)),Gt(ze(e,(ay(),jht)))!==Gt((RD(),_G))&&Ei(r,xE,Nht),Ei(r,xE,Pht),sUt(t.a,r),n=Tq(t.a,e),n}function aoe(t){if(!t)return Hqt(),wge;var e=t.valueOf?t.valueOf():t;if(e!==t){var n=_ut[typeof e];return n?n(e):Fyt(typeof e)}else return t instanceof Array||t instanceof b.Array?new u6(t):new zk(t)}function ooe(t,e,n){var r,s,o;switch(o=t.o,r=u(xo(t.p,n),244),s=r.i,s.b=uI(r),s.a=cI(r),s.b=b.Math.max(s.b,o.a),s.b>o.a&&!e&&(s.b=o.a),s.c=-(s.b-o.a)/2,n.g){case 1:s.d=-s.a;break;case 3:s.d=o.b}gat(r),pat(r)}function coe(t,e,n){var r,s,o;switch(o=t.o,r=u(xo(t.p,n),244),s=r.i,s.b=uI(r),s.a=cI(r),s.a=b.Math.max(s.a,o.b),s.a>o.b&&!e&&(s.a=o.b),s.d=-(s.a-o.b)/2,n.g){case 4:s.c=-s.b;break;case 2:s.c=o.a}gat(r),pat(r)}function Lgn(t,e){var n,r,s,o,h;if(!e.dc()){if(s=u(e.Xb(0),128),e.gc()==1){Pce(t,s,s,1,0,e);return}for(n=1;n0)try{s=Gl(e,Oa,Ti)}catch(o){throw o=rs(o),_t(o,127)?(r=o,nt(new F$(r))):nt(o)}return n=(!t.a&&(t.a=new Htt(t)),t.a),s=0?u(At(n,s),56):null}function Ogn(t,e){if(t<0)return vC(zhe,ut(ot(Qn,1),Me,1,5,["index",de(t)]));if(e<0)throw nt(new Pn(qhe+e));return vC("%s (%s) must be less than size (%s)",ut(ot(Qn,1),Me,1,5,["index",de(t),de(e)]))}function Ngn(t){var e,n,r,s,o;if(t==null)return Mu;for(o=new l2(Xa,"[","]"),n=t,r=0,s=n.length;r0)for(h=t.c.d,d=t.d.d,s=ld(fa(new Re(d.a,d.b),h),1/(r+1)),o=new Re(h.a,h.b),n=new S(t.a);n.a=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ol(e);else throw nt(new Pn(cb+e.ne()+WC))}function Y4t(t){var e,n;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),n=Cs(b.Math.floor(b.Math.log(t)/.6931471805599453)),(!e||t!=b.Math.pow(2,n))&&++n,n):Nne(Au(t))}function Wgn(t){var e,n,r,s,o,h,d;for(o=new A0,n=new S(t);n.a2&&d.e.b+d.j.b<=2&&(s=d,r=h),o.a.zc(s,o),s.q=r);return o}function boe(t,e){var n,r,s;return r=new H0(t),Bo(r,e),ee(r,(ae(),VV),e),ee(r,(xe(),ws),(va(),Kc)),ee(r,Md,(Qd(),PG)),C0(r,(Gn(),Is)),n=new Nc,tc(n,r),Us(n,(be(),Bn)),s=new Nc,tc(s,r),Us(s,Hn),r}function voe(t){switch(t.g){case 0:return new ret((Zv(),OO));case 1:return new OB;case 2:return new ett;default:throw nt(new Pn("No implementation is available for the crossing minimizer "+(t.f!=null?t.f:""+t.g)))}}function woe(t,e){var n,r,s,o,h;for(t.c[e.p]=!0,ue(t.a,e),h=new S(e.j);h.a=o)h.$b();else for(s=h.Kc(),r=0;r0?Wpt():h<0&&koe(t,e,-h),!0):!1}function cI(t){var e,n,r,s,o,h,d;if(d=0,t.b==0){for(h=ise(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}else d=Qqt(cne(Jj(Wi(qnt(t.a),new fm),new T0)));return d>0?d+t.n.d+t.n.a:0}function uI(t){var e,n,r,s,o,h,d;if(d=0,t.b==0)d=Qqt(cne(Jj(Wi(qnt(t.a),new Mc),new bp)));else{for(h=sse(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}return d>0?d+t.n.b+t.n.c:0}function epn(t,e){var n,r,s,o;for(o=u(xo(t.b,e),124),n=o.a,s=u(u(Pi(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.c&&(n.a=b.Math.max(n.a,Nvt(r.c)));if(n.a>0)switch(e.g){case 2:o.n.c=t.s;break;case 4:o.n.b=t.s}}function npn(t,e){var n,r,s;return n=u(K(e,(n1(),Z7)),19).a-u(K(t,Z7),19).a,n==0?(r=fa(uc(u(K(t,(Up(),dO)),8)),u(K(t,lS),8)),s=fa(uc(u(K(e,dO),8)),u(K(e,lS),8)),js(r.a*r.b,s.a*s.b)):n}function rpn(t,e){var n,r,s;return n=u(K(e,(hw(),EG)),19).a-u(K(t,EG),19).a,n==0?(r=fa(uc(u(K(t,(mc(),FO)),8)),u(K(t,BS),8)),s=fa(uc(u(K(e,FO),8)),u(K(e,BS),8)),js(r.a*r.b,s.a*s.b)):n}function Eoe(t){var e,n;return n=new Ap,n.a+="e_",e=fcn(t),e!=null&&(n.a+=""+e),t.c&&t.d&&(Yr((n.a+=" ",n),Wz(t.c)),Yr(wc((n.a+="[",n),t.c.i),"]"),Yr((n.a+=Bot,n),Wz(t.d)),Yr(wc((n.a+="[",n),t.d.i),"]")),n.a}function Toe(t){switch(t.g){case 0:return new WL;case 1:return new JJ;case 2:return new ZJ;case 3:return new NB;default:throw nt(new Pn("No implementation is available for the layout phase "+(t.f!=null?t.f:""+t.g)))}}function Q4t(t,e,n,r,s){var o;switch(o=0,s.g){case 1:o=b.Math.max(0,e.b+t.b-(n.b+r));break;case 3:o=b.Math.max(0,-t.b-r);break;case 2:o=b.Math.max(0,-t.a-r);break;case 4:o=b.Math.max(0,e.a+t.a-(n.a+r))}return o}function ipn(t,e,n){var r,s,o,h,d;if(n)for(s=n.a.length,r=new Jb(s),d=(r.b-r.a)*r.c<0?(Op(),Mb):new Bp(r);d.Ob();)h=u(d.Pb(),19),o=T8(n,h.a),f8t in o.a||Wct in o.a?pwn(t,o,e):x5n(t,o,e),qXe(u(tr(t.b,s7(o)),79))}function Z4t(t){var e,n;switch(t.b){case-1:return!0;case 0:return n=t.t,n>1||n==-1?(t.b=-1,!0):(e=Oh(t),e&&(so(),e.Cj()==y0e)?(t.b=-1,!0):(t.b=1,!1));default:case 1:return!1}}function spn(t,e){var n,r,s,o,h;for(r=(!e.s&&(e.s=new he(Nu,e,21,17)),e.s),o=null,s=0,h=r.i;s=0&&r=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ll(e);throw nt(new Pn(cb+e.ne()+Rct))}function lpn(){gbt();var t;return s5e?u(b7((Ip(),Xh),jh),1939):(oi(I2,new qf),G3n(),t=u(_t(jc((Ip(),Xh),jh),547)?jc(Xh,jh):new lXt,547),s5e=!0,z5n(t),U5n(t),Ai((dbt(),YAt),t,new ZZ),Ao(Xh,jh,t),t)}function hpn(t,e){var n,r,s,o;t.j=-1,Sl(t.e)?(n=t.i,o=t.i!=0,uD(t,e),r=new F0(t.e,3,t.c,null,e,n,o),s=e.Qk(t.e,t.c,null),s=nae(t,e,s),s?(s.Ei(r),s.Fi()):Ci(t.e,r)):(uD(t,e),s=e.Qk(t.e,t.c,null),s&&s.Fi())}function rq(t,e){var n,r,s;if(s=0,r=e[0],r>=t.length)return-1;for(n=($r(r,t.length),t.charCodeAt(r));n>=48&&n<=57&&(s=s*10+(n-48),++r,!(r>=t.length));)n=($r(r,t.length),t.charCodeAt(r));return r>e[0]?e[0]=r:s=-1,s}function fpn(t){var e,n,r,s,o;return s=u(t.a,19).a,o=u(t.b,19).a,n=s,r=o,e=b.Math.max(b.Math.abs(s),b.Math.abs(o)),s<=0&&s==o?(n=0,r=o-1):s==-e&&o!=e?(n=o,r=s,o>=0&&++n):(n=-o,r=s),new ya(de(n),de(r))}function dpn(t,e,n,r){var s,o,h,d,w,k;for(s=0;s=0&&k>=0&&w=t.i)throw nt(new Co(Yct+e+L2+t.i));if(n>=t.i)throw nt(new Co(Xct+n+L2+t.i));return r=t.g[n],e!=n&&(e>16),e=r>>16&16,n=16-e,t=t>>e,r=t-256,e=r>>16&8,n+=e,t<<=e,r=t-yy,e=r>>16&4,n+=e,t<<=e,r=t-vd,e=r>>16&2,n+=e,t<<=e,r=t>>14,e=r&~(r>>1),n+2-e)}function ppn(t){R6();var e,n,r,s;for(nV=new le,Vut=new Ar,Hut=new le,e=(!t.a&&(t.a=new he(ds,t,10,11)),t.a),W4n(e),s=new nr(e);s.e!=s.i.gc();)r=u(dr(s),33),Go(nV,r,0)==-1&&(n=new le,ue(Hut,n),Fie(r,n));return Hut}function bpn(t,e,n){var r,s,o,h;t.a=n.b.d,_t(e,352)?(s=y4(u(e,79),!1,!1),o=sI(s),r=new La(t),_a(o,r),yI(o,s),e.We((di(),s5))!=null&&_a(u(e.We(s5),74),r)):(h=u(e,470),h.Hg(h.Dg()+t.a.a),h.Ig(h.Eg()+t.a.b))}function Coe(t,e){var n,r,s,o,h,d,w,k;for(k=Zt(ve(K(e,(xe(),CS)))),w=t[0].n.a+t[0].o.a+t[0].d.c+k,d=1;d=0?n:(d=A_(fa(new Re(h.c+h.b/2,h.d+h.a/2),new Re(o.c+o.b/2,o.d+o.a/2))),-(Kue(o,h)-1)*d)}function wpn(t,e,n){var r;ys(new kn(null,(!n.a&&(n.a=new he(us,n,6,6)),new Tn(n.a,16))),new lGt(t,e)),ys(new kn(null,(!n.n&&(n.n=new he(Yo,n,1,7)),new Tn(n.n,16))),new hGt(t,e)),r=u(ze(n,(di(),s5)),74),r&&ryt(r,t,e)}function lw(t,e,n){var r,s,o;if(o=T4((Gu(),Sa),t.Tg(),e),o)return so(),u(o,66).Oj()||(o=z6(Mo(Sa,o))),s=(r=t.Yg(o),u(r>=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).hl(e,n);throw nt(new Pn(cb+e.ne()+Rct))}function t5t(t,e,n,r){var s,o,h,d,w;if(s=t.d[e],s){if(o=s.g,w=s.i,r!=null){for(d=0;d=n&&(r=e,k=(w.c+w.a)/2,h=k-n,w.c<=k-n&&(s=new knt(w.c,h),$m(t,r++,s)),d=k+n,d<=w.a&&(o=new knt(d,w.a),Um(r,t.c.length),WT(t.c,r,o)))}function e5t(t){var e;if(!t.c&&t.g==null)t.d=t.si(t.f),Or(t,t.d),e=t.d;else{if(t.g==null)return!0;if(t.i==0)return!1;e=u(t.g[t.i-1],47)}return e==t.b&&null.km>=null.jm()?(aq(t),e5t(t)):e.Ob()}function kpn(t,e,n){var r,s,o,h,d;if(d=n,!d&&(d=Ivt(new Wk,0)),mr(d,Hfe,1),Kle(t.c,e),h=F3n(t.a,e),h.gc()==1)Mle(u(h.Xb(0),37),d);else for(o=1/h.gc(),s=h.Kc();s.Ob();)r=u(s.Pb(),37),Mle(r,zc(d,o));MKe(t.a,h,e),Fvn(e),or(d)}function Loe(t){if(this.a=t,t.c.i.k==(Gn(),Is))this.c=t.c,this.d=u(K(t.c.i,(ae(),gc)),61);else if(t.d.i.k==Is)this.c=t.d,this.d=u(K(t.d.i,(ae(),gc)),61);else throw nt(new Pn("Edge "+t+" is not an external edge."))}function Moe(t,e){var n,r,s;s=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,3,s,t.b)),e?e!=t&&(tu(t,e.zb),nit(t,e.d),n=(r=e.c,r??e.zb),iit(t,n==null||un(n,e.zb)?null:n)):(tu(t,null),nit(t,0),iit(t,null))}function Doe(t){var e,n;if(t.f){for(;t.n=h)throw nt(new jm(e,h));return s=n[e],h==1?r=null:(r=Nt(Cft,eut,415,h-1,0,1),Pc(n,0,r,0,e),o=h-e-1,o>0&&Pc(n,e+1,r,e,o)),a7(t,r),toe(t,e,s),s}function sx(){sx=X,Ux=u(At(Kt((nbt(),kc).qb),6),34),Gx=u(At(Kt(kc.qb),3),34),Ift=u(At(Kt(kc.qb),4),34),Oft=u(At(Kt(kc.qb),5),18),Qz(Ux),Qz(Gx),Qz(Ift),Qz(Oft),u5e=new Cl(ut(ot(Nu,1),F4,170,0,[Ux,Gx]))}function Poe(t,e){var n;this.d=new MT,this.b=e,this.e=new So(e.qf()),n=t.u.Hc((il(),tN)),t.u.Hc(tg)?t.D?this.a=n&&!e.If():this.a=!0:t.u.Hc(Eb)?n?this.a=!(e.zf().Kc().Ob()||e.Bf().Kc().Ob()):this.a=!1:this.a=!1}function Foe(t,e){var n,r,s,o;for(n=t.o.a,o=u(u(Pi(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),s.e.a=(r=s.b,r.Xe((di(),ml))?r.Hf()==(be(),Bn)?-r.rf().a-Zt(ve(r.We(ml))):n+Zt(ve(r.We(ml))):r.Hf()==(be(),Bn)?-r.rf().a:n)}function Boe(t,e){var n,r,s,o;n=u(K(t,(xe(),Xl)),103),o=u(ze(e,pE),61),s=u(K(t,ws),98),s!=(va(),U1)&&s!=kb?o==(be(),ac)&&(o=J5t(e,n),o==ac&&(o=Z6(n))):(r=Lle(e),r>0?o=Z6(n):o=HD(Z6(n))),Eo(e,pE,o)}function Cpn(t,e){var n,r,s,o,h;for(h=t.j,e.a!=e.b&&aa(h,new W5),s=h.c.length/2|0,r=0;r0&&vI(t,n,e),o):r.a!=null?(vI(t,e,n),-1):s.a!=null?(vI(t,n,e),1):0}function Roe(t,e){var n,r,s,o;t.ej()?(n=t.Vi(),o=t.fj(),++t.j,t.Hi(n,t.oi(n,e)),r=t.Zi(3,null,e,n,o),t.bj()?(s=t.cj(e,null),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(tXt(t,e),t.bj()&&(s=t.cj(e,null),s&&s.Fi()))}function iq(t,e){var n,r,s,o,h;for(h=hu(t.e.Tg(),e),s=new J5,n=u(t.g,119),o=t.i;--o>=0;)r=n[o],h.rl(r.ak())&&Or(s,r);!She(t,s)&&Sl(t.e)&&Uk(t,e.$j()?Hp(t,6,e,(pn(),uo),null,-1,!1):Hp(t,e.Kj()?2:1,e,null,null,-1,!1))}function g7(){g7=X;var t,e;for(Ex=Nt(R4,re,91,32,0,1),oS=Nt(R4,re,91,32,0,1),t=1,e=0;e<=18;e++)Ex[e]=KD(t),oS[e]=KD(M0(t,e)),t=Ia(t,5);for(;eh)||e.q&&(r=e.C,h=r.c.c.a-r.o.a/2,s=r.n.a-n,s>h)))}function Lpn(t,e){var n;mr(e,"Partition preprocessing",1),n=u($l(Wi(ec(Wi(new kn(null,new Tn(t.a,16)),new qY),new aF),new V5),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)]))),15),ys(n.Oc(),new oF),or(e)}function joe(t){vrt();var e,n,r,s,o,h,d;for(n=new i2,s=new S(t.e.b);s.a1?t.e*=Zt(t.a):t.f/=Zt(t.a),lun(t),phn(t),Qvn(t),ee(t.b,(iC(),eV),t.g)}function Hoe(t,e,n){var r,s,o,h,d,w;for(r=0,w=n,e||(r=n*(t.c.length-1),w*=-1),o=new S(t);o.a=0?(e||(e=new BT,r>0&&yo(e,t.substr(0,r))),e.a+="\\",v8(e,n&Ms)):e&&v8(e,n&Ms);return e?e.a:t}function Rpn(t){var e;if(!t.a)throw nt(new Ho("IDataType class expected for layout option "+t.f));if(e=Uin(t.a),e==null)throw nt(new Ho("Couldn't create new instance of property '"+t.f+"'. "+z1e+(L0(uN),uN.k)+r8t));return u(e,414)}function Ust(t){var e,n,r,s,o;return o=t.eh(),o&&o.kh()&&(s=Xp(t,o),s!=o)?(n=t.Vg(),r=(e=t.Vg(),e>=0?t.Qg(null):t.eh().ih(t,-1-e,null,null)),t.Rg(u(s,49),n),r&&r.Fi(),t.Lg()&&t.Mg()&&n>-1&&Ci(t,new oa(t,9,n,o,s)),s):o}function Koe(t){var e,n,r,s,o,h,d,w;for(h=0,o=t.f.e,r=0;r>5,s>=t.d)return t.e<0;if(n=t.a[s],e=1<<(e&31),t.e<0){if(r=dne(t),s>16)),15).Xc(o),d0&&(!(Pp(t.a.c)&&e.n.d)&&!(a8(t.a.c)&&e.n.b)&&(e.g.d+=b.Math.max(0,r/2-.5)),!(Pp(t.a.c)&&e.n.a)&&!(a8(t.a.c)&&e.n.c)&&(e.g.a-=r-1))}function Qoe(t){var e,n,r,s,o;if(s=new le,o=Vue(t,s),e=u(K(t,(ae(),sl)),10),e)for(r=new S(e.j);r.a>e,o=t.m>>e|n<<22-e,s=t.l>>e|t.m<<22-e):e<44?(h=r?W0:0,o=n>>e-22,s=t.m>>e-22|n<<44-e):(h=r?W0:0,o=r?vl:0,s=n>>e-44),cu(s&vl,o&vl,h&W0)}function Wst(t){var e,n,r,s,o,h;for(this.c=new le,this.d=t,r=bs,s=bs,e=Ns,n=Ns,h=si(t,0);h.b!=h.d.c;)o=u(ii(h),8),r=b.Math.min(r,o.a),s=b.Math.min(s,o.b),e=b.Math.max(e,o.a),n=b.Math.max(n,o.b);this.a=new ch(r,s,e-r,n-s)}function tce(t,e){var n,r,s,o,h,d;for(o=new S(t.b);o.a0&&_t(e,42)&&(t.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Ji(w),h=W2t(t.a,o),n=t.a.d[h],n)){for(r=u(n.g,367),_=n.i,d=0;d<_;++d)if(s=r[d],s.Sh()==o&&s.Fb(k))return ece(t,k),!0}return!1}function Gpn(t){var e,n,r,s;for(s=u(Pi(t.a,(p4(),MV)),15).Kc();s.Ob();)r=u(s.Pb(),101),n=(e=N6(r.k),e.Hc((be(),On))?e.Hc(Hn)?e.Hc(yr)?e.Hc(Bn)?null:e2e:r2e:n2e:t2e),b8(t,r,n[0],(Jv(),Sw),0),b8(t,r,n[1],db,1),b8(t,r,n[2],Aw,1)}function Upn(t,e){var n,r;n=ywn(e),wvn(t,e,n),aae(t.a,u(K($a(e.b),(ae(),Ix)),230)),Gwn(t),mdn(t,e),r=Nt(Sr,Jr,25,e.b.j.c.length,15,1),Lat(t,e,(be(),On),r,n),Lat(t,e,Hn,r,n),Lat(t,e,yr,r,n),Lat(t,e,Bn,r,n),t.a=null,t.c=null,t.b=null}function l5t(){l5t=X,OCt=(Tz(),qht),qye=new vn(Vkt,OCt),$ye=new vn(Gkt,(Fn(),!0)),de(-1),Bye=new vn(Ukt,de(-1)),de(-1),Rye=new vn(Wkt,de(-1)),zye=new vn(Kkt,!1),Hye=new vn(Ykt,!0),jye=new vn(Sct,!1),Vye=new vn(Xkt,-1)}function h5t(t,e,n){switch(e){case 7:!t.e&&(t.e=new En(ra,t,7,4)),Tr(t.e),!t.e&&(t.e=new En(ra,t,7,4)),gs(t.e,u(n,14));return;case 8:!t.d&&(t.d=new En(ra,t,8,5)),Tr(t.d),!t.d&&(t.d=new En(ra,t,8,5)),gs(t.d,u(n,14));return}c4t(t,e,n)}function f5t(t,e){var n,r,s,o,h;if(Gt(e)===Gt(t))return!0;if(!_t(e,15)||(h=u(e,15),t.gc()!=h.gc()))return!1;for(o=h.Kc(),r=t.Kc();r.Ob();)if(n=r.Pb(),s=o.Pb(),!(Gt(n)===Gt(s)||n!=null&&Si(n,s)))return!1;return!0}function Wpn(t,e){var n,r,s,o;for(o=u($l(ec(ec(new kn(null,new Tn(e.b,16)),new kL),new JP),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)]))),15),o.Jc(new EL),n=0,s=o.Kc();s.Ob();)r=u(s.Pb(),11),r.p==-1&&g5t(t,r,n++)}function nce(t){switch(t.g){case 0:return new pT;case 1:return new XJ;case 2:return new YJ;case 3:return new CGt;case 4:return new dYt;default:throw nt(new Pn("No implementation is available for the node placer "+(t.f!=null?t.f:""+t.g)))}}function rce(t){switch(t.g){case 0:return new Gvt;case 1:return new QJ;case 2:return new HJ;case 3:return new VJ;case 4:return new AGt;default:throw nt(new Pn("No implementation is available for the cycle breaker "+(t.f!=null?t.f:""+t.g)))}}function d5t(){d5t=X,Eye=new vn(Rkt,de(0)),Tye=new vn(jkt,0),pCt=(RD(),_G),xye=new vn(Tct,pCt),de(0),yye=new vn(_ct,de(1)),vCt=(cz(),zht),_ye=new vn($kt,vCt),wCt=(N$(),Bht),Cye=new vn(zkt,wCt),bCt=(Vz(),$ht),kye=new vn(qkt,bCt)}function Kpn(t,e,n){var r;r=null,e&&(r=e.d),lC(t,new i8(e.n.a-r.b+n.a,e.n.b-r.d+n.b)),lC(t,new i8(e.n.a-r.b+n.a,e.n.b+e.o.b+r.a+n.b)),lC(t,new i8(e.n.a+e.o.a+r.c+n.a,e.n.b-r.d+n.b)),lC(t,new i8(e.n.a+e.o.a+r.c+n.a,e.n.b+e.o.b+r.a+n.b))}function g5t(t,e,n){var r,s,o;for(e.p=n,o=jp(I1(ut(ot($1,1),Me,20,0,[new sa(e),new Cr(e)])));Vr(o);)r=u(Ir(o),11),r.p==-1&&g5t(t,r,n);if(e.i.k==(Gn(),ca))for(s=new S(e.i.j);s.a=2)for(n=s.Kc(),e=ve(n.Pb());n.Ob();)o=e,e=ve(n.Pb()),r=b.Math.min(r,(In(e),e-(In(o),o)));return r}function Ypn(t,e){var n,r,s,o,h;r=new cs,ks(r,e,r.c.b,r.c);do for(n=(Zn(r.b!=0),u(fh(r,r.a.a),86)),t.b[n.g]=1,o=si(n.d,0);o.b!=o.d.c;)s=u(ii(o),188),h=s.c,t.b[h.g]==1?ai(t.a,s):t.b[h.g]==2?t.b[h.g]=1:ks(r,h,r.c.b,r.c);while(r.b!=0)}function Xpn(t,e){var n,r,s;if(Gt(e)===Gt(Dr(t)))return!0;if(!_t(e,15)||(r=u(e,15),s=t.gc(),s!=r.gc()))return!1;if(_t(r,54)){for(n=0;n0&&(s=n),h=new S(t.f.e);h.a0?(e-=1,n-=1):r>=0&&s<0?(e+=1,n+=1):r>0&&s>=0?(e-=1,n+=1):(e+=1,n-=1),new ya(de(e),de(n))}function gbn(t,e){return t.ce.c?1:t.be.b?1:t.a!=e.a?Ji(t.a)-Ji(e.a):t.d==(B_(),NS)&&e.d==OS?-1:t.d==OS&&e.d==NS?1:0}function oce(t,e){var n,r,s,o,h;return o=e.a,o.c.i==e.b?h=o.d:h=o.c,o.c.i==e.b?r=o.c:r=o.d,s=qln(t.a,h,r),s>0&&s0):s<0&&-s0):!1}function pbn(t,e,n,r){var s,o,h,d,w,k,_,M;for(s=(e-t.d)/t.c.c.length,o=0,t.a+=n,t.d=e,M=new S(t.c);M.a>24;return h}function vbn(t){if(t.pe()){var e=t.c;e.qe()?t.o="["+e.n:e.pe()?t.o="["+e.ne():t.o="[L"+e.ne()+";",t.b=e.me()+"[]",t.k=e.oe()+"[]";return}var n=t.j,r=t.d;r=r.split("/"),t.o=Qit(".",[n,Qit("$",r)]),t.b=Qit(".",[n,Qit(".",r)]),t.k=r[r.length-1]}function wbn(t,e){var n,r,s,o,h;for(h=null,o=new S(t.e.a);o.a=0;e-=2)for(n=0;n<=e;n+=2)(t.b[n]>t.b[n+2]||t.b[n]===t.b[n+2]&&t.b[n+1]>t.b[n+3])&&(r=t.b[n+2],t.b[n+2]=t.b[n],t.b[n]=r,r=t.b[n+3],t.b[n+3]=t.b[n+1],t.b[n+1]=r);t.c=!0}}function cce(t,e){var n,r,s,o,h,d,w,k;for(h=e==1?Jut:Zut,o=h.a.ec().Kc();o.Ob();)for(s=u(o.Pb(),103),w=u(Pi(t.f.c,s),21).Kc();w.Ob();)switch(d=u(w.Pb(),46),r=u(d.b,81),k=u(d.a,189),n=k.c,s.g){case 2:case 1:r.g.d+=n;break;case 4:case 3:r.g.c+=n}}function xbn(t,e){var n,r,s,o,h,d,w,k,_;for(k=-1,_=0,h=t,d=0,w=h.length;d0&&++_;++k}return _}function mf(t){var e,n;return n=new Fl(Mp(t.gm)),n.a+="@",Yr(n,(e=Ji(t)>>>0,e.toString(16))),t.kh()?(n.a+=" (eProxyURI: ",wc(n,t.qh()),t.$g()&&(n.a+=" eClass: ",wc(n,t.$g())),n.a+=")"):t.$g()&&(n.a+=" (eClass: ",wc(n,t.$g()),n.a+=")"),n.a}function pC(t){var e,n,r,s;if(t.e)throw nt(new Ho((L0(Iut),wot+Iut.k+mot)));for(t.d==(fo(),c0)&&Cq(t,Hh),n=new S(t.a.a);n.a>24}return n}function Tbn(t,e,n){var r,s,o;if(s=u(xo(t.i,e),306),!s)if(s=new uee(t.d,e,n),O6(t.i,e,s),T3t(e))$Xe(t.a,e.c,e.b,s);else switch(o=hgn(e),r=u(xo(t.p,o),244),o.g){case 1:case 3:s.j=!0,eet(r,e.b,s);break;case 4:case 2:s.k=!0,eet(r,e.c,s)}return s}function _bn(t,e,n,r){var s,o,h,d,w,k;if(d=new J5,w=hu(t.e.Tg(),e),s=u(t.g,119),so(),u(e,66).Oj())for(h=0;h=0)return s;for(o=1,d=new S(e.j);d.a0&&e.ue((Sn(s-1,t.c.length),u(t.c[s-1],10)),o)>0;)lh(t,s,(Sn(s-1,t.c.length),u(t.c[s-1],10))),--s;Sn(s,t.c.length),t.c[s]=o}n.a=new Ar,n.b=new Ar}function Cbn(t,e,n){var r,s,o,h,d,w,k,_;for(_=(r=u(e.e&&e.e(),9),new oh(r,u(ff(r,r.length),9),0)),w=py(n,"[\\[\\]\\s,]+"),o=w,h=0,d=o.length;h0&&(!(Pp(t.a.c)&&e.n.d)&&!(a8(t.a.c)&&e.n.b)&&(e.g.d-=b.Math.max(0,r/2-.5)),!(Pp(t.a.c)&&e.n.a)&&!(a8(t.a.c)&&e.n.c)&&(e.g.a+=b.Math.max(0,r-1)))}function dce(t,e,n){var r,s;if((t.c-t.b&t.a.length-1)==2)e==(be(),On)||e==Hn?(G$(u(K_(t),15),(Vl(),u0)),G$(u(K_(t),15),yb)):(G$(u(K_(t),15),(Vl(),yb)),G$(u(K_(t),15),u0));else for(s=new M_(t);s.a!=s.b;)r=u(mz(s),15),G$(r,n)}function Abn(t,e){var n,r,s,o,h,d,w;for(s=h8(new gpt(t)),d=new xa(s,s.c.length),o=h8(new gpt(e)),w=new xa(o,o.c.length),h=null;d.b>0&&w.b>0&&(n=(Zn(d.b>0),u(d.a.Xb(d.c=--d.b),33)),r=(Zn(w.b>0),u(w.a.Xb(w.c=--w.b),33)),n==r);)h=n;return h}function pl(t,e){var n,r,s,o,h,d;return o=t.a*got+t.b*1502,d=t.b*got+11,n=b.Math.floor(d*PI),o+=n,d-=n*P6t,o%=P6t,t.a=o,t.b=d,e<=24?b.Math.floor(t.a*x7t[e]):(s=t.a*(1<=2147483648&&(r-=lot),r)}function gce(t,e,n){var r,s,o,h;RQt(t,e)>RQt(t,n)?(r=rc(n,(be(),Hn)),t.d=r.dc()?0:Snt(u(r.Xb(0),11)),h=rc(e,Bn),t.b=h.dc()?0:Snt(u(h.Xb(0),11))):(s=rc(n,(be(),Bn)),t.d=s.dc()?0:Snt(u(s.Xb(0),11)),o=rc(e,Hn),t.b=o.dc()?0:Snt(u(o.Xb(0),11)))}function pce(t){var e,n,r,s,o,h,d;if(t&&(e=t.Hh(jh),e&&(h=jr(Jf((!e.b&&(e.b=new Al((ln(),Ja),pc,e)),e.b),"conversionDelegates")),h!=null))){for(d=new le,r=py(h,"\\w+"),s=0,o=r.length;st.c));h++)s.a>=t.s&&(o<0&&(o=h),d=h);return w=(t.s+t.c)/2,o>=0&&(r=hwn(t,e,o,d),w=yYe((Sn(r,e.c.length),u(e.c[r],329))),xpn(e,r,n)),w}function Xst(){Xst=X,Gye=new ao((di(),jx),1.3),PCt=PSt,qCt=new Mv(15),Zye=new ao(V2,qCt),t3e=new ao(G2,15),Uye=BG,Yye=H2,Xye=o5,Qye=mb,Kye=a5,jCt=YO,Jye=Ky,zCt=(l5t(),qye),RCt=$ye,$Ct=zye,HCt=Hye,FCt=jye,BCt=RG,Wye=BSt,RO=Rye,NCt=Bye,VCt=Vye}function Nr(t,e,n){var r,s,o,h,d,w,k;for(h=(o=new JF,o),Qmt(h,(In(e),e)),k=(!h.b&&(h.b=new Al((ln(),Ja),pc,h)),h.b),w=1;w0&&i3n(this,s)}function v5t(t,e,n,r,s,o){var h,d,w;if(!s[e.b]){for(s[e.b]=!0,h=r,!h&&(h=new C$),ue(h.e,e),w=o[e.b].Kc();w.Ob();)d=u(w.Pb(),282),!(d.d==n||d.c==n)&&(d.c!=e&&v5t(t,d.c,e,h,s,o),d.d!=e&&v5t(t,d.d,e,h,s,o),ue(h.c,d),Rs(h.d,d.b));return h}return null}function Dbn(t){var e,n,r,s,o,h,d;for(e=0,s=new S(t.e);s.a=2}function Ibn(t,e){var n,r,s,o;for(mr(e,"Self-Loop pre-processing",1),r=new S(t.a);r.a1||(e=Ki(Cf,ut(ot(vo,1),oe,93,0,[J0,Sf])),AD(h$(e,t))>1)||(r=Ki(Lf,ut(ot(vo,1),oe,93,0,[l0,Gh])),AD(h$(r,t))>1))}function Pbn(t,e){var n,r,s;return n=e.Hh(t.a),n&&(s=jr(Jf((!n.b&&(n.b=new Al((ln(),Ja),pc,n)),n.b),"affiliation")),s!=null)?(r=dj(s,Lu(35)),r==-1?Bit(t,k_(t,zl(e.Hj())),s):r==0?Bit(t,null,s.substr(1)):Bit(t,s.substr(0,r),s.substr(r+1))):null}function Fbn(t){var e,n,r;try{return t==null?Mu:Wo(t)}catch(s){if(s=rs(s),_t(s,102))return e=s,r=Mp(dl(t))+"@"+(n=(qd(),M3t(t)>>>0),n.toString(16)),Thn(Ecn(),(r8(),"Exception during lenientFormat for "+r),e),"<"+r+" threw "+Mp(e.gm)+">";throw nt(s)}}function wce(t){switch(t.g){case 0:return new UJ;case 1:return new DB;case 2:return new yVt;case 3:return new IL;case 4:return new zWt;case 5:return new WJ;default:throw nt(new Pn("No implementation is available for the layerer "+(t.f!=null?t.f:""+t.g)))}}function w5t(t,e,n){var r,s,o;for(o=new S(t.t);o.a0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ai(e,r.b));for(s=new S(t.i);s.a0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ai(n,r.a))}function aq(t){var e,n,r,s,o;if(t.g==null&&(t.d=t.si(t.f),Or(t,t.d),t.c))return o=t.f,o;if(e=u(t.g[t.i-1],47),s=e.Pb(),t.e=e,n=t.si(s),n.Ob())t.d=n,Or(t,n);else for(t.d=null;!e.Ob()&&(ls(t.g,--t.i,null),t.i!=0);)r=u(t.g[t.i-1],47),e=r;return s}function Bbn(t,e){var n,r,s,o,h,d;if(r=e,s=r.ak(),G0(t.e,s)){if(s.hi()&&k$(t,s,r.dd()))return!1}else for(d=hu(t.e.Tg(),s),n=u(t.g,119),o=0;o1||n>1)return 2;return e+n==1?2:0}function yce(t,e,n){var r,s,o,h,d;for(mr(n,"ELK Force",1),Be(Fe(ze(e,(n1(),lEt))))||u$((r=new rr((Dm(),new Sm(e))),r)),d=Xne(e),c1n(d),zcn(t,u(K(d,uEt),424)),h=ule(t.a,d),o=h.Kc();o.Ob();)s=u(o.Pb(),231),Ewn(t.b,s,zc(n,1/h.gc()));d=khe(h),mhe(d),or(n)}function Vbn(t,e){var n,r,s,o,h;if(mr(e,"Breaking Point Processor",1),l4n(t),Be(Fe(K(t,(xe(),v_t))))){for(s=new S(t.b);s.a=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).ml(e,n)}else throw nt(new Pn(cb+e.ne()+WC))}function Kbn(t,e){var n,r,s,o,h;for(n=new le,s=ec(new kn(null,new Tn(t,16)),new HQ),o=ec(new kn(null,new Tn(t,16)),new VQ),h=xan(Fsn(Jj(S2n(ut(ot(r6n,1),Me,833,0,[s,o])),new GQ))),r=1;r=2*e&&ue(n,new knt(h[r-1]+e,h[r]-e));return n}function Ybn(t,e,n){mr(n,"Eades radial",1),n.n&&e&&gf(n,pf(e),(Ol(),th)),t.d=u(ze(e,(b_(),$S)),33),t.c=Zt(ve(ze(e,(ay(),SG)))),t.e=ast(u(ze(e,BO),293)),t.a=Aln(u(ze(e,xCt),426)),t.b=X1n(u(ze(e,yCt),340)),M1n(t),n.n&&e&&gf(n,pf(e),(Ol(),th))}function Xbn(t,e,n){var r,s,o,h,d,w,k,_;if(n)for(o=n.a.length,r=new Jb(o),d=(r.b-r.a)*r.c<0?(Op(),Mb):new Bp(r);d.Ob();)h=u(d.Pb(),19),s=T8(n,h.a),s&&(w=Kin(t,(k=(Tv(),_=new Ppt,_),e&&x5t(k,e),k),s),q_(w,O0(s,Cd)),Jz(s,w),G4t(s,w),yit(t,s,w))}function cq(t){var e,n,r,s,o,h;if(!t.j){if(h=new Q9,e=aA,o=e.a.zc(t,e),o==null){for(r=new nr(Po(t));r.e!=r.i.gc();)n=u(dr(r),26),s=cq(n),gs(h,s),Or(h,n);e.a.Bc(t)!=null}ey(h),t.j=new H3((u(At(Kt((zp(),An).o),11),18),h.i),h.g),hl(t).b&=-33}return t.j}function Qbn(t){var e,n,r,s;if(t==null)return null;if(r=Hc(t,!0),s=nO.length,un(r.substr(r.length-s,s),nO)){if(n=r.length,n==4){if(e=($r(0,r.length),r.charCodeAt(0)),e==43)return pLt;if(e==45)return C5e}else if(n==3)return pLt}return new Tpt(r)}function Zbn(t){var e,n,r;return n=t.l,n&n-1||(r=t.m,r&r-1)||(e=t.h,e&e-1)||e==0&&r==0&&n==0?-1:e==0&&r==0&&n!=0?Vmt(n):e==0&&r!=0&&n==0?Vmt(r)+22:e!=0&&r==0&&n==0?Vmt(e)+44:-1}function Jbn(t,e){var n,r,s,o,h;for(mr(e,"Edge joining",1),n=Be(Fe(K(t,(xe(),iht)))),s=new S(t.b);s.a1)for(s=new S(t.a);s.a0),o.a.Xb(o.c=--o.b),Rm(o,s),Zn(o.b3&&Xd(t,0,e-3))}function r2n(t){var e,n,r,s;return Gt(K(t,(xe(),jy)))===Gt(($0(),np))?!t.e&&Gt(K(t,CO))!==Gt((G8(),mO)):(r=u(K(t,Ult),292),s=Be(Fe(K(t,Wlt)))||Gt(K(t,ES))===Gt((K6(),wO)),e=u(K(t,NTt),19).a,n=t.a.c.length,!s&&r!=(G8(),mO)&&(e==0||e>n))}function i2n(t){var e,n;for(n=0;n0);n++);if(n>0&&n0);e++);return e>0&&n>16!=6&&e){if(c7(t,e))throw nt(new Pn(KC+$oe(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?W3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=tx(e,t,6,r)),r=G2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,6,e,e))}function x5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=9&&e){if(c7(t,e))throw nt(new Pn(KC+kue(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Y3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=tx(e,t,9,r)),r=U2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,9,e,e))}function Zst(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(c7(t,e))throw nt(new Pn(KC+xle(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Q3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=tx(e,t,12,r)),r=V2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,3,e,e))}function v7(t){var e,n,r,s,o;if(r=Oh(t),o=t.j,o==null&&r)return t.$j()?null:r.zj();if(_t(r,148)){if(n=r.Aj(),n&&(s=n.Nh(),s!=t.i)){if(e=u(r,148),e.Ej())try{t.g=s.Kh(e,o)}catch(h){if(h=rs(h),_t(h,78))t.g=null;else throw nt(h)}t.i=s}return t.g}return null}function Ece(t){var e;return e=new le,ue(e,new E6(new Re(t.c,t.d),new Re(t.c+t.b,t.d))),ue(e,new E6(new Re(t.c,t.d),new Re(t.c,t.d+t.a))),ue(e,new E6(new Re(t.c+t.b,t.d+t.a),new Re(t.c+t.b,t.d))),ue(e,new E6(new Re(t.c+t.b,t.d+t.a),new Re(t.c,t.d+t.a))),e}function Tce(t,e,n,r){var s,o,h;if(h=s4t(e,n),r.c[r.c.length]=e,t.j[h.p]==-1||t.j[h.p]==2||t.a[e.p])return r;for(t.j[h.p]=-1,o=new ar(lr(z0(h).a.Kc(),new H));Vr(o);)if(s=u(Ir(o),17),!(!(!Wa(s)&&!(!Wa(s)&&s.c.i.c==s.d.i.c))||s==e))return Tce(t,s,h,r);return r}function s2n(t,e,n){var r,s,o;for(o=e.a.ec().Kc();o.Ob();)s=u(o.Pb(),79),r=u(tr(t.b,s),266),!r&&(hs(Zd(s))==hs(Zp(s))?yvn(t,s,n):Zd(s)==hs(Zp(s))?tr(t.c,s)==null&&tr(t.b,Zp(s))!=null&&rhe(t,s,n,!1):tr(t.d,s)==null&&tr(t.b,Zd(s))!=null&&rhe(t,s,n,!0))}function a2n(t,e){var n,r,s,o,h,d,w;for(s=t.Kc();s.Ob();)for(r=u(s.Pb(),10),d=new Nc,tc(d,r),Us(d,(be(),Hn)),ee(d,(ae(),GV),(Fn(),!0)),h=e.Kc();h.Ob();)o=u(h.Pb(),10),w=new Nc,tc(w,o),Us(w,Bn),ee(w,GV,!0),n=new zv,ee(n,GV,!0),Ba(n,d),pa(n,w)}function o2n(t,e,n,r){var s,o,h,d;s=mie(t,e,n),o=mie(t,n,e),h=u(tr(t.c,e),112),d=u(tr(t.c,n),112),sr.b.g&&(o.c[o.c.length]=r);return o}function w7(){w7=X,r5=new CM("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),Bx=new CM("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),qS=new CM("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),zS=new CM("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),HS=new CM("WHOLE_DRAWING",4)}function c2n(t,e){if(_t(e,239))return Run(t,u(e,33));if(_t(e,186))return Qun(t,u(e,118));if(_t(e,354))return lnn(t,u(e,137));if(_t(e,352))return Nmn(t,u(e,79));if(e)return null;throw nt(new Pn(m8t+Jp(new Cl(ut(ot(Qn,1),Me,1,5,[e])))))}function u2n(t){var e,n,r,s,o,h,d;for(o=new cs,s=new S(t.d.a);s.a1)for(e=Iv((n=new Kb,++t.b,n),t.d),d=si(o,0);d.b!=d.d.c;)h=u(ii(d),121),yf(lf(uf(hf(cf(new Sh,1),0),e),h))}function k5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=11&&e){if(c7(t,e))throw nt(new Pn(KC+$5t(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Z3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=tx(e,t,10,r)),r=tvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,11,e,e))}function l2n(t){var e,n,r,s;for(r=new d2(new kg(t.b).a);r.b;)n=Yv(r),s=u(n.cd(),11),e=u(n.dd(),10),ee(e,(ae(),Ii),s),ee(s,sl,e),ee(s,kO,(Fn(),!0)),Us(s,u(K(e,gc),61)),K(e,gc),ee(s.i,(xe(),ws),(va(),SE)),u(K($a(s.i),Wc),21).Fc((go(),lE))}function h2n(t,e,n){var r,s,o,h,d,w;if(o=0,h=0,t.c)for(w=new S(t.d.i.j);w.ao.a?-1:s.aw){for(_=t.d,t.d=Nt($At,A8t,63,2*w+4,0,1),o=0;o=9223372036854776e3?(I8(),Y8t):(s=!1,t<0&&(s=!0,t=-t),r=0,t>=E2&&(r=Cs(t/E2),t-=r*E2),n=0,t>=hx&&(n=Cs(t/hx),t-=n*hx),e=Cs(t),o=cu(e,n,r),s&&mit(o),o)}function x2n(t,e){var n,r,s,o;for(n=!e||!t.u.Hc((il(),tg)),o=0,s=new S(t.e.Cf());s.a=-e&&r==e?new ya(de(n-1),de(r)):new ya(de(n),de(r-1))}function Lce(){return co(),ut(ot(h6n,1),oe,77,0,[HEt,$Et,hS,slt,c9t,gV,TV,eE,a9t,QEt,i9t,tE,o9t,KEt,u9t,NEt,wV,alt,fV,xV,h9t,yV,PEt,s9t,f9t,kV,l9t,dV,GEt,n9t,e9t,_V,REt,hV,bV,BEt,J7,JEt,YEt,r9t,fS,zEt,jEt,t9t,XEt,vV,EV,FEt,mV,ZEt,pV,UEt,VEt,bO,lV,WEt,qEt])}function _2n(t,e,n){t.d=0,t.b=0,e.k==(Gn(),Uc)&&n.k==Uc&&u(K(e,(ae(),Ii)),10)==u(K(n,Ii),10)&&(Urt(e).j==(be(),On)?gce(t,e,n):gce(t,n,e)),e.k==Uc&&n.k==ca?Urt(e).j==(be(),On)?t.d=1:t.b=1:n.k==Uc&&e.k==ca&&(Urt(n).j==(be(),On)?t.b=1:t.d=1),ffn(t,e,n)}function C2n(t){var e,n,r,s,o,h,d,w,k,_,M;return M=x4t(t),e=t.a,w=e!=null,w&&d8(M,"category",t.a),s=fM(new Tm(t.d)),h=!s,h&&(k=new yg,Qf(M,"knownOptions",k),n=new vzt(k),_a(new Tm(t.d),n)),o=fM(t.g),d=!o,d&&(_=new yg,Qf(M,"supportedFeatures",_),r=new wzt(_),_a(t.g,r)),M}function S2n(t){var e,n,r,s,o,h,d,w,k;for(r=!1,e=336,n=0,o=new DWt(t.length),d=t,w=0,k=d.length;w>16!=7&&e){if(c7(t,e))throw nt(new Pn(KC+Fae(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?K3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,1,sN,r)),r=Uvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,7,e,e))}function Mce(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(c7(t,e))throw nt(new Pn(KC+Gre(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?X3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,0,oN,r)),r=Wvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,3,e,e))}function tat(t,e){g7();var n,r,s,o,h,d,w,k,_;return e.d>t.d&&(d=t,t=e,e=d),e.d<63?vvn(t,e):(h=(t.d&-2)<<4,k=amt(t,h),_=amt(e,h),r=bat(t,H6(k,h)),s=bat(e,H6(_,h)),w=tat(k,_),n=tat(r,s),o=tat(bat(k,r),bat(s,_)),o=Tat(Tat(o,w),n),o=H6(o,h),w=H6(w,h<<1),Tat(Tat(w,o),n))}function L2n(t,e,n){var r,s,o,h,d;for(h=Q_(t,n),d=Nt(o0,Gg,10,e.length,0,1),r=0,o=h.Kc();o.Ob();)s=u(o.Pb(),11),Be(Fe(K(s,(ae(),kO))))&&(d[r++]=u(K(s,sl),10));if(r=0;o+=n?1:-1)h=h|e.c.Sf(w,o,n,r&&!Be(Fe(K(e.j,(ae(),Mw))))&&!Be(Fe(K(e.j,(ae(),Y4))))),h=h|e.q._f(w,o,n),h=h|pue(t,w[o],n,r);return Vs(t.c,e),h}function lq(t,e,n){var r,s,o,h,d,w,k,_,M,B;for(_=gZt(t.j),M=0,B=_.length;M1&&(t.a=!0),Gtn(u(n.b,65),Fi(uc(u(e.b,65).c),ld(fa(uc(u(n.b,65).a),u(e.b,65).a),s))),AQt(t,e),Dce(t,n)}function Ice(t){var e,n,r,s,o,h,d;for(o=new S(t.a.a);o.a0&&o>0?h.p=e++:r>0?h.p=n++:o>0?h.p=s++:h.p=n++}pn(),aa(t.j,new CL)}function N2n(t){var e,n;n=null,e=u(Pe(t.g,0),17);do{if(n=e.d.i,ea(n,(ae(),qh)))return u(K(n,qh),11).i;if(n.k!=(Gn(),qs)&&Vr(new ar(lr($s(n).a.Kc(),new H))))e=u(Ir(new ar(lr($s(n).a.Kc(),new H))),17);else if(n.k!=qs)return null}while(n&&n.k!=(Gn(),qs));return n}function P2n(t,e){var n,r,s,o,h,d,w,k,_;for(d=e.j,h=e.g,w=u(Pe(d,d.c.length-1),113),_=(Sn(0,d.c.length),u(d.c[0],113)),k=mst(t,h,w,_),o=1;ok&&(w=n,_=s,k=r);e.a=_,e.c=w}function F2n(t,e){var n,r;if(r=YM(t.b,e.b),!r)throw nt(new Ho("Invalid hitboxes for scanline constraint calculation."));(jne(e.b,u(FQe(t.b,e.b),57))||jne(e.b,u(PQe(t.b,e.b),57)))&&(qd(),e.b+""),t.a[e.b.f]=u(bnt(t.b,e.b),57),n=u(pnt(t.b,e.b),57),n&&(t.a[n.f]=e.b)}function yf(t){if(!t.a.d||!t.a.e)throw nt(new Ho((L0(Wge),Wge.k+" must have a source and target "+(L0(X7t),X7t.k)+" specified.")));if(t.a.d==t.a.e)throw nt(new Ho("Network simplex does not support self-loops: "+t.a+" "+t.a.d+" "+t.a.e));return pj(t.a.d.g,t.a),pj(t.a.e.b,t.a),t.a}function B2n(t,e,n){var r,s,o,h,d,w,k;for(k=new Dp(new b$t(t)),h=ut(ot(Nbe,1),Ufe,11,0,[e,n]),d=0,w=h.length;dw-t.b&&dw-t.a&&d0&&++q;++B}return q}function W2n(t,e){var n,r,s,o,h;for(h=u(K(e,(hw(),rCt)),425),o=si(e.b,0);o.b!=o.d.c;)if(s=u(ii(o),86),t.b[s.g]==0){switch(h.g){case 0:ase(t,s);break;case 1:Ypn(t,s)}t.b[s.g]=2}for(r=si(t.a,0);r.b!=r.d.c;)n=u(ii(r),188),ry(n.b.d,n,!0),ry(n.c.b,n,!0);ee(e,(mc(),X_t),t.a)}function hu(t,e){so();var n,r,s,o;return e?e==($i(),T5e)||(e==f5e||e==K2||e==h5e)&&t!=dLt?new w6t(t,e):(r=u(e,677),n=r.pk(),n||(y8(Mo((Gu(),Sa),e)),n=r.pk()),o=(!n.i&&(n.i=new Ar),n.i),s=u(cc(Fo(o.f,t)),1942),!s&&Ai(o,t,s=new w6t(t,e)),s):c5e}function K2n(t,e){var n,r,s,o,h,d,w,k,_;for(w=u(K(t,(ae(),Ii)),11),k=nc(ut(ot(na,1),re,8,0,[w.i.n,w.n,w.a])).a,_=t.i.n.b,n=pd(t.e),s=n,o=0,h=s.length;o0?o.a?(d=o.b.rf().a,n>d&&(s=(n-d)/2,o.d.b=s,o.d.c=s)):o.d.c=t.s+n:T_(t.u)&&(r=k4t(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.rf().a&&(o.d.c=r.c+r.b-o.b.rf().a))}function Z2n(t,e){var n,r,s,o;for(mr(e,"Semi-Interactive Crossing Minimization Processor",1),n=!1,s=new S(t.b);s.a=0){if(e==n)return new ya(de(-e-1),de(-e-1));if(e==-n)return new ya(de(-e),de(n+1))}return b.Math.abs(e)>b.Math.abs(n)?e<0?new ya(de(-e),de(n)):new ya(de(-e),de(n+1)):new ya(de(e+1),de(n))}function evn(t){var e,n;n=u(K(t,(xe(),du)),163),e=u(K(t,(ae(),P2)),303),n==(ph(),gb)?(ee(t,du,_O),ee(t,P2,(B0(),W4))):n==Fy?(ee(t,du,_O),ee(t,P2,(B0(),Sx))):e==(B0(),W4)?(ee(t,du,gb),ee(t,P2,yO)):e==Sx&&(ee(t,du,Fy),ee(t,P2,yO))}function hq(){hq=X,NO=new MQ,Ome=Ei(new Zs,(Ya(),fu),(co(),fV)),Fme=el(Ei(new Zs,fu,yV),jo,mV),Bme=aw(aw(OR(el(Ei(new Zs,Ld,TV),jo,EV),Gc),kV),_V),Nme=el(Ei(Ei(Ei(new Zs,fb,gV),Gc,bV),Gc,J7),jo,pV),Pme=el(Ei(Ei(new Zs,Gc,J7),Gc,hV),jo,lV)}function bC(){bC=X,$me=Ei(el(new Zs,(Ya(),jo),(co(),UEt)),fu,fV),Vme=aw(aw(OR(el(Ei(new Zs,Ld,TV),jo,EV),Gc),kV),_V),zme=el(Ei(Ei(Ei(new Zs,fb,gV),Gc,bV),Gc,J7),jo,pV),Hme=Ei(Ei(new Zs,fu,yV),jo,mV),qme=el(Ei(Ei(new Zs,Gc,J7),Gc,hV),jo,lV)}function nvn(t,e,n,r,s){var o,h;(!Wa(e)&&e.c.i.c==e.d.i.c||!Wee(nc(ut(ot(na,1),re,8,0,[s.i.n,s.n,s.a])),n))&&!Wa(e)&&(e.c==s?u8(e.a,0,new So(n)):ai(e.a,new So(n)),r&&!S0(t.a,n)&&(h=u(K(e,(xe(),Oo)),74),h||(h=new ju,ee(e,Oo,h)),o=new So(n),ks(h,o,h.c.b,h.c),Vs(t.a,o)))}function rvn(t){var e,n;for(n=new ar(lr(Uo(t).a.Kc(),new H));Vr(n);)if(e=u(Ir(n),17),e.c.i.k!=(Gn(),Pl))throw nt(new B3($ot+ZD(t)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function ivn(t,e,n){var r,s,o,h,d,w,k;if(s=Qre(t.Db&254),s==0)t.Eb=n;else{if(s==1)d=Nt(Qn,Me,1,2,5,1),o=wst(t,e),o==0?(d[0]=n,d[1]=t.Eb):(d[0]=t.Eb,d[1]=n);else for(d=Nt(Qn,Me,1,s+1,5,1),h=o2(t.Eb),r=2,w=0,k=0;r<=128;r<<=1)r==e?d[k++]=n:t.Db&r&&(d[k++]=h[w++]);t.Eb=d}t.Db|=e}function Nce(t,e,n){var r,s,o,h;for(this.b=new le,s=0,r=0,h=new S(t);h.a0&&(o=u(Pe(this.b,0),167),s+=o.o,r+=o.p),s*=2,r*=2,e>1?s=Cs(b.Math.ceil(s*e)):r=Cs(b.Math.ceil(r/e)),this.a=new p3t(s,r)}function Pce(t,e,n,r,s,o){var h,d,w,k,_,M,B,q,G,W,Z,bt;for(_=r,e.j&&e.o?(q=u(tr(t.f,e.A),57),W=q.d.c+q.d.b,--_):W=e.a.c+e.a.b,M=s,n.q&&n.o?(q=u(tr(t.f,n.C),57),k=q.d.c,++M):k=n.a.c,Z=k-W,w=b.Math.max(2,M-_),d=Z/w,G=W+d,B=_;B=0;h+=s?1:-1){for(d=e[h],w=r==(be(),Hn)?s?rc(d,r):c2(rc(d,r)):s?c2(rc(d,r)):rc(d,r),o&&(t.c[d.p]=w.gc()),M=w.Kc();M.Ob();)_=u(M.Pb(),11),t.d[_.p]=k++;Rs(n,w)}}function Fce(t,e,n){var r,s,o,h,d,w,k,_;for(o=Zt(ve(t.b.Kc().Pb())),k=Zt(ve(dcn(e.b))),r=ld(uc(t.a),k-n),s=ld(uc(e.a),n-o),_=Fi(r,s),ld(_,1/(k-o)),this.a=_,this.b=new le,d=!0,h=t.b.Kc(),h.Pb();h.Ob();)w=Zt(ve(h.Pb())),d&&w-n>yct&&(this.b.Fc(n),d=!1),this.b.Fc(w);d&&this.b.Fc(n)}function svn(t){var e,n,r,s;if(bwn(t,t.n),t.d.c.length>0){for(PT(t.c);o5t(t,u(Q(new S(t.e.a)),121))>5,e&=31,r>=t.d)return t.e<0?(eb(),Aut):(eb(),Y7);if(o=t.d-r,s=Nt(Sr,Jr,25,o+1,15,1),Z0n(s,o,t.a,r,e),t.e<0){for(n=0;n0&&t.a[n]<<32-e){for(n=0;n=0?!1:(n=T4((Gu(),Sa),s,e),n?(r=n.Zj(),(r>1||r==-1)&&$v(Mo(Sa,n))!=3):!0)):!1}function uvn(t,e,n,r){var s,o,h,d,w;return d=Ro(u(At((!e.b&&(e.b=new En(vr,e,4,7)),e.b),0),82)),w=Ro(u(At((!e.c&&(e.c=new En(vr,e,5,8)),e.c),0),82)),hs(d)==hs(w)||Zm(w,d)?null:(h=rD(e),h==n?r:(o=u(tr(t.a,h),10),o&&(s=o.e,s)?s:null))}function lvn(t,e){var n;switch(n=u(K(t,(xe(),ZV)),276),mr(e,"Label side selection ("+n+")",1),n.g){case 0:tce(t,(Vl(),u0));break;case 1:tce(t,(Vl(),yb));break;case 2:ple(t,(Vl(),u0));break;case 3:ple(t,(Vl(),yb));break;case 4:Xce(t,(Vl(),u0));break;case 5:Xce(t,(Vl(),yb))}or(e)}function L5t(t,e,n){var r,s,o,h,d,w;if(r=YKe(n,t.length),h=t[r],h[0].k==(Gn(),Is))for(o=tHt(n,h.length),w=e.j,s=0;s0&&(n[0]+=t.d,h-=n[0]),n[2]>0&&(n[2]+=t.d,h-=n[2]),o=b.Math.max(0,h),n[1]=b.Math.max(n[1],h),cmt(t,iu,s.c+r.b+n[0]-(n[1]-h)/2,n),e==iu&&(t.c.b=o,t.c.c=s.c+r.b+(o-h)/2)}function Wce(){this.c=Nt(ga,To,25,(be(),ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn])).length,15,1),this.b=Nt(ga,To,25,ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn]).length,15,1),this.a=Nt(ga,To,25,ut(ot(Za,1),Cc,61,0,[ac,On,Hn,yr,Bn]).length,15,1),wbt(this.c,bs),wbt(this.b,Ns),wbt(this.a,Ns)}function qc(t,e,n){var r,s,o,h;if(e<=n?(s=e,o=n):(s=n,o=e),r=0,t.b==null)t.b=Nt(Sr,Jr,25,2,15,1),t.b[0]=s,t.b[1]=o,t.c=!0;else{if(r=t.b.length,t.b[r-1]+1==s){t.b[r-1]=o;return}h=Nt(Sr,Jr,25,r+2,15,1),Pc(t.b,0,h,0,r),t.b=h,t.b[r-1]>=s&&(t.c=!1,t.a=!1),t.b[r++]=s,t.b[r]=o,t.c||v4(t)}}function wvn(t,e,n){var r,s,o,h,d,w,k;for(k=e.d,t.a=new Jc(k.c.length),t.c=new Ar,d=new S(k);d.a=0?t._g(k,!1,!0):lw(t,n,!1),58));t:for(o=M.Kc();o.Ob();){for(s=u(o.Pb(),56),_=0;_1;)dy(s,s.i-1);return r}function Evn(t,e){var n,r,s,o,h,d,w;for(mr(e,"Comment post-processing",1),o=new S(t.b);o.at.d[h.p]&&(n+=nmt(t.b,o),Vp(t.a,de(o)));for(;!NT(t.a);)Omt(t.b,u(P6(t.a),19).a)}return n}function Qce(t,e,n){var r,s,o,h;for(o=(!e.a&&(e.a=new he(ds,e,10,11)),e.a).i,s=new nr((!e.a&&(e.a=new he(ds,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),(!r.a&&(r.a=new he(ds,r,10,11)),r.a).i==0||(o+=Qce(t,r,!1));if(n)for(h=hs(e);h;)o+=(!h.a&&(h.a=new he(ds,h,10,11)),h.a).i,h=hs(h);return o}function dy(t,e){var n,r,s,o;return t.ej()?(r=null,s=t.fj(),t.ij()&&(r=t.kj(t.pi(e),null)),n=t.Zi(4,o=nx(t,e),null,e,s),t.bj()&&o!=null&&(r=t.dj(o,r)),r?(r.Ei(n),r.Fi()):t.$i(n),o):(o=nx(t,e),t.bj()&&o!=null&&(r=t.dj(o,null),r&&r.Fi()),o)}function _vn(t){var e,n,r,s,o,h,d,w,k,_;for(k=t.a,e=new Qs,w=0,r=new S(t.d);r.ad.d&&(_=d.d+d.a+k));n.c.d=_,e.a.zc(n,e),w=b.Math.max(w,n.c.d+n.c.a)}return w}function go(){go=X,RV=new Im("COMMENTS",0),yh=new Im("EXTERNAL_PORTS",1),vS=new Im("HYPEREDGES",2),jV=new Im("HYPERNODES",3),lE=new Im("NON_FREE_PORTS",4),U4=new Im("NORTH_SOUTH_PORTS",5),wS=new Im(h1e,6),cE=new Im("CENTER_LABELS",7),uE=new Im("END_LABELS",8),$V=new Im("PARTITIONS",9)}function gy(t){var e,n,r,s,o;for(s=new le,e=new y_((!t.a&&(t.a=new he(ds,t,10,11)),t.a)),r=new ar(lr(V0(t).a.Kc(),new H));Vr(r);)n=u(Ir(r),79),_t(At((!n.b&&(n.b=new En(vr,n,4,7)),n.b),0),186)||(o=Ro(u(At((!n.c&&(n.c=new En(vr,n,5,8)),n.c),0),82)),e.a._b(o)||(s.c[s.c.length]=o));return s}function Cvn(t){var e,n,r,s,o,h;for(o=new Qs,e=new y_((!t.a&&(t.a=new he(ds,t,10,11)),t.a)),s=new ar(lr(V0(t).a.Kc(),new H));Vr(s);)r=u(Ir(s),79),_t(At((!r.b&&(r.b=new En(vr,r,4,7)),r.b),0),186)||(h=Ro(u(At((!r.c&&(r.c=new En(vr,r,5,8)),r.c),0),82)),e.a._b(h)||(n=o.a.zc(h,o),n==null));return o}function Svn(t,e,n,r,s){return r<0?(r=b4(t,s,ut(ot(Le,1),re,2,6,[qat,Hat,Vat,Gat,ux,Uat,Wat,Kat,Yat,Xat,Qat,Zat]),e),r<0&&(r=b4(t,s,ut(ot(Le,1),re,2,6,["Jan","Feb","Mar","Apr",ux,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Avn(t,e,n,r,s){return r<0?(r=b4(t,s,ut(ot(Le,1),re,2,6,[qat,Hat,Vat,Gat,ux,Uat,Wat,Kat,Yat,Xat,Qat,Zat]),e),r<0&&(r=b4(t,s,ut(ot(Le,1),re,2,6,["Jan","Feb","Mar","Apr",ux,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Lvn(t,e,n,r,s,o){var h,d,w,k;if(d=32,r<0){if(e[0]>=t.length||(d=Ta(t,e[0]),d!=43&&d!=45)||(++e[0],r=rq(t,e),r<0))return!1;d==45&&(r=-r)}return d==32&&e[0]-n==2&&s.b==2&&(w=new CR,k=w.q.getFullYear()-ib+ib-80,h=k%100,o.a=r==h,r+=(k/100|0)*100+(r=k&&(w=r);w&&(_=b.Math.max(_,w.a.o.a)),_>B&&(M=k,B=_)}return M}function Ivn(t,e,n){var r,s,o;if(t.e=n,t.d=0,t.b=0,t.f=1,t.i=e,(t.e&16)==16&&(t.i=wwn(t.i)),t.j=t.i.length,mi(t),o=sw(t),t.d!=t.j)throw nt(new Rr(Gr((Fr(),Ode))));if(t.g){for(r=0;rN1e?aa(w,t.b):r<=N1e&&r>P1e?aa(w,t.d):r<=P1e&&r>F1e?aa(w,t.c):r<=F1e&&aa(w,t.a),o=eue(t,w,o);return s}function eb(){eb=X;var t;for(VH=new Og(1,1),Lut=new Og(1,10),Y7=new Og(0,0),Aut=new Og(-1,1),p7t=ut(ot(R4,1),re,91,0,[Y7,VH,new Og(1,2),new Og(1,3),new Og(1,4),new Og(1,5),new Og(1,6),new Og(1,7),new Og(1,8),new Og(1,9),Lut]),GH=Nt(R4,re,91,32,0,1),t=0;t1,d&&(r=new Re(s,n.b),ai(e.a,r)),z_(e.a,ut(ot(na,1),re,8,0,[B,M]))}function aue(t){Sv(t,new y2(Ev(yv(kv(xv(new mg,vH),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new HZ))),we(t,vH,ww,_At),we(t,vH,ky,15),we(t,vH,Hq,de(0)),we(t,vH,px,P7)}function I5t(){I5t=X;var t,e,n,r,s,o;for(lA=Nt(Xu,P4,25,255,15,1),uU=Nt(Eh,wd,25,16,15,1),e=0;e<255;e++)lA[e]=-1;for(n=57;n>=48;n--)lA[n]=n-48<<24>>24;for(r=70;r>=65;r--)lA[r]=r-65+10<<24>>24;for(s=102;s>=97;s--)lA[s]=s-97+10<<24>>24;for(o=0;o<10;o++)uU[o]=48+o&Ms;for(t=10;t<=15;t++)uU[t]=65+t-10&Ms}function dq(t,e,n){var r,s,o,h,d,w,k,_;return d=e.i-t.g/2,w=n.i-t.g/2,k=e.j-t.g/2,_=n.j-t.g/2,o=e.g+t.g/2,h=n.g+t.g/2,r=e.f+t.g/2,s=n.f+t.g/2,d>19)return"-"+oue(W8(t));for(n=t,r="";!(n.l==0&&n.m==0&&n.h==0);){if(s=Prt(Nq),n=l6t(n,s,!0),e=""+mHt(ub),!(n.l==0&&n.m==0&&n.h==0))for(o=9-e.length;o>0;o--)e="0"+e;r=e+r}return r}function Rvn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var t="__proto__",e=Object.create(null);if(e[t]!==void 0)return!1;var n=Object.getOwnPropertyNames(e);return!(n.length!=0||(e[t]=42,e[t]!==42)||Object.getOwnPropertyNames(e).length==0)}function jvn(t){var e,n,r,s,o,h,d;for(e=!1,n=0,s=new S(t.d.b);s.a=t.a||!m4t(e,n))return-1;if(_8(u(r.Kb(e),20)))return 1;for(s=0,h=u(r.Kb(e),20).Kc();h.Ob();)if(o=u(h.Pb(),17),w=o.c.i==e?o.d.i:o.c.i,d=N5t(t,w,n,r),d==-1||(s=b.Math.max(s,d),s>t.c-1))return-1;return s+1}function cue(t,e){var n,r,s,o,h,d;if(Gt(e)===Gt(t))return!0;if(!_t(e,15)||(r=u(e,15),d=t.gc(),r.gc()!=d))return!1;if(h=r.Kc(),t.ni()){for(n=0;n0){if(t.qj(),e!=null){for(o=0;o>24;case 97:case 98:case 99:case 100:case 101:case 102:return t-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return t-65+10<<24>>24;default:throw nt(new cd("Invalid hexadecimal"))}}function Hvn(t,e,n){var r,s,o,h;for(mr(n,"Processor order nodes",2),t.a=Zt(ve(K(e,(hw(),iCt)))),s=new cs,h=si(e.b,0);h.b!=h.d.c;)o=u(ii(h),86),Be(Fe(K(o,(mc(),Wy))))&&ks(s,o,s.c.b,s.c);r=(Zn(s.b!=0),u(s.a.a.c,86)),Ale(t,r),!n.b&&ait(n,1),j5t(t,r,0-Zt(ve(K(r,(mc(),xG))))/2,0),!n.b&&ait(n,1),or(n)}function gq(){gq=X,K7t=new $3("SPIRAL",0),V7t=new $3("LINE_BY_LINE",1),G7t=new $3("MANHATTAN",2),H7t=new $3("JITTER",3),Put=new $3("QUADRANTS_LINE_BY_LINE",4),W7t=new $3("QUADRANTS_MANHATTAN",5),U7t=new $3("QUADRANTS_JITTER",6),q7t=new $3("COMBINE_LINE_BY_LINE_MANHATTAN",7),z7t=new $3("COMBINE_JITTER_MANHATTAN",8)}function lue(t,e,n,r){var s,o,h,d,w,k;for(w=Tst(t,n),k=Tst(e,n),s=!1;w&&k&&(r||jfn(w,k,n));)h=Tst(w,n),d=Tst(k,n),vD(e),vD(t),o=w.c,Aat(w,!1),Aat(k,!1),n?(oy(e,k.p,o),e.p=k.p,oy(t,w.p+1,o),t.p=w.p):(oy(t,w.p,o),t.p=w.p,oy(e,k.p+1,o),e.p=k.p),Lo(w,null),Lo(k,null),w=h,k=d,s=!0;return s}function Vvn(t,e,n,r){var s,o,h,d,w;for(s=!1,o=!1,d=new S(r.j);d.a=e.length)throw nt(new Co("Greedy SwitchDecider: Free layer not in graph."));this.c=e[t],this.e=new HM(r),lit(this.e,this.c,(be(),Bn)),this.i=new HM(r),lit(this.i,this.c,Hn),this.f=new cYt(this.c),this.a=!o&&s.i&&!s.s&&this.c[0].k==(Gn(),Is),this.a&&ogn(this,t,e.length)}function fue(t,e){var n,r,s,o,h,d;o=!t.B.Hc((bl(),rN)),h=t.B.Hc(mft),t.a=new oie(h,o,t.c),t.n&&Twt(t.a.n,t.n),eet(t.g,(Zf(),iu),t.a),e||(r=new rC(1,o,t.c),r.n.a=t.k,O6(t.p,(be(),On),r),s=new rC(1,o,t.c),s.n.d=t.k,O6(t.p,yr,s),d=new rC(0,o,t.c),d.n.c=t.k,O6(t.p,Bn,d),n=new rC(0,o,t.c),n.n.b=t.k,O6(t.p,Hn,n))}function Uvn(t){var e,n,r;switch(e=u(K(t.d,(xe(),X0)),218),e.g){case 2:n=k5n(t);break;case 3:n=(r=new le,ys(Wi(xu(ec(ec(new kn(null,new Tn(t.d.b,16)),new SX),new AX),new $9),new vX),new Btt(r)),r);break;default:throw nt(new Ho("Compaction not supported for "+e+" edges."))}Vyn(t,n),_a(new Tm(t.g),new Ptt(t))}function Wvn(t,e){var n;return n=new x3,e&&Bo(n,u(tr(t.a,sN),94)),_t(e,470)&&Bo(n,u(tr(t.a,aN),94)),_t(e,354)?(Bo(n,u(tr(t.a,Yo),94)),n):(_t(e,82)&&Bo(n,u(tr(t.a,vr),94)),_t(e,239)?(Bo(n,u(tr(t.a,ds),94)),n):_t(e,186)?(Bo(n,u(tr(t.a,yl),94)),n):(_t(e,352)&&Bo(n,u(tr(t.a,ra),94)),n))}function n1(){n1=X,Z7=new ao((di(),zG),de(1)),sV=new ao(G2,80),rbe=new ao(nAt,5),Kpe=new ao(jx,P7),ebe=new ao(gft,de(1)),nbe=new ao(pft,(Fn(),!0)),hEt=new Mv(50),Jpe=new ao(V2,hEt),cEt=RG,fEt=US,Ype=new ao(sft,!1),lEt=YO,Zpe=mb,Qpe=H2,Xpe=a5,tbe=Ky,uEt=(I4t(),zpe),Wut=Gpe,iV=$pe,Uut=qpe,dEt=Vpe}function Kvn(t){var e,n,r,s,o,h,d,w;for(w=new gJt,d=new S(t.a);d.a0&&e=0)return!1;if(e.p=n.b,ue(n.e,e),s==(Gn(),ca)||s==Uc){for(h=new S(e.j);h.a1||h==-1)&&(o|=16),s.Bb&yc&&(o|=64)),n.Bb&Qa&&(o|=Ay),o|=xf):_t(e,457)?o|=512:(r=e.Bj(),r&&r.i&1&&(o|=256)),t.Bb&512&&(o|=128),o}function vC(t,e){var n,r,s,o,h;for(t=t==null?Mu:(In(t),t),s=0;st.d[d.p]&&(n+=nmt(t.b,o),Vp(t.a,de(o)))):++h;for(n+=t.b.d*h;!NT(t.a);)Omt(t.b,u(P6(t.a),19).a)}return n}function rwn(t,e){var n;return t.f==Dft?(n=$v(Mo((Gu(),Sa),e)),t.e?n==4&&e!=(sx(),Ux)&&e!=(sx(),Gx)&&e!=(sx(),Ift)&&e!=(sx(),Oft):n==2):t.d&&(t.d.Hc(e)||t.d.Hc(z6(Mo((Gu(),Sa),e)))||t.d.Hc(T4((Gu(),Sa),t.b,e)))?!0:t.f&&E5t((Gu(),t.f),ZM(Mo(Sa,e)))?(n=$v(Mo(Sa,e)),t.e?n==4:n==2):!1}function iwn(t,e,n,r){var s,o,h,d,w,k,_,M;return h=u(ze(n,(di(),$x)),8),w=h.a,_=h.b+t,s=b.Math.atan2(_,w),s<0&&(s+=I4),s+=e,s>I4&&(s-=I4),d=u(ze(r,$x),8),k=d.a,M=d.b+t,o=b.Math.atan2(M,k),o<0&&(o+=I4),o+=e,o>I4&&(o-=I4),E1(),vf(1e-10),b.Math.abs(s-o)<=1e-10||s==o||isNaN(s)&&isNaN(o)?0:so?1:Lv(isNaN(s),isNaN(o))}function sat(t){var e,n,r,s,o,h,d;for(d=new Ar,r=new S(t.a.b);r.a=t.o)throw nt(new Ept);d=e>>5,h=e&31,o=M0(1,Mr(M0(h,1))),s?t.n[n][d]=A1(t.n[n][d],o):t.n[n][d]=Gs(t.n[n][d],Avt(o)),o=M0(o,1),r?t.n[n][d]=A1(t.n[n][d],o):t.n[n][d]=Gs(t.n[n][d],Avt(o))}catch(w){throw w=rs(w),_t(w,320)?nt(new Co(Cot+t.o+"*"+t.p+Sot+e+Xa+n+Aot)):nt(w)}}function j5t(t,e,n,r){var s,o,h;e&&(o=Zt(ve(K(e,(mc(),Jg))))+r,h=n+Zt(ve(K(e,xG)))/2,ee(e,Dht,de(Mr(Au(b.Math.round(o))))),ee(e,Q_t,de(Mr(Au(b.Math.round(h))))),e.d.b==0||j5t(t,u(lj((s=si(new Sp(e).a.d,0),new p6(s))),86),n+Zt(ve(K(e,xG)))+t.a,r+Zt(ve(K(e,yE)))),K(e,Mht)!=null&&j5t(t,u(K(e,Mht),86),n,r))}function awn(t,e){var n,r,s,o,h,d,w,k,_,M,B;for(w=$a(e.a),s=Zt(ve(K(w,(xe(),$2))))*2,_=Zt(ve(K(w,J4))),k=b.Math.max(s,_),o=Nt(ga,To,25,e.f-e.c+1,15,1),r=-k,n=0,d=e.b.Kc();d.Ob();)h=u(d.Pb(),10),r+=t.a[h.c.p]+k,o[n++]=r;for(r+=t.a[e.a.c.p]+k,o[n++]=r,B=new S(e.e);B.a0&&(r=(!t.n&&(t.n=new he(Yo,t,1,7)),u(At(t.n,0),137)).a,!r||Yr(Yr((e.a+=' "',e),r),'"'))),Yr(_v(Yr(_v(Yr(_v(Yr(_v((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function kue(t){var e,n,r;return t.Db&64?Pst(t):(e=new Fl(l8t),n=t.k,n?Yr(Yr((e.a+=' "',e),n),'"'):(!t.n&&(t.n=new he(Yo,t,1,7)),t.n.i>0&&(r=(!t.n&&(t.n=new he(Yo,t,1,7)),u(At(t.n,0),137)).a,!r||Yr(Yr((e.a+=' "',e),r),'"'))),Yr(_v(Yr(_v(Yr(_v(Yr(_v((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function oat(t,e){var n,r,s,o,h,d,w;if(e==null||e.length==0)return null;if(s=u(jc(t.a,e),149),!s){for(r=(d=new m1(t.b).a.vc().Kc(),new y1(d));r.a.Ob();)if(n=(o=u(r.a.Pb(),42),u(o.dd(),149)),h=n.c,w=e.length,un(h.substr(h.length-w,w),e)&&(e.length==h.length||Ta(h,h.length-e.length-1)==46)){if(s)return null;s=n}s&&Ao(t.a,e,s)}return s}function uwn(t,e){var n,r,s,o;return n=new Tl,r=u($l(xu(new kn(null,new Tn(t.f,16)),n),Ym(new Yt,new Mi,new bi,new dn,ut(ot(wl,1),oe,132,0,[(N1(),Ly),Yl]))),21),s=r.gc(),r=u($l(xu(new kn(null,new Tn(e.f,16)),n),Ym(new Yt,new Mi,new bi,new dn,ut(ot(wl,1),oe,132,0,[Ly,Yl]))),21),o=r.gc(),ss.p?(Us(o,yr),o.d&&(d=o.o.b,e=o.a.b,o.a.b=d-e)):o.j==yr&&s.p>t.p&&(Us(o,On),o.d&&(d=o.o.b,e=o.a.b,o.a.b=-(d-e)));break}return s}function hwn(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G;if(o=n,n1,d&&(r=new Re(s,n.b),ai(e.a,r)),z_(e.a,ut(ot(na,1),re,8,0,[B,M]))}function cat(t,e,n){var r,s,o,h,d,w;if(e)if(n<=-1){if(r=wn(e.Tg(),-1-n),_t(r,99))return u(r,18);for(h=u(e.ah(r),153),d=0,w=h.gc();d0){for(s=w.length;s>0&&w[s-1]=="";)--s;s=40,h&&kmn(t),Cyn(t),svn(t),n=Wre(t),r=0;n&&r0&&ai(t.f,o)):(t.c[h]-=k+1,t.c[h]<=0&&t.a[h]>0&&ai(t.e,o))))}function Bwn(t){var e,n,r,s,o,h,d,w,k;for(d=new Dp(u(Dr(new zo),62)),k=Ns,n=new S(t.d);n.a=0&&wn?e:n;k<=M;++k)k==n?d=r++:(o=s[k],_=G.rl(o.ak()),k==e&&(w=k==M&&!_?r-1:r),_&&++r);return B=u(tC(t,e,n),72),d!=w&&Uk(t,new gD(t.e,7,h,de(d),q.dd(),w)),B}}else return u(Vst(t,e,n),72);return u(tC(t,e,n),72)}function zwn(t,e){var n,r,s,o,h,d,w;for(mr(e,"Port order processing",1),w=u(K(t,(xe(),c_t)),421),r=new S(t.b);r.a=0&&(d=Vfn(t,h),!(d&&(k<22?w.l|=1<>>1,h.m=_>>>1|(M&1)<<21,h.l=B>>>1|(_&1)<<21,--k;return n&&mit(w),o&&(r?(ub=W8(t),s&&(ub=Pne(ub,(I8(),X8t)))):ub=cu(t.l,t.m,t.h)),w}function Vwn(t,e){var n,r,s,o,h,d,w,k,_,M;for(k=t.e[e.c.p][e.p]+1,w=e.c.a.c.length+1,d=new S(t.a);d.a0&&($r(0,t.length),t.charCodeAt(0)==45||($r(0,t.length),t.charCodeAt(0)==43))?1:0,r=h;rn)throw nt(new cd(vw+t+'"'));return d}function Gwn(t){var e,n,r,s,o,h,d;for(h=new cs,o=new S(t.a);o.a1)&&e==1&&u(t.a[t.b],10).k==(Gn(),Pl)?ox(u(t.a[t.b],10),(Vl(),u0)):r&&(!n||(t.c-t.b&t.a.length-1)>1)&&e==1&&u(t.a[t.c-1&t.a.length-1],10).k==(Gn(),Pl)?ox(u(t.a[t.c-1&t.a.length-1],10),(Vl(),yb)):(t.c-t.b&t.a.length-1)==2?(ox(u(K_(t),10),(Vl(),u0)),ox(u(K_(t),10),yb)):jbn(t,s),tmt(t)}function Kwn(t,e,n){var r,s,o,h,d;for(o=0,s=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));s.e!=s.i.gc();)r=u(dr(s),33),h="",(!r.n&&(r.n=new he(Yo,r,1,7)),r.n).i==0||(h=u(At((!r.n&&(r.n=new he(Yo,r,1,7)),r.n),0),137).a),d=new kit(o++,e,h),Bo(d,r),ee(d,(mc(),jS),r),d.e.b=r.j+r.f/2,d.f.a=b.Math.max(r.g,1),d.e.a=r.i+r.g/2,d.f.b=b.Math.max(r.f,1),ai(e.b,d),lu(n.f,r,d)}function Ywn(t){var e,n,r,s,o;r=u(K(t,(ae(),Ii)),33),o=u(ze(r,(xe(),R2)),174).Hc((Nl(),W2)),t.e||(s=u(K(t,Wc),21),e=new Re(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),s.Hc((go(),yh))?(Eo(r,ws,(va(),Kc)),gw(r,e.a,e.b,!1,!0)):Be(Fe(ze(r,tht)))||gw(r,e.a,e.b,!0,!0)),o?Eo(r,R2,on(W2)):Eo(r,R2,(n=u(Wf(tA),9),new oh(n,u(ff(n,n.length),9),0)))}function W5t(t,e,n){var r,s,o,h;if(e[0]>=t.length)return n.o=0,!0;switch(Ta(t,e[0])){case 43:s=1;break;case 45:s=-1;break;default:return n.o=0,!0}if(++e[0],o=e[0],h=rq(t,e),h==0&&e[0]==o)return!1;if(e[0]=0&&d!=n&&(o=new oa(t,1,d,h,null),r?r.Ei(o):r=o),n>=0&&(o=new oa(t,1,n,d==n?h:null,e),r?r.Ei(o):r=o)),r}function $ue(t){var e,n,r;if(t.b==null){if(r=new _g,t.i!=null&&(yo(r,t.i),r.a+=":"),t.f&256){for(t.f&256&&t.a!=null&&(hnn(t.i)||(r.a+="//"),yo(r,t.a)),t.d!=null&&(r.a+="/",yo(r,t.d)),t.f&16&&(r.a+="/"),e=0,n=t.j.length;eB?!1:(M=(w=EC(r,B,!1),w.a),_+d+M<=e.b&&(dD(n,o-n.s),n.c=!0,dD(r,o-n.s),YD(r,n.s,n.t+n.d+d),r.k=!0,syt(n.q,r),q=!0,s&&(Y$(e,r),r.j=e,t.c.length>h&&(tI((Sn(h,t.c.length),u(t.c[h],200)),r),(Sn(h,t.c.length),u(t.c[h],200)).a.c.length==0&&Ig(t,h)))),q)}function rmn(t,e){var n,r,s,o,h,d;if(mr(e,"Partition midprocessing",1),s=new Hv,ys(Wi(new kn(null,new Tn(t.a,16)),new $Y),new bv(s)),s.d!=0){for(d=u($l(OQt((o=s.i,new kn(null,(o||(s.i=new K3(s,s.c))).Nc()))),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)]))),15),r=d.Kc(),n=u(r.Pb(),19);r.Ob();)h=u(r.Pb(),19),a2n(u(Pi(s,n),21),u(Pi(s,h),21)),n=h;or(e)}}function Hue(t,e,n){var r,s,o,h,d,w,k,_;if(e.p==0){for(e.p=1,h=n,h||(s=new le,o=(r=u(Wf(Za),9),new oh(r,u(ff(r,r.length),9),0)),h=new ya(s,o)),u(h.a,15).Fc(e),e.k==(Gn(),Is)&&u(h.b,21).Fc(u(K(e,(ae(),gc)),61)),w=new S(e.j);w.a0){if(s=u(t.Ab.g,1934),e==null){for(o=0;o1)for(r=new S(s);r.an.s&&dd&&(d=s,_.c=Nt(Qn,Me,1,0,5,1)),s==d&&ue(_,new ya(n.c.i,n)));pn(),aa(_,t.c),$m(t.b,w.p,_)}}function umn(t,e){var n,r,s,o,h,d,w,k,_;for(h=new S(e.b);h.ad&&(d=s,_.c=Nt(Qn,Me,1,0,5,1)),s==d&&ue(_,new ya(n.d.i,n)));pn(),aa(_,t.c),$m(t.f,w.p,_)}}function Gue(t){Sv(t,new y2(Ev(yv(kv(xv(new mg,xw),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new OZ))),we(t,xw,ww,TSt),we(t,xw,ky,15),we(t,xw,jI,de(0)),we(t,xw,gH,Ie(xSt)),we(t,xw,M4,Ie(F3e)),we(t,xw,bx,Ie(B3e)),we(t,xw,px,H1e),we(t,xw,$I,Ie(kSt)),we(t,xw,vx,Ie(ESt)),we(t,xw,i8t,Ie(eft)),we(t,xw,cH,Ie(P3e))}function Uue(t,e){var n,r,s,o,h,d,w,k,_;if(s=t.i,h=s.o.a,o=s.o.b,h<=0&&o<=0)return be(),ac;switch(k=t.n.a,_=t.n.b,d=t.o.a,n=t.o.b,e.g){case 2:case 1:if(k<0)return be(),Bn;if(k+d>h)return be(),Hn;break;case 4:case 3:if(_<0)return be(),On;if(_+n>o)return be(),yr}return w=(k+d/2)/h,r=(_+n/2)/o,w+r<=1&&w-r<=0?(be(),Bn):w+r>=1&&w-r>=0?(be(),Hn):r<.5?(be(),On):(be(),yr)}function lmn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W;for(n=!1,_=Zt(ve(K(e,(xe(),Bw)))),G=rb*_,s=new S(e.b);s.aw+G&&(W=M.g+B.g,B.a=(B.g*B.a+M.g*M.a)/W,B.g=W,M.f=B,n=!0)),o=d,M=B;return n}function Wue(t,e,n,r,s,o,h){var d,w,k,_,M,B;for(B=new S6,k=e.Kc();k.Ob();)for(d=u(k.Pb(),839),M=new S(d.wf());M.a0?d.a?(k=d.b.rf().b,s>k&&(t.v||d.c.d.c.length==1?(h=(s-k)/2,d.d.d=h,d.d.a=h):(n=u(Pe(d.c.d,0),181).rf().b,r=(n-k)/2,d.d.d=b.Math.max(0,r),d.d.a=s-r-k))):d.d.a=t.t+s:T_(t.u)&&(o=k4t(d.b),o.d<0&&(d.d.d=-o.d),o.d+o.a>d.b.rf().b&&(d.d.a=o.d+o.a-d.b.rf().b))}function dmn(t,e){var n;switch(xD(t)){case 6:return ha(e);case 7:return Nm(e);case 8:return Om(e);case 3:return Array.isArray(e)&&(n=xD(e),!(n>=14&&n<=16));case 11:return e!=null&&typeof e===Fat;case 12:return e!=null&&(typeof e===_I||typeof e==Fat);case 0:return sst(e,t.__elementTypeId$);case 2:return Hnt(e)&&e.im!==Ft;case 1:return Hnt(e)&&e.im!==Ft||sst(e,t.__elementTypeId$);default:return!0}}function Kue(t,e){var n,r,s,o;return r=b.Math.min(b.Math.abs(t.c-(e.c+e.b)),b.Math.abs(t.c+t.b-e.c)),o=b.Math.min(b.Math.abs(t.d-(e.d+e.a)),b.Math.abs(t.d+t.a-e.d)),n=b.Math.abs(t.c+t.b/2-(e.c+e.b/2)),n>t.b/2+e.b/2||(s=b.Math.abs(t.d+t.a/2-(e.d+e.a/2)),s>t.a/2+e.a/2)?1:n==0&&s==0?0:n==0?o/s+1:s==0?r/n+1:b.Math.min(r/n,o/s)+1}function Yue(t,e){var n,r,s,o,h,d;return s=Hmt(t),d=Hmt(e),s==d?t.e==e.e&&t.a<54&&e.a<54?t.fe.f?1:0:(r=t.e-e.e,n=(t.d>0?t.d:b.Math.floor((t.a-1)*afe)+1)-(e.d>0?e.d:b.Math.floor((e.a-1)*afe)+1),n>r+1?s:n0&&(h=t4(h,vle(r))),Sie(o,h))):s0&&t.d!=(j_(),Xut)&&(d+=h*(r.d.a+t.a[e.b][r.b]*(e.d.a-r.d.a)/n)),n>0&&t.d!=(j_(),Kut)&&(w+=h*(r.d.b+t.a[e.b][r.b]*(e.d.b-r.d.b)/n)));switch(t.d.g){case 1:return new Re(d/o,e.d.b);case 2:return new Re(e.d.a,w/o);default:return new Re(d/o,w/o)}}function Xue(t,e){Q8();var n,r,s,o,h;if(h=u(K(t.i,(xe(),ws)),98),o=t.j.g-e.j.g,o!=0||!(h==(va(),U2)||h==h0||h==Kc))return 0;if(h==(va(),U2)&&(n=u(K(t,Qg),19),r=u(K(e,Qg),19),n&&r&&(s=n.a-r.a,s!=0)))return s;switch(t.j.g){case 1:return js(t.n.a,e.n.a);case 2:return js(t.n.b,e.n.b);case 3:return js(e.n.a,t.n.a);case 4:return js(e.n.b,t.n.b);default:throw nt(new Ho(dxt))}}function Que(t){var e,n,r,s,o,h;for(n=(!t.a&&(t.a=new Bs(Wh,t,5)),t.a).i+2,h=new Jc(n),ue(h,new Re(t.j,t.k)),ys(new kn(null,(!t.a&&(t.a=new Bs(Wh,t,5)),new Tn(t.a,16))),new G$t(h)),ue(h,new Re(t.b,t.c)),e=1;e0&&(PD(w,!1,(fo(),Hh)),PD(w,!0,_f)),_u(e.g,new qVt(t,n)),Ai(t.g,e,n)}function Jue(){Jue=X;var t;for(i7t=ut(ot(Sr,1),Jr,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Cut=Nt(Sr,Jr,25,37,15,1),xge=ut(ot(Sr,1),Jr,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),s7t=Nt(Db,cot,25,37,14,1),t=2;t<=36;t++)Cut[t]=Cs(b.Math.pow(t,i7t[t])),s7t[t]=eI(Dq,Cut[t])}function pmn(t){var e;if((!t.a&&(t.a=new he(us,t,6,6)),t.a).i!=1)throw nt(new Pn(cde+(!t.a&&(t.a=new he(us,t,6,6)),t.a).i));return e=new ju,OD(u(At((!t.b&&(t.b=new En(vr,t,4,7)),t.b),0),82))&&Ka(e,Phe(t,OD(u(At((!t.b&&(t.b=new En(vr,t,4,7)),t.b),0),82)),!1)),OD(u(At((!t.c&&(t.c=new En(vr,t,5,8)),t.c),0),82))&&Ka(e,Phe(t,OD(u(At((!t.c&&(t.c=new En(vr,t,5,8)),t.c),0),82)),!0)),e}function tle(t,e){var n,r,s,o,h;for(e.d?s=t.a.c==(gd(),Rw)?Uo(e.b):$s(e.b):s=t.a.c==(gd(),Zg)?Uo(e.b):$s(e.b),o=!1,r=new ar(lr(s.a.Kc(),new H));Vr(r);)if(n=u(Ir(r),17),h=Be(t.a.f[t.a.g[e.b.p].p]),!(!h&&!Wa(n)&&n.c.i.c==n.d.i.c)&&!(Be(t.a.n[t.a.g[e.b.p].p])||Be(t.a.n[t.a.g[e.b.p].p]))&&(o=!0,S0(t.b,t.a.g[_fn(n,e.b).p])))return e.c=!0,e.a=n,e;return e.c=o,e.a=null,e}function bmn(t,e,n,r,s){var o,h,d,w,k,_,M;for(pn(),aa(t,new zZ),d=new xa(t,0),M=new le,o=0;d.bo*2?(_=new U$(M),k=Hu(h)/Ll(h),w=Iat(_,e,new v6,n,r,s,k),Fi(Kf(_.e),w),M.c=Nt(Qn,Me,1,0,5,1),o=0,M.c[M.c.length]=_,M.c[M.c.length]=h,o=Hu(_)*Ll(_)+Hu(h)*Ll(h)):(M.c[M.c.length]=h,o+=Hu(h)*Ll(h));return M}function Y5t(t,e,n){var r,s,o,h,d,w,k;if(r=n.gc(),r==0)return!1;if(t.ej())if(w=t.fj(),l3t(t,e,n),h=r==1?t.Zi(3,null,n.Kc().Pb(),e,w):t.Zi(5,null,n,e,w),t.bj()){for(d=r<100?null:new Lp(r),o=e+r,s=e;s0){for(h=0;h>16==-15&&t.Cb.nh()&&Krt(new Vrt(t.Cb,9,13,n,t.c,$g(fl(u(t.Cb,59)),t))):_t(t.Cb,88)&&t.Db>>16==-23&&t.Cb.nh()&&(e=t.c,_t(e,88)||(e=(ln(),Qh)),_t(n,88)||(n=(ln(),Qh)),Krt(new Vrt(t.Cb,9,10,n,e,$g(Oc(u(t.Cb,26)),t)))))),t.c}function vmn(t,e){var n,r,s,o,h,d,w,k,_,M;for(mr(e,"Hypernodes processing",1),s=new S(t.b);s.an);return s}function nle(t,e){var n,r,s;r=pl(t.d,1)!=0,!Be(Fe(K(e.j,(ae(),Mw))))&&!Be(Fe(K(e.j,Y4)))||Gt(K(e.j,(xe(),pb)))===Gt((j0(),bb))?e.c.Tf(e.e,r):r=Be(Fe(K(e.j,Mw))),pI(t,e,r,!0),Be(Fe(K(e.j,Y4)))&&ee(e.j,Y4,(Fn(),!1)),Be(Fe(K(e.j,Mw)))&&(ee(e.j,Mw,(Fn(),!1)),ee(e.j,Y4,!0)),n=$st(t,e);do{if(eyt(t),n==0)return 0;r=!r,s=n,pI(t,e,r,!1),n=$st(t,e)}while(s>n);return s}function rle(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G;if(e==n)return!0;if(e=s5t(t,e),n=s5t(t,n),r=fst(e),r){if(_=fst(n),_!=r)return _?(w=r.Dj(),G=_.Dj(),w==G&&w!=null):!1;if(h=(!e.d&&(e.d=new Bs(wo,e,1)),e.d),o=h.i,B=(!n.d&&(n.d=new Bs(wo,n,1)),n.d),o==B.i){for(k=0;k0,d=Cz(e,o),C2t(n?d.b:d.g,e),c4(d).c.length==1&&ks(r,d,r.c.b,r.c),s=new ya(o,e),Vp(t.o,s),Eu(t.e.a,o))}function ole(t,e){var n,r,s,o,h,d,w;return r=b.Math.abs(Vj(t.b).a-Vj(e.b).a),d=b.Math.abs(Vj(t.b).b-Vj(e.b).b),s=0,w=0,n=1,h=1,r>t.b.b/2+e.b.b/2&&(s=b.Math.min(b.Math.abs(t.b.c-(e.b.c+e.b.b)),b.Math.abs(t.b.c+t.b.b-e.b.c)),n=1-s/r),d>t.b.a/2+e.b.a/2&&(w=b.Math.min(b.Math.abs(t.b.d-(e.b.d+e.b.a)),b.Math.abs(t.b.d+t.b.a-e.b.d)),h=1-w/d),o=b.Math.min(n,h),(1-o)*b.Math.sqrt(r*r+d*d)}function Emn(t){var e,n,r,s;for(Dat(t,t.e,t.f,(qv(),wb),!0,t.c,t.i),Dat(t,t.e,t.f,wb,!1,t.c,t.i),Dat(t,t.e,t.f,n5,!0,t.c,t.i),Dat(t,t.e,t.f,n5,!1,t.c,t.i),_mn(t,t.c,t.e,t.f,t.i),r=new xa(t.i,0);r.b=65;n--)Y1[n]=n-65<<24>>24;for(r=122;r>=97;r--)Y1[r]=r-97+26<<24>>24;for(s=57;s>=48;s--)Y1[s]=s-48+52<<24>>24;for(Y1[43]=62,Y1[47]=63,o=0;o<=25;o++)op[o]=65+o&Ms;for(h=26,w=0;h<=51;++h,w++)op[h]=97+w&Ms;for(t=52,d=0;t<=61;++t,d++)op[t]=48+d&Ms;op[62]=43,op[63]=47}function Tmn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q;if(t.dc())return new Da;for(k=0,M=0,s=t.Kc();s.Ob();)r=u(s.Pb(),37),o=r.f,k=b.Math.max(k,o.a),M+=o.a*o.b;for(k=b.Math.max(k,b.Math.sqrt(M)*Zt(ve(K(u(t.Kc().Pb(),37),(xe(),UV))))),B=0,q=0,w=0,n=e,d=t.Kc();d.Ob();)h=u(d.Pb(),37),_=h.f,B+_.a>k&&(B=0,q+=w+e,w=0),wC(h,B,q),n=b.Math.max(n,B+_.a),w=b.Math.max(w,_.b),B+=_.a+e;return new Re(n+e,q+w+e)}function _mn(t,e,n,r,s){var o,h,d,w,k,_,M;for(h=new S(e);h.ao)return be(),Hn;break;case 4:case 3:if(w<0)return be(),On;if(w+t.f>s)return be(),yr}return h=(d+t.g/2)/o,n=(w+t.f/2)/s,h+n<=1&&h-n<=0?(be(),Bn):h+n>=1&&h-n>=0?(be(),Hn):n<.5?(be(),On):(be(),yr)}function Cmn(t,e,n,r,s){var o,h;if(o=Ra(Gs(e[0],po),Gs(r[0],po)),t[0]=Mr(o),o=Rp(o,32),n>=s){for(h=1;h0&&(s.b[h++]=0,s.b[h++]=o.b[0]-1),e=1;e0&&(nM(w,w.d-s.d),s.c==(Yf(),vb)&&apt(w,w.a-s.d),w.d<=0&&w.i>0&&ks(e,w,e.c.b,e.c)));for(o=new S(t.f);o.a0&&(xT(d,d.i-s.d),s.c==(Yf(),vb)&&gv(d,d.b-s.d),d.i<=0&&d.d>0&&ks(n,d,n.c.b,n.c)))}function Smn(t,e,n){var r,s,o,h,d,w,k,_;for(mr(n,"Processor compute fanout",1),nl(t.b),nl(t.a),d=null,o=si(e.b,0);!d&&o.b!=o.d.c;)k=u(ii(o),86),Be(Fe(K(k,(mc(),Wy))))&&(d=k);for(w=new cs,ks(w,d,w.c.b,w.c),whe(t,w),_=si(e.b,0);_.b!=_.d.c;)k=u(ii(_),86),h=jr(K(k,(mc(),RS))),s=jc(t.b,h)!=null?u(jc(t.b,h),19).a:0,ee(k,mG,de(s)),r=1+(jc(t.a,h)!=null?u(jc(t.a,h),19).a:0),ee(k,Xme,de(r));or(n)}function Amn(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G;for(B=hdn(t,n),w=0;w0),r.a.Xb(r.c=--r.b),M>B+w&&Dl(r);for(h=new S(q);h.a0),r.a.Xb(r.c=--r.b)}}function Lmn(){yi();var t,e,n,r,s,o;if(Pft)return Pft;for(t=new jl(4),vy(t,nb(dut,!0)),CC(t,nb("M",!0)),CC(t,nb("C",!0)),o=new jl(4),r=0;r<11;r++)qc(o,r,r);return e=new jl(4),vy(e,nb("M",!0)),qc(e,4448,4607),qc(e,65438,65439),s=new l_(2),x2(s,t),x2(s,fA),n=new l_(2),n.$l(Bj(o,nb("L",!0))),n.$l(e),n=new Wm(3,n),n=new uwt(s,n),Pft=n,Pft}function Mmn(t){var e,n;if(e=jr(ze(t,(di(),GS))),!Ene(e,t)&&!s2(t,EE)&&((!t.a&&(t.a=new he(ds,t,10,11)),t.a).i!=0||Be(Fe(ze(t,WO)))))if(e==null||uy(e).length==0){if(!Ene(Un,t))throw n=Yr(Yr(new Fl("Unable to load default layout algorithm "),Un)," for unconfigured node "),_q(t,n),nt(new B3(n.a))}else throw n=Yr(Yr(new Fl("Layout algorithm '"),e),"' not found for "),_q(t,n),nt(new B3(n.a))}function gat(t){var e,n,r,s,o,h,d,w,k,_,M,B,q;if(n=t.i,e=t.n,t.b==0)for(q=n.c+e.b,B=n.b-e.b-e.c,h=t.a,w=0,_=h.length;w<_;++w)s=h[w],jj(s,q,B);else r=sse(t,!1),jj(t.a[0],n.c+e.b,r[0]),jj(t.a[2],n.c+n.b-e.c-r[2],r[2]),M=n.b-e.b-e.c,r[0]>0&&(M-=r[0]+t.c,r[0]+=t.c),r[2]>0&&(M-=r[2]+t.c),r[1]=b.Math.max(r[1],M),jj(t.a[1],n.c+e.b+r[0]-(r[1]-M)/2,r[1]);for(o=t.a,d=0,k=o.length;d0?(t.n.c.length-1)*t.i:0,r=new S(t.n);r.a1)for(r=si(s,0);r.b!=r.d.c;)for(n=u(ii(r),231),o=0,w=new S(n.e);w.a0&&(e[0]+=t.c,M-=e[0]),e[2]>0&&(M-=e[2]+t.c),e[1]=b.Math.max(e[1],M),$j(t.a[1],r.d+n.d+e[0]-(e[1]-M)/2,e[1]);else for(G=r.d+n.d,q=r.a-n.d-n.a,h=t.a,w=0,_=h.length;w<_;++w)s=h[w],$j(s,G,q);for(o=t.a,d=0,k=o.length;d=0&&o!=n))throw nt(new Pn(XI));for(s=0,w=0;w0||rw(s.b.d,t.b.d+t.b.a)==0&&r.b<0||rw(s.b.d+s.b.a,t.b.d)==0&&r.b>0){d=0;break}}else d=b.Math.min(d,hoe(t,s,r));d=b.Math.min(d,hle(t,o,d,r))}return d}function yI(t,e){var n,r,s,o,h,d,w;if(t.b<2)throw nt(new Pn("The vector chain must contain at least a source and a target point."));for(s=(Zn(t.b!=0),u(t.a.a.c,8)),oj(e,s.a,s.b),w=new A6((!e.a&&(e.a=new Bs(Wh,e,5)),e.a)),h=si(t,1);h.aZt(T1(h.g,h.d[0]).a)?(Zn(w.b>0),w.a.Xb(w.c=--w.b),Rm(w,h),s=!0):d.e&&d.e.gc()>0&&(o=(!d.e&&(d.e=new le),d.e).Mc(e),k=(!d.e&&(d.e=new le),d.e).Mc(n),(o||k)&&((!d.e&&(d.e=new le),d.e).Fc(h),++h.c));s||(r.c[r.c.length]=h)}function gle(t){var e,n,r;if(V3(u(K(t,(xe(),ws)),98)))for(n=new S(t.j);n.a>>0,"0"+e.toString(16)),r="\\x"+Bl(n,n.length-2,n.length)):t>=Qa?(n=(e=t>>>0,"0"+e.toString(16)),r="\\v"+Bl(n,n.length-6,n.length)):r=""+String.fromCharCode(t&Ms)}return r}function bat(t,e){var n,r,s,o,h,d,w,k,_,M;if(h=t.e,w=e.e,w==0)return t;if(h==0)return e.e==0?e:new Y3(-e.e,e.d,e.a);if(o=t.d,d=e.d,o+d==2)return n=Gs(t.a[0],po),r=Gs(e.a[0],po),h<0&&(n=D8(n)),w<0&&(r=D8(r)),KD(Qp(n,r));if(s=o!=d?o>d?1:-1:Iyt(t.a,e.a,o),s==-1)M=-w,_=h==w?Rrt(e.a,d,t.a,o):$rt(e.a,d,t.a,o);else if(M=h,h==w){if(s==0)return eb(),Y7;_=Rrt(t.a,o,e.a,d)}else _=$rt(t.a,o,e.a,d);return k=new Y3(M,_.length,_),O_(k),k}function n6t(t){var e,n,r,s,o,h;for(this.e=new le,this.a=new le,n=t.b-1;n<3;n++)u8(t,0,u(e1(t,0),8));if(t.b<4)throw nt(new Pn("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,kbn(this,t.b+this.b-1),h=new le,o=new S(this.e),e=0;e=e.o&&n.f<=e.f||e.a*.5<=n.f&&e.a*1.5>=n.f){if(h=u(Pe(e.n,e.n.c.length-1),211),h.e+h.d+n.g+s<=r&&(o=u(Pe(e.n,e.n.c.length-1),211),o.f-t.f+n.f<=t.b||t.a.c.length==1))return e3t(e,n),!0;if(e.s+n.g<=r&&(e.t+e.d+n.f+s<=t.b||t.a.c.length==1))return ue(e.b,n),d=u(Pe(e.n,e.n.c.length-1),211),ue(e.n,new f$(e.s,d.f+d.a+e.i,e.i)),B3t(u(Pe(e.n,e.n.c.length-1),211),n),cle(e,n),!0}return!1}function ble(t,e,n){var r,s,o,h;return t.ej()?(s=null,o=t.fj(),r=t.Zi(1,h=Xrt(t,e,n),n,e,o),t.bj()&&!(t.ni()&&h!=null?Si(h,n):Gt(h)===Gt(n))?(h!=null&&(s=t.dj(h,s)),s=t.cj(n,s),t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):(t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)),h):(h=Xrt(t,e,n),t.bj()&&!(t.ni()&&h!=null?Si(h,n):Gt(h)===Gt(n))&&(s=null,h!=null&&(s=t.dj(h,null)),s=t.cj(n,s),s&&s.Fi()),h)}function yC(t,e){var n,r,s,o,h,d,w,k;e%=24,t.q.getHours()!=e&&(r=new b.Date(t.q.getTime()),r.setDate(r.getDate()+1),d=t.q.getTimezoneOffset()-r.getTimezoneOffset(),d>0&&(w=d/60|0,k=d%60,s=t.q.getDate(),n=t.q.getHours(),n+w>=24&&++s,o=new b.Date(t.q.getFullYear(),t.q.getMonth(),s,e+w,t.q.getMinutes()+k,t.q.getSeconds(),t.q.getMilliseconds()),t.q.setTime(o.getTime()))),h=t.q.getTime(),t.q.setTime(h+36e5),t.q.getHours()!=e&&t.q.setTime(h)}function jmn(t,e){var n,r,s,o,h;if(mr(e,"Path-Like Graph Wrapping",1),t.b.c.length==0){or(e);return}if(s=new u5t(t),h=(s.i==null&&(s.i=nyt(s,new OF)),Zt(s.i)*s.f),n=h/(s.i==null&&(s.i=nyt(s,new OF)),Zt(s.i)),s.b>n){or(e);return}switch(u(K(t,(xe(),sht)),337).g){case 2:o=new PF;break;case 0:o=new IF;break;default:o=new FF}if(r=o.Vf(t,s),!o.Wf())switch(u(K(t,aG),338).g){case 2:r=foe(s,r);break;case 1:r=hae(s,r)}Fyn(t,s,r),or(e)}function $mn(t,e){var n,r,s,o;if(Trn(t.d,t.e),t.c.a.$b(),Zt(ve(K(e.j,(xe(),YV))))!=0||Zt(ve(K(e.j,YV)))!=0)for(n=N7,Gt(K(e.j,pb))!==Gt((j0(),bb))&&ee(e.j,(ae(),Mw),(Fn(),!0)),o=u(K(e.j,SS),19).a,s=0;ss&&++k,ue(h,(Sn(d+k,e.c.length),u(e.c[d+k],19))),w+=(Sn(d+k,e.c.length),u(e.c[d+k],19)).a-r,++n;n1&&(w>Hu(d)*Ll(d)/2||h.b==0)&&(M=new U$(B),_=Hu(d)/Ll(d),k=Iat(M,e,new v6,n,r,s,_),Fi(Kf(M.e),k),d=M,q.c[q.c.length]=M,w=0,B.c=Nt(Qn,Me,1,0,5,1)));return Rs(q,B),q}function Hmn(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W;if(n.mh(e)&&(_=(q=e,q?u(r,49).xh(q):null),_))if(W=n.bh(e,t.a),G=e.t,G>1||G==-1)if(M=u(W,69),B=u(_,69),M.dc())B.$b();else for(h=!!oo(e),o=0,d=t.a?M.Kc():M.Zh();d.Ob();)k=u(d.Pb(),56),s=u(Wv(t,k),56),s?(h?(w=B.Xc(s),w==-1?B.Xh(o,s):o!=w&&B.ji(o,s)):B.Xh(o,s),++o):t.b&&!h&&(B.Xh(o,k),++o);else W==null?_.Wb(null):(s=Wv(t,W),s==null?t.b&&!oo(e)&&_.Wb(W):_.Wb(s))}function Vmn(t,e){var n,r,s,o,h,d,w,k;for(n=new SY,s=new ar(lr(Uo(e).a.Kc(),new H));Vr(s);)if(r=u(Ir(s),17),!Wa(r)&&(d=r.c.i,m4t(d,uV))){if(k=N5t(t,d,uV,cV),k==-1)continue;n.b=b.Math.max(n.b,k),!n.a&&(n.a=new le),ue(n.a,d)}for(h=new ar(lr($s(e).a.Kc(),new H));Vr(h);)if(o=u(Ir(h),17),!Wa(o)&&(w=o.d.i,m4t(w,cV))){if(k=N5t(t,w,cV,uV),k==-1)continue;n.d=b.Math.max(n.d,k),!n.c&&(n.c=new le),ue(n.c,w)}return n}function vle(t){g7();var e,n,r,s;if(e=Cs(t),t1e6)throw nt(new pR("power of ten too big"));if(t<=Ti)return H6(hI(Ex[1],e),e);for(r=hI(Ex[1],Ti),s=r,n=Au(t-Ti),e=Cs(t%Ti);_c(n,Ti)>0;)s=t4(s,r),n=Qp(n,Ti);for(s=t4(s,hI(Ex[1],e)),s=H6(s,Ti),n=Au(t-Ti);_c(n,Ti)>0;)s=H6(s,Ti),n=Qp(n,Ti);return s=H6(s,e),s}function Gmn(t,e){var n,r,s,o,h,d,w,k,_;for(mr(e,"Hierarchical port dummy size processing",1),w=new le,_=new le,r=Zt(ve(K(t,(xe(),Z4)))),n=r*2,o=new S(t.b);o.ak&&r>k)_=d,k=Zt(e.p[d.p])+Zt(e.d[d.p])+d.o.b+d.d.a;else{s=!1,n.n&&Qb(n,"bk node placement breaks on "+d+" which should have been after "+_);break}if(!s)break}return n.n&&Qb(n,e+" is feasible: "+s),s}function Xmn(t,e,n,r){var s,o,h,d,w,k,_;for(d=-1,_=new S(t);_.a<_.c.c.length;)k=u(Q(_),112),k.g=d--,s=Mr(m$(t$(Wi(new kn(null,new Tn(k.f,16)),new DQ),new IQ)).d),o=Mr(m$(t$(Wi(new kn(null,new Tn(k.k,16)),new OQ),new Y5)).d),h=s,w=o,r||(h=Mr(m$(t$(new kn(null,new Tn(k.f,16)),new NQ)).d),w=Mr(m$(t$(new kn(null,new Tn(k.k,16)),new PQ)).d)),k.d=h,k.a=s,k.i=w,k.b=o,w==0?ks(n,k,n.c.b,n.c):h==0&&ks(e,k,e.c.b,e.c)}function Qmn(t,e,n,r){var s,o,h,d,w,k,_;if(n.d.i!=e.i){for(s=new H0(t),C0(s,(Gn(),ca)),ee(s,(ae(),Ii),n),ee(s,(xe(),ws),(va(),Kc)),r.c[r.c.length]=s,h=new Nc,tc(h,s),Us(h,(be(),Bn)),d=new Nc,tc(d,s),Us(d,Hn),_=n.d,pa(n,h),o=new zv,Bo(o,n),ee(o,Oo,null),Ba(o,d),pa(o,_),k=new xa(n.b,0);k.b=Z&&t.e[w.p]>G*t.b||St>=n*Z)&&(B.c[B.c.length]=d,d=new le,Ka(h,o),o.a.$b(),k-=_,q=b.Math.max(q,k*t.b+W),k+=St,Mt=St,St=0,_=0,W=0);return new ya(q,B)}function tyn(t){var e,n,r,s,o,h,d,w,k,_,M,B,q;for(n=(k=new m1(t.c.b).a.vc().Kc(),new y1(k));n.a.Ob();)e=(d=u(n.a.Pb(),42),u(d.dd(),149)),s=e.a,s==null&&(s=""),r=CQe(t.c,s),!r&&s.length==0&&(r=Sun(t)),r&&!ry(r.c,e,!1)&&ai(r.c,e);for(h=si(t.a,0);h.b!=h.d.c;)o=u(ii(h),478),_=Nrt(t.c,o.a),q=Nrt(t.c,o.b),_&&q&&ai(_.c,new ya(q,o.c));for(Mh(t.a),B=si(t.b,0);B.b!=B.d.c;)M=u(ii(B),478),e=_Qe(t.c,M.a),w=Nrt(t.c,M.b),e&&w&&pYe(e,w,M.c);Mh(t.b)}function eyn(t,e,n){var r,s,o,h,d,w,k,_,M,B,q;o=new zk(t),h=new Bse,s=(cD(h.g),cD(h.j),nl(h.b),cD(h.d),cD(h.i),nl(h.k),nl(h.c),nl(h.e),q=yoe(h,o,null),uce(h,o),q),e&&(k=new zk(e),d=hyn(k),D4t(s,ut(ot(pSt,1),Me,527,0,[d]))),B=!1,M=!1,n&&(k=new zk(n),xH in k.a&&(B=I0(k,xH).ge().a),Ide in k.a&&(M=I0(k,Ide).ge().a)),_=eHt(Mee(new Wk,B),M),K0n(new bZ,s,_),xH in o.a&&Qf(o,xH,null),(B||M)&&(w=new w6,dle(_,w,B,M),Qf(o,xH,w)),r=new czt(h),qcn(new t2t(s),r)}function nyn(t,e,n){var r,s,o,h,d,w,k,_,M;for(h=new qse,k=ut(ot(Sr,1),Jr,25,15,[0]),s=-1,o=0,r=0,w=0;w0){if(s<0&&_.a&&(s=w,o=k[0],r=0),s>=0){if(d=_.b,w==s&&(d-=r++,d==0))return 0;if(!yhe(e,k,_,d,h)){w=s-1,k[0]=o;continue}}else if(s=-1,!yhe(e,k,_,0,h))return 0}else{if(s=-1,Ta(_.c,0)==32){if(M=k[0],zte(e,k),k[0]>M)continue}else if(Fnn(e,_.c,k[0])){k[0]+=_.c.length;continue}return 0}return F4n(h,n)?k[0]:0}function kC(t){var e,n,r,s,o,h,d,w;if(!t.f){if(w=new _0,d=new _0,e=aA,h=e.a.zc(t,e),h==null){for(o=new nr(Po(t));o.e!=o.i.gc();)s=u(dr(o),26),gs(w,kC(s));e.a.Bc(t)!=null,e.a.gc()==0}for(r=(!t.s&&(t.s=new he(Nu,t,21,17)),new nr(t.s));r.e!=r.i.gc();)n=u(dr(r),170),_t(n,99)&&Or(d,u(n,18));ey(d),t.r=new OKt(t,(u(At(Kt((zp(),An).o),6),18),d.i),d.g),gs(w,t.r),ey(w),t.f=new H3((u(At(Kt(An.o),5),18),w.i),w.g),hl(t).b&=-3}return t.f}function ryn(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G;for(h=t.o,r=Nt(Sr,Jr,25,h,15,1),s=Nt(Sr,Jr,25,h,15,1),n=t.p,e=Nt(Sr,Jr,25,n,15,1),o=Nt(Sr,Jr,25,n,15,1),k=0;k=0&&!h4(t,_,M);)--M;s[_]=M}for(q=0;q=0&&!h4(t,d,G);)--d;o[G]=d}for(w=0;we[B]&&Br[w]&&bq(t,w,B,!1,!0)}function r6t(t){var e,n,r,s,o,h,d,w;n=Be(Fe(K(t,(n1(),Ype)))),o=t.a.c.d,d=t.a.d.d,n?(h=ld(fa(new Re(d.a,d.b),o),.5),w=ld(uc(t.e),.5),e=fa(Fi(new Re(o.a,o.b),h),w),O2t(t.d,e)):(s=Zt(ve(K(t.a,rbe))),r=t.d,o.a>=d.a?o.b>=d.b?(r.a=d.a+(o.a-d.a)/2+s,r.b=d.b+(o.b-d.b)/2-s-t.e.b):(r.a=d.a+(o.a-d.a)/2+s,r.b=o.b+(d.b-o.b)/2+s):o.b>=d.b?(r.a=o.a+(d.a-o.a)/2+s,r.b=d.b+(o.b-d.b)/2+s):(r.a=o.a+(d.a-o.a)/2+s,r.b=o.b+(d.b-o.b)/2-s-t.e.b))}function Hc(t,e){var n,r,s,o,h,d,w;if(t==null)return null;if(o=t.length,o==0)return"";for(w=Nt(Eh,wd,25,o,15,1),mmt(0,o,t.length),mmt(0,o,w.length),jYt(t,0,o,w,0),n=null,d=e,s=0,h=0;s0?Bl(n.a,0,o-1):""):t.substr(0,o-1):n?n.a:t}function yle(t){Sv(t,new y2(Ev(yv(kv(xv(new mg,C2),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new me))),we(t,C2,Mot,Ie(sEt)),we(t,C2,Dot,Ie(qut)),we(t,C2,px,Ie(Npe)),we(t,C2,ww,Ie(iEt)),we(t,C2,q6t,Ie(Rpe)),we(t,C2,H6t,Ie(Bpe)),we(t,C2,z6t,Ie(jpe)),we(t,C2,V6t,Ie(Fpe)),we(t,C2,Q6t,Ie(Ppe)),we(t,C2,Z6t,Ie(zut)),we(t,C2,J6t,Ie(rEt)),we(t,C2,txt,Ie(eV))}function i6t(t,e,n,r){var s,o,h,d,w,k,_,M,B;if(o=new H0(t),C0(o,(Gn(),Uc)),ee(o,(xe(),ws),(va(),Kc)),s=0,e){for(h=new Nc,ee(h,(ae(),Ii),e),ee(o,Ii,e.i),Us(h,(be(),Bn)),tc(h,o),B=pd(e.e),k=B,_=0,M=k.length;_0)if(n-=r.length-e,n>=0){for(s.a+="0.";n>N2.length;n-=N2.length)ZKt(s,N2);NWt(s,N2,Cs(n)),Yr(s,r.substr(e))}else n=e-n,Yr(s,Bl(r,e,Cs(n))),s.a+=".",Yr(s,OM(r,Cs(n)));else{for(Yr(s,r.substr(e));n<-N2.length;n+=N2.length)ZKt(s,N2);NWt(s,N2,Cs(-n))}return s.a}function s6t(t,e,n,r){var s,o,h,d,w,k,_,M,B;return w=fa(new Re(n.a,n.b),t),k=w.a*e.b-w.b*e.a,_=e.a*r.b-e.b*r.a,M=(w.a*r.b-w.b*r.a)/_,B=k/_,_==0?k==0?(s=Fi(new Re(n.a,n.b),ld(new Re(r.a,r.b),.5)),o=Gp(t,s),h=Gp(Fi(new Re(t.a,t.b),e),s),d=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o=0&&M<=1&&B>=0&&B<=1?Fi(new Re(t.a,t.b),ld(new Re(e.a,e.b),M)):null}function syn(t,e,n){var r,s,o,h,d;if(r=u(K(t,(xe(),Glt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),GO))?t.c.b+=(n.b-e.b)/2:r.Hc(VO)&&(t.c.b+=n.b-e.b)),u(K(t,(ae(),Wc)),21).Hc((go(),yh))&&(n.a>e.a||n.b>e.b))for(d=new S(t.a);d.ae.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),GO))?t.c.b+=(n.b-e.b)/2:r.Hc(VO)&&(t.c.b+=n.b-e.b)),u(K(t,(ae(),Wc)),21).Hc((go(),yh))&&(n.a>e.a||n.b>e.b))for(h=new S(t.a);h.ae&&(s=0,o+=_.b+n,M.c[M.c.length]=_,_=new qwt(o,n),r=new Eit(0,_.f,_,n),Y$(_,r),s=0),r.b.c.length==0||w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f?e3t(r,w):(h=new Eit(r.s+r.r+n,_.f,_,n),Y$(_,h),e3t(h,w)),s=w.i+w.g;return M.c[M.c.length]=_,M}function E4(t){var e,n,r,s,o,h,d,w;if(!t.a){if(t.o=null,w=new Azt(t),e=new xp,n=aA,d=n.a.zc(t,n),d==null){for(h=new nr(Po(t));h.e!=h.i.gc();)o=u(dr(h),26),gs(w,E4(o));n.a.Bc(t)!=null,n.a.gc()==0}for(s=(!t.s&&(t.s=new he(Nu,t,21,17)),new nr(t.s));s.e!=s.i.gc();)r=u(dr(s),170),_t(r,322)&&Or(e,u(r,34));ey(e),t.k=new IKt(t,(u(At(Kt((zp(),An).o),7),18),e.i),e.g),gs(w,t.k),ey(w),t.a=new H3((u(At(Kt(An.o),4),18),w.i),w.g),hl(t).b&=-2}return t.a}function uyn(t,e,n,r,s,o,h){var d,w,k,_,M,B;return M=!1,w=Ace(n.q,e.f+e.b-n.q.f),B=s-(n.q.e+w-h),B=(Sn(o,t.c.length),u(t.c[o],200)).e,_=(d=EC(r,B,!1),d.a),_>e.b&&!k)?!1:((k||_<=e.b)&&(k&&_>e.b?(n.d=_,dD(n,Iae(n,_))):(Qse(n.q,w),n.c=!0),dD(r,s-(n.s+n.r)),YD(r,n.q.e+n.q.d,e.f),Y$(e,r),t.c.length>o&&(tI((Sn(o,t.c.length),u(t.c[o],200)),r),(Sn(o,t.c.length),u(t.c[o],200)).a.c.length==0&&Ig(t,o)),M=!0),M)}function a6t(t,e,n,r){var s,o,h,d,w,k,_;if(_=hu(t.e.Tg(),e),s=0,o=u(t.g,119),w=null,so(),u(e,66).Oj()){for(d=0;dt.o.a&&(_=(w-t.o.a)/2,d.b=b.Math.max(d.b,_),d.c=b.Math.max(d.c,_))}}function hyn(t){var e,n,r,s,o,h,d,w;for(o=new JQt,YYe(o,(X6(),C3e)),r=(s=hit(t,Nt(Le,re,2,0,6,1)),new h6(new Cl(new get(t,s).b)));r.b0?t.i:0)>e&&w>0&&(o=0,h+=w+t.i,s=b.Math.max(s,B),r+=w+t.i,w=0,B=0,n&&(++M,ue(t.n,new f$(t.s,h,t.i))),d=0),B+=k.g+(d>0?t.i:0),w=b.Math.max(w,k.f),n&&B3t(u(Pe(t.n,M),211),k),o+=k.g+(d>0?t.i:0),++d;return s=b.Math.max(s,B),r+=w,n&&(t.r=s,t.d=r,z3t(t.j)),new ch(t.s,t.t,s,r)}function Pc(t,e,n,r,s){qd();var o,h,d,w,k,_,M,B,q;if(awt(t,"src"),awt(n,"dest"),B=dl(t),w=dl(n),Lvt((B.i&4)!=0,"srcType is not an array"),Lvt((w.i&4)!=0,"destType is not an array"),M=B.c,h=w.c,Lvt(M.i&1?M==h:(h.i&1)==0,"Array types don't match"),q=t.length,k=n.length,e<0||r<0||s<0||e+s>q||r+s>k)throw nt(new xpt);if(!(M.i&1)&&B!=w)if(_=o2(t),o=o2(n),Gt(t)===Gt(n)&&er;)ls(o,d,_[--e]);else for(d=r+s;r0&&U4t(t,e,n,r,s,!0)}function yat(){yat=X,Ege=ut(ot(Sr,1),Jr,25,15,[Oa,1162261467,AC,1220703125,362797056,1977326743,AC,387420489,Nq,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,AC,1291467969,1544804416,1838265625,60466176]),Tge=ut(ot(Sr,1),Jr,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function fyn(t){var e,n,r,s,o,h,d,w;for(s=new S(t.b);s.a=t.b.length?(o[s++]=h.b[r++],o[s++]=h.b[r++]):r>=h.b.length?(o[s++]=t.b[n++],o[s++]=t.b[n++]):h.b[r]0?t.i:0)),++e;for(Tln(t.n,w),t.d=n,t.r=r,t.g=0,t.f=0,t.e=0,t.o=bs,t.p=bs,o=new S(t.b);o.a0&&(s=(!t.n&&(t.n=new he(Yo,t,1,7)),u(At(t.n,0),137)).a,!s||Yr(Yr((e.a+=' "',e),s),'"'))),n=(!t.b&&(t.b=new En(vr,t,4,7)),!(t.b.i<=1&&(!t.c&&(t.c=new En(vr,t,5,8)),t.c.i<=1))),n?e.a+=" [":e.a+=" ",Yr(e,b2t(new cet,new nr(t.b))),n&&(e.a+="]"),e.a+=Bot,n&&(e.a+="["),Yr(e,b2t(new cet,new nr(t.c))),n&&(e.a+="]"),e.a)}function xat(t,e){var n,r,s,o,h,d,w;if(t.a){if(d=t.a.ne(),w=null,d!=null?e.a+=""+d:(h=t.a.Dj(),h!=null&&(o=ud(h,Lu(91)),o!=-1?(w=h.substr(o),e.a+=""+Bl(h==null?Mu:(In(h),h),0,o)):e.a+=""+h)),t.d&&t.d.i!=0){for(s=!0,e.a+="<",r=new nr(t.d);r.e!=r.i.gc();)n=u(dr(r),87),s?s=!1:e.a+=Xa,xat(n,e);e.a+=">"}w!=null&&(e.a+=""+w)}else t.e?(d=t.e.zb,d!=null&&(e.a+=""+d)):(e.a+="?",t.b?(e.a+=" super ",xat(t.b,e)):t.f&&(e.a+=" extends ",xat(t.f,e)))}function pyn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn;for(Qt=t.c,ce=e.c,n=Go(Qt.a,t,0),r=Go(ce.a,e,0),St=u(iw(t,(ho(),al)).Kc().Pb(),11),Qe=u(iw(t,su).Kc().Pb(),11),jt=u(iw(e,al).Kc().Pb(),11),Rn=u(iw(e,su).Kc().Pb(),11),bt=pd(St.e),_e=pd(Qe.g),Mt=pd(jt.e),We=pd(Rn.g),oy(t,r,ce),h=Mt,_=0,G=h.length;__?new n2((Yf(),Uy),n,e,k-_):k>0&&_>0&&(new n2((Yf(),Uy),e,n,0),new n2(Uy,n,e,0))),h)}function Ele(t,e){var n,r,s,o,h,d;for(h=new d2(new kg(t.f.b).a);h.b;){if(o=Yv(h),s=u(o.cd(),594),e==1){if(s.gf()!=(fo(),Z0)&&s.gf()!=Q0)continue}else if(s.gf()!=(fo(),Hh)&&s.gf()!=_f)continue;switch(r=u(u(o.dd(),46).b,81),d=u(u(o.dd(),46).a,189),n=d.c,s.gf().g){case 2:r.g.c=t.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=t.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function byn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W;for(d=Nt(Sr,Jr,25,e.b.c.length,15,1),k=Nt(rlt,oe,267,e.b.c.length,0,1),w=Nt(o0,Gg,10,e.b.c.length,0,1),M=t.a,B=0,q=M.length;B0&&w[r]&&(G=U3(t.b,w[r],s)),W=b.Math.max(W,s.c.c.b+G);for(o=new S(_.e);o.a1)throw nt(new Pn(eO));w||(o=Yd(e,r.Kc().Pb()),h.Fc(o))}return vyt(t,B4t(t,e,n),h)}function myn(t,e){var n,r,s,o;for(non(e.b.j),ys(xu(new kn(null,new Tn(e.d,16)),new zX),new qX),o=new S(e.d);o.at.o.b||(n=rc(t,Hn),d=e.d+e.a+(n.gc()-1)*h,d>t.o.b)))}function Tat(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G;if(h=t.e,w=e.e,h==0)return e;if(w==0)return t;if(o=t.d,d=e.d,o+d==2)return n=Gs(t.a[0],po),r=Gs(e.a[0],po),h==w?(_=Ra(n,r),G=Mr(_),q=Mr(zm(_,32)),q==0?new Og(h,G):new Y3(h,2,ut(ot(Sr,1),Jr,25,15,[G,q]))):KD(h<0?Qp(r,n):Qp(n,r));if(h==w)B=h,M=o>=d?$rt(t.a,o,e.a,d):$rt(e.a,d,t.a,o);else{if(s=o!=d?o>d?1:-1:Iyt(t.a,e.a,o),s==0)return eb(),Y7;s==1?(B=h,M=Rrt(t.a,o,e.a,d)):(B=w,M=Rrt(e.a,d,t.a,o))}return k=new Y3(B,M.length,M),O_(k),k}function _at(t,e,n,r,s,o,h){var d,w,k,_,M,B,q;return M=Be(Fe(K(e,(xe(),t_t)))),B=null,o==(ho(),al)&&r.c.i==n?B=r.c:o==su&&r.d.i==n&&(B=r.d),k=h,!k||!M||B?(_=(be(),ac),B?_=B.j:V3(u(K(n,ws),98))&&(_=o==al?Bn:Hn),w=Eyn(t,e,n,o,_,r),d=Frt(($a(n),r)),o==al?(Ba(d,u(Pe(w.j,0),11)),pa(d,s)):(Ba(d,s),pa(d,u(Pe(w.j,0),11))),k=new qre(r,d,w,u(K(w,(ae(),Ii)),11),o,!B)):(ue(k.e,r),q=b.Math.max(Zt(ve(K(k.d,Xg))),Zt(ve(K(r,Xg)))),ee(k.d,Xg,q)),cn(t.a,r,new Tj(k.d,e,o)),k}function Eq(t,e){var n,r,s,o,h,d,w,k,_,M;if(_=null,t.d&&(_=u(jc(t.d,e),138)),!_){if(o=t.a.Mh(),M=o.i,!t.d||$T(t.d)!=M){for(w=new Ar,t.d&&G_(w,t.d),k=w.f.c+w.g.c,d=k;d0?(q=(G-1)*n,d&&(q+=r),_&&(q+=r),q=t.b[s+1])s+=2;else if(n0)for(r=new qu(u(Pi(t.a,o),21)),pn(),aa(r,new Ni(e)),s=new xa(o.b,0);s.bQt)?(w=2,h=Ti):w==0?(w=1,h=_e):(w=0,h=_e)):(q=_e>=h||h-_e0?1:Lv(isNaN(r),isNaN(0)))>=0^(vf(Td),(b.Math.abs(d)<=Td||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Lv(isNaN(d),isNaN(0)))>=0)?b.Math.max(d,r):(vf(Td),(b.Math.abs(r)<=Td||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:Lv(isNaN(r),isNaN(0)))>0?b.Math.sqrt(d*d+r*r):-b.Math.sqrt(d*d+r*r))}function x2(t,e){var n,r,s,o,h,d;if(e){if(!t.a&&(t.a=new fR),t.e==2){hR(t.a,e);return}if(e.e==1){for(s=0;s=Qa?yo(n,t3t(r)):v8(n,r&Ms),h=new drt(10,null,0),len(t.a,h,d-1)):(n=(h.bm().length+o,new BT),yo(n,h.bm())),e.e==0?(r=e._l(),r>=Qa?yo(n,t3t(r)):v8(n,r&Ms)):yo(n,e.bm()),u(h,521).b=n.a}}function Dle(t){var e,n,r,s,o;return t.g!=null?t.g:t.a<32?(t.g=K4n(Au(t.f),Cs(t.e)),t.g):(s=Nat((!t.c&&(t.c=jD(t.f)),t.c),0),t.e==0?s:(e=(!t.c&&(t.c=jD(t.f)),t.c).e<0?2:1,n=s.length,r=-t.e+n-e,o=new Ap,o.a+=""+s,t.e>0&&r>=-6?r>=0?iD(o,n-Cs(t.e),String.fromCharCode(46)):(o.a=Bl(o.a,0,e-1)+"0."+OM(o.a,e-1),iD(o,e+1,Ih(N2,0,-Cs(r)-1))):(n-e>=1&&(iD(o,e,String.fromCharCode(46)),++n),iD(o,n,String.fromCharCode(69)),r>0&&iD(o,++n,String.fromCharCode(43)),iD(o,++n,""+E_(Au(r)))),t.g=o.a,t.g))}function Fyn(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z;if(!n.dc()){for(d=0,B=0,r=n.Kc(),G=u(r.Pb(),19).a;d1&&(w=k.mg(w,t.a,d));return w.c.length==1?u(Pe(w,w.c.length-1),220):w.c.length==2?_yn((Sn(0,w.c.length),u(w.c[0],220)),(Sn(1,w.c.length),u(w.c[1],220)),h,o):null}function Ile(t){var e,n,r,s,o,h;for(_u(t.a,new zb),n=new S(t.a);n.a=b.Math.abs(r.b)?(r.b=0,o.d+o.a>h.d&&o.dh.c&&o.c0){if(e=new Ubt(t.i,t.g),n=t.i,o=n<100?null:new Lp(n),t.ij())for(r=0;r0){for(d=t.g,k=t.i,R_(t),o=k<100?null:new Lp(k),r=0;r>13|(t.m&15)<<9,s=t.m>>4&8191,o=t.m>>17|(t.h&255)<<5,h=(t.h&1048320)>>8,d=e.l&8191,w=e.l>>13|(e.m&15)<<9,k=e.m>>4&8191,_=e.m>>17|(e.h&255)<<5,M=(e.h&1048320)>>8,We=n*d,Qe=r*d,Rn=s*d,zn=o*d,hr=h*d,w!=0&&(Qe+=n*w,Rn+=r*w,zn+=s*w,hr+=o*w),k!=0&&(Rn+=n*k,zn+=r*k,hr+=s*k),_!=0&&(zn+=n*_,hr+=r*_),M!=0&&(hr+=n*M),q=We&vl,G=(Qe&511)<<13,B=q+G,Z=We>>22,bt=Qe>>9,Mt=(Rn&262143)<<4,St=(zn&31)<<17,W=Z+bt+Mt+St,Qt=Rn>>18,ce=zn>>5,_e=(hr&4095)<<8,jt=Qt+ce+_e,W+=B>>22,B&=vl,jt+=W>>22,W&=vl,jt&=W0,cu(B,W,jt)}function Ole(t){var e,n,r,s,o,h,d;if(d=u(Pe(t.j,0),11),d.g.c.length!=0&&d.e.c.length!=0)throw nt(new Ho("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(d.g.c.length!=0){for(o=bs,n=new S(d.g);n.a4)if(t.wj(e)){if(t.rk()){if(s=u(e,49),r=s.Ug(),w=r==t.e&&(t.Dk()?s.Og(s.Vg(),t.zk())==t.Ak():-1-s.Vg()==t.aj()),t.Ek()&&!w&&!r&&s.Zg()){for(o=0;o0&&(k=t.n.a/o);break;case 2:case 4:s=t.i.o.b,s>0&&(k=t.n.b/s)}ee(t,(ae(),Iw),k)}if(w=t.o,h=t.a,r)h.a=r.a,h.b=r.b,t.d=!0;else if(e!=U1&&e!=kb&&d!=ac)switch(d.g){case 1:h.a=w.a/2;break;case 2:h.a=w.a,h.b=w.b/2;break;case 3:h.a=w.a/2,h.b=w.b;break;case 4:h.b=w.b/2}else h.a=w.a/2,h.b=w.b/2}function _C(t){var e,n,r,s,o,h,d,w,k,_;if(t.ej())if(_=t.Vi(),w=t.fj(),_>0)if(e=new iyt(t.Gi()),n=_,o=n<100?null:new Lp(n),jM(t,n,e.g),s=n==1?t.Zi(4,At(e,0),null,0,w):t.Zi(6,e,null,-1,w),t.bj()){for(r=new nr(e);r.e!=r.i.gc();)o=t.dj(dr(r),o);o?(o.Ei(s),o.Fi()):t.$i(s)}else o?(o.Ei(s),o.Fi()):t.$i(s);else jM(t,t.Vi(),t.Wi()),t.$i(t.Zi(6,(pn(),uo),null,-1,w));else if(t.bj())if(_=t.Vi(),_>0){for(d=t.Wi(),k=_,jM(t,_,d),o=k<100?null:new Lp(k),r=0;rt.d[h.p]&&(n+=nmt(t.b,o)*u(w.b,19).a,Vp(t.a,de(o)));for(;!NT(t.a);)Omt(t.b,u(P6(t.a),19).a)}return n}function Kyn(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z;for(M=new So(u(ze(t,(eq(),ESt)),8)),M.a=b.Math.max(M.a-n.b-n.c,0),M.b=b.Math.max(M.b-n.d-n.a,0),s=ve(ze(t,ySt)),(s==null||(In(s),s<=0))&&(s=1.3),d=new le,G=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));G.e!=G.i.gc();)q=u(dr(G),33),h=new lWt(q),d.c[d.c.length]=h;switch(B=u(ze(t,eft),311),B.g){case 3:Z=bmn(d,e,M.a,M.b,(k=r,In(s),k));break;case 1:Z=qmn(d,e,M.a,M.b,(_=r,In(s),_));break;default:Z=Qyn(d,e,M.a,M.b,(w=r,In(s),w))}o=new U$(Z),W=Iat(o,e,n,M.a,M.b,r,(In(s),s)),gw(t,W.a,W.b,!1,!0)}function Yyn(t,e){var n,r,s,o;n=e.b,o=new qu(n.j),s=0,r=n.j,r.c=Nt(Qn,Me,1,0,5,1),Bv(u(u2(t.b,(be(),On),(Jv(),Aw)),15),n),s=QD(o,s,new MX,r),Bv(u(u2(t.b,On,db),15),n),s=QD(o,s,new z9,r),Bv(u(u2(t.b,On,Sw),15),n),Bv(u(u2(t.b,Hn,Aw),15),n),Bv(u(u2(t.b,Hn,db),15),n),s=QD(o,s,new EF,r),Bv(u(u2(t.b,Hn,Sw),15),n),Bv(u(u2(t.b,yr,Aw),15),n),s=QD(o,s,new TF,r),Bv(u(u2(t.b,yr,db),15),n),s=QD(o,s,new _F,r),Bv(u(u2(t.b,yr,Sw),15),n),Bv(u(u2(t.b,Bn,Aw),15),n),s=QD(o,s,new OX,r),Bv(u(u2(t.b,Bn,db),15),n),Bv(u(u2(t.b,Bn,Sw),15),n)}function Xyn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W;for(mr(e,"Layer size calculation",1),_=bs,k=Ns,s=!1,d=new S(t.b);d.a.5?bt-=h*2*(G-.5):G<.5&&(bt+=o*2*(.5-G)),s=d.d.b,btZ.a-W-_&&(bt=Z.a-W-_),d.n.a=e+bt}}function Qyn(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z;for(d=Nt(ga,To,25,t.c.length,15,1),B=new Gj(new KF),G3t(B,t),k=0,W=new le;B.b.c.length!=0;)if(h=u(B.b.c.length==0?null:Pe(B.b,0),157),k>1&&Hu(h)*Ll(h)/2>d[0]){for(o=0;od[o];)++o;G=new Kd(W,0,o+1),M=new U$(G),_=Hu(h)/Ll(h),w=Iat(M,e,new v6,n,r,s,_),Fi(Kf(M.e),w),A8(h7(B,M)),q=new Kd(W,o+1,W.c.length),G3t(B,q),W.c=Nt(Qn,Me,1,0,5,1),k=0,uYt(d,d.length,0)}else Z=B.b.c.length==0?null:Pe(B.b,0),Z!=null&&uit(B,0),k>0&&(d[k]=d[k-1]),d[k]+=Hu(h)*Ll(h),++k,W.c[W.c.length]=h;return W}function Zyn(t){var e,n,r,s,o;if(r=u(K(t,(xe(),du)),163),r==(ph(),gb)){for(n=new ar(lr(Uo(t).a.Kc(),new H));Vr(n);)if(e=u(Ir(n),17),!yJt(e))throw nt(new B3($ot+ZD(t)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==Fy){for(o=new ar(lr($s(t).a.Kc(),new H));Vr(o);)if(s=u(Ir(o),17),!yJt(s))throw nt(new B3($ot+ZD(t)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function Jyn(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G;for(mr(e,"Label dummy removal",1),r=Zt(ve(K(t,(xe(),Fx)))),s=Zt(ve(K(t,Vy))),k=u(K(t,Xl),103),w=new S(t.b);w.a0&&$ae(t,d,M);for(s=new S(M);s.a>19&&(e=W8(e),w=!w),h=Zbn(e),o=!1,s=!1,r=!1,t.h==DI&&t.m==0&&t.l==0)if(s=!0,o=!0,h==-1)t=eUt((I8(),Y8t)),r=!0,w=!w;else return d=c5t(t,h),w&&mit(d),n&&(ub=cu(0,0,0)),d;else t.h>>19&&(o=!0,t=W8(t),r=!0,w=!w);return h!=-1?jcn(t,h,w,o,n):J3t(t,e)<0?(n&&(o?ub=W8(t):ub=cu(t.l,t.m,t.h)),cu(0,0,0)):Hwn(r?t:cu(t.l,t.m,t.h),e,w,o,s,n)}function Tq(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G;if(t.e&&t.c.ce.f||e.g>t.f)){for(n=0,r=0,h=t.w.a.ec().Kc();h.Ob();)s=u(h.Pb(),11),Dit(nc(ut(ot(na,1),re,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&++n;for(d=t.r.a.ec().Kc();d.Ob();)s=u(d.Pb(),11),Dit(nc(ut(ot(na,1),re,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&--n;for(w=e.w.a.ec().Kc();w.Ob();)s=u(w.Pb(),11),Dit(nc(ut(ot(na,1),re,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&++r;for(o=e.r.a.ec().Kc();o.Ob();)s=u(o.Pb(),11),Dit(nc(ut(ot(na,1),re,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&--r;n=0)return s=cln(t,e.substr(1,h-1)),_=e.substr(h+1,w-(h+1)),r5n(t,_,s)}else{if(n=-1,t7t==null&&(t7t=new RegExp("\\d")),t7t.test(String.fromCharCode(d))&&(n=avt(e,Lu(46),w-1),n>=0)){r=u(Brt(t,fee(t,e.substr(1,n-1)),!1),58),k=0;try{k=Gl(e.substr(n+1),Oa,Ti)}catch(B){throw B=rs(B),_t(B,127)?(o=B,nt(new F$(o))):nt(B)}if(k=0)return n;switch($v(Mo(t,n))){case 2:{if(un("",Bg(t,n.Hj()).ne())){if(w=ZM(Mo(t,n)),d=y8(Mo(t,n)),_=p5t(t,e,w,d),_)return _;for(s=q5t(t,e),h=0,M=s.gc();h1)throw nt(new Pn(eO));for(_=hu(t.e.Tg(),e),r=u(t.g,119),h=0;h1,k=new M1(B.b);Jo(k.a)||Jo(k.b);)w=u(Jo(k.a)?Q(k.a):Q(k.b),17),M=w.c==B?w.d:w.c,b.Math.abs(nc(ut(ot(na,1),re,8,0,[M.i.n,M.n,M.a])).b-h.b)>1&&nvn(t,w,h,o,B)}}function h3n(t){var e,n,r,s,o,h;if(s=new xa(t.e,0),r=new xa(t.a,0),t.d)for(n=0;nyct;){for(o=e,h=0;b.Math.abs(e-o)0),s.a.Xb(s.c=--s.b),Amn(t,t.b-h,o,r,s),Zn(s.b0),r.a.Xb(r.c=--r.b)}if(!t.d)for(n=0;n0?(t.f[_.p]=q/(_.e.c.length+_.g.c.length),t.c=b.Math.min(t.c,t.f[_.p]),t.b=b.Math.max(t.b,t.f[_.p])):d&&(t.f[_.p]=q)}}function d3n(t){t.b=null,t.bb=null,t.fb=null,t.qb=null,t.a=null,t.c=null,t.d=null,t.e=null,t.f=null,t.n=null,t.M=null,t.L=null,t.Q=null,t.R=null,t.K=null,t.db=null,t.eb=null,t.g=null,t.i=null,t.j=null,t.k=null,t.gb=null,t.o=null,t.p=null,t.q=null,t.r=null,t.$=null,t.ib=null,t.S=null,t.T=null,t.t=null,t.s=null,t.u=null,t.v=null,t.w=null,t.B=null,t.A=null,t.C=null,t.D=null,t.F=null,t.G=null,t.H=null,t.I=null,t.J=null,t.P=null,t.Z=null,t.U=null,t.V=null,t.W=null,t.X=null,t.Y=null,t._=null,t.ab=null,t.cb=null,t.hb=null,t.nb=null,t.lb=null,t.mb=null,t.ob=null,t.pb=null,t.jb=null,t.kb=null,t.N=!1,t.O=!1}function g3n(t,e,n){var r,s,o,h;for(mr(n,"Graph transformation ("+t.a+")",1),h=Vv(e.a),o=new S(e.b);o.a0&&(t.a=w+(q-1)*o,e.c.b+=t.a,e.f.b+=t.a)),G.a.gc()!=0&&(B=new Unt(1,o),q=g6t(B,e,G,W,e.f.b+w-e.c.b),q>0&&(e.f.b+=w+(q-1)*o))}function E7(t,e){var n,r,s,o;o=t.F,e==null?(t.F=null,X8(t,null)):(t.F=(In(e),e),r=ud(e,Lu(60)),r!=-1?(s=e.substr(0,r),ud(e,Lu(46))==-1&&!un(s,cx)&&!un(s,QC)&&!un(s,TH)&&!un(s,ZC)&&!un(s,JC)&&!un(s,tS)&&!un(s,eS)&&!un(s,nS)&&(s=x0e),n=dj(e,Lu(62)),n!=-1&&(s+=""+e.substr(n+1)),X8(t,s)):(s=e,ud(e,Lu(46))==-1&&(r=ud(e,Lu(91)),r!=-1&&(s=e.substr(0,r)),!un(s,cx)&&!un(s,QC)&&!un(s,TH)&&!un(s,ZC)&&!un(s,JC)&&!un(s,tS)&&!un(s,eS)&&!un(s,nS)?(s=x0e,r!=-1&&(s+=""+e.substr(r))):s=e),X8(t,s),s==e&&(t.F=t.D))),t.Db&4&&!(t.Db&1)&&Ci(t,new oa(t,1,5,o,e))}function b3n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St;if(W=e.b.c.length,!(W<3)){for(q=Nt(Sr,Jr,25,W,15,1),M=0,_=new S(e.b);_.a<_.c.c.length;)k=u(Q(_),29),q[M++]=k.a.c.length;for(B=new xa(e.b,2),r=1;rh)&&Vs(t.b,u(Z.b,17));++d}o=h}}}function h6t(t,e){var n;if(e==null||un(e,Mu)||e.length==0&&t.k!=(Hg(),Rx))return null;switch(t.k.g){case 1:return Oz(e,$7)?(Fn(),W7):Oz(e,Pct)?(Fn(),O2):null;case 2:try{return de(Gl(e,Oa,Ti))}catch(r){if(r=rs(r),_t(r,127))return null;throw nt(r)}case 4:try{return ly(e)}catch(r){if(r=rs(r),_t(r,127))return null;throw nt(r)}case 3:return e;case 5:return mre(t),_oe(t,e);case 6:return mre(t),Cbn(t,t.a,e);case 7:try{return n=Rpn(t),n.Jf(e),n}catch(r){if(r=rs(r),_t(r,32))return null;throw nt(r)}default:throw nt(new Ho("Invalid type set for this layout option."))}}function v3n(t){$_();var e,n,r,s,o,h,d;for(d=new Xzt,n=new S(t);n.a=d.b.c)&&(d.b=e),(!d.c||e.c<=d.c.c)&&(d.d=d.c,d.c=e),(!d.e||e.d>=d.e.d)&&(d.e=e),(!d.f||e.d<=d.f.d)&&(d.f=e);return r=new Bz((U8(),Cw)),aD(t,Sbe,new Cl(ut(ot(gO,1),Me,369,0,[r]))),h=new Bz(Iy),aD(t,Cbe,new Cl(ut(ot(gO,1),Me,369,0,[h]))),s=new Bz(Dy),aD(t,_be,new Cl(ut(ot(gO,1),Me,369,0,[s]))),o=new Bz($4),aD(t,Tbe,new Cl(ut(ot(gO,1),Me,369,0,[o]))),Qst(r.c,Cw),Qst(s.c,Dy),Qst(o.c,$4),Qst(h.c,Iy),d.a.c=Nt(Qn,Me,1,0,5,1),Rs(d.a,r.c),Rs(d.a,c2(s.c)),Rs(d.a,o.c),Rs(d.a,c2(h.c)),d}function f6t(t){var e;switch(t.d){case 1:{if(t.hj())return t.o!=-2;break}case 2:{if(t.hj())return t.o==-2;break}case 3:case 5:case 4:case 6:case 7:return t.o>-2;default:return!1}switch(e=t.gj(),t.p){case 0:return e!=null&&Be(Fe(e))!=a_(t.k,0);case 1:return e!=null&&u(e,217).a!=Mr(t.k)<<24>>24;case 2:return e!=null&&u(e,172).a!=(Mr(t.k)&Ms);case 6:return e!=null&&a_(u(e,162).a,t.k);case 5:return e!=null&&u(e,19).a!=Mr(t.k);case 7:return e!=null&&u(e,184).a!=Mr(t.k)<<16>>16;case 3:return e!=null&&Zt(ve(e))!=t.j;case 4:return e!=null&&u(e,155).a!=t.j;default:return e==null?t.n!=null:!Si(e,t.n)}}function EI(t,e,n){var r,s,o,h;return t.Fk()&&t.Ek()&&(h=Rnt(t,u(n,56)),Gt(h)!==Gt(n))?(t.Oi(e),t.Ui(e,dte(t,e,h)),t.rk()&&(o=(s=u(n,49),t.Dk()?t.Bk()?s.ih(t.b,oo(u(wn(ku(t.b),t.aj()),18)).n,u(wn(ku(t.b),t.aj()).Yj(),26).Bj(),null):s.ih(t.b,es(s.Tg(),oo(u(wn(ku(t.b),t.aj()),18))),null,null):s.ih(t.b,-1-t.aj(),null,null)),!u(h,49).eh()&&(o=(r=u(h,49),t.Dk()?t.Bk()?r.gh(t.b,oo(u(wn(ku(t.b),t.aj()),18)).n,u(wn(ku(t.b),t.aj()).Yj(),26).Bj(),o):r.gh(t.b,es(r.Tg(),oo(u(wn(ku(t.b),t.aj()),18))),null,o):r.gh(t.b,-1-t.aj(),null,o))),o&&o.Fi()),Sl(t.b)&&t.$i(t.Zi(9,n,h,e,!1)),h):n}function Ble(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;for(_=Zt(ve(K(t,(xe(),Fw)))),r=Zt(ve(K(t,h_t))),B=new tl,ee(B,Fw,_+r),k=e,bt=k.d,W=k.c.i,Mt=k.d.i,Z=Qbt(W.c),St=Qbt(Mt.c),s=new le,M=Z;M<=St;M++)d=new H0(t),C0(d,(Gn(),ca)),ee(d,(ae(),Ii),k),ee(d,ws,(va(),Kc)),ee(d,sG,B),q=u(Pe(t.b,M),29),M==Z?oy(d,q.a.c.length-n,q):Lo(d,q),jt=Zt(ve(K(k,Xg))),jt<0&&(jt=0,ee(k,Xg,jt)),d.o.b=jt,G=b.Math.floor(jt/2),h=new Nc,Us(h,(be(),Bn)),tc(h,d),h.n.b=G,w=new Nc,Us(w,Hn),tc(w,d),w.n.b=G,pa(k,h),o=new zv,Bo(o,k),ee(o,Oo,null),Ba(o,w),pa(o,bt),y1n(d,k,o),s.c[s.c.length]=o,k=o;return s}function Aat(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St;for(w=u(qg(t,(be(),Bn)).Kc().Pb(),11).e,q=u(qg(t,Hn).Kc().Pb(),11).g,d=w.c.length,St=S1(u(Pe(t.j,0),11));d-- >0;){for(W=(Sn(0,w.c.length),u(w.c[0],17)),s=(Sn(0,q.c.length),u(q.c[0],17)),Mt=s.d.e,o=Go(Mt,s,0),Tin(W,s.d,o),Ba(s,null),pa(s,null),G=W.a,e&&ai(G,new So(St)),r=si(s.a,0);r.b!=r.d.c;)n=u(ii(r),8),ai(G,new So(n));for(bt=W.b,B=new S(s.b);B.a0&&(h=b.Math.max(h,hne(t.C.b+r.d.b,s))),_=r,M=s,B=o;t.C&&t.C.c>0&&(q=B+t.C.c,k&&(q+=_.d.c),h=b.Math.max(h,(E1(),vf(R1),b.Math.abs(M-1)<=R1||M==1||isNaN(M)&&isNaN(1)?0:q/(1-M)))),n.n.b=0,n.a.a=h}function jle(t,e){var n,r,s,o,h,d,w,k,_,M,B,q;if(n=u(xo(t.b,e),124),w=u(u(Pi(t.r,e),21),84),w.dc()){n.n.d=0,n.n.a=0;return}for(k=t.u.Hc((il(),tg)),h=0,t.A.Hc((Nl(),W2))&&wue(t,e),d=w.Kc(),_=null,B=0,M=0;d.Ob();)r=u(d.Pb(),111),o=Zt(ve(r.b.We((gj(),ZH)))),s=r.b.rf().b,_?(q=M+_.d.a+t.w+r.d.d,h=b.Math.max(h,(E1(),vf(R1),b.Math.abs(B-o)<=R1||B==o||isNaN(B)&&isNaN(o)?0:q/(o-B)))):t.C&&t.C.d>0&&(h=b.Math.max(h,hne(t.C.d+r.d.d,o))),_=r,B=o,M=s;t.C&&t.C.a>0&&(q=M+t.C.a,k&&(q+=_.d.a),h=b.Math.max(h,(E1(),vf(R1),b.Math.abs(B-1)<=R1||B==1||isNaN(B)&&isNaN(1)?0:q/(1-B)))),n.n.d=0,n.a.b=h}function $le(t,e,n){var r,s,o,h,d,w;for(this.g=t,d=e.d.length,w=n.d.length,this.d=Nt(o0,Gg,10,d+w,0,1),h=0;h0?eit(this,this.f/this.a):T1(e.g,e.d[0]).a!=null&&T1(n.g,n.d[0]).a!=null?eit(this,(Zt(T1(e.g,e.d[0]).a)+Zt(T1(n.g,n.d[0]).a))/2):T1(e.g,e.d[0]).a!=null?eit(this,T1(e.g,e.d[0]).a):T1(n.g,n.d[0]).a!=null&&eit(this,T1(n.g,n.d[0]).a)}function w3n(t,e){var n,r,s,o,h,d,w,k,_,M;for(t.a=new KYt(Won(WS)),r=new S(e.a);r.a=1&&(Z-h>0&&M>=0?(w.n.a+=W,w.n.b+=o*h):Z-h<0&&_>=0&&(w.n.a+=W*Z,w.n.b+=o));t.o.a=e.a,t.o.b=e.b,ee(t,(xe(),R2),(Nl(),r=u(Wf(tA),9),new oh(r,u(ff(r,r.length),9),0)))}function k3n(t,e,n,r,s,o){var h;if(!(e==null||!Git(e,UAt,WAt)))throw nt(new Pn("invalid scheme: "+e));if(!t&&!(n!=null&&ud(n,Lu(35))==-1&&n.length>0&&($r(0,n.length),n.charCodeAt(0)!=47)))throw nt(new Pn("invalid opaquePart: "+n));if(t&&!(e!=null&&pM(rU,e.toLowerCase()))&&!(n==null||!Git(n,iA,sA)))throw nt(new Pn(c0e+n));if(t&&e!=null&&pM(rU,e.toLowerCase())&&!pdn(n))throw nt(new Pn(c0e+n));if(!mln(r))throw nt(new Pn("invalid device: "+r));if(!fun(s))throw h=s==null?"invalid segments: null":"invalid segment: "+cun(s),nt(new Pn(h));if(!(o==null||ud(o,Lu(35))==-1))throw nt(new Pn("invalid query: "+o))}function E3n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt;for(mr(e,"Calculate Graph Size",1),e.n&&t&&gf(e,pf(t),(Ol(),th)),d=N7,w=N7,o=Fkt,h=Fkt,M=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));M.e!=M.i.gc();)k=u(dr(M),33),G=k.i,W=k.j,bt=k.g,r=k.f,s=u(ze(k,(di(),KO)),142),d=b.Math.min(d,G-s.b),w=b.Math.min(w,W-s.d),o=b.Math.max(o,G+bt+s.c),h=b.Math.max(h,W+r+s.a);for(q=u(ze(t,(di(),V2)),116),B=new Re(d-q.b,w-q.d),_=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));_.e!=_.i.gc();)k=u(dr(_),33),Cu(k,k.i-B.a),Su(k,k.j-B.b);Z=o-d+(q.b+q.c),n=h-w+(q.d+q.a),Qv(t,Z),Xv(t,n),e.n&&t&&gf(e,pf(t),(Ol(),th))}function Hle(t){var e,n,r,s,o,h,d,w,k,_;for(r=new le,h=new S(t.e.a);h.a0){Rz(t,n,0),n.a+=String.fromCharCode(r),s=chn(e,o),Rz(t,n,s),o+=s-1;continue}r==39?o+11)for(W=Nt(Sr,Jr,25,t.b.b.c.length,15,1),M=0,k=new S(t.b.b);k.a=d&&s<=w)d<=s&&o<=w?(n[_++]=s,n[_++]=o,r+=2):d<=s?(n[_++]=s,n[_++]=w,t.b[r]=w+1,h+=2):o<=w?(n[_++]=d,n[_++]=o,r+=2):(n[_++]=d,n[_++]=w,t.b[r]=w+1);else if(wrb)&&d<10);Jpt(t.c,new E3),Vle(t),fen(t.c),y3n(t.f)}function S3n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z;if(Be(Fe(K(n,(xe(),$y)))))for(d=new S(n.j);d.a=2){for(w=si(n,0),h=u(ii(w),8),d=u(ii(w),8);d.a0&&PD(k,!0,(fo(),_f)),d.k==(Gn(),Is)&&vXt(k),Ai(t.f,d,e)}}function D3n(t,e,n){var r,s,o,h,d,w,k,_,M,B;switch(mr(n,"Node promotion heuristic",1),t.g=e,B4n(t),t.q=u(K(e,(xe(),Zlt)),260),_=u(K(t.g,QTt),19).a,o=new iF,t.q.g){case 2:case 1:k7(t,o);break;case 3:for(t.q=(m4(),fG),k7(t,o),w=0,d=new S(t.a);d.at.j&&(t.q=MO,k7(t,o));break;case 4:for(t.q=(m4(),fG),k7(t,o),k=0,s=new S(t.b);s.at.k&&(t.q=DO,k7(t,o));break;case 6:B=Cs(b.Math.ceil(t.f.length*_/100)),k7(t,new Tp(B));break;case 5:M=Cs(b.Math.ceil(t.d*_/100)),k7(t,new Uf(M));break;default:k7(t,o)}Tvn(t,e),or(n)}function Ule(t,e,n){var r,s,o,h;this.j=t,this.e=b4t(t),this.o=this.j.e,this.i=!!this.o,this.p=this.i?u(Pe(n,$a(this.o).p),214):null,s=u(K(t,(ae(),Wc)),21),this.g=s.Hc((go(),yh)),this.b=new le,this.d=new gie(this.e),h=u(K(this.j,Ix),230),this.q=ucn(e,h,this.e),this.k=new pQt(this),o=L1(ut(ot(Ybe,1),Me,225,0,[this,this.d,this.k,this.q])),e==(Zv(),OO)&&!Be(Fe(K(t,(xe(),By))))?(r=new w4t(this.e),o.c[o.c.length]=r,this.c=new Wwt(r,h,u(this.q,402))):e==OO&&Be(Fe(K(t,(xe(),By))))?(r=new w4t(this.e),o.c[o.c.length]=r,this.c=new Qee(r,h,u(this.q,402))):this.c=new YVt(e,this),ue(o,this.c),Sle(o,this.e),this.s=d5n(this.k)}function I3n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;for(M=u(lj((h=si(new Sp(e).a.d,0),new p6(h))),86),G=M?u(K(M,(mc(),Lht)),86):null,s=1;M&&G;){for(w=0,jt=0,n=M,r=G,d=0;d=t.i?(++t.i,ue(t.a,de(1)),ue(t.b,_)):(r=t.c[e.p][1],lh(t.a,k,de(u(Pe(t.a,k),19).a+1-r)),lh(t.b,k,Zt(ve(Pe(t.b,k)))+_-r*t.e)),(t.q==(m4(),MO)&&(u(Pe(t.a,k),19).a>t.j||u(Pe(t.a,k-1),19).a>t.j)||t.q==DO&&(Zt(ve(Pe(t.b,k)))>t.k||Zt(ve(Pe(t.b,k-1)))>t.k))&&(w=!1),h=new ar(lr(Uo(e).a.Kc(),new H));Vr(h);)o=u(Ir(h),17),d=o.c.i,t.f[d.p]==k&&(M=Wle(t,d),s=s+u(M.a,19).a,w=w&&Be(Fe(M.b)));return t.f[e.p]=k,s=s+t.c[e.p][0],new ya(de(s),(Fn(),!!w))}function g6t(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z,bt;for(M=new Ar,h=new le,poe(t,n,t.d.fg(),h,M),poe(t,r,t.d.gg(),h,M),t.b=.2*(W=ice(ec(new kn(null,new Tn(h,16)),new UQ)),Z=ice(ec(new kn(null,new Tn(h,16)),new WQ)),b.Math.min(W,Z)),o=0,d=0;d=2&&(bt=Cce(h,!0,B),!t.e&&(t.e=new M$t(t)),lhn(t.e,bt,h,t.b)),aae(h,B),K3n(h),q=-1,_=new S(h);_.a<_.c.c.length;)k=u(Q(_),112),!(b.Math.abs(k.s-k.c)d)}function N3n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W;for(n=u(K(t,(xe(),ws)),98),h=t.f,o=t.d,d=h.a+o.b+o.c,w=0-o.d-t.c.b,_=h.b+o.d+o.a-t.c.b,k=new le,M=new le,s=new S(e);s.a0),u(_.a.Xb(_.c=--_.b),17));o!=r&&_.b>0;)t.a[o.p]=!0,t.a[r.p]=!0,o=(Zn(_.b>0),u(_.a.Xb(_.c=--_.b),17));_.b>0&&Dl(_)}}function Qle(t,e,n){var r,s,o,h,d,w,k,_,M;if(t.a!=e.Aj())throw nt(new Pn(z7+e.ne()+kw));if(r=Bg((Gu(),Sa),e).$k(),r)return r.Aj().Nh().Ih(r,n);if(h=Bg(Sa,e).al(),h){if(n==null)return null;if(d=u(n,15),d.dc())return"";for(M=new _g,o=d.Kc();o.Ob();)s=o.Pb(),yo(M,h.Aj().Nh().Ih(h,s)),M.a+=" ";return Yet(M,M.a.length-1)}if(_=Bg(Sa,e).bl(),!_.dc()){for(k=_.Kc();k.Ob();)if(w=u(k.Pb(),148),w.wj(n))try{if(M=w.Aj().Nh().Ih(w,n),M!=null)return M}catch(B){if(B=rs(B),!_t(B,102))throw nt(B)}throw nt(new Pn("Invalid value: '"+n+"' for datatype :"+e.ne()))}return u(e,834).Fj(),n==null?null:_t(n,172)?""+u(n,172).a:dl(n)==HH?_Ut(rA[0],u(n,199)):Wo(n)}function $3n(t){var e,n,r,s,o,h,d,w,k,_;for(k=new cs,d=new cs,o=new S(t);o.a-1){for(s=si(d,0);s.b!=s.d.c;)r=u(ii(s),128),r.v=h;for(;d.b!=0;)for(r=u(kst(d,0),128),n=new S(r.i);n.a0&&(n+=w.n.a+w.o.a/2,++M),G=new S(w.j);G.a0&&(n/=M),bt=Nt(ga,To,25,r.a.c.length,15,1),d=0,k=new S(r.a);k.a=d&&s<=w)d<=s&&o<=w?r+=2:d<=s?(t.b[r]=w+1,h+=2):o<=w?(n[_++]=s,n[_++]=d-1,r+=2):(n[_++]=s,n[_++]=d-1,t.b[r]=w+1,h+=2);else if(w0?s-=864e5:s+=864e5,w=new $2t(Ra(Au(e.q.getTime()),s))),_=new Lm,k=t.a.length,o=0;o=97&&r<=122||r>=65&&r<=90){for(h=o+1;h=k)throw nt(new Pn("Missing trailing '"));h+10&&n.c==0&&(!e&&(e=new le),e.c[e.c.length]=n);if(e)for(;e.c.length!=0;){if(n=u(Ig(e,0),233),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new le),new S(n.b));o.aGo(t,n,0))return new ya(s,n)}else if(Zt(T1(s.g,s.d[0]).a)>Zt(T1(n.g,n.d[0]).a))return new ya(s,n)}for(d=(!n.e&&(n.e=new le),n.e).Kc();d.Ob();)h=u(d.Pb(),233),w=(!h.b&&(h.b=new le),h.b),Um(0,w.c.length),WT(w.c,0,n),h.c==w.c.length&&(e.c[e.c.length]=h)}return null}function nhe(t,e){var n,r,s,o,h,d,w,k,_;if(t==null)return Mu;if(w=e.a.zc(t,e),w!=null)return"[...]";for(n=new l2(Xa,"[","]"),s=t,o=0,h=s.length;o=14&&_<=16))?e.a._b(r)?(n.a?Yr(n.a,n.b):n.a=new Fl(n.d),c_(n.a,"[...]")):(d=o2(r),k=new y_(e),P0(n,nhe(d,k))):_t(r,177)?P0(n,Bgn(u(r,177))):_t(r,190)?P0(n,Cdn(u(r,190))):_t(r,195)?P0(n,F0n(u(r,195))):_t(r,2012)?P0(n,Sdn(u(r,2012))):_t(r,48)?P0(n,Fgn(u(r,48))):_t(r,364)?P0(n,Xgn(u(r,364))):_t(r,832)?P0(n,Pgn(u(r,832))):_t(r,104)&&P0(n,Ngn(u(r,104))):P0(n,r==null?Mu:Wo(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function rhe(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St;for(d=y4(e,!1,!1),bt=sI(d),r&&(bt=BD(bt)),St=Zt(ve(ze(e,(iC(),qut)))),Z=(Zn(bt.b!=0),u(bt.a.a.c,8)),M=u(e1(bt,1),8),bt.b>2?(_=new le,Rs(_,new Kd(bt,1,bt.b)),o=Fhe(_,St+t.a),Mt=new Wst(o),Bo(Mt,e),n.c[n.c.length]=Mt):r?Mt=u(tr(t.b,Zd(e)),266):Mt=u(tr(t.b,Zp(e)),266),w=Zd(e),r&&(w=Zp(e)),h=ngn(Z,w),k=St+t.a,h.a?(k+=b.Math.abs(Z.b-M.b),W=new Re(M.a,(M.b+Z.b)/2)):(k+=b.Math.abs(Z.a-M.a),W=new Re((M.a+Z.a)/2,M.b)),r?Ai(t.d,e,new j3t(Mt,h,W,k)):Ai(t.c,e,new j3t(Mt,h,W,k)),Ai(t.b,e,Mt),G=(!e.n&&(e.n=new he(Yo,e,1,7)),e.n),q=new nr(G);q.e!=q.i.gc();)B=u(dr(q),137),s=bI(t,B,!0,0,0),n.c[n.c.length]=s}function K3n(t){var e,n,r,s,o,h,d,w,k,_;for(k=new le,d=new le,h=new S(t);h.a-1){for(o=new S(d);o.a0)&&(YB(w,b.Math.min(w.o,s.o-1)),xT(w,w.i-1),w.i==0&&(d.c[d.c.length]=w))}}function T7(t,e,n){var r,s,o,h,d,w,k;if(k=t.c,!e&&(e=QAt),t.c=e,t.Db&4&&!(t.Db&1)&&(w=new oa(t,1,2,k,t.c),n?n.Ei(w):n=w),k!=e){if(_t(t.Cb,284))t.Db>>16==-10?n=u(t.Cb,284).nk(e,n):t.Db>>16==-15&&(!e&&(e=(ln(),K1)),!k&&(k=(ln(),K1)),t.Cb.nh()&&(w=new F0(t.Cb,1,13,k,e,$g(fl(u(t.Cb,59)),t),!1),n?n.Ei(w):n=w));else if(_t(t.Cb,88))t.Db>>16==-23&&(_t(e,88)||(e=(ln(),Qh)),_t(k,88)||(k=(ln(),Qh)),t.Cb.nh()&&(w=new F0(t.Cb,1,10,k,e,$g(Oc(u(t.Cb,26)),t),!1),n?n.Ei(w):n=w));else if(_t(t.Cb,444))for(d=u(t.Cb,836),h=(!d.b&&(d.b=new cR(new Qtt)),d.b),o=(r=new d2(new kg(h.a).a),new uR(r));o.a.b;)s=u(Yv(o.a).cd(),87),n=T7(s,oq(s,d),n)}return n}function Y3n(t,e){var n,r,s,o,h,d,w,k,_,M,B;for(h=Be(Fe(ze(t,(xe(),$y)))),B=u(ze(t,qy),21),w=!1,k=!1,M=new nr((!t.c&&(t.c=new he(yl,t,9,9)),t.c));M.e!=M.i.gc()&&(!w||!k);){for(o=u(dr(M),118),d=0,s=jp(I1(ut(ot($1,1),Me,20,0,[(!o.d&&(o.d=new En(ra,o,8,5)),o.d),(!o.e&&(o.e=new En(ra,o,7,4)),o.e)])));Vr(s)&&(r=u(Ir(s),79),_=h&&uw(r)&&Be(Fe(ze(r,B2))),n=Nle((!r.b&&(r.b=new En(vr,r,4,7)),r.b),o)?t==hs(Ro(u(At((!r.c&&(r.c=new En(vr,r,5,8)),r.c),0),82))):t==hs(Ro(u(At((!r.b&&(r.b=new En(vr,r,4,7)),r.b),0),82))),!((_||n)&&(++d,d>1))););(d>0||B.Hc((il(),tg))&&(!o.n&&(o.n=new he(Yo,o,1,7)),o.n).i>0)&&(w=!0),d>1&&(k=!0)}w&&e.Fc((go(),yh)),k&&e.Fc((go(),vS))}function ihe(t){var e,n,r,s,o,h,d,w,k,_,M,B;if(B=u(ze(t,(di(),H2)),21),B.dc())return null;if(d=0,h=0,B.Hc((Nl(),nN))){for(_=u(ze(t,US),98),r=2,n=2,s=2,o=2,e=hs(t)?u(ze(hs(t),jw),103):u(ze(t,jw),103),k=new nr((!t.c&&(t.c=new he(yl,t,9,9)),t.c));k.e!=k.i.gc();)if(w=u(dr(k),118),M=u(ze(w,c5),61),M==(be(),ac)&&(M=J5t(w,e),Eo(w,c5,M)),_==(va(),Kc))switch(M.g){case 1:r=b.Math.max(r,w.i+w.g);break;case 2:n=b.Math.max(n,w.j+w.f);break;case 3:s=b.Math.max(s,w.i+w.g);break;case 4:o=b.Math.max(o,w.j+w.f)}else switch(M.g){case 1:r+=w.g+2;break;case 2:n+=w.f+2;break;case 3:s+=w.g+2;break;case 4:o+=w.f+2}d=b.Math.max(r,s),h=b.Math.max(n,o)}return gw(t,d,h,!0,!0)}function Lat(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;for(Mt=u($l(V$(Wi(new kn(null,new Tn(e.d,16)),new Vk(n)),new sM(n)),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)]))),15),M=Ti,_=Oa,w=new S(e.b.j);w.a0,k?k&&(B=bt.p,h?++B:--B,M=u(Pe(bt.c.a,B),10),r=Yne(M),q=!(Jst(r,ce,n[0])||SYt(r,ce,n[0]))):q=!0),G=!1,Qt=e.D.i,Qt&&Qt.c&&d.e&&(_=h&&Qt.p>0||!h&&Qt.p0&&(e.a+=Xa),_q(u(dr(d),160),e);for(e.a+=Bot,w=new A6((!r.c&&(r.c=new En(vr,r,5,8)),r.c));w.e!=w.i.gc();)w.e>0&&(e.a+=Xa),_q(u(dr(w),160),e);e.a+=")"}}function e4n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q;if(o=u(K(t,(ae(),Ii)),79),!!o){for(r=t.a,s=new So(n),Fi(s,G1n(t)),H8(t.d.i,t.c.i)?(B=t.c,M=nc(ut(ot(na,1),re,8,0,[B.n,B.a])),fa(M,n)):M=S1(t.c),ks(r,M,r.a,r.a.a),q=S1(t.d),K(t,qlt)!=null&&Fi(q,u(K(t,qlt),8)),ks(r,q,r.c.b,r.c),Jm(r,s),h=y4(o,!0,!0),Z$(h,u(At((!o.b&&(o.b=new En(vr,o,4,7)),o.b),0),82)),J$(h,u(At((!o.c&&(o.c=new En(vr,o,5,8)),o.c),0),82)),yI(r,h),_=new S(t.b);_.a<_.c.c.length;)k=u(Q(_),70),d=u(K(k,Ii),137),Qv(d,k.o.a),Xv(d,k.o.b),k1(d,k.n.a+s.a,k.n.b+s.b),Eo(d,(Y6(),olt),Fe(K(k,olt)));w=u(K(t,(xe(),Oo)),74),w?(Jm(w,s),Eo(o,Oo,w)):Eo(o,Oo,null),e==(q0(),qx)?Eo(o,X0,qx):Eo(o,X0,null)}}function n4n(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt;for(q=e.c.length,B=0,M=new S(t.b);M.a=0){for(w=null,d=new xa(_.a,k+1);d.bh?1:Lv(isNaN(0),isNaN(h)))<0&&(vf(Td),(b.Math.abs(h-1)<=Td||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Lv(isNaN(h),isNaN(1)))<0)&&(vf(Td),(b.Math.abs(0-d)<=Td||d==0||isNaN(0)&&isNaN(d)?0:0d?1:Lv(isNaN(0),isNaN(d)))<0)&&(vf(Td),(b.Math.abs(d-1)<=Td||d==1||isNaN(d)&&isNaN(1)?0:d<1?-1:d>1?1:Lv(isNaN(d),isNaN(1)))<0)),o)}function r4n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce;for(M=new vwt(new Dt(t));M.b!=M.c.a.d;)for(_=ute(M),d=u(_.d,56),e=u(_.e,56),h=d.Tg(),W=0,jt=(h.i==null&&bd(h),h.i).length;W=0&&W=k.c.c.length?_=Qwt((Gn(),qs),ca):_=Qwt((Gn(),ca),ca),_*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(_-o)),h=n.b.g,n.b.g=b.Math.max(h,h+(_-h)),s=e}}function a4n(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt;for(Qt=_Kt(t),_=new le,d=t.c.length,M=d-1,B=d+1;Qt.a.c!=0;){for(;n.b!=0;)St=(Zn(n.b!=0),u(fh(n,n.a.a),112)),D_(Qt.a,St)!=null,St.g=M--,t6t(St,e,n,r);for(;e.b!=0;)jt=(Zn(e.b!=0),u(fh(e,e.a.a),112)),D_(Qt.a,jt)!=null,jt.g=B++,t6t(jt,e,n,r);for(k=Oa,bt=(h=new v_(new g_(new y(Qt.a).a).b),new g(h));mM(bt.a.a);){if(Z=(o=wj(bt.a),u(o.cd(),112)),!r&&Z.b>0&&Z.a<=0){_.c=Nt(Qn,Me,1,0,5,1),_.c[_.c.length]=Z;break}W=Z.i-Z.d,W>=k&&(W>k&&(_.c=Nt(Qn,Me,1,0,5,1),k=W),_.c[_.c.length]=Z)}_.c.length!=0&&(w=u(Pe(_,zz(s,_.c.length)),112),D_(Qt.a,w)!=null,w.g=B++,t6t(w,e,n,r),_.c=Nt(Qn,Me,1,0,5,1))}for(Mt=t.c.length+1,G=new S(t);G.a0&&(B.d+=_.n.d,B.d+=_.d),B.a>0&&(B.a+=_.n.a,B.a+=_.d),B.b>0&&(B.b+=_.n.b,B.b+=_.d),B.c>0&&(B.c+=_.n.c,B.c+=_.d),B}function ahe(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G;for(B=n.d,M=n.c,o=new Re(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),h=o.b,k=new S(t.a);k.a0&&(t.c[e.c.p][e.p].d+=pl(t.i,24)*PI*.07000000029802322-.03500000014901161,t.c[e.c.p][e.p].a=t.c[e.c.p][e.p].d/t.c[e.c.p][e.p].b)}}function g4n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z;for(G=new S(t);G.ar.d,r.d=b.Math.max(r.d,e),d&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+s);break;case 3:n=e>r.a,r.a=b.Math.max(r.a,e),d&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+s);break;case 2:n=e>r.c,r.c=b.Math.max(r.c,e),d&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+s);break;case 4:n=e>r.b,r.b=b.Math.max(r.b,e),d&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+s)}}}function w4n(t){var e,n,r,s,o,h,d,w,k,_,M;for(k=new S(t);k.a0||_.j==Bn&&_.e.c.length-_.g.c.length<0)){e=!1;break}for(s=new S(_.g);s.a=k&&Qt>=Z&&(B+=G.n.b+W.n.b+W.a.b-jt,++d));if(n)for(h=new S(Mt.e);h.a=k&&Qt>=Z&&(B+=G.n.b+W.n.b+W.a.b-jt,++d))}d>0&&(ce+=B/d,++q)}q>0?(e.a=s*ce/q,e.g=q):(e.a=0,e.g=0)}function y4n(t,e){var n,r,s,o,h,d,w,k,_,M,B;for(s=new S(t.a.b);s.aNs||e.o==z2&&_0&&Cu(bt,jt*ce),Qt>0&&Su(bt,Qt*_e);for(U_(t.b,new gm),e=new le,d=new d2(new kg(t.c).a);d.b;)h=Yv(d),r=u(h.cd(),79),n=u(h.dd(),395).a,s=y4(r,!1,!1),M=oae(Zd(r),sI(s),n),yI(M,s),St=mae(r),St&&Go(e,St,0)==-1&&(e.c[e.c.length]=St,_Xt(St,(Zn(M.b!=0),u(M.a.a.c,8)),n));for(Z=new d2(new kg(t.d).a);Z.b;)W=Yv(Z),r=u(W.cd(),79),n=u(W.dd(),395).a,s=y4(r,!1,!1),M=oae(Zp(r),BD(sI(s)),n),M=BD(M),yI(M,s),St=yae(r),St&&Go(e,St,0)==-1&&(e.c[e.c.length]=St,_Xt(St,(Zn(M.b!=0),u(M.c.b.c,8)),n))}function uhe(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e;if(n.c.length!=0){for(q=new le,B=new S(n);B.a1)for(q=new c6t(G,St,r),_a(St,new nGt(t,q)),h.c[h.c.length]=q,M=St.a.ec().Kc();M.Ob();)_=u(M.Pb(),46),Eu(o,_.b);if(d.a.gc()>1)for(q=new c6t(G,d,r),_a(d,new rGt(t,q)),h.c[h.c.length]=q,M=d.a.ec().Kc();M.Ob();)_=u(M.Pb(),46),Eu(o,_.b)}}function hhe(t){Sv(t,new y2(mR(Ev(yv(kv(xv(new mg,_d),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new iZ),_d))),we(t,_d,uH,Ie(Iye)),we(t,_d,ky,Ie(Oye)),we(t,_d,M4,Ie(Aye)),we(t,_d,vx,Ie(Lye)),we(t,_d,bx,Ie(Mye)),we(t,_d,F7,Ie(Sye)),we(t,_d,FC,Ie(mCt)),we(t,_d,B7,Ie(Dye)),we(t,_d,_ct,Ie(Rht)),we(t,_d,Tct,Ie(jht)),we(t,_d,qkt,Ie(yCt)),we(t,_d,Rkt,Ie(CG)),we(t,_d,jkt,Ie(SG)),we(t,_d,$kt,Ie(BO)),we(t,_d,zkt,Ie(xCt))}function v6t(t){var e;if(this.r=rnn(new Fd,new No),this.b=new eC(u(Dr(Za),290)),this.p=new eC(u(Dr(Za),290)),this.i=new eC(u(Dr(xpe),290)),this.e=t,this.o=new So(t.rf()),this.D=t.Df()||Be(Fe(t.We((di(),WO)))),this.A=u(t.We((di(),H2)),21),this.B=u(t.We(mb),21),this.q=u(t.We(US),98),this.u=u(t.We(Ky),21),!l0n(this.u))throw nt(new B3("Invalid port label placement: "+this.u));if(this.v=Be(Fe(t.We(JSt))),this.j=u(t.We(a5),21),!Nbn(this.j))throw nt(new B3("Invalid node label placement: "+this.j));this.n=u(oC(t,$St),116),this.k=Zt(ve(oC(t,qG))),this.d=Zt(ve(oC(t,rAt))),this.w=Zt(ve(oC(t,cAt))),this.s=Zt(ve(oC(t,iAt))),this.t=Zt(ve(oC(t,sAt))),this.C=u(oC(t,aAt),142),this.c=2*this.d,e=!this.B.Hc((bl(),rN)),this.f=new rC(0,e,0),this.g=new rC(1,e,0),eet(this.f,(Zf(),iu),this.g)}function L4n(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn;for(St=0,G=0,q=0,B=1,Mt=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));Mt.e!=Mt.i.gc();)Z=u(dr(Mt),33),B+=N0(new ar(lr(V0(Z).a.Kc(),new H))),We=Z.g,G=b.Math.max(G,We),M=Z.f,q=b.Math.max(q,M),St+=We*M;for(W=(!t.a&&(t.a=new he(ds,t,10,11)),t.a).i,h=St+2*r*r*B*W,o=b.Math.sqrt(h),w=b.Math.max(o*n,G),d=b.Math.max(o/n,q),bt=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));bt.e!=bt.i.gc();)Z=u(dr(bt),33),Qe=s.b+(pl(e,26)*LC+pl(e,27)*MC)*(w-Z.g),Rn=s.b+(pl(e,26)*LC+pl(e,27)*MC)*(d-Z.f),Cu(Z,Qe),Su(Z,Rn);for(_e=w+(s.b+s.c),ce=d+(s.d+s.a),Qt=new nr((!t.a&&(t.a=new he(ds,t,10,11)),t.a));Qt.e!=Qt.i.gc();)for(jt=u(dr(Qt),33),_=new ar(lr(V0(jt).a.Kc(),new H));Vr(_);)k=u(Ir(_),79),gC(k)||M5n(k,e,_e,ce);_e+=s.b+s.c,ce+=s.d+s.a,gw(t,_e,ce,!1,!0)}function Sq(t){var e,n,r,s,o,h,d,w,k,_,M;if(t==null)throw nt(new cd(Mu));if(k=t,o=t.length,w=!1,o>0&&(e=($r(0,t.length),t.charCodeAt(0)),(e==45||e==43)&&(t=t.substr(1),--o,w=e==45)),o==0)throw nt(new cd(vw+k+'"'));for(;t.length>0&&($r(0,t.length),t.charCodeAt(0)==48);)t=t.substr(1),--o;if(o>(Jue(),xge)[10])throw nt(new cd(vw+k+'"'));for(s=0;s0&&(M=-parseInt(t.substr(0,r),10),t=t.substr(r),o-=r,n=!1);o>=h;){if(r=parseInt(t.substr(0,h),10),t=t.substr(h),o-=h,n)n=!1;else{if(_c(M,d)<0)throw nt(new cd(vw+k+'"'));M=Ia(M,_)}M=Qp(M,r)}if(_c(M,0)>0)throw nt(new cd(vw+k+'"'));if(!w&&(M=D8(M),_c(M,0)<0))throw nt(new cd(vw+k+'"'));return M}function w6t(t,e){qKt();var n,r,s,o,h,d,w;if(this.a=new c2t(this),this.b=t,this.c=e,this.f=znt(Mo((Gu(),Sa),e)),this.f.dc())if((d=r4t(Sa,t))==e)for(this.e=!0,this.d=new le,this.f=new Ek,this.f.Fc(D2),u(Eq(mD(Sa,zl(t)),""),26)==t&&this.f.Fc(k_(Sa,zl(t))),s=uat(Sa,t).Kc();s.Ob();)switch(r=u(s.Pb(),170),$v(Mo(Sa,r))){case 4:{this.d.Fc(r);break}case 5:{this.f.Gc(znt(Mo(Sa,r)));break}}else if(so(),u(e,66).Oj())for(this.e=!0,this.f=null,this.d=new le,h=0,w=(t.i==null&&bd(t),t.i).length;h=0&&h0&&(u(xo(t.b,e),124).a.b=n)}function M4n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt;for(mr(e,"Comment pre-processing",1),n=0,w=new S(t.a);w.a0&&(w=($r(0,e.length),e.charCodeAt(0)),w!=64)){if(w==37&&(M=e.lastIndexOf("%"),k=!1,M!=0&&(M==B-1||(k=($r(M+1,e.length),e.charCodeAt(M+1)==46))))){if(h=e.substr(1,M-1),St=un("%",h)?null:y6t(h),r=0,k)try{r=Gl(e.substr(M+2),Oa,Ti)}catch(jt){throw jt=rs(jt),_t(jt,127)?(d=jt,nt(new F$(d))):nt(jt)}for(Z=tyt(t.Wg());Z.Ob();)if(G=hz(Z),_t(G,510)&&(s=u(G,590),Mt=s.d,(St==null?Mt==null:un(St,Mt))&&r--==0))return s;return null}if(_=e.lastIndexOf("."),q=_==-1?e:e.substr(0,_),n=0,_!=-1)try{n=Gl(e.substr(_+1),Oa,Ti)}catch(jt){if(jt=rs(jt),_t(jt,127))q=e;else throw nt(jt)}for(q=un("%",q)?null:y6t(q),W=tyt(t.Wg());W.Ob();)if(G=hz(W),_t(G,191)&&(o=u(G,191),bt=o.ne(),(q==null?bt==null:un(q,bt))&&n--==0))return o;return null}return Fle(t,e)}function O4n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn;for(ce=new le,G=new S(t.b);G.a=e.length)return{done:!0};var s=e[r++];return{value:[s,n.get(s)],done:!1}}}},Rvn()||(t.prototype.createObject=function(){return{}},t.prototype.get=function(e){return this.obj[":"+e]},t.prototype.set=function(e,n){this.obj[":"+e]=n},t.prototype[dot]=function(e){delete this.obj[":"+e]},t.prototype.keys=function(){var e=[];for(var n in this.obj)n.charCodeAt(0)==58&&e.push(n.substring(1));return e}),t}function P4n(t){Z5t();var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z;if(t==null)return null;if(M=t.length*8,M==0)return"";for(d=M%24,q=M/24|0,B=d!=0?q+1:q,o=null,o=Nt(Eh,wd,25,B*4,15,1),k=0,_=0,e=0,n=0,r=0,h=0,s=0,w=0;w>24,k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,W=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,Z=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[h++]=op[G],o[h++]=op[W|k<<4],o[h++]=op[_<<2|Z],o[h++]=op[r&63];return d==8?(e=t[s],k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,o[h++]=op[G],o[h++]=op[k<<4],o[h++]=61,o[h++]=61):d==16&&(e=t[s],n=t[s+1],_=(n&15)<<24>>24,k=(e&3)<<24>>24,G=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,W=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[h++]=op[G],o[h++]=op[W|k<<4],o[h++]=op[_<<2],o[h++]=61),Ih(o,0,o.length)}function F4n(t,e){var n,r,s,o,h,d,w;if(t.e==0&&t.p>0&&(t.p=-(t.p-1)),t.p>Oa&&Jwt(e,t.p-ib),h=e.q.getDate(),nD(e,1),t.k>=0&&wrn(e,t.k),t.c>=0?nD(e,t.c):t.k>=0?(w=new yyt(e.q.getFullYear()-ib,e.q.getMonth(),35),r=35-w.q.getDate(),nD(e,b.Math.min(r,h))):nD(e,h),t.f<0&&(t.f=e.q.getHours()),t.b>0&&t.f<12&&(t.f+=12),LXe(e,t.f==24&&t.g?0:t.f),t.j>=0&&Lsn(e,t.j),t.n>=0&&Wsn(e,t.n),t.i>=0&&zGt(e,Ra(Ia(eI(Au(e.q.getTime()),Vg),Vg),t.i)),t.a&&(s=new CR,Jwt(s,s.q.getFullYear()-ib-80),bet(Au(e.q.getTime()),Au(s.q.getTime()))&&Jwt(e,s.q.getFullYear()-ib+100)),t.d>=0){if(t.c==-1)n=(7+t.d-e.q.getDay())%7,n>3&&(n-=7),d=e.q.getMonth(),nD(e,e.q.getDate()+n),e.q.getMonth()!=d&&nD(e,e.q.getDate()+(n>0?-7:7));else if(e.q.getDay()!=t.d)return!1}return t.o>Oa&&(o=e.q.getTimezoneOffset(),zGt(e,Ra(Au(e.q.getTime()),(t.o-o)*60*Vg))),!0}function ghe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;if(s=K(e,(ae(),Ii)),!!_t(s,239)){for(G=u(s,33),W=e.e,B=new So(e.c),o=e.d,B.a+=o.b,B.b+=o.d,jt=u(ze(G,(xe(),iG)),174),zu(jt,(bl(),GG))&&(q=u(ze(G,r_t),116),Zgt(q,o.a),xtt(q,o.d),Jgt(q,o.b),ipt(q,o.c)),n=new le,_=new S(e.a);_.a<_.c.c.length;)for(w=u(Q(_),10),_t(K(w,Ii),239)?q4n(w,B):_t(K(w,Ii),186)&&!W&&(r=u(K(w,Ii),118),Mt=sle(e,w,r.g,r.f),k1(r,Mt.a,Mt.b)),bt=new S(w.j);bt.a0&&ue(t.p,_),ue(t.o,_);e-=r,q=w+e,k+=e*t.e,lh(t.a,d,de(q)),lh(t.b,d,k),t.j=b.Math.max(t.j,q),t.k=b.Math.max(t.k,k),t.d+=e,e+=W}}function be(){be=X;var t;ac=new DM(OC,0),On=new DM(Rq,1),Hn=new DM(Eot,2),yr=new DM(Tot,3),Bn=new DM(_ot,4),W1=(pn(),new Yk((t=u(Wf(Za),9),new oh(t,u(ff(t,t.length),9),0)))),Mf=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[]))),xh=Fg(Ki(Hn,ut(ot(Za,1),Cc,61,0,[]))),Zl=Fg(Ki(yr,ut(ot(Za,1),Cc,61,0,[]))),Uh=Fg(Ki(Bn,ut(ot(Za,1),Cc,61,0,[]))),Iu=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[yr]))),gu=Fg(Ki(Hn,ut(ot(Za,1),Cc,61,0,[Bn]))),Df=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[Bn]))),ol=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[Hn]))),Jl=Fg(Ki(yr,ut(ot(Za,1),Cc,61,0,[Bn]))),kh=Fg(Ki(Hn,ut(ot(Za,1),Cc,61,0,[yr]))),cl=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[Hn,Bn]))),Du=Fg(Ki(Hn,ut(ot(Za,1),Cc,61,0,[yr,Bn]))),Ou=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[yr,Bn]))),Yu=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[Hn,yr]))),Yc=Fg(Ki(On,ut(ot(Za,1),Cc,61,0,[Hn,yr,Bn])))}function whe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St;if(e.b!=0){for(q=new cs,d=null,G=null,r=Cs(b.Math.floor(b.Math.log(e.b)*b.Math.LOG10E)+1),w=0,St=si(e,0);St.b!=St.d.c;)for(bt=u(ii(St),86),Gt(G)!==Gt(K(bt,(mc(),RS)))&&(G=jr(K(bt,RS)),w=0),G!=null?d=G+jQt(w++,r):d=jQt(w++,r),ee(bt,RS,d),Z=(s=si(new Sp(bt).a.d,0),new p6(s));kR(Z.a);)W=u(ii(Z.a),188).c,ks(q,W,q.c.b,q.c),ee(W,RS,d);for(B=new Ar,h=0;h=w){Zn(bt.b>0),bt.a.Xb(bt.c=--bt.b);break}else W.a>k&&(s?(Rs(s.b,W.b),s.a=b.Math.max(s.a,W.a),Dl(bt)):(ue(W.b,M),W.c=b.Math.min(W.c,k),W.a=b.Math.max(W.a,w),s=W));s||(s=new rqt,s.c=k,s.a=w,Rm(bt,s),ue(s.b,M))}for(d=e.b,_=0,Z=new S(r);Z.ad?1:0:(t.b&&(t.b._b(o)&&(s=u(t.b.xc(o),19).a),t.b._b(w)&&(d=u(t.b.xc(w),19).a)),sd?1:0)):e.e.c.length!=0&&n.g.c.length!=0?1:-1}function $4n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e;for(mr(e,c1e,1),W=new le,ce=new le,k=new S(t.b);k.a0&&(St-=q),u6t(h,St),_=0,B=new S(h.a);B.a0),d.a.Xb(d.c=--d.b)),w=.4*r*_,!o&&d.be.d.c){if(q=t.c[e.a.d],Z=t.c[M.a.d],q==Z)continue;yf(lf(uf(hf(cf(new Sh,1),100),q),Z))}}}}}function y6t(t){Cat();var e,n,r,s,o,h,d,w;if(t==null)return null;if(s=ud(t,Lu(37)),s<0)return t;for(w=new Fl(t.substr(0,s)),e=Nt(Xu,P4,25,4,15,1),d=0,r=0,h=t.length;ss+2&&wit(($r(s+1,t.length),t.charCodeAt(s+1)),VAt,GAt)&&wit(($r(s+2,t.length),t.charCodeAt(s+2)),VAt,GAt))if(n=dtn(($r(s+1,t.length),t.charCodeAt(s+1)),($r(s+2,t.length),t.charCodeAt(s+2))),s+=2,r>0?(n&192)==128?e[d++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(e[d++]=n<<24>>24,r=2):(n&240)==224?(e[d++]=n<<24>>24,r=3):(n&248)==240&&(e[d++]=n<<24>>24,r=4)),r>0){if(d==r){switch(d){case 2:{$p(w,((e[0]&31)<<6|e[1]&63)&Ms);break}case 3:{$p(w,((e[0]&15)<<12|(e[1]&63)<<6|e[2]&63)&Ms);break}}d=0,r=0}}else{for(o=0;o0){if(h+r>t.length)return!1;d=rq(t.substr(0,h+r),e)}else d=rq(t,e);switch(o){case 71:return d=b4(t,h,ut(ot(Le,1),re,2,6,[tfe,efe]),e),s.e=d,!0;case 77:return Svn(t,e,s,d,h);case 76:return Avn(t,e,s,d,h);case 69:return mgn(t,e,h,s);case 99:return ygn(t,e,h,s);case 97:return d=b4(t,h,ut(ot(Le,1),re,2,6,["AM","PM"]),e),s.b=d,!0;case 121:return Lvn(t,e,h,d,n,s);case 100:return d<=0?!1:(s.c=d,!0);case 83:return d<0?!1:Oln(d,h,e[0],s);case 104:d==12&&(d=0);case 75:case 72:return d<0?!1:(s.f=d,s.g=!1,!0);case 107:return d<0?!1:(s.f=d,s.g=!0,!0);case 109:return d<0?!1:(s.j=d,!0);case 115:return d<0?!1:(s.n=d,!0);case 90:if(hce&&(G.c=ce-G.b),ue(h.d,new Nnt(G,Xyt(h,G))),Mt=e==On?b.Math.max(Mt,W.b+k.b.rf().b):b.Math.min(Mt,W.b));for(Mt+=e==On?t.t:-t.t,St=f3t((h.e=Mt,h)),St>0&&(u(xo(t.b,e),124).a.b=St),_=B.Kc();_.Ob();)k=u(_.Pb(),111),!(!k.c||k.c.d.c.length<=0)&&(G=k.c.i,G.c-=k.e.a,G.d-=k.e.b)}function W4n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q;for(e=new Ar,w=new nr(t);w.e!=w.i.gc();){for(d=u(dr(w),33),n=new Qs,Ai(Vut,d,n),q=new bg,s=u($l(new kn(null,new Fv(new ar(lr(fI(d).a.Kc(),new H)))),lYt(q,a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[(N1(),Yl)])))),83),Oee(n,u(s.xc((Fn(),!0)),14),new Oe),r=u($l(Wi(u(s.xc(!1),15).Lc(),new af),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[Yl]))),15),h=r.Kc();h.Ob();)o=u(h.Pb(),79),B=mae(o),B&&(k=u(cc(Fo(e.f,B)),21),k||(k=jce(B),lu(e.f,B,k)),Ka(n,k));for(s=u($l(new kn(null,new Fv(new ar(lr(V0(d).a.Kc(),new H)))),lYt(q,a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[Yl])))),83),Oee(n,u(s.xc(!0),14),new fk),r=u($l(Wi(u(s.xc(!1),15).Lc(),new k3),a2(new ke,new ne,new pi,ut(ot(wl,1),oe,132,0,[Yl]))),15),M=r.Kc();M.Ob();)_=u(M.Pb(),79),B=yae(_),B&&(k=u(cc(Fo(e.f,B)),21),k||(k=jce(B),lu(e.f,B,k)),Ka(n,k))}}function K4n(t,e){yat();var n,r,s,o,h,d,w,k,_,M,B,q,G,W;if(w=_c(t,0)<0,w&&(t=D8(t)),_c(t,0)==0)switch(e){case 0:return"0";case 1:return M7;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return q=new Ap,e<0?q.a+="0E+":q.a+="0E",q.a+=e==Oa?"2147483648":""+-e,q.a}_=18,M=Nt(Eh,wd,25,_+1,15,1),n=_,W=t;do k=W,W=eI(W,10),M[--n]=Mr(Ra(48,Qp(k,Ia(W,10))))&Ms;while(_c(W,0)!=0);if(s=Qp(Qp(Qp(_,n),e),1),e==0)return w&&(M[--n]=45),Ih(M,n,_-n);if(e>0&&_c(s,-6)>=0){if(_c(s,0)>=0){for(o=n+Mr(s),d=_-1;d>=o;d--)M[d+1]=M[d];return M[++o]=46,w&&(M[--n]=45),Ih(M,n,_-n+1)}for(h=2;bet(h,Ra(D8(s),1));h++)M[--n]=48;return M[--n]=46,M[--n]=48,w&&(M[--n]=45),Ih(M,n,_-n)}return G=n+1,r=_,B=new Lm,w&&(B.a+="-"),r-G>=1?($p(B,M[n]),B.a+=".",B.a+=Ih(M,n+1,_-n-1)):B.a+=Ih(M,n,_-n),B.a+="E",_c(s,0)>0&&(B.a+="+"),B.a+=""+E_(s),B.a}function Y4n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q;if(t.e.a.$b(),t.f.a.$b(),t.c.c=Nt(Qn,Me,1,0,5,1),t.i.c=Nt(Qn,Me,1,0,5,1),t.g.a.$b(),e)for(h=new S(e.a);h.a=1&&(Qt-k>0&&G>=0?(Cu(M,M.i+jt),Su(M,M.j+w*k)):Qt-k<0&&q>=0&&(Cu(M,M.i+jt*Qt),Su(M,M.j+w)));return Eo(t,(di(),H2),(Nl(),o=u(Wf(tA),9),new oh(o,u(ff(o,o.length),9),0))),new Re(ce,_)}function xhe(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G;if(q=hs(Ro(u(At((!t.b&&(t.b=new En(vr,t,4,7)),t.b),0),82))),G=hs(Ro(u(At((!t.c&&(t.c=new En(vr,t,5,8)),t.c),0),82))),M=q==G,d=new Da,e=u(ze(t,(bz(),bAt)),74),e&&e.b>=2){if((!t.a&&(t.a=new he(us,t,6,6)),t.a).i==0)n=(Tv(),s=new id,s),Or((!t.a&&(t.a=new he(us,t,6,6)),t.a),n);else if((!t.a&&(t.a=new he(us,t,6,6)),t.a).i>1)for(B=new A6((!t.a&&(t.a=new he(us,t,6,6)),t.a));B.e!=B.i.gc();)uC(B);yI(e,u(At((!t.a&&(t.a=new he(us,t,6,6)),t.a),0),202))}if(M)for(r=new nr((!t.a&&(t.a=new he(us,t,6,6)),t.a));r.e!=r.i.gc();)for(n=u(dr(r),202),k=new nr((!n.a&&(n.a=new Bs(Wh,n,5)),n.a));k.e!=k.i.gc();)w=u(dr(k),469),d.a=b.Math.max(d.a,w.a),d.b=b.Math.max(d.b,w.b);for(h=new nr((!t.n&&(t.n=new he(Yo,t,1,7)),t.n));h.e!=h.i.gc();)o=u(dr(h),137),_=u(ze(o,KS),8),_&&k1(o,_.a,_.b),M&&(d.a=b.Math.max(d.a,o.i+o.g),d.b=b.Math.max(d.b,o.j+o.f));return d}function X4n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We;for(St=e.c.length,s=new k4(t.a,n,null,null),We=Nt(ga,To,25,St,15,1),W=Nt(ga,To,25,St,15,1),G=Nt(ga,To,25,St,15,1),Z=0,d=0;dWe[w]&&(Z=w),M=new S(t.a.b);M.aq&&(o&&(Xb(ce,B),Xb(We,de(k.b-1))),xi=n.b,Ks+=B+e,B=0,_=b.Math.max(_,n.b+n.c+hr)),Cu(d,xi),Su(d,Ks),_=b.Math.max(_,xi+hr+n.c),B=b.Math.max(B,M),xi+=hr+e;if(_=b.Math.max(_,r),zn=Ks+B+n.a,znxd,Qe=b.Math.abs(B.b-G.b)>xd,(!n&&We&&Qe||n&&(We||Qe))&&ai(Z.a,jt)),Ka(Z.a,r),r.b==0?B=jt:B=(Zn(r.b!=0),u(r.c.b.c,8)),gcn(q,M,W),lne(s)==_e&&($a(_e.i)!=s.a&&(W=new Da,R4t(W,$a(_e.i),Mt)),ee(Z,qlt,W)),R0n(q,Z,Mt),_.a.zc(q,_);Ba(Z,Qt),pa(Z,_e)}for(k=_.a.ec().Kc();k.Ob();)w=u(k.Pb(),17),Ba(w,null),pa(w,null);or(e)}function khe(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;if(t.gc()==1)return u(t.Xb(0),231);if(t.gc()<=0)return new C$;for(s=t.Kc();s.Ob();){for(n=u(s.Pb(),231),G=0,_=Ti,M=Ti,w=Oa,k=Oa,q=new S(n.e);q.ad&&(St=0,jt+=h+bt,h=0),Fwn(W,n,St,jt),e=b.Math.max(e,St+Z.a),h=b.Math.max(h,Z.b),St+=Z.a+bt;return W}function Ehe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G;switch(_=new ju,t.a.g){case 3:B=u(K(e.e,(ae(),F2)),15),q=u(K(e.j,F2),15),G=u(K(e.f,F2),15),n=u(K(e.e,Q4),15),r=u(K(e.j,Q4),15),s=u(K(e.f,Q4),15),h=new le,Rs(h,B),q.Jc(new JX),Rs(h,_t(q,152)?V6(u(q,152)):_t(q,131)?u(q,131).a:_t(q,54)?new mv(q):new Mm(q)),Rs(h,G),o=new le,Rs(o,n),Rs(o,_t(r,152)?V6(u(r,152)):_t(r,131)?u(r,131).a:_t(r,54)?new mv(r):new Mm(r)),Rs(o,s),ee(e.f,F2,h),ee(e.f,Q4,o),ee(e.f,eTt,e.f),ee(e.e,F2,null),ee(e.e,Q4,null),ee(e.j,F2,null),ee(e.j,Q4,null);break;case 1:Ka(_,e.e.a),ai(_,e.i.n),Ka(_,c2(e.j.a)),ai(_,e.a.n),Ka(_,e.f.a);break;default:Ka(_,e.e.a),Ka(_,c2(e.j.a)),Ka(_,e.f.a)}Mh(e.f.a),Ka(e.f.a,_),Ba(e.f,e.e.c),d=u(K(e.e,(xe(),Oo)),74),k=u(K(e.j,Oo),74),w=u(K(e.f,Oo),74),(d||k||w)&&(M=new ju,owt(M,w),owt(M,k),owt(M,d),ee(e.f,Oo,M)),Ba(e.j,null),pa(e.j,null),Ba(e.e,null),pa(e.e,null),Lo(e.a,null),Lo(e.i,null),e.g&&Ehe(t,e.g)}function t5n(t){Z5t();var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z;if(t==null||(o=R$(t),G=zun(o),G%4!=0))return null;if(W=G/4|0,W==0)return Nt(Xu,P4,25,0,15,1);for(M=null,e=0,n=0,r=0,s=0,h=0,d=0,w=0,k=0,q=0,B=0,_=0,M=Nt(Xu,P4,25,W*3,15,1);q>4)<<24>>24,M[B++]=((n&15)<<4|r>>2&15)<<24>>24,M[B++]=(r<<6|s)<<24>>24}return!dM(h=o[_++])||!dM(d=o[_++])?null:(e=Y1[h],n=Y1[d],w=o[_++],k=o[_++],Y1[w]==-1||Y1[k]==-1?w==61&&k==61?n&15?null:(Z=Nt(Xu,P4,25,q*3+1,15,1),Pc(M,0,Z,0,q*3),Z[B]=(e<<2|n>>4)<<24>>24,Z):w!=61&&k==61?(r=Y1[w],r&3?null:(Z=Nt(Xu,P4,25,q*3+2,15,1),Pc(M,0,Z,0,q*3),Z[B++]=(e<<2|n>>4)<<24>>24,Z[B]=((n&15)<<4|r>>2&15)<<24>>24,Z)):null:(r=Y1[w],s=Y1[k],M[B++]=(e<<2|n>>4)<<24>>24,M[B++]=((n&15)<<4|r>>2&15)<<24>>24,M[B++]=(r<<6|s)<<24>>24,M))}function e5n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt;for(mr(e,c1e,1),G=u(K(t,(xe(),X0)),218),s=new S(t.b);s.a=2){for(W=!0,B=new S(o.j),n=u(Q(B),11),q=null;B.a0&&(s=u(Pe(Z.c.a,ce-1),10),h=t.i[s.p],We=b.Math.ceil(U3(t.n,s,Z)),o=Qt.a.e-Z.d.d-(h.a.e+s.o.b+s.d.a)-We),k=bs,ce0&&_e.a.e.e-_e.a.a-(_e.b.e.e-_e.b.a)<0,G=St.a.e.e-St.a.a-(St.b.e.e-St.b.a)<0&&_e.a.e.e-_e.a.a-(_e.b.e.e-_e.b.a)>0,q=St.a.e.e+St.b.a<_e.b.e.e+_e.a.a,B=St.a.e.e+St.b.a>_e.b.e.e+_e.a.a,jt=0,!W&&!G&&(B?o+M>0?jt=M:k-r>0&&(jt=r):q&&(o+d>0?jt=d:k-Mt>0&&(jt=Mt))),Qt.a.e+=jt,Qt.b&&(Qt.d.e+=jt),!1))}function _he(t,e,n){var r,s,o,h,d,w,k,_,M,B;if(r=new ch(e.qf().a,e.qf().b,e.rf().a,e.rf().b),s=new S6,t.c)for(h=new S(e.wf());h.ak&&(r.a+=MUt(Nt(Eh,wd,25,-k,15,1))),r.a+="Is",ud(w,Lu(32))>=0)for(s=0;s=r.o.b/2}else Mt=!M;Mt?(bt=u(K(r,(ae(),Ox)),15),bt?B?o=bt:(s=u(K(r,Ax),15),s?bt.gc()<=s.gc()?o=bt:o=s:(o=new le,ee(r,Ax,o))):(o=new le,ee(r,Ox,o))):(s=u(K(r,(ae(),Ax)),15),s?M?o=s:(bt=u(K(r,Ox),15),bt?s.gc()<=bt.gc()?o=s:o=bt:(o=new le,ee(r,Ox,o))):(o=new le,ee(r,Ax,o))),o.Fc(t),ee(t,(ae(),zV),n),e.d==n?(pa(e,null),n.e.c.length+n.g.c.length==0&&tc(n,null),Ycn(n)):(Ba(e,null),n.e.c.length+n.g.c.length==0&&tc(n,null)),Mh(e.a)}function s5n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi;for(Mt=new xa(t.b,0),_=e.Kc(),G=0,k=u(_.Pb(),19).a,Qt=0,n=new Qs,_e=new A0;Mt.b=t.a&&(r=Vmn(t,Mt),_=b.Math.max(_,r.b),jt=b.Math.max(jt,r.d),ue(d,new ya(Mt,r)));for(We=new le,k=0;k<_;++k)$m(We,0,(Zn(Z.b>0),Z.a.Xb(Z.c=--Z.b),Qe=new Lh(t.b),Rm(Z,Qe),Zn(Z.b0?(k=0,Z&&(k+=d),k+=(Qe-1)*h,St&&(k+=d),We&&St&&(k=b.Math.max(k,H2n(St,h,Mt,_e))),k0){for(B=_<100?null:new Lp(_),k=new iyt(e),G=k.g,bt=Nt(Sr,Jr,25,_,15,1),r=0,jt=new Kv(_),s=0;s=0;)if(q!=null?Si(q,G[w]):Gt(q)===Gt(G[w])){bt.length<=r&&(Z=bt,bt=Nt(Sr,Jr,25,2*bt.length,15,1),Pc(Z,0,bt,0,r)),bt[r++]=s,Or(jt,G[w]);break t}if(q=q,Gt(q)===Gt(d))break}}if(k=jt,G=jt.g,_=r,r>bt.length&&(Z=bt,bt=Nt(Sr,Jr,25,r,15,1),Pc(Z,0,bt,0,r)),r>0){for(St=!0,o=0;o=0;)nx(t,bt[h]);if(r!=_){for(s=_;--s>=r;)nx(k,s);Z=bt,bt=Nt(Sr,Jr,25,r,15,1),Pc(Z,0,bt,0,r)}e=k}}}else for(e=zfn(t,e),s=t.i;--s>=0;)e.Hc(t.g[s])&&(nx(t,s),St=!0);if(St){if(bt!=null){for(n=e.gc(),M=n==1?I_(t,4,e.Kc().Pb(),null,bt[0],W):I_(t,6,e,bt,bt[0],W),B=n<100?null:new Lp(n),s=e.Kc();s.Ob();)q=s.Pb(),B=cvt(t,u(q,72),B);B?(B.Ei(M),B.Fi()):Ci(t.e,M)}else{for(B=tZe(e.gc()),s=e.Kc();s.Ob();)q=s.Pb(),B=cvt(t,u(q,72),B);B&&B.Fi()}return!0}else return!1}function l5n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St;for(n=new Jie(e),n.a||Wwn(e),k=Kvn(e),w=new Hv,Z=new Wce,W=new S(e.a);W.a0||n.o==V1&&s0?(M=u(Pe(B.c.a,h-1),10),We=U3(t.b,B,M),Z=B.n.b-B.d.d-(M.n.b+M.o.b+M.d.a+We)):Z=B.n.b-B.d.d,k=b.Math.min(Z,k),hh?m7(t,e,n):m7(t,n,e),sh?1:0}return r=u(K(e,(ae(),Lc)),19).a,o=u(K(n,Lc),19).a,r>o?m7(t,e,n):m7(t,n,e),ro?1:0}function x6t(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt;if(Be(Fe(ze(e,(di(),$G)))))return pn(),pn(),uo;if(k=(!e.a&&(e.a=new he(ds,e,10,11)),e.a).i!=0,M=Zgn(e),_=!M.dc(),k||_){if(s=u(ze(e,EE),149),!s)throw nt(new B3("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(Mt=Vbt(s,(p7(),JG)),Nie(e),!k&&_&&!Mt)return pn(),pn(),uo;if(w=new le,Gt(ze(e,i5))===Gt(($0(),np))&&(Vbt(s,QG)||Vbt(s,XG)))for(q=bue(t,e),G=new cs,Ka(G,(!e.a&&(e.a=new he(ds,e,10,11)),e.a));G.b!=0;)B=u(G.b==0?null:(Zn(G.b!=0),fh(G,G.a.a)),33),Nie(B),bt=Gt(ze(B,i5))===Gt(YS),bt||s2(B,GS)&&!imt(s,ze(B,EE))?(d=x6t(t,B,n,r),Rs(w,d),Eo(B,i5,YS),Oue(B)):Ka(G,(!B.a&&(B.a=new he(ds,B,10,11)),B.a));else for(q=(!e.a&&(e.a=new he(ds,e,10,11)),e.a).i,h=new nr((!e.a&&(e.a=new he(ds,e,10,11)),e.a));h.e!=h.i.gc();)o=u(dr(h),33),d=x6t(t,o,n,r),Rs(w,d),Oue(o);for(Z=new S(w);Z.a=0?q=Z6(d):q=HD(Z6(d)),t.Ye(pE,q)),k=new Da,B=!1,t.Xe(Pw)?(O2t(k,u(t.We(Pw),8)),B=!0):jXe(k,h.a/2,h.b/2),q.g){case 4:ee(_,du,(ph(),gb)),ee(_,HV,(h2(),G4)),_.o.b=h.b,W<0&&(_.o.a=-W),Us(M,(be(),Hn)),B||(k.a=h.a),k.a-=h.a;break;case 2:ee(_,du,(ph(),Fy)),ee(_,HV,(h2(),oE)),_.o.b=h.b,W<0&&(_.o.a=-W),Us(M,(be(),Bn)),B||(k.a=0);break;case 1:ee(_,P2,(B0(),W4)),_.o.a=h.a,W<0&&(_.o.b=-W),Us(M,(be(),yr)),B||(k.b=h.b),k.b-=h.b;break;case 3:ee(_,P2,(B0(),Sx)),_.o.a=h.a,W<0&&(_.o.b=-W),Us(M,(be(),On)),B||(k.b=0)}if(O2t(M.n,k),ee(_,Pw,k),e==U2||e==h0||e==Kc){if(G=0,e==U2&&t.Xe(Qg))switch(q.g){case 1:case 2:G=u(t.We(Qg),19).a;break;case 3:case 4:G=-u(t.We(Qg),19).a}else switch(q.g){case 4:case 2:G=o.b,e==h0&&(G/=s.b);break;case 1:case 3:G=o.a,e==h0&&(G/=s.a)}ee(_,Iw,G)}return ee(_,gc,q),_}function d5n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe;if(n=Zt(ve(K(t.a.j,(xe(),PTt)))),n<-1||!t.a.i||D6(u(K(t.a.o,ws),98))||rc(t.a.o,(be(),Hn)).gc()<2&&rc(t.a.o,Bn).gc()<2)return!0;if(t.a.c.Rf())return!1;for(Qt=0,jt=0,St=new le,w=t.a.e,k=0,_=w.length;k<_;++k){for(d=w[k],B=d,q=0,W=B.length;q=n}function g5n(){rbt();function t(r){var s=this;this.dispatch=function(o){var h=o.data;switch(h.cmd){case"algorithms":var d=h3t((pn(),new T(new m1(Cb.b))));r.postMessage({id:h.id,data:d});break;case"categories":var w=h3t((pn(),new T(new m1(Cb.c))));r.postMessage({id:h.id,data:w});break;case"options":var k=h3t((pn(),new T(new m1(Cb.d))));r.postMessage({id:h.id,data:k});break;case"register":x3n(h.algorithms),r.postMessage({id:h.id});break;case"layout":eyn(h.graph,h.layoutOptions||{},h.options||{}),r.postMessage({id:h.id,data:h.graph});break}},this.saveDispatch=function(o){try{s.dispatch(o)}catch(h){r.postMessage({id:o.data.id,error:h})}}}function e(r){var s=this;this.dispatcher=new t({postMessage:function(o){s.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){s.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===vot&&typeof self!==vot){var n=new t(self);self.onmessage=n.saveDispatch}else typeof p!==vot&&p.exports&&(Object.defineProperty(v,"__esModule",{value:!0}),p.exports={default:e,Worker:e})}function p5n(t){t.N||(t.N=!0,t.b=hc(t,0),fs(t.b,0),fs(t.b,1),fs(t.b,2),t.bb=hc(t,1),fs(t.bb,0),fs(t.bb,1),t.fb=hc(t,2),fs(t.fb,3),fs(t.fb,4),Gi(t.fb,5),t.qb=hc(t,3),fs(t.qb,0),Gi(t.qb,1),Gi(t.qb,2),fs(t.qb,3),fs(t.qb,4),Gi(t.qb,5),fs(t.qb,6),t.a=hi(t,4),t.c=hi(t,5),t.d=hi(t,6),t.e=hi(t,7),t.f=hi(t,8),t.g=hi(t,9),t.i=hi(t,10),t.j=hi(t,11),t.k=hi(t,12),t.n=hi(t,13),t.o=hi(t,14),t.p=hi(t,15),t.q=hi(t,16),t.s=hi(t,17),t.r=hi(t,18),t.t=hi(t,19),t.u=hi(t,20),t.v=hi(t,21),t.w=hi(t,22),t.B=hi(t,23),t.A=hi(t,24),t.C=hi(t,25),t.D=hi(t,26),t.F=hi(t,27),t.G=hi(t,28),t.H=hi(t,29),t.J=hi(t,30),t.I=hi(t,31),t.K=hi(t,32),t.M=hi(t,33),t.L=hi(t,34),t.P=hi(t,35),t.Q=hi(t,36),t.R=hi(t,37),t.S=hi(t,38),t.T=hi(t,39),t.U=hi(t,40),t.V=hi(t,41),t.X=hi(t,42),t.W=hi(t,43),t.Y=hi(t,44),t.Z=hi(t,45),t.$=hi(t,46),t._=hi(t,47),t.ab=hi(t,48),t.cb=hi(t,49),t.db=hi(t,50),t.eb=hi(t,51),t.gb=hi(t,52),t.hb=hi(t,53),t.ib=hi(t,54),t.jb=hi(t,55),t.kb=hi(t,56),t.lb=hi(t,57),t.mb=hi(t,58),t.nb=hi(t,59),t.ob=hi(t,60),t.pb=hi(t,61))}function b5n(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt;if(Mt=0,e.f.a==0)for(Z=new S(t);Z.ak&&(Sn(k,e.c.length),u(e.c[k],200)).a.c.length==0;)Eu(e,(Sn(k,e.c.length),e.c[k]));if(!w){--o;continue}if(nmn(e,_,s,w,B,n,k,r)){M=!0;continue}if(B){if(uyn(e,_,s,w,n,k,r)){M=!0;continue}else if(Ryt(_,s)){s.c=!0,M=!0;continue}}else if(Ryt(_,s)){s.c=!0,M=!0;continue}if(M)continue}if(Ryt(_,s)){s.c=!0,M=!0,w&&(w.k=!1);continue}else Gz(s.q)}return M}function Iat(t,e,n,r,s,o,h){var d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi,Ks;for(W=0,Rn=0,k=new S(t.b);k.aW&&(o&&(Xb(ce,q),Xb(We,de(_.b-1)),ue(t.d,G),d.c=Nt(Qn,Me,1,0,5,1)),xi=n.b,Ks+=q+e,q=0,M=b.Math.max(M,n.b+n.c+hr)),d.c[d.c.length]=w,Uie(w,xi,Ks),M=b.Math.max(M,xi+hr+n.c),q=b.Math.max(q,B),xi+=hr+e,G=w;if(Rs(t.a,d),ue(t.d,u(Pe(d,d.c.length-1),157)),M=b.Math.max(M,r),zn=Ks+q+n.a,zn1&&(h=b.Math.min(h,b.Math.abs(u(e1(d.a,1),8).b-_.b)))));else for(W=new S(e.j);W.as&&(o=B.a-s,h=Ti,r.c=Nt(Qn,Me,1,0,5,1),s=B.a),B.a>=s&&(r.c[r.c.length]=d,d.a.b>1&&(h=b.Math.min(h,b.Math.abs(u(e1(d.a,d.a.b-2),8).b-B.b)))));if(r.c.length!=0&&o>e.o.a/2&&h>e.o.b/2){for(q=new Nc,tc(q,e),Us(q,(be(),On)),q.n.a=e.o.a/2,bt=new Nc,tc(bt,e),Us(bt,yr),bt.n.a=e.o.a/2,bt.n.b=e.o.b,w=new S(r);w.a=k.b?Ba(d,bt):Ba(d,q)):(k=u(ftn(d.a),8),Z=d.a.b==0?S1(d.c):u(vj(d.a),8),Z.b>=k.b?pa(d,bt):pa(d,q)),M=u(K(d,(xe(),Oo)),74),M&&ry(M,k,!0);e.n.a=s-e.o.a/2}}function x5n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi,Ks,eh,Zh;if(Rn=null,hr=e,zn=OZt(t,LZt(n),hr),q_(zn,O0(hr,Cd)),xi=u(e4(t.g,ix(I0(hr,zct))),33),B=I0(hr,"sourcePort"),r=null,B&&(r=ix(B)),Ks=u(e4(t.j,r),118),!xi)throw d=s7(hr),G="An edge must have a source node (edge id: '"+d,W=G+H7,nt(new od(W));if(Ks&&!dd(_1(Ks),xi))throw w=O0(hr,Cd),Z="The source port of an edge must be a port of the edge's source node (edge id: '"+w,bt=Z+H7,nt(new od(bt));if(We=(!zn.b&&(zn.b=new En(vr,zn,4,7)),zn.b),o=null,Ks?o=Ks:o=xi,Or(We,o),eh=u(e4(t.g,ix(I0(hr,y8t))),33),q=I0(hr,"targetPort"),s=null,q&&(s=ix(q)),Zh=u(e4(t.j,s),118),!eh)throw M=s7(hr),Mt="An edge must have a target node (edge id: '"+M,St=Mt+H7,nt(new od(St));if(Zh&&!dd(_1(Zh),eh))throw k=O0(hr,Cd),jt="The target port of an edge must be a port of the edge's target node (edge id: '"+k,Qt=jt+H7,nt(new od(Qt));if(Qe=(!zn.c&&(zn.c=new En(vr,zn,5,8)),zn.c),h=null,Zh?h=Zh:h=eh,Or(Qe,h),(!zn.b&&(zn.b=new En(vr,zn,4,7)),zn.b).i==0||(!zn.c&&(zn.c=new En(vr,zn,5,8)),zn.c).i==0)throw _=O0(hr,Cd),ce=_de+_,_e=ce+H7,nt(new od(_e));return Jz(hr,zn),hbn(hr,zn),Rn=yit(t,hr,zn),Rn}function Mhe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn;return M=Tmn(yu(t,(be(),W1)),e),G=f4(yu(t,Mf),e),jt=f4(yu(t,Zl),e),We=Uz(yu(t,Uh),e),B=Uz(yu(t,xh),e),Mt=f4(yu(t,Df),e),W=f4(yu(t,ol),e),ce=f4(yu(t,Jl),e),Qt=f4(yu(t,kh),e),Qe=Uz(yu(t,gu),e),bt=f4(yu(t,Iu),e),St=f4(yu(t,cl),e),_e=f4(yu(t,Du),e),Rn=Uz(yu(t,Ou),e),q=Uz(yu(t,Yu),e),Z=f4(yu(t,Yc),e),n=i4(ut(ot(ga,1),To,25,15,[Mt.a,We.a,ce.a,Rn.a])),r=i4(ut(ot(ga,1),To,25,15,[G.a,M.a,jt.a,Z.a])),s=bt.a,o=i4(ut(ot(ga,1),To,25,15,[W.a,B.a,Qt.a,q.a])),k=i4(ut(ot(ga,1),To,25,15,[Mt.b,G.b,W.b,St.b])),w=i4(ut(ot(ga,1),To,25,15,[We.b,M.b,B.b,Z.b])),_=Qe.b,d=i4(ut(ot(ga,1),To,25,15,[ce.b,jt.b,Qt.b,_e.b])),Ng(yu(t,W1),n+s,k+_),Ng(yu(t,Yc),n+s,k+_),Ng(yu(t,Mf),n+s,0),Ng(yu(t,Zl),n+s,k+_+w),Ng(yu(t,Uh),0,k+_),Ng(yu(t,xh),n+s+r,k+_),Ng(yu(t,ol),n+s+r,0),Ng(yu(t,Jl),0,k+_+w),Ng(yu(t,kh),n+s+r,k+_+w),Ng(yu(t,gu),0,k),Ng(yu(t,Iu),n,0),Ng(yu(t,Du),0,k+_+w),Ng(yu(t,Yu),n+s+r,0),h=new Da,h.a=i4(ut(ot(ga,1),To,25,15,[n+r+s+o,Qe.a,St.a,_e.a])),h.b=i4(ut(ot(ga,1),To,25,15,[k+w+_+d,bt.b,Rn.b,q.b])),h}function k5n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z;for(W=new le,B=new S(t.d.b);B.as.d.d+s.d.a?_.f.d=!0:(_.f.d=!0,_.f.a=!0))),r.b!=r.d.c&&(e=n);_&&(o=u(tr(t.f,h.d.i),57),e.bo.d.d+o.d.a?_.f.d=!0:(_.f.d=!0,_.f.a=!0))}for(d=new ar(lr(Uo(q).a.Kc(),new H));Vr(d);)h=u(Ir(d),17),h.a.b!=0&&(e=u(vj(h.a),8),h.d.j==(be(),On)&&(Z=new xC(e,new Re(e.a,s.d.d),s,h),Z.f.a=!0,Z.a=h.d,W.c[W.c.length]=Z),h.d.j==yr&&(Z=new xC(e,new Re(e.a,s.d.d+s.d.a),s,h),Z.f.d=!0,Z.a=h.d,W.c[W.c.length]=Z))}return W}function E5n(t,e,n){var r,s,o,h,d,w,k,_,M;if(mr(n,"Network simplex node placement",1),t.e=e,t.n=u(K(e,(ae(),X4)),304),$yn(t),ydn(t),ys(ec(new kn(null,new Tn(t.e.b,16)),new gQ),new E$t(t)),ys(Wi(ec(Wi(ec(new kn(null,new Tn(t.e.b,16)),new V9),new TQ),new _Q),new CQ),new k$t(t)),Be(Fe(K(t.e,(xe(),TS))))&&(h=zc(n,1),mr(h,"Straight Edges Pre-Processing",1),s4n(t),or(h)),efn(t.f),o=u(K(e,SS),19).a*t.f.a.c.length,lat(Xpt(Qpt(xnt(t.f),o),!1),zc(n,1)),t.d.a.gc()!=0){for(h=zc(n,1),mr(h,"Flexible Where Space Processing",1),d=u(Ov(Hj(xu(new kn(null,new Tn(t.f.a,16)),new pQ),new cQ)),19).a,w=u(Ov(qj(xu(new kn(null,new Tn(t.f.a,16)),new bQ),new uQ)),19).a,k=w-d,_=Iv(new Kb,t.f),M=Iv(new Kb,t.f),yf(lf(uf(cf(hf(new Sh,2e4),k),_),M)),ys(Wi(Wi(qnt(t.i),new vQ),new wQ),new yXt(d,_,k,M)),s=t.d.a.ec().Kc();s.Ob();)r=u(s.Pb(),213),r.g=1;lat(Xpt(Qpt(xnt(t.f),o),!1),zc(h,1)),or(h)}Be(Fe(K(e,TS)))&&(h=zc(n,1),mr(h,"Straight Edges Post-Processing",1),lgn(t),or(h)),H3n(t),t.e=null,t.f=null,t.i=null,t.c=null,nl(t.k),t.j=null,t.a=null,t.o=null,t.d.a.$b(),or(n)}function T5n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt;for(d=new S(t.a.b);d.a0)if(r=M.gc(),k=Cs(b.Math.floor((r+1)/2))-1,s=Cs(b.Math.ceil((r+1)/2))-1,e.o==V1)for(_=s;_>=k;_--)e.a[jt.p]==jt&&(W=u(M.Xb(_),46),G=u(W.a,10),!S0(n,W.b)&&q>t.b.e[G.p]&&(e.a[G.p]=jt,e.g[jt.p]=e.g[G.p],e.a[jt.p]=e.g[jt.p],e.f[e.g[jt.p].p]=(Fn(),!!(Be(e.f[e.g[jt.p].p])&jt.k==(Gn(),ca))),q=t.b.e[G.p]));else for(_=k;_<=s;_++)e.a[jt.p]==jt&&(bt=u(M.Xb(_),46),Z=u(bt.a,10),!S0(n,bt.b)&&q=G&&(Mt>G&&(q.c=Nt(Qn,Me,1,0,5,1),G=Mt),q.c[q.c.length]=h);q.c.length!=0&&(B=u(Pe(q,zz(e,q.c.length)),128),zn.a.Bc(B)!=null,B.s=W++,w5t(B,Qe,ce),q.c=Nt(Qn,Me,1,0,5,1))}for(jt=t.c.length+1,d=new S(t);d.aRn.s&&(Dl(n),Eu(Rn.i,r),r.c>0&&(r.a=Rn,ue(Rn.t,r),r.b=_e,ue(_e.i,r)))}function k6t(t){var e,n,r,s,o;switch(e=t.c,e){case 11:return t.Ml();case 12:return t.Ol();case 14:return t.Ql();case 15:return t.Tl();case 16:return t.Rl();case 17:return t.Ul();case 21:return mi(t),yi(),yi(),fA;case 10:switch(t.a){case 65:return t.yl();case 90:return t.Dl();case 122:return t.Kl();case 98:return t.El();case 66:return t.zl();case 60:return t.Jl();case 62:return t.Hl()}}switch(o=m5n(t),e=t.c,e){case 3:return t.Zl(o);case 4:return t.Xl(o);case 5:return t.Yl(o);case 0:if(t.a==123&&t.d=48&&e<=57){for(r=e-48;s=48&&e<=57;)if(r=r*10+e-48,r<0)throw nt(new Rr(Gr((Fr(),C8t))))}else throw nt(new Rr(Gr((Fr(),Jde))));if(n=r,e==44){if(s>=t.j)throw nt(new Rr(Gr((Fr(),e0e))));if((e=Ta(t.i,s++))>=48&&e<=57){for(n=e-48;s=48&&e<=57;)if(n=n*10+e-48,n<0)throw nt(new Rr(Gr((Fr(),C8t))));if(r>n)throw nt(new Rr(Gr((Fr(),n0e))))}else n=-1}if(e!=125)throw nt(new Rr(Gr((Fr(),t0e))));t.sl(s)?(o=(yi(),yi(),new Wm(9,o)),t.d=s+1):(o=(yi(),yi(),new Wm(3,o)),t.d=s),o.dm(r),o.cm(n),mi(t)}}return o}function Dhe(t,e,n,r,s){var o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn;for(W=new Jc(e.b),jt=new Jc(e.b),B=new Jc(e.b),We=new Jc(e.b),Z=new Jc(e.b),_e=si(e,0);_e.b!=_e.d.c;)for(Qt=u(ii(_e),11),d=new S(Qt.g);d.a0,bt=Qt.g.c.length>0,k&&bt?B.c[B.c.length]=Qt:k?W.c[W.c.length]=Qt:bt&&(jt.c[jt.c.length]=Qt);for(G=new S(W);G.a1)for(G=new A6((!t.a&&(t.a=new he(us,t,6,6)),t.a));G.e!=G.i.gc();)uC(G);for(h=u(At((!t.a&&(t.a=new he(us,t,6,6)),t.a),0),202),Z=xi,xi>Qt+jt?Z=Qt+jt:xice+W?bt=ce+W:KsQt-jt&&Zce-W&&btxi+hr?We=xi+hr:QtKs+_e?Qe=Ks+_e:cexi-hr&&WeKs-_e&&Qen&&(B=n-1),q=bN+pl(e,24)*PI*M-M/2,q<0?q=1:q>r&&(q=r-1),s=(Tv(),w=new mp,w),W$(s,B),K$(s,q),Or((!h.a&&(h.a=new Bs(Wh,h,5)),h.a),s)}function xe(){xe=X,eht=(di(),X3e),l_t=Q3e,AO=eAt,Tf=Z3e,Fx=nAt,Fw=J3e,Vy=rAt,vE=iAt,wE=sAt,nht=qG,Bw=G2,rht=t4e,CS=cAt,sG=zx,SO=(_6t(),Wve),Z4=Kve,$2=Yve,J4=Xve,Owe=new ao(zG,de(0)),bE=Vve,u_t=Gve,Px=Uve,w_t=wwe,h_t=Jve,f_t=nwe,sht=uwe,d_t=swe,g_t=owe,aG=kwe,aht=mwe,b_t=gwe,p_t=fwe,v_t=bwe,Nw=Rve,_S=jve,Xlt=nve,zTt=ive,i_t=new Mv(12),r_t=new ao(V2,i_t),RTt=(q0(),CE),X0=new ao(DSt,RTt),zy=new ao(ml,0),Nwe=new ao(gft,de(1)),UV=new ao(jx,P7),j2=$G,ws=US,pE=c5,Cwe=UO,Md=z3e,jy=i5,Pwe=new ao(pft,(Fn(),!0)),$y=WO,B2=oft,R2=H2,iG=mb,tht=jG,BTt=(fo(),c0),Xl=new ao(jw,BTt),Ow=a5,nG=$St,qy=Ky,Iwe=dft,o_t=JSt,a_t=(u4(),JO),new ao(KSt,a_t),Lwe=uft,Mwe=lft,Dwe=hft,Awe=cft,iht=Zve,ZTt=Cve,Zlt=_ve,SS=Qve,du=wve,Ry=K2e,ES=W2e,By=N2e,NTt=P2e,Ult=j2e,CO=F2e,Wlt=G2e,JTt=Sve,t_t=Ave,WTt=fve,rG=qve,Jlt=Dve,Qlt=ove,n_t=Fve,$Tt=tve,Ylt=eve,Glt=BG,e_t=Lve,KV=S2e,DTt=C2e,WV=_2e,VTt=lve,HTt=uve,GTt=hve,dE=o5,Oo=s5,Xg=OSt,Dd=aft,Klt=sft,PTt=z2e,Qg=fft,kS=V3e,JV=G3e,Pw=XSt,s_t=U3e,gE=W3e,YTt=yve,XTt=kve,Hy=$x,Hlt=T2e,QTt=Tve,ZV=Q2e,QV=X2e,eG=KO,KTt=pve,TS=Ove,LO=aAt,FTt=Y2e,c_t=Hve,jTt=Z2e,Swe=vve,_we=H2e,UTt=BSt,tG=mve,XV=V2e,pb=O2e,OTt=D2e,YV=L2e,ITt=M2e,Vlt=I2e,Nx=A2e,qTt=cve}function Nat(t,e){yat();var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi;if(We=t.e,G=t.d,s=t.a,We==0)switch(e){case 0:return"0";case 1:return M7;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ce=new Ap,e<0?ce.a+="0E+":ce.a+="0E",ce.a+=-e,ce.a}if(St=G*10+1+7,jt=Nt(Eh,wd,25,St+1,15,1),n=St,G==1)if(d=s[0],d<0){xi=Gs(d,po);do W=xi,xi=eI(xi,10),jt[--n]=48+Mr(Qp(W,Ia(xi,10)))&Ms;while(_c(xi,0)!=0)}else{xi=d;do W=xi,xi=xi/10|0,jt[--n]=48+(W-xi*10)&Ms;while(xi!=0)}else{Rn=Nt(Sr,Jr,25,G,15,1),hr=G,Pc(s,0,Rn,0,hr);t:for(;;){for(_e=0,k=hr-1;k>=0;k--)zn=Ra(M0(_e,32),Gs(Rn[k],po)),bt=Pdn(zn),Rn[k]=Mr(bt),_e=Mr(Rp(bt,32));Mt=Mr(_e),Z=n;do jt[--n]=48+Mt%10&Ms;while((Mt=Mt/10|0)!=0&&n!=0);for(r=9-Z+n,w=0;w0;w++)jt[--n]=48;for(M=hr-1;Rn[M]==0;M--)if(M==0)break t;hr=M+1}for(;jt[n]==48;)++n}if(q=We<0,h=St-n-e-1,e==0)return q&&(jt[--n]=45),Ih(jt,n,St-n);if(e>0&&h>=-6){if(h>=0){for(_=n+h,B=St-1;B>=_;B--)jt[B+1]=jt[B];return jt[++_]=46,q&&(jt[--n]=45),Ih(jt,n,St-n+1)}for(M=2;M<-h+1;M++)jt[--n]=48;return jt[--n]=46,jt[--n]=48,q&&(jt[--n]=45),Ih(jt,n,St-n)}return Qe=n+1,o=St,Qt=new Lm,q&&(Qt.a+="-"),o-Qe>=1?($p(Qt,jt[n]),Qt.a+=".",Qt.a+=Ih(jt,n+1,St-n-1)):Qt.a+=Ih(jt,n,St-n),Qt.a+="E",h>0&&(Qt.a+="+"),Qt.a+=""+h,Qt.a}function Nhe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce;switch(t.c=e,t.g=new Ar,n=(Dm(),new Sm(t.c)),r=new er(n),s3t(r),St=jr(ze(t.c,(rI(),tSt))),w=u(ze(t.c,Xht),316),Qt=u(ze(t.c,Qht),429),h=u(ze(t.c,QCt),482),jt=u(ze(t.c,Yht),430),t.j=Zt(ve(ze(t.c,h3e))),d=t.a,w.g){case 0:d=t.a;break;case 1:d=t.b;break;case 2:d=t.i;break;case 3:d=t.e;break;case 4:d=t.f;break;default:throw nt(new Pn(pH+(w.f!=null?w.f:""+w.g)))}if(t.d=new iQt(d,Qt,h),ee(t.d,(q8(),uS),Fe(ze(t.c,u3e))),t.d.c=Be(Fe(ze(t.c,ZCt))),i$(t.c).i==0)return t.d;for(M=new nr(i$(t.c));M.e!=M.i.gc();){for(_=u(dr(M),33),q=_.g/2,B=_.f/2,ce=new Re(_.i+q,_.j+B);Ml(t.g,ce);)Fm(ce,(b.Math.random()-.5)*xd,(b.Math.random()-.5)*xd);W=u(ze(_,(di(),KO)),142),Z=new xQt(ce,new ch(ce.a-q-t.j/2-W.b,ce.b-B-t.j/2-W.d,_.g+t.j+(W.b+W.c),_.f+t.j+(W.d+W.a))),ue(t.d.i,Z),Ai(t.g,ce,new ya(Z,_))}switch(jt.g){case 0:if(St==null)t.d.d=u(Pe(t.d.i,0),65);else for(Mt=new S(t.d.i);Mt.a1&&ks(_,bt,_.c.b,_.c),H$(s)));bt=Mt}return _}function D5n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi,Ks,eh,Zh,X1;for(mr(n,"Greedy cycle removal",1),St=e.a,X1=St.c.length,t.a=Nt(Sr,Jr,25,X1,15,1),t.c=Nt(Sr,Jr,25,X1,15,1),t.b=Nt(Sr,Jr,25,X1,15,1),k=0,bt=new S(St);bt.a0?hr+1:1);for(h=new S(ce.g);h.a0?hr+1:1)}t.c[k]==0?ai(t.e,W):t.a[k]==0&&ai(t.f,W),++k}for(G=-1,q=1,M=new le,t.d=u(K(e,(ae(),Ix)),230);X1>0;){for(;t.e.b!=0;)Ks=u(Tnt(t.e),10),t.b[Ks.p]=G--,G5t(t,Ks),--X1;for(;t.f.b!=0;)eh=u(Tnt(t.f),10),t.b[eh.p]=q++,G5t(t,eh),--X1;if(X1>0){for(B=Oa,Mt=new S(St);Mt.a=B&&(jt>B&&(M.c=Nt(Qn,Me,1,0,5,1),B=jt),M.c[M.c.length]=W));_=t.Zf(M),t.b[_.p]=q++,G5t(t,_),--X1}}for(xi=St.c.length+1,k=0;kt.b[Zh]&&(dw(r,!0),ee(e,xO,(Fn(),!0)));t.a=null,t.c=null,t.b=null,Mh(t.f),Mh(t.e),or(n)}function Fhe(t,e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt;for(r=new le,d=new le,Z=e/2,q=t.gc(),s=u(t.Xb(0),8),bt=u(t.Xb(1),8),G=Kst(s.a,s.b,bt.a,bt.b,Z),ue(r,(Sn(0,G.c.length),u(G.c[0],8))),ue(d,(Sn(1,G.c.length),u(G.c[1],8))),k=2;k=0;w--)ai(n,(Sn(w,h.c.length),u(h.c[w],8)));return n}function I5n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q;if(h=!0,M=null,r=null,s=null,e=!1,q=q4e,k=null,o=null,d=0,w=tst(t,d,UAt,WAt),w=0&&un(t.substr(d,2),"//")?(d+=2,w=tst(t,d,iA,sA),r=t.substr(d,w-d),d=w):M!=null&&(d==t.length||($r(d,t.length),t.charCodeAt(d)!=47))&&(h=!1,w=E2t(t,Lu(35),d),w==-1&&(w=t.length),r=t.substr(d,w-d),d=w);if(!n&&d0&&Ta(_,_.length-1)==58&&(s=_,d=w)),d=t.j){t.a=-1,t.c=1;return}if(e=Ta(t.i,t.d++),t.a=e,t.b==1){switch(e){case 92:if(r=10,t.d>=t.j)throw nt(new Rr(Gr((Fr(),kH))));t.a=Ta(t.i,t.d++);break;case 45:(t.e&512)==512&&t.d=t.j||Ta(t.i,t.d)!=63)break;if(++t.d>=t.j)throw nt(new Rr(Gr((Fr(),Zct))));switch(e=Ta(t.i,t.d++),e){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(t.d>=t.j)throw nt(new Rr(Gr((Fr(),Zct))));if(e=Ta(t.i,t.d++),e==61)r=16;else if(e==33)r=17;else throw nt(new Rr(Gr((Fr(),Pde))));break;case 35:for(;t.d=t.j)throw nt(new Rr(Gr((Fr(),kH))));t.a=Ta(t.i,t.d++);break;default:r=0}t.c=r}function N5n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr;if(_e=u(K(t,(xe(),ws)),98),_e!=(va(),U1)&&_e!=kb){for(G=t.b,q=G.c.length,_=new Jc((ql(q+2,jat),q$(Ra(Ra(5,q+2),(q+2)/10|0)))),W=new Jc((ql(q+2,jat),q$(Ra(Ra(5,q+2),(q+2)/10|0)))),ue(_,new Ar),ue(_,new Ar),ue(W,new le),ue(W,new le),ce=new le,e=0;e=Qt||!ehn(bt,r))&&(r=DQt(e,_)),Lo(bt,r),o=new ar(lr(Uo(bt).a.Kc(),new H));Vr(o);)s=u(Ir(o),17),!t.a[s.p]&&(W=s.c.i,--t.e[W.p],t.e[W.p]==0&&A8(h7(q,W)));for(k=_.c.length-1;k>=0;--k)ue(e.b,(Sn(k,_.c.length),u(_.c[k],29)));e.a.c=Nt(Qn,Me,1,0,5,1),or(n)}function Bhe(t){var e,n,r,s,o,h,d,w,k;for(t.b=1,mi(t),e=null,t.c==0&&t.a==94?(mi(t),e=(yi(),yi(),new jl(4)),qc(e,0,G7),d=new jl(4)):d=(yi(),yi(),new jl(4)),s=!0;(k=t.c)!=1;){if(k==0&&t.a==93&&!s){e&&(CC(e,d),d=e);break}if(n=t.a,r=!1,k==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:vy(d,y7(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(vy(d,y7(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(w=J4t(t,n),!w)throw nt(new Rr(Gr((Fr(),Jct))));vy(d,w),r=!0;break;default:n=O5t(t)}else if(k==24&&!s){if(e&&(CC(e,d),d=e),o=Bhe(t),CC(d,o),t.c!=0||t.a!=93)throw nt(new Rr(Gr((Fr(),Gde))));break}if(mi(t),!r){if(k==0){if(n==91)throw nt(new Rr(Gr((Fr(),T8t))));if(n==93)throw nt(new Rr(Gr((Fr(),_8t))));if(n==45&&!s&&t.a!=93)throw nt(new Rr(Gr((Fr(),tut))))}if(t.c!=0||t.a!=45||n==45&&s)qc(d,n,n);else{if(mi(t),(k=t.c)==1)throw nt(new Rr(Gr((Fr(),EH))));if(k==0&&t.a==93)qc(d,n,n),qc(d,45,45);else{if(k==0&&t.a==93||k==24)throw nt(new Rr(Gr((Fr(),tut))));if(h=t.a,k==0){if(h==91)throw nt(new Rr(Gr((Fr(),T8t))));if(h==93)throw nt(new Rr(Gr((Fr(),_8t))));if(h==45)throw nt(new Rr(Gr((Fr(),tut))))}else k==10&&(h=O5t(t));if(mi(t),n>h)throw nt(new Rr(Gr((Fr(),Kde))));qc(d,n,h)}}}s=!1}if(t.c==1)throw nt(new Rr(Gr((Fr(),EH))));return v4(d),TC(d),t.b=0,mi(t),d}function F5n(t){Nr(t.c,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#decimal"])),Nr(t.d,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#integer"])),Nr(t.e,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#boolean"])),Nr(t.f,Zr,ut(ot(Le,1),re,2,6,[Na,"EBoolean",fi,"EBoolean:Object"])),Nr(t.i,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#byte"])),Nr(t.g,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Nr(t.j,Zr,ut(ot(Le,1),re,2,6,[Na,"EByte",fi,"EByte:Object"])),Nr(t.n,Zr,ut(ot(Le,1),re,2,6,[Na,"EChar",fi,"EChar:Object"])),Nr(t.t,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#double"])),Nr(t.u,Zr,ut(ot(Le,1),re,2,6,[Na,"EDouble",fi,"EDouble:Object"])),Nr(t.F,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#float"])),Nr(t.G,Zr,ut(ot(Le,1),re,2,6,[Na,"EFloat",fi,"EFloat:Object"])),Nr(t.I,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#int"])),Nr(t.J,Zr,ut(ot(Le,1),re,2,6,[Na,"EInt",fi,"EInt:Object"])),Nr(t.N,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#long"])),Nr(t.O,Zr,ut(ot(Le,1),re,2,6,[Na,"ELong",fi,"ELong:Object"])),Nr(t.Z,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#short"])),Nr(t.$,Zr,ut(ot(Le,1),re,2,6,[Na,"EShort",fi,"EShort:Object"])),Nr(t._,Zr,ut(ot(Le,1),re,2,6,[Na,"http://www.w3.org/2001/XMLSchema#string"]))}function B5n(t){var e,n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr;if(t.c.length==1)return Sn(0,t.c.length),u(t.c[0],135);if(t.c.length<=0)return new A$;for(w=new S(t);w.aM&&(zn=0,hr+=_+_e,_=0),Wbn(Qt,h,zn,hr),e=b.Math.max(e,zn+ce.a),_=b.Math.max(_,ce.b),zn+=ce.a+_e;for(jt=new Ar,n=new Ar,Qe=new S(t);Qe.aYst(o))&&(M=o);for(!M&&(M=(Sn(0,Z.c.length),u(Z.c[0],180))),W=new S(e.b);W.a=-1900?1:0,n>=4?Yr(t,ut(ot(Le,1),re,2,6,[tfe,efe])[d]):Yr(t,ut(ot(Le,1),re,2,6,["BC","AD"])[d]);break;case 121:Dhn(t,n,r);break;case 77:Pwn(t,n,r);break;case 107:w=s.q.getHours(),w==0?Xd(t,24,n):Xd(t,w,n);break;case 83:n2n(t,n,s);break;case 69:_=r.q.getDay(),n==5?Yr(t,ut(ot(Le,1),re,2,6,["S","M","T","W","T","F","S"])[_]):n==4?Yr(t,ut(ot(Le,1),re,2,6,[Jat,tot,eot,not,rot,iot,sot])[_]):Yr(t,ut(ot(Le,1),re,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[_]);break;case 97:s.q.getHours()>=12&&s.q.getHours()<24?Yr(t,ut(ot(Le,1),re,2,6,["AM","PM"])[1]):Yr(t,ut(ot(Le,1),re,2,6,["AM","PM"])[0]);break;case 104:M=s.q.getHours()%12,M==0?Xd(t,12,n):Xd(t,M,n);break;case 75:B=s.q.getHours()%12,Xd(t,B,n);break;case 72:q=s.q.getHours(),Xd(t,q,n);break;case 99:G=r.q.getDay(),n==5?Yr(t,ut(ot(Le,1),re,2,6,["S","M","T","W","T","F","S"])[G]):n==4?Yr(t,ut(ot(Le,1),re,2,6,[Jat,tot,eot,not,rot,iot,sot])[G]):n==3?Yr(t,ut(ot(Le,1),re,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[G]):Xd(t,G,1);break;case 76:W=r.q.getMonth(),n==5?Yr(t,ut(ot(Le,1),re,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[W]):n==4?Yr(t,ut(ot(Le,1),re,2,6,[qat,Hat,Vat,Gat,ux,Uat,Wat,Kat,Yat,Xat,Qat,Zat])[W]):n==3?Yr(t,ut(ot(Le,1),re,2,6,["Jan","Feb","Mar","Apr",ux,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[W]):Xd(t,W+1,n);break;case 81:Z=r.q.getMonth()/3|0,n<4?Yr(t,ut(ot(Le,1),re,2,6,["Q1","Q2","Q3","Q4"])[Z]):Yr(t,ut(ot(Le,1),re,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[Z]);break;case 100:bt=r.q.getDate(),Xd(t,bt,n);break;case 109:k=s.q.getMinutes(),Xd(t,k,n);break;case 115:h=s.q.getSeconds(),Xd(t,h,n);break;case 122:n<4?Yr(t,o.c[0]):Yr(t,o.c[1]);break;case 118:Yr(t,o.b);break;case 90:n<3?Yr(t,Ggn(o)):n==3?Yr(t,Kgn(o)):Yr(t,Ygn(o.a));break;default:return!1}return!0}function T6t(t,e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi;if(Tue(e),w=u(At((!e.b&&(e.b=new En(vr,e,4,7)),e.b),0),82),_=u(At((!e.c&&(e.c=new En(vr,e,5,8)),e.c),0),82),d=Ro(w),k=Ro(_),h=(!e.a&&(e.a=new he(us,e,6,6)),e.a).i==0?null:u(At((!e.a&&(e.a=new he(us,e,6,6)),e.a),0),202),_e=u(tr(t.a,d),10),zn=u(tr(t.a,k),10),We=null,hr=null,_t(w,186)&&(ce=u(tr(t.a,w),299),_t(ce,11)?We=u(ce,11):_t(ce,10)&&(_e=u(ce,10),We=u(Pe(_e.j,0),11))),_t(_,186)&&(Rn=u(tr(t.a,_),299),_t(Rn,11)?hr=u(Rn,11):_t(Rn,10)&&(zn=u(Rn,10),hr=u(Pe(zn.j,0),11))),!_e||!zn)throw nt(new FT("The source or the target of edge "+e+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(W=new zv,Bo(W,e),ee(W,(ae(),Ii),e),ee(W,(xe(),Oo),null),q=u(K(r,Wc),21),_e==zn&&q.Fc((go(),wS)),We||(Qt=(ho(),su),Qe=null,h&&V3(u(K(_e,ws),98))&&(Qe=new Re(h.j,h.k),NZt(Qe,rD(e)),lJt(Qe,n),Zm(k,d)&&(Qt=al,Fi(Qe,_e.n))),We=kle(_e,Qe,Qt,r)),hr||(Qt=(ho(),al),xi=null,h&&V3(u(K(zn,ws),98))&&(xi=new Re(h.b,h.c),NZt(xi,rD(e)),lJt(xi,n)),hr=kle(zn,xi,Qt,$a(zn))),Ba(W,We),pa(W,hr),(We.e.c.length>1||We.g.c.length>1||hr.e.c.length>1||hr.g.c.length>1)&&q.Fc((go(),vS)),B=new nr((!e.n&&(e.n=new he(Yo,e,1,7)),e.n));B.e!=B.i.gc();)if(M=u(dr(B),137),!Be(Fe(ze(M,j2)))&&M.a)switch(Z=Pit(M),ue(W.b,Z),u(K(Z,Dd),272).g){case 1:case 2:q.Fc((go(),uE));break;case 0:q.Fc((go(),cE)),ee(Z,Dd,(D1(),TE))}if(o=u(K(r,ES),314),bt=u(K(r,rG),315),s=o==(K6(),wO)||bt==(aC(),fht),h&&(!h.a&&(h.a=new Bs(Wh,h,5)),h.a).i!=0&&s){for(Mt=sI(h),G=new ju,jt=si(Mt,0);jt.b!=jt.d.c;)St=u(ii(jt),8),ai(G,new So(St));ee(W,X9t,G)}return W}function z5n(t){t.gb||(t.gb=!0,t.b=hc(t,0),fs(t.b,18),Gi(t.b,19),t.a=hc(t,1),fs(t.a,1),Gi(t.a,2),Gi(t.a,3),Gi(t.a,4),Gi(t.a,5),t.o=hc(t,2),fs(t.o,8),fs(t.o,9),Gi(t.o,10),Gi(t.o,11),Gi(t.o,12),Gi(t.o,13),Gi(t.o,14),Gi(t.o,15),Gi(t.o,16),Gi(t.o,17),Gi(t.o,18),Gi(t.o,19),Gi(t.o,20),Gi(t.o,21),Gi(t.o,22),Gi(t.o,23),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),Do(t.o),t.p=hc(t,3),fs(t.p,2),fs(t.p,3),fs(t.p,4),fs(t.p,5),Gi(t.p,6),Gi(t.p,7),Do(t.p),Do(t.p),t.q=hc(t,4),fs(t.q,8),t.v=hc(t,5),Gi(t.v,9),Do(t.v),Do(t.v),Do(t.v),t.w=hc(t,6),fs(t.w,2),fs(t.w,3),fs(t.w,4),Gi(t.w,5),t.B=hc(t,7),Gi(t.B,1),Do(t.B),Do(t.B),Do(t.B),t.Q=hc(t,8),Gi(t.Q,0),Do(t.Q),t.R=hc(t,9),fs(t.R,1),t.S=hc(t,10),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),Do(t.S),t.T=hc(t,11),Gi(t.T,10),Gi(t.T,11),Gi(t.T,12),Gi(t.T,13),Gi(t.T,14),Do(t.T),Do(t.T),t.U=hc(t,12),fs(t.U,2),fs(t.U,3),Gi(t.U,4),Gi(t.U,5),Gi(t.U,6),Gi(t.U,7),Do(t.U),t.V=hc(t,13),Gi(t.V,10),t.W=hc(t,14),fs(t.W,18),fs(t.W,19),fs(t.W,20),Gi(t.W,21),Gi(t.W,22),Gi(t.W,23),t.bb=hc(t,15),fs(t.bb,10),fs(t.bb,11),fs(t.bb,12),fs(t.bb,13),fs(t.bb,14),fs(t.bb,15),fs(t.bb,16),Gi(t.bb,17),Do(t.bb),Do(t.bb),t.eb=hc(t,16),fs(t.eb,2),fs(t.eb,3),fs(t.eb,4),fs(t.eb,5),fs(t.eb,6),fs(t.eb,7),Gi(t.eb,8),Gi(t.eb,9),t.ab=hc(t,17),fs(t.ab,0),fs(t.ab,1),t.H=hc(t,18),Gi(t.H,0),Gi(t.H,1),Gi(t.H,2),Gi(t.H,3),Gi(t.H,4),Gi(t.H,5),Do(t.H),t.db=hc(t,19),Gi(t.db,2),t.c=hi(t,20),t.d=hi(t,21),t.e=hi(t,22),t.f=hi(t,23),t.i=hi(t,24),t.g=hi(t,25),t.j=hi(t,26),t.k=hi(t,27),t.n=hi(t,28),t.r=hi(t,29),t.s=hi(t,30),t.t=hi(t,31),t.u=hi(t,32),t.fb=hi(t,33),t.A=hi(t,34),t.C=hi(t,35),t.D=hi(t,36),t.F=hi(t,37),t.G=hi(t,38),t.I=hi(t,39),t.J=hi(t,40),t.L=hi(t,41),t.M=hi(t,42),t.N=hi(t,43),t.O=hi(t,44),t.P=hi(t,45),t.X=hi(t,46),t.Y=hi(t,47),t.Z=hi(t,48),t.$=hi(t,49),t._=hi(t,50),t.cb=hi(t,51),t.K=hi(t,52))}function di(){di=X;var t,e;GS=new ts(V1e),EE=new ts(G1e),CSt=(Qd(),tft),z3e=new vn(hkt,CSt),jx=new vn(px,null),q3e=new ts(s8t),ASt=(cy(),Ki(rft,ut(ot(ift,1),oe,291,0,[nft]))),BG=new vn(cH,ASt),UO=new vn(KI,(Fn(),!1)),LSt=(fo(),c0),jw=new vn(gkt,LSt),ISt=(q0(),bft),DSt=new vn(UI,ISt),PSt=new vn(gH,!1),FSt=($0(),HG),i5=new vn(oH,FSt),USt=new Mv(12),V2=new vn(ww,USt),RG=new vn($I,!1),BSt=new vn(vct,!1),YO=new vn(FC,!1),QSt=(va(),kb),US=new vn(Fot,QSt),$x=new ts(uH),zG=new ts(jI),gft=new ts(Hq),pft=new ts(PC),RSt=new ju,s5=new vn(Ekt,RSt),V3e=new vn(Ckt,!1),G3e=new vn(Skt,!1),jSt=new MT,KO=new vn(Lkt,jSt),$G=new vn(ukt,!1),Y3e=new vn(U1e,1),new vn(W1e,!0),de(0),new vn(K1e,de(100)),new vn(Y1e,!1),de(0),new vn(X1e,de(4e3)),de(0),new vn(Q1e,de(400)),new vn(Z1e,!1),new vn(J1e,!1),new vn(tde,!0),new vn(ede,!1),SSt=(Az(),yft),H3e=new vn(i8t,SSt),X3e=new vn(Qxt,10),Q3e=new vn(Zxt,10),eAt=new vn(Mot,20),Z3e=new vn(Jxt,10),nAt=new vn(Pot,2),J3e=new vn(tkt,10),rAt=new vn(ekt,0),qG=new vn(ikt,5),iAt=new vn(nkt,1),sAt=new vn(rkt,1),G2=new vn(ky,20),t4e=new vn(skt,10),cAt=new vn(akt,10),zx=new ts(okt),oAt=new aUt,aAt=new vn(Mkt,oAt),W3e=new ts(bct),WSt=!1,U3e=new vn(pct,WSt),zSt=new Mv(5),$St=new vn(pkt,zSt),qSt=(fy(),e=u(Wf(vo),9),new oh(e,u(ff(e,e.length),9),0)),a5=new vn(F7,qSt),YSt=(u4(),xb),KSt=new vn(wkt,YSt),uft=new ts(mkt),lft=new ts(ykt),hft=new ts(xkt),cft=new ts(kkt),HSt=(t=u(Wf(tA),9),new oh(t,u(ff(t,t.length),9),0)),H2=new vn(M4,HSt),GSt=on((bl(),AE)),mb=new vn(bx,GSt),VSt=new Re(0,0),o5=new vn(vx,VSt),jG=new vn(gct,!1),MSt=(D1(),TE),aft=new vn(Tkt,MSt),sft=new vn(Vq,!1),de(1),new vn(nde,null),XSt=new ts(Akt),fft=new ts(_kt),tAt=(be(),ac),c5=new vn(lkt,tAt),ml=new ts(ckt),ZSt=(il(),on(Eb)),Ky=new vn(B7,ZSt),dft=new vn(bkt,!1),JSt=new vn(vkt,!0),WO=new vn(fkt,!1),oft=new vn(dkt,!1),OSt=new vn(Dot,1),NSt=(tq(),wft),new vn(rde,NSt),K3e=!0}function ae(){ae=X;var t,e;Ii=new ts(oxt),U9t=new ts("coordinateOrigin"),$lt=new ts("processors"),G9t=new Hs("compoundNode",(Fn(),!1)),kO=new Hs("insideConnections",!1),X9t=new ts("originalBendpoints"),Q9t=new ts("originalDummyNodePosition"),Z9t=new ts("originalLabelEdge"),TO=new ts("representedLabels"),mS=new ts("endLabels"),Lx=new ts("endLabel.origin"),Dx=new Hs("labelSide",(Vl(),ZO)),K4=new Hs("maxEdgeThickness",0),H1=new Hs("reversed",!1),Ix=new ts(jfe),a1=new Hs("longEdgeSource",null),qh=new Hs("longEdgeTarget",null),Py=new Hs("longEdgeHasLabelDummies",!1),EO=new Hs("longEdgeBeforeLabelDummy",!1),HV=new Hs("edgeConstraint",(h2(),Elt)),Dw=new ts("inLayerLayoutUnit"),P2=new Hs("inLayerConstraint",(B0(),yO)),Mx=new Hs("inLayerSuccessorConstraint",new le),Y9t=new Hs("inLayerSuccessorConstraintBetweenNonDummies",!1),sl=new ts("portDummy"),qV=new Hs("crossingHint",de(0)),Wc=new Hs("graphProperties",(e=u(Wf(Mlt),9),new oh(e,u(ff(e,e.length),9),0))),gc=new Hs("externalPortSide",(be(),ac)),K9t=new Hs("externalPortSize",new Da),Plt=new ts("externalPortReplacedDummies"),VV=new ts("externalPortReplacedDummy"),Ny=new Hs("externalPortConnections",(t=u(Wf(Za),9),new oh(t,u(ff(t,t.length),9),0))),Iw=new Hs(Dfe,0),V9t=new ts("barycenterAssociates"),Ox=new ts("TopSideComments"),Ax=new ts("BottomSideComments"),zV=new ts("CommentConnectionPort"),Blt=new Hs("inputCollect",!1),jlt=new Hs("outputCollect",!1),xO=new Hs("cyclic",!1),W9t=new ts("crossHierarchyMap"),qlt=new ts("targetOffset"),new Hs("splineLabelSize",new Da),X4=new ts("spacings"),GV=new Hs("partitionConstraint",!1),Lw=new ts("breakingPoint.info"),eTt=new ts("splines.survivingEdge"),F2=new ts("splines.route.start"),Q4=new ts("splines.edgeChain"),tTt=new ts("originalPortConstraints"),hE=new ts("selfLoopHolder"),fE=new ts("splines.nsPortY"),Lc=new ts("modelOrder"),Rlt=new ts("longEdgeTargetNode"),Mw=new Hs(f1e,!1),Y4=new Hs(f1e,!1),Flt=new ts("layerConstraints.hiddenNodes"),J9t=new ts("layerConstraints.opposidePort"),zlt=new ts("targetNode.modelOrder")}function _6t(){_6t=X,fTt=(TD(),NV),Y2e=new vn(pxt,fTt),ove=new vn(bxt,(Fn(),!1)),wTt=(x$(),Nlt),fve=new vn(Kq,wTt),Sve=new vn(vxt,!1),Ave=new vn(wxt,!0),T2e=new vn(mxt,!1),CTt=(yD(),pht),Hve=new vn(yxt,CTt),de(1),Qve=new vn(xxt,de(7)),Zve=new vn(kxt,!1),cve=new vn(Ext,!1),hTt=(m2(),xlt),K2e=new vn(qot,hTt),xTt=(Zz(),cht),Cve=new vn(VI,xTt),mTt=(ph(),_O),wve=new vn(Txt,mTt),de(-1),vve=new vn(_xt,de(-1)),de(-1),mve=new vn(Cxt,de(-1)),de(-1),yve=new vn(Hot,de(4)),de(-1),kve=new vn(Vot,de(2)),yTt=(m4(),hG),_ve=new vn(Got,yTt),de(0),Tve=new vn(Uot,de(0)),pve=new vn(Wot,de(Ti)),lTt=(K6(),Cx),W2e=new vn($C,lTt),N2e=new vn(Sxt,!1),z2e=new vn(Kot,.1),G2e=new vn(Yot,!1),de(-1),H2e=new vn(Axt,de(-1)),de(-1),V2e=new vn(Lxt,de(-1)),de(0),P2e=new vn(Mxt,de(40)),uTt=(G8(),Ilt),j2e=new vn(Xot,uTt),cTt=mO,F2e=new vn(Yq,cTt),_Tt=(aC(),AS),qve=new vn(D4,_Tt),Ove=new ts(Xq),kTt=(bD(),FV),Lve=new vn(Qot,kTt),ETt=(nI(),BV),Dve=new vn(Zot,ETt),Fve=new vn(Jot,.3),Rve=new ts(tct),TTt=(sy(),lG),jve=new vn(ect,TTt),pTt=(uz(),vht),tve=new vn(Dxt,pTt),bTt=(lD(),wht),eve=new vn(Ixt,bTt),vTt=(Z8(),DS),nve=new vn(Qq,vTt),ive=new vn(Zq,.2),Z2e=new vn(nct,2),Wve=new vn(Oxt,null),Yve=new vn(Nxt,10),Kve=new vn(Pxt,10),Xve=new vn(Fxt,20),de(0),Vve=new vn(Bxt,de(0)),de(0),Gve=new vn(Rxt,de(0)),de(0),Uve=new vn(jxt,de(0)),_2e=new vn(rct,!1),iTt=(f7(),bS),S2e=new vn($xt,iTt),rTt=(I$(),mlt),C2e=new vn(zxt,rTt),lve=new vn(Jq,!1),de(0),uve=new vn(ict,de(16)),de(0),hve=new vn(sct,de(5)),LTt=(gz(),xht),wwe=new vn(Y0,LTt),Jve=new vn(tH,10),nwe=new vn(eH,1),ATt=(X$(),OV),uwe=new vn(zC,ATt),swe=new ts(act),STt=de(1),de(0),owe=new vn(oct,STt),MTt=(oz(),yht),kwe=new vn(nH,MTt),mwe=new ts(rH),gwe=new vn(iH,!0),fwe=new vn(sH,2),bwe=new vn(cct,!0),gTt=(nq(),PV),Q2e=new vn(qxt,gTt),dTt=(rx(),sE),X2e=new vn(Hxt,dTt),oTt=(j0(),bb),O2e=new vn(aH,oTt),I2e=new vn(Vxt,!1),sTt=(ew(),z4),A2e=new vn(uct,sTt),aTt=(Y_(),uht),D2e=new vn(Gxt,aTt),L2e=new vn(lct,0),M2e=new vn(hct,0),gve=klt,dve=wO,xve=cG,Eve=cG,bve=oht,q2e=($0(),np),U2e=Cx,$2e=Cx,B2e=Cx,R2e=np,Nve=LS,Pve=AS,Mve=AS,Ive=AS,Bve=dht,zve=LS,$ve=LS,rve=(q0(),qx),sve=qx,ave=DS,J2e=XO,twe=mE,ewe=Gy,rwe=mE,iwe=Gy,lwe=mE,hwe=Gy,awe=ylt,cwe=OV,Ewe=mE,Twe=Gy,ywe=mE,xwe=Gy,pwe=Gy,dwe=Gy,vwe=Gy}function co(){co=X,HEt=new Ls("DIRECTION_PREPROCESSOR",0),$Et=new Ls("COMMENT_PREPROCESSOR",1),hS=new Ls("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),slt=new Ls("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),c9t=new Ls("PARTITION_PREPROCESSOR",4),gV=new Ls("LABEL_DUMMY_INSERTER",5),TV=new Ls("SELF_LOOP_PREPROCESSOR",6),eE=new Ls("LAYER_CONSTRAINT_PREPROCESSOR",7),a9t=new Ls("PARTITION_MIDPROCESSOR",8),QEt=new Ls("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),i9t=new Ls("NODE_PROMOTION",10),tE=new Ls("LAYER_CONSTRAINT_POSTPROCESSOR",11),o9t=new Ls("PARTITION_POSTPROCESSOR",12),KEt=new Ls("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),u9t=new Ls("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),NEt=new Ls("BREAKING_POINT_INSERTER",15),wV=new Ls("LONG_EDGE_SPLITTER",16),alt=new Ls("PORT_SIDE_PROCESSOR",17),fV=new Ls("INVERTED_PORT_PROCESSOR",18),xV=new Ls("PORT_LIST_SORTER",19),h9t=new Ls("SORT_BY_INPUT_ORDER_OF_MODEL",20),yV=new Ls("NORTH_SOUTH_PORT_PREPROCESSOR",21),PEt=new Ls("BREAKING_POINT_PROCESSOR",22),s9t=new Ls(i1e,23),f9t=new Ls(s1e,24),kV=new Ls("SELF_LOOP_PORT_RESTORER",25),l9t=new Ls("SINGLE_EDGE_GRAPH_WRAPPER",26),dV=new Ls("IN_LAYER_CONSTRAINT_PROCESSOR",27),GEt=new Ls("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),n9t=new Ls("LABEL_AND_NODE_SIZE_PROCESSOR",29),e9t=new Ls("INNERMOST_NODE_MARGIN_CALCULATOR",30),_V=new Ls("SELF_LOOP_ROUTER",31),REt=new Ls("COMMENT_NODE_MARGIN_CALCULATOR",32),hV=new Ls("END_LABEL_PREPROCESSOR",33),bV=new Ls("LABEL_DUMMY_SWITCHER",34),BEt=new Ls("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),J7=new Ls("LABEL_SIDE_SELECTOR",36),JEt=new Ls("HYPEREDGE_DUMMY_MERGER",37),YEt=new Ls("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),r9t=new Ls("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),fS=new Ls("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),zEt=new Ls("CONSTRAINTS_POSTPROCESSOR",41),jEt=new Ls("COMMENT_POSTPROCESSOR",42),t9t=new Ls("HYPERNODE_PROCESSOR",43),XEt=new Ls("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vV=new Ls("LONG_EDGE_JOINER",45),EV=new Ls("SELF_LOOP_POSTPROCESSOR",46),FEt=new Ls("BREAKING_POINT_REMOVER",47),mV=new Ls("NORTH_SOUTH_PORT_POSTPROCESSOR",48),ZEt=new Ls("HORIZONTAL_COMPACTOR",49),pV=new Ls("LABEL_DUMMY_REMOVER",50),UEt=new Ls("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),VEt=new Ls("END_LABEL_SORTER",52),bO=new Ls("REVERSED_EDGE_RESTORER",53),lV=new Ls("END_LABEL_POSTPROCESSOR",54),WEt=new Ls("HIERARCHICAL_NODE_RESIZER",55),qEt=new Ls("DIRECTION_POSTPROCESSOR",56)}function q5n(t,e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe,Rn,zn,hr,xi,Ks,eh,Zh,X1,hU,bN,dA,vN,OE,Fft,j5e,Bft,cp,Gw,NE,wN,mN,Kx,Rft,gA,$5e,SLt,Uw,pA,jft,Yx,bA,i3,vA,$ft,z5e;for(SLt=0,xi=e,Zh=0,bN=xi.length;Zh0&&(t.a[cp.p]=SLt++)}for(bA=0,Ks=n,X1=0,dA=Ks.length;X10;){for(cp=(Zn(mN.b>0),u(mN.a.Xb(mN.c=--mN.b),11)),wN=0,d=new S(cp.e);d.a0&&(cp.j==(be(),On)?(t.a[cp.p]=bA,++bA):(t.a[cp.p]=bA+vN+Fft,++Fft))}bA+=Fft}for(NE=new Ar,G=new A0,hr=e,eh=0,hU=hr.length;ehk.b&&(k.b=Kx)):cp.i.c==$5e&&(Kxk.c&&(k.c=Kx));for(M8(W,0,W.length,null),Yx=Nt(Sr,Jr,25,W.length,15,1),r=Nt(Sr,Jr,25,bA+1,15,1),bt=0;bt0;)_e%2>0&&(s+=$ft[_e+1]),_e=(_e-1)/2|0,++$ft[_e];for(Qe=Nt(dme,Me,362,W.length*2,0,1),jt=0;jt'?":un(Pde,t)?"'(?<' or '(? toIndex: ",R6t=", toIndex: ",j6t="Index: ",$6t=", Size: ",D7="org.eclipse.elk.alg.common",qi={62:1},dfe="org.eclipse.elk.alg.common.compaction",gfe="Scanline/EventHandler",r0="org.eclipse.elk.alg.common.compaction.oned",pfe="CNode belongs to another CGroup.",bfe="ISpacingsHandler/1",wot="The ",mot=" instance has been finished already.",vfe="The direction ",wfe=" is not supported by the CGraph instance.",mfe="OneDimensionalCompactor",yfe="OneDimensionalCompactor/lambda$0$Type",xfe="Quadruplet",kfe="ScanlineConstraintCalculator",Efe="ScanlineConstraintCalculator/ConstraintsScanlineHandler",Tfe="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",_fe="ScanlineConstraintCalculator/Timestamp",Cfe="ScanlineConstraintCalculator/lambda$0$Type",md={169:1,45:1},yot="org.eclipse.elk.alg.common.compaction.options",sc="org.eclipse.elk.core.data",z6t="org.eclipse.elk.polyomino.traversalStrategy",q6t="org.eclipse.elk.polyomino.lowLevelSort",H6t="org.eclipse.elk.polyomino.highLevelSort",V6t="org.eclipse.elk.polyomino.fill",Ph={130:1},xot="polyomino",IC="org.eclipse.elk.alg.common.networksimplex",i0={177:1,3:1,4:1},Sfe="org.eclipse.elk.alg.common.nodespacing",T2="org.eclipse.elk.alg.common.nodespacing.cellsystem",I7="CENTER",Afe={212:1,326:1},G6t={3:1,4:1,5:1,595:1},fx="LEFT",dx="RIGHT",U6t="Vertical alignment cannot be null",W6t="BOTTOM",Bq="org.eclipse.elk.alg.common.nodespacing.internal",OC="UNDEFINED",R1=.01,FI="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",Lfe="LabelPlacer/lambda$0$Type",Mfe="LabelPlacer/lambda$1$Type",Dfe="portRatioOrPosition",O7="org.eclipse.elk.alg.common.overlaps",kot="DOWN",yd="org.eclipse.elk.alg.common.polyomino",Rq="NORTH",Eot="EAST",Tot="SOUTH",_ot="WEST",jq="org.eclipse.elk.alg.common.polyomino.structures",K6t="Direction",Cot="Grid is only of size ",Sot=". Requested point (",Aot=") is out of bounds.",$q=" Given center based coordinates were (",BI="org.eclipse.elk.graph.properties",Ife="IPropertyHolder",Y6t={3:1,94:1,134:1},gx="org.eclipse.elk.alg.common.spore",Ofe="org.eclipse.elk.alg.common.utils",_2={209:1},A4="org.eclipse.elk.core",Nfe="Connected Components Compaction",Pfe="org.eclipse.elk.alg.disco",zq="org.eclipse.elk.alg.disco.graph",Lot="org.eclipse.elk.alg.disco.options",X6t="CompactionStrategy",Q6t="org.eclipse.elk.disco.componentCompaction.strategy",Z6t="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",J6t="org.eclipse.elk.disco.debug.discoGraph",txt="org.eclipse.elk.disco.debug.discoPolys",Ffe="componentCompaction",C2="org.eclipse.elk.disco",Mot="org.eclipse.elk.spacing.componentComponent",Dot="org.eclipse.elk.edge.thickness",px="org.eclipse.elk.aspectRatio",ww="org.eclipse.elk.padding",L4="org.eclipse.elk.alg.disco.transform",Iot=1.5707963267948966,N7=17976931348623157e292,xy={3:1,4:1,5:1,192:1},ext={3:1,6:1,4:1,5:1,106:1,120:1},nxt="org.eclipse.elk.alg.force",rxt="ComponentsProcessor",Bfe="ComponentsProcessor/1",RI="org.eclipse.elk.alg.force.graph",Rfe="Component Layout",ixt="org.eclipse.elk.alg.force.model",qq="org.eclipse.elk.force.model",sxt="org.eclipse.elk.force.iterations",axt="org.eclipse.elk.force.repulsivePower",Oot="org.eclipse.elk.force.temperature",xd=.001,Not="org.eclipse.elk.force.repulsion",NC="org.eclipse.elk.alg.force.options",P7=1.600000023841858,Wl="org.eclipse.elk.force",jI="org.eclipse.elk.priority",ky="org.eclipse.elk.spacing.nodeNode",Pot="org.eclipse.elk.spacing.edgeLabel",Hq="org.eclipse.elk.randomSeed",PC="org.eclipse.elk.separateConnectedComponents",$I="org.eclipse.elk.interactive",Fot="org.eclipse.elk.portConstraints",Vq="org.eclipse.elk.edgeLabels.inline",FC="org.eclipse.elk.omitNodeMicroLayout",bx="org.eclipse.elk.nodeSize.options",M4="org.eclipse.elk.nodeSize.constraints",F7="org.eclipse.elk.nodeLabels.placement",B7="org.eclipse.elk.portLabels.placement",oxt="origin",jfe="random",$fe="boundingBox.upLeft",zfe="boundingBox.lowRight",cxt="org.eclipse.elk.stress.fixed",uxt="org.eclipse.elk.stress.desiredEdgeLength",lxt="org.eclipse.elk.stress.dimension",hxt="org.eclipse.elk.stress.epsilon",fxt="org.eclipse.elk.stress.iterationLimit",sb="org.eclipse.elk.stress",qfe="ELK Stress",vx="org.eclipse.elk.nodeSize.minimum",Gq="org.eclipse.elk.alg.force.stress",Hfe="Layered layout",wx="org.eclipse.elk.alg.layered",zI="org.eclipse.elk.alg.layered.compaction.components",BC="org.eclipse.elk.alg.layered.compaction.oned",Uq="org.eclipse.elk.alg.layered.compaction.oned.algs",S2="org.eclipse.elk.alg.layered.compaction.recthull",kd="org.eclipse.elk.alg.layered.components",K0="NONE",Cc={3:1,6:1,4:1,9:1,5:1,122:1},Vfe={3:1,6:1,4:1,5:1,141:1,106:1,120:1},Wq="org.eclipse.elk.alg.layered.compound",vs={51:1},ru="org.eclipse.elk.alg.layered.graph",Bot=" -> ",Gfe="Not supported by LGraph",dxt="Port side is undefined",Rot={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},Gg={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},Ufe={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},Wfe=`([{"' \r -`,Kfe=`)]}"' \r -`,Yfe="The given string contains parts that cannot be parsed as numbers.",qI="org.eclipse.elk.core.math",Xfe={3:1,4:1,142:1,207:1,414:1},Qfe={3:1,4:1,116:1,207:1,414:1},Un="org.eclipse.elk.layered",Ug="org.eclipse.elk.alg.layered.graph.transform",Zfe="ElkGraphImporter",Jfe="ElkGraphImporter/lambda$0$Type",t1e="ElkGraphImporter/lambda$1$Type",e1e="ElkGraphImporter/lambda$2$Type",n1e="ElkGraphImporter/lambda$4$Type",r1e="Node margin calculation",$n="org.eclipse.elk.alg.layered.intermediate",i1e="ONE_SIDED_GREEDY_SWITCH",s1e="TWO_SIDED_GREEDY_SWITCH",jot="No implementation is available for the layout processor ",gxt="IntermediateProcessorStrategy",$ot="Node '",a1e="FIRST_SEPARATE",o1e="LAST_SEPARATE",c1e="Odd port side processing",Ps="org.eclipse.elk.alg.layered.intermediate.compaction",RC="org.eclipse.elk.alg.layered.intermediate.greedyswitch",s0="org.eclipse.elk.alg.layered.p3order.counting",HI={225:1},mx="org.eclipse.elk.alg.layered.intermediate.loops",Kl="org.eclipse.elk.alg.layered.intermediate.loops.ordering",ab="org.eclipse.elk.alg.layered.intermediate.loops.routing",jC="org.eclipse.elk.alg.layered.intermediate.preserveorder",Ed="org.eclipse.elk.alg.layered.intermediate.wrapping",Sc="org.eclipse.elk.alg.layered.options",zot="INTERACTIVE",u1e="DEPTH_FIRST",l1e="EDGE_LENGTH",h1e="SELF_LOOPS",f1e="firstTryWithInitialOrder",pxt="org.eclipse.elk.layered.directionCongruency",bxt="org.eclipse.elk.layered.feedbackEdges",Kq="org.eclipse.elk.layered.interactiveReferencePoint",vxt="org.eclipse.elk.layered.mergeEdges",wxt="org.eclipse.elk.layered.mergeHierarchyEdges",mxt="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",yxt="org.eclipse.elk.layered.portSortingStrategy",xxt="org.eclipse.elk.layered.thoroughness",kxt="org.eclipse.elk.layered.unnecessaryBendpoints",Ext="org.eclipse.elk.layered.generatePositionAndLayerIds",qot="org.eclipse.elk.layered.cycleBreaking.strategy",VI="org.eclipse.elk.layered.layering.strategy",Txt="org.eclipse.elk.layered.layering.layerConstraint",_xt="org.eclipse.elk.layered.layering.layerChoiceConstraint",Cxt="org.eclipse.elk.layered.layering.layerId",Hot="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",Vot="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Got="org.eclipse.elk.layered.layering.nodePromotion.strategy",Uot="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Wot="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",$C="org.eclipse.elk.layered.crossingMinimization.strategy",Sxt="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Kot="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Yot="org.eclipse.elk.layered.crossingMinimization.semiInteractive",Axt="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",Lxt="org.eclipse.elk.layered.crossingMinimization.positionId",Mxt="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Xot="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",Yq="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",D4="org.eclipse.elk.layered.nodePlacement.strategy",Xq="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Qot="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Zot="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Jot="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",tct="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",ect="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",Dxt="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",Ixt="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",Qq="org.eclipse.elk.layered.edgeRouting.splines.mode",Zq="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",nct="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",Oxt="org.eclipse.elk.layered.spacing.baseValue",Nxt="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",Pxt="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",Fxt="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",Bxt="org.eclipse.elk.layered.priority.direction",Rxt="org.eclipse.elk.layered.priority.shortness",jxt="org.eclipse.elk.layered.priority.straightness",rct="org.eclipse.elk.layered.compaction.connectedComponents",$xt="org.eclipse.elk.layered.compaction.postCompaction.strategy",zxt="org.eclipse.elk.layered.compaction.postCompaction.constraints",Jq="org.eclipse.elk.layered.highDegreeNodes.treatment",ict="org.eclipse.elk.layered.highDegreeNodes.threshold",sct="org.eclipse.elk.layered.highDegreeNodes.treeHeight",Y0="org.eclipse.elk.layered.wrapping.strategy",tH="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",eH="org.eclipse.elk.layered.wrapping.correctionFactor",zC="org.eclipse.elk.layered.wrapping.cutting.strategy",act="org.eclipse.elk.layered.wrapping.cutting.cuts",oct="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",nH="org.eclipse.elk.layered.wrapping.validify.strategy",rH="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",iH="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",sH="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",cct="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",qxt="org.eclipse.elk.layered.edgeLabels.sideSelection",Hxt="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",aH="org.eclipse.elk.layered.considerModelOrder.strategy",Vxt="org.eclipse.elk.layered.considerModelOrder.noModelOrder",uct="org.eclipse.elk.layered.considerModelOrder.components",Gxt="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",lct="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",hct="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",fct="layering",d1e="layering.minWidth",g1e="layering.nodePromotion",GI="crossingMinimization",oH="org.eclipse.elk.hierarchyHandling",p1e="crossingMinimization.greedySwitch",b1e="nodePlacement",v1e="nodePlacement.bk",w1e="edgeRouting",UI="org.eclipse.elk.edgeRouting",j1="spacing",Uxt="priority",Wxt="compaction",m1e="compaction.postCompaction",y1e="Specifies whether and how post-process compaction is applied.",Kxt="highDegreeNodes",Yxt="wrapping",x1e="wrapping.cutting",k1e="wrapping.validify",Xxt="wrapping.multiEdge",dct="edgeLabels",WI="considerModelOrder",Qxt="org.eclipse.elk.spacing.commentComment",Zxt="org.eclipse.elk.spacing.commentNode",Jxt="org.eclipse.elk.spacing.edgeEdge",tkt="org.eclipse.elk.spacing.edgeNode",ekt="org.eclipse.elk.spacing.labelLabel",nkt="org.eclipse.elk.spacing.labelPortHorizontal",rkt="org.eclipse.elk.spacing.labelPortVertical",ikt="org.eclipse.elk.spacing.labelNode",skt="org.eclipse.elk.spacing.nodeSelfLoop",akt="org.eclipse.elk.spacing.portPort",okt="org.eclipse.elk.spacing.individual",ckt="org.eclipse.elk.port.borderOffset",ukt="org.eclipse.elk.noLayout",lkt="org.eclipse.elk.port.side",KI="org.eclipse.elk.debugMode",hkt="org.eclipse.elk.alignment",fkt="org.eclipse.elk.insideSelfLoops.activate",dkt="org.eclipse.elk.insideSelfLoops.yo",gct="org.eclipse.elk.nodeSize.fixedGraphSize",gkt="org.eclipse.elk.direction",pkt="org.eclipse.elk.nodeLabels.padding",bkt="org.eclipse.elk.portLabels.nextToPortIfPossible",vkt="org.eclipse.elk.portLabels.treatAsGroup",wkt="org.eclipse.elk.portAlignment.default",mkt="org.eclipse.elk.portAlignment.north",ykt="org.eclipse.elk.portAlignment.south",xkt="org.eclipse.elk.portAlignment.west",kkt="org.eclipse.elk.portAlignment.east",cH="org.eclipse.elk.contentAlignment",Ekt="org.eclipse.elk.junctionPoints",Tkt="org.eclipse.elk.edgeLabels.placement",_kt="org.eclipse.elk.port.index",Ckt="org.eclipse.elk.commentBox",Skt="org.eclipse.elk.hypernode",Akt="org.eclipse.elk.port.anchor",pct="org.eclipse.elk.partitioning.activate",bct="org.eclipse.elk.partitioning.partition",uH="org.eclipse.elk.position",Lkt="org.eclipse.elk.margins",Mkt="org.eclipse.elk.spacing.portsSurrounding",vct="org.eclipse.elk.interactiveLayout",Ac="org.eclipse.elk.core.util",Dkt={3:1,4:1,5:1,593:1},E1e="NETWORK_SIMPLEX",Vc={123:1,51:1},lH="org.eclipse.elk.alg.layered.p1cycles",Ey="org.eclipse.elk.alg.layered.p2layers",Ikt={402:1,225:1},T1e={832:1,3:1,4:1},Wu="org.eclipse.elk.alg.layered.p3order",bo="org.eclipse.elk.alg.layered.p4nodes",_1e={3:1,4:1,5:1,840:1},Td=1e-5,ob="org.eclipse.elk.alg.layered.p4nodes.bk",wct="org.eclipse.elk.alg.layered.p5edges",r1="org.eclipse.elk.alg.layered.p5edges.orthogonal",mct="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",yct=1e-6,Ty="org.eclipse.elk.alg.layered.p5edges.splines",xct=.09999999999999998,hH=1e-8,C1e=4.71238898038469,S1e=3.141592653589793,qC="org.eclipse.elk.alg.mrtree",HC="org.eclipse.elk.alg.mrtree.graph",yx="org.eclipse.elk.alg.mrtree.intermediate",A1e="Set neighbors in level",L1e="DESCENDANTS",Okt="org.eclipse.elk.mrtree.weighting",Nkt="org.eclipse.elk.mrtree.searchOrder",fH="org.eclipse.elk.alg.mrtree.options",Wg="org.eclipse.elk.mrtree",M1e="org.eclipse.elk.tree",Pkt="org.eclipse.elk.alg.radial",I4=6.283185307179586,Fkt=5e-324,D1e="org.eclipse.elk.alg.radial.intermediate",kct="org.eclipse.elk.alg.radial.intermediate.compaction",I1e={3:1,4:1,5:1,106:1},Bkt="org.eclipse.elk.alg.radial.intermediate.optimization",Ect="No implementation is available for the layout option ",VC="org.eclipse.elk.alg.radial.options",Rkt="org.eclipse.elk.radial.orderId",jkt="org.eclipse.elk.radial.radius",Tct="org.eclipse.elk.radial.compactor",_ct="org.eclipse.elk.radial.compactionStepSize",$kt="org.eclipse.elk.radial.sorter",zkt="org.eclipse.elk.radial.wedgeCriteria",qkt="org.eclipse.elk.radial.optimizationCriteria",_d="org.eclipse.elk.radial",O1e="org.eclipse.elk.alg.radial.p1position.wedge",Hkt="org.eclipse.elk.alg.radial.sorting",N1e=5.497787143782138,P1e=3.9269908169872414,F1e=2.356194490192345,B1e="org.eclipse.elk.alg.rectpacking",dH="org.eclipse.elk.alg.rectpacking.firstiteration",Cct="org.eclipse.elk.alg.rectpacking.options",Vkt="org.eclipse.elk.rectpacking.optimizationGoal",Gkt="org.eclipse.elk.rectpacking.lastPlaceShift",Ukt="org.eclipse.elk.rectpacking.currentPosition",Wkt="org.eclipse.elk.rectpacking.desiredPosition",Kkt="org.eclipse.elk.rectpacking.onlyFirstIteration",Ykt="org.eclipse.elk.rectpacking.rowCompaction",Sct="org.eclipse.elk.rectpacking.expandToAspectRatio",Xkt="org.eclipse.elk.rectpacking.targetWidth",gH="org.eclipse.elk.expandNodes",Fh="org.eclipse.elk.rectpacking",YI="org.eclipse.elk.alg.rectpacking.util",pH="No implementation available for ",_y="org.eclipse.elk.alg.spore",Cy="org.eclipse.elk.alg.spore.options",mw="org.eclipse.elk.sporeCompaction",Act="org.eclipse.elk.underlyingLayoutAlgorithm",Qkt="org.eclipse.elk.processingOrder.treeConstruction",Zkt="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Lct="org.eclipse.elk.processingOrder.preferredRoot",Mct="org.eclipse.elk.processingOrder.rootSelection",Dct="org.eclipse.elk.structure.structureExtractionStrategy",Jkt="org.eclipse.elk.compaction.compactionStrategy",t8t="org.eclipse.elk.compaction.orthogonal",e8t="org.eclipse.elk.overlapRemoval.maxIterations",n8t="org.eclipse.elk.overlapRemoval.runScanline",Ict="processingOrder",R1e="overlapRemoval",R7="org.eclipse.elk.sporeOverlap",j1e="org.eclipse.elk.alg.spore.p1structure",Oct="org.eclipse.elk.alg.spore.p2processingorder",Nct="org.eclipse.elk.alg.spore.p3execution",$1e="Invalid index: ",j7="org.eclipse.elk.core.alg",O4={331:1},Sy={288:1},z1e="Make sure its type is registered with the ",r8t=" utility class.",$7="true",Pct="false",q1e="Couldn't clone property '",yw=.05,Bh="org.eclipse.elk.core.options",H1e=1.2999999523162842,xw="org.eclipse.elk.box",i8t="org.eclipse.elk.box.packingMode",V1e="org.eclipse.elk.algorithm",G1e="org.eclipse.elk.resolvedAlgorithm",s8t="org.eclipse.elk.bendPoints",W5n="org.eclipse.elk.labelManager",U1e="org.eclipse.elk.scaleFactor",W1e="org.eclipse.elk.animate",K1e="org.eclipse.elk.animTimeFactor",Y1e="org.eclipse.elk.layoutAncestors",X1e="org.eclipse.elk.maxAnimTime",Q1e="org.eclipse.elk.minAnimTime",Z1e="org.eclipse.elk.progressBar",J1e="org.eclipse.elk.validateGraph",tde="org.eclipse.elk.validateOptions",ede="org.eclipse.elk.zoomToFit",K5n="org.eclipse.elk.font.name",nde="org.eclipse.elk.font.size",rde="org.eclipse.elk.edge.type",ide="partitioning",sde="nodeLabels",bH="portAlignment",Fct="nodeSize",Bct="port",a8t="portLabels",ade="insideSelfLoops",GC="org.eclipse.elk.fixed",vH="org.eclipse.elk.random",ode="port must have a parent node to calculate the port side",cde="The edge needs to have exactly one edge section. Found: ",UC="org.eclipse.elk.core.util.adapters",vh="org.eclipse.emf.ecore",N4="org.eclipse.elk.graph",ude="EMapPropertyHolder",lde="ElkBendPoint",hde="ElkGraphElement",fde="ElkConnectableShape",o8t="ElkEdge",dde="ElkEdgeSection",gde="EModelElement",pde="ENamedElement",c8t="ElkLabel",u8t="ElkNode",l8t="ElkPort",bde={92:1,90:1},xx="org.eclipse.emf.common.notify.impl",cb="The feature '",WC="' is not a valid changeable feature",vde="Expecting null",Rct="' is not a valid feature",wde="The feature ID",mde=" is not a valid feature ID",yc=32768,yde={105:1,92:1,90:1,56:1,49:1,97:1},Ln="org.eclipse.emf.ecore.impl",A2="org.eclipse.elk.graph.impl",KC="Recursive containment not allowed for ",z7="The datatype '",kw="' is not a valid classifier",jct="The value '",P4={190:1,3:1,4:1},$ct="The class '",q7="http://www.eclipse.org/elk/ElkGraph",xf=1024,h8t="property",YC="value",zct="source",xde="properties",kde="identifier",qct="height",Hct="width",Vct="parent",Gct="text",Uct="children",Ede="hierarchical",f8t="sources",Wct="targets",d8t="sections",wH="bendPoints",g8t="outgoingShape",p8t="incomingShape",b8t="outgoingSections",v8t="incomingSections",qa="org.eclipse.emf.common.util",w8t="Severe implementation error in the Json to ElkGraph importer.",Cd="id",Ca="org.eclipse.elk.graph.json",m8t="Unhandled parameter types: ",Tde="startPoint",_de="An edge must have at least one source and one target (edge id: '",H7="').",Cde="Referenced edge section does not exist: ",Sde=" (edge id: '",y8t="target",Ade="sourcePoint",Lde="targetPoint",mH="group",fi="name",Mde="connectableShape cannot be null",Dde="edge cannot be null",Kct="Passed edge is not 'simple'.",yH="org.eclipse.elk.graph.util",XI="The 'no duplicates' constraint is violated",Yct="targetIndex=",L2=", size=",Xct="sourceIndex=",Sd={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},Qct={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},xH="logging",Ide="measureExecutionTime",Ode="parser.parse.1",Nde="parser.parse.2",kH="parser.next.1",Zct="parser.next.2",Pde="parser.next.3",Fde="parser.next.4",M2="parser.factor.1",x8t="parser.factor.2",Bde="parser.factor.3",Rde="parser.factor.4",jde="parser.factor.5",$de="parser.factor.6",zde="parser.atom.1",qde="parser.atom.2",Hde="parser.atom.3",k8t="parser.atom.4",Jct="parser.atom.5",E8t="parser.cc.1",EH="parser.cc.2",Vde="parser.cc.3",Gde="parser.cc.5",T8t="parser.cc.6",_8t="parser.cc.7",tut="parser.cc.8",Ude="parser.ope.1",Wde="parser.ope.2",Kde="parser.ope.3",Kg="parser.descape.1",Yde="parser.descape.2",Xde="parser.descape.3",Qde="parser.descape.4",Zde="parser.descape.5",wh="parser.process.1",Jde="parser.quantifier.1",t0e="parser.quantifier.2",e0e="parser.quantifier.3",n0e="parser.quantifier.4",C8t="parser.quantifier.5",r0e="org.eclipse.emf.common.notify",S8t={415:1,672:1},i0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},QI={366:1,143:1},XC="index=",eut={3:1,4:1,5:1,126:1},s0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},A8t={3:1,6:1,4:1,5:1,192:1},a0e={3:1,4:1,5:1,165:1,367:1},o0e=";/?:@&=+$,",c0e="invalid authority: ",u0e="EAnnotation",l0e="ETypedElement",h0e="EStructuralFeature",f0e="EAttribute",d0e="EClassifier",g0e="EEnumLiteral",p0e="EGenericType",b0e="EOperation",v0e="EParameter",w0e="EReference",m0e="ETypeParameter",Yi="org.eclipse.emf.ecore.util",nut={76:1},L8t={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},y0e="org.eclipse.emf.ecore.util.FeatureMap$Entry",Ku=8192,Ay=2048,QC="byte",TH="char",ZC="double",JC="float",tS="int",eS="long",nS="short",x0e="java.lang.Object",F4={3:1,4:1,5:1,247:1},M8t={3:1,4:1,5:1,673:1},k0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Ko={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},ZI="mixed",Zr="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Rh="kind",E0e={3:1,4:1,5:1,674:1},D8t={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},_H={20:1,28:1,52:1,14:1,15:1,58:1,69:1},CH={47:1,125:1,279:1},SH={72:1,332:1},AH="The value of type '",LH="' must be of type '",B4=1316,jh="http://www.eclipse.org/emf/2002/Ecore",MH=-32768,Ew="constraints",Na="baseType",T0e="getEStructuralFeature",_0e="getFeatureID",rS="feature",C0e="getOperationID",I8t="operation",S0e="defaultValue",A0e="eTypeParameters",L0e="isInstance",M0e="getEEnumLiteral",D0e="eContainingClass",ci={55:1},I0e={3:1,4:1,5:1,119:1},O0e="org.eclipse.emf.ecore.resource",N0e={92:1,90:1,591:1,1935:1},rut="org.eclipse.emf.ecore.resource.impl",O8t="unspecified",JI="simple",DH="attribute",P0e="attributeWildcard",IH="element",iut="elementWildcard",i1="collapse",sut="itemType",OH="namespace",tO="##targetNamespace",$h="whiteSpace",N8t="wildcards",D2="http://www.eclipse.org/emf/2003/XMLType",aut="##any",V7="uninitialized",eO="The multiplicity constraint is violated",NH="org.eclipse.emf.ecore.xml.type",F0e="ProcessingInstruction",B0e="SimpleAnyType",R0e="XMLTypeDocumentRoot",Ds="org.eclipse.emf.ecore.xml.type.impl",nO="INF",j0e="processing",$0e="ENTITIES_._base",P8t="minLength",F8t="ENTITY",PH="NCName",z0e="IDREFS_._base",B8t="integer",out="token",cut="pattern",q0e="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",R8t="\\i\\c*",H0e="[\\i-[:]][\\c-[:]]*",V0e="nonPositiveInteger",rO="maxInclusive",j8t="NMTOKEN",G0e="NMTOKENS_._base",$8t="nonNegativeInteger",iO="minInclusive",U0e="normalizedString",W0e="unsignedByte",K0e="unsignedInt",Y0e="18446744073709551615",X0e="unsignedShort",Q0e="processingInstruction",Yg="org.eclipse.emf.ecore.xml.type.internal",G7=1114111,Z0e="Internal Error: shorthands: \\u",iS="xml:isDigit",uut="xml:isWord",lut="xml:isSpace",hut="xml:isNameChar",fut="xml:isInitialNameChar",J0e="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",tge="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",ege="Private Use",dut="ASSIGNED",gut="\0€ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿ 〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ffﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",z8t="UNASSIGNED",U7={3:1,117:1},nge="org.eclipse.emf.ecore.xml.type.util",FH={3:1,4:1,5:1,368:1},q8t="org.eclipse.xtext.xbase.lib",rge="Cannot add elements to a Range",ige="Cannot set elements in a Range",sge="Cannot remove elements from a Range",BH="locale",RH="default",jH="user.agent",l,$H,put;b.goog=b.goog||{},b.goog.global=b.goog.global||b,y0n(),D(1,null,{},C),l.Fb=function(e){return tUt(this,e)},l.Gb=function(){return this.gm},l.Hb=function(){return Dv(this)},l.Ib=function(){var e;return Mp(dl(this))+"@"+(e=Ji(this)>>>0,e.toString(16))},l.equals=function(t){return this.Fb(t)},l.hashCode=function(){return this.Hb()},l.toString=function(){return this.Ib()};var age,oge,cge;D(290,1,{290:1,2026:1},myt),l.le=function(e){var n;return n=new myt,n.i=4,e>1?n.c=vQt(this,e-1):n.c=this,n},l.me=function(){return L0(this),this.b},l.ne=function(){return Mp(this)},l.oe=function(){return L0(this),this.k},l.pe=function(){return(this.i&4)!=0},l.qe=function(){return(this.i&1)!=0},l.Ib=function(){return Nmt(this)},l.i=0;var Qn=N(ic,"Object",1),H8t=N(ic,"Class",290);D(1998,1,CI),N(SI,"Optional",1998),D(1170,1998,CI,A),l.Fb=function(e){return e===this},l.Hb=function(){return 2040732332},l.Ib=function(){return"Optional.absent()"},l.Jb=function(e){return Dr(e),DT(),but};var but;N(SI,"Absent",1170),D(628,1,{},cet),N(SI,"Joiner",628);var Y5n=as(SI,"Predicate");D(582,1,{169:1,582:1,3:1,45:1},bT),l.Mb=function(e){return rre(this,e)},l.Lb=function(e){return rre(this,e)},l.Fb=function(e){var n;return _t(e,582)?(n=u(e,582),f5t(this.a,n.a)):!1},l.Hb=function(){return Tyt(this.a)+306654252},l.Ib=function(){return agn(this.a)},N(SI,"Predicates/AndPredicate",582),D(408,1998,{408:1,3:1},Bk),l.Fb=function(e){var n;return _t(e,408)?(n=u(e,408),Si(this.a,n.a)):!1},l.Hb=function(){return 1502476572+Ji(this.a)},l.Ib=function(){return Hhe+this.a+")"},l.Jb=function(e){return new Bk(r$(e.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},N(SI,"Present",408),D(198,1,_7),l.Nb=function(e){Ea(this,e)},l.Qb=function(){Vqt()},N(Ye,"UnmodifiableIterator",198),D(1978,198,C7),l.Qb=function(){Vqt()},l.Rb=function(e){throw nt(new Pr)},l.Wb=function(e){throw nt(new Pr)},N(Ye,"UnmodifiableListIterator",1978),D(386,1978,C7),l.Ob=function(){return this.c0},l.Pb=function(){if(this.c>=this.d)throw nt(new vc);return this.Xb(this.c++)},l.Tb=function(){return this.c},l.Ub=function(){if(this.c<=0)throw nt(new vc);return this.Xb(--this.c)},l.Vb=function(){return this.c-1},l.c=0,l.d=0,N(Ye,"AbstractIndexedListIterator",386),D(699,198,_7),l.Ob=function(){return oit(this)},l.Pb=function(){return Amt(this)},l.e=1,N(Ye,"AbstractIterator",699),D(1986,1,{224:1}),l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.Fb=function(e){return _it(this,e)},l.Hb=function(){return Ji(this.Zb())},l.dc=function(){return this.gc()==0},l.ec=function(){return N6(this)},l.Ib=function(){return Wo(this.Zb())},N(Ye,"AbstractMultimap",1986),D(726,1986,k2),l.$b=function(){Q$(this)},l._b=function(e){return uHt(this,e)},l.ac=function(){return new t8(this,this.c)},l.ic=function(e){return this.hc()},l.bc=function(){return new K3(this,this.c)},l.jc=function(){return this.mc(this.hc())},l.kc=function(){return new Sqt(this)},l.lc=function(){return Ist(this.c.vc().Nc(),new F,64,this.d)},l.cc=function(e){return Pi(this,e)},l.fc=function(e){return $D(this,e)},l.gc=function(){return this.d},l.mc=function(e){return pn(),new T(e)},l.nc=function(){return new Cqt(this)},l.oc=function(){return Ist(this.c.Cc().Nc(),new P,64,this.d)},l.pc=function(e,n){return new D$(this,e,n,null)},l.d=0,N(Ye,"AbstractMapBasedMultimap",726),D(1631,726,k2),l.hc=function(){return new Jc(this.a)},l.jc=function(){return pn(),pn(),uo},l.cc=function(e){return u(Pi(this,e),15)},l.fc=function(e){return u($D(this,e),15)},l.Zb=function(){return j6(this)},l.Fb=function(e){return _it(this,e)},l.qc=function(e){return u(Pi(this,e),15)},l.rc=function(e){return u($D(this,e),15)},l.mc=function(e){return JM(u(e,15))},l.pc=function(e,n){return kZt(this,e,u(n,15),null)},N(Ye,"AbstractListMultimap",1631),D(732,1,da),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.c.Ob()||this.e.Ob()},l.Pb=function(){var e;return this.e.Ob()||(e=u(this.c.Pb(),42),this.b=e.cd(),this.a=u(e.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},l.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},N(Ye,"AbstractMapBasedMultimap/Itr",732),D(1099,732,da,Cqt),l.sc=function(e,n){return n},N(Ye,"AbstractMapBasedMultimap/1",1099),D(1100,1,{},P),l.Kb=function(e){return u(e,14).Nc()},N(Ye,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),D(1101,732,da,Sqt),l.sc=function(e,n){return new Cv(e,n)},N(Ye,"AbstractMapBasedMultimap/2",1101);var V8t=as(br,"Map");D(1967,1,bw),l.wc=function(e){U_(this,e)},l.yc=function(e,n,r){return qit(this,e,n,r)},l.$b=function(){this.vc().$b()},l.tc=function(e){return pst(this,e)},l._b=function(e){return!!p4t(this,e,!1)},l.uc=function(e){var n,r,s;for(r=this.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),s=n.dd(),Gt(e)===Gt(s)||e!=null&&Si(e,s))return!0;return!1},l.Fb=function(e){var n,r,s;if(e===this)return!0;if(!_t(e,83)||(s=u(e,83),this.gc()!=s.gc()))return!1;for(r=s.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),!this.tc(n))return!1;return!0},l.xc=function(e){return cc(p4t(this,e,!1))},l.Hb=function(){return gyt(this.vc())},l.dc=function(){return this.gc()==0},l.ec=function(){return new Tm(this)},l.zc=function(e,n){throw nt(new Tg("Put not supported on this map"))},l.Ac=function(e){G_(this,e)},l.Bc=function(e){return cc(p4t(this,e,!0))},l.gc=function(){return this.vc().gc()},l.Ib=function(){return sae(this)},l.Cc=function(){return new m1(this)},N(br,"AbstractMap",1967),D(1987,1967,bw),l.bc=function(){return new TR(this)},l.vc=function(){return xYt(this)},l.ec=function(){var e;return e=this.g,e||(this.g=this.bc())},l.Cc=function(){var e;return e=this.i,e||(this.i=new eVt(this))},N(Ye,"Maps/ViewCachingAbstractMap",1987),D(389,1987,bw,t8),l.xc=function(e){return qan(this,e)},l.Bc=function(e){return iun(this,e)},l.$b=function(){this.d==this.e.c?this.e.$b():Oj(new Fvt(this))},l._b=function(e){return Fre(this.d,e)},l.Ec=function(){return new Rk(this)},l.Dc=function(){return this.Ec()},l.Fb=function(e){return this===e||Si(this.d,e)},l.Hb=function(){return Ji(this.d)},l.ec=function(){return this.e.ec()},l.gc=function(){return this.d.gc()},l.Ib=function(){return Wo(this.d)},N(Ye,"AbstractMapBasedMultimap/AsMap",389);var $1=as(ic,"Iterable");D(28,1,wy),l.Jc=function(e){_a(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new Tn(this,0)},l.Oc=function(){return new kn(null,this.Nc())},l.Fc=function(e){throw nt(new Tg("Add not supported on this collection"))},l.Gc=function(e){return Ka(this,e)},l.$b=function(){xwt(this)},l.Hc=function(e){return ry(this,e,!1)},l.Ic=function(e){return DD(this,e)},l.dc=function(){return this.gc()==0},l.Mc=function(e){return ry(this,e,!0)},l.Pc=function(){return Yvt(this)},l.Qc=function(e){return XD(this,e)},l.Ib=function(){return Jp(this)},N(br,"AbstractCollection",28);var zh=as(br,"Set");D(B1,28,Uu),l.Nc=function(){return new Tn(this,1)},l.Fb=function(e){return Lie(this,e)},l.Hb=function(){return gyt(this)},N(br,"AbstractSet",B1),D(1970,B1,Uu),N(Ye,"Sets/ImprovedAbstractSet",1970),D(1971,1970,Uu),l.$b=function(){this.Rc().$b()},l.Hc=function(e){return lie(this,e)},l.dc=function(){return this.Rc().dc()},l.Mc=function(e){var n;return this.Hc(e)?(n=u(e,42),this.Rc().ec().Mc(n.cd())):!1},l.gc=function(){return this.Rc().gc()},N(Ye,"Maps/EntrySet",1971),D(1097,1971,Uu,Rk),l.Hc=function(e){return Hyt(this.a.d.vc(),e)},l.Kc=function(){return new Fvt(this.a)},l.Rc=function(){return this.a},l.Mc=function(e){var n;return Hyt(this.a.d.vc(),e)?(n=u(e,42),Asn(this.a.e,n.cd()),!0):!1},l.Nc=function(){return GM(this.a.d.vc().Nc(),new GB(this.a))},N(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),D(1098,1,{},GB),l.Kb=function(e){return hJt(this.a,u(e,42))},N(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),D(730,1,da,Fvt),l.Nb=function(e){Ea(this,e)},l.Pb=function(){var e;return e=u(this.b.Pb(),42),this.a=u(e.dd(),14),hJt(this.c,e)},l.Ob=function(){return this.b.Ob()},l.Qb=function(){r4(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},N(Ye,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),D(532,1970,Uu,TR),l.$b=function(){this.b.$b()},l.Hc=function(e){return this.b._b(e)},l.Jc=function(e){Dr(e),this.b.wc(new btt(e))},l.dc=function(){return this.b.dc()},l.Kc=function(){return new IT(this.b.vc().Kc())},l.Mc=function(e){return this.b._b(e)?(this.b.Bc(e),!0):!1},l.gc=function(){return this.b.gc()},N(Ye,"Maps/KeySet",532),D(318,532,Uu,K3),l.$b=function(){var e;Oj((e=this.b.vc().Kc(),new cbt(this,e)))},l.Ic=function(e){return this.b.ec().Ic(e)},l.Fb=function(e){return this===e||Si(this.b.ec(),e)},l.Hb=function(){return Ji(this.b.ec())},l.Kc=function(){var e;return e=this.b.vc().Kc(),new cbt(this,e)},l.Mc=function(e){var n,r;return r=0,n=u(this.b.Bc(e),14),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},l.Nc=function(){return this.b.ec().Nc()},N(Ye,"AbstractMapBasedMultimap/KeySet",318),D(731,1,da,cbt),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.c.Ob()},l.Pb=function(){return this.a=u(this.c.Pb(),42),this.a.cd()},l.Qb=function(){var e;r4(!!this.a),e=u(this.a.dd(),14),this.c.Qb(),this.b.a.d-=e.gc(),e.$b(),this.a=null},N(Ye,"AbstractMapBasedMultimap/KeySet/1",731),D(491,389,{83:1,161:1},RM),l.bc=function(){return this.Sc()},l.ec=function(){return this.Tc()},l.Sc=function(){return new gM(this.c,this.Uc())},l.Tc=function(){var e;return e=this.b,e||(this.b=this.Sc())},l.Uc=function(){return u(this.d,161)},N(Ye,"AbstractMapBasedMultimap/SortedAsMap",491),D(542,491,Vhe,yj),l.bc=function(){return new Jk(this.a,u(u(this.d,161),171))},l.Sc=function(){return new Jk(this.a,u(u(this.d,161),171))},l.ec=function(){var e;return e=this.b,u(e||(this.b=new Jk(this.a,u(u(this.d,161),171))),271)},l.Tc=function(){var e;return e=this.b,u(e||(this.b=new Jk(this.a,u(u(this.d,161),171))),271)},l.Uc=function(){return u(u(this.d,161),171)},N(Ye,"AbstractMapBasedMultimap/NavigableAsMap",542),D(490,318,Ghe,gM),l.Nc=function(){return this.b.ec().Nc()},N(Ye,"AbstractMapBasedMultimap/SortedKeySet",490),D(388,490,S6t,Jk),N(Ye,"AbstractMapBasedMultimap/NavigableKeySet",388),D(541,28,wy,D$),l.Fc=function(e){var n,r;return gl(this),r=this.d.dc(),n=this.d.Fc(e),n&&(++this.f.d,r&&qM(this)),n},l.Gc=function(e){var n,r,s;return e.dc()?!1:(s=(gl(this),this.d.gc()),n=this.d.Gc(e),n&&(r=this.d.gc(),this.f.d+=r-s,s==0&&qM(this)),n)},l.$b=function(){var e;e=(gl(this),this.d.gc()),e!=0&&(this.d.$b(),this.f.d-=e,Rj(this))},l.Hc=function(e){return gl(this),this.d.Hc(e)},l.Ic=function(e){return gl(this),this.d.Ic(e)},l.Fb=function(e){return e===this?!0:(gl(this),Si(this.d,e))},l.Hb=function(){return gl(this),Ji(this.d)},l.Kc=function(){return gl(this),new kvt(this)},l.Mc=function(e){var n;return gl(this),n=this.d.Mc(e),n&&(--this.f.d,Rj(this)),n},l.gc=function(){return jGt(this)},l.Nc=function(){return gl(this),this.d.Nc()},l.Ib=function(){return gl(this),Wo(this.d)},N(Ye,"AbstractMapBasedMultimap/WrappedCollection",541);var mh=as(br,"List");D(728,541,{20:1,28:1,14:1,15:1},Qvt),l.ad=function(e){n4(this,e)},l.Nc=function(){return gl(this),this.d.Nc()},l.Vc=function(e,n){var r;gl(this),r=this.d.dc(),u(this.d,15).Vc(e,n),++this.a.d,r&&qM(this)},l.Wc=function(e,n){var r,s,o;return n.dc()?!1:(o=(gl(this),this.d.gc()),r=u(this.d,15).Wc(e,n),r&&(s=this.d.gc(),this.a.d+=s-o,o==0&&qM(this)),r)},l.Xb=function(e){return gl(this),u(this.d,15).Xb(e)},l.Xc=function(e){return gl(this),u(this.d,15).Xc(e)},l.Yc=function(){return gl(this),new wUt(this)},l.Zc=function(e){return gl(this),new DXt(this,e)},l.$c=function(e){var n;return gl(this),n=u(this.d,15).$c(e),--this.a.d,Rj(this),n},l._c=function(e,n){return gl(this),u(this.d,15)._c(e,n)},l.bd=function(e,n){return gl(this),kZt(this.a,this.e,u(this.d,15).bd(e,n),this.b?this.b:this)},N(Ye,"AbstractMapBasedMultimap/WrappedList",728),D(1096,728,{20:1,28:1,14:1,15:1,54:1},cWt),N(Ye,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),D(620,1,da,kvt),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return x8(this),this.b.Ob()},l.Pb=function(){return x8(this),this.b.Pb()},l.Qb=function(){GUt(this)},N(Ye,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),D(729,620,Jd,wUt,DXt),l.Qb=function(){GUt(this)},l.Rb=function(e){var n;n=jGt(this.a)==0,(x8(this),u(this.b,125)).Rb(e),++this.a.a.d,n&&qM(this.a)},l.Sb=function(){return(x8(this),u(this.b,125)).Sb()},l.Tb=function(){return(x8(this),u(this.b,125)).Tb()},l.Ub=function(){return(x8(this),u(this.b,125)).Ub()},l.Vb=function(){return(x8(this),u(this.b,125)).Vb()},l.Wb=function(e){(x8(this),u(this.b,125)).Wb(e)},N(Ye,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),D(727,541,Ghe,H2t),l.Nc=function(){return gl(this),this.d.Nc()},N(Ye,"AbstractMapBasedMultimap/WrappedSortedSet",727),D(1095,727,S6t,lUt),N(Ye,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),D(1094,541,Uu,kWt),l.Nc=function(){return gl(this),this.d.Nc()},N(Ye,"AbstractMapBasedMultimap/WrappedSet",1094),D(1103,1,{},F),l.Kb=function(e){return Nsn(u(e,42))},N(Ye,"AbstractMapBasedMultimap/lambda$1$Type",1103),D(1102,1,{},rtt),l.Kb=function(e){return new Cv(this.a,e)},N(Ye,"AbstractMapBasedMultimap/lambda$2$Type",1102);var I2=as(br,"Map/Entry");D(345,1,Mq),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),dd(this.cd(),n.cd())&&dd(this.dd(),n.dd())):!1},l.Hb=function(){var e,n;return e=this.cd(),n=this.dd(),(e==null?0:Ji(e))^(n==null?0:Ji(n))},l.ed=function(e){throw nt(new Pr)},l.Ib=function(){return this.cd()+"="+this.dd()},N(Ye,Uhe,345),D(1988,28,wy),l.$b=function(){this.fd().$b()},l.Hc=function(e){var n;return _t(e,42)?(n=u(e,42),gin(this.fd(),n.cd(),n.dd())):!1},l.Mc=function(e){var n;return _t(e,42)?(n=u(e,42),nZt(this.fd(),n.cd(),n.dd())):!1},l.gc=function(){return this.fd().d},N(Ye,"Multimaps/Entries",1988),D(733,1988,wy,QL),l.Kc=function(){return this.a.kc()},l.fd=function(){return this.a},l.Nc=function(){return this.a.lc()},N(Ye,"AbstractMultimap/Entries",733),D(734,733,Uu,Rpt),l.Nc=function(){return this.a.lc()},l.Fb=function(e){return O4t(this,e)},l.Hb=function(){return rne(this)},N(Ye,"AbstractMultimap/EntrySet",734),D(735,28,wy,D3),l.$b=function(){this.a.$b()},l.Hc=function(e){return Zcn(this.a,e)},l.Kc=function(){return this.a.nc()},l.gc=function(){return this.a.d},l.Nc=function(){return this.a.oc()},N(Ye,"AbstractMultimap/Values",735),D(1989,28,{835:1,20:1,28:1,14:1}),l.Jc=function(e){Dr(e),X3(this).Jc(new ptt(e))},l.Nc=function(){var e;return e=X3(this).Nc(),Ist(e,new yt,64|e.qd()&1296,this.a.d)},l.Fc=function(e){return Wpt(),!0},l.Gc=function(e){return Dr(this),Dr(e),_t(e,543)?min(u(e,835)):!e.dc()&&Zrt(this,e.Kc())},l.Hc=function(e){var n;return n=u(ny(j6(this.a),e),14),(n?n.gc():0)>0},l.Fb=function(e){return fbn(this,e)},l.Hb=function(){return Ji(X3(this))},l.dc=function(){return X3(this).dc()},l.Mc=function(e){return koe(this,e,1)>0},l.Ib=function(){return Wo(X3(this))},N(Ye,"AbstractMultiset",1989),D(1991,1970,Uu),l.$b=function(){Q$(this.a.a)},l.Hc=function(e){var n,r;return _t(e,492)?(r=u(e,416),u(r.a.dd(),14).gc()<=0?!1:(n=IQt(this.a,r.a.cd()),n==u(r.a.dd(),14).gc())):!1},l.Mc=function(e){var n,r,s,o;return _t(e,492)&&(r=u(e,416),n=r.a.cd(),s=u(r.a.dd(),14).gc(),s!=0)?(o=this.a,tpn(o,n,s)):!1},N(Ye,"Multisets/EntrySet",1991),D(1109,1991,Uu,ZL),l.Kc=function(){return new Pqt(xYt(j6(this.a.a)).Kc())},l.gc=function(){return j6(this.a.a).gc()},N(Ye,"AbstractMultiset/EntrySet",1109),D(619,726,k2),l.hc=function(){return this.gd()},l.jc=function(){return this.hd()},l.cc=function(e){return this.jd(e)},l.fc=function(e){return this.kd(e)},l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.hd=function(){return pn(),pn(),UH},l.Fb=function(e){return _it(this,e)},l.jd=function(e){return u(Pi(this,e),21)},l.kd=function(e){return u($D(this,e),21)},l.mc=function(e){return pn(),new Yk(u(e,21))},l.pc=function(e,n){return new kWt(this,e,u(n,21))},N(Ye,"AbstractSetMultimap",619),D(1657,619,k2),l.hc=function(){return new Dp(this.b)},l.gd=function(){return new Dp(this.b)},l.jc=function(){return fwt(new Dp(this.b))},l.hd=function(){return fwt(new Dp(this.b))},l.cc=function(e){return u(u(Pi(this,e),21),84)},l.jd=function(e){return u(u(Pi(this,e),21),84)},l.fc=function(e){return u(u($D(this,e),21),84)},l.kd=function(e){return u(u($D(this,e),21),84)},l.mc=function(e){return _t(e,271)?fwt(u(e,271)):(pn(),new k2t(u(e,84)))},l.Zb=function(){var e;return e=this.f,e||(this.f=_t(this.c,171)?new yj(this,u(this.c,171)):_t(this.c,161)?new RM(this,u(this.c,161)):new t8(this,this.c))},l.pc=function(e,n){return _t(n,271)?new lUt(this,e,u(n,271)):new H2t(this,e,u(n,84))},N(Ye,"AbstractSortedSetMultimap",1657),D(1658,1657,k2),l.Zb=function(){var e;return e=this.f,u(u(e||(this.f=_t(this.c,171)?new yj(this,u(this.c,171)):_t(this.c,161)?new RM(this,u(this.c,161)):new t8(this,this.c)),161),171)},l.ec=function(){var e;return e=this.i,u(u(e||(this.i=_t(this.c,171)?new Jk(this,u(this.c,171)):_t(this.c,161)?new gM(this,u(this.c,161)):new K3(this,this.c)),84),271)},l.bc=function(){return _t(this.c,171)?new Jk(this,u(this.c,171)):_t(this.c,161)?new gM(this,u(this.c,161)):new K3(this,this.c)},N(Ye,"AbstractSortedKeySortedSetMultimap",1658),D(2010,1,{1947:1}),l.Fb=function(e){return H1n(this,e)},l.Hb=function(){var e;return gyt((e=this.g,e||(this.g=new vT(this))))},l.Ib=function(){var e;return sae((e=this.f,e||(this.f=new g2t(this))))},N(Ye,"AbstractTable",2010),D(665,B1,Uu,vT),l.$b=function(){Gqt()},l.Hc=function(e){var n,r;return _t(e,468)?(n=u(e,682),r=u(ny(VYt(this.a),Np(n.c.e,n.b)),83),!!r&&Hyt(r.vc(),new Cv(Np(n.c.c,n.a),U6(n.c,n.b,n.a)))):!1},l.Kc=function(){return Snn(this.a)},l.Mc=function(e){var n,r;return _t(e,468)?(n=u(e,682),r=u(ny(VYt(this.a),Np(n.c.e,n.b)),83),!!r&&_un(r.vc(),new Cv(Np(n.c.c,n.a),U6(n.c,n.b,n.a)))):!1},l.gc=function(){return nYt(this.a)},l.Nc=function(){return kin(this.a)},N(Ye,"AbstractTable/CellSet",665),D(1928,28,wy,itt),l.$b=function(){Gqt()},l.Hc=function(e){return Ndn(this.a,e)},l.Kc=function(){return Ann(this.a)},l.gc=function(){return nYt(this.a)},l.Nc=function(){return sZt(this.a)},N(Ye,"AbstractTable/Values",1928),D(1632,1631,k2),N(Ye,"ArrayListMultimapGwtSerializationDependencies",1632),D(513,1632,k2,oet,Bwt),l.hc=function(){return new Jc(this.a)},l.a=0,N(Ye,"ArrayListMultimap",513),D(664,2010,{664:1,1947:1,3:1},Ioe),N(Ye,"ArrayTable",664),D(1924,386,C7,jUt),l.Xb=function(e){return new wyt(this.a,e)},N(Ye,"ArrayTable/1",1924),D(1925,1,{},VB),l.ld=function(e){return new wyt(this.a,e)},N(Ye,"ArrayTable/1methodref$getCell$Type",1925),D(2011,1,{682:1}),l.Fb=function(e){var n;return e===this?!0:_t(e,468)?(n=u(e,682),dd(Np(this.c.e,this.b),Np(n.c.e,n.b))&&dd(Np(this.c.c,this.a),Np(n.c.c,n.a))&&dd(U6(this.c,this.b,this.a),U6(n.c,n.b,n.a))):!1},l.Hb=function(){return vz(ut(ot(Qn,1),Me,1,5,[Np(this.c.e,this.b),Np(this.c.c,this.a),U6(this.c,this.b,this.a)]))},l.Ib=function(){return"("+Np(this.c.e,this.b)+","+Np(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},N(Ye,"Tables/AbstractCell",2011),D(468,2011,{468:1,682:1},wyt),l.a=0,l.b=0,l.d=0,N(Ye,"ArrayTable/2",468),D(1927,1,{},a6),l.ld=function(e){return bte(this.a,e)},N(Ye,"ArrayTable/2methodref$getValue$Type",1927),D(1926,386,C7,$Ut),l.Xb=function(e){return bte(this.a,e)},N(Ye,"ArrayTable/3",1926),D(1979,1967,bw),l.$b=function(){Oj(this.kc())},l.vc=function(){return new c6(this)},l.lc=function(){return new wXt(this.kc(),this.gc())},N(Ye,"Maps/IteratorBasedAbstractMap",1979),D(828,1979,bw),l.$b=function(){throw nt(new Pr)},l._b=function(e){return lHt(this.c,e)},l.kc=function(){return new zUt(this,this.c.b.c.gc())},l.lc=function(){return Ant(this.c.b.c.gc(),16,new dv(this))},l.xc=function(e){var n;return n=u(w_(this.c,e),19),n?this.nd(n.a):null},l.dc=function(){return this.c.b.c.dc()},l.ec=function(){return Fnt(this.c)},l.zc=function(e,n){var r;if(r=u(w_(this.c,e),19),!r)throw nt(new Pn(this.md()+" "+e+" not in "+Fnt(this.c)));return this.od(r.a,n)},l.Bc=function(e){throw nt(new Pr)},l.gc=function(){return this.c.b.c.gc()},N(Ye,"ArrayTable/ArrayMap",828),D(1923,1,{},dv),l.ld=function(e){return UYt(this.a,e)},N(Ye,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),D(1921,345,Mq,VHt),l.cd=function(){return HXe(this.a,this.b)},l.dd=function(){return this.a.nd(this.b)},l.ed=function(e){return this.a.od(this.b,e)},l.b=0,N(Ye,"ArrayTable/ArrayMap/1",1921),D(1922,386,C7,zUt),l.Xb=function(e){return UYt(this.a,e)},N(Ye,"ArrayTable/ArrayMap/2",1922),D(1920,828,bw,OYt),l.md=function(){return"Column"},l.nd=function(e){return U6(this.b,this.a,e)},l.od=function(e,n){return qne(this.b,this.a,e,n)},l.a=0,N(Ye,"ArrayTable/Row",1920),D(829,828,bw,g2t),l.nd=function(e){return new OYt(this.a,e)},l.zc=function(e,n){return u(n,83),CKe()},l.od=function(e,n){return u(n,83),SKe()},l.md=function(){return"Row"},N(Ye,"ArrayTable/RowMap",829),D(1120,1,Nh,GHt),l.qd=function(){return this.a.qd()&-262},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.Nb(new $Ht(e,this.b))},l.sd=function(e){return this.a.sd(new jHt(e,this.b))},N(Ye,"CollectSpliterators/1",1120),D(1121,1,Kn,jHt),l.td=function(e){this.a.td(this.b.Kb(e))},N(Ye,"CollectSpliterators/1/lambda$0$Type",1121),D(1122,1,Kn,$Ht),l.td=function(e){this.a.td(this.b.Kb(e))},N(Ye,"CollectSpliterators/1/lambda$1$Type",1122),D(1123,1,Nh,bZt),l.qd=function(){return this.a},l.rd=function(){return this.d&&(this.b=yUt(this.b,this.d.rd())),yUt(this.b,0)},l.Nb=function(e){this.d&&(this.d.Nb(e),this.d=null),this.c.Nb(new RHt(this.e,e)),this.b=0},l.sd=function(e){for(;;){if(this.d&&this.d.sd(e))return a_(this.b,Dq)&&(this.b=Qp(this.b,1)),!0;if(this.d=null,!this.c.sd(new zHt(this,this.e)))return!1}},l.a=0,l.b=0,N(Ye,"CollectSpliterators/1FlatMapSpliterator",1123),D(1124,1,Kn,zHt),l.td=function(e){UQe(this.a,this.b,e)},N(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),D(1125,1,Kn,RHt),l.td=function(e){MXe(this.b,this.a,e)},N(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),D(1117,1,Nh,ZWt),l.qd=function(){return 16464|this.b},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.xe(new HHt(e,this.c))},l.sd=function(e){return this.a.ye(new qHt(e,this.c))},l.b=0,N(Ye,"CollectSpliterators/1WithCharacteristics",1117),D(1118,1,AI,qHt),l.ud=function(e){this.a.td(this.b.ld(e))},N(Ye,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),D(1119,1,AI,HHt),l.ud=function(e){this.a.td(this.b.ld(e))},N(Ye,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),D(245,1,Bat),l.wd=function(e){return this.vd(u(e,245))},l.vd=function(e){var n;return e==(Ztt(),wut)?1:e==(Jtt(),vut)?-1:(n=(Mj(),SD(this.a,e.a)),n!=0?n:_t(this,519)==_t(e,519)?0:_t(this,519)?1:-1)},l.zd=function(){return this.a},l.Fb=function(e){return x3t(this,e)},N(Ye,"Cut",245),D(1761,245,Bat,Kqt),l.vd=function(e){return e==this?0:1},l.xd=function(e){throw nt(new ypt)},l.yd=function(e){e.a+="+∞)"},l.zd=function(){throw nt(new Ho(Khe))},l.Hb=function(){return qd(),M3t(this)},l.Ad=function(e){return!1},l.Ib=function(){return"+∞"};var vut;N(Ye,"Cut/AboveAll",1761),D(519,245,{245:1,519:1,3:1,35:1},UUt),l.xd=function(e){wc((e.a+="(",e),this.a)},l.yd=function(e){$p(wc(e,this.a),93)},l.Hb=function(){return~Ji(this.a)},l.Ad=function(e){return Mj(),SD(this.a,e)<0},l.Ib=function(){return"/"+this.a+"\\"},N(Ye,"Cut/AboveValue",519),D(1760,245,Bat,Yqt),l.vd=function(e){return e==this?0:-1},l.xd=function(e){e.a+="(-∞"},l.yd=function(e){throw nt(new ypt)},l.zd=function(){throw nt(new Ho(Khe))},l.Hb=function(){return qd(),M3t(this)},l.Ad=function(e){return!0},l.Ib=function(){return"-∞"};var wut;N(Ye,"Cut/BelowAll",1760),D(1762,245,Bat,WUt),l.xd=function(e){wc((e.a+="[",e),this.a)},l.yd=function(e){$p(wc(e,this.a),41)},l.Hb=function(){return Ji(this.a)},l.Ad=function(e){return Mj(),SD(this.a,e)<=0},l.Ib=function(){return"\\"+this.a+"/"},N(Ye,"Cut/BelowValue",1762),D(537,1,t0),l.Jc=function(e){_a(this,e)},l.Ib=function(){return eln(u(r$(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},N(Ye,"FluentIterable",537),D(433,537,t0,u_),l.Kc=function(){return new ar(lr(this.a.Kc(),new H))},N(Ye,"FluentIterable/2",433),D(1046,537,t0,QGt),l.Kc=function(){return jp(this)},N(Ye,"FluentIterable/3",1046),D(708,386,C7,p2t),l.Xb=function(e){return this.a[e].Kc()},N(Ye,"FluentIterable/3/1",708),D(1972,1,{}),l.Ib=function(){return Wo(this.Bd().b)},N(Ye,"ForwardingObject",1972),D(1973,1972,Yhe),l.Bd=function(){return this.Cd()},l.Jc=function(e){_a(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new Tn(this,0)},l.Oc=function(){return new kn(null,this.Nc())},l.Fc=function(e){return this.Cd(),gHt()},l.Gc=function(e){return this.Cd(),pHt()},l.$b=function(){this.Cd(),bHt()},l.Hc=function(e){return this.Cd().Hc(e)},l.Ic=function(e){return this.Cd().Ic(e)},l.dc=function(){return this.Cd().b.dc()},l.Kc=function(){return this.Cd().Kc()},l.Mc=function(e){return this.Cd(),vHt()},l.gc=function(){return this.Cd().b.gc()},l.Pc=function(){return this.Cd().Pc()},l.Qc=function(e){return this.Cd().Qc(e)},N(Ye,"ForwardingCollection",1973),D(1980,28,A6t),l.Kc=function(){return this.Ed()},l.Fc=function(e){throw nt(new Pr)},l.Gc=function(e){throw nt(new Pr)},l.$b=function(){throw nt(new Pr)},l.Hc=function(e){return e!=null&&ry(this,e,!1)},l.Dd=function(){switch(this.gc()){case 0:return Vm(),Vm(),mut;case 1:return Vm(),new Lnt(Dr(this.Ed().Pb()));default:return new NYt(this,this.Pc())}},l.Mc=function(e){throw nt(new Pr)},N(Ye,"ImmutableCollection",1980),D(712,1980,A6t,wpt),l.Kc=function(){return W6(this.a.Kc())},l.Hc=function(e){return e!=null&&this.a.Hc(e)},l.Ic=function(e){return this.a.Ic(e)},l.dc=function(){return this.a.dc()},l.Ed=function(){return W6(this.a.Kc())},l.gc=function(){return this.a.gc()},l.Pc=function(){return this.a.Pc()},l.Qc=function(e){return this.a.Qc(e)},l.Ib=function(){return Wo(this.a)},N(Ye,"ForwardingImmutableCollection",712),D(152,1980,SC),l.Kc=function(){return this.Ed()},l.Yc=function(){return this.Fd(0)},l.Zc=function(e){return this.Fd(e)},l.ad=function(e){n4(this,e)},l.Nc=function(){return new Tn(this,16)},l.bd=function(e,n){return this.Gd(e,n)},l.Vc=function(e,n){throw nt(new Pr)},l.Wc=function(e,n){throw nt(new Pr)},l.Fb=function(e){return Xpn(this,e)},l.Hb=function(){return ocn(this)},l.Xc=function(e){return e==null?-1:yfn(this,e)},l.Ed=function(){return this.Fd(0)},l.Fd=function(e){return M2t(this,e)},l.$c=function(e){throw nt(new Pr)},l._c=function(e,n){throw nt(new Pr)},l.Gd=function(e,n){var r;return yz((r=new nVt(this),new Kd(r,e,n)))};var mut;N(Ye,"ImmutableList",152),D(2006,152,SC),l.Kc=function(){return W6(this.Hd().Kc())},l.bd=function(e,n){return yz(this.Hd().bd(e,n))},l.Hc=function(e){return e!=null&&this.Hd().Hc(e)},l.Ic=function(e){return this.Hd().Ic(e)},l.Fb=function(e){return Si(this.Hd(),e)},l.Xb=function(e){return Np(this,e)},l.Hb=function(){return Ji(this.Hd())},l.Xc=function(e){return this.Hd().Xc(e)},l.dc=function(){return this.Hd().dc()},l.Ed=function(){return W6(this.Hd().Kc())},l.gc=function(){return this.Hd().gc()},l.Gd=function(e,n){return yz(this.Hd().bd(e,n))},l.Pc=function(){return this.Hd().Qc(Nt(Qn,Me,1,this.Hd().gc(),5,1))},l.Qc=function(e){return this.Hd().Qc(e)},l.Ib=function(){return Wo(this.Hd())},N(Ye,"ForwardingImmutableList",2006),D(714,1,S7),l.vc=function(){return Pv(this)},l.wc=function(e){U_(this,e)},l.ec=function(){return Fnt(this)},l.yc=function(e,n,r){return qit(this,e,n,r)},l.Cc=function(){return this.Ld()},l.$b=function(){throw nt(new Pr)},l._b=function(e){return this.xc(e)!=null},l.uc=function(e){return this.Ld().Hc(e)},l.Jd=function(){return new jzt(this)},l.Kd=function(){return new $zt(this)},l.Fb=function(e){return Jcn(this,e)},l.Hb=function(){return Pv(this).Hb()},l.dc=function(){return this.gc()==0},l.zc=function(e,n){return AKe()},l.Bc=function(e){throw nt(new Pr)},l.Ib=function(){return D0n(this)},l.Ld=function(){return this.e?this.e:this.e=this.Kd()},l.c=null,l.d=null,l.e=null;var uge;N(Ye,"ImmutableMap",714),D(715,714,S7),l._b=function(e){return lHt(this,e)},l.uc=function(e){return aVt(this.b,e)},l.Id=function(){return Pre(new mT(this))},l.Jd=function(){return Pre(gXt(this.b))},l.Kd=function(){return fd(),new wpt(dXt(this.b))},l.Fb=function(e){return oVt(this.b,e)},l.xc=function(e){return w_(this,e)},l.Hb=function(){return Ji(this.b.c)},l.dc=function(){return this.b.c.dc()},l.gc=function(){return this.b.c.gc()},l.Ib=function(){return Wo(this.b.c)},N(Ye,"ForwardingImmutableMap",715),D(1974,1973,Rat),l.Bd=function(){return this.Md()},l.Cd=function(){return this.Md()},l.Nc=function(){return new Tn(this,1)},l.Fb=function(e){return e===this||this.Md().Fb(e)},l.Hb=function(){return this.Md().Hb()},N(Ye,"ForwardingSet",1974),D(1069,1974,Rat,mT),l.Bd=function(){return m8(this.a.b)},l.Cd=function(){return m8(this.a.b)},l.Hc=function(e){if(_t(e,42)&&u(e,42).cd()==null)return!1;try{return sVt(m8(this.a.b),e)}catch(n){if(n=rs(n),_t(n,205))return!1;throw nt(n)}},l.Md=function(){return m8(this.a.b)},l.Qc=function(e){var n;return n=YXt(m8(this.a.b),e),m8(this.a.b).b.gc()=0?"+":"")+(r/60|0),n=rj(b.Math.abs(r)%60),(pae(),_ge)[this.q.getDay()]+" "+Cge[this.q.getMonth()]+" "+rj(this.q.getDate())+" "+rj(this.q.getHours())+":"+rj(this.q.getMinutes())+":"+rj(this.q.getSeconds())+" GMT"+e+n+" "+this.q.getFullYear()};var HH=N(br,"Date",199);D(1915,199,ife,qse),l.a=!1,l.b=0,l.c=0,l.d=0,l.e=0,l.f=0,l.g=!1,l.i=0,l.j=0,l.k=0,l.n=0,l.o=0,l.p=0,N("com.google.gwt.i18n.shared.impl","DateRecord",1915),D(1966,1,{}),l.fe=function(){return null},l.ge=function(){return null},l.he=function(){return null},l.ie=function(){return null},l.je=function(){return null},N(lx,"JSONValue",1966),D(216,1966,{216:1},yg,u6),l.Fb=function(e){return _t(e,216)?$wt(this.a,u(e,216).a):!1},l.ee=function(){return XWe},l.Hb=function(){return Swt(this.a)},l.fe=function(){return this},l.Ib=function(){var e,n,r;for(r=new Fl("["),n=0,e=this.a.length;n0&&(r.a+=","),wc(r,Xm(this,n));return r.a+="]",r.a},N(lx,"JSONArray",216),D(483,1966,{483:1},$k),l.ee=function(){return QWe},l.ge=function(){return this},l.Ib=function(){return Fn(),""+this.a},l.a=!1;var bge,vge;N(lx,"JSONBoolean",483),D(985,60,U0,Fqt),N(lx,"JSONException",985),D(1023,1966,{},mt),l.ee=function(){return nKe},l.Ib=function(){return Mu};var wge;N(lx,"JSONNull",1023),D(258,1966,{258:1},yT),l.Fb=function(e){return _t(e,258)?this.a==u(e,258).a:!1},l.ee=function(){return ZWe},l.Hb=function(){return s8(this.a)},l.he=function(){return this},l.Ib=function(){return this.a+""},l.a=0,N(lx,"JSONNumber",258),D(183,1966,{183:1},w6,zk),l.Fb=function(e){return _t(e,183)?$wt(this.a,u(e,183).a):!1},l.ee=function(){return JWe},l.Hb=function(){return Swt(this.a)},l.ie=function(){return this},l.Ib=function(){var e,n,r,s,o,h,d;for(d=new Fl("{"),e=!0,h=hit(this,Nt(Le,re,2,0,6,1)),r=h,s=0,o=r.length;s=0?":"+this.c:"")+")"},l.c=0;var o7t=N(ic,"StackTraceElement",310);cge={3:1,475:1,35:1,2:1};var Le=N(ic,L6t,2);D(107,418,{475:1},_g,BT,Ah),N(ic,"StringBuffer",107),D(100,418,{475:1},Ap,Lm,Fl),N(ic,"StringBuilder",100),D(687,73,oot,Ypt),N(ic,"StringIndexOutOfBoundsException",687),D(2043,1,{});var c7t;D(844,1,{},Vt),l.Kb=function(e){return u(e,78).e},N(ic,"Throwable/lambda$0$Type",844),D(41,60,{3:1,102:1,60:1,78:1,41:1},Pr,Tg),N(ic,"UnsupportedOperationException",41),D(240,236,{3:1,35:1,236:1,240:1},kD,ibt),l.wd=function(e){return Yue(this,u(e,240))},l.ke=function(){return ly(Dle(this))},l.Fb=function(e){var n;return this===e?!0:_t(e,240)?(n=u(e,240),this.e==n.e&&Yue(this,n)==0):!1},l.Hb=function(){var e;return this.b!=0?this.b:this.a<54?(e=Au(this.f),this.b=Mr(Gs(e,-1)),this.b=33*this.b+Mr(Gs(Rp(e,32),-1)),this.b=17*this.b+Cs(this.e),this.b):(this.b=17*Lre(this.c)+Cs(this.e),this.b)},l.Ib=function(){return Dle(this)},l.a=0,l.b=0,l.d=0,l.e=0,l.f=0;var kge,N2,u7t,l7t,h7t,f7t,d7t,g7t,Sut=N("java.math","BigDecimal",240);D(91,236,{3:1,35:1,236:1,91:1},L3t,Og,Y3,h4t,Iie,Fp),l.wd=function(e){return Sie(this,u(e,91))},l.ke=function(){return ly(Nat(this,0))},l.Fb=function(e){return c3t(this,e)},l.Hb=function(){return Lre(this)},l.Ib=function(){return Nat(this,0)},l.b=-2,l.c=0,l.d=0,l.e=0;var Aut,VH,p7t,Lut,GH,Y7,R4=N("java.math","BigInteger",91),Ege,Tge,Ex,oS;D(488,1967,bw),l.$b=function(){nl(this)},l._b=function(e){return Ml(this,e)},l.uc=function(e){return dre(this,e,this.g)||dre(this,e,this.f)},l.vc=function(){return new kg(this)},l.xc=function(e){return tr(this,e)},l.zc=function(e,n){return Ai(this,e,n)},l.Bc=function(e){return G6(this,e)},l.gc=function(){return $T(this)},N(br,"AbstractHashMap",488),D(261,B1,Uu,kg),l.$b=function(){this.a.$b()},l.Hc=function(e){return hZt(this,e)},l.Kc=function(){return new d2(this.a)},l.Mc=function(e){var n;return hZt(this,e)?(n=u(e,42).cd(),this.a.Bc(n),!0):!1},l.gc=function(){return this.a.gc()},N(br,"AbstractHashMap/EntrySet",261),D(262,1,da,d2),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return Yv(this)},l.Ob=function(){return this.b},l.Qb=function(){cte(this)},l.b=!1,N(br,"AbstractHashMap/EntrySetIterator",262),D(417,1,da,h6),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return mM(this)},l.Pb=function(){return OXt(this)},l.Qb=function(){Dl(this)},l.b=0,l.c=-1,N(br,"AbstractList/IteratorImpl",417),D(96,417,Jd,xa),l.Qb=function(){Dl(this)},l.Rb=function(e){Rm(this,e)},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Ub=function(){return Zn(this.b>0),this.a.Xb(this.c=--this.b)},l.Vb=function(){return this.b-1},l.Wb=function(e){Pm(this.c!=-1),this.a._c(this.c,e)},N(br,"AbstractList/ListIteratorImpl",96),D(219,52,L7,Kd),l.Vc=function(e,n){Um(e,this.b),this.c.Vc(this.a+e,n),++this.b},l.Xb=function(e){return Sn(e,this.b),this.c.Xb(this.a+e)},l.$c=function(e){var n;return Sn(e,this.b),n=this.c.$c(this.a+e),--this.b,n},l._c=function(e,n){return Sn(e,this.b),this.c._c(this.a+e,n)},l.gc=function(){return this.b},l.a=0,l.b=0,N(br,"AbstractList/SubList",219),D(384,B1,Uu,Tm),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a._b(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new rM(e)},l.Mc=function(e){return this.a._b(e)?(this.a.Bc(e),!0):!1},l.gc=function(){return this.a.gc()},N(br,"AbstractMap/1",384),D(691,1,da,rM),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.cd()},l.Qb=function(){this.a.Qb()},N(br,"AbstractMap/1/1",691),D(226,28,wy,m1),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a.uc(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new y1(e)},l.gc=function(){return this.a.gc()},N(br,"AbstractMap/2",226),D(294,1,da,y1),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.dd()},l.Qb=function(){this.a.Qb()},N(br,"AbstractMap/2/1",294),D(484,1,{484:1,42:1}),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),Rc(this.d,n.cd())&&Rc(this.e,n.dd())):!1},l.cd=function(){return this.d},l.dd=function(){return this.e},l.Hb=function(){return G3(this.d)^G3(this.e)},l.ed=function(e){return X2t(this,e)},l.Ib=function(){return this.d+"="+this.e},N(br,"AbstractMap/AbstractEntry",484),D(383,484,{484:1,383:1,42:1},RR),N(br,"AbstractMap/SimpleEntry",383),D(1984,1,hot),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),Rc(this.cd(),n.cd())&&Rc(this.dd(),n.dd())):!1},l.Hb=function(){return G3(this.cd())^G3(this.dd())},l.Ib=function(){return this.cd()+"="+this.dd()},N(br,Uhe,1984),D(1992,1967,Vhe),l.tc=function(e){return mJt(this,e)},l._b=function(e){return vnt(this,e)},l.vc=function(){return new x(this)},l.xc=function(e){var n;return n=e,cc(Lyt(this,n))},l.ec=function(){return new y(this)},N(br,"AbstractNavigableMap",1992),D(739,B1,Uu,x),l.Hc=function(e){return _t(e,42)&&mJt(this.b,u(e,42))},l.Kc=function(){return new v_(this.b)},l.Mc=function(e){var n;return _t(e,42)?(n=u(e,42),ate(this.b,n)):!1},l.gc=function(){return this.b.c},N(br,"AbstractNavigableMap/EntrySet",739),D(493,B1,S6t,y),l.Nc=function(){return new FR(this)},l.$b=function(){OT(this.a)},l.Hc=function(e){return vnt(this.a,e)},l.Kc=function(){var e;return e=new v_(new g_(this.a).b),new g(e)},l.Mc=function(e){return vnt(this.a,e)?(D_(this.a,e),!0):!1},l.gc=function(){return this.a.c},N(br,"AbstractNavigableMap/NavigableKeySet",493),D(494,1,da,g),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return mM(this.a.a)},l.Pb=function(){var e;return e=wj(this.a),e.cd()},l.Qb=function(){uKt(this.a)},N(br,"AbstractNavigableMap/NavigableKeySet/1",494),D(2004,28,wy),l.Fc=function(e){return A8(h7(this,e)),!0},l.Gc=function(e){return In(e),Cj(e!=this,"Can't add a queue to itself"),Ka(this,e)},l.$b=function(){for(;Jrt(this)!=null;);},N(br,"AbstractQueue",2004),D(302,28,{4:1,20:1,28:1,14:1},F3,FQt),l.Fc=function(e){return Kwt(this,e),!0},l.$b=function(){tmt(this)},l.Hc=function(e){return Fne(new M_(this),e)},l.dc=function(){return NT(this)},l.Kc=function(){return new M_(this)},l.Mc=function(e){return frn(new M_(this),e)},l.gc=function(){return this.c-this.b&this.a.length-1},l.Nc=function(){return new Tn(this,272)},l.Qc=function(e){var n;return n=this.c-this.b&this.a.length-1,e.lengthn&&ls(e,n,null),e},l.b=0,l.c=0,N(br,"ArrayDeque",302),D(446,1,da,M_),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.a!=this.b},l.Pb=function(){return mz(this)},l.Qb=function(){Nee(this)},l.a=0,l.b=0,l.c=-1,N(br,"ArrayDeque/IteratorImpl",446),D(12,52,ofe,le,Jc,qu),l.Vc=function(e,n){$m(this,e,n)},l.Fc=function(e){return ue(this,e)},l.Wc=function(e,n){return Pyt(this,e,n)},l.Gc=function(e){return Rs(this,e)},l.$b=function(){this.c=Nt(Qn,Me,1,0,5,1)},l.Hc=function(e){return Go(this,e,0)!=-1},l.Jc=function(e){_u(this,e)},l.Xb=function(e){return Pe(this,e)},l.Xc=function(e){return Go(this,e,0)},l.dc=function(){return this.c.length==0},l.Kc=function(){return new S(this)},l.$c=function(e){return Ig(this,e)},l.Mc=function(e){return Eu(this,e)},l.Ud=function(e,n){PQt(this,e,n)},l._c=function(e,n){return lh(this,e,n)},l.gc=function(){return this.c.length},l.ad=function(e){aa(this,e)},l.Pc=function(){return ant(this)},l.Qc=function(e){return P1(this,e)};var X5n=N(br,"ArrayList",12);D(7,1,da,S),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return Jo(this)},l.Pb=function(){return Q(this)},l.Qb=function(){C_(this)},l.a=0,l.b=-1,N(br,"ArrayList/1",7),D(2013,b.Function,{},dt),l.te=function(e,n){return js(e,n)},D(154,52,cfe,Cl),l.Hc=function(e){return Fee(this,e)!=-1},l.Jc=function(e){var n,r,s,o;for(In(e),r=this.a,s=0,o=r.length;s>>0,e.toString(16)))},l.f=0,l.i=Ns;var XH=N(r0,"CNode",57);D(814,1,{},Lpt),N(r0,"CNode/CNodeBuilder",814);var $ge;D(1525,1,{},_r),l.Oe=function(e,n){return 0},l.Pe=function(e,n){return 0},N(r0,bfe,1525),D(1790,1,{},qr),l.Le=function(e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z;for(_=bs,s=new S(e.a.b);s.as.d.c||s.d.c==h.d.c&&s.d.b0?e+this.n.d+this.n.a:0},l.Se=function(){var e,n,r,s,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].Se());else if(this.g)o=r3t(this,Est(this,null,!0));else for(n=(Zf(),ut(ot(My,1),oe,232,0,[fc,iu,dc])),r=0,s=n.length;r0?o+this.n.b+this.n.c:0},l.Te=function(){var e,n,r,s,o;if(this.g)for(e=Est(this,null,!1),r=(Zf(),ut(ot(My,1),oe,232,0,[fc,iu,dc])),s=0,o=r.length;s0&&(s[0]+=this.d,r-=s[0]),s[2]>0&&(s[2]+=this.d,r-=s[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+e.d+(this.c.a-r)/2,s[1]=b.Math.max(s[1],r),omt(this,iu,n.d+e.d+s[0]-(s[1]-r)/2,s)},l.b=null,l.d=0,l.e=!1,l.f=!1,l.g=!1;var Fut=0,QH=0;N(T2,"GridContainerCell",1473),D(461,22,{3:1,35:1,22:1,461:1},met);var lb,Ad,kf,Xge=zr(T2,"HorizontalLabelAlignment",461,Ur,Srn,hZe),Qge;D(306,212,{212:1,306:1},nQt,uee,JXt),l.Re=function(){return $Kt(this)},l.Se=function(){return Nvt(this)},l.a=0,l.c=!1;var a6n=N(T2,"LabelCell",306);D(244,326,{212:1,326:1,244:1},rC),l.Re=function(){return cI(this)},l.Se=function(){return uI(this)},l.Te=function(){gat(this)},l.Ue=function(){pat(this)},l.b=0,l.c=0,l.d=!1,N(T2,"StripContainerCell",244),D(1626,1,gi,Mc),l.Mb=function(e){return TKe(u(e,212))},N(T2,"StripContainerCell/lambda$0$Type",1626),D(1627,1,{},bp),l.Fe=function(e){return u(e,212).Se()},N(T2,"StripContainerCell/lambda$1$Type",1627),D(1628,1,gi,fm),l.Mb=function(e){return _Ke(u(e,212))},N(T2,"StripContainerCell/lambda$2$Type",1628),D(1629,1,{},T0),l.Fe=function(e){return u(e,212).Re()},N(T2,"StripContainerCell/lambda$3$Type",1629),D(462,22,{3:1,35:1,22:1,462:1},yet);var Ef,hb,s1,Zge=zr(T2,"VerticalLabelAlignment",462,Ur,Arn,fZe),Jge;D(789,1,{},v6t),l.c=0,l.d=0,l.k=0,l.s=0,l.t=0,l.v=!1,l.w=0,l.D=!1,N(Bq,"NodeContext",789),D(1471,1,qi,Fd),l.ue=function(e,n){return nUt(u(e,61),u(n,61))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Bq,"NodeContext/0methodref$comparePortSides$Type",1471),D(1472,1,qi,No),l.ue=function(e,n){return Zdn(u(e,111),u(n,111))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Bq,"NodeContext/1methodref$comparePortContexts$Type",1472),D(159,22,{3:1,35:1,22:1,159:1},dh);var tpe,epe,npe,rpe,ipe,spe,ape,ope,cpe,upe,lpe,hpe,fpe,dpe,gpe,ppe,bpe,vpe,wpe,mpe,ype,But,xpe=zr(Bq,"NodeLabelLocation",159,Ur,est,dZe),kpe;D(111,1,{111:1},Poe),l.a=!1,N(Bq,"PortContext",111),D(1476,1,Kn,ta),l.td=function(e){xHt(u(e,306))},N(FI,Lfe,1476),D(1477,1,gi,bu),l.Mb=function(e){return!!u(e,111).c},N(FI,Mfe,1477),D(1478,1,Kn,Pu),l.td=function(e){xHt(u(e,111).c)},N(FI,"LabelPlacer/lambda$2$Type",1478);var Q7t;D(1475,1,Kn,mo),l.td=function(e){Bm(),iKe(u(e,111))},N(FI,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),D(790,1,Kn,dvt),l.td=function(e){bYe(this.b,this.c,this.a,u(e,181))},l.a=!1,l.c=!1,N(FI,"NodeLabelCellCreator/lambda$0$Type",790),D(1474,1,Kn,bn),l.td=function(e){oKe(this.a,u(e,181))},N(FI,"PortContextCreator/lambda$0$Type",1474);var ZH;D(1829,1,{},Os),N(O7,"GreedyRectangleStripOverlapRemover",1829),D(1830,1,qi,lo),l.ue=function(e,n){return KXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(O7,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),D(1786,1,{},Jzt),l.a=5,l.e=0,N(O7,"RectangleStripOverlapRemover",1786),D(1787,1,qi,Fu),l.ue=function(e,n){return YXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(O7,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),D(1789,1,qi,zo),l.ue=function(e,n){return men(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(O7,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),D(406,22,{3:1,35:1,22:1,406:1},zR);var sO,Rut,jut,aO,Epe=zr(O7,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Ur,Sin,gZe),Tpe;D(222,1,{222:1},Nnt),N(O7,"RectangleStripOverlapRemover/RectangleNode",222),D(1788,1,Kn,pr),l.td=function(e){Efn(this.a,u(e,222))},N(O7,"RectangleStripOverlapRemover/lambda$1$Type",1788),D(1304,1,qi,nd),l.ue=function(e,n){return Lyn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),D(1307,1,{},sf),l.Kb=function(e){return u(e,324).a},N(yd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),D(1308,1,gi,ll),l.Mb=function(e){return u(e,323).a},N(yd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),D(1309,1,gi,Vi),l.Mb=function(e){return u(e,323).a},N(yd,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),D(1302,1,qi,Ke),l.ue=function(e,n){return uwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),D(1305,1,{},Tl),l.Kb=function(e){return u(e,324).a},N(yd,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),D(767,1,qi,kr),l.ue=function(e,n){return hcn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/MinNumOfExtensionsComparator",767),D(1300,1,qi,ni),l.ue=function(e,n){return yon(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/MinPerimeterComparator",1300),D(1301,1,qi,eo),l.ue=function(e,n){return Xhn(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),D(1303,1,qi,Dc),l.ue=function(e,n){return Iwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(yd,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),D(1306,1,{},Ju),l.Kb=function(e){return u(e,324).a},N(yd,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),D(777,1,{},ybt),l.Ce=function(e,n){return Ein(this,u(e,46),u(n,167))},N(yd,"SuccessorCombination",777),D(644,1,{},Qo),l.Ce=function(e,n){var r;return fpn((r=u(e,46),u(n,167),r))},N(yd,"SuccessorJitter",644),D(643,1,{},jf),l.Ce=function(e,n){var r;return tvn((r=u(e,46),u(n,167),r))},N(yd,"SuccessorLineByLine",643),D(568,1,{},rh),l.Ce=function(e,n){var r;return dbn((r=u(e,46),u(n,167),r))},N(yd,"SuccessorManhattan",568),D(1356,1,{},dm),l.Ce=function(e,n){var r;return T2n((r=u(e,46),u(n,167),r))},N(yd,"SuccessorMaxNormWindingInMathPosSense",1356),D(400,1,{},fr),l.Ce=function(e,n){return cwt(this,e,n)},l.c=!1,l.d=!1,l.e=!1,l.f=!1,N(yd,"SuccessorQuadrantsGeneric",400),D(1357,1,{},S9),l.Kb=function(e){return u(e,324).a},N(yd,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),D(323,22,{3:1,35:1,22:1,323:1},$R),l.a=!1;var oO,cO,uO,lO,_pe=zr(jq,K6t,323,Ur,Min,pZe),Cpe;D(1298,1,{}),l.Ib=function(){var e,n,r,s,o,h;for(r=" ",e=de(0),o=0;o=0?"b"+e+"["+Irt(this.a)+"]":"b["+Irt(this.a)+"]"):"b_"+Dv(this)},N(RI,"FBendpoint",559),D(282,134,{3:1,282:1,94:1,134:1},FWt),l.Ib=function(){return Irt(this)},N(RI,"FEdge",282),D(231,134,{3:1,231:1,94:1,134:1},C$);var c6n=N(RI,"FGraph",231);D(447,357,{3:1,447:1,357:1,94:1,134:1},jZt),l.Ib=function(){return this.b==null||this.b.length==0?"l["+Irt(this.a)+"]":"l_"+this.b},N(RI,"FLabel",447),D(144,357,{3:1,144:1,357:1,94:1,134:1},YYt),l.Ib=function(){return jwt(this)},l.b=0,N(RI,"FNode",144),D(2003,1,{}),l.bf=function(e){X5t(this,e)},l.cf=function(){wse(this)},l.d=0,N(ixt,"AbstractForceModel",2003),D(631,2003,{631:1},Ane),l.af=function(e,n){var r,s,o,h,d;return goe(this.f,e,n),o=fa(uc(n.d),e.d),d=b.Math.sqrt(o.a*o.a+o.b*o.b),s=b.Math.max(0,d-A_(e.e)/2-A_(n.e)/2),r=ire(this.e,e,n),r>0?h=-ben(s,this.c)*r:h=cQe(s,this.b)*u(K(e,(n1(),Z7)),19).a,ld(o,h/d),o},l.bf=function(e){X5t(this,e),this.a=u(K(e,(n1(),iV)),19).a,this.c=Zt(ve(K(e,sV))),this.b=Zt(ve(K(e,Uut)))},l.df=function(e){return e0&&(h-=yKe(s,this.a)*r),ld(o,h*this.b/d),o},l.bf=function(e){var n,r,s,o,h,d,w;for(X5t(this,e),this.b=Zt(ve(K(e,(n1(),Wut)))),this.c=this.b/u(K(e,iV),19).a,s=e.e.c.length,h=0,o=0,w=new S(e.e);w.a0},l.a=0,l.b=0,l.c=0,N(ixt,"FruchtermanReingoldModel",632),D(849,1,Ph,NJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,qq),""),"Force Model"),"Determines the model for force calculation."),aEt),(Hg(),ms)),oEt),on((t1(),qn))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,sxt),""),"Iterations"),"The number of iterations on the force model."),de(300)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,axt),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),de(0)),xc),Ha),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Oot),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),xd),$o),wa),on(qn)))),ba(e,Oot,qq,Upe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Not),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),$o),wa),on(qn)))),ba(e,Not,qq,Hpe),phe((new dT,e))};var $pe,zpe,aEt,qpe,Hpe,Vpe,Gpe,Upe;N(NC,"ForceMetaDataProvider",849),D(424,22,{3:1,35:1,22:1,424:1},Tbt);var Gut,rV,oEt=zr(NC,"ForceModelStrategy",424,Ur,nrn,wZe),Wpe;D(988,1,Ph,dT),l.Qe=function(e){phe(e)};var Kpe,Ype,cEt,iV,uEt,Xpe,Qpe,Zpe,lEt,Jpe,hEt,fEt,tbe,Z7,ebe,Uut,dEt,nbe,rbe,sV,Wut;N(NC,"ForceOptions",988),D(989,1,{},vg),l.$e=function(){var e;return e=new Cpt,e},l._e=function(e){},N(NC,"ForceOptions/ForceFactory",989);var dO,lS,Tx,aV;D(850,1,Ph,PJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,cxt),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Fn(),!1)),(Hg(),Pa)),Ws),on((t1(),ua))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,uxt),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),$o),wa),Ki(qn,ut(ot(ep,1),oe,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,lxt),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),gEt),ms),xEt),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,hxt),""),"Stress Epsilon"),"Termination criterion for the iterative process."),xd),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,fxt),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),de(Ti)),xc),Ha),on(qn)))),Jle((new FJ,e))};var ibe,sbe,gEt,abe,obe,cbe;N(NC,"StressMetaDataProvider",850),D(992,1,Ph,FJ),l.Qe=function(e){Jle(e)};var oV,pEt,bEt,vEt,wEt,mEt,ube,lbe,hbe,fbe,yEt,dbe;N(NC,"StressOptions",992),D(993,1,{},dk),l.$e=function(){var e;return e=new BWt,e},l._e=function(e){},N(NC,"StressOptions/StressFactory",993),D(1128,209,_2,BWt),l.Ze=function(e,n){var r,s,o,h,d;for(mr(n,qfe,1),Be(Fe(ze(e,(JD(),wEt))))?Be(Fe(ze(e,yEt)))||u$((r=new rr((Dm(),new Sm(e))),r)):yce(new Cpt,e,zc(n,1)),o=Xne(e),s=ule(this.a,o),d=s.Kc();d.Ob();)h=u(d.Pb(),231),!(h.e.c.length<=1)&&(Syn(this.b,h),sbn(this.b),_u(h.d,new vp));o=khe(s),mhe(o),or(n)},N(Gq,"StressLayoutProvider",1128),D(1129,1,Kn,vp),l.td=function(e){r6t(u(e,447))},N(Gq,"StressLayoutProvider/lambda$0$Type",1129),D(990,1,{},Uzt),l.c=0,l.e=0,l.g=0,N(Gq,"StressMajorization",990),D(379,22,{3:1,35:1,22:1,379:1},xet);var Kut,Yut,Xut,xEt=zr(Gq,"StressMajorization/Dimension",379,Ur,Mrn,mZe),gbe;D(991,1,qi,Di),l.ue=function(e,n){return YQe(this.a,u(e,144),u(n,144))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Gq,"StressMajorization/lambda$0$Type",991),D(1229,1,{},ZQt),N(wx,"ElkLayered",1229),D(1230,1,Kn,L9),l.td=function(e){apn(u(e,37))},N(wx,"ElkLayered/lambda$0$Type",1230),D(1231,1,Kn,wi),l.td=function(e){XQe(this.a,u(e,37))},N(wx,"ElkLayered/lambda$1$Type",1231),D(1263,1,{},TUt);var pbe,bbe,vbe;N(wx,"GraphConfigurator",1263),D(759,1,Kn,_s),l.td=function(e){Cae(this.a,u(e,10))},N(wx,"GraphConfigurator/lambda$0$Type",759),D(760,1,{},M9),l.Kb=function(e){return t4t(),new kn(null,new Tn(u(e,29).a,16))},N(wx,"GraphConfigurator/lambda$1$Type",760),D(761,1,Kn,Zi),l.td=function(e){Cae(this.a,u(e,10))},N(wx,"GraphConfigurator/lambda$2$Type",761),D(1127,209,_2,Yzt),l.Ze=function(e,n){var r;r=Kmn(new eqt,e),Gt(ze(e,(xe(),jy)))===Gt(($0(),np))?Cln(this.a,r,n):kpn(this.a,r,n),ghe(new RJ,r)},N(wx,"LayeredLayoutProvider",1127),D(356,22,{3:1,35:1,22:1,356:1},xM);var Ld,fb,fu,Gc,jo,kEt=zr(wx,"LayeredPhases",356,Ur,dsn,yZe),wbe;D(1651,1,{},Bee),l.i=0;var mbe;N(zI,"ComponentsToCGraphTransformer",1651);var ybe;D(1652,1,{},$f),l.ef=function(e,n){return b.Math.min(e.a!=null?Zt(e.a):e.c.i,n.a!=null?Zt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.min(e.a!=null?Zt(e.a):e.c.i,n.a!=null?Zt(n.a):n.c.i)},N(zI,"ComponentsToCGraphTransformer/1",1652),D(81,1,{81:1}),l.i=0,l.k=!0,l.o=Ns;var Qut=N(BC,"CNode",81);D(460,81,{460:1,81:1},_2t,C3t),l.Ib=function(){return""},N(zI,"ComponentsToCGraphTransformer/CRectNode",460),D(1623,1,{},ov);var Zut,Jut;N(zI,"OneDimensionalComponentsCompaction",1623),D(1624,1,{},Bd),l.Kb=function(e){return xrn(u(e,46))},l.Fb=function(e){return this===e},N(zI,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),D(1625,1,{},E3),l.Kb=function(e){return Nln(u(e,46))},l.Fb=function(e){return this===e},N(zI,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),D(1654,1,{},KYt),N(BC,"CGraph",1654),D(189,1,{189:1},Zit),l.b=0,l.c=0,l.e=0,l.g=!0,l.i=Ns,N(BC,"CGroup",189),D(1653,1,{},R5),l.ef=function(e,n){return b.Math.max(e.a!=null?Zt(e.a):e.c.i,n.a!=null?Zt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.max(e.a!=null?Zt(e.a):e.c.i,n.a!=null?Zt(n.a):n.c.i)},N(BC,bfe,1653),D(1655,1,{},Soe),l.d=!1;var xbe,tlt=N(BC,mfe,1655);D(1656,1,{},ou),l.Kb=function(e){return hbt(),Fn(),u(u(e,46).a,81).d.e!=0},l.Fb=function(e){return this===e},N(BC,yfe,1656),D(823,1,{},Pvt),l.a=!1,l.b=!1,l.c=!1,l.d=!1,N(BC,xfe,823),D(1825,1,{},fYt),N(Uq,kfe,1825);var gO=as(S2,gfe);D(1826,1,{369:1},HXt),l.Ke=function(e){pvn(this,u(e,466))},N(Uq,Efe,1826),D(1827,1,qi,j5),l.ue=function(e,n){return pnn(u(e,81),u(n,81))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Uq,Tfe,1827),D(466,1,{466:1},Cbt),l.a=!1,N(Uq,_fe,466),D(1828,1,qi,no),l.ue=function(e,n){return S1n(u(e,466),u(n,466))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Uq,Cfe,1828),D(140,1,{140:1},i8,Mvt),l.Fb=function(e){var n;return e==null||u6n!=dl(e)?!1:(n=u(e,140),Rc(this.c,n.c)&&Rc(this.d,n.d))},l.Hb=function(){return vz(ut(ot(Qn,1),Me,1,5,[this.c,this.d]))},l.Ib=function(){return"("+this.c+Xa+this.d+(this.a?"cx":"")+this.b+")"},l.a=!0,l.c=0,l.d=0;var u6n=N(S2,"Point",140);D(405,22,{3:1,35:1,22:1,405:1},qR);var Cw,Dy,$4,Iy,kbe=zr(S2,"Point/Quadrant",405,Ur,Din,xZe),Ebe;D(1642,1,{},Xzt),l.b=null,l.c=null,l.d=null,l.e=null,l.f=null;var Tbe,_be,Cbe,Sbe,Abe;N(S2,"RectilinearConvexHull",1642),D(574,1,{369:1},Bz),l.Ke=function(e){gan(this,u(e,140))},l.b=0;var EEt;N(S2,"RectilinearConvexHull/MaximalElementsEventHandler",574),D(1644,1,qi,uv),l.ue=function(e,n){return inn(ve(e),ve(n))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),D(1643,1,{369:1},aee),l.Ke=function(e){A2n(this,u(e,140))},l.a=0,l.b=null,l.c=null,l.d=null,l.e=null,N(S2,"RectilinearConvexHull/RectangleEventHandler",1643),D(1645,1,qi,wg),l.ue=function(e,n){return oin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/lambda$0$Type",1645),D(1646,1,qi,cv),l.ue=function(e,n){return cin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/lambda$1$Type",1646),D(1647,1,qi,JK),l.ue=function(e,n){return lin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/lambda$2$Type",1647),D(1648,1,qi,qb),l.ue=function(e,n){return uin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/lambda$3$Type",1648),D(1649,1,qi,tY),l.ue=function(e,n){return f0n(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(S2,"RectilinearConvexHull/lambda$4$Type",1649),D(1650,1,{},yQt),N(S2,"Scanline",1650),D(2005,1,{}),N(kd,"AbstractGraphPlacer",2005),D(325,1,{325:1},fWt),l.mf=function(e){return this.nf(e)?(cn(this.b,u(K(e,(ae(),Ny)),21),e),!0):!1},l.nf=function(e){var n,r,s,o;for(n=u(K(e,(ae(),Ny)),21),o=u(Pi(Hi,n),21),s=o.Kc();s.Ob();)if(r=u(s.Pb(),21),!u(Pi(this.b,r),15).dc())return!1;return!0};var Hi;N(kd,"ComponentGroup",325),D(765,2005,{},Mpt),l.of=function(e){var n,r;for(r=new S(this.a);r.aG&&(ce=0,_e+=q+o,q=0),bt=d.c,wC(d,ce+bt.a,_e+bt.b),Kf(bt),r=b.Math.max(r,ce+St.a),q=b.Math.max(q,St.b),ce+=St.a+o;if(n.f.a=r,n.f.b=_e+q,Be(Fe(K(h,WV)))){for(s=new D9,E6t(s,e,o),B=e.Kc();B.Ob();)M=u(B.Pb(),37),Fi(Kf(M.c),s.e);Fi(Kf(n.f),s.a)}Emt(n,e)},N(kd,"SimpleRowGraphPlacer",1291),D(1292,1,qi,zf),l.ue=function(e,n){return lcn(u(e,37),u(n,37))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(kd,"SimpleRowGraphPlacer/1",1292);var Mbe;D(1262,1,md,pm),l.Lb=function(e){var n;return n=u(K(u(e,243).b,(xe(),Oo)),74),!!n&&n.b!=0},l.Fb=function(e){return this===e},l.Mb=function(e){var n;return n=u(K(u(e,243).b,(xe(),Oo)),74),!!n&&n.b!=0},N(Wq,"CompoundGraphPostprocessor/1",1262),D(1261,1,vs,nqt),l.pf=function(e,n){ese(this,u(e,37),n)},N(Wq,"CompoundGraphPreprocessor",1261),D(441,1,{441:1},qre),l.c=!1,N(Wq,"CompoundGraphPreprocessor/ExternalPort",441),D(243,1,{243:1},Tj),l.Ib=function(){return ont(this.c)+":"+Eoe(this.b)},N(Wq,"CrossHierarchyEdge",243),D(763,1,qi,Ni),l.ue=function(e,n){return Jfn(this,u(e,243),u(n,243))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Wq,"CrossHierarchyEdgeComparator",763),D(299,134,{3:1,299:1,94:1,134:1}),l.p=0,N(ru,"LGraphElement",299),D(17,299,{3:1,17:1,299:1,94:1,134:1},zv),l.Ib=function(){return Eoe(this)};var nlt=N(ru,"LEdge",17);D(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},Gmt),l.Jc=function(e){_a(this,e)},l.Kc=function(){return new S(this.b)},l.Ib=function(){return this.b.c.length==0?"G-unlayered"+Jp(this.a):this.a.c.length==0?"G-layered"+Jp(this.b):"G[layerless"+Jp(this.a)+", layers"+Jp(this.b)+"]"};var Dbe=N(ru,"LGraph",37),Ibe;D(657,1,{}),l.qf=function(){return this.e.n},l.We=function(e){return K(this.e,e)},l.rf=function(){return this.e.o},l.sf=function(){return this.e.p},l.Xe=function(e){return ea(this.e,e)},l.tf=function(e){this.e.n.a=e.a,this.e.n.b=e.b},l.uf=function(e){this.e.o.a=e.a,this.e.o.b=e.b},l.vf=function(e){this.e.p=e},N(ru,"LGraphAdapters/AbstractLShapeAdapter",657),D(577,1,{839:1},ns),l.wf=function(){var e,n;if(!this.b)for(this.b=Hd(this.a.b.c.length),n=new S(this.a.b);n.a0&&Are(($r(n-1,e.length),e.charCodeAt(n-1)),Kfe);)--n;if(h> ",e),Wz(r)),Yr(wc((e.a+="[",e),r.i),"]")),e.a},l.c=!0,l.d=!1;var AEt,LEt,MEt,DEt,IEt,OEt,Nbe=N(ru,"LPort",11);D(397,1,t0,sa),l.Jc=function(e){_a(this,e)},l.Kc=function(){var e;return e=new S(this.a.e),new Xs(e)},N(ru,"LPort/1",397),D(1290,1,da,Xs),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return u(Q(this.a),17).c},l.Ob=function(){return Jo(this.a)},l.Qb=function(){C_(this.a)},N(ru,"LPort/1/1",1290),D(359,1,t0,Cr),l.Jc=function(e){_a(this,e)},l.Kc=function(){var e;return e=new S(this.a.g),new Jt(e)},N(ru,"LPort/2",359),D(762,1,da,Jt),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return u(Q(this.a),17).d},l.Ob=function(){return Jo(this.a)},l.Qb=function(){C_(this.a)},N(ru,"LPort/2/1",762),D(1283,1,t0,HVt),l.Jc=function(e){_a(this,e)},l.Kc=function(){return new M1(this)},N(ru,"LPort/CombineIter",1283),D(201,1,da,M1),l.Nb=function(e){Ea(this,e)},l.Qb=function(){dHt()},l.Ob=function(){return p_(this)},l.Pb=function(){return Jo(this.a)?Q(this.a):Q(this.b)},N(ru,"LPort/CombineIter/1",201),D(1285,1,md,wp),l.Lb=function(e){return TYt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).e.c.length!=0},N(ru,"LPort/lambda$0$Type",1285),D(1284,1,md,bm),l.Lb=function(e){return _Yt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).g.c.length!=0},N(ru,"LPort/lambda$1$Type",1284),D(1286,1,md,nY),l.Lb=function(e){return Vu(),u(e,11).j==(be(),On)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).j==(be(),On)},N(ru,"LPort/lambda$2$Type",1286),D(1287,1,md,Hb),l.Lb=function(e){return Vu(),u(e,11).j==(be(),Hn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).j==(be(),Hn)},N(ru,"LPort/lambda$3$Type",1287),D(1288,1,md,rY),l.Lb=function(e){return Vu(),u(e,11).j==(be(),yr)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).j==(be(),yr)},N(ru,"LPort/lambda$4$Type",1288),D(1289,1,md,iY),l.Lb=function(e){return Vu(),u(e,11).j==(be(),Bn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Vu(),u(e,11).j==(be(),Bn)},N(ru,"LPort/lambda$5$Type",1289),D(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},Lh),l.Jc=function(e){_a(this,e)},l.Kc=function(){return new S(this.a)},l.Ib=function(){return"L_"+Go(this.b.b,this,0)+Jp(this.a)},N(ru,"Layer",29),D(1342,1,{},eqt),N(Ug,Zfe,1342),D(1346,1,{},$5),l.Kb=function(e){return Ro(u(e,82))},N(Ug,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),D(1349,1,{},I9),l.Kb=function(e){return Ro(u(e,82))},N(Ug,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),D(1343,1,Kn,jn),l.td=function(e){Boe(this.a,u(e,118))},N(Ug,Jfe,1343),D(1344,1,Kn,Lr),l.td=function(e){Boe(this.a,u(e,118))},N(Ug,t1e,1344),D(1345,1,{},XP),l.Kb=function(e){return new kn(null,new Tn(Jen(u(e,79)),16))},N(Ug,e1e,1345),D(1347,1,gi,ir),l.Mb=function(e){return tXe(this.a,u(e,33))},N(Ug,n1e,1347),D(1348,1,{},gk),l.Kb=function(e){return new kn(null,new Tn(tnn(u(e,79)),16))},N(Ug,"ElkGraphImporter/lambda$5$Type",1348),D(1350,1,gi,sr),l.Mb=function(e){return eXe(this.a,u(e,33))},N(Ug,"ElkGraphImporter/lambda$7$Type",1350),D(1351,1,gi,sY),l.Mb=function(e){return vnn(u(e,79))},N(Ug,"ElkGraphImporter/lambda$8$Type",1351),D(1278,1,{},RJ);var Pbe;N(Ug,"ElkGraphLayoutTransferrer",1278),D(1279,1,gi,Fa),l.Mb=function(e){return HQe(this.a,u(e,17))},N(Ug,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),D(1280,1,Kn,Hr),l.td=function(e){vM(),ue(this.a,u(e,17))},N(Ug,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),D(1281,1,gi,ss),l.Mb=function(e){return AQe(this.a,u(e,17))},N(Ug,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),D(1282,1,Kn,qo),l.td=function(e){vM(),ue(this.a,u(e,17))},N(Ug,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),D(1485,1,vs,pk),l.pf=function(e,n){Mon(u(e,37),n)},N($n,"CommentNodeMarginCalculator",1485),D(1486,1,{},aY),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"CommentNodeMarginCalculator/lambda$0$Type",1486),D(1487,1,Kn,oY),l.td=function(e){lyn(u(e,10))},N($n,"CommentNodeMarginCalculator/lambda$1$Type",1487),D(1488,1,vs,cY),l.pf=function(e,n){Evn(u(e,37),n)},N($n,"CommentPostprocessor",1488),D(1489,1,vs,uY),l.pf=function(e,n){M4n(u(e,37),n)},N($n,"CommentPreprocessor",1489),D(1490,1,vs,lY),l.pf=function(e,n){Ubn(u(e,37),n)},N($n,"ConstraintsPostprocessor",1490),D(1491,1,vs,hY),l.pf=function(e,n){Jon(u(e,37),n)},N($n,"EdgeAndLayerConstraintEdgeReverser",1491),D(1492,1,vs,fY),l.pf=function(e,n){zln(u(e,37),n)},N($n,"EndLabelPostprocessor",1492),D(1493,1,{},dY),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"EndLabelPostprocessor/lambda$0$Type",1493),D(1494,1,gi,gY),l.Mb=function(e){return Pnn(u(e,10))},N($n,"EndLabelPostprocessor/lambda$1$Type",1494),D(1495,1,Kn,pY),l.td=function(e){A1n(u(e,10))},N($n,"EndLabelPostprocessor/lambda$2$Type",1495),D(1496,1,vs,bY),l.pf=function(e,n){vgn(u(e,37),n)},N($n,"EndLabelPreprocessor",1496),D(1497,1,{},yL),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"EndLabelPreprocessor/lambda$0$Type",1497),D(1498,1,Kn,pKt),l.td=function(e){vYe(this.a,this.b,this.c,u(e,10))},l.a=0,l.b=0,l.c=!1,N($n,"EndLabelPreprocessor/lambda$1$Type",1498),D(1499,1,gi,vY),l.Mb=function(e){return Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),_E))},N($n,"EndLabelPreprocessor/lambda$2$Type",1499),D(1500,1,Kn,Bc),l.td=function(e){ai(this.a,u(e,70))},N($n,"EndLabelPreprocessor/lambda$3$Type",1500),D(1501,1,gi,wY),l.Mb=function(e){return Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),Yy))},N($n,"EndLabelPreprocessor/lambda$4$Type",1501),D(1502,1,Kn,ro),l.td=function(e){ai(this.a,u(e,70))},N($n,"EndLabelPreprocessor/lambda$5$Type",1502),D(1551,1,vs,BJ),l.pf=function(e,n){Yun(u(e,37),n)};var Fbe;N($n,"EndLabelSorter",1551),D(1552,1,qi,O9),l.ue=function(e,n){return _hn(u(e,456),u(n,456))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"EndLabelSorter/1",1552),D(456,1,{456:1},PXt),N($n,"EndLabelSorter/LabelGroup",456),D(1553,1,{},QP),l.Kb=function(e){return wM(),new kn(null,new Tn(u(e,29).a,16))},N($n,"EndLabelSorter/lambda$0$Type",1553),D(1554,1,gi,z5),l.Mb=function(e){return wM(),u(e,10).k==(Gn(),qs)},N($n,"EndLabelSorter/lambda$1$Type",1554),D(1555,1,Kn,mY),l.td=function(e){A0n(u(e,10))},N($n,"EndLabelSorter/lambda$2$Type",1555),D(1556,1,gi,yY),l.Mb=function(e){return wM(),Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),Yy))},N($n,"EndLabelSorter/lambda$3$Type",1556),D(1557,1,gi,xY),l.Mb=function(e){return wM(),Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),_E))},N($n,"EndLabelSorter/lambda$4$Type",1557),D(1503,1,vs,kY),l.pf=function(e,n){xyn(this,u(e,37))},l.b=0,l.c=0,N($n,"FinalSplineBendpointsCalculator",1503),D(1504,1,{},EY),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),D(1505,1,{},N9),l.Kb=function(e){return new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N($n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),D(1506,1,gi,xL),l.Mb=function(e){return!Wa(u(e,17))},N($n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),D(1507,1,gi,ZP),l.Mb=function(e){return ea(u(e,17),(ae(),F2))},N($n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),D(1508,1,Kn,Tc),l.td=function(e){Nwn(this.a,u(e,128))},N($n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),D(1509,1,Kn,T3),l.td=function(e){jst(u(e,17).a)},N($n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),D(792,1,vs,Ma),l.pf=function(e,n){g3n(this,u(e,37),n)},N($n,"GraphTransformer",792),D(511,22,{3:1,35:1,22:1,511:1},_bt);var ilt,pO,Bbe=zr($n,"GraphTransformer/Mode",511,Ur,rrn,PJe),Rbe;D(1510,1,vs,_3),l.pf=function(e,n){V2n(u(e,37),n)},N($n,"HierarchicalNodeResizingProcessor",1510),D(1511,1,vs,TY),l.pf=function(e,n){_on(u(e,37),n)},N($n,"HierarchicalPortConstraintProcessor",1511),D(1512,1,qi,of),l.ue=function(e,n){return Fhn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),D(1513,1,vs,q5),l.pf=function(e,n){Gmn(u(e,37),n)},N($n,"HierarchicalPortDummySizeProcessor",1513),D(1514,1,vs,_Y),l.pf=function(e,n){qvn(this,u(e,37),n)},l.a=0,N($n,"HierarchicalPortOrthogonalEdgeRouter",1514),D(1515,1,qi,bk),l.ue=function(e,n){return WXe(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),D(1516,1,qi,Rd),l.ue=function(e,n){return oan(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),D(1517,1,vs,CY),l.pf=function(e,n){d0n(u(e,37),n)},N($n,"HierarchicalPortPositionProcessor",1517),D(1518,1,vs,jJ),l.pf=function(e,n){c5n(this,u(e,37))},l.a=0,l.c=0;var cV,uV;N($n,"HighDegreeNodeLayeringProcessor",1518),D(571,1,{571:1},SY),l.b=-1,l.d=-1,N($n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),D(1519,1,{},AY),l.Kb=function(e){return VM(),Uo(u(e,10))},l.Fb=function(e){return this===e},N($n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),D(1520,1,{},LY),l.Kb=function(e){return VM(),$s(u(e,10))},l.Fb=function(e){return this===e},N($n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),D(1526,1,vs,P9),l.pf=function(e,n){mmn(this,u(e,37),n)},N($n,"HyperedgeDummyMerger",1526),D(793,1,{},pvt),l.a=!1,l.b=!1,l.c=!1,N($n,"HyperedgeDummyMerger/MergeState",793),D(1527,1,{},kL),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"HyperedgeDummyMerger/lambda$0$Type",1527),D(1528,1,{},JP),l.Kb=function(e){return new kn(null,new Tn(u(e,10).j,16))},N($n,"HyperedgeDummyMerger/lambda$1$Type",1528),D(1529,1,Kn,EL),l.td=function(e){u(e,11).p=-1},N($n,"HyperedgeDummyMerger/lambda$2$Type",1529),D(1530,1,vs,H5),l.pf=function(e,n){vmn(u(e,37),n)},N($n,"HypernodesProcessor",1530),D(1531,1,vs,MY),l.pf=function(e,n){wmn(u(e,37),n)},N($n,"InLayerConstraintProcessor",1531),D(1532,1,vs,tF),l.pf=function(e,n){Kon(u(e,37),n)},N($n,"InnermostNodeMarginCalculator",1532),D(1533,1,vs,eF),l.pf=function(e,n){_4n(this,u(e,37))},l.a=Ns,l.b=Ns,l.c=bs,l.d=bs;var l6n=N($n,"InteractiveExternalPortPositioner",1533);D(1534,1,{},DY),l.Kb=function(e){return u(e,17).d.i},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),D(1535,1,{},io),l.Kb=function(e){return XXe(this.a,ve(e))},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),D(1536,1,{},IY),l.Kb=function(e){return u(e,17).c.i},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),D(1537,1,{},_l),l.Kb=function(e){return QXe(this.a,ve(e))},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),D(1538,1,{},Gf),l.Kb=function(e){return $Qe(this.a,ve(e))},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),D(1539,1,{},Ep),l.Kb=function(e){return zQe(this.a,ve(e))},l.Fb=function(e){return this===e},N($n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),D(77,22,{3:1,35:1,22:1,77:1,234:1},Ls),l.Kf=function(){switch(this.g){case 15:return new KX;case 22:return new YX;case 47:return new ZX;case 28:case 35:return new C3;case 32:return new pk;case 42:return new cY;case 1:return new uY;case 41:return new lY;case 56:return new Ma(($8(),pO));case 0:return new Ma(($8(),ilt));case 2:return new hY;case 54:return new fY;case 33:return new bY;case 51:return new kY;case 55:return new _3;case 13:return new TY;case 38:return new q5;case 44:return new _Y;case 40:return new CY;case 9:return new jJ;case 49:return new eWt;case 37:return new P9;case 43:return new H5;case 27:return new MY;case 30:return new tF;case 3:return new eF;case 18:return new NY;case 29:return new PY;case 5:return new MB;case 50:return new OY;case 34:return new $J;case 36:return new vk;case 52:return new BJ;case 11:return new vm;case 7:return new qJ;case 39:return new wk;case 45:return new jY;case 16:return new F9;case 10:return new rd;case 48:return new _L;case 21:return new mk;case 23:return new ret((Zv(),IS));case 8:return new sF;case 12:return new SL;case 4:return new zY;case 19:return new gT;case 17:return new UY;case 53:return new WY;case 6:return new fF;case 25:return new sqt;case 46:return new QY;case 31:return new jWt;case 14:return new LL;case 26:return new eQ;case 20:return new sX;case 24:return new ret((Zv(),dG));default:throw nt(new Pn(jot+(this.f!=null?this.f:""+this.g)))}};var NEt,PEt,FEt,BEt,REt,jEt,$Et,zEt,qEt,HEt,hS,lV,hV,VEt,GEt,UEt,WEt,KEt,YEt,XEt,fS,QEt,ZEt,JEt,t9t,e9t,slt,fV,dV,n9t,gV,pV,bV,J7,tE,eE,r9t,vV,wV,i9t,mV,yV,s9t,a9t,o9t,c9t,xV,alt,bO,kV,EV,TV,_V,u9t,l9t,h9t,f9t,h6n=zr($n,gxt,77,Ur,Lce,NJe),jbe;D(1540,1,vs,NY),l.pf=function(e,n){S4n(u(e,37),n)},N($n,"InvertedPortProcessor",1540),D(1541,1,vs,PY),l.pf=function(e,n){Swn(u(e,37),n)},N($n,"LabelAndNodeSizeProcessor",1541),D(1542,1,gi,FY),l.Mb=function(e){return u(e,10).k==(Gn(),qs)},N($n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),D(1543,1,gi,jd),l.Mb=function(e){return u(e,10).k==(Gn(),Is)},N($n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),D(1544,1,Kn,bKt),l.td=function(e){wYe(this.b,this.a,this.c,u(e,10))},l.a=!1,l.c=!1,N($n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),D(1545,1,vs,MB),l.pf=function(e,n){Q3n(u(e,37),n)};var $be;N($n,"LabelDummyInserter",1545),D(1546,1,md,lv),l.Lb=function(e){return Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),TE))},l.Fb=function(e){return this===e},l.Mb=function(e){return Gt(K(u(e,70),(xe(),Dd)))===Gt((D1(),TE))},N($n,"LabelDummyInserter/1",1546),D(1547,1,vs,OY),l.pf=function(e,n){Jyn(u(e,37),n)},N($n,"LabelDummyRemover",1547),D(1548,1,gi,BY),l.Mb=function(e){return Be(Fe(K(u(e,70),(xe(),Klt))))},N($n,"LabelDummyRemover/lambda$0$Type",1548),D(1359,1,vs,$J),l.pf=function(e,n){A3n(this,u(e,37),n)},l.a=null;var olt;N($n,"LabelDummySwitcher",1359),D(286,1,{286:1},Sue),l.c=0,l.d=null,l.f=0,N($n,"LabelDummySwitcher/LabelDummyInfo",286),D(1360,1,{},nF),l.Kb=function(e){return Y6(),new kn(null,new Tn(u(e,29).a,16))},N($n,"LabelDummySwitcher/lambda$0$Type",1360),D(1361,1,gi,rF),l.Mb=function(e){return Y6(),u(e,10).k==(Gn(),Pl)},N($n,"LabelDummySwitcher/lambda$1$Type",1361),D(1362,1,{},Eg),l.Kb=function(e){return LQe(this.a,u(e,10))},N($n,"LabelDummySwitcher/lambda$2$Type",1362),D(1363,1,Kn,ad),l.td=function(e){Aen(this.a,u(e,286))},N($n,"LabelDummySwitcher/lambda$3$Type",1363),D(1364,1,qi,RY),l.ue=function(e,n){return nen(u(e,286),u(n,286))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"LabelDummySwitcher/lambda$4$Type",1364),D(791,1,vs,C3),l.pf=function(e,n){jsn(u(e,37),n)},N($n,"LabelManagementProcessor",791),D(1549,1,vs,vk),l.pf=function(e,n){lvn(u(e,37),n)},N($n,"LabelSideSelector",1549),D(1550,1,gi,TL),l.Mb=function(e){return Be(Fe(K(u(e,70),(xe(),Klt))))},N($n,"LabelSideSelector/lambda$0$Type",1550),D(1558,1,vs,vm),l.pf=function(e,n){Umn(u(e,37),n)},N($n,"LayerConstraintPostprocessor",1558),D(1559,1,vs,qJ),l.pf=function(e,n){abn(u(e,37),n)};var d9t;N($n,"LayerConstraintPreprocessor",1559),D(360,22,{3:1,35:1,22:1,360:1},HR);var vO,CV,SV,clt,zbe=zr($n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Ur,Iin,_Ze),qbe;D(1560,1,vs,wk),l.pf=function(e,n){Xyn(u(e,37),n)},N($n,"LayerSizeAndGraphHeightCalculator",1560),D(1561,1,vs,jY),l.pf=function(e,n){Jbn(u(e,37),n)},N($n,"LongEdgeJoiner",1561),D(1562,1,vs,F9),l.pf=function(e,n){Dyn(u(e,37),n)},N($n,"LongEdgeSplitter",1562),D(1563,1,vs,rd),l.pf=function(e,n){D3n(this,u(e,37),n)},l.d=0,l.e=0,l.i=0,l.j=0,l.k=0,l.n=0,N($n,"NodePromotion",1563),D(1564,1,{},iF),l.Kb=function(e){return u(e,46),Fn(),!0},l.Fb=function(e){return this===e},N($n,"NodePromotion/lambda$0$Type",1564),D(1565,1,{},Tp),l.Kb=function(e){return Yen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,N($n,"NodePromotion/lambda$1$Type",1565),D(1566,1,{},Uf),l.Kb=function(e){return Xen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,N($n,"NodePromotion/lambda$2$Type",1566),D(1567,1,vs,_L),l.pf=function(e,n){e5n(u(e,37),n)},N($n,"NorthSouthPortPostprocessor",1567),D(1568,1,vs,mk),l.pf=function(e,n){$4n(u(e,37),n)},N($n,"NorthSouthPortPreprocessor",1568),D(1569,1,qi,CL),l.ue=function(e,n){return pcn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),D(1570,1,vs,sF),l.pf=function(e,n){rmn(u(e,37),n)},N($n,"PartitionMidprocessor",1570),D(1571,1,gi,$Y),l.Mb=function(e){return ea(u(e,10),(xe(),gE))},N($n,"PartitionMidprocessor/lambda$0$Type",1571),D(1572,1,Kn,bv),l.td=function(e){wnn(this.a,u(e,10))},N($n,"PartitionMidprocessor/lambda$1$Type",1572),D(1573,1,vs,SL),l.pf=function(e,n){m2n(u(e,37),n)},N($n,"PartitionPostprocessor",1573),D(1574,1,vs,zY),l.pf=function(e,n){Lpn(u(e,37),n)},N($n,"PartitionPreprocessor",1574),D(1575,1,gi,qY),l.Mb=function(e){return ea(u(e,10),(xe(),gE))},N($n,"PartitionPreprocessor/lambda$0$Type",1575),D(1576,1,{},aF),l.Kb=function(e){return new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N($n,"PartitionPreprocessor/lambda$1$Type",1576),D(1577,1,gi,V5),l.Mb=function(e){return khn(u(e,17))},N($n,"PartitionPreprocessor/lambda$2$Type",1577),D(1578,1,Kn,oF),l.td=function(e){_cn(u(e,17))},N($n,"PartitionPreprocessor/lambda$3$Type",1578),D(1579,1,vs,gT),l.pf=function(e,n){zwn(u(e,37),n)};var g9t,Hbe,Vbe,Gbe,p9t,b9t;N($n,"PortListSorter",1579),D(1580,1,{},G5),l.Kb=function(e){return Q8(),u(e,11).e},N($n,"PortListSorter/lambda$0$Type",1580),D(1581,1,{},HY),l.Kb=function(e){return Q8(),u(e,11).g},N($n,"PortListSorter/lambda$1$Type",1581),D(1582,1,qi,AL),l.ue=function(e,n){return zZt(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"PortListSorter/lambda$2$Type",1582),D(1583,1,qi,VY),l.ue=function(e,n){return Ufn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"PortListSorter/lambda$3$Type",1583),D(1584,1,qi,GY),l.ue=function(e,n){return Xue(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"PortListSorter/lambda$4$Type",1584),D(1585,1,vs,UY),l.pf=function(e,n){tbn(u(e,37),n)},N($n,"PortSideProcessor",1585),D(1586,1,vs,WY),l.pf=function(e,n){ewn(u(e,37),n)},N($n,"ReversedEdgeRestorer",1586),D(1591,1,vs,sqt),l.pf=function(e,n){Mfn(this,u(e,37),n)},N($n,"SelfLoopPortRestorer",1591),D(1592,1,{},cF),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"SelfLoopPortRestorer/lambda$0$Type",1592),D(1593,1,gi,KY),l.Mb=function(e){return u(e,10).k==(Gn(),qs)},N($n,"SelfLoopPortRestorer/lambda$1$Type",1593),D(1594,1,gi,YY),l.Mb=function(e){return ea(u(e,10),(ae(),hE))},N($n,"SelfLoopPortRestorer/lambda$2$Type",1594),D(1595,1,{},XY),l.Kb=function(e){return u(K(u(e,10),(ae(),hE)),403)},N($n,"SelfLoopPortRestorer/lambda$3$Type",1595),D(1596,1,Kn,Cm),l.td=function(e){j0n(this.a,u(e,403))},N($n,"SelfLoopPortRestorer/lambda$4$Type",1596),D(794,1,Kn,uF),l.td=function(e){tgn(u(e,101))},N($n,"SelfLoopPortRestorer/lambda$5$Type",794),D(1597,1,vs,QY),l.pf=function(e,n){jhn(u(e,37),n)},N($n,"SelfLoopPostProcessor",1597),D(1598,1,{},ZY),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"SelfLoopPostProcessor/lambda$0$Type",1598),D(1599,1,gi,JY),l.Mb=function(e){return u(e,10).k==(Gn(),qs)},N($n,"SelfLoopPostProcessor/lambda$1$Type",1599),D(1600,1,gi,lF),l.Mb=function(e){return ea(u(e,10),(ae(),hE))},N($n,"SelfLoopPostProcessor/lambda$2$Type",1600),D(1601,1,Kn,tX),l.td=function(e){U1n(u(e,10))},N($n,"SelfLoopPostProcessor/lambda$3$Type",1601),D(1602,1,{},eX),l.Kb=function(e){return new kn(null,new Tn(u(e,101).f,1))},N($n,"SelfLoopPostProcessor/lambda$4$Type",1602),D(1603,1,Kn,d6),l.td=function(e){Pin(this.a,u(e,409))},N($n,"SelfLoopPostProcessor/lambda$5$Type",1603),D(1604,1,gi,hF),l.Mb=function(e){return!!u(e,101).i},N($n,"SelfLoopPostProcessor/lambda$6$Type",1604),D(1605,1,Kn,N3),l.td=function(e){mKe(this.a,u(e,101))},N($n,"SelfLoopPostProcessor/lambda$7$Type",1605),D(1587,1,vs,fF),l.pf=function(e,n){Ibn(u(e,37),n)},N($n,"SelfLoopPreProcessor",1587),D(1588,1,{},dF),l.Kb=function(e){return new kn(null,new Tn(u(e,101).f,1))},N($n,"SelfLoopPreProcessor/lambda$0$Type",1588),D(1589,1,{},nX),l.Kb=function(e){return u(e,409).a},N($n,"SelfLoopPreProcessor/lambda$1$Type",1589),D(1590,1,Kn,rX),l.td=function(e){TXe(u(e,17))},N($n,"SelfLoopPreProcessor/lambda$2$Type",1590),D(1606,1,vs,jWt),l.pf=function(e,n){L0n(this,u(e,37),n)},N($n,"SelfLoopRouter",1606),D(1607,1,{},yk),l.Kb=function(e){return new kn(null,new Tn(u(e,29).a,16))},N($n,"SelfLoopRouter/lambda$0$Type",1607),D(1608,1,gi,U5),l.Mb=function(e){return u(e,10).k==(Gn(),qs)},N($n,"SelfLoopRouter/lambda$1$Type",1608),D(1609,1,gi,B9),l.Mb=function(e){return ea(u(e,10),(ae(),hE))},N($n,"SelfLoopRouter/lambda$2$Type",1609),D(1610,1,{},iX),l.Kb=function(e){return u(K(u(e,10),(ae(),hE)),403)},N($n,"SelfLoopRouter/lambda$3$Type",1610),D(1611,1,Kn,PVt),l.td=function(e){unn(this.a,this.b,u(e,403))},N($n,"SelfLoopRouter/lambda$4$Type",1611),D(1612,1,vs,LL),l.pf=function(e,n){Z2n(u(e,37),n)},N($n,"SemiInteractiveCrossMinProcessor",1612),D(1613,1,gi,R9),l.Mb=function(e){return u(e,10).k==(Gn(),qs)},N($n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),D(1614,1,gi,ML),l.Mb=function(e){return eYt(u(e,10))._b((xe(),Hy))},N($n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),D(1615,1,qi,gF),l.ue=function(e,n){return Son(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N($n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),D(1616,1,{},pF),l.Ce=function(e,n){return Cnn(u(e,10),u(n,10))},N($n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),D(1618,1,vs,sX),l.pf=function(e,n){Wmn(u(e,37),n)},N($n,"SortByInputModelProcessor",1618),D(1619,1,gi,aX),l.Mb=function(e){return u(e,11).g.c.length!=0},N($n,"SortByInputModelProcessor/lambda$0$Type",1619),D(1620,1,Kn,g6),l.td=function(e){sgn(this.a,u(e,11))},N($n,"SortByInputModelProcessor/lambda$1$Type",1620),D(1693,803,{},Xee),l.Me=function(e){var n,r,s,o;switch(this.c=e,this.a.g){case 2:n=new le,ys(Wi(new kn(null,new Tn(this.c.a.b,16)),new mF),new $Vt(this,n)),aI(this,new vF),_u(n,new cX),n.c=Nt(Qn,Me,1,0,5,1),ys(Wi(new kn(null,new Tn(this.c.a.b,16)),new uX),new P3(n)),aI(this,new lX),_u(n,new hX),n.c=Nt(Qn,Me,1,0,5,1),r=mUt(une(Jj(new kn(null,new Tn(this.c.a.b,16)),new $d(this))),new fX),ys(new kn(null,new Tn(this.c.a.a,16)),new BVt(r,n)),aI(this,new dX),_u(n,new oX),n.c=Nt(Qn,Me,1,0,5,1);break;case 3:s=new le,aI(this,new bF),o=mUt(une(Jj(new kn(null,new Tn(this.c.a.b,16)),new TT(this))),new wF),ys(Wi(new kn(null,new Tn(this.c.a.b,16)),new gX),new jVt(o,s)),aI(this,new pX),_u(s,new bX),s.c=Nt(Qn,Me,1,0,5,1);break;default:throw nt(new Vzt)}},l.b=0,N(Ps,"EdgeAwareScanlineConstraintCalculation",1693),D(1694,1,md,bF),l.Lb=function(e){return _t(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,145)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),D(1695,1,{},TT),l.Fe=function(e){return Rgn(this.a,u(e,57))},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),D(1703,1,Oq,FVt),l.Vd=function(){cC(this.a,this.b,-1)},l.b=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),D(1705,1,md,vF),l.Lb=function(e){return _t(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,145)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),D(1706,1,Kn,cX),l.td=function(e){u(e,365).Vd()},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),D(1707,1,gi,uX),l.Mb=function(e){return _t(u(e,57).g,10)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),D(1709,1,Kn,P3),l.td=function(e){hln(this.a,u(e,57))},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),D(1708,1,Oq,VVt),l.Vd=function(){cC(this.b,this.a,-1)},l.a=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),D(1710,1,md,lX),l.Lb=function(e){return _t(u(e,57).g,10)},l.Fb=function(e){return this===e},l.Mb=function(e){return _t(u(e,57).g,10)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),D(1711,1,Kn,hX),l.td=function(e){u(e,365).Vd()},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),D(1712,1,{},$d),l.Fe=function(e){return jgn(this.a,u(e,57))},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),D(1713,1,{},fX),l.De=function(){return 0},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),D(1696,1,{},wF),l.De=function(){return 0},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),D(1715,1,Kn,BVt),l.td=function(e){Utn(this.a,this.b,u(e,307))},l.a=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),D(1714,1,Oq,RVt),l.Vd=function(){ace(this.a,this.b,-1)},l.b=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),D(1716,1,md,dX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),D(1717,1,Kn,oX),l.td=function(e){u(e,365).Vd()},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),D(1697,1,gi,gX),l.Mb=function(e){return _t(u(e,57).g,10)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),D(1699,1,Kn,jVt),l.td=function(e){Wtn(this.a,this.b,u(e,57))},l.a=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),D(1698,1,Oq,GVt),l.Vd=function(){cC(this.b,this.a,-1)},l.a=0,N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),D(1700,1,md,pX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),D(1701,1,Kn,bX),l.td=function(e){u(e,365).Vd()},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),D(1702,1,gi,mF),l.Mb=function(e){return _t(u(e,57).g,145)},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),D(1704,1,Kn,$Vt),l.td=function(e){Van(this.a,this.b,u(e,57))},N(Ps,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),D(1521,1,vs,eWt),l.pf=function(e,n){Ryn(this,u(e,37),n)};var Ube;N(Ps,"HorizontalGraphCompactor",1521),D(1522,1,{},x1),l.Oe=function(e,n){var r,s,o;return Imt(e,n)||(r=J3(e),s=J3(n),r&&r.k==(Gn(),Is)||s&&s.k==(Gn(),Is))?0:(o=u(K(this.a.a,(ae(),X4)),304),ZXe(o,r?r.k:(Gn(),ca),s?s.k:(Gn(),ca)))},l.Pe=function(e,n){var r,s,o;return Imt(e,n)?1:(r=J3(e),s=J3(n),o=u(K(this.a.a,(ae(),X4)),304),S2t(o,r?r.k:(Gn(),ca),s?s.k:(Gn(),ca)))},N(Ps,"HorizontalGraphCompactor/1",1522),D(1523,1,{},j9),l.Ne=function(e,n){return qT(),e.a.i==0},N(Ps,"HorizontalGraphCompactor/lambda$0$Type",1523),D(1524,1,{},zd),l.Ne=function(e,n){return knn(this.a,e,n)},N(Ps,"HorizontalGraphCompactor/lambda$1$Type",1524),D(1664,1,{},Pte);var Wbe,Kbe;N(Ps,"LGraphToCGraphTransformer",1664),D(1672,1,gi,vX),l.Mb=function(e){return e!=null},N(Ps,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),D(1665,1,{},wX),l.Kb=function(e){return df(),Wo(K(u(u(e,57).g,10),(ae(),Ii)))},N(Ps,"LGraphToCGraphTransformer/lambda$0$Type",1665),D(1666,1,{},yF),l.Kb=function(e){return df(),Rre(u(u(e,57).g,145))},N(Ps,"LGraphToCGraphTransformer/lambda$1$Type",1666),D(1675,1,gi,mX),l.Mb=function(e){return df(),_t(u(e,57).g,10)},N(Ps,"LGraphToCGraphTransformer/lambda$10$Type",1675),D(1676,1,Kn,yX),l.td=function(e){xnn(u(e,57))},N(Ps,"LGraphToCGraphTransformer/lambda$11$Type",1676),D(1677,1,gi,xX),l.Mb=function(e){return df(),_t(u(e,57).g,145)},N(Ps,"LGraphToCGraphTransformer/lambda$12$Type",1677),D(1681,1,Kn,kX),l.td=function(e){Cun(u(e,57))},N(Ps,"LGraphToCGraphTransformer/lambda$13$Type",1681),D(1678,1,Kn,_T),l.td=function(e){XYe(this.a,u(e,8))},l.a=0,N(Ps,"LGraphToCGraphTransformer/lambda$14$Type",1678),D(1679,1,Kn,Ub),l.td=function(e){ZYe(this.a,u(e,110))},l.a=0,N(Ps,"LGraphToCGraphTransformer/lambda$15$Type",1679),D(1680,1,Kn,nR),l.td=function(e){QYe(this.a,u(e,8))},l.a=0,N(Ps,"LGraphToCGraphTransformer/lambda$16$Type",1680),D(1682,1,{},EX),l.Kb=function(e){return df(),new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N(Ps,"LGraphToCGraphTransformer/lambda$17$Type",1682),D(1683,1,gi,TX),l.Mb=function(e){return df(),Wa(u(e,17))},N(Ps,"LGraphToCGraphTransformer/lambda$18$Type",1683),D(1684,1,Kn,Ntt),l.td=function(e){Ian(this.a,u(e,17))},N(Ps,"LGraphToCGraphTransformer/lambda$19$Type",1684),D(1668,1,Kn,Ptt),l.td=function(e){fin(this.a,u(e,145))},N(Ps,"LGraphToCGraphTransformer/lambda$2$Type",1668),D(1685,1,{},xF),l.Kb=function(e){return df(),new kn(null,new Tn(u(e,29).a,16))},N(Ps,"LGraphToCGraphTransformer/lambda$20$Type",1685),D(1686,1,{},_X),l.Kb=function(e){return df(),new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N(Ps,"LGraphToCGraphTransformer/lambda$21$Type",1686),D(1687,1,{},kF),l.Kb=function(e){return df(),u(K(u(e,17),(ae(),F2)),15)},N(Ps,"LGraphToCGraphTransformer/lambda$22$Type",1687),D(1688,1,gi,CX),l.Mb=function(e){return tQe(u(e,15))},N(Ps,"LGraphToCGraphTransformer/lambda$23$Type",1688),D(1689,1,Kn,Ftt),l.td=function(e){Lgn(this.a,u(e,15))},N(Ps,"LGraphToCGraphTransformer/lambda$24$Type",1689),D(1667,1,Kn,zVt),l.td=function(e){Jin(this.a,this.b,u(e,145))},N(Ps,"LGraphToCGraphTransformer/lambda$3$Type",1667),D(1669,1,{},SX),l.Kb=function(e){return df(),new kn(null,new Tn(u(e,29).a,16))},N(Ps,"LGraphToCGraphTransformer/lambda$4$Type",1669),D(1670,1,{},AX),l.Kb=function(e){return df(),new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N(Ps,"LGraphToCGraphTransformer/lambda$5$Type",1670),D(1671,1,{},$9),l.Kb=function(e){return df(),u(K(u(e,17),(ae(),F2)),15)},N(Ps,"LGraphToCGraphTransformer/lambda$6$Type",1671),D(1673,1,Kn,Btt),l.td=function(e){opn(this.a,u(e,15))},N(Ps,"LGraphToCGraphTransformer/lambda$8$Type",1673),D(1674,1,Kn,qVt),l.td=function(e){yXe(this.a,this.b,u(e,145))},N(Ps,"LGraphToCGraphTransformer/lambda$9$Type",1674),D(1663,1,{},LX),l.Le=function(e){var n,r,s,o,h;for(this.a=e,this.d=new Utt,this.c=Nt(X7t,Me,121,this.a.a.a.c.length,0,1),this.b=0,r=new S(this.a.a.a);r.a=Z&&(ue(h,de(M)),St=b.Math.max(St,jt[M-1]-B),w+=W,bt+=jt[M-1]-bt,B=jt[M-1],W=k[M]),W=b.Math.max(W,k[M]),++M;w+=W}G=b.Math.min(1/St,1/n.b/w),G>s&&(s=G,r=h)}return r},l.Wf=function(){return!1},N(Ed,"MSDCutIndexHeuristic",802),D(1617,1,vs,eQ),l.pf=function(e,n){jmn(u(e,37),n)},N(Ed,"SingleEdgeGraphWrapper",1617),D(227,22,{3:1,35:1,22:1,227:1},YT);var H4,iE,sE,Oy,dS,V4,aE=zr(Sc,"CenterEdgeLabelPlacementStrategy",227,Ur,Xsn,AZe),a2e;D(422,22,{3:1,35:1,22:1,422:1},Sbt);var w9t,mlt,m9t=zr(Sc,"ConstraintCalculationStrategy",422,Ur,$nn,LZe),o2e;D(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tet),l.Kf=function(){return voe(this)},l.Xf=function(){return voe(this)};var wO,Cx,y9t,x9t=zr(Sc,"CrossingMinimizationStrategy",314,Ur,Irn,MZe),c2e;D(337,22,{3:1,35:1,22:1,337:1},_et);var k9t,ylt,OV,E9t=zr(Sc,"CuttingStrategy",337,Ur,Orn,OZe),u2e;D(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},EM),l.Kf=function(){return rce(this)},l.Xf=function(){return rce(this)};var T9t,xlt,gS,klt,pS,_9t=zr(Sc,"CycleBreakingStrategy",335,Ur,ksn,NZe),l2e;D(419,22,{3:1,35:1,22:1,419:1},Abt);var NV,C9t,S9t=zr(Sc,"DirectionCongruency",419,Ur,jnn,PZe),h2e;D(450,22,{3:1,35:1,22:1,450:1},Cet);var oE,Elt,G4,f2e=zr(Sc,"EdgeConstraint",450,Ur,Nrn,FZe),d2e;D(276,22,{3:1,35:1,22:1,276:1},XT);var Tlt,_lt,Clt,Slt,PV,Alt,A9t=zr(Sc,"EdgeLabelSideSelection",276,Ur,tan,BZe),g2e;D(479,22,{3:1,35:1,22:1,479:1},Lbt);var FV,L9t,M9t=zr(Sc,"EdgeStraighteningStrategy",479,Ur,Rnn,RZe),p2e;D(274,22,{3:1,35:1,22:1,274:1},QT);var Llt,D9t,I9t,BV,O9t,N9t,P9t=zr(Sc,"FixedAlignment",274,Ur,Zsn,jZe),b2e;D(275,22,{3:1,35:1,22:1,275:1},ZT);var F9t,B9t,R9t,j9t,bS,$9t,z9t=zr(Sc,"GraphCompactionStrategy",275,Ur,Qsn,$Ze),v2e;D(256,22,{3:1,35:1,22:1,256:1},Im);var cE,RV,uE,yh,vS,jV,lE,U4,$V,wS,Mlt=zr(Sc,"GraphProperties",256,Ur,jon,zZe),w2e;D(292,22,{3:1,35:1,22:1,292:1},Aet);var mO,Dlt,Ilt,Olt=zr(Sc,"GreedySwitchType",292,Ur,Brn,qZe),m2e;D(303,22,{3:1,35:1,22:1,303:1},Let);var Sx,yO,W4,y2e=zr(Sc,"InLayerConstraint",303,Ur,Frn,HZe),x2e;D(420,22,{3:1,35:1,22:1,420:1},Mbt);var Nlt,q9t,H9t=zr(Sc,"InteractiveReferencePoint",420,Ur,znn,VZe),k2e,V9t,Ax,Lw,zV,G9t,U9t,qV,W9t,xO,HV,mS,Lx,Ny,Plt,VV,gc,K9t,Mw,Wc,Flt,Blt,kO,P2,Dw,Mx,Y9t,Dx,EO,Py,a1,qh,Rlt,K4,Lc,Ii,X9t,Q9t,Z9t,J9t,tTt,jlt,GV,sl,Iw,$lt,Ix,TO,H1,Y4,hE,X4,Q4,fE,F2,eTt,zlt,qlt,Ox;D(163,22,{3:1,35:1,22:1,163:1},_M);var yS,gb,xS,Fy,_O,nTt=zr(Sc,"LayerConstraint",163,Ur,_sn,GZe),E2e;D(848,1,Ph,KJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,pxt),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),fTt),(Hg(),ms)),S9t),on((t1(),qn))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,bxt),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Fn(),!1)),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Kq),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),wTt),ms),H9t),on(qn)))),ba(e,Kq,qot,gve),ba(e,Kq,$C,dve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,vxt),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,wxt),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),Pa),Ws),on(qn)))),an(e,new Xe(QKe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,mxt),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),Pa),Ws),on(q2)),ut(ot(Le,1),re,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,yxt),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),CTt),ms),N_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,xxt),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),de(7)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,kxt),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Ext),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,qot),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),hTt),ms),_9t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,VI),fct),"Node Layering Strategy"),"Strategy for node layering."),xTt),ms),k_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Txt),fct),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),mTt),ms),nTt),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,_xt),fct),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),xc),Ha),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Cxt),fct),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),xc),Ha),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Hot),d1e),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),de(4)),xc),Ha),on(qn)))),ba(e,Hot,VI,xve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Vot),d1e),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),de(2)),xc),Ha),on(qn)))),ba(e,Vot,VI,Eve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Got),g1e),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),yTt),ms),D_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Uot),g1e),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),de(0)),xc),Ha),on(qn)))),ba(e,Uot,Got,null),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Wot),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),de(Ti)),xc),Ha),on(qn)))),ba(e,Wot,VI,bve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,$C),GI),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),lTt),ms),x9t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Sxt),GI),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Kot),GI),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),$o),wa),on(qn)))),ba(e,Kot,oH,q2e),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Yot),GI),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),Pa),Ws),on(qn)))),ba(e,Yot,$C,U2e),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Axt),GI),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),xc),Ha),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Lxt),GI),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),xc),Ha),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Mxt),p1e),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),de(40)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Xot),p1e),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),uTt),ms),Olt),on(qn)))),ba(e,Xot,$C,$2e),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Yq),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),cTt),ms),Olt),on(qn)))),ba(e,Yq,$C,B2e),ba(e,Yq,oH,R2e),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,D4),b1e),"Node Placement Strategy"),"Strategy for node placement."),_Tt),ms),C_t),on(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Xq),b1e),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),Pa),Ws),on(qn)))),ba(e,Xq,D4,Nve),ba(e,Xq,D4,Pve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Qot),v1e),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),kTt),ms),M9t),on(qn)))),ba(e,Qot,D4,Mve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Zot),v1e),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),ETt),ms),P9t),on(qn)))),ba(e,Zot,D4,Ive),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Jot),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),$o),wa),on(qn)))),ba(e,Jot,D4,Bve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,tct),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),ms),hht),on(ua)))),ba(e,tct,D4,zve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ect),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),TTt),ms),hht),on(qn)))),ba(e,ect,D4,$ve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Dxt),w1e),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),pTt),ms),B_t),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Ixt),w1e),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),bTt),ms),R_t),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Qq),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),vTt),ms),$_t),on(qn)))),ba(e,Qq,UI,rve),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Zq),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),$o),wa),on(qn)))),ba(e,Zq,UI,sve),ba(e,Zq,Qq,ave),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,nct),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),$o),wa),on(qn)))),ba(e,nct,UI,J2e),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Oxt),j1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Nxt),j1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Pxt),j1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Fxt),j1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Bxt),Uxt),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),de(0)),xc),Ha),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Rxt),Uxt),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),de(0)),xc),Ha),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,jxt),Uxt),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),de(0)),xc),Ha),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,rct),Wxt),Nfe),"Tries to further compact components (disconnected sub-graphs)."),!1),Pa),Ws),on(qn)))),ba(e,rct,PC,!0),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,$xt),m1e),"Post Compaction Strategy"),y1e),iTt),ms),z9t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,zxt),m1e),"Post Compaction Constraint Calculation"),y1e),rTt),ms),m9t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Jq),Kxt),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ict),Kxt),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),de(16)),xc),Ha),on(qn)))),ba(e,ict,Jq,!0),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,sct),Kxt),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),de(5)),xc),Ha),on(qn)))),ba(e,sct,Jq,!0),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Y0),Yxt),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),LTt),ms),V_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,tH),Yxt),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),$o),wa),on(qn)))),ba(e,tH,Y0,twe),ba(e,tH,Y0,ewe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,eH),Yxt),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),$o),wa),on(qn)))),ba(e,eH,Y0,rwe),ba(e,eH,Y0,iwe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,zC),x1e),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),ATt),ms),E9t),on(qn)))),ba(e,zC,Y0,lwe),ba(e,zC,Y0,hwe),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,act),x1e),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),G1),mh),on(qn)))),ba(e,act,zC,awe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,oct),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),STt),xc),Ha),on(qn)))),ba(e,oct,zC,cwe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,nH),k1e),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),MTt),ms),H_t),on(qn)))),ba(e,nH,Y0,Ewe),ba(e,nH,Y0,Twe),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,rH),k1e),"Valid Indices for Wrapping"),null),G1),mh),on(qn)))),ba(e,rH,Y0,ywe),ba(e,rH,Y0,xwe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,iH),Xxt),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),Pa),Ws),on(qn)))),ba(e,iH,Y0,pwe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,sH),Xxt),"Distance Penalty When Improving Cuts"),null),2),$o),wa),on(qn)))),ba(e,sH,Y0,dwe),ba(e,sH,iH,!0),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,cct),Xxt),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),Pa),Ws),on(qn)))),ba(e,cct,Y0,vwe),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,qxt),dct),"Edge Label Side Selection"),"Method to decide on edge label sides."),gTt),ms),A9t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Hxt),dct),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),dTt),ms),aE),Ki(qn,ut(ot(ep,1),oe,175,0,[tp]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,aH),WI),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),oTt),ms),O_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Vxt),WI),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,uct),WI),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),sTt),ms),_Et),on(qn)))),ba(e,uct,PC,null),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Gxt),WI),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),aTt),ms),T_t),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,lct),WI),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),$o),wa),on(qn)))),ba(e,lct,aH,null),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,hct),WI),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),$o),wa),on(qn)))),ba(e,hct,aH,null),jhe((new IB,e))};var T2e,_2e,C2e,rTt,S2e,iTt,A2e,sTt,L2e,M2e,D2e,aTt,I2e,O2e,oTt,N2e,P2e,F2e,cTt,B2e,R2e,j2e,uTt,$2e,z2e,q2e,H2e,V2e,G2e,U2e,W2e,lTt,K2e,hTt,Y2e,fTt,X2e,dTt,Q2e,gTt,Z2e,J2e,tve,pTt,eve,bTt,nve,vTt,rve,ive,sve,ave,ove,cve,uve,lve,hve,fve,wTt,dve,gve,pve,bve,vve,wve,mTt,mve,yve,xve,kve,Eve,Tve,_ve,yTt,Cve,xTt,Sve,Ave,Lve,kTt,Mve,Dve,ETt,Ive,Ove,Nve,Pve,Fve,Bve,Rve,jve,TTt,$ve,zve,qve,_Tt,Hve,CTt,Vve,Gve,Uve,Wve,Kve,Yve,Xve,Qve,Zve,Jve,twe,ewe,nwe,rwe,iwe,swe,awe,owe,STt,cwe,uwe,ATt,lwe,hwe,fwe,dwe,gwe,pwe,bwe,vwe,wwe,LTt,mwe,ywe,xwe,kwe,MTt,Ewe,Twe;N(Sc,"LayeredMetaDataProvider",848),D(986,1,Ph,IB),l.Qe=function(e){jhe(e)};var Md,Hlt,UV,kS,WV,DTt,KV,Nx,YV,ITt,OTt,Vlt,pb,Glt,By,NTt,CO,Ult,PTt,_we,XV,Wlt,ES,Ry,Cwe,Xl,FTt,BTt,QV,Klt,Dd,ZV,X0,RTt,jTt,$Tt,Ylt,Xlt,zTt,Xg,Qlt,qTt,jy,HTt,VTt,GTt,JV,$y,B2,UTt,WTt,Oo,KTt,Swe,du,tG,YTt,XTt,QTt,Zlt,ZTt,eG,JTt,t_t,nG,Ow,e_t,Jlt,TS,n_t,Nw,_S,rG,R2,tht,dE,iG,j2,r_t,i_t,s_t,gE,a_t,Awe,Lwe,Mwe,Dwe,Pw,zy,ws,Qg,Iwe,qy,o_t,pE,c_t,Hy,Owe,bE,u_t,Px,Nwe,Pwe,SO,eht,l_t,AO,Tf,Z4,Fx,Fw,$2,sG,Vy,nht,vE,wE,Bw,J4,rht,LO,CS,SS,iht,h_t,f_t,d_t,g_t,sht,p_t,b_t,v_t,w_t,aht,aG;N(Sc,"LayeredOptions",986),D(987,1,{},rQ),l.$e=function(){var e;return e=new Yzt,e},l._e=function(e){},N(Sc,"LayeredOptions/LayeredFactory",987),D(1372,1,{}),l.a=0;var Fwe;N(Ac,"ElkSpacings/AbstractSpacingsBuilder",1372),D(779,1372,{},o3t);var oG,Bwe;N(Sc,"LayeredSpacings/LayeredSpacingsBuilder",779),D(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},JT),l.Kf=function(){return wce(this)},l.Xf=function(){return wce(this)};var oht,m_t,y_t,cG,cht,x_t,k_t=zr(Sc,"LayeringStrategy",313,Ur,Jsn,UZe),Rwe;D(378,22,{3:1,35:1,22:1,378:1},Met);var uht,E_t,uG,T_t=zr(Sc,"LongEdgeOrderingStrategy",378,Ur,Drn,WZe),jwe;D(197,22,{3:1,35:1,22:1,197:1},GR);var t5,e5,lG,lht,hht=zr(Sc,"NodeFlexibility",197,Ur,Rin,KZe),$we;D(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},TM),l.Kf=function(){return nce(this)},l.Xf=function(){return nce(this)};var AS,fht,dht,LS,__t,C_t=zr(Sc,"NodePlacementStrategy",315,Ur,xsn,tJe),zwe;D(260,22,{3:1,35:1,22:1,260:1},T6);var S_t,MO,A_t,L_t,DO,M_t,hG,fG,D_t=zr(Sc,"NodePromotionStrategy",260,Ur,Zan,XZe),qwe;D(339,22,{3:1,35:1,22:1,339:1},Det);var I_t,bb,ght,O_t=zr(Sc,"OrderingStrategy",339,Ur,jrn,QZe),Hwe;D(421,22,{3:1,35:1,22:1,421:1},Dbt);var pht,bht,N_t=zr(Sc,"PortSortingStrategy",421,Ur,qnn,ZZe),Vwe;D(452,22,{3:1,35:1,22:1,452:1},Iet);var al,su,MS,Gwe=zr(Sc,"PortType",452,Ur,Rrn,YZe),Uwe;D(375,22,{3:1,35:1,22:1,375:1},Oet);var P_t,vht,F_t,B_t=zr(Sc,"SelfLoopDistributionStrategy",375,Ur,$rn,JZe),Wwe;D(376,22,{3:1,35:1,22:1,376:1},Ibt);var IO,wht,R_t=zr(Sc,"SelfLoopOrderingStrategy",376,Ur,Bnn,eJe),Kwe;D(304,1,{304:1},zle),N(Sc,"Spacings",304),D(336,22,{3:1,35:1,22:1,336:1},Net);var mht,j_t,DS,$_t=zr(Sc,"SplineRoutingMode",336,Ur,qrn,nJe),Ywe;D(338,22,{3:1,35:1,22:1,338:1},Pet);var yht,z_t,q_t,H_t=zr(Sc,"ValidifyStrategy",338,Ur,Hrn,rJe),Xwe;D(377,22,{3:1,35:1,22:1,377:1},Fet);var Gy,xht,mE,V_t=zr(Sc,"WrappingStrategy",377,Ur,zrn,iJe),Qwe;D(1383,1,Vc,QJ),l.Yf=function(e){return u(e,37),Zwe},l.pf=function(e,n){Oyn(this,u(e,37),n)};var Zwe;N(lH,"DepthFirstCycleBreaker",1383),D(782,1,Vc,Gvt),l.Yf=function(e){return u(e,37),Jwe},l.pf=function(e,n){D5n(this,u(e,37),n)},l.Zf=function(e){return u(Pe(e,zz(this.d,e.c.length)),10)};var Jwe;N(lH,"GreedyCycleBreaker",782),D(1386,782,Vc,AGt),l.Zf=function(e){var n,r,s,o;for(o=null,n=Ti,s=new S(e);s.a1&&(Be(Fe(K($a((Sn(0,e.c.length),u(e.c[0],10))),(xe(),By))))?fce(e,this.d,u(this,660)):(pn(),aa(e,this.d)),Ine(this.e,e))},l.Sf=function(e,n,r,s){var o,h,d,w,k,_,M;for(n!=rYt(r,e.length)&&(h=e[n-(r?1:-1)],bmt(this.f,h,r?(ho(),su):(ho(),al))),o=e[n][0],M=!s||o.k==(Gn(),Is),_=L1(e[n]),this.ag(_,M,!1,r),d=0,k=new S(_);k.a"),e0?brt(this.a,e[n-1],e[n]):!r&&n1&&(Be(Fe(K($a((Sn(0,e.c.length),u(e.c[0],10))),(xe(),By))))?fce(e,this.d,this):(pn(),aa(e,this.d)),Be(Fe(K($a((Sn(0,e.c.length),u(e.c[0],10))),By)))||Ine(this.e,e))},N(Wu,"ModelOrderBarycenterHeuristic",660),D(1803,1,qi,f$t),l.ue=function(e,n){return W0n(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Wu,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),D(1403,1,Vc,ett),l.Yf=function(e){var n;return u(e,37),n=ij(fme),Ei(n,(Ya(),fu),(co(),xV)),n},l.pf=function(e,n){Inn((u(e,37),n))};var fme;N(Wu,"NoCrossingMinimizer",1403),D(796,402,Ikt,ebt),l.$f=function(e,n,r){var s,o,h,d,w,k,_,M,B,q,G;switch(B=this.g,r.g){case 1:{for(o=0,h=0,M=new S(e.j);M.a1&&(o.j==(be(),Hn)?this.b[e]=!0:o.j==Bn&&e>0&&(this.b[e-1]=!0))},l.f=0,N(s0,"AllCrossingsCounter",1798),D(587,1,{},rz),l.b=0,l.d=0,N(s0,"BinaryIndexedTree",587),D(524,1,{},HM);var W_t,gG;N(s0,"CrossingsCounter",524),D(1906,1,qi,d$t),l.ue=function(e,n){return Ptn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(s0,"CrossingsCounter/lambda$0$Type",1906),D(1907,1,qi,g$t),l.ue=function(e,n){return Ftn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(s0,"CrossingsCounter/lambda$1$Type",1907),D(1908,1,qi,p$t),l.ue=function(e,n){return Btn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(s0,"CrossingsCounter/lambda$2$Type",1908),D(1909,1,qi,b$t),l.ue=function(e,n){return Rtn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(s0,"CrossingsCounter/lambda$3$Type",1909),D(1910,1,Kn,v$t),l.td=function(e){man(this.a,u(e,11))},N(s0,"CrossingsCounter/lambda$4$Type",1910),D(1911,1,gi,w$t),l.Mb=function(e){return OYe(this.a,u(e,11))},N(s0,"CrossingsCounter/lambda$5$Type",1911),D(1912,1,Kn,m$t),l.td=function(e){TGt(this,e)},N(s0,"CrossingsCounter/lambda$6$Type",1912),D(1913,1,Kn,XVt),l.td=function(e){var n;f8(),Vp(this.b,(n=this.a,u(e,11),n))},N(s0,"CrossingsCounter/lambda$7$Type",1913),D(826,1,md,BF),l.Lb=function(e){return f8(),ea(u(e,11),(ae(),sl))},l.Fb=function(e){return this===e},l.Mb=function(e){return f8(),ea(u(e,11),(ae(),sl))},N(s0,"CrossingsCounter/lambda$8$Type",826),D(1905,1,{},y$t),N(s0,"HyperedgeCrossingsCounter",1905),D(467,1,{35:1,467:1},$Wt),l.wd=function(e){return bhn(this,u(e,467))},l.b=0,l.c=0,l.e=0,l.f=0;var f6n=N(s0,"HyperedgeCrossingsCounter/Hyperedge",467);D(362,1,{35:1,362:1},e$),l.wd=function(e){return gbn(this,u(e,362))},l.b=0,l.c=0;var dme=N(s0,"HyperedgeCrossingsCounter/HyperedgeCorner",362);D(523,22,{3:1,35:1,22:1,523:1},Obt);var OS,NS,gme=zr(s0,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Ur,Hnn,aJe),pme;D(1405,1,Vc,XJ),l.Yf=function(e){return u(K(u(e,37),(ae(),Wc)),21).Hc((go(),yh))?bme:null},l.pf=function(e,n){P1n(this,u(e,37),n)};var bme;N(bo,"InteractiveNodePlacer",1405),D(1406,1,Vc,YJ),l.Yf=function(e){return u(K(u(e,37),(ae(),Wc)),21).Hc((go(),yh))?vme:null},l.pf=function(e,n){mfn(this,u(e,37),n)};var vme,pG,bG;N(bo,"LinearSegmentsNodePlacer",1406),D(257,1,{35:1,257:1},Dpt),l.wd=function(e){return GKe(this,u(e,257))},l.Fb=function(e){var n;return _t(e,257)?(n=u(e,257),this.b==n.b):!1},l.Hb=function(){return this.b},l.Ib=function(){return"ls"+Jp(this.e)},l.a=0,l.b=0,l.c=-1,l.d=-1,l.g=0;var wme=N(bo,"LinearSegmentsNodePlacer/LinearSegment",257);D(1408,1,Vc,dYt),l.Yf=function(e){return u(K(u(e,37),(ae(),Wc)),21).Hc((go(),yh))?mme:null},l.pf=function(e,n){E5n(this,u(e,37),n)},l.b=0,l.g=0;var mme;N(bo,"NetworkSimplexPlacer",1408),D(1427,1,qi,cQ),l.ue=function(e,n){return mu(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(bo,"NetworkSimplexPlacer/0methodref$compare$Type",1427),D(1429,1,qi,uQ),l.ue=function(e,n){return mu(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(bo,"NetworkSimplexPlacer/1methodref$compare$Type",1429),D(649,1,{649:1},QVt);var d6n=N(bo,"NetworkSimplexPlacer/EdgeRep",649);D(401,1,{401:1},Ewt),l.b=!1;var g6n=N(bo,"NetworkSimplexPlacer/NodeRep",401);D(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},aqt),N(bo,"NetworkSimplexPlacer/Path",508),D(1409,1,{},lQ),l.Kb=function(e){return u(e,17).d.i.k},N(bo,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),D(1410,1,gi,hQ),l.Mb=function(e){return u(e,267)==(Gn(),ca)},N(bo,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),D(1411,1,{},fQ),l.Kb=function(e){return u(e,17).d.i},N(bo,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),D(1412,1,gi,x$t),l.Mb=function(e){return TWt(uie(u(e,10)))},N(bo,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),D(1413,1,gi,dQ),l.Mb=function(e){return Ttn(u(e,11))},N(bo,"NetworkSimplexPlacer/lambda$0$Type",1413),D(1414,1,Kn,ZVt),l.td=function(e){xXe(this.a,this.b,u(e,11))},N(bo,"NetworkSimplexPlacer/lambda$1$Type",1414),D(1423,1,Kn,k$t),l.td=function(e){zgn(this.a,u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$10$Type",1423),D(1424,1,{},gQ),l.Kb=function(e){return Rl(),new kn(null,new Tn(u(e,29).a,16))},N(bo,"NetworkSimplexPlacer/lambda$11$Type",1424),D(1425,1,Kn,E$t),l.td=function(e){Bvn(this.a,u(e,10))},N(bo,"NetworkSimplexPlacer/lambda$12$Type",1425),D(1426,1,{},pQ),l.Kb=function(e){return Rl(),de(u(e,121).e)},N(bo,"NetworkSimplexPlacer/lambda$13$Type",1426),D(1428,1,{},bQ),l.Kb=function(e){return Rl(),de(u(e,121).e)},N(bo,"NetworkSimplexPlacer/lambda$15$Type",1428),D(1430,1,gi,vQ),l.Mb=function(e){return Rl(),u(e,401).c.k==(Gn(),qs)},N(bo,"NetworkSimplexPlacer/lambda$17$Type",1430),D(1431,1,gi,wQ),l.Mb=function(e){return Rl(),u(e,401).c.j.c.length>1},N(bo,"NetworkSimplexPlacer/lambda$18$Type",1431),D(1432,1,Kn,yXt),l.td=function(e){Sln(this.c,this.b,this.d,this.a,u(e,401))},l.c=0,l.d=0,N(bo,"NetworkSimplexPlacer/lambda$19$Type",1432),D(1415,1,{},mQ),l.Kb=function(e){return Rl(),new kn(null,new Tn(u(e,29).a,16))},N(bo,"NetworkSimplexPlacer/lambda$2$Type",1415),D(1433,1,Kn,T$t),l.td=function(e){mXe(this.a,u(e,11))},l.a=0,N(bo,"NetworkSimplexPlacer/lambda$20$Type",1433),D(1434,1,{},K5),l.Kb=function(e){return Rl(),new kn(null,new Tn(u(e,29).a,16))},N(bo,"NetworkSimplexPlacer/lambda$21$Type",1434),D(1435,1,Kn,_$t),l.td=function(e){NXe(this.a,u(e,10))},N(bo,"NetworkSimplexPlacer/lambda$22$Type",1435),D(1436,1,gi,RF),l.Mb=function(e){return TWt(e)},N(bo,"NetworkSimplexPlacer/lambda$23$Type",1436),D(1437,1,{},yQ),l.Kb=function(e){return Rl(),new kn(null,new Tn(u(e,29).a,16))},N(bo,"NetworkSimplexPlacer/lambda$24$Type",1437),D(1438,1,gi,C$t),l.Mb=function(e){return $Ye(this.a,u(e,10))},N(bo,"NetworkSimplexPlacer/lambda$25$Type",1438),D(1439,1,Kn,JVt),l.td=function(e){ugn(this.a,this.b,u(e,10))},N(bo,"NetworkSimplexPlacer/lambda$26$Type",1439),D(1440,1,gi,xQ),l.Mb=function(e){return Rl(),!Wa(u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$27$Type",1440),D(1441,1,gi,kQ),l.Mb=function(e){return Rl(),!Wa(u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$28$Type",1441),D(1442,1,{},S$t),l.Ce=function(e,n){return DXe(this.a,u(e,29),u(n,29))},N(bo,"NetworkSimplexPlacer/lambda$29$Type",1442),D(1416,1,{},jF),l.Kb=function(e){return Rl(),new kn(null,new Fv(new ar(lr($s(u(e,10)).a.Kc(),new H))))},N(bo,"NetworkSimplexPlacer/lambda$3$Type",1416),D(1417,1,gi,EQ),l.Mb=function(e){return Rl(),win(u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$4$Type",1417),D(1418,1,Kn,A$t),l.td=function(e){Fmn(this.a,u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$5$Type",1418),D(1419,1,{},V9),l.Kb=function(e){return Rl(),new kn(null,new Tn(u(e,29).a,16))},N(bo,"NetworkSimplexPlacer/lambda$6$Type",1419),D(1420,1,gi,TQ),l.Mb=function(e){return Rl(),u(e,10).k==(Gn(),qs)},N(bo,"NetworkSimplexPlacer/lambda$7$Type",1420),D(1421,1,{},_Q),l.Kb=function(e){return Rl(),new kn(null,new Fv(new ar(lr(z0(u(e,10)).a.Kc(),new H))))},N(bo,"NetworkSimplexPlacer/lambda$8$Type",1421),D(1422,1,gi,CQ),l.Mb=function(e){return Rl(),wtn(u(e,17))},N(bo,"NetworkSimplexPlacer/lambda$9$Type",1422),D(1404,1,Vc,pT),l.Yf=function(e){return u(K(u(e,37),(ae(),Wc)),21).Hc((go(),yh))?yme:null},l.pf=function(e,n){vyn(u(e,37),n)};var yme;N(bo,"SimpleNodePlacer",1404),D(180,1,{180:1},k4),l.Ib=function(){var e;return e="",this.c==(gd(),Rw)?e+=dx:this.c==Zg&&(e+=fx),this.o==(C1(),z2)?e+=kot:this.o==V1?e+="UP":e+="BALANCED",e},N(ob,"BKAlignedLayout",180),D(516,22,{3:1,35:1,22:1,516:1},Pbt);var Zg,Rw,xme=zr(ob,"BKAlignedLayout/HDirection",516,Ur,Gnn,oJe),kme;D(515,22,{3:1,35:1,22:1,515:1},Nbt);var z2,V1,Eme=zr(ob,"BKAlignedLayout/VDirection",515,Ur,Unn,cJe),Tme;D(1634,1,{},tGt),N(ob,"BKAligner",1634),D(1637,1,{},Ose),N(ob,"BKCompactor",1637),D(654,1,{654:1},SQ),l.a=0,N(ob,"BKCompactor/ClassEdge",654),D(458,1,{458:1},iqt),l.a=null,l.b=0,N(ob,"BKCompactor/ClassNode",458),D(1407,1,Vc,CGt),l.Yf=function(e){return u(K(u(e,37),(ae(),Wc)),21).Hc((go(),yh))?_me:null},l.pf=function(e,n){R5n(this,u(e,37),n)},l.d=!1;var _me;N(ob,"BKNodePlacer",1407),D(1635,1,{},AQ),l.d=0,N(ob,"NeighborhoodInformation",1635),D(1636,1,qi,L$t),l.ue=function(e,n){return Gan(this,u(e,46),u(n,46))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(ob,"NeighborhoodInformation/NeighborComparator",1636),D(808,1,{}),N(ob,"ThresholdStrategy",808),D(1763,808,{},uqt),l.bg=function(e,n,r){return this.a.o==(C1(),V1)?bs:Ns},l.cg=function(){},N(ob,"ThresholdStrategy/NullThresholdStrategy",1763),D(579,1,{579:1},eGt),l.c=!1,l.d=!1,N(ob,"ThresholdStrategy/Postprocessable",579),D(1764,808,{},lqt),l.bg=function(e,n,r){var s,o,h;return o=n==r,s=this.a.a[r.p]==n,o||s?(h=e,this.a.c==(gd(),Rw)?(o&&(h=kat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=kat(this,r,!1))):(o&&(h=kat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=kat(this,r,!1))),h):e},l.cg=function(){for(var e,n,r,s,o;this.d.b!=0;)o=u(crn(this.d),579),s=tle(this,o),s.a&&(e=s.a,r=Be(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Wa(e)&&e.c.i.c==e.d.i.c)&&(n=oce(this,o),n||KYe(this.e,o)));for(;this.e.a.c.length!=0;)oce(this,u(vre(this.e),579))},N(ob,"ThresholdStrategy/SimpleThresholdStrategy",1764),D(635,1,{635:1,246:1,234:1},LQ),l.Kf=function(){return Sne(this)},l.Xf=function(){return Sne(this)};var kht;N(wct,"EdgeRouterFactory",635),D(1458,1,Vc,sd),l.Yf=function(e){return bvn(u(e,37))},l.pf=function(e,n){Tyn(u(e,37),n)};var Cme,Sme,Ame,Lme,Mme,K_t,Dme,Ime;N(wct,"OrthogonalEdgeRouter",1458),D(1451,1,Vc,SGt),l.Yf=function(e){return $1n(u(e,37))},l.pf=function(e,n){V4n(this,u(e,37),n)};var Ome,Nme,Pme,Fme,NO,Bme;N(wct,"PolylineEdgeRouter",1451),D(1452,1,md,MQ),l.Lb=function(e){return lyt(u(e,10))},l.Fb=function(e){return this===e},l.Mb=function(e){return lyt(u(e,10))},N(wct,"PolylineEdgeRouter/1",1452),D(1809,1,gi,DQ),l.Mb=function(e){return u(e,129).c==(Yf(),vb)},N(r1,"HyperEdgeCycleDetector/lambda$0$Type",1809),D(1810,1,{},IQ),l.Ge=function(e){return u(e,129).d},N(r1,"HyperEdgeCycleDetector/lambda$1$Type",1810),D(1811,1,gi,OQ),l.Mb=function(e){return u(e,129).c==(Yf(),vb)},N(r1,"HyperEdgeCycleDetector/lambda$2$Type",1811),D(1812,1,{},Y5),l.Ge=function(e){return u(e,129).d},N(r1,"HyperEdgeCycleDetector/lambda$3$Type",1812),D(1813,1,{},NQ),l.Ge=function(e){return u(e,129).d},N(r1,"HyperEdgeCycleDetector/lambda$4$Type",1813),D(1814,1,{},PQ),l.Ge=function(e){return u(e,129).d},N(r1,"HyperEdgeCycleDetector/lambda$5$Type",1814),D(112,1,{35:1,112:1},LD),l.wd=function(e){return UKe(this,u(e,112))},l.Fb=function(e){var n;return _t(e,112)?(n=u(e,112),this.g==n.g):!1},l.Hb=function(){return this.g},l.Ib=function(){var e,n,r,s;for(e=new Fl("{"),s=new S(this.n);s.a"+this.b+" ("+rQe(this.c)+")"},l.d=0,N(r1,"HyperEdgeSegmentDependency",129),D(520,22,{3:1,35:1,22:1,520:1},Fbt);var vb,Uy,Rme=zr(r1,"HyperEdgeSegmentDependency/DependencyType",520,Ur,Vnn,uJe),jme;D(1815,1,{},M$t),N(r1,"HyperEdgeSegmentSplitter",1815),D(1816,1,{},oHt),l.a=0,l.b=0,N(r1,"HyperEdgeSegmentSplitter/AreaRating",1816),D(329,1,{329:1},knt),l.a=0,l.b=0,l.c=0,N(r1,"HyperEdgeSegmentSplitter/FreeArea",329),D(1817,1,qi,qQ),l.ue=function(e,n){return JQe(u(e,112),u(n,112))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(r1,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),D(1818,1,Kn,xXt),l.td=function(e){isn(this.a,this.d,this.c,this.b,u(e,112))},l.b=0,N(r1,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),D(1819,1,{},HQ),l.Kb=function(e){return new kn(null,new Tn(u(e,112).e,16))},N(r1,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),D(1820,1,{},VQ),l.Kb=function(e){return new kn(null,new Tn(u(e,112).j,16))},N(r1,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),D(1821,1,{},GQ),l.Fe=function(e){return Zt(ve(e))},N(r1,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),D(655,1,{},Unt),l.a=0,l.b=0,l.c=0,N(r1,"OrthogonalRoutingGenerator",655),D(1638,1,{},UQ),l.Kb=function(e){return new kn(null,new Tn(u(e,112).e,16))},N(r1,"OrthogonalRoutingGenerator/lambda$0$Type",1638),D(1639,1,{},WQ),l.Kb=function(e){return new kn(null,new Tn(u(e,112).j,16))},N(r1,"OrthogonalRoutingGenerator/lambda$1$Type",1639),D(661,1,{}),N(mct,"BaseRoutingDirectionStrategy",661),D(1807,661,{},hqt),l.dg=function(e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z;if(!(e.r&&!e.q))for(M=n+e.o*r,_=new S(e.n);_.a<_.c.c.length;)for(k=u(Q(_),11),B=nc(ut(ot(na,1),re,8,0,[k.i.n,k.n,k.a])).a,w=new S(k.g);w.axd&&(h=M,o=e,s=new Re(B,h),ai(d.a,s),fw(this,d,o,s,!1),q=e.r,q&&(G=Zt(ve(e1(q.e,0))),s=new Re(G,h),ai(d.a,s),fw(this,d,o,s,!1),h=n+q.o*r,o=q,s=new Re(G,h),ai(d.a,s),fw(this,d,o,s,!1)),s=new Re(Z,h),ai(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),yr},l.gg=function(){return be(),On},N(mct,"NorthToSouthRoutingStrategy",1807),D(1808,661,{},fqt),l.dg=function(e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z;if(!(e.r&&!e.q))for(M=n-e.o*r,_=new S(e.n);_.a<_.c.c.length;)for(k=u(Q(_),11),B=nc(ut(ot(na,1),re,8,0,[k.i.n,k.n,k.a])).a,w=new S(k.g);w.axd&&(h=M,o=e,s=new Re(B,h),ai(d.a,s),fw(this,d,o,s,!1),q=e.r,q&&(G=Zt(ve(e1(q.e,0))),s=new Re(G,h),ai(d.a,s),fw(this,d,o,s,!1),h=n-q.o*r,o=q,s=new Re(G,h),ai(d.a,s),fw(this,d,o,s,!1)),s=new Re(Z,h),ai(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),On},l.gg=function(){return be(),yr},N(mct,"SouthToNorthRoutingStrategy",1808),D(1806,661,{},dqt),l.dg=function(e,n,r){var s,o,h,d,w,k,_,M,B,q,G,W,Z;if(!(e.r&&!e.q))for(M=n+e.o*r,_=new S(e.n);_.a<_.c.c.length;)for(k=u(Q(_),11),B=nc(ut(ot(na,1),re,8,0,[k.i.n,k.n,k.a])).b,w=new S(k.g);w.axd&&(h=M,o=e,s=new Re(h,B),ai(d.a,s),fw(this,d,o,s,!0),q=e.r,q&&(G=Zt(ve(e1(q.e,0))),s=new Re(h,G),ai(d.a,s),fw(this,d,o,s,!0),h=n+q.o*r,o=q,s=new Re(h,G),ai(d.a,s),fw(this,d,o,s,!0)),s=new Re(h,Z),ai(d.a,s),fw(this,d,o,s,!0)))},l.eg=function(e){return e.i.n.b+e.n.b+e.a.b},l.fg=function(){return be(),Hn},l.gg=function(){return be(),Bn},N(mct,"WestToEastRoutingStrategy",1806),D(813,1,{},n6t),l.Ib=function(){return Jp(this.a)},l.b=0,l.c=!1,l.d=!1,l.f=0,N(Ty,"NubSpline",813),D(407,1,{407:1},Fce,eQt),N(Ty,"NubSpline/PolarCP",407),D(1453,1,Vc,_se),l.Yf=function(e){return Ldn(u(e,37))},l.pf=function(e,n){u5n(this,u(e,37),n)};var $me,zme,qme,Hme,Vme;N(Ty,"SplineEdgeRouter",1453),D(268,1,{268:1},S$),l.Ib=function(){return this.a+" ->("+this.c+") "+this.b},l.c=0,N(Ty,"SplineEdgeRouter/Dependency",268),D(455,22,{3:1,35:1,22:1,455:1},Bbt);var wb,n5,Gme=zr(Ty,"SplineEdgeRouter/SideToProcess",455,Ur,Wnn,lJe),Ume;D(1454,1,gi,zQ),l.Mb=function(e){return bC(),!u(e,128).o},N(Ty,"SplineEdgeRouter/lambda$0$Type",1454),D(1455,1,{},$Q),l.Ge=function(e){return bC(),u(e,128).v+1},N(Ty,"SplineEdgeRouter/lambda$1$Type",1455),D(1456,1,Kn,nGt),l.td=function(e){ytn(this.a,this.b,u(e,46))},N(Ty,"SplineEdgeRouter/lambda$2$Type",1456),D(1457,1,Kn,rGt),l.td=function(e){xtn(this.a,this.b,u(e,46))},N(Ty,"SplineEdgeRouter/lambda$3$Type",1457),D(128,1,{35:1,128:1},Jae,c6t),l.wd=function(e){return WKe(this,u(e,128))},l.b=0,l.e=!1,l.f=0,l.g=0,l.j=!1,l.k=!1,l.n=0,l.o=!1,l.p=!1,l.q=!1,l.s=0,l.u=0,l.v=0,l.F=0,N(Ty,"SplineSegment",128),D(459,1,{459:1},G9),l.a=0,l.b=!1,l.c=!1,l.d=!1,l.e=!1,l.f=0,N(Ty,"SplineSegment/EdgeInformation",459),D(1234,1,{},FQ),N(qC,rxt,1234),D(1235,1,qi,BQ),l.ue=function(e,n){return rpn(u(e,135),u(n,135))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(qC,Bfe,1235),D(1233,1,{},EHt),N(qC,"MrTree",1233),D(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},UR),l.Kf=function(){return Toe(this)},l.Xf=function(){return Toe(this)};var vG,PS,PO,FS,Y_t=zr(qC,"TreeLayoutPhases",393,Ur,jin,hJe),Wme;D(1130,209,_2,HWt),l.Ze=function(e,n){var r,s,o,h,d,w,k;for(Be(Fe(ze(e,(hw(),eCt))))||u$((r=new rr((Dm(),new Sm(e))),r)),d=(w=new A$,Bo(w,e),ee(w,(mc(),jS),e),k=new Ar,Kwn(e,w,k),hmn(e,w,k),w),h=imn(this.a,d),o=new S(h);o.a"+b$(this.c):"e_"+Ji(this)},N(HC,"TEdge",188),D(135,134,{3:1,135:1,94:1,134:1},A$),l.Ib=function(){var e,n,r,s,o;for(o=null,s=si(this.b,0);s.b!=s.d.c;)r=u(ii(s),86),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+` -`;for(n=si(this.a,0);n.b!=n.d.c;)e=u(ii(n),188),o+=(e.b&&e.c?b$(e.b)+"->"+b$(e.c):"e_"+Ji(e))+` -`;return o};var p6n=N(HC,"TGraph",135);D(633,502,{3:1,502:1,633:1,94:1,134:1}),N(HC,"TShape",633),D(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},kit),l.Ib=function(){return b$(this)};var b6n=N(HC,"TNode",86);D(255,1,t0,Sp),l.Jc=function(e){_a(this,e)},l.Kc=function(){var e;return e=si(this.a.d,0),new p6(e)},N(HC,"TNode/2",255),D(358,1,da,p6),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return u(ii(this.a),188).c},l.Ob=function(){return kR(this.a)},l.Qb=function(){H$(this.a)},N(HC,"TNode/2/1",358),D(1840,1,vs,qWt),l.pf=function(e,n){Smn(this,u(e,135),n)},N(yx,"FanProcessor",1840),D(327,22,{3:1,35:1,22:1,327:1,234:1},t_),l.Kf=function(){switch(this.g){case 0:return new Aqt;case 1:return new qWt;case 2:return new X5;case 3:return new KQ;case 4:return new XQ;case 5:return new OL;default:throw nt(new Pn(jot+(this.f!=null?this.f:""+this.g)))}};var Eht,Tht,_ht,Cht,Sht,wG,Kme=zr(yx,gxt,327,Ur,ean,fJe),Yme;D(1843,1,vs,KQ),l.pf=function(e,n){ubn(this,u(e,135),n)},l.a=0,N(yx,"LevelHeightProcessor",1843),D(1844,1,t0,YQ),l.Jc=function(e){_a(this,e)},l.Kc=function(){return pn(),e8(),X7},N(yx,"LevelHeightProcessor/1",1844),D(1841,1,vs,X5),l.pf=function(e,n){bgn(this,u(e,135),n)},l.a=0,N(yx,"NeighborsProcessor",1841),D(1842,1,t0,$F),l.Jc=function(e){_a(this,e)},l.Kc=function(){return pn(),e8(),X7},N(yx,"NeighborsProcessor/1",1842),D(1845,1,vs,XQ),l.pf=function(e,n){cbn(this,u(e,135),n)},l.a=0,N(yx,"NodePositionProcessor",1845),D(1839,1,vs,Aqt),l.pf=function(e,n){Nyn(this,u(e,135))},N(yx,"RootProcessor",1839),D(1846,1,vs,OL),l.pf=function(e,n){Hun(u(e,135))},N(yx,"Untreeifyer",1846);var FO,BS,Xme,Aht,mG,RS,Lht,yG,xG,yE,jS,kG,Jg,X_t,Qme,Mht,Wy,Dht,Q_t;D(851,1,Ph,M3),l.Qe=function(e){an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Okt),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),J_t),(Hg(),ms)),aCt),on((t1(),qn))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Nkt),""),"Search Order"),"Which search order to use when computing a spanning tree."),Z_t),ms),cCt),on(qn)))),Xle((new KL,e))};var Zme,Z_t,Jme,J_t;N(fH,"MrTreeMetaDataProvider",851),D(994,1,Ph,KL),l.Qe=function(e){Xle(e)};var tye,tCt,eye,nye,rye,iye,eCt,sye,nCt,aye,EG,rCt,oye,iCt,cye;N(fH,"MrTreeOptions",994),D(995,1,{},QQ),l.$e=function(){var e;return e=new HWt,e},l._e=function(e){},N(fH,"MrTreeOptions/MrtreeFactory",995),D(480,22,{3:1,35:1,22:1,480:1},Rbt);var Iht,sCt,aCt=zr(fH,"OrderWeighting",480,Ur,Ynn,dJe),uye;D(425,22,{3:1,35:1,22:1,425:1},jbt);var oCt,Oht,cCt=zr(fH,"TreeifyingOrder",425,Ur,Knn,pJe),lye;D(1459,1,Vc,WL),l.Yf=function(e){return u(e,135),hye},l.pf=function(e,n){qon(this,u(e,135),n)};var hye;N("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),D(1460,1,Vc,JJ),l.Yf=function(e){return u(e,135),fye},l.pf=function(e,n){Cgn(this,u(e,135),n)};var fye;N("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),D(1461,1,Vc,ZJ),l.Yf=function(e){return u(e,135),dye},l.pf=function(e,n){Hvn(this,u(e,135),n)},l.a=0;var dye;N("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),D(1462,1,Vc,NB),l.Yf=function(e){return u(e,135),gye},l.pf=function(e,n){p1n(u(e,135),n)};var gye;N("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462);var $S;D(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},$bt),l.Kf=function(){return nie(this)},l.Xf=function(){return nie(this)};var TG,xE,uCt=zr(Pkt,"RadialLayoutPhases",495,Ur,Xnn,gJe),pye;D(1131,209,_2,kHt),l.Ze=function(e,n){var r,s,o,h,d,w;if(r=soe(this,e),mr(n,"Radial layout",r.c.length),Be(Fe(ze(e,(ay(),mCt))))||u$((s=new rr((Dm(),new Sm(e))),s)),w=Idn(e),Eo(e,(b_(),$S),w),!w)throw nt(new Pn("The given graph is not a tree!"));for(o=Zt(ve(ze(e,SG))),o==0&&(o=moe(e)),Eo(e,SG,o),d=new S(soe(this,e));d.a0&&Sre(($r(n-1,e.length),e.charCodeAt(n-1)),Kfe);)--n;if(s>=n)throw nt(new Pn("The given string does not contain any numbers."));if(o=py(e.substr(s,n-s),`,|;|\r| -`),o.length!=2)throw nt(new Pn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=ly(uy(o[0])),this.b=ly(uy(o[1]))}catch(h){throw h=rs(h),_t(h,127)?(r=h,nt(new Pn(Yfe+r))):nt(h)}},l.Ib=function(){return"("+this.a+","+this.b+")"},l.a=0,l.b=0;var na=N(qI,"KVector",8);D(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},ju,yR,hWt),l.Pc=function(){return eun(this)},l.Jf=function(e){var n,r,s,o,h,d;s=py(e,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | | -`),Mh(this);try{for(r=0,h=0,o=0,d=0;r0&&(h%2==0?o=ly(s[r]):d=ly(s[r]),h>0&&h%2!=0&&ai(this,new Re(o,d)),++h),++r}catch(w){throw w=rs(w),_t(w,127)?(n=w,nt(new Pn("The given string does not match the expected format for vectors."+n))):nt(w)}},l.Ib=function(){var e,n,r;for(e=new Fl("("),n=si(this,0);n.b!=n.d.c;)r=u(ii(n),8),Yr(e,r.a+","+r.b),n.b!=n.d.c&&(e.a+="; ");return(e.a+=")",e).a};var wSt=N(qI,"KVectorChain",74);D(248,22,{3:1,35:1,22:1,248:1},e_);var tft,NG,PG,$O,zO,FG,mSt=zr(Bh,"Alignment",248,Ur,Ysn,IJe),N3e;D(979,1,Ph,ntt),l.Qe=function(e){Gue(e)};var ySt,eft,P3e,xSt,kSt,F3e,ESt,B3e,R3e,TSt,_St,j3e;N(Bh,"BoxLayouterOptions",979),D(980,1,{},OZ),l.$e=function(){var e;return e=new jZ,e},l._e=function(e){},N(Bh,"BoxLayouterOptions/BoxFactory",980),D(291,22,{3:1,35:1,22:1,291:1},n_);var qO,nft,HO,VO,GO,rft,ift=zr(Bh,"ContentAlignment",291,Ur,Ksn,OJe),$3e;D(684,1,Ph,kp),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,V1e),""),"Layout Algorithm"),"Select a specific layout algorithm."),(Hg(),kE)),Le),on((t1(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,G1e),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),G1),m6n),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,hkt),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),CSt),ms),mSt),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,px),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,s8t),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),G1),wSt),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,cH),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),ASt),Rx),ift),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,KI),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Fn(),!1)),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,gkt),""),K6t),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),LSt),ms),WS),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,UI),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),ISt),ms),vft),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,gH),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,oH),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),FSt),ms),xAt),Ki(qn,ut(ot(ep,1),oe,175,0,[ua]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ww),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),USt),G1),SEt),Ki(qn,ut(ot(ep,1),oe,175,0,[ua]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,$I),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,vct),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,FC),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Fot),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),QSt),ms),TAt),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,uH),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),G1),na),Ki(ua,ut(ot(ep,1),oe,175,0,[q2,tp]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,jI),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),xc),Ha),Ki(ua,ut(ot(ep,1),oe,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Hq),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,PC),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Ekt),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),RSt),G1),wSt),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Ckt),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Skt),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),G1),T6n),Ki(qn,ut(ot(ep,1),oe,175,0,[tp]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Lkt),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),jSt),G1),CEt),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ukt),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),Pa),Ws),Ki(ua,ut(ot(ep,1),oe,175,0,[Id,q2,tp]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,U1e),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),$o),wa),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,W1e),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,K1e),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),de(100)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Y1e),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,X1e),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),de(4e3)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Q1e),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),de(400)),xc),Ha),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Z1e),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,J1e),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,tde),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ede),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,i8t),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),SSt),ms),MAt),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Qxt),j1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Zxt),j1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Mot),j1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Jxt),j1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Pot),j1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,tkt),j1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ekt),j1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ikt),j1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,nkt),j1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,rkt),j1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,ky),j1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,skt),j1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),$o),wa),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,akt),j1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),$o),wa),Ki(qn,ut(ot(ep,1),oe,175,0,[ua]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,okt),j1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),G1),x4e),Ki(ua,ut(ot(ep,1),oe,175,0,[Id,q2,tp]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Mkt),j1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),oAt),G1),CEt),on(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,bct),ide),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),xc),Ha),Ki(qn,ut(ot(ep,1),oe,175,0,[ua]))))),ba(e,bct,pct,K3e),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,pct),ide),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),WSt),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,pkt),sde),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),zSt),G1),SEt),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,F7),sde),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),qSt),Rx),vo),Ki(ua,ut(ot(ep,1),oe,175,0,[tp]))))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,wkt),bH),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),YSt),ms),QS),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,mkt),bH),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),ms),QS),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ykt),bH),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),ms),QS),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,xkt),bH),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),ms),QS),on(ua)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,kkt),bH),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),ms),QS),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,M4),Fct),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),HSt),Rx),tA),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,bx),Fct),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),GSt),Rx),CAt),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,vx),Fct),"Node Size Minimum"),"The minimal size to which a node can be reduced."),VSt),G1),na),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,gct),Fct),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),Pa),Ws),on(qn)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Tkt),dct),"Edge Label Placement"),"Gives a hint on where to put edge labels."),MSt),ms),uAt),on(tp)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Vq),dct),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),Pa),Ws),on(tp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,K5n),"font"),"Font Name"),"Font name used for a label."),kE),Le),on(tp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,nde),"font"),"Font Size"),"Font size used for a label."),xc),Ha),on(tp)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Akt),Bct),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),G1),na),on(q2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,_kt),Bct),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),xc),Ha),on(q2)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,lkt),Bct),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),tAt),ms),Za),on(q2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ckt),Bct),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),$o),wa),on(q2)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,B7),a8t),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),ZSt),Rx),VG),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,bkt),a8t),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,vkt),a8t),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,fkt),ade),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),Pa),Ws),on(ua)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,dkt),ade),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),Pa),Ws),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,Dot),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),$o),wa),on(Id)))),an(e,new Xe(rn(nn(sn(yn(Ze(en(Je(tn(new Ue,rde),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),NSt),ms),pAt),on(Id)))),VT(e,new $6(RT(Qk(Xk(new wm,Un),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),VT(e,new $6(RT(Qk(Xk(new wm,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),VT(e,new $6(RT(Qk(Xk(new wm,Wl),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),VT(e,new $6(RT(Qk(Xk(new wm,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),VT(e,new $6(RT(Qk(Xk(new wm,M1e),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),VT(e,new $6(RT(Qk(Xk(new wm,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),VT(e,new $6(RT(Qk(Xk(new wm,_d),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),Mue((new $B,e)),Gue((new ntt,e)),aue((new zB,e))};var GS,z3e,CSt,jx,q3e,H3e,SSt,V3e,BG,ASt,UO,jw,LSt,sft,aft,MSt,DSt,ISt,OSt,NSt,PSt,i5,FSt,G3e,WO,oft,RG,BSt,s5,RSt,KO,jSt,$St,zSt,a5,qSt,H2,HSt,jG,o5,VSt,mb,GSt,$G,YO,V2,USt,U3e,WSt,W3e,K3e,KSt,YSt,cft,uft,lft,hft,XSt,ml,US,QSt,fft,dft,Ky,ZSt,JSt,c5,tAt,$x,zG,gft,EE,Y3e,pft,X3e,Q3e,eAt,Z3e,nAt,J3e,zx,rAt,qG,iAt,sAt,G2,t4e,aAt,oAt,cAt;N(Bh,"CoreOptions",684),D(103,22,{3:1,35:1,22:1,103:1},LM);var Q0,Hh,_f,c0,Z0,WS=zr(Bh,K6t,103,Ur,vsn,FJe),e4e;D(272,22,{3:1,35:1,22:1,272:1},Het);var TE,Yy,_E,uAt=zr(Bh,"EdgeLabelPlacement",272,Ur,Qrn,BJe),n4e;D(218,22,{3:1,35:1,22:1,218:1},KR);var CE,XO,qx,bft,vft=zr(Bh,"EdgeRouting",218,Ur,Hin,RJe),r4e;D(312,22,{3:1,35:1,22:1,312:1},r_);var lAt,hAt,fAt,dAt,wft,gAt,pAt=zr(Bh,"EdgeType",312,Ur,ran,jJe),i4e;D(977,1,Ph,$B),l.Qe=function(e){Mue(e)};var bAt,vAt,wAt,mAt,s4e,yAt,KS;N(Bh,"FixedLayouterOptions",977),D(978,1,{},BL),l.$e=function(){var e;return e=new BZ,e},l._e=function(e){},N(Bh,"FixedLayouterOptions/FixedFactory",978),D(334,22,{3:1,35:1,22:1,334:1},Vet);var np,HG,YS,xAt=zr(Bh,"HierarchyHandling",334,Ur,Xrn,$Je),a4e;D(285,22,{3:1,35:1,22:1,285:1},YR);var u0,yb,QO,ZO,o4e=zr(Bh,"LabelSide",285,Ur,qin,zJe),c4e;D(93,22,{3:1,35:1,22:1,93:1},z3);var J0,Cf,Vh,Sf,Ql,Af,Gh,l0,Lf,vo=zr(Bh,"NodeLabelPlacement",93,Ur,aon,qJe),u4e;D(249,22,{3:1,35:1,22:1,249:1},MM);var kAt,XS,xb,EAt,JO,QS=zr(Bh,"PortAlignment",249,Ur,wsn,HJe),l4e;D(98,22,{3:1,35:1,22:1,98:1},i_);var U2,Kc,h0,SE,U1,kb,TAt=zr(Bh,"PortConstraints",98,Ur,$sn,VJe),h4e;D(273,22,{3:1,35:1,22:1,273:1},s_);var ZS,JS,tg,tN,Eb,Hx,VG=zr(Bh,"PortLabelPlacement",273,Ur,nan,GJe),f4e;D(61,22,{3:1,35:1,22:1,61:1},DM);var Hn,On,xh,kh,Du,gu,W1,Mf,ol,Yu,Yc,cl,Iu,Ou,Df,Zl,Jl,Uh,yr,ac,Bn,Za=zr(Bh,"PortSide",61,Ur,gsn,KJe),d4e;D(981,1,Ph,zB),l.Qe=function(e){aue(e)};var g4e,p4e,_At,b4e,v4e;N(Bh,"RandomLayouterOptions",981),D(982,1,{},HZ),l.$e=function(){var e;return e=new GZ,e},l._e=function(e){},N(Bh,"RandomLayouterOptions/RandomFactory",982),D(374,22,{3:1,35:1,22:1,374:1},XR);var Xy,eN,nN,W2,tA=zr(Bh,"SizeConstraint",374,Ur,zin,UJe),w4e;D(259,22,{3:1,35:1,22:1,259:1},q3);var rN,GG,AE,mft,iN,eA,UG,WG,KG,CAt=zr(Bh,"SizeOptions",259,Ur,don,WJe),m4e;D(370,1,{1949:1},Wk),l.b=!1,l.c=0,l.d=-1,l.e=null,l.f=null,l.g=-1,l.j=!1,l.k=!1,l.n=!1,l.o=0,l.q=0,l.r=0,N(Ac,"BasicProgressMonitor",370),D(972,209,_2,jZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,_,M;switch(mr(n,"Box layout",2),o=lM(ve(ze(e,(eq(),j3e)))),h=u(ze(e,R3e),116),r=Be(Fe(ze(e,xSt))),s=Be(Fe(ze(e,kSt))),u(ze(e,eft),311).g){case 0:d=(w=new qu((!e.a&&(e.a=new he(ds,e,10,11)),e.a)),pn(),aa(w,new q$t(s)),w),k=z4t(e),_=ve(ze(e,ySt)),(_==null||(In(_),_<=0))&&(_=1.3),M=Z4n(d,o,h,k.a,k.b,r,(In(_),_)),gw(e,M.a,M.b,!1,!0);break;default:Kyn(e,o,h,r)}or(n)},N(Ac,"BoxLayoutProvider",972),D(973,1,qi,q$t),l.ue=function(e,n){return b2n(this,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},l.a=!1,N(Ac,"BoxLayoutProvider/1",973),D(157,1,{157:1},U$,lWt),l.Ib=function(){return this.c?$5t(this.c):Jp(this.b)},N(Ac,"BoxLayoutProvider/Group",157),D(311,22,{3:1,35:1,22:1,311:1},QR);var SAt,AAt,LAt,yft,MAt=zr(Ac,"BoxLayoutProvider/PackingMode",311,Ur,Vin,YJe),y4e;D(974,1,qi,$Z),l.ue=function(e,n){return mnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Ac,"BoxLayoutProvider/lambda$0$Type",974),D(975,1,qi,KF),l.ue=function(e,n){return fnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Ac,"BoxLayoutProvider/lambda$1$Type",975),D(976,1,qi,zZ),l.ue=function(e,n){return dnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(Ac,"BoxLayoutProvider/lambda$2$Type",976),D(1365,1,{831:1},qZ),l.qg=function(e,n){return IR(),!_t(n,160)||yHt((X6(),u(e,160)),n)},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),D(1366,1,Kn,H$t),l.td=function(e){run(this.a,u(e,146))},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),D(1367,1,Kn,RZ),l.td=function(e){u(e,94),IR()},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),D(1371,1,Kn,V$t),l.td=function(e){Aon(this.a,u(e,94))},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),D(1369,1,gi,aGt),l.Mb=function(e){return Hcn(this.a,this.b,u(e,146))},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),D(1368,1,gi,oGt),l.Mb=function(e){return aQe(this.a,this.b,u(e,831))},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),D(1370,1,Kn,cGt),l.td=function(e){aen(this.a,this.b,u(e,146))},N(Ac,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),D(935,1,{},FZ),l.Kb=function(e){return cUt(e)},l.Fb=function(e){return this===e},N(Ac,"ElkUtil/lambda$0$Type",935),D(936,1,Kn,uGt),l.td=function(e){wpn(this.a,this.b,u(e,79))},l.a=0,l.b=0,N(Ac,"ElkUtil/lambda$1$Type",936),D(937,1,Kn,lGt),l.td=function(e){wKe(this.a,this.b,u(e,202))},l.a=0,l.b=0,N(Ac,"ElkUtil/lambda$2$Type",937),D(938,1,Kn,hGt),l.td=function(e){uXe(this.a,this.b,u(e,137))},l.a=0,l.b=0,N(Ac,"ElkUtil/lambda$3$Type",938),D(939,1,Kn,G$t),l.td=function(e){ktn(this.a,u(e,469))},N(Ac,"ElkUtil/lambda$4$Type",939),D(342,1,{35:1,342:1},KWe),l.wd=function(e){return BXe(this,u(e,236))},l.Fb=function(e){var n;return _t(e,342)?(n=u(e,342),this.a==n.a):!1},l.Hb=function(){return Cs(this.a)},l.Ib=function(){return this.a+" (exclusive)"},l.a=0,N(Ac,"ExclusiveBounds/ExclusiveLowerBound",342),D(1138,209,_2,BZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt,St,jt,Qt,ce,_e,We,Qe;for(mr(n,"Fixed Layout",1),h=u(ze(e,(di(),DSt)),218),B=0,q=0,St=new nr((!e.a&&(e.a=new he(ds,e,10,11)),e.a));St.e!=St.i.gc();){for(bt=u(dr(St),33),Qe=u(ze(bt,(bz(),KS)),8),Qe&&(k1(bt,Qe.a,Qe.b),u(ze(bt,vAt),174).Hc((Nl(),Xy))&&(G=u(ze(bt,mAt),8),G.a>0&&G.b>0&&gw(bt,G.a,G.b,!0,!0))),B=b.Math.max(B,bt.i+bt.g),q=b.Math.max(q,bt.j+bt.f),_=new nr((!bt.n&&(bt.n=new he(Yo,bt,1,7)),bt.n));_.e!=_.i.gc();)w=u(dr(_),137),Qe=u(ze(w,KS),8),Qe&&k1(w,Qe.a,Qe.b),B=b.Math.max(B,bt.i+w.i+w.g),q=b.Math.max(q,bt.j+w.j+w.f);for(ce=new nr((!bt.c&&(bt.c=new he(yl,bt,9,9)),bt.c));ce.e!=ce.i.gc();)for(Qt=u(dr(ce),118),Qe=u(ze(Qt,KS),8),Qe&&k1(Qt,Qe.a,Qe.b),_e=bt.i+Qt.i,We=bt.j+Qt.j,B=b.Math.max(B,_e+Qt.g),q=b.Math.max(q,We+Qt.f),k=new nr((!Qt.n&&(Qt.n=new he(Yo,Qt,1,7)),Qt.n));k.e!=k.i.gc();)w=u(dr(k),137),Qe=u(ze(w,KS),8),Qe&&k1(w,Qe.a,Qe.b),B=b.Math.max(B,_e+w.i+w.g),q=b.Math.max(q,We+w.j+w.f);for(o=new ar(lr(V0(bt).a.Kc(),new H));Vr(o);)r=u(Ir(o),79),M=xhe(r),B=b.Math.max(B,M.a),q=b.Math.max(q,M.b);for(s=new ar(lr(fI(bt).a.Kc(),new H));Vr(s);)r=u(Ir(s),79),hs(Zd(r))!=e&&(M=xhe(r),B=b.Math.max(B,M.a),q=b.Math.max(q,M.b))}if(h==(q0(),CE))for(Mt=new nr((!e.a&&(e.a=new he(ds,e,10,11)),e.a));Mt.e!=Mt.i.gc();)for(bt=u(dr(Mt),33),s=new ar(lr(V0(bt).a.Kc(),new H));Vr(s);)r=u(Ir(s),79),d=pmn(r),d.b==0?Eo(r,s5,null):Eo(r,s5,d);Be(Fe(ze(e,(bz(),wAt))))||(jt=u(ze(e,s4e),116),Z=B+jt.b+jt.c,W=q+jt.d+jt.a,gw(e,Z,W,!0,!0)),or(n)},N(Ac,"FixedLayoutProvider",1138),D(373,134,{3:1,414:1,373:1,94:1,134:1},tl,Rte),l.Jf=function(e){var n,r,s,o,h,d,w,k,_;if(e)try{for(k=py(e,";,;"),h=k,d=0,w=h.length;d>16&Ms|n^s<<16},l.Kc=function(){return new U$t(this)},l.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+Wo(this.b)+")":this.b==null?"pair("+Wo(this.a)+",null)":"pair("+Wo(this.a)+","+Wo(this.b)+")"},N(Ac,"Pair",46),D(983,1,da,U$t),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},l.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw nt(new vc)},l.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),nt(new Ru)},l.b=!1,l.c=!1,N(Ac,"Pair/1",983),D(448,1,{448:1},kXt),l.Fb=function(e){return Rc(this.a,u(e,448).a)&&Rc(this.c,u(e,448).c)&&Rc(this.d,u(e,448).d)&&Rc(this.b,u(e,448).b)},l.Hb=function(){return vz(ut(ot(Qn,1),Me,1,5,[this.a,this.c,this.d,this.b]))},l.Ib=function(){return"("+this.a+Xa+this.c+Xa+this.d+Xa+this.b+")"},N(Ac,"Quadruple",448),D(1126,209,_2,GZ),l.Ze=function(e,n){var r,s,o,h,d;if(mr(n,"Random Layout",1),(!e.a&&(e.a=new he(ds,e,10,11)),e.a).i==0){or(n);return}h=u(ze(e,(v3t(),b4e)),19),h&&h.a!=0?o=new T$(h.a):o=new Hit,r=lM(ve(ze(e,g4e))),d=lM(ve(ze(e,v4e))),s=u(ze(e,p4e),116),L4n(e,o,r,d,s),or(n)},N(Ac,"RandomLayoutProvider",1126);var T4e;D(553,1,{}),l.qf=function(){return new Re(this.f.i,this.f.j)},l.We=function(e){return KXt(e,(di(),ml))?ze(this.f,_4e):ze(this.f,e)},l.rf=function(){return new Re(this.f.g,this.f.f)},l.sf=function(){return this.g},l.Xe=function(e){return s2(this.f,e)},l.tf=function(e){Cu(this.f,e.a),Su(this.f,e.b)},l.uf=function(e){Qv(this.f,e.a),Xv(this.f,e.b)},l.vf=function(e){this.g=e},l.g=0;var _4e;N(UC,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),D(554,1,{839:1},aR),l.wf=function(){var e,n;if(!this.b)for(this.b=y$(Zj(this.a).i),n=new nr(Zj(this.a));n.e!=n.i.gc();)e=u(dr(n),137),ue(this.b,new iet(e));return this.b},l.b=null,N(UC,"ElkGraphAdapters/ElkEdgeAdapter",554),D(301,553,{},Sm),l.xf=function(){return kse(this)},l.a=null,N(UC,"ElkGraphAdapters/ElkGraphAdapter",301),D(630,553,{181:1},iet),N(UC,"ElkGraphAdapters/ElkLabelAdapter",630),D(629,553,{680:1},snt),l.wf=function(){return Dfn(this)},l.Af=function(){var e;return e=u(ze(this.f,(di(),KO)),142),!e&&(e=new MT),e},l.Cf=function(){return Ifn(this)},l.Ef=function(e){var n;n=new ynt(e),Eo(this.f,(di(),KO),n)},l.Ff=function(e){Eo(this.f,(di(),V2),new fvt(e))},l.yf=function(){return this.d},l.zf=function(){var e,n;if(!this.a)for(this.a=new le,n=new ar(lr(fI(u(this.f,33)).a.Kc(),new H));Vr(n);)e=u(Ir(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=new le,n=new ar(lr(V0(u(this.f,33)).a.Kc(),new H));Vr(n);)e=u(Ir(n),79),ue(this.c,new aR(e));return this.c},l.Df=function(){return i$(u(this.f,33)).i!=0||Be(Fe(u(this.f,33).We((di(),WO))))},l.Gf=function(){kan(this,(Dm(),T4e))},l.a=null,l.b=null,l.c=null,l.d=null,l.e=null,N(UC,"ElkGraphAdapters/ElkNodeAdapter",629),D(1266,553,{838:1},xzt),l.wf=function(){return $fn(this)},l.zf=function(){var e,n;if(!this.a)for(this.a=Hd(u(this.f,118).xg().i),n=new nr(u(this.f,118).xg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=Hd(u(this.f,118).yg().i),n=new nr(u(this.f,118).yg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.c,new aR(e));return this.c},l.Hf=function(){return u(u(this.f,118).We((di(),c5)),61)},l.If=function(){var e,n,r,s,o,h,d,w;for(s=_1(u(this.f,118)),r=new nr(u(this.f,118).yg());r.e!=r.i.gc();)for(e=u(dr(r),79),w=new nr((!e.c&&(e.c=new En(vr,e,5,8)),e.c));w.e!=w.i.gc();){if(d=u(dr(w),82),Zm(Ro(d),s))return!0;if(Ro(d)==s&&Be(Fe(ze(e,(di(),oft)))))return!0}for(n=new nr(u(this.f,118).xg());n.e!=n.i.gc();)for(e=u(dr(n),79),h=new nr((!e.b&&(e.b=new En(vr,e,4,7)),e.b));h.e!=h.i.gc();)if(o=u(dr(h),82),Zm(Ro(o),s))return!0;return!1},l.a=null,l.b=null,l.c=null,N(UC,"ElkGraphAdapters/ElkPortAdapter",1266),D(1267,1,qi,UZ),l.ue=function(e,n){return cwn(u(e,118),u(n,118))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(UC,"ElkGraphAdapters/PortComparator",1267);var Tb=as(vh,"EObject"),LE=as(N4,ude),Wh=as(N4,lde),sN=as(N4,hde),aN=as(N4,"ElkShape"),vr=as(N4,fde),ra=as(N4,o8t),us=as(N4,dde),oN=as(vh,gde),nA=as(vh,"EFactory"),C4e,xft=as(vh,pde),o1=as(vh,"EPackage"),la,S4e,A4e,NAt,YG,L4e,PAt,FAt,BAt,_b,M4e,D4e,Yo=as(N4,c8t),ds=as(N4,u8t),yl=as(N4,l8t);D(90,1,bde),l.Jg=function(){return this.Kg(),null},l.Kg=function(){return null},l.Lg=function(){return this.Kg(),!1},l.Mg=function(){return!1},l.Ng=function(e){Ci(this,e)},N(xx,"BasicNotifierImpl",90),D(97,90,yde),l.nh=function(){return Sl(this)},l.Og=function(e,n){return e},l.Pg=function(){throw nt(new Pr)},l.Qg=function(e){var n;return n=oo(u(wn(this.Tg(),this.Vg()),18)),this.eh().ih(this,n.n,n.f,e)},l.Rg=function(e,n){throw nt(new Pr)},l.Sg=function(e,n,r){return Ul(this,e,n,r)},l.Tg=function(){var e;return this.Pg()&&(e=this.Pg().ck(),e)?e:this.zh()},l.Ug=function(){return Ust(this)},l.Vg=function(){throw nt(new Pr)},l.Wg=function(){var e,n;return n=this.ph().dk(),!n&&this.Pg().ik(n=(GT(),e=Lwt(bd(this.Tg())),e==null?Lft:new NM(this,e))),n},l.Xg=function(e,n){return e},l.Yg=function(e){var n;return n=e.Gj(),n?e.aj():es(this.Tg(),e)},l.Zg=function(){var e;return e=this.Pg(),e?e.fk():null},l.$g=function(){return this.Pg()?this.Pg().ck():null},l._g=function(e,n,r){return jz(this,e,n,r)},l.ah=function(e){return L8(this,e)},l.bh=function(e,n){return Brt(this,e,n)},l.dh=function(){var e;return e=this.Pg(),!!e&&e.gk()},l.eh=function(){throw nt(new Pr)},l.fh=function(){return Iz(this)},l.gh=function(e,n,r,s){return tx(this,e,n,s)},l.hh=function(e,n,r){var s;return s=u(wn(this.Tg(),n),66),s.Nj().Qj(this,this.yh(),n-this.Ah(),e,r)},l.ih=function(e,n,r,s){return c$(this,e,n,s)},l.jh=function(e,n,r){var s;return s=u(wn(this.Tg(),n),66),s.Nj().Rj(this,this.yh(),n-this.Ah(),e,r)},l.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},l.lh=function(e){return rst(this,e)},l.mh=function(e){return hQt(this,e)},l.oh=function(e){return Fle(this,e)},l.ph=function(){throw nt(new Pr)},l.qh=function(){return this.Pg()?this.Pg().ek():null},l.rh=function(){return Iz(this)},l.sh=function(e,n){zst(this,e,n)},l.th=function(e){this.ph().hk(e)},l.uh=function(e){this.ph().kk(e)},l.vh=function(e){this.ph().jk(e)},l.wh=function(e,n){var r,s,o,h;return h=this.Zg(),h&&e&&(n=za(h.Vk(),this,n),h.Zk(this)),s=this.eh(),s&&(cat(this,this.eh(),this.Vg()).Bb&Qa?(o=s.fh(),o&&(e?!h&&o.Zk(this):o.Yk(this))):(n=(r=this.Vg(),r>=0?this.Qg(n):this.eh().ih(this,-1-r,null,n)),n=this.Sg(null,-1,n))),this.uh(e),n},l.xh=function(e){var n,r,s,o,h,d,w,k;if(r=this.Tg(),h=es(r,e),n=this.Ah(),h>=n)return u(e,66).Nj().Uj(this,this.yh(),h-n);if(h<=-1)if(d=T4((Gu(),Sa),r,e),d){if(so(),u(d,66).Oj()||(d=z6(Mo(Sa,d))),o=(s=this.Yg(d),u(s>=0?this._g(s,!0,!0):lw(this,d,!0),153)),k=d.Zj(),k>1||k==-1)return u(u(o,215).hl(e,!1),76)}else throw nt(new Pn(cb+e.ne()+Rct));else if(e.$j())return s=this.Yg(e),u(s>=0?this._g(s,!1,!0):lw(this,e,!1),76);return w=new DGt(this,e),w},l.yh=function(){return Mmt(this)},l.zh=function(){return(zp(),An).S},l.Ah=function(){return Jn(this.zh())},l.Bh=function(e){Fst(this,e)},l.Ib=function(){return mf(this)},N(Ln,"BasicEObjectImpl",97);var I4e;D(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),l.Ch=function(e){var n;return n=Dmt(this),n[e]},l.Dh=function(e,n){var r;r=Dmt(this),ls(r,e,n)},l.Eh=function(e){var n;n=Dmt(this),ls(n,e,null)},l.Jg=function(){return u(Mn(this,4),126)},l.Kg=function(){throw nt(new Pr)},l.Lg=function(){return(this.Db&4)!=0},l.Pg=function(){throw nt(new Pr)},l.Fh=function(e){J6(this,2,e)},l.Rg=function(e,n){this.Db=n<<16|this.Db&255,this.Fh(e)},l.Tg=function(){return ku(this)},l.Vg=function(){return this.Db>>16},l.Wg=function(){var e,n;return GT(),n=Lwt(bd((e=u(Mn(this,16),26),e||this.zh()))),n==null?Lft:new NM(this,n)},l.Mg=function(){return(this.Db&1)==0},l.Zg=function(){return u(Mn(this,128),1935)},l.$g=function(){return u(Mn(this,16),26)},l.dh=function(){return(this.Db&32)!=0},l.eh=function(){return u(Mn(this,2),49)},l.kh=function(){return(this.Db&64)!=0},l.ph=function(){throw nt(new Pr)},l.qh=function(){return u(Mn(this,64),281)},l.th=function(e){J6(this,16,e)},l.uh=function(e){J6(this,128,e)},l.vh=function(e){J6(this,64,e)},l.yh=function(){return uu(this)},l.Db=0,N(Ln,"MinimalEObjectImpl",114),D(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l.Fh=function(e){this.Cb=e},l.eh=function(){return this.Cb},N(Ln,"MinimalEObjectImpl/Container",115),D(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return q3t(this,e,n,r)},l.jh=function(e,n,r){return M4t(this,e,n,r)},l.lh=function(e){return zwt(this,e)},l.sh=function(e,n){Syt(this,e,n)},l.zh=function(){return nu(),D4e},l.Bh=function(e){byt(this,e)},l.Ve=function(){return Hie(this)},l.We=function(e){return ze(this,e)},l.Xe=function(e){return s2(this,e)},l.Ye=function(e,n){return Eo(this,e,n)},N(A2,"EMapPropertyHolderImpl",1985),D(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},mp),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return this.a!=0;case 1:return this.b!=0}return rst(this,e)},l.sh=function(e,n){switch(e){case 0:W$(this,Zt(ve(n)));return;case 1:K$(this,Zt(ve(n)));return}zst(this,e,n)},l.zh=function(){return nu(),S4e},l.Bh=function(e){switch(e){case 0:W$(this,0);return;case 1:K$(this,0);return}Fst(this,e)},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new Ah(mf(this)),e.a+=" (x: ",j3(e,this.a),e.a+=", y: ",j3(e,this.b),e.a+=")",e.a)},l.a=0,l.b=0,N(A2,"ElkBendPointImpl",567),D(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return Uyt(this,e,n,r)},l.hh=function(e,n,r){return Mst(this,e,n,r)},l.jh=function(e,n,r){return git(this,e,n,r)},l.lh=function(e){return cyt(this,e)},l.sh=function(e,n){o4t(this,e,n)},l.zh=function(){return nu(),L4e},l.Bh=function(e){qyt(this,e)},l.zg=function(){return this.k},l.Ag=function(){return Zj(this)},l.Ib=function(){return zit(this)},l.k=null,N(A2,"ElkGraphElementImpl",723),D(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return n3t(this,e,n,r)},l.lh=function(e){return u3t(this,e)},l.sh=function(e,n){c4t(this,e,n)},l.zh=function(){return nu(),M4e},l.Bh=function(e){g3t(this,e)},l.Bg=function(){return this.f},l.Cg=function(){return this.g},l.Dg=function(){return this.i},l.Eg=function(){return this.j},l.Fg=function(e,n){sj(this,e,n)},l.Gg=function(e,n){k1(this,e,n)},l.Hg=function(e){Cu(this,e)},l.Ig=function(e){Su(this,e)},l.Ib=function(){return Pst(this)},l.f=0,l.g=0,l.i=0,l.j=0,N(A2,"ElkShapeImpl",724),D(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return F3t(this,e,n,r)},l.hh=function(e,n,r){return e4t(this,e,n,r)},l.jh=function(e,n,r){return n4t(this,e,n,r)},l.lh=function(e){return _yt(this,e)},l.sh=function(e,n){h5t(this,e,n)},l.zh=function(){return nu(),A4e},l.Bh=function(e){A3t(this,e)},l.xg=function(){return!this.d&&(this.d=new En(ra,this,8,5)),this.d},l.yg=function(){return!this.e&&(this.e=new En(ra,this,7,4)),this.e},N(A2,"ElkConnectableShapeImpl",725),D(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},fv),l.Qg=function(e){return Q3t(this,e)},l._g=function(e,n,r){switch(e){case 3:return rD(this);case 4:return!this.b&&(this.b=new En(vr,this,4,7)),this.b;case 5:return!this.c&&(this.c=new En(vr,this,5,8)),this.c;case 6:return!this.a&&(this.a=new he(us,this,6,6)),this.a;case 7:return Fn(),!this.b&&(this.b=new En(vr,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new En(vr,this,5,8)),this.c.i<=1));case 8:return Fn(),!!gC(this);case 9:return Fn(),!!uw(this);case 10:return Fn(),!this.b&&(this.b=new En(vr,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new En(vr,this,5,8)),this.c.i!=0)}return Uyt(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 3:return this.Cb&&(r=(s=this.Db>>16,s>=0?Q3t(this,r):this.Cb.ih(this,-1-s,null,r))),V2t(this,u(e,33),r);case 4:return!this.b&&(this.b=new En(vr,this,4,7)),eu(this.b,e,r);case 5:return!this.c&&(this.c=new En(vr,this,5,8)),eu(this.c,e,r);case 6:return!this.a&&(this.a=new he(us,this,6,6)),eu(this.a,e,r)}return Mst(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 3:return V2t(this,null,r);case 4:return!this.b&&(this.b=new En(vr,this,4,7)),za(this.b,e,r);case 5:return!this.c&&(this.c=new En(vr,this,5,8)),za(this.c,e,r);case 6:return!this.a&&(this.a=new he(us,this,6,6)),za(this.a,e,r)}return git(this,e,n,r)},l.lh=function(e){switch(e){case 3:return!!rD(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new En(vr,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new En(vr,this,5,8)),this.c.i<=1));case 8:return gC(this);case 9:return uw(this);case 10:return!this.b&&(this.b=new En(vr,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new En(vr,this,5,8)),this.c.i!=0)}return cyt(this,e)},l.sh=function(e,n){switch(e){case 3:Zst(this,u(n,33));return;case 4:!this.b&&(this.b=new En(vr,this,4,7)),Tr(this.b),!this.b&&(this.b=new En(vr,this,4,7)),gs(this.b,u(n,14));return;case 5:!this.c&&(this.c=new En(vr,this,5,8)),Tr(this.c),!this.c&&(this.c=new En(vr,this,5,8)),gs(this.c,u(n,14));return;case 6:!this.a&&(this.a=new he(us,this,6,6)),Tr(this.a),!this.a&&(this.a=new he(us,this,6,6)),gs(this.a,u(n,14));return}o4t(this,e,n)},l.zh=function(){return nu(),NAt},l.Bh=function(e){switch(e){case 3:Zst(this,null);return;case 4:!this.b&&(this.b=new En(vr,this,4,7)),Tr(this.b);return;case 5:!this.c&&(this.c=new En(vr,this,5,8)),Tr(this.c);return;case 6:!this.a&&(this.a=new he(us,this,6,6)),Tr(this.a);return}qyt(this,e)},l.Ib=function(){return xle(this)},N(A2,"ElkEdgeImpl",352),D(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},id),l.Qg=function(e){return W3t(this,e)},l._g=function(e,n,r){switch(e){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new Bs(Wh,this,5)),this.a;case 6:return cQt(this);case 7:return n?cst(this):this.i;case 8:return n?ost(this):this.f;case 9:return!this.g&&(this.g=new En(us,this,9,10)),this.g;case 10:return!this.e&&(this.e=new En(us,this,10,9)),this.e;case 11:return this.d}return q3t(this,e,n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?W3t(this,r):this.Cb.ih(this,-1-o,null,r))),G2t(this,u(e,79),r);case 9:return!this.g&&(this.g=new En(us,this,9,10)),eu(this.g,e,r);case 10:return!this.e&&(this.e=new En(us,this,10,9)),eu(this.e,e,r)}return h=u(wn((s=u(Mn(this,16),26),s||(nu(),YG)),n),66),h.Nj().Qj(this,uu(this),n-Jn((nu(),YG)),e,r)},l.jh=function(e,n,r){switch(n){case 5:return!this.a&&(this.a=new Bs(Wh,this,5)),za(this.a,e,r);case 6:return G2t(this,null,r);case 9:return!this.g&&(this.g=new En(us,this,9,10)),za(this.g,e,r);case 10:return!this.e&&(this.e=new En(us,this,10,9)),za(this.e,e,r)}return M4t(this,e,n,r)},l.lh=function(e){switch(e){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!cQt(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return zwt(this,e)},l.sh=function(e,n){switch(e){case 1:P8(this,Zt(ve(n)));return;case 2:B8(this,Zt(ve(n)));return;case 3:N8(this,Zt(ve(n)));return;case 4:F8(this,Zt(ve(n)));return;case 5:!this.a&&(this.a=new Bs(Wh,this,5)),Tr(this.a),!this.a&&(this.a=new Bs(Wh,this,5)),gs(this.a,u(n,14));return;case 6:kce(this,u(n,79));return;case 7:J$(this,u(n,82));return;case 8:Z$(this,u(n,82));return;case 9:!this.g&&(this.g=new En(us,this,9,10)),Tr(this.g),!this.g&&(this.g=new En(us,this,9,10)),gs(this.g,u(n,14));return;case 10:!this.e&&(this.e=new En(us,this,10,9)),Tr(this.e),!this.e&&(this.e=new En(us,this,10,9)),gs(this.e,u(n,14));return;case 11:Jmt(this,jr(n));return}Syt(this,e,n)},l.zh=function(){return nu(),YG},l.Bh=function(e){switch(e){case 1:P8(this,0);return;case 2:B8(this,0);return;case 3:N8(this,0);return;case 4:F8(this,0);return;case 5:!this.a&&(this.a=new Bs(Wh,this,5)),Tr(this.a);return;case 6:kce(this,null);return;case 7:J$(this,null);return;case 8:Z$(this,null);return;case 9:!this.g&&(this.g=new En(us,this,9,10)),Tr(this.g);return;case 10:!this.e&&(this.e=new En(us,this,10,9)),Tr(this.e);return;case 11:Jmt(this,null);return}byt(this,e)},l.Ib=function(){return $oe(this)},l.b=0,l.c=0,l.d=null,l.j=0,l.k=0,N(A2,"ElkEdgeSectionImpl",439),D(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l._g=function(e,n,r){var s;return e==0?(!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab):hh(this,e-Jn(this.zh()),wn((s=u(Mn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r)):(o=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),o.Nj().Qj(this,uu(this),n-Jn(this.zh()),e,r))},l.jh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r)):(o=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,uu(this),n-Jn(this.zh()),e,r))},l.lh=function(e){var n;return e==0?!!this.Ab&&this.Ab.i!=0:uh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.oh=function(e){return m6t(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return}bh(this,e-Jn(this.zh()),wn((r=u(Mn(this,16),26),r||this.zh()),e),n)},l.uh=function(e){J6(this,128,e)},l.zh=function(){return ln(),X4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return}gh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.Gh=function(){this.Bb|=1},l.Hh=function(e){return mC(this,e)},l.Bb=0,N(Ln,"EModelElementImpl",150),D(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},qB),l.Ih=function(e,n){return Qle(this,e,n)},l.Jh=function(e){var n,r,s,o,h;if(this.a!=zl(e)||e.Bb&256)throw nt(new Pn($ct+e.zb+kw));for(s=Po(e);Oc(s.a).i!=0;){if(r=u(EI(s,0,(n=u(At(Oc(s.a),0),87),h=n.c,_t(h,88)?u(h,26):(ln(),Qh))),26),cw(r))return o=zl(r).Nh().Jh(r),u(o,49).th(e),o;s=Po(r)}return(e.D!=null?e.D:e.B)=="java.util.Map$Entry"?new UKt(e):new Dvt(e)},l.Kh=function(e,n){return pw(this,e,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.a}return hh(this,e-Jn((ln(),Lb)),wn((s=u(Mn(this,16),26),s||Lb),e),n,r)},l.hh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 1:return this.a&&(r=u(this.a,49).ih(this,4,o1,r)),$yt(this,u(e,235),r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),Lb)),n),66),o.Nj().Qj(this,uu(this),n-Jn((ln(),Lb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 1:return $yt(this,null,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),Lb)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),Lb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return uh(this,e-Jn((ln(),Lb)),wn((n=u(Mn(this,16),26),n||Lb),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:kae(this,u(n,235));return}bh(this,e-Jn((ln(),Lb)),wn((r=u(Mn(this,16),26),r||Lb),e),n)},l.zh=function(){return ln(),Lb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:kae(this,null);return}gh(this,e-Jn((ln(),Lb)),wn((n=u(Mn(this,16),26),n||Lb),e))};var rA,RAt,O4e;N(Ln,"EFactoryImpl",704),D(xf,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Z5),l.Ih=function(e,n){switch(e.yj()){case 12:return u(n,146).tg();case 13:return Wo(n);default:throw nt(new Pn(z7+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k;switch(e.G==-1&&(e.G=(n=zl(e),n?$g(n.Mh(),e):-1)),e.G){case 4:return h=new Y9,h;case 6:return d=new Npt,d;case 7:return w=new Ppt,w;case 8:return s=new fv,s;case 9:return r=new mp,r;case 10:return o=new id,o;case 11:return k=new YF,k;default:throw nt(new Pn($ct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 13:case 12:return null;default:throw nt(new Pn(z7+e.ne()+kw))}},N(A2,"ElkGraphFactoryImpl",xf),D(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l.Wg=function(){var e,n;return n=(e=u(Mn(this,16),26),Lwt(bd(e||this.zh()))),n==null?(GT(),GT(),Lft):new dWt(this,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.ne()}return hh(this,e-Jn(this.zh()),wn((s=u(Mn(this,16),26),s||this.zh()),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return uh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:this.Lh(jr(n));return}bh(this,e-Jn(this.zh()),wn((r=u(Mn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return ln(),Q4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:this.Lh(null);return}gh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.ne=function(){return this.zb},l.Lh=function(e){tu(this,e)},l.Ib=function(){return X_(this)},l.zb=null,N(Ln,"ENamedElementImpl",438),D(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},WXt),l.Qg=function(e){return Fse(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new qm(this,c1,this)),this.rb;case 6:return!this.vb&&(this.vb=new M6(o1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?u(this.Cb,235):null:uQt(this)}return hh(this,e-Jn((ln(),ap)),wn((s=u(Mn(this,16),26),s||ap),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 4:return this.sb&&(r=u(this.sb,49).ih(this,1,nA,r)),Vyt(this,u(e,471),r);case 5:return!this.rb&&(this.rb=new qm(this,c1,this)),eu(this.rb,e,r);case 6:return!this.vb&&(this.vb=new M6(o1,this,6,7)),eu(this.vb,e,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?Fse(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,7,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),ap)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),ap)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 4:return Vyt(this,null,r);case 5:return!this.rb&&(this.rb=new qm(this,c1,this)),za(this.rb,e,r);case 6:return!this.vb&&(this.vb=new M6(o1,this,6,7)),za(this.vb,e,r);case 7:return Ul(this,null,7,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),ap)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),ap)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!uQt(this)}return uh(this,e-Jn((ln(),ap)),wn((n=u(Mn(this,16),26),n||ap),e))},l.oh=function(e){var n;return n=M2n(this,e),n||m6t(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:tu(this,jr(n));return;case 2:az(this,jr(n));return;case 3:sz(this,jr(n));return;case 4:Nst(this,u(n,471));return;case 5:!this.rb&&(this.rb=new qm(this,c1,this)),Tr(this.rb),!this.rb&&(this.rb=new qm(this,c1,this)),gs(this.rb,u(n,14));return;case 6:!this.vb&&(this.vb=new M6(o1,this,6,7)),Tr(this.vb),!this.vb&&(this.vb=new M6(o1,this,6,7)),gs(this.vb,u(n,14));return}bh(this,e-Jn((ln(),ap)),wn((r=u(Mn(this,16),26),r||ap),e),n)},l.vh=function(e){var n,r;if(e&&this.rb)for(r=new nr(this.rb);r.e!=r.i.gc();)n=dr(r),_t(n,351)&&(u(n,351).w=null);J6(this,64,e)},l.zh=function(){return ln(),ap},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:tu(this,null);return;case 2:az(this,null);return;case 3:sz(this,null);return;case 4:Nst(this,null);return;case 5:!this.rb&&(this.rb=new qm(this,c1,this)),Tr(this.rb);return;case 6:!this.vb&&(this.vb=new M6(o1,this,6,7)),Tr(this.vb);return}gh(this,e-Jn((ln(),ap)),wn((n=u(Mn(this,16),26),n||ap),e))},l.Gh=function(){xst(this)},l.Mh=function(){return!this.rb&&(this.rb=new qm(this,c1,this)),this.rb},l.Nh=function(){return this.sb},l.Oh=function(){return this.ub},l.Ph=function(){return this.xb},l.Qh=function(){return this.yb},l.Rh=function(e){this.ub=e},l.Ib=function(){var e;return this.Db&64?X_(this):(e=new Ah(X_(this)),e.a+=" (nsURI: ",yo(e,this.yb),e.a+=", nsPrefix: ",yo(e,this.xb),e.a+=")",e.a)},l.xb=null,l.yb=null,N(Ln,"EPackageImpl",179),D(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Yoe),l.q=!1,l.r=!1;var N4e=!1;N(A2,"ElkGraphPackageImpl",555),D(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Y9),l.Qg=function(e){return K3t(this,e)},l._g=function(e,n,r){switch(e){case 7:return lQt(this);case 8:return this.a}return n3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 7:return this.Cb&&(r=(s=this.Db>>16,s>=0?K3t(this,r):this.Cb.ih(this,-1-s,null,r))),Uvt(this,u(e,160),r)}return Mst(this,e,n,r)},l.jh=function(e,n,r){return n==7?Uvt(this,null,r):git(this,e,n,r)},l.lh=function(e){switch(e){case 7:return!!lQt(this);case 8:return!un("",this.a)}return u3t(this,e)},l.sh=function(e,n){switch(e){case 7:_5t(this,u(n,160));return;case 8:Umt(this,jr(n));return}c4t(this,e,n)},l.zh=function(){return nu(),PAt},l.Bh=function(e){switch(e){case 7:_5t(this,null);return;case 8:Umt(this,"");return}g3t(this,e)},l.Ib=function(){return Fae(this)},l.a="",N(A2,"ElkLabelImpl",354),D(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Npt),l.Qg=function(e){return Z3t(this,e)},l._g=function(e,n,r){switch(e){case 9:return!this.c&&(this.c=new he(yl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new he(ds,this,10,11)),this.a;case 11:return hs(this);case 12:return!this.b&&(this.b=new he(ra,this,12,3)),this.b;case 13:return Fn(),!this.a&&(this.a=new he(ds,this,10,11)),this.a.i>0}return F3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return!this.c&&(this.c=new he(yl,this,9,9)),eu(this.c,e,r);case 10:return!this.a&&(this.a=new he(ds,this,10,11)),eu(this.a,e,r);case 11:return this.Cb&&(r=(s=this.Db>>16,s>=0?Z3t(this,r):this.Cb.ih(this,-1-s,null,r))),tvt(this,u(e,33),r);case 12:return!this.b&&(this.b=new he(ra,this,12,3)),eu(this.b,e,r)}return e4t(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 9:return!this.c&&(this.c=new he(yl,this,9,9)),za(this.c,e,r);case 10:return!this.a&&(this.a=new he(ds,this,10,11)),za(this.a,e,r);case 11:return tvt(this,null,r);case 12:return!this.b&&(this.b=new he(ra,this,12,3)),za(this.b,e,r)}return n4t(this,e,n,r)},l.lh=function(e){switch(e){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!hs(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new he(ds,this,10,11)),this.a.i>0}return _yt(this,e)},l.sh=function(e,n){switch(e){case 9:!this.c&&(this.c=new he(yl,this,9,9)),Tr(this.c),!this.c&&(this.c=new he(yl,this,9,9)),gs(this.c,u(n,14));return;case 10:!this.a&&(this.a=new he(ds,this,10,11)),Tr(this.a),!this.a&&(this.a=new he(ds,this,10,11)),gs(this.a,u(n,14));return;case 11:k5t(this,u(n,33));return;case 12:!this.b&&(this.b=new he(ra,this,12,3)),Tr(this.b),!this.b&&(this.b=new he(ra,this,12,3)),gs(this.b,u(n,14));return}h5t(this,e,n)},l.zh=function(){return nu(),FAt},l.Bh=function(e){switch(e){case 9:!this.c&&(this.c=new he(yl,this,9,9)),Tr(this.c);return;case 10:!this.a&&(this.a=new he(ds,this,10,11)),Tr(this.a);return;case 11:k5t(this,null);return;case 12:!this.b&&(this.b=new he(ra,this,12,3)),Tr(this.b);return}A3t(this,e)},l.Ib=function(){return $5t(this)},N(A2,"ElkNodeImpl",239),D(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Ppt),l.Qg=function(e){return Y3t(this,e)},l._g=function(e,n,r){return e==9?_1(this):F3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return this.Cb&&(r=(s=this.Db>>16,s>=0?Y3t(this,r):this.Cb.ih(this,-1-s,null,r))),U2t(this,u(e,33),r)}return e4t(this,e,n,r)},l.jh=function(e,n,r){return n==9?U2t(this,null,r):n4t(this,e,n,r)},l.lh=function(e){return e==9?!!_1(this):_yt(this,e)},l.sh=function(e,n){switch(e){case 9:x5t(this,u(n,33));return}h5t(this,e,n)},l.zh=function(){return nu(),BAt},l.Bh=function(e){switch(e){case 9:x5t(this,null);return}A3t(this,e)},l.Ib=function(){return kue(this)},N(A2,"ElkPortImpl",186);var P4e=as(qa,"BasicEMap/Entry");D(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},YF),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.Hb=function(){return Dv(this)},l.Uh=function(e){Wmt(this,u(e,146))},l._g=function(e,n,r){switch(e){case 0:return this.b;case 1:return this.c}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return!!this.b;case 1:return this.c!=null}return rst(this,e)},l.sh=function(e,n){switch(e){case 0:Wmt(this,u(n,146));return;case 1:Xmt(this,n);return}zst(this,e,n)},l.zh=function(){return nu(),_b},l.Bh=function(e){switch(e){case 0:Wmt(this,null);return;case 1:Xmt(this,null);return}Fst(this,e)},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e?Ji(e):0),this.a},l.dd=function(){return this.c},l.Th=function(e){this.a=e},l.ed=function(e){var n;return n=this.c,Xmt(this,e),n},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new Ap,Yr(Yr(Yr(e,this.b?this.b.tg():Mu),Bot),d_(this.c)),e.a)},l.a=-1,l.c=null;var $w=N(A2,"ElkPropertyToValueMapEntryImpl",1092);D(984,1,{},XF),N(Ca,"JsonAdapter",984),D(210,60,U0,od),N(Ca,"JsonImportException",210),D(857,1,{},Bse),N(Ca,"JsonImporter",857),D(891,1,{},fGt),N(Ca,"JsonImporter/lambda$0$Type",891),D(892,1,{},dGt),N(Ca,"JsonImporter/lambda$1$Type",892),D(900,1,{},W$t),N(Ca,"JsonImporter/lambda$10$Type",900),D(902,1,{},gGt),N(Ca,"JsonImporter/lambda$11$Type",902),D(903,1,{},pGt),N(Ca,"JsonImporter/lambda$12$Type",903),D(909,1,{},SXt),N(Ca,"JsonImporter/lambda$13$Type",909),D(908,1,{},CXt),N(Ca,"JsonImporter/lambda$14$Type",908),D(904,1,{},bGt),N(Ca,"JsonImporter/lambda$15$Type",904),D(905,1,{},vGt),N(Ca,"JsonImporter/lambda$16$Type",905),D(906,1,{},wGt),N(Ca,"JsonImporter/lambda$17$Type",906),D(907,1,{},mGt),N(Ca,"JsonImporter/lambda$18$Type",907),D(912,1,{},K$t),N(Ca,"JsonImporter/lambda$19$Type",912),D(893,1,{},Y$t),N(Ca,"JsonImporter/lambda$2$Type",893),D(910,1,{},X$t),N(Ca,"JsonImporter/lambda$20$Type",910),D(911,1,{},Q$t),N(Ca,"JsonImporter/lambda$21$Type",911),D(915,1,{},Z$t),N(Ca,"JsonImporter/lambda$22$Type",915),D(913,1,{},J$t),N(Ca,"JsonImporter/lambda$23$Type",913),D(914,1,{},tzt),N(Ca,"JsonImporter/lambda$24$Type",914),D(917,1,{},ezt),N(Ca,"JsonImporter/lambda$25$Type",917),D(916,1,{},nzt),N(Ca,"JsonImporter/lambda$26$Type",916),D(918,1,Kn,yGt),l.td=function(e){san(this.b,this.a,jr(e))},N(Ca,"JsonImporter/lambda$27$Type",918),D(919,1,Kn,xGt),l.td=function(e){aan(this.b,this.a,jr(e))},N(Ca,"JsonImporter/lambda$28$Type",919),D(920,1,{},kGt),N(Ca,"JsonImporter/lambda$29$Type",920),D(896,1,{},rzt),N(Ca,"JsonImporter/lambda$3$Type",896),D(921,1,{},EGt),N(Ca,"JsonImporter/lambda$30$Type",921),D(922,1,{},izt),N(Ca,"JsonImporter/lambda$31$Type",922),D(923,1,{},szt),N(Ca,"JsonImporter/lambda$32$Type",923),D(924,1,{},azt),N(Ca,"JsonImporter/lambda$33$Type",924),D(925,1,{},ozt),N(Ca,"JsonImporter/lambda$34$Type",925),D(859,1,{},czt),N(Ca,"JsonImporter/lambda$35$Type",859),D(929,1,{},wKt),N(Ca,"JsonImporter/lambda$36$Type",929),D(926,1,Kn,uzt),l.td=function(e){usn(this.a,u(e,469))},N(Ca,"JsonImporter/lambda$37$Type",926),D(927,1,Kn,LGt),l.td=function(e){BYe(this.a,this.b,u(e,202))},N(Ca,"JsonImporter/lambda$38$Type",927),D(928,1,Kn,MGt),l.td=function(e){RYe(this.a,this.b,u(e,202))},N(Ca,"JsonImporter/lambda$39$Type",928),D(894,1,{},lzt),N(Ca,"JsonImporter/lambda$4$Type",894),D(930,1,Kn,hzt),l.td=function(e){lsn(this.a,u(e,8))},N(Ca,"JsonImporter/lambda$40$Type",930),D(895,1,{},fzt),N(Ca,"JsonImporter/lambda$5$Type",895),D(899,1,{},dzt),N(Ca,"JsonImporter/lambda$6$Type",899),D(897,1,{},gzt),N(Ca,"JsonImporter/lambda$7$Type",897),D(898,1,{},pzt),N(Ca,"JsonImporter/lambda$8$Type",898),D(901,1,{},bzt),N(Ca,"JsonImporter/lambda$9$Type",901),D(948,1,Kn,vzt),l.td=function(e){F6(this.a,new Hm(jr(e)))},N(Ca,"JsonMetaDataConverter/lambda$0$Type",948),D(949,1,Kn,wzt),l.td=function(e){Cen(this.a,u(e,237))},N(Ca,"JsonMetaDataConverter/lambda$1$Type",949),D(950,1,Kn,mzt),l.td=function(e){Ern(this.a,u(e,149))},N(Ca,"JsonMetaDataConverter/lambda$2$Type",950),D(951,1,Kn,yzt),l.td=function(e){Sen(this.a,u(e,175))},N(Ca,"JsonMetaDataConverter/lambda$3$Type",951),D(237,22,{3:1,35:1,22:1,237:1},C6);var XG,QG,kft,ZG,JG,tU,Eft,Tft,eU=zr(BI,"GraphFeature",237,Ur,Yan,QJe),F4e;D(13,1,{35:1,146:1},ts,Hs,vn,ao),l.wd=function(e){return FXe(this,u(e,146))},l.Fb=function(e){return KXt(this,e)},l.wg=function(){return Ie(this)},l.tg=function(){return this.b},l.Hb=function(){return zg(this.b)},l.Ib=function(){return this.b},N(BI,"Property",13),D(818,1,qi,dpt),l.ue=function(e,n){return tln(this,u(e,94),u(n,94))},l.Fb=function(e){return this===e},l.ve=function(){return new gt(this)},N(BI,"PropertyHolderComparator",818),D(695,1,da,gpt),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return lan(this)},l.Qb=function(){dHt()},l.Ob=function(){return!!this.a},N(yH,"ElkGraphUtil/AncestorIterator",695);var jAt=as(qa,"EList");D(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),l.Vc=function(e,n){J_(this,e,n)},l.Fc=function(e){return Or(this,e)},l.Wc=function(e,n){return vyt(this,e,n)},l.Gc=function(e){return gs(this,e)},l.Zh=function(){return new L6(this)},l.$h=function(){return new PM(this)},l._h=function(e){return CD(this,e)},l.ai=function(){return!0},l.bi=function(e,n){},l.ci=function(){},l.di=function(e,n){jrt(this,e,n)},l.ei=function(e,n,r){},l.fi=function(e,n){},l.gi=function(e,n,r){},l.Fb=function(e){return cue(this,e)},l.Hb=function(){return fyt(this)},l.hi=function(){return!1},l.Kc=function(){return new nr(this)},l.Yc=function(){return new A6(this)},l.Zc=function(e){var n;if(n=this.gc(),e<0||e>n)throw nt(new jm(e,n));return new Vnt(this,e)},l.ji=function(e,n){this.ii(e,this.Xc(n))},l.Mc=function(e){return j$(this,e)},l.li=function(e,n){return n},l._c=function(e,n){return l4(this,e,n)},l.Ib=function(){return i3t(this)},l.ni=function(){return!0},l.oi=function(e,n){return Y8(this,n)},N(qa,"AbstractEList",67),D(63,67,Sd,J5,Kv,iyt),l.Vh=function(e,n){return Dst(this,e,n)},l.Wh=function(e){return lse(this,e)},l.Xh=function(e,n){zD(this,e,n)},l.Yh=function(e){uD(this,e)},l.pi=function(e){return _mt(this,e)},l.$b=function(){R_(this)},l.Hc=function(e){return l7(this,e)},l.Xb=function(e){return At(this,e)},l.qi=function(e){var n,r,s;++this.j,r=this.g==null?0:this.g.length,e>r&&(s=this.g,n=r+(r/2|0)+4,n=0?(this.$c(n),!0):!1},l.mi=function(e,n){return this.Ui(e,this.oi(e,n))},l.gc=function(){return this.Vi()},l.Pc=function(){return this.Wi()},l.Qc=function(e){return this.Xi(e)},l.Ib=function(){return this.Yi()},N(qa,"DelegatingEList",1995),D(1996,1995,i0e),l.Vh=function(e,n){return Y5t(this,e,n)},l.Wh=function(e){return this.Vh(this.Vi(),e)},l.Xh=function(e,n){Woe(this,e,n)},l.Yh=function(e){Roe(this,e)},l.ai=function(){return!this.bj()},l.$b=function(){_C(this)},l.Zi=function(e,n,r,s,o){return new XXt(this,e,n,r,s,o)},l.$i=function(e){Ci(this.Ai(),e)},l._i=function(){return null},l.aj=function(){return-1},l.Ai=function(){return null},l.bj=function(){return!1},l.cj=function(e,n){return n},l.dj=function(e,n){return n},l.ej=function(){return!1},l.fj=function(){return!this.Ri()},l.ii=function(e,n){var r,s;return this.ej()?(s=this.fj(),r=S4t(this,e,n),this.$i(this.Zi(7,de(n),r,e,s)),r):S4t(this,e,n)},l.$c=function(e){var n,r,s,o;return this.ej()?(r=null,s=this.fj(),n=this.Zi(4,o=Ij(this,e),null,e,s),this.bj()&&o?(r=this.dj(o,r),r?(r.Ei(n),r.Fi()):this.$i(n)):r?(r.Ei(n),r.Fi()):this.$i(n),o):(o=Ij(this,e),this.bj()&&o&&(r=this.dj(o,null),r&&r.Fi()),o)},l.mi=function(e,n){return ele(this,e,n)},N(xx,"DelegatingNotifyingListImpl",1996),D(143,1,QI),l.Ei=function(e){return g4t(this,e)},l.Fi=function(){Krt(this)},l.xi=function(){return this.d},l._i=function(){return null},l.gj=function(){return null},l.yi=function(e){return-1},l.zi=function(){return zce(this)},l.Ai=function(){return null},l.Bi=function(){return M5t(this)},l.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},l.hj=function(){return!1},l.Di=function(e){var n,r,s,o,h,d,w,k,_,M,B;switch(this.d){case 1:case 2:switch(o=e.xi(),o){case 1:case 2:if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0}case 4:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return _=f6t(this),k=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,d=e.Ci(),this.d=6,B=new Kv(2),k<=d?(Or(B,this.n),Or(B,e.Bi()),this.g=ut(ot(Sr,1),Jr,25,15,[this.o=k,d+1])):(Or(B,e.Bi()),Or(B,this.n),this.g=ut(ot(Sr,1),Jr,25,15,[this.o=d,k])),this.n=B,_||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null)){for(_=f6t(this),d=e.Ci(),M=u(this.g,48),s=Nt(Sr,Jr,25,M.length+1,15,1),n=0;n>>0,n.toString(16))),s.a+=" (eventType: ",this.d){case 1:{s.a+="SET";break}case 2:{s.a+="UNSET";break}case 3:{s.a+="ADD";break}case 5:{s.a+="ADD_MANY";break}case 4:{s.a+="REMOVE";break}case 6:{s.a+="REMOVE_MANY";break}case 7:{s.a+="MOVE";break}case 8:{s.a+="REMOVING_ADAPTER";break}case 9:{s.a+="RESOLVE";break}default:{fet(s,this.d);break}}if(Lue(this)&&(s.a+=", touch: true"),s.a+=", position: ",fet(s,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),s.a+=", notifier: ",o_(s,this.Ai()),s.a+=", feature: ",o_(s,this._i()),s.a+=", oldValue: ",o_(s,M5t(this)),s.a+=", newValue: ",this.d==6&&_t(this.g,48)){for(r=u(this.g,48),s.a+="[",e=0;e10?((!this.b||this.c.j!=this.a)&&(this.b=new y_(this),this.a=this.j),S0(this.b,e)):l7(this,e)},l.ni=function(){return!0},l.a=0,N(qa,"AbstractEList/1",953),D(295,73,oot,jm),N(qa,"AbstractEList/BasicIndexOutOfBoundsException",295),D(40,1,da,nr),l.Nb=function(e){Ea(this,e)},l.mj=function(){if(this.i.j!=this.f)throw nt(new sh)},l.nj=function(){return dr(this)},l.Ob=function(){return this.e!=this.i.gc()},l.Pb=function(){return this.nj()},l.Qb=function(){uC(this)},l.e=0,l.f=0,l.g=-1,N(qa,"AbstractEList/EIterator",40),D(278,40,Jd,A6,Vnt),l.Qb=function(){uC(this)},l.Rb=function(e){fie(this,e)},l.oj=function(){var e;try{return e=this.d.Xb(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=rs(n),_t(n,73)?(this.mj(),nt(new vc)):nt(n)}},l.pj=function(e){dse(this,e)},l.Sb=function(){return this.e!=0},l.Tb=function(){return this.e},l.Ub=function(){return this.oj()},l.Vb=function(){return this.e-1},l.Wb=function(e){this.pj(e)},N(qa,"AbstractEList/EListIterator",278),D(341,40,da,L6),l.nj=function(){return ist(this)},l.Qb=function(){throw nt(new Pr)},N(qa,"AbstractEList/NonResolvingEIterator",341),D(385,278,Jd,PM,ovt),l.Rb=function(e){throw nt(new Pr)},l.nj=function(){var e;try{return e=this.c.ki(this.e),this.mj(),this.g=this.e++,e}catch(n){throw n=rs(n),_t(n,73)?(this.mj(),nt(new vc)):nt(n)}},l.oj=function(){var e;try{return e=this.c.ki(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=rs(n),_t(n,73)?(this.mj(),nt(new vc)):nt(n)}},l.Qb=function(){throw nt(new Pr)},l.Wb=function(e){throw nt(new Pr)},N(qa,"AbstractEList/NonResolvingEListIterator",385),D(1982,67,s0e),l.Vh=function(e,n){var r,s,o,h,d,w,k,_,M,B,q;if(o=n.gc(),o!=0){for(_=u(Mn(this.a,4),126),M=_==null?0:_.length,q=M+o,s=Cit(this,q),B=M-e,B>0&&Pc(_,e,s,e+o,B),k=n.Kc(),d=0;dr)throw nt(new jm(e,r));return new oXt(this,e)},l.$b=function(){var e,n;++this.j,e=u(Mn(this.a,4),126),n=e==null?0:e.length,a7(this,null),jrt(this,n,e)},l.Hc=function(e){var n,r,s,o,h;if(n=u(Mn(this.a,4),126),n!=null){if(e!=null){for(s=n,o=0,h=s.length;o=r)throw nt(new jm(e,r));return n[e]},l.Xc=function(e){var n,r,s;if(n=u(Mn(this.a,4),126),n!=null){if(e!=null){for(r=0,s=n.length;rr)throw nt(new jm(e,r));return new aXt(this,e)},l.ii=function(e,n){var r,s,o;if(r=yie(this),o=r==null?0:r.length,e>=o)throw nt(new Co(Yct+e+L2+o));if(n>=o)throw nt(new Co(Xct+n+L2+o));return s=r[n],e!=n&&(e0&&Pc(e,0,n,0,r),n},l.Qc=function(e){var n,r,s;return n=u(Mn(this.a,4),126),s=n==null?0:n.length,s>0&&(e.lengths&&ls(e,s,null),e};var B4e;N(qa,"ArrayDelegatingEList",1982),D(1038,40,da,bJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(Mn(this.b.a,4),126))!==Gt(this.a))throw nt(new sh)},l.Qb=function(){uC(this),this.a=u(Mn(this.b.a,4),126)},N(qa,"ArrayDelegatingEList/EIterator",1038),D(706,278,Jd,MYt,aXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(Mn(this.b.a,4),126))!==Gt(this.a))throw nt(new sh)},l.pj=function(e){dse(this,e),this.a=u(Mn(this.b.a,4),126)},l.Qb=function(){uC(this),this.a=u(Mn(this.b.a,4),126)},N(qa,"ArrayDelegatingEList/EListIterator",706),D(1039,341,da,vJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(Mn(this.b.a,4),126))!==Gt(this.a))throw nt(new sh)},N(qa,"ArrayDelegatingEList/NonResolvingEIterator",1039),D(707,385,Jd,DYt,oXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(Mn(this.b.a,4),126))!==Gt(this.a))throw nt(new sh)},N(qa,"ArrayDelegatingEList/NonResolvingEListIterator",707),D(606,295,oot,Wet),N(qa,"BasicEList/BasicIndexOutOfBoundsException",606),D(696,63,Sd,Ubt),l.Vc=function(e,n){throw nt(new Pr)},l.Fc=function(e){throw nt(new Pr)},l.Wc=function(e,n){throw nt(new Pr)},l.Gc=function(e){throw nt(new Pr)},l.$b=function(){throw nt(new Pr)},l.qi=function(e){throw nt(new Pr)},l.Kc=function(){return this.Zh()},l.Yc=function(){return this.$h()},l.Zc=function(e){return this._h(e)},l.ii=function(e,n){throw nt(new Pr)},l.ji=function(e,n){throw nt(new Pr)},l.$c=function(e){throw nt(new Pr)},l.Mc=function(e){throw nt(new Pr)},l._c=function(e,n){throw nt(new Pr)},N(qa,"BasicEList/UnmodifiableEList",696),D(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),l.Vc=function(e,n){CXe(this,e,u(n,42))},l.Fc=function(e){return fQe(this,u(e,42))},l.Jc=function(e){_a(this,e)},l.Xb=function(e){return u(At(this.c,e),133)},l.ii=function(e,n){return u(this.c.ii(e,n),42)},l.ji=function(e,n){SXe(this,e,u(n,42))},l.Lc=function(){return new kn(null,new Tn(this,16))},l.$c=function(e){return u(this.c.$c(e),42)},l._c=function(e,n){return yen(this,e,u(n,42))},l.ad=function(e){n4(this,e)},l.Nc=function(){return new Tn(this,16)},l.Oc=function(){return new kn(null,new Tn(this,16))},l.Wc=function(e,n){return this.c.Wc(e,n)},l.Gc=function(e){return this.c.Gc(e)},l.$b=function(){this.c.$b()},l.Hc=function(e){return this.c.Hc(e)},l.Ic=function(e){return DD(this.c,e)},l.qj=function(){var e,n,r;if(this.d==null){for(this.d=Nt($At,A8t,63,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)e=u(n.nj(),133),qz(this,e);this.e=r}},l.Fb=function(e){return nKt(this,e)},l.Hb=function(){return fyt(this.c)},l.Xc=function(e){return this.c.Xc(e)},l.rj=function(){this.c=new kzt(this)},l.dc=function(){return this.f==0},l.Kc=function(){return this.c.Kc()},l.Yc=function(){return this.c.Yc()},l.Zc=function(e){return this.c.Zc(e)},l.sj=function(){return fD(this)},l.tj=function(e,n,r){return new mKt(e,n,r)},l.uj=function(){return new yp},l.Mc=function(e){return Pee(this,e)},l.gc=function(){return this.f},l.bd=function(e,n){return new Kd(this.c,e,n)},l.Pc=function(){return this.c.Pc()},l.Qc=function(e){return this.c.Qc(e)},l.Ib=function(){return i3t(this.c)},l.e=0,l.f=0,N(qa,"BasicEMap",705),D(1033,63,Sd,kzt),l.bi=function(e,n){uKe(this,u(n,133))},l.ei=function(e,n,r){var s;++(s=this,u(n,133),s).a.e},l.fi=function(e,n){lKe(this,u(n,133))},l.gi=function(e,n,r){JXe(this,u(n,133),u(r,133))},l.di=function(e,n){_ne(this.a)},N(qa,"BasicEMap/1",1033),D(1034,63,Sd,yp),l.ri=function(e){return Nt(x6n,a0e,612,e,0,1)},N(qa,"BasicEMap/2",1034),D(1035,B1,Uu,Ezt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return Yit(this.a,e)},l.Kc=function(){return this.a.f==0?(l8(),lN.a):new iHt(this.a)},l.Mc=function(e){var n;return n=this.a.f,Dz(this.a,e),this.a.f!=n},l.gc=function(){return this.a.f},N(qa,"BasicEMap/3",1035),D(1036,28,wy,Tzt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return uue(this.a,e)},l.Kc=function(){return this.a.f==0?(l8(),lN.a):new sHt(this.a)},l.gc=function(){return this.a.f},N(qa,"BasicEMap/4",1036),D(1037,B1,Uu,_zt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){var n,r,s,o,h,d,w,k,_;if(this.a.f>0&&_t(e,42)&&(this.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Ji(w),h=W2t(this.a,o),n=this.a.d[h],n)){for(r=u(n.g,367),_=n.i,d=0;d<_;++d)if(s=r[d],s.Sh()==o&&s.Fb(k))return!0}return!1},l.Kc=function(){return this.a.f==0?(l8(),lN.a):new art(this.a)},l.Mc=function(e){return ece(this,e)},l.gc=function(){return this.a.f},N(qa,"BasicEMap/5",1037),D(613,1,da,art),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return this.b!=-1},l.Pb=function(){var e;if(this.f.e!=this.c)throw nt(new sh);if(this.b==-1)throw nt(new vc);return this.d=this.a,this.e=this.b,Hse(this),e=u(this.f.d[this.d].g[this.e],133),this.vj(e)},l.Qb=function(){if(this.f.e!=this.c)throw nt(new sh);if(this.e==-1)throw nt(new Ru);this.f.c.Mc(At(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&this.b!=-1&&--this.b},l.vj=function(e){return e},l.a=0,l.b=-1,l.c=0,l.d=0,l.e=0,N(qa,"BasicEMap/BasicEMapIterator",613),D(1031,613,da,iHt),l.vj=function(e){return e.cd()},N(qa,"BasicEMap/BasicEMapKeyIterator",1031),D(1032,613,da,sHt),l.vj=function(e){return e.dd()},N(qa,"BasicEMap/BasicEMapValueIterator",1032),D(1030,1,bw,Czt),l.wc=function(e){U_(this,e)},l.yc=function(e,n,r){return qit(this,e,n,r)},l.$b=function(){this.a.c.$b()},l._b=function(e){return RGt(this,e)},l.uc=function(e){return uue(this.a,e)},l.vc=function(){return qsn(this.a)},l.Fb=function(e){return nKt(this.a,e)},l.xc=function(e){return Jf(this.a,e)},l.Hb=function(){return fyt(this.a.c)},l.dc=function(){return this.a.f==0},l.ec=function(){return Hsn(this.a)},l.zc=function(e,n){return Yz(this.a,e,n)},l.Bc=function(e){return Dz(this.a,e)},l.gc=function(){return this.a.f},l.Ib=function(){return i3t(this.a.c)},l.Cc=function(){return zsn(this.a)},N(qa,"BasicEMap/DelegatingMap",1030),D(612,1,{42:1,133:1,612:1},mKt),l.Fb=function(e){var n;return _t(e,42)?(n=u(e,42),(this.b!=null?Si(this.b,n.cd()):Gt(this.b)===Gt(n.cd()))&&(this.c!=null?Si(this.c,n.dd()):Gt(this.c)===Gt(n.dd()))):!1},l.Sh=function(){return this.a},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return this.a^(this.c==null?0:Ji(this.c))},l.Th=function(e){this.a=e},l.Uh=function(e){throw nt(new Wb)},l.ed=function(e){var n;return n=this.c,this.c=e,n},l.Ib=function(){return this.b+"->"+this.c},l.a=0;var x6n=N(qa,"BasicEMap/EntryImpl",612);D(536,1,{},kk),N(qa,"BasicEMap/View",536);var lN;D(768,1,{}),l.Fb=function(e){return f5t((pn(),uo),e)},l.Hb=function(){return Tyt((pn(),uo))},l.Ib=function(){return Jp((pn(),uo))},N(qa,"ECollections/BasicEmptyUnmodifiableEList",768),D(1312,1,Jd,QF),l.Nb=function(e){Ea(this,e)},l.Rb=function(e){throw nt(new Pr)},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Pb=function(){throw nt(new vc)},l.Tb=function(){return 0},l.Ub=function(){throw nt(new vc)},l.Vb=function(){return-1},l.Qb=function(){throw nt(new Pr)},l.Wb=function(e){throw nt(new Pr)},N(qa,"ECollections/BasicEmptyUnmodifiableEList/1",1312),D(1310,768,{20:1,14:1,15:1,58:1},pqt),l.Vc=function(e,n){CHt()},l.Fc=function(e){return SHt()},l.Wc=function(e,n){return AHt()},l.Gc=function(e){return LHt()},l.$b=function(){MHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){_a(this,e)},l.Xb=function(e){return Ybt((pn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return DHt()},l.ji=function(e,n){IHt()},l.Lc=function(){return new kn(null,new Tn(this,16))},l.$c=function(e){return OHt()},l.Mc=function(e){return NHt()},l._c=function(e,n){return PHt()},l.gc=function(){return 0},l.ad=function(e){n4(this,e)},l.Nc=function(){return new Tn(this,16)},l.Oc=function(){return new kn(null,new Tn(this,16))},l.bd=function(e,n){return pn(),new Kd(uo,e,n)},l.Pc=function(){return Yvt((pn(),uo))},l.Qc=function(e){return pn(),XD(uo,e)},N(qa,"ECollections/EmptyUnmodifiableEList",1310),D(1311,768,{20:1,14:1,15:1,58:1,589:1},bqt),l.Vc=function(e,n){CHt()},l.Fc=function(e){return SHt()},l.Wc=function(e,n){return AHt()},l.Gc=function(e){return LHt()},l.$b=function(){MHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){_a(this,e)},l.Xb=function(e){return Ybt((pn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return DHt()},l.ji=function(e,n){IHt()},l.Lc=function(){return new kn(null,new Tn(this,16))},l.$c=function(e){return OHt()},l.Mc=function(e){return NHt()},l._c=function(e,n){return PHt()},l.gc=function(){return 0},l.ad=function(e){n4(this,e)},l.Nc=function(){return new Tn(this,16)},l.Oc=function(){return new kn(null,new Tn(this,16))},l.bd=function(e,n){return pn(),new Kd(uo,e,n)},l.Pc=function(){return Yvt((pn(),uo))},l.Qc=function(e){return pn(),XD(uo,e)},l.sj=function(){return pn(),pn(),a0},N(qa,"ECollections/EmptyUnmodifiableEMap",1311);var qAt=as(qa,"Enumerator"),nU;D(281,1,{281:1},rat),l.Fb=function(e){var n;return this===e?!0:_t(e,281)?(n=u(e,281),this.f==n.f&&ztn(this.i,n.i)&&Mnt(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&Mnt(this.d,n.d)&&Mnt(this.g,n.g)&&Mnt(this.e,n.e)&&Phn(this,n)):!1},l.Hb=function(){return this.f},l.Ib=function(){return $ue(this)},l.f=0;var R4e=0,j4e=0,$4e=0,z4e=0,HAt=0,VAt=0,GAt=0,UAt=0,WAt=0,q4e,iA=0,sA=0,H4e=0,V4e=0,rU,KAt;N(qa,"URI",281),D(1091,43,S4,vqt),l.zc=function(e,n){return u(Ao(this,jr(e),u(n,281)),281)},N(qa,"URI/URICache",1091),D(497,63,Sd,Ek,Nj),l.hi=function(){return!0},N(qa,"UniqueEList",497),D(581,60,U0,F$),N(qa,"WrappedException",581);var ei=as(vh,u0e),Qy=as(vh,l0e),Nu=as(vh,h0e),Zy=as(vh,f0e),c1=as(vh,d0e),Kh=as(vh,"EClass"),Sft=as(vh,"EDataType"),G4e;D(1183,43,S4,wqt),l.xc=function(e){return ha(e)?jc(this,e):cc(Fo(this.f,e))},N(vh,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var iU=as(vh,"EEnum"),eg=as(vh,g0e),wo=as(vh,p0e),Yh=as(vh,b0e),Xh,zw=as(vh,v0e),Jy=as(vh,w0e);D(1029,1,{},WZ),l.Ib=function(){return"NIL"},N(vh,"EStructuralFeature/Internal/DynamicValueHolder/1",1029);var U4e;D(1028,43,S4,mqt),l.xc=function(e){return ha(e)?jc(this,e):cc(Fo(this.f,e))},N(vh,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var pu=as(vh,m0e),Vx=as(vh,"EValidator/PatternMatcher"),YAt,XAt,An,rp,t3,Sb,W4e,K4e,Y4e,Ab,ip,Lb,qw,K1,X4e,Q4e,Qh,sp,Z4e,ap,e3,u5,Ja,J4e,t5e,Hw,sU=as(Yi,"FeatureMap/Entry");D(535,1,{72:1},JR),l.ak=function(){return this.a},l.dd=function(){return this.b},N(Ln,"BasicEObjectImpl/1",535),D(1027,1,nut,DGt),l.Wj=function(e){return Brt(this.a,this.b,e)},l.fj=function(){return hQt(this.a,this.b)},l.Wb=function(e){Dwt(this.a,this.b,e)},l.Xj=function(){Ben(this.a,this.b)},N(Ln,"BasicEObjectImpl/4",1027),D(1983,1,{108:1}),l.bk=function(e){this.e=e==0?e5e:Nt(Qn,Me,1,e,5,1)},l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.ck=function(){return this.c},l.dk=function(){throw nt(new Pr)},l.ek=function(){throw nt(new Pr)},l.fk=function(){return this.d},l.gk=function(){return this.e!=null},l.hk=function(e){this.c=e},l.ik=function(e){throw nt(new Pr)},l.jk=function(e){throw nt(new Pr)},l.kk=function(e){this.d=e};var e5e;N(Ln,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),D(185,1983,{108:1},ih),l.dk=function(){return this.a},l.ek=function(){return this.b},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},N(Ln,"BasicEObjectImpl/EPropertiesHolderImpl",185),D(506,97,yde,Tk),l.Kg=function(){return this.f},l.Pg=function(){return this.k},l.Rg=function(e,n){this.g=e,this.i=n},l.Tg=function(){return this.j&2?this.ph().ck():this.zh()},l.Vg=function(){return this.i},l.Mg=function(){return(this.j&1)!=0},l.eh=function(){return this.g},l.kh=function(){return(this.j&4)!=0},l.ph=function(){return!this.k&&(this.k=new ih),this.k},l.th=function(e){this.ph().hk(e),e?this.j|=2:this.j&=-3},l.vh=function(e){this.ph().jk(e),e?this.j|=4:this.j&=-5},l.zh=function(){return(zp(),An).S},l.i=0,l.j=1,N(Ln,"EObjectImpl",506),D(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},Dvt),l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.Tg=function(){return this.d},l.Yg=function(e){return es(this.d,e)},l.$g=function(){return this.d},l.dh=function(){return this.e!=null},l.ph=function(){return!this.k&&(this.k=new ZF),this.k},l.th=function(e){this.d=e},l.yh=function(){var e;return this.e==null&&(e=Jn(this.d),this.e=e==0?n5e:Nt(Qn,Me,1,e,5,1)),this},l.Ah=function(){return 0};var n5e;N(Ln,"DynamicEObjectImpl",780),D(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},UKt),l.Fb=function(e){return this===e},l.Hb=function(){return Dv(this)},l.th=function(e){this.d=e,this.b=gI(e,"key"),this.c=gI(e,YC)},l.Sh=function(){var e;return this.a==-1&&(e=Yrt(this,this.b),this.a=e==null?0:Ji(e)),this.a},l.cd=function(){return Yrt(this,this.b)},l.dd=function(){return Yrt(this,this.c)},l.Th=function(e){this.a=e},l.Uh=function(e){Dwt(this,this.b,e)},l.ed=function(e){var n;return n=Yrt(this,this.c),Dwt(this,this.c,e),n},l.a=0,N(Ln,"DynamicEObjectImpl/BasicEMapEntry",1376),D(1377,1,{108:1},ZF),l.bk=function(e){throw nt(new Pr)},l.Ch=function(e){throw nt(new Pr)},l.Dh=function(e,n){throw nt(new Pr)},l.Eh=function(e){throw nt(new Pr)},l.ck=function(){throw nt(new Pr)},l.dk=function(){return this.a},l.ek=function(){return this.b},l.fk=function(){return this.c},l.gk=function(){throw nt(new Pr)},l.hk=function(e){throw nt(new Pr)},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},l.kk=function(e){this.c=e},N(Ln,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),D(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},JF),l.Qg=function(e){return X3t(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new Al((ln(),Ja),pc,this)),this.b):(!this.b&&(this.b=new Al((ln(),Ja),pc,this)),fD(this.b));case 3:return bQt(this);case 4:return!this.a&&(this.a=new Bs(Tb,this,4)),this.a;case 5:return!this.c&&(this.c=new W3(Tb,this,5)),this.c}return hh(this,e-Jn((ln(),rp)),wn((s=u(Mn(this,16),26),s||rp),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?X3t(this,r):this.Cb.ih(this,-1-o,null,r))),Wvt(this,u(e,147),r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),rp)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),rp)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 2:return!this.b&&(this.b=new Al((ln(),Ja),pc,this)),kj(this.b,e,r);case 3:return Wvt(this,null,r);case 4:return!this.a&&(this.a=new Bs(Tb,this,4)),za(this.a,e,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),rp)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),rp)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!bQt(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return uh(this,e-Jn((ln(),rp)),wn((n=u(Mn(this,16),26),n||rp),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:Ctn(this,jr(n));return;case 2:!this.b&&(this.b=new Al((ln(),Ja),pc,this)),lz(this.b,n);return;case 3:Mce(this,u(n,147));return;case 4:!this.a&&(this.a=new Bs(Tb,this,4)),Tr(this.a),!this.a&&(this.a=new Bs(Tb,this,4)),gs(this.a,u(n,14));return;case 5:!this.c&&(this.c=new W3(Tb,this,5)),Tr(this.c),!this.c&&(this.c=new W3(Tb,this,5)),gs(this.c,u(n,14));return}bh(this,e-Jn((ln(),rp)),wn((r=u(Mn(this,16),26),r||rp),e),n)},l.zh=function(){return ln(),rp},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:Qmt(this,null);return;case 2:!this.b&&(this.b=new Al((ln(),Ja),pc,this)),this.b.c.$b();return;case 3:Mce(this,null);return;case 4:!this.a&&(this.a=new Bs(Tb,this,4)),Tr(this.a);return;case 5:!this.c&&(this.c=new W3(Tb,this,5)),Tr(this.c);return}gh(this,e-Jn((ln(),rp)),wn((n=u(Mn(this,16),26),n||rp),e))},l.Ib=function(){return Gre(this)},l.d=null,N(Ln,"EAnnotationImpl",510),D(151,705,L8t,Il),l.Xh=function(e,n){cXe(this,e,u(n,42))},l.lk=function(e,n){return nZe(this,u(e,42),n)},l.pi=function(e){return u(u(this.c,69).pi(e),133)},l.Zh=function(){return u(this.c,69).Zh()},l.$h=function(){return u(this.c,69).$h()},l._h=function(e){return u(this.c,69)._h(e)},l.mk=function(e,n){return kj(this,e,n)},l.Wj=function(e){return u(this.c,76).Wj(e)},l.rj=function(){},l.fj=function(){return u(this.c,76).fj()},l.tj=function(e,n,r){var s;return s=u(zl(this.b).Nh().Jh(this.b),133),s.Th(e),s.Uh(n),s.ed(r),s},l.uj=function(){return new bpt(this)},l.Wb=function(e){lz(this,e)},l.Xj=function(){u(this.c,76).Xj()},N(Yi,"EcoreEMap",151),D(158,151,L8t,Al),l.qj=function(){var e,n,r,s,o,h;if(this.d==null){for(h=Nt($At,A8t,63,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=u(r.nj(),133),s=n.Sh(),o=(s&Ti)%h.length,e=h[o],!e&&(e=h[o]=new bpt(this)),e.Fc(n);this.d=h}},N(Ln,"EAnnotationImpl/1",158),D(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q}return hh(this,e-Jn(this.zh()),wn((s=u(Mn(this,16),26),s||this.zh()),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 9:return Wnt(this,r)}return o=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,uu(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0)}return uh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:this.Lh(jr(n));return;case 2:Rg(this,Be(Fe(n)));return;case 3:jg(this,Be(Fe(n)));return;case 4:Pg(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:g2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return}bh(this,e-Jn(this.zh()),wn((r=u(Mn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return ln(),t5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:this.Lh(null);return;case 2:Rg(this,!0);return;case 3:jg(this,!0);return;case 4:Pg(this,0);return;case 5:this.ok(1);return;case 8:g2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return}gh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.Gh=function(){Oh(this),this.Bb|=1},l.Yj=function(){return Oh(this)},l.Zj=function(){return this.t},l.$j=function(){var e;return e=this.t,e>1||e==-1},l.hi=function(){return(this.Bb&512)!=0},l.nk=function(e,n){return Gyt(this,e,n)},l.ok=function(e){ty(this,e)},l.Ib=function(){return n5t(this)},l.s=0,l.t=1,N(Ln,"ETypedElementImpl",284),D(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),l.Qg=function(e){return Sse(this,e)},l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&xf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return v7(this);case 15:return Fn(),!!(this.Bb&Ku);case 16:return Fn(),!!(this.Bb&vd);case 17:return Gm(this)}return hh(this,e-Jn(this.zh()),wn((s=u(Mn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Sse(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,17,r)}return h=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,uu(this),n-Jn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 9:return Wnt(this,r);case 17:return Ul(this,null,17,r)}return o=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,uu(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return v7(this)!=null;case 15:return(this.Bb&Ku)!=0;case 16:return(this.Bb&vd)!=0;case 17:return!!Gm(this)}return uh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:xrt(this,jr(n));return;case 2:Rg(this,Be(Fe(n)));return;case 3:jg(this,Be(Fe(n)));return;case 4:Pg(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:g2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:t7(this,Be(Fe(n)));return;case 11:r7(this,Be(Fe(n)));return;case 12:e7(this,Be(Fe(n)));return;case 13:Wbt(this,jr(n));return;case 15:n7(this,Be(Fe(n)));return;case 16:i7(this,Be(Fe(n)));return}bh(this,e-Jn(this.zh()),wn((r=u(Mn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return ln(),J4e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,88)&&hy(hl(u(this.Cb,88)),4),tu(this,null);return;case 2:Rg(this,!0);return;case 3:jg(this,!0);return;case 4:Pg(this,0);return;case 5:this.ok(1);return;case 8:g2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:t7(this,!0);return;case 11:r7(this,!1);return;case 12:e7(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:n7(this,!1);return;case 16:i7(this,!1);return}gh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.Gh=function(){y8(Mo((Gu(),Sa),this)),Oh(this),this.Bb|=1},l.Gj=function(){return this.f},l.zj=function(){return v7(this)},l.Hj=function(){return Gm(this)},l.Lj=function(){return null},l.pk=function(){return this.k},l.aj=function(){return this.n},l.Mj=function(){return Qz(this)},l.Nj=function(){var e,n,r,s,o,h,d,w,k;return this.p||(r=Gm(this),(r.i==null&&bd(r),r.i).length,s=this.Lj(),s&&Jn(Gm(s)),o=Oh(this),d=o.Bj(),e=d?d.i&1?d==xl?Ws:d==Sr?Ha:d==r3?K7:d==ga?wa:d==Db?Tw:d==d5?_w:d==Xu?kx:aS:d:null,n=v7(this),w=o.zj(),aln(this),this.Bb&vd&&((h=r4t((Gu(),Sa),r))&&h!=this||(h=z6(Mo(Sa,this))))?this.p=new OGt(this,h):this.$j()?this.rk()?s?this.Bb&Ku?e?this.sk()?this.p=new t2(47,e,this,s):this.p=new t2(5,e,this,s):this.sk()?this.p=new r2(46,this,s):this.p=new r2(4,this,s):e?this.sk()?this.p=new t2(49,e,this,s):this.p=new t2(7,e,this,s):this.sk()?this.p=new r2(48,this,s):this.p=new r2(6,this,s):this.Bb&Ku?e?e==I2?this.p=new Lg(50,P4e,this):this.sk()?this.p=new Lg(43,e,this):this.p=new Lg(1,e,this):this.sk()?this.p=new Dg(42,this):this.p=new Dg(0,this):e?e==I2?this.p=new Lg(41,P4e,this):this.sk()?this.p=new Lg(45,e,this):this.p=new Lg(3,e,this):this.sk()?this.p=new Dg(44,this):this.p=new Dg(2,this):_t(o,148)?e==sU?this.p=new Dg(40,this):this.Bb&512?this.Bb&Ku?e?this.p=new Lg(9,e,this):this.p=new Dg(8,this):e?this.p=new Lg(11,e,this):this.p=new Dg(10,this):this.Bb&Ku?e?this.p=new Lg(13,e,this):this.p=new Dg(12,this):e?this.p=new Lg(15,e,this):this.p=new Dg(14,this):s?(k=s.t,k>1||k==-1?this.sk()?this.Bb&Ku?e?this.p=new t2(25,e,this,s):this.p=new r2(24,this,s):e?this.p=new t2(27,e,this,s):this.p=new r2(26,this,s):this.Bb&Ku?e?this.p=new t2(29,e,this,s):this.p=new r2(28,this,s):e?this.p=new t2(31,e,this,s):this.p=new r2(30,this,s):this.sk()?this.Bb&Ku?e?this.p=new t2(33,e,this,s):this.p=new r2(32,this,s):e?this.p=new t2(35,e,this,s):this.p=new r2(34,this,s):this.Bb&Ku?e?this.p=new t2(37,e,this,s):this.p=new r2(36,this,s):e?this.p=new t2(39,e,this,s):this.p=new r2(38,this,s)):this.sk()?this.Bb&Ku?e?this.p=new Lg(17,e,this):this.p=new Dg(16,this):e?this.p=new Lg(19,e,this):this.p=new Dg(18,this):this.Bb&Ku?e?this.p=new Lg(21,e,this):this.p=new Dg(20,this):e?this.p=new Lg(23,e,this):this.p=new Dg(22,this):this.qk()?this.sk()?this.p=new yKt(u(o,26),this,s):this.p=new Mwt(u(o,26),this,s):_t(o,148)?e==sU?this.p=new Dg(40,this):this.Bb&Ku?e?this.p=new wYt(n,w,this,(Kit(),d==Sr?rLt:d==xl?ZAt:d==Db?iLt:d==r3?nLt:d==ga?eLt:d==d5?sLt:d==Xu?JAt:d==Eh?tLt:Mft)):this.p=new MXt(u(o,148),n,w,this):e?this.p=new vYt(n,w,this,(Kit(),d==Sr?rLt:d==xl?ZAt:d==Db?iLt:d==r3?nLt:d==ga?eLt:d==d5?sLt:d==Xu?JAt:d==Eh?tLt:Mft)):this.p=new LXt(u(o,148),n,w,this):this.rk()?s?this.Bb&Ku?this.sk()?this.p=new kKt(u(o,26),this,s):this.p=new xvt(u(o,26),this,s):this.sk()?this.p=new xKt(u(o,26),this,s):this.p=new Ent(u(o,26),this,s):this.Bb&Ku?this.sk()?this.p=new vWt(u(o,26),this):this.p=new P2t(u(o,26),this):this.sk()?this.p=new bWt(u(o,26),this):this.p=new unt(u(o,26),this):this.sk()?s?this.Bb&Ku?this.p=new EKt(u(o,26),this,s):this.p=new mvt(u(o,26),this,s):this.Bb&Ku?this.p=new wWt(u(o,26),this):this.p=new F2t(u(o,26),this):s?this.Bb&Ku?this.p=new TKt(u(o,26),this,s):this.p=new yvt(u(o,26),this,s):this.Bb&Ku?this.p=new mWt(u(o,26),this):this.p=new Pj(u(o,26),this)),this.p},l.Ij=function(){return(this.Bb&xf)!=0},l.qk=function(){return!1},l.rk=function(){return!1},l.Jj=function(){return(this.Bb&vd)!=0},l.Oj=function(){return Qrt(this)},l.sk=function(){return!1},l.Kj=function(){return(this.Bb&Ku)!=0},l.tk=function(e){this.k=e},l.Lh=function(e){xrt(this,e)},l.Ib=function(){return pq(this)},l.e=!1,l.n=0,N(Ln,"EStructuralFeatureImpl",449),D(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Ktt),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!Z4t(this);case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&xf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return v7(this);case 15:return Fn(),!!(this.Bb&Ku);case 16:return Fn(),!!(this.Bb&vd);case 17:return Gm(this);case 18:return Fn(),!!(this.Bb&yc);case 19:return n?pit(this):MJt(this)}return hh(this,e-Jn((ln(),t3)),wn((s=u(Mn(this,16),26),s||t3),e),n,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return Z4t(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return v7(this)!=null;case 15:return(this.Bb&Ku)!=0;case 16:return(this.Bb&vd)!=0;case 17:return!!Gm(this);case 18:return(this.Bb&yc)!=0;case 19:return!!MJt(this)}return uh(this,e-Jn((ln(),t3)),wn((n=u(Mn(this,16),26),n||t3),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:xrt(this,jr(n));return;case 2:Rg(this,Be(Fe(n)));return;case 3:jg(this,Be(Fe(n)));return;case 4:Pg(this,u(n,19).a);return;case 5:cHt(this,u(n,19).a);return;case 8:g2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:t7(this,Be(Fe(n)));return;case 11:r7(this,Be(Fe(n)));return;case 12:e7(this,Be(Fe(n)));return;case 13:Wbt(this,jr(n));return;case 15:n7(this,Be(Fe(n)));return;case 16:i7(this,Be(Fe(n)));return;case 18:$it(this,Be(Fe(n)));return}bh(this,e-Jn((ln(),t3)),wn((r=u(Mn(this,16),26),r||t3),e),n)},l.zh=function(){return ln(),t3},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,88)&&hy(hl(u(this.Cb,88)),4),tu(this,null);return;case 2:Rg(this,!0);return;case 3:jg(this,!0);return;case 4:Pg(this,0);return;case 5:this.b=0,ty(this,1);return;case 8:g2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:t7(this,!0);return;case 11:r7(this,!1);return;case 12:e7(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:n7(this,!1);return;case 16:i7(this,!1);return;case 18:$it(this,!1);return}gh(this,e-Jn((ln(),t3)),wn((n=u(Mn(this,16),26),n||t3),e))},l.Gh=function(){pit(this),y8(Mo((Gu(),Sa),this)),Oh(this),this.Bb|=1},l.$j=function(){return Z4t(this)},l.nk=function(e,n){return this.b=0,this.a=null,Gyt(this,e,n)},l.ok=function(e){cHt(this,e)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Ah(pq(this)),e.a+=" (iD: ",Cg(e,(this.Bb&yc)!=0),e.a+=")",e.a)},l.b=0,N(Ln,"EAttributeImpl",322),D(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),l.uk=function(e){return e.Tg()==this},l.Qg=function(e){return yst(this,e)},l.Rg=function(e,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=e},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return this.zj();case 5:return this.F;case 6:return n?zl(this):E8(this);case 7:return!this.A&&(this.A=new $u(pu,this,7)),this.A}return hh(this,e-Jn(this.zh()),wn((s=u(Mn(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?yst(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,6,r)}return h=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,uu(this),n-Jn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 6:return Ul(this,null,6,r);case 7:return!this.A&&(this.A=new $u(pu,this,7)),za(this.A,e,r)}return o=u(wn((s=u(Mn(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,uu(this),n-Jn(this.zh()),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!E8(this);case 7:return!!this.A&&this.A.i!=0}return uh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:p$(this,jr(n));return;case 2:Xet(this,jr(n));return;case 5:E7(this,jr(n));return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A),!this.A&&(this.A=new $u(pu,this,7)),gs(this.A,u(n,14));return}bh(this,e-Jn(this.zh()),wn((r=u(Mn(this,16),26),r||this.zh()),e),n)},l.zh=function(){return ln(),W4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),tu(this,null);return;case 2:X8(this,null),R8(this,this.D);return;case 5:E7(this,null);return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A);return}gh(this,e-Jn(this.zh()),wn((n=u(Mn(this,16),26),n||this.zh()),e))},l.yj=function(){var e;return this.G==-1&&(this.G=(e=zl(this),e?$g(e.Mh(),this):-1)),this.G},l.zj=function(){return null},l.Aj=function(){return zl(this)},l.vk=function(){return this.v},l.Bj=function(){return cw(this)},l.Cj=function(){return this.D!=null?this.D:this.B},l.Dj=function(){return this.F},l.wj=function(e){return fat(this,e)},l.wk=function(e){this.v=e},l.xk=function(e){ane(this,e)},l.yk=function(e){this.C=e},l.Lh=function(e){p$(this,e)},l.Ib=function(){return Sz(this)},l.C=null,l.D=null,l.G=-1,N(Ln,"EClassifierImpl",351),D(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},XL),l.uk=function(e){return qQe(this,e.Tg())},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return null;case 5:return this.F;case 6:return n?zl(this):E8(this);case 7:return!this.A&&(this.A=new $u(pu,this,7)),this.A;case 8:return Fn(),!!(this.Bb&256);case 9:return Fn(),!!(this.Bb&512);case 10:return Po(this);case 11:return!this.q&&(this.q=new he(Yh,this,11,10)),this.q;case 12:return E4(this);case 13:return kC(this);case 14:return kC(this),this.r;case 15:return E4(this),this.k;case 16:return q4t(this);case 17:return vat(this);case 18:return bd(this);case 19:return cq(this);case 20:return E4(this),this.o;case 21:return!this.s&&(this.s=new he(Nu,this,21,17)),this.s;case 22:return Oc(this);case 23:return nat(this)}return hh(this,e-Jn((ln(),Sb)),wn((s=u(Mn(this,16),26),s||Sb),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?yst(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,6,r);case 11:return!this.q&&(this.q=new he(Yh,this,11,10)),eu(this.q,e,r);case 21:return!this.s&&(this.s=new he(Nu,this,21,17)),eu(this.s,e,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),Sb)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),Sb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 6:return Ul(this,null,6,r);case 7:return!this.A&&(this.A=new $u(pu,this,7)),za(this.A,e,r);case 11:return!this.q&&(this.q=new he(Yh,this,11,10)),za(this.q,e,r);case 21:return!this.s&&(this.s=new he(Nu,this,21,17)),za(this.s,e,r);case 22:return za(Oc(this),e,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),Sb)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),Sb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!E8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&Oc(this.u.a).i!=0&&!(this.n&&ust(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return E4(this).i!=0;case 13:return kC(this).i!=0;case 14:return kC(this),this.r.i!=0;case 15:return E4(this),this.k.i!=0;case 16:return q4t(this).i!=0;case 17:return vat(this).i!=0;case 18:return bd(this).i!=0;case 19:return cq(this).i!=0;case 20:return E4(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&ust(this.n);case 23:return nat(this).i!=0}return uh(this,e-Jn((ln(),Sb)),wn((n=u(Mn(this,16),26),n||Sb),e))},l.oh=function(e){var n;return n=this.i==null||this.q&&this.q.i!=0?null:gI(this,e),n||m6t(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:p$(this,jr(n));return;case 2:Xet(this,jr(n));return;case 5:E7(this,jr(n));return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A),!this.A&&(this.A=new $u(pu,this,7)),gs(this.A,u(n,14));return;case 8:Wyt(this,Be(Fe(n)));return;case 9:Kyt(this,Be(Fe(n)));return;case 10:_C(Po(this)),gs(Po(this),u(n,14));return;case 11:!this.q&&(this.q=new he(Yh,this,11,10)),Tr(this.q),!this.q&&(this.q=new he(Yh,this,11,10)),gs(this.q,u(n,14));return;case 21:!this.s&&(this.s=new he(Nu,this,21,17)),Tr(this.s),!this.s&&(this.s=new he(Nu,this,21,17)),gs(this.s,u(n,14));return;case 22:Tr(Oc(this)),gs(Oc(this),u(n,14));return}bh(this,e-Jn((ln(),Sb)),wn((r=u(Mn(this,16),26),r||Sb),e),n)},l.zh=function(){return ln(),Sb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),tu(this,null);return;case 2:X8(this,null),R8(this,this.D);return;case 5:E7(this,null);return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A);return;case 8:Wyt(this,!1);return;case 9:Kyt(this,!1);return;case 10:this.u&&_C(this.u);return;case 11:!this.q&&(this.q=new he(Yh,this,11,10)),Tr(this.q);return;case 21:!this.s&&(this.s=new he(Nu,this,21,17)),Tr(this.s);return;case 22:this.n&&Tr(this.n);return}gh(this,e-Jn((ln(),Sb)),wn((n=u(Mn(this,16),26),n||Sb),e))},l.Gh=function(){var e,n;if(E4(this),kC(this),q4t(this),vat(this),bd(this),cq(this),nat(this),R_(stn(hl(this))),this.s)for(e=0,n=this.s.i;e=0;--n)At(this,n);return b3t(this,e)},l.Xj=function(){Tr(this)},l.oi=function(e,n){return Lee(this,e,n)},N(Yi,"EcoreEList",622),D(496,622,Ko,WM),l.ai=function(){return!1},l.aj=function(){return this.c},l.bj=function(){return!1},l.Fk=function(){return!0},l.hi=function(){return!0},l.li=function(e,n){return n},l.ni=function(){return!1},l.c=0,N(Yi,"EObjectEList",496),D(85,496,Ko,Bs),l.bj=function(){return!0},l.Dk=function(){return!1},l.rk=function(){return!0},N(Yi,"EObjectContainmentEList",85),D(545,85,Ko,hj),l.ci=function(){this.b=!0},l.fj=function(){return this.b},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.b,this.b=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.b=!1},l.b=!1,N(Yi,"EObjectContainmentEList/Unsettable",545),D(1140,545,Ko,pYt),l.ii=function(e,n){var r,s;return r=u(tC(this,e,n),87),Sl(this.e)&&Uk(this,new gD(this.a,7,(ln(),K4e),de(n),(s=r.c,_t(s,88)?u(s,26):Qh),e)),r},l.jj=function(e,n){return Wln(this,u(e,87),n)},l.kj=function(e,n){return Uln(this,u(e,87),n)},l.lj=function(e,n,r){return K1n(this,u(e,87),u(n,87),r)},l.Zi=function(e,n,r,s,o){switch(e){case 3:return I_(this,e,n,r,s,this.i>1);case 5:return I_(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return ust(this)},l.Xj=function(){Tr(this)},N(Ln,"EClassImpl/1",1140),D(1154,1153,S8t),l.ui=function(e){var n,r,s,o,h,d,w;if(r=e.xi(),r!=8){if(s=Mhn(e),s==0)switch(r){case 1:case 9:{w=e.Bi(),w!=null&&(n=hl(u(w,473)),!n.c&&(n.c=new xm),j$(n.c,e.Ai())),d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=hl(o),!n.c&&(n.c=new xm),Or(n.c,u(e.Ai(),26))));break}case 3:{d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=hl(o),!n.c&&(n.c=new xm),Or(n.c,u(e.Ai(),26))));break}case 5:{if(d=e.zi(),d!=null)for(h=u(d,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=hl(o),!n.c&&(n.c=new xm),Or(n.c,u(e.Ai(),26)));break}case 4:{w=e.Bi(),w!=null&&(o=u(w,473),o.Bb&1||(n=hl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai())));break}case 6:{if(w=e.Bi(),w!=null)for(h=u(w,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=hl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai()));break}}this.Hk(s)}},l.Hk=function(e){gue(this,e)},l.b=63,N(Ln,"ESuperAdapter",1154),D(1155,1154,S8t,Szt),l.Hk=function(e){hy(this,e)},N(Ln,"EClassImpl/10",1155),D(1144,696,Ko),l.Vh=function(e,n){return Dst(this,e,n)},l.Wh=function(e){return lse(this,e)},l.Xh=function(e,n){zD(this,e,n)},l.Yh=function(e){uD(this,e)},l.pi=function(e){return _mt(this,e)},l.mi=function(e,n){return Xrt(this,e,n)},l.lk=function(e,n){throw nt(new Pr)},l.Zh=function(){return new L6(this)},l.$h=function(){return new PM(this)},l._h=function(e){return CD(this,e)},l.mk=function(e,n){throw nt(new Pr)},l.Wj=function(e){return this},l.fj=function(){return this.i!=0},l.Wb=function(e){throw nt(new Pr)},l.Xj=function(){throw nt(new Pr)},N(Yi,"EcoreEList/UnmodifiableEList",1144),D(319,1144,Ko,H3),l.ni=function(){return!1},N(Yi,"EcoreEList/UnmodifiableEList/FastCompare",319),D(1147,319,Ko,Zne),l.Xc=function(e){var n,r,s;if(_t(e,170)&&(n=u(e,170),r=n.aj(),r!=-1)){for(s=this.i;r4)if(this.wj(e)){if(this.rk()){if(s=u(e,49),r=s.Ug(),w=r==this.b&&(this.Dk()?s.Og(s.Vg(),u(wn(ku(this.b),this.aj()).Yj(),26).Bj())==oo(u(wn(ku(this.b),this.aj()),18)).n:-1-s.Vg()==this.aj()),this.Ek()&&!w&&!r&&s.Zg()){for(o=0;o1||s==-1)):!1},l.Dk=function(){var e,n,r;return n=wn(ku(this.b),this.aj()),_t(n,99)?(e=u(n,18),r=oo(e),!!r):!1},l.Ek=function(){var e,n;return n=wn(ku(this.b),this.aj()),_t(n,99)?(e=u(n,18),(e.Bb&Qa)!=0):!1},l.Xc=function(e){var n,r,s,o;if(s=this.Qi(e),s>=0)return s;if(this.Fk()){for(r=0,o=this.Vi();r=0;--e)EI(this,e,this.Oi(e));return this.Wi()},l.Qc=function(e){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)EI(this,n,this.Oi(n));return this.Xi(e)},l.Xj=function(){_C(this)},l.oi=function(e,n){return dte(this,e,n)},N(Yi,"DelegatingEcoreEList",742),D(1150,742,D8t,MWt),l.Hi=function(e,n){bQe(this,e,u(n,26))},l.Ii=function(e){lXe(this,u(e,26))},l.Oi=function(e){var n,r;return n=u(At(Oc(this.a),e),87),r=n.c,_t(r,88)?u(r,26):(ln(),Qh)},l.Ti=function(e){var n,r;return n=u(dy(Oc(this.a),e),87),r=n.c,_t(r,88)?u(r,26):(ln(),Qh)},l.Ui=function(e,n){return vfn(this,e,u(n,26))},l.ai=function(){return!1},l.Zi=function(e,n,r,s,o){return null},l.Ji=function(){return new Lzt(this)},l.Ki=function(){Tr(Oc(this.a))},l.Li=function(e){return Hre(this,e)},l.Mi=function(e){var n,r;for(r=e.Kc();r.Ob();)if(n=r.Pb(),!Hre(this,n))return!1;return!0},l.Ni=function(e){var n,r,s;if(_t(e,15)&&(s=u(e,15),s.gc()==Oc(this.a).i)){for(n=s.Kc(),r=new nr(this);n.Ob();)if(Gt(n.Pb())!==Gt(dr(r)))return!1;return!0}return!1},l.Pi=function(){var e,n,r,s,o;for(r=1,n=new nr(Oc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),s=(o=e.c,_t(o,88)?u(o,26):(ln(),Qh)),r=31*r+(s?Dv(s):0);return r},l.Qi=function(e){var n,r,s,o;for(s=0,r=new nr(Oc(this.a));r.e!=r.i.gc();){if(n=u(dr(r),87),Gt(e)===Gt((o=n.c,_t(o,88)?u(o,26):(ln(),Qh))))return s;++s}return-1},l.Ri=function(){return Oc(this.a).i==0},l.Si=function(){return null},l.Vi=function(){return Oc(this.a).i},l.Wi=function(){var e,n,r,s,o,h;for(h=Oc(this.a).i,o=Nt(Qn,Me,1,h,5,1),r=0,n=new nr(Oc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),o[r++]=(s=e.c,_t(s,88)?u(s,26):(ln(),Qh));return o},l.Xi=function(e){var n,r,s,o,h,d,w;for(w=Oc(this.a).i,e.lengthw&&ls(e,w,null),s=0,r=new nr(Oc(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,_t(d,88)?u(d,26):(ln(),Qh)),ls(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new _g,o.a+="[",e=Oc(this.a),n=0,s=Oc(this.a).i;n>16,o>=0?yst(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,6,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),eu(this.a,e,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),Ab)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),Ab)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 6:return Ul(this,null,6,r);case 7:return!this.A&&(this.A=new $u(pu,this,7)),za(this.A,e,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),za(this.a,e,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),Ab)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),Ab)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!!Oyt(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!E8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return uh(this,e-Jn((ln(),Ab)),wn((n=u(Mn(this,16),26),n||Ab),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:p$(this,jr(n));return;case 2:Xet(this,jr(n));return;case 5:E7(this,jr(n));return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A),!this.A&&(this.A=new $u(pu,this,7)),gs(this.A,u(n,14));return;case 8:xz(this,Be(Fe(n)));return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),Tr(this.a),!this.a&&(this.a=new he(eg,this,9,5)),gs(this.a,u(n,14));return}bh(this,e-Jn((ln(),Ab)),wn((r=u(Mn(this,16),26),r||Ab),e),n)},l.zh=function(){return ln(),Ab},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,179)&&(u(this.Cb,179).tb=null),tu(this,null);return;case 2:X8(this,null),R8(this,this.D);return;case 5:E7(this,null);return;case 7:!this.A&&(this.A=new $u(pu,this,7)),Tr(this.A);return;case 8:xz(this,!0);return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),Tr(this.a);return}gh(this,e-Jn((ln(),Ab)),wn((n=u(Mn(this,16),26),n||Ab),e))},l.Gh=function(){var e,n;if(this.a)for(e=0,n=this.a.i;e>16==5?u(this.Cb,671):null}return hh(this,e-Jn((ln(),ip)),wn((s=u(Mn(this,16),26),s||ip),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?Pse(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,5,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),ip)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),ip)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 5:return Ul(this,null,5,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),ip)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),ip)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&u(this.Cb,671))}return uh(this,e-Jn((ln(),ip)),wn((n=u(Mn(this,16),26),n||ip),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:tu(this,jr(n));return;case 2:nit(this,u(n,19).a);return;case 3:Moe(this,u(n,1940));return;case 4:iit(this,jr(n));return}bh(this,e-Jn((ln(),ip)),wn((r=u(Mn(this,16),26),r||ip),e),n)},l.zh=function(){return ln(),ip},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:tu(this,null);return;case 2:nit(this,0);return;case 3:Moe(this,null);return;case 4:iit(this,null);return}gh(this,e-Jn((ln(),ip)),wn((n=u(Mn(this,16),26),n||ip),e))},l.Ib=function(){var e;return e=this.c,e??this.zb},l.b=null,l.c=null,l.d=0,N(Ln,"EEnumLiteralImpl",573);var k6n=as(Ln,"EFactoryImpl/InternalEDateTimeFormat");D(489,1,{2015:1},oM),N(Ln,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),D(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},wv),l.Sg=function(e,n,r){var s;return r=Ul(this,e,n,r),this.e&&_t(e,170)&&(s=oq(this,this.e),s!=this.c&&(r=T7(this,s,r))),r},l._g=function(e,n,r){var s;switch(e){case 0:return this.f;case 1:return!this.d&&(this.d=new Bs(wo,this,1)),this.d;case 2:return n?wq(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?fst(this):this.a}return hh(this,e-Jn((ln(),qw)),wn((s=u(Mn(this,16),26),s||qw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return Ore(this,null,r);case 1:return!this.d&&(this.d=new Bs(wo,this,1)),za(this.d,e,r);case 3:return Ire(this,null,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),qw)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),qw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return uh(this,e-Jn((ln(),qw)),wn((n=u(Mn(this,16),26),n||qw),e))},l.sh=function(e,n){var r;switch(e){case 0:Jse(this,u(n,87));return;case 1:!this.d&&(this.d=new Bs(wo,this,1)),Tr(this.d),!this.d&&(this.d=new Bs(wo,this,1)),gs(this.d,u(n,14));return;case 3:f4t(this,u(n,87));return;case 4:L4t(this,u(n,836));return;case 5:O8(this,u(n,138));return}bh(this,e-Jn((ln(),qw)),wn((r=u(Mn(this,16),26),r||qw),e),n)},l.zh=function(){return ln(),qw},l.Bh=function(e){var n;switch(e){case 0:Jse(this,null);return;case 1:!this.d&&(this.d=new Bs(wo,this,1)),Tr(this.d);return;case 3:f4t(this,null);return;case 4:L4t(this,null);return;case 5:O8(this,null);return}gh(this,e-Jn((ln(),qw)),wn((n=u(Mn(this,16),26),n||qw),e))},l.Ib=function(){var e;return e=new Fl(mf(this)),e.a+=" (expression: ",xat(this,e),e.a+=")",e.a};var QAt;N(Ln,"EGenericTypeImpl",241),D(1969,1964,_H),l.Xh=function(e,n){SWt(this,e,n)},l.lk=function(e,n){return SWt(this,this.gc(),e),n},l.pi=function(e){return e1(this.Gi(),e)},l.Zh=function(){return this.$h()},l.Gi=function(){return new Ozt(this)},l.$h=function(){return this._h(0)},l._h=function(e){return this.Gi().Zc(e)},l.mk=function(e,n){return ry(this,e,!0),n},l.ii=function(e,n){var r,s;return s=kst(this,n),r=this.Zc(e),r.Rb(s),s},l.ji=function(e,n){var r;ry(this,n,!0),r=this.Zc(e),r.Rb(n)},N(Yi,"AbstractSequentialInternalEList",1969),D(486,1969,_H,NM),l.pi=function(e){return e1(this.Gi(),e)},l.Zh=function(){return this.b==null?(Sg(),Sg(),hN):this.Jk()},l.Gi=function(){return new ZGt(this.a,this.b)},l.$h=function(){return this.b==null?(Sg(),Sg(),hN):this.Jk()},l._h=function(e){var n,r;if(this.b==null){if(e<0||e>1)throw nt(new Co(XC+e+", size=0"));return Sg(),Sg(),hN}for(r=this.Jk(),n=0;n0;)if(n=this.c[--this.d],(!this.e||n.Gj()!=LE||n.aj()!=0)&&(!this.Mk()||this.b.mh(n))){if(h=this.b.bh(n,this.Lk()),this.f=(so(),u(n,66).Oj()),this.f||n.$j()){if(this.Lk()?(s=u(h,15),this.k=s):(s=u(h,69),this.k=this.j=s),_t(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?Gae(this,this.p):roe(this))return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(h!=null)return this.k=null,this.p=null,r=h,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},l.Pb=function(){return hz(this)},l.Tb=function(){return this.a},l.Ub=function(){var e;if(this.g<-1||this.Sb())return--this.a,this.g=0,e=this.i,this.Sb(),e;throw nt(new vc)},l.Vb=function(){return this.a-1},l.Qb=function(){throw nt(new Pr)},l.Lk=function(){return!1},l.Wb=function(e){throw nt(new Pr)},l.Mk=function(){return!0},l.a=0,l.d=0,l.f=!1,l.g=0,l.n=0,l.o=0;var hN;N(Yi,"EContentsEList/FeatureIteratorImpl",279),D(697,279,CH,N2t),l.Lk=function(){return!0},N(Yi,"EContentsEList/ResolvingFeatureIteratorImpl",697),D(1157,697,CH,pWt),l.Mk=function(){return!1},N(Ln,"ENamedElementImpl/1/1",1157),D(1158,279,CH,gWt),l.Mk=function(){return!1},N(Ln,"ENamedElementImpl/1/2",1158),D(36,143,QI,Km,Lrt,oa,Vrt,F0,bf,Rmt,HQt,jmt,VQt,umt,GQt,qmt,UQt,lmt,WQt,$mt,KQt,__,gD,ort,zmt,YQt,hmt,XQt),l._i=function(){return kmt(this)},l.gj=function(){var e;return e=kmt(this),e?e.zj():null},l.yi=function(e){return this.b==-1&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,e)},l.Ai=function(){return this.c},l.hj=function(){var e;return e=kmt(this),e?e.Kj():!1},l.b=-1,N(Ln,"ENotificationImpl",36),D(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},Ytt),l.Qg=function(e){return Rse(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,26):null;case 11:return!this.d&&(this.d=new $u(pu,this,11)),this.d;case 12:return!this.c&&(this.c=new he(zw,this,12,10)),this.c;case 13:return!this.a&&(this.a=new $M(this,this)),this.a;case 14:return fl(this)}return hh(this,e-Jn((ln(),sp)),wn((s=u(Mn(this,16),26),s||sp),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?Rse(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,10,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),eu(this.c,e,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),sp)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),sp)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 9:return Wnt(this,r);case 10:return Ul(this,null,10,r);case 11:return!this.d&&(this.d=new $u(pu,this,11)),za(this.d,e,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),za(this.c,e,r);case 14:return za(fl(this),e,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),sp)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),sp)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,26));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&fl(this.a.a).i!=0&&!(this.b&&lst(this.b));case 14:return!!this.b&&lst(this.b)}return uh(this,e-Jn((ln(),sp)),wn((n=u(Mn(this,16),26),n||sp),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:tu(this,jr(n));return;case 2:Rg(this,Be(Fe(n)));return;case 3:jg(this,Be(Fe(n)));return;case 4:Pg(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:g2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 11:!this.d&&(this.d=new $u(pu,this,11)),Tr(this.d),!this.d&&(this.d=new $u(pu,this,11)),gs(this.d,u(n,14));return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),Tr(this.c),!this.c&&(this.c=new he(zw,this,12,10)),gs(this.c,u(n,14));return;case 13:!this.a&&(this.a=new $M(this,this)),_C(this.a),!this.a&&(this.a=new $M(this,this)),gs(this.a,u(n,14));return;case 14:Tr(fl(this)),gs(fl(this),u(n,14));return}bh(this,e-Jn((ln(),sp)),wn((r=u(Mn(this,16),26),r||sp),e),n)},l.zh=function(){return ln(),sp},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:tu(this,null);return;case 2:Rg(this,!0);return;case 3:jg(this,!0);return;case 4:Pg(this,0);return;case 5:ty(this,1);return;case 8:g2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 11:!this.d&&(this.d=new $u(pu,this,11)),Tr(this.d);return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),Tr(this.c);return;case 13:this.a&&_C(this.a);return;case 14:this.b&&Tr(this.b);return}gh(this,e-Jn((ln(),sp)),wn((n=u(Mn(this,16),26),n||sp),e))},l.Gh=function(){var e,n;if(this.c)for(e=0,n=this.c.i;ew&&ls(e,w,null),s=0,r=new nr(fl(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,d||(ln(),K1)),ls(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new _g,o.a+="[",e=fl(this.a),n=0,s=fl(this.a).i;n1);case 5:return I_(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return lst(this)},l.Xj=function(){Tr(this)},N(Ln,"EOperationImpl/2",1341),D(498,1,{1938:1,498:1},IGt),N(Ln,"EPackageImpl/1",498),D(16,85,Ko,he),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.Dk=function(){return!0},l.b=0,N(Yi,"EObjectContainmentWithInverseEList",16),D(353,16,Ko,M6),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectContainmentWithInverseEList/Resolving",353),D(298,353,Ko,qm),l.ci=function(){this.a.tb=null},N(Ln,"EPackageImpl/2",298),D(1228,1,{},tB),N(Ln,"EPackageImpl/3",1228),D(718,43,S4,Fpt),l._b=function(e){return ha(e)?crt(this,e):!!Fo(this.f,e)},N(Ln,"EPackageRegistryImpl",718),D(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Xtt),l.Qg=function(e){return jse(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,59):null}return hh(this,e-Jn((ln(),e3)),wn((s=u(Mn(this,16),26),s||e3),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),eu(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?jse(this,r):this.Cb.ih(this,-1-o,null,r))),Ul(this,e,10,r)}return h=u(wn((s=u(Mn(this,16),26),s||(ln(),e3)),n),66),h.Nj().Qj(this,uu(this),n-Jn((ln(),e3)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 9:return Wnt(this,r);case 10:return Ul(this,null,10,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),e3)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),e3)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,59))}return uh(this,e-Jn((ln(),e3)),wn((n=u(Mn(this,16),26),n||e3),e))},l.zh=function(){return ln(),e3},N(Ln,"EParameterImpl",509),D(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},j2t),l._g=function(e,n,r){var s,o,h,d;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),d=this.t,d>1||d==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Oh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&xf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return v7(this);case 15:return Fn(),!!(this.Bb&Ku);case 16:return Fn(),!!(this.Bb&vd);case 17:return Gm(this);case 18:return Fn(),!!(this.Bb&yc);case 19:return Fn(),h=oo(this),!!(h&&h.Bb&yc);case 20:return Fn(),!!(this.Bb&Qa);case 21:return n?oo(this):this.b;case 22:return n?kyt(this):wJt(this);case 23:return!this.a&&(this.a=new W3(Zy,this,23)),this.a}return hh(this,e-Jn((ln(),u5)),wn((s=u(Mn(this,16),26),s||u5),e),n,r)},l.lh=function(e){var n,r,s,o;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&xf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return v7(this)!=null;case 15:return(this.Bb&Ku)!=0;case 16:return(this.Bb&vd)!=0;case 17:return!!Gm(this);case 18:return(this.Bb&yc)!=0;case 19:return s=oo(this),!!s&&(s.Bb&yc)!=0;case 20:return(this.Bb&Qa)==0;case 21:return!!this.b;case 22:return!!wJt(this);case 23:return!!this.a&&this.a.i!=0}return uh(this,e-Jn((ln(),u5)),wn((n=u(Mn(this,16),26),n||u5),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:xrt(this,jr(n));return;case 2:Rg(this,Be(Fe(n)));return;case 3:jg(this,Be(Fe(n)));return;case 4:Pg(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:g2(this,u(n,138));return;case 9:s=F1(this,u(n,87),null),s&&s.Fi();return;case 10:t7(this,Be(Fe(n)));return;case 11:r7(this,Be(Fe(n)));return;case 12:e7(this,Be(Fe(n)));return;case 13:Wbt(this,jr(n));return;case 15:n7(this,Be(Fe(n)));return;case 16:i7(this,Be(Fe(n)));return;case 18:krn(this,Be(Fe(n)));return;case 20:Jyt(this,Be(Fe(n)));return;case 21:Zmt(this,u(n,18));return;case 23:!this.a&&(this.a=new W3(Zy,this,23)),Tr(this.a),!this.a&&(this.a=new W3(Zy,this,23)),gs(this.a,u(n,14));return}bh(this,e-Jn((ln(),u5)),wn((r=u(Mn(this,16),26),r||u5),e),n)},l.zh=function(){return ln(),u5},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:_t(this.Cb,88)&&hy(hl(u(this.Cb,88)),4),tu(this,null);return;case 2:Rg(this,!0);return;case 3:jg(this,!0);return;case 4:Pg(this,0);return;case 5:ty(this,1);return;case 8:g2(this,null);return;case 9:r=F1(this,null,null),r&&r.Fi();return;case 10:t7(this,!0);return;case 11:r7(this,!1);return;case 12:e7(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:n7(this,!1);return;case 16:i7(this,!1);return;case 18:Zyt(this,!1),_t(this.Cb,88)&&hy(hl(u(this.Cb,88)),2);return;case 20:Jyt(this,!0);return;case 21:Zmt(this,null);return;case 23:!this.a&&(this.a=new W3(Zy,this,23)),Tr(this.a);return}gh(this,e-Jn((ln(),u5)),wn((n=u(Mn(this,16),26),n||u5),e))},l.Gh=function(){kyt(this),y8(Mo((Gu(),Sa),this)),Oh(this),this.Bb|=1},l.Lj=function(){return oo(this)},l.qk=function(){var e;return e=oo(this),!!e&&(e.Bb&yc)!=0},l.rk=function(){return(this.Bb&yc)!=0},l.sk=function(){return(this.Bb&Qa)!=0},l.nk=function(e,n){return this.c=null,Gyt(this,e,n)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Ah(pq(this)),e.a+=" (containment: ",Cg(e,(this.Bb&yc)!=0),e.a+=", resolveProxies: ",Cg(e,(this.Bb&Qa)!=0),e.a+=")",e.a)},N(Ln,"EReferenceImpl",99),D(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},YZ),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return Dv(this)},l.Uh=function(e){Stn(this,jr(e))},l.ed=function(e){return ptn(this,jr(e))},l._g=function(e,n,r){var s;switch(e){case 0:return this.b;case 1:return this.c}return hh(this,e-Jn((ln(),Ja)),wn((s=u(Mn(this,16),26),s||Ja),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return this.b!=null;case 1:return this.c!=null}return uh(this,e-Jn((ln(),Ja)),wn((n=u(Mn(this,16),26),n||Ja),e))},l.sh=function(e,n){var r;switch(e){case 0:Atn(this,jr(n));return;case 1:Ymt(this,jr(n));return}bh(this,e-Jn((ln(),Ja)),wn((r=u(Mn(this,16),26),r||Ja),e),n)},l.zh=function(){return ln(),Ja},l.Bh=function(e){var n;switch(e){case 0:Kmt(this,null);return;case 1:Ymt(this,null);return}gh(this,e-Jn((ln(),Ja)),wn((n=u(Mn(this,16),26),n||Ja),e))},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e==null?0:zg(e)),this.a},l.Th=function(e){this.a=e},l.Ib=function(){var e;return this.Db&64?mf(this):(e=new Ah(mf(this)),e.a+=" (key: ",yo(e,this.b),e.a+=", value: ",yo(e,this.c),e.a+=")",e.a)},l.a=-1,l.b=null,l.c=null;var pc=N(Ln,"EStringToStringMapEntryImpl",548),i5e=as(Yi,"FeatureMap/Entry/Internal");D(565,1,SH),l.Ok=function(e){return this.Pk(u(e,49))},l.Pk=function(e){return this.Ok(e)},l.Fb=function(e){var n,r;return this===e?!0:_t(e,72)?(n=u(e,72),n.ak()==this.c?(r=this.dd(),r==null?n.dd()==null:Si(r,n.dd())):!1):!1},l.ak=function(){return this.c},l.Hb=function(){var e;return e=this.dd(),Ji(this.c)^(e==null?0:Ji(e))},l.Ib=function(){var e,n;return e=this.c,n=zl(e.Hj()).Ph(),e.ne(),(n!=null&&n.length!=0?n+":"+e.ne():e.ne())+"="+this.dd()},N(Ln,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),D(776,565,SH,K2t),l.Pk=function(e){return new K2t(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return Von(this,e,this.a,n,r)},l.Rk=function(e,n,r){return Gon(this,e,this.a,n,r)},N(Ln,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),D(1314,1,{},OGt),l.Pj=function(e,n,r,s,o){var h;return h=u(L8(e,this.b),215),h.nl(this.a).Wj(s)},l.Qj=function(e,n,r,s,o){var h;return h=u(L8(e,this.b),215),h.el(this.a,s,o)},l.Rj=function(e,n,r,s,o){var h;return h=u(L8(e,this.b),215),h.fl(this.a,s,o)},l.Sj=function(e,n,r){var s;return s=u(L8(e,this.b),215),s.nl(this.a).fj()},l.Tj=function(e,n,r,s){var o;o=u(L8(e,this.b),215),o.nl(this.a).Wb(s)},l.Uj=function(e,n,r){return u(L8(e,this.b),215).nl(this.a)},l.Vj=function(e,n,r){var s;s=u(L8(e,this.b),215),s.nl(this.a).Xj()},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),D(89,1,{},Lg,t2,Dg,r2),l.Pj=function(e,n,r,s,o){var h;if(h=n.Ch(r),h==null&&n.Dh(r,h=Aq(this,e)),!o)switch(this.e){case 50:case 41:return u(h,589).sj();case 40:return u(h,215).kl()}return h},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),d==null&&n.Dh(r,d=Aq(this,e)),h=u(d,69).lk(s,o),h},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),h!=null&&(o=u(h,69).mk(s,o)),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&u(s,76).fj()},l.Tj=function(e,n,r,s){var o;o=u(n.Ch(r),76),!o&&n.Dh(r,o=Aq(this,e)),o.Wb(s)},l.Uj=function(e,n,r){var s,o;return o=n.Ch(r),o==null&&n.Dh(r,o=Aq(this,e)),_t(o,76)?u(o,76):(s=u(n.Ch(r),15),new Izt(s))},l.Vj=function(e,n,r){var s;s=u(n.Ch(r),76),!s&&n.Dh(r,s=Aq(this,e)),s.Xj()},l.b=0,l.e=0,N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),D(504,1,{}),l.Qj=function(e,n,r,s,o){throw nt(new Pr)},l.Rj=function(e,n,r,s,o){throw nt(new Pr)},l.Uj=function(e,n,r){return new AXt(this,e,n,r)};var f0;N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),D(1331,1,nut,AXt),l.Wj=function(e){return this.a.Pj(this.c,this.d,this.b,e,!0)},l.fj=function(){return this.a.Sj(this.c,this.d,this.b)},l.Wb=function(e){this.a.Tj(this.c,this.d,this.b,e)},l.Xj=function(){this.a.Vj(this.c,this.d,this.b)},l.b=0,N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),D(769,504,{},Mwt),l.Pj=function(e,n,r,s,o){return cat(e,e.eh(),e.Vg())==this.b?this.sk()&&s?Ust(e):e.eh():null},l.Qj=function(e,n,r,s,o){var h,d;return e.eh()&&(o=(h=e.Vg(),h>=0?e.Qg(o):e.eh().ih(e,-1-h,null,o))),d=es(e.Tg(),this.e),e.Sg(s,d,o)},l.Rj=function(e,n,r,s,o){var h;return h=es(e.Tg(),this.e),e.Sg(null,h,o)},l.Sj=function(e,n,r){var s;return s=es(e.Tg(),this.e),!!e.eh()&&e.Vg()==s},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!fat(this.a,s))throw nt(new Kk(AH+(_t(s,56)?l4t(u(s,56).Tg()):Nmt(dl(s)))+LH+this.a+"'"));if(o=e.eh(),d=es(e.Tg(),this.e),Gt(s)!==Gt(o)||e.Vg()!=d&&s!=null){if(c7(e,u(s,56)))throw nt(new Pn(KC+e.Ib()));k=null,o&&(k=(h=e.Vg(),h>=0?e.Qg(k):e.eh().ih(e,-1-h,null,k))),w=u(s,49),w&&(k=w.gh(e,es(w.Tg(),this.b),null,k)),k=e.Sg(w,d,k),k&&k.Fi()}else e.Lg()&&e.Mg()&&Ci(e,new oa(e,1,d,s,s))},l.Vj=function(e,n,r){var s,o,h,d;s=e.eh(),s?(d=(o=e.Vg(),o>=0?e.Qg(null):e.eh().ih(e,-1-o,null,null)),h=es(e.Tg(),this.e),d=e.Sg(null,h,d),d&&d.Fi()):e.Lg()&&e.Mg()&&Ci(e,new __(e,1,this.e,null,null))},l.sk=function(){return!1},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),D(1315,769,{},yKt),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),D(563,504,{}),l.Pj=function(e,n,r,s,o){var h;return h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&(Gt(s)===Gt(f0)||!Si(s,this.b))},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=(h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h),s==null?this.c!=null?(n.Dh(r,null),s=this.b):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s)),Ci(e,this.d.Tk(e,1,this.e,o,s))):s==null?this.c!=null?n.Dh(r,null):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=(o=n.Ch(r),o==null?this.b:Gt(o)===Gt(f0)?null:o),n.Eh(r),Ci(e,this.d.Tk(e,1,this.e,s,this.b))):n.Eh(r)},l.Sk=function(e){throw nt(new qzt)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),D(B4,1,{},eB),l.Tk=function(e,n,r,s,o){return new __(e,n,r,s,o)},l.Uk=function(e,n,r,s,o,h){return new ort(e,n,r,s,o,h)};var ZAt,JAt,tLt,eLt,nLt,rLt,iLt,Mft,sLt;N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",B4),D(1332,B4,{},nB),l.Tk=function(e,n,r,s,o){return new hmt(e,n,r,Be(Fe(s)),Be(Fe(o)))},l.Uk=function(e,n,r,s,o,h){return new XQt(e,n,r,Be(Fe(s)),Be(Fe(o)),h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),D(1333,B4,{},rB),l.Tk=function(e,n,r,s,o){return new Rmt(e,n,r,u(s,217).a,u(o,217).a)},l.Uk=function(e,n,r,s,o,h){return new HQt(e,n,r,u(s,217).a,u(o,217).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),D(1334,B4,{},Ck),l.Tk=function(e,n,r,s,o){return new jmt(e,n,r,u(s,172).a,u(o,172).a)},l.Uk=function(e,n,r,s,o,h){return new VQt(e,n,r,u(s,172).a,u(o,172).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),D(1335,B4,{},iB),l.Tk=function(e,n,r,s,o){return new umt(e,n,r,Zt(ve(s)),Zt(ve(o)))},l.Uk=function(e,n,r,s,o,h){return new GQt(e,n,r,Zt(ve(s)),Zt(ve(o)),h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),D(1336,B4,{},sB),l.Tk=function(e,n,r,s,o){return new qmt(e,n,r,u(s,155).a,u(o,155).a)},l.Uk=function(e,n,r,s,o,h){return new UQt(e,n,r,u(s,155).a,u(o,155).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),D(1337,B4,{},XZ),l.Tk=function(e,n,r,s,o){return new lmt(e,n,r,u(s,19).a,u(o,19).a)},l.Uk=function(e,n,r,s,o,h){return new WQt(e,n,r,u(s,19).a,u(o,19).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),D(1338,B4,{},Sk),l.Tk=function(e,n,r,s,o){return new $mt(e,n,r,u(s,162).a,u(o,162).a)},l.Uk=function(e,n,r,s,o,h){return new KQt(e,n,r,u(s,162).a,u(o,162).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),D(1339,B4,{},Ak),l.Tk=function(e,n,r,s,o){return new zmt(e,n,r,u(s,184).a,u(o,184).a)},l.Uk=function(e,n,r,s,o,h){return new YQt(e,n,r,u(s,184).a,u(o,184).a,h)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),D(1317,563,{},LXt),l.Sk=function(e){if(!this.a.wj(e))throw nt(new Kk(AH+dl(e)+LH+this.a+"'"))},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),D(1318,563,{},vYt),l.Sk=function(e){},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),D(770,563,{}),l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=!0,h=n.Ch(r),h==null?(o=!1,h=this.b):Gt(h)===Gt(f0)&&(h=null),s==null?this.c!=null?(n.Dh(r,null),s=this.b):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s)),Ci(e,this.d.Uk(e,1,this.e,h,s,!o))):s==null?this.c!=null?n.Dh(r,null):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=!0,o=n.Ch(r),o==null?(s=!1,o=this.b):Gt(o)===Gt(f0)&&(o=null),n.Eh(r),Ci(e,this.d.Uk(e,2,this.e,o,this.b,s))):n.Eh(r)},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),D(1319,770,{},MXt),l.Sk=function(e){if(!this.a.wj(e))throw nt(new Kk(AH+dl(e)+LH+this.a+"'"))},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),D(1320,770,{},wYt),l.Sk=function(e){},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),D(398,504,{},Pj),l.Pj=function(e,n,r,s,o){var h,d,w,k,_;if(_=n.Ch(r),this.Kj()&&Gt(_)===Gt(f0))return null;if(this.sk()&&s&&_!=null){if(w=u(_,49),w.kh()&&(k=Xp(e,w),w!=k)){if(!fat(this.a,k))throw nt(new Kk(AH+dl(k)+LH+this.a+"'"));n.Dh(r,_=k),this.rk()&&(h=u(k,49),d=w.ih(e,this.b?es(w.Tg(),this.b):-1-es(e.Tg(),this.e),null,null),!h.eh()&&(d=h.gh(e,this.b?es(h.Tg(),this.b):-1-es(e.Tg(),this.e),null,d)),d&&d.Fi()),e.Lg()&&e.Mg()&&Ci(e,new __(e,9,this.e,w,k))}return _}else return _},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),Gt(d)===Gt(f0)&&(d=null),n.Dh(r,s),this.bj()?Gt(d)!==Gt(s)&&d!=null&&(h=u(d,49),o=h.ih(e,es(h.Tg(),this.b),null,o)):this.rk()&&d!=null&&(o=u(d,49).ih(e,-1-es(e.Tg(),this.e),null,o)),e.Lg()&&e.Mg()&&(!o&&(o=new Lp(4)),o.Ei(new __(e,1,this.e,d,s))),o},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),Gt(h)===Gt(f0)&&(h=null),n.Eh(r),e.Lg()&&e.Mg()&&(!o&&(o=new Lp(4)),this.Kj()?o.Ei(new __(e,2,this.e,h,null)):o.Ei(new __(e,1,this.e,h,null))),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!fat(this.a,s))throw nt(new Kk(AH+(_t(s,56)?l4t(u(s,56).Tg()):Nmt(dl(s)))+LH+this.a+"'"));k=n.Ch(r),w=k!=null,this.Kj()&&Gt(k)===Gt(f0)&&(k=null),d=null,this.bj()?Gt(k)!==Gt(s)&&(k!=null&&(o=u(k,49),d=o.ih(e,es(o.Tg(),this.b),null,d)),s!=null&&(o=u(s,49),d=o.gh(e,es(o.Tg(),this.b),null,d))):this.rk()&&Gt(k)!==Gt(s)&&(k!=null&&(d=u(k,49).ih(e,-1-es(e.Tg(),this.e),null,d)),s!=null&&(d=u(s,49).gh(e,-1-es(e.Tg(),this.e),null,d))),s==null&&this.Kj()?n.Dh(r,f0):n.Dh(r,s),e.Lg()&&e.Mg()?(h=new ort(e,1,this.e,k,s,this.Kj()&&!w),d?(d.Ei(h),d.Fi()):Ci(e,h)):d&&d.Fi()},l.Vj=function(e,n,r){var s,o,h,d,w;w=n.Ch(r),d=w!=null,this.Kj()&&Gt(w)===Gt(f0)&&(w=null),h=null,w!=null&&(this.bj()?(s=u(w,49),h=s.ih(e,es(s.Tg(),this.b),null,h)):this.rk()&&(h=u(w,49).ih(e,-1-es(e.Tg(),this.e),null,h))),n.Eh(r),e.Lg()&&e.Mg()?(o=new ort(e,this.Kj()?2:1,this.e,w,null,d),h?(h.Ei(o),h.Fi()):Ci(e,o)):h&&h.Fi()},l.bj=function(){return!1},l.rk=function(){return!1},l.sk=function(){return!1},l.Kj=function(){return!1},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),D(564,398,{},unt),l.rk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),D(1323,564,{},bWt),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),D(772,564,{},P2t),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),D(1325,772,{},vWt),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),D(640,564,{},Ent),l.bj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),D(1324,640,{},xKt),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),D(773,640,{},xvt),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),D(1326,773,{},kKt),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),D(641,398,{},F2t),l.sk=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),D(1327,641,{},wWt),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),D(774,641,{},mvt),l.bj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),D(1328,774,{},EKt),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),D(1321,398,{},mWt),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),D(771,398,{},yvt),l.bj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),D(1322,771,{},TKt),l.Kj=function(){return!0},N(Ln,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),D(775,565,SH,bwt),l.Pk=function(e){return new bwt(this.a,this.c,e)},l.dd=function(){return this.b},l.Qk=function(e,n,r){return Gsn(this,e,this.b,r)},l.Rk=function(e,n,r){return Usn(this,e,this.b,r)},N(Ln,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),D(1329,1,nut,Izt),l.Wj=function(e){return this.a},l.fj=function(){return _t(this.a,95)?u(this.a,95).fj():!this.a.dc()},l.Wb=function(e){this.a.$b(),this.a.Gc(u(e,15))},l.Xj=function(){_t(this.a,95)?u(this.a,95).Xj():this.a.$b()},N(Ln,"EStructuralFeatureImpl/SettingMany",1329),D(1330,565,SH,RZt),l.Ok=function(e){return new fnt(($i(),uA),this.b.Ih(this.a,e))},l.dd=function(){return null},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},N(Ln,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),D(642,565,SH,fnt),l.Ok=function(e){return new fnt(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},N(Ln,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),D(391,497,Sd,xm),l.ri=function(e){return Nt(Kh,Me,26,e,0,1)},l.ni=function(){return!1},N(Ln,"ESuperAdapter/1",391),D(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},RL),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new x_(this,wo,this)),this.a}return hh(this,e-Jn((ln(),Hw)),wn((s=u(Mn(this,16),26),s||Hw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(ei,this,0,3)),za(this.Ab,e,r);case 2:return!this.a&&(this.a=new x_(this,wo,this)),za(this.a,e,r)}return o=u(wn((s=u(Mn(this,16),26),s||(ln(),Hw)),n),66),o.Nj().Rj(this,uu(this),n-Jn((ln(),Hw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return uh(this,e-Jn((ln(),Hw)),wn((n=u(Mn(this,16),26),n||Hw),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab),!this.Ab&&(this.Ab=new he(ei,this,0,3)),gs(this.Ab,u(n,14));return;case 1:tu(this,jr(n));return;case 2:!this.a&&(this.a=new x_(this,wo,this)),Tr(this.a),!this.a&&(this.a=new x_(this,wo,this)),gs(this.a,u(n,14));return}bh(this,e-Jn((ln(),Hw)),wn((r=u(Mn(this,16),26),r||Hw),e),n)},l.zh=function(){return ln(),Hw},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(ei,this,0,3)),Tr(this.Ab);return;case 1:tu(this,null);return;case 2:!this.a&&(this.a=new x_(this,wo,this)),Tr(this.a);return}gh(this,e-Jn((ln(),Hw)),wn((n=u(Mn(this,16),26),n||Hw),e))},N(Ln,"ETypeParameterImpl",444),D(445,85,Ko,x_),l.cj=function(e,n){return Udn(this,u(e,87),n)},l.dj=function(e,n){return Wdn(this,u(e,87),n)},N(Ln,"ETypeParameterImpl/1",445),D(634,43,S4,Qtt),l.ec=function(){return new cR(this)},N(Ln,"ETypeParameterImpl/2",634),D(556,B1,Uu,cR),l.Fc=function(e){return GWt(this,u(e,87))},l.Gc=function(e){var n,r,s;for(s=!1,r=e.Kc();r.Ob();)n=u(r.Pb(),87),Ai(this.a,n,"")==null&&(s=!0);return s},l.$b=function(){nl(this.a)},l.Hc=function(e){return Ml(this.a,e)},l.Kc=function(){var e;return e=new d2(new kg(this.a).a),new uR(e)},l.Mc=function(e){return DJt(this,e)},l.gc=function(){return $T(this.a)},N(Ln,"ETypeParameterImpl/2/1",556),D(557,1,da,uR),l.Nb=function(e){Ea(this,e)},l.Pb=function(){return u(Yv(this.a).cd(),87)},l.Ob=function(){return this.a.b},l.Qb=function(){cte(this.a)},N(Ln,"ETypeParameterImpl/2/1/1",557),D(1276,43,S4,kqt),l._b=function(e){return ha(e)?crt(this,e):!!Fo(this.f,e)},l.xc=function(e){var n,r;return n=ha(e)?jc(this,e):cc(Fo(this.f,e)),_t(n,837)?(r=u(n,837),n=r._j(),Ai(this,u(e,235),n),n):n??(e==null?(pet(),a5e):null)},N(Ln,"EValidatorRegistryImpl",1276),D(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},QZ),l.Ih=function(e,n){switch(e.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:Wo(n);case 25:return ton(n);case 27:return van(n);case 28:return wan(n);case 29:return n==null?null:_Ut(rA[0],u(n,199));case 41:return n==null?"":Mp(u(n,290));case 42:return Wo(n);case 50:return jr(n);default:throw nt(new Pn(z7+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt;switch(e.G==-1&&(e.G=(q=zl(e),q?$g(q.Mh(),e):-1)),e.G){case 0:return r=new Ktt,r;case 1:return n=new JF,n;case 2:return s=new XL,s;case 4:return o=new lR,o;case 5:return h=new xqt,h;case 6:return d=new Gzt,d;case 7:return w=new qB,w;case 10:return _=new Tk,_;case 11:return M=new Ytt,M;case 12:return B=new WXt,B;case 13:return G=new Xtt,G;case 14:return W=new j2t,W;case 17:return Z=new YZ,Z;case 18:return k=new wv,k;case 19:return bt=new RL,bt;default:throw nt(new Pn($ct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 20:return n==null?null:new ibt(n);case 21:return n==null?null:new Fp(n);case 23:case 22:return n==null?null:shn(n);case 26:case 24:return n==null?null:ED(Gl(n,-128,127)<<24>>24);case 25:return bbn(n);case 27:return qfn(n);case 28:return Hfn(n);case 29:return h0n(n);case 32:case 31:return n==null?null:ly(n);case 38:case 37:return n==null?null:new Tpt(n);case 40:case 39:return n==null?null:de(Gl(n,Oa,Ti));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:b2(Sq(n));case 49:case 48:return n==null?null:J8(Gl(n,MH,32767)<<16>>16);case 50:return n;default:throw nt(new Pn(z7+e.ne()+kw))}},N(Ln,"EcoreFactoryImpl",1313),D(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},lXt),l.gb=!1,l.hb=!1;var aLt,s5e=!1;N(Ln,"EcorePackageImpl",547),D(1184,1,{837:1},ZZ),l._j=function(){return YUt(),o5e},N(Ln,"EcorePackageImpl/1",1184),D(1193,1,ci,JZ),l.wj=function(e){return _t(e,147)},l.xj=function(e){return Nt(oN,Me,147,e,0,1)},N(Ln,"EcorePackageImpl/10",1193),D(1194,1,ci,tJ),l.wj=function(e){return _t(e,191)},l.xj=function(e){return Nt(xft,Me,191,e,0,1)},N(Ln,"EcorePackageImpl/11",1194),D(1195,1,ci,eJ),l.wj=function(e){return _t(e,56)},l.xj=function(e){return Nt(Tb,Me,56,e,0,1)},N(Ln,"EcorePackageImpl/12",1195),D(1196,1,ci,nJ),l.wj=function(e){return _t(e,399)},l.xj=function(e){return Nt(Yh,M8t,59,e,0,1)},N(Ln,"EcorePackageImpl/13",1196),D(1197,1,ci,rJ),l.wj=function(e){return _t(e,235)},l.xj=function(e){return Nt(o1,Me,235,e,0,1)},N(Ln,"EcorePackageImpl/14",1197),D(1198,1,ci,iJ),l.wj=function(e){return _t(e,509)},l.xj=function(e){return Nt(zw,Me,2017,e,0,1)},N(Ln,"EcorePackageImpl/15",1198),D(1199,1,ci,aB),l.wj=function(e){return _t(e,99)},l.xj=function(e){return Nt(Jy,F4,18,e,0,1)},N(Ln,"EcorePackageImpl/16",1199),D(1200,1,ci,sJ),l.wj=function(e){return _t(e,170)},l.xj=function(e){return Nt(Nu,F4,170,e,0,1)},N(Ln,"EcorePackageImpl/17",1200),D(1201,1,ci,aJ),l.wj=function(e){return _t(e,472)},l.xj=function(e){return Nt(Qy,Me,472,e,0,1)},N(Ln,"EcorePackageImpl/18",1201),D(1202,1,ci,oJ),l.wj=function(e){return _t(e,548)},l.xj=function(e){return Nt(pc,a0e,548,e,0,1)},N(Ln,"EcorePackageImpl/19",1202),D(1185,1,ci,oB),l.wj=function(e){return _t(e,322)},l.xj=function(e){return Nt(Zy,F4,34,e,0,1)},N(Ln,"EcorePackageImpl/2",1185),D(1203,1,ci,Lk),l.wj=function(e){return _t(e,241)},l.xj=function(e){return Nt(wo,E0e,87,e,0,1)},N(Ln,"EcorePackageImpl/20",1203),D(1204,1,ci,Z9),l.wj=function(e){return _t(e,444)},l.xj=function(e){return Nt(pu,Me,836,e,0,1)},N(Ln,"EcorePackageImpl/21",1204),D(1205,1,ci,cB),l.wj=function(e){return Om(e)},l.xj=function(e){return Nt(Ws,re,476,e,8,1)},N(Ln,"EcorePackageImpl/22",1205),D(1206,1,ci,cJ),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Xu,re,190,e,0,2)},N(Ln,"EcorePackageImpl/23",1206),D(1207,1,ci,uB),l.wj=function(e){return _t(e,217)},l.xj=function(e){return Nt(kx,re,217,e,0,1)},N(Ln,"EcorePackageImpl/24",1207),D(1208,1,ci,lB),l.wj=function(e){return _t(e,172)},l.xj=function(e){return Nt(aS,re,172,e,0,1)},N(Ln,"EcorePackageImpl/25",1208),D(1209,1,ci,uJ),l.wj=function(e){return _t(e,199)},l.xj=function(e){return Nt(HH,re,199,e,0,1)},N(Ln,"EcorePackageImpl/26",1209),D(1210,1,ci,J9),l.wj=function(e){return!1},l.xj=function(e){return Nt(TLt,Me,2110,e,0,1)},N(Ln,"EcorePackageImpl/27",1210),D(1211,1,ci,km),l.wj=function(e){return Nm(e)},l.xj=function(e){return Nt(wa,re,333,e,7,1)},N(Ln,"EcorePackageImpl/28",1211),D(1212,1,ci,hB),l.wj=function(e){return _t(e,58)},l.xj=function(e){return Nt(jAt,xy,58,e,0,1)},N(Ln,"EcorePackageImpl/29",1212),D(1186,1,ci,fB),l.wj=function(e){return _t(e,510)},l.xj=function(e){return Nt(ei,{3:1,4:1,5:1,1934:1},590,e,0,1)},N(Ln,"EcorePackageImpl/3",1186),D(1213,1,ci,lJ),l.wj=function(e){return _t(e,573)},l.xj=function(e){return Nt(qAt,Me,1940,e,0,1)},N(Ln,"EcorePackageImpl/30",1213),D(1214,1,ci,hJ),l.wj=function(e){return _t(e,153)},l.xj=function(e){return Nt(hLt,xy,153,e,0,1)},N(Ln,"EcorePackageImpl/31",1214),D(1215,1,ci,tT),l.wj=function(e){return _t(e,72)},l.xj=function(e){return Nt(sU,I0e,72,e,0,1)},N(Ln,"EcorePackageImpl/32",1215),D(1216,1,ci,dB),l.wj=function(e){return _t(e,155)},l.xj=function(e){return Nt(K7,re,155,e,0,1)},N(Ln,"EcorePackageImpl/33",1216),D(1217,1,ci,gB),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(Ha,re,19,e,0,1)},N(Ln,"EcorePackageImpl/34",1217),D(1218,1,ci,bc),l.wj=function(e){return _t(e,290)},l.xj=function(e){return Nt(H8t,Me,290,e,0,1)},N(Ln,"EcorePackageImpl/35",1218),D(1219,1,ci,fJ),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Tw,re,162,e,0,1)},N(Ln,"EcorePackageImpl/36",1219),D(1220,1,ci,pB),l.wj=function(e){return _t(e,83)},l.xj=function(e){return Nt(V8t,Me,83,e,0,1)},N(Ln,"EcorePackageImpl/37",1220),D(1221,1,ci,eT),l.wj=function(e){return _t(e,591)},l.xj=function(e){return Nt(oLt,Me,591,e,0,1)},N(Ln,"EcorePackageImpl/38",1221),D(1222,1,ci,dJ),l.wj=function(e){return!1},l.xj=function(e){return Nt(_Lt,Me,2111,e,0,1)},N(Ln,"EcorePackageImpl/39",1222),D(1187,1,ci,gJ),l.wj=function(e){return _t(e,88)},l.xj=function(e){return Nt(Kh,Me,26,e,0,1)},N(Ln,"EcorePackageImpl/4",1187),D(1223,1,ci,nT),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(_w,re,184,e,0,1)},N(Ln,"EcorePackageImpl/40",1223),D(1224,1,ci,bB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ln,"EcorePackageImpl/41",1224),D(1225,1,ci,rT),l.wj=function(e){return _t(e,588)},l.xj=function(e){return Nt(zAt,Me,588,e,0,1)},N(Ln,"EcorePackageImpl/42",1225),D(1226,1,ci,iT),l.wj=function(e){return!1},l.xj=function(e){return Nt(CLt,re,2112,e,0,1)},N(Ln,"EcorePackageImpl/43",1226),D(1227,1,ci,qf),l.wj=function(e){return _t(e,42)},l.xj=function(e){return Nt(I2,Iq,42,e,0,1)},N(Ln,"EcorePackageImpl/44",1227),D(1188,1,ci,jL),l.wj=function(e){return _t(e,138)},l.xj=function(e){return Nt(c1,Me,138,e,0,1)},N(Ln,"EcorePackageImpl/5",1188),D(1189,1,ci,$L),l.wj=function(e){return _t(e,148)},l.xj=function(e){return Nt(Sft,Me,148,e,0,1)},N(Ln,"EcorePackageImpl/6",1189),D(1190,1,ci,n6),l.wj=function(e){return _t(e,457)},l.xj=function(e){return Nt(iU,Me,671,e,0,1)},N(Ln,"EcorePackageImpl/7",1190),D(1191,1,ci,pJ),l.wj=function(e){return _t(e,573)},l.xj=function(e){return Nt(eg,Me,678,e,0,1)},N(Ln,"EcorePackageImpl/8",1191),D(1192,1,ci,bJ),l.wj=function(e){return _t(e,471)},l.xj=function(e){return Nt(nA,Me,471,e,0,1)},N(Ln,"EcorePackageImpl/9",1192),D(1025,1982,s0e,$qt),l.bi=function(e,n){Dun(this,u(n,415))},l.fi=function(e,n){toe(this,e,u(n,415))},N(Ln,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),D(1026,143,QI,eXt),l.Ai=function(){return this.a.a},N(Ln,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),D(1053,1052,{},vUt),N("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var oLt=as(O0e,"Resource");D(781,1378,N0e),l.Yk=function(e){},l.Zk=function(e){},l.Vk=function(){return!this.a&&(this.a=new Htt(this)),this.a},l.Wk=function(e){var n,r,s,o,h;if(s=e.length,s>0)if($r(0,e.length),e.charCodeAt(0)==47){for(h=new Jc(4),o=1,n=1;n0&&(e=e.substr(0,r)));return Jgn(this,e)},l.Xk=function(){return this.c},l.Ib=function(){var e;return Mp(this.gm)+"@"+(e=Ji(this)>>>0,e.toString(16))+" uri='"+this.d+"'"},l.b=!1,N(rut,"ResourceImpl",781),D(1379,781,N0e,Nzt),N(rut,"BinaryResourceImpl",1379),D(1169,694,Qct),l.si=function(e){return _t(e,56)?Nnn(this,u(e,56)):_t(e,591)?new nr(u(e,591).Vk()):Gt(e)===Gt(this.f)?u(e,14).Kc():(l8(),lN.a)},l.Ob=function(){return e5t(this)},l.a=!1,N(Yi,"EcoreUtil/ContentTreeIterator",1169),D(1380,1169,Qct,IYt),l.si=function(e){return Gt(e)===Gt(this.f)?u(e,15).Kc():new pZt(u(e,56))},N(rut,"ResourceImpl/5",1380),D(648,1994,k0e,Htt),l.Hc=function(e){return this.i<=4?l7(this,e):_t(e,49)&&u(e,49).Zg()==this.a},l.bi=function(e,n){e==this.i-1&&(this.a.b||(this.a.b=!0))},l.di=function(e,n){e==0?this.a.b||(this.a.b=!0):jrt(this,e,n)},l.fi=function(e,n){},l.gi=function(e,n,r){},l.aj=function(){return 2},l.Ai=function(){return this.a},l.bj=function(){return!0},l.cj=function(e,n){var r;return r=u(e,49),n=r.wh(this.a,n),n},l.dj=function(e,n){var r;return r=u(e,49),r.wh(null,n)},l.ej=function(){return!1},l.hi=function(){return!0},l.ri=function(e){return Nt(Tb,Me,56,e,0,1)},l.ni=function(){return!1},N(rut,"ResourceImpl/ContentsEList",648),D(957,1964,L7,Ozt),l.Zc=function(e){return this.a._h(e)},l.gc=function(){return this.a.gc()},N(Yi,"AbstractSequentialInternalEList/1",957);var cLt,uLt,Sa,lLt;D(624,1,{},NKt);var aU,oU;N(Yi,"BasicExtendedMetaData",624),D(1160,1,{},NGt),l.$k=function(){return null},l._k=function(){return this.a==-2&&xg(this,a0n(this.d,this.b)),this.a},l.al=function(){return null},l.bl=function(){return pn(),pn(),uo},l.ne=function(){return this.c==V7&&I3(this,Die(this.d,this.b)),this.c},l.cl=function(){return 0},l.a=-2,l.c=V7,N(Yi,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),D(1161,1,{},eZt),l.$k=function(){return this.a==(S8(),aU)&&lpt(this,k2n(this.f,this.b)),this.a},l._k=function(){return 0},l.al=function(){return this.c==(S8(),aU)&&Ctt(this,E2n(this.f,this.b)),this.c},l.bl=function(){return!this.d&&Stt(this,kwn(this.f,this.b)),this.d},l.ne=function(){return this.e==V7&&QB(this,Die(this.f,this.b)),this.e},l.cl=function(){return this.g==-2&&ZB(this,_dn(this.f,this.b)),this.g},l.e=V7,l.g=-2,N(Yi,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),D(1159,1,{},FGt),l.b=!1,l.c=!1,N(Yi,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),D(1162,1,{},tZt),l.c=-2,l.e=V7,l.f=V7,N(Yi,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),D(585,622,Ko,Sj),l.aj=function(){return this.c},l.Fk=function(){return!1},l.li=function(e,n){return n},l.c=0,N(Yi,"EDataTypeEList",585);var hLt=as(Yi,"FeatureMap");D(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},ps),l.Vc=function(e,n){w2n(this,e,u(n,72))},l.Fc=function(e){return Bbn(this,u(e,72))},l.Yh=function(e){Een(this,u(e,72))},l.cj=function(e,n){return rZe(this,u(e,72),n)},l.dj=function(e,n){return cvt(this,u(e,72),n)},l.ii=function(e,n){return $wn(this,e,n)},l.li=function(e,n){return m3n(this,e,u(n,72))},l._c=function(e,n){return cvn(this,e,u(n,72))},l.jj=function(e,n){return iZe(this,u(e,72),n)},l.kj=function(e,n){return sKt(this,u(e,72),n)},l.lj=function(e,n,r){return cdn(this,u(e,72),u(n,72),r)},l.oi=function(e,n){return Lst(this,e,u(n,72))},l.dl=function(e,n){return H5t(this,e,n)},l.Wc=function(e,n){var r,s,o,h,d,w,k,_,M;for(_=new Kv(n.gc()),o=n.Kc();o.Ob();)if(s=u(o.Pb(),72),h=s.ak(),G0(this.e,h))(!h.hi()||!k$(this,h,s.dd())&&!l7(_,s))&&Or(_,s);else{for(M=hu(this.e.Tg(),h),r=u(this.g,119),d=!0,w=0;w=0;)if(n=e[this.c],this.k.rl(n.ak()))return this.j=this.f?n:n.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},N(Yi,"BasicFeatureMap/FeatureEIterator",410),D(662,410,Jd,Ket),l.Lk=function(){return!0},N(Yi,"BasicFeatureMap/ResolvingFeatureEIterator",662),D(955,486,_H,SUt),l.Gi=function(){return this},N(Yi,"EContentsEList/1",955),D(956,486,_H,ZGt),l.Lk=function(){return!1},N(Yi,"EContentsEList/2",956),D(954,279,CH,AUt),l.Nk=function(e){},l.Ob=function(){return!1},l.Sb=function(){return!1},N(Yi,"EContentsEList/FeatureIteratorImpl/1",954),D(825,585,Ko,d2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.a,this.a=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,N(Yi,"EDataTypeEList/Unsettable",825),D(1849,585,Ko,FUt),l.hi=function(){return!0},N(Yi,"EDataTypeUniqueEList",1849),D(1850,825,Ko,BUt),l.hi=function(){return!0},N(Yi,"EDataTypeUniqueEList/Unsettable",1850),D(139,85,Ko,$u),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectContainmentEList/Resolving",139),D(1163,545,Ko,PUt),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectContainmentEList/Unsettable/Resolving",1163),D(748,16,Ko,evt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.a,this.a=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,N(Yi,"EObjectContainmentWithInverseEList/Unsettable",748),D(1173,748,Ko,UWt),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),D(743,496,Ko,f2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.a,this.a=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,N(Yi,"EObjectEList/Unsettable",743),D(328,496,Ko,W3),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectResolvingEList",328),D(1641,743,Ko,RUt),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectResolvingEList/Unsettable",1641),D(1381,1,{},vJ);var a5e;N(Yi,"EObjectValidator",1381),D(546,496,Ko,Uj),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.bj=function(){return!0},l.Dk=function(){return!0},l.b=0,N(Yi,"EObjectWithInverseEList",546),D(1176,546,Ko,WWt),l.Ck=function(){return!0},N(Yi,"EObjectWithInverseEList/ManyInverse",1176),D(625,546,Ko,gnt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.a,this.a=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,N(Yi,"EObjectWithInverseEList/Unsettable",625),D(1175,625,Ko,KWt),l.Ck=function(){return!0},N(Yi,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),D(749,546,Ko,nvt),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectWithInverseResolvingEList",749),D(31,749,Ko,En),l.Ck=function(){return!0},N(Yi,"EObjectWithInverseResolvingEList/ManyInverse",31),D(750,625,Ko,rvt),l.Ek=function(){return!0},l.li=function(e,n){return ax(this,e,u(n,56))},N(Yi,"EObjectWithInverseResolvingEList/Unsettable",750),D(1174,750,Ko,YWt),l.Ck=function(){return!0},N(Yi,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),D(1164,622,Ko),l.ai=function(){return(this.b&1792)==0},l.ci=function(){this.b|=1},l.Bk=function(){return(this.b&4)!=0},l.bj=function(){return(this.b&40)!=0},l.Ck=function(){return(this.b&16)!=0},l.Dk=function(){return(this.b&8)!=0},l.Ek=function(){return(this.b&Ay)!=0},l.rk=function(){return(this.b&32)!=0},l.Fk=function(){return(this.b&xf)!=0},l.wj=function(e){return this.d?MZt(this.d,e):this.ak().Yj().wj(e)},l.fj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},l.hi=function(){return(this.b&128)!=0},l.Xj=function(){var e;Tr(this),this.b&2&&(Sl(this.e)?(e=(this.b&1)!=0,this.b&=-2,Uk(this,new bf(this.e,2,es(this.e.Tg(),this.ak()),e,!1))):this.b&=-2)},l.ni=function(){return(this.b&1536)==0},l.b=0,N(Yi,"EcoreEList/Generic",1164),D(1165,1164,Ko,jXt),l.ak=function(){return this.a},N(Yi,"EcoreEList/Dynamic",1165),D(747,63,Sd,bpt),l.ri=function(e){return _D(this.a.a,e)},N(Yi,"EcoreEMap/1",747),D(746,85,Ko,ewt),l.bi=function(e,n){qz(this.b,u(n,133))},l.di=function(e,n){_ne(this.b)},l.ei=function(e,n,r){var s;++(s=this.b,u(n,133),s).e},l.fi=function(e,n){Rit(this.b,u(n,133))},l.gi=function(e,n,r){Rit(this.b,u(r,133)),Gt(r)===Gt(n)&&u(r,133).Th(fXe(u(n,133).cd())),qz(this.b,u(n,133))},N(Yi,"EcoreEMap/DelegateEObjectContainmentEList",746),D(1171,151,L8t,Ree),N(Yi,"EcoreEMap/Unsettable",1171),D(1172,746,Ko,XWt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;Tr(this),Sl(this.e)?(e=this.a,this.a=!1,Ci(this.e,new bf(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,N(Yi,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),D(1168,228,S4,qYt),l.a=!1,l.b=!1,N(Yi,"EcoreUtil/Copier",1168),D(745,1,da,pZt),l.Nb=function(e){Ea(this,e)},l.Ob=function(){return hie(this)},l.Pb=function(){var e;return hie(this),e=this.b,this.b=null,e},l.Qb=function(){this.a.Qb()},N(Yi,"EcoreUtil/ProperContentIterator",745),D(1382,1381,{},HB);var o5e;N(Yi,"EcoreValidator",1382);var c5e;as(Yi,"FeatureMapUtil/Validator"),D(1260,1,{1942:1},wJ),l.rl=function(e){return!0},N(Yi,"FeatureMapUtil/1",1260),D(757,1,{1942:1},w6t),l.rl=function(e){var n;return this.c==e?!0:(n=Fe(tr(this.a,e)),n==null?rwn(this,e)?(EJt(this.a,e,(Fn(),W7)),!0):(EJt(this.a,e,(Fn(),O2)),!1):n==(Fn(),W7))},l.e=!1;var Dft;N(Yi,"FeatureMapUtil/BasicValidator",757),D(758,43,S4,c2t),N(Yi,"FeatureMapUtil/BasicValidator/Cache",758),D(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},IM),l.Vc=function(e,n){$ce(this.c,this.b,e,n)},l.Fc=function(e){return H5t(this.c,this.b,e)},l.Wc=function(e,n){return wyn(this.c,this.b,e,n)},l.Gc=function(e){return h_(this,e)},l.Xh=function(e,n){jan(this.c,this.b,e,n)},l.lk=function(e,n){return B5t(this.c,this.b,e,n)},l.pi=function(e){return xq(this.c,this.b,e,!1)},l.Zh=function(){return uUt(this.c,this.b)},l.$h=function(){return JYe(this.c,this.b)},l._h=function(e){return Vsn(this.c,this.b,e)},l.mk=function(e,n){return AWt(this,e,n)},l.$b=function(){b6(this)},l.Hc=function(e){return k$(this.c,this.b,e)},l.Ic=function(e){return Hon(this.c,this.b,e)},l.Xb=function(e){return xq(this.c,this.b,e,!0)},l.Wj=function(e){return this},l.Xc=function(e){return esn(this.c,this.b,e)},l.dc=function(){return tj(this)},l.fj=function(){return!GD(this.c,this.b)},l.Kc=function(){return San(this.c,this.b)},l.Yc=function(){return Aan(this.c,this.b)},l.Zc=function(e){return $un(this.c,this.b,e)},l.ii=function(e,n){return ile(this.c,this.b,e,n)},l.ji=function(e,n){Rsn(this.c,this.b,e,n)},l.$c=function(e){return Bae(this.c,this.b,e)},l.Mc=function(e){return Twn(this.c,this.b,e)},l._c=function(e,n){return lle(this.c,this.b,e,n)},l.Wb=function(e){iq(this.c,this.b),h_(this,u(e,15))},l.gc=function(){return Jun(this.c,this.b)},l.Pc=function(){return Zrn(this.c,this.b)},l.Qc=function(e){return nsn(this.c,this.b,e)},l.Ib=function(){var e,n;for(n=new _g,n.a+="[",e=uUt(this.c,this.b);Ait(e);)yo(n,d_($z(e))),Ait(e)&&(n.a+=Xa);return n.a+="]",n.a},l.Xj=function(){iq(this.c,this.b)},N(Yi,"FeatureMapUtil/FeatureEList",501),D(627,36,QI,Mrt),l.yi=function(e){return Z_(this,e)},l.Di=function(e){var n,r,s,o,h,d,w;switch(this.d){case 1:case 2:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0;break}case 3:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return this.d=5,n=new Kv(2),Or(n,this.g),Or(n,e.zi()),this.g=n,!0;break}}break}case 5:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return r=u(this.g,14),r.Fc(e.zi()),!0;break}}break}case 4:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return this.d=1,this.g=e.zi(),!0;break}case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return this.d=6,w=new Kv(2),Or(w,this.n),Or(w,e.Bi()),this.n=w,d=ut(ot(Sr,1),Jr,25,15,[this.o,e.Ci()]),this.g=d,!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&Z_(this,null)==e.yi(null))return r=u(this.n,14),r.Fc(e.Bi()),d=u(this.g,48),s=Nt(Sr,Jr,25,d.length+1,15,1),Pc(d,0,s,0,d.length),s[d.length]=e.Ci(),this.g=s,!0;break}}break}}return!1},N(Yi,"FeatureMapUtil/FeatureENotificationImpl",627),D(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Dj),l.dl=function(e,n){return H5t(this.c,e,n)},l.el=function(e,n,r){return B5t(this.c,e,n,r)},l.fl=function(e,n,r){return a6t(this.c,e,n,r)},l.gl=function(){return this},l.hl=function(e,n){return kI(this.c,e,n)},l.il=function(e){return u(xq(this.c,this.b,e,!1),72).ak()},l.jl=function(e){return u(xq(this.c,this.b,e,!1),72).dd()},l.kl=function(){return this.a},l.ll=function(e){return!GD(this.c,e)},l.ml=function(e,n){kq(this.c,e,n)},l.nl=function(e){return Gee(this.c,e)},l.ol=function(e){pse(this.c,e)},N(Yi,"FeatureMapUtil/FeatureFeatureMap",552),D(1259,1,nut,BGt),l.Wj=function(e){return xq(this.b,this.a,-1,e)},l.fj=function(){return!GD(this.b,this.a)},l.Wb=function(e){kq(this.b,this.a,e)},l.Xj=function(){iq(this.b,this.a)},N(Yi,"FeatureMapUtil/FeatureValue",1259);var Gx,Ift,Oft,Ux,u5e,fN=as(NH,"AnyType");D(666,60,U0,set),N(NH,"InvalidDatatypeValueException",666);var cU=as(NH,F0e),dN=as(NH,B0e),fLt=as(NH,R0e),l5e,kc,dLt,K2,h5e,f5e,d5e,g5e,p5e,b5e,v5e,w5e,m5e,y5e,x5e,l5,k5e,h5,oA,E5e,Vw,gN,pN,T5e,cA,uA;D(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Bpt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new ps(this,0)),this.c):(!this.c&&(this.c=new ps(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)):(!this.c&&(this.c=new ps(this,0)),u(u($c(this.c,($i(),K2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new ps(this,2)),this.b):(!this.b&&(this.b=new ps(this,2)),this.b.b)}return hh(this,e-Jn(this.zh()),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():this.zh(),e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.c&&(this.c=new ps(this,0)),wI(this.c,e,r);case 1:return(!this.c&&(this.c=new ps(this,0)),u(u($c(this.c,($i(),K2)),153),69)).mk(e,r);case 2:return!this.b&&(this.b=new ps(this,2)),wI(this.b,e,r)}return s=u(wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():this.zh(),n),66),s.Nj().Rj(this,Mmt(this),n-Jn(this.zh()),e,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)).dc();case 2:return!!this.b&&this.b.i!=0}return uh(this,e-Jn(this.zh()),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():this.zh(),e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new ps(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new ps(this,0)),u(u($c(this.c,($i(),K2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new ps(this,2)),QM(this.b,n);return}bh(this,e-Jn(this.zh()),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():this.zh(),e),n)},l.zh=function(){return $i(),dLt},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new ps(this,0)),Tr(this.c);return;case 1:(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)).$b();return;case 2:!this.b&&(this.b=new ps(this,2)),Tr(this.b);return}gh(this,e-Jn(this.zh()),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():this.zh(),e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new Ah(mf(this)),e.a+=" (mixed: ",o_(e,this.c),e.a+=", anyAttribute: ",o_(e,this.b),e.a+=")",e.a)},N(Ds,"AnyTypeImpl",830),D(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},vB),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return hh(this,e-Jn(($i(),l5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():l5,e),n,r)},l.lh=function(e){switch(e){case 0:return this.a!=null;case 1:return this.b!=null}return uh(this,e-Jn(($i(),l5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():l5,e))},l.sh=function(e,n){switch(e){case 0:Dtt(this,jr(n));return;case 1:fpt(this,jr(n));return}bh(this,e-Jn(($i(),l5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():l5,e),n)},l.zh=function(){return $i(),l5},l.Bh=function(e){switch(e){case 0:this.a=null;return;case 1:this.b=null;return}gh(this,e-Jn(($i(),l5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():l5,e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new Ah(mf(this)),e.a+=" (data: ",yo(e,this.a),e.a+=", target: ",yo(e,this.b),e.a+=")",e.a)},l.a=null,l.b=null,N(Ds,"ProcessingInstructionImpl",667),D(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},Tqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new ps(this,0)),this.c):(!this.c&&(this.c=new ps(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)):(!this.c&&(this.c=new ps(this,0)),u(u($c(this.c,($i(),K2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new ps(this,2)),this.b):(!this.b&&(this.b=new ps(this,2)),this.b.b);case 3:return!this.c&&(this.c=new ps(this,0)),jr(kI(this.c,($i(),oA),!0));case 4:return ivt(this.a,(!this.c&&(this.c=new ps(this,0)),jr(kI(this.c,($i(),oA),!0))));case 5:return this.a}return hh(this,e-Jn(($i(),h5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():h5,e),n,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new ps(this,0)),jr(kI(this.c,($i(),oA),!0))!=null;case 4:return ivt(this.a,(!this.c&&(this.c=new ps(this,0)),jr(kI(this.c,($i(),oA),!0))))!=null;case 5:return!!this.a}return uh(this,e-Jn(($i(),h5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():h5,e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new ps(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new ps(this,0)),u(u($c(this.c,($i(),K2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new ps(this,2)),QM(this.b,n);return;case 3:Hwt(this,jr(n));return;case 4:Hwt(this,svt(this.a,n));return;case 5:Ec(this,u(n,148));return}bh(this,e-Jn(($i(),h5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():h5,e),n)},l.zh=function(){return $i(),h5},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new ps(this,0)),Tr(this.c);return;case 1:(!this.c&&(this.c=new ps(this,0)),u($c(this.c,($i(),K2)),153)).$b();return;case 2:!this.b&&(this.b=new ps(this,2)),Tr(this.b);return;case 3:!this.c&&(this.c=new ps(this,0)),kq(this.c,($i(),oA),null);return;case 4:Hwt(this,svt(this.a,null));return;case 5:this.a=null;return}gh(this,e-Jn(($i(),h5)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():h5,e))},N(Ds,"SimpleAnyTypeImpl",668),D(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Eqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.a&&(this.a=new ps(this,0)),this.a):(!this.a&&(this.a=new ps(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new Il((ln(),Ja),pc,this,1)),this.b):(!this.b&&(this.b=new Il((ln(),Ja),pc,this,1)),fD(this.b));case 2:return r?(!this.c&&(this.c=new Il((ln(),Ja),pc,this,2)),this.c):(!this.c&&(this.c=new Il((ln(),Ja),pc,this,2)),fD(this.c));case 3:return!this.a&&(this.a=new ps(this,0)),$c(this.a,($i(),gN));case 4:return!this.a&&(this.a=new ps(this,0)),$c(this.a,($i(),pN));case 5:return!this.a&&(this.a=new ps(this,0)),$c(this.a,($i(),cA));case 6:return!this.a&&(this.a=new ps(this,0)),$c(this.a,($i(),uA))}return hh(this,e-Jn(($i(),Vw)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():Vw,e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.a&&(this.a=new ps(this,0)),wI(this.a,e,r);case 1:return!this.b&&(this.b=new Il((ln(),Ja),pc,this,1)),kj(this.b,e,r);case 2:return!this.c&&(this.c=new Il((ln(),Ja),pc,this,2)),kj(this.c,e,r);case 5:return!this.a&&(this.a=new ps(this,0)),AWt($c(this.a,($i(),cA)),e,r)}return s=u(wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():($i(),Vw),n),66),s.Nj().Rj(this,Mmt(this),n-Jn(($i(),Vw)),e,r)},l.lh=function(e){switch(e){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new ps(this,0)),!tj($c(this.a,($i(),gN)));case 4:return!this.a&&(this.a=new ps(this,0)),!tj($c(this.a,($i(),pN)));case 5:return!this.a&&(this.a=new ps(this,0)),!tj($c(this.a,($i(),cA)));case 6:return!this.a&&(this.a=new ps(this,0)),!tj($c(this.a,($i(),uA)))}return uh(this,e-Jn(($i(),Vw)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():Vw,e))},l.sh=function(e,n){switch(e){case 0:!this.a&&(this.a=new ps(this,0)),QM(this.a,n);return;case 1:!this.b&&(this.b=new Il((ln(),Ja),pc,this,1)),lz(this.b,n);return;case 2:!this.c&&(this.c=new Il((ln(),Ja),pc,this,2)),lz(this.c,n);return;case 3:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),gN))),!this.a&&(this.a=new ps(this,0)),h_($c(this.a,gN),u(n,14));return;case 4:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),pN))),!this.a&&(this.a=new ps(this,0)),h_($c(this.a,pN),u(n,14));return;case 5:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),cA))),!this.a&&(this.a=new ps(this,0)),h_($c(this.a,cA),u(n,14));return;case 6:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),uA))),!this.a&&(this.a=new ps(this,0)),h_($c(this.a,uA),u(n,14));return}bh(this,e-Jn(($i(),Vw)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():Vw,e),n)},l.zh=function(){return $i(),Vw},l.Bh=function(e){switch(e){case 0:!this.a&&(this.a=new ps(this,0)),Tr(this.a);return;case 1:!this.b&&(this.b=new Il((ln(),Ja),pc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new Il((ln(),Ja),pc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),gN)));return;case 4:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),pN)));return;case 5:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),cA)));return;case 6:!this.a&&(this.a=new ps(this,0)),b6($c(this.a,($i(),uA)));return}gh(this,e-Jn(($i(),Vw)),wn(this.j&2?(!this.k&&(this.k=new ih),this.k).ck():Vw,e))},l.Ib=function(){var e;return this.j&4?mf(this):(e=new Ah(mf(this)),e.a+=" (mixed: ",o_(e,this.a),e.a+=")",e.a)},N(Ds,"XMLTypeDocumentRootImpl",669),D(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Em),l.Ih=function(e,n){switch(e.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:Wo(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return jr(n);case 6:return vQe(u(n,190));case 12:case 47:case 49:case 11:return Qle(this,e,n);case 13:return n==null?null:iyn(u(n,240));case 15:case 14:return n==null?null:gen(Zt(ve(n)));case 17:return tae(($i(),n));case 18:return tae(n);case 21:case 20:return n==null?null:pen(u(n,155).a);case 27:return wQe(u(n,190));case 30:return bse(($i(),u(n,15)));case 31:return bse(u(n,15));case 40:return yQe(($i(),n));case 42:return eae(($i(),n));case 43:return eae(n);case 59:case 48:return mQe(($i(),n));default:throw nt(new Pn(z7+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h;switch(e.G==-1&&(e.G=(r=zl(e),r?$g(r.Mh(),e):-1)),e.G){case 0:return n=new Bpt,n;case 1:return s=new vB,s;case 2:return o=new Tqt,o;case 3:return h=new Eqt,h;default:throw nt(new Pn($ct+e.zb+kw))}},l.Kh=function(e,n){var r,s,o,h,d,w,k,_,M,B,q,G,W,Z,bt,Mt;switch(e.yj()){case 5:case 52:case 4:return n;case 6:return Nhn(n);case 8:case 7:return n==null?null:xdn(n);case 9:return n==null?null:ED(Gl((s=Hc(n,!0),s.length>0&&($r(0,s.length),s.charCodeAt(0)==43)?s.substr(1):s),-128,127)<<24>>24);case 10:return n==null?null:ED(Gl((o=Hc(n,!0),o.length>0&&($r(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o),-128,127)<<24>>24);case 11:return jr(pw(this,($i(),d5e),n));case 12:return jr(pw(this,($i(),g5e),n));case 13:return n==null?null:new ibt(Hc(n,!0));case 15:case 14:return qbn(n);case 16:return jr(pw(this,($i(),p5e),n));case 17:return kie(($i(),n));case 18:return kie(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Hc(n,!0);case 21:case 20:return Qbn(n);case 22:return jr(pw(this,($i(),b5e),n));case 23:return jr(pw(this,($i(),v5e),n));case 24:return jr(pw(this,($i(),w5e),n));case 25:return jr(pw(this,($i(),m5e),n));case 26:return jr(pw(this,($i(),y5e),n));case 27:return Lhn(n);case 30:return Eie(($i(),n));case 31:return Eie(n);case 32:return n==null?null:de(Gl((M=Hc(n,!0),M.length>0&&($r(0,M.length),M.charCodeAt(0)==43)?M.substr(1):M),Oa,Ti));case 33:return n==null?null:new Fp((B=Hc(n,!0),B.length>0&&($r(0,B.length),B.charCodeAt(0)==43)?B.substr(1):B));case 34:return n==null?null:de(Gl((q=Hc(n,!0),q.length>0&&($r(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q),Oa,Ti));case 36:return n==null?null:b2(Sq((G=Hc(n,!0),G.length>0&&($r(0,G.length),G.charCodeAt(0)==43)?G.substr(1):G)));case 37:return n==null?null:b2(Sq((W=Hc(n,!0),W.length>0&&($r(0,W.length),W.charCodeAt(0)==43)?W.substr(1):W)));case 40:return Gln(($i(),n));case 42:return Tie(($i(),n));case 43:return Tie(n);case 44:return n==null?null:new Fp((Z=Hc(n,!0),Z.length>0&&($r(0,Z.length),Z.charCodeAt(0)==43)?Z.substr(1):Z));case 45:return n==null?null:new Fp((bt=Hc(n,!0),bt.length>0&&($r(0,bt.length),bt.charCodeAt(0)==43)?bt.substr(1):bt));case 46:return Hc(n,!1);case 47:return jr(pw(this,($i(),x5e),n));case 59:case 48:return Vln(($i(),n));case 49:return jr(pw(this,($i(),k5e),n));case 50:return n==null?null:J8(Gl((Mt=Hc(n,!0),Mt.length>0&&($r(0,Mt.length),Mt.charCodeAt(0)==43)?Mt.substr(1):Mt),MH,32767)<<16>>16);case 51:return n==null?null:J8(Gl((h=Hc(n,!0),h.length>0&&($r(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),MH,32767)<<16>>16);case 53:return jr(pw(this,($i(),E5e),n));case 55:return n==null?null:J8(Gl((d=Hc(n,!0),d.length>0&&($r(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),MH,32767)<<16>>16);case 56:return n==null?null:J8(Gl((w=Hc(n,!0),w.length>0&&($r(0,w.length),w.charCodeAt(0)==43)?w.substr(1):w),MH,32767)<<16>>16);case 57:return n==null?null:b2(Sq((k=Hc(n,!0),k.length>0&&($r(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k)));case 58:return n==null?null:b2(Sq((_=Hc(n,!0),_.length>0&&($r(0,_.length),_.charCodeAt(0)==43)?_.substr(1):_)));case 60:return n==null?null:de(Gl((r=Hc(n,!0),r.length>0&&($r(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),Oa,Ti));case 61:return n==null?null:de(Gl(Hc(n,!0),Oa,Ti));default:throw nt(new Pn(z7+e.ne()+kw))}};var _5e,gLt,C5e,pLt;N(Ds,"XMLTypeFactoryImpl",1919),D(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},uXt),l.N=!1,l.O=!1;var S5e=!1;N(Ds,"XMLTypePackageImpl",586),D(1852,1,{837:1},r6),l._j=function(){return Q5t(),F5e},N(Ds,"XMLTypePackageImpl/1",1852),D(1861,1,ci,g1),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/10",1861),D(1862,1,ci,wB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/11",1862),D(1863,1,ci,mB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/12",1863),D(1864,1,ci,yB),l.wj=function(e){return Nm(e)},l.xj=function(e){return Nt(wa,re,333,e,7,1)},N(Ds,"XMLTypePackageImpl/13",1864),D(1865,1,ci,xB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/14",1865),D(1866,1,ci,kB),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/15",1866),D(1867,1,ci,EB),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/16",1867),D(1868,1,ci,Hf),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/17",1868),D(1869,1,ci,vu),l.wj=function(e){return _t(e,155)},l.xj=function(e){return Nt(K7,re,155,e,0,1)},N(Ds,"XMLTypePackageImpl/18",1869),D(1870,1,ci,mJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/19",1870),D(1853,1,ci,yJ),l.wj=function(e){return _t(e,843)},l.xj=function(e){return Nt(fN,Me,843,e,0,1)},N(Ds,"XMLTypePackageImpl/2",1853),D(1871,1,ci,xJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/20",1871),D(1872,1,ci,wu),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/21",1872),D(1873,1,ci,sT),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/22",1873),D(1874,1,ci,TB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/23",1874),D(1875,1,ci,_B),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Xu,re,190,e,0,2)},N(Ds,"XMLTypePackageImpl/24",1875),D(1876,1,ci,i6),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/25",1876),D(1877,1,ci,kJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/26",1877),D(1878,1,ci,Mk),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/27",1878),D(1879,1,ci,EJ),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/28",1879),D(1880,1,ci,CB),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/29",1880),D(1854,1,ci,TJ),l.wj=function(e){return _t(e,667)},l.xj=function(e){return Nt(cU,Me,2021,e,0,1)},N(Ds,"XMLTypePackageImpl/3",1854),D(1881,1,ci,_J),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(Ha,re,19,e,0,1)},N(Ds,"XMLTypePackageImpl/30",1881),D(1882,1,ci,aT),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/31",1882),D(1883,1,ci,SB),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Tw,re,162,e,0,1)},N(Ds,"XMLTypePackageImpl/32",1883),D(1884,1,ci,zL),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/33",1884),D(1885,1,ci,oT),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/34",1885),D(1886,1,ci,CJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/35",1886),D(1887,1,ci,SJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/36",1887),D(1888,1,ci,qL),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/37",1888),D(1889,1,ci,cT),l.wj=function(e){return _t(e,15)},l.xj=function(e){return Nt(mh,xy,15,e,0,1)},N(Ds,"XMLTypePackageImpl/38",1889),D(1890,1,ci,p1),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/39",1890),D(1855,1,ci,Dk),l.wj=function(e){return _t(e,668)},l.xj=function(e){return Nt(dN,Me,2022,e,0,1)},N(Ds,"XMLTypePackageImpl/4",1855),D(1891,1,ci,AJ),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/40",1891),D(1892,1,ci,Ik),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/41",1892),D(1893,1,ci,HL),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/42",1893),D(1894,1,ci,Gb),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/43",1894),D(1895,1,ci,uT),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/44",1895),D(1896,1,ci,VL),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(_w,re,184,e,0,1)},N(Ds,"XMLTypePackageImpl/45",1896),D(1897,1,ci,Vf),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/46",1897),D(1898,1,ci,lT),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/47",1898),D(1899,1,ci,b1),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/48",1899),D(ib,1,ci,v1),l.wj=function(e){return _t(e,184)},l.xj=function(e){return Nt(_w,re,184,e,0,1)},N(Ds,"XMLTypePackageImpl/49",ib),D(1856,1,ci,LJ),l.wj=function(e){return _t(e,669)},l.xj=function(e){return Nt(fLt,Me,2023,e,0,1)},N(Ds,"XMLTypePackageImpl/5",1856),D(1901,1,ci,MJ),l.wj=function(e){return _t(e,162)},l.xj=function(e){return Nt(Tw,re,162,e,0,1)},N(Ds,"XMLTypePackageImpl/50",1901),D(1902,1,ci,L3),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/51",1902),D(1903,1,ci,Ok),l.wj=function(e){return _t(e,19)},l.xj=function(e){return Nt(Ha,re,19,e,0,1)},N(Ds,"XMLTypePackageImpl/52",1903),D(1857,1,ci,Nk),l.wj=function(e){return ha(e)},l.xj=function(e){return Nt(Le,re,2,e,6,1)},N(Ds,"XMLTypePackageImpl/6",1857),D(1858,1,ci,hT),l.wj=function(e){return _t(e,190)},l.xj=function(e){return Nt(Xu,re,190,e,0,2)},N(Ds,"XMLTypePackageImpl/7",1858),D(1859,1,ci,DJ),l.wj=function(e){return Om(e)},l.xj=function(e){return Nt(Ws,re,476,e,8,1)},N(Ds,"XMLTypePackageImpl/8",1859),D(1860,1,ci,s6),l.wj=function(e){return _t(e,217)},l.xj=function(e){return Nt(kx,re,217,e,0,1)},N(Ds,"XMLTypePackageImpl/9",1860);var Y1,op,lA,uU,wt;D(50,60,U0,Rr),N(Yg,"RegEx/ParseException",50),D(820,1,{},GL),l.sl=function(e){return er*16)throw nt(new Rr(Gr((Fr(),Yde))));r=r*16+o}while(!0);if(this.a!=125)throw nt(new Rr(Gr((Fr(),Xde))));if(r>G7)throw nt(new Rr(Gr((Fr(),Qde))));e=r}else{if(o=0,this.c!=0||(o=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(r=o,mi(this),this.c!=0||(o=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));r=r*16+o,e=r}break;case 117:if(s=0,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));n=n*16+s,e=n;break;case 118:if(mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,mi(this),this.c!=0||(s=w2(this.a))<0)throw nt(new Rr(Gr((Fr(),Kg))));if(n=n*16+s,n>G7)throw nt(new Rr(Gr((Fr(),"parser.descappe.4"))));e=n;break;case 65:case 90:case 122:throw nt(new Rr(Gr((Fr(),Zde))))}return e},l.ul=function(e){var n,r;switch(e){case 100:r=(this.e&32)==32?nb("Nd",!0):(yi(),lU);break;case 68:r=(this.e&32)==32?nb("Nd",!1):(yi(),xLt);break;case 119:r=(this.e&32)==32?nb("IsWord",!0):(yi(),IE);break;case 87:r=(this.e&32)==32?nb("IsWord",!1):(yi(),ELt);break;case 115:r=(this.e&32)==32?nb("IsSpace",!0):(yi(),Wx);break;case 83:r=(this.e&32)==32?nb("IsSpace",!1):(yi(),kLt);break;default:throw nt(new Zo((n=e,Z0e+n.toString(16))))}return r},l.vl=function(e){var n,r,s,o,h,d,w,k,_,M,B,q;for(this.b=1,mi(this),n=null,this.c==0&&this.a==94?(mi(this),e?M=(yi(),yi(),new jl(5)):(n=(yi(),yi(),new jl(4)),qc(n,0,G7),M=new jl(4))):M=(yi(),yi(),new jl(4)),o=!0;(q=this.c)!=1&&!(q==0&&this.a==93&&!o);){if(o=!1,r=this.a,s=!1,q==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:vy(M,this.ul(r)),s=!0;break;case 105:case 73:case 99:case 67:r=this.Ll(M,r),r<0&&(s=!0);break;case 112:case 80:if(B=J4t(this,r),!B)throw nt(new Rr(Gr((Fr(),Jct))));vy(M,B),s=!0;break;default:r=this.tl()}else if(q==20){if(d=c8(this.i,58,this.d),d<0)throw nt(new Rr(Gr((Fr(),E8t))));if(w=!0,Ta(this.i,this.d)==94&&(++this.d,w=!1),h=Bl(this.i,this.d,d),k=lte(h,w,(this.e&512)==512),!k)throw nt(new Rr(Gr((Fr(),Vde))));if(vy(M,k),s=!0,d+1>=this.j||Ta(this.i,d+1)!=93)throw nt(new Rr(Gr((Fr(),E8t))));this.d=d+2}if(mi(this),!s)if(this.c!=0||this.a!=45)qc(M,r,r);else{if(mi(this),(q=this.c)==1)throw nt(new Rr(Gr((Fr(),EH))));q==0&&this.a==93?(qc(M,r,r),qc(M,45,45)):(_=this.a,q==10&&(_=this.tl()),mi(this),qc(M,r,_))}(this.e&xf)==xf&&this.c==0&&this.a==44&&mi(this)}if(this.c==1)throw nt(new Rr(Gr((Fr(),EH))));return n&&(CC(n,M),M=n),v4(M),TC(M),this.b=0,mi(this),M},l.wl=function(){var e,n,r,s;for(r=this.vl(!1);(s=this.c)!=7;)if(e=this.a,s==0&&(e==45||e==38)||s==4){if(mi(this),this.c!=9)throw nt(new Rr(Gr((Fr(),Ude))));if(n=this.vl(!1),s==4)vy(r,n);else if(e==45)CC(r,n);else if(e==38)Gle(r,n);else throw nt(new Zo("ASSERT"))}else throw nt(new Rr(Gr((Fr(),Wde))));return mi(this),r},l.xl=function(){var e,n;return e=this.a-48,n=(yi(),yi(),new drt(12,null,e)),!this.g&&(this.g=new fR),hR(this.g,new vpt(e)),mi(this),n},l.yl=function(){return mi(this),yi(),M5e},l.zl=function(){return mi(this),yi(),L5e},l.Al=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Bl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Cl=function(){return mi(this),Ucn()},l.Dl=function(){return mi(this),yi(),I5e},l.El=function(){return mi(this),yi(),N5e},l.Fl=function(){var e;if(this.d>=this.j||((e=Ta(this.i,this.d++))&65504)!=64)throw nt(new Rr(Gr((Fr(),zde))));return mi(this),yi(),yi(),new Gd(0,e-64)},l.Gl=function(){return mi(this),Lmn()},l.Hl=function(){return mi(this),yi(),P5e},l.Il=function(){var e;return e=(yi(),yi(),new Gd(0,105)),mi(this),e},l.Jl=function(){return mi(this),yi(),O5e},l.Kl=function(){return mi(this),yi(),D5e},l.Ll=function(e,n){return this.tl()},l.Ml=function(){return mi(this),yi(),mLt},l.Nl=function(){var e,n,r,s,o;if(this.d+1>=this.j)throw nt(new Rr(Gr((Fr(),Rde))));if(s=-1,n=null,e=Ta(this.i,this.d),49<=e&&e<=57){if(s=e-48,!this.g&&(this.g=new fR),hR(this.g,new vpt(s)),++this.d,Ta(this.i,this.d)!=41)throw nt(new Rr(Gr((Fr(),M2))));++this.d}else switch(e==63&&--this.d,mi(this),n=k6t(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));break;default:throw nt(new Rr(Gr((Fr(),jde))))}if(mi(this),o=sw(this),r=null,o.e==2){if(o.em()!=2)throw nt(new Rr(Gr((Fr(),$de))));r=o.am(1),o=o.am(0)}if(this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),yi(),yi(),new qte(s,n,o,r)},l.Ol=function(){return mi(this),yi(),yLt},l.Pl=function(){var e;if(mi(this),e=Wj(24,sw(this)),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Ql=function(){var e;if(mi(this),e=Wj(20,sw(this)),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Rl=function(){var e;if(mi(this),e=Wj(22,sw(this)),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Sl=function(){var e,n,r,s,o;for(e=0,r=0,n=-1;this.d=this.j)throw nt(new Rr(Gr((Fr(),x8t))));if(n==45){for(++this.d;this.d=this.j)throw nt(new Rr(Gr((Fr(),x8t))))}if(n==58){if(++this.d,mi(this),s=WYt(sw(this),e,r),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));mi(this)}else if(n==41)++this.d,mi(this),s=WYt(sw(this),e,r);else throw nt(new Rr(Gr((Fr(),Bde))));return s},l.Tl=function(){var e;if(mi(this),e=Wj(21,sw(this)),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Ul=function(){var e;if(mi(this),e=Wj(23,sw(this)),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Vl=function(){var e,n;if(mi(this),e=this.f++,n=$nt(sw(this),e),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),n},l.Wl=function(){var e;if(mi(this),e=$nt(sw(this),0),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Xl=function(e){return mi(this),this.c==5?(mi(this),Bj(e,(yi(),yi(),new Wm(9,e)))):Bj(e,(yi(),yi(),new Wm(3,e)))},l.Yl=function(e){var n;return mi(this),n=(yi(),yi(),new l_(2)),this.c==5?(mi(this),x2(n,fA),x2(n,e)):(x2(n,e),x2(n,fA)),n},l.Zl=function(e){return mi(this),this.c==5?(mi(this),yi(),yi(),new Wm(9,e)):(yi(),yi(),new Wm(3,e))},l.a=0,l.b=0,l.c=0,l.d=0,l.e=0,l.f=1,l.g=null,l.j=0,N(Yg,"RegEx/RegexParser",820),D(1824,820,{},_qt),l.sl=function(e){return!1},l.tl=function(){return O5t(this)},l.ul=function(e){return y7(e)},l.vl=function(e){return Bhe(this)},l.wl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.xl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.yl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.zl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Al=function(){return mi(this),y7(67)},l.Bl=function(){return mi(this),y7(73)},l.Cl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Dl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.El=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Fl=function(){return mi(this),y7(99)},l.Gl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Hl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Il=function(){return mi(this),y7(105)},l.Jl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Kl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Ll=function(e,n){return vy(e,y7(n)),-1},l.Ml=function(){return mi(this),yi(),yi(),new Gd(0,94)},l.Nl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Ol=function(){return mi(this),yi(),yi(),new Gd(0,36)},l.Pl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Ql=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Rl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Sl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Tl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Ul=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Vl=function(){var e;if(mi(this),e=$nt(sw(this),0),this.c!=7)throw nt(new Rr(Gr((Fr(),M2))));return mi(this),e},l.Wl=function(){throw nt(new Rr(Gr((Fr(),wh))))},l.Xl=function(e){return mi(this),Bj(e,(yi(),yi(),new Wm(3,e)))},l.Yl=function(e){var n;return mi(this),n=(yi(),yi(),new l_(2)),x2(n,e),x2(n,fA),n},l.Zl=function(e){return mi(this),yi(),yi(),new Wm(3,e)};var f5=null,ME=null;N(Yg,"RegEx/ParserForXMLSchema",1824),D(117,1,U7,vv),l.$l=function(e){throw nt(new Zo("Not supported."))},l._l=function(){return-1},l.am=function(e){return null},l.bm=function(){return null},l.cm=function(e){},l.dm=function(e){},l.em=function(){return 0},l.Ib=function(){return this.fm(0)},l.fm=function(e){return this.e==11?".":""},l.e=0;var bLt,DE,hA,A5e,vLt,n3=null,lU,Nft=null,wLt,fA,Pft=null,mLt,yLt,xLt,kLt,ELt,L5e,Wx,M5e,D5e,I5e,O5e,IE,N5e,P5e,E6n=N(Yg,"RegEx/Token",117);D(136,117,{3:1,136:1,117:1},jl),l.fm=function(e){var n,r,s;if(this.e==4)if(this==wLt)r=".";else if(this==lU)r="\\d";else if(this==IE)r="\\w";else if(this==Wx)r="\\s";else{for(s=new _g,s.a+="[",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?yo(s,xI(this.b[n])):(yo(s,xI(this.b[n])),s.a+="-",yo(s,xI(this.b[n+1])));s.a+="]",r=s.a}else if(this==xLt)r="\\D";else if(this==ELt)r="\\W";else if(this==kLt)r="\\S";else{for(s=new _g,s.a+="[^",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?yo(s,xI(this.b[n])):(yo(s,xI(this.b[n])),s.a+="-",yo(s,xI(this.b[n+1])));s.a+="]",r=s.a}return r},l.a=!1,l.c=!1,N(Yg,"RegEx/RangeToken",136),D(584,1,{584:1},vpt),l.a=0,N(Yg,"RegEx/RegexParser/ReferencePosition",584),D(583,1,{3:1,583:1},FHt),l.Fb=function(e){var n;return e==null||!_t(e,583)?!1:(n=u(e,583),un(this.b,n.b)&&this.a==n.a)},l.Hb=function(){return zg(this.b+"/"+S5t(this.a))},l.Ib=function(){return this.c.fm(this.a)},l.a=0,N(Yg,"RegEx/RegularExpression",583),D(223,117,U7,Gd),l._l=function(){return this.a},l.fm=function(e){var n,r,s;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:s="\\"+dnt(this.a&Ms);break;case 12:s="\\f";break;case 10:s="\\n";break;case 13:s="\\r";break;case 9:s="\\t";break;case 27:s="\\e";break;default:this.a>=Qa?(r=(n=this.a>>>0,"0"+n.toString(16)),s="\\v"+Bl(r,r.length-6,r.length)):s=""+dnt(this.a&Ms)}break;case 8:this==mLt||this==yLt?s=""+dnt(this.a&Ms):s="\\"+dnt(this.a&Ms);break;default:s=null}return s},l.a=0,N(Yg,"RegEx/Token/CharToken",223),D(309,117,U7,Wm),l.am=function(e){return this.a},l.cm=function(e){this.b=e},l.dm=function(e){this.c=e},l.em=function(){return 1},l.fm=function(e){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.fm(e)+"*";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}";else throw nt(new Zo("Token#toString(): CLOSURE "+this.c+Xa+this.b));else if(this.c<0&&this.b<0)n=this.a.fm(e)+"*?";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}?";else throw nt(new Zo("Token#toString(): NONGREEDYCLOSURE "+this.c+Xa+this.b));return n},l.b=0,l.c=0,N(Yg,"RegEx/Token/ClosureToken",309),D(821,117,U7,uwt),l.am=function(e){return e==0?this.a:this.b},l.em=function(){return 2},l.fm=function(e){var n;return this.b.e==3&&this.b.am(0)==this.a?n=this.a.fm(e)+"+":this.b.e==9&&this.b.am(0)==this.a?n=this.a.fm(e)+"+?":n=this.a.fm(e)+(""+this.b.fm(e)),n},N(Yg,"RegEx/Token/ConcatToken",821),D(1822,117,U7,qte),l.am=function(e){if(e==0)return this.d;if(e==1)return this.b;throw nt(new Zo("Internal Error: "+e))},l.em=function(){return this.b?2:1},l.fm=function(e){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},l.c=0,N(Yg,"RegEx/Token/ConditionToken",1822),D(1823,117,U7,qQt),l.am=function(e){return this.b},l.em=function(){return 1},l.fm=function(e){return"(?"+(this.a==0?"":S5t(this.a))+(this.c==0?"":S5t(this.c))+":"+this.b.fm(e)+")"},l.a=0,l.c=0,N(Yg,"RegEx/Token/ModifierToken",1823),D(822,117,U7,pwt),l.am=function(e){return this.a},l.em=function(){return 1},l.fm=function(e){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.fm(e)+")":n="("+this.a.fm(e)+")";break;case 20:n="(?="+this.a.fm(e)+")";break;case 21:n="(?!"+this.a.fm(e)+")";break;case 22:n="(?<="+this.a.fm(e)+")";break;case 23:n="(?"+this.a.fm(e)+")"}return n},l.b=0,N(Yg,"RegEx/Token/ParenToken",822),D(521,117,{3:1,117:1,521:1},drt),l.bm=function(){return this.b},l.fm=function(e){return this.e==12?"\\"+this.a:Bpn(this.b)},l.a=0,N(Yg,"RegEx/Token/StringToken",521),D(465,117,U7,l_),l.$l=function(e){x2(this,e)},l.am=function(e){return u(Rv(this.a,e),117)},l.em=function(){return this.a?this.a.a.c.length:0},l.fm=function(e){var n,r,s,o,h;if(this.e==1){if(this.a.a.c.length==2)n=u(Rv(this.a,0),117),r=u(Rv(this.a,1),117),r.e==3&&r.am(0)==n?o=n.fm(e)+"+":r.e==9&&r.am(0)==n?o=n.fm(e)+"+?":o=n.fm(e)+(""+r.fm(e));else{for(h=new _g,s=0;s=this.c.b:this.a<=this.c.b},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Vb=function(){return this.b-1},l.Qb=function(){throw nt(new Tg(sge))},l.a=0,l.b=0,N(q8t,"ExclusiveRange/RangeIterator",254);var Eh=w8(TH,"C"),Sr=w8(tS,"I"),xl=w8(cx,"Z"),Db=w8(eS,"J"),Xu=w8(QC,"B"),ga=w8(ZC,"D"),r3=w8(JC,"F"),d5=w8(nS,"S"),T6n=as("org.eclipse.elk.core.labels","ILabelManager"),TLt=as(qa,"DiagnosticChain"),_Lt=as(O0e,"ResourceSet"),CLt=N(qa,"InvocationTargetException",null),B5e=(vR(),psn),R5e=R5e=idn;lon(rKe),Fon("permProps",[[[BH,RH],[jH,"gecko1_8"]],[[BH,RH],[jH,"ie10"]],[[BH,RH],[jH,"ie8"]],[[BH,RH],[jH,"ie9"]],[[BH,RH],[jH,"safari"]]]),R5e(null,"elk",null)}).call(this)}).call(this,typeof d0<"u"?d0:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(f,p,v){function m(P,F){if(!(P instanceof F))throw new TypeError("Cannot call a class as a function")}function b(P,F){if(!P)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return F&&(typeof F=="object"||typeof F=="function")?F:P}function E(P,F){if(typeof F!="function"&&F!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof F);P.prototype=Object.create(F&&F.prototype,{constructor:{value:P,enumerable:!1,writable:!0,configurable:!0}}),F&&(Object.setPrototypeOf?Object.setPrototypeOf(P,F):P.__proto__=F)}var C=f("./elk-api.js").default,A=function(P){E(F,P);function F(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};m(this,F);var R=Object.assign({},j),H=!1;try{f.resolve("web-worker"),H=!0}catch{}if(j.workerUrl)if(H){var Y=f("web-worker");R.workerFactory=function(it){return new Y(it)}}else console.warn(`Web worker requested but 'web-worker' package not installed. +`)}return[]}function Ffn(t){var e;return e=(qee(),kge),e[t>>>28]|e[t>>24&15]<<4|e[t>>20&15]<<8|e[t>>16&15]<<12|e[t>>12&15]<<16|e[t>>8&15]<<20|e[t>>4&15]<<24|e[t&15]<<28}function Ase(t){var e,n,r;t.b==t.c&&(r=t.a.length,n=Tyt(b.Math.max(8,r))<<1,t.b!=0?(e=uf(t.a,n),Xee(t,e,r),t.a=e,t.b=0):Yzt(t.a,n),t.c=r)}function Bfn(t,e){var n;return n=t.b,n.Xe((ci(),hl))?n.Hf()==(be(),Bn)?-n.rf().a-Xt(ye(n.We(hl))):e+Xt(ye(n.We(hl))):n.Hf()==(be(),Bn)?-n.rf().a:e}function ZI(t){var e;return t.b.c.length!=0&&u(Fe(t.b,0),70).a?u(Fe(t.b,0),70).a:(e=rrt(t),e??""+(t.c?Ro(t.c.a,t,0):-1))}function Wz(t){var e;return t.f.c.length!=0&&u(Fe(t.f,0),70).a?u(Fe(t.f,0),70).a:(e=rrt(t),e??""+(t.i?Ro(t.i.j,t,0):-1))}function Rfn(t,e){var n,r;if(e<0||e>=t.gc())return null;for(n=e;n0?t.c:0),s=b.Math.max(s,e.d),++r;t.e=o,t.b=s}function $fn(t){var e,n;if(!t.b)for(t.b=y$(u(t.f,118).Ag().i),n=new er(u(t.f,118).Ag());n.e!=n.i.gc();)e=u(dr(n),137),ue(t.b,new net(e));return t.b}function zfn(t,e){var n,r,s;if(e.dc())return f8(),f8(),lN;for(n=new IWt(t,e.gc()),s=new er(t);s.e!=s.i.gc();)r=dr(s),e.Hc(r)&&Mr(n,r);return n}function V3t(t,e,n,r){return e==0?r?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),t.o):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),fI(t.o)):jz(t,e,n,r)}function mst(t){var e,n;if(t.rb)for(e=0,n=t.rb.i;e>22),s+=r>>22,s<0)?!1:(t.l=n&ul,t.m=r&ul,t.h=s&W0,!0)}function Vfn(t,e,n,r,s,o,h){var d,w;return!(e.Ae()&&(w=t.a.ue(n,r),w<0||!s&&w==0)||e.Be()&&(d=t.a.ue(n,o),d>0||!h&&d==0))}function Ufn(t,e){J8();var n;if(n=t.j.g-e.j.g,n!=0)return 0;switch(t.j.g){case 2:return qit(e,mTt)-qit(t,mTt);case 4:return qit(t,wTt)-qit(e,wTt)}return 0}function Wfn(t){switch(t.g){case 0:return klt;case 1:return Elt;case 2:return Tlt;case 3:return Clt;case 4:return PG;case 5:return _lt;default:return null}}function Co(t,e,n){var r,s;return r=(s=new Ktt,f2(s,e),Xc(s,n),Mr((!t.c&&(t.c=new he(zw,t,12,10)),t.c),s),s),Ig(r,0),ty(r,1),Pg(r,!0),Ng(r,!0),r}function r6(t,e){var n,r;if(e>=t.i)throw rt(new Vet(e,t.i));return++t.j,n=t.g[e],r=t.i-e-1,r>0&&Ic(t.g,e+1,t.g,e,r),Ji(t.g,--t.i,null),t.fi(e,n),t.ci(),n}function Lse(t,e){var n,r;return t.Db>>16==17?t.Cb.ih(t,21,Gh,e):(r=no(u(yn((n=u(In(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Kfn(t){var e,n,r,s;for(vn(),Xs(t.c,t.a),s=new S(t.c);s.an.a.c.length))throw rt(new Pn("index must be >= 0 and <= layer node count"));t.c&&vu(t.c.a,t),t.c=n,n&&$m(n.a,e,t)}function Nse(t,e){var n,r,s;for(r=new ar(lr(z0(t).a.Kc(),new z));zr(r);)return n=u(Lr(r),17),s=u(e.Kb(n),10),new jk(Ar(s.n.b+s.o.b/2));return I9(),I9(),gut}function Pse(t,e){this.c=new Cr,this.a=t,this.b=e,this.d=u(Q(t,(se(),Y4)),304),Gt(Q(t,(Te(),iCt)))===Gt((bI(),FG))?this.e=new fqt:this.e=new hqt}function t1n(t,e){var n,r,s,o;for(o=0,r=new S(t);r.a>16==6?t.Cb.ih(t,6,Ws,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),YV)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Q3t(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,1,sN,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),RAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Z3t(t,e){var n,r;return t.Db>>16==9?t.Cb.ih(t,9,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),$At)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Bse(t,e){var n,r;return t.Db>>16==5?t.Cb.ih(t,9,iU,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),tp)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function J3t(t,e){var n,r;return t.Db>>16==3?t.Cb.ih(t,0,oN,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),Jg)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Rse(t,e){var n,r;return t.Db>>16==7?t.Cb.ih(t,6,r1,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),np)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function jse(){this.a=new XF,this.g=new Hz,this.j=new Hz,this.b=new Cr,this.d=new Hz,this.i=new Hz,this.k=new Cr,this.c=new Cr,this.e=new Cr,this.f=new Cr}function i1n(t,e,n){var r,s,o;for(n<0&&(n=0),o=t.i,s=n;soot)return lE(t,r);if(r==t)return!0}}return!1}function a1n(t){switch(gj(),t.q.g){case 5:Eoe(t,(be(),Nn)),Eoe(t,mr);break;case 4:wce(t,(be(),Nn)),wce(t,mr);break;default:whe(t,(be(),Nn)),whe(t,mr)}}function o1n(t){switch(gj(),t.q.g){case 5:Roe(t,(be(),Hn)),Roe(t,Bn);break;case 4:Yie(t,(be(),Hn)),Yie(t,Bn);break;default:mhe(t,(be(),Hn)),mhe(t,Bn)}}function c1n(t){var e,n;e=u(Q(t,(Zf(),rbe)),19),e?(n=e.a,n==0?Jt(t,(Gp(),aG),new zit):Jt(t,(Gp(),aG),new T$(n))):Jt(t,(Gp(),aG),new T$(1))}function u1n(t,e){var n;switch(n=t.i,e.g){case 1:return-(t.n.b+t.o.b);case 2:return t.n.a-n.o.a;case 3:return t.n.b-n.o.b;case 4:return-(t.n.a+t.o.a)}return 0}function l1n(t,e){switch(t.g){case 0:return e==(hh(),fb)?_G:SG;case 1:return e==(hh(),fb)?_G:vO;case 2:return e==(hh(),fb)?vO:SG;default:return vO}}function tD(t,e){var n,r,s;for(vu(t.a,e),t.e-=e.r+(t.a.c.length==0?0:t.c),s=jkt,r=new S(t.a);r.a>16==3?t.Cb.ih(t,12,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),BAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function e4t(t,e){var n,r;return t.Db>>16==11?t.Cb.ih(t,10,ns,e):(r=no(u(yn((n=u(In(t,16),26),n||(Zc(),jAt)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function $se(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,11,Gh,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),ep)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function zse(t,e){var n,r;return t.Db>>16==10?t.Cb.ih(t,12,Vh,e):(r=no(u(yn((n=u(In(t,16),26),n||(dn(),e3)),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Lh(t){var e;return!(t.Bb&1)&&t.r&&t.r.kh()&&(e=u(t.r,49),t.r=u(Kp(t,e),138),t.r!=e&&t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,9,8,e,t.r))),t.r}function xst(t,e,n){var r;return r=ct(ot(ia,1),vo,25,15,[_4t(t,(Kf(),sc),e,n),_4t(t,tu,e,n),_4t(t,ac,e,n)]),t.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function h1n(t,e){var n,r,s;if(s=sfn(t,e),s.c.length!=0)for(Xs(s,new FY),n=s.c.length,r=0;r>19,k=e.h>>19,w!=k?k-w:(s=t.h,d=e.h,s!=d?s-d:(r=t.m,h=e.m,r!=h?r-h:(n=t.l,o=e.l,n-o)))}function Kz(){Kz=Z,HEt=(gq(),Out),qEt=new mn(Gxt,HEt),zEt=($$(),Dut),$Et=new mn(Vxt,zEt),jEt=(Nz(),Iut),REt=new mn(Uxt,jEt),BEt=new mn(Wxt,(Fn(),!0))}function c_(t,e,n){var r,s;r=e*n,Et(t.g,145)?(s=Hx(t),s.f.d?s.f.a||(t.d.a+=r+P1):(t.d.d-=r+P1,t.d.a+=r+P1)):Et(t.g,10)&&(t.d.d-=r,t.d.a+=2*r)}function qse(t,e,n){var r,s,o,h,d;for(s=t[n.g],d=new S(e.d);d.a0?t.g:0),++n;e.b=r,e.e=s}function Hse(t){var e,n,r;if(r=t.b,hGt(t.i,r.length)){for(n=r.length*2,t.b=Pt(wut,LD,317,n,0,1),t.c=Pt(wut,LD,317,n,0,1),t.f=n-1,t.i=0,e=t.a;e;e=e.c)oD(t,e,e);++t.g}}function m1n(t,e,n,r){var s,o,h,d;for(s=0;sh&&(d=h/r),s>o&&(w=o/s),ud(t,b.Math.min(d,w)),t}function x1n(){yq();var t,e;try{if(e=u(f4t((Mp(),Uh),GE),2014),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new J5}function k1n(){Nte();var t,e;try{if(e=u(f4t((Mp(),Uh),L2),2024),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new Em}function E1n(){yq();var t,e;try{if(e=u(f4t((Mp(),Uh),Ph),1941),e)return e}catch(n){if(n=Wi(n),Et(n,102))t=n,Jvt((Nr(),t));else throw rt(n)}return new YZ}function T1n(t,e,n){var r,s;return s=t.e,t.e=e,t.Db&4&&!(t.Db&1)&&(r=new Qs(t,1,4,s,e),n?n.Ei(r):n=r),s!=e&&(e?n=_E(t,oq(t,e),n):n=_E(t,t.a,n)),n}function Gse(){_R.call(this),this.e=-1,this.a=!1,this.p=_a,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=_a}function C1n(t,e){var n,r,s;if(r=t.b.d.d,t.a||(r+=t.b.d.a),s=e.b.d.d,e.a||(s+=e.b.d.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function _1n(t,e){var n,r,s;if(r=t.b.b.d,t.a||(r+=t.b.b.a),s=e.b.b.d,e.a||(s+=e.b.b.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function S1n(t,e){var n,r,s;if(r=t.b.g.d,t.a||(r+=t.b.g.a),s=e.b.g.d,e.a||(s+=e.b.g.a),n=Ls(r,s),n==0){if(!t.a&&e.a)return-1;if(!e.a&&t.a)return 1}return n}function r4t(){r4t=Z,vbe=Ku(bi(bi(bi(new Hs,(Wa(),qc),(ro(),iTt)),qc,sTt),Io,aTt),Io,W7t),mbe=bi(bi(new Hs,qc,$7t),qc,K7t),wbe=Ku(new Hs,Io,X7t)}function A1n(t){var e,n,r,s,o;for(e=u(Q(t,(se(),mS)),83),o=t.n,r=e.Cc().Kc();r.Ob();)n=u(r.Pb(),306),s=n.i,s.c+=o.a,s.d+=o.b,n.c?aue(n):oue(n);Jt(t,mS,null)}function L1n(t,e,n){var r,s;switch(s=t.b,r=s.d,e.g){case 1:return-r.d-n;case 2:return s.o.a+r.c+n;case 3:return s.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function M1n(t){var e,n,r,s,o;if(r=0,s=FE,t.b)for(e=0;e<360;e++)n=e*.017453292519943295,W5t(t,t.d,0,0,I4,n),o=t.b.ig(t.d),o0&&(h=(o&vi)%t.d.length,s=r5t(t,h,o,e),s)?(d=s.ed(n),d):(r=t.tj(o,e,n),t.c.Fc(r),null)}function a4t(t,e){var n,r,s,o;switch(Og(t,e)._k()){case 3:case 2:{for(n=k4(e),s=0,o=n.i;s=0;r--)if(hn(t[r].d,e)||hn(t[r].d,n)){t.length>=r+1&&t.splice(0,r+1);break}return t}function eD(t,e){var n;return Bo(t)&&Bo(e)&&(n=t/e,DD0&&(t.b+=2,t.a+=r):(t.b+=1,t.a+=b.Math.min(r,s))}function Qse(t,e){var n,r;if(r=!1,ea(e)&&(r=!0,Bx(t,new Hm(Br(e)))),r||Et(e,236)&&(r=!0,Bx(t,(n=fvt(u(e,236)),new y9(n)))),!r)throw rt(new tet(x8t))}function K1n(t,e,n,r){var s,o,h;return s=new F0(t.e,1,10,(h=e.c,Et(h,88)?u(h,26):(dn(),Wh)),(o=n.c,Et(o,88)?u(o,26):(dn(),Wh)),Fg(t,e),!1),r?r.Ei(s):r=s,r}function u4t(t){var e,n;switch(u(Q(Fa(t),(Te(),X9t)),420).g){case 0:return e=t.n,n=t.o,new $e(e.a+n.a/2,e.b+n.b/2);case 1:return new yo(t.n);default:return null}}function nD(){nD=Z,BG=new Q9(K0,0),PTt=new Q9("LEFTUP",1),BTt=new Q9("RIGHTUP",2),NTt=new Q9("LEFTDOWN",3),FTt=new Q9("RIGHTDOWN",4),Slt=new Q9("BALANCED",5)}function Y1n(t,e,n){var r,s,o;if(r=Ls(t.a[e.p],t.a[n.p]),r==0){if(s=u(Q(e,(se(),I6)),15),o=u(Q(n,I6),15),s.Hc(n))return-1;if(o.Hc(e))return 1}return r}function X1n(t){switch(t.g){case 1:return new tZ;case 2:return new eZ;case 3:return new JQ;case 0:return null;default:throw rt(new Pn(xct+(t.f!=null?t.f:""+t.g)))}}function l4t(t,e,n){switch(e){case 1:!t.n&&(t.n=new he(qo,t,1,7)),xr(t.n),!t.n&&(t.n=new he(qo,t,1,7)),rs(t.n,u(n,14));return;case 2:qC(t,Br(n));return}Myt(t,e,n)}function h4t(t,e,n){switch(e){case 3:Xv(t,Xt(ye(n)));return;case 4:Qv(t,Xt(ye(n)));return;case 5:yu(t,Xt(ye(n)));return;case 6:xu(t,Xt(ye(n)));return}l4t(t,e,n)}function Xz(t,e,n){var r,s,o;o=(r=new Ktt,r),s=O1(o,e,null),s&&s.Fi(),Xc(o,n),Mr((!t.c&&(t.c=new he(zw,t,12,10)),t.c),o),Ig(o,0),ty(o,1),Pg(o,!0),Ng(o,!0)}function f4t(t,e){var n,r,s;return n=U9(t.g,e),Et(n,235)?(s=u(n,235),s.Qh()==null,s.Nh()):Et(n,498)?(r=u(n,1938),s=r.b,s):null}function Q1n(t,e,n,r){var s,o;return Ar(e),Ar(n),o=u(wC(t.d,e),19),jte(!!o,"Row %s not in %s",e,t.e),s=u(wC(t.b,n),19),jte(!!s,"Column %s not in %s",n,t.c),Gne(t,o.a,s.a,r)}function Zse(t,e,n,r,s,o,h){var d,w,k,C,M;if(C=s[o],k=o==h-1,d=k?r:0,M=mse(d,C),r!=10&&ct(ot(t,h-o),e[o],n[o],d,M),!k)for(++o,w=0;w1||d==-1?(o=u(w,15),s.Wb(ihn(t,o))):s.Wb(uat(t,u(w,56)))))}function idn(t,e,n,r){jHt();var s=dut;function o(){for(var h=0;hwct)return n;s>-1e-6&&++n}return n}function p4t(t,e){var n;e!=t.b?(n=null,t.b&&(n=c$(t.b,t,-4,n)),e&&(n=e6(e,t,-4,n)),n=Nre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function eae(t,e){var n;e!=t.f?(n=null,t.f&&(n=c$(t.f,t,-1,n)),e&&(n=e6(e,t,-1,n)),n=Pre(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,0,e,e))}function nae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new xg,e=n.Kc();e.Ob();)fo(r,(Di(),Br(e.Pb()))),r.a+=" ";return Wet(r,r.a.length-1)}function rae(t){var e,n,r;if(t==null)return null;if(n=u(t,15),n.dc())return"";for(r=new xg,e=n.Kc();e.Ob();)fo(r,(Di(),Br(e.Pb()))),r.a+=" ";return Wet(r,r.a.length-1)}function fdn(t,e,n){var r,s;return r=t.c[e.c.p][e.p],s=t.c[n.c.p][n.p],r.a!=null&&s.a!=null?Pnt(r.a,s.a):r.a!=null?-1:s.a!=null?1:0}function ddn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Qb(o),d=(n.b-n.a)*n.c<0?(Ip(),Ab):new Pp(n);d.Ob();)h=u(d.Pb(),19),s=_8(e,h.a),r=new izt(t),nnn(r.a,s)}function gdn(t,e){var n,r,s,o,h,d;if(e)for(o=e.a.length,n=new Qb(o),d=(n.b-n.a)*n.c<0?(Ip(),Ab):new Pp(n);d.Ob();)h=u(d.Pb(),19),s=_8(e,h.a),r=new Y$t(t),enn(r.a,s)}function pdn(t){var e;if(t!=null&&t.length>0&&ba(t,t.length-1)==33)try{return e=toe(Dl(t,0,t.length-1)),e.e==null}catch(n){if(n=Wi(n),!Et(n,32))throw rt(n)}return!1}function iae(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?zp(t,3,r,null,o,EE(t,r,o,Et(r,99)&&(u(r,18).Bb&Ya)!=0),!0):zp(t,1,r,r.zj(),o,-1,!0),n?n.Ei(s):n=s,n}function bdn(){var t,e,n;for(e=0,t=0;t<1;t++){if(n=o5t((Rr(t,1),"X".charCodeAt(t))),n==0)throw rt(new Fr("Unknown Option: "+"X".substr(t)));e|=n}return e}function vdn(t,e,n){var r,s,o;switch(r=Fa(e),s=Ez(r),o=new Mc,Uo(o,e),n.g){case 1:Fs(o,HI(Jx(s)));break;case 2:Fs(o,Jx(s))}return Jt(o,(Te(),zy),ye(Q(t,zy))),o}function b4t(t){var e,n;return e=u(Lr(new ar(lr(jo(t.a).a.Kc(),new z))),17),n=u(Lr(new ar(lr(Ms(t.a).a.Kc(),new z))),17),je(Re(Q(e,(se(),$1))))||je(Re(Q(n,$1)))}function g4(){g4=Z,LG=new kM("ONE_SIDE",0),IG=new kM("TWO_SIDES_CORNER",1),DG=new kM("TWO_SIDES_OPPOSING",2),MG=new kM("THREE_SIDES",3),AG=new kM("FOUR_SIDES",4)}function Cst(t,e,n,r,s){var o,h;o=u(Pl(Ri(e.Oc(),new OX),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),h=u(o2(t.b,n,r),15),s==0?h.Wc(0,o):h.Gc(o)}function wdn(t,e){var n,r,s,o,h;for(o=new S(e.a);o.a0&&Mse(this,this.c-1,(be(),Hn)),this.c0&&t[0].length>0&&(this.c=je(Re(Q(Fa(t[0][0]),(se(),ZTt))))),this.a=Pt(ome,te,2018,t.length,0,2),this.b=Pt(cme,te,2019,t.length,0,2),this.d=new Sre}function Edn(t){return t.c.length==0?!1:(An(0,t.c.length),u(t.c[0],17)).c.i.k==(Gn(),Zs)?!0:A8(pu(new Tn(null,new _n(t,16)),new cQ),new uQ)}function Tdn(t,e,n){return wr(n,"Tree layout",1),w$(t.b),Ud(t.b,(uE(),vV),vV),Ud(t.b,PS,PS),Ud(t.b,PO,PO),Ud(t.b,FS,FS),t.a=Tq(t.b,e),J2n(t,e,Rc(n,1)),or(n),e}function aae(t,e){var n,r,s,o,h,d,w;for(d=gy(e),o=e.f,w=e.g,h=b.Math.sqrt(o*o+w*w),s=0,r=new S(d);r.a=0?(n=eD(t,Nq),r=UI(t,Nq)):(e=zm(t,1),n=eD(e,5e8),r=UI(e,5e8),r=Oa(M0(r,1),Ps(t,1))),C1(M0(r,32),Ps(n,co))}function uae(t,e,n){var r,s;switch(r=(Qn(e.b!=0),u(ch(e,e.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=t.f;break;case 3:r.a=0;break;default:r.a=t.g}return s=ei(e,0),XM(s,r),e}function lae(t,e,n,r){var s,o,h,d,w;switch(w=t.b,o=e.d,h=o.j,d=M3t(h,w.d[h.g],n),s=Li(nc(o.n),o.a),o.j.g){case 1:case 3:d.a+=s.a;break;case 2:case 4:d.b+=s.b}hs(r,d,r.c.b,r.c)}function Fdn(t,e,n){var r,s,o,h;for(h=Ro(t.e,e,0),o=new Npt,o.b=n,r=new ha(t.e,h);r.b1;e>>=1)e&1&&(r=J3(r,n)),n.d==1?n=J3(n,n):n=new Nie(Hue(n.a,n.d,Pt(Tr,Xr,25,n.d<<1,15,1)));return r=J3(r,n),r}function E4t(){E4t=Z;var t,e,n,r;for(TEt=Pt(ia,vo,25,25,15,1),CEt=Pt(ia,vo,25,33,15,1),r=152587890625e-16,e=32;e>=0;e--)CEt[e]=r,r*=.5;for(n=1,t=24;t>=0;t--)TEt[t]=n,n*=.5}function qdn(t){var e,n;if(je(Re(qe(t,(Te(),$y))))){for(n=new ar(lr(G0(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),79),uw(e)&&je(Re(qe(e,P2))))return!0}return!1}function hae(t,e){var n,r,s;Ns(t.f,e)&&(e.b=t,r=e.c,Ro(t.j,r,0)!=-1||ue(t.j,r),s=e.d,Ro(t.j,s,0)!=-1||ue(t.j,s),n=e.a.b,n.c.length!=0&&(!t.i&&(t.i=new Hie(t)),icn(t.i,n)))}function Hdn(t){var e,n,r,s,o;return n=t.c.d,r=n.j,s=t.d.d,o=s.j,r==o?n.p=0&&hn(t.substr(e,3),"GMT")||e>=0&&hn(t.substr(e,3),"UTC"))&&(n[0]=e+3),X5t(t,n,r)}function Vdn(t,e){var n,r,s,o,h;for(o=t.g.a,h=t.g.b,r=new S(t.d);r.an;o--)t[o]|=e[o-n-1]>>>h,t[o-1]=e[o-n-1]<=t.f)break;o.c[o.c.length]=n}return o}function C4t(t){var e,n,r,s;for(e=null,s=new S(t.wf());s.a0&&Ic(t.g,e,t.g,e+r,d),h=n.Kc(),t.i+=r,s=0;so&&oen(k,oee(n[d],kEt))&&(s=d,o=w);return s>=0&&(r[0]=e+o),s}function Zdn(t,e){var n;if(n=iUt(t.b.Hf(),e.b.Hf()),n!=0)return n;switch(t.b.Hf().g){case 1:case 2:return du(t.b.sf(),e.b.sf());case 3:case 4:return du(e.b.sf(),t.b.sf())}return 0}function Jdn(t){var e,n,r;for(r=t.e.c.length,t.a=Xb(Tr,[te,Xr],[48,25],15,[r,r],2),n=new S(t.c);n.a>4&15,o=t[r]&15,h[s++]=zAt[n],h[s++]=zAt[o];return Ah(h,0,h.length)}function n0n(t,e,n){var r,s,o;return r=e.ak(),o=e.dd(),s=r.$j()?zp(t,4,r,o,null,EE(t,r,o,Et(r,99)&&(u(r,18).Bb&Ya)!=0),!0):zp(t,r.Kj()?2:1,r,o,r.zj(),-1,!0),n?n.Ei(s):n=s,n}function Eu(t){var e,n;return t>=Ya?(e=OD+(t-Ya>>10&1023)&ms,n=56320+(t-Ya&1023)&ms,String.fromCharCode(e)+(""+String.fromCharCode(n))):String.fromCharCode(t&ms)}function r0n(t,e){Bm();var n,r,s,o;return s=u(u(Ai(t.r,e),21),84),s.gc()>=2?(r=u(s.Kc().Pb(),111),n=t.u.Hc((Qu(),JS)),o=t.u.Hc(G6),!r.a&&!n&&(s.gc()==2||o)):!1}function gae(t,e,n,r,s){var o,h,d;for(o=Qce(t,e,n,r,s),d=!1;!o;)sq(t,s,!0),d=!0,o=Qce(t,e,n,r,s);d&&sq(t,s,!1),h=git(s),h.c.length!=0&&(t.d&&t.d.lg(h),gae(t,s,n,r,h))}function tq(){tq=Z,bft=new rC(K0,0),pAt=new rC("DIRECTED",1),vAt=new rC("UNDIRECTED",2),dAt=new rC("ASSOCIATION",3),bAt=new rC("GENERALIZATION",4),gAt=new rC("DEPENDENCY",5)}function i0n(t,e){var n;if(!k1(t))throw rt(new Fo(ude));switch(n=k1(t),e.g){case 1:return-(t.j+t.f);case 2:return t.i-n.g;case 3:return t.j-n.f;case 4:return-(t.i+t.g)}return 0}function dE(t,e){var n,r;for(On(e),r=t.b.c.length,ue(t.b,e);r>0;){if(n=r,r=(r-1)/2|0,t.a.ue(Fe(t.b,r),e)<=0)return ah(t.b,n,e),!0;ah(t.b,n,Fe(t.b,r))}return ah(t.b,r,e),!0}function _4t(t,e,n,r){var s,o;if(s=0,n)s=wz(t.a[n.g][e.g],r);else for(o=0;o=d)}function S4t(t,e,n,r){var s;if(s=!1,ea(r)&&(s=!0,p8(e,n,Br(r))),s||Om(r)&&(s=!0,S4t(t,e,n,r)),s||Et(r,236)&&(s=!0,Jb(e,n,u(r,236))),!s)throw rt(new tet(x8t))}function a0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<(Ru(),hLt).length;++r)if(hn(hLt[r],s))return r}return 0}function o0n(t,e){var n,r,s;if(n=e.Hh(t.a),n&&(s=Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),Nh),s!=null)){for(r=1;r<(Ru(),fLt).length;++r)if(hn(fLt[r],s))return r}return 0}function pae(t,e){var n,r,s,o;if(On(e),o=t.a.gc(),o0?1:0;o.a[s]!=n;)o=o.a[s],s=t.a.ue(n.d,o.d)>0?1:0;o.a[s]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function l0n(t){Qu();var e,n;return e=ji(tg,ct(ot(GV,1),ae,273,0,[xb])),!(AI(h$(e,t))>1||(n=ji(JS,ct(ot(GV,1),ae,273,0,[ZS,G6])),AI(h$(n,t))>1))}function L4t(t,e){var n;n=Fc((Mp(),Uh),t),Et(n,498)?xo(Uh,t,new NVt(this,e)):xo(Uh,t,this),Dst(this,e),e==(t8(),JAt)?(this.wb=u(this,1939),u(e,1941)):this.wb=(jp(),Ln)}function h0n(t){var e,n,r;if(t==null)return null;for(e=null,n=0;n=$g?"error":r>=900?"warn":r>=800?"info":"log"),eXt(n,t.a),t.b&&L5t(e,n,t.b,"Exception: ",!0))}function Q(t,e){var n,r;return r=(!t.q&&(t.q=new Cr),Jn(t.q,e)),r??(n=e.wg(),Et(n,4)&&(n==null?(!t.q&&(t.q=new Cr),Ux(t.q,e)):(!t.q&&(t.q=new Cr),ki(t.q,e,n))),n)}function Wa(){Wa=Z,Ad=new xM("P1_CYCLE_BREAKING",0),lb=new xM("P2_LAYERING",1),ou=new xM("P3_NODE_ORDERING",2),qc=new xM("P4_NODE_PLACEMENT",3),Io=new xM("P5_EDGE_ROUTING",4)}function mae(t,e){var n,r,s,o,h;for(s=e==1?Qut:Xut,r=s.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),103),h=u(Ai(t.f.c,n),21).Kc();h.Ob();)o=u(h.Pb(),46),vu(t.b.b,o.b),vu(t.b.a,u(o.b,81).d)}function f0n(t,e){$C();var n;if(t.c==e.c){if(t.b==e.b||Bon(t.b,e.b)){if(n=UYe(t.b)?1:-1,t.a&&!e.a)return n;if(!t.a&&e.a)return-n}return du(t.b.g,e.b.g)}else return Ls(t.c,e.c)}function d0n(t,e){var n;wr(e,"Hierarchical port position processing",1),n=t.b,n.c.length>0&&Rue((An(0,n.c.length),u(n.c[0],29)),t),n.c.length>1&&Rue(u(Fe(n,n.c.length-1),29),t),or(e)}function yae(t,e){var n,r,s;if(I4t(t,e))return!0;for(r=new S(e);r.a=s||e<0)throw rt(new mo(Wct+e+S2+s));if(n>=s||n<0)throw rt(new mo(Kct+n+S2+s));return e!=n?r=(o=t.Ti(n),t.Hi(e,o),o):r=t.Oi(n),r}function Eae(t){var e,n,r;if(r=t,t)for(e=0,n=t.Ug();n;n=n.Ug()){if(++e>oot)return Eae(n);if(r=n,n==t)throw rt(new Fo("There is a cycle in the containment hierarchy of "+t))}return r}function Qp(t){var e,n,r;for(r=new c2(Ka,"[","]"),n=t.Kc();n.Ob();)e=n.Pb(),P0(r,Gt(e)===Gt(t)?"(this Collection)":e==null?Tu:$o(e));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function I4t(t,e){var n,r;if(r=!1,e.gc()<2)return!1;for(n=0;nr&&(Rr(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return r>0||e1&&(t.j.b+=t.e)):(t.j.a+=n.a,t.j.b=b.Math.max(t.j.b,n.b),t.d.c.length>1&&(t.j.a+=t.e))}function Zp(){Zp=Z,r2e=ct(ot(Xa,1),xc,61,0,[(be(),Nn),Hn,mr]),n2e=ct(ot(Xa,1),xc,61,0,[Hn,mr,Bn]),i2e=ct(ot(Xa,1),xc,61,0,[mr,Bn,Nn]),s2e=ct(ot(Xa,1),xc,61,0,[Bn,Nn,Hn])}function p0n(t,e,n,r){var s,o,h,d,w,k,C;if(h=t.c.d,d=t.d.d,h.j!=d.j)for(C=t.b,s=h.j,w=null;s!=d.j;)w=e==0?kz(s):t3t(s),o=M3t(s,C.d[s.g],n),k=M3t(w,C.d[w.g],n),ni(r,Li(o,k)),s=w}function b0n(t,e,n,r){var s,o,h,d,w;return h=Ise(t.a,e,n),d=u(h.a,19).a,o=u(h.b,19).a,r&&(w=u(Q(e,(se(),Zu)),10),s=u(Q(n,Zu),10),w&&s&&(BZt(t.b,w,s),d+=t.b.i,o+=t.b.e)),d>o}function Cae(t){var e,n,r,s,o,h,d,w,k;for(this.a=tse(t),this.b=new le,n=t,r=0,s=n.length;runt(t.d).c?(t.i+=t.g.c,Kit(t.d)):unt(t.d).c>unt(t.g).c?(t.e+=t.d.c,Kit(t.g)):(t.i+=nYt(t.g),t.e+=nYt(t.d),Kit(t.g),Kit(t.d))}function m0n(t,e,n){var r,s,o,h;for(o=e.q,h=e.r,new t2((Vf(),pb),e,o,1),new t2(pb,o,h,1),s=new S(n);s.ad&&(w=d/r),s>o&&(k=o/s),h=b.Math.min(w,k),t.a+=h*(e.a-t.a),t.b+=h*(e.b-t.b)}function E0n(t,e,n,r,s){var o,h;for(h=!1,o=u(Fe(n.b,0),33);Rmn(t,e,o,r,s)&&(h=!0,ndn(n,o),n.b.c.length!=0);)o=u(Fe(n.b,0),33);return n.b.c.length==0&&tD(n.j,n),h&&Vz(e.q),h}function T0n(t,e){y4();var n,r,s,o;if(e.b<2)return!1;for(o=ei(e,0),n=u(ti(o),8),r=n;o.b!=o.d.c;){if(s=u(ti(o),8),Qst(t,r,s))return!0;r=s}return!!Qst(t,r,n)}function O4t(t,e,n,r){var s,o;return n==0?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),kj(t.o,e,r)):(o=u(yn((s=u(In(t,16),26),s||t.zh()),n),66),o.Nj().Rj(t,iu(t),n-Zn(t.zh()),e,r))}function Dst(t,e){var n;e!=t.sb?(n=null,t.sb&&(n=u(t.sb,49).ih(t,1,nA,n)),e&&(n=u(e,49).gh(t,1,nA,n)),n=Wyt(t,e,n),n&&n.Fi()):t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,4,e,e))}function C0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new ezt(t),F8(n.a,(On(s),s)),o=R0(e,"y"),r=new nzt(t),R8(r.a,(On(o),o));else throw rt(new ad("All edge sections need an end point."))}function _0n(t,e){var n,r,s,o;if(e)s=R0(e,"x"),n=new Z$t(t),B8(n.a,(On(s),s)),o=R0(e,"y"),r=new J$t(t),j8(r.a,(On(o),o));else throw rt(new ad("All edge sections need a start point."))}function S0n(t,e){var n,r,s,o,h,d,w;for(r=hre(t),o=0,d=r.length;o>22-e,s=t.h<>22-e):e<44?(n=0,r=t.l<>44-e):(n=0,r=0,s=t.l<t)throw rt(new Pn("k must be smaller than n"));return e==0||e==t?1:t==0?0:o4t(t)/(o4t(e)*o4t(t-e))}function N4t(t,e){var n,r,s,o;for(n=new r2t(t);n.g==null&&!n.c?Fwt(n):n.g==null||n.i!=0&&u(n.g[n.i-1],47).Ob();)if(o=u(aq(n),56),Et(o,160))for(r=u(o,160),s=0;s>4],e[n*2+1]=uU[o&15];return Ah(e,0,e.length)}function G0n(t){Qj();var e,n,r;switch(r=t.c.length,r){case 0:return hge;case 1:return e=u(poe(new S(t)),42),gtn(e.cd(),e.dd());default:return n=u(D1(t,Pt(M2,Dq,42,t.c.length,0,1)),165),new Ztt(n)}}function V0n(t){var e,n,r,s,o,h;for(e=new P3,n=new P3,qp(e,t),qp(n,t);n.b!=n.c;)for(s=u(Fx(n),37),h=new S(s.a);h.a0&&vD(t,n,e),s):Spn(t,e,n)}function Oae(t,e,n){var r,s,o,h;if(e.b!=0){for(r=new Qi,h=ei(e,0);h.b!=h.d.c;)o=u(ti(h),86),Ua(r,byt(o)),s=o.e,s.a=u(Q(o,(fc(),Lht)),19).a,s.b=u(Q(o,t_t),19).a;Oae(t,r,Rc(n,r.b/t.a|0))}}function Nae(t,e){var n,r,s,o,h;if(t.e<=e||Jrn(t,t.g,e))return t.g;for(o=t.r,r=t.g,h=t.r,s=(o-r)/2+r;r+11&&(t.e.b+=t.a)):(t.e.a+=n.a,t.e.b=b.Math.max(t.e.b,n.b),t.d.c.length>1&&(t.e.a+=t.a))}function X0n(t){var e,n,r,s;switch(s=t.i,e=s.b,r=s.j,n=s.g,s.a.g){case 0:n.a=(t.g.b.o.a-r.a)/2;break;case 1:n.a=e.d.n.a+e.d.a.a;break;case 2:n.a=e.d.n.a+e.d.a.a-r.a;break;case 3:n.b=e.d.n.b+e.d.a.b}}function Pae(t,e,n,r,s){if(rr&&(t.a=r),t.bs&&(t.b=s),t}function Q0n(t){if(Et(t,149))return _2n(u(t,149));if(Et(t,229))return Eln(u(t,229));if(Et(t,23))return M0n(u(t,23));throw rt(new Pn(k8t+Qp(new wl(ct(ot(Xn,1),Ie,1,5,[t])))))}function Z0n(t,e,n,r,s){var o,h,d;for(o=!0,h=0;h>>s|n[h+r+1]<>>s,++h}return o}function R4t(t,e,n,r){var s,o,h;if(e.k==(Gn(),Zs)){for(o=new ar(lr(jo(e).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),h=s.c.i.k,h==Zs&&t.c.a[s.c.i.c.p]==r&&t.c.a[e.c.p]==n)return!0}return!1}function J0n(t,e){var n,r,s,o;return e&=63,n=t.h&W0,e<22?(o=n>>>e,s=t.m>>e|n<<22-e,r=t.l>>e|t.m<<22-e):e<44?(o=0,s=n>>>e-22,r=t.m>>e-22|t.h<<44-e):(o=0,s=0,r=n>>>e-44),ru(r&ul,s&ul,o&W0)}function Fae(t,e,n,r){var s;this.b=r,this.e=t==(Zv(),DS),s=e[n],this.d=Xb(dl,[te,i0],[177,25],16,[s.length,s.length],2),this.a=Xb(Tr,[te,Xr],[48,25],15,[s.length,s.length],2),this.c=new y4t(e,n)}function tgn(t){var e,n,r;for(t.k=new $wt((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,t.j.c.length),r=new S(t.j);r.a=n)return pE(t,e,r.p),!0;return!1}function Rae(t){var e;return t.Db&64?Ost(t):(e=new Il(h8t),!t.a||Vr(Vr((e.a+=' "',e),t.a),'"'),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function jae(t,e,n){var r,s,o,h,d;for(d=au(t.e.Tg(),e),s=u(t.g,119),r=0,h=0;hn?U4t(t,n,"start index"):e<0||e>n?U4t(e,n,"end index"):v_("end index (%s) must not be less than start index (%s)",ct(ot(Xn,1),Ie,1,5,[de(e),de(t)]))}function zae(t,e){var n,r,s,o;for(r=0,s=t.length;r0&&qae(t,o,n));e.p=0}function Xe(t){var e;this.c=new Qi,this.f=t.e,this.e=t.d,this.i=t.g,this.d=t.c,this.b=t.b,this.k=t.j,this.a=t.a,t.i?this.j=t.i:this.j=(e=u(Hf(Qg),9),new rh(e,u(uf(e,e.length),9),0)),this.g=t.f}function agn(t){var e,n,r,s;for(e=Rp(Vr(new Il("Predicates."),"and"),40),n=!0,s=new fx(t);s.b0?d[h-1]:Pt(o0,zg,10,0,0,1),s=d[h],k=h=0?t.Bh(s):Q4t(t,r);else throw rt(new Pn(ab+r.ne()+W_));else throw rt(new Pn(yde+e+xde));else lh(t,n,r)}function j4t(t){var e,n;if(n=null,e=!1,Et(t,204)&&(e=!0,n=u(t,204).a),e||Et(t,258)&&(e=!0,n=""+u(t,258).a),e||Et(t,483)&&(e=!0,n=""+u(t,483).a),!e)throw rt(new tet(x8t));return n}function Uae(t,e){var n,r;if(t.f){for(;e.Ob();)if(n=u(e.Pb(),72),r=n.ak(),Et(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=I7||r.aj()!=0)&&n.dd()!=null)return e.Ub(),!0;return!1}else return e.Ob()}function Wae(t,e){var n,r;if(t.f){for(;e.Sb();)if(n=u(e.Ub(),72),r=n.ak(),Et(r,99)&&u(r,18).Bb&dc&&(!t.e||r.Gj()!=I7||r.aj()!=0)&&n.dd()!=null)return e.Pb(),!0;return!1}else return e.Sb()}function $4t(t,e,n){var r,s,o,h,d,w;for(w=au(t.e.Tg(),e),r=0,d=t.i,s=u(t.g,119),h=0;h1&&(e.c[e.c.length]=o))}function lgn(t){var e,n,r,s;for(n=new Qi,Ua(n,t.o),r=new Ppt;n.b!=0;)e=u(n.b==0?null:(Qn(n.b!=0),ch(n,n.a.a)),508),s=_he(t,e,!0),s&&ue(r.a,e);for(;r.a.c.length!=0;)e=u(mre(r),508),_he(t,e,!1)}function jg(){jg=Z,mSt=new _x(O_,0),Aa=new _x("BOOLEAN",1),gc=new _x("INT",2),T7=new _x("STRING",3),Do=new _x("DOUBLE",4),cs=new _x("ENUM",5),j6=new _x("ENUMSET",6),q1=new _x("OBJECT",7)}function h_(t,e){var n,r,s,o,h;r=b.Math.min(t.c,e.c),o=b.Math.min(t.d,e.d),s=b.Math.max(t.c+t.b,e.c+e.b),h=b.Math.max(t.d+t.a,e.d+e.a),s=(s/2|0))for(this.e=r?r.c:null,this.d=s;n++0;)Bwt(this);this.b=e,this.a=null}function dgn(t,e){var n,r;e.a?F2n(t,e):(n=u(gnt(t.b,e.b),57),n&&n==t.a[e.b.f]&&n.a&&n.a!=e.b.a&&n.c.Fc(e.b),r=u(dnt(t.b,e.b),57),r&&t.a[r.f]==e.b&&r.a&&r.a!=e.b.a&&e.b.c.Fc(r),ent(t.b,e.b))}function Yae(t,e){var n,r;if(n=u(go(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.b=0,n.n.c=0;return}n.n.b=t.C.b,n.n.c=t.C.c,t.A.Hc((_l(),V2))&&mue(t,e),r=Hhn(t,e),Jst(t,e)==(c4(),mb)&&(r+=2*t.w),n.a.a=r}function Xae(t,e){var n,r;if(n=u(go(t.b,e),124),u(u(Ai(t.r,e),21),84).dc()){n.n.d=0,n.n.a=0;return}n.n.d=t.C.d,n.n.a=t.C.a,t.A.Hc((_l(),V2))&&yue(t,e),r=Ghn(t,e),Jst(t,e)==(c4(),mb)&&(r+=2*t.w),n.a.b=r}function ggn(t,e){var n,r,s,o;for(o=new le,r=new S(e);r.an.a&&(r.Hc((cy(),qO))?s=(e.a-n.a)/2:r.Hc(HO)&&(s=e.a-n.a)),e.b>n.b&&(r.Hc((cy(),VO))?o=(e.b-n.b)/2:r.Hc(GO)&&(o=e.b-n.b)),A4t(t,s,o)}function ioe(t,e,n,r,s,o,h,d,w,k,C,M,F){Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),4),Xc(t,n),t.f=h,rE(t,d),sE(t,w),nE(t,k),iE(t,C),Pg(t,M),aE(t,F),Ng(t,!0),Ig(t,s),t.ok(o),f2(t,e),r!=null&&(t.i=null,ez(t,r))}function soe(t){var e,n;if(t.f){for(;t.n>0;){if(e=u(t.k.Xb(t.n-1),72),n=e.ak(),Et(n,99)&&u(n,18).Bb&dc&&(!t.e||n.Gj()!=I7||n.aj()!=0)&&e.dd()!=null)return!0;--t.n}return!1}else return t.n>0}function U4t(t,e,n){if(t<0)return v_(Hhe,ct(ot(Xn,1),Ie,1,5,[n,de(t)]));if(e<0)throw rt(new Pn(Ghe+e));return v_("%s (%s) must not be greater than size (%s)",ct(ot(Xn,1),Ie,1,5,[n,de(t),de(e)]))}function W4t(t,e,n,r,s,o){var h,d,w,k;if(h=r-n,h<7){fln(e,n,r,o);return}if(w=n+s,d=r+s,k=w+(d-w>>1),W4t(e,t,w,k,-s,o),W4t(e,t,k,d,-s,o),o.ue(t[k-1],t[k])<=0){for(;n=0?t.sh(o,n):E5t(t,s,n);else throw rt(new Pn(ab+s.ne()+W_));else throw rt(new Pn(yde+e+xde));else fh(t,r,s,n)}function aoe(t){var e,n,r,s;if(n=u(t,49).qh(),n)try{if(r=null,e=wE((Mp(),Uh),que(pln(n))),e&&(s=e.rh(),s&&(r=s.Wk(EKe(n.e)))),r&&r!=t)return aoe(r)}catch(o){if(o=Wi(o),!Et(o,60))throw rt(o)}return t}function su(t,e,n){var r,s,o,h;if(h=e==null?0:t.b.se(e),s=(r=t.a.get(h),r??new Array),s.length==0)t.a.set(h,s);else if(o=kre(t,e,s),o)return o.ed(n);return Ji(s,s.length,new RR(e,n)),++t.c,a$(t.b),null}function ooe(t,e){var n,r;return w$(t.a),Ud(t.a,(iz(),TV),TV),Ud(t.a,E7,E7),r=new Hs,bi(r,E7,(Cz(),Nht)),Gt(qe(e,(ay(),Bht)))!==Gt((RI(),CV))&&bi(r,E7,Dht),bi(r,E7,Oht),oUt(t.a,r),n=Tq(t.a,e),n}function coe(t){if(!t)return Vqt(),yge;var e=t.valueOf?t.valueOf():t;if(e!==t){var n=Eut[typeof e];return n?n(e):jyt(typeof e)}else return t instanceof Array||t instanceof b.Array?new lx(t):new Hk(t)}function uoe(t,e,n){var r,s,o;switch(o=t.o,r=u(go(t.p,n),244),s=r.i,s.b=uD(r),s.a=cD(r),s.b=b.Math.max(s.b,o.a),s.b>o.a&&!e&&(s.b=o.a),s.c=-(s.b-o.a)/2,n.g){case 1:s.d=-s.a;break;case 3:s.d=o.b}fat(r),dat(r)}function loe(t,e,n){var r,s,o;switch(o=t.o,r=u(go(t.p,n),244),s=r.i,s.b=uD(r),s.a=cD(r),s.a=b.Math.max(s.a,o.b),s.a>o.b&&!e&&(s.a=o.b),s.d=-(s.a-o.b)/2,n.g){case 4:s.c=-s.b;break;case 2:s.c=o.a}fat(r),dat(r)}function Lgn(t,e){var n,r,s,o,h;if(!e.dc()){if(s=u(e.Xb(0),128),e.gc()==1){Bce(t,s,s,1,0,e);return}for(n=1;n0)try{s=$l(e,_a,vi)}catch(o){throw o=Wi(o),Et(o,127)?(r=o,rt(new F$(r))):rt(o)}return n=(!t.a&&(t.a=new ztt(t)),t.a),s=0?u(St(n,s),56):null}function Ogn(t,e){if(t<0)return v_(Hhe,ct(ot(Xn,1),Ie,1,5,["index",de(t)]));if(e<0)throw rt(new Pn(Ghe+e));return v_("%s (%s) must be less than size (%s)",ct(ot(Xn,1),Ie,1,5,["index",de(t),de(e)]))}function Ngn(t){var e,n,r,s,o;if(t==null)return Tu;for(o=new c2(Ka,"[","]"),n=t,r=0,s=n.length;r0)for(h=t.c.d,d=t.d.d,s=ud(na(new $e(d.a,d.b),h),1/(r+1)),o=new $e(h.a,h.b),n=new S(t.a);n.a=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ol(e);else throw rt(new Pn(ab+e.ne()+W_))}function Z4t(t){var e,n;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),n=ps(b.Math.floor(b.Math.log(t)/.6931471805599453)),(!e||t!=b.Math.pow(2,n))&&++n,n):Fne(ku(t))}function Wgn(t){var e,n,r,s,o,h,d;for(o=new A0,n=new S(t);n.a2&&d.e.b+d.j.b<=2&&(s=d,r=h),o.a.zc(s,o),s.q=r);return o}function woe(t,e){var n,r,s;return r=new H0(t),Lo(r,e),Jt(r,(se(),GG),e),Jt(r,(Te(),os),(oa(),Vc)),Jt(r,Ld,(Qd(),PV)),_0(r,(Gn(),xs)),n=new Mc,Uo(n,r),Fs(n,(be(),Bn)),s=new Mc,Uo(s,r),Fs(s,Hn),r}function moe(t){switch(t.g){case 0:return new eet((Zv(),OO));case 1:return new OB;case 2:return new JJ;default:throw rt(new Pn("No implementation is available for the crossing minimizer "+(t.f!=null?t.f:""+t.g)))}}function yoe(t,e){var n,r,s,o,h;for(t.c[e.p]=!0,ue(t.a,e),h=new S(e.j);h.a=o)h.$b();else for(s=h.Kc(),r=0;r0?Xpt():h<0&&Toe(t,e,-h),!0):!1}function cD(t){var e,n,r,s,o,h,d;if(d=0,t.b==0){for(h=ase(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}else d=Jqt(lne(Jj(Ri($nt(t.a),new Al),new ua)));return d>0?d+t.n.d+t.n.a:0}function uD(t){var e,n,r,s,o,h,d;if(d=0,t.b==0)d=Jqt(lne(Jj(Ri($nt(t.a),new Zl),new Pa)));else{for(h=ose(t,!0),e=0,r=h,s=0,o=r.length;s0&&(d+=n,++e);e>1&&(d+=t.c*(e-1))}return d>0?d+t.n.b+t.n.c:0}function epn(t,e){var n,r,s,o;for(o=u(go(t.b,e),124),n=o.a,s=u(u(Ai(t.r,e),21),84).Kc();s.Ob();)r=u(s.Pb(),111),r.c&&(n.a=b.Math.max(n.a,Bvt(r.c)));if(n.a>0)switch(e.g){case 2:o.n.c=t.s;break;case 4:o.n.b=t.s}}function npn(t,e){var n,r,s;return n=u(Q(e,(Zf(),t7)),19).a-u(Q(t,t7),19).a,n==0?(r=na(nc(u(Q(t,(Gp(),dO)),8)),u(Q(t,lS),8)),s=na(nc(u(Q(e,dO),8)),u(Q(e,lS),8)),Ls(r.a*r.b,s.a*s.b)):n}function rpn(t,e){var n,r,s;return n=u(Q(e,(hw(),EV)),19).a-u(Q(t,EV),19).a,n==0?(r=na(nc(u(Q(t,(fc(),FO)),8)),u(Q(t,BS),8)),s=na(nc(u(Q(e,FO),8)),u(Q(e,BS),8)),Ls(r.a*r.b,s.a*s.b)):n}function Coe(t){var e,n;return n=new _p,n.a+="e_",e=fcn(t),e!=null&&(n.a+=""+e),t.c&&t.d&&(Vr((n.a+=" ",n),Wz(t.c)),Vr(hc((n.a+="[",n),t.c.i),"]"),Vr((n.a+=Pot,n),Wz(t.d)),Vr(hc((n.a+="[",n),t.d.i),"]")),n.a}function _oe(t){switch(t.g){case 0:return new WL;case 1:return new QJ;case 2:return new XJ;case 3:return new NB;default:throw rt(new Pn("No implementation is available for the layout phase "+(t.f!=null?t.f:""+t.g)))}}function t5t(t,e,n,r,s){var o;switch(o=0,s.g){case 1:o=b.Math.max(0,e.b+t.b-(n.b+r));break;case 3:o=b.Math.max(0,-t.b-r);break;case 2:o=b.Math.max(0,-t.a-r);break;case 4:o=b.Math.max(0,e.a+t.a-(n.a+r))}return o}function ipn(t,e,n){var r,s,o,h,d;if(n)for(s=n.a.length,r=new Qb(s),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),o=_8(n,h.a),p8t in o.a||Vct in o.a?pwn(t,o,e):x5n(t,o,e),qXe(u(Jn(t.b,oE(o)),79))}function e5t(t){var e,n;switch(t.b){case-1:return!0;case 0:return n=t.t,n>1||n==-1?(t.b=-1,!0):(e=Lh(t),e&&(to(),e.Cj()==k0e)?(t.b=-1,!0):(t.b=1,!1));default:case 1:return!1}}function spn(t,e){var n,r,s,o,h;for(r=(!e.s&&(e.s=new he(Au,e,21,17)),e.s),o=null,s=0,h=r.i;s=0&&r=0?t._g(n,!0,!0):lw(t,s,!0),153)),u(r,215).ll(e);throw rt(new Pn(ab+e.ne()+Fct))}function lpn(){vbt();var t;return o5e?u(wE((Mp(),Uh),Ph),1939):(ri(M2,new Rf),V3n(),t=u(Et(Fc((Mp(),Uh),Ph),547)?Fc(Uh,Ph):new fXt,547),o5e=!0,z5n(t),U5n(t),ki((bbt(),ZAt),t,new XZ),xo(Uh,Ph,t),t)}function hpn(t,e){var n,r,s,o;t.j=-1,ml(t.e)?(n=t.i,o=t.i!=0,uI(t,e),r=new F0(t.e,3,t.c,null,e,n,o),s=e.Qk(t.e,t.c,null),s=iae(t,e,s),s?(s.Ei(r),s.Fi()):mi(t.e,r)):(uI(t,e),s=e.Qk(t.e,t.c,null),s&&s.Fi())}function rq(t,e){var n,r,s;if(s=0,r=e[0],r>=t.length)return-1;for(n=(Rr(r,t.length),t.charCodeAt(r));n>=48&&n<=57&&(s=s*10+(n-48),++r,!(r>=t.length));)n=(Rr(r,t.length),t.charCodeAt(r));return r>e[0]?e[0]=r:s=-1,s}function fpn(t){var e,n,r,s,o;return s=u(t.a,19).a,o=u(t.b,19).a,n=s,r=o,e=b.Math.max(b.Math.abs(s),b.Math.abs(o)),s<=0&&s==o?(n=0,r=o-1):s==-e&&o!=e?(n=o,r=s,o>=0&&++n):(n=-o,r=s),new la(de(n),de(r))}function dpn(t,e,n,r){var s,o,h,d,w,k;for(s=0;s=0&&k>=0&&w=t.i)throw rt(new mo(Wct+e+S2+t.i));if(n>=t.i)throw rt(new mo(Kct+n+S2+t.i));return r=t.g[n],e!=n&&(e>16),e=r>>16&16,n=16-e,t=t>>e,r=t-256,e=r>>16&8,n+=e,t<<=e,r=t-yy,e=r>>16&4,n+=e,t<<=e,r=t-bd,e=r>>16&2,n+=e,t<<=e,r=t>>14,e=r&~(r>>1),n+2-e)}function ppn(t){jx();var e,n,r,s;for(nG=new le,qut=new Cr,zut=new le,e=(!t.a&&(t.a=new he(ns,t,10,11)),t.a),W4n(e),s=new er(e);s.e!=s.i.gc();)r=u(dr(s),33),Ro(nG,r,0)==-1&&(n=new le,ue(zut,n),Rie(r,n));return zut}function bpn(t,e,n){var r,s,o,h;t.a=n.b.d,Et(e,352)?(s=m4(u(e,79),!1,!1),o=sD(s),r=new ka(t),va(o,r),yD(o,s),e.We((ci(),i5))!=null&&va(u(e.We(i5),74),r)):(h=u(e,470),h.Hg(h.Dg()+t.a.a),h.Ig(h.Eg()+t.a.b))}function Aoe(t,e){var n,r,s,o,h,d,w,k;for(k=Xt(ye(Q(e,(Te(),_S)))),w=t[0].n.a+t[0].o.a+t[0].d.c+k,d=1;d=0?n:(d=AC(na(new $e(h.c+h.b/2,h.d+h.a/2),new $e(o.c+o.b/2,o.d+o.a/2))),-(Xue(o,h)-1)*d)}function wpn(t,e,n){var r;us(new Tn(null,(!n.a&&(n.a=new he(Zi,n,6,6)),new _n(n.a,16))),new fVt(t,e)),us(new Tn(null,(!n.n&&(n.n=new he(qo,n,1,7)),new _n(n.n,16))),new dVt(t,e)),r=u(qe(n,(ci(),i5)),74),r&&ayt(r,t,e)}function lw(t,e,n){var r,s,o;if(o=E4((Ru(),ma),t.Tg(),e),o)return to(),u(o,66).Oj()||(o=qx(Eo(ma,o))),s=(r=t.Yg(o),u(r>=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).hl(e,n);throw rt(new Pn(ab+e.ne()+Fct))}function r5t(t,e,n,r){var s,o,h,d,w;if(s=t.d[e],s){if(o=s.g,w=s.i,r!=null){for(d=0;d=n&&(r=e,k=(w.c+w.a)/2,h=k-n,w.c<=k-n&&(s=new ynt(w.c,h),$m(t,r++,s)),d=k+n,d<=w.a&&(o=new ynt(d,w.a),Um(r,t.c.length),W9(t.c,r,o)))}function i5t(t){var e;if(!t.c&&t.g==null)t.d=t.si(t.f),Mr(t,t.d),e=t.d;else{if(t.g==null)return!0;if(t.i==0)return!1;e=u(t.g[t.i-1],47)}return e==t.b&&null.km>=null.jm()?(aq(t),i5t(t)):e.Ob()}function kpn(t,e,n){var r,s,o,h,d;if(d=n,!d&&(d=Pvt(new Yk,0)),wr(d,Vfe,1),Xle(t.c,e),h=F3n(t.a,e),h.gc()==1)Dle(u(h.Xb(0),37),d);else for(o=1/h.gc(),s=h.Kc();s.Ob();)r=u(s.Pb(),37),Dle(r,Rc(d,o));MKe(t.a,h,e),Fvn(e),or(d)}function Ioe(t){if(this.a=t,t.c.i.k==(Gn(),xs))this.c=t.c,this.d=u(Q(t.c.i,(se(),oc)),61);else if(t.d.i.k==xs)this.c=t.d,this.d=u(Q(t.d.i,(se(),oc)),61);else throw rt(new Pn("Edge "+t+" is not an external edge."))}function Doe(t,e){var n,r,s;s=t.b,t.b=e,t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,s,t.b)),e?e!=t&&(Xc(t,e.zb),tit(t,e.d),n=(r=e.c,r??e.zb),nit(t,n==null||hn(n,e.zb)?null:n)):(Xc(t,null),tit(t,0),nit(t,null))}function Ooe(t){var e,n;if(t.f){for(;t.n=h)throw rt(new jm(e,h));return s=n[e],h==1?r=null:(r=Pt(Tft,Jct,415,h-1,0,1),Ic(n,0,r,0,e),o=h-e-1,o>0&&Ic(n,e+1,r,e,o)),cE(t,r),noe(t,e,s),s}function a6(){a6=Z,W6=u(St(Wt((sbt(),pc).qb),6),34),U6=u(St(Wt(pc.qb),3),34),Mft=u(St(Wt(pc.qb),4),34),Ift=u(St(Wt(pc.qb),5),18),Qz(W6),Qz(U6),Qz(Mft),Qz(Ift),h5e=new wl(ct(ot(Au,1),P4,170,0,[W6,U6]))}function Boe(t,e){var n;this.d=new M9,this.b=e,this.e=new yo(e.qf()),n=t.u.Hc((Qu(),tN)),t.u.Hc(tg)?t.D?this.a=n&&!e.If():this.a=!0:t.u.Hc(xb)?n?this.a=!(e.zf().Kc().Ob()||e.Bf().Kc().Ob()):this.a=!1:this.a=!1}function Roe(t,e){var n,r,s,o;for(n=t.o.a,o=u(u(Ai(t.r,e),21),84).Kc();o.Ob();)s=u(o.Pb(),111),s.e.a=(r=s.b,r.Xe((ci(),hl))?r.Hf()==(be(),Bn)?-r.rf().a-Xt(ye(r.We(hl))):n+Xt(ye(r.We(hl))):r.Hf()==(be(),Bn)?-r.rf().a:n)}function joe(t,e){var n,r,s,o;n=u(Q(t,(Te(),Vl)),103),o=u(qe(e,v7),61),s=u(Q(t,os),98),s!=(oa(),H1)&&s!=yb?o==(be(),Zo)&&(o=nxt(e,n),o==Zo&&(o=Jx(n))):(r=Ile(e),r>0?o=Jx(n):o=HI(Jx(n))),bo(e,v7,o)}function _pn(t,e){var n,r,s,o,h;for(h=t.j,e.a!=e.b&&Xs(h,new K5),s=h.c.length/2|0,r=0;r0&&vD(t,n,e),o):r.a!=null?(vD(t,e,n),-1):s.a!=null?(vD(t,n,e),1):0}function $oe(t,e){var n,r,s,o;t.ej()?(n=t.Vi(),o=t.fj(),++t.j,t.Hi(n,t.oi(n,e)),r=t.Zi(3,null,e,n,o),t.bj()?(s=t.cj(e,null),s?(s.Ei(r),s.Fi()):t.$i(r)):t.$i(r)):(nXt(t,e),t.bj()&&(s=t.cj(e,null),s&&s.Fi()))}function iq(t,e){var n,r,s,o,h;for(h=au(t.e.Tg(),e),s=new tx,n=u(t.g,119),o=t.i;--o>=0;)r=n[o],h.rl(r.ak())&&Mr(s,r);!Lhe(t,s)&&ml(t.e)&&Kk(t,e.$j()?zp(t,6,e,(vn(),io),null,-1,!1):zp(t,e.Kj()?2:1,e,null,null,-1,!1))}function bE(){bE=Z;var t,e;for(T6=Pt(B4,te,91,32,0,1),oS=Pt(B4,te,91,32,0,1),t=1,e=0;e<=18;e++)T6[e]=KI(t),oS[e]=KI(M0(t,e)),t=Ca(t,5);for(;eh)||e.q&&(r=e.C,h=r.c.c.a-r.o.a/2,s=r.n.a-n,s>h)))}function Lpn(t,e){var n;wr(e,"Partition preprocessing",1),n=u(Pl(Ri(Wo(Ri(new Tn(null,new _n(t.a,16)),new $Y),new aF),new V5),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),us(n.Oc(),new oF),or(e)}function zoe(t){prt();var e,n,r,s,o,h,d;for(n=new n2,s=new S(t.e.b);s.a1?t.e*=Xt(t.a):t.f/=Xt(t.a),lun(t),phn(t),Qvn(t),Jt(t.b,(i_(),eG),t.g)}function Voe(t,e,n){var r,s,o,h,d,w;for(r=0,w=n,e||(r=n*(t.c.length-1),w*=-1),o=new S(t);o.a=0?(e||(e=new B9,r>0&&fo(e,t.substr(0,r))),e.a+="\\",m8(e,n&ms)):e&&m8(e,n&ms);return e?e.a:t}function Rpn(t){var e;if(!t.a)throw rt(new Fo("IDataType class expected for layout option "+t.f));if(e=Uin(t.a),e==null)throw rt(new Fo("Couldn't create new instance of property '"+t.f+"'. "+H1e+(L0(uN),uN.k)+a8t));return u(e,414)}function Gst(t){var e,n,r,s,o;return o=t.eh(),o&&o.kh()&&(s=Kp(t,o),s!=o)?(n=t.Vg(),r=(e=t.Vg(),e>=0?t.Qg(null):t.eh().ih(t,-1-e,null,null)),t.Rg(u(s,49),n),r&&r.Fi(),t.Lg()&&t.Mg()&&n>-1&&mi(t,new Qs(t,9,n,o,s)),s):o}function Xoe(t){var e,n,r,s,o,h,d,w;for(h=0,o=t.f.e,r=0;r>5,s>=t.d)return t.e<0;if(n=t.a[s],e=1<<(e&31),t.e<0){if(r=pne(t),s>16)),15).Xc(o),d0&&(!(Op(t.a.c)&&e.n.d)&&!(c8(t.a.c)&&e.n.b)&&(e.g.d+=b.Math.max(0,r/2-.5)),!(Op(t.a.c)&&e.n.a)&&!(c8(t.a.c)&&e.n.c)&&(e.g.a-=r-1))}function Joe(t){var e,n,r,s,o;if(s=new le,o=Uue(t,s),e=u(Q(t,(se(),Zu)),10),e)for(r=new S(e.j);r.a>e,o=t.m>>e|n<<22-e,s=t.l>>e|t.m<<22-e):e<44?(h=r?W0:0,o=n>>e-22,s=t.m>>e-22|n<<44-e):(h=r?W0:0,o=r?ul:0,s=n>>e-44),ru(s&ul,o&ul,h&W0)}function Vst(t){var e,n,r,s,o,h;for(this.c=new le,this.d=t,r=ss,s=ss,e=Ts,n=Ts,h=ei(t,0);h.b!=h.d.c;)o=u(ti(h),8),r=b.Math.min(r,o.a),s=b.Math.min(s,o.b),e=b.Math.max(e,o.a),n=b.Math.max(n,o.b);this.a=new ih(r,s,e-r,n-s)}function nce(t,e){var n,r,s,o,h,d;for(o=new S(t.b);o.a0&&Et(e,42)&&(t.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Hi(w),h=X2t(t.a,o),n=t.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d=2)for(n=s.Kc(),e=ye(n.Pb());n.Ob();)o=e,e=ye(n.Pb()),r=b.Math.min(r,(On(e),e-(On(o),o)));return r}function Ypn(t,e){var n,r,s,o,h;r=new Qi,hs(r,e,r.c.b,r.c);do for(n=(Qn(r.b!=0),u(ch(r,r.a.a),86)),t.b[n.g]=1,o=ei(n.d,0);o.b!=o.d.c;)s=u(ti(o),188),h=s.c,t.b[h.g]==1?ni(t.a,s):t.b[h.g]==2?t.b[h.g]=1:hs(r,h,r.c.b,r.c);while(r.b!=0)}function Xpn(t,e){var n,r,s;if(Gt(e)===Gt(Ar(t)))return!0;if(!Et(e,15)||(r=u(e,15),s=t.gc(),s!=r.gc()))return!1;if(Et(r,54)){for(n=0;n0&&(s=n),h=new S(t.f.e);h.a0?(e-=1,n-=1):r>=0&&s<0?(e+=1,n+=1):r>0&&s>=0?(e-=1,n+=1):(e+=1,n-=1),new la(de(e),de(n))}function gbn(t,e){return t.ce.c?1:t.be.b?1:t.a!=e.a?Hi(t.a)-Hi(e.a):t.d==(BC(),NS)&&e.d==OS?-1:t.d==OS&&e.d==NS?1:0}function uce(t,e){var n,r,s,o,h;return o=e.a,o.c.i==e.b?h=o.d:h=o.c,o.c.i==e.b?r=o.c:r=o.d,s=qln(t.a,h,r),s>0&&s0):s<0&&-s0):!1}function pbn(t,e,n,r){var s,o,h,d,w,k,C,M;for(s=(e-t.d)/t.c.c.length,o=0,t.a+=n,t.d=e,M=new S(t.c);M.a>24;return h}function vbn(t){if(t.pe()){var e=t.c;e.qe()?t.o="["+e.n:e.pe()?t.o="["+e.ne():t.o="[L"+e.ne()+";",t.b=e.me()+"[]",t.k=e.oe()+"[]";return}var n=t.j,r=t.d;r=r.split("/"),t.o=Yit(".",[n,Yit("$",r)]),t.b=Yit(".",[n,Yit(".",r)]),t.k=r[r.length-1]}function wbn(t,e){var n,r,s,o,h;for(h=null,o=new S(t.e.a);o.a=0;e-=2)for(n=0;n<=e;n+=2)(t.b[n]>t.b[n+2]||t.b[n]===t.b[n+2]&&t.b[n+1]>t.b[n+3])&&(r=t.b[n+2],t.b[n+2]=t.b[n],t.b[n]=r,r=t.b[n+3],t.b[n+3]=t.b[n+1],t.b[n+1]=r);t.c=!0}}function lce(t,e){var n,r,s,o,h,d,w,k;for(h=e==1?Qut:Xut,o=h.a.ec().Kc();o.Ob();)for(s=u(o.Pb(),103),w=u(Ai(t.f.c,s),21).Kc();w.Ob();)switch(d=u(w.Pb(),46),r=u(d.b,81),k=u(d.a,189),n=k.c,s.g){case 2:case 1:r.g.d+=n;break;case 4:case 3:r.g.c+=n}}function xbn(t,e){var n,r,s,o,h,d,w,k,C;for(k=-1,C=0,h=t,d=0,w=h.length;d0&&++C;++k}return C}function bf(t){var e,n;return n=new Il(Ap(t.gm)),n.a+="@",Vr(n,(e=Hi(t)>>>0,e.toString(16))),t.kh()?(n.a+=" (eProxyURI: ",hc(n,t.qh()),t.$g()&&(n.a+=" eClass: ",hc(n,t.$g())),n.a+=")"):t.$g()&&(n.a+=" (eClass: ",hc(n,t.$g()),n.a+=")"),n.a}function p_(t){var e,n,r,s;if(t.e)throw rt(new Fo((L0(Mut),bot+Mut.k+vot)));for(t.d==(ao(),c0)&&_q(t,jh),n=new S(t.a.a);n.a>24}return n}function Tbn(t,e,n){var r,s,o;if(s=u(go(t.i,e),306),!s)if(s=new hee(t.d,e,n),Nx(t.i,e,s),S3t(e))$Xe(t.a,e.c,e.b,s);else switch(o=hgn(e),r=u(go(t.p,o),244),o.g){case 1:case 3:s.j=!0,Jtt(r,e.b,s);break;case 4:case 2:s.k=!0,Jtt(r,e.c,s)}return s}function Cbn(t,e,n,r){var s,o,h,d,w,k;if(d=new tx,w=au(t.e.Tg(),e),s=u(t.g,119),to(),u(e,66).Oj())for(h=0;h=0)return s;for(o=1,d=new S(e.j);d.a0&&e.ue((An(s-1,t.c.length),u(t.c[s-1],10)),o)>0;)ah(t,s,(An(s-1,t.c.length),u(t.c[s-1],10))),--s;An(s,t.c.length),t.c[s]=o}n.a=new Cr,n.b=new Cr}function _bn(t,e,n){var r,s,o,h,d,w,k,C;for(C=(r=u(e.e&&e.e(),9),new rh(r,u(uf(r,r.length),9),0)),w=py(n,"[\\[\\]\\s,]+"),o=w,h=0,d=o.length;h0&&(!(Op(t.a.c)&&e.n.d)&&!(c8(t.a.c)&&e.n.b)&&(e.g.d-=b.Math.max(0,r/2-.5)),!(Op(t.a.c)&&e.n.a)&&!(c8(t.a.c)&&e.n.c)&&(e.g.a+=b.Math.max(0,r-1)))}function pce(t,e,n){var r,s;if((t.c-t.b&t.a.length-1)==2)e==(be(),Nn)||e==Hn?(V$(u(KC(t),15),(jl(),u0)),V$(u(KC(t),15),wb)):(V$(u(KC(t),15),(jl(),wb)),V$(u(KC(t),15),u0));else for(s=new MC(t);s.a!=s.b;)r=u(mz(s),15),V$(r,n)}function Abn(t,e){var n,r,s,o,h,d,w;for(s=d8(new vpt(t)),d=new ha(s,s.c.length),o=d8(new vpt(e)),w=new ha(o,o.c.length),h=null;d.b>0&&w.b>0&&(n=(Qn(d.b>0),u(d.a.Xb(d.c=--d.b),33)),r=(Qn(w.b>0),u(w.a.Xb(w.c=--w.b),33)),n==r);)h=n;return h}function ol(t,e){var n,r,s,o,h,d;return o=t.a*fot+t.b*1502,d=t.b*fot+11,n=b.Math.floor(d*PD),o+=n,d-=n*Rxt,o%=Rxt,t.a=o,t.b=d,e<=24?b.Math.floor(t.a*TEt[e]):(s=t.a*(1<=2147483648&&(r-=cot),r)}function bce(t,e,n){var r,s,o,h;$Qt(t,e)>$Qt(t,n)?(r=Yo(n,(be(),Hn)),t.d=r.dc()?0:Cnt(u(r.Xb(0),11)),h=Yo(e,Bn),t.b=h.dc()?0:Cnt(u(h.Xb(0),11))):(s=Yo(n,(be(),Bn)),t.d=s.dc()?0:Cnt(u(s.Xb(0),11)),o=Yo(e,Hn),t.b=o.dc()?0:Cnt(u(o.Xb(0),11)))}function vce(t){var e,n,r,s,o,h,d;if(t&&(e=t.Hh(Ph),e&&(h=Br(Yf((!e.b&&(e.b=new yl((dn(),Qa),cc,e)),e.b),"conversionDelegates")),h!=null))){for(d=new le,r=py(h,"\\w+"),s=0,o=r.length;st.c));h++)s.a>=t.s&&(o<0&&(o=h),d=h);return w=(t.s+t.c)/2,o>=0&&(r=hwn(t,e,o,d),w=yYe((An(r,e.c.length),u(e.c[r],329))),xpn(e,r,n)),w}function Kst(){Kst=Z,Wye=new eo((ci(),$6),1.3),R_t=RSt,V_t=new Mv(15),t3e=new eo(q2,V_t),n3e=new eo(H2,15),Kye=BV,Qye=z2,Zye=a5,Jye=vb,Xye=s5,q_t=YO,e3e=Ky,G_t=(d5t(),Gye),z_t=qye,H_t=Hye,U_t=Vye,j_t=zye,$_t=RV,Yye=$St,RO=$ye,B_t=jye,W_t=Uye}function Ir(t,e,n){var r,s,o,h,d,w,k;for(h=(o=new JF,o),tyt(h,(On(e),e)),k=(!h.b&&(h.b=new yl((dn(),Qa),cc,h)),h.b),w=1;w0&&i3n(this,s)}function y5t(t,e,n,r,s,o){var h,d,w;if(!s[e.b]){for(s[e.b]=!0,h=r,!h&&(h=new _$),ue(h.e,e),w=o[e.b].Kc();w.Ob();)d=u(w.Pb(),282),!(d.d==n||d.c==n)&&(d.c!=e&&y5t(t,d.c,e,h,s,o),d.d!=e&&y5t(t,d.d,e,h,s,o),ue(h.c,d),As(h.d,d.b));return h}return null}function Ibn(t){var e,n,r,s,o,h,d;for(e=0,s=new S(t.e);s.a=2}function Dbn(t,e){var n,r,s,o;for(wr(e,"Self-Loop pre-processing",1),r=new S(t.a);r.a1||(e=ji(Ef,ct(ot(lo,1),ae,93,0,[J0,Tf])),AI(h$(e,t))>1)||(r=ji(_f,ct(ot(lo,1),ae,93,0,[l0,zh])),AI(h$(r,t))>1))}function Pbn(t,e){var n,r,s;return n=e.Hh(t.a),n&&(s=Br(Yf((!n.b&&(n.b=new yl((dn(),Qa),cc,n)),n.b),"affiliation")),s!=null)?(r=dj(s,Eu(35)),r==-1?Pit(t,kC(t,Fl(e.Hj())),s):r==0?Pit(t,null,s.substr(1)):Pit(t,s.substr(0,r),s.substr(r+1))):null}function Fbn(t){var e,n,r;try{return t==null?Tu:$o(t)}catch(s){if(s=Wi(s),Et(s,102))return e=s,r=Ap(sl(t))+"@"+(n=(qd(),O3t(t)>>>0),n.toString(16)),Thn(Ecn(),(s8(),"Exception during lenientFormat for "+r),e),"<"+r+" threw "+Ap(e.gm)+">";throw rt(s)}}function yce(t){switch(t.g){case 0:return new GJ;case 1:return new IB;case 2:return new kGt;case 3:return new DL;case 4:return new HWt;case 5:return new VJ;default:throw rt(new Pn("No implementation is available for the layerer "+(t.f!=null?t.f:""+t.g)))}}function x5t(t,e,n){var r,s,o;for(o=new S(t.t);o.a0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ni(e,r.b));for(s=new S(t.i);s.a0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ni(n,r.a))}function aq(t){var e,n,r,s,o;if(t.g==null&&(t.d=t.si(t.f),Mr(t,t.d),t.c))return o=t.f,o;if(e=u(t.g[t.i-1],47),s=e.Pb(),t.e=e,n=t.si(s),n.Ob())t.d=n,Mr(t,n);else for(t.d=null;!e.Ob()&&(Ji(t.g,--t.i,null),t.i!=0);)r=u(t.g[t.i-1],47),e=r;return s}function Bbn(t,e){var n,r,s,o,h,d;if(r=e,s=r.ak(),V0(t.e,s)){if(s.hi()&&k$(t,s,r.dd()))return!1}else for(d=au(t.e.Tg(),s),n=u(t.g,119),o=0;o1||n>1)return 2;return e+n==1?2:0}function kce(t,e,n){var r,s,o,h,d;for(wr(n,"ELK Force",1),je(Re(qe(e,(Zf(),d7t))))||u$((r=new rr((Im(),new Sm(e))),r)),d=Zne(e),c1n(d),zcn(t,u(Q(d,f7t),424)),h=hle(t.a,d),o=h.Kc();o.Ob();)s=u(o.Pb(),231),Ewn(t.b,s,Rc(n,1/h.gc()));d=The(h),xhe(d),or(n)}function Gbn(t,e){var n,r,s,o,h;if(wr(e,"Breaking Point Processor",1),l4n(t),je(Re(Q(t,(Te(),yCt))))){for(s=new S(t.b);s.a=0?t._g(r,!0,!0):lw(t,o,!0),153)),u(s,215).ml(e,n)}else throw rt(new Pn(ab+e.ne()+W_))}function Kbn(t,e){var n,r,s,o,h;for(n=new le,s=Wo(new Tn(null,new _n(t,16)),new zQ),o=Wo(new Tn(null,new _n(t,16)),new qQ),h=xan(Fsn(Jj(S2n(ct(ot(rxn,1),Ie,833,0,[s,o])),new HQ))),r=1;r=2*e&&ue(n,new ynt(h[r-1]+e,h[r]-e));return n}function Ybn(t,e,n){wr(n,"Eades radial",1),n.n&&e&&hf(n,ff(e),(Cl(),Yl)),t.d=u(qe(e,(bC(),$S)),33),t.c=Xt(ye(qe(e,(ay(),SV)))),t.e=ist(u(qe(e,BO),293)),t.a=Aln(u(qe(e,T_t),426)),t.b=X1n(u(qe(e,E_t),340)),M1n(t),n.n&&e&&hf(n,ff(e),(Cl(),Yl))}function Xbn(t,e,n){var r,s,o,h,d,w,k,C;if(n)for(o=n.a.length,r=new Qb(o),d=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);d.Ob();)h=u(d.Pb(),19),s=_8(n,h.a),s&&(w=Kin(t,(k=(Tv(),C=new Rpt,C),e&&T5t(k,e),k),s),qC(w,O0(s,Cd)),Jz(s,w),K4t(s,w),wit(t,s,w))}function cq(t){var e,n,r,s,o,h;if(!t.j){if(h=new QT,e=aA,o=e.a.zc(t,e),o==null){for(r=new er(So(t));r.e!=r.i.gc();)n=u(dr(r),26),s=cq(n),rs(h,s),Mr(h,n);e.a.Bc(t)!=null}ey(h),t.j=new q3((u(St(Wt((jp(),Ln).o),11),18),h.i),h.g),rl(t).b&=-33}return t.j}function Qbn(t){var e,n,r,s;if(t==null)return null;if(r=$c(t,!0),s=nO.length,hn(r.substr(r.length-s,s),nO)){if(n=r.length,n==4){if(e=(Rr(0,r.length),r.charCodeAt(0)),e==43)return wLt;if(e==45)return A5e}else if(n==3)return wLt}return new Spt(r)}function Zbn(t){var e,n,r;return n=t.l,n&n-1||(r=t.m,r&r-1)||(e=t.h,e&e-1)||e==0&&r==0&&n==0?-1:e==0&&r==0&&n!=0?Wmt(n):e==0&&r!=0&&n==0?Wmt(r)+22:e!=0&&r==0&&n==0?Wmt(e)+44:-1}function Jbn(t,e){var n,r,s,o,h;for(wr(e,"Edge joining",1),n=je(Re(Q(t,(Te(),nht)))),s=new S(t.b);s.a1)for(s=new S(t.a);s.a0),o.a.Xb(o.c=--o.b),Rm(o,s),Qn(o.b3&&Xd(t,0,e-3))}function r2n(t){var e,n,r,s;return Gt(Q(t,(Te(),jy)))===Gt(($0(),Zg))?!t.e&&Gt(Q(t,_O))!==Gt((W8(),mO)):(r=u(Q(t,Glt),292),s=je(Re(Q(t,Vlt)))||Gt(Q(t,ES))===Gt((Yx(),wO)),e=u(Q(t,B9t),19).a,n=t.a.c.length,!s&&r!=(W8(),mO)&&(e==0||e>n))}function i2n(t){var e,n;for(n=0;n0);n++);if(n>0&&n0);e++);return e>0&&n>16!=6&&e){if(lE(t,e))throw rt(new Pn(K_+qoe(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?X3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,6,r)),r=K2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,6,e,e))}function T5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=9&&e){if(lE(t,e))throw rt(new Pn(K_+Tue(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Z3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,9,r)),r=Y2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,9,e,e))}function Xst(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(lE(t,e))throw rt(new Pn(K_+Ele(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?t4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,12,r)),r=W2t(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function mE(t){var e,n,r,s,o;if(r=Lh(t),o=t.j,o==null&&r)return t.$j()?null:r.zj();if(Et(r,148)){if(n=r.Aj(),n&&(s=n.Nh(),s!=t.i)){if(e=u(r,148),e.Ej())try{t.g=s.Kh(e,o)}catch(h){if(h=Wi(h),Et(h,78))t.g=null;else throw rt(h)}t.i=s}return t.g}return null}function Cce(t){var e;return e=new le,ue(e,new Tx(new $e(t.c,t.d),new $e(t.c+t.b,t.d))),ue(e,new Tx(new $e(t.c,t.d),new $e(t.c,t.d+t.a))),ue(e,new Tx(new $e(t.c+t.b,t.d+t.a),new $e(t.c+t.b,t.d))),ue(e,new Tx(new $e(t.c+t.b,t.d+t.a),new $e(t.c,t.d+t.a))),e}function _ce(t,e,n,r){var s,o,h;if(h=c4t(e,n),r.c[r.c.length]=e,t.j[h.p]==-1||t.j[h.p]==2||t.a[e.p])return r;for(t.j[h.p]=-1,o=new ar(lr(z0(h).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),!(!(!Va(s)&&!(!Va(s)&&s.c.i.c==s.d.i.c))||s==e))return _ce(t,s,h,r);return r}function s2n(t,e,n){var r,s,o;for(o=e.a.ec().Kc();o.Ob();)s=u(o.Pb(),79),r=u(Jn(t.b,s),266),!r&&(ts(Zd(s))==ts(Xp(s))?yvn(t,s,n):Zd(s)==ts(Xp(s))?Jn(t.c,s)==null&&Jn(t.b,Xp(s))!=null&&she(t,s,n,!1):Jn(t.d,s)==null&&Jn(t.b,Zd(s))!=null&&she(t,s,n,!0))}function a2n(t,e){var n,r,s,o,h,d,w;for(s=t.Kc();s.Ob();)for(r=u(s.Pb(),10),d=new Mc,Uo(d,r),Fs(d,(be(),Hn)),Jt(d,(se(),VG),(Fn(),!0)),h=e.Kc();h.Ob();)o=u(h.Pb(),10),w=new Mc,Uo(w,o),Fs(w,Bn),Jt(w,VG,!0),n=new zv,Jt(n,VG,!0),Da(n,d),sa(n,w)}function o2n(t,e,n,r){var s,o,h,d;s=xie(t,e,n),o=xie(t,n,e),h=u(Jn(t.c,e),112),d=u(Jn(t.c,n),112),sr.b.g&&(o.c[o.c.length]=r);return o}function yE(){yE=Z,n5=new _M("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),R6=new _M("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),qS=new _M("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),zS=new _M("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),HS=new _M("WHOLE_DRAWING",4)}function c2n(t,e){if(Et(e,239))return Run(t,u(e,33));if(Et(e,186))return Qun(t,u(e,118));if(Et(e,354))return lnn(t,u(e,137));if(Et(e,352))return Nmn(t,u(e,79));if(e)return null;throw rt(new Pn(k8t+Qp(new wl(ct(ot(Xn,1),Ie,1,5,[e])))))}function u2n(t){var e,n,r,s,o,h,d;for(o=new Qi,s=new S(t.d.a);s.a1)for(e=Dv((n=new Ub,++t.b,n),t.d),d=ei(o,0);d.b!=d.d.c;)h=u(ti(d),121),vf(of(af(cf(sf(new Eh,1),0),e),h))}function C5t(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=11&&e){if(lE(t,e))throw rt(new Pn(K_+H5t(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?e4t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=e6(e,t,10,r)),r=rvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,11,e,e))}function l2n(t){var e,n,r,s;for(r=new h2(new wg(t.b).a);r.b;)n=Yv(r),s=u(n.cd(),11),e=u(n.dd(),10),Jt(e,(se(),_i),s),Jt(s,Zu,e),Jt(s,kO,(Fn(),!0)),Fs(s,u(Q(e,oc),61)),Q(e,oc),Jt(s.i,(Te(),os),(oa(),L7)),u(Q(Fa(s.i),Gc),21).Fc((oo(),f7))}function h2n(t,e,n){var r,s,o,h,d,w;if(o=0,h=0,t.c)for(w=new S(t.d.i.j);w.ao.a?-1:s.aw){for(C=t.d,t.d=Pt(HAt,I8t,63,2*w+4,0,1),o=0;o=9223372036854776e3?(N8(),Z8t):(s=!1,t<0&&(s=!0,t=-t),r=0,t>=x2&&(r=ps(t/x2),t-=r*x2),n=0,t>=f6&&(n=ps(t/f6),t-=n*f6),e=ps(t),o=ru(e,n,r),s&&vit(o),o)}function x2n(t,e){var n,r,s,o;for(n=!e||!t.u.Hc((Qu(),tg)),o=0,s=new S(t.e.Cf());s.a=-e&&r==e?new la(de(n-1),de(r)):new la(de(n),de(r-1))}function Ice(){return ro(),ct(ot(hxn,1),ae,77,0,[U7t,H7t,hS,rlt,hTt,gG,TG,r7,uTt,tTt,oTt,n7,lTt,Q7t,fTt,B7t,wG,ilt,fG,xG,gTt,yG,R7t,cTt,pTt,kG,dTt,dG,K7t,sTt,iTt,CG,z7t,hG,bG,$7t,e7,nTt,Z7t,aTt,fS,G7t,q7t,rTt,J7t,vG,EG,j7t,mG,eTt,pG,Y7t,W7t,bO,lG,X7t,V7t])}function C2n(t,e,n){t.d=0,t.b=0,e.k==(Gn(),Hc)&&n.k==Hc&&u(Q(e,(se(),_i)),10)==u(Q(n,_i),10)&&(Grt(e).j==(be(),Nn)?bce(t,e,n):bce(t,n,e)),e.k==Hc&&n.k==Zs?Grt(e).j==(be(),Nn)?t.d=1:t.b=1:n.k==Hc&&e.k==Zs&&(Grt(n).j==(be(),Nn)?t.b=1:t.d=1),ffn(t,e,n)}function _2n(t){var e,n,r,s,o,h,d,w,k,C,M;return M=T4t(t),e=t.a,w=e!=null,w&&p8(M,"category",t.a),s=fM(new Tm(t.d)),h=!s,h&&(k=new bg,Wf(M,"knownOptions",k),n=new mzt(k),va(new Tm(t.d),n)),o=fM(t.g),d=!o,d&&(C=new bg,Wf(M,"supportedFeatures",C),r=new yzt(C),va(t.g,r)),M}function S2n(t){var e,n,r,s,o,h,d,w,k;for(r=!1,e=336,n=0,o=new OWt(t.length),d=t,w=0,k=d.length;w>16!=7&&e){if(lE(t,e))throw rt(new Pn(K_+Rae(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?Q3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,1,sN,r)),r=Yvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,7,e,e))}function Dce(t,e){var n,r;if(e!=t.Cb||t.Db>>16!=3&&e){if(lE(t,e))throw rt(new Pn(K_+Wre(t)));r=null,t.Cb&&(r=(n=t.Db>>16,n>=0?J3t(t,r):t.Cb.ih(t,-1-n,null,r))),e&&(r=u(e,49).gh(t,0,oN,r)),r=Xvt(t,e,r),r&&r.Fi()}else t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,3,e,e))}function Zst(t,e){bE();var n,r,s,o,h,d,w,k,C;return e.d>t.d&&(d=t,t=e,e=d),e.d<63?vvn(t,e):(h=(t.d&-2)<<4,k=umt(t,h),C=umt(e,h),r=gat(t,Gx(k,h)),s=gat(e,Gx(C,h)),w=Zst(k,C),n=Zst(r,s),o=Zst(gat(k,r),gat(s,C)),o=kat(kat(o,w),n),o=Gx(o,h),w=Gx(w,h<<1),kat(kat(w,o),n))}function L2n(t,e,n){var r,s,o,h,d;for(h=QC(t,n),d=Pt(o0,zg,10,e.length,0,1),r=0,o=h.Kc();o.Ob();)s=u(o.Pb(),11),je(Re(Q(s,(se(),kO))))&&(d[r++]=u(Q(s,Zu),10));if(r=0;o+=n?1:-1)h=h|e.c.Sf(w,o,n,r&&!je(Re(Q(e.j,(se(),Mw))))&&!je(Re(Q(e.j,(se(),K4))))),h=h|e.q._f(w,o,n),h=h|vue(t,w[o],n,r);return Ns(t.c,e),h}function lq(t,e,n){var r,s,o,h,d,w,k,C,M,F;for(C=bZt(t.j),M=0,F=C.length;M1&&(t.a=!0),Vtn(u(n.b,65),Li(nc(u(e.b,65).c),ud(na(nc(u(n.b,65).a),u(e.b,65).a),s))),MQt(t,e),Oce(t,n)}function Nce(t){var e,n,r,s,o,h,d;for(o=new S(t.a.a);o.a0&&o>0?h.p=e++:r>0?h.p=n++:o>0?h.p=s++:h.p=n++}vn(),Xs(t.j,new _L)}function N2n(t){var e,n;n=null,e=u(Fe(t.g,0),17);do{if(n=e.d.i,Vs(n,(se(),Rh)))return u(Q(n,Rh),11).i;if(n.k!=(Gn(),Ds)&&zr(new ar(lr(Ms(n).a.Kc(),new z))))e=u(Lr(new ar(lr(Ms(n).a.Kc(),new z))),17);else if(n.k!=Ds)return null}while(n&&n.k!=(Gn(),Ds));return n}function P2n(t,e){var n,r,s,o,h,d,w,k,C;for(d=e.j,h=e.g,w=u(Fe(d,d.c.length-1),113),C=(An(0,d.c.length),u(d.c[0],113)),k=vst(t,h,w,C),o=1;ok&&(w=n,C=s,k=r);e.a=C,e.c=w}function F2n(t,e){var n,r;if(r=YM(t.b,e.b),!r)throw rt(new Fo("Invalid hitboxes for scanline constraint calculation."));(zne(e.b,u(FQe(t.b,e.b),57))||zne(e.b,u(PQe(t.b,e.b),57)))&&(qd(),e.b+""),t.a[e.b.f]=u(gnt(t.b,e.b),57),n=u(dnt(t.b,e.b),57),n&&(t.a[n.f]=e.b)}function vf(t){if(!t.a.d||!t.a.e)throw rt(new Fo((L0(Yge),Yge.k+" must have a source and target "+(L0(JEt),JEt.k)+" specified.")));if(t.a.d==t.a.e)throw rt(new Fo("Network simplex does not support self-loops: "+t.a+" "+t.a.d+" "+t.a.e));return pj(t.a.d.g,t.a),pj(t.a.e.b,t.a),t.a}function B2n(t,e,n){var r,s,o,h,d,w,k;for(k=new Lp(new w$t(t)),h=ct(ot(Fbe,1),Kfe,11,0,[e,n]),d=0,w=h.length;dw-t.b&&dw-t.a&&d0&&++H;++F}return H}function W2n(t,e){var n,r,s,o,h;for(h=u(Q(e,(hw(),a_t)),425),o=ei(e.b,0);o.b!=o.d.c;)if(s=u(ti(o),86),t.b[s.g]==0){switch(h.g){case 0:cse(t,s);break;case 1:Ypn(t,s)}t.b[s.g]=2}for(r=ei(t.a,0);r.b!=r.d.c;)n=u(ti(r),188),ry(n.b.d,n,!0),ry(n.c.b,n,!0);Jt(e,(fc(),JCt),t.a)}function au(t,e){to();var n,r,s,o;return e?e==(Di(),_5e)||(e==g5e||e==U2||e==d5e)&&t!=bLt?new xxt(t,e):(r=u(e,677),n=r.pk(),n||(k8(Eo((Ru(),ma),e)),n=r.pk()),o=(!n.i&&(n.i=new Cr),n.i),s=u(ec(Ao(o.f,t)),1942),!s&&ki(o,t,s=new xxt(t,e)),s):l5e}function K2n(t,e){var n,r,s,o,h,d,w,k,C;for(w=u(Q(t,(se(),_i)),11),k=Ko(ct(ot(Us,1),te,8,0,[w.i.n,w.n,w.a])).a,C=t.i.n.b,n=gd(t.e),s=n,o=0,h=s.length;o0?o.a?(d=o.b.rf().a,n>d&&(s=(n-d)/2,o.d.b=s,o.d.c=s)):o.d.c=t.s+n:TC(t.u)&&(r=C4t(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.rf().a&&(o.d.c=r.c+r.b-o.b.rf().a))}function Z2n(t,e){var n,r,s,o;for(wr(e,"Semi-Interactive Crossing Minimization Processor",1),n=!1,s=new S(t.b);s.a=0){if(e==n)return new la(de(-e-1),de(-e-1));if(e==-n)return new la(de(-e),de(n+1))}return b.Math.abs(e)>b.Math.abs(n)?e<0?new la(de(-e),de(n)):new la(de(-e),de(n+1)):new la(de(e+1),de(n))}function evn(t){var e,n;n=u(Q(t,(Te(),cu)),163),e=u(Q(t,(se(),O2)),303),n==(hh(),fb)?(Jt(t,cu,CO),Jt(t,O2,(B0(),U4))):n==Fy?(Jt(t,cu,CO),Jt(t,O2,(B0(),A6))):e==(B0(),U4)?(Jt(t,cu,fb),Jt(t,O2,yO)):e==A6&&(Jt(t,cu,Fy),Jt(t,O2,yO))}function hq(){hq=Z,NO=new AQ,Pme=bi(new Hs,(Wa(),ou),(ro(),fG)),Rme=Ku(bi(new Hs,ou,yG),Io,mG),jme=aw(aw(OR(Ku(bi(new Hs,Ad,TG),Io,EG),qc),kG),CG),Fme=Ku(bi(bi(bi(new Hs,lb,gG),qc,bG),qc,e7),Io,pG),Bme=Ku(bi(bi(new Hs,qc,e7),qc,hG),Io,lG)}function b_(){b_=Z,qme=bi(Ku(new Hs,(Wa(),Io),(ro(),Y7t)),ou,fG),Ume=aw(aw(OR(Ku(bi(new Hs,Ad,TG),Io,EG),qc),kG),CG),Hme=Ku(bi(bi(bi(new Hs,lb,gG),qc,bG),qc,e7),Io,pG),Vme=bi(bi(new Hs,ou,yG),Io,mG),Gme=Ku(bi(bi(new Hs,qc,e7),qc,hG),Io,lG)}function nvn(t,e,n,r,s){var o,h;(!Va(e)&&e.c.i.c==e.d.i.c||!Yee(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])),n))&&!Va(e)&&(e.c==s?h8(e.a,0,new yo(n)):ni(e.a,new yo(n)),r&&!S0(t.a,n)&&(h=u(Q(e,(Te(),_o)),74),h||(h=new Du,Jt(e,_o,h)),o=new yo(n),hs(h,o,h.c.b,h.c),Ns(t.a,o)))}function rvn(t){var e,n;for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),e.c.i.k!=(Gn(),Sl))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function ivn(t,e,n){var r,s,o,h,d,w,k;if(s=Jre(t.Db&254),s==0)t.Eb=n;else{if(s==1)d=Pt(Xn,Ie,1,2,5,1),o=bst(t,e),o==0?(d[0]=n,d[1]=t.Eb):(d[0]=t.Eb,d[1]=n);else for(d=Pt(Xn,Ie,1,s+1,5,1),h=s2(t.Eb),r=2,w=0,k=0;r<=128;r<<=1)r==e?d[k++]=n:t.Db&r&&(d[k++]=h[w++]);t.Eb=d}t.Db|=e}function Fce(t,e,n){var r,s,o,h;for(this.b=new le,s=0,r=0,h=new S(t);h.a0&&(o=u(Fe(this.b,0),167),s+=o.o,r+=o.p),s*=2,r*=2,e>1?s=ps(b.Math.ceil(s*e)):r=ps(b.Math.ceil(r/e)),this.a=new w3t(s,r)}function Bce(t,e,n,r,s,o){var h,d,w,k,C,M,F,H,V,Y,tt,gt;for(C=r,e.j&&e.o?(H=u(Jn(t.f,e.A),57),Y=H.d.c+H.d.b,--C):Y=e.a.c+e.a.b,M=s,n.q&&n.o?(H=u(Jn(t.f,n.C),57),k=H.d.c,++M):k=n.a.c,tt=k-Y,w=b.Math.max(2,M-C),d=tt/w,V=Y+d,F=C;F=0;h+=s?1:-1){for(d=e[h],w=r==(be(),Hn)?s?Yo(d,r):a2(Yo(d,r)):s?a2(Yo(d,r)):Yo(d,r),o&&(t.c[d.p]=w.gc()),M=w.Kc();M.Ob();)C=u(M.Pb(),11),t.d[C.p]=k++;As(n,w)}}function Rce(t,e,n){var r,s,o,h,d,w,k,C;for(o=Xt(ye(t.b.Kc().Pb())),k=Xt(ye(dcn(e.b))),r=ud(nc(t.a),k-n),s=ud(nc(e.a),n-o),C=Li(r,s),ud(C,1/(k-o)),this.a=C,this.b=new le,d=!0,h=t.b.Kc(),h.Pb();h.Ob();)w=Xt(ye(h.Pb())),d&&w-n>wct&&(this.b.Fc(n),d=!1),this.b.Fc(w);d&&this.b.Fc(n)}function svn(t){var e,n,r,s;if(bwn(t,t.n),t.d.c.length>0){for(P9(t.c);l5t(t,u(J(new S(t.e.a)),121))>5,e&=31,r>=t.d)return t.e<0?(Jp(),_ut):(Jp(),QE);if(o=t.d-r,s=Pt(Tr,Xr,25,o+1,15,1),Z0n(s,o,t.a,r,e),t.e<0){for(n=0;n0&&t.a[n]<<32-e){for(n=0;n=0?!1:(n=E4((Ru(),ma),s,e),n?(r=n.Zj(),(r>1||r==-1)&&$v(Eo(ma,n))!=3):!0)):!1}function uvn(t,e,n,r){var s,o,h,d,w;return d=Mo(u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82)),w=Mo(u(St((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82)),ts(d)==ts(w)||Zm(w,d)?null:(h=rI(e),h==n?r:(o=u(Jn(t.a,h),10),o&&(s=o.e,s)?s:null))}function lvn(t,e){var n;switch(n=u(Q(t,(Te(),ZG)),276),wr(e,"Label side selection ("+n+")",1),n.g){case 0:nce(t,(jl(),u0));break;case 1:nce(t,(jl(),wb));break;case 2:vle(t,(jl(),u0));break;case 3:vle(t,(jl(),wb));break;case 4:Zce(t,(jl(),u0));break;case 5:Zce(t,(jl(),wb))}or(e)}function D5t(t,e,n){var r,s,o,h,d,w;if(r=YKe(n,t.length),h=t[r],h[0].k==(Gn(),xs))for(o=nHt(n,h.length),w=e.j,s=0;s0&&(n[0]+=t.d,h-=n[0]),n[2]>0&&(n[2]+=t.d,h-=n[2]),o=b.Math.max(0,h),n[1]=b.Math.max(n[1],h),hmt(t,tu,s.c+r.b+n[0]-(n[1]-h)/2,n),e==tu&&(t.c.b=o,t.c.c=s.c+r.b+(o-h)/2)}function Yce(){this.c=Pt(ia,vo,25,(be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])).length,15,1),this.b=Pt(ia,vo,25,ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]).length,15,1),this.a=Pt(ia,vo,25,ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn]).length,15,1),xbt(this.c,ss),xbt(this.b,Ts),xbt(this.a,Ts)}function jc(t,e,n){var r,s,o,h;if(e<=n?(s=e,o=n):(s=n,o=e),r=0,t.b==null)t.b=Pt(Tr,Xr,25,2,15,1),t.b[0]=s,t.b[1]=o,t.c=!0;else{if(r=t.b.length,t.b[r-1]+1==s){t.b[r-1]=o;return}h=Pt(Tr,Xr,25,r+2,15,1),Ic(t.b,0,h,0,r),t.b=h,t.b[r-1]>=s&&(t.c=!1,t.a=!1),t.b[r++]=s,t.b[r]=o,t.c||b4(t)}}function wvn(t,e,n){var r,s,o,h,d,w,k;for(k=e.d,t.a=new Yc(k.c.length),t.c=new Cr,d=new S(k);d.a=0?t._g(k,!1,!0):lw(t,n,!1),58));t:for(o=M.Kc();o.Ob();){for(s=u(o.Pb(),56),C=0;C1;)dy(s,s.i-1);return r}function Evn(t,e){var n,r,s,o,h,d,w;for(wr(e,"Comment post-processing",1),o=new S(t.b);o.at.d[h.p]&&(n+=smt(t.b,o),qp(t.a,de(o)));for(;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function Jce(t,e,n){var r,s,o,h;for(o=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i,s=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));s.e!=s.i.gc();)r=u(dr(s),33),(!r.a&&(r.a=new he(ns,r,10,11)),r.a).i==0||(o+=Jce(t,r,!1));if(n)for(h=ts(e);h;)o+=(!h.a&&(h.a=new he(ns,h,10,11)),h.a).i,h=ts(h);return o}function dy(t,e){var n,r,s,o;return t.ej()?(r=null,s=t.fj(),t.ij()&&(r=t.kj(t.pi(e),null)),n=t.Zi(4,o=r6(t,e),null,e,s),t.bj()&&o!=null&&(r=t.dj(o,r)),r?(r.Ei(n),r.Fi()):t.$i(n),o):(o=r6(t,e),t.bj()&&o!=null&&(r=t.dj(o,null),r&&r.Fi()),o)}function Cvn(t){var e,n,r,s,o,h,d,w,k,C;for(k=t.a,e=new qs,w=0,r=new S(t.d);r.ad.d&&(C=d.d+d.a+k));n.c.d=C,e.a.zc(n,e),w=b.Math.max(w,n.c.d+n.c.a)}return w}function oo(){oo=Z,RG=new Dm("COMMENTS",0),bh=new Dm("EXTERNAL_PORTS",1),vS=new Dm("HYPEREDGES",2),jG=new Dm("HYPERNODES",3),f7=new Dm("NON_FREE_PORTS",4),V4=new Dm("NORTH_SOUTH_PORTS",5),wS=new Dm(d1e,6),l7=new Dm("CENTER_LABELS",7),h7=new Dm("END_LABELS",8),$G=new Dm("PARTITIONS",9)}function gy(t){var e,n,r,s,o;for(s=new le,e=new yC((!t.a&&(t.a=new he(ns,t,10,11)),t.a)),r=new ar(lr(G0(t).a.Kc(),new z));zr(r);)n=u(Lr(r),79),Et(St((!n.b&&(n.b=new Cn(br,n,4,7)),n.b),0),186)||(o=Mo(u(St((!n.c&&(n.c=new Cn(br,n,5,8)),n.c),0),82)),e.a._b(o)||(s.c[s.c.length]=o));return s}function _vn(t){var e,n,r,s,o,h;for(o=new qs,e=new yC((!t.a&&(t.a=new he(ns,t,10,11)),t.a)),s=new ar(lr(G0(t).a.Kc(),new z));zr(s);)r=u(Lr(s),79),Et(St((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),186)||(h=Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82)),e.a._b(h)||(n=o.a.zc(h,o),n==null));return o}function Svn(t,e,n,r,s){return r<0?(r=p4(t,s,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat]),e),r<0&&(r=p4(t,s,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Avn(t,e,n,r,s){return r<0?(r=p4(t,s,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat]),e),r<0&&(r=p4(t,s,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),e)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function Lvn(t,e,n,r,s,o){var h,d,w,k;if(d=32,r<0){if(e[0]>=t.length||(d=ba(t,e[0]),d!=43&&d!=45)||(++e[0],r=rq(t,e),r<0))return!1;d==45&&(r=-r)}return d==32&&e[0]-n==2&&s.b==2&&(w=new _R,k=w.q.getFullYear()-nb+nb-80,h=k%100,o.a=r==h,r+=(k/100|0)*100+(r=k&&(w=r);w&&(C=b.Math.max(C,w.a.o.a)),C>F&&(M=k,F=C)}return M}function Dvn(t,e,n){var r,s,o;if(t.e=n,t.d=0,t.b=0,t.f=1,t.i=e,(t.e&16)==16&&(t.i=wwn(t.i)),t.j=t.i.length,fi(t),o=sw(t),t.d!=t.j)throw rt(new Fr(qr((Nr(),Pde))));if(t.g){for(r=0;rF1e?Xs(w,t.b):r<=F1e&&r>B1e?Xs(w,t.d):r<=B1e&&r>R1e?Xs(w,t.c):r<=R1e&&Xs(w,t.a),o=rue(t,w,o);return s}function Jp(){Jp=Z;var t;for(GH=new Lg(1,1),Sut=new Lg(1,10),QE=new Lg(0,0),_ut=new Lg(-1,1),wEt=ct(ot(B4,1),te,91,0,[QE,GH,new Lg(1,2),new Lg(1,3),new Lg(1,4),new Lg(1,5),new Lg(1,6),new Lg(1,7),new Lg(1,8),new Lg(1,9),Sut]),VH=Pt(B4,te,91,32,0,1),t=0;t1,d&&(r=new $e(s,n.b),ni(e.a,r)),zC(e.a,ct(ot(Us,1),te,8,0,[F,M]))}function cue(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,vH),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new zZ))),xe(t,vH,ww,AAt),xe(t,vH,ky,15),xe(t,vH,Hq,de(0)),xe(t,vH,b6,BE)}function P5t(){P5t=Z;var t,e,n,r,s,o;for(lA=Pt(Hu,N4,25,255,15,1),uU=Pt(mh,vd,25,16,15,1),e=0;e<255;e++)lA[e]=-1;for(n=57;n>=48;n--)lA[n]=n-48<<24>>24;for(r=70;r>=65;r--)lA[r]=r-65+10<<24>>24;for(s=102;s>=97;s--)lA[s]=s-97+10<<24>>24;for(o=0;o<10;o++)uU[o]=48+o&ms;for(t=10;t<=15;t++)uU[t]=65+t-10&ms}function dq(t,e,n){var r,s,o,h,d,w,k,C;return d=e.i-t.g/2,w=n.i-t.g/2,k=e.j-t.g/2,C=n.j-t.g/2,o=e.g+t.g/2,h=n.g+t.g/2,r=e.f+t.g/2,s=n.f+t.g/2,d>19)return"-"+uue(Y8(t));for(n=t,r="";!(n.l==0&&n.m==0&&n.h==0);){if(s=Ort(Nq),n=dxt(n,s,!0),e=""+xHt(ob),!(n.l==0&&n.m==0&&n.h==0))for(o=9-e.length;o>0;o--)e="0"+e;r=e+r}return r}function Rvn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var t="__proto__",e=Object.create(null);if(e[t]!==void 0)return!1;var n=Object.getOwnPropertyNames(e);return!(n.length!=0||(e[t]=42,e[t]!==42)||Object.getOwnPropertyNames(e).length==0)}function jvn(t){var e,n,r,s,o,h,d;for(e=!1,n=0,s=new S(t.d.b);s.a=t.a||!k4t(e,n))return-1;if(S8(u(r.Kb(e),20)))return 1;for(s=0,h=u(r.Kb(e),20).Kc();h.Ob();)if(o=u(h.Pb(),17),w=o.c.i==e?o.d.i:o.c.i,d=B5t(t,w,n,r),d==-1||(s=b.Math.max(s,d),s>t.c-1))return-1;return s+1}function lue(t,e){var n,r,s,o,h,d;if(Gt(e)===Gt(t))return!0;if(!Et(e,15)||(r=u(e,15),d=t.gc(),r.gc()!=d))return!1;if(h=r.Kc(),t.ni()){for(n=0;n0){if(t.qj(),e!=null){for(o=0;o>24;case 97:case 98:case 99:case 100:case 101:case 102:return t-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return t-65+10<<24>>24;default:throw rt(new od("Invalid hexadecimal"))}}function Hvn(t,e,n){var r,s,o,h;for(wr(n,"Processor order nodes",2),t.a=Xt(ye(Q(e,(hw(),o_t)))),s=new Qi,h=ei(e.b,0);h.b!=h.d.c;)o=u(ti(h),86),je(Re(Q(o,(fc(),Wy))))&&hs(s,o,s.c.b,s.c);r=(Qn(s.b!=0),u(s.a.a.c,86)),Mle(t,r),!n.b&&iit(n,1),q5t(t,r,0-Xt(ye(Q(r,(fc(),xV))))/2,0),!n.b&&iit(n,1),or(n)}function gq(){gq=Z,QEt=new j3("SPIRAL",0),WEt=new j3("LINE_BY_LINE",1),KEt=new j3("MANHATTAN",2),UEt=new j3("JITTER",3),Out=new j3("QUADRANTS_LINE_BY_LINE",4),XEt=new j3("QUADRANTS_MANHATTAN",5),YEt=new j3("QUADRANTS_JITTER",6),VEt=new j3("COMBINE_LINE_BY_LINE_MANHATTAN",7),GEt=new j3("COMBINE_JITTER_MANHATTAN",8)}function fue(t,e,n,r){var s,o,h,d,w,k;for(w=kst(t,n),k=kst(e,n),s=!1;w&&k&&(r||jfn(w,k,n));)h=kst(w,n),d=kst(k,n),vI(e),vI(t),o=w.c,_at(w,!1),_at(k,!1),n?(oy(e,k.p,o),e.p=k.p,oy(t,w.p+1,o),t.p=w.p):(oy(t,w.p,o),t.p=w.p,oy(e,k.p+1,o),e.p=k.p),ko(w,null),ko(k,null),w=h,k=d,s=!0;return s}function Gvn(t,e,n,r){var s,o,h,d,w;for(s=!1,o=!1,d=new S(r.j);d.a=e.length)throw rt(new mo("Greedy SwitchDecider: Free layer not in graph."));this.c=e[t],this.e=new HM(r),cit(this.e,this.c,(be(),Bn)),this.i=new HM(r),cit(this.i,this.c,Hn),this.f=new lYt(this.c),this.a=!o&&s.i&&!s.s&&this.c[0].k==(Gn(),xs),this.a&&ogn(this,t,e.length)}function gue(t,e){var n,r,s,o,h,d;o=!t.B.Hc((cl(),rN)),h=t.B.Hc(vft),t.a=new uie(h,o,t.c),t.n&&Swt(t.a.n,t.n),Jtt(t.g,(Kf(),tu),t.a),e||(r=new r_(1,o,t.c),r.n.a=t.k,Nx(t.p,(be(),Nn),r),s=new r_(1,o,t.c),s.n.d=t.k,Nx(t.p,mr,s),d=new r_(0,o,t.c),d.n.c=t.k,Nx(t.p,Bn,d),n=new r_(0,o,t.c),n.n.b=t.k,Nx(t.p,Hn,n))}function Uvn(t){var e,n,r;switch(e=u(Q(t.d,(Te(),X0)),218),e.g){case 2:n=k5n(t);break;case 3:n=(r=new le,us(Ri(pu(Wo(Wo(new Tn(null,new _n(t.d.b,16)),new CX),new _X),new $T),new pX),new Ptt(r)),r);break;default:throw rt(new Fo("Compaction not supported for "+e+" edges."))}Gyn(t,n),va(new Tm(t.g),new Ott(t))}function Wvn(t,e){var n;return n=new xa,e&&Lo(n,u(Jn(t.a,sN),94)),Et(e,470)&&Lo(n,u(Jn(t.a,aN),94)),Et(e,354)?(Lo(n,u(Jn(t.a,qo),94)),n):(Et(e,82)&&Lo(n,u(Jn(t.a,br),94)),Et(e,239)?(Lo(n,u(Jn(t.a,ns),94)),n):Et(e,186)?(Lo(n,u(Jn(t.a,fl),94)),n):(Et(e,352)&&Lo(n,u(Jn(t.a,Ws),94)),n))}function Zf(){Zf=Z,t7=new eo((ci(),zV),de(1)),sG=new eo(H2,80),sbe=new eo(sAt,5),Xpe=new eo($6,BE),rbe=new eo(fft,de(1)),ibe=new eo(dft,(Fn(),!0)),g7t=new Mv(50),ebe=new eo(q2,g7t),h7t=RV,p7t=US,Qpe=new eo(rft,!1),d7t=YO,tbe=vb,Jpe=z2,Zpe=s5,nbe=Ky,f7t=(P4t(),Hpe),Vut=Wpe,iG=qpe,Gut=Gpe,b7t=Upe}function Kvn(t){var e,n,r,s,o,h,d,w;for(w=new bJt,d=new S(t.a);d.a0&&e=0)return!1;if(e.p=n.b,ue(n.e,e),s==(Gn(),Zs)||s==Hc){for(h=new S(e.j);h.a1||h==-1)&&(o|=16),s.Bb&dc&&(o|=64)),n.Bb&Ya&&(o|=Ay),o|=wf):Et(e,457)?o|=512:(r=e.Bj(),r&&r.i&1&&(o|=256)),t.Bb&512&&(o|=128),o}function v_(t,e){var n,r,s,o,h;for(t=t==null?Tu:(On(t),t),s=0;st.d[d.p]&&(n+=smt(t.b,o),qp(t.a,de(o)))):++h;for(n+=t.b.d*h;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function rwn(t,e){var n;return t.f==Lft?(n=$v(Eo((Ru(),ma),e)),t.e?n==4&&e!=(a6(),W6)&&e!=(a6(),U6)&&e!=(a6(),Mft)&&e!=(a6(),Ift):n==2):t.d&&(t.d.Hc(e)||t.d.Hc(qx(Eo((Ru(),ma),e)))||t.d.Hc(E4((Ru(),ma),t.b,e)))?!0:t.f&&_5t((Ru(),t.f),ZM(Eo(ma,e)))?(n=$v(Eo(ma,e)),t.e?n==4:n==2):!1}function iwn(t,e,n,r){var s,o,h,d,w,k,C,M;return h=u(qe(n,(ci(),z6)),8),w=h.a,C=h.b+t,s=b.Math.atan2(C,w),s<0&&(s+=I4),s+=e,s>I4&&(s-=I4),d=u(qe(r,z6),8),k=d.a,M=d.b+t,o=b.Math.atan2(M,k),o<0&&(o+=I4),o+=e,o>I4&&(o-=I4),y1(),gf(1e-10),b.Math.abs(s-o)<=1e-10||s==o||isNaN(s)&&isNaN(o)?0:so?1:Lv(isNaN(s),isNaN(o))}function rat(t){var e,n,r,s,o,h,d;for(d=new Cr,r=new S(t.a.b);r.a=t.o)throw rt(new _pt);d=e>>5,h=e&31,o=M0(1,Sr(M0(h,1))),s?t.n[n][d]=C1(t.n[n][d],o):t.n[n][d]=Ps(t.n[n][d],Ivt(o)),o=M0(o,1),r?t.n[n][d]=C1(t.n[n][d],o):t.n[n][d]=Ps(t.n[n][d],Ivt(o))}catch(w){throw w=Wi(w),Et(w,320)?rt(new mo(Tot+t.o+"*"+t.p+Cot+e+Ka+n+_ot)):rt(w)}}function q5t(t,e,n,r){var s,o,h;e&&(o=Xt(ye(Q(e,(fc(),Yg))))+r,h=n+Xt(ye(Q(e,xV)))/2,Jt(e,Lht,de(Sr(ku(b.Math.round(o))))),Jt(e,t_t,de(Sr(ku(b.Math.round(h))))),e.d.b==0||q5t(t,u(lj((s=ei(new Cp(e).a.d,0),new bx(s))),86),n+Xt(ye(Q(e,xV)))+t.a,r+Xt(ye(Q(e,k7)))),Q(e,Aht)!=null&&q5t(t,u(Q(e,Aht),86),n,r))}function awn(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(w=Fa(e.a),s=Xt(ye(Q(w,(Te(),R2))))*2,C=Xt(ye(Q(w,Z4))),k=b.Math.max(s,C),o=Pt(ia,vo,25,e.f-e.c+1,15,1),r=-k,n=0,d=e.b.Kc();d.Ob();)h=u(d.Pb(),10),r+=t.a[h.c.p]+k,o[n++]=r;for(r+=t.a[e.a.c.p]+k,o[n++]=r,F=new S(e.e);F.a0&&(r=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!r||Vr(Vr((e.a+=' "',e),r),'"'))),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function Tue(t){var e,n,r;return t.Db&64?Ost(t):(e=new Il(d8t),n=t.k,n?Vr(Vr((e.a+=' "',e),n),'"'):(!t.n&&(t.n=new he(qo,t,1,7)),t.n.i>0&&(r=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!r||Vr(Vr((e.a+=' "',e),r),'"'))),Vr(Cv(Vr(Cv(Vr(Cv(Vr(Cv((e.a+=" (",e),t.i),","),t.j)," | "),t.g),","),t.f),")"),e.a)}function sat(t,e){var n,r,s,o,h,d,w;if(e==null||e.length==0)return null;if(s=u(Fc(t.a,e),149),!s){for(r=(d=new b1(t.b).a.vc().Kc(),new v1(d));r.a.Ob();)if(n=(o=u(r.a.Pb(),42),u(o.dd(),149)),h=n.c,w=e.length,hn(h.substr(h.length-w,w),e)&&(e.length==h.length||ba(h,h.length-e.length-1)==46)){if(s)return null;s=n}s&&xo(t.a,e,s)}return s}function uwn(t,e){var n,r,s,o;return n=new Jl,r=u(Pl(pu(new Tn(null,new _n(t.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[(I1(),Ly),Gl]))),21),s=r.gc(),r=u(Pl(pu(new Tn(null,new _n(e.f,16)),n),Ym(new cn,new li,new di,new Ee,ct(ot(ll,1),ae,132,0,[Ly,Gl]))),21),o=r.gc(),ss.p?(Fs(o,mr),o.d&&(d=o.o.b,e=o.a.b,o.a.b=d-e)):o.j==mr&&s.p>t.p&&(Fs(o,Nn),o.d&&(d=o.o.b,e=o.a.b,o.a.b=-(d-e)));break}return s}function hwn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V;if(o=n,n1,d&&(r=new $e(s,n.b),ni(e.a,r)),zC(e.a,ct(ot(Us,1),te,8,0,[F,M]))}function aat(t,e,n){var r,s,o,h,d,w;if(e)if(n<=-1){if(r=yn(e.Tg(),-1-n),Et(r,99))return u(r,18);for(h=u(e.ah(r),153),d=0,w=h.gc();d0){for(s=w.length;s>0&&w[s-1]=="";)--s;s=40,h&&kmn(t),_yn(t),svn(t),n=Yre(t),r=0;n&&r0&&ni(t.f,o)):(t.c[h]-=k+1,t.c[h]<=0&&t.a[h]>0&&ni(t.e,o))))}function Bwn(t){var e,n,r,s,o,h,d,w,k;for(d=new Lp(u(Ar(new Fd),62)),k=Ts,n=new S(t.d);n.a=0&&wn?e:n;k<=M;++k)k==n?d=r++:(o=s[k],C=V.rl(o.ak()),k==e&&(w=k==M&&!C?r-1:r),C&&++r);return F=u(t_(t,e,n),72),d!=w&&Kk(t,new gI(t.e,7,h,de(d),H.dd(),w)),F}}else return u(qst(t,e,n),72);return u(t_(t,e,n),72)}function zwn(t,e){var n,r,s,o,h,d,w;for(wr(e,"Port order processing",1),w=u(Q(t,(Te(),hCt)),421),r=new S(t.b);r.a=0&&(d=Gfn(t,h),!(d&&(k<22?w.l|=1<>>1,h.m=C>>>1|(M&1)<<21,h.l=F>>>1|(C&1)<<21,--k;return n&&vit(w),o&&(r?(ob=Y8(t),s&&(ob=Bne(ob,(N8(),J8t)))):ob=ru(t.l,t.m,t.h)),w}function Gwn(t,e){var n,r,s,o,h,d,w,k,C,M;for(k=t.e[e.c.p][e.p]+1,w=e.c.a.c.length+1,d=new S(t.a);d.a0&&(Rr(0,t.length),t.charCodeAt(0)==45||(Rr(0,t.length),t.charCodeAt(0)==43))?1:0,r=h;rn)throw rt(new od(vw+t+'"'));return d}function Vwn(t){var e,n,r,s,o,h,d;for(h=new Qi,o=new S(t.a);o.a1)&&e==1&&u(t.a[t.b],10).k==(Gn(),Sl)?c6(u(t.a[t.b],10),(jl(),u0)):r&&(!n||(t.c-t.b&t.a.length-1)>1)&&e==1&&u(t.a[t.c-1&t.a.length-1],10).k==(Gn(),Sl)?c6(u(t.a[t.c-1&t.a.length-1],10),(jl(),wb)):(t.c-t.b&t.a.length-1)==2?(c6(u(KC(t),10),(jl(),u0)),c6(u(KC(t),10),wb)):jbn(t,s),rmt(t)}function Kwn(t,e,n){var r,s,o,h,d;for(o=0,s=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));s.e!=s.i.gc();)r=u(dr(s),33),h="",(!r.n&&(r.n=new he(qo,r,1,7)),r.n).i==0||(h=u(St((!r.n&&(r.n=new he(qo,r,1,7)),r.n),0),137).a),d=new yit(o++,e,h),Lo(d,r),Jt(d,(fc(),jS),r),d.e.b=r.j+r.f/2,d.f.a=b.Math.max(r.g,1),d.e.a=r.i+r.g/2,d.f.b=b.Math.max(r.f,1),ni(e.b,d),su(n.f,r,d)}function Ywn(t){var e,n,r,s,o;r=u(Q(t,(se(),_i)),33),o=u(qe(r,(Te(),F2)),174).Hc((_l(),V2)),t.e||(s=u(Q(t,Gc),21),e=new $e(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),s.Hc((oo(),bh))?(bo(r,os,(oa(),Vc)),gw(r,e.a,e.b,!1,!0)):je(Re(qe(r,Zlt)))||gw(r,e.a,e.b,!0,!0)),o?bo(r,F2,un(V2)):bo(r,F2,(n=u(Hf(tA),9),new rh(n,u(uf(n,n.length),9),0)))}function X5t(t,e,n){var r,s,o,h;if(e[0]>=t.length)return n.o=0,!0;switch(ba(t,e[0])){case 43:s=1;break;case 45:s=-1;break;default:return n.o=0,!0}if(++e[0],o=e[0],h=rq(t,e),h==0&&e[0]==o)return!1;if(e[0]=0&&d!=n&&(o=new Qs(t,1,d,h,null),r?r.Ei(o):r=o),n>=0&&(o=new Qs(t,1,n,d==n?h:null,e),r?r.Ei(o):r=o)),r}function que(t){var e,n,r;if(t.b==null){if(r=new xg,t.i!=null&&(fo(r,t.i),r.a+=":"),t.f&256){for(t.f&256&&t.a!=null&&(hnn(t.i)||(r.a+="//"),fo(r,t.a)),t.d!=null&&(r.a+="/",fo(r,t.d)),t.f&16&&(r.a+="/"),e=0,n=t.j.length;eF?!1:(M=(w=E_(r,F,!1),w.a),C+d+M<=e.b&&(dI(n,o-n.s),n.c=!0,dI(r,o-n.s),YI(r,n.s,n.t+n.d+d),r.k=!0,cyt(n.q,r),H=!0,s&&(Y$(e,r),r.j=e,t.c.length>h&&(tD((An(h,t.c.length),u(t.c[h],200)),r),(An(h,t.c.length),u(t.c[h],200)).a.c.length==0&&Ag(t,h)))),H)}function rmn(t,e){var n,r,s,o,h,d;if(wr(e,"Partition midprocessing",1),s=new Hv,us(Ri(new Tn(null,new _n(t.a,16)),new RY),new bv(s)),s.d!=0){for(d=u(Pl(PQt((o=s.i,new Tn(null,(o||(s.i=new W3(s,s.c))).Nc()))),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),r=d.Kc(),n=u(r.Pb(),19);r.Ob();)h=u(r.Pb(),19),a2n(u(Ai(s,n),21),u(Ai(s,h),21)),n=h;or(e)}}function Vue(t,e,n){var r,s,o,h,d,w,k,C;if(e.p==0){for(e.p=1,h=n,h||(s=new le,o=(r=u(Hf(Xa),9),new rh(r,u(uf(r,r.length),9),0)),h=new la(s,o)),u(h.a,15).Fc(e),e.k==(Gn(),xs)&&u(h.b,21).Fc(u(Q(e,(se(),oc)),61)),w=new S(e.j);w.a0){if(s=u(t.Ab.g,1934),e==null){for(o=0;o1)for(r=new S(s);r.an.s&&dd&&(d=s,C.c=Pt(Xn,Ie,1,0,5,1)),s==d&&ue(C,new la(n.c.i,n)));vn(),Xs(C,t.c),$m(t.b,w.p,C)}}function umn(t,e){var n,r,s,o,h,d,w,k,C;for(h=new S(e.b);h.ad&&(d=s,C.c=Pt(Xn,Ie,1,0,5,1)),s==d&&ue(C,new la(n.d.i,n)));vn(),Xs(C,t.c),$m(t.f,w.p,C)}}function Wue(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,xw),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new IZ))),xe(t,xw,ww,SSt),xe(t,xw,ky,15),xe(t,xw,jD,de(0)),xe(t,xw,gH,De(TSt)),xe(t,xw,L4,De(R3e)),xe(t,xw,v6,De(j3e)),xe(t,xw,b6,V1e),xe(t,xw,$D,De(CSt)),xe(t,xw,w6,De(_St)),xe(t,xw,o8t,De(Jht)),xe(t,xw,cH,De(B3e))}function Kue(t,e){var n,r,s,o,h,d,w,k,C;if(s=t.i,h=s.o.a,o=s.o.b,h<=0&&o<=0)return be(),Zo;switch(k=t.n.a,C=t.n.b,d=t.o.a,n=t.o.b,e.g){case 2:case 1:if(k<0)return be(),Bn;if(k+d>h)return be(),Hn;break;case 4:case 3:if(C<0)return be(),Nn;if(C+n>o)return be(),mr}return w=(k+d/2)/h,r=(C+n/2)/o,w+r<=1&&w-r<=0?(be(),Bn):w+r>=1&&w-r>=0?(be(),Hn):r<.5?(be(),Nn):(be(),mr)}function lmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(n=!1,C=Xt(ye(Q(e,(Te(),Bw)))),V=eb*C,s=new S(e.b);s.aw+V&&(Y=M.g+F.g,F.a=(F.g*F.a+M.g*M.a)/Y,F.g=Y,M.f=F,n=!0)),o=d,M=F;return n}function Yue(t,e,n,r,s,o,h){var d,w,k,C,M,F;for(F=new Ax,k=e.Kc();k.Ob();)for(d=u(k.Pb(),839),M=new S(d.wf());M.a0?d.a?(k=d.b.rf().b,s>k&&(t.v||d.c.d.c.length==1?(h=(s-k)/2,d.d.d=h,d.d.a=h):(n=u(Fe(d.c.d,0),181).rf().b,r=(n-k)/2,d.d.d=b.Math.max(0,r),d.d.a=s-r-k))):d.d.a=t.t+s:TC(t.u)&&(o=C4t(d.b),o.d<0&&(d.d.d=-o.d),o.d+o.a>d.b.rf().b&&(d.d.a=o.d+o.a-d.b.rf().b))}function dmn(t,e){var n;switch(xI(t)){case 6:return ea(e);case 7:return Nm(e);case 8:return Om(e);case 3:return Array.isArray(e)&&(n=xI(e),!(n>=14&&n<=16));case 11:return e!=null&&typeof e===Nat;case 12:return e!=null&&(typeof e===CD||typeof e==Nat);case 0:return rst(e,t.__elementTypeId$);case 2:return znt(e)&&e.im!==Ct;case 1:return znt(e)&&e.im!==Ct||rst(e,t.__elementTypeId$);default:return!0}}function Xue(t,e){var n,r,s,o;return r=b.Math.min(b.Math.abs(t.c-(e.c+e.b)),b.Math.abs(t.c+t.b-e.c)),o=b.Math.min(b.Math.abs(t.d-(e.d+e.a)),b.Math.abs(t.d+t.a-e.d)),n=b.Math.abs(t.c+t.b/2-(e.c+e.b/2)),n>t.b/2+e.b/2||(s=b.Math.abs(t.d+t.a/2-(e.d+e.a/2)),s>t.a/2+e.a/2)?1:n==0&&s==0?0:n==0?o/s+1:s==0?r/n+1:b.Math.min(r/n,o/s)+1}function Que(t,e){var n,r,s,o,h,d;return s=Umt(t),d=Umt(e),s==d?t.e==e.e&&t.a<54&&e.a<54?t.fe.f?1:0:(r=t.e-e.e,n=(t.d>0?t.d:b.Math.floor((t.a-1)*cfe)+1)-(e.d>0?e.d:b.Math.floor((e.a-1)*cfe)+1),n>r+1?s:n0&&(h=J3(h,mle(r))),Lie(o,h))):s0&&t.d!=(jC(),Kut)&&(d+=h*(r.d.a+t.a[e.b][r.b]*(e.d.a-r.d.a)/n)),n>0&&t.d!=(jC(),Uut)&&(w+=h*(r.d.b+t.a[e.b][r.b]*(e.d.b-r.d.b)/n)));switch(t.d.g){case 1:return new $e(d/o,e.d.b);case 2:return new $e(e.d.a,w/o);default:return new $e(d/o,w/o)}}function Zue(t,e){J8();var n,r,s,o,h;if(h=u(Q(t.i,(Te(),os)),98),o=t.j.g-e.j.g,o!=0||!(h==(oa(),G2)||h==h0||h==Vc))return 0;if(h==(oa(),G2)&&(n=u(Q(t,Wg),19),r=u(Q(e,Wg),19),n&&r&&(s=n.a-r.a,s!=0)))return s;switch(t.j.g){case 1:return Ls(t.n.a,e.n.a);case 2:return Ls(t.n.b,e.n.b);case 3:return Ls(e.n.a,t.n.a);case 4:return Ls(e.n.b,t.n.b);default:throw rt(new Fo(b6t))}}function Jue(t){var e,n,r,s,o,h;for(n=(!t.a&&(t.a=new Ss(Hh,t,5)),t.a).i+2,h=new Yc(n),ue(h,new $e(t.j,t.k)),us(new Tn(null,(!t.a&&(t.a=new Ss(Hh,t,5)),new _n(t.a,16))),new W$t(h)),ue(h,new $e(t.b,t.c)),e=1;e0&&(PI(w,!1,(ao(),jh)),PI(w,!0,kf)),mu(e.g,new GGt(t,n)),ki(t.g,e,n)}function ele(){ele=Z;var t;for(oEt=ct(ot(Tr,1),Xr,25,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),Tut=Pt(Tr,Xr,25,37,15,1),Ege=ct(ot(Tr,1),Xr,25,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),cEt=Pt(Lb,aot,25,37,14,1),t=2;t<=36;t++)Tut[t]=ps(b.Math.pow(t,oEt[t])),cEt[t]=eD(Iq,Tut[t])}function pmn(t){var e;if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i!=1)throw rt(new Pn(lde+(!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i));return e=new Du,OI(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))&&Ua(e,Bhe(t,OI(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82)),!1)),OI(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))&&Ua(e,Bhe(t,OI(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82)),!0)),e}function nle(t,e){var n,r,s,o,h;for(e.d?s=t.a.c==(dd(),Rw)?jo(e.b):Ms(e.b):s=t.a.c==(dd(),Kg)?jo(e.b):Ms(e.b),o=!1,r=new ar(lr(s.a.Kc(),new z));zr(r);)if(n=u(Lr(r),17),h=je(t.a.f[t.a.g[e.b.p].p]),!(!h&&!Va(n)&&n.c.i.c==n.d.i.c)&&!(je(t.a.n[t.a.g[e.b.p].p])||je(t.a.n[t.a.g[e.b.p].p]))&&(o=!0,S0(t.b,t.a.g[Cfn(n,e.b).p])))return e.c=!0,e.a=n,e;return e.c=o,e.a=null,e}function bmn(t,e,n,r,s){var o,h,d,w,k,C,M;for(vn(),Xs(t,new jZ),d=new ha(t,0),M=new le,o=0;d.bo*2?(C=new U$(M),k=Fu(h)/xl(h),w=Mat(C,e,new wx,n,r,s,k),Li(Gf(C.e),w),M.c=Pt(Xn,Ie,1,0,5,1),o=0,M.c[M.c.length]=C,M.c[M.c.length]=h,o=Fu(C)*xl(C)+Fu(h)*xl(h)):(M.c[M.c.length]=h,o+=Fu(h)*xl(h));return M}function Z5t(t,e,n){var r,s,o,h,d,w,k;if(r=n.gc(),r==0)return!1;if(t.ej())if(w=t.fj(),d3t(t,e,n),h=r==1?t.Zi(3,null,n.Kc().Pb(),e,w):t.Zi(5,null,n,e,w),t.bj()){for(d=r<100?null:new Sp(r),o=e+r,s=e;s0){for(h=0;h>16==-15&&t.Cb.nh()&&Urt(new qrt(t.Cb,9,13,n,t.c,Fg(il(u(t.Cb,59)),t))):Et(t.Cb,88)&&t.Db>>16==-23&&t.Cb.nh()&&(e=t.c,Et(e,88)||(e=(dn(),Wh)),Et(n,88)||(n=(dn(),Wh)),Urt(new qrt(t.Cb,9,10,n,e,Fg(Lc(u(t.Cb,26)),t)))))),t.c}function vmn(t,e){var n,r,s,o,h,d,w,k,C,M;for(wr(e,"Hypernodes processing",1),s=new S(t.b);s.an);return s}function ile(t,e){var n,r,s;r=ol(t.d,1)!=0,!je(Re(Q(e.j,(se(),Mw))))&&!je(Re(Q(e.j,K4)))||Gt(Q(e.j,(Te(),db)))===Gt((j0(),gb))?e.c.Tf(e.e,r):r=je(Re(Q(e.j,Mw))),pD(t,e,r,!0),je(Re(Q(e.j,K4)))&&Jt(e.j,K4,(Fn(),!1)),je(Re(Q(e.j,Mw)))&&(Jt(e.j,Mw,(Fn(),!1)),Jt(e.j,K4,!0)),n=Rst(t,e);do{if(iyt(t),n==0)return 0;r=!r,s=n,pD(t,e,r,!1),n=Rst(t,e)}while(s>n);return s}function sle(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;if(e==n)return!0;if(e=c5t(t,e),n=c5t(t,n),r=lst(e),r){if(C=lst(n),C!=r)return C?(w=r.Dj(),V=C.Dj(),w==V&&w!=null):!1;if(h=(!e.d&&(e.d=new Ss(ho,e,1)),e.d),o=h.i,F=(!n.d&&(n.d=new Ss(ho,n,1)),n.d),o==F.i){for(k=0;k0,d=_z(e,o),L2t(n?d.b:d.g,e),o4(d).c.length==1&&hs(r,d,r.c.b,r.c),s=new la(o,e),qp(t.o,s),vu(t.e.a,o))}function ule(t,e){var n,r,s,o,h,d,w;return r=b.Math.abs(Gj(t.b).a-Gj(e.b).a),d=b.Math.abs(Gj(t.b).b-Gj(e.b).b),s=0,w=0,n=1,h=1,r>t.b.b/2+e.b.b/2&&(s=b.Math.min(b.Math.abs(t.b.c-(e.b.c+e.b.b)),b.Math.abs(t.b.c+t.b.b-e.b.c)),n=1-s/r),d>t.b.a/2+e.b.a/2&&(w=b.Math.min(b.Math.abs(t.b.d-(e.b.d+e.b.a)),b.Math.abs(t.b.d+t.b.a-e.b.d)),h=1-w/d),o=b.Math.min(n,h),(1-o)*b.Math.sqrt(r*r+d*d)}function Emn(t){var e,n,r,s;for(Lat(t,t.e,t.f,(qv(),bb),!0,t.c,t.i),Lat(t,t.e,t.f,bb,!1,t.c,t.i),Lat(t,t.e,t.f,e5,!0,t.c,t.i),Lat(t,t.e,t.f,e5,!1,t.c,t.i),Cmn(t,t.c,t.e,t.f,t.i),r=new ha(t.i,0);r.b=65;n--)U1[n]=n-65<<24>>24;for(r=122;r>=97;r--)U1[r]=r-97+26<<24>>24;for(s=57;s>=48;s--)U1[s]=s-48+52<<24>>24;for(U1[43]=62,U1[47]=63,o=0;o<=25;o++)rp[o]=65+o&ms;for(h=26,w=0;h<=51;++h,w++)rp[h]=97+w&ms;for(t=52,d=0;t<=61;++t,d++)rp[t]=48+d&ms;rp[62]=43,rp[63]=47}function Tmn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(t.dc())return new Ta;for(k=0,M=0,s=t.Kc();s.Ob();)r=u(s.Pb(),37),o=r.f,k=b.Math.max(k,o.a),M+=o.a*o.b;for(k=b.Math.max(k,b.Math.sqrt(M)*Xt(ye(Q(u(t.Kc().Pb(),37),(Te(),UG))))),F=0,H=0,w=0,n=e,d=t.Kc();d.Ob();)h=u(d.Pb(),37),C=h.f,F+C.a>k&&(F=0,H+=w+e,w=0),w_(h,F,H),n=b.Math.max(n,F+C.a),w=b.Math.max(w,C.b),F+=C.a+e;return new $e(n+e,H+w+e)}function Cmn(t,e,n,r,s){var o,h,d,w,k,C,M;for(h=new S(e);h.ao)return be(),Hn;break;case 4:case 3:if(w<0)return be(),Nn;if(w+t.f>s)return be(),mr}return h=(d+t.g/2)/o,n=(w+t.f/2)/s,h+n<=1&&h-n<=0?(be(),Bn):h+n>=1&&h-n>=0?(be(),Hn):n<.5?(be(),Nn):(be(),mr)}function _mn(t,e,n,r,s){var o,h;if(o=Oa(Ps(e[0],co),Ps(r[0],co)),t[0]=Sr(o),o=Fp(o,32),n>=s){for(h=1;h0&&(s.b[h++]=0,s.b[h++]=o.b[0]-1),e=1;e0&&(nM(w,w.d-s.d),s.c==(Vf(),pb)&&upt(w,w.a-s.d),w.d<=0&&w.i>0&&hs(e,w,e.c.b,e.c)));for(o=new S(t.f);o.a0&&(x9(d,d.i-s.d),s.c==(Vf(),pb)&&gv(d,d.b-s.d),d.i<=0&&d.d>0&&hs(n,d,n.c.b,n.c)))}function Smn(t,e,n){var r,s,o,h,d,w,k,C;for(wr(n,"Processor compute fanout",1),Yu(t.b),Yu(t.a),d=null,o=ei(e.b,0);!d&&o.b!=o.d.c;)k=u(ti(o),86),je(Re(Q(k,(fc(),Wy))))&&(d=k);for(w=new Qi,hs(w,d,w.c.b,w.c),yhe(t,w),C=ei(e.b,0);C.b!=C.d.c;)k=u(ti(C),86),h=Br(Q(k,(fc(),RS))),s=Fc(t.b,h)!=null?u(Fc(t.b,h),19).a:0,Jt(k,mV,de(s)),r=1+(Fc(t.a,h)!=null?u(Fc(t.a,h),19).a:0),Jt(k,Zme,de(r));or(n)}function Amn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V;for(F=hdn(t,n),w=0;w0),r.a.Xb(r.c=--r.b),M>F+w&&El(r);for(h=new S(H);h.a0),r.a.Xb(r.c=--r.b)}}function Lmn(){gi();var t,e,n,r,s,o;if(Oft)return Oft;for(t=new Nl(4),vy(t,tb(hut,!0)),__(t,tb("M",!0)),__(t,tb("C",!0)),o=new Nl(4),r=0;r<11;r++)jc(o,r,r);return e=new Nl(4),vy(e,tb("M",!0)),jc(e,4448,4607),jc(e,65438,65439),s=new lC(2),m2(s,t),m2(s,fA),n=new lC(2),n.$l(Bj(o,tb("L",!0))),n.$l(e),n=new Wm(3,n),n=new fwt(s,n),Oft=n,Oft}function Mmn(t){var e,n;if(e=Br(qe(t,(ci(),VS))),!Cne(e,t)&&!r2(t,C7)&&((!t.a&&(t.a=new he(ns,t,10,11)),t.a).i!=0||je(Re(qe(t,WO)))))if(e==null||uy(e).length==0){if(!Cne(Vn,t))throw n=Vr(Vr(new Il("Unable to load default layout algorithm "),Vn)," for unconfigured node "),Cq(t,n),rt(new F3(n.a))}else throw n=Vr(Vr(new Il("Layout algorithm '"),e),"' not found for "),Cq(t,n),rt(new F3(n.a))}function fat(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;if(n=t.i,e=t.n,t.b==0)for(H=n.c+e.b,F=n.b-e.b-e.c,h=t.a,w=0,C=h.length;w0&&(M-=r[0]+t.c,r[0]+=t.c),r[2]>0&&(M-=r[2]+t.c),r[1]=b.Math.max(r[1],M),jj(t.a[1],n.c+e.b+r[0]-(r[1]-M)/2,r[1]);for(o=t.a,d=0,k=o.length;d0?(t.n.c.length-1)*t.i:0,r=new S(t.n);r.a1)for(r=ei(s,0);r.b!=r.d.c;)for(n=u(ti(r),231),o=0,w=new S(n.e);w.a0&&(e[0]+=t.c,M-=e[0]),e[2]>0&&(M-=e[2]+t.c),e[1]=b.Math.max(e[1],M),$j(t.a[1],r.d+n.d+e[0]-(e[1]-M)/2,e[1]);else for(V=r.d+n.d,H=r.a-n.d-n.a,h=t.a,w=0,C=h.length;w=0&&o!=n))throw rt(new Pn(XD));for(s=0,w=0;w0||rw(s.b.d,t.b.d+t.b.a)==0&&r.b<0||rw(s.b.d+s.b.a,t.b.d)==0&&r.b>0){d=0;break}}else d=b.Math.min(d,doe(t,s,r));d=b.Math.min(d,dle(t,o,d,r))}return d}function yD(t,e){var n,r,s,o,h,d,w;if(t.b<2)throw rt(new Pn("The vector chain must contain at least a source and a target point."));for(s=(Qn(t.b!=0),u(t.a.a.c,8)),oj(e,s.a,s.b),w=new Lx((!e.a&&(e.a=new Ss(Hh,e,5)),e.a)),h=ei(t,1);h.aXt(x1(h.g,h.d[0]).a)?(Qn(w.b>0),w.a.Xb(w.c=--w.b),Rm(w,h),s=!0):d.e&&d.e.gc()>0&&(o=(!d.e&&(d.e=new le),d.e).Mc(e),k=(!d.e&&(d.e=new le),d.e).Mc(n),(o||k)&&((!d.e&&(d.e=new le),d.e).Fc(h),++h.c));s||(r.c[r.c.length]=h)}function ble(t){var e,n,r;if(H3(u(Q(t,(Te(),os)),98)))for(n=new S(t.j);n.a>>0,"0"+e.toString(16)),r="\\x"+Dl(n,n.length-2,n.length)):t>=Ya?(n=(e=t>>>0,"0"+e.toString(16)),r="\\v"+Dl(n,n.length-6,n.length)):r=""+String.fromCharCode(t&ms)}return r}function gat(t,e){var n,r,s,o,h,d,w,k,C,M;if(h=t.e,w=e.e,w==0)return t;if(h==0)return e.e==0?e:new K3(-e.e,e.d,e.a);if(o=t.d,d=e.d,o+d==2)return n=Ps(t.a[0],co),r=Ps(e.a[0],co),h<0&&(n=O8(n)),w<0&&(r=O8(r)),KI(Yp(n,r));if(s=o!=d?o>d?1:-1:Pyt(t.a,e.a,o),s==-1)M=-w,C=h==w?Frt(e.a,d,t.a,o):Rrt(e.a,d,t.a,o);else if(M=h,h==w){if(s==0)return Jp(),QE;C=Frt(t.a,o,e.a,d)}else C=Rrt(t.a,o,e.a,d);return k=new K3(M,C.length,C),OC(k),k}function sxt(t){var e,n,r,s,o,h;for(this.e=new le,this.a=new le,n=t.b-1;n<3;n++)h8(t,0,u(Qf(t,0),8));if(t.b<4)throw rt(new Pn("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,kbn(this,t.b+this.b-1),h=new le,o=new S(this.e),e=0;e=e.o&&n.f<=e.f||e.a*.5<=n.f&&e.a*1.5>=n.f){if(h=u(Fe(e.n,e.n.c.length-1),211),h.e+h.d+n.g+s<=r&&(o=u(Fe(e.n,e.n.c.length-1),211),o.f-t.f+n.f<=t.b||t.a.c.length==1))return i3t(e,n),!0;if(e.s+n.g<=r&&(e.t+e.d+n.f+s<=t.b||t.a.c.length==1))return ue(e.b,n),d=u(Fe(e.n,e.n.c.length-1),211),ue(e.n,new f$(e.s,d.f+d.a+e.i,e.i)),$3t(u(Fe(e.n,e.n.c.length-1),211),n),lle(e,n),!0}return!1}function wle(t,e,n){var r,s,o,h;return t.ej()?(s=null,o=t.fj(),r=t.Zi(1,h=Krt(t,e,n),n,e,o),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Gt(h)===Gt(n))?(h!=null&&(s=t.dj(h,s)),s=t.cj(n,s),t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)):(t.ij()&&(s=t.lj(h,n,s)),s?(s.Ei(r),s.Fi()):t.$i(r)),h):(h=Krt(t,e,n),t.bj()&&!(t.ni()&&h!=null?yi(h,n):Gt(h)===Gt(n))&&(s=null,h!=null&&(s=t.dj(h,null)),s=t.cj(n,s),s&&s.Fi()),h)}function y_(t,e){var n,r,s,o,h,d,w,k;e%=24,t.q.getHours()!=e&&(r=new b.Date(t.q.getTime()),r.setDate(r.getDate()+1),d=t.q.getTimezoneOffset()-r.getTimezoneOffset(),d>0&&(w=d/60|0,k=d%60,s=t.q.getDate(),n=t.q.getHours(),n+w>=24&&++s,o=new b.Date(t.q.getFullYear(),t.q.getMonth(),s,e+w,t.q.getMinutes()+k,t.q.getSeconds(),t.q.getMilliseconds()),t.q.setTime(o.getTime()))),h=t.q.getTime(),t.q.setTime(h+36e5),t.q.getHours()!=e&&t.q.setTime(h)}function jmn(t,e){var n,r,s,o,h;if(wr(e,"Path-Like Graph Wrapping",1),t.b.c.length==0){or(e);return}if(s=new f5t(t),h=(s.i==null&&(s.i=syt(s,new OF)),Xt(s.i)*s.f),n=h/(s.i==null&&(s.i=syt(s,new OF)),Xt(s.i)),s.b>n){or(e);return}switch(u(Q(t,(Te(),rht)),337).g){case 2:o=new PF;break;case 0:o=new DF;break;default:o=new FF}if(r=o.Vf(t,s),!o.Wf())switch(u(Q(t,aV),338).g){case 2:r=goe(s,r);break;case 1:r=dae(s,r)}Fyn(t,s,r),or(e)}function $mn(t,e){var n,r,s,o;if(Trn(t.d,t.e),t.c.a.$b(),Xt(ye(Q(e.j,(Te(),YG))))!=0||Xt(ye(Q(e.j,YG)))!=0)for(n=FE,Gt(Q(e.j,db))!==Gt((j0(),gb))&&Jt(e.j,(se(),Mw),(Fn(),!0)),o=u(Q(e.j,SS),19).a,s=0;ss&&++k,ue(h,(An(d+k,e.c.length),u(e.c[d+k],19))),w+=(An(d+k,e.c.length),u(e.c[d+k],19)).a-r,++n;n1&&(w>Fu(d)*xl(d)/2||h.b==0)&&(M=new U$(F),C=Fu(d)/xl(d),k=Mat(M,e,new wx,n,r,s,C),Li(Gf(M.e),k),d=M,H.c[H.c.length]=M,w=0,F.c=Pt(Xn,Ie,1,0,5,1)));return As(H,F),H}function Hmn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y;if(n.mh(e)&&(C=(H=e,H?u(r,49).xh(H):null),C))if(Y=n.bh(e,t.a),V=e.t,V>1||V==-1)if(M=u(Y,69),F=u(C,69),M.dc())F.$b();else for(h=!!no(e),o=0,d=t.a?M.Kc():M.Zh();d.Ob();)k=u(d.Pb(),56),s=u(Wv(t,k),56),s?(h?(w=F.Xc(s),w==-1?F.Xh(o,s):o!=w&&F.ji(o,s)):F.Xh(o,s),++o):t.b&&!h&&(F.Xh(o,k),++o);else Y==null?C.Wb(null):(s=Wv(t,Y),s==null?t.b&&!no(e)&&C.Wb(Y):C.Wb(s))}function Gmn(t,e){var n,r,s,o,h,d,w,k;for(n=new CY,s=new ar(lr(jo(e).a.Kc(),new z));zr(s);)if(r=u(Lr(s),17),!Va(r)&&(d=r.c.i,k4t(d,uG))){if(k=B5t(t,d,uG,cG),k==-1)continue;n.b=b.Math.max(n.b,k),!n.a&&(n.a=new le),ue(n.a,d)}for(h=new ar(lr(Ms(e).a.Kc(),new z));zr(h);)if(o=u(Lr(h),17),!Va(o)&&(w=o.d.i,k4t(w,cG))){if(k=B5t(t,w,cG,uG),k==-1)continue;n.d=b.Math.max(n.d,k),!n.c&&(n.c=new le),ue(n.c,w)}return n}function mle(t){bE();var e,n,r,s;if(e=ps(t),t1e6)throw rt(new pR("power of ten too big"));if(t<=vi)return Gx(hD(T6[1],e),e);for(r=hD(T6[1],vi),s=r,n=ku(t-vi),e=ps(t%vi);yc(n,vi)>0;)s=J3(s,r),n=Yp(n,vi);for(s=J3(s,hD(T6[1],e)),s=Gx(s,vi),n=ku(t-vi);yc(n,vi)>0;)s=Gx(s,vi),n=Yp(n,vi);return s=Gx(s,e),s}function Vmn(t,e){var n,r,s,o,h,d,w,k,C;for(wr(e,"Hierarchical port dummy size processing",1),w=new le,C=new le,r=Xt(ye(Q(t,(Te(),Q4)))),n=r*2,o=new S(t.b);o.ak&&r>k)C=d,k=Xt(e.p[d.p])+Xt(e.d[d.p])+d.o.b+d.d.a;else{s=!1,n.n&&Yb(n,"bk node placement breaks on "+d+" which should have been after "+C);break}if(!s)break}return n.n&&Yb(n,e+" is feasible: "+s),s}function Xmn(t,e,n,r){var s,o,h,d,w,k,C;for(d=-1,C=new S(t);C.a=tt&&t.e[w.p]>V*t.b||_t>=n*tt)&&(F.c[F.c.length]=d,d=new le,Ua(h,o),o.a.$b(),k-=C,H=b.Math.max(H,k*t.b+Y),k+=_t,Lt=_t,_t=0,C=0,Y=0);return new la(H,F)}function tyn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;for(n=(k=new b1(t.c.b).a.vc().Kc(),new v1(k));n.a.Ob();)e=(d=u(n.a.Pb(),42),u(d.dd(),149)),s=e.a,s==null&&(s=""),r=_Qe(t.c,s),!r&&s.length==0&&(r=Sun(t)),r&&!ry(r.c,e,!1)&&ni(r.c,e);for(h=ei(t.a,0);h.b!=h.d.c;)o=u(ti(h),478),C=Drt(t.c,o.a),H=Drt(t.c,o.b),C&&H&&ni(C.c,new la(H,o.c));for(_h(t.a),F=ei(t.b,0);F.b!=F.d.c;)M=u(ti(F),478),e=CQe(t.c,M.a),w=Drt(t.c,M.b),e&&w&&pYe(e,w,M.c);_h(t.b)}function eyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;o=new Hk(t),h=new jse,s=(cI(h.g),cI(h.j),Yu(h.b),cI(h.d),cI(h.i),Yu(h.k),Yu(h.c),Yu(h.e),H=koe(h,o,null),hce(h,o),H),e&&(k=new Hk(e),d=hyn(k),N4t(s,ct(ot(wSt,1),Ie,527,0,[d]))),F=!1,M=!1,n&&(k=new Hk(n),xH in k.a&&(F=D0(k,xH).ge().a),Nde in k.a&&(M=D0(k,Nde).ge().a)),C=rHt(Dee(new Yk,F),M),K0n(new gZ,s,C),xH in o.a&&Wf(o,xH,null),(F||M)&&(w=new mx,ple(C,w,F,M),Wf(o,xH,w)),r=new lzt(h),qcn(new r2t(s),r)}function nyn(t,e,n){var r,s,o,h,d,w,k,C,M;for(h=new Gse,k=ct(ot(Tr,1),Xr,25,15,[0]),s=-1,o=0,r=0,w=0;w0){if(s<0&&C.a&&(s=w,o=k[0],r=0),s>=0){if(d=C.b,w==s&&(d-=r++,d==0))return 0;if(!khe(e,k,C,d,h)){w=s-1,k[0]=o;continue}}else if(s=-1,!khe(e,k,C,0,h))return 0}else{if(s=-1,ba(C.c,0)==32){if(M=k[0],Hte(e,k),k[0]>M)continue}else if(Fnn(e,C.c,k[0])){k[0]+=C.c.length;continue}return 0}return F4n(h,n)?k[0]:0}function k_(t){var e,n,r,s,o,h,d,w;if(!t.f){if(w=new C0,d=new C0,e=aA,h=e.a.zc(t,e),h==null){for(o=new er(So(t));o.e!=o.i.gc();)s=u(dr(o),26),rs(w,k_(s));e.a.Bc(t)!=null,e.a.gc()==0}for(r=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));r.e!=r.i.gc();)n=u(dr(r),170),Et(n,99)&&Mr(d,u(n,18));ey(d),t.r=new PKt(t,(u(St(Wt((jp(),Ln).o),6),18),d.i),d.g),rs(w,t.r),ey(w),t.f=new q3((u(St(Wt(Ln.o),5),18),w.i),w.g),rl(t).b&=-3}return t.f}function ryn(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;for(h=t.o,r=Pt(Tr,Xr,25,h,15,1),s=Pt(Tr,Xr,25,h,15,1),n=t.p,e=Pt(Tr,Xr,25,n,15,1),o=Pt(Tr,Xr,25,n,15,1),k=0;k=0&&!l4(t,C,M);)--M;s[C]=M}for(H=0;H=0&&!l4(t,d,V);)--d;o[V]=d}for(w=0;we[F]&&Fr[w]&&bq(t,w,F,!1,!0)}function axt(t){var e,n,r,s,o,h,d,w;n=je(Re(Q(t,(Zf(),Qpe)))),o=t.a.c.d,d=t.a.d.d,n?(h=ud(na(new $e(d.a,d.b),o),.5),w=ud(nc(t.e),.5),e=na(Li(new $e(o.a,o.b),h),w),F2t(t.d,e)):(s=Xt(ye(Q(t.a,sbe))),r=t.d,o.a>=d.a?o.b>=d.b?(r.a=d.a+(o.a-d.a)/2+s,r.b=d.b+(o.b-d.b)/2-s-t.e.b):(r.a=d.a+(o.a-d.a)/2+s,r.b=o.b+(d.b-o.b)/2+s):o.b>=d.b?(r.a=o.a+(d.a-o.a)/2+s,r.b=d.b+(o.b-d.b)/2+s):(r.a=o.a+(d.a-o.a)/2+s,r.b=o.b+(d.b-o.b)/2-s-t.e.b))}function $c(t,e){var n,r,s,o,h,d,w;if(t==null)return null;if(o=t.length,o==0)return"";for(w=Pt(mh,vd,25,o,15,1),kmt(0,o,t.length),kmt(0,o,w.length),zYt(t,0,o,w,0),n=null,d=e,s=0,h=0;s0?Dl(n.a,0,o-1):""):t.substr(0,o-1):n?n.a:t}function kle(t){Sv(t,new w2(Ev(yv(kv(xv(new pg,T2),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new dg))),xe(t,T2,Aot,De(c7t)),xe(t,T2,Lot,De($ut)),xe(t,T2,b6,De(Fpe)),xe(t,T2,ww,De(o7t)),xe(t,T2,Vxt,De($pe)),xe(t,T2,Uxt,De(jpe)),xe(t,T2,Gxt,De(zpe)),xe(t,T2,Wxt,De(Rpe)),xe(t,T2,t6t,De(Bpe)),xe(t,T2,e6t,De(jut)),xe(t,T2,n6t,De(a7t)),xe(t,T2,r6t,De(eG))}function oxt(t,e,n,r){var s,o,h,d,w,k,C,M,F;if(o=new H0(t),_0(o,(Gn(),Hc)),Jt(o,(Te(),os),(oa(),Vc)),s=0,e){for(h=new Mc,Jt(h,(se(),_i),e),Jt(o,_i,e.i),Fs(h,(be(),Bn)),Uo(h,o),F=gd(e.e),k=F,C=0,M=k.length;C0)if(n-=r.length-e,n>=0){for(s.a+="0.";n>D2.length;n-=D2.length)tYt(s,D2);FWt(s,D2,ps(n)),Vr(s,r.substr(e))}else n=e-n,Vr(s,Dl(r,e,ps(n))),s.a+=".",Vr(s,OM(r,ps(n)));else{for(Vr(s,r.substr(e));n<-D2.length;n+=D2.length)tYt(s,D2);FWt(s,D2,ps(-n))}return s.a}function cxt(t,e,n,r){var s,o,h,d,w,k,C,M,F;return w=na(new $e(n.a,n.b),t),k=w.a*e.b-w.b*e.a,C=e.a*r.b-e.b*r.a,M=(w.a*r.b-w.b*r.a)/C,F=k/C,C==0?k==0?(s=Li(new $e(n.a,n.b),ud(new $e(r.a,r.b),.5)),o=Hp(t,s),h=Hp(Li(new $e(t.a,t.b),e),s),d=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o=0&&M<=1&&F>=0&&F<=1?Li(new $e(t.a,t.b),ud(new $e(e.a,e.b),M)):null}function syn(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),Hlt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(d=new S(t.a);d.ae.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(h=new S(t.a);h.ae&&(s=0,o+=C.b+n,M.c[M.c.length]=C,C=new Vwt(o,n),r=new xit(0,C.f,C,n),Y$(C,r),s=0),r.b.c.length==0||w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f?i3t(r,w):(h=new xit(r.s+r.r+n,C.f,C,n),Y$(C,h),i3t(h,w)),s=w.i+w.g;return M.c[M.c.length]=C,M}function k4(t){var e,n,r,s,o,h,d,w;if(!t.a){if(t.o=null,w=new Mzt(t),e=new mp,n=aA,d=n.a.zc(t,n),d==null){for(h=new er(So(t));h.e!=h.i.gc();)o=u(dr(h),26),rs(w,k4(o));n.a.Bc(t)!=null,n.a.gc()==0}for(s=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));s.e!=s.i.gc();)r=u(dr(s),170),Et(r,322)&&Mr(e,u(r,34));ey(e),t.k=new NKt(t,(u(St(Wt((jp(),Ln).o),7),18),e.i),e.g),rs(w,t.k),ey(w),t.a=new q3((u(St(Wt(Ln.o),4),18),w.i),w.g),rl(t).b&=-2}return t.a}function uyn(t,e,n,r,s,o,h){var d,w,k,C,M,F;return M=!1,w=Mce(n.q,e.f+e.b-n.q.f),F=s-(n.q.e+w-h),F=(An(o,t.c.length),u(t.c[o],200)).e,C=(d=E_(r,F,!1),d.a),C>e.b&&!k)?!1:((k||C<=e.b)&&(k&&C>e.b?(n.d=C,dI(n,Nae(n,C))):(Jse(n.q,w),n.c=!0),dI(r,s-(n.s+n.r)),YI(r,n.q.e+n.q.d,e.f),Y$(e,r),t.c.length>o&&(tD((An(o,t.c.length),u(t.c[o],200)),r),(An(o,t.c.length),u(t.c[o],200)).a.c.length==0&&Ag(t,o)),M=!0),M)}function uxt(t,e,n,r){var s,o,h,d,w,k,C;if(C=au(t.e.Tg(),e),s=0,o=u(t.g,119),w=null,to(),u(e,66).Oj()){for(d=0;dt.o.a&&(C=(w-t.o.a)/2,d.b=b.Math.max(d.b,C),d.c=b.Math.max(d.c,C))}}function hyn(t){var e,n,r,s,o,h,d,w;for(o=new eZt,YYe(o,(Qx(),A3e)),r=(s=uit(t,Pt(Ae,te,2,0,6,1)),new fx(new wl(new fet(t,s).b)));r.b0?t.i:0)>e&&w>0&&(o=0,h+=w+t.i,s=b.Math.max(s,F),r+=w+t.i,w=0,F=0,n&&(++M,ue(t.n,new f$(t.s,h,t.i))),d=0),F+=k.g+(d>0?t.i:0),w=b.Math.max(w,k.f),n&&$3t(u(Fe(t.n,M),211),k),o+=k.g+(d>0?t.i:0),++d;return s=b.Math.max(s,F),r+=w,n&&(t.r=s,t.d=r,G3t(t.j)),new ih(t.s,t.t,s,r)}function Ic(t,e,n,r,s){qd();var o,h,d,w,k,C,M,F,H;if(uwt(t,"src"),uwt(n,"dest"),F=sl(t),w=sl(n),Dvt((F.i&4)!=0,"srcType is not an array"),Dvt((w.i&4)!=0,"destType is not an array"),M=F.c,h=w.c,Dvt(M.i&1?M==h:(h.i&1)==0,"Array types don't match"),H=t.length,k=n.length,e<0||r<0||s<0||e+s>H||r+s>k)throw rt(new Tpt);if(!(M.i&1)&&F!=w)if(C=s2(t),o=s2(n),Gt(t)===Gt(n)&&er;)Ji(o,d,C[--e]);else for(d=r+s;r0&&Y4t(t,e,n,r,s,!0)}function wat(){wat=Z,Cge=ct(ot(Tr,1),Xr,25,15,[_a,1162261467,A_,1220703125,362797056,1977326743,A_,387420489,Nq,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,A_,1291467969,1544804416,1838265625,60466176]),_ge=ct(ot(Tr,1),Xr,25,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function fyn(t){var e,n,r,s,o,h,d,w;for(s=new S(t.b);s.a=t.b.length?(o[s++]=h.b[r++],o[s++]=h.b[r++]):r>=h.b.length?(o[s++]=t.b[n++],o[s++]=t.b[n++]):h.b[r]0?t.i:0)),++e;for(Tln(t.n,w),t.d=n,t.r=r,t.g=0,t.f=0,t.e=0,t.o=ss,t.p=ss,o=new S(t.b);o.a0&&(s=(!t.n&&(t.n=new he(qo,t,1,7)),u(St(t.n,0),137)).a,!s||Vr(Vr((e.a+=' "',e),s),'"'))),n=(!t.b&&(t.b=new Cn(br,t,4,7)),!(t.b.i<=1&&(!t.c&&(t.c=new Cn(br,t,5,8)),t.c.i<=1))),n?e.a+=" [":e.a+=" ",Vr(e,m2t(new aet,new er(t.b))),n&&(e.a+="]"),e.a+=Pot,n&&(e.a+="["),Vr(e,m2t(new aet,new er(t.c))),n&&(e.a+="]"),e.a)}function mat(t,e){var n,r,s,o,h,d,w;if(t.a){if(d=t.a.ne(),w=null,d!=null?e.a+=""+d:(h=t.a.Dj(),h!=null&&(o=cd(h,Eu(91)),o!=-1?(w=h.substr(o),e.a+=""+Dl(h==null?Tu:(On(h),h),0,o)):e.a+=""+h)),t.d&&t.d.i!=0){for(s=!0,e.a+="<",r=new er(t.d);r.e!=r.i.gc();)n=u(dr(r),87),s?s=!1:e.a+=Ka,mat(n,e);e.a+=">"}w!=null&&(e.a+=""+w)}else t.e?(d=t.e.zb,d!=null&&(e.a+=""+d)):(e.a+="?",t.b?(e.a+=" super ",mat(t.b,e)):t.f&&(e.a+=" extends ",mat(t.f,e)))}function pyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(Yt=t.c,ce=e.c,n=Ro(Yt.a,t,0),r=Ro(ce.a,e,0),_t=u(iw(t,(so(),Ju)).Kc().Pb(),11),Qe=u(iw(t,eu).Kc().Pb(),11),Bt=u(iw(e,Ju).Kc().Pb(),11),Rn=u(iw(e,eu).Kc().Pb(),11),gt=gd(_t.e),Se=gd(Qe.g),Lt=gd(Bt.e),We=gd(Rn.g),oy(t,r,ce),h=Lt,C=0,V=h.length;CC?new t2((Vf(),Uy),n,e,k-C):k>0&&C>0&&(new t2((Vf(),Uy),e,n,0),new t2(Uy,n,e,0))),h)}function Cle(t,e){var n,r,s,o,h,d;for(h=new h2(new wg(t.f.b).a);h.b;){if(o=Yv(h),s=u(o.cd(),594),e==1){if(s.gf()!=(ao(),Z0)&&s.gf()!=Q0)continue}else if(s.gf()!=(ao(),jh)&&s.gf()!=kf)continue;switch(r=u(u(o.dd(),46).b,81),d=u(u(o.dd(),46).a,189),n=d.c,s.gf().g){case 2:r.g.c=t.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=t.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function byn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(d=Pt(Tr,Xr,25,e.b.c.length,15,1),k=Pt(elt,ae,267,e.b.c.length,0,1),w=Pt(o0,zg,10,e.b.c.length,0,1),M=t.a,F=0,H=M.length;F0&&w[r]&&(V=V3(t.b,w[r],s)),Y=b.Math.max(Y,s.c.c.b+V);for(o=new S(C.e);o.a1)throw rt(new Pn(eO));w||(o=Yd(e,r.Kc().Pb()),h.Fc(o))}return yyt(t,$4t(t,e,n),h)}function myn(t,e){var n,r,s,o;for(non(e.b.j),us(pu(new Tn(null,new _n(e.d,16)),new jX),new $X),o=new S(e.d);o.at.o.b||(n=Yo(t,Hn),d=e.d+e.a+(n.gc()-1)*h,d>t.o.b)))}function kat(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(h=t.e,w=e.e,h==0)return e;if(w==0)return t;if(o=t.d,d=e.d,o+d==2)return n=Ps(t.a[0],co),r=Ps(e.a[0],co),h==w?(C=Oa(n,r),V=Sr(C),H=Sr(zm(C,32)),H==0?new Lg(h,V):new K3(h,2,ct(ot(Tr,1),Xr,25,15,[V,H]))):KI(h<0?Yp(r,n):Yp(n,r));if(h==w)F=h,M=o>=d?Rrt(t.a,o,e.a,d):Rrt(e.a,d,t.a,o);else{if(s=o!=d?o>d?1:-1:Pyt(t.a,e.a,o),s==0)return Jp(),QE;s==1?(F=h,M=Frt(t.a,o,e.a,d)):(F=w,M=Frt(e.a,d,t.a,o))}return k=new K3(F,M.length,M),OC(k),k}function Eat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H;return M=je(Re(Q(e,(Te(),rCt)))),F=null,o==(so(),Ju)&&r.c.i==n?F=r.c:o==eu&&r.d.i==n&&(F=r.d),k=h,!k||!M||F?(C=(be(),Zo),F?C=F.j:H3(u(Q(n,os),98))&&(C=o==Ju?Bn:Hn),w=Eyn(t,e,n,o,C,r),d=Nrt((Fa(n),r)),o==Ju?(Da(d,u(Fe(w.j,0),11)),sa(d,s)):(Da(d,s),sa(d,u(Fe(w.j,0),11))),k=new Gre(r,d,w,u(Q(w,(se(),_i)),11),o,!F)):(ue(k.e,r),H=b.Math.max(Xt(ye(Q(k.d,Ug))),Xt(ye(Q(r,Ug)))),Jt(k.d,Ug,H)),ln(t.a,r,new Tj(k.d,e,o)),k}function Eq(t,e){var n,r,s,o,h,d,w,k,C,M;if(C=null,t.d&&(C=u(Fc(t.d,e),138)),!C){if(o=t.a.Mh(),M=o.i,!t.d||$9(t.d)!=M){for(w=new Cr,t.d&&VC(w,t.d),k=w.f.c+w.g.c,d=k;d0?(H=(V-1)*n,d&&(H+=r),C&&(H+=r),H=t.b[s+1])s+=2;else if(n0)for(r=new Pu(u(Ai(t.a,o),21)),vn(),Xs(r,new Si(e)),s=new ha(o.b,0);s.bYt)?(w=2,h=vi):w==0?(w=1,h=Se):(w=0,h=Se)):(H=Se>=h||h-Se0?1:Lv(isNaN(r),isNaN(0)))>=0^(gf(Ed),(b.Math.abs(d)<=Ed||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Lv(isNaN(d),isNaN(0)))>=0)?b.Math.max(d,r):(gf(Ed),(b.Math.abs(r)<=Ed||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:Lv(isNaN(r),isNaN(0)))>0?b.Math.sqrt(d*d+r*r):-b.Math.sqrt(d*d+r*r))}function m2(t,e){var n,r,s,o,h,d;if(e){if(!t.a&&(t.a=new fR),t.e==2){hR(t.a,e);return}if(e.e==1){for(s=0;s=Ya?fo(n,r3t(r)):m8(n,r&ms),h=new hrt(10,null,0),len(t.a,h,d-1)):(n=(h.bm().length+o,new B9),fo(n,h.bm())),e.e==0?(r=e._l(),r>=Ya?fo(n,r3t(r)):m8(n,r&ms)):fo(n,e.bm()),u(h,521).b=n.a}}function Ole(t){var e,n,r,s,o;return t.g!=null?t.g:t.a<32?(t.g=K4n(ku(t.f),ps(t.e)),t.g):(s=Dat((!t.c&&(t.c=jI(t.f)),t.c),0),t.e==0?s:(e=(!t.c&&(t.c=jI(t.f)),t.c).e<0?2:1,n=s.length,r=-t.e+n-e,o=new _p,o.a+=""+s,t.e>0&&r>=-6?r>=0?iI(o,n-ps(t.e),String.fromCharCode(46)):(o.a=Dl(o.a,0,e-1)+"0."+OM(o.a,e-1),iI(o,e+1,Ah(D2,0,-ps(r)-1))):(n-e>=1&&(iI(o,e,String.fromCharCode(46)),++n),iI(o,n,String.fromCharCode(69)),r>0&&iI(o,++n,String.fromCharCode(43)),iI(o,++n,""+EC(ku(r)))),t.g=o.a,t.g))}function Fyn(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!n.dc()){for(d=0,F=0,r=n.Kc(),V=u(r.Pb(),19).a;d1&&(w=k.mg(w,t.a,d));return w.c.length==1?u(Fe(w,w.c.length-1),220):w.c.length==2?Cyn((An(0,w.c.length),u(w.c[0],220)),(An(1,w.c.length),u(w.c[1],220)),h,o):null}function Nle(t){var e,n,r,s,o,h;for(mu(t.a,new xi),n=new S(t.a);n.a=b.Math.abs(r.b)?(r.b=0,o.d+o.a>h.d&&o.dh.c&&o.c0){if(e=new Ybt(t.i,t.g),n=t.i,o=n<100?null:new Sp(n),t.ij())for(r=0;r0){for(d=t.g,k=t.i,RC(t),o=k<100?null:new Sp(k),r=0;r>13|(t.m&15)<<9,s=t.m>>4&8191,o=t.m>>17|(t.h&255)<<5,h=(t.h&1048320)>>8,d=e.l&8191,w=e.l>>13|(e.m&15)<<9,k=e.m>>4&8191,C=e.m>>17|(e.h&255)<<5,M=(e.h&1048320)>>8,We=n*d,Qe=r*d,Rn=s*d,zn=o*d,hr=h*d,w!=0&&(Qe+=n*w,Rn+=r*w,zn+=s*w,hr+=o*w),k!=0&&(Rn+=n*k,zn+=r*k,hr+=s*k),C!=0&&(zn+=n*C,hr+=r*C),M!=0&&(hr+=n*M),H=We&ul,V=(Qe&511)<<13,F=H+V,tt=We>>22,gt=Qe>>9,Lt=(Rn&262143)<<4,_t=(zn&31)<<17,Y=tt+gt+Lt+_t,Yt=Rn>>18,ce=zn>>5,Se=(hr&4095)<<8,Bt=Yt+ce+Se,Y+=F>>22,F&=ul,Bt+=Y>>22,Y&=ul,Bt&=W0,ru(F,Y,Bt)}function Ple(t){var e,n,r,s,o,h,d;if(d=u(Fe(t.j,0),11),d.g.c.length!=0&&d.e.c.length!=0)throw rt(new Fo("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(d.g.c.length!=0){for(o=ss,n=new S(d.g);n.a4)if(t.wj(e)){if(t.rk()){if(s=u(e,49),r=s.Ug(),w=r==t.e&&(t.Dk()?s.Og(s.Vg(),t.zk())==t.Ak():-1-s.Vg()==t.aj()),t.Ek()&&!w&&!r&&s.Zg()){for(o=0;o0&&(k=t.n.a/o);break;case 2:case 4:s=t.i.o.b,s>0&&(k=t.n.b/s)}Jt(t,(se(),Dw),k)}if(w=t.o,h=t.a,r)h.a=r.a,h.b=r.b,t.d=!0;else if(e!=H1&&e!=yb&&d!=Zo)switch(d.g){case 1:h.a=w.a/2;break;case 2:h.a=w.a,h.b=w.b/2;break;case 3:h.a=w.a/2,h.b=w.b;break;case 4:h.b=w.b/2}else h.a=w.a/2,h.b=w.b/2}function C_(t){var e,n,r,s,o,h,d,w,k,C;if(t.ej())if(C=t.Vi(),w=t.fj(),C>0)if(e=new oyt(t.Gi()),n=C,o=n<100?null:new Sp(n),jM(t,n,e.g),s=n==1?t.Zi(4,St(e,0),null,0,w):t.Zi(6,e,null,-1,w),t.bj()){for(r=new er(e);r.e!=r.i.gc();)o=t.dj(dr(r),o);o?(o.Ei(s),o.Fi()):t.$i(s)}else o?(o.Ei(s),o.Fi()):t.$i(s);else jM(t,t.Vi(),t.Wi()),t.$i(t.Zi(6,(vn(),io),null,-1,w));else if(t.bj())if(C=t.Vi(),C>0){for(d=t.Wi(),k=C,jM(t,C,d),o=k<100?null:new Sp(k),r=0;rt.d[h.p]&&(n+=smt(t.b,o)*u(w.b,19).a,qp(t.a,de(o)));for(;!N9(t.a);)Fmt(t.b,u(Fx(t.a),19).a)}return n}function Kyn(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(M=new yo(u(qe(t,(eq(),_St)),8)),M.a=b.Math.max(M.a-n.b-n.c,0),M.b=b.Math.max(M.b-n.d-n.a,0),s=ye(qe(t,ESt)),(s==null||(On(s),s<=0))&&(s=1.3),d=new le,V=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));V.e!=V.i.gc();)H=u(dr(V),33),h=new fWt(H),d.c[d.c.length]=h;switch(F=u(qe(t,Jht),311),F.g){case 3:tt=bmn(d,e,M.a,M.b,(k=r,On(s),k));break;case 1:tt=qmn(d,e,M.a,M.b,(C=r,On(s),C));break;default:tt=Qyn(d,e,M.a,M.b,(w=r,On(s),w))}o=new U$(tt),Y=Mat(o,e,n,M.a,M.b,r,(On(s),s)),gw(t,Y.a,Y.b,!1,!0)}function Yyn(t,e){var n,r,s,o;n=e.b,o=new Pu(n.j),s=0,r=n.j,r.c=Pt(Xn,Ie,1,0,5,1),Bv(u(o2(t.b,(be(),Nn),(Jv(),Aw)),15),n),s=QI(o,s,new AX,r),Bv(u(o2(t.b,Nn,hb),15),n),s=QI(o,s,new zT,r),Bv(u(o2(t.b,Nn,Sw),15),n),Bv(u(o2(t.b,Hn,Aw),15),n),Bv(u(o2(t.b,Hn,hb),15),n),s=QI(o,s,new EF,r),Bv(u(o2(t.b,Hn,Sw),15),n),Bv(u(o2(t.b,mr,Aw),15),n),s=QI(o,s,new TF,r),Bv(u(o2(t.b,mr,hb),15),n),s=QI(o,s,new CF,r),Bv(u(o2(t.b,mr,Sw),15),n),Bv(u(o2(t.b,Bn,Aw),15),n),s=QI(o,s,new IX,r),Bv(u(o2(t.b,Bn,hb),15),n),Bv(u(o2(t.b,Bn,Sw),15),n)}function Xyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(wr(e,"Layer size calculation",1),C=ss,k=Ts,s=!1,d=new S(t.b);d.a.5?gt-=h*2*(V-.5):V<.5&&(gt+=o*2*(.5-V)),s=d.d.b,gttt.a-Y-C&&(gt=tt.a-Y-C),d.n.a=e+gt}}function Qyn(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt;for(d=Pt(ia,vo,25,t.c.length,15,1),F=new Vj(new KF),K3t(F,t),k=0,Y=new le;F.b.c.length!=0;)if(h=u(F.b.c.length==0?null:Fe(F.b,0),157),k>1&&Fu(h)*xl(h)/2>d[0]){for(o=0;od[o];)++o;V=new Kd(Y,0,o+1),M=new U$(V),C=Fu(h)/xl(h),w=Mat(M,e,new wx,n,r,s,C),Li(Gf(M.e),w),M8(dE(F,M)),H=new Kd(Y,o+1,Y.c.length),K3t(F,H),Y.c=Pt(Xn,Ie,1,0,5,1),k=0,hYt(d,d.length,0)}else tt=F.b.c.length==0?null:Fe(F.b,0),tt!=null&&oit(F,0),k>0&&(d[k]=d[k-1]),d[k]+=Fu(h)*xl(h),++k,Y.c[Y.c.length]=h;return Y}function Zyn(t){var e,n,r,s,o;if(r=u(Q(t,(Te(),cu)),163),r==(hh(),fb)){for(n=new ar(lr(jo(t).a.Kc(),new z));zr(n);)if(e=u(Lr(n),17),!kJt(e))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==Fy){for(o=new ar(lr(Ms(t).a.Kc(),new z));zr(o);)if(s=u(Lr(o),17),!kJt(s))throw rt(new F3(Rot+ZI(t)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function Jyn(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;for(wr(e,"Label dummy removal",1),r=Xt(ye(Q(t,(Te(),B6)))),s=Xt(ye(Q(t,Gy))),k=u(Q(t,Vl),103),w=new S(t.b);w.a0&&qae(t,d,M);for(s=new S(M);s.a>19&&(e=Y8(e),w=!w),h=Zbn(e),o=!1,s=!1,r=!1,t.h==ID&&t.m==0&&t.l==0)if(s=!0,o=!0,h==-1)t=rUt((N8(),Z8t)),r=!0,w=!w;else return d=h5t(t,h),w&&vit(d),n&&(ob=ru(0,0,0)),d;else t.h>>19&&(o=!0,t=Y8(t),r=!0,w=!w);return h!=-1?jcn(t,h,w,o,n):n4t(t,e)<0?(n&&(o?ob=Y8(t):ob=ru(t.l,t.m,t.h)),ru(0,0,0)):Hwn(r?t:ru(t.l,t.m,t.h),e,w,o,s,n)}function Tq(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;if(t.e&&t.c.ce.f||e.g>t.f)){for(n=0,r=0,h=t.w.a.ec().Kc();h.Ob();)s=u(h.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&++n;for(d=t.r.a.ec().Kc();d.Ob();)s=u(d.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,e.g,e.f)&&--n;for(w=e.w.a.ec().Kc();w.Ob();)s=u(w.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&++r;for(o=e.r.a.ec().Kc();o.Ob();)s=u(o.Pb(),11),Lit(Ko(ct(ot(Us,1),te,8,0,[s.i.n,s.n,s.a])).b,t.g,t.f)&&--r;n=0)return s=cln(t,e.substr(1,h-1)),C=e.substr(h+1,w-(h+1)),r5n(t,C,s)}else{if(n=-1,rEt==null&&(rEt=new RegExp("\\d")),rEt.test(String.fromCharCode(d))&&(n=uvt(e,Eu(46),w-1),n>=0)){r=u(Prt(t,gee(t,e.substr(1,n-1)),!1),58),k=0;try{k=$l(e.substr(n+1),_a,vi)}catch(F){throw F=Wi(F),Et(F,127)?(o=F,rt(new F$(o))):rt(F)}if(k=0)return n;switch($v(Eo(t,n))){case 2:{if(hn("",Og(t,n.Hj()).ne())){if(w=ZM(Eo(t,n)),d=k8(Eo(t,n)),C=w5t(t,e,w,d),C)return C;for(s=V5t(t,e),h=0,M=s.gc();h1)throw rt(new Pn(eO));for(C=au(t.e.Tg(),e),r=u(t.g,119),h=0;h1,k=new S1(F.b);Vo(k.a)||Vo(k.b);)w=u(Vo(k.a)?J(k.a):J(k.b),17),M=w.c==F?w.d:w.c,b.Math.abs(Ko(ct(ot(Us,1),te,8,0,[M.i.n,M.n,M.a])).b-h.b)>1&&nvn(t,w,h,o,F)}}function h3n(t){var e,n,r,s,o,h;if(s=new ha(t.e,0),r=new ha(t.a,0),t.d)for(n=0;nwct;){for(o=e,h=0;b.Math.abs(e-o)0),s.a.Xb(s.c=--s.b),Amn(t,t.b-h,o,r,s),Qn(s.b0),r.a.Xb(r.c=--r.b)}if(!t.d)for(n=0;n0?(t.f[C.p]=H/(C.e.c.length+C.g.c.length),t.c=b.Math.min(t.c,t.f[C.p]),t.b=b.Math.max(t.b,t.f[C.p])):d&&(t.f[C.p]=H)}}function d3n(t){t.b=null,t.bb=null,t.fb=null,t.qb=null,t.a=null,t.c=null,t.d=null,t.e=null,t.f=null,t.n=null,t.M=null,t.L=null,t.Q=null,t.R=null,t.K=null,t.db=null,t.eb=null,t.g=null,t.i=null,t.j=null,t.k=null,t.gb=null,t.o=null,t.p=null,t.q=null,t.r=null,t.$=null,t.ib=null,t.S=null,t.T=null,t.t=null,t.s=null,t.u=null,t.v=null,t.w=null,t.B=null,t.A=null,t.C=null,t.D=null,t.F=null,t.G=null,t.H=null,t.I=null,t.J=null,t.P=null,t.Z=null,t.U=null,t.V=null,t.W=null,t.X=null,t.Y=null,t._=null,t.ab=null,t.cb=null,t.hb=null,t.nb=null,t.lb=null,t.mb=null,t.ob=null,t.pb=null,t.jb=null,t.kb=null,t.N=!1,t.O=!1}function g3n(t,e,n){var r,s,o,h;for(wr(n,"Graph transformation ("+t.a+")",1),h=Gv(e.a),o=new S(e.b);o.a0&&(t.a=w+(H-1)*o,e.c.b+=t.a,e.f.b+=t.a)),V.a.gc()!=0&&(F=new Gnt(1,o),H=vxt(F,e,V,Y,e.f.b+w-e.c.b),H>0&&(e.f.b+=w+(H-1)*o))}function CE(t,e){var n,r,s,o;o=t.F,e==null?(t.F=null,Z8(t,null)):(t.F=(On(e),e),r=cd(e,Eu(60)),r!=-1?(s=e.substr(0,r),cd(e,Eu(46))==-1&&!hn(s,u6)&&!hn(s,Q_)&&!hn(s,TH)&&!hn(s,Z_)&&!hn(s,J_)&&!hn(s,tS)&&!hn(s,eS)&&!hn(s,nS)&&(s=E0e),n=dj(e,Eu(62)),n!=-1&&(s+=""+e.substr(n+1)),Z8(t,s)):(s=e,cd(e,Eu(46))==-1&&(r=cd(e,Eu(91)),r!=-1&&(s=e.substr(0,r)),!hn(s,u6)&&!hn(s,Q_)&&!hn(s,TH)&&!hn(s,Z_)&&!hn(s,J_)&&!hn(s,tS)&&!hn(s,eS)&&!hn(s,nS)?(s=E0e,r!=-1&&(s+=""+e.substr(r))):s=e),Z8(t,s),s==e&&(t.F=t.D))),t.Db&4&&!(t.Db&1)&&mi(t,new Qs(t,1,5,o,e))}function b3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(Y=e.b.c.length,!(Y<3)){for(H=Pt(Tr,Xr,25,Y,15,1),M=0,C=new S(e.b);C.ah)&&Ns(t.b,u(tt.b,17));++d}o=h}}}function gxt(t,e){var n;if(e==null||hn(e,Tu)||e.length==0&&t.k!=(jg(),j6))return null;switch(t.k.g){case 1:return Oz(e,qE)?(Fn(),YE):Oz(e,Oct)?(Fn(),I2):null;case 2:try{return de($l(e,_a,vi))}catch(r){if(r=Wi(r),Et(r,127))return null;throw rt(r)}case 4:try{return ly(e)}catch(r){if(r=Wi(r),Et(r,127))return null;throw rt(r)}case 3:return e;case 5:return xre(t),Soe(t,e);case 6:return xre(t),_bn(t,t.a,e);case 7:try{return n=Rpn(t),n.Jf(e),n}catch(r){if(r=Wi(r),Et(r,32))return null;throw rt(r)}default:throw rt(new Fo("Invalid type set for this layout option."))}}function v3n(t){$C();var e,n,r,s,o,h,d;for(d=new Zzt,n=new S(t);n.a=d.b.c)&&(d.b=e),(!d.c||e.c<=d.c.c)&&(d.d=d.c,d.c=e),(!d.e||e.d>=d.e.d)&&(d.e=e),(!d.f||e.d<=d.f.d)&&(d.f=e);return r=new Bz((K8(),_w)),aI(t,Lbe,new wl(ct(ot(gO,1),Ie,369,0,[r]))),h=new Bz(Dy),aI(t,Abe,new wl(ct(ot(gO,1),Ie,369,0,[h]))),s=new Bz(Iy),aI(t,Sbe,new wl(ct(ot(gO,1),Ie,369,0,[s]))),o=new Bz(j4),aI(t,_be,new wl(ct(ot(gO,1),Ie,369,0,[o]))),Yst(r.c,_w),Yst(s.c,Iy),Yst(o.c,j4),Yst(h.c,Dy),d.a.c=Pt(Xn,Ie,1,0,5,1),As(d.a,r.c),As(d.a,a2(s.c)),As(d.a,o.c),As(d.a,a2(h.c)),d}function pxt(t){var e;switch(t.d){case 1:{if(t.hj())return t.o!=-2;break}case 2:{if(t.hj())return t.o==-2;break}case 3:case 5:case 4:case 6:case 7:return t.o>-2;default:return!1}switch(e=t.gj(),t.p){case 0:return e!=null&&je(Re(e))!=aC(t.k,0);case 1:return e!=null&&u(e,217).a!=Sr(t.k)<<24>>24;case 2:return e!=null&&u(e,172).a!=(Sr(t.k)&ms);case 6:return e!=null&&aC(u(e,162).a,t.k);case 5:return e!=null&&u(e,19).a!=Sr(t.k);case 7:return e!=null&&u(e,184).a!=Sr(t.k)<<16>>16;case 3:return e!=null&&Xt(ye(e))!=t.j;case 4:return e!=null&&u(e,155).a!=t.j;default:return e==null?t.n!=null:!yi(e,t.n)}}function ED(t,e,n){var r,s,o,h;return t.Fk()&&t.Ek()&&(h=Fnt(t,u(n,56)),Gt(h)!==Gt(n))?(t.Oi(e),t.Ui(e,pte(t,e,h)),t.rk()&&(o=(s=u(n,49),t.Dk()?t.Bk()?s.ih(t.b,no(u(yn(bu(t.b),t.aj()),18)).n,u(yn(bu(t.b),t.aj()).Yj(),26).Bj(),null):s.ih(t.b,Vi(s.Tg(),no(u(yn(bu(t.b),t.aj()),18))),null,null):s.ih(t.b,-1-t.aj(),null,null)),!u(h,49).eh()&&(o=(r=u(h,49),t.Dk()?t.Bk()?r.gh(t.b,no(u(yn(bu(t.b),t.aj()),18)).n,u(yn(bu(t.b),t.aj()).Yj(),26).Bj(),o):r.gh(t.b,Vi(r.Tg(),no(u(yn(bu(t.b),t.aj()),18))),null,o):r.gh(t.b,-1-t.aj(),null,o))),o&&o.Fi()),ml(t.b)&&t.$i(t.Zi(9,n,h,e,!1)),h):n}function jle(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(C=Xt(ye(Q(t,(Te(),Fw)))),r=Xt(ye(Q(t,gCt))),F=new Wu,Jt(F,Fw,C+r),k=e,gt=k.d,Y=k.c.i,Lt=k.d.i,tt=t2t(Y.c),_t=t2t(Lt.c),s=new le,M=tt;M<=_t;M++)d=new H0(t),_0(d,(Gn(),Zs)),Jt(d,(se(),_i),k),Jt(d,os,(oa(),Vc)),Jt(d,sV,F),H=u(Fe(t.b,M),29),M==tt?oy(d,H.a.c.length-n,H):ko(d,H),Bt=Xt(ye(Q(k,Ug))),Bt<0&&(Bt=0,Jt(k,Ug,Bt)),d.o.b=Bt,V=b.Math.floor(Bt/2),h=new Mc,Fs(h,(be(),Bn)),Uo(h,d),h.n.b=V,w=new Mc,Fs(w,Hn),Uo(w,d),w.n.b=V,sa(k,h),o=new zv,Lo(o,k),Jt(o,_o,null),Da(o,w),sa(o,gt),y1n(d,k,o),s.c[s.c.length]=o,k=o;return s}function _at(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(w=u(Rg(t,(be(),Bn)).Kc().Pb(),11).e,H=u(Rg(t,Hn).Kc().Pb(),11).g,d=w.c.length,_t=T1(u(Fe(t.j,0),11));d-- >0;){for(Y=(An(0,w.c.length),u(w.c[0],17)),s=(An(0,H.c.length),u(H.c[0],17)),Lt=s.d.e,o=Ro(Lt,s,0),Tin(Y,s.d,o),Da(s,null),sa(s,null),V=Y.a,e&&ni(V,new yo(_t)),r=ei(s.a,0);r.b!=r.d.c;)n=u(ti(r),8),ni(V,new yo(n));for(gt=Y.b,F=new S(s.b);F.a0&&(h=b.Math.max(h,dne(t.C.b+r.d.b,s))),C=r,M=s,F=o;t.C&&t.C.c>0&&(H=F+t.C.c,k&&(H+=C.d.c),h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(M-1)<=P1||M==1||isNaN(M)&&isNaN(1)?0:H/(1-M)))),n.n.b=0,n.a.a=h}function zle(t,e){var n,r,s,o,h,d,w,k,C,M,F,H;if(n=u(go(t.b,e),124),w=u(u(Ai(t.r,e),21),84),w.dc()){n.n.d=0,n.n.a=0;return}for(k=t.u.Hc((Qu(),tg)),h=0,t.A.Hc((_l(),V2))&&yue(t,e),d=w.Kc(),C=null,F=0,M=0;d.Ob();)r=u(d.Pb(),111),o=Xt(ye(r.b.We((gj(),ZH)))),s=r.b.rf().b,C?(H=M+C.d.a+t.w+r.d.d,h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(F-o)<=P1||F==o||isNaN(F)&&isNaN(o)?0:H/(o-F)))):t.C&&t.C.d>0&&(h=b.Math.max(h,dne(t.C.d+r.d.d,o))),C=r,F=o,M=s;t.C&&t.C.a>0&&(H=M+t.C.a,k&&(H+=C.d.a),h=b.Math.max(h,(y1(),gf(P1),b.Math.abs(F-1)<=P1||F==1||isNaN(F)&&isNaN(1)?0:H/(1-F)))),n.n.d=0,n.a.b=h}function qle(t,e,n){var r,s,o,h,d,w;for(this.g=t,d=e.d.length,w=n.d.length,this.d=Pt(o0,zg,10,d+w,0,1),h=0;h0?Jrt(this,this.f/this.a):x1(e.g,e.d[0]).a!=null&&x1(n.g,n.d[0]).a!=null?Jrt(this,(Xt(x1(e.g,e.d[0]).a)+Xt(x1(n.g,n.d[0]).a))/2):x1(e.g,e.d[0]).a!=null?Jrt(this,x1(e.g,e.d[0]).a):x1(n.g,n.d[0]).a!=null&&Jrt(this,x1(n.g,n.d[0]).a)}function w3n(t,e){var n,r,s,o,h,d,w,k,C,M;for(t.a=new XYt(Won(WS)),r=new S(e.a);r.a=1&&(tt-h>0&&M>=0?(w.n.a+=Y,w.n.b+=o*h):tt-h<0&&C>=0&&(w.n.a+=Y*tt,w.n.b+=o));t.o.a=e.a,t.o.b=e.b,Jt(t,(Te(),F2),(_l(),r=u(Hf(tA),9),new rh(r,u(uf(r,r.length),9),0)))}function k3n(t,e,n,r,s,o){var h;if(!(e==null||!Hit(e,YAt,XAt)))throw rt(new Pn("invalid scheme: "+e));if(!t&&!(n!=null&&cd(n,Eu(35))==-1&&n.length>0&&(Rr(0,n.length),n.charCodeAt(0)!=47)))throw rt(new Pn("invalid opaquePart: "+n));if(t&&!(e!=null&&pM(rU,e.toLowerCase()))&&!(n==null||!Hit(n,iA,sA)))throw rt(new Pn(l0e+n));if(t&&e!=null&&pM(rU,e.toLowerCase())&&!pdn(n))throw rt(new Pn(l0e+n));if(!mln(r))throw rt(new Pn("invalid device: "+r));if(!fun(s))throw h=s==null?"invalid segments: null":"invalid segment: "+cun(s),rt(new Pn(h));if(!(o==null||cd(o,Eu(35))==-1))throw rt(new Pn("invalid query: "+o))}function E3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(e,"Calculate Graph Size",1),e.n&&t&&hf(e,ff(t),(Cl(),Yl)),d=FE,w=FE,o=jkt,h=jkt,M=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));M.e!=M.i.gc();)k=u(dr(M),33),V=k.i,Y=k.j,gt=k.g,r=k.f,s=u(qe(k,(ci(),KO)),142),d=b.Math.min(d,V-s.b),w=b.Math.min(w,Y-s.d),o=b.Math.max(o,V+gt+s.c),h=b.Math.max(h,Y+r+s.a);for(H=u(qe(t,(ci(),q2)),116),F=new $e(d-H.b,w-H.d),C=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));C.e!=C.i.gc();)k=u(dr(C),33),yu(k,k.i-F.a),xu(k,k.j-F.b);tt=o-d+(H.b+H.c),n=h-w+(H.d+H.a),Qv(t,tt),Xv(t,n),e.n&&t&&hf(e,ff(t),(Cl(),Yl))}function Vle(t){var e,n,r,s,o,h,d,w,k,C;for(r=new le,h=new S(t.e.a);h.a0){Rz(t,n,0),n.a+=String.fromCharCode(r),s=chn(e,o),Rz(t,n,s),o+=s-1;continue}r==39?o+11)for(Y=Pt(Tr,Xr,25,t.b.b.c.length,15,1),M=0,k=new S(t.b.b);k.a=d&&s<=w)d<=s&&o<=w?(n[C++]=s,n[C++]=o,r+=2):d<=s?(n[C++]=s,n[C++]=w,t.b[r]=w+1,h+=2):o<=w?(n[C++]=d,n[C++]=o,r+=2):(n[C++]=d,n[C++]=w,t.b[r]=w+1);else if(web)&&d<10);nbt(t.c,new $5),Ule(t),fen(t.c),y3n(t.f)}function S3n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(je(Re(Q(n,(Te(),$y)))))for(d=new S(n.j);d.a=2){for(w=ei(n,0),h=u(ti(w),8),d=u(ti(w),8);d.a0&&PI(k,!0,(ao(),kf)),d.k==(Gn(),xs)&&mXt(k),ki(t.f,d,e)}}function I3n(t,e,n){var r,s,o,h,d,w,k,C,M,F;switch(wr(n,"Node promotion heuristic",1),t.g=e,B4n(t),t.q=u(Q(e,(Te(),Xlt)),260),C=u(Q(t.g,tCt),19).a,o=new iF,t.q.g){case 2:case 1:TE(t,o);break;case 3:for(t.q=(w4(),fV),TE(t,o),w=0,d=new S(t.a);d.at.j&&(t.q=MO,TE(t,o));break;case 4:for(t.q=(w4(),fV),TE(t,o),k=0,s=new S(t.b);s.at.k&&(t.q=IO,TE(t,o));break;case 6:F=ps(b.Math.ceil(t.f.length*C/100)),TE(t,new kp(F));break;case 5:M=ps(b.Math.ceil(t.d*C/100)),TE(t,new qf(M));break;default:TE(t,o)}Tvn(t,e),or(n)}function Kle(t,e,n){var r,s,o,h;this.j=t,this.e=m4t(t),this.o=this.j.e,this.i=!!this.o,this.p=this.i?u(Fe(n,Fa(this.o).p),214):null,s=u(Q(t,(se(),Gc)),21),this.g=s.Hc((oo(),bh)),this.b=new le,this.d=new bie(this.e),h=u(Q(this.j,O6),230),this.q=ucn(e,h,this.e),this.k=new vQt(this),o=_1(ct(ot(Qbe,1),Ie,225,0,[this,this.d,this.k,this.q])),e==(Zv(),OO)&&!je(Re(Q(t,(Te(),By))))?(r=new x4t(this.e),o.c[o.c.length]=r,this.c=new Xwt(r,h,u(this.q,402))):e==OO&&je(Re(Q(t,(Te(),By))))?(r=new x4t(this.e),o.c[o.c.length]=r,this.c=new Jee(r,h,u(this.q,402))):this.c=new QGt(e,this),ue(o,this.c),Lle(o,this.e),this.s=d5n(this.k)}function D3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(M=u(lj((h=ei(new Cp(e).a.d,0),new bx(h))),86),V=M?u(Q(M,(fc(),Sht)),86):null,s=1;M&&V;){for(w=0,Bt=0,n=M,r=V,d=0;d=t.i?(++t.i,ue(t.a,de(1)),ue(t.b,C)):(r=t.c[e.p][1],ah(t.a,k,de(u(Fe(t.a,k),19).a+1-r)),ah(t.b,k,Xt(ye(Fe(t.b,k)))+C-r*t.e)),(t.q==(w4(),MO)&&(u(Fe(t.a,k),19).a>t.j||u(Fe(t.a,k-1),19).a>t.j)||t.q==IO&&(Xt(ye(Fe(t.b,k)))>t.k||Xt(ye(Fe(t.b,k-1)))>t.k))&&(w=!1),h=new ar(lr(jo(e).a.Kc(),new z));zr(h);)o=u(Lr(h),17),d=o.c.i,t.f[d.p]==k&&(M=Yle(t,d),s=s+u(M.a,19).a,w=w&&je(Re(M.b)));return t.f[e.p]=k,s=s+t.c[e.p][0],new la(de(s),(Fn(),!!w))}function vxt(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(M=new Cr,h=new le,voe(t,n,t.d.fg(),h,M),voe(t,r,t.d.gg(),h,M),t.b=.2*(Y=ace(Wo(new Tn(null,new _n(h,16)),new GQ)),tt=ace(Wo(new Tn(null,new _n(h,16)),new VQ)),b.Math.min(Y,tt)),o=0,d=0;d=2&&(gt=Ace(h,!0,F),!t.e&&(t.e=new D$t(t)),lhn(t.e,gt,h,t.b)),cae(h,F),K3n(h),H=-1,C=new S(h);C.ad)}function N3n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;for(n=u(Q(t,(Te(),os)),98),h=t.f,o=t.d,d=h.a+o.b+o.c,w=0-o.d-t.c.b,C=h.b+o.d+o.a-t.c.b,k=new le,M=new le,s=new S(e);s.a0),u(C.a.Xb(C.c=--C.b),17));o!=r&&C.b>0;)t.a[o.p]=!0,t.a[r.p]=!0,o=(Qn(C.b>0),u(C.a.Xb(C.c=--C.b),17));C.b>0&&El(C)}}function Jle(t,e,n){var r,s,o,h,d,w,k,C,M;if(t.a!=e.Aj())throw rt(new Pn(HE+e.ne()+kw));if(r=Og((Ru(),ma),e).$k(),r)return r.Aj().Nh().Ih(r,n);if(h=Og(ma,e).al(),h){if(n==null)return null;if(d=u(n,15),d.dc())return"";for(M=new xg,o=d.Kc();o.Ob();)s=o.Pb(),fo(M,h.Aj().Nh().Ih(h,s)),M.a+=" ";return Wet(M,M.a.length-1)}if(C=Og(ma,e).bl(),!C.dc()){for(k=C.Kc();k.Ob();)if(w=u(k.Pb(),148),w.wj(n))try{if(M=w.Aj().Nh().Ih(w,n),M!=null)return M}catch(F){if(F=Wi(F),!Et(F,102))throw rt(F)}throw rt(new Pn("Invalid value: '"+n+"' for datatype :"+e.ne()))}return u(e,834).Fj(),n==null?null:Et(n,172)?""+u(n,172).a:sl(n)==HH?SUt(rA[0],u(n,199)):$o(n)}function $3n(t){var e,n,r,s,o,h,d,w,k,C;for(k=new Qi,d=new Qi,o=new S(t);o.a-1){for(s=ei(d,0);s.b!=s.d.c;)r=u(ti(s),128),r.v=h;for(;d.b!=0;)for(r=u(yst(d,0),128),n=new S(r.i);n.a0&&(n+=w.n.a+w.o.a/2,++M),V=new S(w.j);V.a0&&(n/=M),gt=Pt(ia,vo,25,r.a.c.length,15,1),d=0,k=new S(r.a);k.a=d&&s<=w)d<=s&&o<=w?r+=2:d<=s?(t.b[r]=w+1,h+=2):o<=w?(n[C++]=s,n[C++]=d-1,r+=2):(n[C++]=s,n[C++]=d-1,t.b[r]=w+1,h+=2);else if(w0?s-=864e5:s+=864e5,w=new H2t(Oa(ku(e.q.getTime()),s))),C=new Lm,k=t.a.length,o=0;o=97&&r<=122||r>=65&&r<=90){for(h=o+1;h=k)throw rt(new Pn("Missing trailing '"));h+10&&n.c==0&&(!e&&(e=new le),e.c[e.c.length]=n);if(e)for(;e.c.length!=0;){if(n=u(Ag(e,0),233),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new le),new S(n.b));o.aRo(t,n,0))return new la(s,n)}else if(Xt(x1(s.g,s.d[0]).a)>Xt(x1(n.g,n.d[0]).a))return new la(s,n)}for(d=(!n.e&&(n.e=new le),n.e).Kc();d.Ob();)h=u(d.Pb(),233),w=(!h.b&&(h.b=new le),h.b),Um(0,w.c.length),W9(w.c,0,n),h.c==w.c.length&&(e.c[e.c.length]=h)}return null}function ihe(t,e){var n,r,s,o,h,d,w,k,C;if(t==null)return Tu;if(w=e.a.zc(t,e),w!=null)return"[...]";for(n=new c2(Ka,"[","]"),s=t,o=0,h=s.length;o=14&&C<=16))?e.a._b(r)?(n.a?Vr(n.a,n.b):n.a=new Il(n.d),cC(n.a,"[...]")):(d=s2(r),k=new yC(e),P0(n,ihe(d,k))):Et(r,177)?P0(n,Bgn(u(r,177))):Et(r,190)?P0(n,_dn(u(r,190))):Et(r,195)?P0(n,F0n(u(r,195))):Et(r,2012)?P0(n,Sdn(u(r,2012))):Et(r,48)?P0(n,Fgn(u(r,48))):Et(r,364)?P0(n,Xgn(u(r,364))):Et(r,832)?P0(n,Pgn(u(r,832))):Et(r,104)&&P0(n,Ngn(u(r,104))):P0(n,r==null?Tu:$o(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function she(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(d=m4(e,!1,!1),gt=sD(d),r&&(gt=BI(gt)),_t=Xt(ye(qe(e,(i_(),$ut)))),tt=(Qn(gt.b!=0),u(gt.a.a.c,8)),M=u(Qf(gt,1),8),gt.b>2?(C=new le,As(C,new Kd(gt,1,gt.b)),o=Rhe(C,_t+t.a),Lt=new Vst(o),Lo(Lt,e),n.c[n.c.length]=Lt):r?Lt=u(Jn(t.b,Zd(e)),266):Lt=u(Jn(t.b,Xp(e)),266),w=Zd(e),r&&(w=Xp(e)),h=ngn(tt,w),k=_t+t.a,h.a?(k+=b.Math.abs(tt.b-M.b),Y=new $e(M.a,(M.b+tt.b)/2)):(k+=b.Math.abs(tt.a-M.a),Y=new $e((M.a+tt.a)/2,M.b)),r?ki(t.d,e,new q3t(Lt,h,Y,k)):ki(t.c,e,new q3t(Lt,h,Y,k)),ki(t.b,e,Lt),V=(!e.n&&(e.n=new he(qo,e,1,7)),e.n),H=new er(V);H.e!=H.i.gc();)F=u(dr(H),137),s=bD(t,F,!0,0,0),n.c[n.c.length]=s}function K3n(t){var e,n,r,s,o,h,d,w,k,C;for(k=new le,d=new le,h=new S(t);h.a-1){for(o=new S(d);o.a0)&&(YB(w,b.Math.min(w.o,s.o-1)),x9(w,w.i-1),w.i==0&&(d.c[d.c.length]=w))}}function _E(t,e,n){var r,s,o,h,d,w,k;if(k=t.c,!e&&(e=tLt),t.c=e,t.Db&4&&!(t.Db&1)&&(w=new Qs(t,1,2,k,t.c),n?n.Ei(w):n=w),k!=e){if(Et(t.Cb,284))t.Db>>16==-10?n=u(t.Cb,284).nk(e,n):t.Db>>16==-15&&(!e&&(e=(dn(),V1)),!k&&(k=(dn(),V1)),t.Cb.nh()&&(w=new F0(t.Cb,1,13,k,e,Fg(il(u(t.Cb,59)),t),!1),n?n.Ei(w):n=w));else if(Et(t.Cb,88))t.Db>>16==-23&&(Et(e,88)||(e=(dn(),Wh)),Et(k,88)||(k=(dn(),Wh)),t.Cb.nh()&&(w=new F0(t.Cb,1,10,k,e,Fg(Lc(u(t.Cb,26)),t),!1),n?n.Ei(w):n=w));else if(Et(t.Cb,444))for(d=u(t.Cb,836),h=(!d.b&&(d.b=new cR(new Ytt)),d.b),o=(r=new h2(new wg(h.a).a),new uR(r));o.a.b;)s=u(Yv(o.a).cd(),87),n=_E(s,oq(s,d),n)}return n}function Y3n(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(h=je(Re(qe(t,(Te(),$y)))),F=u(qe(t,qy),21),w=!1,k=!1,M=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));M.e!=M.i.gc()&&(!w||!k);){for(o=u(dr(M),118),d=0,s=Bp(L1(ct(ot(B1,1),Ie,20,0,[(!o.d&&(o.d=new Cn(Ws,o,8,5)),o.d),(!o.e&&(o.e=new Cn(Ws,o,7,4)),o.e)])));zr(s)&&(r=u(Lr(s),79),C=h&&uw(r)&&je(Re(qe(r,P2))),n=Fle((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),o)?t==ts(Mo(u(St((!r.c&&(r.c=new Cn(br,r,5,8)),r.c),0),82))):t==ts(Mo(u(St((!r.b&&(r.b=new Cn(br,r,4,7)),r.b),0),82))),!((C||n)&&(++d,d>1))););(d>0||F.Hc((Qu(),tg))&&(!o.n&&(o.n=new he(qo,o,1,7)),o.n).i>0)&&(w=!0),d>1&&(k=!0)}w&&e.Fc((oo(),bh)),k&&e.Fc((oo(),vS))}function ahe(t){var e,n,r,s,o,h,d,w,k,C,M,F;if(F=u(qe(t,(ci(),z2)),21),F.dc())return null;if(d=0,h=0,F.Hc((_l(),nN))){for(C=u(qe(t,US),98),r=2,n=2,s=2,o=2,e=ts(t)?u(qe(ts(t),jw),103):u(qe(t,jw),103),k=new er((!t.c&&(t.c=new he(fl,t,9,9)),t.c));k.e!=k.i.gc();)if(w=u(dr(k),118),M=u(qe(w,o5),61),M==(be(),Zo)&&(M=nxt(w,e),bo(w,o5,M)),C==(oa(),Vc))switch(M.g){case 1:r=b.Math.max(r,w.i+w.g);break;case 2:n=b.Math.max(n,w.j+w.f);break;case 3:s=b.Math.max(s,w.i+w.g);break;case 4:o=b.Math.max(o,w.j+w.f)}else switch(M.g){case 1:r+=w.g+2;break;case 2:n+=w.f+2;break;case 3:s+=w.g+2;break;case 4:o+=w.f+2}d=b.Math.max(r,s),h=b.Math.max(n,o)}return gw(t,d,h,!0,!0)}function Sat(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;for(Lt=u(Pl(G$(Ri(new Tn(null,new _n(e.d,16)),new Uk(n)),new sM(n)),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),M=vi,C=_a,w=new S(e.b.j);w.a0,k?k&&(F=gt.p,h?++F:--F,M=u(Fe(gt.c.a,F),10),r=Qne(M),H=!(Qst(r,ce,n[0])||LYt(r,ce,n[0]))):H=!0),V=!1,Yt=e.D.i,Yt&&Yt.c&&d.e&&(C=h&&Yt.p>0||!h&&Yt.p0&&(e.a+=Ka),Cq(u(dr(d),160),e);for(e.a+=Pot,w=new Lx((!r.c&&(r.c=new Cn(br,r,5,8)),r.c));w.e!=w.i.gc();)w.e>0&&(e.a+=Ka),Cq(u(dr(w),160),e);e.a+=")"}}function e4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;if(o=u(Q(t,(se(),_i)),79),!!o){for(r=t.a,s=new yo(n),Li(s,V1n(t)),V8(t.d.i,t.c.i)?(F=t.c,M=Ko(ct(ot(Us,1),te,8,0,[F.n,F.a])),na(M,n)):M=T1(t.c),hs(r,M,r.a,r.a.a),H=T1(t.d),Q(t,$lt)!=null&&Li(H,u(Q(t,$lt),8)),hs(r,H,r.c.b,r.c),Jm(r,s),h=m4(o,!0,!0),Z$(h,u(St((!o.b&&(o.b=new Cn(br,o,4,7)),o.b),0),82)),J$(h,u(St((!o.c&&(o.c=new Cn(br,o,5,8)),o.c),0),82)),yD(r,h),C=new S(t.b);C.a=0){for(w=null,d=new ha(C.a,k+1);d.bh?1:Lv(isNaN(0),isNaN(h)))<0&&(gf(Ed),(b.Math.abs(h-1)<=Ed||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Lv(isNaN(h),isNaN(1)))<0)&&(gf(Ed),(b.Math.abs(0-d)<=Ed||d==0||isNaN(0)&&isNaN(d)?0:0d?1:Lv(isNaN(0),isNaN(d)))<0)&&(gf(Ed),(b.Math.abs(d-1)<=Ed||d==1||isNaN(d)&&isNaN(1)?0:d<1?-1:d>1?1:Lv(isNaN(d),isNaN(1)))<0)),o)}function r4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;for(M=new ywt(new Mt(t));M.b!=M.c.a.d;)for(C=hte(M),d=u(C.d,56),e=u(C.e,56),h=d.Tg(),Y=0,Bt=(h.i==null&&pd(h),h.i).length;Y=0&&Y=k.c.c.length?C=tmt((Gn(),Ds),Zs):C=tmt((Gn(),Zs),Zs),C*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(C-o)),h=n.b.g,n.b.g=b.Math.max(h,h+(C-h)),s=e}}function a4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(Yt=SKt(t),C=new le,d=t.c.length,M=d-1,F=d+1;Yt.a.c!=0;){for(;n.b!=0;)_t=(Qn(n.b!=0),u(ch(n,n.a.a),112)),IC(Yt.a,_t)!=null,_t.g=M--,rxt(_t,e,n,r);for(;e.b!=0;)Bt=(Qn(e.b!=0),u(ch(e,e.a.a),112)),IC(Yt.a,Bt)!=null,Bt.g=F++,rxt(Bt,e,n,r);for(k=_a,gt=(h=new vC(new gC(new y(Yt.a).a).b),new g(h));mM(gt.a.a);){if(tt=(o=wj(gt.a),u(o.cd(),112)),!r&&tt.b>0&&tt.a<=0){C.c=Pt(Xn,Ie,1,0,5,1),C.c[C.c.length]=tt;break}Y=tt.i-tt.d,Y>=k&&(Y>k&&(C.c=Pt(Xn,Ie,1,0,5,1),k=Y),C.c[C.c.length]=tt)}C.c.length!=0&&(w=u(Fe(C,zz(s,C.c.length)),112),IC(Yt.a,w)!=null,w.g=F++,rxt(w,e,n,r),C.c=Pt(Xn,Ie,1,0,5,1))}for(Lt=t.c.length+1,V=new S(t);V.a0&&(F.d+=C.n.d,F.d+=C.d),F.a>0&&(F.a+=C.n.a,F.a+=C.d),F.b>0&&(F.b+=C.n.b,F.b+=C.d),F.c>0&&(F.c+=C.n.c,F.c+=C.d),F}function che(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V;for(F=n.d,M=n.c,o=new $e(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),h=o.b,k=new S(t.a);k.a0&&(t.c[e.c.p][e.p].d+=ol(t.i,24)*PD*.07000000029802322-.03500000014901161,t.c[e.c.p][e.p].a=t.c[e.c.p][e.p].d/t.c[e.c.p][e.p].b)}}function g4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(V=new S(t);V.ar.d,r.d=b.Math.max(r.d,e),d&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+s);break;case 3:n=e>r.a,r.a=b.Math.max(r.a,e),d&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+s);break;case 2:n=e>r.c,r.c=b.Math.max(r.c,e),d&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+s);break;case 4:n=e>r.b,r.b=b.Math.max(r.b,e),d&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+s)}}}function w4n(t){var e,n,r,s,o,h,d,w,k,C,M;for(k=new S(t);k.a0||C.j==Bn&&C.e.c.length-C.g.c.length<0)){e=!1;break}for(s=new S(C.g);s.a=k&&Yt>=tt&&(F+=V.n.b+Y.n.b+Y.a.b-Bt,++d));if(n)for(h=new S(Lt.e);h.a=k&&Yt>=tt&&(F+=V.n.b+Y.n.b+Y.a.b-Bt,++d))}d>0&&(ce+=F/d,++H)}H>0?(e.a=s*ce/H,e.g=H):(e.a=0,e.g=0)}function y4n(t,e){var n,r,s,o,h,d,w,k,C,M,F;for(s=new S(t.a.b);s.aTs||e.o==j2&&C0&&yu(gt,Bt*ce),Yt>0&&xu(gt,Yt*Se);for(UC(t.b,new cv),e=new le,d=new h2(new wg(t.c).a);d.b;)h=Yv(d),r=u(h.cd(),79),n=u(h.dd(),395).a,s=m4(r,!1,!1),M=uae(Zd(r),sD(s),n),yD(M,s),_t=xae(r),_t&&Ro(e,_t,0)==-1&&(e.c[e.c.length]=_t,SXt(_t,(Qn(M.b!=0),u(M.a.a.c,8)),n));for(tt=new h2(new wg(t.d).a);tt.b;)Y=Yv(tt),r=u(Y.cd(),79),n=u(Y.dd(),395).a,s=m4(r,!1,!1),M=uae(Xp(r),BI(sD(s)),n),M=BI(M),yD(M,s),_t=kae(r),_t&&Ro(e,_t,0)==-1&&(e.c[e.c.length]=_t,SXt(_t,(Qn(M.b!=0),u(M.c.b.c,8)),n))}function hhe(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;if(n.c.length!=0){for(H=new le,F=new S(n);F.a1)for(H=new hxt(V,_t,r),va(_t,new iVt(t,H)),h.c[h.c.length]=H,M=_t.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),vu(o,C.b);if(d.a.gc()>1)for(H=new hxt(V,d,r),va(d,new sVt(t,H)),h.c[h.c.length]=H,M=d.a.ec().Kc();M.Ob();)C=u(M.Pb(),46),vu(o,C.b)}}function dhe(t){Sv(t,new w2(mR(Ev(yv(kv(xv(new pg,Td),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new nZ),Td))),xe(t,Td,uH,De(Nye)),xe(t,Td,ky,De(Pye)),xe(t,Td,L4,De(Mye)),xe(t,Td,w6,De(Iye)),xe(t,Td,v6,De(Dye)),xe(t,Td,RE,De(Lye)),xe(t,Td,F_,De(k_t)),xe(t,Td,jE,De(Oye)),xe(t,Td,Ect,De(Fht)),xe(t,Td,kct,De(Bht)),xe(t,Td,Vkt,De(E_t)),xe(t,Td,zkt,De(_V)),xe(t,Td,qkt,De(SV)),xe(t,Td,Hkt,De(BO)),xe(t,Td,Gkt,De(T_t))}function yxt(t){var e;if(this.r=rnn(new bc,new Cc),this.b=new e_(u(Ar(Xa),290)),this.p=new e_(u(Ar(Xa),290)),this.i=new e_(u(Ar(Epe),290)),this.e=t,this.o=new yo(t.rf()),this.D=t.Df()||je(Re(t.We((ci(),WO)))),this.A=u(t.We((ci(),z2)),21),this.B=u(t.We(vb),21),this.q=u(t.We(US),98),this.u=u(t.We(Ky),21),!l0n(this.u))throw rt(new F3("Invalid port label placement: "+this.u));if(this.v=je(Re(t.We(nAt))),this.j=u(t.We(s5),21),!Nbn(this.j))throw rt(new F3("Invalid node label placement: "+this.j));this.n=u(o_(t,HSt),116),this.k=Xt(ye(o_(t,qV))),this.d=Xt(ye(o_(t,aAt))),this.w=Xt(ye(o_(t,hAt))),this.s=Xt(ye(o_(t,oAt))),this.t=Xt(ye(o_(t,cAt))),this.C=u(o_(t,uAt),142),this.c=2*this.d,e=!this.B.Hc((cl(),rN)),this.f=new r_(0,e,0),this.g=new r_(1,e,0),Jtt(this.f,(Kf(),tu),this.g)}function L4n(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;for(_t=0,V=0,H=0,F=1,Lt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));Lt.e!=Lt.i.gc();)tt=u(dr(Lt),33),F+=N0(new ar(lr(G0(tt).a.Kc(),new z))),We=tt.g,V=b.Math.max(V,We),M=tt.f,H=b.Math.max(H,M),_t+=We*M;for(Y=(!t.a&&(t.a=new he(ns,t,10,11)),t.a).i,h=_t+2*r*r*F*Y,o=b.Math.sqrt(h),w=b.Math.max(o*n,V),d=b.Math.max(o/n,H),gt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));gt.e!=gt.i.gc();)tt=u(dr(gt),33),Qe=s.b+(ol(e,26)*L_+ol(e,27)*M_)*(w-tt.g),Rn=s.b+(ol(e,26)*L_+ol(e,27)*M_)*(d-tt.f),yu(tt,Qe),xu(tt,Rn);for(Se=w+(s.b+s.c),ce=d+(s.d+s.a),Yt=new er((!t.a&&(t.a=new he(ns,t,10,11)),t.a));Yt.e!=Yt.i.gc();)for(Bt=u(dr(Yt),33),C=new ar(lr(G0(Bt).a.Kc(),new z));zr(C);)k=u(Lr(C),79),g_(k)||M5n(k,e,Se,ce);Se+=s.b+s.c,ce+=s.d+s.a,gw(t,Se,ce,!1,!0)}function Sq(t){var e,n,r,s,o,h,d,w,k,C,M;if(t==null)throw rt(new od(Tu));if(k=t,o=t.length,w=!1,o>0&&(e=(Rr(0,t.length),t.charCodeAt(0)),(e==45||e==43)&&(t=t.substr(1),--o,w=e==45)),o==0)throw rt(new od(vw+k+'"'));for(;t.length>0&&(Rr(0,t.length),t.charCodeAt(0)==48);)t=t.substr(1),--o;if(o>(ele(),Ege)[10])throw rt(new od(vw+k+'"'));for(s=0;s0&&(M=-parseInt(t.substr(0,r),10),t=t.substr(r),o-=r,n=!1);o>=h;){if(r=parseInt(t.substr(0,h),10),t=t.substr(h),o-=h,n)n=!1;else{if(yc(M,d)<0)throw rt(new od(vw+k+'"'));M=Ca(M,C)}M=Yp(M,r)}if(yc(M,0)>0)throw rt(new od(vw+k+'"'));if(!w&&(M=O8(M),yc(M,0)<0))throw rt(new od(vw+k+'"'));return M}function xxt(t,e){GKt();var n,r,s,o,h,d,w;if(this.a=new h2t(this),this.b=t,this.c=e,this.f=jnt(Eo((Ru(),ma),e)),this.f.dc())if((d=a4t(ma,t))==e)for(this.e=!0,this.d=new le,this.f=new Ck,this.f.Fc(L2),u(Eq(mI(ma,Fl(t)),""),26)==t&&this.f.Fc(kC(ma,Fl(t))),s=oat(ma,t).Kc();s.Ob();)switch(r=u(s.Pb(),170),$v(Eo(ma,r))){case 4:{this.d.Fc(r);break}case 5:{this.f.Gc(jnt(Eo(ma,r)));break}}else if(to(),u(e,66).Oj())for(this.e=!0,this.f=null,this.d=new le,h=0,w=(t.i==null&&pd(t),t.i).length;h=0&&h0&&(u(go(t.b,e),124).a.b=n)}function M4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(wr(e,"Comment pre-processing",1),n=0,w=new S(t.a);w.a0&&(w=(Rr(0,e.length),e.charCodeAt(0)),w!=64)){if(w==37&&(M=e.lastIndexOf("%"),k=!1,M!=0&&(M==F-1||(k=(Rr(M+1,e.length),e.charCodeAt(M+1)==46))))){if(h=e.substr(1,M-1),_t=hn("%",h)?null:Ext(h),r=0,k)try{r=$l(e.substr(M+2),_a,vi)}catch(Bt){throw Bt=Wi(Bt),Et(Bt,127)?(d=Bt,rt(new F$(d))):rt(Bt)}for(tt=ryt(t.Wg());tt.Ob();)if(V=hz(tt),Et(V,510)&&(s=u(V,590),Lt=s.d,(_t==null?Lt==null:hn(_t,Lt))&&r--==0))return s;return null}if(C=e.lastIndexOf("."),H=C==-1?e:e.substr(0,C),n=0,C!=-1)try{n=$l(e.substr(C+1),_a,vi)}catch(Bt){if(Bt=Wi(Bt),Et(Bt,127))H=e;else throw rt(Bt)}for(H=hn("%",H)?null:Ext(H),Y=ryt(t.Wg());Y.Ob();)if(V=hz(Y),Et(V,191)&&(o=u(V,191),gt=o.ne(),(H==null?gt==null:hn(H,gt))&&n--==0))return o;return null}return Rle(t,e)}function O4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(ce=new le,V=new S(t.b);V.a=e.length)return{done:!0};var s=e[r++];return{value:[s,n.get(s)],done:!1}}}},Rvn()||(t.prototype.createObject=function(){return{}},t.prototype.get=function(e){return this.obj[":"+e]},t.prototype.set=function(e,n){this.obj[":"+e]=n},t.prototype[hot]=function(e){delete this.obj[":"+e]},t.prototype.keys=function(){var e=[];for(var n in this.obj)n.charCodeAt(0)==58&&e.push(n.substring(1));return e}),t}function P4n(t){ext();var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(t==null)return null;if(M=t.length*8,M==0)return"";for(d=M%24,H=M/24|0,F=d!=0?H+1:H,o=null,o=Pt(mh,vd,25,F*4,15,1),k=0,C=0,e=0,n=0,r=0,h=0,s=0,w=0;w>24,k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,Y=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,tt=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[h++]=rp[V],o[h++]=rp[Y|k<<4],o[h++]=rp[C<<2|tt],o[h++]=rp[r&63];return d==8?(e=t[s],k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,o[h++]=rp[V],o[h++]=rp[k<<4],o[h++]=61,o[h++]=61):d==16&&(e=t[s],n=t[s+1],C=(n&15)<<24>>24,k=(e&3)<<24>>24,V=e&-128?(e>>2^192)<<24>>24:e>>2<<24>>24,Y=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[h++]=rp[V],o[h++]=rp[Y|k<<4],o[h++]=rp[C<<2],o[h++]=61),Ah(o,0,o.length)}function F4n(t,e){var n,r,s,o,h,d,w;if(t.e==0&&t.p>0&&(t.p=-(t.p-1)),t.p>_a&&nmt(e,t.p-nb),h=e.q.getDate(),nI(e,1),t.k>=0&&wrn(e,t.k),t.c>=0?nI(e,t.c):t.k>=0?(w=new Eyt(e.q.getFullYear()-nb,e.q.getMonth(),35),r=35-w.q.getDate(),nI(e,b.Math.min(r,h))):nI(e,h),t.f<0&&(t.f=e.q.getHours()),t.b>0&&t.f<12&&(t.f+=12),LXe(e,t.f==24&&t.g?0:t.f),t.j>=0&&Lsn(e,t.j),t.n>=0&&Wsn(e,t.n),t.i>=0&&HVt(e,Oa(Ca(eD(ku(e.q.getTime()),$g),$g),t.i)),t.a&&(s=new _R,nmt(s,s.q.getFullYear()-nb-80),get(ku(e.q.getTime()),ku(s.q.getTime()))&&nmt(e,s.q.getFullYear()-nb+100)),t.d>=0){if(t.c==-1)n=(7+t.d-e.q.getDay())%7,n>3&&(n-=7),d=e.q.getMonth(),nI(e,e.q.getDate()+n),e.q.getMonth()!=d&&nI(e,e.q.getDate()+(n>0?-7:7));else if(e.q.getDay()!=t.d)return!1}return t.o>_a&&(o=e.q.getTimezoneOffset(),HVt(e,Oa(ku(e.q.getTime()),(t.o-o)*60*$g))),!0}function bhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(s=Q(e,(se(),_i)),!!Et(s,239)){for(V=u(s,33),Y=e.e,F=new yo(e.c),o=e.d,F.a+=o.b,F.b+=o.d,Bt=u(qe(V,(Te(),iV)),174),Nu(Bt,(cl(),VV))&&(H=u(qe(V,aCt),116),ept(H,o.a),mtt(H,o.d),npt(H,o.b),opt(H,o.c)),n=new le,C=new S(e.a);C.a0&&ue(t.p,C),ue(t.o,C);e-=r,H=w+e,k+=e*t.e,ah(t.a,d,de(H)),ah(t.b,d,k),t.j=b.Math.max(t.j,H),t.k=b.Math.max(t.k,k),t.d+=e,e+=Y}}function be(){be=Z;var t;Zo=new IM(O_,0),Nn=new IM(Rq,1),Hn=new IM(xot,2),mr=new IM(kot,3),Bn=new IM(Eot,4),G1=(vn(),new Qk((t=u(Hf(Xa),9),new rh(t,u(uf(t,t.length),9),0)))),Sf=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[]))),vh=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[]))),Wl=Dg(ji(mr,ct(ot(Xa,1),xc,61,0,[]))),qh=Dg(ji(Bn,ct(ot(Xa,1),xc,61,0,[]))),_u=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[mr]))),uu=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[Bn]))),Af=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Bn]))),tl=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn]))),Kl=Dg(ji(mr,ct(ot(Xa,1),xc,61,0,[Bn]))),wh=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[mr]))),el=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,Bn]))),Cu=Dg(ji(Hn,ct(ot(Xa,1),xc,61,0,[mr,Bn]))),Su=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[mr,Bn]))),qu=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,mr]))),Uc=Dg(ji(Nn,ct(ot(Xa,1),xc,61,0,[Hn,mr,Bn])))}function yhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;if(e.b!=0){for(H=new Qi,d=null,V=null,r=ps(b.Math.floor(b.Math.log(e.b)*b.Math.LOG10E)+1),w=0,_t=ei(e,0);_t.b!=_t.d.c;)for(gt=u(ti(_t),86),Gt(V)!==Gt(Q(gt,(fc(),RS)))&&(V=Br(Q(gt,RS)),w=0),V!=null?d=V+zQt(w++,r):d=zQt(w++,r),Jt(gt,RS,d),tt=(s=ei(new Cp(gt).a.d,0),new bx(s));kR(tt.a);)Y=u(ti(tt.a),188).c,hs(H,Y,H.c.b,H.c),Jt(Y,RS,d);for(F=new Cr,h=0;h=w){Qn(gt.b>0),gt.a.Xb(gt.c=--gt.b);break}else Y.a>k&&(s?(As(s.b,Y.b),s.a=b.Math.max(s.a,Y.a),El(gt)):(ue(Y.b,M),Y.c=b.Math.min(Y.c,k),Y.a=b.Math.max(Y.a,w),s=Y));s||(s=new sqt,s.c=k,s.a=w,Rm(gt,s),ue(s.b,M))}for(d=e.b,C=0,tt=new S(r);tt.ad?1:0:(t.b&&(t.b._b(o)&&(s=u(t.b.xc(o),19).a),t.b._b(w)&&(d=u(t.b.xc(w),19).a)),sd?1:0)):e.e.c.length!=0&&n.g.c.length!=0?1:-1}function $4n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se;for(wr(e,l1e,1),Y=new le,ce=new le,k=new S(t.b);k.a0&&(_t-=H),fxt(h,_t),C=0,F=new S(h.a);F.a0),d.a.Xb(d.c=--d.b)),w=.4*r*C,!o&&d.be.d.c){if(H=t.c[e.a.d],tt=t.c[M.a.d],H==tt)continue;vf(of(af(cf(sf(new Eh,1),100),H),tt))}}}}}function Ext(t){Tat();var e,n,r,s,o,h,d,w;if(t==null)return null;if(s=cd(t,Eu(37)),s<0)return t;for(w=new Il(t.substr(0,s)),e=Pt(Hu,N4,25,4,15,1),d=0,r=0,h=t.length;ss+2&&bit((Rr(s+1,t.length),t.charCodeAt(s+1)),WAt,KAt)&&bit((Rr(s+2,t.length),t.charCodeAt(s+2)),WAt,KAt))if(n=dtn((Rr(s+1,t.length),t.charCodeAt(s+1)),(Rr(s+2,t.length),t.charCodeAt(s+2))),s+=2,r>0?(n&192)==128?e[d++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(e[d++]=n<<24>>24,r=2):(n&240)==224?(e[d++]=n<<24>>24,r=3):(n&248)==240&&(e[d++]=n<<24>>24,r=4)),r>0){if(d==r){switch(d){case 2:{Rp(w,((e[0]&31)<<6|e[1]&63)&ms);break}case 3:{Rp(w,((e[0]&15)<<12|(e[1]&63)<<6|e[2]&63)&ms);break}}d=0,r=0}}else{for(o=0;o0){if(h+r>t.length)return!1;d=rq(t.substr(0,h+r),e)}else d=rq(t,e);switch(o){case 71:return d=p4(t,h,ct(ot(Ae,1),te,2,6,[nfe,rfe]),e),s.e=d,!0;case 77:return Svn(t,e,s,d,h);case 76:return Avn(t,e,s,d,h);case 69:return mgn(t,e,h,s);case 99:return ygn(t,e,h,s);case 97:return d=p4(t,h,ct(ot(Ae,1),te,2,6,["AM","PM"]),e),s.b=d,!0;case 121:return Lvn(t,e,h,d,n,s);case 100:return d<=0?!1:(s.c=d,!0);case 83:return d<0?!1:Oln(d,h,e[0],s);case 104:d==12&&(d=0);case 75:case 72:return d<0?!1:(s.f=d,s.g=!1,!0);case 107:return d<0?!1:(s.f=d,s.g=!0,!0);case 109:return d<0?!1:(s.j=d,!0);case 115:return d<0?!1:(s.n=d,!0);case 90:if(hce&&(V.c=ce-V.b),ue(h.d,new Dnt(V,Jyt(h,V))),Lt=e==Nn?b.Math.max(Lt,Y.b+k.b.rf().b):b.Math.min(Lt,Y.b));for(Lt+=e==Nn?t.t:-t.t,_t=p3t((h.e=Lt,h)),_t>0&&(u(go(t.b,e),124).a.b=_t),C=F.Kc();C.Ob();)k=u(C.Pb(),111),!(!k.c||k.c.d.c.length<=0)&&(V=k.c.i,V.c-=k.e.a,V.d-=k.e.b)}function W4n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;for(e=new Cr,w=new er(t);w.e!=w.i.gc();){for(d=u(dr(w),33),n=new qs,ki(qut,d,n),H=new dm,s=u(Pl(new Tn(null,new Fv(new ar(lr(fD(d).a.Kc(),new z)))),fYt(H,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)])))),83),Pee(n,u(s.xc((Fn(),!0)),14),new pk),r=u(Pl(Ri(u(s.xc(!1),15).Lc(),new x3),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl]))),15),h=r.Kc();h.Ob();)o=u(h.Pb(),79),F=xae(o),F&&(k=u(ec(Ao(e.f,F)),21),k||(k=zce(F),su(e.f,F,k)),Ua(n,k));for(s=u(Pl(new Tn(null,new Fv(new ar(lr(G0(d).a.Kc(),new z)))),fYt(H,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl])))),83),Pee(n,u(s.xc(!0),14),new Ml),r=u(Pl(Ri(u(s.xc(!1),15).Lc(),new T0),i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[Gl]))),15),M=r.Kc();M.Ob();)C=u(M.Pb(),79),F=kae(C),F&&(k=u(ec(Ao(e.f,F)),21),k||(k=zce(F),su(e.f,F,k)),Ua(n,k))}}function K4n(t,e){wat();var n,r,s,o,h,d,w,k,C,M,F,H,V,Y;if(w=yc(t,0)<0,w&&(t=O8(t)),yc(t,0)==0)switch(e){case 0:return"0";case 1:return DE;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return H=new _p,e<0?H.a+="0E+":H.a+="0E",H.a+=e==_a?"2147483648":""+-e,H.a}C=18,M=Pt(mh,vd,25,C+1,15,1),n=C,Y=t;do k=Y,Y=eD(Y,10),M[--n]=Sr(Oa(48,Yp(k,Ca(Y,10))))&ms;while(yc(Y,0)!=0);if(s=Yp(Yp(Yp(C,n),e),1),e==0)return w&&(M[--n]=45),Ah(M,n,C-n);if(e>0&&yc(s,-6)>=0){if(yc(s,0)>=0){for(o=n+Sr(s),d=C-1;d>=o;d--)M[d+1]=M[d];return M[++o]=46,w&&(M[--n]=45),Ah(M,n,C-n+1)}for(h=2;get(h,Oa(O8(s),1));h++)M[--n]=48;return M[--n]=46,M[--n]=48,w&&(M[--n]=45),Ah(M,n,C-n)}return V=n+1,r=C,F=new Lm,w&&(F.a+="-"),r-V>=1?(Rp(F,M[n]),F.a+=".",F.a+=Ah(M,n+1,C-n-1)):F.a+=Ah(M,n,C-n),F.a+="E",yc(s,0)>0&&(F.a+="+"),F.a+=""+EC(s),F.a}function Y4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H;if(t.e.a.$b(),t.f.a.$b(),t.c.c=Pt(Xn,Ie,1,0,5,1),t.i.c=Pt(Xn,Ie,1,0,5,1),t.g.a.$b(),e)for(h=new S(e.a);h.a=1&&(Yt-k>0&&V>=0?(yu(M,M.i+Bt),xu(M,M.j+w*k)):Yt-k<0&&H>=0&&(yu(M,M.i+Bt*Yt),xu(M,M.j+w)));return bo(t,(ci(),z2),(_l(),o=u(Hf(tA),9),new rh(o,u(uf(o,o.length),9),0))),new $e(ce,C)}function Ehe(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V;if(H=ts(Mo(u(St((!t.b&&(t.b=new Cn(br,t,4,7)),t.b),0),82))),V=ts(Mo(u(St((!t.c&&(t.c=new Cn(br,t,5,8)),t.c),0),82))),M=H==V,d=new Ta,e=u(qe(t,(bz(),mAt)),74),e&&e.b>=2){if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i==0)n=(Tv(),s=new rd,s),Mr((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),n);else if((!t.a&&(t.a=new he(Zi,t,6,6)),t.a).i>1)for(F=new Lx((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));F.e!=F.i.gc();)u_(F);yD(e,u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202))}if(M)for(r=new er((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));r.e!=r.i.gc();)for(n=u(dr(r),202),k=new er((!n.a&&(n.a=new Ss(Hh,n,5)),n.a));k.e!=k.i.gc();)w=u(dr(k),469),d.a=b.Math.max(d.a,w.a),d.b=b.Math.max(d.b,w.b);for(h=new er((!t.n&&(t.n=new he(qo,t,1,7)),t.n));h.e!=h.i.gc();)o=u(dr(h),137),C=u(qe(o,KS),8),C&&m1(o,C.a,C.b),M&&(d.a=b.Math.max(d.a,o.i+o.g),d.b=b.Math.max(d.b,o.j+o.f));return d}function X4n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We;for(_t=e.c.length,s=new x4(t.a,n,null,null),We=Pt(ia,vo,25,_t,15,1),Y=Pt(ia,vo,25,_t,15,1),V=Pt(ia,vo,25,_t,15,1),tt=0,d=0;d<_t;d++)Y[d]=vi,V[d]=_a;for(w=0;w<_t;w++)for(r=(An(w,e.c.length),u(e.c[w],180)),We[w]=Wst(r),We[tt]>We[w]&&(tt=w),M=new S(t.a.b);M.aH&&(o&&(Kb(ce,F),Kb(We,de(k.b-1))),pi=n.b,Rs+=F+e,F=0,C=b.Math.max(C,n.b+n.c+hr)),yu(d,pi),xu(d,Rs),C=b.Math.max(C,pi+hr+n.c),F=b.Math.max(F,M),pi+=hr+e;if(C=b.Math.max(C,r),zn=Rs+F+n.a,znyd,Qe=b.Math.abs(F.b-V.b)>yd,(!n&&We&&Qe||n&&(We||Qe))&&ni(tt.a,Bt)),Ua(tt.a,r),r.b==0?F=Bt:F=(Qn(r.b!=0),u(r.c.b.c,8)),gcn(H,M,Y),fne(s)==Se&&(Fa(Se.i)!=s.a&&(Y=new Ta,z4t(Y,Fa(Se.i),Lt)),Jt(tt,$lt,Y)),R0n(H,tt,Lt),C.a.zc(H,C);Da(tt,Yt),sa(tt,Se)}for(k=C.a.ec().Kc();k.Ob();)w=u(k.Pb(),17),Da(w,null),sa(w,null);or(e)}function The(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(t.gc()==1)return u(t.Xb(0),231);if(t.gc()<=0)return new _$;for(s=t.Kc();s.Ob();){for(n=u(s.Pb(),231),V=0,C=vi,M=vi,w=_a,k=_a,H=new S(n.e);H.ad&&(_t=0,Bt+=h+gt,h=0),Fwn(Y,n,_t,Bt),e=b.Math.max(e,_t+tt.a),h=b.Math.max(h,tt.b),_t+=tt.a+gt;return Y}function Che(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V;switch(C=new Du,t.a.g){case 3:F=u(Q(e.e,(se(),N2)),15),H=u(Q(e.j,N2),15),V=u(Q(e.f,N2),15),n=u(Q(e.e,X4),15),r=u(Q(e.j,X4),15),s=u(Q(e.f,X4),15),h=new le,As(h,F),H.Jc(new QX),As(h,Et(H,152)?Vx(u(H,152)):Et(H,131)?u(H,131).a:Et(H,54)?new mv(H):new Mm(H)),As(h,V),o=new le,As(o,n),As(o,Et(r,152)?Vx(u(r,152)):Et(r,131)?u(r,131).a:Et(r,54)?new mv(r):new Mm(r)),As(o,s),Jt(e.f,N2,h),Jt(e.f,X4,o),Jt(e.f,i9t,e.f),Jt(e.e,N2,null),Jt(e.e,X4,null),Jt(e.j,N2,null),Jt(e.j,X4,null);break;case 1:Ua(C,e.e.a),ni(C,e.i.n),Ua(C,a2(e.j.a)),ni(C,e.a.n),Ua(C,e.f.a);break;default:Ua(C,e.e.a),Ua(C,a2(e.j.a)),Ua(C,e.f.a)}_h(e.f.a),Ua(e.f.a,C),Da(e.f,e.e.c),d=u(Q(e.e,(Te(),_o)),74),k=u(Q(e.j,_o),74),w=u(Q(e.f,_o),74),(d||k||w)&&(M=new Du,lwt(M,w),lwt(M,k),lwt(M,d),Jt(e.f,_o,M)),Da(e.j,null),sa(e.j,null),Da(e.e,null),sa(e.e,null),ko(e.a,null),ko(e.i,null),e.g&&Che(t,e.g)}function t5n(t){ext();var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(t==null||(o=R$(t),V=zun(o),V%4!=0))return null;if(Y=V/4|0,Y==0)return Pt(Hu,N4,25,0,15,1);for(M=null,e=0,n=0,r=0,s=0,h=0,d=0,w=0,k=0,H=0,F=0,C=0,M=Pt(Hu,N4,25,Y*3,15,1);H>4)<<24>>24,M[F++]=((n&15)<<4|r>>2&15)<<24>>24,M[F++]=(r<<6|s)<<24>>24}return!dM(h=o[C++])||!dM(d=o[C++])?null:(e=U1[h],n=U1[d],w=o[C++],k=o[C++],U1[w]==-1||U1[k]==-1?w==61&&k==61?n&15?null:(tt=Pt(Hu,N4,25,H*3+1,15,1),Ic(M,0,tt,0,H*3),tt[F]=(e<<2|n>>4)<<24>>24,tt):w!=61&&k==61?(r=U1[w],r&3?null:(tt=Pt(Hu,N4,25,H*3+2,15,1),Ic(M,0,tt,0,H*3),tt[F++]=(e<<2|n>>4)<<24>>24,tt[F]=((n&15)<<4|r>>2&15)<<24>>24,tt)):null:(r=U1[w],s=U1[k],M[F++]=(e<<2|n>>4)<<24>>24,M[F++]=((n&15)<<4|r>>2&15)<<24>>24,M[F++]=(r<<6|s)<<24>>24,M))}function e5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(wr(e,l1e,1),V=u(Q(t,(Te(),X0)),218),s=new S(t.b);s.a=2){for(Y=!0,F=new S(o.j),n=u(J(F),11),H=null;F.a0&&(s=u(Fe(tt.c.a,ce-1),10),h=t.i[s.p],We=b.Math.ceil(V3(t.n,s,tt)),o=Yt.a.e-tt.d.d-(h.a.e+s.o.b+s.d.a)-We),k=ss,ce0&&Se.a.e.e-Se.a.a-(Se.b.e.e-Se.b.a)<0,V=_t.a.e.e-_t.a.a-(_t.b.e.e-_t.b.a)<0&&Se.a.e.e-Se.a.a-(Se.b.e.e-Se.b.a)>0,H=_t.a.e.e+_t.b.aSe.b.e.e+Se.a.a,Bt=0,!Y&&!V&&(F?o+M>0?Bt=M:k-r>0&&(Bt=r):H&&(o+d>0?Bt=d:k-Lt>0&&(Bt=Lt))),Yt.a.e+=Bt,Yt.b&&(Yt.d.e+=Bt),!1))}function She(t,e,n){var r,s,o,h,d,w,k,C,M,F;if(r=new ih(e.qf().a,e.qf().b,e.rf().a,e.rf().b),s=new Ax,t.c)for(h=new S(e.wf());h.ak&&(r.a+=DUt(Pt(mh,vd,25,-k,15,1))),r.a+="Is",cd(w,Eu(32))>=0)for(s=0;s=r.o.b/2}else Lt=!M;Lt?(gt=u(Q(r,(se(),N6)),15),gt?F?o=gt:(s=u(Q(r,L6),15),s?gt.gc()<=s.gc()?o=gt:o=s:(o=new le,Jt(r,L6,o))):(o=new le,Jt(r,N6,o))):(s=u(Q(r,(se(),L6)),15),s?M?o=s:(gt=u(Q(r,N6),15),gt?s.gc()<=gt.gc()?o=s:o=gt:(o=new le,Jt(r,N6,o))):(o=new le,Jt(r,L6,o))),o.Fc(t),Jt(t,(se(),zG),n),e.d==n?(sa(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null),Ycn(n)):(Da(e,null),n.e.c.length+n.g.c.length==0&&Uo(n,null)),_h(e.a)}function s5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;for(Lt=new ha(t.b,0),C=e.Kc(),V=0,k=u(C.Pb(),19).a,Yt=0,n=new qs,Se=new A0;Lt.b=t.a&&(r=Gmn(t,Lt),C=b.Math.max(C,r.b),Bt=b.Math.max(Bt,r.d),ue(d,new la(Lt,r)));for(We=new le,k=0;k0),tt.a.Xb(tt.c=--tt.b),Qe=new Ch(t.b),Rm(tt,Qe),Qn(tt.b0?(k=0,tt&&(k+=d),k+=(Qe-1)*h,_t&&(k+=d),We&&_t&&(k=b.Math.max(k,H2n(_t,h,Lt,Se))),k0){for(F=C<100?null:new Sp(C),k=new oyt(e),V=k.g,gt=Pt(Tr,Xr,25,C,15,1),r=0,Bt=new Kv(C),s=0;s=0;)if(H!=null?yi(H,V[w]):Gt(H)===Gt(V[w])){gt.length<=r&&(tt=gt,gt=Pt(Tr,Xr,25,2*gt.length,15,1),Ic(tt,0,gt,0,r)),gt[r++]=s,Mr(Bt,V[w]);break t}if(H=H,Gt(H)===Gt(d))break}}if(k=Bt,V=Bt.g,C=r,r>gt.length&&(tt=gt,gt=Pt(Tr,Xr,25,r,15,1),Ic(tt,0,gt,0,r)),r>0){for(_t=!0,o=0;o=0;)r6(t,gt[h]);if(r!=C){for(s=C;--s>=r;)r6(k,s);tt=gt,gt=Pt(Tr,Xr,25,r,15,1),Ic(tt,0,gt,0,r)}e=k}}}else for(e=zfn(t,e),s=t.i;--s>=0;)e.Hc(t.g[s])&&(r6(t,s),_t=!0);if(_t){if(gt!=null){for(n=e.gc(),M=n==1?DC(t,4,e.Kc().Pb(),null,gt[0],Y):DC(t,6,e,gt,gt[0],Y),F=n<100?null:new Sp(n),s=e.Kc();s.Ob();)H=s.Pb(),F=hvt(t,u(H,72),F);F?(F.Ei(M),F.Fi()):mi(t.e,M)}else{for(F=tZe(e.gc()),s=e.Kc();s.Ob();)H=s.Pb(),F=hvt(t,u(H,72),F);F&&F.Fi()}return!0}else return!1}function l5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t;for(n=new ese(e),n.a||Wwn(e),k=Kvn(e),w=new Hv,tt=new Yce,Y=new S(e.a);Y.a0||n.o==z1&&s0?(M=u(Fe(F.c.a,h-1),10),We=V3(t.b,F,M),tt=F.n.b-F.d.d-(M.n.b+M.o.b+M.d.a+We)):tt=F.n.b-F.d.d,k=b.Math.min(tt,k),hh?xE(t,e,n):xE(t,n,e),sh?1:0}return r=u(Q(e,(se(),Tc)),19).a,o=u(Q(n,Tc),19).a,r>o?xE(t,e,n):xE(t,n,e),ro?1:0}function Txt(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;if(je(Re(qe(e,(ci(),$V)))))return vn(),vn(),io;if(k=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i!=0,M=Zgn(e),C=!M.dc(),k||C){if(s=u(qe(e,C7),149),!s)throw rt(new F3("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(Lt=Wbt(s,(vE(),JV)),Fie(e),!k&&C&&!Lt)return vn(),vn(),io;if(w=new le,Gt(qe(e,r5))===Gt(($0(),Zg))&&(Wbt(s,QV)||Wbt(s,XV)))for(H=wue(t,e),V=new Qi,Ua(V,(!e.a&&(e.a=new he(ns,e,10,11)),e.a));V.b!=0;)F=u(V.b==0?null:(Qn(V.b!=0),ch(V,V.a.a)),33),Fie(F),gt=Gt(qe(F,r5))===Gt(YS),gt||r2(F,VS)&&!omt(s,qe(F,C7))?(d=Txt(t,F,n,r),As(w,d),bo(F,r5,YS),Pue(F)):Ua(V,(!F.a&&(F.a=new he(ns,F,10,11)),F.a));else for(H=(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i,h=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));h.e!=h.i.gc();)o=u(dr(h),33),d=Txt(t,o,n,r),As(w,d),Pue(o);for(tt=new S(w);tt.a=0?H=Jx(d):H=HI(Jx(d)),t.Ye(v7,H)),k=new Ta,F=!1,t.Xe(Pw)?(F2t(k,u(t.We(Pw),8)),F=!0):jXe(k,h.a/2,h.b/2),H.g){case 4:Jt(C,cu,(hh(),fb)),Jt(C,HG,(u2(),G4)),C.o.b=h.b,Y<0&&(C.o.a=-Y),Fs(M,(be(),Hn)),F||(k.a=h.a),k.a-=h.a;break;case 2:Jt(C,cu,(hh(),Fy)),Jt(C,HG,(u2(),u7)),C.o.b=h.b,Y<0&&(C.o.a=-Y),Fs(M,(be(),Bn)),F||(k.a=0);break;case 1:Jt(C,O2,(B0(),U4)),C.o.a=h.a,Y<0&&(C.o.b=-Y),Fs(M,(be(),mr)),F||(k.b=h.b),k.b-=h.b;break;case 3:Jt(C,O2,(B0(),A6)),C.o.a=h.a,Y<0&&(C.o.b=-Y),Fs(M,(be(),Nn)),F||(k.b=0)}if(F2t(M.n,k),Jt(C,Pw,k),e==G2||e==h0||e==Vc){if(V=0,e==G2&&t.Xe(Wg))switch(H.g){case 1:case 2:V=u(t.We(Wg),19).a;break;case 3:case 4:V=-u(t.We(Wg),19).a}else switch(H.g){case 4:case 2:V=o.b,e==h0&&(V/=s.b);break;case 1:case 3:V=o.a,e==h0&&(V/=s.a)}Jt(C,Dw,V)}return Jt(C,oc,H),C}function d5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;if(n=Xt(ye(Q(t.a.j,(Te(),R9t)))),n<-1||!t.a.i||Dx(u(Q(t.a.o,os),98))||Yo(t.a.o,(be(),Hn)).gc()<2&&Yo(t.a.o,Bn).gc()<2)return!0;if(t.a.c.Rf())return!1;for(Yt=0,Bt=0,_t=new le,w=t.a.e,k=0,C=w.length;k=n}function g5n(){abt();function t(r){var s=this;this.dispatch=function(o){var h=o.data;switch(h.cmd){case"algorithms":var d=g3t((vn(),new T(new b1(Tb.b))));r.postMessage({id:h.id,data:d});break;case"categories":var w=g3t((vn(),new T(new b1(Tb.c))));r.postMessage({id:h.id,data:w});break;case"options":var k=g3t((vn(),new T(new b1(Tb.d))));r.postMessage({id:h.id,data:k});break;case"register":x3n(h.algorithms),r.postMessage({id:h.id});break;case"layout":eyn(h.graph,h.layoutOptions||{},h.options||{}),r.postMessage({id:h.id,data:h.graph});break}},this.saveDispatch=function(o){try{s.dispatch(o)}catch(h){r.postMessage({id:o.data.id,error:h})}}}function e(r){var s=this;this.dispatcher=new t({postMessage:function(o){s.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){s.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===pot&&typeof self!==pot){var n=new t(self);self.onmessage=n.saveDispatch}else typeof p!==pot&&p.exports&&(Object.defineProperty(v,"__esModule",{value:!0}),p.exports={default:e,Worker:e})}function p5n(t){t.N||(t.N=!0,t.b=ic(t,0),es(t.b,0),es(t.b,1),es(t.b,2),t.bb=ic(t,1),es(t.bb,0),es(t.bb,1),t.fb=ic(t,2),es(t.fb,3),es(t.fb,4),Pi(t.fb,5),t.qb=ic(t,3),es(t.qb,0),Pi(t.qb,1),Pi(t.qb,2),es(t.qb,3),es(t.qb,4),Pi(t.qb,5),es(t.qb,6),t.a=ai(t,4),t.c=ai(t,5),t.d=ai(t,6),t.e=ai(t,7),t.f=ai(t,8),t.g=ai(t,9),t.i=ai(t,10),t.j=ai(t,11),t.k=ai(t,12),t.n=ai(t,13),t.o=ai(t,14),t.p=ai(t,15),t.q=ai(t,16),t.s=ai(t,17),t.r=ai(t,18),t.t=ai(t,19),t.u=ai(t,20),t.v=ai(t,21),t.w=ai(t,22),t.B=ai(t,23),t.A=ai(t,24),t.C=ai(t,25),t.D=ai(t,26),t.F=ai(t,27),t.G=ai(t,28),t.H=ai(t,29),t.J=ai(t,30),t.I=ai(t,31),t.K=ai(t,32),t.M=ai(t,33),t.L=ai(t,34),t.P=ai(t,35),t.Q=ai(t,36),t.R=ai(t,37),t.S=ai(t,38),t.T=ai(t,39),t.U=ai(t,40),t.V=ai(t,41),t.X=ai(t,42),t.W=ai(t,43),t.Y=ai(t,44),t.Z=ai(t,45),t.$=ai(t,46),t._=ai(t,47),t.ab=ai(t,48),t.cb=ai(t,49),t.db=ai(t,50),t.eb=ai(t,51),t.gb=ai(t,52),t.hb=ai(t,53),t.ib=ai(t,54),t.jb=ai(t,55),t.kb=ai(t,56),t.lb=ai(t,57),t.mb=ai(t,58),t.nb=ai(t,59),t.ob=ai(t,60),t.pb=ai(t,61))}function b5n(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt;if(Lt=0,e.f.a==0)for(tt=new S(t);tt.ak&&(An(k,e.c.length),u(e.c[k],200)).a.c.length==0;)vu(e,(An(k,e.c.length),e.c[k]));if(!w){--o;continue}if(nmn(e,C,s,w,F,n,k,r)){M=!0;continue}if(F){if(uyn(e,C,s,w,n,k,r)){M=!0;continue}else if(zyt(C,s)){s.c=!0,M=!0;continue}}else if(zyt(C,s)){s.c=!0,M=!0;continue}if(M)continue}if(zyt(C,s)){s.c=!0,M=!0,w&&(w.k=!1);continue}else Vz(s.q)}return M}function Mat(t,e,n,r,s,o,h){var d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs;for(Y=0,Rn=0,k=new S(t.b);k.aY&&(o&&(Kb(ce,H),Kb(We,de(C.b-1)),ue(t.d,V),d.c=Pt(Xn,Ie,1,0,5,1)),pi=n.b,Rs+=H+e,H=0,M=b.Math.max(M,n.b+n.c+hr)),d.c[d.c.length]=w,Kie(w,pi,Rs),M=b.Math.max(M,pi+hr+n.c),H=b.Math.max(H,F),pi+=hr+e,V=w;if(As(t.a,d),ue(t.d,u(Fe(d,d.c.length-1),157)),M=b.Math.max(M,r),zn=Rs+H+n.a,zn1&&(h=b.Math.min(h,b.Math.abs(u(Qf(d.a,1),8).b-C.b)))));else for(Y=new S(e.j);Y.as&&(o=F.a-s,h=vi,r.c=Pt(Xn,Ie,1,0,5,1),s=F.a),F.a>=s&&(r.c[r.c.length]=d,d.a.b>1&&(h=b.Math.min(h,b.Math.abs(u(Qf(d.a,d.a.b-2),8).b-F.b)))));if(r.c.length!=0&&o>e.o.a/2&&h>e.o.b/2){for(H=new Mc,Uo(H,e),Fs(H,(be(),Nn)),H.n.a=e.o.a/2,gt=new Mc,Uo(gt,e),Fs(gt,mr),gt.n.a=e.o.a/2,gt.n.b=e.o.b,w=new S(r);w.a=k.b?Da(d,gt):Da(d,H)):(k=u(ftn(d.a),8),tt=d.a.b==0?T1(d.c):u(vj(d.a),8),tt.b>=k.b?sa(d,gt):sa(d,H)),M=u(Q(d,(Te(),_o)),74),M&&ry(M,k,!0);e.n.a=s-e.o.a/2}}function x5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh;if(Rn=null,hr=e,zn=PZt(t,IZt(n),hr),qC(zn,O0(hr,Cd)),pi=u(t4(t.g,s6(D0(hr,jct))),33),F=D0(hr,"sourcePort"),r=null,F&&(r=s6(F)),Rs=u(t4(t.j,r),118),!pi)throw d=oE(hr),V="An edge must have a source node (edge id: '"+d,Y=V+VE,rt(new ad(Y));if(Rs&&!fd(k1(Rs),pi))throw w=O0(hr,Cd),tt="The source port of an edge must be a port of the edge's source node (edge id: '"+w,gt=tt+VE,rt(new ad(gt));if(We=(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b),o=null,Rs?o=Rs:o=pi,Mr(We,o),Xl=u(t4(t.g,s6(D0(hr,E8t))),33),H=D0(hr,"targetPort"),s=null,H&&(s=s6(H)),Kh=u(t4(t.j,s),118),!Xl)throw M=oE(hr),Lt="An edge must have a target node (edge id: '"+M,_t=Lt+VE,rt(new ad(_t));if(Kh&&!fd(k1(Kh),Xl))throw k=O0(hr,Cd),Bt="The target port of an edge must be a port of the edge's target node (edge id: '"+k,Yt=Bt+VE,rt(new ad(Yt));if(Qe=(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c),h=null,Kh?h=Kh:h=Xl,Mr(Qe,h),(!zn.b&&(zn.b=new Cn(br,zn,4,7)),zn.b).i==0||(!zn.c&&(zn.c=new Cn(br,zn,5,8)),zn.c).i==0)throw C=O0(hr,Cd),ce=Sde+C,Se=ce+VE,rt(new ad(Se));return Jz(hr,zn),hbn(hr,zn),Rn=wit(t,hr,zn),Rn}function Dhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn;return M=Tmn(gu(t,(be(),G1)),e),V=h4(gu(t,Sf),e),Bt=h4(gu(t,Wl),e),We=Uz(gu(t,qh),e),F=Uz(gu(t,vh),e),Lt=h4(gu(t,Af),e),Y=h4(gu(t,tl),e),ce=h4(gu(t,Kl),e),Yt=h4(gu(t,wh),e),Qe=Uz(gu(t,uu),e),gt=h4(gu(t,_u),e),_t=h4(gu(t,el),e),Se=h4(gu(t,Cu),e),Rn=Uz(gu(t,Su),e),H=Uz(gu(t,qu),e),tt=h4(gu(t,Uc),e),n=r4(ct(ot(ia,1),vo,25,15,[Lt.a,We.a,ce.a,Rn.a])),r=r4(ct(ot(ia,1),vo,25,15,[V.a,M.a,Bt.a,tt.a])),s=gt.a,o=r4(ct(ot(ia,1),vo,25,15,[Y.a,F.a,Yt.a,H.a])),k=r4(ct(ot(ia,1),vo,25,15,[Lt.b,V.b,Y.b,_t.b])),w=r4(ct(ot(ia,1),vo,25,15,[We.b,M.b,F.b,tt.b])),C=Qe.b,d=r4(ct(ot(ia,1),vo,25,15,[ce.b,Bt.b,Yt.b,Se.b])),Mg(gu(t,G1),n+s,k+C),Mg(gu(t,Uc),n+s,k+C),Mg(gu(t,Sf),n+s,0),Mg(gu(t,Wl),n+s,k+C+w),Mg(gu(t,qh),0,k+C),Mg(gu(t,vh),n+s+r,k+C),Mg(gu(t,tl),n+s+r,0),Mg(gu(t,Kl),0,k+C+w),Mg(gu(t,wh),n+s+r,k+C+w),Mg(gu(t,uu),0,k),Mg(gu(t,_u),n,0),Mg(gu(t,Cu),0,k+C+w),Mg(gu(t,qu),n+s+r,0),h=new Ta,h.a=r4(ct(ot(ia,1),vo,25,15,[n+r+s+o,Qe.a,_t.a,Se.a])),h.b=r4(ct(ot(ia,1),vo,25,15,[k+w+C+d,gt.b,Rn.b,H.b])),h}function k5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(Y=new le,F=new S(t.d.b);F.as.d.d+s.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))),r.b!=r.d.c&&(e=n);C&&(o=u(Jn(t.f,h.d.i),57),e.bo.d.d+o.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))}for(d=new ar(lr(jo(H).a.Kc(),new z));zr(d);)h=u(Lr(d),17),h.a.b!=0&&(e=u(vj(h.a),8),h.d.j==(be(),Nn)&&(tt=new x_(e,new $e(e.a,s.d.d),s,h),tt.f.a=!0,tt.a=h.d,Y.c[Y.c.length]=tt),h.d.j==mr&&(tt=new x_(e,new $e(e.a,s.d.d+s.d.a),s,h),tt.f.d=!0,tt.a=h.d,Y.c[Y.c.length]=tt))}return Y}function E5n(t,e,n){var r,s,o,h,d,w,k,C,M;if(wr(n,"Network simplex node placement",1),t.e=e,t.n=u(Q(e,(se(),Y4)),304),$yn(t),ydn(t),us(Wo(new Tn(null,new _n(t.e.b,16)),new fQ),new C$t(t)),us(Ri(Wo(Ri(Wo(new Tn(null,new _n(t.e.b,16)),new GT),new kQ),new EQ),new TQ),new T$t(t)),je(Re(Q(t.e,(Te(),TS))))&&(h=Rc(n,1),wr(h,"Straight Edges Pre-Processing",1),s4n(t),or(h)),efn(t.f),o=u(Q(e,SS),19).a*t.f.a.c.length,cat(Jpt(tbt(mnt(t.f),o),!1),Rc(n,1)),t.d.a.gc()!=0){for(h=Rc(n,1),wr(h,"Flexible Where Space Processing",1),d=u(Ov(Hj(pu(new Tn(null,new _n(t.f.a,16)),new dQ),new aQ)),19).a,w=u(Ov(qj(pu(new Tn(null,new _n(t.f.a,16)),new gQ),new oQ)),19).a,k=w-d,C=Dv(new Ub,t.f),M=Dv(new Ub,t.f),vf(of(af(sf(cf(new Eh,2e4),k),C),M)),us(Ri(Ri($nt(t.i),new pQ),new bQ),new kXt(d,C,k,M)),s=t.d.a.ec().Kc();s.Ob();)r=u(s.Pb(),213),r.g=1;cat(Jpt(tbt(mnt(t.f),o),!1),Rc(h,1)),or(h)}je(Re(Q(e,TS)))&&(h=Rc(n,1),wr(h,"Straight Edges Post-Processing",1),lgn(t),or(h)),H3n(t),t.e=null,t.f=null,t.i=null,t.c=null,Yu(t.k),t.j=null,t.a=null,t.o=null,t.d.a.$b(),or(n)}function T5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(d=new S(t.a.b);d.a0)if(r=M.gc(),k=ps(b.Math.floor((r+1)/2))-1,s=ps(b.Math.ceil((r+1)/2))-1,e.o==z1)for(C=s;C>=k;C--)e.a[Bt.p]==Bt&&(Y=u(M.Xb(C),46),V=u(Y.a,10),!S0(n,Y.b)&&H>t.b.e[V.p]&&(e.a[V.p]=Bt,e.g[Bt.p]=e.g[V.p],e.a[Bt.p]=e.g[Bt.p],e.f[e.g[Bt.p].p]=(Fn(),!!(je(e.f[e.g[Bt.p].p])&Bt.k==(Gn(),Zs))),H=t.b.e[V.p]));else for(C=k;C<=s;C++)e.a[Bt.p]==Bt&&(gt=u(M.Xb(C),46),tt=u(gt.a,10),!S0(n,gt.b)&&H=V&&(Lt>V&&(H.c=Pt(Xn,Ie,1,0,5,1),V=Lt),H.c[H.c.length]=h);H.c.length!=0&&(F=u(Fe(H,zz(e,H.c.length)),128),zn.a.Bc(F)!=null,F.s=Y++,x5t(F,Qe,ce),H.c=Pt(Xn,Ie,1,0,5,1))}for(Bt=t.c.length+1,d=new S(t);d.aRn.s&&(El(n),vu(Rn.i,r),r.c>0&&(r.a=Rn,ue(Rn.t,r),r.b=Se,ue(Se.i,r)))}function Cxt(t){var e,n,r,s,o;switch(e=t.c,e){case 11:return t.Ml();case 12:return t.Ol();case 14:return t.Ql();case 15:return t.Tl();case 16:return t.Rl();case 17:return t.Ul();case 21:return fi(t),gi(),gi(),fA;case 10:switch(t.a){case 65:return t.yl();case 90:return t.Dl();case 122:return t.Kl();case 98:return t.El();case 66:return t.zl();case 60:return t.Jl();case 62:return t.Hl()}}switch(o=m5n(t),e=t.c,e){case 3:return t.Zl(o);case 4:return t.Xl(o);case 5:return t.Yl(o);case 0:if(t.a==123&&t.d=48&&e<=57){for(r=e-48;s=48&&e<=57;)if(r=r*10+e-48,r<0)throw rt(new Fr(qr((Nr(),L8t))))}else throw rt(new Fr(qr((Nr(),e0e))));if(n=r,e==44){if(s>=t.j)throw rt(new Fr(qr((Nr(),r0e))));if((e=ba(t.i,s++))>=48&&e<=57){for(n=e-48;s=48&&e<=57;)if(n=n*10+e-48,n<0)throw rt(new Fr(qr((Nr(),L8t))));if(r>n)throw rt(new Fr(qr((Nr(),i0e))))}else n=-1}if(e!=125)throw rt(new Fr(qr((Nr(),n0e))));t.sl(s)?(o=(gi(),gi(),new Wm(9,o)),t.d=s+1):(o=(gi(),gi(),new Wm(3,o)),t.d=s),o.dm(r),o.cm(n),fi(t)}}return o}function Ohe(t,e,n,r,s){var o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn;for(Y=new Yc(e.b),Bt=new Yc(e.b),F=new Yc(e.b),We=new Yc(e.b),tt=new Yc(e.b),Se=ei(e,0);Se.b!=Se.d.c;)for(Yt=u(ti(Se),11),d=new S(Yt.g);d.a0,gt=Yt.g.c.length>0,k&>?F.c[F.c.length]=Yt:k?Y.c[Y.c.length]=Yt:gt&&(Bt.c[Bt.c.length]=Yt);for(V=new S(Y);V.a1)for(V=new Lx((!t.a&&(t.a=new he(Zi,t,6,6)),t.a));V.e!=V.i.gc();)u_(V);for(h=u(St((!t.a&&(t.a=new he(Zi,t,6,6)),t.a),0),202),tt=pi,pi>Yt+Bt?tt=Yt+Bt:pice+Y?gt=ce+Y:RsYt-Bt&&ttce-Y&>pi+hr?We=pi+hr:YtRs+Se?Qe=Rs+Se:cepi-hr&&WeRs-Se&&Qen&&(F=n-1),H=bN+ol(e,24)*PD*M-M/2,H<0?H=1:H>r&&(H=r-1),s=(Tv(),w=new vp,w),W$(s,F),K$(s,H),Mr((!h.a&&(h.a=new Ss(Hh,h,5)),h.a),s)}function Te(){Te=Z,Jlt=(ci(),Z3e),dCt=J3e,AO=iAt,xf=t4e,B6=sAt,Fw=e4e,Gy=aAt,m7=oAt,y7=cAt,tht=qV,Bw=H2,eht=n4e,_S=hAt,sV=q6,SO=(Axt(),Yve),Q4=Xve,R2=Qve,Z4=Zve,Pwe=new eo(zV,de(0)),w7=Uve,fCt=Wve,F6=Kve,xCt=ywe,gCt=ewe,pCt=iwe,rht=hwe,bCt=owe,vCt=uwe,aV=Twe,iht=xwe,mCt=bwe,wCt=gwe,yCt=wwe,Nw=$ve,CS=zve,Klt=ive,G9t=ave,oCt=new Mv(12),aCt=new eo(q2,oCt),z9t=(q0(),A7),X0=new eo(NSt,z9t),zy=new eo(hl,0),Fwe=new eo(fft,de(1)),UG=new eo($6,BE),B2=$V,os=US,v7=o5,Awe=UO,Ld=H3e,jy=r5,Bwe=new eo(dft,(Fn(),!0)),$y=WO,P2=sft,F2=z2,iV=vb,Zlt=jV,$9t=(ao(),c0),Vl=new eo(jw,$9t),Ow=s5,nV=HSt,qy=Ky,Nwe=hft,lCt=nAt,uCt=(c4(),JO),new eo(QSt,uCt),Iwe=oft,Dwe=cft,Owe=uft,Mwe=aft,nht=twe,eCt=Ave,Xlt=Sve,SS=Jve,cu=yve,Ry=X2e,ES=Y2e,By=F2e,B9t=B2e,Glt=z2e,_O=R2e,Vlt=W2e,nCt=Lve,rCt=Mve,X9t=gve,rV=Gve,Qlt=Ove,Ylt=uve,sCt=Rve,H9t=nve,Wlt=rve,Hlt=BV,iCt=Ive,KG=L2e,N9t=A2e,WG=S2e,W9t=fve,U9t=hve,K9t=dve,p7=a5,_o=i5,Ug=FSt,Md=ift,Ult=rft,R9t=H2e,Wg=lft,kS=U3e,JG=W3e,Pw=JSt,cCt=K3e,b7=Y3e,Z9t=kve,J9t=Tve,Hy=z6,zlt=_2e,tCt=_ve,ZG=J2e,QG=Z2e,eV=KO,Q9t=vve,TS=Pve,LO=uAt,j9t=Q2e,hCt=Vve,q9t=tve,Lwe=mve,Swe=V2e,Y9t=$St,tV=xve,XG=U2e,db=P2e,F9t=O2e,YG=I2e,P9t=D2e,qlt=N2e,P6=M2e,V9t=lve}function Dat(t,e){wat();var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;if(We=t.e,V=t.d,s=t.a,We==0)switch(e){case 0:return"0";case 1:return DE;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ce=new _p,e<0?ce.a+="0E+":ce.a+="0E",ce.a+=-e,ce.a}if(_t=V*10+1+7,Bt=Pt(mh,vd,25,_t+1,15,1),n=_t,V==1)if(d=s[0],d<0){pi=Ps(d,co);do Y=pi,pi=eD(pi,10),Bt[--n]=48+Sr(Yp(Y,Ca(pi,10)))&ms;while(yc(pi,0)!=0)}else{pi=d;do Y=pi,pi=pi/10|0,Bt[--n]=48+(Y-pi*10)&ms;while(pi!=0)}else{Rn=Pt(Tr,Xr,25,V,15,1),hr=V,Ic(s,0,Rn,0,hr);t:for(;;){for(Se=0,k=hr-1;k>=0;k--)zn=Oa(M0(Se,32),Ps(Rn[k],co)),gt=Pdn(zn),Rn[k]=Sr(gt),Se=Sr(Fp(gt,32));Lt=Sr(Se),tt=n;do Bt[--n]=48+Lt%10&ms;while((Lt=Lt/10|0)!=0&&n!=0);for(r=9-tt+n,w=0;w0;w++)Bt[--n]=48;for(M=hr-1;Rn[M]==0;M--)if(M==0)break t;hr=M+1}for(;Bt[n]==48;)++n}if(H=We<0,h=_t-n-e-1,e==0)return H&&(Bt[--n]=45),Ah(Bt,n,_t-n);if(e>0&&h>=-6){if(h>=0){for(C=n+h,F=_t-1;F>=C;F--)Bt[F+1]=Bt[F];return Bt[++C]=46,H&&(Bt[--n]=45),Ah(Bt,n,_t-n+1)}for(M=2;M<-h+1;M++)Bt[--n]=48;return Bt[--n]=46,Bt[--n]=48,H&&(Bt[--n]=45),Ah(Bt,n,_t-n)}return Qe=n+1,o=_t,Yt=new Lm,H&&(Yt.a+="-"),o-Qe>=1?(Rp(Yt,Bt[n]),Yt.a+=".",Yt.a+=Ah(Bt,n+1,_t-n-1)):Yt.a+=Ah(Bt,n,_t-n),Yt.a+="E",h>0&&(Yt.a+="+"),Yt.a+=""+h,Yt.a}function Fhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce;switch(t.c=e,t.g=new Cr,n=(Im(),new Sm(t.c)),r=new tr(n),c3t(r),_t=Br(qe(t.c,(rD(),rSt))),w=u(qe(t.c,Kht),316),Yt=u(qe(t.c,Yht),429),h=u(qe(t.c,tSt),482),Bt=u(qe(t.c,Wht),430),t.j=Xt(ye(qe(t.c,d3e))),d=t.a,w.g){case 0:d=t.a;break;case 1:d=t.b;break;case 2:d=t.i;break;case 3:d=t.e;break;case 4:d=t.f;break;default:throw rt(new Pn(pH+(w.f!=null?w.f:""+w.g)))}if(t.d=new aQt(d,Yt,h),Jt(t.d,(G8(),uS),Re(qe(t.c,h3e))),t.d.c=je(Re(qe(t.c,eSt))),i$(t.c).i==0)return t.d;for(M=new er(i$(t.c));M.e!=M.i.gc();){for(C=u(dr(M),33),H=C.g/2,F=C.f/2,ce=new $e(C.i+H,C.j+F);kl(t.g,ce);)Fm(ce,(b.Math.random()-.5)*yd,(b.Math.random()-.5)*yd);Y=u(qe(C,(ci(),KO)),142),tt=new EQt(ce,new ih(ce.a-H-t.j/2-Y.b,ce.b-F-t.j/2-Y.d,C.g+t.j+(Y.b+Y.c),C.f+t.j+(Y.d+Y.a))),ue(t.d.i,tt),ki(t.g,ce,new la(tt,C))}switch(Bt.g){case 0:if(_t==null)t.d.d=u(Fe(t.d.i,0),65);else for(Lt=new S(t.d.i);Lt.a1&&hs(C,gt,C.c.b,C.c),H$(s)));gt=Lt}return C}function I5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh,W1;for(wr(n,"Greedy cycle removal",1),_t=e.a,W1=_t.c.length,t.a=Pt(Tr,Xr,25,W1,15,1),t.c=Pt(Tr,Xr,25,W1,15,1),t.b=Pt(Tr,Xr,25,W1,15,1),k=0,gt=new S(_t);gt.a0?hr+1:1);for(h=new S(ce.g);h.a0?hr+1:1)}t.c[k]==0?ni(t.e,Y):t.a[k]==0&&ni(t.f,Y),++k}for(V=-1,H=1,M=new le,t.d=u(Q(e,(se(),O6)),230);W1>0;){for(;t.e.b!=0;)Rs=u(knt(t.e),10),t.b[Rs.p]=V--,K5t(t,Rs),--W1;for(;t.f.b!=0;)Xl=u(knt(t.f),10),t.b[Xl.p]=H++,K5t(t,Xl),--W1;if(W1>0){for(F=_a,Lt=new S(_t);Lt.a=F&&(Bt>F&&(M.c=Pt(Xn,Ie,1,0,5,1),F=Bt),M.c[M.c.length]=Y));C=t.Zf(M),t.b[C.p]=H++,K5t(t,C),--W1}}for(pi=_t.c.length+1,k=0;k<_t.c.length;k++)t.b[k]<0&&(t.b[k]+=pi);for(tt=new S(_t);tt.at.b[Kh]&&(dw(r,!0),Jt(e,xO,(Fn(),!0)));t.a=null,t.c=null,t.b=null,_h(t.f),_h(t.e),or(n)}function Rhe(t,e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;for(r=new le,d=new le,tt=e/2,H=t.gc(),s=u(t.Xb(0),8),gt=u(t.Xb(1),8),V=Ust(s.a,s.b,gt.a,gt.b,tt),ue(r,(An(0,V.c.length),u(V.c[0],8))),ue(d,(An(1,V.c.length),u(V.c[1],8))),k=2;k=0;w--)ni(n,(An(w,h.c.length),u(h.c[w],8)));return n}function D5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H;if(h=!0,M=null,r=null,s=null,e=!1,H=G4e,k=null,o=null,d=0,w=Zit(t,d,YAt,XAt),w=0&&hn(t.substr(d,2),"//")?(d+=2,w=Zit(t,d,iA,sA),r=t.substr(d,w-d),d=w):M!=null&&(d==t.length||(Rr(d,t.length),t.charCodeAt(d)!=47))&&(h=!1,w=_2t(t,Eu(35),d),w==-1&&(w=t.length),r=t.substr(d,w-d),d=w);if(!n&&d0&&ba(C,C.length-1)==58&&(s=C,d=w)),d=t.j){t.a=-1,t.c=1;return}if(e=ba(t.i,t.d++),t.a=e,t.b==1){switch(e){case 92:if(r=10,t.d>=t.j)throw rt(new Fr(qr((Nr(),kH))));t.a=ba(t.i,t.d++);break;case 45:(t.e&512)==512&&t.d=t.j||ba(t.i,t.d)!=63)break;if(++t.d>=t.j)throw rt(new Fr(qr((Nr(),Xct))));switch(e=ba(t.i,t.d++),e){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(t.d>=t.j)throw rt(new Fr(qr((Nr(),Xct))));if(e=ba(t.i,t.d++),e==61)r=16;else if(e==33)r=17;else throw rt(new Fr(qr((Nr(),Bde))));break;case 35:for(;t.d=t.j)throw rt(new Fr(qr((Nr(),kH))));t.a=ba(t.i,t.d++);break;default:r=0}t.c=r}function N5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(Se=u(Q(t,(Te(),os)),98),Se!=(oa(),H1)&&Se!=yb){for(V=t.b,H=V.c.length,C=new Yc((Bl(H+2,Bat),q$(Oa(Oa(5,H+2),(H+2)/10|0)))),Y=new Yc((Bl(H+2,Bat),q$(Oa(Oa(5,H+2),(H+2)/10|0)))),ue(C,new Cr),ue(C,new Cr),ue(Y,new le),ue(Y,new le),ce=new le,e=0;e=Yt||!ehn(gt,r))&&(r=OQt(e,C)),ko(gt,r),o=new ar(lr(jo(gt).a.Kc(),new z));zr(o);)s=u(Lr(o),17),!t.a[s.p]&&(Y=s.c.i,--t.e[Y.p],t.e[Y.p]==0&&M8(dE(H,Y)));for(k=C.c.length-1;k>=0;--k)ue(e.b,(An(k,C.c.length),u(C.c[k],29)));e.a.c=Pt(Xn,Ie,1,0,5,1),or(n)}function jhe(t){var e,n,r,s,o,h,d,w,k;for(t.b=1,fi(t),e=null,t.c==0&&t.a==94?(fi(t),e=(gi(),gi(),new Nl(4)),jc(e,0,WE),d=new Nl(4)):d=(gi(),gi(),new Nl(4)),s=!0;(k=t.c)!=1;){if(k==0&&t.a==93&&!s){e&&(__(e,d),d=e);break}if(n=t.a,r=!1,k==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:vy(d,kE(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(vy(d,kE(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(w=n5t(t,n),!w)throw rt(new Fr(qr((Nr(),Qct))));vy(d,w),r=!0;break;default:n=F5t(t)}else if(k==24&&!s){if(e&&(__(e,d),d=e),o=jhe(t),__(d,o),t.c!=0||t.a!=93)throw rt(new Fr(qr((Nr(),Wde))));break}if(fi(t),!r){if(k==0){if(n==91)throw rt(new Fr(qr((Nr(),S8t))));if(n==93)throw rt(new Fr(qr((Nr(),A8t))));if(n==45&&!s&&t.a!=93)throw rt(new Fr(qr((Nr(),Zct))))}if(t.c!=0||t.a!=45||n==45&&s)jc(d,n,n);else{if(fi(t),(k=t.c)==1)throw rt(new Fr(qr((Nr(),EH))));if(k==0&&t.a==93)jc(d,n,n),jc(d,45,45);else{if(k==0&&t.a==93||k==24)throw rt(new Fr(qr((Nr(),Zct))));if(h=t.a,k==0){if(h==91)throw rt(new Fr(qr((Nr(),S8t))));if(h==93)throw rt(new Fr(qr((Nr(),A8t))));if(h==45)throw rt(new Fr(qr((Nr(),Zct))))}else k==10&&(h=F5t(t));if(fi(t),n>h)throw rt(new Fr(qr((Nr(),Xde))));jc(d,n,h)}}}s=!1}if(t.c==1)throw rt(new Fr(qr((Nr(),EH))));return b4(d),T_(d),t.b=0,fi(t),d}function F5n(t){Ir(t.c,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#decimal"])),Ir(t.d,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#integer"])),Ir(t.e,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#boolean"])),Ir(t.f,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EBoolean",oi,"EBoolean:Object"])),Ir(t.i,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#byte"])),Ir(t.g,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Ir(t.j,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EByte",oi,"EByte:Object"])),Ir(t.n,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EChar",oi,"EChar:Object"])),Ir(t.t,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#double"])),Ir(t.u,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EDouble",oi,"EDouble:Object"])),Ir(t.F,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#float"])),Ir(t.G,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EFloat",oi,"EFloat:Object"])),Ir(t.I,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#int"])),Ir(t.J,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EInt",oi,"EInt:Object"])),Ir(t.N,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#long"])),Ir(t.O,Kr,ct(ot(Ae,1),te,2,6,[Sa,"ELong",oi,"ELong:Object"])),Ir(t.Z,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#short"])),Ir(t.$,Kr,ct(ot(Ae,1),te,2,6,[Sa,"EShort",oi,"EShort:Object"])),Ir(t._,Kr,ct(ot(Ae,1),te,2,6,[Sa,"http://www.w3.org/2001/XMLSchema#string"]))}function B5n(t){var e,n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr;if(t.c.length==1)return An(0,t.c.length),u(t.c[0],135);if(t.c.length<=0)return new A$;for(w=new S(t);w.aM&&(zn=0,hr+=C+Se,C=0),Wbn(Yt,h,zn,hr),e=b.Math.max(e,zn+ce.a),C=b.Math.max(C,ce.b),zn+=ce.a+Se;for(Bt=new Cr,n=new Cr,Qe=new S(t);Qe.aWst(o))&&(M=o);for(!M&&(M=(An(0,tt.c.length),u(tt.c[0],180))),Y=new S(e.b);Y.a=-1900?1:0,n>=4?Vr(t,ct(ot(Ae,1),te,2,6,[nfe,rfe])[d]):Vr(t,ct(ot(Ae,1),te,2,6,["BC","AD"])[d]);break;case 121:Ihn(t,n,r);break;case 77:Pwn(t,n,r);break;case 107:w=s.q.getHours(),w==0?Xd(t,24,n):Xd(t,w,n);break;case 83:n2n(t,n,s);break;case 69:C=r.q.getDay(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["S","M","T","W","T","F","S"])[C]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot])[C]):Vr(t,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[C]);break;case 97:s.q.getHours()>=12&&s.q.getHours()<24?Vr(t,ct(ot(Ae,1),te,2,6,["AM","PM"])[1]):Vr(t,ct(ot(Ae,1),te,2,6,["AM","PM"])[0]);break;case 104:M=s.q.getHours()%12,M==0?Xd(t,12,n):Xd(t,M,n);break;case 75:F=s.q.getHours()%12,Xd(t,F,n);break;case 72:H=s.q.getHours(),Xd(t,H,n);break;case 99:V=r.q.getDay(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["S","M","T","W","T","F","S"])[V]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[Qat,Zat,Jat,tot,eot,not,rot])[V]):n==3?Vr(t,ct(ot(Ae,1),te,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[V]):Xd(t,V,1);break;case 76:Y=r.q.getMonth(),n==5?Vr(t,ct(ot(Ae,1),te,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[Y]):n==4?Vr(t,ct(ot(Ae,1),te,2,6,[$at,zat,qat,Hat,l6,Gat,Vat,Uat,Wat,Kat,Yat,Xat])[Y]):n==3?Vr(t,ct(ot(Ae,1),te,2,6,["Jan","Feb","Mar","Apr",l6,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[Y]):Xd(t,Y+1,n);break;case 81:tt=r.q.getMonth()/3|0,n<4?Vr(t,ct(ot(Ae,1),te,2,6,["Q1","Q2","Q3","Q4"])[tt]):Vr(t,ct(ot(Ae,1),te,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[tt]);break;case 100:gt=r.q.getDate(),Xd(t,gt,n);break;case 109:k=s.q.getMinutes(),Xd(t,k,n);break;case 115:h=s.q.getSeconds(),Xd(t,h,n);break;case 122:n<4?Vr(t,o.c[0]):Vr(t,o.c[1]);break;case 118:Vr(t,o.b);break;case 90:n<3?Vr(t,Vgn(o)):n==3?Vr(t,Kgn(o)):Vr(t,Ygn(o.a));break;default:return!1}return!0}function Sxt(t,e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi;if(_ue(e),w=u(St((!e.b&&(e.b=new Cn(br,e,4,7)),e.b),0),82),C=u(St((!e.c&&(e.c=new Cn(br,e,5,8)),e.c),0),82),d=Mo(w),k=Mo(C),h=(!e.a&&(e.a=new he(Zi,e,6,6)),e.a).i==0?null:u(St((!e.a&&(e.a=new he(Zi,e,6,6)),e.a),0),202),Se=u(Jn(t.a,d),10),zn=u(Jn(t.a,k),10),We=null,hr=null,Et(w,186)&&(ce=u(Jn(t.a,w),299),Et(ce,11)?We=u(ce,11):Et(ce,10)&&(Se=u(ce,10),We=u(Fe(Se.j,0),11))),Et(C,186)&&(Rn=u(Jn(t.a,C),299),Et(Rn,11)?hr=u(Rn,11):Et(Rn,10)&&(zn=u(Rn,10),hr=u(Fe(zn.j,0),11))),!Se||!zn)throw rt(new F9("The source or the target of edge "+e+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(Y=new zv,Lo(Y,e),Jt(Y,(se(),_i),e),Jt(Y,(Te(),_o),null),H=u(Q(r,Gc),21),Se==zn&&H.Fc((oo(),wS)),We||(Yt=(so(),eu),Qe=null,h&&H3(u(Q(Se,os),98))&&(Qe=new $e(h.j,h.k),FZt(Qe,rI(e)),fJt(Qe,n),Zm(k,d)&&(Yt=Ju,Li(Qe,Se.n))),We=Tle(Se,Qe,Yt,r)),hr||(Yt=(so(),Ju),pi=null,h&&H3(u(Q(zn,os),98))&&(pi=new $e(h.b,h.c),FZt(pi,rI(e)),fJt(pi,n)),hr=Tle(zn,pi,Yt,Fa(zn))),Da(Y,We),sa(Y,hr),(We.e.c.length>1||We.g.c.length>1||hr.e.c.length>1||hr.g.c.length>1)&&H.Fc((oo(),vS)),F=new er((!e.n&&(e.n=new he(qo,e,1,7)),e.n));F.e!=F.i.gc();)if(M=u(dr(F),137),!je(Re(qe(M,B2)))&&M.a)switch(tt=Oit(M),ue(Y.b,tt),u(Q(tt,Md),272).g){case 1:case 2:H.Fc((oo(),h7));break;case 0:H.Fc((oo(),l7)),Jt(tt,Md,(A1(),_7))}if(o=u(Q(r,ES),314),gt=u(Q(r,rV),315),s=o==(Yx(),wO)||gt==(a_(),lht),h&&(!h.a&&(h.a=new Ss(Hh,h,5)),h.a).i!=0&&s){for(Lt=sD(h),V=new Du,Bt=ei(Lt,0);Bt.b!=Bt.d.c;)_t=u(ti(Bt),8),ni(V,new yo(_t));Jt(Y,JTt,V)}return Y}function z5n(t){t.gb||(t.gb=!0,t.b=ic(t,0),es(t.b,18),Pi(t.b,19),t.a=ic(t,1),es(t.a,1),Pi(t.a,2),Pi(t.a,3),Pi(t.a,4),Pi(t.a,5),t.o=ic(t,2),es(t.o,8),es(t.o,9),Pi(t.o,10),Pi(t.o,11),Pi(t.o,12),Pi(t.o,13),Pi(t.o,14),Pi(t.o,15),Pi(t.o,16),Pi(t.o,17),Pi(t.o,18),Pi(t.o,19),Pi(t.o,20),Pi(t.o,21),Pi(t.o,22),Pi(t.o,23),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),To(t.o),t.p=ic(t,3),es(t.p,2),es(t.p,3),es(t.p,4),es(t.p,5),Pi(t.p,6),Pi(t.p,7),To(t.p),To(t.p),t.q=ic(t,4),es(t.q,8),t.v=ic(t,5),Pi(t.v,9),To(t.v),To(t.v),To(t.v),t.w=ic(t,6),es(t.w,2),es(t.w,3),es(t.w,4),Pi(t.w,5),t.B=ic(t,7),Pi(t.B,1),To(t.B),To(t.B),To(t.B),t.Q=ic(t,8),Pi(t.Q,0),To(t.Q),t.R=ic(t,9),es(t.R,1),t.S=ic(t,10),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),To(t.S),t.T=ic(t,11),Pi(t.T,10),Pi(t.T,11),Pi(t.T,12),Pi(t.T,13),Pi(t.T,14),To(t.T),To(t.T),t.U=ic(t,12),es(t.U,2),es(t.U,3),Pi(t.U,4),Pi(t.U,5),Pi(t.U,6),Pi(t.U,7),To(t.U),t.V=ic(t,13),Pi(t.V,10),t.W=ic(t,14),es(t.W,18),es(t.W,19),es(t.W,20),Pi(t.W,21),Pi(t.W,22),Pi(t.W,23),t.bb=ic(t,15),es(t.bb,10),es(t.bb,11),es(t.bb,12),es(t.bb,13),es(t.bb,14),es(t.bb,15),es(t.bb,16),Pi(t.bb,17),To(t.bb),To(t.bb),t.eb=ic(t,16),es(t.eb,2),es(t.eb,3),es(t.eb,4),es(t.eb,5),es(t.eb,6),es(t.eb,7),Pi(t.eb,8),Pi(t.eb,9),t.ab=ic(t,17),es(t.ab,0),es(t.ab,1),t.H=ic(t,18),Pi(t.H,0),Pi(t.H,1),Pi(t.H,2),Pi(t.H,3),Pi(t.H,4),Pi(t.H,5),To(t.H),t.db=ic(t,19),Pi(t.db,2),t.c=ai(t,20),t.d=ai(t,21),t.e=ai(t,22),t.f=ai(t,23),t.i=ai(t,24),t.g=ai(t,25),t.j=ai(t,26),t.k=ai(t,27),t.n=ai(t,28),t.r=ai(t,29),t.s=ai(t,30),t.t=ai(t,31),t.u=ai(t,32),t.fb=ai(t,33),t.A=ai(t,34),t.C=ai(t,35),t.D=ai(t,36),t.F=ai(t,37),t.G=ai(t,38),t.I=ai(t,39),t.J=ai(t,40),t.L=ai(t,41),t.M=ai(t,42),t.N=ai(t,43),t.O=ai(t,44),t.P=ai(t,45),t.X=ai(t,46),t.Y=ai(t,47),t.Z=ai(t,48),t.$=ai(t,49),t._=ai(t,50),t.cb=ai(t,51),t.K=ai(t,52))}function ci(){ci=Z;var t,e;VS=new Gi(U1e),C7=new Gi(W1e),LSt=(Qd(),Zht),H3e=new mn(gkt,LSt),$6=new mn(b6,null),G3e=new Gi(c8t),ISt=(cy(),ji(eft,ct(ot(nft,1),ae,291,0,[tft]))),BV=new mn(cH,ISt),UO=new mn(KD,(Fn(),!1)),DSt=(ao(),c0),jw=new mn(vkt,DSt),PSt=(q0(),gft),NSt=new mn(UD,PSt),RSt=new mn(gH,!1),jSt=($0(),HV),r5=new mn(oH,jSt),YSt=new Mv(12),q2=new mn(ww,YSt),RV=new mn($D,!1),$St=new mn(pct,!1),YO=new mn(F_,!1),tAt=(oa(),yb),US=new mn(Not,tAt),z6=new Gi(uH),zV=new Gi(jD),fft=new Gi(Hq),dft=new Gi(P_),zSt=new Du,i5=new mn(_kt,zSt),U3e=new mn(Lkt,!1),W3e=new mn(Mkt,!1),qSt=new M9,KO=new mn(Dkt,qSt),$V=new mn(fkt,!1),Q3e=new mn(K1e,1),new mn(Y1e,!0),de(0),new mn(X1e,de(100)),new mn(Q1e,!1),de(0),new mn(Z1e,de(4e3)),de(0),new mn(J1e,de(400)),new mn(tde,!1),new mn(ede,!1),new mn(nde,!0),new mn(rde,!1),MSt=(Az(),wft),V3e=new mn(o8t,MSt),Z3e=new mn(tkt,10),J3e=new mn(ekt,10),iAt=new mn(Aot,20),t4e=new mn(nkt,10),sAt=new mn(Oot,2),e4e=new mn(rkt,10),aAt=new mn(ikt,0),qV=new mn(okt,5),oAt=new mn(skt,1),cAt=new mn(akt,1),H2=new mn(ky,20),n4e=new mn(ckt,10),hAt=new mn(ukt,10),q6=new Gi(lkt),lAt=new cUt,uAt=new mn(Okt,lAt),Y3e=new Gi(gct),XSt=!1,K3e=new mn(dct,XSt),GSt=new Mv(5),HSt=new mn(wkt,GSt),VSt=(fy(),e=u(Hf(lo),9),new rh(e,u(uf(e,e.length),9),0)),s5=new mn(RE,VSt),ZSt=(c4(),mb),QSt=new mn(xkt,ZSt),oft=new Gi(kkt),cft=new Gi(Ekt),uft=new Gi(Tkt),aft=new Gi(Ckt),USt=(t=u(Hf(tA),9),new rh(t,u(uf(t,t.length),9),0)),z2=new mn(L4,USt),KSt=un((cl(),M7)),vb=new mn(v6,KSt),WSt=new $e(0,0),a5=new mn(w6,WSt),jV=new mn(fct,!1),OSt=(A1(),_7),ift=new mn(Skt,OSt),rft=new mn(Gq,!1),de(1),new mn(ide,null),JSt=new Gi(Ikt),lft=new Gi(Akt),rAt=(be(),Zo),o5=new mn(dkt,rAt),hl=new Gi(hkt),eAt=(Qu(),un(xb)),Ky=new mn(jE,eAt),hft=new mn(mkt,!1),nAt=new mn(ykt,!0),WO=new mn(pkt,!1),sft=new mn(bkt,!1),FSt=new mn(Lot,1),BSt=(tq(),bft),new mn(sde,BSt),X3e=!0}function se(){se=Z;var t,e;_i=new Gi(l6t),YTt=new Gi("coordinateOrigin"),Rlt=new Gi("processors"),KTt=new Os("compoundNode",(Fn(),!1)),kO=new Os("insideConnections",!1),JTt=new Gi("originalBendpoints"),t9t=new Gi("originalDummyNodePosition"),e9t=new Gi("originalLabelEdge"),TO=new Gi("representedLabels"),mS=new Gi("endLabels"),M6=new Gi("endLabel.origin"),D6=new Os("labelSide",(jl(),ZO)),W4=new Os("maxEdgeThickness",0),$1=new Os("reversed",!1),O6=new Gi(zfe),n1=new Os("longEdgeSource",null),Rh=new Os("longEdgeTarget",null),Py=new Os("longEdgeHasLabelDummies",!1),EO=new Os("longEdgeBeforeLabelDummy",!1),HG=new Os("edgeConstraint",(u2(),xlt)),Iw=new Gi("inLayerLayoutUnit"),O2=new Os("inLayerConstraint",(B0(),yO)),I6=new Os("inLayerSuccessorConstraint",new le),ZTt=new Os("inLayerSuccessorConstraintBetweenNonDummies",!1),Zu=new Gi("portDummy"),qG=new Os("crossingHint",de(0)),Gc=new Os("graphProperties",(e=u(Hf(Alt),9),new rh(e,u(uf(e,e.length),9),0))),oc=new Os("externalPortSide",(be(),Zo)),QTt=new Os("externalPortSize",new Ta),Olt=new Gi("externalPortReplacedDummies"),GG=new Gi("externalPortReplacedDummy"),Ny=new Os("externalPortConnections",(t=u(Hf(Xa),9),new rh(t,u(uf(t,t.length),9),0))),Dw=new Os(Ofe,0),WTt=new Gi("barycenterAssociates"),N6=new Gi("TopSideComments"),L6=new Gi("BottomSideComments"),zG=new Gi("CommentConnectionPort"),Plt=new Os("inputCollect",!1),Blt=new Os("outputCollect",!1),xO=new Os("cyclic",!1),XTt=new Gi("crossHierarchyMap"),$lt=new Gi("targetOffset"),new Os("splineLabelSize",new Ta),Y4=new Gi("spacings"),VG=new Os("partitionConstraint",!1),Lw=new Gi("breakingPoint.info"),i9t=new Gi("splines.survivingEdge"),N2=new Gi("splines.route.start"),X4=new Gi("splines.edgeChain"),r9t=new Gi("originalPortConstraints"),d7=new Gi("selfLoopHolder"),g7=new Gi("splines.nsPortY"),Tc=new Gi("modelOrder"),Flt=new Gi("longEdgeTargetNode"),Mw=new Os(g1e,!1),K4=new Os(g1e,!1),Nlt=new Gi("layerConstraints.hiddenNodes"),n9t=new Gi("layerConstraints.opposidePort"),jlt=new Gi("targetNode.modelOrder")}function Axt(){Axt=Z,p9t=(TI(),NG),Q2e=new mn(w6t,p9t),uve=new mn(m6t,(Fn(),!1)),x9t=(x$(),Dlt),gve=new mn(Kq,x9t),Lve=new mn(y6t,!1),Mve=new mn(x6t,!0),_2e=new mn(k6t,!1),L9t=(yI(),dht),Vve=new mn(E6t,L9t),de(1),Jve=new mn(T6t,de(7)),twe=new mn(C6t,!1),lve=new mn(_6t,!1),g9t=(v2(),mlt),X2e=new mn($ot,g9t),T9t=(Zz(),aht),Ave=new mn(GD,T9t),k9t=(hh(),CO),yve=new mn(S6t,k9t),de(-1),mve=new mn(A6t,de(-1)),de(-1),xve=new mn(L6t,de(-1)),de(-1),kve=new mn(zot,de(4)),de(-1),Tve=new mn(qot,de(2)),E9t=(w4(),hV),Sve=new mn(Hot,E9t),de(0),_ve=new mn(Got,de(0)),vve=new mn(Vot,de(vi)),d9t=(Yx(),S6),Y2e=new mn($_,d9t),F2e=new mn(M6t,!1),H2e=new mn(Uot,.1),W2e=new mn(Wot,!1),de(-1),V2e=new mn(I6t,de(-1)),de(-1),U2e=new mn(D6t,de(-1)),de(0),B2e=new mn(O6t,de(40)),f9t=(W8(),Mlt),z2e=new mn(Kot,f9t),h9t=mO,R2e=new mn(Yq,h9t),A9t=(a_(),AS),Gve=new mn(M4,A9t),Pve=new Gi(Xq),C9t=(bI(),FG),Ive=new mn(Yot,C9t),_9t=(nD(),BG),Ove=new mn(Xot,_9t),Rve=new mn(Qot,.3),$ve=new Gi(Zot),S9t=(sy(),lV),zve=new mn(Jot,S9t),w9t=(uz(),pht),nve=new mn(N6t,w9t),m9t=(lI(),bht),rve=new mn(P6t,m9t),y9t=(tE(),IS),ive=new mn(Qq,y9t),ave=new mn(Zq,.2),tve=new mn(tct,2),Yve=new mn(F6t,null),Qve=new mn(B6t,10),Xve=new mn(R6t,10),Zve=new mn(j6t,20),de(0),Uve=new mn($6t,de(0)),de(0),Wve=new mn(z6t,de(0)),de(0),Kve=new mn(q6t,de(0)),S2e=new mn(ect,!1),o9t=(gE(),bS),L2e=new mn(H6t,o9t),a9t=(D$(),vlt),A2e=new mn(G6t,a9t),fve=new mn(Jq,!1),de(0),hve=new mn(nct,de(16)),de(0),dve=new mn(rct,de(5)),D9t=(gz(),mht),ywe=new mn(Y0,D9t),ewe=new mn(tH,10),iwe=new mn(eH,1),I9t=(X$(),OG),hwe=new mn(z_,I9t),owe=new Gi(ict),M9t=de(1),de(0),uwe=new mn(sct,M9t),O9t=(oz(),wht),Twe=new mn(nH,O9t),xwe=new Gi(rH),bwe=new mn(iH,!0),gwe=new mn(sH,2),wwe=new mn(act,!0),v9t=(nq(),PG),J2e=new mn(V6t,v9t),b9t=(i6(),o7),Z2e=new mn(U6t,b9t),l9t=(j0(),gb),P2e=new mn(aH,l9t),N2e=new mn(W6t,!1),c9t=(ew(),$4),M2e=new mn(oct,c9t),u9t=(YC(),oht),O2e=new mn(K6t,u9t),I2e=new mn(cct,0),D2e=new mn(uct,0),bve=ylt,pve=wO,Eve=cV,Cve=cV,wve=sht,G2e=($0(),Zg),K2e=S6,q2e=S6,j2e=S6,$2e=Zg,Fve=LS,Bve=AS,Dve=AS,Nve=AS,jve=hht,Hve=LS,qve=LS,sve=(q0(),H6),ove=H6,cve=IS,eve=XO,nwe=x7,rwe=Vy,swe=x7,awe=Vy,fwe=x7,dwe=Vy,cwe=wlt,lwe=OG,Cwe=x7,_we=Vy,kwe=x7,Ewe=Vy,vwe=Vy,pwe=Vy,mwe=Vy}function ro(){ro=Z,U7t=new ws("DIRECTION_PREPROCESSOR",0),H7t=new ws("COMMENT_PREPROCESSOR",1),hS=new ws("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),rlt=new ws("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),hTt=new ws("PARTITION_PREPROCESSOR",4),gG=new ws("LABEL_DUMMY_INSERTER",5),TG=new ws("SELF_LOOP_PREPROCESSOR",6),r7=new ws("LAYER_CONSTRAINT_PREPROCESSOR",7),uTt=new ws("PARTITION_MIDPROCESSOR",8),tTt=new ws("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),oTt=new ws("NODE_PROMOTION",10),n7=new ws("LAYER_CONSTRAINT_POSTPROCESSOR",11),lTt=new ws("PARTITION_POSTPROCESSOR",12),Q7t=new ws("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),fTt=new ws("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),B7t=new ws("BREAKING_POINT_INSERTER",15),wG=new ws("LONG_EDGE_SPLITTER",16),ilt=new ws("PORT_SIDE_PROCESSOR",17),fG=new ws("INVERTED_PORT_PROCESSOR",18),xG=new ws("PORT_LIST_SORTER",19),gTt=new ws("SORT_BY_INPUT_ORDER_OF_MODEL",20),yG=new ws("NORTH_SOUTH_PORT_PREPROCESSOR",21),R7t=new ws("BREAKING_POINT_PROCESSOR",22),cTt=new ws(a1e,23),pTt=new ws(o1e,24),kG=new ws("SELF_LOOP_PORT_RESTORER",25),dTt=new ws("SINGLE_EDGE_GRAPH_WRAPPER",26),dG=new ws("IN_LAYER_CONSTRAINT_PROCESSOR",27),K7t=new ws("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),sTt=new ws("LABEL_AND_NODE_SIZE_PROCESSOR",29),iTt=new ws("INNERMOST_NODE_MARGIN_CALCULATOR",30),CG=new ws("SELF_LOOP_ROUTER",31),z7t=new ws("COMMENT_NODE_MARGIN_CALCULATOR",32),hG=new ws("END_LABEL_PREPROCESSOR",33),bG=new ws("LABEL_DUMMY_SWITCHER",34),$7t=new ws("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),e7=new ws("LABEL_SIDE_SELECTOR",36),nTt=new ws("HYPEREDGE_DUMMY_MERGER",37),Z7t=new ws("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),aTt=new ws("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),fS=new ws("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),G7t=new ws("CONSTRAINTS_POSTPROCESSOR",41),q7t=new ws("COMMENT_POSTPROCESSOR",42),rTt=new ws("HYPERNODE_PROCESSOR",43),J7t=new ws("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vG=new ws("LONG_EDGE_JOINER",45),EG=new ws("SELF_LOOP_POSTPROCESSOR",46),j7t=new ws("BREAKING_POINT_REMOVER",47),mG=new ws("NORTH_SOUTH_PORT_POSTPROCESSOR",48),eTt=new ws("HORIZONTAL_COMPACTOR",49),pG=new ws("LABEL_DUMMY_REMOVER",50),Y7t=new ws("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),W7t=new ws("END_LABEL_SORTER",52),bO=new ws("REVERSED_EDGE_RESTORER",53),lG=new ws("END_LABEL_POSTPROCESSOR",54),X7t=new ws("HIERARCHICAL_NODE_RESIZER",55),V7t=new ws("DIRECTION_POSTPROCESSOR",56)}function q5n(t,e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe,Rn,zn,hr,pi,Rs,Xl,Kh,W1,hU,bN,dA,vN,P7,Nft,z5e,Pft,ip,Vw,F7,wN,mN,Y6,Fft,gA,q5e,MLt,Uw,pA,Bft,X6,bA,i3,vA,Rft,H5e;for(MLt=0,pi=e,Kh=0,bN=pi.length;Kh0&&(t.a[ip.p]=MLt++)}for(bA=0,Rs=n,W1=0,dA=Rs.length;W10;){for(ip=(Qn(mN.b>0),u(mN.a.Xb(mN.c=--mN.b),11)),wN=0,d=new S(ip.e);d.a0&&(ip.j==(be(),Nn)?(t.a[ip.p]=bA,++bA):(t.a[ip.p]=bA+vN+Nft,++Nft))}bA+=Nft}for(F7=new Cr,V=new A0,hr=e,Xl=0,hU=hr.length;Xlk.b&&(k.b=Y6)):ip.i.c==q5e&&(Y6k.c&&(k.c=Y6));for(D8(Y,0,Y.length,null),X6=Pt(Tr,Xr,25,Y.length,15,1),r=Pt(Tr,Xr,25,bA+1,15,1),gt=0;gt0;)Se%2>0&&(s+=Rft[Se+1]),Se=(Se-1)/2|0,++Rft[Se];for(Qe=Pt(pme,Ie,362,Y.length*2,0,1),Bt=0;Bt'?":hn(Bde,t)?"'(?<' or '(? toIndex: ",zxt=", toIndex: ",qxt="Index: ",Hxt=", Size: ",OE="org.eclipse.elk.alg.common",Oi={62:1},pfe="org.eclipse.elk.alg.common.compaction",bfe="Scanline/EventHandler",r0="org.eclipse.elk.alg.common.compaction.oned",vfe="CNode belongs to another CGroup.",wfe="ISpacingsHandler/1",bot="The ",vot=" instance has been finished already.",mfe="The direction ",yfe=" is not supported by the CGraph instance.",xfe="OneDimensionalCompactor",kfe="OneDimensionalCompactor/lambda$0$Type",Efe="Quadruplet",Tfe="ScanlineConstraintCalculator",Cfe="ScanlineConstraintCalculator/ConstraintsScanlineHandler",_fe="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",Sfe="ScanlineConstraintCalculator/Timestamp",Afe="ScanlineConstraintCalculator/lambda$0$Type",wd={169:1,45:1},wot="org.eclipse.elk.alg.common.compaction.options",Qo="org.eclipse.elk.core.data",Gxt="org.eclipse.elk.polyomino.traversalStrategy",Vxt="org.eclipse.elk.polyomino.lowLevelSort",Uxt="org.eclipse.elk.polyomino.highLevelSort",Wxt="org.eclipse.elk.polyomino.fill",Ih={130:1},mot="polyomino",D_="org.eclipse.elk.alg.common.networksimplex",i0={177:1,3:1,4:1},Lfe="org.eclipse.elk.alg.common.nodespacing",k2="org.eclipse.elk.alg.common.nodespacing.cellsystem",NE="CENTER",Mfe={212:1,326:1},Kxt={3:1,4:1,5:1,595:1},d6="LEFT",g6="RIGHT",Yxt="Vertical alignment cannot be null",Xxt="BOTTOM",Bq="org.eclipse.elk.alg.common.nodespacing.internal",O_="UNDEFINED",P1=.01,FD="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",Ife="LabelPlacer/lambda$0$Type",Dfe="LabelPlacer/lambda$1$Type",Ofe="portRatioOrPosition",PE="org.eclipse.elk.alg.common.overlaps",yot="DOWN",md="org.eclipse.elk.alg.common.polyomino",Rq="NORTH",xot="EAST",kot="SOUTH",Eot="WEST",jq="org.eclipse.elk.alg.common.polyomino.structures",Qxt="Direction",Tot="Grid is only of size ",Cot=". Requested point (",_ot=") is out of bounds.",$q=" Given center based coordinates were (",BD="org.eclipse.elk.graph.properties",Nfe="IPropertyHolder",Zxt={3:1,94:1,134:1},p6="org.eclipse.elk.alg.common.spore",Pfe="org.eclipse.elk.alg.common.utils",E2={209:1},S4="org.eclipse.elk.core",Ffe="Connected Components Compaction",Bfe="org.eclipse.elk.alg.disco",zq="org.eclipse.elk.alg.disco.graph",Sot="org.eclipse.elk.alg.disco.options",Jxt="CompactionStrategy",t6t="org.eclipse.elk.disco.componentCompaction.strategy",e6t="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",n6t="org.eclipse.elk.disco.debug.discoGraph",r6t="org.eclipse.elk.disco.debug.discoPolys",Rfe="componentCompaction",T2="org.eclipse.elk.disco",Aot="org.eclipse.elk.spacing.componentComponent",Lot="org.eclipse.elk.edge.thickness",b6="org.eclipse.elk.aspectRatio",ww="org.eclipse.elk.padding",A4="org.eclipse.elk.alg.disco.transform",Mot=1.5707963267948966,FE=17976931348623157e292,xy={3:1,4:1,5:1,192:1},i6t={3:1,6:1,4:1,5:1,106:1,120:1},s6t="org.eclipse.elk.alg.force",a6t="ComponentsProcessor",jfe="ComponentsProcessor/1",RD="org.eclipse.elk.alg.force.graph",$fe="Component Layout",o6t="org.eclipse.elk.alg.force.model",qq="org.eclipse.elk.force.model",c6t="org.eclipse.elk.force.iterations",u6t="org.eclipse.elk.force.repulsivePower",Iot="org.eclipse.elk.force.temperature",yd=.001,Dot="org.eclipse.elk.force.repulsion",N_="org.eclipse.elk.alg.force.options",BE=1.600000023841858,ql="org.eclipse.elk.force",jD="org.eclipse.elk.priority",ky="org.eclipse.elk.spacing.nodeNode",Oot="org.eclipse.elk.spacing.edgeLabel",Hq="org.eclipse.elk.randomSeed",P_="org.eclipse.elk.separateConnectedComponents",$D="org.eclipse.elk.interactive",Not="org.eclipse.elk.portConstraints",Gq="org.eclipse.elk.edgeLabels.inline",F_="org.eclipse.elk.omitNodeMicroLayout",v6="org.eclipse.elk.nodeSize.options",L4="org.eclipse.elk.nodeSize.constraints",RE="org.eclipse.elk.nodeLabels.placement",jE="org.eclipse.elk.portLabels.placement",l6t="origin",zfe="random",qfe="boundingBox.upLeft",Hfe="boundingBox.lowRight",h6t="org.eclipse.elk.stress.fixed",f6t="org.eclipse.elk.stress.desiredEdgeLength",d6t="org.eclipse.elk.stress.dimension",g6t="org.eclipse.elk.stress.epsilon",p6t="org.eclipse.elk.stress.iterationLimit",rb="org.eclipse.elk.stress",Gfe="ELK Stress",w6="org.eclipse.elk.nodeSize.minimum",Vq="org.eclipse.elk.alg.force.stress",Vfe="Layered layout",m6="org.eclipse.elk.alg.layered",zD="org.eclipse.elk.alg.layered.compaction.components",B_="org.eclipse.elk.alg.layered.compaction.oned",Uq="org.eclipse.elk.alg.layered.compaction.oned.algs",C2="org.eclipse.elk.alg.layered.compaction.recthull",xd="org.eclipse.elk.alg.layered.components",K0="NONE",xc={3:1,6:1,4:1,9:1,5:1,122:1},Ufe={3:1,6:1,4:1,5:1,141:1,106:1,120:1},Wq="org.eclipse.elk.alg.layered.compound",as={51:1},Jc="org.eclipse.elk.alg.layered.graph",Pot=" -> ",Wfe="Not supported by LGraph",b6t="Port side is undefined",Fot={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},zg={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},Kfe={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},Yfe=`([{"' \r +`,Xfe=`)]}"' \r +`,Qfe="The given string contains parts that cannot be parsed as numbers.",qD="org.eclipse.elk.core.math",Zfe={3:1,4:1,142:1,207:1,414:1},Jfe={3:1,4:1,116:1,207:1,414:1},Vn="org.eclipse.elk.layered",qg="org.eclipse.elk.alg.layered.graph.transform",t1e="ElkGraphImporter",e1e="ElkGraphImporter/lambda$0$Type",n1e="ElkGraphImporter/lambda$1$Type",r1e="ElkGraphImporter/lambda$2$Type",i1e="ElkGraphImporter/lambda$4$Type",s1e="Node margin calculation",$n="org.eclipse.elk.alg.layered.intermediate",a1e="ONE_SIDED_GREEDY_SWITCH",o1e="TWO_SIDED_GREEDY_SWITCH",Bot="No implementation is available for the layout processor ",v6t="IntermediateProcessorStrategy",Rot="Node '",c1e="FIRST_SEPARATE",u1e="LAST_SEPARATE",l1e="Odd port side processing",Cs="org.eclipse.elk.alg.layered.intermediate.compaction",R_="org.eclipse.elk.alg.layered.intermediate.greedyswitch",s0="org.eclipse.elk.alg.layered.p3order.counting",HD={225:1},y6="org.eclipse.elk.alg.layered.intermediate.loops",Hl="org.eclipse.elk.alg.layered.intermediate.loops.ordering",ib="org.eclipse.elk.alg.layered.intermediate.loops.routing",j_="org.eclipse.elk.alg.layered.intermediate.preserveorder",kd="org.eclipse.elk.alg.layered.intermediate.wrapping",kc="org.eclipse.elk.alg.layered.options",jot="INTERACTIVE",h1e="DEPTH_FIRST",f1e="EDGE_LENGTH",d1e="SELF_LOOPS",g1e="firstTryWithInitialOrder",w6t="org.eclipse.elk.layered.directionCongruency",m6t="org.eclipse.elk.layered.feedbackEdges",Kq="org.eclipse.elk.layered.interactiveReferencePoint",y6t="org.eclipse.elk.layered.mergeEdges",x6t="org.eclipse.elk.layered.mergeHierarchyEdges",k6t="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",E6t="org.eclipse.elk.layered.portSortingStrategy",T6t="org.eclipse.elk.layered.thoroughness",C6t="org.eclipse.elk.layered.unnecessaryBendpoints",_6t="org.eclipse.elk.layered.generatePositionAndLayerIds",$ot="org.eclipse.elk.layered.cycleBreaking.strategy",GD="org.eclipse.elk.layered.layering.strategy",S6t="org.eclipse.elk.layered.layering.layerConstraint",A6t="org.eclipse.elk.layered.layering.layerChoiceConstraint",L6t="org.eclipse.elk.layered.layering.layerId",zot="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",qot="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Hot="org.eclipse.elk.layered.layering.nodePromotion.strategy",Got="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Vot="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",$_="org.eclipse.elk.layered.crossingMinimization.strategy",M6t="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Uot="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Wot="org.eclipse.elk.layered.crossingMinimization.semiInteractive",I6t="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",D6t="org.eclipse.elk.layered.crossingMinimization.positionId",O6t="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Kot="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",Yq="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",M4="org.eclipse.elk.layered.nodePlacement.strategy",Xq="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Yot="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Xot="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Qot="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",Zot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",Jot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",N6t="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",P6t="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",Qq="org.eclipse.elk.layered.edgeRouting.splines.mode",Zq="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",tct="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",F6t="org.eclipse.elk.layered.spacing.baseValue",B6t="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",R6t="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",j6t="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$6t="org.eclipse.elk.layered.priority.direction",z6t="org.eclipse.elk.layered.priority.shortness",q6t="org.eclipse.elk.layered.priority.straightness",ect="org.eclipse.elk.layered.compaction.connectedComponents",H6t="org.eclipse.elk.layered.compaction.postCompaction.strategy",G6t="org.eclipse.elk.layered.compaction.postCompaction.constraints",Jq="org.eclipse.elk.layered.highDegreeNodes.treatment",nct="org.eclipse.elk.layered.highDegreeNodes.threshold",rct="org.eclipse.elk.layered.highDegreeNodes.treeHeight",Y0="org.eclipse.elk.layered.wrapping.strategy",tH="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",eH="org.eclipse.elk.layered.wrapping.correctionFactor",z_="org.eclipse.elk.layered.wrapping.cutting.strategy",ict="org.eclipse.elk.layered.wrapping.cutting.cuts",sct="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",nH="org.eclipse.elk.layered.wrapping.validify.strategy",rH="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",iH="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",sH="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",act="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",V6t="org.eclipse.elk.layered.edgeLabels.sideSelection",U6t="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",aH="org.eclipse.elk.layered.considerModelOrder.strategy",W6t="org.eclipse.elk.layered.considerModelOrder.noModelOrder",oct="org.eclipse.elk.layered.considerModelOrder.components",K6t="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",cct="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",uct="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",lct="layering",p1e="layering.minWidth",b1e="layering.nodePromotion",VD="crossingMinimization",oH="org.eclipse.elk.hierarchyHandling",v1e="crossingMinimization.greedySwitch",w1e="nodePlacement",m1e="nodePlacement.bk",y1e="edgeRouting",UD="org.eclipse.elk.edgeRouting",F1="spacing",Y6t="priority",X6t="compaction",x1e="compaction.postCompaction",k1e="Specifies whether and how post-process compaction is applied.",Q6t="highDegreeNodes",Z6t="wrapping",E1e="wrapping.cutting",T1e="wrapping.validify",J6t="wrapping.multiEdge",hct="edgeLabels",WD="considerModelOrder",tkt="org.eclipse.elk.spacing.commentComment",ekt="org.eclipse.elk.spacing.commentNode",nkt="org.eclipse.elk.spacing.edgeEdge",rkt="org.eclipse.elk.spacing.edgeNode",ikt="org.eclipse.elk.spacing.labelLabel",skt="org.eclipse.elk.spacing.labelPortHorizontal",akt="org.eclipse.elk.spacing.labelPortVertical",okt="org.eclipse.elk.spacing.labelNode",ckt="org.eclipse.elk.spacing.nodeSelfLoop",ukt="org.eclipse.elk.spacing.portPort",lkt="org.eclipse.elk.spacing.individual",hkt="org.eclipse.elk.port.borderOffset",fkt="org.eclipse.elk.noLayout",dkt="org.eclipse.elk.port.side",KD="org.eclipse.elk.debugMode",gkt="org.eclipse.elk.alignment",pkt="org.eclipse.elk.insideSelfLoops.activate",bkt="org.eclipse.elk.insideSelfLoops.yo",fct="org.eclipse.elk.nodeSize.fixedGraphSize",vkt="org.eclipse.elk.direction",wkt="org.eclipse.elk.nodeLabels.padding",mkt="org.eclipse.elk.portLabels.nextToPortIfPossible",ykt="org.eclipse.elk.portLabels.treatAsGroup",xkt="org.eclipse.elk.portAlignment.default",kkt="org.eclipse.elk.portAlignment.north",Ekt="org.eclipse.elk.portAlignment.south",Tkt="org.eclipse.elk.portAlignment.west",Ckt="org.eclipse.elk.portAlignment.east",cH="org.eclipse.elk.contentAlignment",_kt="org.eclipse.elk.junctionPoints",Skt="org.eclipse.elk.edgeLabels.placement",Akt="org.eclipse.elk.port.index",Lkt="org.eclipse.elk.commentBox",Mkt="org.eclipse.elk.hypernode",Ikt="org.eclipse.elk.port.anchor",dct="org.eclipse.elk.partitioning.activate",gct="org.eclipse.elk.partitioning.partition",uH="org.eclipse.elk.position",Dkt="org.eclipse.elk.margins",Okt="org.eclipse.elk.spacing.portsSurrounding",pct="org.eclipse.elk.interactiveLayout",Ec="org.eclipse.elk.core.util",Nkt={3:1,4:1,5:1,593:1},C1e="NETWORK_SIMPLEX",zc={123:1,51:1},lH="org.eclipse.elk.alg.layered.p1cycles",Ey="org.eclipse.elk.alg.layered.p2layers",Pkt={402:1,225:1},_1e={832:1,3:1,4:1},$u="org.eclipse.elk.alg.layered.p3order",uo="org.eclipse.elk.alg.layered.p4nodes",S1e={3:1,4:1,5:1,840:1},Ed=1e-5,sb="org.eclipse.elk.alg.layered.p4nodes.bk",bct="org.eclipse.elk.alg.layered.p5edges",Jf="org.eclipse.elk.alg.layered.p5edges.orthogonal",vct="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",wct=1e-6,Ty="org.eclipse.elk.alg.layered.p5edges.splines",mct=.09999999999999998,hH=1e-8,A1e=4.71238898038469,L1e=3.141592653589793,q_="org.eclipse.elk.alg.mrtree",H_="org.eclipse.elk.alg.mrtree.graph",x6="org.eclipse.elk.alg.mrtree.intermediate",M1e="Set neighbors in level",I1e="DESCENDANTS",Fkt="org.eclipse.elk.mrtree.weighting",Bkt="org.eclipse.elk.mrtree.searchOrder",fH="org.eclipse.elk.alg.mrtree.options",Hg="org.eclipse.elk.mrtree",D1e="org.eclipse.elk.tree",Rkt="org.eclipse.elk.alg.radial",I4=6.283185307179586,jkt=5e-324,O1e="org.eclipse.elk.alg.radial.intermediate",yct="org.eclipse.elk.alg.radial.intermediate.compaction",N1e={3:1,4:1,5:1,106:1},$kt="org.eclipse.elk.alg.radial.intermediate.optimization",xct="No implementation is available for the layout option ",G_="org.eclipse.elk.alg.radial.options",zkt="org.eclipse.elk.radial.orderId",qkt="org.eclipse.elk.radial.radius",kct="org.eclipse.elk.radial.compactor",Ect="org.eclipse.elk.radial.compactionStepSize",Hkt="org.eclipse.elk.radial.sorter",Gkt="org.eclipse.elk.radial.wedgeCriteria",Vkt="org.eclipse.elk.radial.optimizationCriteria",Td="org.eclipse.elk.radial",P1e="org.eclipse.elk.alg.radial.p1position.wedge",Ukt="org.eclipse.elk.alg.radial.sorting",F1e=5.497787143782138,B1e=3.9269908169872414,R1e=2.356194490192345,j1e="org.eclipse.elk.alg.rectpacking",dH="org.eclipse.elk.alg.rectpacking.firstiteration",Tct="org.eclipse.elk.alg.rectpacking.options",Wkt="org.eclipse.elk.rectpacking.optimizationGoal",Kkt="org.eclipse.elk.rectpacking.lastPlaceShift",Ykt="org.eclipse.elk.rectpacking.currentPosition",Xkt="org.eclipse.elk.rectpacking.desiredPosition",Qkt="org.eclipse.elk.rectpacking.onlyFirstIteration",Zkt="org.eclipse.elk.rectpacking.rowCompaction",Cct="org.eclipse.elk.rectpacking.expandToAspectRatio",Jkt="org.eclipse.elk.rectpacking.targetWidth",gH="org.eclipse.elk.expandNodes",Dh="org.eclipse.elk.rectpacking",YD="org.eclipse.elk.alg.rectpacking.util",pH="No implementation available for ",Cy="org.eclipse.elk.alg.spore",_y="org.eclipse.elk.alg.spore.options",mw="org.eclipse.elk.sporeCompaction",_ct="org.eclipse.elk.underlyingLayoutAlgorithm",t8t="org.eclipse.elk.processingOrder.treeConstruction",e8t="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Sct="org.eclipse.elk.processingOrder.preferredRoot",Act="org.eclipse.elk.processingOrder.rootSelection",Lct="org.eclipse.elk.structure.structureExtractionStrategy",n8t="org.eclipse.elk.compaction.compactionStrategy",r8t="org.eclipse.elk.compaction.orthogonal",i8t="org.eclipse.elk.overlapRemoval.maxIterations",s8t="org.eclipse.elk.overlapRemoval.runScanline",Mct="processingOrder",$1e="overlapRemoval",$E="org.eclipse.elk.sporeOverlap",z1e="org.eclipse.elk.alg.spore.p1structure",Ict="org.eclipse.elk.alg.spore.p2processingorder",Dct="org.eclipse.elk.alg.spore.p3execution",q1e="Invalid index: ",zE="org.eclipse.elk.core.alg",D4={331:1},Sy={288:1},H1e="Make sure its type is registered with the ",a8t=" utility class.",qE="true",Oct="false",G1e="Couldn't clone property '",yw=.05,Oh="org.eclipse.elk.core.options",V1e=1.2999999523162842,xw="org.eclipse.elk.box",o8t="org.eclipse.elk.box.packingMode",U1e="org.eclipse.elk.algorithm",W1e="org.eclipse.elk.resolvedAlgorithm",c8t="org.eclipse.elk.bendPoints",W5n="org.eclipse.elk.labelManager",K1e="org.eclipse.elk.scaleFactor",Y1e="org.eclipse.elk.animate",X1e="org.eclipse.elk.animTimeFactor",Q1e="org.eclipse.elk.layoutAncestors",Z1e="org.eclipse.elk.maxAnimTime",J1e="org.eclipse.elk.minAnimTime",tde="org.eclipse.elk.progressBar",ede="org.eclipse.elk.validateGraph",nde="org.eclipse.elk.validateOptions",rde="org.eclipse.elk.zoomToFit",K5n="org.eclipse.elk.font.name",ide="org.eclipse.elk.font.size",sde="org.eclipse.elk.edge.type",ade="partitioning",ode="nodeLabels",bH="portAlignment",Nct="nodeSize",Pct="port",u8t="portLabels",cde="insideSelfLoops",V_="org.eclipse.elk.fixed",vH="org.eclipse.elk.random",ude="port must have a parent node to calculate the port side",lde="The edge needs to have exactly one edge section. Found: ",U_="org.eclipse.elk.core.util.adapters",dh="org.eclipse.emf.ecore",O4="org.eclipse.elk.graph",hde="EMapPropertyHolder",fde="ElkBendPoint",dde="ElkGraphElement",gde="ElkConnectableShape",l8t="ElkEdge",pde="ElkEdgeSection",bde="EModelElement",vde="ENamedElement",h8t="ElkLabel",f8t="ElkNode",d8t="ElkPort",wde={92:1,90:1},k6="org.eclipse.emf.common.notify.impl",ab="The feature '",W_="' is not a valid changeable feature",mde="Expecting null",Fct="' is not a valid feature",yde="The feature ID",xde=" is not a valid feature ID",dc=32768,kde={105:1,92:1,90:1,56:1,49:1,97:1},Mn="org.eclipse.emf.ecore.impl",_2="org.eclipse.elk.graph.impl",K_="Recursive containment not allowed for ",HE="The datatype '",kw="' is not a valid classifier",Bct="The value '",N4={190:1,3:1,4:1},Rct="The class '",GE="http://www.eclipse.org/elk/ElkGraph",wf=1024,g8t="property",Y_="value",jct="source",Ede="properties",Tde="identifier",$ct="height",zct="width",qct="parent",Hct="text",Gct="children",Cde="hierarchical",p8t="sources",Vct="targets",b8t="sections",wH="bendPoints",v8t="outgoingShape",w8t="incomingShape",m8t="outgoingSections",y8t="incomingSections",Ra="org.eclipse.emf.common.util",x8t="Severe implementation error in the Json to ElkGraph importer.",Cd="id",wa="org.eclipse.elk.graph.json",k8t="Unhandled parameter types: ",_de="startPoint",Sde="An edge must have at least one source and one target (edge id: '",VE="').",Ade="Referenced edge section does not exist: ",Lde=" (edge id: '",E8t="target",Mde="sourcePoint",Ide="targetPoint",mH="group",oi="name",Dde="connectableShape cannot be null",Ode="edge cannot be null",Uct="Passed edge is not 'simple'.",yH="org.eclipse.elk.graph.util",XD="The 'no duplicates' constraint is violated",Wct="targetIndex=",S2=", size=",Kct="sourceIndex=",_d={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},Yct={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},xH="logging",Nde="measureExecutionTime",Pde="parser.parse.1",Fde="parser.parse.2",kH="parser.next.1",Xct="parser.next.2",Bde="parser.next.3",Rde="parser.next.4",A2="parser.factor.1",T8t="parser.factor.2",jde="parser.factor.3",$de="parser.factor.4",zde="parser.factor.5",qde="parser.factor.6",Hde="parser.atom.1",Gde="parser.atom.2",Vde="parser.atom.3",C8t="parser.atom.4",Qct="parser.atom.5",_8t="parser.cc.1",EH="parser.cc.2",Ude="parser.cc.3",Wde="parser.cc.5",S8t="parser.cc.6",A8t="parser.cc.7",Zct="parser.cc.8",Kde="parser.ope.1",Yde="parser.ope.2",Xde="parser.ope.3",Gg="parser.descape.1",Qde="parser.descape.2",Zde="parser.descape.3",Jde="parser.descape.4",t0e="parser.descape.5",gh="parser.process.1",e0e="parser.quantifier.1",n0e="parser.quantifier.2",r0e="parser.quantifier.3",i0e="parser.quantifier.4",L8t="parser.quantifier.5",s0e="org.eclipse.emf.common.notify",M8t={415:1,672:1},a0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},QD={366:1,143:1},X_="index=",Jct={3:1,4:1,5:1,126:1},o0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},I8t={3:1,6:1,4:1,5:1,192:1},c0e={3:1,4:1,5:1,165:1,367:1},u0e=";/?:@&=+$,",l0e="invalid authority: ",h0e="EAnnotation",f0e="ETypedElement",d0e="EStructuralFeature",g0e="EAttribute",p0e="EClassifier",b0e="EEnumLiteral",v0e="EGenericType",w0e="EOperation",m0e="EParameter",y0e="EReference",x0e="ETypeParameter",$i="org.eclipse.emf.ecore.util",tut={76:1},D8t={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},k0e="org.eclipse.emf.ecore.util.FeatureMap$Entry",zu=8192,Ay=2048,Q_="byte",TH="char",Z_="double",J_="float",tS="int",eS="long",nS="short",E0e="java.lang.Object",P4={3:1,4:1,5:1,247:1},O8t={3:1,4:1,5:1,673:1},T0e={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},zo={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},ZD="mixed",Kr="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Nh="kind",C0e={3:1,4:1,5:1,674:1},N8t={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},CH={20:1,28:1,52:1,14:1,15:1,58:1,69:1},_H={47:1,125:1,279:1},SH={72:1,332:1},AH="The value of type '",LH="' must be of type '",F4=1316,Ph="http://www.eclipse.org/emf/2002/Ecore",MH=-32768,Ew="constraints",Sa="baseType",_0e="getEStructuralFeature",S0e="getFeatureID",rS="feature",A0e="getOperationID",P8t="operation",L0e="defaultValue",M0e="eTypeParameters",I0e="isInstance",D0e="getEEnumLiteral",O0e="eContainingClass",ii={55:1},N0e={3:1,4:1,5:1,119:1},P0e="org.eclipse.emf.ecore.resource",F0e={92:1,90:1,591:1,1935:1},eut="org.eclipse.emf.ecore.resource.impl",F8t="unspecified",JD="simple",IH="attribute",B0e="attributeWildcard",DH="element",nut="elementWildcard",t1="collapse",rut="itemType",OH="namespace",tO="##targetNamespace",Fh="whiteSpace",B8t="wildcards",L2="http://www.eclipse.org/emf/2003/XMLType",iut="##any",UE="uninitialized",eO="The multiplicity constraint is violated",NH="org.eclipse.emf.ecore.xml.type",R0e="ProcessingInstruction",j0e="SimpleAnyType",$0e="XMLTypeDocumentRoot",ys="org.eclipse.emf.ecore.xml.type.impl",nO="INF",z0e="processing",q0e="ENTITIES_._base",R8t="minLength",j8t="ENTITY",PH="NCName",H0e="IDREFS_._base",$8t="integer",sut="token",aut="pattern",G0e="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",z8t="\\i\\c*",V0e="[\\i-[:]][\\c-[:]]*",U0e="nonPositiveInteger",rO="maxInclusive",q8t="NMTOKEN",W0e="NMTOKENS_._base",H8t="nonNegativeInteger",iO="minInclusive",K0e="normalizedString",Y0e="unsignedByte",X0e="unsignedInt",Q0e="18446744073709551615",Z0e="unsignedShort",J0e="processingInstruction",Vg="org.eclipse.emf.ecore.xml.type.internal",WE=1114111,tge="Internal Error: shorthands: \\u",iS="xml:isDigit",out="xml:isWord",cut="xml:isSpace",uut="xml:isNameChar",lut="xml:isInitialNameChar",ege="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",nge="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",rge="Private Use",hut="ASSIGNED",fut="\0€ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿ 〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ffﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",G8t="UNASSIGNED",KE={3:1,117:1},ige="org.eclipse.emf.ecore.xml.type.util",FH={3:1,4:1,5:1,368:1},V8t="org.eclipse.xtext.xbase.lib",sge="Cannot add elements to a Range",age="Cannot set elements in a Range",oge="Cannot remove elements from a Range",BH="locale",RH="default",jH="user.agent",l,$H,dut;b.goog=b.goog||{},b.goog.global=b.goog.global||b,y0n(),I(1,null,{},_),l.Fb=function(e){return nUt(this,e)},l.Gb=function(){return this.gm},l.Hb=function(){return Iv(this)},l.Ib=function(){var e;return Ap(sl(this))+"@"+(e=Hi(this)>>>0,e.toString(16))},l.equals=function(t){return this.Fb(t)},l.hashCode=function(){return this.Hb()},l.toString=function(){return this.Ib()};var cge,uge,lge;I(290,1,{290:1,2026:1},kyt),l.le=function(e){var n;return n=new kyt,n.i=4,e>1?n.c=mQt(this,e-1):n.c=this,n},l.me=function(){return L0(this),this.b},l.ne=function(){return Ap(this)},l.oe=function(){return L0(this),this.k},l.pe=function(){return(this.i&4)!=0},l.qe=function(){return(this.i&1)!=0},l.Ib=function(){return Bmt(this)},l.i=0;var Xn=P(Xo,"Object",1),U8t=P(Xo,"Class",290);I(1998,1,_D),P(SD,"Optional",1998),I(1170,1998,_D,L),l.Fb=function(e){return e===this},l.Hb=function(){return 2040732332},l.Ib=function(){return"Optional.absent()"},l.Jb=function(e){return Ar(e),I9(),gut};var gut;P(SD,"Absent",1170),I(628,1,{},aet),P(SD,"Joiner",628);var Y5n=Yi(SD,"Predicate");I(582,1,{169:1,582:1,3:1,45:1},b9),l.Mb=function(e){return sre(this,e)},l.Lb=function(e){return sre(this,e)},l.Fb=function(e){var n;return Et(e,582)?(n=u(e,582),p5t(this.a,n.a)):!1},l.Hb=function(){return Syt(this.a)+306654252},l.Ib=function(){return agn(this.a)},P(SD,"Predicates/AndPredicate",582),I(408,1998,{408:1,3:1},jk),l.Fb=function(e){var n;return Et(e,408)?(n=u(e,408),yi(this.a,n.a)):!1},l.Hb=function(){return 1502476572+Hi(this.a)},l.Ib=function(){return Vhe+this.a+")"},l.Jb=function(e){return new jk(r$(e.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},P(SD,"Present",408),I(198,1,SE),l.Nb=function(e){pa(this,e)},l.Qb=function(){Uqt()},P(Ye,"UnmodifiableIterator",198),I(1978,198,AE),l.Qb=function(){Uqt()},l.Rb=function(e){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ye,"UnmodifiableListIterator",1978),I(386,1978,AE),l.Ob=function(){return this.c0},l.Pb=function(){if(this.c>=this.d)throw rt(new lc);return this.Xb(this.c++)},l.Tb=function(){return this.c},l.Ub=function(){if(this.c<=0)throw rt(new lc);return this.Xb(--this.c)},l.Vb=function(){return this.c-1},l.c=0,l.d=0,P(Ye,"AbstractIndexedListIterator",386),I(699,198,SE),l.Ob=function(){return sit(this)},l.Pb=function(){return Imt(this)},l.e=1,P(Ye,"AbstractIterator",699),I(1986,1,{224:1}),l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.Fb=function(e){return Eit(this,e)},l.Hb=function(){return Hi(this.Zb())},l.dc=function(){return this.gc()==0},l.ec=function(){return Px(this)},l.Ib=function(){return $o(this.Zb())},P(Ye,"AbstractMultimap",1986),I(726,1986,y2),l.$b=function(){Q$(this)},l._b=function(e){return hHt(this,e)},l.ac=function(){return new n8(this,this.c)},l.ic=function(e){return this.hc()},l.bc=function(){return new W3(this,this.c)},l.jc=function(){return this.mc(this.hc())},l.kc=function(){return new Lqt(this)},l.lc=function(){return Mst(this.c.vc().Nc(),new B,64,this.d)},l.cc=function(e){return Ai(this,e)},l.fc=function(e){return $I(this,e)},l.gc=function(){return this.d},l.mc=function(e){return vn(),new T(e)},l.nc=function(){return new Aqt(this)},l.oc=function(){return Mst(this.c.Cc().Nc(),new N,64,this.d)},l.pc=function(e,n){return new I$(this,e,n,null)},l.d=0,P(Ye,"AbstractMapBasedMultimap",726),I(1631,726,y2),l.hc=function(){return new Yc(this.a)},l.jc=function(){return vn(),vn(),io},l.cc=function(e){return u(Ai(this,e),15)},l.fc=function(e){return u($I(this,e),15)},l.Zb=function(){return $x(this)},l.Fb=function(e){return Eit(this,e)},l.qc=function(e){return u(Ai(this,e),15)},l.rc=function(e){return u($I(this,e),15)},l.mc=function(e){return JM(u(e,15))},l.pc=function(e,n){return TZt(this,e,u(n,15),null)},P(Ye,"AbstractListMultimap",1631),I(732,1,ra),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.c.Ob()||this.e.Ob()},l.Pb=function(){var e;return this.e.Ob()||(e=u(this.c.Pb(),42),this.b=e.cd(),this.a=u(e.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},l.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},P(Ye,"AbstractMapBasedMultimap/Itr",732),I(1099,732,ra,Aqt),l.sc=function(e,n){return n},P(Ye,"AbstractMapBasedMultimap/1",1099),I(1100,1,{},N),l.Kb=function(e){return u(e,14).Nc()},P(Ye,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),I(1101,732,ra,Lqt),l.sc=function(e,n){return new _v(e,n)},P(Ye,"AbstractMapBasedMultimap/2",1101);var W8t=Yi(pr,"Map");I(1967,1,bw),l.wc=function(e){UC(this,e)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.$b=function(){this.vc().$b()},l.tc=function(e){return dst(this,e)},l._b=function(e){return!!w4t(this,e,!1)},l.uc=function(e){var n,r,s;for(r=this.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),s=n.dd(),Gt(e)===Gt(s)||e!=null&&yi(e,s))return!0;return!1},l.Fb=function(e){var n,r,s;if(e===this)return!0;if(!Et(e,83)||(s=u(e,83),this.gc()!=s.gc()))return!1;for(r=s.vc().Kc();r.Ob();)if(n=u(r.Pb(),42),!this.tc(n))return!1;return!0},l.xc=function(e){return ec(w4t(this,e,!1))},l.Hb=function(){return vyt(this.vc())},l.dc=function(){return this.gc()==0},l.ec=function(){return new Tm(this)},l.zc=function(e,n){throw rt(new yg("Put not supported on this map"))},l.Ac=function(e){VC(this,e)},l.Bc=function(e){return ec(w4t(this,e,!0))},l.gc=function(){return this.vc().gc()},l.Ib=function(){return oae(this)},l.Cc=function(){return new b1(this)},P(pr,"AbstractMap",1967),I(1987,1967,bw),l.bc=function(){return new TR(this)},l.vc=function(){return EYt(this)},l.ec=function(){var e;return e=this.g,e||(this.g=this.bc())},l.Cc=function(){var e;return e=this.i,e||(this.i=new rGt(this))},P(Ye,"Maps/ViewCachingAbstractMap",1987),I(389,1987,bw,n8),l.xc=function(e){return qan(this,e)},l.Bc=function(e){return iun(this,e)},l.$b=function(){this.d==this.e.c?this.e.$b():Oj(new jvt(this))},l._b=function(e){return Rre(this.d,e)},l.Ec=function(){return new $k(this)},l.Dc=function(){return this.Ec()},l.Fb=function(e){return this===e||yi(this.d,e)},l.Hb=function(){return Hi(this.d)},l.ec=function(){return this.e.ec()},l.gc=function(){return this.d.gc()},l.Ib=function(){return $o(this.d)},P(Ye,"AbstractMapBasedMultimap/AsMap",389);var B1=Yi(Xo,"Iterable");I(28,1,wy),l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){throw rt(new yg("Add not supported on this collection"))},l.Gc=function(e){return Ua(this,e)},l.$b=function(){Twt(this)},l.Hc=function(e){return ry(this,e,!1)},l.Ic=function(e){return II(this,e)},l.dc=function(){return this.gc()==0},l.Mc=function(e){return ry(this,e,!0)},l.Pc=function(){return Zvt(this)},l.Qc=function(e){return XI(this,e)},l.Ib=function(){return Qp(this)},P(pr,"AbstractCollection",28);var Bh=Yi(pr,"Set");I(N1,28,ju),l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return Iie(this,e)},l.Hb=function(){return vyt(this)},P(pr,"AbstractSet",N1),I(1970,N1,ju),P(Ye,"Sets/ImprovedAbstractSet",1970),I(1971,1970,ju),l.$b=function(){this.Rc().$b()},l.Hc=function(e){return fie(this,e)},l.dc=function(){return this.Rc().dc()},l.Mc=function(e){var n;return this.Hc(e)?(n=u(e,42),this.Rc().ec().Mc(n.cd())):!1},l.gc=function(){return this.Rc().gc()},P(Ye,"Maps/EntrySet",1971),I(1097,1971,ju,$k),l.Hc=function(e){return Uyt(this.a.d.vc(),e)},l.Kc=function(){return new jvt(this.a)},l.Rc=function(){return this.a},l.Mc=function(e){var n;return Uyt(this.a.d.vc(),e)?(n=u(e,42),Asn(this.a.e,n.cd()),!0):!1},l.Nc=function(){return VM(this.a.d.vc().Nc(),new VB(this.a))},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),I(1098,1,{},VB),l.Kb=function(e){return dJt(this.a,u(e,42))},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),I(730,1,ra,jvt),l.Nb=function(e){pa(this,e)},l.Pb=function(){var e;return e=u(this.b.Pb(),42),this.a=u(e.dd(),14),dJt(this.c,e)},l.Ob=function(){return this.b.Ob()},l.Qb=function(){n4(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},P(Ye,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),I(532,1970,ju,TR),l.$b=function(){this.b.$b()},l.Hc=function(e){return this.b._b(e)},l.Jc=function(e){Ar(e),this.b.wc(new gtt(e))},l.dc=function(){return this.b.dc()},l.Kc=function(){return new D9(this.b.vc().Kc())},l.Mc=function(e){return this.b._b(e)?(this.b.Bc(e),!0):!1},l.gc=function(){return this.b.gc()},P(Ye,"Maps/KeySet",532),I(318,532,ju,W3),l.$b=function(){var e;Oj((e=this.b.vc().Kc(),new hbt(this,e)))},l.Ic=function(e){return this.b.ec().Ic(e)},l.Fb=function(e){return this===e||yi(this.b.ec(),e)},l.Hb=function(){return Hi(this.b.ec())},l.Kc=function(){var e;return e=this.b.vc().Kc(),new hbt(this,e)},l.Mc=function(e){var n,r;return r=0,n=u(this.b.Bc(e),14),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},l.Nc=function(){return this.b.ec().Nc()},P(Ye,"AbstractMapBasedMultimap/KeySet",318),I(731,1,ra,hbt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.c.Ob()},l.Pb=function(){return this.a=u(this.c.Pb(),42),this.a.cd()},l.Qb=function(){var e;n4(!!this.a),e=u(this.a.dd(),14),this.c.Qb(),this.b.a.d-=e.gc(),e.$b(),this.a=null},P(Ye,"AbstractMapBasedMultimap/KeySet/1",731),I(491,389,{83:1,161:1},RM),l.bc=function(){return this.Sc()},l.ec=function(){return this.Tc()},l.Sc=function(){return new gM(this.c,this.Uc())},l.Tc=function(){var e;return e=this.b,e||(this.b=this.Sc())},l.Uc=function(){return u(this.d,161)},P(Ye,"AbstractMapBasedMultimap/SortedAsMap",491),I(542,491,Uhe,yj),l.bc=function(){return new e8(this.a,u(u(this.d,161),171))},l.Sc=function(){return new e8(this.a,u(u(this.d,161),171))},l.ec=function(){var e;return e=this.b,u(e||(this.b=new e8(this.a,u(u(this.d,161),171))),271)},l.Tc=function(){var e;return e=this.b,u(e||(this.b=new e8(this.a,u(u(this.d,161),171))),271)},l.Uc=function(){return u(u(this.d,161),171)},P(Ye,"AbstractMapBasedMultimap/NavigableAsMap",542),I(490,318,Whe,gM),l.Nc=function(){return this.b.ec().Nc()},P(Ye,"AbstractMapBasedMultimap/SortedKeySet",490),I(388,490,Mxt,e8),P(Ye,"AbstractMapBasedMultimap/NavigableKeySet",388),I(541,28,wy,I$),l.Fc=function(e){var n,r;return al(this),r=this.d.dc(),n=this.d.Fc(e),n&&(++this.f.d,r&&qM(this)),n},l.Gc=function(e){var n,r,s;return e.dc()?!1:(s=(al(this),this.d.gc()),n=this.d.Gc(e),n&&(r=this.d.gc(),this.f.d+=r-s,s==0&&qM(this)),n)},l.$b=function(){var e;e=(al(this),this.d.gc()),e!=0&&(this.d.$b(),this.f.d-=e,Rj(this))},l.Hc=function(e){return al(this),this.d.Hc(e)},l.Ic=function(e){return al(this),this.d.Ic(e)},l.Fb=function(e){return e===this?!0:(al(this),yi(this.d,e))},l.Hb=function(){return al(this),Hi(this.d)},l.Kc=function(){return al(this),new Cvt(this)},l.Mc=function(e){var n;return al(this),n=this.d.Mc(e),n&&(--this.f.d,Rj(this)),n},l.gc=function(){return zVt(this)},l.Nc=function(){return al(this),this.d.Nc()},l.Ib=function(){return al(this),$o(this.d)},P(Ye,"AbstractMapBasedMultimap/WrappedCollection",541);var ph=Yi(pr,"List");I(728,541,{20:1,28:1,14:1,15:1},twt),l.ad=function(e){e4(this,e)},l.Nc=function(){return al(this),this.d.Nc()},l.Vc=function(e,n){var r;al(this),r=this.d.dc(),u(this.d,15).Vc(e,n),++this.a.d,r&&qM(this)},l.Wc=function(e,n){var r,s,o;return n.dc()?!1:(o=(al(this),this.d.gc()),r=u(this.d,15).Wc(e,n),r&&(s=this.d.gc(),this.a.d+=s-o,o==0&&qM(this)),r)},l.Xb=function(e){return al(this),u(this.d,15).Xb(e)},l.Xc=function(e){return al(this),u(this.d,15).Xc(e)},l.Yc=function(){return al(this),new yUt(this)},l.Zc=function(e){return al(this),new OXt(this,e)},l.$c=function(e){var n;return al(this),n=u(this.d,15).$c(e),--this.a.d,Rj(this),n},l._c=function(e,n){return al(this),u(this.d,15)._c(e,n)},l.bd=function(e,n){return al(this),TZt(this.a,this.e,u(this.d,15).bd(e,n),this.b?this.b:this)},P(Ye,"AbstractMapBasedMultimap/WrappedList",728),I(1096,728,{20:1,28:1,14:1,15:1,54:1},lWt),P(Ye,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),I(620,1,ra,Cvt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return E8(this),this.b.Ob()},l.Pb=function(){return E8(this),this.b.Pb()},l.Qb=function(){WUt(this)},P(Ye,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),I(729,620,Jd,yUt,OXt),l.Qb=function(){WUt(this)},l.Rb=function(e){var n;n=zVt(this.a)==0,(E8(this),u(this.b,125)).Rb(e),++this.a.a.d,n&&qM(this.a)},l.Sb=function(){return(E8(this),u(this.b,125)).Sb()},l.Tb=function(){return(E8(this),u(this.b,125)).Tb()},l.Ub=function(){return(E8(this),u(this.b,125)).Ub()},l.Vb=function(){return(E8(this),u(this.b,125)).Vb()},l.Wb=function(e){(E8(this),u(this.b,125)).Wb(e)},P(Ye,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),I(727,541,Whe,U2t),l.Nc=function(){return al(this),this.d.Nc()},P(Ye,"AbstractMapBasedMultimap/WrappedSortedSet",727),I(1095,727,Mxt,fUt),P(Ye,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),I(1094,541,ju,TWt),l.Nc=function(){return al(this),this.d.Nc()},P(Ye,"AbstractMapBasedMultimap/WrappedSet",1094),I(1103,1,{},B),l.Kb=function(e){return Nsn(u(e,42))},P(Ye,"AbstractMapBasedMultimap/lambda$1$Type",1103),I(1102,1,{},ett),l.Kb=function(e){return new _v(this.a,e)},P(Ye,"AbstractMapBasedMultimap/lambda$2$Type",1102);var M2=Yi(pr,"Map/Entry");I(345,1,Mq),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),fd(this.cd(),n.cd())&&fd(this.dd(),n.dd())):!1},l.Hb=function(){var e,n;return e=this.cd(),n=this.dd(),(e==null?0:Hi(e))^(n==null?0:Hi(n))},l.ed=function(e){throw rt(new Or)},l.Ib=function(){return this.cd()+"="+this.dd()},P(Ye,Khe,345),I(1988,28,wy),l.$b=function(){this.fd().$b()},l.Hc=function(e){var n;return Et(e,42)?(n=u(e,42),gin(this.fd(),n.cd(),n.dd())):!1},l.Mc=function(e){var n;return Et(e,42)?(n=u(e,42),iZt(this.fd(),n.cd(),n.dd())):!1},l.gc=function(){return this.fd().d},P(Ye,"Multimaps/Entries",1988),I(733,1988,wy,QL),l.Kc=function(){return this.a.kc()},l.fd=function(){return this.a},l.Nc=function(){return this.a.lc()},P(Ye,"AbstractMultimap/Entries",733),I(734,733,ju,zpt),l.Nc=function(){return this.a.lc()},l.Fb=function(e){return F4t(this,e)},l.Hb=function(){return sne(this)},P(Ye,"AbstractMultimap/EntrySet",734),I(735,28,wy,M3),l.$b=function(){this.a.$b()},l.Hc=function(e){return Zcn(this.a,e)},l.Kc=function(){return this.a.nc()},l.gc=function(){return this.a.d},l.Nc=function(){return this.a.oc()},P(Ye,"AbstractMultimap/Values",735),I(1989,28,{835:1,20:1,28:1,14:1}),l.Jc=function(e){Ar(e),Y3(this).Jc(new dtt(e))},l.Nc=function(){var e;return e=Y3(this).Nc(),Mst(e,new wt,64|e.qd()&1296,this.a.d)},l.Fc=function(e){return Xpt(),!0},l.Gc=function(e){return Ar(this),Ar(e),Et(e,543)?min(u(e,835)):!e.dc()&&Xrt(this,e.Kc())},l.Hc=function(e){var n;return n=u(ny($x(this.a),e),14),(n?n.gc():0)>0},l.Fb=function(e){return fbn(this,e)},l.Hb=function(){return Hi(Y3(this))},l.dc=function(){return Y3(this).dc()},l.Mc=function(e){return Toe(this,e,1)>0},l.Ib=function(){return $o(Y3(this))},P(Ye,"AbstractMultiset",1989),I(1991,1970,ju),l.$b=function(){Q$(this.a.a)},l.Hc=function(e){var n,r;return Et(e,492)?(r=u(e,416),u(r.a.dd(),14).gc()<=0?!1:(n=NQt(this.a,r.a.cd()),n==u(r.a.dd(),14).gc())):!1},l.Mc=function(e){var n,r,s,o;return Et(e,492)&&(r=u(e,416),n=r.a.cd(),s=u(r.a.dd(),14).gc(),s!=0)?(o=this.a,tpn(o,n,s)):!1},P(Ye,"Multisets/EntrySet",1991),I(1109,1991,ju,ZL),l.Kc=function(){return new Bqt(EYt($x(this.a.a)).Kc())},l.gc=function(){return $x(this.a.a).gc()},P(Ye,"AbstractMultiset/EntrySet",1109),I(619,726,y2),l.hc=function(){return this.gd()},l.jc=function(){return this.hd()},l.cc=function(e){return this.jd(e)},l.fc=function(e){return this.kd(e)},l.Zb=function(){var e;return e=this.f,e||(this.f=this.ac())},l.hd=function(){return vn(),vn(),UH},l.Fb=function(e){return Eit(this,e)},l.jd=function(e){return u(Ai(this,e),21)},l.kd=function(e){return u($I(this,e),21)},l.mc=function(e){return vn(),new Qk(u(e,21))},l.pc=function(e,n){return new TWt(this,e,u(n,21))},P(Ye,"AbstractSetMultimap",619),I(1657,619,y2),l.hc=function(){return new Lp(this.b)},l.gd=function(){return new Lp(this.b)},l.jc=function(){return pwt(new Lp(this.b))},l.hd=function(){return pwt(new Lp(this.b))},l.cc=function(e){return u(u(Ai(this,e),21),84)},l.jd=function(e){return u(u(Ai(this,e),21),84)},l.fc=function(e){return u(u($I(this,e),21),84)},l.kd=function(e){return u(u($I(this,e),21),84)},l.mc=function(e){return Et(e,271)?pwt(u(e,271)):(vn(),new C2t(u(e,84)))},l.Zb=function(){var e;return e=this.f,e||(this.f=Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c))},l.pc=function(e,n){return Et(n,271)?new fUt(this,e,u(n,271)):new U2t(this,e,u(n,84))},P(Ye,"AbstractSortedSetMultimap",1657),I(1658,1657,y2),l.Zb=function(){var e;return e=this.f,u(u(e||(this.f=Et(this.c,171)?new yj(this,u(this.c,171)):Et(this.c,161)?new RM(this,u(this.c,161)):new n8(this,this.c)),161),171)},l.ec=function(){var e;return e=this.i,u(u(e||(this.i=Et(this.c,171)?new e8(this,u(this.c,171)):Et(this.c,161)?new gM(this,u(this.c,161)):new W3(this,this.c)),84),271)},l.bc=function(){return Et(this.c,171)?new e8(this,u(this.c,171)):Et(this.c,161)?new gM(this,u(this.c,161)):new W3(this,this.c)},P(Ye,"AbstractSortedKeySortedSetMultimap",1658),I(2010,1,{1947:1}),l.Fb=function(e){return H1n(this,e)},l.Hb=function(){var e;return vyt((e=this.g,e||(this.g=new v9(this))))},l.Ib=function(){var e;return oae((e=this.f,e||(this.f=new v2t(this))))},P(Ye,"AbstractTable",2010),I(665,N1,ju,v9),l.$b=function(){Wqt()},l.Hc=function(e){var n,r;return Et(e,468)?(n=u(e,682),r=u(ny(UYt(this.a),Dp(n.c.e,n.b)),83),!!r&&Uyt(r.vc(),new _v(Dp(n.c.c,n.a),Wx(n.c,n.b,n.a)))):!1},l.Kc=function(){return Snn(this.a)},l.Mc=function(e){var n,r;return Et(e,468)?(n=u(e,682),r=u(ny(UYt(this.a),Dp(n.c.e,n.b)),83),!!r&&Cun(r.vc(),new _v(Dp(n.c.c,n.a),Wx(n.c,n.b,n.a)))):!1},l.gc=function(){return iYt(this.a)},l.Nc=function(){return kin(this.a)},P(Ye,"AbstractTable/CellSet",665),I(1928,28,wy,ntt),l.$b=function(){Wqt()},l.Hc=function(e){return Ndn(this.a,e)},l.Kc=function(){return Ann(this.a)},l.gc=function(){return iYt(this.a)},l.Nc=function(){return oZt(this.a)},P(Ye,"AbstractTable/Values",1928),I(1632,1631,y2),P(Ye,"ArrayListMultimapGwtSerializationDependencies",1632),I(513,1632,y2,set,$wt),l.hc=function(){return new Yc(this.a)},l.a=0,P(Ye,"ArrayListMultimap",513),I(664,2010,{664:1,1947:1,3:1},Noe),P(Ye,"ArrayTable",664),I(1924,386,AE,zUt),l.Xb=function(e){return new xyt(this.a,e)},P(Ye,"ArrayTable/1",1924),I(1925,1,{},GB),l.ld=function(e){return new xyt(this.a,e)},P(Ye,"ArrayTable/1methodref$getCell$Type",1925),I(2011,1,{682:1}),l.Fb=function(e){var n;return e===this?!0:Et(e,468)?(n=u(e,682),fd(Dp(this.c.e,this.b),Dp(n.c.e,n.b))&&fd(Dp(this.c.c,this.a),Dp(n.c.c,n.a))&&fd(Wx(this.c,this.b,this.a),Wx(n.c,n.b,n.a))):!1},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[Dp(this.c.e,this.b),Dp(this.c.c,this.a),Wx(this.c,this.b,this.a)]))},l.Ib=function(){return"("+Dp(this.c.e,this.b)+","+Dp(this.c.c,this.a)+")="+Wx(this.c,this.b,this.a)},P(Ye,"Tables/AbstractCell",2011),I(468,2011,{468:1,682:1},xyt),l.a=0,l.b=0,l.d=0,P(Ye,"ArrayTable/2",468),I(1927,1,{},ox),l.ld=function(e){return wte(this.a,e)},P(Ye,"ArrayTable/2methodref$getValue$Type",1927),I(1926,386,AE,qUt),l.Xb=function(e){return wte(this.a,e)},P(Ye,"ArrayTable/3",1926),I(1979,1967,bw),l.$b=function(){Oj(this.kc())},l.vc=function(){return new ux(this)},l.lc=function(){return new yXt(this.kc(),this.gc())},P(Ye,"Maps/IteratorBasedAbstractMap",1979),I(828,1979,bw),l.$b=function(){throw rt(new Or)},l._b=function(e){return fHt(this.c,e)},l.kc=function(){return new HUt(this,this.c.b.c.gc())},l.lc=function(){return _nt(this.c.b.c.gc(),16,new dv(this))},l.xc=function(e){var n;return n=u(wC(this.c,e),19),n?this.nd(n.a):null},l.dc=function(){return this.c.b.c.dc()},l.ec=function(){return Nnt(this.c)},l.zc=function(e,n){var r;if(r=u(wC(this.c,e),19),!r)throw rt(new Pn(this.md()+" "+e+" not in "+Nnt(this.c)));return this.od(r.a,n)},l.Bc=function(e){throw rt(new Or)},l.gc=function(){return this.c.b.c.gc()},P(Ye,"ArrayTable/ArrayMap",828),I(1923,1,{},dv),l.ld=function(e){return KYt(this.a,e)},P(Ye,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),I(1921,345,Mq,UHt),l.cd=function(){return HXe(this.a,this.b)},l.dd=function(){return this.a.nd(this.b)},l.ed=function(e){return this.a.od(this.b,e)},l.b=0,P(Ye,"ArrayTable/ArrayMap/1",1921),I(1922,386,AE,HUt),l.Xb=function(e){return KYt(this.a,e)},P(Ye,"ArrayTable/ArrayMap/2",1922),I(1920,828,bw,PYt),l.md=function(){return"Column"},l.nd=function(e){return Wx(this.b,this.a,e)},l.od=function(e,n){return Gne(this.b,this.a,e,n)},l.a=0,P(Ye,"ArrayTable/Row",1920),I(829,828,bw,v2t),l.nd=function(e){return new PYt(this.a,e)},l.zc=function(e,n){return u(n,83),_Ke()},l.od=function(e,n){return u(n,83),SKe()},l.md=function(){return"Row"},P(Ye,"ArrayTable/RowMap",829),I(1120,1,Mh,WHt),l.qd=function(){return this.a.qd()&-262},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.Nb(new qHt(e,this.b))},l.sd=function(e){return this.a.sd(new zHt(e,this.b))},P(Ye,"CollectSpliterators/1",1120),I(1121,1,Un,zHt),l.td=function(e){this.a.td(this.b.Kb(e))},P(Ye,"CollectSpliterators/1/lambda$0$Type",1121),I(1122,1,Un,qHt),l.td=function(e){this.a.td(this.b.Kb(e))},P(Ye,"CollectSpliterators/1/lambda$1$Type",1122),I(1123,1,Mh,wZt),l.qd=function(){return this.a},l.rd=function(){return this.d&&(this.b=kUt(this.b,this.d.rd())),kUt(this.b,0)},l.Nb=function(e){this.d&&(this.d.Nb(e),this.d=null),this.c.Nb(new $Ht(this.e,e)),this.b=0},l.sd=function(e){for(;;){if(this.d&&this.d.sd(e))return aC(this.b,Iq)&&(this.b=Yp(this.b,1)),!0;if(this.d=null,!this.c.sd(new HHt(this,this.e)))return!1}},l.a=0,l.b=0,P(Ye,"CollectSpliterators/1FlatMapSpliterator",1123),I(1124,1,Un,HHt),l.td=function(e){UQe(this.a,this.b,e)},P(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),I(1125,1,Un,$Ht),l.td=function(e){MXe(this.b,this.a,e)},P(Ye,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),I(1117,1,Mh,tKt),l.qd=function(){return 16464|this.b},l.rd=function(){return this.a.rd()},l.Nb=function(e){this.a.xe(new VHt(e,this.c))},l.sd=function(e){return this.a.ye(new GHt(e,this.c))},l.b=0,P(Ye,"CollectSpliterators/1WithCharacteristics",1117),I(1118,1,AD,GHt),l.ud=function(e){this.a.td(this.b.ld(e))},P(Ye,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),I(1119,1,AD,VHt),l.ud=function(e){this.a.td(this.b.ld(e))},P(Ye,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),I(245,1,Pat),l.wd=function(e){return this.vd(u(e,245))},l.vd=function(e){var n;return e==(Xtt(),but)?1:e==(Qtt(),put)?-1:(n=(Mj(),SI(this.a,e.a)),n!=0?n:Et(this,519)==Et(e,519)?0:Et(this,519)?1:-1)},l.zd=function(){return this.a},l.Fb=function(e){return T3t(this,e)},P(Ye,"Cut",245),I(1761,245,Pat,Xqt),l.vd=function(e){return e==this?0:1},l.xd=function(e){throw rt(new Ept)},l.yd=function(e){e.a+="+∞)"},l.zd=function(){throw rt(new Fo(Xhe))},l.Hb=function(){return qd(),O3t(this)},l.Ad=function(e){return!1},l.Ib=function(){return"+∞"};var put;P(Ye,"Cut/AboveAll",1761),I(519,245,{245:1,519:1,3:1,35:1},KUt),l.xd=function(e){hc((e.a+="(",e),this.a)},l.yd=function(e){Rp(hc(e,this.a),93)},l.Hb=function(){return~Hi(this.a)},l.Ad=function(e){return Mj(),SI(this.a,e)<0},l.Ib=function(){return"/"+this.a+"\\"},P(Ye,"Cut/AboveValue",519),I(1760,245,Pat,Qqt),l.vd=function(e){return e==this?0:-1},l.xd=function(e){e.a+="(-∞"},l.yd=function(e){throw rt(new Ept)},l.zd=function(){throw rt(new Fo(Xhe))},l.Hb=function(){return qd(),O3t(this)},l.Ad=function(e){return!0},l.Ib=function(){return"-∞"};var but;P(Ye,"Cut/BelowAll",1760),I(1762,245,Pat,YUt),l.xd=function(e){hc((e.a+="[",e),this.a)},l.yd=function(e){Rp(hc(e,this.a),41)},l.Hb=function(){return Hi(this.a)},l.Ad=function(e){return Mj(),SI(this.a,e)<=0},l.Ib=function(){return"\\"+this.a+"/"},P(Ye,"Cut/BelowValue",1762),I(537,1,t0),l.Jc=function(e){va(this,e)},l.Ib=function(){return eln(u(r$(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},P(Ye,"FluentIterable",537),I(433,537,t0,uC),l.Kc=function(){return new ar(lr(this.a.Kc(),new z))},P(Ye,"FluentIterable/2",433),I(1046,537,t0,JVt),l.Kc=function(){return Bp(this)},P(Ye,"FluentIterable/3",1046),I(708,386,AE,w2t),l.Xb=function(e){return this.a[e].Kc()},P(Ye,"FluentIterable/3/1",708),I(1972,1,{}),l.Ib=function(){return $o(this.Bd().b)},P(Ye,"ForwardingObject",1972),I(1973,1972,Qhe),l.Bd=function(){return this.Cd()},l.Jc=function(e){va(this,e)},l.Lc=function(){return this.Oc()},l.Nc=function(){return new _n(this,0)},l.Oc=function(){return new Tn(null,this.Nc())},l.Fc=function(e){return this.Cd(),bHt()},l.Gc=function(e){return this.Cd(),vHt()},l.$b=function(){this.Cd(),wHt()},l.Hc=function(e){return this.Cd().Hc(e)},l.Ic=function(e){return this.Cd().Ic(e)},l.dc=function(){return this.Cd().b.dc()},l.Kc=function(){return this.Cd().Kc()},l.Mc=function(e){return this.Cd(),mHt()},l.gc=function(){return this.Cd().b.gc()},l.Pc=function(){return this.Cd().Pc()},l.Qc=function(e){return this.Cd().Qc(e)},P(Ye,"ForwardingCollection",1973),I(1980,28,Ixt),l.Kc=function(){return this.Ed()},l.Fc=function(e){throw rt(new Or)},l.Gc=function(e){throw rt(new Or)},l.$b=function(){throw rt(new Or)},l.Hc=function(e){return e!=null&&ry(this,e,!1)},l.Dd=function(){switch(this.gc()){case 0:return Gm(),Gm(),vut;case 1:return Gm(),new Snt(Ar(this.Ed().Pb()));default:return new FYt(this,this.Pc())}},l.Mc=function(e){throw rt(new Or)},P(Ye,"ImmutableCollection",1980),I(712,1980,Ixt,xpt),l.Kc=function(){return Kx(this.a.Kc())},l.Hc=function(e){return e!=null&&this.a.Hc(e)},l.Ic=function(e){return this.a.Ic(e)},l.dc=function(){return this.a.dc()},l.Ed=function(){return Kx(this.a.Kc())},l.gc=function(){return this.a.gc()},l.Pc=function(){return this.a.Pc()},l.Qc=function(e){return this.a.Qc(e)},l.Ib=function(){return $o(this.a)},P(Ye,"ForwardingImmutableCollection",712),I(152,1980,S_),l.Kc=function(){return this.Ed()},l.Yc=function(){return this.Fd(0)},l.Zc=function(e){return this.Fd(e)},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.bd=function(e,n){return this.Gd(e,n)},l.Vc=function(e,n){throw rt(new Or)},l.Wc=function(e,n){throw rt(new Or)},l.Fb=function(e){return Xpn(this,e)},l.Hb=function(){return ocn(this)},l.Xc=function(e){return e==null?-1:yfn(this,e)},l.Ed=function(){return this.Fd(0)},l.Fd=function(e){return O2t(this,e)},l.$c=function(e){throw rt(new Or)},l._c=function(e,n){throw rt(new Or)},l.Gd=function(e,n){var r;return yz((r=new iGt(this),new Kd(r,e,n)))};var vut;P(Ye,"ImmutableList",152),I(2006,152,S_),l.Kc=function(){return Kx(this.Hd().Kc())},l.bd=function(e,n){return yz(this.Hd().bd(e,n))},l.Hc=function(e){return e!=null&&this.Hd().Hc(e)},l.Ic=function(e){return this.Hd().Ic(e)},l.Fb=function(e){return yi(this.Hd(),e)},l.Xb=function(e){return Dp(this,e)},l.Hb=function(){return Hi(this.Hd())},l.Xc=function(e){return this.Hd().Xc(e)},l.dc=function(){return this.Hd().dc()},l.Ed=function(){return Kx(this.Hd().Kc())},l.gc=function(){return this.Hd().gc()},l.Gd=function(e,n){return yz(this.Hd().bd(e,n))},l.Pc=function(){return this.Hd().Qc(Pt(Xn,Ie,1,this.Hd().gc(),5,1))},l.Qc=function(e){return this.Hd().Qc(e)},l.Ib=function(){return $o(this.Hd())},P(Ye,"ForwardingImmutableList",2006),I(714,1,LE),l.vc=function(){return Pv(this)},l.wc=function(e){UC(this,e)},l.ec=function(){return Nnt(this)},l.yc=function(e,n,r){return $it(this,e,n,r)},l.Cc=function(){return this.Ld()},l.$b=function(){throw rt(new Or)},l._b=function(e){return this.xc(e)!=null},l.uc=function(e){return this.Ld().Hc(e)},l.Jd=function(){return new zzt(this)},l.Kd=function(){return new qzt(this)},l.Fb=function(e){return Jcn(this,e)},l.Hb=function(){return Pv(this).Hb()},l.dc=function(){return this.gc()==0},l.zc=function(e,n){return AKe()},l.Bc=function(e){throw rt(new Or)},l.Ib=function(){return I0n(this)},l.Ld=function(){return this.e?this.e:this.e=this.Kd()},l.c=null,l.d=null,l.e=null;var hge;P(Ye,"ImmutableMap",714),I(715,714,LE),l._b=function(e){return fHt(this,e)},l.uc=function(e){return cGt(this.b,e)},l.Id=function(){return Bre(new m9(this))},l.Jd=function(){return Bre(bXt(this.b))},l.Kd=function(){return hd(),new xpt(pXt(this.b))},l.Fb=function(e){return uGt(this.b,e)},l.xc=function(e){return wC(this,e)},l.Hb=function(){return Hi(this.b.c)},l.dc=function(){return this.b.c.dc()},l.gc=function(){return this.b.c.gc()},l.Ib=function(){return $o(this.b.c)},P(Ye,"ForwardingImmutableMap",715),I(1974,1973,Fat),l.Bd=function(){return this.Md()},l.Cd=function(){return this.Md()},l.Nc=function(){return new _n(this,1)},l.Fb=function(e){return e===this||this.Md().Fb(e)},l.Hb=function(){return this.Md().Hb()},P(Ye,"ForwardingSet",1974),I(1069,1974,Fat,m9),l.Bd=function(){return x8(this.a.b)},l.Cd=function(){return x8(this.a.b)},l.Hc=function(e){if(Et(e,42)&&u(e,42).cd()==null)return!1;try{return oGt(x8(this.a.b),e)}catch(n){if(n=Wi(n),Et(n,205))return!1;throw rt(n)}},l.Md=function(){return x8(this.a.b)},l.Qc=function(e){var n;return n=QXt(x8(this.a.b),e),x8(this.a.b).b.gc()=0?"+":"")+(r/60|0),n=rj(b.Math.abs(r)%60),(vae(),Sge)[this.q.getDay()]+" "+Age[this.q.getMonth()]+" "+rj(this.q.getDate())+" "+rj(this.q.getHours())+":"+rj(this.q.getMinutes())+":"+rj(this.q.getSeconds())+" GMT"+e+n+" "+this.q.getFullYear()};var HH=P(pr,"Date",199);I(1915,199,afe,Gse),l.a=!1,l.b=0,l.c=0,l.d=0,l.e=0,l.f=0,l.g=!1,l.i=0,l.j=0,l.k=0,l.n=0,l.o=0,l.p=0,P("com.google.gwt.i18n.shared.impl","DateRecord",1915),I(1966,1,{}),l.fe=function(){return null},l.ge=function(){return null},l.he=function(){return null},l.ie=function(){return null},l.je=function(){return null},P(h6,"JSONValue",1966),I(216,1966,{216:1},bg,lx),l.Fb=function(e){return Et(e,216)?Hwt(this.a,u(e,216).a):!1},l.ee=function(){return XWe},l.Hb=function(){return Mwt(this.a)},l.fe=function(){return this},l.Ib=function(){var e,n,r;for(r=new Il("["),n=0,e=this.a.length;n0&&(r.a+=","),hc(r,Xm(this,n));return r.a+="]",r.a},P(h6,"JSONArray",216),I(483,1966,{483:1},qk),l.ee=function(){return QWe},l.ge=function(){return this},l.Ib=function(){return Fn(),""+this.a},l.a=!1;var wge,mge;P(h6,"JSONBoolean",483),I(985,60,U0,Rqt),P(h6,"JSONException",985),I(1023,1966,{},dt),l.ee=function(){return nKe},l.Ib=function(){return Tu};var yge;P(h6,"JSONNull",1023),I(258,1966,{258:1},y9),l.Fb=function(e){return Et(e,258)?this.a==u(e,258).a:!1},l.ee=function(){return ZWe},l.Hb=function(){return o8(this.a)},l.he=function(){return this},l.Ib=function(){return this.a+""},l.a=0,P(h6,"JSONNumber",258),I(183,1966,{183:1},mx,Hk),l.Fb=function(e){return Et(e,183)?Hwt(this.a,u(e,183).a):!1},l.ee=function(){return JWe},l.Hb=function(){return Mwt(this.a)},l.ie=function(){return this},l.Ib=function(){var e,n,r,s,o,h,d;for(d=new Il("{"),e=!0,h=uit(this,Pt(Ae,te,2,0,6,1)),r=h,s=0,o=r.length;s=0?":"+this.c:"")+")"},l.c=0;var lEt=P(Xo,"StackTraceElement",310);lge={3:1,475:1,35:1,2:1};var Ae=P(Xo,Dxt,2);I(107,418,{475:1},xg,B9,Th),P(Xo,"StringBuffer",107),I(100,418,{475:1},_p,Lm,Il),P(Xo,"StringBuilder",100),I(687,73,sot,Zpt),P(Xo,"StringIndexOutOfBoundsException",687),I(2043,1,{});var hEt;I(844,1,{},ke),l.Kb=function(e){return u(e,78).e},P(Xo,"Throwable/lambda$0$Type",844),I(41,60,{3:1,102:1,60:1,78:1,41:1},Or,yg),P(Xo,"UnsupportedOperationException",41),I(240,236,{3:1,35:1,236:1,240:1},kI,obt),l.wd=function(e){return Que(this,u(e,240))},l.ke=function(){return ly(Ole(this))},l.Fb=function(e){var n;return this===e?!0:Et(e,240)?(n=u(e,240),this.e==n.e&&Que(this,n)==0):!1},l.Hb=function(){var e;return this.b!=0?this.b:this.a<54?(e=ku(this.f),this.b=Sr(Ps(e,-1)),this.b=33*this.b+Sr(Ps(Fp(e,32),-1)),this.b=17*this.b+ps(this.e),this.b):(this.b=17*Ire(this.c)+ps(this.e),this.b)},l.Ib=function(){return Ole(this)},l.a=0,l.b=0,l.d=0,l.e=0,l.f=0;var Tge,D2,fEt,dEt,gEt,pEt,bEt,vEt,Cut=P("java.math","BigDecimal",240);I(91,236,{3:1,35:1,236:1,91:1},D3t,Lg,K3,g4t,Nie,Np),l.wd=function(e){return Lie(this,u(e,91))},l.ke=function(){return ly(Dat(this,0))},l.Fb=function(e){return h3t(this,e)},l.Hb=function(){return Ire(this)},l.Ib=function(){return Dat(this,0)},l.b=-2,l.c=0,l.d=0,l.e=0;var _ut,GH,wEt,Sut,VH,QE,B4=P("java.math","BigInteger",91),Cge,_ge,T6,oS;I(488,1967,bw),l.$b=function(){Yu(this)},l._b=function(e){return kl(this,e)},l.uc=function(e){return pre(this,e,this.g)||pre(this,e,this.f)},l.vc=function(){return new wg(this)},l.xc=function(e){return Jn(this,e)},l.zc=function(e,n){return ki(this,e,n)},l.Bc=function(e){return Ux(this,e)},l.gc=function(){return $9(this)},P(pr,"AbstractHashMap",488),I(261,N1,ju,wg),l.$b=function(){this.a.$b()},l.Hc=function(e){return dZt(this,e)},l.Kc=function(){return new h2(this.a)},l.Mc=function(e){var n;return dZt(this,e)?(n=u(e,42).cd(),this.a.Bc(n),!0):!1},l.gc=function(){return this.a.gc()},P(pr,"AbstractHashMap/EntrySet",261),I(262,1,ra,h2),l.Nb=function(e){pa(this,e)},l.Pb=function(){return Yv(this)},l.Ob=function(){return this.b},l.Qb=function(){lte(this)},l.b=!1,P(pr,"AbstractHashMap/EntrySetIterator",262),I(417,1,ra,fx),l.Nb=function(e){pa(this,e)},l.Ob=function(){return mM(this)},l.Pb=function(){return PXt(this)},l.Qb=function(){El(this)},l.b=0,l.c=-1,P(pr,"AbstractList/IteratorImpl",417),I(96,417,Jd,ha),l.Qb=function(){El(this)},l.Rb=function(e){Rm(this,e)},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Ub=function(){return Qn(this.b>0),this.a.Xb(this.c=--this.b)},l.Vb=function(){return this.b-1},l.Wb=function(e){Pm(this.c!=-1),this.a._c(this.c,e)},P(pr,"AbstractList/ListIteratorImpl",96),I(219,52,IE,Kd),l.Vc=function(e,n){Um(e,this.b),this.c.Vc(this.a+e,n),++this.b},l.Xb=function(e){return An(e,this.b),this.c.Xb(this.a+e)},l.$c=function(e){var n;return An(e,this.b),n=this.c.$c(this.a+e),--this.b,n},l._c=function(e,n){return An(e,this.b),this.c._c(this.a+e,n)},l.gc=function(){return this.b},l.a=0,l.b=0,P(pr,"AbstractList/SubList",219),I(384,N1,ju,Tm),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a._b(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new rM(e)},l.Mc=function(e){return this.a._b(e)?(this.a.Bc(e),!0):!1},l.gc=function(){return this.a.gc()},P(pr,"AbstractMap/1",384),I(691,1,ra,rM),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.cd()},l.Qb=function(){this.a.Qb()},P(pr,"AbstractMap/1/1",691),I(226,28,wy,b1),l.$b=function(){this.a.$b()},l.Hc=function(e){return this.a.uc(e)},l.Kc=function(){var e;return e=this.a.vc().Kc(),new v1(e)},l.gc=function(){return this.a.gc()},P(pr,"AbstractMap/2",226),I(294,1,ra,v1),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a.Ob()},l.Pb=function(){var e;return e=u(this.a.Pb(),42),e.dd()},l.Qb=function(){this.a.Qb()},P(pr,"AbstractMap/2/1",294),I(484,1,{484:1,42:1}),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),Pc(this.d,n.cd())&&Pc(this.e,n.dd())):!1},l.cd=function(){return this.d},l.dd=function(){return this.e},l.Hb=function(){return G3(this.d)^G3(this.e)},l.ed=function(e){return J2t(this,e)},l.Ib=function(){return this.d+"="+this.e},P(pr,"AbstractMap/AbstractEntry",484),I(383,484,{484:1,383:1,42:1},RR),P(pr,"AbstractMap/SimpleEntry",383),I(1984,1,uot),l.Fb=function(e){var n;return Et(e,42)?(n=u(e,42),Pc(this.cd(),n.cd())&&Pc(this.dd(),n.dd())):!1},l.Hb=function(){return G3(this.cd())^G3(this.dd())},l.Ib=function(){return this.cd()+"="+this.dd()},P(pr,Khe,1984),I(1992,1967,Uhe),l.tc=function(e){return xJt(this,e)},l._b=function(e){return pnt(this,e)},l.vc=function(){return new x(this)},l.xc=function(e){var n;return n=e,ec(Dyt(this,n))},l.ec=function(){return new y(this)},P(pr,"AbstractNavigableMap",1992),I(739,N1,ju,x),l.Hc=function(e){return Et(e,42)&&xJt(this.b,u(e,42))},l.Kc=function(){return new vC(this.b)},l.Mc=function(e){var n;return Et(e,42)?(n=u(e,42),cte(this.b,n)):!1},l.gc=function(){return this.b.c},P(pr,"AbstractNavigableMap/EntrySet",739),I(493,N1,Mxt,y),l.Nc=function(){return new FR(this)},l.$b=function(){O9(this.a)},l.Hc=function(e){return pnt(this.a,e)},l.Kc=function(){var e;return e=new vC(new gC(this.a).b),new g(e)},l.Mc=function(e){return pnt(this.a,e)?(IC(this.a,e),!0):!1},l.gc=function(){return this.a.c},P(pr,"AbstractNavigableMap/NavigableKeySet",493),I(494,1,ra,g),l.Nb=function(e){pa(this,e)},l.Ob=function(){return mM(this.a.a)},l.Pb=function(){var e;return e=wj(this.a),e.cd()},l.Qb=function(){hKt(this.a)},P(pr,"AbstractNavigableMap/NavigableKeySet/1",494),I(2004,28,wy),l.Fc=function(e){return M8(dE(this,e)),!0},l.Gc=function(e){return On(e),_j(e!=this,"Can't add a queue to itself"),Ua(this,e)},l.$b=function(){for(;Qrt(this)!=null;);},P(pr,"AbstractQueue",2004),I(302,28,{4:1,20:1,28:1,14:1},P3,RQt),l.Fc=function(e){return Qwt(this,e),!0},l.$b=function(){rmt(this)},l.Hc=function(e){return Rne(new MC(this),e)},l.dc=function(){return N9(this)},l.Kc=function(){return new MC(this)},l.Mc=function(e){return frn(new MC(this),e)},l.gc=function(){return this.c-this.b&this.a.length-1},l.Nc=function(){return new _n(this,272)},l.Qc=function(e){var n;return n=this.c-this.b&this.a.length-1,e.lengthn&&Ji(e,n,null),e},l.b=0,l.c=0,P(pr,"ArrayDeque",302),I(446,1,ra,MC),l.Nb=function(e){pa(this,e)},l.Ob=function(){return this.a!=this.b},l.Pb=function(){return mz(this)},l.Qb=function(){Fee(this)},l.a=0,l.b=0,l.c=-1,P(pr,"ArrayDeque/IteratorImpl",446),I(12,52,ufe,le,Yc,Pu),l.Vc=function(e,n){$m(this,e,n)},l.Fc=function(e){return ue(this,e)},l.Wc=function(e,n){return Ryt(this,e,n)},l.Gc=function(e){return As(this,e)},l.$b=function(){this.c=Pt(Xn,Ie,1,0,5,1)},l.Hc=function(e){return Ro(this,e,0)!=-1},l.Jc=function(e){mu(this,e)},l.Xb=function(e){return Fe(this,e)},l.Xc=function(e){return Ro(this,e,0)},l.dc=function(){return this.c.length==0},l.Kc=function(){return new S(this)},l.$c=function(e){return Ag(this,e)},l.Mc=function(e){return vu(this,e)},l.Ud=function(e,n){BQt(this,e,n)},l._c=function(e,n){return ah(this,e,n)},l.gc=function(){return this.c.length},l.ad=function(e){Xs(this,e)},l.Pc=function(){return int(this)},l.Qc=function(e){return D1(this,e)};var X5n=P(pr,"ArrayList",12);I(7,1,ra,S),l.Nb=function(e){pa(this,e)},l.Ob=function(){return Vo(this)},l.Pb=function(){return J(this)},l.Qb=function(){_C(this)},l.a=0,l.b=-1,P(pr,"ArrayList/1",7),I(2013,b.Function,{},xt),l.te=function(e,n){return Ls(e,n)},I(154,52,lfe,wl),l.Hc=function(e){return Ree(this,e)!=-1},l.Jc=function(e){var n,r,s,o;for(On(e),r=this.a,s=0,o=r.length;s>>0,e.toString(16)))},l.f=0,l.i=Ts;var XH=P(r0,"CNode",57);I(814,1,{},Dpt),P(r0,"CNode/CNodeBuilder",814);var qge;I(1525,1,{},No),l.Oe=function(e,n){return 0},l.Pe=function(e,n){return 0},P(r0,wfe,1525),I(1790,1,{},vs),l.Le=function(e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt;for(C=ss,s=new S(e.a.b);s.as.d.c||s.d.c==h.d.c&&s.d.b0?e+this.n.d+this.n.a:0},l.Se=function(){var e,n,r,s,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].Se());else if(this.g)o=a3t(this,xst(this,null,!0));else for(n=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),r=0,s=n.length;r0?o+this.n.b+this.n.c:0},l.Te=function(){var e,n,r,s,o;if(this.g)for(e=xst(this,null,!1),r=(Kf(),ct(ot(My,1),ae,232,0,[sc,tu,ac])),s=0,o=r.length;s0&&(s[0]+=this.d,r-=s[0]),s[2]>0&&(s[2]+=this.d,r-=s[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+e.d+(this.c.a-r)/2,s[1]=b.Math.max(s[1],r),lmt(this,tu,n.d+e.d+s[0]-(s[1]-r)/2,s)},l.b=null,l.d=0,l.e=!1,l.f=!1,l.g=!1;var Nut=0,QH=0;P(k2,"GridContainerCell",1473),I(461,22,{3:1,35:1,22:1,461:1},vet);var cb,Sd,mf,Zge=jr(k2,"HorizontalLabelAlignment",461,Hr,Srn,hZe),Jge;I(306,212,{212:1,306:1},iQt,hee,eQt),l.Re=function(){return qKt(this)},l.Se=function(){return Bvt(this)},l.a=0,l.c=!1;var axn=P(k2,"LabelCell",306);I(244,326,{212:1,326:1,244:1},r_),l.Re=function(){return cD(this)},l.Se=function(){return uD(this)},l.Te=function(){fat(this)},l.Ue=function(){dat(this)},l.b=0,l.c=0,l.d=!1,P(k2,"StripContainerCell",244),I(1626,1,ui,Zl),l.Mb=function(e){return TKe(u(e,212))},P(k2,"StripContainerCell/lambda$0$Type",1626),I(1627,1,{},Pa),l.Fe=function(e){return u(e,212).Se()},P(k2,"StripContainerCell/lambda$1$Type",1627),I(1628,1,ui,Al),l.Mb=function(e){return CKe(u(e,212))},P(k2,"StripContainerCell/lambda$2$Type",1628),I(1629,1,{},ua),l.Fe=function(e){return u(e,212).Re()},P(k2,"StripContainerCell/lambda$3$Type",1629),I(462,22,{3:1,35:1,22:1,462:1},wet);var yf,ub,e1,tpe=jr(k2,"VerticalLabelAlignment",462,Hr,Arn,fZe),epe;I(789,1,{},yxt),l.c=0,l.d=0,l.k=0,l.s=0,l.t=0,l.v=!1,l.w=0,l.D=!1,P(Bq,"NodeContext",789),I(1471,1,Oi,bc),l.ue=function(e,n){return iUt(u(e,61),u(n,61))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Bq,"NodeContext/0methodref$comparePortSides$Type",1471),I(1472,1,Oi,Cc),l.ue=function(e,n){return Zdn(u(e,111),u(n,111))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Bq,"NodeContext/1methodref$comparePortContexts$Type",1472),I(159,22,{3:1,35:1,22:1,159:1},uh);var npe,rpe,ipe,spe,ape,ope,cpe,upe,lpe,hpe,fpe,dpe,gpe,ppe,bpe,vpe,wpe,mpe,ype,xpe,kpe,Put,Epe=jr(Bq,"NodeLabelLocation",159,Hr,Jit,dZe),Tpe;I(111,1,{111:1},Boe),l.a=!1,P(Bq,"PortContext",111),I(1476,1,Un,ga),l.td=function(e){EHt(u(e,306))},P(FD,Ife,1476),I(1477,1,ui,Ma),l.Mb=function(e){return!!u(e,111).c},P(FD,Dfe,1477),I(1478,1,Un,Ha),l.td=function(e){EHt(u(e,111).c)},P(FD,"LabelPlacer/lambda$2$Type",1478);var t7t;I(1475,1,Un,_c),l.td=function(e){Bm(),iKe(u(e,111))},P(FD,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),I(790,1,Un,bvt),l.td=function(e){bYe(this.b,this.c,this.a,u(e,181))},l.a=!1,l.c=!1,P(FD,"NodeLabelCellCreator/lambda$0$Type",790),I(1474,1,Un,wn),l.td=function(e){oKe(this.a,u(e,181))},P(FD,"PortContextCreator/lambda$0$Type",1474);var ZH;I(1829,1,{},ov),P(PE,"GreedyRectangleStripOverlapRemover",1829),I(1830,1,Oi,Ll),l.ue=function(e,n){return KXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),I(1786,1,{},eqt),l.a=5,l.e=0,P(PE,"RectangleStripOverlapRemover",1786),I(1787,1,Oi,Z1),l.ue=function(e,n){return YXe(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),I(1789,1,Oi,Fd),l.ue=function(e,n){return men(u(e,222),u(n,222))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(PE,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),I(406,22,{3:1,35:1,22:1,406:1},zR);var sO,Fut,But,aO,Cpe=jr(PE,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Hr,Sin,gZe),_pe;I(222,1,{222:1},Dnt),P(PE,"RectangleStripOverlapRemover/RectangleNode",222),I(1788,1,Un,gr),l.td=function(e){Efn(this.a,u(e,222))},P(PE,"RectangleStripOverlapRemover/lambda$1$Type",1788),I(1304,1,Oi,J1),l.ue=function(e,n){return Lyn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),I(1307,1,{},Bd),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),I(1308,1,ui,E0),l.Mb=function(e){return u(e,323).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),I(1309,1,ui,Bi),l.Mb=function(e){return u(e,323).a},P(md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),I(1302,1,Oi,on),l.ue=function(e,n){return uwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),I(1305,1,{},Jl),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),I(767,1,Oi,kr),l.ue=function(e,n){return hcn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinNumOfExtensionsComparator",767),I(1300,1,Oi,Ei),l.ue=function(e,n){return yon(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinPerimeterComparator",1300),I(1301,1,Oi,Jo),l.ue=function(e,n){return Xhn(u(e,321),u(n,321))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),I(1303,1,Oi,vc),l.ue=function(e,n){return Dwn(u(e,167),u(n,167))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),I(1306,1,{},tf),l.Kb=function(e){return u(e,324).a},P(md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),I(777,1,{},Ebt),l.Ce=function(e,n){return Ein(this,u(e,46),u(n,167))},P(md,"SuccessorCombination",777),I(644,1,{},Oc),l.Ce=function(e,n){var r;return fpn((r=u(e,46),u(n,167),r))},P(md,"SuccessorJitter",644),I(643,1,{},ef),l.Ce=function(e,n){var r;return tvn((r=u(e,46),u(n,167),r))},P(md,"SuccessorLineByLine",643),I(568,1,{},nf),l.Ce=function(e,n){var r;return dbn((r=u(e,46),u(n,167),r))},P(md,"SuccessorManhattan",568),I(1356,1,{},Xi),l.Ce=function(e,n){var r;return T2n((r=u(e,46),u(n,167),r))},P(md,"SuccessorMaxNormWindingInMathPosSense",1356),I(400,1,{},fr),l.Ce=function(e,n){return hwt(this,e,n)},l.c=!1,l.d=!1,l.e=!1,l.f=!1,P(md,"SuccessorQuadrantsGeneric",400),I(1357,1,{},Es),l.Kb=function(e){return u(e,324).a},P(md,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),I(323,22,{3:1,35:1,22:1,323:1},$R),l.a=!1;var oO,cO,uO,lO,Spe=jr(jq,Qxt,323,Hr,Min,pZe),Ape;I(1298,1,{}),l.Ib=function(){var e,n,r,s,o,h;for(r=" ",e=de(0),o=0;o=0?"b"+e+"["+Mrt(this.a)+"]":"b["+Mrt(this.a)+"]"):"b_"+Iv(this)},P(RD,"FBendpoint",559),I(282,134,{3:1,282:1,94:1,134:1},RWt),l.Ib=function(){return Mrt(this)},P(RD,"FEdge",282),I(231,134,{3:1,231:1,94:1,134:1},_$);var cxn=P(RD,"FGraph",231);I(447,357,{3:1,447:1,357:1,94:1,134:1},zZt),l.Ib=function(){return this.b==null||this.b.length==0?"l["+Mrt(this.a)+"]":"l_"+this.b},P(RD,"FLabel",447),I(144,357,{3:1,144:1,357:1,94:1,134:1},QYt),l.Ib=function(){return qwt(this)},l.b=0,P(RD,"FNode",144),I(2003,1,{}),l.bf=function(e){J5t(this,e)},l.cf=function(){yse(this)},l.d=0,P(o6t,"AbstractForceModel",2003),I(631,2003,{631:1},Mne),l.af=function(e,n){var r,s,o,h,d;return boe(this.f,e,n),o=na(nc(n.d),e.d),d=b.Math.sqrt(o.a*o.a+o.b*o.b),s=b.Math.max(0,d-AC(e.e)/2-AC(n.e)/2),r=are(this.e,e,n),r>0?h=-ben(s,this.c)*r:h=cQe(s,this.b)*u(Q(e,(Zf(),t7)),19).a,ud(o,h/d),o},l.bf=function(e){J5t(this,e),this.a=u(Q(e,(Zf(),iG)),19).a,this.c=Xt(ye(Q(e,sG))),this.b=Xt(ye(Q(e,Gut)))},l.df=function(e){return e0&&(h-=yKe(s,this.a)*r),ud(o,h*this.b/d),o},l.bf=function(e){var n,r,s,o,h,d,w;for(J5t(this,e),this.b=Xt(ye(Q(e,(Zf(),Vut)))),this.c=this.b/u(Q(e,iG),19).a,s=e.e.c.length,h=0,o=0,w=new S(e.e);w.a0},l.a=0,l.b=0,l.c=0,P(o6t,"FruchtermanReingoldModel",632),I(849,1,Ih,DJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qq),""),"Force Model"),"Determines the model for force calculation."),u7t),(jg(),cs)),l7t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,c6t),""),"Iterations"),"The number of iterations on the force model."),de(300)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,u6t),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Iot),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),yd),Do),ca),un(qn)))),aa(e,Iot,qq,Kpe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Dot),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),Do),ca),un(qn)))),aa(e,Dot,qq,Vpe),vhe((new d9,e))};var qpe,Hpe,u7t,Gpe,Vpe,Upe,Wpe,Kpe;P(N_,"ForceMetaDataProvider",849),I(424,22,{3:1,35:1,22:1,424:1},Sbt);var Hut,rG,l7t=jr(N_,"ForceModelStrategy",424,Hr,nrn,wZe),Ype;I(988,1,Ih,d9),l.Qe=function(e){vhe(e)};var Xpe,Qpe,h7t,iG,f7t,Zpe,Jpe,tbe,d7t,ebe,g7t,p7t,nbe,t7,rbe,Gut,b7t,ibe,sbe,sG,Vut;P(N_,"ForceOptions",988),I(989,1,{},B5),l.$e=function(){var e;return e=new Lpt,e},l._e=function(e){},P(N_,"ForceOptions/ForceFactory",989);var dO,lS,C6,aG;I(850,1,Ih,OJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,h6t),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Fn(),!1)),(jg(),Aa)),Bs),un((Xf(),Js))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,f6t),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),Do),ca),ji(qn,ct(ot(Qg,1),ae,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,d6t),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),v7t),cs),T7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,g6t),""),"Stress Epsilon"),"Termination criterion for the iterative process."),yd),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,p6t),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),de(vi)),gc),ja),un(qn)))),ehe((new NJ,e))};var abe,obe,v7t,cbe,ube,lbe;P(N_,"StressMetaDataProvider",850),I(992,1,Ih,NJ),l.Qe=function(e){ehe(e)};var oG,w7t,m7t,y7t,x7t,k7t,hbe,fbe,dbe,gbe,E7t,pbe;P(N_,"StressOptions",992),I(993,1,{},l1),l.$e=function(){var e;return e=new jWt,e},l._e=function(e){},P(N_,"StressOptions/StressFactory",993),I(1128,209,E2,jWt),l.Ze=function(e,n){var r,s,o,h,d;for(wr(n,Gfe,1),je(Re(qe(e,(JI(),x7t))))?je(Re(qe(e,E7t)))||u$((r=new rr((Im(),new Sm(e))),r)):kce(new Lpt,e,Rc(n,1)),o=Zne(e),s=hle(this.a,o),d=s.Kc();d.Ob();)h=u(d.Pb(),231),!(h.e.c.length<=1)&&(Syn(this.b,h),sbn(this.b),mu(h.d,new td));o=The(s),xhe(o),or(n)},P(Vq,"StressLayoutProvider",1128),I(1129,1,Un,td),l.td=function(e){axt(u(e,447))},P(Vq,"StressLayoutProvider/lambda$0$Type",1129),I(990,1,{},Kzt),l.c=0,l.e=0,l.g=0,P(Vq,"StressMajorization",990),I(379,22,{3:1,35:1,22:1,379:1},met);var Uut,Wut,Kut,T7t=jr(Vq,"StressMajorization/Dimension",379,Hr,Mrn,mZe),bbe;I(991,1,Oi,Ci),l.ue=function(e,n){return YQe(this.a,u(e,144),u(n,144))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Vq,"StressMajorization/lambda$0$Type",991),I(1229,1,{},tZt),P(m6,"ElkLayered",1229),I(1230,1,Un,ed),l.td=function(e){apn(u(e,37))},P(m6,"ElkLayered/lambda$0$Type",1230),I(1231,1,Un,hi),l.td=function(e){XQe(this.a,u(e,37))},P(m6,"ElkLayered/lambda$1$Type",1231),I(1263,1,{},_Ut);var vbe,wbe,mbe;P(m6,"GraphConfigurator",1263),I(759,1,Un,gs),l.td=function(e){Aae(this.a,u(e,10))},P(m6,"GraphConfigurator/lambda$0$Type",759),I(760,1,{},R5),l.Kb=function(e){return r4t(),new Tn(null,new _n(u(e,29).a,16))},P(m6,"GraphConfigurator/lambda$1$Type",760),I(761,1,Un,qi),l.td=function(e){Aae(this.a,u(e,10))},P(m6,"GraphConfigurator/lambda$2$Type",761),I(1127,209,E2,Qzt),l.Ze=function(e,n){var r;r=Kmn(new rqt,e),Gt(qe(e,(Te(),jy)))===Gt(($0(),Zg))?_ln(this.a,r,n):kpn(this.a,r,n),bhe(new FJ,r)},P(m6,"LayeredLayoutProvider",1127),I(356,22,{3:1,35:1,22:1,356:1},xM);var Ad,lb,ou,qc,Io,C7t=jr(m6,"LayeredPhases",356,Hr,dsn,yZe),ybe;I(1651,1,{},jee),l.i=0;var xbe;P(zD,"ComponentsToCGraphTransformer",1651);var kbe;I(1652,1,{},uv),l.ef=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.min(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},P(zD,"ComponentsToCGraphTransformer/1",1652),I(81,1,{81:1}),l.i=0,l.k=!0,l.o=Ts;var Yut=P(B_,"CNode",81);I(460,81,{460:1,81:1},A2t,L3t),l.Ib=function(){return""},P(zD,"ComponentsToCGraphTransformer/CRectNode",460),I(1623,1,{},j5);var Xut,Qut;P(zD,"OneDimensionalComponentsCompaction",1623),I(1624,1,{},pp),l.Kb=function(e){return xrn(u(e,46))},l.Fb=function(e){return this===e},P(zD,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),I(1625,1,{},$5),l.Kb=function(e){return Nln(u(e,46))},l.Fb=function(e){return this===e},P(zD,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),I(1654,1,{},XYt),P(B_,"CGraph",1654),I(189,1,{189:1},Xit),l.b=0,l.c=0,l.e=0,l.g=!0,l.i=Ts,P(B_,"CGroup",189),I(1653,1,{},wL),l.ef=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},l.ff=function(e,n){return b.Math.max(e.a!=null?Xt(e.a):e.c.i,n.a!=null?Xt(n.a):n.c.i)},P(B_,wfe,1653),I(1655,1,{},Loe),l.d=!1;var Ebe,Zut=P(B_,xfe,1655);I(1656,1,{},bl),l.Kb=function(e){return gbt(),Fn(),u(u(e,46).a,81).d.e!=0},l.Fb=function(e){return this===e},P(B_,kfe,1656),I(823,1,{},Rvt),l.a=!1,l.b=!1,l.c=!1,l.d=!1,P(B_,Efe,823),I(1825,1,{},gYt),P(Uq,Tfe,1825);var gO=Yi(C2,bfe);I(1826,1,{369:1},VXt),l.Ke=function(e){pvn(this,u(e,466))},P(Uq,Cfe,1826),I(1827,1,Oi,WP),l.ue=function(e,n){return pnn(u(e,81),u(n,81))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Uq,_fe,1827),I(466,1,{466:1},Lbt),l.a=!1,P(Uq,Sfe,466),I(1828,1,Oi,Sc),l.ue=function(e,n){return S1n(u(e,466),u(n,466))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Uq,Afe,1828),I(140,1,{140:1},a8,Ovt),l.Fb=function(e){var n;return e==null||uxn!=sl(e)?!1:(n=u(e,140),Pc(this.c,n.c)&&Pc(this.d,n.d))},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[this.c,this.d]))},l.Ib=function(){return"("+this.c+Ka+this.d+(this.a?"cx":"")+this.b+")"},l.a=!0,l.c=0,l.d=0;var uxn=P(C2,"Point",140);I(405,22,{3:1,35:1,22:1,405:1},qR);var _w,Iy,j4,Dy,Tbe=jr(C2,"Point/Quadrant",405,Hr,Iin,xZe),Cbe;I(1642,1,{},Zzt),l.b=null,l.c=null,l.d=null,l.e=null,l.f=null;var _be,Sbe,Abe,Lbe,Mbe;P(C2,"RectilinearConvexHull",1642),I(574,1,{369:1},Bz),l.Ke=function(e){gan(this,u(e,140))},l.b=0;var _7t;P(C2,"RectilinearConvexHull/MaximalElementsEventHandler",574),I(1644,1,Oi,gm),l.ue=function(e,n){return inn(ye(e),ye(n))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),I(1643,1,{369:1},cee),l.Ke=function(e){A2n(this,u(e,140))},l.a=0,l.b=null,l.c=null,l.d=null,l.e=null,P(C2,"RectilinearConvexHull/RectangleEventHandler",1643),I(1645,1,Oi,gg),l.ue=function(e,n){return oin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$0$Type",1645),I(1646,1,Oi,k3),l.ue=function(e,n){return cin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$1$Type",1646),I(1647,1,Oi,QK),l.ue=function(e,n){return lin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$2$Type",1647),I(1648,1,Oi,$b),l.ue=function(e,n){return uin(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$3$Type",1648),I(1649,1,Oi,ZK),l.ue=function(e,n){return f0n(u(e,140),u(n,140))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(C2,"RectilinearConvexHull/lambda$4$Type",1649),I(1650,1,{},kQt),P(C2,"Scanline",1650),I(2005,1,{}),P(xd,"AbstractGraphPlacer",2005),I(325,1,{325:1},gWt),l.mf=function(e){return this.nf(e)?(ln(this.b,u(Q(e,(se(),Ny)),21),e),!0):!1},l.nf=function(e){var n,r,s,o;for(n=u(Q(e,(se(),Ny)),21),o=u(Ai(Ni,n),21),s=o.Kc();s.Ob();)if(r=u(s.Pb(),21),!u(Ai(this.b,r),15).dc())return!1;return!0};var Ni;P(xd,"ComponentGroup",325),I(765,2005,{},Opt),l.of=function(e){var n,r;for(r=new S(this.a);r.aV&&(ce=0,Se+=H+o,H=0),gt=d.c,w_(d,ce+gt.a,Se+gt.b),Gf(gt),r=b.Math.max(r,ce+_t.a),H=b.Math.max(H,_t.b),ce+=_t.a+o;if(n.f.a=r,n.f.b=Se+H,je(Re(Q(h,WG)))){for(s=new IT,_xt(s,e,o),F=e.Kc();F.Ob();)M=u(F.Pb(),37),Li(Gf(M.c),s.e);Li(Gf(n.f),s.a)}_mt(n,e)},P(xd,"SimpleRowGraphPlacer",1291),I(1292,1,Oi,Bf),l.ue=function(e,n){return lcn(u(e,37),u(n,37))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(xd,"SimpleRowGraphPlacer/1",1292);var Dbe;I(1262,1,wd,pm),l.Lb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),_o)),74),!!n&&n.b!=0},l.Fb=function(e){return this===e},l.Mb=function(e){var n;return n=u(Q(u(e,243).b,(Te(),_o)),74),!!n&&n.b!=0},P(Wq,"CompoundGraphPostprocessor/1",1262),I(1261,1,as,iqt),l.pf=function(e,n){rse(this,u(e,37),n)},P(Wq,"CompoundGraphPreprocessor",1261),I(441,1,{441:1},Gre),l.c=!1,P(Wq,"CompoundGraphPreprocessor/ExternalPort",441),I(243,1,{243:1},Tj),l.Ib=function(){return snt(this.c)+":"+Coe(this.b)},P(Wq,"CrossHierarchyEdge",243),I(763,1,Oi,Si),l.ue=function(e,n){return Jfn(this,u(e,243),u(n,243))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Wq,"CrossHierarchyEdgeComparator",763),I(299,134,{3:1,299:1,94:1,134:1}),l.p=0,P(Jc,"LGraphElement",299),I(17,299,{3:1,17:1,299:1,94:1,134:1},zv),l.Ib=function(){return Coe(this)};var tlt=P(Jc,"LEdge",17);I(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},Kmt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.b)},l.Ib=function(){return this.b.c.length==0?"G-unlayered"+Qp(this.a):this.a.c.length==0?"G-layered"+Qp(this.b):"G[layerless"+Qp(this.a)+", layers"+Qp(this.b)+"]"};var Obe=P(Jc,"LGraph",37),Nbe;I(657,1,{}),l.qf=function(){return this.e.n},l.We=function(e){return Q(this.e,e)},l.rf=function(){return this.e.o},l.sf=function(){return this.e.p},l.Xe=function(e){return Vs(this.e,e)},l.tf=function(e){this.e.n.a=e.a,this.e.n.b=e.b},l.uf=function(e){this.e.o.a=e.a,this.e.o.b=e.b},l.vf=function(e){this.e.p=e},P(Jc,"LGraphAdapters/AbstractLShapeAdapter",657),I(577,1,{839:1},Ui),l.wf=function(){var e,n;if(!this.b)for(this.b=Hd(this.a.b.c.length),n=new S(this.a.b);n.a0&&Mre((Rr(n-1,e.length),e.charCodeAt(n-1)),Xfe);)--n;if(h> ",e),Wz(r)),Vr(hc((e.a+="[",e),r.i),"]")),e.a},l.c=!0,l.d=!1;var I7t,D7t,O7t,N7t,P7t,F7t,Fbe=P(Jc,"LPort",11);I(397,1,t0,Ys),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.e),new zs(e)},P(Jc,"LPort/1",397),I(1290,1,ra,zs),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(J(this.a),17).c},l.Ob=function(){return Vo(this.a)},l.Qb=function(){_C(this.a)},P(Jc,"LPort/1/1",1290),I(359,1,t0,Er),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=new S(this.a.g),new Qt(e)},P(Jc,"LPort/2",359),I(762,1,ra,Qt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(J(this.a),17).d},l.Ob=function(){return Vo(this.a)},l.Qb=function(){_C(this.a)},P(Jc,"LPort/2/1",762),I(1283,1,t0,VGt),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S1(this)},P(Jc,"LPort/CombineIter",1283),I(201,1,ra,S1),l.Nb=function(e){pa(this,e)},l.Qb=function(){pHt()},l.Ob=function(){return pC(this)},l.Pb=function(){return Vo(this.a)?J(this.a):J(this.b)},P(Jc,"LPort/CombineIter/1",201),I(1285,1,wd,bp),l.Lb=function(e){return _Yt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).e.c.length!=0},P(Jc,"LPort/lambda$0$Type",1285),I(1284,1,wd,bm),l.Lb=function(e){return SYt(e)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).g.c.length!=0},P(Jc,"LPort/lambda$1$Type",1284),I(1286,1,wd,tY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Nn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Nn)},P(Jc,"LPort/lambda$2$Type",1286),I(1287,1,wd,zb),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Hn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Hn)},P(Jc,"LPort/lambda$3$Type",1287),I(1288,1,wd,eY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),mr)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),mr)},P(Jc,"LPort/lambda$4$Type",1288),I(1289,1,wd,nY),l.Lb=function(e){return Bu(),u(e,11).j==(be(),Bn)},l.Fb=function(e){return this===e},l.Mb=function(e){return Bu(),u(e,11).j==(be(),Bn)},P(Jc,"LPort/lambda$5$Type",1289),I(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},Ch),l.Jc=function(e){va(this,e)},l.Kc=function(){return new S(this.a)},l.Ib=function(){return"L_"+Ro(this.b.b,this,0)+Qp(this.a)},P(Jc,"Layer",29),I(1342,1,{},rqt),P(qg,t1e,1342),I(1346,1,{},z5),l.Kb=function(e){return Mo(u(e,82))},P(qg,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),I(1349,1,{},DT),l.Kb=function(e){return Mo(u(e,82))},P(qg,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),I(1343,1,Un,jn),l.td=function(e){joe(this.a,u(e,118))},P(qg,e1e,1343),I(1344,1,Un,_r),l.td=function(e){joe(this.a,u(e,118))},P(qg,n1e,1344),I(1345,1,{},XP),l.Kb=function(e){return new Tn(null,new _n(Jen(u(e,79)),16))},P(qg,r1e,1345),I(1347,1,ui,ir),l.Mb=function(e){return tXe(this.a,u(e,33))},P(qg,i1e,1347),I(1348,1,{},bk),l.Kb=function(e){return new Tn(null,new _n(tnn(u(e,79)),16))},P(qg,"ElkGraphImporter/lambda$5$Type",1348),I(1350,1,ui,sr),l.Mb=function(e){return eXe(this.a,u(e,33))},P(qg,"ElkGraphImporter/lambda$7$Type",1350),I(1351,1,ui,rY),l.Mb=function(e){return vnn(u(e,79))},P(qg,"ElkGraphImporter/lambda$8$Type",1351),I(1278,1,{},FJ);var Bbe;P(qg,"ElkGraphLayoutTransferrer",1278),I(1279,1,ui,Ia),l.Mb=function(e){return HQe(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),I(1280,1,Un,$r),l.td=function(e){vM(),ue(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),I(1281,1,ui,Ki),l.Mb=function(e){return AQe(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),I(1282,1,Un,Po),l.td=function(e){vM(),ue(this.a,u(e,17))},P(qg,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),I(1485,1,as,vk),l.pf=function(e,n){Mon(u(e,37),n)},P($n,"CommentNodeMarginCalculator",1485),I(1486,1,{},iY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"CommentNodeMarginCalculator/lambda$0$Type",1486),I(1487,1,Un,sY),l.td=function(e){lyn(u(e,10))},P($n,"CommentNodeMarginCalculator/lambda$1$Type",1487),I(1488,1,as,aY),l.pf=function(e,n){Evn(u(e,37),n)},P($n,"CommentPostprocessor",1488),I(1489,1,as,oY),l.pf=function(e,n){M4n(u(e,37),n)},P($n,"CommentPreprocessor",1489),I(1490,1,as,cY),l.pf=function(e,n){Ubn(u(e,37),n)},P($n,"ConstraintsPostprocessor",1490),I(1491,1,as,uY),l.pf=function(e,n){Jon(u(e,37),n)},P($n,"EdgeAndLayerConstraintEdgeReverser",1491),I(1492,1,as,lY),l.pf=function(e,n){zln(u(e,37),n)},P($n,"EndLabelPostprocessor",1492),I(1493,1,{},hY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelPostprocessor/lambda$0$Type",1493),I(1494,1,ui,fY),l.Mb=function(e){return Pnn(u(e,10))},P($n,"EndLabelPostprocessor/lambda$1$Type",1494),I(1495,1,Un,dY),l.td=function(e){A1n(u(e,10))},P($n,"EndLabelPostprocessor/lambda$2$Type",1495),I(1496,1,as,gY),l.pf=function(e,n){vgn(u(e,37),n)},P($n,"EndLabelPreprocessor",1496),I(1497,1,{},yL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelPreprocessor/lambda$0$Type",1497),I(1498,1,Un,vKt),l.td=function(e){vYe(this.a,this.b,this.c,u(e,10))},l.a=0,l.b=0,l.c=!1,P($n,"EndLabelPreprocessor/lambda$1$Type",1498),I(1499,1,ui,pY),l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),S7))},P($n,"EndLabelPreprocessor/lambda$2$Type",1499),I(1500,1,Un,Nc),l.td=function(e){ni(this.a,u(e,70))},P($n,"EndLabelPreprocessor/lambda$3$Type",1500),I(1501,1,ui,bY),l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),Yy))},P($n,"EndLabelPreprocessor/lambda$4$Type",1501),I(1502,1,Un,Za),l.td=function(e){ni(this.a,u(e,70))},P($n,"EndLabelPreprocessor/lambda$5$Type",1502),I(1551,1,as,PJ),l.pf=function(e,n){Yun(u(e,37),n)};var Rbe;P($n,"EndLabelSorter",1551),I(1552,1,Oi,OT),l.ue=function(e,n){return Chn(u(e,456),u(n,456))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"EndLabelSorter/1",1552),I(456,1,{456:1},BXt),P($n,"EndLabelSorter/LabelGroup",456),I(1553,1,{},QP),l.Kb=function(e){return wM(),new Tn(null,new _n(u(e,29).a,16))},P($n,"EndLabelSorter/lambda$0$Type",1553),I(1554,1,ui,q5),l.Mb=function(e){return wM(),u(e,10).k==(Gn(),Ds)},P($n,"EndLabelSorter/lambda$1$Type",1554),I(1555,1,Un,vY),l.td=function(e){A0n(u(e,10))},P($n,"EndLabelSorter/lambda$2$Type",1555),I(1556,1,ui,wY),l.Mb=function(e){return wM(),Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),Yy))},P($n,"EndLabelSorter/lambda$3$Type",1556),I(1557,1,ui,mY),l.Mb=function(e){return wM(),Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),S7))},P($n,"EndLabelSorter/lambda$4$Type",1557),I(1503,1,as,yY),l.pf=function(e,n){xyn(this,u(e,37))},l.b=0,l.c=0,P($n,"FinalSplineBendpointsCalculator",1503),I(1504,1,{},xY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),I(1505,1,{},NT),l.Kb=function(e){return new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P($n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),I(1506,1,ui,xL),l.Mb=function(e){return!Va(u(e,17))},P($n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),I(1507,1,ui,ZP),l.Mb=function(e){return Vs(u(e,17),(se(),N2))},P($n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),I(1508,1,Un,mc),l.td=function(e){Nwn(this.a,u(e,128))},P($n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),I(1509,1,Un,E3),l.td=function(e){Bst(u(e,17).a)},P($n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),I(792,1,as,Ea),l.pf=function(e,n){g3n(this,u(e,37),n)},P($n,"GraphTransformer",792),I(511,22,{3:1,35:1,22:1,511:1},Abt);var nlt,pO,jbe=jr($n,"GraphTransformer/Mode",511,Hr,rrn,PJe),$be;I(1510,1,as,T3),l.pf=function(e,n){G2n(u(e,37),n)},P($n,"HierarchicalNodeResizingProcessor",1510),I(1511,1,as,kY),l.pf=function(e,n){Con(u(e,37),n)},P($n,"HierarchicalPortConstraintProcessor",1511),I(1512,1,Oi,rf),l.ue=function(e,n){return Fhn(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),I(1513,1,as,H5),l.pf=function(e,n){Vmn(u(e,37),n)},P($n,"HierarchicalPortDummySizeProcessor",1513),I(1514,1,as,EY),l.pf=function(e,n){qvn(this,u(e,37),n)},l.a=0,P($n,"HierarchicalPortOrthogonalEdgeRouter",1514),I(1515,1,Oi,wk),l.ue=function(e,n){return WXe(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),I(1516,1,Oi,Rd),l.ue=function(e,n){return oan(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),I(1517,1,as,TY),l.pf=function(e,n){d0n(u(e,37),n)},P($n,"HierarchicalPortPositionProcessor",1517),I(1518,1,as,BJ),l.pf=function(e,n){c5n(this,u(e,37))},l.a=0,l.c=0;var cG,uG;P($n,"HighDegreeNodeLayeringProcessor",1518),I(571,1,{571:1},CY),l.b=-1,l.d=-1,P($n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),I(1519,1,{},_Y),l.Kb=function(e){return GM(),jo(u(e,10))},l.Fb=function(e){return this===e},P($n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),I(1520,1,{},SY),l.Kb=function(e){return GM(),Ms(u(e,10))},l.Fb=function(e){return this===e},P($n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),I(1526,1,as,PT),l.pf=function(e,n){mmn(this,u(e,37),n)},P($n,"HyperedgeDummyMerger",1526),I(793,1,{},wvt),l.a=!1,l.b=!1,l.c=!1,P($n,"HyperedgeDummyMerger/MergeState",793),I(1527,1,{},kL),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"HyperedgeDummyMerger/lambda$0$Type",1527),I(1528,1,{},JP),l.Kb=function(e){return new Tn(null,new _n(u(e,10).j,16))},P($n,"HyperedgeDummyMerger/lambda$1$Type",1528),I(1529,1,Un,EL),l.td=function(e){u(e,11).p=-1},P($n,"HyperedgeDummyMerger/lambda$2$Type",1529),I(1530,1,as,G5),l.pf=function(e,n){vmn(u(e,37),n)},P($n,"HypernodesProcessor",1530),I(1531,1,as,AY),l.pf=function(e,n){wmn(u(e,37),n)},P($n,"InLayerConstraintProcessor",1531),I(1532,1,as,tF),l.pf=function(e,n){Kon(u(e,37),n)},P($n,"InnermostNodeMarginCalculator",1532),I(1533,1,as,eF),l.pf=function(e,n){C4n(this,u(e,37))},l.a=Ts,l.b=Ts,l.c=ss,l.d=ss;var lxn=P($n,"InteractiveExternalPortPositioner",1533);I(1534,1,{},LY),l.Kb=function(e){return u(e,17).d.i},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),I(1535,1,{},Ja),l.Kb=function(e){return XXe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),I(1536,1,{},MY),l.Kb=function(e){return u(e,17).c.i},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),I(1537,1,{},vl),l.Kb=function(e){return QXe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),I(1538,1,{},zf),l.Kb=function(e){return $Qe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),I(1539,1,{},xp),l.Kb=function(e){return zQe(this.a,ye(e))},l.Fb=function(e){return this===e},P($n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),I(77,22,{3:1,35:1,22:1,77:1,234:1},ws),l.Kf=function(){switch(this.g){case 15:return new UX;case 22:return new WX;case 47:return new XX;case 28:case 35:return new C3;case 32:return new vk;case 42:return new aY;case 1:return new oY;case 41:return new cY;case 56:return new Ea((q8(),pO));case 0:return new Ea((q8(),nlt));case 2:return new uY;case 54:return new lY;case 33:return new gY;case 51:return new yY;case 55:return new T3;case 13:return new kY;case 38:return new H5;case 44:return new EY;case 40:return new TY;case 9:return new BJ;case 49:return new rWt;case 37:return new PT;case 43:return new G5;case 27:return new AY;case 30:return new tF;case 3:return new eF;case 18:return new DY;case 29:return new OY;case 5:return new MB;case 50:return new IY;case 34:return new RJ;case 36:return new mk;case 52:return new PJ;case 11:return new vm;case 7:return new $J;case 39:return new yk;case 45:return new BY;case 16:return new FT;case 10:return new nd;case 48:return new CL;case 21:return new xk;case 23:return new eet((Zv(),DS));case 8:return new sF;case 12:return new SL;case 4:return new jY;case 19:return new g9;case 17:return new GY;case 53:return new VY;case 6:return new fF;case 25:return new oqt;case 46:return new YY;case 31:return new zWt;case 14:return new LL;case 26:return new JX;case 20:return new rX;case 24:return new eet((Zv(),dV));default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var B7t,R7t,j7t,$7t,z7t,q7t,H7t,G7t,V7t,U7t,hS,lG,hG,W7t,K7t,Y7t,X7t,Q7t,Z7t,J7t,fS,tTt,eTt,nTt,rTt,iTt,rlt,fG,dG,sTt,gG,pG,bG,e7,n7,r7,aTt,vG,wG,oTt,mG,yG,cTt,uTt,lTt,hTt,xG,ilt,bO,kG,EG,TG,CG,fTt,dTt,gTt,pTt,hxn=jr($n,v6t,77,Hr,Ice,NJe),zbe;I(1540,1,as,DY),l.pf=function(e,n){S4n(u(e,37),n)},P($n,"InvertedPortProcessor",1540),I(1541,1,as,OY),l.pf=function(e,n){Swn(u(e,37),n)},P($n,"LabelAndNodeSizeProcessor",1541),I(1542,1,ui,NY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),I(1543,1,ui,jd),l.Mb=function(e){return u(e,10).k==(Gn(),xs)},P($n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),I(1544,1,Un,wKt),l.td=function(e){wYe(this.b,this.a,this.c,u(e,10))},l.a=!1,l.c=!1,P($n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),I(1545,1,as,MB),l.pf=function(e,n){Q3n(u(e,37),n)};var qbe;P($n,"LabelDummyInserter",1545),I(1546,1,wd,lv),l.Lb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),_7))},l.Fb=function(e){return this===e},l.Mb=function(e){return Gt(Q(u(e,70),(Te(),Md)))===Gt((A1(),_7))},P($n,"LabelDummyInserter/1",1546),I(1547,1,as,IY),l.pf=function(e,n){Jyn(u(e,37),n)},P($n,"LabelDummyRemover",1547),I(1548,1,ui,PY),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),Ult))))},P($n,"LabelDummyRemover/lambda$0$Type",1548),I(1359,1,as,RJ),l.pf=function(e,n){A3n(this,u(e,37),n)},l.a=null;var slt;P($n,"LabelDummySwitcher",1359),I(286,1,{286:1},Lue),l.c=0,l.d=null,l.f=0,P($n,"LabelDummySwitcher/LabelDummyInfo",286),I(1360,1,{},nF),l.Kb=function(e){return Xx(),new Tn(null,new _n(u(e,29).a,16))},P($n,"LabelDummySwitcher/lambda$0$Type",1360),I(1361,1,ui,rF),l.Mb=function(e){return Xx(),u(e,10).k==(Gn(),Sl)},P($n,"LabelDummySwitcher/lambda$1$Type",1361),I(1362,1,{},mg),l.Kb=function(e){return LQe(this.a,u(e,10))},P($n,"LabelDummySwitcher/lambda$2$Type",1362),I(1363,1,Un,sd),l.td=function(e){Aen(this.a,u(e,286))},P($n,"LabelDummySwitcher/lambda$3$Type",1363),I(1364,1,Oi,FY),l.ue=function(e,n){return nen(u(e,286),u(n,286))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"LabelDummySwitcher/lambda$4$Type",1364),I(791,1,as,C3),l.pf=function(e,n){jsn(u(e,37),n)},P($n,"LabelManagementProcessor",791),I(1549,1,as,mk),l.pf=function(e,n){lvn(u(e,37),n)},P($n,"LabelSideSelector",1549),I(1550,1,ui,TL),l.Mb=function(e){return je(Re(Q(u(e,70),(Te(),Ult))))},P($n,"LabelSideSelector/lambda$0$Type",1550),I(1558,1,as,vm),l.pf=function(e,n){Umn(u(e,37),n)},P($n,"LayerConstraintPostprocessor",1558),I(1559,1,as,$J),l.pf=function(e,n){abn(u(e,37),n)};var bTt;P($n,"LayerConstraintPreprocessor",1559),I(360,22,{3:1,35:1,22:1,360:1},HR);var vO,_G,SG,alt,Hbe=jr($n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Hr,Din,CZe),Gbe;I(1560,1,as,yk),l.pf=function(e,n){Xyn(u(e,37),n)},P($n,"LayerSizeAndGraphHeightCalculator",1560),I(1561,1,as,BY),l.pf=function(e,n){Jbn(u(e,37),n)},P($n,"LongEdgeJoiner",1561),I(1562,1,as,FT),l.pf=function(e,n){Iyn(u(e,37),n)},P($n,"LongEdgeSplitter",1562),I(1563,1,as,nd),l.pf=function(e,n){I3n(this,u(e,37),n)},l.d=0,l.e=0,l.i=0,l.j=0,l.k=0,l.n=0,P($n,"NodePromotion",1563),I(1564,1,{},iF),l.Kb=function(e){return u(e,46),Fn(),!0},l.Fb=function(e){return this===e},P($n,"NodePromotion/lambda$0$Type",1564),I(1565,1,{},kp),l.Kb=function(e){return Yen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,P($n,"NodePromotion/lambda$1$Type",1565),I(1566,1,{},qf),l.Kb=function(e){return Xen(this.a,u(e,46))},l.Fb=function(e){return this===e},l.a=0,P($n,"NodePromotion/lambda$2$Type",1566),I(1567,1,as,CL),l.pf=function(e,n){e5n(u(e,37),n)},P($n,"NorthSouthPortPostprocessor",1567),I(1568,1,as,xk),l.pf=function(e,n){$4n(u(e,37),n)},P($n,"NorthSouthPortPreprocessor",1568),I(1569,1,Oi,_L),l.ue=function(e,n){return pcn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),I(1570,1,as,sF),l.pf=function(e,n){rmn(u(e,37),n)},P($n,"PartitionMidprocessor",1570),I(1571,1,ui,RY),l.Mb=function(e){return Vs(u(e,10),(Te(),b7))},P($n,"PartitionMidprocessor/lambda$0$Type",1571),I(1572,1,Un,bv),l.td=function(e){wnn(this.a,u(e,10))},P($n,"PartitionMidprocessor/lambda$1$Type",1572),I(1573,1,as,SL),l.pf=function(e,n){m2n(u(e,37),n)},P($n,"PartitionPostprocessor",1573),I(1574,1,as,jY),l.pf=function(e,n){Lpn(u(e,37),n)},P($n,"PartitionPreprocessor",1574),I(1575,1,ui,$Y),l.Mb=function(e){return Vs(u(e,10),(Te(),b7))},P($n,"PartitionPreprocessor/lambda$0$Type",1575),I(1576,1,{},aF),l.Kb=function(e){return new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P($n,"PartitionPreprocessor/lambda$1$Type",1576),I(1577,1,ui,V5),l.Mb=function(e){return khn(u(e,17))},P($n,"PartitionPreprocessor/lambda$2$Type",1577),I(1578,1,Un,oF),l.td=function(e){Ccn(u(e,17))},P($n,"PartitionPreprocessor/lambda$3$Type",1578),I(1579,1,as,g9),l.pf=function(e,n){zwn(u(e,37),n)};var vTt,Vbe,Ube,Wbe,wTt,mTt;P($n,"PortListSorter",1579),I(1580,1,{},U5),l.Kb=function(e){return J8(),u(e,11).e},P($n,"PortListSorter/lambda$0$Type",1580),I(1581,1,{},zY),l.Kb=function(e){return J8(),u(e,11).g},P($n,"PortListSorter/lambda$1$Type",1581),I(1582,1,Oi,AL),l.ue=function(e,n){return HZt(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$2$Type",1582),I(1583,1,Oi,qY),l.ue=function(e,n){return Ufn(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$3$Type",1583),I(1584,1,Oi,HY),l.ue=function(e,n){return Zue(u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"PortListSorter/lambda$4$Type",1584),I(1585,1,as,GY),l.pf=function(e,n){tbn(u(e,37),n)},P($n,"PortSideProcessor",1585),I(1586,1,as,VY),l.pf=function(e,n){ewn(u(e,37),n)},P($n,"ReversedEdgeRestorer",1586),I(1591,1,as,oqt),l.pf=function(e,n){Mfn(this,u(e,37),n)},P($n,"SelfLoopPortRestorer",1591),I(1592,1,{},cF),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopPortRestorer/lambda$0$Type",1592),I(1593,1,ui,UY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopPortRestorer/lambda$1$Type",1593),I(1594,1,ui,WY),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopPortRestorer/lambda$2$Type",1594),I(1595,1,{},KY),l.Kb=function(e){return u(Q(u(e,10),(se(),d7)),403)},P($n,"SelfLoopPortRestorer/lambda$3$Type",1595),I(1596,1,Un,_m),l.td=function(e){j0n(this.a,u(e,403))},P($n,"SelfLoopPortRestorer/lambda$4$Type",1596),I(794,1,Un,uF),l.td=function(e){tgn(u(e,101))},P($n,"SelfLoopPortRestorer/lambda$5$Type",794),I(1597,1,as,YY),l.pf=function(e,n){jhn(u(e,37),n)},P($n,"SelfLoopPostProcessor",1597),I(1598,1,{},XY),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopPostProcessor/lambda$0$Type",1598),I(1599,1,ui,QY),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopPostProcessor/lambda$1$Type",1599),I(1600,1,ui,lF),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopPostProcessor/lambda$2$Type",1600),I(1601,1,Un,ZY),l.td=function(e){U1n(u(e,10))},P($n,"SelfLoopPostProcessor/lambda$3$Type",1601),I(1602,1,{},JY),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},P($n,"SelfLoopPostProcessor/lambda$4$Type",1602),I(1603,1,Un,gx),l.td=function(e){Pin(this.a,u(e,409))},P($n,"SelfLoopPostProcessor/lambda$5$Type",1603),I(1604,1,ui,hF),l.Mb=function(e){return!!u(e,101).i},P($n,"SelfLoopPostProcessor/lambda$6$Type",1604),I(1605,1,Un,O3),l.td=function(e){mKe(this.a,u(e,101))},P($n,"SelfLoopPostProcessor/lambda$7$Type",1605),I(1587,1,as,fF),l.pf=function(e,n){Dbn(u(e,37),n)},P($n,"SelfLoopPreProcessor",1587),I(1588,1,{},dF),l.Kb=function(e){return new Tn(null,new _n(u(e,101).f,1))},P($n,"SelfLoopPreProcessor/lambda$0$Type",1588),I(1589,1,{},tX),l.Kb=function(e){return u(e,409).a},P($n,"SelfLoopPreProcessor/lambda$1$Type",1589),I(1590,1,Un,eX),l.td=function(e){TXe(u(e,17))},P($n,"SelfLoopPreProcessor/lambda$2$Type",1590),I(1606,1,as,zWt),l.pf=function(e,n){L0n(this,u(e,37),n)},P($n,"SelfLoopRouter",1606),I(1607,1,{},kk),l.Kb=function(e){return new Tn(null,new _n(u(e,29).a,16))},P($n,"SelfLoopRouter/lambda$0$Type",1607),I(1608,1,ui,W5),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SelfLoopRouter/lambda$1$Type",1608),I(1609,1,ui,BT),l.Mb=function(e){return Vs(u(e,10),(se(),d7))},P($n,"SelfLoopRouter/lambda$2$Type",1609),I(1610,1,{},nX),l.Kb=function(e){return u(Q(u(e,10),(se(),d7)),403)},P($n,"SelfLoopRouter/lambda$3$Type",1610),I(1611,1,Un,BGt),l.td=function(e){unn(this.a,this.b,u(e,403))},P($n,"SelfLoopRouter/lambda$4$Type",1611),I(1612,1,as,LL),l.pf=function(e,n){Z2n(u(e,37),n)},P($n,"SemiInteractiveCrossMinProcessor",1612),I(1613,1,ui,RT),l.Mb=function(e){return u(e,10).k==(Gn(),Ds)},P($n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),I(1614,1,ui,ML),l.Mb=function(e){return rYt(u(e,10))._b((Te(),Hy))},P($n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),I(1615,1,Oi,gF),l.ue=function(e,n){return Son(u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),I(1616,1,{},pF),l.Ce=function(e,n){return _nn(u(e,10),u(n,10))},P($n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),I(1618,1,as,rX),l.pf=function(e,n){Wmn(u(e,37),n)},P($n,"SortByInputModelProcessor",1618),I(1619,1,ui,iX),l.Mb=function(e){return u(e,11).g.c.length!=0},P($n,"SortByInputModelProcessor/lambda$0$Type",1619),I(1620,1,Un,px),l.td=function(e){sgn(this.a,u(e,11))},P($n,"SortByInputModelProcessor/lambda$1$Type",1620),I(1693,803,{},Zee),l.Me=function(e){var n,r,s,o;switch(this.c=e,this.a.g){case 2:n=new le,us(Ri(new Tn(null,new _n(this.c.a.b,16)),new mF),new qGt(this,n)),aD(this,new vF),mu(n,new aX),n.c=Pt(Xn,Ie,1,0,5,1),us(Ri(new Tn(null,new _n(this.c.a.b,16)),new oX),new N3(n)),aD(this,new cX),mu(n,new uX),n.c=Pt(Xn,Ie,1,0,5,1),r=xUt(hne(Jj(new Tn(null,new _n(this.c.a.b,16)),new $d(this))),new lX),us(new Tn(null,new _n(this.c.a.a,16)),new jGt(r,n)),aD(this,new hX),mu(n,new sX),n.c=Pt(Xn,Ie,1,0,5,1);break;case 3:s=new le,aD(this,new bF),o=xUt(hne(Jj(new Tn(null,new _n(this.c.a.b,16)),new T9(this))),new wF),us(Ri(new Tn(null,new _n(this.c.a.b,16)),new fX),new zGt(o,s)),aD(this,new dX),mu(s,new gX),s.c=Pt(Xn,Ie,1,0,5,1);break;default:throw rt(new Uzt)}},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation",1693),I(1694,1,wd,bF),l.Lb=function(e){return Et(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),I(1695,1,{},T9),l.Fe=function(e){return Rgn(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),I(1703,1,Oq,RGt),l.Vd=function(){c_(this.a,this.b,-1)},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),I(1705,1,wd,vF),l.Lb=function(e){return Et(u(e,57).g,145)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),I(1706,1,Un,aX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),I(1707,1,ui,oX),l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),I(1709,1,Un,N3),l.td=function(e){hln(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),I(1708,1,Oq,UGt),l.Vd=function(){c_(this.b,this.a,-1)},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),I(1710,1,wd,cX),l.Lb=function(e){return Et(u(e,57).g,10)},l.Fb=function(e){return this===e},l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),I(1711,1,Un,uX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),I(1712,1,{},$d),l.Fe=function(e){return jgn(this.a,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),I(1713,1,{},lX),l.De=function(){return 0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),I(1696,1,{},wF),l.De=function(){return 0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),I(1715,1,Un,jGt),l.td=function(e){Utn(this.a,this.b,u(e,307))},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),I(1714,1,Oq,$Gt),l.Vd=function(){cce(this.a,this.b,-1)},l.b=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),I(1716,1,wd,hX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),I(1717,1,Un,sX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),I(1697,1,ui,fX),l.Mb=function(e){return Et(u(e,57).g,10)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),I(1699,1,Un,zGt),l.td=function(e){Wtn(this.a,this.b,u(e,57))},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),I(1698,1,Oq,WGt),l.Vd=function(){c_(this.b,this.a,-1)},l.a=0,P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),I(1700,1,wd,dX),l.Lb=function(e){return u(e,57),!0},l.Fb=function(e){return this===e},l.Mb=function(e){return u(e,57),!0},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),I(1701,1,Un,gX),l.td=function(e){u(e,365).Vd()},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),I(1702,1,ui,mF),l.Mb=function(e){return Et(u(e,57).g,145)},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),I(1704,1,Un,qGt),l.td=function(e){Gan(this.a,this.b,u(e,57))},P(Cs,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),I(1521,1,as,rWt),l.pf=function(e,n){Ryn(this,u(e,37),n)};var Kbe;P(Cs,"HorizontalGraphCompactor",1521),I(1522,1,{},w1),l.Oe=function(e,n){var r,s,o;return Pmt(e,n)||(r=Z3(e),s=Z3(n),r&&r.k==(Gn(),xs)||s&&s.k==(Gn(),xs))?0:(o=u(Q(this.a.a,(se(),Y4)),304),ZXe(o,r?r.k:(Gn(),Zs),s?s.k:(Gn(),Zs)))},l.Pe=function(e,n){var r,s,o;return Pmt(e,n)?1:(r=Z3(e),s=Z3(n),o=u(Q(this.a.a,(se(),Y4)),304),M2t(o,r?r.k:(Gn(),Zs),s?s.k:(Gn(),Zs)))},P(Cs,"HorizontalGraphCompactor/1",1522),I(1523,1,{},jT),l.Ne=function(e,n){return q9(),e.a.i==0},P(Cs,"HorizontalGraphCompactor/lambda$0$Type",1523),I(1524,1,{},zd),l.Ne=function(e,n){return knn(this.a,e,n)},P(Cs,"HorizontalGraphCompactor/lambda$1$Type",1524),I(1664,1,{},Bte);var Ybe,Xbe;P(Cs,"LGraphToCGraphTransformer",1664),I(1672,1,ui,pX),l.Mb=function(e){return e!=null},P(Cs,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),I(1665,1,{},bX),l.Kb=function(e){return lf(),$o(Q(u(u(e,57).g,10),(se(),_i)))},P(Cs,"LGraphToCGraphTransformer/lambda$0$Type",1665),I(1666,1,{},yF),l.Kb=function(e){return lf(),$re(u(u(e,57).g,145))},P(Cs,"LGraphToCGraphTransformer/lambda$1$Type",1666),I(1675,1,ui,vX),l.Mb=function(e){return lf(),Et(u(e,57).g,10)},P(Cs,"LGraphToCGraphTransformer/lambda$10$Type",1675),I(1676,1,Un,wX),l.td=function(e){xnn(u(e,57))},P(Cs,"LGraphToCGraphTransformer/lambda$11$Type",1676),I(1677,1,ui,mX),l.Mb=function(e){return lf(),Et(u(e,57).g,145)},P(Cs,"LGraphToCGraphTransformer/lambda$12$Type",1677),I(1681,1,Un,yX),l.td=function(e){_un(u(e,57))},P(Cs,"LGraphToCGraphTransformer/lambda$13$Type",1681),I(1678,1,Un,C9),l.td=function(e){XYe(this.a,u(e,8))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$14$Type",1678),I(1679,1,Un,Gb),l.td=function(e){ZYe(this.a,u(e,110))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$15$Type",1679),I(1680,1,Un,nR),l.td=function(e){QYe(this.a,u(e,8))},l.a=0,P(Cs,"LGraphToCGraphTransformer/lambda$16$Type",1680),I(1682,1,{},xX),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$17$Type",1682),I(1683,1,ui,kX),l.Mb=function(e){return lf(),Va(u(e,17))},P(Cs,"LGraphToCGraphTransformer/lambda$18$Type",1683),I(1684,1,Un,Dtt),l.td=function(e){Dan(this.a,u(e,17))},P(Cs,"LGraphToCGraphTransformer/lambda$19$Type",1684),I(1668,1,Un,Ott),l.td=function(e){fin(this.a,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$2$Type",1668),I(1685,1,{},xF),l.Kb=function(e){return lf(),new Tn(null,new _n(u(e,29).a,16))},P(Cs,"LGraphToCGraphTransformer/lambda$20$Type",1685),I(1686,1,{},EX),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$21$Type",1686),I(1687,1,{},kF),l.Kb=function(e){return lf(),u(Q(u(e,17),(se(),N2)),15)},P(Cs,"LGraphToCGraphTransformer/lambda$22$Type",1687),I(1688,1,ui,TX),l.Mb=function(e){return tQe(u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$23$Type",1688),I(1689,1,Un,Ntt),l.td=function(e){Lgn(this.a,u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$24$Type",1689),I(1667,1,Un,HGt),l.td=function(e){Jin(this.a,this.b,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$3$Type",1667),I(1669,1,{},CX),l.Kb=function(e){return lf(),new Tn(null,new _n(u(e,29).a,16))},P(Cs,"LGraphToCGraphTransformer/lambda$4$Type",1669),I(1670,1,{},_X),l.Kb=function(e){return lf(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(Cs,"LGraphToCGraphTransformer/lambda$5$Type",1670),I(1671,1,{},$T),l.Kb=function(e){return lf(),u(Q(u(e,17),(se(),N2)),15)},P(Cs,"LGraphToCGraphTransformer/lambda$6$Type",1671),I(1673,1,Un,Ptt),l.td=function(e){opn(this.a,u(e,15))},P(Cs,"LGraphToCGraphTransformer/lambda$8$Type",1673),I(1674,1,Un,GGt),l.td=function(e){yXe(this.a,this.b,u(e,145))},P(Cs,"LGraphToCGraphTransformer/lambda$9$Type",1674),I(1663,1,{},SX),l.Le=function(e){var n,r,s,o,h;for(this.a=e,this.d=new Gtt,this.c=Pt(JEt,Ie,121,this.a.a.a.c.length,0,1),this.b=0,r=new S(this.a.a.a);r.a=tt&&(ue(h,de(M)),_t=b.Math.max(_t,Bt[M-1]-F),w+=Y,gt+=Bt[M-1]-gt,F=Bt[M-1],Y=k[M]),Y=b.Math.max(Y,k[M]),++M;w+=Y}V=b.Math.min(1/_t,1/n.b/w),V>s&&(s=V,r=h)}return r},l.Wf=function(){return!1},P(kd,"MSDCutIndexHeuristic",802),I(1617,1,as,JX),l.pf=function(e,n){jmn(u(e,37),n)},P(kd,"SingleEdgeGraphWrapper",1617),I(227,22,{3:1,35:1,22:1,227:1},Y9);var q4,a7,o7,Oy,dS,H4,c7=jr(kc,"CenterEdgeLabelPlacementStrategy",227,Hr,Xsn,AZe),c2e;I(422,22,{3:1,35:1,22:1,422:1},Mbt);var xTt,vlt,kTt=jr(kc,"ConstraintCalculationStrategy",422,Hr,$nn,LZe),u2e;I(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},ket),l.Kf=function(){return moe(this)},l.Xf=function(){return moe(this)};var wO,S6,ETt,TTt=jr(kc,"CrossingMinimizationStrategy",314,Hr,Drn,MZe),l2e;I(337,22,{3:1,35:1,22:1,337:1},Eet);var CTt,wlt,OG,_Tt=jr(kc,"CuttingStrategy",337,Hr,Orn,OZe),h2e;I(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},EM),l.Kf=function(){return sce(this)},l.Xf=function(){return sce(this)};var STt,mlt,gS,ylt,pS,ATt=jr(kc,"CycleBreakingStrategy",335,Hr,ksn,NZe),f2e;I(419,22,{3:1,35:1,22:1,419:1},Ibt);var NG,LTt,MTt=jr(kc,"DirectionCongruency",419,Hr,jnn,PZe),d2e;I(450,22,{3:1,35:1,22:1,450:1},Tet);var u7,xlt,G4,g2e=jr(kc,"EdgeConstraint",450,Hr,Nrn,FZe),p2e;I(276,22,{3:1,35:1,22:1,276:1},X9);var klt,Elt,Tlt,Clt,PG,_lt,ITt=jr(kc,"EdgeLabelSideSelection",276,Hr,tan,BZe),b2e;I(479,22,{3:1,35:1,22:1,479:1},Dbt);var FG,DTt,OTt=jr(kc,"EdgeStraighteningStrategy",479,Hr,Rnn,RZe),v2e;I(274,22,{3:1,35:1,22:1,274:1},Q9);var Slt,NTt,PTt,BG,FTt,BTt,RTt=jr(kc,"FixedAlignment",274,Hr,Zsn,jZe),w2e;I(275,22,{3:1,35:1,22:1,275:1},Z9);var jTt,$Tt,zTt,qTt,bS,HTt,GTt=jr(kc,"GraphCompactionStrategy",275,Hr,Qsn,$Ze),m2e;I(256,22,{3:1,35:1,22:1,256:1},Dm);var l7,RG,h7,bh,vS,jG,f7,V4,$G,wS,Alt=jr(kc,"GraphProperties",256,Hr,jon,zZe),y2e;I(292,22,{3:1,35:1,22:1,292:1},Cet);var mO,Llt,Mlt,Ilt=jr(kc,"GreedySwitchType",292,Hr,Brn,qZe),x2e;I(303,22,{3:1,35:1,22:1,303:1},_et);var A6,yO,U4,k2e=jr(kc,"InLayerConstraint",303,Hr,Frn,HZe),E2e;I(420,22,{3:1,35:1,22:1,420:1},Obt);var Dlt,VTt,UTt=jr(kc,"InteractiveReferencePoint",420,Hr,znn,GZe),T2e,WTt,L6,Lw,zG,KTt,YTt,qG,XTt,xO,HG,mS,M6,Ny,Olt,GG,oc,QTt,Mw,Gc,Nlt,Plt,kO,O2,Iw,I6,ZTt,D6,EO,Py,n1,Rh,Flt,W4,Tc,_i,JTt,t9t,e9t,n9t,r9t,Blt,VG,Zu,Dw,Rlt,O6,TO,$1,K4,d7,Y4,X4,g7,N2,i9t,jlt,$lt,N6;I(163,22,{3:1,35:1,22:1,163:1},CM);var yS,fb,xS,Fy,CO,s9t=jr(kc,"LayerConstraint",163,Hr,Csn,VZe),C2e;I(848,1,Ih,UJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,w6t),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),p9t),(jg(),cs)),MTt),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,m6t),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Kq),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),x9t),cs),UTt),un(qn)))),aa(e,Kq,$ot,bve),aa(e,Kq,$_,pve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,y6t),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,x6t),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),Aa),Bs),un(qn)))),an(e,new Xe(QKe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,k6t),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),Aa),Bs),un($2)),ct(ot(Ae,1),te,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,E6t),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),L9t),cs),BCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,T6t),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),de(7)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,C6t),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_6t),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$ot),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),g9t),cs),ATt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,GD),lct),"Node Layering Strategy"),"Strategy for node layering."),T9t),cs),CCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,S6t),lct),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),k9t),cs),s9t),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,A6t),lct),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,L6t),lct),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,zot),p1e),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),de(4)),gc),ja),un(qn)))),aa(e,zot,GD,Eve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,qot),p1e),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),de(2)),gc),ja),un(qn)))),aa(e,qot,GD,Cve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Hot),b1e),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),E9t),cs),NCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Got),b1e),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),de(0)),gc),ja),un(qn)))),aa(e,Got,Hot,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Vot),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),de(vi)),gc),ja),un(qn)))),aa(e,Vot,GD,wve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$_),VD),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),d9t),cs),TTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,M6t),VD),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Uot),VD),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),Do),ca),un(qn)))),aa(e,Uot,oH,G2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Wot),VD),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),Aa),Bs),un(qn)))),aa(e,Wot,$_,K2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,I6t),VD),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,D6t),VD),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),de(-1)),gc),ja),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,O6t),v1e),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),de(40)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Kot),v1e),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),f9t),cs),Ilt),un(qn)))),aa(e,Kot,$_,q2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Yq),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),h9t),cs),Ilt),un(qn)))),aa(e,Yq,$_,j2e),aa(e,Yq,oH,$2e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,M4),w1e),"Node Placement Strategy"),"Strategy for node placement."),A9t),cs),LCt),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Xq),w1e),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),Aa),Bs),un(qn)))),aa(e,Xq,M4,Fve),aa(e,Xq,M4,Bve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Yot),m1e),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),C9t),cs),OTt),un(qn)))),aa(e,Yot,M4,Dve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Xot),m1e),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),_9t),cs),RTt),un(qn)))),aa(e,Xot,M4,Nve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qot),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),Do),ca),un(qn)))),aa(e,Qot,M4,jve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Zot),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),cs),uht),un(Js)))),aa(e,Zot,M4,Hve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jot),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),S9t),cs),uht),un(qn)))),aa(e,Jot,M4,qve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,N6t),y1e),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),w9t),cs),$Ct),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,P6t),y1e),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),m9t),cs),zCt),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Qq),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),y9t),cs),HCt),un(qn)))),aa(e,Qq,UD,sve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Zq),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),Do),ca),un(qn)))),aa(e,Zq,UD,ove),aa(e,Zq,Qq,cve),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tct),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),Do),ca),un(qn)))),aa(e,tct,UD,eve),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,F6t),F1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,B6t),F1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,R6t),F1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,j6t),F1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$6t),Y6t),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,z6t),Y6t),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,q6t),Y6t),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),de(0)),gc),ja),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ect),X6t),Ffe),"Tries to further compact components (disconnected sub-graphs)."),!1),Aa),Bs),un(qn)))),aa(e,ect,P_,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,H6t),x1e),"Post Compaction Strategy"),k1e),o9t),cs),GTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,G6t),x1e),"Post Compaction Constraint Calculation"),k1e),a9t),cs),kTt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Jq),Q6t),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nct),Q6t),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),de(16)),gc),ja),un(qn)))),aa(e,nct,Jq,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rct),Q6t),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),de(5)),gc),ja),un(qn)))),aa(e,rct,Jq,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Y0),Z6t),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),D9t),cs),WCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tH),Z6t),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),Do),ca),un(qn)))),aa(e,tH,Y0,nwe),aa(e,tH,Y0,rwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,eH),Z6t),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),Do),ca),un(qn)))),aa(e,eH,Y0,swe),aa(e,eH,Y0,awe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,z_),E1e),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),I9t),cs),_Tt),un(qn)))),aa(e,z_,Y0,fwe),aa(e,z_,Y0,dwe),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ict),E1e),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),q1),ph),un(qn)))),aa(e,ict,z_,cwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sct),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),M9t),gc),ja),un(qn)))),aa(e,sct,z_,lwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nH),T1e),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),O9t),cs),UCt),un(qn)))),aa(e,nH,Y0,Cwe),aa(e,nH,Y0,_we),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,rH),T1e),"Valid Indices for Wrapping"),null),q1),ph),un(qn)))),aa(e,rH,Y0,kwe),aa(e,rH,Y0,Ewe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,iH),J6t),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),Aa),Bs),un(qn)))),aa(e,iH,Y0,vwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sH),J6t),"Distance Penalty When Improving Cuts"),null),2),Do),ca),un(qn)))),aa(e,sH,Y0,pwe),aa(e,sH,iH,!0),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,act),J6t),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),Aa),Bs),un(qn)))),aa(e,act,Y0,mwe),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,V6t),hct),"Edge Label Side Selection"),"Method to decide on edge label sides."),v9t),cs),ITt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,U6t),hct),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),b9t),cs),c7),ji(qn,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,aH),WD),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),l9t),cs),FCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,W6t),WD),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oct),WD),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),c9t),cs),A7t),un(qn)))),aa(e,oct,P_,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,K6t),WD),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),u9t),cs),SCt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cct),WD),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),Do),ca),un(qn)))),aa(e,cct,aH,null),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,uct),WD),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),Do),ca),un(qn)))),aa(e,uct,aH,null),zhe((new DB,e))};var _2e,S2e,A2e,a9t,L2e,o9t,M2e,c9t,I2e,D2e,O2e,u9t,N2e,P2e,l9t,F2e,B2e,R2e,h9t,j2e,$2e,z2e,f9t,q2e,H2e,G2e,V2e,U2e,W2e,K2e,Y2e,d9t,X2e,g9t,Q2e,p9t,Z2e,b9t,J2e,v9t,tve,eve,nve,w9t,rve,m9t,ive,y9t,sve,ave,ove,cve,uve,lve,hve,fve,dve,gve,x9t,pve,bve,vve,wve,mve,yve,k9t,xve,kve,Eve,Tve,Cve,_ve,Sve,E9t,Ave,T9t,Lve,Mve,Ive,C9t,Dve,Ove,_9t,Nve,Pve,Fve,Bve,Rve,jve,$ve,zve,S9t,qve,Hve,Gve,A9t,Vve,L9t,Uve,Wve,Kve,Yve,Xve,Qve,Zve,Jve,twe,ewe,nwe,rwe,iwe,swe,awe,owe,cwe,uwe,M9t,lwe,hwe,I9t,fwe,dwe,gwe,pwe,bwe,vwe,wwe,mwe,ywe,D9t,xwe,kwe,Ewe,Twe,O9t,Cwe,_we;P(kc,"LayeredMetaDataProvider",848),I(986,1,Ih,DB),l.Qe=function(e){zhe(e)};var Ld,zlt,UG,kS,WG,N9t,KG,P6,YG,P9t,F9t,qlt,db,Hlt,By,B9t,_O,Glt,R9t,Swe,XG,Vlt,ES,Ry,Awe,Vl,j9t,$9t,QG,Ult,Md,ZG,X0,z9t,q9t,H9t,Wlt,Klt,G9t,Ug,Ylt,V9t,jy,U9t,W9t,K9t,JG,$y,P2,Y9t,X9t,_o,Q9t,Lwe,cu,tV,Z9t,J9t,tCt,Xlt,eCt,eV,nCt,rCt,nV,Ow,iCt,Qlt,TS,sCt,Nw,CS,rV,F2,Zlt,p7,iV,B2,aCt,oCt,cCt,b7,uCt,Mwe,Iwe,Dwe,Owe,Pw,zy,os,Wg,Nwe,qy,lCt,v7,hCt,Hy,Pwe,w7,fCt,F6,Fwe,Bwe,SO,Jlt,dCt,AO,xf,Q4,B6,Fw,R2,sV,Gy,tht,m7,y7,Bw,Z4,eht,LO,_S,SS,nht,gCt,pCt,bCt,vCt,rht,wCt,mCt,yCt,xCt,iht,aV;P(kc,"LayeredOptions",986),I(987,1,{},eQ),l.$e=function(){var e;return e=new Qzt,e},l._e=function(e){},P(kc,"LayeredOptions/LayeredFactory",987),I(1372,1,{}),l.a=0;var Rwe;P(Ec,"ElkSpacings/AbstractSpacingsBuilder",1372),I(779,1372,{},l3t);var oV,jwe;P(kc,"LayeredSpacings/LayeredSpacingsBuilder",779),I(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},J9),l.Kf=function(){return yce(this)},l.Xf=function(){return yce(this)};var sht,kCt,ECt,cV,aht,TCt,CCt=jr(kc,"LayeringStrategy",313,Hr,Jsn,UZe),$we;I(378,22,{3:1,35:1,22:1,378:1},Aet);var oht,_Ct,uV,SCt=jr(kc,"LongEdgeOrderingStrategy",378,Hr,Irn,WZe),zwe;I(197,22,{3:1,35:1,22:1,197:1},VR);var J4,t5,lV,cht,uht=jr(kc,"NodeFlexibility",197,Hr,Rin,KZe),qwe;I(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},TM),l.Kf=function(){return ice(this)},l.Xf=function(){return ice(this)};var AS,lht,hht,LS,ACt,LCt=jr(kc,"NodePlacementStrategy",315,Hr,xsn,tJe),Hwe;I(260,22,{3:1,35:1,22:1,260:1},Cx);var MCt,MO,ICt,DCt,IO,OCt,hV,fV,NCt=jr(kc,"NodePromotionStrategy",260,Hr,Zan,XZe),Gwe;I(339,22,{3:1,35:1,22:1,339:1},Let);var PCt,gb,fht,FCt=jr(kc,"OrderingStrategy",339,Hr,jrn,QZe),Vwe;I(421,22,{3:1,35:1,22:1,421:1},Nbt);var dht,ght,BCt=jr(kc,"PortSortingStrategy",421,Hr,qnn,ZZe),Uwe;I(452,22,{3:1,35:1,22:1,452:1},Met);var Ju,eu,MS,Wwe=jr(kc,"PortType",452,Hr,Rrn,YZe),Kwe;I(375,22,{3:1,35:1,22:1,375:1},Iet);var RCt,pht,jCt,$Ct=jr(kc,"SelfLoopDistributionStrategy",375,Hr,$rn,JZe),Ywe;I(376,22,{3:1,35:1,22:1,376:1},Pbt);var DO,bht,zCt=jr(kc,"SelfLoopOrderingStrategy",376,Hr,Bnn,eJe),Xwe;I(304,1,{304:1},Hle),P(kc,"Spacings",304),I(336,22,{3:1,35:1,22:1,336:1},Det);var vht,qCt,IS,HCt=jr(kc,"SplineRoutingMode",336,Hr,qrn,nJe),Qwe;I(338,22,{3:1,35:1,22:1,338:1},Oet);var wht,GCt,VCt,UCt=jr(kc,"ValidifyStrategy",338,Hr,Hrn,rJe),Zwe;I(377,22,{3:1,35:1,22:1,377:1},Net);var Vy,mht,x7,WCt=jr(kc,"WrappingStrategy",377,Hr,zrn,iJe),Jwe;I(1383,1,zc,YJ),l.Yf=function(e){return u(e,37),tme},l.pf=function(e,n){Oyn(this,u(e,37),n)};var tme;P(lH,"DepthFirstCycleBreaker",1383),I(782,1,zc,Kvt),l.Yf=function(e){return u(e,37),eme},l.pf=function(e,n){I5n(this,u(e,37),n)},l.Zf=function(e){return u(Fe(e,zz(this.d,e.c.length)),10)};var eme;P(lH,"GreedyCycleBreaker",782),I(1386,782,zc,MVt),l.Zf=function(e){var n,r,s,o;for(o=null,n=vi,s=new S(e);s.a1&&(je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),(Te(),By))))?gce(e,this.d,u(this,660)):(vn(),Xs(e,this.d)),Nne(this.e,e))},l.Sf=function(e,n,r,s){var o,h,d,w,k,C,M;for(n!=sYt(r,e.length)&&(h=e[n-(r?1:-1)],mmt(this.f,h,r?(so(),eu):(so(),Ju))),o=e[n][0],M=!s||o.k==(Gn(),xs),C=_1(e[n]),this.ag(C,M,!1,r),d=0,k=new S(C);k.a"),e0?grt(this.a,e[n-1],e[n]):!r&&n1&&(je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),(Te(),By))))?gce(e,this.d,this):(vn(),Xs(e,this.d)),je(Re(Q(Fa((An(0,e.c.length),u(e.c[0],10))),By)))||Nne(this.e,e))},P($u,"ModelOrderBarycenterHeuristic",660),I(1803,1,Oi,g$t),l.ue=function(e,n){return W0n(this.a,u(e,10),u(n,10))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P($u,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),I(1403,1,zc,JJ),l.Yf=function(e){var n;return u(e,37),n=ij(gme),bi(n,(Wa(),ou),(ro(),xG)),n},l.pf=function(e,n){Dnn((u(e,37),n))};var gme;P($u,"NoCrossingMinimizer",1403),I(796,402,Pkt,ibt),l.$f=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V;switch(F=this.g,r.g){case 1:{for(o=0,h=0,M=new S(e.j);M.a1&&(o.j==(be(),Hn)?this.b[e]=!0:o.j==Bn&&e>0&&(this.b[e-1]=!0))},l.f=0,P(s0,"AllCrossingsCounter",1798),I(587,1,{},rz),l.b=0,l.d=0,P(s0,"BinaryIndexedTree",587),I(524,1,{},HM);var XCt,gV;P(s0,"CrossingsCounter",524),I(1906,1,Oi,p$t),l.ue=function(e,n){return Ptn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$0$Type",1906),I(1907,1,Oi,b$t),l.ue=function(e,n){return Ftn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$1$Type",1907),I(1908,1,Oi,v$t),l.ue=function(e,n){return Btn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$2$Type",1908),I(1909,1,Oi,w$t),l.ue=function(e,n){return Rtn(this.a,u(e,11),u(n,11))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(s0,"CrossingsCounter/lambda$3$Type",1909),I(1910,1,Un,m$t),l.td=function(e){man(this.a,u(e,11))},P(s0,"CrossingsCounter/lambda$4$Type",1910),I(1911,1,ui,y$t),l.Mb=function(e){return OYe(this.a,u(e,11))},P(s0,"CrossingsCounter/lambda$5$Type",1911),I(1912,1,Un,x$t),l.td=function(e){_Vt(this,e)},P(s0,"CrossingsCounter/lambda$6$Type",1912),I(1913,1,Un,ZGt),l.td=function(e){var n;g8(),qp(this.b,(n=this.a,u(e,11),n))},P(s0,"CrossingsCounter/lambda$7$Type",1913),I(826,1,wd,BF),l.Lb=function(e){return g8(),Vs(u(e,11),(se(),Zu))},l.Fb=function(e){return this===e},l.Mb=function(e){return g8(),Vs(u(e,11),(se(),Zu))},P(s0,"CrossingsCounter/lambda$8$Type",826),I(1905,1,{},k$t),P(s0,"HyperedgeCrossingsCounter",1905),I(467,1,{35:1,467:1},qWt),l.wd=function(e){return bhn(this,u(e,467))},l.b=0,l.c=0,l.e=0,l.f=0;var fxn=P(s0,"HyperedgeCrossingsCounter/Hyperedge",467);I(362,1,{35:1,362:1},e$),l.wd=function(e){return gbn(this,u(e,362))},l.b=0,l.c=0;var pme=P(s0,"HyperedgeCrossingsCounter/HyperedgeCorner",362);I(523,22,{3:1,35:1,22:1,523:1},Fbt);var OS,NS,bme=jr(s0,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Hr,Hnn,aJe),vme;I(1405,1,zc,KJ),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?wme:null},l.pf=function(e,n){P1n(this,u(e,37),n)};var wme;P(uo,"InteractiveNodePlacer",1405),I(1406,1,zc,WJ),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?mme:null},l.pf=function(e,n){mfn(this,u(e,37),n)};var mme,pV,bV;P(uo,"LinearSegmentsNodePlacer",1406),I(257,1,{35:1,257:1},Npt),l.wd=function(e){return VKe(this,u(e,257))},l.Fb=function(e){var n;return Et(e,257)?(n=u(e,257),this.b==n.b):!1},l.Hb=function(){return this.b},l.Ib=function(){return"ls"+Qp(this.e)},l.a=0,l.b=0,l.c=-1,l.d=-1,l.g=0;var yme=P(uo,"LinearSegmentsNodePlacer/LinearSegment",257);I(1408,1,zc,pYt),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?xme:null},l.pf=function(e,n){E5n(this,u(e,37),n)},l.b=0,l.g=0;var xme;P(uo,"NetworkSimplexPlacer",1408),I(1427,1,Oi,aQ),l.ue=function(e,n){return du(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(uo,"NetworkSimplexPlacer/0methodref$compare$Type",1427),I(1429,1,Oi,oQ),l.ue=function(e,n){return du(u(e,19).a,u(n,19).a)},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(uo,"NetworkSimplexPlacer/1methodref$compare$Type",1429),I(649,1,{649:1},JGt);var dxn=P(uo,"NetworkSimplexPlacer/EdgeRep",649);I(401,1,{401:1},_wt),l.b=!1;var gxn=P(uo,"NetworkSimplexPlacer/NodeRep",401);I(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},cqt),P(uo,"NetworkSimplexPlacer/Path",508),I(1409,1,{},cQ),l.Kb=function(e){return u(e,17).d.i.k},P(uo,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),I(1410,1,ui,uQ),l.Mb=function(e){return u(e,267)==(Gn(),Zs)},P(uo,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),I(1411,1,{},lQ),l.Kb=function(e){return u(e,17).d.i},P(uo,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),I(1412,1,ui,E$t),l.Mb=function(e){return _Wt(hie(u(e,10)))},P(uo,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),I(1413,1,ui,hQ),l.Mb=function(e){return Ttn(u(e,11))},P(uo,"NetworkSimplexPlacer/lambda$0$Type",1413),I(1414,1,Un,tVt),l.td=function(e){xXe(this.a,this.b,u(e,11))},P(uo,"NetworkSimplexPlacer/lambda$1$Type",1414),I(1423,1,Un,T$t),l.td=function(e){zgn(this.a,u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$10$Type",1423),I(1424,1,{},fQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$11$Type",1424),I(1425,1,Un,C$t),l.td=function(e){Bvn(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$12$Type",1425),I(1426,1,{},dQ),l.Kb=function(e){return Ol(),de(u(e,121).e)},P(uo,"NetworkSimplexPlacer/lambda$13$Type",1426),I(1428,1,{},gQ),l.Kb=function(e){return Ol(),de(u(e,121).e)},P(uo,"NetworkSimplexPlacer/lambda$15$Type",1428),I(1430,1,ui,pQ),l.Mb=function(e){return Ol(),u(e,401).c.k==(Gn(),Ds)},P(uo,"NetworkSimplexPlacer/lambda$17$Type",1430),I(1431,1,ui,bQ),l.Mb=function(e){return Ol(),u(e,401).c.j.c.length>1},P(uo,"NetworkSimplexPlacer/lambda$18$Type",1431),I(1432,1,Un,kXt),l.td=function(e){Sln(this.c,this.b,this.d,this.a,u(e,401))},l.c=0,l.d=0,P(uo,"NetworkSimplexPlacer/lambda$19$Type",1432),I(1415,1,{},vQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$2$Type",1415),I(1433,1,Un,_$t),l.td=function(e){mXe(this.a,u(e,11))},l.a=0,P(uo,"NetworkSimplexPlacer/lambda$20$Type",1433),I(1434,1,{},Y5),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$21$Type",1434),I(1435,1,Un,S$t),l.td=function(e){NXe(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$22$Type",1435),I(1436,1,ui,RF),l.Mb=function(e){return _Wt(e)},P(uo,"NetworkSimplexPlacer/lambda$23$Type",1436),I(1437,1,{},wQ),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$24$Type",1437),I(1438,1,ui,A$t),l.Mb=function(e){return $Ye(this.a,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$25$Type",1438),I(1439,1,Un,eVt),l.td=function(e){ugn(this.a,this.b,u(e,10))},P(uo,"NetworkSimplexPlacer/lambda$26$Type",1439),I(1440,1,ui,mQ),l.Mb=function(e){return Ol(),!Va(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$27$Type",1440),I(1441,1,ui,yQ),l.Mb=function(e){return Ol(),!Va(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$28$Type",1441),I(1442,1,{},L$t),l.Ce=function(e,n){return IXe(this.a,u(e,29),u(n,29))},P(uo,"NetworkSimplexPlacer/lambda$29$Type",1442),I(1416,1,{},jF),l.Kb=function(e){return Ol(),new Tn(null,new Fv(new ar(lr(Ms(u(e,10)).a.Kc(),new z))))},P(uo,"NetworkSimplexPlacer/lambda$3$Type",1416),I(1417,1,ui,xQ),l.Mb=function(e){return Ol(),win(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$4$Type",1417),I(1418,1,Un,M$t),l.td=function(e){Fmn(this.a,u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$5$Type",1418),I(1419,1,{},GT),l.Kb=function(e){return Ol(),new Tn(null,new _n(u(e,29).a,16))},P(uo,"NetworkSimplexPlacer/lambda$6$Type",1419),I(1420,1,ui,kQ),l.Mb=function(e){return Ol(),u(e,10).k==(Gn(),Ds)},P(uo,"NetworkSimplexPlacer/lambda$7$Type",1420),I(1421,1,{},EQ),l.Kb=function(e){return Ol(),new Tn(null,new Fv(new ar(lr(z0(u(e,10)).a.Kc(),new z))))},P(uo,"NetworkSimplexPlacer/lambda$8$Type",1421),I(1422,1,ui,TQ),l.Mb=function(e){return Ol(),wtn(u(e,17))},P(uo,"NetworkSimplexPlacer/lambda$9$Type",1422),I(1404,1,zc,p9),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?kme:null},l.pf=function(e,n){vyn(u(e,37),n)};var kme;P(uo,"SimpleNodePlacer",1404),I(180,1,{180:1},x4),l.Ib=function(){var e;return e="",this.c==(dd(),Rw)?e+=g6:this.c==Kg&&(e+=d6),this.o==(E1(),j2)?e+=yot:this.o==z1?e+="UP":e+="BALANCED",e},P(sb,"BKAlignedLayout",180),I(516,22,{3:1,35:1,22:1,516:1},Rbt);var Kg,Rw,Eme=jr(sb,"BKAlignedLayout/HDirection",516,Hr,Vnn,oJe),Tme;I(515,22,{3:1,35:1,22:1,515:1},Bbt);var j2,z1,Cme=jr(sb,"BKAlignedLayout/VDirection",515,Hr,Unn,cJe),_me;I(1634,1,{},nVt),P(sb,"BKAligner",1634),I(1637,1,{},Pse),P(sb,"BKCompactor",1637),I(654,1,{654:1},CQ),l.a=0,P(sb,"BKCompactor/ClassEdge",654),I(458,1,{458:1},aqt),l.a=null,l.b=0,P(sb,"BKCompactor/ClassNode",458),I(1407,1,zc,AVt),l.Yf=function(e){return u(Q(u(e,37),(se(),Gc)),21).Hc((oo(),bh))?Sme:null},l.pf=function(e,n){R5n(this,u(e,37),n)},l.d=!1;var Sme;P(sb,"BKNodePlacer",1407),I(1635,1,{},_Q),l.d=0,P(sb,"NeighborhoodInformation",1635),I(1636,1,Oi,I$t),l.ue=function(e,n){return Van(this,u(e,46),u(n,46))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(sb,"NeighborhoodInformation/NeighborComparator",1636),I(808,1,{}),P(sb,"ThresholdStrategy",808),I(1763,808,{},hqt),l.bg=function(e,n,r){return this.a.o==(E1(),z1)?ss:Ts},l.cg=function(){},P(sb,"ThresholdStrategy/NullThresholdStrategy",1763),I(579,1,{579:1},rVt),l.c=!1,l.d=!1,P(sb,"ThresholdStrategy/Postprocessable",579),I(1764,808,{},fqt),l.bg=function(e,n,r){var s,o,h;return o=n==r,s=this.a.a[r.p]==n,o||s?(h=e,this.a.c==(dd(),Rw)?(o&&(h=yat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=yat(this,r,!1))):(o&&(h=yat(this,n,!0)),!isNaN(h)&&!isFinite(h)&&s&&(h=yat(this,r,!1))),h):e},l.cg=function(){for(var e,n,r,s,o;this.d.b!=0;)o=u(crn(this.d),579),s=nle(this,o),s.a&&(e=s.a,r=je(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Va(e)&&e.c.i.c==e.d.i.c)&&(n=uce(this,o),n||KYe(this.e,o)));for(;this.e.a.c.length!=0;)uce(this,u(mre(this.e),579))},P(sb,"ThresholdStrategy/SimpleThresholdStrategy",1764),I(635,1,{635:1,246:1,234:1},SQ),l.Kf=function(){return Lne(this)},l.Xf=function(){return Lne(this)};var yht;P(bct,"EdgeRouterFactory",635),I(1458,1,zc,id),l.Yf=function(e){return bvn(u(e,37))},l.pf=function(e,n){Tyn(u(e,37),n)};var Ame,Lme,Mme,Ime,Dme,QCt,Ome,Nme;P(bct,"OrthogonalEdgeRouter",1458),I(1451,1,zc,LVt),l.Yf=function(e){return $1n(u(e,37))},l.pf=function(e,n){G4n(this,u(e,37),n)};var Pme,Fme,Bme,Rme,NO,jme;P(bct,"PolylineEdgeRouter",1451),I(1452,1,wd,AQ),l.Lb=function(e){return dyt(u(e,10))},l.Fb=function(e){return this===e},l.Mb=function(e){return dyt(u(e,10))},P(bct,"PolylineEdgeRouter/1",1452),I(1809,1,ui,LQ),l.Mb=function(e){return u(e,129).c==(Vf(),pb)},P(Jf,"HyperEdgeCycleDetector/lambda$0$Type",1809),I(1810,1,{},MQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$1$Type",1810),I(1811,1,ui,IQ),l.Mb=function(e){return u(e,129).c==(Vf(),pb)},P(Jf,"HyperEdgeCycleDetector/lambda$2$Type",1811),I(1812,1,{},X5),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$3$Type",1812),I(1813,1,{},DQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$4$Type",1813),I(1814,1,{},OQ),l.Ge=function(e){return u(e,129).d},P(Jf,"HyperEdgeCycleDetector/lambda$5$Type",1814),I(112,1,{35:1,112:1},LI),l.wd=function(e){return UKe(this,u(e,112))},l.Fb=function(e){var n;return Et(e,112)?(n=u(e,112),this.g==n.g):!1},l.Hb=function(){return this.g},l.Ib=function(){var e,n,r,s;for(e=new Il("{"),s=new S(this.n);s.a"+this.b+" ("+rQe(this.c)+")"},l.d=0,P(Jf,"HyperEdgeSegmentDependency",129),I(520,22,{3:1,35:1,22:1,520:1},jbt);var pb,Uy,$me=jr(Jf,"HyperEdgeSegmentDependency/DependencyType",520,Hr,Gnn,uJe),zme;I(1815,1,{},D$t),P(Jf,"HyperEdgeSegmentSplitter",1815),I(1816,1,{},uHt),l.a=0,l.b=0,P(Jf,"HyperEdgeSegmentSplitter/AreaRating",1816),I(329,1,{329:1},ynt),l.a=0,l.b=0,l.c=0,P(Jf,"HyperEdgeSegmentSplitter/FreeArea",329),I(1817,1,Oi,$Q),l.ue=function(e,n){return JQe(u(e,112),u(n,112))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Jf,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),I(1818,1,Un,EXt),l.td=function(e){isn(this.a,this.d,this.c,this.b,u(e,112))},l.b=0,P(Jf,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),I(1819,1,{},zQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},P(Jf,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),I(1820,1,{},qQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},P(Jf,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),I(1821,1,{},HQ),l.Fe=function(e){return Xt(ye(e))},P(Jf,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),I(655,1,{},Gnt),l.a=0,l.b=0,l.c=0,P(Jf,"OrthogonalRoutingGenerator",655),I(1638,1,{},GQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).e,16))},P(Jf,"OrthogonalRoutingGenerator/lambda$0$Type",1638),I(1639,1,{},VQ),l.Kb=function(e){return new Tn(null,new _n(u(e,112).j,16))},P(Jf,"OrthogonalRoutingGenerator/lambda$1$Type",1639),I(661,1,{}),P(vct,"BaseRoutingDirectionStrategy",661),I(1807,661,{},dqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.ayd&&(h=M,o=e,s=new $e(F,h),ni(d.a,s),fw(this,d,o,s,!1),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1),h=n+H.o*r,o=H,s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1)),s=new $e(tt,h),ni(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),mr},l.gg=function(){return be(),Nn},P(vct,"NorthToSouthRoutingStrategy",1807),I(1808,661,{},gqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n-e.o*r,C=new S(e.n);C.ayd&&(h=M,o=e,s=new $e(F,h),ni(d.a,s),fw(this,d,o,s,!1),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1),h=n-H.o*r,o=H,s=new $e(V,h),ni(d.a,s),fw(this,d,o,s,!1)),s=new $e(tt,h),ni(d.a,s),fw(this,d,o,s,!1)))},l.eg=function(e){return e.i.n.a+e.n.a+e.a.a},l.fg=function(){return be(),Nn},l.gg=function(){return be(),mr},P(vct,"SouthToNorthRoutingStrategy",1808),I(1806,661,{},pqt),l.dg=function(e,n,r){var s,o,h,d,w,k,C,M,F,H,V,Y,tt;if(!(e.r&&!e.q))for(M=n+e.o*r,C=new S(e.n);C.ayd&&(h=M,o=e,s=new $e(h,F),ni(d.a,s),fw(this,d,o,s,!0),H=e.r,H&&(V=Xt(ye(Qf(H.e,0))),s=new $e(h,V),ni(d.a,s),fw(this,d,o,s,!0),h=n+H.o*r,o=H,s=new $e(h,V),ni(d.a,s),fw(this,d,o,s,!0)),s=new $e(h,tt),ni(d.a,s),fw(this,d,o,s,!0)))},l.eg=function(e){return e.i.n.b+e.n.b+e.a.b},l.fg=function(){return be(),Hn},l.gg=function(){return be(),Bn},P(vct,"WestToEastRoutingStrategy",1806),I(813,1,{},sxt),l.Ib=function(){return Qp(this.a)},l.b=0,l.c=!1,l.d=!1,l.f=0,P(Ty,"NubSpline",813),I(407,1,{407:1},Rce,rQt),P(Ty,"NubSpline/PolarCP",407),I(1453,1,zc,Sse),l.Yf=function(e){return Ldn(u(e,37))},l.pf=function(e,n){u5n(this,u(e,37),n)};var qme,Hme,Gme,Vme,Ume;P(Ty,"SplineEdgeRouter",1453),I(268,1,{268:1},S$),l.Ib=function(){return this.a+" ->("+this.c+") "+this.b},l.c=0,P(Ty,"SplineEdgeRouter/Dependency",268),I(455,22,{3:1,35:1,22:1,455:1},$bt);var bb,e5,Wme=jr(Ty,"SplineEdgeRouter/SideToProcess",455,Hr,Wnn,lJe),Kme;I(1454,1,ui,jQ),l.Mb=function(e){return b_(),!u(e,128).o},P(Ty,"SplineEdgeRouter/lambda$0$Type",1454),I(1455,1,{},RQ),l.Ge=function(e){return b_(),u(e,128).v+1},P(Ty,"SplineEdgeRouter/lambda$1$Type",1455),I(1456,1,Un,iVt),l.td=function(e){ytn(this.a,this.b,u(e,46))},P(Ty,"SplineEdgeRouter/lambda$2$Type",1456),I(1457,1,Un,sVt),l.td=function(e){xtn(this.a,this.b,u(e,46))},P(Ty,"SplineEdgeRouter/lambda$3$Type",1457),I(128,1,{35:1,128:1},eoe,hxt),l.wd=function(e){return WKe(this,u(e,128))},l.b=0,l.e=!1,l.f=0,l.g=0,l.j=!1,l.k=!1,l.n=0,l.o=!1,l.p=!1,l.q=!1,l.s=0,l.u=0,l.v=0,l.F=0,P(Ty,"SplineSegment",128),I(459,1,{459:1},VT),l.a=0,l.b=!1,l.c=!1,l.d=!1,l.e=!1,l.f=0,P(Ty,"SplineSegment/EdgeInformation",459),I(1234,1,{},NQ),P(q_,a6t,1234),I(1235,1,Oi,PQ),l.ue=function(e,n){return rpn(u(e,135),u(n,135))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(q_,jfe,1235),I(1233,1,{},CHt),P(q_,"MrTree",1233),I(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},UR),l.Kf=function(){return _oe(this)},l.Xf=function(){return _oe(this)};var vV,PS,PO,FS,ZCt=jr(q_,"TreeLayoutPhases",393,Hr,jin,hJe),Yme;I(1130,209,E2,VWt),l.Ze=function(e,n){var r,s,o,h,d,w,k;for(je(Re(qe(e,(hw(),i_t))))||u$((r=new rr((Im(),new Sm(e))),r)),d=(w=new A$,Lo(w,e),Jt(w,(fc(),jS),e),k=new Cr,Kwn(e,w,k),hmn(e,w,k),w),h=imn(this.a,d),o=new S(h);o.a"+b$(this.c):"e_"+Hi(this)},P(H_,"TEdge",188),I(135,134,{3:1,135:1,94:1,134:1},A$),l.Ib=function(){var e,n,r,s,o;for(o=null,s=ei(this.b,0);s.b!=s.d.c;)r=u(ti(s),86),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+` +`;for(n=ei(this.a,0);n.b!=n.d.c;)e=u(ti(n),188),o+=(e.b&&e.c?b$(e.b)+"->"+b$(e.c):"e_"+Hi(e))+` +`;return o};var pxn=P(H_,"TGraph",135);I(633,502,{3:1,502:1,633:1,94:1,134:1}),P(H_,"TShape",633),I(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},yit),l.Ib=function(){return b$(this)};var bxn=P(H_,"TNode",86);I(255,1,t0,Cp),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=ei(this.a.d,0),new bx(e)},P(H_,"TNode/2",255),I(358,1,ra,bx),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(ti(this.a),188).c},l.Ob=function(){return kR(this.a)},l.Qb=function(){H$(this.a)},P(H_,"TNode/2/1",358),I(1840,1,as,GWt),l.pf=function(e,n){Smn(this,u(e,135),n)},P(x6,"FanProcessor",1840),I(327,22,{3:1,35:1,22:1,327:1,234:1},tC),l.Kf=function(){switch(this.g){case 0:return new Mqt;case 1:return new GWt;case 2:return new Q5;case 3:return new UQ;case 4:return new KQ;case 5:return new OL;default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var xht,kht,Eht,Tht,Cht,wV,Xme=jr(x6,v6t,327,Hr,ean,fJe),Qme;I(1843,1,as,UQ),l.pf=function(e,n){ubn(this,u(e,135),n)},l.a=0,P(x6,"LevelHeightProcessor",1843),I(1844,1,t0,WQ),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"LevelHeightProcessor/1",1844),I(1841,1,as,Q5),l.pf=function(e,n){bgn(this,u(e,135),n)},l.a=0,P(x6,"NeighborsProcessor",1841),I(1842,1,t0,$F),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"NeighborsProcessor/1",1842),I(1845,1,as,KQ),l.pf=function(e,n){cbn(this,u(e,135),n)},l.a=0,P(x6,"NodePositionProcessor",1845),I(1839,1,as,Mqt),l.pf=function(e,n){Nyn(this,u(e,135))},P(x6,"RootProcessor",1839),I(1846,1,as,OL),l.pf=function(e,n){Hun(u(e,135))},P(x6,"Untreeifyer",1846);var FO,BS,Zme,_ht,mV,RS,Sht,yV,xV,k7,jS,kV,Yg,JCt,Jme,Aht,Wy,Lht,t_t;I(851,1,Ih,L3),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Fkt),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),n_t),(jg(),cs)),u_t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Bkt),""),"Search Order"),"Which search order to use when computing a spanning tree."),e_t),cs),h_t),un(qn)))),Zle((new KL,e))};var tye,e_t,eye,n_t;P(fH,"MrTreeMetaDataProvider",851),I(994,1,Ih,KL),l.Qe=function(e){Zle(e)};var nye,r_t,rye,iye,sye,aye,i_t,oye,s_t,cye,EV,a_t,uye,o_t,lye;P(fH,"MrTreeOptions",994),I(995,1,{},YQ),l.$e=function(){var e;return e=new VWt,e},l._e=function(e){},P(fH,"MrTreeOptions/MrtreeFactory",995),I(480,22,{3:1,35:1,22:1,480:1},zbt);var Mht,c_t,u_t=jr(fH,"OrderWeighting",480,Hr,Ynn,dJe),hye;I(425,22,{3:1,35:1,22:1,425:1},qbt);var l_t,Iht,h_t=jr(fH,"TreeifyingOrder",425,Hr,Knn,pJe),fye;I(1459,1,zc,WL),l.Yf=function(e){return u(e,135),dye},l.pf=function(e,n){qon(this,u(e,135),n)};var dye;P("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),I(1460,1,zc,QJ),l.Yf=function(e){return u(e,135),gye},l.pf=function(e,n){_gn(this,u(e,135),n)};var gye;P("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),I(1461,1,zc,XJ),l.Yf=function(e){return u(e,135),pye},l.pf=function(e,n){Hvn(this,u(e,135),n)},l.a=0;var pye;P("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),I(1462,1,zc,NB),l.Yf=function(e){return u(e,135),bye},l.pf=function(e,n){p1n(u(e,135),n)};var bye;P("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462);var $S;I(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},Hbt),l.Kf=function(){return iie(this)},l.Xf=function(){return iie(this)};var TV,E7,f_t=jr(Rkt,"RadialLayoutPhases",495,Hr,Xnn,gJe),vye;I(1131,209,E2,THt),l.Ze=function(e,n){var r,s,o,h,d,w;if(r=ooe(this,e),wr(n,"Radial layout",r.c.length),je(Re(qe(e,(ay(),k_t))))||u$((s=new rr((Im(),new Sm(e))),s)),w=Ddn(e),bo(e,(bC(),$S),w),!w)throw rt(new Pn("The given graph is not a tree!"));for(o=Xt(ye(qe(e,SV))),o==0&&(o=xoe(e)),bo(e,SV,o),d=new S(ooe(this,e));d.a0&&Lre((Rr(n-1,e.length),e.charCodeAt(n-1)),Xfe);)--n;if(s>=n)throw rt(new Pn("The given string does not contain any numbers."));if(o=py(e.substr(s,n-s),`,|;|\r| +`),o.length!=2)throw rt(new Pn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=ly(uy(o[0])),this.b=ly(uy(o[1]))}catch(h){throw h=Wi(h),Et(h,127)?(r=h,rt(new Pn(Qfe+r))):rt(h)}},l.Ib=function(){return"("+this.a+","+this.b+")"},l.a=0,l.b=0;var Us=P(qD,"KVector",8);I(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},Du,yR,dWt),l.Pc=function(){return eun(this)},l.Jf=function(e){var n,r,s,o,h,d;s=py(e,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | | +`),_h(this);try{for(r=0,h=0,o=0,d=0;r0&&(h%2==0?o=ly(s[r]):d=ly(s[r]),h>0&&h%2!=0&&ni(this,new $e(o,d)),++h),++r}catch(w){throw w=Wi(w),Et(w,127)?(n=w,rt(new Pn("The given string does not match the expected format for vectors."+n))):rt(w)}},l.Ib=function(){var e,n,r;for(e=new Il("("),n=ei(this,0);n.b!=n.d.c;)r=u(ti(n),8),Vr(e,r.a+","+r.b),n.b!=n.d.c&&(e.a+="; ");return(e.a+=")",e).a};var xSt=P(qD,"KVectorChain",74);I(248,22,{3:1,35:1,22:1,248:1},eC);var Zht,NV,PV,$O,zO,FV,kSt=jr(Oh,"Alignment",248,Hr,Ysn,DJe),F3e;I(979,1,Ih,ttt),l.Qe=function(e){Wue(e)};var ESt,Jht,B3e,TSt,CSt,R3e,_St,j3e,$3e,SSt,ASt,z3e;P(Oh,"BoxLayouterOptions",979),I(980,1,{},IZ),l.$e=function(){var e;return e=new BZ,e},l._e=function(e){},P(Oh,"BoxLayouterOptions/BoxFactory",980),I(291,22,{3:1,35:1,22:1,291:1},nC);var qO,tft,HO,GO,VO,eft,nft=jr(Oh,"ContentAlignment",291,Hr,Ksn,OJe),q3e;I(684,1,Ih,yp),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,U1e),""),"Layout Algorithm"),"Select a specific layout algorithm."),(jg(),T7)),Ae),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W1e),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),q1),mxn),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gkt),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),LSt),cs),kSt),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,b6),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,c8t),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),q1),xSt),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cH),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),ISt),j6),nft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,KD),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vkt),""),Qxt),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),DSt),cs),WS),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,UD),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),PSt),cs),pft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gH),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oH),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),jSt),cs),TAt),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ww),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),YSt),q1),M7t),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,$D),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pct),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,F_),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Not),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),tAt),cs),SAt),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,uH),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),q1),Us),ji(Js,ct(ot(Qg,1),ae,175,0,[$2,Xg]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,jD),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),gc),ja),ji(Js,ct(ot(Qg,1),ae,175,0,[Id]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Hq),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,P_),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,_kt),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),zSt),q1),xSt),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Lkt),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Mkt),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),q1),Txn),ji(qn,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Dkt),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),qSt),q1),L7t),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fkt),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),Aa),Bs),ji(Js,ct(ot(Qg,1),ae,175,0,[Id,$2,Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,K1e),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),Do),ca),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Y1e),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,X1e),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),de(100)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Q1e),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Z1e),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),de(4e3)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,J1e),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),de(400)),gc),ja),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tde),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ede),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nde),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rde),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,o8t),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),MSt),cs),OAt),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,tkt),F1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ekt),F1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Aot),F1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,nkt),F1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Oot),F1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,rkt),F1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ikt),F1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,okt),F1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,skt),F1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,akt),F1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ky),F1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ckt),F1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ukt),F1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),Do),ca),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,lkt),F1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),q1),E4e),ji(Js,ct(ot(Qg,1),ae,175,0,[Id,$2,Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Okt),F1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),lAt),q1),L7t),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,gct),ade),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),gc),ja),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),aa(e,gct,dct,X3e),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dct),ade),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),XSt),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,wkt),ode),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),GSt),q1),M7t),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,RE),ode),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),VSt),j6),lo),ji(Js,ct(ot(Qg,1),ae,175,0,[Xg]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,xkt),bH),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),ZSt),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,kkt),bH),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ekt),bH),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Tkt),bH),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ckt),bH),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),cs),QS),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,L4),Nct),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),USt),j6),tA),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,v6),Nct),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),KSt),j6),LAt),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,w6),Nct),"Node Size Minimum"),"The minimal size to which a node can be reduced."),WSt),q1),Us),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,fct),Nct),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Skt),hct),"Edge Label Placement"),"Gives a hint on where to put edge labels."),OSt),cs),fAt),un(Xg)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Gq),hct),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),Aa),Bs),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,K5n),"font"),"Font Name"),"Font name used for a label."),T7),Ae),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,ide),"font"),"Font Size"),"Font size used for a label."),gc),ja),un(Xg)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Ikt),Pct),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),q1),Us),un($2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,Akt),Pct),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),gc),ja),un($2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,dkt),Pct),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),rAt),cs),Xa),un($2)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,hkt),Pct),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),Do),ca),un($2)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,jE),u8t),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),eAt),j6),GV),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,mkt),u8t),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ykt),u8t),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,pkt),cde),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),Aa),Bs),un(Js)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,bkt),cde),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),Aa),Bs),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Lot),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),Do),ca),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,sde),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),BSt),cs),wAt),un(Id)))),G9(e,new zx(R9(Jk(Zk(new wm,Vn),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),G9(e,new zx(R9(Jk(Zk(new wm,ql),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),G9(e,new zx(R9(Jk(Zk(new wm,D1e),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),G9(e,new zx(R9(Jk(Zk(new wm,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),G9(e,new zx(R9(Jk(Zk(new wm,Td),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),Due((new $B,e)),Wue((new ttt,e)),cue((new zB,e))};var VS,H3e,LSt,$6,G3e,V3e,MSt,U3e,BV,ISt,UO,jw,DSt,rft,ift,OSt,NSt,PSt,FSt,BSt,RSt,r5,jSt,W3e,WO,sft,RV,$St,i5,zSt,KO,qSt,HSt,GSt,s5,VSt,z2,USt,jV,a5,WSt,vb,KSt,$V,YO,q2,YSt,K3e,XSt,Y3e,X3e,QSt,ZSt,aft,oft,cft,uft,JSt,hl,US,tAt,lft,hft,Ky,eAt,nAt,o5,rAt,z6,zV,fft,C7,Q3e,dft,Z3e,J3e,iAt,t4e,sAt,e4e,q6,aAt,qV,oAt,cAt,H2,n4e,uAt,lAt,hAt;P(Oh,"CoreOptions",684),I(103,22,{3:1,35:1,22:1,103:1},LM);var Q0,jh,kf,c0,Z0,WS=jr(Oh,Qxt,103,Hr,vsn,FJe),r4e;I(272,22,{3:1,35:1,22:1,272:1},zet);var _7,Yy,S7,fAt=jr(Oh,"EdgeLabelPlacement",272,Hr,Qrn,BJe),i4e;I(218,22,{3:1,35:1,22:1,218:1},KR);var A7,XO,H6,gft,pft=jr(Oh,"EdgeRouting",218,Hr,Hin,RJe),s4e;I(312,22,{3:1,35:1,22:1,312:1},rC);var dAt,gAt,pAt,bAt,bft,vAt,wAt=jr(Oh,"EdgeType",312,Hr,ran,jJe),a4e;I(977,1,Ih,$B),l.Qe=function(e){Due(e)};var mAt,yAt,xAt,kAt,o4e,EAt,KS;P(Oh,"FixedLayouterOptions",977),I(978,1,{},BL),l.$e=function(){var e;return e=new PZ,e},l._e=function(e){},P(Oh,"FixedLayouterOptions/FixedFactory",978),I(334,22,{3:1,35:1,22:1,334:1},qet);var Zg,HV,YS,TAt=jr(Oh,"HierarchyHandling",334,Hr,Xrn,$Je),c4e;I(285,22,{3:1,35:1,22:1,285:1},YR);var u0,wb,QO,ZO,u4e=jr(Oh,"LabelSide",285,Hr,qin,zJe),l4e;I(93,22,{3:1,35:1,22:1,93:1},$3);var J0,Ef,$h,Tf,Ul,Cf,zh,l0,_f,lo=jr(Oh,"NodeLabelPlacement",93,Hr,aon,qJe),h4e;I(249,22,{3:1,35:1,22:1,249:1},MM);var CAt,XS,mb,_At,JO,QS=jr(Oh,"PortAlignment",249,Hr,wsn,HJe),f4e;I(98,22,{3:1,35:1,22:1,98:1},iC);var G2,Vc,h0,L7,H1,yb,SAt=jr(Oh,"PortConstraints",98,Hr,$sn,GJe),d4e;I(273,22,{3:1,35:1,22:1,273:1},sC);var ZS,JS,tg,tN,xb,G6,GV=jr(Oh,"PortLabelPlacement",273,Hr,nan,VJe),g4e;I(61,22,{3:1,35:1,22:1,61:1},IM);var Hn,Nn,vh,wh,Cu,uu,G1,Sf,tl,qu,Uc,el,_u,Su,Af,Wl,Kl,qh,mr,Zo,Bn,Xa=jr(Oh,"PortSide",61,Hr,gsn,KJe),p4e;I(981,1,Ih,zB),l.Qe=function(e){cue(e)};var b4e,v4e,AAt,w4e,m4e;P(Oh,"RandomLayouterOptions",981),I(982,1,{},zZ),l.$e=function(){var e;return e=new HZ,e},l._e=function(e){},P(Oh,"RandomLayouterOptions/RandomFactory",982),I(374,22,{3:1,35:1,22:1,374:1},XR);var Xy,eN,nN,V2,tA=jr(Oh,"SizeConstraint",374,Hr,zin,UJe),y4e;I(259,22,{3:1,35:1,22:1,259:1},z3);var rN,VV,M7,vft,iN,eA,UV,WV,KV,LAt=jr(Oh,"SizeOptions",259,Hr,don,WJe),x4e;I(370,1,{1949:1},Yk),l.b=!1,l.c=0,l.d=-1,l.e=null,l.f=null,l.g=-1,l.j=!1,l.k=!1,l.n=!1,l.o=0,l.q=0,l.r=0,P(Ec,"BasicProgressMonitor",370),I(972,209,E2,BZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M;switch(wr(n,"Box layout",2),o=lM(ye(qe(e,(eq(),z3e)))),h=u(qe(e,$3e),116),r=je(Re(qe(e,TSt))),s=je(Re(qe(e,CSt))),u(qe(e,Jht),311).g){case 0:d=(w=new Pu((!e.a&&(e.a=new he(ns,e,10,11)),e.a)),vn(),Xs(w,new G$t(s)),w),k=G4t(e),C=ye(qe(e,ESt)),(C==null||(On(C),C<=0))&&(C=1.3),M=Z4n(d,o,h,k.a,k.b,r,(On(C),C)),gw(e,M.a,M.b,!1,!0);break;default:Kyn(e,o,h,r)}or(n)},P(Ec,"BoxLayoutProvider",972),I(973,1,Oi,G$t),l.ue=function(e,n){return b2n(this,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},l.a=!1,P(Ec,"BoxLayoutProvider/1",973),I(157,1,{157:1},U$,fWt),l.Ib=function(){return this.c?H5t(this.c):Qp(this.b)},P(Ec,"BoxLayoutProvider/Group",157),I(311,22,{3:1,35:1,22:1,311:1},QR);var MAt,IAt,DAt,wft,OAt=jr(Ec,"BoxLayoutProvider/PackingMode",311,Hr,Gin,YJe),k4e;I(974,1,Oi,RZ),l.ue=function(e,n){return mnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$0$Type",974),I(975,1,Oi,KF),l.ue=function(e,n){return fnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$1$Type",975),I(976,1,Oi,jZ),l.ue=function(e,n){return dnn(u(e,157),u(n,157))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(Ec,"BoxLayoutProvider/lambda$2$Type",976),I(1365,1,{831:1},$Z),l.qg=function(e,n){return DR(),!Et(n,160)||kHt((Qx(),u(e,160)),n)},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),I(1366,1,Un,V$t),l.td=function(e){run(this.a,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),I(1367,1,Un,FZ),l.td=function(e){u(e,94),DR()},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),I(1371,1,Un,U$t),l.td=function(e){Aon(this.a,u(e,94))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),I(1369,1,ui,cVt),l.Mb=function(e){return Hcn(this.a,this.b,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),I(1368,1,ui,uVt),l.Mb=function(e){return aQe(this.a,this.b,u(e,831))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),I(1370,1,Un,lVt),l.td=function(e){aen(this.a,this.b,u(e,146))},P(Ec,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),I(935,1,{},NZ),l.Kb=function(e){return lUt(e)},l.Fb=function(e){return this===e},P(Ec,"ElkUtil/lambda$0$Type",935),I(936,1,Un,hVt),l.td=function(e){wpn(this.a,this.b,u(e,79))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$1$Type",936),I(937,1,Un,fVt),l.td=function(e){wKe(this.a,this.b,u(e,202))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$2$Type",937),I(938,1,Un,dVt),l.td=function(e){uXe(this.a,this.b,u(e,137))},l.a=0,l.b=0,P(Ec,"ElkUtil/lambda$3$Type",938),I(939,1,Un,W$t),l.td=function(e){ktn(this.a,u(e,469))},P(Ec,"ElkUtil/lambda$4$Type",939),I(342,1,{35:1,342:1},KWe),l.wd=function(e){return BXe(this,u(e,236))},l.Fb=function(e){var n;return Et(e,342)?(n=u(e,342),this.a==n.a):!1},l.Hb=function(){return ps(this.a)},l.Ib=function(){return this.a+" (exclusive)"},l.a=0,P(Ec,"ExclusiveBounds/ExclusiveLowerBound",342),I(1138,209,E2,PZ),l.Ze=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt,ce,Se,We,Qe;for(wr(n,"Fixed Layout",1),h=u(qe(e,(ci(),NSt)),218),F=0,H=0,_t=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));_t.e!=_t.i.gc();){for(gt=u(dr(_t),33),Qe=u(qe(gt,(bz(),KS)),8),Qe&&(m1(gt,Qe.a,Qe.b),u(qe(gt,yAt),174).Hc((_l(),Xy))&&(V=u(qe(gt,kAt),8),V.a>0&&V.b>0&&gw(gt,V.a,V.b,!0,!0))),F=b.Math.max(F,gt.i+gt.g),H=b.Math.max(H,gt.j+gt.f),C=new er((!gt.n&&(gt.n=new he(qo,gt,1,7)),gt.n));C.e!=C.i.gc();)w=u(dr(C),137),Qe=u(qe(w,KS),8),Qe&&m1(w,Qe.a,Qe.b),F=b.Math.max(F,gt.i+w.i+w.g),H=b.Math.max(H,gt.j+w.j+w.f);for(ce=new er((!gt.c&&(gt.c=new he(fl,gt,9,9)),gt.c));ce.e!=ce.i.gc();)for(Yt=u(dr(ce),118),Qe=u(qe(Yt,KS),8),Qe&&m1(Yt,Qe.a,Qe.b),Se=gt.i+Yt.i,We=gt.j+Yt.j,F=b.Math.max(F,Se+Yt.g),H=b.Math.max(H,We+Yt.f),k=new er((!Yt.n&&(Yt.n=new he(qo,Yt,1,7)),Yt.n));k.e!=k.i.gc();)w=u(dr(k),137),Qe=u(qe(w,KS),8),Qe&&m1(w,Qe.a,Qe.b),F=b.Math.max(F,Se+w.i+w.g),H=b.Math.max(H,We+w.j+w.f);for(o=new ar(lr(G0(gt).a.Kc(),new z));zr(o);)r=u(Lr(o),79),M=Ehe(r),F=b.Math.max(F,M.a),H=b.Math.max(H,M.b);for(s=new ar(lr(fD(gt).a.Kc(),new z));zr(s);)r=u(Lr(s),79),ts(Zd(r))!=e&&(M=Ehe(r),F=b.Math.max(F,M.a),H=b.Math.max(H,M.b))}if(h==(q0(),A7))for(Lt=new er((!e.a&&(e.a=new he(ns,e,10,11)),e.a));Lt.e!=Lt.i.gc();)for(gt=u(dr(Lt),33),s=new ar(lr(G0(gt).a.Kc(),new z));zr(s);)r=u(Lr(s),79),d=pmn(r),d.b==0?bo(r,i5,null):bo(r,i5,d);je(Re(qe(e,(bz(),xAt))))||(Bt=u(qe(e,o4e),116),tt=F+Bt.b+Bt.c,Y=H+Bt.d+Bt.a,gw(e,tt,Y,!0,!0)),or(n)},P(Ec,"FixedLayoutProvider",1138),I(373,134,{3:1,414:1,373:1,94:1,134:1},Wu,$te),l.Jf=function(e){var n,r,s,o,h,d,w,k,C;if(e)try{for(k=py(e,";,;"),h=k,d=0,w=h.length;d>16&ms|n^s<<16},l.Kc=function(){return new K$t(this)},l.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+$o(this.b)+")":this.b==null?"pair("+$o(this.a)+",null)":"pair("+$o(this.a)+","+$o(this.b)+")"},P(Ec,"Pair",46),I(983,1,ra,K$t),l.Nb=function(e){pa(this,e)},l.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},l.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw rt(new lc)},l.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),rt(new Iu)},l.b=!1,l.c=!1,P(Ec,"Pair/1",983),I(448,1,{448:1},TXt),l.Fb=function(e){return Pc(this.a,u(e,448).a)&&Pc(this.c,u(e,448).c)&&Pc(this.d,u(e,448).d)&&Pc(this.b,u(e,448).b)},l.Hb=function(){return vz(ct(ot(Xn,1),Ie,1,5,[this.a,this.c,this.d,this.b]))},l.Ib=function(){return"("+this.a+Ka+this.c+Ka+this.d+Ka+this.b+")"},P(Ec,"Quadruple",448),I(1126,209,E2,HZ),l.Ze=function(e,n){var r,s,o,h,d;if(wr(n,"Random Layout",1),(!e.a&&(e.a=new he(ns,e,10,11)),e.a).i==0){or(n);return}h=u(qe(e,(y3t(),w4e)),19),h&&h.a!=0?o=new T$(h.a):o=new zit,r=lM(ye(qe(e,b4e))),d=lM(ye(qe(e,m4e))),s=u(qe(e,v4e),116),L4n(e,o,r,d,s),or(n)},P(Ec,"RandomLayoutProvider",1126);var _4e;I(553,1,{}),l.qf=function(){return new $e(this.f.i,this.f.j)},l.We=function(e){return XXt(e,(ci(),hl))?qe(this.f,S4e):qe(this.f,e)},l.rf=function(){return new $e(this.f.g,this.f.f)},l.sf=function(){return this.g},l.Xe=function(e){return r2(this.f,e)},l.tf=function(e){yu(this.f,e.a),xu(this.f,e.b)},l.uf=function(e){Qv(this.f,e.a),Xv(this.f,e.b)},l.vf=function(e){this.g=e},l.g=0;var S4e;P(U_,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),I(554,1,{839:1},aR),l.wf=function(){var e,n;if(!this.b)for(this.b=y$(Zj(this.a).i),n=new er(Zj(this.a));n.e!=n.i.gc();)e=u(dr(n),137),ue(this.b,new net(e));return this.b},l.b=null,P(U_,"ElkGraphAdapters/ElkEdgeAdapter",554),I(301,553,{},Sm),l.xf=function(){return Tse(this)},l.a=null,P(U_,"ElkGraphAdapters/ElkGraphAdapter",301),I(630,553,{181:1},net),P(U_,"ElkGraphAdapters/ElkLabelAdapter",630),I(629,553,{680:1},rnt),l.wf=function(){return Ifn(this)},l.Af=function(){var e;return e=u(qe(this.f,(ci(),KO)),142),!e&&(e=new M9),e},l.Cf=function(){return Dfn(this)},l.Ef=function(e){var n;n=new wnt(e),bo(this.f,(ci(),KO),n)},l.Ff=function(e){bo(this.f,(ci(),q2),new pvt(e))},l.yf=function(){return this.d},l.zf=function(){var e,n;if(!this.a)for(this.a=new le,n=new ar(lr(fD(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Lr(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=new le,n=new ar(lr(G0(u(this.f,33)).a.Kc(),new z));zr(n);)e=u(Lr(n),79),ue(this.c,new aR(e));return this.c},l.Df=function(){return i$(u(this.f,33)).i!=0||je(Re(u(this.f,33).We((ci(),WO))))},l.Gf=function(){kan(this,(Im(),_4e))},l.a=null,l.b=null,l.c=null,l.d=null,l.e=null,P(U_,"ElkGraphAdapters/ElkNodeAdapter",629),I(1266,553,{838:1},Ezt),l.wf=function(){return $fn(this)},l.zf=function(){var e,n;if(!this.a)for(this.a=Hd(u(this.f,118).xg().i),n=new er(u(this.f,118).xg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.a,new aR(e));return this.a},l.Bf=function(){var e,n;if(!this.c)for(this.c=Hd(u(this.f,118).yg().i),n=new er(u(this.f,118).yg());n.e!=n.i.gc();)e=u(dr(n),79),ue(this.c,new aR(e));return this.c},l.Hf=function(){return u(u(this.f,118).We((ci(),o5)),61)},l.If=function(){var e,n,r,s,o,h,d,w;for(s=k1(u(this.f,118)),r=new er(u(this.f,118).yg());r.e!=r.i.gc();)for(e=u(dr(r),79),w=new er((!e.c&&(e.c=new Cn(br,e,5,8)),e.c));w.e!=w.i.gc();){if(d=u(dr(w),82),Zm(Mo(d),s))return!0;if(Mo(d)==s&&je(Re(qe(e,(ci(),sft)))))return!0}for(n=new er(u(this.f,118).xg());n.e!=n.i.gc();)for(e=u(dr(n),79),h=new er((!e.b&&(e.b=new Cn(br,e,4,7)),e.b));h.e!=h.i.gc();)if(o=u(dr(h),82),Zm(Mo(o),s))return!0;return!1},l.a=null,l.b=null,l.c=null,P(U_,"ElkGraphAdapters/ElkPortAdapter",1266),I(1267,1,Oi,GZ),l.ue=function(e,n){return cwn(u(e,118),u(n,118))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(U_,"ElkGraphAdapters/PortComparator",1267);var kb=Yi(dh,"EObject"),I7=Yi(O4,hde),Hh=Yi(O4,fde),sN=Yi(O4,dde),aN=Yi(O4,"ElkShape"),br=Yi(O4,gde),Ws=Yi(O4,l8t),Zi=Yi(O4,pde),oN=Yi(dh,bde),nA=Yi(dh,"EFactory"),A4e,mft=Yi(dh,vde),r1=Yi(dh,"EPackage"),ta,L4e,M4e,BAt,YV,I4e,RAt,jAt,$At,Eb,D4e,O4e,qo=Yi(O4,h8t),ns=Yi(O4,f8t),fl=Yi(O4,d8t);I(90,1,wde),l.Jg=function(){return this.Kg(),null},l.Kg=function(){return null},l.Lg=function(){return this.Kg(),!1},l.Mg=function(){return!1},l.Ng=function(e){mi(this,e)},P(k6,"BasicNotifierImpl",90),I(97,90,kde),l.nh=function(){return ml(this)},l.Og=function(e,n){return e},l.Pg=function(){throw rt(new Or)},l.Qg=function(e){var n;return n=no(u(yn(this.Tg(),this.Vg()),18)),this.eh().ih(this,n.n,n.f,e)},l.Rg=function(e,n){throw rt(new Or)},l.Sg=function(e,n,r){return zl(this,e,n,r)},l.Tg=function(){var e;return this.Pg()&&(e=this.Pg().ck(),e)?e:this.zh()},l.Ug=function(){return Gst(this)},l.Vg=function(){throw rt(new Or)},l.Wg=function(){var e,n;return n=this.ph().dk(),!n&&this.Pg().ik(n=(V9(),e=Dwt(pd(this.Tg())),e==null?Sft:new NM(this,e))),n},l.Xg=function(e,n){return e},l.Yg=function(e){var n;return n=e.Gj(),n?e.aj():Vi(this.Tg(),e)},l.Zg=function(){var e;return e=this.Pg(),e?e.fk():null},l.$g=function(){return this.Pg()?this.Pg().ck():null},l._g=function(e,n,r){return jz(this,e,n,r)},l.ah=function(e){return I8(this,e)},l.bh=function(e,n){return Prt(this,e,n)},l.dh=function(){var e;return e=this.Pg(),!!e&&e.gk()},l.eh=function(){throw rt(new Or)},l.fh=function(){return Dz(this)},l.gh=function(e,n,r,s){return e6(this,e,n,s)},l.hh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Qj(this,this.yh(),n-this.Ah(),e,r)},l.ih=function(e,n,r,s){return c$(this,e,n,s)},l.jh=function(e,n,r){var s;return s=u(yn(this.Tg(),n),66),s.Nj().Rj(this,this.yh(),n-this.Ah(),e,r)},l.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},l.lh=function(e){return est(this,e)},l.mh=function(e){return dQt(this,e)},l.oh=function(e){return Rle(this,e)},l.ph=function(){throw rt(new Or)},l.qh=function(){return this.Pg()?this.Pg().ek():null},l.rh=function(){return Dz(this)},l.sh=function(e,n){jst(this,e,n)},l.th=function(e){this.ph().hk(e)},l.uh=function(e){this.ph().kk(e)},l.vh=function(e){this.ph().jk(e)},l.wh=function(e,n){var r,s,o,h;return h=this.Zg(),h&&e&&(n=Ba(h.Vk(),this,n),h.Zk(this)),s=this.eh(),s&&(aat(this,this.eh(),this.Vg()).Bb&Ya?(o=s.fh(),o&&(e?!h&&o.Zk(this):o.Yk(this))):(n=(r=this.Vg(),r>=0?this.Qg(n):this.eh().ih(this,-1-r,null,n)),n=this.Sg(null,-1,n))),this.uh(e),n},l.xh=function(e){var n,r,s,o,h,d,w,k;if(r=this.Tg(),h=Vi(r,e),n=this.Ah(),h>=n)return u(e,66).Nj().Uj(this,this.yh(),h-n);if(h<=-1)if(d=E4((Ru(),ma),r,e),d){if(to(),u(d,66).Oj()||(d=qx(Eo(ma,d))),o=(s=this.Yg(d),u(s>=0?this._g(s,!0,!0):lw(this,d,!0),153)),k=d.Zj(),k>1||k==-1)return u(u(o,215).hl(e,!1),76)}else throw rt(new Pn(ab+e.ne()+Fct));else if(e.$j())return s=this.Yg(e),u(s>=0?this._g(s,!1,!0):lw(this,e,!1),76);return w=new OVt(this,e),w},l.yh=function(){return Omt(this)},l.zh=function(){return(jp(),Ln).S},l.Ah=function(){return Zn(this.zh())},l.Bh=function(e){Nst(this,e)},l.Ib=function(){return bf(this)},P(Mn,"BasicEObjectImpl",97);var N4e;I(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),l.Ch=function(e){var n;return n=Nmt(this),n[e]},l.Dh=function(e,n){var r;r=Nmt(this),Ji(r,e,n)},l.Eh=function(e){var n;n=Nmt(this),Ji(n,e,null)},l.Jg=function(){return u(In(this,4),126)},l.Kg=function(){throw rt(new Or)},l.Lg=function(){return(this.Db&4)!=0},l.Pg=function(){throw rt(new Or)},l.Fh=function(e){t6(this,2,e)},l.Rg=function(e,n){this.Db=n<<16|this.Db&255,this.Fh(e)},l.Tg=function(){return bu(this)},l.Vg=function(){return this.Db>>16},l.Wg=function(){var e,n;return V9(),n=Dwt(pd((e=u(In(this,16),26),e||this.zh()))),n==null?Sft:new NM(this,n)},l.Mg=function(){return(this.Db&1)==0},l.Zg=function(){return u(In(this,128),1935)},l.$g=function(){return u(In(this,16),26)},l.dh=function(){return(this.Db&32)!=0},l.eh=function(){return u(In(this,2),49)},l.kh=function(){return(this.Db&64)!=0},l.ph=function(){throw rt(new Or)},l.qh=function(){return u(In(this,64),281)},l.th=function(e){t6(this,16,e)},l.uh=function(e){t6(this,128,e)},l.vh=function(e){t6(this,64,e)},l.yh=function(){return iu(this)},l.Db=0,P(Mn,"MinimalEObjectImpl",114),I(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l.Fh=function(e){this.Cb=e},l.eh=function(){return this.Cb},P(Mn,"MinimalEObjectImpl/Container",115),I(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return V3t(this,e,n,r)},l.jh=function(e,n,r){return O4t(this,e,n,r)},l.lh=function(e){return Gwt(this,e)},l.sh=function(e,n){Myt(this,e,n)},l.zh=function(){return Zc(),O4e},l.Bh=function(e){myt(this,e)},l.Ve=function(){return Vie(this)},l.We=function(e){return qe(this,e)},l.Xe=function(e){return r2(this,e)},l.Ye=function(e,n){return bo(this,e,n)},P(_2,"EMapPropertyHolderImpl",1985),I(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},vp),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return this.a!=0;case 1:return this.b!=0}return est(this,e)},l.sh=function(e,n){switch(e){case 0:W$(this,Xt(ye(n)));return;case 1:K$(this,Xt(ye(n)));return}jst(this,e,n)},l.zh=function(){return Zc(),L4e},l.Bh=function(e){switch(e){case 0:W$(this,0);return;case 1:K$(this,0);return}Nst(this,e)},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new Th(bf(this)),e.a+=" (x: ",R3(e,this.a),e.a+=", y: ",R3(e,this.b),e.a+=")",e.a)},l.a=0,l.b=0,P(_2,"ElkBendPointImpl",567),I(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return Yyt(this,e,n,r)},l.hh=function(e,n,r){return Ast(this,e,n,r)},l.jh=function(e,n,r){return fit(this,e,n,r)},l.lh=function(e){return hyt(this,e)},l.sh=function(e,n){l4t(this,e,n)},l.zh=function(){return Zc(),I4e},l.Bh=function(e){Vyt(this,e)},l.zg=function(){return this.k},l.Ag=function(){return Zj(this)},l.Ib=function(){return jit(this)},l.k=null,P(_2,"ElkGraphElementImpl",723),I(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return s3t(this,e,n,r)},l.lh=function(e){return f3t(this,e)},l.sh=function(e,n){h4t(this,e,n)},l.zh=function(){return Zc(),D4e},l.Bh=function(e){v3t(this,e)},l.Bg=function(){return this.f},l.Cg=function(){return this.g},l.Dg=function(){return this.i},l.Eg=function(){return this.j},l.Fg=function(e,n){sj(this,e,n)},l.Gg=function(e,n){m1(this,e,n)},l.Hg=function(e){yu(this,e)},l.Ig=function(e){xu(this,e)},l.Ib=function(){return Ost(this)},l.f=0,l.g=0,l.i=0,l.j=0,P(_2,"ElkShapeImpl",724),I(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),l._g=function(e,n,r){return j3t(this,e,n,r)},l.hh=function(e,n,r){return i4t(this,e,n,r)},l.jh=function(e,n,r){return s4t(this,e,n,r)},l.lh=function(e){return Ayt(this,e)},l.sh=function(e,n){g5t(this,e,n)},l.zh=function(){return Zc(),M4e},l.Bh=function(e){I3t(this,e)},l.xg=function(){return!this.d&&(this.d=new Cn(Ws,this,8,5)),this.d},l.yg=function(){return!this.e&&(this.e=new Cn(Ws,this,7,4)),this.e},P(_2,"ElkConnectableShapeImpl",725),I(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},fv),l.Qg=function(e){return t4t(this,e)},l._g=function(e,n,r){switch(e){case 3:return rI(this);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b;case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),this.c;case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),this.a;case 7:return Fn(),!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return Fn(),!!g_(this);case 9:return Fn(),!!uw(this);case 10:return Fn(),!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return Yyt(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 3:return this.Cb&&(r=(s=this.Db>>16,s>=0?t4t(this,r):this.Cb.ih(this,-1-s,null,r))),W2t(this,u(e,33),r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Qc(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Qc(this.c,e,r);case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),Qc(this.a,e,r)}return Ast(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 3:return W2t(this,null,r);case 4:return!this.b&&(this.b=new Cn(br,this,4,7)),Ba(this.b,e,r);case 5:return!this.c&&(this.c=new Cn(br,this,5,8)),Ba(this.c,e,r);case 6:return!this.a&&(this.a=new he(Zi,this,6,6)),Ba(this.a,e,r)}return fit(this,e,n,r)},l.lh=function(e){switch(e){case 3:return!!rI(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new Cn(br,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i<=1));case 8:return g_(this);case 9:return uw(this);case 10:return!this.b&&(this.b=new Cn(br,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Cn(br,this,5,8)),this.c.i!=0)}return hyt(this,e)},l.sh=function(e,n){switch(e){case 3:Xst(this,u(n,33));return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b),!this.b&&(this.b=new Cn(br,this,4,7)),rs(this.b,u(n,14));return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c),!this.c&&(this.c=new Cn(br,this,5,8)),rs(this.c,u(n,14));return;case 6:!this.a&&(this.a=new he(Zi,this,6,6)),xr(this.a),!this.a&&(this.a=new he(Zi,this,6,6)),rs(this.a,u(n,14));return}l4t(this,e,n)},l.zh=function(){return Zc(),BAt},l.Bh=function(e){switch(e){case 3:Xst(this,null);return;case 4:!this.b&&(this.b=new Cn(br,this,4,7)),xr(this.b);return;case 5:!this.c&&(this.c=new Cn(br,this,5,8)),xr(this.c);return;case 6:!this.a&&(this.a=new he(Zi,this,6,6)),xr(this.a);return}Vyt(this,e)},l.Ib=function(){return Ele(this)},P(_2,"ElkEdgeImpl",352),I(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rd),l.Qg=function(e){return X3t(this,e)},l._g=function(e,n,r){switch(e){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new Ss(Hh,this,5)),this.a;case 6:return lQt(this);case 7:return n?ast(this):this.i;case 8:return n?sst(this):this.f;case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),this.g;case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),this.e;case 11:return this.d}return V3t(this,e,n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?X3t(this,r):this.Cb.ih(this,-1-o,null,r))),K2t(this,u(e,79),r);case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),Qc(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),Qc(this.e,e,r)}return h=u(yn((s=u(In(this,16),26),s||(Zc(),YV)),n),66),h.Nj().Qj(this,iu(this),n-Zn((Zc(),YV)),e,r)},l.jh=function(e,n,r){switch(n){case 5:return!this.a&&(this.a=new Ss(Hh,this,5)),Ba(this.a,e,r);case 6:return K2t(this,null,r);case 9:return!this.g&&(this.g=new Cn(Zi,this,9,10)),Ba(this.g,e,r);case 10:return!this.e&&(this.e=new Cn(Zi,this,10,9)),Ba(this.e,e,r)}return O4t(this,e,n,r)},l.lh=function(e){switch(e){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!lQt(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return Gwt(this,e)},l.sh=function(e,n){switch(e){case 1:B8(this,Xt(ye(n)));return;case 2:j8(this,Xt(ye(n)));return;case 3:F8(this,Xt(ye(n)));return;case 4:R8(this,Xt(ye(n)));return;case 5:!this.a&&(this.a=new Ss(Hh,this,5)),xr(this.a),!this.a&&(this.a=new Ss(Hh,this,5)),rs(this.a,u(n,14));return;case 6:Tce(this,u(n,79));return;case 7:J$(this,u(n,82));return;case 8:Z$(this,u(n,82));return;case 9:!this.g&&(this.g=new Cn(Zi,this,9,10)),xr(this.g),!this.g&&(this.g=new Cn(Zi,this,9,10)),rs(this.g,u(n,14));return;case 10:!this.e&&(this.e=new Cn(Zi,this,10,9)),xr(this.e),!this.e&&(this.e=new Cn(Zi,this,10,9)),rs(this.e,u(n,14));return;case 11:nyt(this,Br(n));return}Myt(this,e,n)},l.zh=function(){return Zc(),YV},l.Bh=function(e){switch(e){case 1:B8(this,0);return;case 2:j8(this,0);return;case 3:F8(this,0);return;case 4:R8(this,0);return;case 5:!this.a&&(this.a=new Ss(Hh,this,5)),xr(this.a);return;case 6:Tce(this,null);return;case 7:J$(this,null);return;case 8:Z$(this,null);return;case 9:!this.g&&(this.g=new Cn(Zi,this,9,10)),xr(this.g);return;case 10:!this.e&&(this.e=new Cn(Zi,this,10,9)),xr(this.e);return;case 11:nyt(this,null);return}myt(this,e)},l.Ib=function(){return qoe(this)},l.b=0,l.c=0,l.d=null,l.j=0,l.k=0,P(_2,"ElkEdgeSectionImpl",439),I(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l._g=function(e,n,r){var s;return e==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab):oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r)):(o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r))},l.jh=function(e,n,r){var s,o;return n==0?(!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r)):(o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r))},l.lh=function(e){var n;return e==0?!!this.Ab&&this.Ab.i!=0:sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.oh=function(e){return kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.uh=function(e){t6(this,128,e)},l.zh=function(){return dn(),Z4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){this.Bb|=1},l.Hh=function(e){return m_(this,e)},l.Bb=0,P(Mn,"EModelElementImpl",150),I(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},qB),l.Ih=function(e,n){return Jle(this,e,n)},l.Jh=function(e){var n,r,s,o,h;if(this.a!=Fl(e)||e.Bb&256)throw rt(new Pn(Rct+e.zb+kw));for(s=So(e);Lc(s.a).i!=0;){if(r=u(ED(s,0,(n=u(St(Lc(s.a),0),87),h=n.c,Et(h,88)?u(h,26):(dn(),Wh))),26),cw(r))return o=Fl(r).Nh().Jh(r),u(o,49).th(e),o;s=So(r)}return(e.D!=null?e.D:e.B)=="java.util.Map$Entry"?new KKt(e):new Nvt(e)},l.Kh=function(e,n){return pw(this,e,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.a}return oh(this,e-Zn((dn(),Sb)),yn((s=u(In(this,16),26),s||Sb),e),n,r)},l.hh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 1:return this.a&&(r=u(this.a,49).ih(this,4,r1,r)),Hyt(this,u(e,235),r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Sb)),n),66),o.Nj().Qj(this,iu(this),n-Zn((dn(),Sb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 1:return Hyt(this,null,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Sb)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Sb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return sh(this,e-Zn((dn(),Sb)),yn((n=u(In(this,16),26),n||Sb),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Tae(this,u(n,235));return}fh(this,e-Zn((dn(),Sb)),yn((r=u(In(this,16),26),r||Sb),e),n)},l.zh=function(){return dn(),Sb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Tae(this,null);return}lh(this,e-Zn((dn(),Sb)),yn((n=u(In(this,16),26),n||Sb),e))};var rA,zAt,P4e;P(Mn,"EFactoryImpl",704),I(wf,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},J5),l.Ih=function(e,n){switch(e.yj()){case 12:return u(n,146).tg();case 13:return $o(n);default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k;switch(e.G==-1&&(e.G=(n=Fl(e),n?Fg(n.Mh(),e):-1)),e.G){case 4:return h=new YT,h;case 6:return d=new Bpt,d;case 7:return w=new Rpt,w;case 8:return s=new fv,s;case 9:return r=new vp,r;case 10:return o=new rd,o;case 11:return k=new YF,k;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 13:case 12:return null;default:throw rt(new Pn(HE+e.ne()+kw))}},P(_2,"ElkGraphFactoryImpl",wf),I(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),l.Wg=function(){var e,n;return n=(e=u(In(this,16),26),Dwt(pd(e||this.zh()))),n==null?(V9(),V9(),Sft):new pWt(this,n)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.ne()}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),J4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.ne=function(){return this.zb},l.Lh=function(e){Xc(this,e)},l.Ib=function(){return XC(this)},l.zb=null,P(Mn,"ENamedElementImpl",438),I(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},YXt),l.Qg=function(e){return Rse(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),this.rb;case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?u(this.Cb,235):null:hQt(this)}return oh(this,e-Zn((dn(),np)),yn((s=u(In(this,16),26),s||np),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 4:return this.sb&&(r=u(this.sb,49).ih(this,1,nA,r)),Wyt(this,u(e,471),r);case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),Qc(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),Qc(this.vb,e,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?Rse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,7,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),np)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),np)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 4:return Wyt(this,null,r);case 5:return!this.rb&&(this.rb=new qm(this,i1,this)),Ba(this.rb,e,r);case 6:return!this.vb&&(this.vb=new Ix(r1,this,6,7)),Ba(this.vb,e,r);case 7:return zl(this,null,7,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),np)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),np)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!hQt(this)}return sh(this,e-Zn((dn(),np)),yn((n=u(In(this,16),26),n||np),e))},l.oh=function(e){var n;return n=M2n(this,e),n||kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:az(this,Br(n));return;case 3:sz(this,Br(n));return;case 4:Dst(this,u(n,471));return;case 5:!this.rb&&(this.rb=new qm(this,i1,this)),xr(this.rb),!this.rb&&(this.rb=new qm(this,i1,this)),rs(this.rb,u(n,14));return;case 6:!this.vb&&(this.vb=new Ix(r1,this,6,7)),xr(this.vb),!this.vb&&(this.vb=new Ix(r1,this,6,7)),rs(this.vb,u(n,14));return}fh(this,e-Zn((dn(),np)),yn((r=u(In(this,16),26),r||np),e),n)},l.vh=function(e){var n,r;if(e&&this.rb)for(r=new er(this.rb);r.e!=r.i.gc();)n=dr(r),Et(n,351)&&(u(n,351).w=null);t6(this,64,e)},l.zh=function(){return dn(),np},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:az(this,null);return;case 3:sz(this,null);return;case 4:Dst(this,null);return;case 5:!this.rb&&(this.rb=new qm(this,i1,this)),xr(this.rb);return;case 6:!this.vb&&(this.vb=new Ix(r1,this,6,7)),xr(this.vb);return}lh(this,e-Zn((dn(),np)),yn((n=u(In(this,16),26),n||np),e))},l.Gh=function(){mst(this)},l.Mh=function(){return!this.rb&&(this.rb=new qm(this,i1,this)),this.rb},l.Nh=function(){return this.sb},l.Oh=function(){return this.ub},l.Ph=function(){return this.xb},l.Qh=function(){return this.yb},l.Rh=function(e){this.ub=e},l.Ib=function(){var e;return this.Db&64?XC(this):(e=new Th(XC(this)),e.a+=" (nsURI: ",fo(e,this.yb),e.a+=", nsPrefix: ",fo(e,this.xb),e.a+=")",e.a)},l.xb=null,l.yb=null,P(Mn,"EPackageImpl",179),I(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Qoe),l.q=!1,l.r=!1;var F4e=!1;P(_2,"ElkGraphPackageImpl",555),I(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},YT),l.Qg=function(e){return Q3t(this,e)},l._g=function(e,n,r){switch(e){case 7:return fQt(this);case 8:return this.a}return s3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 7:return this.Cb&&(r=(s=this.Db>>16,s>=0?Q3t(this,r):this.Cb.ih(this,-1-s,null,r))),Yvt(this,u(e,160),r)}return Ast(this,e,n,r)},l.jh=function(e,n,r){return n==7?Yvt(this,null,r):fit(this,e,n,r)},l.lh=function(e){switch(e){case 7:return!!fQt(this);case 8:return!hn("",this.a)}return f3t(this,e)},l.sh=function(e,n){switch(e){case 7:A5t(this,u(n,160));return;case 8:Ymt(this,Br(n));return}h4t(this,e,n)},l.zh=function(){return Zc(),RAt},l.Bh=function(e){switch(e){case 7:A5t(this,null);return;case 8:Ymt(this,"");return}v3t(this,e)},l.Ib=function(){return Rae(this)},l.a="",P(_2,"ElkLabelImpl",354),I(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpt),l.Qg=function(e){return e4t(this,e)},l._g=function(e,n,r){switch(e){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new he(ns,this,10,11)),this.a;case 11:return ts(this);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),this.b;case 13:return Fn(),!this.a&&(this.a=new he(ns,this,10,11)),this.a.i>0}return j3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),Qc(this.c,e,r);case 10:return!this.a&&(this.a=new he(ns,this,10,11)),Qc(this.a,e,r);case 11:return this.Cb&&(r=(s=this.Db>>16,s>=0?e4t(this,r):this.Cb.ih(this,-1-s,null,r))),rvt(this,u(e,33),r);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),Qc(this.b,e,r)}return i4t(this,e,n,r)},l.jh=function(e,n,r){switch(n){case 9:return!this.c&&(this.c=new he(fl,this,9,9)),Ba(this.c,e,r);case 10:return!this.a&&(this.a=new he(ns,this,10,11)),Ba(this.a,e,r);case 11:return rvt(this,null,r);case 12:return!this.b&&(this.b=new he(Ws,this,12,3)),Ba(this.b,e,r)}return s4t(this,e,n,r)},l.lh=function(e){switch(e){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!ts(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new he(ns,this,10,11)),this.a.i>0}return Ayt(this,e)},l.sh=function(e,n){switch(e){case 9:!this.c&&(this.c=new he(fl,this,9,9)),xr(this.c),!this.c&&(this.c=new he(fl,this,9,9)),rs(this.c,u(n,14));return;case 10:!this.a&&(this.a=new he(ns,this,10,11)),xr(this.a),!this.a&&(this.a=new he(ns,this,10,11)),rs(this.a,u(n,14));return;case 11:C5t(this,u(n,33));return;case 12:!this.b&&(this.b=new he(Ws,this,12,3)),xr(this.b),!this.b&&(this.b=new he(Ws,this,12,3)),rs(this.b,u(n,14));return}g5t(this,e,n)},l.zh=function(){return Zc(),jAt},l.Bh=function(e){switch(e){case 9:!this.c&&(this.c=new he(fl,this,9,9)),xr(this.c);return;case 10:!this.a&&(this.a=new he(ns,this,10,11)),xr(this.a);return;case 11:C5t(this,null);return;case 12:!this.b&&(this.b=new he(Ws,this,12,3)),xr(this.b);return}I3t(this,e)},l.Ib=function(){return H5t(this)},P(_2,"ElkNodeImpl",239),I(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Rpt),l.Qg=function(e){return Z3t(this,e)},l._g=function(e,n,r){return e==9?k1(this):j3t(this,e,n,r)},l.hh=function(e,n,r){var s;switch(n){case 9:return this.Cb&&(r=(s=this.Db>>16,s>=0?Z3t(this,r):this.Cb.ih(this,-1-s,null,r))),Y2t(this,u(e,33),r)}return i4t(this,e,n,r)},l.jh=function(e,n,r){return n==9?Y2t(this,null,r):s4t(this,e,n,r)},l.lh=function(e){return e==9?!!k1(this):Ayt(this,e)},l.sh=function(e,n){switch(e){case 9:T5t(this,u(n,33));return}g5t(this,e,n)},l.zh=function(){return Zc(),$At},l.Bh=function(e){switch(e){case 9:T5t(this,null);return}I3t(this,e)},l.Ib=function(){return Tue(this)},P(_2,"ElkPortImpl",186);var B4e=Yi(Ra,"BasicEMap/Entry");I(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},YF),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.Hb=function(){return Iv(this)},l.Uh=function(e){Xmt(this,u(e,146))},l._g=function(e,n,r){switch(e){case 0:return this.b;case 1:return this.c}return jz(this,e,n,r)},l.lh=function(e){switch(e){case 0:return!!this.b;case 1:return this.c!=null}return est(this,e)},l.sh=function(e,n){switch(e){case 0:Xmt(this,u(n,146));return;case 1:Jmt(this,n);return}jst(this,e,n)},l.zh=function(){return Zc(),Eb},l.Bh=function(e){switch(e){case 0:Xmt(this,null);return;case 1:Jmt(this,null);return}Nst(this,e)},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e?Hi(e):0),this.a},l.dd=function(){return this.c},l.Th=function(e){this.a=e},l.ed=function(e){var n;return n=this.c,Jmt(this,e),n},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new _p,Vr(Vr(Vr(e,this.b?this.b.tg():Tu),Pot),dC(this.c)),e.a)},l.a=-1,l.c=null;var $w=P(_2,"ElkPropertyToValueMapEntryImpl",1092);I(984,1,{},XF),P(wa,"JsonAdapter",984),I(210,60,U0,ad),P(wa,"JsonImportException",210),I(857,1,{},jse),P(wa,"JsonImporter",857),I(891,1,{},gVt),P(wa,"JsonImporter/lambda$0$Type",891),I(892,1,{},pVt),P(wa,"JsonImporter/lambda$1$Type",892),I(900,1,{},Y$t),P(wa,"JsonImporter/lambda$10$Type",900),I(902,1,{},bVt),P(wa,"JsonImporter/lambda$11$Type",902),I(903,1,{},vVt),P(wa,"JsonImporter/lambda$12$Type",903),I(909,1,{},LXt),P(wa,"JsonImporter/lambda$13$Type",909),I(908,1,{},AXt),P(wa,"JsonImporter/lambda$14$Type",908),I(904,1,{},wVt),P(wa,"JsonImporter/lambda$15$Type",904),I(905,1,{},mVt),P(wa,"JsonImporter/lambda$16$Type",905),I(906,1,{},yVt),P(wa,"JsonImporter/lambda$17$Type",906),I(907,1,{},xVt),P(wa,"JsonImporter/lambda$18$Type",907),I(912,1,{},X$t),P(wa,"JsonImporter/lambda$19$Type",912),I(893,1,{},Q$t),P(wa,"JsonImporter/lambda$2$Type",893),I(910,1,{},Z$t),P(wa,"JsonImporter/lambda$20$Type",910),I(911,1,{},J$t),P(wa,"JsonImporter/lambda$21$Type",911),I(915,1,{},tzt),P(wa,"JsonImporter/lambda$22$Type",915),I(913,1,{},ezt),P(wa,"JsonImporter/lambda$23$Type",913),I(914,1,{},nzt),P(wa,"JsonImporter/lambda$24$Type",914),I(917,1,{},rzt),P(wa,"JsonImporter/lambda$25$Type",917),I(916,1,{},izt),P(wa,"JsonImporter/lambda$26$Type",916),I(918,1,Un,kVt),l.td=function(e){san(this.b,this.a,Br(e))},P(wa,"JsonImporter/lambda$27$Type",918),I(919,1,Un,EVt),l.td=function(e){aan(this.b,this.a,Br(e))},P(wa,"JsonImporter/lambda$28$Type",919),I(920,1,{},TVt),P(wa,"JsonImporter/lambda$29$Type",920),I(896,1,{},szt),P(wa,"JsonImporter/lambda$3$Type",896),I(921,1,{},CVt),P(wa,"JsonImporter/lambda$30$Type",921),I(922,1,{},azt),P(wa,"JsonImporter/lambda$31$Type",922),I(923,1,{},ozt),P(wa,"JsonImporter/lambda$32$Type",923),I(924,1,{},czt),P(wa,"JsonImporter/lambda$33$Type",924),I(925,1,{},uzt),P(wa,"JsonImporter/lambda$34$Type",925),I(859,1,{},lzt),P(wa,"JsonImporter/lambda$35$Type",859),I(929,1,{},yKt),P(wa,"JsonImporter/lambda$36$Type",929),I(926,1,Un,hzt),l.td=function(e){usn(this.a,u(e,469))},P(wa,"JsonImporter/lambda$37$Type",926),I(927,1,Un,IVt),l.td=function(e){BYe(this.a,this.b,u(e,202))},P(wa,"JsonImporter/lambda$38$Type",927),I(928,1,Un,DVt),l.td=function(e){RYe(this.a,this.b,u(e,202))},P(wa,"JsonImporter/lambda$39$Type",928),I(894,1,{},fzt),P(wa,"JsonImporter/lambda$4$Type",894),I(930,1,Un,dzt),l.td=function(e){lsn(this.a,u(e,8))},P(wa,"JsonImporter/lambda$40$Type",930),I(895,1,{},gzt),P(wa,"JsonImporter/lambda$5$Type",895),I(899,1,{},pzt),P(wa,"JsonImporter/lambda$6$Type",899),I(897,1,{},bzt),P(wa,"JsonImporter/lambda$7$Type",897),I(898,1,{},vzt),P(wa,"JsonImporter/lambda$8$Type",898),I(901,1,{},wzt),P(wa,"JsonImporter/lambda$9$Type",901),I(948,1,Un,mzt),l.td=function(e){Bx(this.a,new Hm(Br(e)))},P(wa,"JsonMetaDataConverter/lambda$0$Type",948),I(949,1,Un,yzt),l.td=function(e){_en(this.a,u(e,237))},P(wa,"JsonMetaDataConverter/lambda$1$Type",949),I(950,1,Un,xzt),l.td=function(e){Ern(this.a,u(e,149))},P(wa,"JsonMetaDataConverter/lambda$2$Type",950),I(951,1,Un,kzt),l.td=function(e){Sen(this.a,u(e,175))},P(wa,"JsonMetaDataConverter/lambda$3$Type",951),I(237,22,{3:1,35:1,22:1,237:1},Sx);var XV,QV,yft,ZV,JV,tU,xft,kft,eU=jr(BD,"GraphFeature",237,Hr,Yan,QJe),R4e;I(13,1,{35:1,146:1},Gi,Os,mn,eo),l.wd=function(e){return FXe(this,u(e,146))},l.Fb=function(e){return XXt(this,e)},l.wg=function(){return De(this)},l.tg=function(){return this.b},l.Hb=function(){return Bg(this.b)},l.Ib=function(){return this.b},P(BD,"Property",13),I(818,1,Oi,bpt),l.ue=function(e,n){return tln(this,u(e,94),u(n,94))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(BD,"PropertyHolderComparator",818),I(695,1,ra,vpt),l.Nb=function(e){pa(this,e)},l.Pb=function(){return lan(this)},l.Qb=function(){pHt()},l.Ob=function(){return!!this.a},P(yH,"ElkGraphUtil/AncestorIterator",695);var qAt=Yi(Ra,"EList");I(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),l.Vc=function(e,n){JC(this,e,n)},l.Fc=function(e){return Mr(this,e)},l.Wc=function(e,n){return yyt(this,e,n)},l.Gc=function(e){return rs(this,e)},l.Zh=function(){return new Mx(this)},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},l.ai=function(){return!0},l.bi=function(e,n){},l.ci=function(){},l.di=function(e,n){Brt(this,e,n)},l.ei=function(e,n,r){},l.fi=function(e,n){},l.gi=function(e,n,r){},l.Fb=function(e){return lue(this,e)},l.Hb=function(){return pyt(this)},l.hi=function(){return!1},l.Kc=function(){return new er(this)},l.Yc=function(){return new Lx(this)},l.Zc=function(e){var n;if(n=this.gc(),e<0||e>n)throw rt(new jm(e,n));return new qnt(this,e)},l.ji=function(e,n){this.ii(e,this.Xc(n))},l.Mc=function(e){return j$(this,e)},l.li=function(e,n){return n},l._c=function(e,n){return u4(this,e,n)},l.Ib=function(){return o3t(this)},l.ni=function(){return!0},l.oi=function(e,n){return Q8(this,n)},P(Ra,"AbstractEList",67),I(63,67,_d,tx,Kv,oyt),l.Vh=function(e,n){return Lst(this,e,n)},l.Wh=function(e){return fse(this,e)},l.Xh=function(e,n){zI(this,e,n)},l.Yh=function(e){uI(this,e)},l.pi=function(e){return Amt(this,e)},l.$b=function(){RC(this)},l.Hc=function(e){return fE(this,e)},l.Xb=function(e){return St(this,e)},l.qi=function(e){var n,r,s;++this.j,r=this.g==null?0:this.g.length,e>r&&(s=this.g,n=r+(r/2|0)+4,n=0?(this.$c(n),!0):!1},l.mi=function(e,n){return this.Ui(e,this.oi(e,n))},l.gc=function(){return this.Vi()},l.Pc=function(){return this.Wi()},l.Qc=function(e){return this.Xi(e)},l.Ib=function(){return this.Yi()},P(Ra,"DelegatingEList",1995),I(1996,1995,a0e),l.Vh=function(e,n){return Z5t(this,e,n)},l.Wh=function(e){return this.Vh(this.Vi(),e)},l.Xh=function(e,n){Yoe(this,e,n)},l.Yh=function(e){$oe(this,e)},l.ai=function(){return!this.bj()},l.$b=function(){C_(this)},l.Zi=function(e,n,r,s,o){return new ZXt(this,e,n,r,s,o)},l.$i=function(e){mi(this.Ai(),e)},l._i=function(){return null},l.aj=function(){return-1},l.Ai=function(){return null},l.bj=function(){return!1},l.cj=function(e,n){return n},l.dj=function(e,n){return n},l.ej=function(){return!1},l.fj=function(){return!this.Ri()},l.ii=function(e,n){var r,s;return this.ej()?(s=this.fj(),r=M4t(this,e,n),this.$i(this.Zi(7,de(n),r,e,s)),r):M4t(this,e,n)},l.$c=function(e){var n,r,s,o;return this.ej()?(r=null,s=this.fj(),n=this.Zi(4,o=Dj(this,e),null,e,s),this.bj()&&o?(r=this.dj(o,r),r?(r.Ei(n),r.Fi()):this.$i(n)):r?(r.Ei(n),r.Fi()):this.$i(n),o):(o=Dj(this,e),this.bj()&&o&&(r=this.dj(o,null),r&&r.Fi()),o)},l.mi=function(e,n){return rle(this,e,n)},P(k6,"DelegatingNotifyingListImpl",1996),I(143,1,QD),l.Ei=function(e){return v4t(this,e)},l.Fi=function(){Urt(this)},l.xi=function(){return this.d},l._i=function(){return null},l.gj=function(){return null},l.yi=function(e){return-1},l.zi=function(){return Hce(this)},l.Ai=function(){return null},l.Bi=function(){return O5t(this)},l.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},l.hj=function(){return!1},l.Di=function(e){var n,r,s,o,h,d,w,k,C,M,F;switch(this.d){case 1:case 2:switch(o=e.xi(),o){case 1:case 2:if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0}case 4:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null))return C=pxt(this),k=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,d=e.Ci(),this.d=6,F=new Kv(2),k<=d?(Mr(F,this.n),Mr(F,e.Bi()),this.g=ct(ot(Tr,1),Xr,25,15,[this.o=k,d+1])):(Mr(F,e.Bi()),Mr(F,this.n),this.g=ct(ot(Tr,1),Xr,25,15,[this.o=d,k])),this.n=F,C||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.Ai())&&this.yi(null)==e.yi(null)){for(C=pxt(this),d=e.Ci(),M=u(this.g,48),s=Pt(Tr,Xr,25,M.length+1,15,1),n=0;n>>0,n.toString(16))),s.a+=" (eventType: ",this.d){case 1:{s.a+="SET";break}case 2:{s.a+="UNSET";break}case 3:{s.a+="ADD";break}case 5:{s.a+="ADD_MANY";break}case 4:{s.a+="REMOVE";break}case 6:{s.a+="REMOVE_MANY";break}case 7:{s.a+="MOVE";break}case 8:{s.a+="REMOVING_ADAPTER";break}case 9:{s.a+="RESOLVE";break}default:{uet(s,this.d);break}}if(Iue(this)&&(s.a+=", touch: true"),s.a+=", position: ",uet(s,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),s.a+=", notifier: ",oC(s,this.Ai()),s.a+=", feature: ",oC(s,this._i()),s.a+=", oldValue: ",oC(s,O5t(this)),s.a+=", newValue: ",this.d==6&&Et(this.g,48)){for(r=u(this.g,48),s.a+="[",e=0;e10?((!this.b||this.c.j!=this.a)&&(this.b=new yC(this),this.a=this.j),S0(this.b,e)):fE(this,e)},l.ni=function(){return!0},l.a=0,P(Ra,"AbstractEList/1",953),I(295,73,sot,jm),P(Ra,"AbstractEList/BasicIndexOutOfBoundsException",295),I(40,1,ra,er),l.Nb=function(e){pa(this,e)},l.mj=function(){if(this.i.j!=this.f)throw rt(new eh)},l.nj=function(){return dr(this)},l.Ob=function(){return this.e!=this.i.gc()},l.Pb=function(){return this.nj()},l.Qb=function(){u_(this)},l.e=0,l.f=0,l.g=-1,P(Ra,"AbstractEList/EIterator",40),I(278,40,Jd,Lx,qnt),l.Qb=function(){u_(this)},l.Rb=function(e){gie(this,e)},l.oj=function(){var e;try{return e=this.d.Xb(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.pj=function(e){pse(this,e)},l.Sb=function(){return this.e!=0},l.Tb=function(){return this.e},l.Ub=function(){return this.oj()},l.Vb=function(){return this.e-1},l.Wb=function(e){this.pj(e)},P(Ra,"AbstractEList/EListIterator",278),I(341,40,ra,Mx),l.nj=function(){return nst(this)},l.Qb=function(){throw rt(new Or)},P(Ra,"AbstractEList/NonResolvingEIterator",341),I(385,278,Jd,PM,lvt),l.Rb=function(e){throw rt(new Or)},l.nj=function(){var e;try{return e=this.c.ki(this.e),this.mj(),this.g=this.e++,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.oj=function(){var e;try{return e=this.c.ki(--this.e),this.mj(),this.g=this.e,e}catch(n){throw n=Wi(n),Et(n,73)?(this.mj(),rt(new lc)):rt(n)}},l.Qb=function(){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ra,"AbstractEList/NonResolvingEListIterator",385),I(1982,67,o0e),l.Vh=function(e,n){var r,s,o,h,d,w,k,C,M,F,H;if(o=n.gc(),o!=0){for(C=u(In(this.a,4),126),M=C==null?0:C.length,H=M+o,s=Tit(this,H),F=M-e,F>0&&Ic(C,e,s,e+o,F),k=n.Kc(),d=0;dr)throw rt(new jm(e,r));return new uXt(this,e)},l.$b=function(){var e,n;++this.j,e=u(In(this.a,4),126),n=e==null?0:e.length,cE(this,null),Brt(this,n,e)},l.Hc=function(e){var n,r,s,o,h;if(n=u(In(this.a,4),126),n!=null){if(e!=null){for(s=n,o=0,h=s.length;o=r)throw rt(new jm(e,r));return n[e]},l.Xc=function(e){var n,r,s;if(n=u(In(this.a,4),126),n!=null){if(e!=null){for(r=0,s=n.length;rr)throw rt(new jm(e,r));return new cXt(this,e)},l.ii=function(e,n){var r,s,o;if(r=kie(this),o=r==null?0:r.length,e>=o)throw rt(new mo(Wct+e+S2+o));if(n>=o)throw rt(new mo(Kct+n+S2+o));return s=r[n],e!=n&&(e0&&Ic(e,0,n,0,r),n},l.Qc=function(e){var n,r,s;return n=u(In(this.a,4),126),s=n==null?0:n.length,s>0&&(e.lengths&&Ji(e,s,null),e};var j4e;P(Ra,"ArrayDelegatingEList",1982),I(1038,40,ra,wJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},l.Qb=function(){u_(this),this.a=u(In(this.b.a,4),126)},P(Ra,"ArrayDelegatingEList/EIterator",1038),I(706,278,Jd,DYt,cXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},l.pj=function(e){pse(this,e),this.a=u(In(this.b.a,4),126)},l.Qb=function(){u_(this),this.a=u(In(this.b.a,4),126)},P(Ra,"ArrayDelegatingEList/EListIterator",706),I(1039,341,ra,mJt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},P(Ra,"ArrayDelegatingEList/NonResolvingEIterator",1039),I(707,385,Jd,OYt,uXt),l.mj=function(){if(this.b.j!=this.f||Gt(u(In(this.b.a,4),126))!==Gt(this.a))throw rt(new eh)},P(Ra,"ArrayDelegatingEList/NonResolvingEListIterator",707),I(606,295,sot,Vet),P(Ra,"BasicEList/BasicIndexOutOfBoundsException",606),I(696,63,_d,Ybt),l.Vc=function(e,n){throw rt(new Or)},l.Fc=function(e){throw rt(new Or)},l.Wc=function(e,n){throw rt(new Or)},l.Gc=function(e){throw rt(new Or)},l.$b=function(){throw rt(new Or)},l.qi=function(e){throw rt(new Or)},l.Kc=function(){return this.Zh()},l.Yc=function(){return this.$h()},l.Zc=function(e){return this._h(e)},l.ii=function(e,n){throw rt(new Or)},l.ji=function(e,n){throw rt(new Or)},l.$c=function(e){throw rt(new Or)},l.Mc=function(e){throw rt(new Or)},l._c=function(e,n){throw rt(new Or)},P(Ra,"BasicEList/UnmodifiableEList",696),I(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),l.Vc=function(e,n){_Xe(this,e,u(n,42))},l.Fc=function(e){return fQe(this,u(e,42))},l.Jc=function(e){va(this,e)},l.Xb=function(e){return u(St(this.c,e),133)},l.ii=function(e,n){return u(this.c.ii(e,n),42)},l.ji=function(e,n){SXe(this,e,u(n,42))},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return u(this.c.$c(e),42)},l._c=function(e,n){return yen(this,e,u(n,42))},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.Wc=function(e,n){return this.c.Wc(e,n)},l.Gc=function(e){return this.c.Gc(e)},l.$b=function(){this.c.$b()},l.Hc=function(e){return this.c.Hc(e)},l.Ic=function(e){return II(this.c,e)},l.qj=function(){var e,n,r;if(this.d==null){for(this.d=Pt(HAt,I8t,63,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)e=u(n.nj(),133),qz(this,e);this.e=r}},l.Fb=function(e){return iKt(this,e)},l.Hb=function(){return pyt(this.c)},l.Xc=function(e){return this.c.Xc(e)},l.rj=function(){this.c=new Tzt(this)},l.dc=function(){return this.f==0},l.Kc=function(){return this.c.Kc()},l.Yc=function(){return this.c.Yc()},l.Zc=function(e){return this.c.Zc(e)},l.sj=function(){return fI(this)},l.tj=function(e,n,r){return new xKt(e,n,r)},l.uj=function(){return new wp},l.Mc=function(e){return Bee(this,e)},l.gc=function(){return this.f},l.bd=function(e,n){return new Kd(this.c,e,n)},l.Pc=function(){return this.c.Pc()},l.Qc=function(e){return this.c.Qc(e)},l.Ib=function(){return o3t(this.c)},l.e=0,l.f=0,P(Ra,"BasicEMap",705),I(1033,63,_d,Tzt),l.bi=function(e,n){uKe(this,u(n,133))},l.ei=function(e,n,r){var s;++(s=this,u(n,133),s).a.e},l.fi=function(e,n){lKe(this,u(n,133))},l.gi=function(e,n,r){JXe(this,u(n,133),u(r,133))},l.di=function(e,n){Sne(this.a)},P(Ra,"BasicEMap/1",1033),I(1034,63,_d,wp),l.ri=function(e){return Pt(xxn,c0e,612,e,0,1)},P(Ra,"BasicEMap/2",1034),I(1035,N1,ju,Czt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return Wit(this.a,e)},l.Kc=function(){return this.a.f==0?(f8(),lN.a):new aHt(this.a)},l.Mc=function(e){var n;return n=this.a.f,Iz(this.a,e),this.a.f!=n},l.gc=function(){return this.a.f},P(Ra,"BasicEMap/3",1035),I(1036,28,wy,_zt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){return hue(this.a,e)},l.Kc=function(){return this.a.f==0?(f8(),lN.a):new oHt(this.a)},l.gc=function(){return this.a.f},P(Ra,"BasicEMap/4",1036),I(1037,N1,ju,Szt),l.$b=function(){this.a.c.$b()},l.Hc=function(e){var n,r,s,o,h,d,w,k,C;if(this.a.f>0&&Et(e,42)&&(this.a.qj(),k=u(e,42),w=k.cd(),o=w==null?0:Hi(w),h=X2t(this.a,o),n=this.a.d[h],n)){for(r=u(n.g,367),C=n.i,d=0;d"+this.c},l.a=0;var xxn=P(Ra,"BasicEMap/EntryImpl",612);I(536,1,{},Tk),P(Ra,"BasicEMap/View",536);var lN;I(768,1,{}),l.Fb=function(e){return p5t((vn(),io),e)},l.Hb=function(){return Syt((vn(),io))},l.Ib=function(){return Qp((vn(),io))},P(Ra,"ECollections/BasicEmptyUnmodifiableEList",768),I(1312,1,Jd,QF),l.Nb=function(e){pa(this,e)},l.Rb=function(e){throw rt(new Or)},l.Ob=function(){return!1},l.Sb=function(){return!1},l.Pb=function(){throw rt(new lc)},l.Tb=function(){return 0},l.Ub=function(){throw rt(new lc)},l.Vb=function(){return-1},l.Qb=function(){throw rt(new Or)},l.Wb=function(e){throw rt(new Or)},P(Ra,"ECollections/BasicEmptyUnmodifiableEList/1",1312),I(1310,768,{20:1,14:1,15:1,58:1},vqt),l.Vc=function(e,n){AHt()},l.Fc=function(e){return LHt()},l.Wc=function(e,n){return MHt()},l.Gc=function(e){return IHt()},l.$b=function(){DHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return Zbt((vn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return OHt()},l.ji=function(e,n){NHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return PHt()},l.Mc=function(e){return FHt()},l._c=function(e,n){return BHt()},l.gc=function(){return 0},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return vn(),new Kd(io,e,n)},l.Pc=function(){return Zvt((vn(),io))},l.Qc=function(e){return vn(),XI(io,e)},P(Ra,"ECollections/EmptyUnmodifiableEList",1310),I(1311,768,{20:1,14:1,15:1,58:1,589:1},wqt),l.Vc=function(e,n){AHt()},l.Fc=function(e){return LHt()},l.Wc=function(e,n){return MHt()},l.Gc=function(e){return IHt()},l.$b=function(){DHt()},l.Hc=function(e){return!1},l.Ic=function(e){return!1},l.Jc=function(e){va(this,e)},l.Xb=function(e){return Zbt((vn(),e)),null},l.Xc=function(e){return-1},l.dc=function(){return!0},l.Kc=function(){return this.a},l.Yc=function(){return this.a},l.Zc=function(e){return this.a},l.ii=function(e,n){return OHt()},l.ji=function(e,n){NHt()},l.Lc=function(){return new Tn(null,new _n(this,16))},l.$c=function(e){return PHt()},l.Mc=function(e){return FHt()},l._c=function(e,n){return BHt()},l.gc=function(){return 0},l.ad=function(e){e4(this,e)},l.Nc=function(){return new _n(this,16)},l.Oc=function(){return new Tn(null,new _n(this,16))},l.bd=function(e,n){return vn(),new Kd(io,e,n)},l.Pc=function(){return Zvt((vn(),io))},l.Qc=function(e){return vn(),XI(io,e)},l.sj=function(){return vn(),vn(),a0},P(Ra,"ECollections/EmptyUnmodifiableEMap",1311);var VAt=Yi(Ra,"Enumerator"),nU;I(281,1,{281:1},eat),l.Fb=function(e){var n;return this===e?!0:Et(e,281)?(n=u(e,281),this.f==n.f&&ztn(this.i,n.i)&&Ant(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&Ant(this.d,n.d)&&Ant(this.g,n.g)&&Ant(this.e,n.e)&&Phn(this,n)):!1},l.Hb=function(){return this.f},l.Ib=function(){return que(this)},l.f=0;var $4e=0,z4e=0,q4e=0,H4e=0,UAt=0,WAt=0,KAt=0,YAt=0,XAt=0,G4e,iA=0,sA=0,V4e=0,U4e=0,rU,QAt;P(Ra,"URI",281),I(1091,43,_4,mqt),l.zc=function(e,n){return u(xo(this,Br(e),u(n,281)),281)},P(Ra,"URI/URICache",1091),I(497,63,_d,Ck,Nj),l.hi=function(){return!0},P(Ra,"UniqueEList",497),I(581,60,U0,F$),P(Ra,"WrappedException",581);var Zr=Yi(dh,h0e),Qy=Yi(dh,f0e),Au=Yi(dh,d0e),Zy=Yi(dh,g0e),i1=Yi(dh,p0e),Gh=Yi(dh,"EClass"),Cft=Yi(dh,"EDataType"),W4e;I(1183,43,_4,yqt),l.xc=function(e){return ea(e)?Fc(this,e):ec(Ao(this.f,e))},P(dh,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var iU=Yi(dh,"EEnum"),eg=Yi(dh,b0e),ho=Yi(dh,v0e),Vh=Yi(dh,w0e),Uh,zw=Yi(dh,m0e),Jy=Yi(dh,y0e);I(1029,1,{},VZ),l.Ib=function(){return"NIL"},P(dh,"EStructuralFeature/Internal/DynamicValueHolder/1",1029);var K4e;I(1028,43,_4,xqt),l.xc=function(e){return ea(e)?Fc(this,e):ec(Ao(this.f,e))},P(dh,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var lu=Yi(dh,x0e),V6=Yi(dh,"EValidator/PatternMatcher"),ZAt,JAt,Ln,Jg,t3,Cb,Y4e,X4e,Q4e,_b,tp,Sb,qw,V1,Z4e,J4e,Wh,ep,t5e,np,e3,c5,Qa,e5e,n5e,Hw,sU=Yi($i,"FeatureMap/Entry");I(535,1,{72:1},JR),l.ak=function(){return this.a},l.dd=function(){return this.b},P(Mn,"BasicEObjectImpl/1",535),I(1027,1,tut,OVt),l.Wj=function(e){return Prt(this.a,this.b,e)},l.fj=function(){return dQt(this.a,this.b)},l.Wb=function(e){Nwt(this.a,this.b,e)},l.Xj=function(){Ben(this.a,this.b)},P(Mn,"BasicEObjectImpl/4",1027),I(1983,1,{108:1}),l.bk=function(e){this.e=e==0?r5e:Pt(Xn,Ie,1,e,5,1)},l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.ck=function(){return this.c},l.dk=function(){throw rt(new Or)},l.ek=function(){throw rt(new Or)},l.fk=function(){return this.d},l.gk=function(){return this.e!=null},l.hk=function(e){this.c=e},l.ik=function(e){throw rt(new Or)},l.jk=function(e){throw rt(new Or)},l.kk=function(e){this.d=e};var r5e;P(Mn,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),I(185,1983,{108:1},th),l.dk=function(){return this.a},l.ek=function(){return this.b},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},P(Mn,"BasicEObjectImpl/EPropertiesHolderImpl",185),I(506,97,kde,_k),l.Kg=function(){return this.f},l.Pg=function(){return this.k},l.Rg=function(e,n){this.g=e,this.i=n},l.Tg=function(){return this.j&2?this.ph().ck():this.zh()},l.Vg=function(){return this.i},l.Mg=function(){return(this.j&1)!=0},l.eh=function(){return this.g},l.kh=function(){return(this.j&4)!=0},l.ph=function(){return!this.k&&(this.k=new th),this.k},l.th=function(e){this.ph().hk(e),e?this.j|=2:this.j&=-3},l.vh=function(e){this.ph().jk(e),e?this.j|=4:this.j&=-5},l.zh=function(){return(jp(),Ln).S},l.i=0,l.j=1,P(Mn,"EObjectImpl",506),I(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},Nvt),l.Ch=function(e){return this.e[e]},l.Dh=function(e,n){this.e[e]=n},l.Eh=function(e){this.e[e]=null},l.Tg=function(){return this.d},l.Yg=function(e){return Vi(this.d,e)},l.$g=function(){return this.d},l.dh=function(){return this.e!=null},l.ph=function(){return!this.k&&(this.k=new ZF),this.k},l.th=function(e){this.d=e},l.yh=function(){var e;return this.e==null&&(e=Zn(this.d),this.e=e==0?i5e:Pt(Xn,Ie,1,e,5,1)),this},l.Ah=function(){return 0};var i5e;P(Mn,"DynamicEObjectImpl",780),I(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},KKt),l.Fb=function(e){return this===e},l.Hb=function(){return Iv(this)},l.th=function(e){this.d=e,this.b=gD(e,"key"),this.c=gD(e,Y_)},l.Sh=function(){var e;return this.a==-1&&(e=Wrt(this,this.b),this.a=e==null?0:Hi(e)),this.a},l.cd=function(){return Wrt(this,this.b)},l.dd=function(){return Wrt(this,this.c)},l.Th=function(e){this.a=e},l.Uh=function(e){Nwt(this,this.b,e)},l.ed=function(e){var n;return n=Wrt(this,this.c),Nwt(this,this.c,e),n},l.a=0,P(Mn,"DynamicEObjectImpl/BasicEMapEntry",1376),I(1377,1,{108:1},ZF),l.bk=function(e){throw rt(new Or)},l.Ch=function(e){throw rt(new Or)},l.Dh=function(e,n){throw rt(new Or)},l.Eh=function(e){throw rt(new Or)},l.ck=function(){throw rt(new Or)},l.dk=function(){return this.a},l.ek=function(){return this.b},l.fk=function(){return this.c},l.gk=function(){throw rt(new Or)},l.hk=function(e){throw rt(new Or)},l.ik=function(e){this.a=e},l.jk=function(e){this.b=e},l.kk=function(e){this.c=e},P(Mn,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),I(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},JF),l.Qg=function(e){return J3t(this,e)},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new yl((dn(),Qa),cc,this)),this.b):(!this.b&&(this.b=new yl((dn(),Qa),cc,this)),fI(this.b));case 3:return wQt(this);case 4:return!this.a&&(this.a=new Ss(kb,this,4)),this.a;case 5:return!this.c&&(this.c=new U3(kb,this,5)),this.c}return oh(this,e-Zn((dn(),Jg)),yn((s=u(In(this,16),26),s||Jg),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?J3t(this,r):this.Cb.ih(this,-1-o,null,r))),Xvt(this,u(e,147),r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),Jg)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),Jg)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.b&&(this.b=new yl((dn(),Qa),cc,this)),kj(this.b,e,r);case 3:return Xvt(this,null,r);case 4:return!this.a&&(this.a=new Ss(kb,this,4)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Jg)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Jg)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!wQt(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return sh(this,e-Zn((dn(),Jg)),yn((n=u(In(this,16),26),n||Jg),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:_tn(this,Br(n));return;case 2:!this.b&&(this.b=new yl((dn(),Qa),cc,this)),lz(this.b,n);return;case 3:Dce(this,u(n,147));return;case 4:!this.a&&(this.a=new Ss(kb,this,4)),xr(this.a),!this.a&&(this.a=new Ss(kb,this,4)),rs(this.a,u(n,14));return;case 5:!this.c&&(this.c=new U3(kb,this,5)),xr(this.c),!this.c&&(this.c=new U3(kb,this,5)),rs(this.c,u(n,14));return}fh(this,e-Zn((dn(),Jg)),yn((r=u(In(this,16),26),r||Jg),e),n)},l.zh=function(){return dn(),Jg},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:tyt(this,null);return;case 2:!this.b&&(this.b=new yl((dn(),Qa),cc,this)),this.b.c.$b();return;case 3:Dce(this,null);return;case 4:!this.a&&(this.a=new Ss(kb,this,4)),xr(this.a);return;case 5:!this.c&&(this.c=new U3(kb,this,5)),xr(this.c);return}lh(this,e-Zn((dn(),Jg)),yn((n=u(In(this,16),26),n||Jg),e))},l.Ib=function(){return Wre(this)},l.d=null,P(Mn,"EAnnotationImpl",510),I(151,705,D8t,Tl),l.Xh=function(e,n){cXe(this,e,u(n,42))},l.lk=function(e,n){return nZe(this,u(e,42),n)},l.pi=function(e){return u(u(this.c,69).pi(e),133)},l.Zh=function(){return u(this.c,69).Zh()},l.$h=function(){return u(this.c,69).$h()},l._h=function(e){return u(this.c,69)._h(e)},l.mk=function(e,n){return kj(this,e,n)},l.Wj=function(e){return u(this.c,76).Wj(e)},l.rj=function(){},l.fj=function(){return u(this.c,76).fj()},l.tj=function(e,n,r){var s;return s=u(Fl(this.b).Nh().Jh(this.b),133),s.Th(e),s.Uh(n),s.ed(r),s},l.uj=function(){return new mpt(this)},l.Wb=function(e){lz(this,e)},l.Xj=function(){u(this.c,76).Xj()},P($i,"EcoreEMap",151),I(158,151,D8t,yl),l.qj=function(){var e,n,r,s,o,h;if(this.d==null){for(h=Pt(HAt,I8t,63,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=u(r.nj(),133),s=n.Sh(),o=(s&vi)%h.length,e=h[o],!e&&(e=h[o]=new mpt(this)),e.Fc(n);this.d=h}},P(Mn,"EAnnotationImpl/1",158),I(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0)}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:this.Lh(Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),n5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:this.Lh(null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.ok(1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){Lh(this),this.Bb|=1},l.Yj=function(){return Lh(this)},l.Zj=function(){return this.t},l.$j=function(){var e;return e=this.t,e>1||e==-1},l.hi=function(){return(this.Bb&512)!=0},l.nk=function(e,n){return Kyt(this,e,n)},l.ok=function(e){ty(this,e)},l.Ib=function(){return s5t(this)},l.s=0,l.t=1,P(Mn,"ETypedElementImpl",284),I(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),l.Qg=function(e){return Lse(this,e)},l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!this.$j();case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this)}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Lse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,17,r)}return h=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 17:return zl(this,null,17,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this)}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:this.ok(u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),e5e},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.ok(1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.Gh=function(){k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.Gj=function(){return this.f},l.zj=function(){return mE(this)},l.Hj=function(){return Vm(this)},l.Lj=function(){return null},l.pk=function(){return this.k},l.aj=function(){return this.n},l.Mj=function(){return Qz(this)},l.Nj=function(){var e,n,r,s,o,h,d,w,k;return this.p||(r=Vm(this),(r.i==null&&pd(r),r.i).length,s=this.Lj(),s&&Zn(Vm(s)),o=Lh(this),d=o.Bj(),e=d?d.i&1?d==dl?Bs:d==Tr?ja:d==r3?XE:d==ia?ca:d==Lb?Tw:d==f5?Cw:d==Hu?E6:aS:d:null,n=mE(this),w=o.zj(),aln(this),this.Bb&bd&&((h=a4t((Ru(),ma),r))&&h!=this||(h=qx(Eo(ma,this))))?this.p=new PVt(this,h):this.$j()?this.rk()?s?this.Bb&zu?e?this.sk()?this.p=new Zb(47,e,this,s):this.p=new Zb(5,e,this,s):this.sk()?this.p=new e2(46,this,s):this.p=new e2(4,this,s):e?this.sk()?this.p=new Zb(49,e,this,s):this.p=new Zb(7,e,this,s):this.sk()?this.p=new e2(48,this,s):this.p=new e2(6,this,s):this.Bb&zu?e?e==M2?this.p=new Cg(50,B4e,this):this.sk()?this.p=new Cg(43,e,this):this.p=new Cg(1,e,this):this.sk()?this.p=new Sg(42,this):this.p=new Sg(0,this):e?e==M2?this.p=new Cg(41,B4e,this):this.sk()?this.p=new Cg(45,e,this):this.p=new Cg(3,e,this):this.sk()?this.p=new Sg(44,this):this.p=new Sg(2,this):Et(o,148)?e==sU?this.p=new Sg(40,this):this.Bb&512?this.Bb&zu?e?this.p=new Cg(9,e,this):this.p=new Sg(8,this):e?this.p=new Cg(11,e,this):this.p=new Sg(10,this):this.Bb&zu?e?this.p=new Cg(13,e,this):this.p=new Sg(12,this):e?this.p=new Cg(15,e,this):this.p=new Sg(14,this):s?(k=s.t,k>1||k==-1?this.sk()?this.Bb&zu?e?this.p=new Zb(25,e,this,s):this.p=new e2(24,this,s):e?this.p=new Zb(27,e,this,s):this.p=new e2(26,this,s):this.Bb&zu?e?this.p=new Zb(29,e,this,s):this.p=new e2(28,this,s):e?this.p=new Zb(31,e,this,s):this.p=new e2(30,this,s):this.sk()?this.Bb&zu?e?this.p=new Zb(33,e,this,s):this.p=new e2(32,this,s):e?this.p=new Zb(35,e,this,s):this.p=new e2(34,this,s):this.Bb&zu?e?this.p=new Zb(37,e,this,s):this.p=new e2(36,this,s):e?this.p=new Zb(39,e,this,s):this.p=new e2(38,this,s)):this.sk()?this.Bb&zu?e?this.p=new Cg(17,e,this):this.p=new Sg(16,this):e?this.p=new Cg(19,e,this):this.p=new Sg(18,this):this.Bb&zu?e?this.p=new Cg(21,e,this):this.p=new Sg(20,this):e?this.p=new Cg(23,e,this):this.p=new Sg(22,this):this.qk()?this.sk()?this.p=new kKt(u(o,26),this,s):this.p=new Owt(u(o,26),this,s):Et(o,148)?e==sU?this.p=new Sg(40,this):this.Bb&zu?e?this.p=new yYt(n,w,this,(Uit(),d==Tr?aLt:d==dl?eLt:d==Lb?oLt:d==r3?sLt:d==ia?iLt:d==f5?cLt:d==Hu?nLt:d==mh?rLt:Aft)):this.p=new DXt(u(o,148),n,w,this):e?this.p=new mYt(n,w,this,(Uit(),d==Tr?aLt:d==dl?eLt:d==Lb?oLt:d==r3?sLt:d==ia?iLt:d==f5?cLt:d==Hu?nLt:d==mh?rLt:Aft)):this.p=new IXt(u(o,148),n,w,this):this.rk()?s?this.Bb&zu?this.sk()?this.p=new TKt(u(o,26),this,s):this.p=new Tvt(u(o,26),this,s):this.sk()?this.p=new EKt(u(o,26),this,s):this.p=new xnt(u(o,26),this,s):this.Bb&zu?this.sk()?this.p=new mWt(u(o,26),this):this.p=new R2t(u(o,26),this):this.sk()?this.p=new wWt(u(o,26),this):this.p=new ont(u(o,26),this):this.sk()?s?this.Bb&zu?this.p=new CKt(u(o,26),this,s):this.p=new kvt(u(o,26),this,s):this.Bb&zu?this.p=new yWt(u(o,26),this):this.p=new j2t(u(o,26),this):s?this.Bb&zu?this.p=new _Kt(u(o,26),this,s):this.p=new Evt(u(o,26),this,s):this.Bb&zu?this.p=new xWt(u(o,26),this):this.p=new Pj(u(o,26),this)),this.p},l.Ij=function(){return(this.Bb&wf)!=0},l.qk=function(){return!1},l.rk=function(){return!1},l.Jj=function(){return(this.Bb&bd)!=0},l.Oj=function(){return Yrt(this)},l.sk=function(){return!1},l.Kj=function(){return(this.Bb&zu)!=0},l.tk=function(e){this.k=e},l.Lh=function(e){mrt(this,e)},l.Ib=function(){return pq(this)},l.e=!1,l.n=0,P(Mn,"EStructuralFeatureImpl",449),I(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Utt),l._g=function(e,n,r){var s,o;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),!!e5t(this);case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this);case 18:return Fn(),!!(this.Bb&dc);case 19:return n?dit(this):DJt(this)}return oh(this,e-Zn((dn(),t3)),yn((s=u(In(this,16),26),s||t3),e),n,r)},l.lh=function(e){var n,r;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e5t(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this);case 18:return(this.Bb&dc)!=0;case 19:return!!DJt(this)}return sh(this,e-Zn((dn(),t3)),yn((n=u(In(this,16),26),n||t3),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:lHt(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return;case 18:Rit(this,je(Re(n)));return}fh(this,e-Zn((dn(),t3)),yn((r=u(In(this,16),26),r||t3),e),n)},l.zh=function(){return dn(),t3},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:this.b=0,ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return;case 18:Rit(this,!1);return}lh(this,e-Zn((dn(),t3)),yn((n=u(In(this,16),26),n||t3),e))},l.Gh=function(){dit(this),k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.$j=function(){return e5t(this)},l.nk=function(e,n){return this.b=0,this.a=null,Kyt(this,e,n)},l.ok=function(e){lHt(this,e)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Th(pq(this)),e.a+=" (iD: ",kg(e,(this.Bb&dc)!=0),e.a+=")",e.a)},l.b=0,P(Mn,"EAttributeImpl",322),I(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),l.uk=function(e){return e.Tg()==this},l.Qg=function(e){return wst(this,e)},l.Rg=function(e,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=e},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return this.zj();case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A}return oh(this,e-Zn(this.zh()),yn((s=u(In(this,16),26),s||this.zh()),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r)}return h=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),h.Nj().Qj(this,iu(this),n-Zn(this.zh()),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r)}return o=u(yn((s=u(In(this,16),26),s||this.zh()),n),66),o.Nj().Rj(this,iu(this),n-Zn(this.zh()),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0}return sh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return}fh(this,e-Zn(this.zh()),yn((r=u(In(this,16),26),r||this.zh()),e),n)},l.zh=function(){return dn(),Y4e},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return}lh(this,e-Zn(this.zh()),yn((n=u(In(this,16),26),n||this.zh()),e))},l.yj=function(){var e;return this.G==-1&&(this.G=(e=Fl(this),e?Fg(e.Mh(),this):-1)),this.G},l.zj=function(){return null},l.Aj=function(){return Fl(this)},l.vk=function(){return this.v},l.Bj=function(){return cw(this)},l.Cj=function(){return this.D!=null?this.D:this.B},l.Dj=function(){return this.F},l.wj=function(e){return lat(this,e)},l.wk=function(e){this.v=e},l.xk=function(e){cne(this,e)},l.yk=function(e){this.C=e},l.Lh=function(e){p$(this,e)},l.Ib=function(){return Sz(this)},l.C=null,l.D=null,l.G=-1,P(Mn,"EClassifierImpl",351),I(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},XL),l.uk=function(e){return qQe(this,e.Tg())},l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return cw(this);case 4:return null;case 5:return this.F;case 6:return n?Fl(this):C8(this);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),this.A;case 8:return Fn(),!!(this.Bb&256);case 9:return Fn(),!!(this.Bb&512);case 10:return So(this);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),this.q;case 12:return k4(this);case 13:return k_(this);case 14:return k_(this),this.r;case 15:return k4(this),this.k;case 16:return V4t(this);case 17:return pat(this);case 18:return pd(this);case 19:return cq(this);case 20:return k4(this),this.o;case 21:return!this.s&&(this.s=new he(Au,this,21,17)),this.s;case 22:return Lc(this);case 23:return tat(this)}return oh(this,e-Zn((dn(),Cb)),yn((s=u(In(this,16),26),s||Cb),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),Qc(this.q,e,r);case 21:return!this.s&&(this.s=new he(Au,this,21,17)),Qc(this.s,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),Cb)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),Cb)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r);case 11:return!this.q&&(this.q=new he(Vh,this,11,10)),Ba(this.q,e,r);case 21:return!this.s&&(this.s=new he(Au,this,21,17)),Ba(this.s,e,r);case 22:return Ba(Lc(this),e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Cb)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Cb)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&Lc(this.u.a).i!=0&&!(this.n&&ost(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return k4(this).i!=0;case 13:return k_(this).i!=0;case 14:return k_(this),this.r.i!=0;case 15:return k4(this),this.k.i!=0;case 16:return V4t(this).i!=0;case 17:return pat(this).i!=0;case 18:return pd(this).i!=0;case 19:return cq(this).i!=0;case 20:return k4(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&ost(this.n);case 23:return tat(this).i!=0}return sh(this,e-Zn((dn(),Cb)),yn((n=u(In(this,16),26),n||Cb),e))},l.oh=function(e){var n;return n=this.i==null||this.q&&this.q.i!=0?null:gD(this,e),n||kxt(this,e)},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return;case 8:Xyt(this,je(Re(n)));return;case 9:Qyt(this,je(Re(n)));return;case 10:C_(So(this)),rs(So(this),u(n,14));return;case 11:!this.q&&(this.q=new he(Vh,this,11,10)),xr(this.q),!this.q&&(this.q=new he(Vh,this,11,10)),rs(this.q,u(n,14));return;case 21:!this.s&&(this.s=new he(Au,this,21,17)),xr(this.s),!this.s&&(this.s=new he(Au,this,21,17)),rs(this.s,u(n,14));return;case 22:xr(Lc(this)),rs(Lc(this),u(n,14));return}fh(this,e-Zn((dn(),Cb)),yn((r=u(In(this,16),26),r||Cb),e),n)},l.zh=function(){return dn(),Cb},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return;case 8:Xyt(this,!1);return;case 9:Qyt(this,!1);return;case 10:this.u&&C_(this.u);return;case 11:!this.q&&(this.q=new he(Vh,this,11,10)),xr(this.q);return;case 21:!this.s&&(this.s=new he(Au,this,21,17)),xr(this.s);return;case 22:this.n&&xr(this.n);return}lh(this,e-Zn((dn(),Cb)),yn((n=u(In(this,16),26),n||Cb),e))},l.Gh=function(){var e,n;if(k4(this),k_(this),V4t(this),pat(this),pd(this),cq(this),tat(this),RC(stn(rl(this))),this.s)for(e=0,n=this.s.i;e=0;--n)St(this,n);return m3t(this,e)},l.Xj=function(){xr(this)},l.oi=function(e,n){return Iee(this,e,n)},P($i,"EcoreEList",622),I(496,622,zo,WM),l.ai=function(){return!1},l.aj=function(){return this.c},l.bj=function(){return!1},l.Fk=function(){return!0},l.hi=function(){return!0},l.li=function(e,n){return n},l.ni=function(){return!1},l.c=0,P($i,"EObjectEList",496),I(85,496,zo,Ss),l.bj=function(){return!0},l.Dk=function(){return!1},l.rk=function(){return!0},P($i,"EObjectContainmentEList",85),I(545,85,zo,hj),l.ci=function(){this.b=!0},l.fj=function(){return this.b},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.b,this.b=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.b=!1},l.b=!1,P($i,"EObjectContainmentEList/Unsettable",545),I(1140,545,zo,vYt),l.ii=function(e,n){var r,s;return r=u(t_(this,e,n),87),ml(this.e)&&Kk(this,new gI(this.a,7,(dn(),X4e),de(n),(s=r.c,Et(s,88)?u(s,26):Wh),e)),r},l.jj=function(e,n){return Wln(this,u(e,87),n)},l.kj=function(e,n){return Uln(this,u(e,87),n)},l.lj=function(e,n,r){return K1n(this,u(e,87),u(n,87),r)},l.Zi=function(e,n,r,s,o){switch(e){case 3:return DC(this,e,n,r,s,this.i>1);case 5:return DC(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return ost(this)},l.Xj=function(){xr(this)},P(Mn,"EClassImpl/1",1140),I(1154,1153,M8t),l.ui=function(e){var n,r,s,o,h,d,w;if(r=e.xi(),r!=8){if(s=Mhn(e),s==0)switch(r){case 1:case 9:{w=e.Bi(),w!=null&&(n=rl(u(w,473)),!n.c&&(n.c=new xm),j$(n.c,e.Ai())),d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26))));break}case 3:{d=e.zi(),d!=null&&(o=u(d,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26))));break}case 5:{if(d=e.zi(),d!=null)for(h=u(d,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),Mr(n.c,u(e.Ai(),26)));break}case 4:{w=e.Bi(),w!=null&&(o=u(w,473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai())));break}case 6:{if(w=e.Bi(),w!=null)for(h=u(w,14).Kc();h.Ob();)o=u(h.Pb(),473),o.Bb&1||(n=rl(o),!n.c&&(n.c=new xm),j$(n.c,e.Ai()));break}}this.Hk(s)}},l.Hk=function(e){bue(this,e)},l.b=63,P(Mn,"ESuperAdapter",1154),I(1155,1154,M8t,Lzt),l.Hk=function(e){hy(this,e)},P(Mn,"EClassImpl/10",1155),I(1144,696,zo),l.Vh=function(e,n){return Lst(this,e,n)},l.Wh=function(e){return fse(this,e)},l.Xh=function(e,n){zI(this,e,n)},l.Yh=function(e){uI(this,e)},l.pi=function(e){return Amt(this,e)},l.mi=function(e,n){return Krt(this,e,n)},l.lk=function(e,n){throw rt(new Or)},l.Zh=function(){return new Mx(this)},l.$h=function(){return new PM(this)},l._h=function(e){return _I(this,e)},l.mk=function(e,n){throw rt(new Or)},l.Wj=function(e){return this},l.fj=function(){return this.i!=0},l.Wb=function(e){throw rt(new Or)},l.Xj=function(){throw rt(new Or)},P($i,"EcoreEList/UnmodifiableEList",1144),I(319,1144,zo,q3),l.ni=function(){return!1},P($i,"EcoreEList/UnmodifiableEList/FastCompare",319),I(1147,319,zo,tre),l.Xc=function(e){var n,r,s;if(Et(e,170)&&(n=u(e,170),r=n.aj(),r!=-1)){for(s=this.i;r4)if(this.wj(e)){if(this.rk()){if(s=u(e,49),r=s.Ug(),w=r==this.b&&(this.Dk()?s.Og(s.Vg(),u(yn(bu(this.b),this.aj()).Yj(),26).Bj())==no(u(yn(bu(this.b),this.aj()),18)).n:-1-s.Vg()==this.aj()),this.Ek()&&!w&&!r&&s.Zg()){for(o=0;o1||s==-1)):!1},l.Dk=function(){var e,n,r;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),r=no(e),!!r):!1},l.Ek=function(){var e,n;return n=yn(bu(this.b),this.aj()),Et(n,99)?(e=u(n,18),(e.Bb&Ya)!=0):!1},l.Xc=function(e){var n,r,s,o;if(s=this.Qi(e),s>=0)return s;if(this.Fk()){for(r=0,o=this.Vi();r=0;--e)ED(this,e,this.Oi(e));return this.Wi()},l.Qc=function(e){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)ED(this,n,this.Oi(n));return this.Xi(e)},l.Xj=function(){C_(this)},l.oi=function(e,n){return pte(this,e,n)},P($i,"DelegatingEcoreEList",742),I(1150,742,N8t,DWt),l.Hi=function(e,n){bQe(this,e,u(n,26))},l.Ii=function(e){lXe(this,u(e,26))},l.Oi=function(e){var n,r;return n=u(St(Lc(this.a),e),87),r=n.c,Et(r,88)?u(r,26):(dn(),Wh)},l.Ti=function(e){var n,r;return n=u(dy(Lc(this.a),e),87),r=n.c,Et(r,88)?u(r,26):(dn(),Wh)},l.Ui=function(e,n){return vfn(this,e,u(n,26))},l.ai=function(){return!1},l.Zi=function(e,n,r,s,o){return null},l.Ji=function(){return new Izt(this)},l.Ki=function(){xr(Lc(this.a))},l.Li=function(e){return Vre(this,e)},l.Mi=function(e){var n,r;for(r=e.Kc();r.Ob();)if(n=r.Pb(),!Vre(this,n))return!1;return!0},l.Ni=function(e){var n,r,s;if(Et(e,15)&&(s=u(e,15),s.gc()==Lc(this.a).i)){for(n=s.Kc(),r=new er(this);n.Ob();)if(Gt(n.Pb())!==Gt(dr(r)))return!1;return!0}return!1},l.Pi=function(){var e,n,r,s,o;for(r=1,n=new er(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),s=(o=e.c,Et(o,88)?u(o,26):(dn(),Wh)),r=31*r+(s?Iv(s):0);return r},l.Qi=function(e){var n,r,s,o;for(s=0,r=new er(Lc(this.a));r.e!=r.i.gc();){if(n=u(dr(r),87),Gt(e)===Gt((o=n.c,Et(o,88)?u(o,26):(dn(),Wh))))return s;++s}return-1},l.Ri=function(){return Lc(this.a).i==0},l.Si=function(){return null},l.Vi=function(){return Lc(this.a).i},l.Wi=function(){var e,n,r,s,o,h;for(h=Lc(this.a).i,o=Pt(Xn,Ie,1,h,5,1),r=0,n=new er(Lc(this.a));n.e!=n.i.gc();)e=u(dr(n),87),o[r++]=(s=e.c,Et(s,88)?u(s,26):(dn(),Wh));return o},l.Xi=function(e){var n,r,s,o,h,d,w;for(w=Lc(this.a).i,e.lengthw&&Ji(e,w,null),s=0,r=new er(Lc(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,Et(d,88)?u(d,26):(dn(),Wh)),Ji(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new xg,o.a+="[",e=Lc(this.a),n=0,s=Lc(this.a).i;n>16,o>=0?wst(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,6,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),Qc(this.a,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),_b)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),_b)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 6:return zl(this,null,6,r);case 7:return!this.A&&(this.A=new Ou(lu,this,7)),Ba(this.A,e,r);case 9:return!this.a&&(this.a=new he(eg,this,9,5)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),_b)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),_b)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!cw(this);case 4:return!!Fyt(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!C8(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),_b)),yn((n=u(In(this,16),26),n||_b),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:p$(this,Br(n));return;case 2:Ket(this,Br(n));return;case 5:CE(this,Br(n));return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A),!this.A&&(this.A=new Ou(lu,this,7)),rs(this.A,u(n,14));return;case 8:xz(this,je(Re(n)));return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),xr(this.a),!this.a&&(this.a=new he(eg,this,9,5)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),_b)),yn((r=u(In(this,16),26),r||_b),e),n)},l.zh=function(){return dn(),_b},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,179)&&(u(this.Cb,179).tb=null),Xc(this,null);return;case 2:Z8(this,null),$8(this,this.D);return;case 5:CE(this,null);return;case 7:!this.A&&(this.A=new Ou(lu,this,7)),xr(this.A);return;case 8:xz(this,!0);return;case 9:!this.a&&(this.a=new he(eg,this,9,5)),xr(this.a);return}lh(this,e-Zn((dn(),_b)),yn((n=u(In(this,16),26),n||_b),e))},l.Gh=function(){var e,n;if(this.a)for(e=0,n=this.a.i;e>16==5?u(this.Cb,671):null}return oh(this,e-Zn((dn(),tp)),yn((s=u(In(this,16),26),s||tp),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?Bse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,5,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),tp)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),tp)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 5:return zl(this,null,5,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),tp)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),tp)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&u(this.Cb,671))}return sh(this,e-Zn((dn(),tp)),yn((n=u(In(this,16),26),n||tp),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:tit(this,u(n,19).a);return;case 3:Doe(this,u(n,1940));return;case 4:nit(this,Br(n));return}fh(this,e-Zn((dn(),tp)),yn((r=u(In(this,16),26),r||tp),e),n)},l.zh=function(){return dn(),tp},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:tit(this,0);return;case 3:Doe(this,null);return;case 4:nit(this,null);return}lh(this,e-Zn((dn(),tp)),yn((n=u(In(this,16),26),n||tp),e))},l.Ib=function(){var e;return e=this.c,e??this.zb},l.b=null,l.c=null,l.d=0,P(Mn,"EEnumLiteralImpl",573);var kxn=Yi(Mn,"EFactoryImpl/InternalEDateTimeFormat");I(489,1,{2015:1},oM),P(Mn,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),I(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},wv),l.Sg=function(e,n,r){var s;return r=zl(this,e,n,r),this.e&&Et(e,170)&&(s=oq(this,this.e),s!=this.c&&(r=_E(this,s,r))),r},l._g=function(e,n,r){var s;switch(e){case 0:return this.f;case 1:return!this.d&&(this.d=new Ss(ho,this,1)),this.d;case 2:return n?wq(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?lst(this):this.a}return oh(this,e-Zn((dn(),qw)),yn((s=u(In(this,16),26),s||qw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return Pre(this,null,r);case 1:return!this.d&&(this.d=new Ss(ho,this,1)),Ba(this.d,e,r);case 3:return Nre(this,null,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),qw)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),qw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return sh(this,e-Zn((dn(),qw)),yn((n=u(In(this,16),26),n||qw),e))},l.sh=function(e,n){var r;switch(e){case 0:eae(this,u(n,87));return;case 1:!this.d&&(this.d=new Ss(ho,this,1)),xr(this.d),!this.d&&(this.d=new Ss(ho,this,1)),rs(this.d,u(n,14));return;case 3:p4t(this,u(n,87));return;case 4:D4t(this,u(n,836));return;case 5:P8(this,u(n,138));return}fh(this,e-Zn((dn(),qw)),yn((r=u(In(this,16),26),r||qw),e),n)},l.zh=function(){return dn(),qw},l.Bh=function(e){var n;switch(e){case 0:eae(this,null);return;case 1:!this.d&&(this.d=new Ss(ho,this,1)),xr(this.d);return;case 3:p4t(this,null);return;case 4:D4t(this,null);return;case 5:P8(this,null);return}lh(this,e-Zn((dn(),qw)),yn((n=u(In(this,16),26),n||qw),e))},l.Ib=function(){var e;return e=new Il(bf(this)),e.a+=" (expression: ",mat(this,e),e.a+=")",e.a};var tLt;P(Mn,"EGenericTypeImpl",241),I(1969,1964,CH),l.Xh=function(e,n){LWt(this,e,n)},l.lk=function(e,n){return LWt(this,this.gc(),e),n},l.pi=function(e){return Qf(this.Gi(),e)},l.Zh=function(){return this.$h()},l.Gi=function(){return new Pzt(this)},l.$h=function(){return this._h(0)},l._h=function(e){return this.Gi().Zc(e)},l.mk=function(e,n){return ry(this,e,!0),n},l.ii=function(e,n){var r,s;return s=yst(this,n),r=this.Zc(e),r.Rb(s),s},l.ji=function(e,n){var r;ry(this,n,!0),r=this.Zc(e),r.Rb(n)},P($i,"AbstractSequentialInternalEList",1969),I(486,1969,CH,NM),l.pi=function(e){return Qf(this.Gi(),e)},l.Zh=function(){return this.b==null?(Eg(),Eg(),hN):this.Jk()},l.Gi=function(){return new tUt(this.a,this.b)},l.$h=function(){return this.b==null?(Eg(),Eg(),hN):this.Jk()},l._h=function(e){var n,r;if(this.b==null){if(e<0||e>1)throw rt(new mo(X_+e+", size=0"));return Eg(),Eg(),hN}for(r=this.Jk(),n=0;n0;)if(n=this.c[--this.d],(!this.e||n.Gj()!=I7||n.aj()!=0)&&(!this.Mk()||this.b.mh(n))){if(h=this.b.bh(n,this.Lk()),this.f=(to(),u(n,66).Oj()),this.f||n.$j()){if(this.Lk()?(s=u(h,15),this.k=s):(s=u(h,69),this.k=this.j=s),Et(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?Wae(this,this.p):soe(this))return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(h!=null)return this.k=null,this.p=null,r=h,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?(e=u(o,72),e.ak(),r=e.dd(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},l.Pb=function(){return hz(this)},l.Tb=function(){return this.a},l.Ub=function(){var e;if(this.g<-1||this.Sb())return--this.a,this.g=0,e=this.i,this.Sb(),e;throw rt(new lc)},l.Vb=function(){return this.a-1},l.Qb=function(){throw rt(new Or)},l.Lk=function(){return!1},l.Wb=function(e){throw rt(new Or)},l.Mk=function(){return!0},l.a=0,l.d=0,l.f=!1,l.g=0,l.n=0,l.o=0;var hN;P($i,"EContentsEList/FeatureIteratorImpl",279),I(697,279,_H,B2t),l.Lk=function(){return!0},P($i,"EContentsEList/ResolvingFeatureIteratorImpl",697),I(1157,697,_H,vWt),l.Mk=function(){return!1},P(Mn,"ENamedElementImpl/1/1",1157),I(1158,279,_H,bWt),l.Mk=function(){return!1},P(Mn,"ENamedElementImpl/1/2",1158),I(36,143,QD,Km,Srt,Qs,qrt,F0,df,zmt,VQt,qmt,UQt,fmt,WQt,Vmt,KQt,dmt,YQt,Hmt,XQt,CC,gI,srt,Gmt,QQt,gmt,ZQt),l._i=function(){return Cmt(this)},l.gj=function(){var e;return e=Cmt(this),e?e.zj():null},l.yi=function(e){return this.b==-1&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,e)},l.Ai=function(){return this.c},l.hj=function(){var e;return e=Cmt(this),e?e.Kj():!1},l.b=-1,P(Mn,"ENotificationImpl",36),I(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},Wtt),l.Qg=function(e){return $se(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,26):null;case 11:return!this.d&&(this.d=new Ou(lu,this,11)),this.d;case 12:return!this.c&&(this.c=new he(zw,this,12,10)),this.c;case 13:return!this.a&&(this.a=new $M(this,this)),this.a;case 14:return il(this)}return oh(this,e-Zn((dn(),ep)),yn((s=u(In(this,16),26),s||ep),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?$se(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,10,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),Qc(this.c,e,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),ep)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),ep)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 10:return zl(this,null,10,r);case 11:return!this.d&&(this.d=new Ou(lu,this,11)),Ba(this.d,e,r);case 12:return!this.c&&(this.c=new he(zw,this,12,10)),Ba(this.c,e,r);case 14:return Ba(il(this),e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),ep)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),ep)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,26));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&il(this.a.a).i!=0&&!(this.b&&cst(this.b));case 14:return!!this.b&&cst(this.b)}return sh(this,e-Zn((dn(),ep)),yn((n=u(In(this,16),26),n||ep),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 11:!this.d&&(this.d=new Ou(lu,this,11)),xr(this.d),!this.d&&(this.d=new Ou(lu,this,11)),rs(this.d,u(n,14));return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),xr(this.c),!this.c&&(this.c=new he(zw,this,12,10)),rs(this.c,u(n,14));return;case 13:!this.a&&(this.a=new $M(this,this)),C_(this.a),!this.a&&(this.a=new $M(this,this)),rs(this.a,u(n,14));return;case 14:xr(il(this)),rs(il(this),u(n,14));return}fh(this,e-Zn((dn(),ep)),yn((r=u(In(this,16),26),r||ep),e),n)},l.zh=function(){return dn(),ep},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 11:!this.d&&(this.d=new Ou(lu,this,11)),xr(this.d);return;case 12:!this.c&&(this.c=new he(zw,this,12,10)),xr(this.c);return;case 13:this.a&&C_(this.a);return;case 14:this.b&&xr(this.b);return}lh(this,e-Zn((dn(),ep)),yn((n=u(In(this,16),26),n||ep),e))},l.Gh=function(){var e,n;if(this.c)for(e=0,n=this.c.i;ew&&Ji(e,w,null),s=0,r=new er(il(this.a));r.e!=r.i.gc();)n=u(dr(r),87),h=(d=n.c,d||(dn(),V1)),Ji(e,s++,h);return e},l.Yi=function(){var e,n,r,s,o;for(o=new xg,o.a+="[",e=il(this.a),n=0,s=il(this.a).i;n1);case 5:return DC(this,e,n,r,s,this.i-u(r,15).gc()>0);default:return new F0(this.e,e,this.c,n,r,s,!0)}},l.ij=function(){return!0},l.fj=function(){return cst(this)},l.Xj=function(){xr(this)},P(Mn,"EOperationImpl/2",1341),I(498,1,{1938:1,498:1},NVt),P(Mn,"EPackageImpl/1",498),I(16,85,zo,he),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.Dk=function(){return!0},l.b=0,P($i,"EObjectContainmentWithInverseEList",16),I(353,16,zo,Ix),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentWithInverseEList/Resolving",353),I(298,353,zo,qm),l.ci=function(){this.a.tb=null},P(Mn,"EPackageImpl/2",298),I(1228,1,{},tB),P(Mn,"EPackageImpl/3",1228),I(718,43,_4,jpt),l._b=function(e){return ea(e)?art(this,e):!!Ao(this.f,e)},P(Mn,"EPackageRegistryImpl",718),I(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Ktt),l.Qg=function(e){return zse(this,e)},l._g=function(e,n,r){var s,o,h;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),h=this.t,h>1||h==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?u(this.Cb,59):null}return oh(this,e-Zn((dn(),e3)),yn((s=u(In(this,16),26),s||e3),e),n,r)},l.hh=function(e,n,r){var s,o,h;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Qc(this.Ab,e,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?zse(this,r):this.Cb.ih(this,-1-o,null,r))),zl(this,e,10,r)}return h=u(yn((s=u(In(this,16),26),s||(dn(),e3)),n),66),h.Nj().Qj(this,iu(this),n-Zn((dn(),e3)),e,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 9:return Vnt(this,r);case 10:return zl(this,null,10,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),e3)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),e3)),e,r)},l.lh=function(e){var n,r,s;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return s=this.t,s>1||s==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return!!(this.Db>>16==10&&u(this.Cb,59))}return sh(this,e-Zn((dn(),e3)),yn((n=u(In(this,16),26),n||e3),e))},l.zh=function(){return dn(),e3},P(Mn,"EParameterImpl",509),I(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},q2t),l._g=function(e,n,r){var s,o,h,d;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Fn(),!!(this.Bb&256);case 3:return Fn(),!!(this.Bb&512);case 4:return de(this.s);case 5:return de(this.t);case 6:return Fn(),d=this.t,d>1||d==-1;case 7:return Fn(),o=this.s,o>=1;case 8:return n?Lh(this):this.r;case 9:return this.q;case 10:return Fn(),!!(this.Bb&wf);case 11:return Fn(),!!(this.Bb&Ay);case 12:return Fn(),!!(this.Bb&yy);case 13:return this.j;case 14:return mE(this);case 15:return Fn(),!!(this.Bb&zu);case 16:return Fn(),!!(this.Bb&bd);case 17:return Vm(this);case 18:return Fn(),!!(this.Bb&dc);case 19:return Fn(),h=no(this),!!(h&&h.Bb&dc);case 20:return Fn(),!!(this.Bb&Ya);case 21:return n?no(this):this.b;case 22:return n?Cyt(this):yJt(this);case 23:return!this.a&&(this.a=new U3(Zy,this,23)),this.a}return oh(this,e-Zn((dn(),c5)),yn((s=u(In(this,16),26),s||c5),e),n,r)},l.lh=function(e){var n,r,s,o;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&jv(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&jv(this.q).i==0);case 10:return(this.Bb&wf)==0;case 11:return(this.Bb&Ay)!=0;case 12:return(this.Bb&yy)!=0;case 13:return this.j!=null;case 14:return mE(this)!=null;case 15:return(this.Bb&zu)!=0;case 16:return(this.Bb&bd)!=0;case 17:return!!Vm(this);case 18:return(this.Bb&dc)!=0;case 19:return s=no(this),!!s&&(s.Bb&dc)!=0;case 20:return(this.Bb&Ya)==0;case 21:return!!this.b;case 22:return!!yJt(this);case 23:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),c5)),yn((n=u(In(this,16),26),n||c5),e))},l.sh=function(e,n){var r,s;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:mrt(this,Br(n));return;case 2:Ng(this,je(Re(n)));return;case 3:Pg(this,je(Re(n)));return;case 4:Ig(this,u(n,19).a);return;case 5:ty(this,u(n,19).a);return;case 8:f2(this,u(n,138));return;case 9:s=O1(this,u(n,87),null),s&&s.Fi();return;case 10:nE(this,je(Re(n)));return;case 11:sE(this,je(Re(n)));return;case 12:rE(this,je(Re(n)));return;case 13:Xbt(this,Br(n));return;case 15:iE(this,je(Re(n)));return;case 16:aE(this,je(Re(n)));return;case 18:krn(this,je(Re(n)));return;case 20:n3t(this,je(Re(n)));return;case 21:eyt(this,u(n,18));return;case 23:!this.a&&(this.a=new U3(Zy,this,23)),xr(this.a),!this.a&&(this.a=new U3(Zy,this,23)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),c5)),yn((r=u(In(this,16),26),r||c5),e),n)},l.zh=function(){return dn(),c5},l.Bh=function(e){var n,r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),4),Xc(this,null);return;case 2:Ng(this,!0);return;case 3:Pg(this,!0);return;case 4:Ig(this,0);return;case 5:ty(this,1);return;case 8:f2(this,null);return;case 9:r=O1(this,null,null),r&&r.Fi();return;case 10:nE(this,!0);return;case 11:sE(this,!1);return;case 12:rE(this,!1);return;case 13:this.i=null,ez(this,null);return;case 15:iE(this,!1);return;case 16:aE(this,!1);return;case 18:e3t(this,!1),Et(this.Cb,88)&&hy(rl(u(this.Cb,88)),2);return;case 20:n3t(this,!0);return;case 21:eyt(this,null);return;case 23:!this.a&&(this.a=new U3(Zy,this,23)),xr(this.a);return}lh(this,e-Zn((dn(),c5)),yn((n=u(In(this,16),26),n||c5),e))},l.Gh=function(){Cyt(this),k8(Eo((Ru(),ma),this)),Lh(this),this.Bb|=1},l.Lj=function(){return no(this)},l.qk=function(){var e;return e=no(this),!!e&&(e.Bb&dc)!=0},l.rk=function(){return(this.Bb&dc)!=0},l.sk=function(){return(this.Bb&Ya)!=0},l.nk=function(e,n){return this.c=null,Kyt(this,e,n)},l.Ib=function(){var e;return this.Db&64?pq(this):(e=new Th(pq(this)),e.a+=" (containment: ",kg(e,(this.Bb&dc)!=0),e.a+=", resolveProxies: ",kg(e,(this.Bb&Ya)!=0),e.a+=")",e.a)},P(Mn,"EReferenceImpl",99),I(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},WZ),l.Fb=function(e){return this===e},l.cd=function(){return this.b},l.dd=function(){return this.c},l.Hb=function(){return Iv(this)},l.Uh=function(e){Stn(this,Br(e))},l.ed=function(e){return ptn(this,Br(e))},l._g=function(e,n,r){var s;switch(e){case 0:return this.b;case 1:return this.c}return oh(this,e-Zn((dn(),Qa)),yn((s=u(In(this,16),26),s||Qa),e),n,r)},l.lh=function(e){var n;switch(e){case 0:return this.b!=null;case 1:return this.c!=null}return sh(this,e-Zn((dn(),Qa)),yn((n=u(In(this,16),26),n||Qa),e))},l.sh=function(e,n){var r;switch(e){case 0:Atn(this,Br(n));return;case 1:Zmt(this,Br(n));return}fh(this,e-Zn((dn(),Qa)),yn((r=u(In(this,16),26),r||Qa),e),n)},l.zh=function(){return dn(),Qa},l.Bh=function(e){var n;switch(e){case 0:Qmt(this,null);return;case 1:Zmt(this,null);return}lh(this,e-Zn((dn(),Qa)),yn((n=u(In(this,16),26),n||Qa),e))},l.Sh=function(){var e;return this.a==-1&&(e=this.b,this.a=e==null?0:Bg(e)),this.a},l.Th=function(e){this.a=e},l.Ib=function(){var e;return this.Db&64?bf(this):(e=new Th(bf(this)),e.a+=" (key: ",fo(e,this.b),e.a+=", value: ",fo(e,this.c),e.a+=")",e.a)},l.a=-1,l.b=null,l.c=null;var cc=P(Mn,"EStringToStringMapEntryImpl",548),a5e=Yi($i,"FeatureMap/Entry/Internal");I(565,1,SH),l.Ok=function(e){return this.Pk(u(e,49))},l.Pk=function(e){return this.Ok(e)},l.Fb=function(e){var n,r;return this===e?!0:Et(e,72)?(n=u(e,72),n.ak()==this.c?(r=this.dd(),r==null?n.dd()==null:yi(r,n.dd())):!1):!1},l.ak=function(){return this.c},l.Hb=function(){var e;return e=this.dd(),Hi(this.c)^(e==null?0:Hi(e))},l.Ib=function(){var e,n;return e=this.c,n=Fl(e.Hj()).Ph(),e.ne(),(n!=null&&n.length!=0?n+":"+e.ne():e.ne())+"="+this.dd()},P(Mn,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),I(776,565,SH,Q2t),l.Pk=function(e){return new Q2t(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return Gon(this,e,this.a,n,r)},l.Rk=function(e,n,r){return Von(this,e,this.a,n,r)},P(Mn,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),I(1314,1,{},PVt),l.Pj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.nl(this.a).Wj(s)},l.Qj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.el(this.a,s,o)},l.Rj=function(e,n,r,s,o){var h;return h=u(I8(e,this.b),215),h.fl(this.a,s,o)},l.Sj=function(e,n,r){var s;return s=u(I8(e,this.b),215),s.nl(this.a).fj()},l.Tj=function(e,n,r,s){var o;o=u(I8(e,this.b),215),o.nl(this.a).Wb(s)},l.Uj=function(e,n,r){return u(I8(e,this.b),215).nl(this.a)},l.Vj=function(e,n,r){var s;s=u(I8(e,this.b),215),s.nl(this.a).Xj()},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),I(89,1,{},Cg,Zb,Sg,e2),l.Pj=function(e,n,r,s,o){var h;if(h=n.Ch(r),h==null&&n.Dh(r,h=Aq(this,e)),!o)switch(this.e){case 50:case 41:return u(h,589).sj();case 40:return u(h,215).kl()}return h},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),d==null&&n.Dh(r,d=Aq(this,e)),h=u(d,69).lk(s,o),h},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),h!=null&&(o=u(h,69).mk(s,o)),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&u(s,76).fj()},l.Tj=function(e,n,r,s){var o;o=u(n.Ch(r),76),!o&&n.Dh(r,o=Aq(this,e)),o.Wb(s)},l.Uj=function(e,n,r){var s,o;return o=n.Ch(r),o==null&&n.Dh(r,o=Aq(this,e)),Et(o,76)?u(o,76):(s=u(n.Ch(r),15),new Nzt(s))},l.Vj=function(e,n,r){var s;s=u(n.Ch(r),76),!s&&n.Dh(r,s=Aq(this,e)),s.Xj()},l.b=0,l.e=0,P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),I(504,1,{}),l.Qj=function(e,n,r,s,o){throw rt(new Or)},l.Rj=function(e,n,r,s,o){throw rt(new Or)},l.Uj=function(e,n,r){return new MXt(this,e,n,r)};var f0;P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),I(1331,1,tut,MXt),l.Wj=function(e){return this.a.Pj(this.c,this.d,this.b,e,!0)},l.fj=function(){return this.a.Sj(this.c,this.d,this.b)},l.Wb=function(e){this.a.Tj(this.c,this.d,this.b,e)},l.Xj=function(){this.a.Vj(this.c,this.d,this.b)},l.b=0,P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),I(769,504,{},Owt),l.Pj=function(e,n,r,s,o){return aat(e,e.eh(),e.Vg())==this.b?this.sk()&&s?Gst(e):e.eh():null},l.Qj=function(e,n,r,s,o){var h,d;return e.eh()&&(o=(h=e.Vg(),h>=0?e.Qg(o):e.eh().ih(e,-1-h,null,o))),d=Vi(e.Tg(),this.e),e.Sg(s,d,o)},l.Rj=function(e,n,r,s,o){var h;return h=Vi(e.Tg(),this.e),e.Sg(null,h,o)},l.Sj=function(e,n,r){var s;return s=Vi(e.Tg(),this.e),!!e.eh()&&e.Vg()==s},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!lat(this.a,s))throw rt(new Xk(AH+(Et(s,56)?d4t(u(s,56).Tg()):Bmt(sl(s)))+LH+this.a+"'"));if(o=e.eh(),d=Vi(e.Tg(),this.e),Gt(s)!==Gt(o)||e.Vg()!=d&&s!=null){if(lE(e,u(s,56)))throw rt(new Pn(K_+e.Ib()));k=null,o&&(k=(h=e.Vg(),h>=0?e.Qg(k):e.eh().ih(e,-1-h,null,k))),w=u(s,49),w&&(k=w.gh(e,Vi(w.Tg(),this.b),null,k)),k=e.Sg(w,d,k),k&&k.Fi()}else e.Lg()&&e.Mg()&&mi(e,new Qs(e,1,d,s,s))},l.Vj=function(e,n,r){var s,o,h,d;s=e.eh(),s?(d=(o=e.Vg(),o>=0?e.Qg(null):e.eh().ih(e,-1-o,null,null)),h=Vi(e.Tg(),this.e),d=e.Sg(null,h,d),d&&d.Fi()):e.Lg()&&e.Mg()&&mi(e,new CC(e,1,this.e,null,null))},l.sk=function(){return!1},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),I(1315,769,{},kKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),I(563,504,{}),l.Pj=function(e,n,r,s,o){var h;return h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null&&(Gt(s)===Gt(f0)||!yi(s,this.b))},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=(h=n.Ch(r),h==null?this.b:Gt(h)===Gt(f0)?null:h),s==null?this.c!=null?(n.Dh(r,null),s=this.b):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Tk(e,1,this.e,o,s))):s==null?this.c!=null?n.Dh(r,null):this.b!=null?n.Dh(r,f0):n.Dh(r,null):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=(o=n.Ch(r),o==null?this.b:Gt(o)===Gt(f0)?null:o),n.Eh(r),mi(e,this.d.Tk(e,1,this.e,s,this.b))):n.Eh(r)},l.Sk=function(e){throw rt(new Gzt)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),I(F4,1,{},eB),l.Tk=function(e,n,r,s,o){return new CC(e,n,r,s,o)},l.Uk=function(e,n,r,s,o,h){return new srt(e,n,r,s,o,h)};var eLt,nLt,rLt,iLt,sLt,aLt,oLt,Aft,cLt;P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",F4),I(1332,F4,{},nB),l.Tk=function(e,n,r,s,o){return new gmt(e,n,r,je(Re(s)),je(Re(o)))},l.Uk=function(e,n,r,s,o,h){return new ZQt(e,n,r,je(Re(s)),je(Re(o)),h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),I(1333,F4,{},rB),l.Tk=function(e,n,r,s,o){return new zmt(e,n,r,u(s,217).a,u(o,217).a)},l.Uk=function(e,n,r,s,o,h){return new VQt(e,n,r,u(s,217).a,u(o,217).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),I(1334,F4,{},Ak),l.Tk=function(e,n,r,s,o){return new qmt(e,n,r,u(s,172).a,u(o,172).a)},l.Uk=function(e,n,r,s,o,h){return new UQt(e,n,r,u(s,172).a,u(o,172).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),I(1335,F4,{},iB),l.Tk=function(e,n,r,s,o){return new fmt(e,n,r,Xt(ye(s)),Xt(ye(o)))},l.Uk=function(e,n,r,s,o,h){return new WQt(e,n,r,Xt(ye(s)),Xt(ye(o)),h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),I(1336,F4,{},sB),l.Tk=function(e,n,r,s,o){return new Vmt(e,n,r,u(s,155).a,u(o,155).a)},l.Uk=function(e,n,r,s,o,h){return new KQt(e,n,r,u(s,155).a,u(o,155).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),I(1337,F4,{},KZ),l.Tk=function(e,n,r,s,o){return new dmt(e,n,r,u(s,19).a,u(o,19).a)},l.Uk=function(e,n,r,s,o,h){return new YQt(e,n,r,u(s,19).a,u(o,19).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),I(1338,F4,{},Lk),l.Tk=function(e,n,r,s,o){return new Hmt(e,n,r,u(s,162).a,u(o,162).a)},l.Uk=function(e,n,r,s,o,h){return new XQt(e,n,r,u(s,162).a,u(o,162).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),I(1339,F4,{},Mk),l.Tk=function(e,n,r,s,o){return new Gmt(e,n,r,u(s,184).a,u(o,184).a)},l.Uk=function(e,n,r,s,o,h){return new QQt(e,n,r,u(s,184).a,u(o,184).a,h)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),I(1317,563,{},IXt),l.Sk=function(e){if(!this.a.wj(e))throw rt(new Xk(AH+sl(e)+LH+this.a+"'"))},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),I(1318,563,{},mYt),l.Sk=function(e){},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),I(770,563,{}),l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h;e.Lg()&&e.Mg()?(o=!0,h=n.Ch(r),h==null?(o=!1,h=this.b):Gt(h)===Gt(f0)&&(h=null),s==null?this.c!=null?(n.Dh(r,null),s=this.b):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s)),mi(e,this.d.Uk(e,1,this.e,h,s,!o))):s==null?this.c!=null?n.Dh(r,null):n.Dh(r,f0):(this.Sk(s),n.Dh(r,s))},l.Vj=function(e,n,r){var s,o;e.Lg()&&e.Mg()?(s=!0,o=n.Ch(r),o==null?(s=!1,o=this.b):Gt(o)===Gt(f0)&&(o=null),n.Eh(r),mi(e,this.d.Uk(e,2,this.e,o,this.b,s))):n.Eh(r)},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),I(1319,770,{},DXt),l.Sk=function(e){if(!this.a.wj(e))throw rt(new Xk(AH+sl(e)+LH+this.a+"'"))},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),I(1320,770,{},yYt),l.Sk=function(e){},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),I(398,504,{},Pj),l.Pj=function(e,n,r,s,o){var h,d,w,k,C;if(C=n.Ch(r),this.Kj()&&Gt(C)===Gt(f0))return null;if(this.sk()&&s&&C!=null){if(w=u(C,49),w.kh()&&(k=Kp(e,w),w!=k)){if(!lat(this.a,k))throw rt(new Xk(AH+sl(k)+LH+this.a+"'"));n.Dh(r,C=k),this.rk()&&(h=u(k,49),d=w.ih(e,this.b?Vi(w.Tg(),this.b):-1-Vi(e.Tg(),this.e),null,null),!h.eh()&&(d=h.gh(e,this.b?Vi(h.Tg(),this.b):-1-Vi(e.Tg(),this.e),null,d)),d&&d.Fi()),e.Lg()&&e.Mg()&&mi(e,new CC(e,9,this.e,w,k))}return C}else return C},l.Qj=function(e,n,r,s,o){var h,d;return d=n.Ch(r),Gt(d)===Gt(f0)&&(d=null),n.Dh(r,s),this.bj()?Gt(d)!==Gt(s)&&d!=null&&(h=u(d,49),o=h.ih(e,Vi(h.Tg(),this.b),null,o)):this.rk()&&d!=null&&(o=u(d,49).ih(e,-1-Vi(e.Tg(),this.e),null,o)),e.Lg()&&e.Mg()&&(!o&&(o=new Sp(4)),o.Ei(new CC(e,1,this.e,d,s))),o},l.Rj=function(e,n,r,s,o){var h;return h=n.Ch(r),Gt(h)===Gt(f0)&&(h=null),n.Eh(r),e.Lg()&&e.Mg()&&(!o&&(o=new Sp(4)),this.Kj()?o.Ei(new CC(e,2,this.e,h,null)):o.Ei(new CC(e,1,this.e,h,null))),o},l.Sj=function(e,n,r){var s;return s=n.Ch(r),s!=null},l.Tj=function(e,n,r,s){var o,h,d,w,k;if(s!=null&&!lat(this.a,s))throw rt(new Xk(AH+(Et(s,56)?d4t(u(s,56).Tg()):Bmt(sl(s)))+LH+this.a+"'"));k=n.Ch(r),w=k!=null,this.Kj()&&Gt(k)===Gt(f0)&&(k=null),d=null,this.bj()?Gt(k)!==Gt(s)&&(k!=null&&(o=u(k,49),d=o.ih(e,Vi(o.Tg(),this.b),null,d)),s!=null&&(o=u(s,49),d=o.gh(e,Vi(o.Tg(),this.b),null,d))):this.rk()&&Gt(k)!==Gt(s)&&(k!=null&&(d=u(k,49).ih(e,-1-Vi(e.Tg(),this.e),null,d)),s!=null&&(d=u(s,49).gh(e,-1-Vi(e.Tg(),this.e),null,d))),s==null&&this.Kj()?n.Dh(r,f0):n.Dh(r,s),e.Lg()&&e.Mg()?(h=new srt(e,1,this.e,k,s,this.Kj()&&!w),d?(d.Ei(h),d.Fi()):mi(e,h)):d&&d.Fi()},l.Vj=function(e,n,r){var s,o,h,d,w;w=n.Ch(r),d=w!=null,this.Kj()&&Gt(w)===Gt(f0)&&(w=null),h=null,w!=null&&(this.bj()?(s=u(w,49),h=s.ih(e,Vi(s.Tg(),this.b),null,h)):this.rk()&&(h=u(w,49).ih(e,-1-Vi(e.Tg(),this.e),null,h))),n.Eh(r),e.Lg()&&e.Mg()?(o=new srt(e,this.Kj()?2:1,this.e,w,null,d),h?(h.Ei(o),h.Fi()):mi(e,o)):h&&h.Fi()},l.bj=function(){return!1},l.rk=function(){return!1},l.sk=function(){return!1},l.Kj=function(){return!1},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),I(564,398,{},ont),l.rk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),I(1323,564,{},wWt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),I(772,564,{},R2t),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),I(1325,772,{},mWt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),I(640,564,{},xnt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),I(1324,640,{},EKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),I(773,640,{},Tvt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),I(1326,773,{},TKt),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),I(641,398,{},j2t),l.sk=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),I(1327,641,{},yWt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),I(774,641,{},kvt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),I(1328,774,{},CKt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),I(1321,398,{},xWt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),I(771,398,{},Evt),l.bj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),I(1322,771,{},_Kt),l.Kj=function(){return!0},P(Mn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),I(775,565,SH,mwt),l.Pk=function(e){return new mwt(this.a,this.c,e)},l.dd=function(){return this.b},l.Qk=function(e,n,r){return Vsn(this,e,this.b,r)},l.Rk=function(e,n,r){return Usn(this,e,this.b,r)},P(Mn,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),I(1329,1,tut,Nzt),l.Wj=function(e){return this.a},l.fj=function(){return Et(this.a,95)?u(this.a,95).fj():!this.a.dc()},l.Wb=function(e){this.a.$b(),this.a.Gc(u(e,15))},l.Xj=function(){Et(this.a,95)?u(this.a,95).Xj():this.a.$b()},P(Mn,"EStructuralFeatureImpl/SettingMany",1329),I(1330,565,SH,$Zt),l.Ok=function(e){return new lnt((Di(),uA),this.b.Ih(this.a,e))},l.dd=function(){return null},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},P(Mn,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),I(642,565,SH,lnt),l.Ok=function(e){return new lnt(this.c,e)},l.dd=function(){return this.a},l.Qk=function(e,n,r){return r},l.Rk=function(e,n,r){return r},P(Mn,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),I(391,497,_d,xm),l.ri=function(e){return Pt(Gh,Ie,26,e,0,1)},l.ni=function(){return!1},P(Mn,"ESuperAdapter/1",391),I(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},RL),l._g=function(e,n,r){var s;switch(e){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new xC(this,ho,this)),this.a}return oh(this,e-Zn((dn(),Hw)),yn((s=u(In(this,16),26),s||Hw),e),n,r)},l.jh=function(e,n,r){var s,o;switch(n){case 0:return!this.Ab&&(this.Ab=new he(Zr,this,0,3)),Ba(this.Ab,e,r);case 2:return!this.a&&(this.a=new xC(this,ho,this)),Ba(this.a,e,r)}return o=u(yn((s=u(In(this,16),26),s||(dn(),Hw)),n),66),o.Nj().Rj(this,iu(this),n-Zn((dn(),Hw)),e,r)},l.lh=function(e){var n;switch(e){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return sh(this,e-Zn((dn(),Hw)),yn((n=u(In(this,16),26),n||Hw),e))},l.sh=function(e,n){var r;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab),!this.Ab&&(this.Ab=new he(Zr,this,0,3)),rs(this.Ab,u(n,14));return;case 1:Xc(this,Br(n));return;case 2:!this.a&&(this.a=new xC(this,ho,this)),xr(this.a),!this.a&&(this.a=new xC(this,ho,this)),rs(this.a,u(n,14));return}fh(this,e-Zn((dn(),Hw)),yn((r=u(In(this,16),26),r||Hw),e),n)},l.zh=function(){return dn(),Hw},l.Bh=function(e){var n;switch(e){case 0:!this.Ab&&(this.Ab=new he(Zr,this,0,3)),xr(this.Ab);return;case 1:Xc(this,null);return;case 2:!this.a&&(this.a=new xC(this,ho,this)),xr(this.a);return}lh(this,e-Zn((dn(),Hw)),yn((n=u(In(this,16),26),n||Hw),e))},P(Mn,"ETypeParameterImpl",444),I(445,85,zo,xC),l.cj=function(e,n){return Udn(this,u(e,87),n)},l.dj=function(e,n){return Wdn(this,u(e,87),n)},P(Mn,"ETypeParameterImpl/1",445),I(634,43,_4,Ytt),l.ec=function(){return new cR(this)},P(Mn,"ETypeParameterImpl/2",634),I(556,N1,ju,cR),l.Fc=function(e){return WWt(this,u(e,87))},l.Gc=function(e){var n,r,s;for(s=!1,r=e.Kc();r.Ob();)n=u(r.Pb(),87),ki(this.a,n,"")==null&&(s=!0);return s},l.$b=function(){Yu(this.a)},l.Hc=function(e){return kl(this.a,e)},l.Kc=function(){var e;return e=new h2(new wg(this.a).a),new uR(e)},l.Mc=function(e){return OJt(this,e)},l.gc=function(){return $9(this.a)},P(Mn,"ETypeParameterImpl/2/1",556),I(557,1,ra,uR),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(Yv(this.a).cd(),87)},l.Ob=function(){return this.a.b},l.Qb=function(){lte(this.a)},P(Mn,"ETypeParameterImpl/2/1/1",557),I(1276,43,_4,Tqt),l._b=function(e){return ea(e)?art(this,e):!!Ao(this.f,e)},l.xc=function(e){var n,r;return n=ea(e)?Fc(this,e):ec(Ao(this.f,e)),Et(n,837)?(r=u(n,837),n=r._j(),ki(this,u(e,235),n),n):n??(e==null?(det(),c5e):null)},P(Mn,"EValidatorRegistryImpl",1276),I(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},YZ),l.Ih=function(e,n){switch(e.yj()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:$o(n);case 25:return ton(n);case 27:return van(n);case 28:return wan(n);case 29:return n==null?null:SUt(rA[0],u(n,199));case 41:return n==null?"":Ap(u(n,290));case 42:return $o(n);case 50:return Br(n);default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt;switch(e.G==-1&&(e.G=(H=Fl(e),H?Fg(H.Mh(),e):-1)),e.G){case 0:return r=new Utt,r;case 1:return n=new JF,n;case 2:return s=new XL,s;case 4:return o=new lR,o;case 5:return h=new Eqt,h;case 6:return d=new Wzt,d;case 7:return w=new qB,w;case 10:return C=new _k,C;case 11:return M=new Wtt,M;case 12:return F=new YXt,F;case 13:return V=new Ktt,V;case 14:return Y=new q2t,Y;case 17:return tt=new WZ,tt;case 18:return k=new wv,k;case 19:return gt=new RL,gt;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){switch(e.yj()){case 20:return n==null?null:new obt(n);case 21:return n==null?null:new Np(n);case 23:case 22:return n==null?null:shn(n);case 26:case 24:return n==null?null:EI($l(n,-128,127)<<24>>24);case 25:return bbn(n);case 27:return qfn(n);case 28:return Hfn(n);case 29:return h0n(n);case 32:case 31:return n==null?null:ly(n);case 38:case 37:return n==null?null:new Spt(n);case 40:case 39:return n==null?null:de($l(n,_a,vi));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:g2(Sq(n));case 49:case 48:return n==null?null:eE($l(n,MH,32767)<<16>>16);case 50:return n;default:throw rt(new Pn(HE+e.ne()+kw))}},P(Mn,"EcoreFactoryImpl",1313),I(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},fXt),l.gb=!1,l.hb=!1;var uLt,o5e=!1;P(Mn,"EcorePackageImpl",547),I(1184,1,{837:1},XZ),l._j=function(){return QUt(),u5e},P(Mn,"EcorePackageImpl/1",1184),I(1193,1,ii,QZ),l.wj=function(e){return Et(e,147)},l.xj=function(e){return Pt(oN,Ie,147,e,0,1)},P(Mn,"EcorePackageImpl/10",1193),I(1194,1,ii,ZZ),l.wj=function(e){return Et(e,191)},l.xj=function(e){return Pt(mft,Ie,191,e,0,1)},P(Mn,"EcorePackageImpl/11",1194),I(1195,1,ii,JZ),l.wj=function(e){return Et(e,56)},l.xj=function(e){return Pt(kb,Ie,56,e,0,1)},P(Mn,"EcorePackageImpl/12",1195),I(1196,1,ii,tJ),l.wj=function(e){return Et(e,399)},l.xj=function(e){return Pt(Vh,O8t,59,e,0,1)},P(Mn,"EcorePackageImpl/13",1196),I(1197,1,ii,eJ),l.wj=function(e){return Et(e,235)},l.xj=function(e){return Pt(r1,Ie,235,e,0,1)},P(Mn,"EcorePackageImpl/14",1197),I(1198,1,ii,nJ),l.wj=function(e){return Et(e,509)},l.xj=function(e){return Pt(zw,Ie,2017,e,0,1)},P(Mn,"EcorePackageImpl/15",1198),I(1199,1,ii,aB),l.wj=function(e){return Et(e,99)},l.xj=function(e){return Pt(Jy,P4,18,e,0,1)},P(Mn,"EcorePackageImpl/16",1199),I(1200,1,ii,rJ),l.wj=function(e){return Et(e,170)},l.xj=function(e){return Pt(Au,P4,170,e,0,1)},P(Mn,"EcorePackageImpl/17",1200),I(1201,1,ii,iJ),l.wj=function(e){return Et(e,472)},l.xj=function(e){return Pt(Qy,Ie,472,e,0,1)},P(Mn,"EcorePackageImpl/18",1201),I(1202,1,ii,sJ),l.wj=function(e){return Et(e,548)},l.xj=function(e){return Pt(cc,c0e,548,e,0,1)},P(Mn,"EcorePackageImpl/19",1202),I(1185,1,ii,oB),l.wj=function(e){return Et(e,322)},l.xj=function(e){return Pt(Zy,P4,34,e,0,1)},P(Mn,"EcorePackageImpl/2",1185),I(1203,1,ii,Ik),l.wj=function(e){return Et(e,241)},l.xj=function(e){return Pt(ho,C0e,87,e,0,1)},P(Mn,"EcorePackageImpl/20",1203),I(1204,1,ii,ZT),l.wj=function(e){return Et(e,444)},l.xj=function(e){return Pt(lu,Ie,836,e,0,1)},P(Mn,"EcorePackageImpl/21",1204),I(1205,1,ii,cB),l.wj=function(e){return Om(e)},l.xj=function(e){return Pt(Bs,te,476,e,8,1)},P(Mn,"EcorePackageImpl/22",1205),I(1206,1,ii,aJ),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(Mn,"EcorePackageImpl/23",1206),I(1207,1,ii,uB),l.wj=function(e){return Et(e,217)},l.xj=function(e){return Pt(E6,te,217,e,0,1)},P(Mn,"EcorePackageImpl/24",1207),I(1208,1,ii,lB),l.wj=function(e){return Et(e,172)},l.xj=function(e){return Pt(aS,te,172,e,0,1)},P(Mn,"EcorePackageImpl/25",1208),I(1209,1,ii,oJ),l.wj=function(e){return Et(e,199)},l.xj=function(e){return Pt(HH,te,199,e,0,1)},P(Mn,"EcorePackageImpl/26",1209),I(1210,1,ii,JT),l.wj=function(e){return!1},l.xj=function(e){return Pt(SLt,Ie,2110,e,0,1)},P(Mn,"EcorePackageImpl/27",1210),I(1211,1,ii,km),l.wj=function(e){return Nm(e)},l.xj=function(e){return Pt(ca,te,333,e,7,1)},P(Mn,"EcorePackageImpl/28",1211),I(1212,1,ii,hB),l.wj=function(e){return Et(e,58)},l.xj=function(e){return Pt(qAt,xy,58,e,0,1)},P(Mn,"EcorePackageImpl/29",1212),I(1186,1,ii,fB),l.wj=function(e){return Et(e,510)},l.xj=function(e){return Pt(Zr,{3:1,4:1,5:1,1934:1},590,e,0,1)},P(Mn,"EcorePackageImpl/3",1186),I(1213,1,ii,cJ),l.wj=function(e){return Et(e,573)},l.xj=function(e){return Pt(VAt,Ie,1940,e,0,1)},P(Mn,"EcorePackageImpl/30",1213),I(1214,1,ii,uJ),l.wj=function(e){return Et(e,153)},l.xj=function(e){return Pt(gLt,xy,153,e,0,1)},P(Mn,"EcorePackageImpl/31",1214),I(1215,1,ii,t9),l.wj=function(e){return Et(e,72)},l.xj=function(e){return Pt(sU,N0e,72,e,0,1)},P(Mn,"EcorePackageImpl/32",1215),I(1216,1,ii,dB),l.wj=function(e){return Et(e,155)},l.xj=function(e){return Pt(XE,te,155,e,0,1)},P(Mn,"EcorePackageImpl/33",1216),I(1217,1,ii,gB),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(Mn,"EcorePackageImpl/34",1217),I(1218,1,ii,uc),l.wj=function(e){return Et(e,290)},l.xj=function(e){return Pt(U8t,Ie,290,e,0,1)},P(Mn,"EcorePackageImpl/35",1218),I(1219,1,ii,lJ),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(Mn,"EcorePackageImpl/36",1219),I(1220,1,ii,pB),l.wj=function(e){return Et(e,83)},l.xj=function(e){return Pt(W8t,Ie,83,e,0,1)},P(Mn,"EcorePackageImpl/37",1220),I(1221,1,ii,e9),l.wj=function(e){return Et(e,591)},l.xj=function(e){return Pt(lLt,Ie,591,e,0,1)},P(Mn,"EcorePackageImpl/38",1221),I(1222,1,ii,hJ),l.wj=function(e){return!1},l.xj=function(e){return Pt(ALt,Ie,2111,e,0,1)},P(Mn,"EcorePackageImpl/39",1222),I(1187,1,ii,fJ),l.wj=function(e){return Et(e,88)},l.xj=function(e){return Pt(Gh,Ie,26,e,0,1)},P(Mn,"EcorePackageImpl/4",1187),I(1223,1,ii,n9),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(Mn,"EcorePackageImpl/40",1223),I(1224,1,ii,bB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(Mn,"EcorePackageImpl/41",1224),I(1225,1,ii,r9),l.wj=function(e){return Et(e,588)},l.xj=function(e){return Pt(GAt,Ie,588,e,0,1)},P(Mn,"EcorePackageImpl/42",1225),I(1226,1,ii,i9),l.wj=function(e){return!1},l.xj=function(e){return Pt(LLt,te,2112,e,0,1)},P(Mn,"EcorePackageImpl/43",1226),I(1227,1,ii,Rf),l.wj=function(e){return Et(e,42)},l.xj=function(e){return Pt(M2,Dq,42,e,0,1)},P(Mn,"EcorePackageImpl/44",1227),I(1188,1,ii,jL),l.wj=function(e){return Et(e,138)},l.xj=function(e){return Pt(i1,Ie,138,e,0,1)},P(Mn,"EcorePackageImpl/5",1188),I(1189,1,ii,$L),l.wj=function(e){return Et(e,148)},l.xj=function(e){return Pt(Cft,Ie,148,e,0,1)},P(Mn,"EcorePackageImpl/6",1189),I(1190,1,ii,rx),l.wj=function(e){return Et(e,457)},l.xj=function(e){return Pt(iU,Ie,671,e,0,1)},P(Mn,"EcorePackageImpl/7",1190),I(1191,1,ii,dJ),l.wj=function(e){return Et(e,573)},l.xj=function(e){return Pt(eg,Ie,678,e,0,1)},P(Mn,"EcorePackageImpl/8",1191),I(1192,1,ii,gJ),l.wj=function(e){return Et(e,471)},l.xj=function(e){return Pt(nA,Ie,471,e,0,1)},P(Mn,"EcorePackageImpl/9",1192),I(1025,1982,o0e,qqt),l.bi=function(e,n){Iun(this,u(n,415))},l.fi=function(e,n){noe(this,e,u(n,415))},P(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),I(1026,143,QD,rXt),l.Ai=function(){return this.a.a},P(Mn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),I(1053,1052,{},mUt),P("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var lLt=Yi(P0e,"Resource");I(781,1378,F0e),l.Yk=function(e){},l.Zk=function(e){},l.Vk=function(){return!this.a&&(this.a=new ztt(this)),this.a},l.Wk=function(e){var n,r,s,o,h;if(s=e.length,s>0)if(Rr(0,e.length),e.charCodeAt(0)==47){for(h=new Yc(4),o=1,n=1;n0&&(e=e.substr(0,r)));return Jgn(this,e)},l.Xk=function(){return this.c},l.Ib=function(){var e;return Ap(this.gm)+"@"+(e=Hi(this)>>>0,e.toString(16))+" uri='"+this.d+"'"},l.b=!1,P(eut,"ResourceImpl",781),I(1379,781,F0e,Fzt),P(eut,"BinaryResourceImpl",1379),I(1169,694,Yct),l.si=function(e){return Et(e,56)?Nnn(this,u(e,56)):Et(e,591)?new er(u(e,591).Vk()):Gt(e)===Gt(this.f)?u(e,14).Kc():(f8(),lN.a)},l.Ob=function(){return i5t(this)},l.a=!1,P($i,"EcoreUtil/ContentTreeIterator",1169),I(1380,1169,Yct,NYt),l.si=function(e){return Gt(e)===Gt(this.f)?u(e,15).Kc():new vZt(u(e,56))},P(eut,"ResourceImpl/5",1380),I(648,1994,T0e,ztt),l.Hc=function(e){return this.i<=4?fE(this,e):Et(e,49)&&u(e,49).Zg()==this.a},l.bi=function(e,n){e==this.i-1&&(this.a.b||(this.a.b=!0))},l.di=function(e,n){e==0?this.a.b||(this.a.b=!0):Brt(this,e,n)},l.fi=function(e,n){},l.gi=function(e,n,r){},l.aj=function(){return 2},l.Ai=function(){return this.a},l.bj=function(){return!0},l.cj=function(e,n){var r;return r=u(e,49),n=r.wh(this.a,n),n},l.dj=function(e,n){var r;return r=u(e,49),r.wh(null,n)},l.ej=function(){return!1},l.hi=function(){return!0},l.ri=function(e){return Pt(kb,Ie,56,e,0,1)},l.ni=function(){return!1},P(eut,"ResourceImpl/ContentsEList",648),I(957,1964,IE,Pzt),l.Zc=function(e){return this.a._h(e)},l.gc=function(){return this.a.gc()},P($i,"AbstractSequentialInternalEList/1",957);var hLt,fLt,ma,dLt;I(624,1,{},FKt);var aU,oU;P($i,"BasicExtendedMetaData",624),I(1160,1,{},FVt),l.$k=function(){return null},l._k=function(){return this.a==-2&&vg(this,a0n(this.d,this.b)),this.a},l.al=function(){return null},l.bl=function(){return vn(),vn(),io},l.ne=function(){return this.c==UE&&I3(this,Oie(this.d,this.b)),this.c},l.cl=function(){return 0},l.a=-2,l.c=UE,P($i,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),I(1161,1,{},rZt),l.$k=function(){return this.a==(L8(),aU)&&dpt(this,k2n(this.f,this.b)),this.a},l._k=function(){return 0},l.al=function(){return this.c==(L8(),aU)&&Ttt(this,E2n(this.f,this.b)),this.c},l.bl=function(){return!this.d&&Ctt(this,kwn(this.f,this.b)),this.d},l.ne=function(){return this.e==UE&&QB(this,Oie(this.f,this.b)),this.e},l.cl=function(){return this.g==-2&&ZB(this,Cdn(this.f,this.b)),this.g},l.e=UE,l.g=-2,P($i,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),I(1159,1,{},RVt),l.b=!1,l.c=!1,P($i,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),I(1162,1,{},nZt),l.c=-2,l.e=UE,l.f=UE,P($i,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),I(585,622,zo,Sj),l.aj=function(){return this.c},l.Fk=function(){return!1},l.li=function(e,n){return n},l.c=0,P($i,"EDataTypeEList",585);var gLt=Yi($i,"FeatureMap");I(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},is),l.Vc=function(e,n){w2n(this,e,u(n,72))},l.Fc=function(e){return Bbn(this,u(e,72))},l.Yh=function(e){Een(this,u(e,72))},l.cj=function(e,n){return rZe(this,u(e,72),n)},l.dj=function(e,n){return hvt(this,u(e,72),n)},l.ii=function(e,n){return $wn(this,e,n)},l.li=function(e,n){return m3n(this,e,u(n,72))},l._c=function(e,n){return cvn(this,e,u(n,72))},l.jj=function(e,n){return iZe(this,u(e,72),n)},l.kj=function(e,n){return oKt(this,u(e,72),n)},l.lj=function(e,n,r){return cdn(this,u(e,72),u(n,72),r)},l.oi=function(e,n){return Sst(this,e,u(n,72))},l.dl=function(e,n){return U5t(this,e,n)},l.Wc=function(e,n){var r,s,o,h,d,w,k,C,M;for(C=new Kv(n.gc()),o=n.Kc();o.Ob();)if(s=u(o.Pb(),72),h=s.ak(),V0(this.e,h))(!h.hi()||!k$(this,h,s.dd())&&!fE(C,s))&&Mr(C,s);else{for(M=au(this.e.Tg(),h),r=u(this.g,119),d=!0,w=0;w=0;)if(n=e[this.c],this.k.rl(n.ak()))return this.j=this.f?n:n.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},P($i,"BasicFeatureMap/FeatureEIterator",410),I(662,410,Jd,Uet),l.Lk=function(){return!0},P($i,"BasicFeatureMap/ResolvingFeatureEIterator",662),I(955,486,CH,LUt),l.Gi=function(){return this},P($i,"EContentsEList/1",955),I(956,486,CH,tUt),l.Lk=function(){return!1},P($i,"EContentsEList/2",956),I(954,279,_H,MUt),l.Nk=function(e){},l.Ob=function(){return!1},l.Sb=function(){return!1},P($i,"EContentsEList/FeatureIteratorImpl/1",954),I(825,585,zo,b2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EDataTypeEList/Unsettable",825),I(1849,585,zo,RUt),l.hi=function(){return!0},P($i,"EDataTypeUniqueEList",1849),I(1850,825,zo,jUt),l.hi=function(){return!0},P($i,"EDataTypeUniqueEList/Unsettable",1850),I(139,85,zo,Ou),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentEList/Resolving",139),I(1163,545,zo,BUt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentEList/Unsettable/Resolving",1163),I(748,16,zo,ivt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectContainmentWithInverseEList/Unsettable",748),I(1173,748,zo,KWt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),I(743,496,zo,p2t),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectEList/Unsettable",743),I(328,496,zo,U3),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectResolvingEList",328),I(1641,743,zo,$Ut),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectResolvingEList/Unsettable",1641),I(1381,1,{},pJ);var c5e;P($i,"EObjectValidator",1381),I(546,496,zo,Uj),l.zk=function(){return this.d},l.Ak=function(){return this.b},l.bj=function(){return!0},l.Dk=function(){return!0},l.b=0,P($i,"EObjectWithInverseEList",546),I(1176,546,zo,YWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseEList/ManyInverse",1176),I(625,546,zo,fnt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EObjectWithInverseEList/Unsettable",625),I(1175,625,zo,XWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),I(749,546,zo,svt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectWithInverseResolvingEList",749),I(31,749,zo,Cn),l.Ck=function(){return!0},P($i,"EObjectWithInverseResolvingEList/ManyInverse",31),I(750,625,zo,avt),l.Ek=function(){return!0},l.li=function(e,n){return o6(this,e,u(n,56))},P($i,"EObjectWithInverseResolvingEList/Unsettable",750),I(1174,750,zo,QWt),l.Ck=function(){return!0},P($i,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),I(1164,622,zo),l.ai=function(){return(this.b&1792)==0},l.ci=function(){this.b|=1},l.Bk=function(){return(this.b&4)!=0},l.bj=function(){return(this.b&40)!=0},l.Ck=function(){return(this.b&16)!=0},l.Dk=function(){return(this.b&8)!=0},l.Ek=function(){return(this.b&Ay)!=0},l.rk=function(){return(this.b&32)!=0},l.Fk=function(){return(this.b&wf)!=0},l.wj=function(e){return this.d?DZt(this.d,e):this.ak().Yj().wj(e)},l.fj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},l.hi=function(){return(this.b&128)!=0},l.Xj=function(){var e;xr(this),this.b&2&&(ml(this.e)?(e=(this.b&1)!=0,this.b&=-2,Kk(this,new df(this.e,2,Vi(this.e.Tg(),this.ak()),e,!1))):this.b&=-2)},l.ni=function(){return(this.b&1536)==0},l.b=0,P($i,"EcoreEList/Generic",1164),I(1165,1164,zo,zXt),l.ak=function(){return this.a},P($i,"EcoreEList/Dynamic",1165),I(747,63,_d,mpt),l.ri=function(e){return CI(this.a.a,e)},P($i,"EcoreEMap/1",747),I(746,85,zo,iwt),l.bi=function(e,n){qz(this.b,u(n,133))},l.di=function(e,n){Sne(this.b)},l.ei=function(e,n,r){var s;++(s=this.b,u(n,133),s).e},l.fi=function(e,n){Fit(this.b,u(n,133))},l.gi=function(e,n,r){Fit(this.b,u(r,133)),Gt(r)===Gt(n)&&u(r,133).Th(fXe(u(n,133).cd())),qz(this.b,u(n,133))},P($i,"EcoreEMap/DelegateEObjectContainmentEList",746),I(1171,151,D8t,$ee),P($i,"EcoreEMap/Unsettable",1171),I(1172,746,zo,ZWt),l.ci=function(){this.a=!0},l.fj=function(){return this.a},l.Xj=function(){var e;xr(this),ml(this.e)?(e=this.a,this.a=!1,mi(this.e,new df(this.e,2,this.c,e,!1))):this.a=!1},l.a=!1,P($i,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),I(1168,228,_4,GYt),l.a=!1,l.b=!1,P($i,"EcoreUtil/Copier",1168),I(745,1,ra,vZt),l.Nb=function(e){pa(this,e)},l.Ob=function(){return die(this)},l.Pb=function(){var e;return die(this),e=this.b,this.b=null,e},l.Qb=function(){this.a.Qb()},P($i,"EcoreUtil/ProperContentIterator",745),I(1382,1381,{},HB);var u5e;P($i,"EcoreValidator",1382);var l5e;Yi($i,"FeatureMapUtil/Validator"),I(1260,1,{1942:1},bJ),l.rl=function(e){return!0},P($i,"FeatureMapUtil/1",1260),I(757,1,{1942:1},xxt),l.rl=function(e){var n;return this.c==e?!0:(n=Re(Jn(this.a,e)),n==null?rwn(this,e)?(CJt(this.a,e,(Fn(),YE)),!0):(CJt(this.a,e,(Fn(),I2)),!1):n==(Fn(),YE))},l.e=!1;var Lft;P($i,"FeatureMapUtil/BasicValidator",757),I(758,43,_4,h2t),P($i,"FeatureMapUtil/BasicValidator/Cache",758),I(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},DM),l.Vc=function(e,n){qce(this.c,this.b,e,n)},l.Fc=function(e){return U5t(this.c,this.b,e)},l.Wc=function(e,n){return wyn(this.c,this.b,e,n)},l.Gc=function(e){return hC(this,e)},l.Xh=function(e,n){jan(this.c,this.b,e,n)},l.lk=function(e,n){return $5t(this.c,this.b,e,n)},l.pi=function(e){return xq(this.c,this.b,e,!1)},l.Zh=function(){return hUt(this.c,this.b)},l.$h=function(){return JYe(this.c,this.b)},l._h=function(e){return Gsn(this.c,this.b,e)},l.mk=function(e,n){return MWt(this,e,n)},l.$b=function(){vx(this)},l.Hc=function(e){return k$(this.c,this.b,e)},l.Ic=function(e){return Hon(this.c,this.b,e)},l.Xb=function(e){return xq(this.c,this.b,e,!0)},l.Wj=function(e){return this},l.Xc=function(e){return esn(this.c,this.b,e)},l.dc=function(){return tj(this)},l.fj=function(){return!VI(this.c,this.b)},l.Kc=function(){return San(this.c,this.b)},l.Yc=function(){return Aan(this.c,this.b)},l.Zc=function(e){return $un(this.c,this.b,e)},l.ii=function(e,n){return ale(this.c,this.b,e,n)},l.ji=function(e,n){Rsn(this.c,this.b,e,n)},l.$c=function(e){return jae(this.c,this.b,e)},l.Mc=function(e){return Twn(this.c,this.b,e)},l._c=function(e,n){return fle(this.c,this.b,e,n)},l.Wb=function(e){iq(this.c,this.b),hC(this,u(e,15))},l.gc=function(){return Jun(this.c,this.b)},l.Pc=function(){return Zrn(this.c,this.b)},l.Qc=function(e){return nsn(this.c,this.b,e)},l.Ib=function(){var e,n;for(n=new xg,n.a+="[",e=hUt(this.c,this.b);_it(e);)fo(n,dC($z(e))),_it(e)&&(n.a+=Ka);return n.a+="]",n.a},l.Xj=function(){iq(this.c,this.b)},P($i,"FeatureMapUtil/FeatureEList",501),I(627,36,QD,Art),l.yi=function(e){return ZC(this,e)},l.Di=function(e){var n,r,s,o,h,d,w;switch(this.d){case 1:case 2:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.g=e.zi(),e.xi()==1&&(this.d=1),!0;break}case 3:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=5,n=new Kv(2),Mr(n,this.g),Mr(n,e.zi()),this.g=n,!0;break}}break}case 5:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return r=u(this.g,14),r.Fc(e.zi()),!0;break}}break}case 4:{switch(o=e.xi(),o){case 3:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=1,this.g=e.zi(),!0;break}case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return this.d=6,w=new Kv(2),Mr(w,this.n),Mr(w,e.Bi()),this.n=w,d=ct(ot(Tr,1),Xr,25,15,[this.o,e.Ci()]),this.g=d,!0;break}}break}case 6:{switch(o=e.xi(),o){case 4:{if(h=e.Ai(),Gt(h)===Gt(this.c)&&ZC(this,null)==e.yi(null))return r=u(this.n,14),r.Fc(e.Bi()),d=u(this.g,48),s=Pt(Tr,Xr,25,d.length+1,15,1),Ic(d,0,s,0,d.length),s[d.length]=e.Ci(),this.g=s,!0;break}}break}}return!1},P($i,"FeatureMapUtil/FeatureENotificationImpl",627),I(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ij),l.dl=function(e,n){return U5t(this.c,e,n)},l.el=function(e,n,r){return $5t(this.c,e,n,r)},l.fl=function(e,n,r){return uxt(this.c,e,n,r)},l.gl=function(){return this},l.hl=function(e,n){return kD(this.c,e,n)},l.il=function(e){return u(xq(this.c,this.b,e,!1),72).ak()},l.jl=function(e){return u(xq(this.c,this.b,e,!1),72).dd()},l.kl=function(){return this.a},l.ll=function(e){return!VI(this.c,e)},l.ml=function(e,n){kq(this.c,e,n)},l.nl=function(e){return Wee(this.c,e)},l.ol=function(e){vse(this.c,e)},P($i,"FeatureMapUtil/FeatureFeatureMap",552),I(1259,1,tut,jVt),l.Wj=function(e){return xq(this.b,this.a,-1,e)},l.fj=function(){return!VI(this.b,this.a)},l.Wb=function(e){kq(this.b,this.a,e)},l.Xj=function(){iq(this.b,this.a)},P($i,"FeatureMapUtil/FeatureValue",1259);var U6,Mft,Ift,W6,h5e,fN=Yi(NH,"AnyType");I(666,60,U0,ret),P(NH,"InvalidDatatypeValueException",666);var cU=Yi(NH,R0e),dN=Yi(NH,j0e),pLt=Yi(NH,$0e),f5e,pc,bLt,U2,d5e,g5e,p5e,b5e,v5e,w5e,m5e,y5e,x5e,k5e,E5e,u5,T5e,l5,oA,C5e,Gw,gN,pN,_5e,cA,uA;I(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},$pt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new is(this,0)),this.c):(!this.c&&(this.c=new is(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)):(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new is(this,2)),this.b):(!this.b&&(this.b=new is(this,2)),this.b.b)}return oh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.c&&(this.c=new is(this,0)),wD(this.c,e,r);case 1:return(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),69)).mk(e,r);case 2:return!this.b&&(this.b=new is(this,2)),wD(this.b,e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),n),66),s.Nj().Rj(this,Omt(this),n-Zn(this.zh()),e,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).dc();case 2:return!!this.b&&this.b.i!=0}return sh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new is(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new is(this,2)),QM(this.b,n);return}fh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e),n)},l.zh=function(){return Di(),bLt},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new is(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).$b();return;case 2:!this.b&&(this.b=new is(this,2)),xr(this.b);return}lh(this,e-Zn(this.zh()),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():this.zh(),e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (mixed: ",oC(e,this.c),e.a+=", anyAttribute: ",oC(e,this.b),e.a+=")",e.a)},P(ys,"AnyTypeImpl",830),I(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},vB),l._g=function(e,n,r){switch(e){case 0:return this.a;case 1:return this.b}return oh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e),n,r)},l.lh=function(e){switch(e){case 0:return this.a!=null;case 1:return this.b!=null}return sh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e))},l.sh=function(e,n){switch(e){case 0:Ltt(this,Br(n));return;case 1:ppt(this,Br(n));return}fh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e),n)},l.zh=function(){return Di(),u5},l.Bh=function(e){switch(e){case 0:this.a=null;return;case 1:this.b=null;return}lh(this,e-Zn((Di(),u5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():u5,e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (data: ",fo(e,this.a),e.a+=", target: ",fo(e,this.b),e.a+=")",e.a)},l.a=null,l.b=null,P(ys,"ProcessingInstructionImpl",667),I(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_qt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.c&&(this.c=new is(this,0)),this.c):(!this.c&&(this.c=new is(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)):(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).kl();case 2:return r?(!this.b&&(this.b=new is(this,2)),this.b):(!this.b&&(this.b=new is(this,2)),this.b.b);case 3:return!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0));case 4:return ovt(this.a,(!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))));case 5:return this.a}return oh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e),n,r)},l.lh=function(e){switch(e){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))!=null;case 4:return ovt(this.a,(!this.c&&(this.c=new is(this,0)),Br(kD(this.c,(Di(),oA),!0))))!=null;case 5:return!!this.a}return sh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e))},l.sh=function(e,n){switch(e){case 0:!this.c&&(this.c=new is(this,0)),QM(this.c,n);return;case 1:(!this.c&&(this.c=new is(this,0)),u(u(Bc(this.c,(Di(),U2)),153),215)).Wb(n);return;case 2:!this.b&&(this.b=new is(this,2)),QM(this.b,n);return;case 3:Uwt(this,Br(n));return;case 4:Uwt(this,cvt(this.a,n));return;case 5:wc(this,u(n,148));return}fh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e),n)},l.zh=function(){return Di(),l5},l.Bh=function(e){switch(e){case 0:!this.c&&(this.c=new is(this,0)),xr(this.c);return;case 1:(!this.c&&(this.c=new is(this,0)),u(Bc(this.c,(Di(),U2)),153)).$b();return;case 2:!this.b&&(this.b=new is(this,2)),xr(this.b);return;case 3:!this.c&&(this.c=new is(this,0)),kq(this.c,(Di(),oA),null);return;case 4:Uwt(this,cvt(this.a,null));return;case 5:this.a=null;return}lh(this,e-Zn((Di(),l5)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():l5,e))},P(ys,"SimpleAnyTypeImpl",668),I(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Cqt),l._g=function(e,n,r){switch(e){case 0:return r?(!this.a&&(this.a=new is(this,0)),this.a):(!this.a&&(this.a=new is(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),this.b):(!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),fI(this.b));case 2:return r?(!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),this.c):(!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),fI(this.c));case 3:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),gN));case 4:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),pN));case 5:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),cA));case 6:return!this.a&&(this.a=new is(this,0)),Bc(this.a,(Di(),uA))}return oh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e),n,r)},l.jh=function(e,n,r){var s;switch(n){case 0:return!this.a&&(this.a=new is(this,0)),wD(this.a,e,r);case 1:return!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),kj(this.b,e,r);case 2:return!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),kj(this.c,e,r);case 5:return!this.a&&(this.a=new is(this,0)),MWt(Bc(this.a,(Di(),cA)),e,r)}return s=u(yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():(Di(),Gw),n),66),s.Nj().Rj(this,Omt(this),n-Zn((Di(),Gw)),e,r)},l.lh=function(e){switch(e){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),gN)));case 4:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),pN)));case 5:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),cA)));case 6:return!this.a&&(this.a=new is(this,0)),!tj(Bc(this.a,(Di(),uA)))}return sh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e))},l.sh=function(e,n){switch(e){case 0:!this.a&&(this.a=new is(this,0)),QM(this.a,n);return;case 1:!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),lz(this.b,n);return;case 2:!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),lz(this.c,n);return;case 3:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),gN))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,gN),u(n,14));return;case 4:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),pN))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,pN),u(n,14));return;case 5:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),cA))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,cA),u(n,14));return;case 6:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),uA))),!this.a&&(this.a=new is(this,0)),hC(Bc(this.a,uA),u(n,14));return}fh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e),n)},l.zh=function(){return Di(),Gw},l.Bh=function(e){switch(e){case 0:!this.a&&(this.a=new is(this,0)),xr(this.a);return;case 1:!this.b&&(this.b=new Tl((dn(),Qa),cc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new Tl((dn(),Qa),cc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),gN)));return;case 4:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),pN)));return;case 5:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),cA)));return;case 6:!this.a&&(this.a=new is(this,0)),vx(Bc(this.a,(Di(),uA)));return}lh(this,e-Zn((Di(),Gw)),yn(this.j&2?(!this.k&&(this.k=new th),this.k).ck():Gw,e))},l.Ib=function(){var e;return this.j&4?bf(this):(e=new Th(bf(this)),e.a+=" (mixed: ",oC(e,this.a),e.a+=")",e.a)},P(ys,"XMLTypeDocumentRootImpl",669),I(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Em),l.Ih=function(e,n){switch(e.yj()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:$o(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return Br(n);case 6:return vQe(u(n,190));case 12:case 47:case 49:case 11:return Jle(this,e,n);case 13:return n==null?null:iyn(u(n,240));case 15:case 14:return n==null?null:gen(Xt(ye(n)));case 17:return nae((Di(),n));case 18:return nae(n);case 21:case 20:return n==null?null:pen(u(n,155).a);case 27:return wQe(u(n,190));case 30:return wse((Di(),u(n,15)));case 31:return wse(u(n,15));case 40:return yQe((Di(),n));case 42:return rae((Di(),n));case 43:return rae(n);case 59:case 48:return mQe((Di(),n));default:throw rt(new Pn(HE+e.ne()+kw))}},l.Jh=function(e){var n,r,s,o,h;switch(e.G==-1&&(e.G=(r=Fl(e),r?Fg(r.Mh(),e):-1)),e.G){case 0:return n=new $pt,n;case 1:return s=new vB,s;case 2:return o=new _qt,o;case 3:return h=new Cqt,h;default:throw rt(new Pn(Rct+e.zb+kw))}},l.Kh=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt;switch(e.yj()){case 5:case 52:case 4:return n;case 6:return Nhn(n);case 8:case 7:return n==null?null:xdn(n);case 9:return n==null?null:EI($l((s=$c(n,!0),s.length>0&&(Rr(0,s.length),s.charCodeAt(0)==43)?s.substr(1):s),-128,127)<<24>>24);case 10:return n==null?null:EI($l((o=$c(n,!0),o.length>0&&(Rr(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o),-128,127)<<24>>24);case 11:return Br(pw(this,(Di(),p5e),n));case 12:return Br(pw(this,(Di(),b5e),n));case 13:return n==null?null:new obt($c(n,!0));case 15:case 14:return qbn(n);case 16:return Br(pw(this,(Di(),v5e),n));case 17:return Tie((Di(),n));case 18:return Tie(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return $c(n,!0);case 21:case 20:return Qbn(n);case 22:return Br(pw(this,(Di(),w5e),n));case 23:return Br(pw(this,(Di(),m5e),n));case 24:return Br(pw(this,(Di(),y5e),n));case 25:return Br(pw(this,(Di(),x5e),n));case 26:return Br(pw(this,(Di(),k5e),n));case 27:return Lhn(n);case 30:return Cie((Di(),n));case 31:return Cie(n);case 32:return n==null?null:de($l((M=$c(n,!0),M.length>0&&(Rr(0,M.length),M.charCodeAt(0)==43)?M.substr(1):M),_a,vi));case 33:return n==null?null:new Np((F=$c(n,!0),F.length>0&&(Rr(0,F.length),F.charCodeAt(0)==43)?F.substr(1):F));case 34:return n==null?null:de($l((H=$c(n,!0),H.length>0&&(Rr(0,H.length),H.charCodeAt(0)==43)?H.substr(1):H),_a,vi));case 36:return n==null?null:g2(Sq((V=$c(n,!0),V.length>0&&(Rr(0,V.length),V.charCodeAt(0)==43)?V.substr(1):V)));case 37:return n==null?null:g2(Sq((Y=$c(n,!0),Y.length>0&&(Rr(0,Y.length),Y.charCodeAt(0)==43)?Y.substr(1):Y)));case 40:return Vln((Di(),n));case 42:return _ie((Di(),n));case 43:return _ie(n);case 44:return n==null?null:new Np((tt=$c(n,!0),tt.length>0&&(Rr(0,tt.length),tt.charCodeAt(0)==43)?tt.substr(1):tt));case 45:return n==null?null:new Np((gt=$c(n,!0),gt.length>0&&(Rr(0,gt.length),gt.charCodeAt(0)==43)?gt.substr(1):gt));case 46:return $c(n,!1);case 47:return Br(pw(this,(Di(),E5e),n));case 59:case 48:return Gln((Di(),n));case 49:return Br(pw(this,(Di(),T5e),n));case 50:return n==null?null:eE($l((Lt=$c(n,!0),Lt.length>0&&(Rr(0,Lt.length),Lt.charCodeAt(0)==43)?Lt.substr(1):Lt),MH,32767)<<16>>16);case 51:return n==null?null:eE($l((h=$c(n,!0),h.length>0&&(Rr(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),MH,32767)<<16>>16);case 53:return Br(pw(this,(Di(),C5e),n));case 55:return n==null?null:eE($l((d=$c(n,!0),d.length>0&&(Rr(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),MH,32767)<<16>>16);case 56:return n==null?null:eE($l((w=$c(n,!0),w.length>0&&(Rr(0,w.length),w.charCodeAt(0)==43)?w.substr(1):w),MH,32767)<<16>>16);case 57:return n==null?null:g2(Sq((k=$c(n,!0),k.length>0&&(Rr(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k)));case 58:return n==null?null:g2(Sq((C=$c(n,!0),C.length>0&&(Rr(0,C.length),C.charCodeAt(0)==43)?C.substr(1):C)));case 60:return n==null?null:de($l((r=$c(n,!0),r.length>0&&(Rr(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),_a,vi));case 61:return n==null?null:de($l($c(n,!0),_a,vi));default:throw rt(new Pn(HE+e.ne()+kw))}};var S5e,vLt,A5e,wLt;P(ys,"XMLTypeFactoryImpl",1919),I(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},hXt),l.N=!1,l.O=!1;var L5e=!1;P(ys,"XMLTypePackageImpl",586),I(1852,1,{837:1},ix),l._j=function(){return txt(),R5e},P(ys,"XMLTypePackageImpl/1",1852),I(1861,1,ii,h1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/10",1861),I(1862,1,ii,wB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/11",1862),I(1863,1,ii,mB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/12",1863),I(1864,1,ii,yB),l.wj=function(e){return Nm(e)},l.xj=function(e){return Pt(ca,te,333,e,7,1)},P(ys,"XMLTypePackageImpl/13",1864),I(1865,1,ii,xB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/14",1865),I(1866,1,ii,kB),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/15",1866),I(1867,1,ii,EB),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/16",1867),I(1868,1,ii,jf),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/17",1868),I(1869,1,ii,hu),l.wj=function(e){return Et(e,155)},l.xj=function(e){return Pt(XE,te,155,e,0,1)},P(ys,"XMLTypePackageImpl/18",1869),I(1870,1,ii,vJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/19",1870),I(1853,1,ii,wJ),l.wj=function(e){return Et(e,843)},l.xj=function(e){return Pt(fN,Ie,843,e,0,1)},P(ys,"XMLTypePackageImpl/2",1853),I(1871,1,ii,mJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/20",1871),I(1872,1,ii,fu),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/21",1872),I(1873,1,ii,s9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/22",1873),I(1874,1,ii,TB),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/23",1874),I(1875,1,ii,CB),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(ys,"XMLTypePackageImpl/24",1875),I(1876,1,ii,sx),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/25",1876),I(1877,1,ii,yJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/26",1877),I(1878,1,ii,Dk),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/27",1878),I(1879,1,ii,xJ),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/28",1879),I(1880,1,ii,_B),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/29",1880),I(1854,1,ii,kJ),l.wj=function(e){return Et(e,667)},l.xj=function(e){return Pt(cU,Ie,2021,e,0,1)},P(ys,"XMLTypePackageImpl/3",1854),I(1881,1,ii,EJ),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(ys,"XMLTypePackageImpl/30",1881),I(1882,1,ii,a9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/31",1882),I(1883,1,ii,SB),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(ys,"XMLTypePackageImpl/32",1883),I(1884,1,ii,zL),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/33",1884),I(1885,1,ii,o9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/34",1885),I(1886,1,ii,TJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/35",1886),I(1887,1,ii,CJ),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/36",1887),I(1888,1,ii,qL),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/37",1888),I(1889,1,ii,c9),l.wj=function(e){return Et(e,15)},l.xj=function(e){return Pt(ph,xy,15,e,0,1)},P(ys,"XMLTypePackageImpl/38",1889),I(1890,1,ii,f1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/39",1890),I(1855,1,ii,Ok),l.wj=function(e){return Et(e,668)},l.xj=function(e){return Pt(dN,Ie,2022,e,0,1)},P(ys,"XMLTypePackageImpl/4",1855),I(1891,1,ii,_J),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/40",1891),I(1892,1,ii,Nk),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/41",1892),I(1893,1,ii,HL),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/42",1893),I(1894,1,ii,Hb),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/43",1894),I(1895,1,ii,u9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/44",1895),I(1896,1,ii,GL),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(ys,"XMLTypePackageImpl/45",1896),I(1897,1,ii,$f),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/46",1897),I(1898,1,ii,l9),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/47",1898),I(1899,1,ii,d1),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/48",1899),I(nb,1,ii,g1),l.wj=function(e){return Et(e,184)},l.xj=function(e){return Pt(Cw,te,184,e,0,1)},P(ys,"XMLTypePackageImpl/49",nb),I(1856,1,ii,SJ),l.wj=function(e){return Et(e,669)},l.xj=function(e){return Pt(pLt,Ie,2023,e,0,1)},P(ys,"XMLTypePackageImpl/5",1856),I(1901,1,ii,AJ),l.wj=function(e){return Et(e,162)},l.xj=function(e){return Pt(Tw,te,162,e,0,1)},P(ys,"XMLTypePackageImpl/50",1901),I(1902,1,ii,A3),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/51",1902),I(1903,1,ii,Pk),l.wj=function(e){return Et(e,19)},l.xj=function(e){return Pt(ja,te,19,e,0,1)},P(ys,"XMLTypePackageImpl/52",1903),I(1857,1,ii,Fk),l.wj=function(e){return ea(e)},l.xj=function(e){return Pt(Ae,te,2,e,6,1)},P(ys,"XMLTypePackageImpl/6",1857),I(1858,1,ii,h9),l.wj=function(e){return Et(e,190)},l.xj=function(e){return Pt(Hu,te,190,e,0,2)},P(ys,"XMLTypePackageImpl/7",1858),I(1859,1,ii,LJ),l.wj=function(e){return Om(e)},l.xj=function(e){return Pt(Bs,te,476,e,8,1)},P(ys,"XMLTypePackageImpl/8",1859),I(1860,1,ii,ax),l.wj=function(e){return Et(e,217)},l.xj=function(e){return Pt(E6,te,217,e,0,1)},P(ys,"XMLTypePackageImpl/9",1860);var U1,rp,lA,uU,vt;I(50,60,U0,Fr),P(Vg,"RegEx/ParseException",50),I(820,1,{},VL),l.sl=function(e){return er*16)throw rt(new Fr(qr((Nr(),Qde))));r=r*16+o}while(!0);if(this.a!=125)throw rt(new Fr(qr((Nr(),Zde))));if(r>WE)throw rt(new Fr(qr((Nr(),Jde))));e=r}else{if(o=0,this.c!=0||(o=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(r=o,fi(this),this.c!=0||(o=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));r=r*16+o,e=r}break;case 117:if(s=0,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));n=n*16+s,e=n;break;case 118:if(fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,fi(this),this.c!=0||(s=b2(this.a))<0)throw rt(new Fr(qr((Nr(),Gg))));if(n=n*16+s,n>WE)throw rt(new Fr(qr((Nr(),"parser.descappe.4"))));e=n;break;case 65:case 90:case 122:throw rt(new Fr(qr((Nr(),t0e))))}return e},l.ul=function(e){var n,r;switch(e){case 100:r=(this.e&32)==32?tb("Nd",!0):(gi(),lU);break;case 68:r=(this.e&32)==32?tb("Nd",!1):(gi(),TLt);break;case 119:r=(this.e&32)==32?tb("IsWord",!0):(gi(),N7);break;case 87:r=(this.e&32)==32?tb("IsWord",!1):(gi(),_Lt);break;case 115:r=(this.e&32)==32?tb("IsSpace",!0):(gi(),K6);break;case 83:r=(this.e&32)==32?tb("IsSpace",!1):(gi(),CLt);break;default:throw rt(new Go((n=e,tge+n.toString(16))))}return r},l.vl=function(e){var n,r,s,o,h,d,w,k,C,M,F,H;for(this.b=1,fi(this),n=null,this.c==0&&this.a==94?(fi(this),e?M=(gi(),gi(),new Nl(5)):(n=(gi(),gi(),new Nl(4)),jc(n,0,WE),M=new Nl(4))):M=(gi(),gi(),new Nl(4)),o=!0;(H=this.c)!=1&&!(H==0&&this.a==93&&!o);){if(o=!1,r=this.a,s=!1,H==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:vy(M,this.ul(r)),s=!0;break;case 105:case 73:case 99:case 67:r=this.Ll(M,r),r<0&&(s=!0);break;case 112:case 80:if(F=n5t(this,r),!F)throw rt(new Fr(qr((Nr(),Qct))));vy(M,F),s=!0;break;default:r=this.tl()}else if(H==20){if(d=l8(this.i,58,this.d),d<0)throw rt(new Fr(qr((Nr(),_8t))));if(w=!0,ba(this.i,this.d)==94&&(++this.d,w=!1),h=Dl(this.i,this.d,d),k=fte(h,w,(this.e&512)==512),!k)throw rt(new Fr(qr((Nr(),Ude))));if(vy(M,k),s=!0,d+1>=this.j||ba(this.i,d+1)!=93)throw rt(new Fr(qr((Nr(),_8t))));this.d=d+2}if(fi(this),!s)if(this.c!=0||this.a!=45)jc(M,r,r);else{if(fi(this),(H=this.c)==1)throw rt(new Fr(qr((Nr(),EH))));H==0&&this.a==93?(jc(M,r,r),jc(M,45,45)):(C=this.a,H==10&&(C=this.tl()),fi(this),jc(M,r,C))}(this.e&wf)==wf&&this.c==0&&this.a==44&&fi(this)}if(this.c==1)throw rt(new Fr(qr((Nr(),EH))));return n&&(__(n,M),M=n),b4(M),T_(M),this.b=0,fi(this),M},l.wl=function(){var e,n,r,s;for(r=this.vl(!1);(s=this.c)!=7;)if(e=this.a,s==0&&(e==45||e==38)||s==4){if(fi(this),this.c!=9)throw rt(new Fr(qr((Nr(),Kde))));if(n=this.vl(!1),s==4)vy(r,n);else if(e==45)__(r,n);else if(e==38)Wle(r,n);else throw rt(new Go("ASSERT"))}else throw rt(new Fr(qr((Nr(),Yde))));return fi(this),r},l.xl=function(){var e,n;return e=this.a-48,n=(gi(),gi(),new hrt(12,null,e)),!this.g&&(this.g=new fR),hR(this.g,new ypt(e)),fi(this),n},l.yl=function(){return fi(this),gi(),D5e},l.zl=function(){return fi(this),gi(),I5e},l.Al=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Bl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Cl=function(){return fi(this),Ucn()},l.Dl=function(){return fi(this),gi(),N5e},l.El=function(){return fi(this),gi(),F5e},l.Fl=function(){var e;if(this.d>=this.j||((e=ba(this.i,this.d++))&65504)!=64)throw rt(new Fr(qr((Nr(),Hde))));return fi(this),gi(),gi(),new Vd(0,e-64)},l.Gl=function(){return fi(this),Lmn()},l.Hl=function(){return fi(this),gi(),B5e},l.Il=function(){var e;return e=(gi(),gi(),new Vd(0,105)),fi(this),e},l.Jl=function(){return fi(this),gi(),P5e},l.Kl=function(){return fi(this),gi(),O5e},l.Ll=function(e,n){return this.tl()},l.Ml=function(){return fi(this),gi(),kLt},l.Nl=function(){var e,n,r,s,o;if(this.d+1>=this.j)throw rt(new Fr(qr((Nr(),$de))));if(s=-1,n=null,e=ba(this.i,this.d),49<=e&&e<=57){if(s=e-48,!this.g&&(this.g=new fR),hR(this.g,new ypt(s)),++this.d,ba(this.i,this.d)!=41)throw rt(new Fr(qr((Nr(),A2))));++this.d}else switch(e==63&&--this.d,fi(this),n=Cxt(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw rt(new Fr(qr((Nr(),A2))));break;default:throw rt(new Fr(qr((Nr(),zde))))}if(fi(this),o=sw(this),r=null,o.e==2){if(o.em()!=2)throw rt(new Fr(qr((Nr(),qde))));r=o.am(1),o=o.am(0)}if(this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),gi(),gi(),new Gte(s,n,o,r)},l.Ol=function(){return fi(this),gi(),ELt},l.Pl=function(){var e;if(fi(this),e=Wj(24,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Ql=function(){var e;if(fi(this),e=Wj(20,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Rl=function(){var e;if(fi(this),e=Wj(22,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Sl=function(){var e,n,r,s,o;for(e=0,r=0,n=-1;this.d=this.j)throw rt(new Fr(qr((Nr(),T8t))));if(n==45){for(++this.d;this.d=this.j)throw rt(new Fr(qr((Nr(),T8t))))}if(n==58){if(++this.d,fi(this),s=YYt(sw(this),e,r),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));fi(this)}else if(n==41)++this.d,fi(this),s=YYt(sw(this),e,r);else throw rt(new Fr(qr((Nr(),jde))));return s},l.Tl=function(){var e;if(fi(this),e=Wj(21,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Ul=function(){var e;if(fi(this),e=Wj(23,sw(this)),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Vl=function(){var e,n;if(fi(this),e=this.f++,n=Rnt(sw(this),e),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),n},l.Wl=function(){var e;if(fi(this),e=Rnt(sw(this),0),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Xl=function(e){return fi(this),this.c==5?(fi(this),Bj(e,(gi(),gi(),new Wm(9,e)))):Bj(e,(gi(),gi(),new Wm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new lC(2)),this.c==5?(fi(this),m2(n,fA),m2(n,e)):(m2(n,e),m2(n,fA)),n},l.Zl=function(e){return fi(this),this.c==5?(fi(this),gi(),gi(),new Wm(9,e)):(gi(),gi(),new Wm(3,e))},l.a=0,l.b=0,l.c=0,l.d=0,l.e=0,l.f=1,l.g=null,l.j=0,P(Vg,"RegEx/RegexParser",820),I(1824,820,{},Sqt),l.sl=function(e){return!1},l.tl=function(){return F5t(this)},l.ul=function(e){return kE(e)},l.vl=function(e){return jhe(this)},l.wl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.xl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.yl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.zl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Al=function(){return fi(this),kE(67)},l.Bl=function(){return fi(this),kE(73)},l.Cl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Dl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.El=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Fl=function(){return fi(this),kE(99)},l.Gl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Hl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Il=function(){return fi(this),kE(105)},l.Jl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Kl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ll=function(e,n){return vy(e,kE(n)),-1},l.Ml=function(){return fi(this),gi(),gi(),new Vd(0,94)},l.Nl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ol=function(){return fi(this),gi(),gi(),new Vd(0,36)},l.Pl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ql=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Rl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Sl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Tl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Ul=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Vl=function(){var e;if(fi(this),e=Rnt(sw(this),0),this.c!=7)throw rt(new Fr(qr((Nr(),A2))));return fi(this),e},l.Wl=function(){throw rt(new Fr(qr((Nr(),gh))))},l.Xl=function(e){return fi(this),Bj(e,(gi(),gi(),new Wm(3,e)))},l.Yl=function(e){var n;return fi(this),n=(gi(),gi(),new lC(2)),m2(n,e),m2(n,fA),n},l.Zl=function(e){return fi(this),gi(),gi(),new Wm(3,e)};var h5=null,D7=null;P(Vg,"RegEx/ParserForXMLSchema",1824),I(117,1,KE,vv),l.$l=function(e){throw rt(new Go("Not supported."))},l._l=function(){return-1},l.am=function(e){return null},l.bm=function(){return null},l.cm=function(e){},l.dm=function(e){},l.em=function(){return 0},l.Ib=function(){return this.fm(0)},l.fm=function(e){return this.e==11?".":""},l.e=0;var mLt,O7,hA,M5e,yLt,n3=null,lU,Dft=null,xLt,fA,Oft=null,kLt,ELt,TLt,CLt,_Lt,I5e,K6,D5e,O5e,N5e,P5e,N7,F5e,B5e,Exn=P(Vg,"RegEx/Token",117);I(136,117,{3:1,136:1,117:1},Nl),l.fm=function(e){var n,r,s;if(this.e==4)if(this==xLt)r=".";else if(this==lU)r="\\d";else if(this==N7)r="\\w";else if(this==K6)r="\\s";else{for(s=new xg,s.a+="[",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?fo(s,xD(this.b[n])):(fo(s,xD(this.b[n])),s.a+="-",fo(s,xD(this.b[n+1])));s.a+="]",r=s.a}else if(this==TLt)r="\\D";else if(this==_Lt)r="\\W";else if(this==CLt)r="\\S";else{for(s=new xg,s.a+="[^",n=0;n0&&(s.a+=","),this.b[n]===this.b[n+1]?fo(s,xD(this.b[n])):(fo(s,xD(this.b[n])),s.a+="-",fo(s,xD(this.b[n+1])));s.a+="]",r=s.a}return r},l.a=!1,l.c=!1,P(Vg,"RegEx/RangeToken",136),I(584,1,{584:1},ypt),l.a=0,P(Vg,"RegEx/RegexParser/ReferencePosition",584),I(583,1,{3:1,583:1},RHt),l.Fb=function(e){var n;return e==null||!Et(e,583)?!1:(n=u(e,583),hn(this.b,n.b)&&this.a==n.a)},l.Hb=function(){return Bg(this.b+"/"+M5t(this.a))},l.Ib=function(){return this.c.fm(this.a)},l.a=0,P(Vg,"RegEx/RegularExpression",583),I(223,117,KE,Vd),l._l=function(){return this.a},l.fm=function(e){var n,r,s;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:s="\\"+hnt(this.a&ms);break;case 12:s="\\f";break;case 10:s="\\n";break;case 13:s="\\r";break;case 9:s="\\t";break;case 27:s="\\e";break;default:this.a>=Ya?(r=(n=this.a>>>0,"0"+n.toString(16)),s="\\v"+Dl(r,r.length-6,r.length)):s=""+hnt(this.a&ms)}break;case 8:this==kLt||this==ELt?s=""+hnt(this.a&ms):s="\\"+hnt(this.a&ms);break;default:s=null}return s},l.a=0,P(Vg,"RegEx/Token/CharToken",223),I(309,117,KE,Wm),l.am=function(e){return this.a},l.cm=function(e){this.b=e},l.dm=function(e){this.c=e},l.em=function(){return 1},l.fm=function(e){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.fm(e)+"*";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}";else throw rt(new Go("Token#toString(): CLOSURE "+this.c+Ka+this.b));else if(this.c<0&&this.b<0)n=this.a.fm(e)+"*?";else if(this.c==this.b)n=this.a.fm(e)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.fm(e)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.fm(e)+"{"+this.c+",}?";else throw rt(new Go("Token#toString(): NONGREEDYCLOSURE "+this.c+Ka+this.b));return n},l.b=0,l.c=0,P(Vg,"RegEx/Token/ClosureToken",309),I(821,117,KE,fwt),l.am=function(e){return e==0?this.a:this.b},l.em=function(){return 2},l.fm=function(e){var n;return this.b.e==3&&this.b.am(0)==this.a?n=this.a.fm(e)+"+":this.b.e==9&&this.b.am(0)==this.a?n=this.a.fm(e)+"+?":n=this.a.fm(e)+(""+this.b.fm(e)),n},P(Vg,"RegEx/Token/ConcatToken",821),I(1822,117,KE,Gte),l.am=function(e){if(e==0)return this.d;if(e==1)return this.b;throw rt(new Go("Internal Error: "+e))},l.em=function(){return this.b?2:1},l.fm=function(e){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},l.c=0,P(Vg,"RegEx/Token/ConditionToken",1822),I(1823,117,KE,GQt),l.am=function(e){return this.b},l.em=function(){return 1},l.fm=function(e){return"(?"+(this.a==0?"":M5t(this.a))+(this.c==0?"":M5t(this.c))+":"+this.b.fm(e)+")"},l.a=0,l.c=0,P(Vg,"RegEx/Token/ModifierToken",1823),I(822,117,KE,wwt),l.am=function(e){return this.a},l.em=function(){return 1},l.fm=function(e){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.fm(e)+")":n="("+this.a.fm(e)+")";break;case 20:n="(?="+this.a.fm(e)+")";break;case 21:n="(?!"+this.a.fm(e)+")";break;case 22:n="(?<="+this.a.fm(e)+")";break;case 23:n="(?"+this.a.fm(e)+")"}return n},l.b=0,P(Vg,"RegEx/Token/ParenToken",822),I(521,117,{3:1,117:1,521:1},hrt),l.bm=function(){return this.b},l.fm=function(e){return this.e==12?"\\"+this.a:Bpn(this.b)},l.a=0,P(Vg,"RegEx/Token/StringToken",521),I(465,117,KE,lC),l.$l=function(e){m2(this,e)},l.am=function(e){return u(Rv(this.a,e),117)},l.em=function(){return this.a?this.a.a.c.length:0},l.fm=function(e){var n,r,s,o,h;if(this.e==1){if(this.a.a.c.length==2)n=u(Rv(this.a,0),117),r=u(Rv(this.a,1),117),r.e==3&&r.am(0)==n?o=n.fm(e)+"+":r.e==9&&r.am(0)==n?o=n.fm(e)+"+?":o=n.fm(e)+(""+r.fm(e));else{for(h=new xg,s=0;s=this.c.b:this.a<=this.c.b},l.Sb=function(){return this.b>0},l.Tb=function(){return this.b},l.Vb=function(){return this.b-1},l.Qb=function(){throw rt(new yg(oge))},l.a=0,l.b=0,P(V8t,"ExclusiveRange/RangeIterator",254);var mh=y8(TH,"C"),Tr=y8(tS,"I"),dl=y8(u6,"Z"),Lb=y8(eS,"J"),Hu=y8(Q_,"B"),ia=y8(Z_,"D"),r3=y8(J_,"F"),f5=y8(nS,"S"),Txn=Yi("org.eclipse.elk.core.labels","ILabelManager"),SLt=Yi(Ra,"DiagnosticChain"),ALt=Yi(P0e,"ResourceSet"),LLt=P(Ra,"InvocationTargetException",null),j5e=(vR(),psn),$5e=$5e=idn;lon(rKe),Fon("permProps",[[[BH,RH],[jH,"gecko1_8"]],[[BH,RH],[jH,"ie10"]],[[BH,RH],[jH,"ie8"]],[[BH,RH],[jH,"ie9"]],[[BH,RH],[jH,"safari"]]]),$5e(null,"elk",null)}).call(this)}).call(this,typeof d0<"u"?d0:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(f,p,v){function m(N,B){if(!(N instanceof B))throw new TypeError("Cannot call a class as a function")}function b(N,B){if(!N)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return B&&(typeof B=="object"||typeof B=="function")?B:N}function E(N,B){if(typeof B!="function"&&B!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof B);N.prototype=Object.create(B&&B.prototype,{constructor:{value:N,enumerable:!1,writable:!0,configurable:!0}}),B&&(Object.setPrototypeOf?Object.setPrototypeOf(N,B):N.__proto__=B)}var _=f("./elk-api.js").default,L=function(N){E(B,N);function B(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};m(this,B);var R=Object.assign({},j),z=!1;try{f.resolve("web-worker"),z=!0}catch{}if(j.workerUrl)if(z){var K=f("web-worker");R.workerFactory=function(ut){return new K(ut)}}else console.warn(`Web worker requested but 'web-worker' package not installed. Consider installing the package or pass your own 'workerFactory' to ELK's constructor. -... Falling back to non-web worker version.`);if(!R.workerFactory){var rt=f("./elk-worker.min.js"),J=rt.Worker;R.workerFactory=function(it){return new J(it)}}return b(this,(F.__proto__||Object.getPrototypeOf(F)).call(this,R))}return F}(C);Object.defineProperty(p.exports,"__esModule",{value:!0}),p.exports=A,A.default=A},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(f,p,v){p.exports=Worker},{}]},{},[3])(3)})})(mjt);var cUe=mjt.exports;const uUe=PE(cUe),yjt=new uUe;let sv={};const lUe={};let B5={};const hUe=async function(i,a,f,p,v,m,b){const C=f.select(`[id="${a}"]`).insert("g").attr("class","nodes"),A=Object.keys(i);return await Promise.all(A.map(async function(P){const F=i[P];let j="default";F.classes.length>0&&(j=F.classes.join(" ")),j=j+" flowchart-label";const R=em(F.styles);let H=F.text!==void 0?F.text:F.id;const Y={width:0,height:0},rt=[{id:F.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:F.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:F.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:F.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let J=0,it="",ft={};switch(F.type){case"round":J=5,it="rect";break;case"square":it="rect";break;case"diamond":it="question",ft={portConstraints:"FIXED_SIDE"};break;case"hexagon":it="hexagon";break;case"odd":it="rect_left_inv_arrow";break;case"lean_right":it="lean_right";break;case"lean_left":it="lean_left";break;case"trapezoid":it="trapezoid";break;case"inv_trapezoid":it="inv_trapezoid";break;case"odd_right":it="rect_left_inv_arrow";break;case"circle":it="circle";break;case"ellipse":it="ellipse";break;case"stadium":it="stadium";break;case"subroutine":it="subroutine";break;case"cylinder":it="cylinder";break;case"group":it="rect";break;case"doublecircle":it="doublecircle";break;default:it="rect"}const Tt={labelStyle:R.labelStyle,shape:it,labelText:H,labelType:F.labelType,rx:J,ry:J,class:j,style:R.style,id:F.id,link:F.link,linkTarget:F.linkTarget,tooltip:v.db.getTooltip(F.id)||"",domId:v.db.lookUpDomId(F.id),haveCallback:F.haveCallback,width:F.type==="group"?500:void 0,dir:F.dir,type:F.type,props:F.props,padding:De().flowchart.padding};let kt,mt;if(Tt.type!=="group")mt=await _Bt(C,Tt,F.dir),kt=mt.node().getBBox();else{p.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:yt,bbox:st}=await Od(C,Tt,void 0,!0);Y.width=st.width,Y.wrappingWidth=De().flowchart.wrappingWidth,Y.height=st.height,Y.labelNode=yt.node(),Tt.labelData=Y}const ct={id:F.id,ports:F.type==="diamond"?rt:[],layoutOptions:ft,labelText:H,labelData:Y,domId:v.db.lookUpDomId(F.id),width:kt==null?void 0:kt.width,height:kt==null?void 0:kt.height,type:F.type,el:mt,parent:m.parentById[F.id]};B5[Tt.id]=ct})),b},xjt=(i,a,f)=>{const p={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return p.TD=p.TB,Wt.info("abc88",f,a,i),p[f][a][i]},kjt=(i,a,f)=>{if(Wt.info("getNextPort abc88",{node:i,edgeDirection:a,graphDirection:f}),!sv[i])switch(f){case"TB":case"TD":sv[i]={inPosition:"north",outPosition:"south"};break;case"BT":sv[i]={inPosition:"south",outPosition:"north"};break;case"RL":sv[i]={inPosition:"east",outPosition:"west"};break;case"LR":sv[i]={inPosition:"west",outPosition:"east"};break}const p=a==="in"?sv[i].inPosition:sv[i].outPosition;return a==="in"?sv[i].inPosition=xjt(sv[i].inPosition,a,f):sv[i].outPosition=xjt(sv[i].outPosition,a,f),p},fUe=(i,a)=>{let f=i.start,p=i.end;const v=f,m=p,b=B5[f],E=B5[p];return!b||!E?{source:f,target:p}:(b.type==="diamond"&&(f=`${f}-${kjt(f,"out",a)}`),E.type==="diamond"&&(p=`${p}-${kjt(p,"in",a)}`),{source:f,target:p,sourceId:v,targetId:m})},dUe=function(i,a,f,p){Wt.info("abc78 edges = ",i);const v=p.insert("g").attr("class","edgeLabels");let m={},b=a.db.getDirection(),E,C;if(i.defaultStyle!==void 0){const A=em(i.defaultStyle);E=A.style,C=A.labelStyle}return i.forEach(function(A){const P="L-"+A.start+"-"+A.end;m[P]===void 0?(m[P]=0,Wt.info("abc78 new entry",P,m[P])):(m[P]++,Wt.info("abc78 new entry",P,m[P]));let F=P+"-"+m[P];Wt.info("abc78 new link id to be used is",P,F,m[P]);const j="LS-"+A.start,R="LE-"+A.end,H={style:"",labelStyle:""};switch(H.minlen=A.length||1,A.type==="arrow_open"?H.arrowhead="none":H.arrowhead="normal",H.arrowTypeStart="arrow_open",H.arrowTypeEnd="arrow_open",A.type){case"double_arrow_cross":H.arrowTypeStart="arrow_cross";case"arrow_cross":H.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":H.arrowTypeStart="arrow_point";case"arrow_point":H.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":H.arrowTypeStart="arrow_circle";case"arrow_circle":H.arrowTypeEnd="arrow_circle";break}let Y="",rt="";switch(A.stroke){case"normal":Y="fill:none;",E!==void 0&&(Y=E),C!==void 0&&(rt=C),H.thickness="normal",H.pattern="solid";break;case"dotted":H.thickness="normal",H.pattern="dotted",H.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":H.thickness="thick",H.pattern="solid",H.style="stroke-width: 3.5px;fill:none;";break}if(A.style!==void 0){const mt=em(A.style);Y=mt.style,rt=mt.labelStyle}H.style=H.style+=Y,H.labelStyle=H.labelStyle+=rt,A.interpolate!==void 0?H.curve=Z2(A.interpolate,ig):i.defaultInterpolate!==void 0?H.curve=Z2(i.defaultInterpolate,ig):H.curve=Z2(lUe.curve,ig),A.text===void 0?A.style!==void 0&&(H.arrowheadStyle="fill: #333"):(H.arrowheadStyle="fill: #333",H.labelpos="c"),H.labelType=A.labelType,H.label=A.text.replace(ui.lineBreakRegex,` -`),A.style===void 0&&(H.style=H.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),H.labelStyle=H.labelStyle.replace("color:","fill:"),H.id=F,H.classes="flowchart-link "+j+" "+R;const J=ABt(v,H),{source:it,target:ft,sourceId:Tt,targetId:kt}=fUe(A,b);Wt.debug("abc78 source and target",it,ft),f.edges.push({id:"e"+A.start+A.end,sources:[it],targets:[ft],sourceId:Tt,targetId:kt,labelEl:J,labels:[{width:H.width,height:H.height,orgWidth:H.width,orgHeight:H.height,text:H.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:H})}),f},gUe=function(i,a,f,p){let v="";switch(p&&(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,v=v.replace(/\(/g,"\\("),v=v.replace(/\)/g,"\\)")),a.arrowTypeStart){case"arrow_cross":i.attr("marker-start","url("+v+"#"+f+"-crossStart)");break;case"arrow_point":i.attr("marker-start","url("+v+"#"+f+"-pointStart)");break;case"arrow_barb":i.attr("marker-start","url("+v+"#"+f+"-barbStart)");break;case"arrow_circle":i.attr("marker-start","url("+v+"#"+f+"-circleStart)");break;case"aggregation":i.attr("marker-start","url("+v+"#"+f+"-aggregationStart)");break;case"extension":i.attr("marker-start","url("+v+"#"+f+"-extensionStart)");break;case"composition":i.attr("marker-start","url("+v+"#"+f+"-compositionStart)");break;case"dependency":i.attr("marker-start","url("+v+"#"+f+"-dependencyStart)");break;case"lollipop":i.attr("marker-start","url("+v+"#"+f+"-lollipopStart)");break}switch(a.arrowTypeEnd){case"arrow_cross":i.attr("marker-end","url("+v+"#"+f+"-crossEnd)");break;case"arrow_point":i.attr("marker-end","url("+v+"#"+f+"-pointEnd)");break;case"arrow_barb":i.attr("marker-end","url("+v+"#"+f+"-barbEnd)");break;case"arrow_circle":i.attr("marker-end","url("+v+"#"+f+"-circleEnd)");break;case"aggregation":i.attr("marker-end","url("+v+"#"+f+"-aggregationEnd)");break;case"extension":i.attr("marker-end","url("+v+"#"+f+"-extensionEnd)");break;case"composition":i.attr("marker-end","url("+v+"#"+f+"-compositionEnd)");break;case"dependency":i.attr("marker-end","url("+v+"#"+f+"-dependencyEnd)");break;case"lollipop":i.attr("marker-end","url("+v+"#"+f+"-lollipopEnd)");break}},pUe=function(i,a){return Wt.info("Extracting classes"),a.db.getClasses()},bUe=function(i){const a={parentById:{},childrenById:{}},f=i.getSubGraphs();return Wt.info("Subgraphs - ",f),f.forEach(function(p){p.nodes.forEach(function(v){a.parentById[v]=p.id,a.childrenById[p.id]===void 0&&(a.childrenById[p.id]=[]),a.childrenById[p.id].push(v)})}),f.forEach(function(p){p.id,a.parentById[p.id]!==void 0&&a.parentById[p.id]}),a},vUe=function(i,a,f){const p=oUe(i,a,f);if(p===void 0||p==="root")return{x:0,y:0};const v=B5[p].offset;return{x:v.posX,y:v.posY}},wUe=function(i,a,f,p,v){const m=vUe(a.sourceId,a.targetId,v),b=a.sections[0].startPoint,E=a.sections[0].endPoint,A=(a.sections[0].bendPoints?a.sections[0].bendPoints:[]).map(rt=>[rt.x+m.x,rt.y+m.y]),P=[[b.x+m.x,b.y+m.y],...A,[E.x+m.x,E.y+m.y]],F=YE().curve(ig),j=i.insert("path").attr("d",F(P)).attr("class","path "+f.classes).attr("fill","none"),R=i.insert("g").attr("class","edgeLabel"),H=xr(R.node().appendChild(a.labelEl)),Y=H.node().firstChild.getBoundingClientRect();H.attr("width",Y.width),H.attr("height",Y.height),R.attr("transform",`translate(${a.labels[0].x+m.x}, ${a.labels[0].y+m.y})`),gUe(j,f,p.type,p.arrowMarkerAbsolute)},Ejt=(i,a)=>{i.forEach(f=>{f.children||(f.children=[]);const p=a.childrenById[f.id];p&&p.forEach(v=>{f.children.push(B5[v])}),Ejt(f.children,a)})},mUe=async function(i,a,f,p){var ct;B5={},sv={};const v=xr("body").append("div").attr("style","height:400px").attr("id","cy");let m={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Wt.info("Drawing flowchart using v3 renderer",yjt),p.db.getDirection()){case"BT":m.layoutOptions["elk.direction"]="UP";break;case"TB":m.layoutOptions["elk.direction"]="DOWN";break;case"LR":m.layoutOptions["elk.direction"]="RIGHT";break;case"RL":m.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:E,flowchart:C}=De();let A;E==="sandbox"&&(A=xr("#i"+a));const P=xr(E==="sandbox"?A.nodes()[0].contentDocument.body:"body"),F=E==="sandbox"?A.nodes()[0].contentDocument:document,j=P.select(`[id="${a}"]`);DFt(j,["point","circle","cross"],p.type,p.arrowMarkerAbsolute);const H=p.db.getVertices();let Y;const rt=p.db.getSubGraphs();Wt.info("Subgraphs - ",rt);for(let yt=rt.length-1;yt>=0;yt--)Y=rt[yt],p.db.addVertex(Y.id,{text:Y.title,type:Y.labelType},"group",void 0,Y.classes,Y.dir);const J=j.insert("g").attr("class","subgraphs"),it=bUe(p.db);m=await hUe(H,a,P,F,p,it,m);const ft=j.insert("g").attr("class","edges edgePath"),Tt=p.db.getEdges();m=dUe(Tt,p,m,j),Object.keys(B5).forEach(yt=>{const st=B5[yt];st.parent||m.children.push(st),it.childrenById[yt]!==void 0&&(st.labels=[{text:st.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:st.labelData.width,height:st.labelData.height}],delete st.x,delete st.y,delete st.width,delete st.height)}),Ejt(m.children,it),Wt.info("after layout",JSON.stringify(m,null,2));const mt=await yjt.layout(m);Tjt(0,0,mt.children,j,J,p,0),Wt.info("after layout",mt),(ct=mt.edges)==null||ct.map(yt=>{wUe(ft,yt,yt.edgeData,p,it)}),s9({},j,C.diagramPadding,C.useMaxWidth),v.remove()},Tjt=(i,a,f,p,v,m,b)=>{f.forEach(function(E){if(E)if(B5[E.id].offset={posX:E.x+i,posY:E.y+a,x:i,y:a,depth:b,width:E.width,height:E.height},E.type==="group"){const C=v.insert("g").attr("class","subgraph");C.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",E.x+i).attr("y",E.y+a).attr("width",E.width).attr("height",E.height);const A=C.insert("g").attr("class","label"),P=De().flowchart.htmlLabels?E.labelData.width/2:0;A.attr("transform",`translate(${E.labels[0].x+i+E.x+P}, ${E.labels[0].y+a+E.y+3})`),A.node().appendChild(E.labelData.labelNode),Wt.info("Id (UGH)= ",E.type,E.labels)}else Wt.info("Id (UGH)= ",E.id),E.el.attr("transform",`translate(${E.x+i+E.width/2}, ${E.y+a+E.height/2})`)}),f.forEach(function(E){E&&E.type==="group"&&Tjt(i+E.x,a+E.y,E.children,p,v,m,b+1)})},yUe={getClasses:pUe,draw:mUe},xUe=i=>{let a="";for(let f=0;f<5;f++)a+=` +... Falling back to non-web worker version.`);if(!R.workerFactory){var it=f("./elk-worker.min.js"),st=it.Worker;R.workerFactory=function(ut){return new st(ut)}}return b(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,R))}return B}(_);Object.defineProperty(p.exports,"__esModule",{value:!0}),p.exports=L,L.default=L},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(f,p,v){p.exports=Worker},{}]},{},[3])(3)})})(kjt);var cUe=kjt.exports;const uUe=B7(cUe),Ejt=new uUe;let iv={};const lUe={};let P5={};const hUe=async function(i,a,f,p,v,m,b){const _=f.select(`[id="${a}"]`).insert("g").attr("class","nodes"),L=Object.keys(i);return await Promise.all(L.map(async function(N){const B=i[N];let j="default";B.classes.length>0&&(j=B.classes.join(" ")),j=j+" flowchart-label";const R=em(B.styles);let z=B.text!==void 0?B.text:B.id;const K={width:0,height:0},it=[{id:B.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:B.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:B.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:B.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let st=0,ut="",bt={};switch(B.type){case"round":st=5,ut="rect";break;case"square":ut="rect";break;case"diamond":ut="question",bt={portConstraints:"FIXED_SIDE"};break;case"hexagon":ut="hexagon";break;case"odd":ut="rect_left_inv_arrow";break;case"lean_right":ut="lean_right";break;case"lean_left":ut="lean_left";break;case"trapezoid":ut="trapezoid";break;case"inv_trapezoid":ut="inv_trapezoid";break;case"odd_right":ut="rect_left_inv_arrow";break;case"circle":ut="circle";break;case"ellipse":ut="ellipse";break;case"stadium":ut="stadium";break;case"subroutine":ut="subroutine";break;case"cylinder":ut="cylinder";break;case"group":ut="rect";break;case"doublecircle":ut="doublecircle";break;default:ut="rect"}const mt={labelStyle:R.labelStyle,shape:ut,labelText:z,labelType:B.labelType,rx:st,ry:st,class:j,style:R.style,id:B.id,link:B.link,linkTarget:B.linkTarget,tooltip:v.db.getTooltip(B.id)||"",domId:v.db.lookUpDomId(B.id),haveCallback:B.haveCallback,width:B.type==="group"?500:void 0,dir:B.dir,type:B.type,props:B.props,padding:Le().flowchart.padding};let yt,dt;if(mt.type!=="group")dt=await xBt(_,mt,B.dir),yt=dt.node().getBBox();else{p.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:wt,bbox:X}=await Od(_,mt,void 0,!0);K.width=X.width,K.wrappingWidth=Le().flowchart.wrappingWidth,K.height=X.height,K.labelNode=wt.node(),mt.labelData=K}const ht={id:B.id,ports:B.type==="diamond"?it:[],layoutOptions:bt,labelText:z,labelData:K,domId:v.db.lookUpDomId(B.id),width:yt==null?void 0:yt.width,height:yt==null?void 0:yt.height,type:B.type,el:dt,parent:m.parentById[B.id]};P5[mt.id]=ht})),b},Tjt=(i,a,f)=>{const p={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return p.TD=p.TB,Ut.info("abc88",f,a,i),p[f][a][i]},Cjt=(i,a,f)=>{if(Ut.info("getNextPort abc88",{node:i,edgeDirection:a,graphDirection:f}),!iv[i])switch(f){case"TB":case"TD":iv[i]={inPosition:"north",outPosition:"south"};break;case"BT":iv[i]={inPosition:"south",outPosition:"north"};break;case"RL":iv[i]={inPosition:"east",outPosition:"west"};break;case"LR":iv[i]={inPosition:"west",outPosition:"east"};break}const p=a==="in"?iv[i].inPosition:iv[i].outPosition;return a==="in"?iv[i].inPosition=Tjt(iv[i].inPosition,a,f):iv[i].outPosition=Tjt(iv[i].outPosition,a,f),p},fUe=(i,a)=>{let f=i.start,p=i.end;const v=f,m=p,b=P5[f],E=P5[p];return!b||!E?{source:f,target:p}:(b.type==="diamond"&&(f=`${f}-${Cjt(f,"out",a)}`),E.type==="diamond"&&(p=`${p}-${Cjt(p,"in",a)}`),{source:f,target:p,sourceId:v,targetId:m})},dUe=function(i,a,f,p){Ut.info("abc78 edges = ",i);const v=p.insert("g").attr("class","edgeLabels");let m={},b=a.db.getDirection(),E,_;if(i.defaultStyle!==void 0){const L=em(i.defaultStyle);E=L.style,_=L.labelStyle}return i.forEach(function(L){const N="L-"+L.start+"-"+L.end;m[N]===void 0?(m[N]=0,Ut.info("abc78 new entry",N,m[N])):(m[N]++,Ut.info("abc78 new entry",N,m[N]));let B=N+"-"+m[N];Ut.info("abc78 new link id to be used is",N,B,m[N]);const j="LS-"+L.start,R="LE-"+L.end,z={style:"",labelStyle:""};switch(z.minlen=L.length||1,L.type==="arrow_open"?z.arrowhead="none":z.arrowhead="normal",z.arrowTypeStart="arrow_open",z.arrowTypeEnd="arrow_open",L.type){case"double_arrow_cross":z.arrowTypeStart="arrow_cross";case"arrow_cross":z.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":z.arrowTypeStart="arrow_point";case"arrow_point":z.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":z.arrowTypeStart="arrow_circle";case"arrow_circle":z.arrowTypeEnd="arrow_circle";break}let K="",it="";switch(L.stroke){case"normal":K="fill:none;",E!==void 0&&(K=E),_!==void 0&&(it=_),z.thickness="normal",z.pattern="solid";break;case"dotted":z.thickness="normal",z.pattern="dotted",z.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":z.thickness="thick",z.pattern="solid",z.style="stroke-width: 3.5px;fill:none;";break}if(L.style!==void 0){const dt=em(L.style);K=dt.style,it=dt.labelStyle}z.style=z.style+=K,z.labelStyle=z.labelStyle+=it,L.interpolate!==void 0?z.curve=X2(L.interpolate,ig):i.defaultInterpolate!==void 0?z.curve=X2(i.defaultInterpolate,ig):z.curve=X2(lUe.curve,ig),L.text===void 0?L.style!==void 0&&(z.arrowheadStyle="fill: #333"):(z.arrowheadStyle="fill: #333",z.labelpos="c"),z.labelType=L.labelType,z.label=L.text.replace(Yr.lineBreakRegex,` +`),L.style===void 0&&(z.style=z.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),z.labelStyle=z.labelStyle.replace("color:","fill:"),z.id=B,z.classes="flowchart-link "+j+" "+R;const st=CBt(v,z),{source:ut,target:bt,sourceId:mt,targetId:yt}=fUe(L,b);Ut.debug("abc78 source and target",ut,bt),f.edges.push({id:"e"+L.start+L.end,sources:[ut],targets:[bt],sourceId:mt,targetId:yt,labelEl:st,labels:[{width:z.width,height:z.height,orgWidth:z.width,orgHeight:z.height,text:z.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:z})}),f},gUe=function(i,a,f,p,v){let m="";switch(p&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),a.arrowTypeStart){case"arrow_cross":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-crossStart)");break;case"arrow_point":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-pointStart)");break;case"arrow_barb":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-barbStart)");break;case"arrow_circle":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-circleStart)");break;case"aggregation":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-aggregationStart)");break;case"extension":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-extensionStart)");break;case"composition":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-compositionStart)");break;case"dependency":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-dependencyStart)");break;case"lollipop":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-lollipopStart)");break}switch(a.arrowTypeEnd){case"arrow_cross":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-crossEnd)");break;case"arrow_point":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-pointEnd)");break;case"arrow_barb":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-barbEnd)");break;case"arrow_circle":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-circleEnd)");break;case"aggregation":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-aggregationEnd)");break;case"extension":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-extensionEnd)");break;case"composition":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-compositionEnd)");break;case"dependency":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-dependencyEnd)");break;case"lollipop":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-lollipopEnd)");break}},pUe=function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},bUe=function(i){const a={parentById:{},childrenById:{}},f=i.getSubGraphs();return Ut.info("Subgraphs - ",f),f.forEach(function(p){p.nodes.forEach(function(v){a.parentById[v]=p.id,a.childrenById[p.id]===void 0&&(a.childrenById[p.id]=[]),a.childrenById[p.id].push(v)})}),f.forEach(function(p){p.id,a.parentById[p.id]!==void 0&&a.parentById[p.id]}),a},vUe=function(i,a,f){const p=oUe(i,a,f);if(p===void 0||p==="root")return{x:0,y:0};const v=P5[p].offset;return{x:v.posX,y:v.posY}},wUe=function(i,a,f,p,v,m){const b=vUe(a.sourceId,a.targetId,v),E=a.sections[0].startPoint,_=a.sections[0].endPoint,N=(a.sections[0].bendPoints?a.sections[0].bendPoints:[]).map(bt=>[bt.x+b.x,bt.y+b.y]),B=[[E.x+b.x,E.y+b.y],...N,[_.x+b.x,_.y+b.y]],{x:j,y:R}=TBt(a.edgeData),z=Z7().x(j).y(R).curve(ig),K=i.insert("path").attr("d",z(B)).attr("class","path "+f.classes).attr("fill","none"),it=i.insert("g").attr("class","edgeLabel"),st=yr(it.node().appendChild(a.labelEl)),ut=st.node().firstChild.getBoundingClientRect();st.attr("width",ut.width),st.attr("height",ut.height),it.attr("transform",`translate(${a.labels[0].x+b.x}, ${a.labels[0].y+b.y})`),gUe(K,f,p.type,p.arrowMarkerAbsolute,m)},_jt=(i,a)=>{i.forEach(f=>{f.children||(f.children=[]);const p=a.childrenById[f.id];p&&p.forEach(v=>{f.children.push(P5[v])}),_jt(f.children,a)})},mUe=async function(i,a,f,p){var ht;p.db.clear(),P5={},iv={},p.db.setGen("gen-2"),p.parser.parse(i);const v=yr("body").append("div").attr("style","height:400px").attr("id","cy");let m={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Ut.info("Drawing flowchart using v3 renderer",Ejt),p.db.getDirection()){case"BT":m.layoutOptions["elk.direction"]="UP";break;case"TB":m.layoutOptions["elk.direction"]="DOWN";break;case"LR":m.layoutOptions["elk.direction"]="RIGHT";break;case"RL":m.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:E,flowchart:_}=Le();let L;E==="sandbox"&&(L=yr("#i"+a));const N=yr(E==="sandbox"?L.nodes()[0].contentDocument.body:"body"),B=E==="sandbox"?L.nodes()[0].contentDocument:document,j=N.select(`[id="${a}"]`);IFt(j,["point","circle","cross"],p.type,a);const z=p.db.getVertices();let K;const it=p.db.getSubGraphs();Ut.info("Subgraphs - ",it);for(let wt=it.length-1;wt>=0;wt--)K=it[wt],p.db.addVertex(K.id,{text:K.title,type:K.labelType},"group",void 0,K.classes,K.dir);const st=j.insert("g").attr("class","subgraphs"),ut=bUe(p.db);m=await hUe(z,a,N,B,p,ut,m);const bt=j.insert("g").attr("class","edges edgePath"),mt=p.db.getEdges();m=dUe(mt,p,m,j),Object.keys(P5).forEach(wt=>{const X=P5[wt];X.parent||m.children.push(X),ut.childrenById[wt]!==void 0&&(X.labels=[{text:X.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:X.labelData.width,height:X.labelData.height}],delete X.x,delete X.y,delete X.width,delete X.height)}),_jt(m.children,ut),Ut.info("after layout",JSON.stringify(m,null,2));const dt=await Ejt.layout(m);Sjt(0,0,dt.children,j,st,p,0),Ut.info("after layout",dt),(ht=dt.edges)==null||ht.map(wt=>{wUe(bt,wt,wt.edgeData,p,ut,a)}),cT({},j,_.diagramPadding,_.useMaxWidth),v.remove()},Sjt=(i,a,f,p,v,m,b)=>{f.forEach(function(E){if(E)if(P5[E.id].offset={posX:E.x+i,posY:E.y+a,x:i,y:a,depth:b,width:E.width,height:E.height},E.type==="group"){const _=v.insert("g").attr("class","subgraph");_.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",E.x+i).attr("y",E.y+a).attr("width",E.width).attr("height",E.height);const L=_.insert("g").attr("class","label"),N=Le().flowchart.htmlLabels?E.labelData.width/2:0;L.attr("transform",`translate(${E.labels[0].x+i+E.x+N}, ${E.labels[0].y+a+E.y+3})`),L.node().appendChild(E.labelData.labelNode),Ut.info("Id (UGH)= ",E.type,E.labels)}else Ut.info("Id (UGH)= ",E.id),E.el.attr("transform",`translate(${E.x+i+E.width/2}, ${E.y+a+E.height/2})`)}),f.forEach(function(E){E&&E.type==="group"&&Sjt(i+E.x,a+E.y,E.children,p,v,m,b+1)})},yUe={getClasses:pUe,draw:mUe},xUe=i=>{let a="";for(let f=0;f<5;f++)a+=` .subgraph-lvl-${f} { fill: ${i[`surface${f}`]}; stroke: ${i[`surfacePeer${f}`]}; } - `;return a},kUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:DDe,renderer:yUe,parser:Fdt,styles:i=>`.label { + `;return a},kUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:jIe,renderer:yUe,parser:$dt,styles:i=>`.label { font-family: ${i.fontFamily}; color: ${i.nodeTextColor||i.textColor}; } @@ -1464,12 +1463,12 @@ Consider installing the package or pass your own 'workerFactory' to ELK's constr } ${xUe(i)} -`}},Symbol.toStringTag,{value:"Module"}));var Fgt=function(){var i=function(rt,J,it,ft){for(it=it||{},ft=rt.length;ft--;it[rt[ft]]=J);return it},a=[1,2],f=[1,5],p=[6,9,11,17,18,20,22,23,26,27,28],v=[1,15],m=[1,16],b=[1,17],E=[1,18],C=[1,19],A=[1,23],P=[1,24],F=[1,27],j=[4,6,9,11,17,18,20,22,23,26,27,28],R={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(J,it,ft,Tt,kt,mt,ct){var yt=mt.length-1;switch(kt){case 1:return mt[yt-1];case 3:this.$=[];break;case 4:mt[yt-1].push(mt[yt]),this.$=mt[yt-1];break;case 5:case 6:this.$=mt[yt];break;case 7:case 8:this.$=[];break;case 11:Tt.getCommonDb().setDiagramTitle(mt[yt].substr(6)),this.$=mt[yt].substr(6);break;case 12:this.$=mt[yt].trim(),Tt.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=mt[yt].trim(),Tt.getCommonDb().setAccDescription(this.$);break;case 15:Tt.addSection(mt[yt].substr(8)),this.$=mt[yt].substr(8);break;case 19:Tt.addTask(mt[yt],0,""),this.$=mt[yt];break;case 20:Tt.addEvent(mt[yt].substr(2)),this.$=mt[yt];break;case 21:Tt.parseDirective("%%{","open_directive");break;case 22:Tt.parseDirective(mt[yt],"type_directive");break;case 23:mt[yt]=mt[yt].trim().replace(/'/g,'"'),Tt.parseDirective(mt[yt],"arg_directive");break;case 24:Tt.parseDirective("}%%","close_directive","timeline");break}},table:[{3:1,4:a,7:3,12:4,28:f},{1:[3]},i(p,[2,3],{5:6}),{3:7,4:a,7:3,12:4,28:f},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:v,18:m,20:b,22:E,23:C,24:20,25:21,26:A,27:P,28:f},{1:[2,2]},{14:25,15:[1,26],31:F},i([15,31],[2,22]),i(p,[2,8],{1:[2,1]}),i(p,[2,4]),{7:22,10:28,12:4,17:v,18:m,20:b,22:E,23:C,24:20,25:21,26:A,27:P,28:f},i(p,[2,6]),i(p,[2,7]),i(p,[2,11]),{19:[1,29]},{21:[1,30]},i(p,[2,14]),i(p,[2,15]),i(p,[2,16]),i(p,[2,17]),i(p,[2,18]),i(p,[2,19]),i(p,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},i(p,[2,5]),i(p,[2,12]),i(p,[2,13]),i(j,[2,9]),{14:34,31:F},{31:[2,23]},{11:[1,35]},i(j,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},parseError:function(J,it){if(it.recoverable)this.trace(J);else{var ft=new Error(J);throw ft.hash=it,ft}},parse:function(J){var it=this,ft=[0],Tt=[],kt=[null],mt=[],ct=this.table,yt="",st=0,xt=0,ht=2,dt=1,Ct=mt.slice.call(arguments,1),tt=Object.create(this.lexer),Pt={yy:{}};for(var pt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,pt)&&(Pt.yy[pt]=this.yy[pt]);tt.setInput(J,Pt.yy),Pt.yy.lexer=tt,Pt.yy.parser=this,typeof tt.yylloc>"u"&&(tt.yylloc={});var Ft=tt.yylloc;mt.push(Ft);var X=tt.options&&tt.options.ranges;typeof Pt.yy.parseError=="function"?this.parseError=Pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(){var ke;return ke=Tt.pop()||tt.lex()||dt,typeof ke!="number"&&(ke instanceof Array&&(Tt=ke,ke=Tt.pop()),ke=it.symbols_[ke]||ke),ke}for(var Bt,vt,Ot,Vt,qe={},_n,Te,Wn,Ae;;){if(vt=ft[ft.length-1],this.defaultActions[vt]?Ot=this.defaultActions[vt]:((Bt===null||typeof Bt>"u")&&(Bt=Rt()),Ot=ct[vt]&&ct[vt][Bt]),typeof Ot>"u"||!Ot.length||!Ot[0]){var ne="";Ae=[];for(_n in ct[vt])this.terminals_[_n]&&_n>ht&&Ae.push("'"+this.terminals_[_n]+"'");tt.showPosition?ne="Parse error on line "+(st+1)+`: -`+tt.showPosition()+` -Expecting `+Ae.join(", ")+", got '"+(this.terminals_[Bt]||Bt)+"'":ne="Parse error on line "+(st+1)+": Unexpected "+(Bt==dt?"end of input":"'"+(this.terminals_[Bt]||Bt)+"'"),this.parseError(ne,{text:tt.match,token:this.terminals_[Bt]||Bt,line:tt.yylineno,loc:Ft,expected:Ae})}if(Ot[0]instanceof Array&&Ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+vt+", token: "+Bt);switch(Ot[0]){case 1:ft.push(Bt),kt.push(tt.yytext),mt.push(tt.yylloc),ft.push(Ot[1]),Bt=null,xt=tt.yyleng,yt=tt.yytext,st=tt.yylineno,Ft=tt.yylloc;break;case 2:if(Te=this.productions_[Ot[1]][1],qe.$=kt[kt.length-Te],qe._$={first_line:mt[mt.length-(Te||1)].first_line,last_line:mt[mt.length-1].last_line,first_column:mt[mt.length-(Te||1)].first_column,last_column:mt[mt.length-1].last_column},X&&(qe._$.range=[mt[mt.length-(Te||1)].range[0],mt[mt.length-1].range[1]]),Vt=this.performAction.apply(qe,[yt,xt,st,Pt.yy,Ot[1],kt,mt].concat(Ct)),typeof Vt<"u")return Vt;Te&&(ft=ft.slice(0,-1*Te*2),kt=kt.slice(0,-1*Te),mt=mt.slice(0,-1*Te)),ft.push(this.productions_[Ot[1]][0]),kt.push(qe.$),mt.push(qe._$),Wn=ct[ft[ft.length-2]][ft[ft.length-1]],ft.push(Wn);break;case 3:return!0}}return!0}},H=function(){var rt={EOF:1,parseError:function(it,ft){if(this.yy.parser)this.yy.parser.parseError(it,ft);else throw new Error(it)},setInput:function(J,it){return this.yy=it||this.yy||{},this._input=J,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var J=this._input[0];this.yytext+=J,this.yyleng++,this.offset++,this.match+=J,this.matched+=J;var it=J.match(/(?:\r\n?|\n).*/g);return it?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),J},unput:function(J){var it=J.length,ft=J.split(/(?:\r\n?|\n)/g);this._input=J+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-it),this.offset-=it;var Tt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ft.length-1&&(this.yylineno-=ft.length-1);var kt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ft?(ft.length===Tt.length?this.yylloc.first_column:0)+Tt[Tt.length-ft.length].length-ft[0].length:this.yylloc.first_column-it},this.options.ranges&&(this.yylloc.range=[kt[0],kt[0]+this.yyleng-it]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(J){this.unput(this.match.slice(J))},pastInput:function(){var J=this.matched.substr(0,this.matched.length-this.match.length);return(J.length>20?"...":"")+J.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var J=this.match;return J.length<20&&(J+=this._input.substr(0,20-J.length)),(J.substr(0,20)+(J.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var J=this.pastInput(),it=new Array(J.length+1).join("-");return J+this.upcomingInput()+` -`+it+"^"},test_match:function(J,it){var ft,Tt,kt;if(this.options.backtrack_lexer&&(kt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(kt.yylloc.range=this.yylloc.range.slice(0))),Tt=J[0].match(/(?:\r\n?|\n).*/g),Tt&&(this.yylineno+=Tt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Tt?Tt[Tt.length-1].length-Tt[Tt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+J[0].length},this.yytext+=J[0],this.match+=J[0],this.matches=J,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(J[0].length),this.matched+=J[0],ft=this.performAction.call(this,this.yy,this,it,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ft)return ft;if(this._backtrack){for(var mt in kt)this[mt]=kt[mt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var J,it,ft,Tt;this._more||(this.yytext="",this.match="");for(var kt=this._currentRules(),mt=0;mtit[0].length)){if(it=ft,Tt=mt,this.options.backtrack_lexer){if(J=this.test_match(ft,kt[mt]),J!==!1)return J;if(this._backtrack){it=!1;continue}else return!1}else if(!this.options.flex)break}return it?(J=this.test_match(it,kt[Tt]),J!==!1?J:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var it=this.next();return it||this.lex()},begin:function(it){this.conditionStack.push(it)},popState:function(){var it=this.conditionStack.length-1;return it>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(it){return it=this.conditionStack.length-1-Math.abs(it||0),it>=0?this.conditionStack[it]:"INITIAL"},pushState:function(it){this.begin(it)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(it,ft,Tt,kt){switch(Tt){case 0:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:break;case 6:break;case 7:return 11;case 8:break;case 9:break;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};return rt}();R.lexer=H;function Y(){this.yy={}}return Y.prototype=R,R.Parser=Y,new Y}();Fgt.parser=Fgt;const EUe=Fgt;let bL="",_jt=0;const Bgt=[],UK=[],vL=[],Cjt=()=>COt,Sjt=(i,a,f)=>{FW(globalThis,i,a,f)},Ajt=function(){Bgt.length=0,UK.length=0,bL="",vL.length=0,cg()},Ljt=function(i){bL=i,Bgt.push(i)},Mjt=function(){return Bgt},Djt=function(){let i=Pjt();const a=100;let f=0;for(;!i&&ff.id===_jt-1).events.push(i)},Njt=function(i){const a={section:bL,type:bL,description:i,task:i,classes:[]};UK.push(a)},Pjt=function(){const i=function(f){return vL[f].processed};let a=!0;for(const[f,p]of vL.entries())i(f),a=a&&p.processed;return a},TUe=Object.freeze(Object.defineProperty({__proto__:null,addEvent:Ojt,addSection:Ljt,addTask:Ijt,addTaskOrg:Njt,clear:Ajt,default:{clear:Ajt,getCommonDb:Cjt,addSection:Ljt,getSections:Mjt,getTasks:Djt,addTask:Ijt,addTaskOrg:Njt,addEvent:Ojt,parseDirective:Sjt},getCommonDb:Cjt,getSections:Mjt,getTasks:Djt,parseDirective:Sjt},Symbol.toStringTag,{value:"Module"})),_Ue=12,WK=function(i,a){const f=i.append("rect");return f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),f.attr("rx",a.rx),f.attr("ry",a.ry),a.class!==void 0&&f.attr("class",a.class),f},CUe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(C){const A=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);C.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(C){const A=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);C.append("path").attr("class","mouth").attr("d",A).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(C){C.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},SUe=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},Fjt=function(i,a){const f=a.text.replace(//gi," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},AUe=function(i,a){function f(v,m,b,E,C){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-C)+" "+(v+b-C*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,Fjt(i,a)},LUe=function(i,a,f){const p=i.append("g"),v=Rgt();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width,v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,WK(p,v),Rjt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let Bjt=-1;const MUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");Bjt++;const m=300+5*30;v.append("line").attr("id","task"+Bjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),CUe(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=Rgt();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,WK(v,b),a.x+14,Rjt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},DUe=function(i,a){WK(i,{x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,class:"rect"}).lower()},IUe=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},Rgt=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},Rjt=function(){function i(v,m,b,E,C,A,P,F){const j=m.append("text").attr("x",b+C/2).attr("y",E+A/2+5).style("font-color",F).style("text-anchor","middle").text(v);p(j,P)}function a(v,m,b,E,C,A,P,F,j){const{taskFontSize:R,taskFontFamily:H}=F,Y=v.split(//gi);for(let rt=0;rt)/).reverse(),v,m=[],b=1.1,E=f.attr("y"),C=parseFloat(f.attr("dy")),A=f.text(null).append("tspan").attr("x",0).attr("y",E).attr("dy",C+"em");for(let P=0;Pa||v==="
")&&(m.pop(),A.text(m.join(" ").trim()),v==="
"?m=[""]:m=[v],A=f.append("tspan").attr("x",0).attr("y",E).attr("dy",b+"em").text(v))})}const NUe=function(i,a,f,p){const v=f%_Ue-1,m=i.append("g");a.section=v,m.attr("class",(a.class?a.class+" ":"")+"timeline-node "+("section-"+v));const b=m.append("g"),E=m.append("g"),A=E.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(jjt,a.width).node().getBBox(),P=p.fontSize&&p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;return a.height=A.height+P*1.1*.5+a.padding,a.height=Math.max(a.height,a.maxHeight),a.width=a.width+2*a.padding,E.attr("transform","translate("+a.width/2+", "+a.padding/2+")"),FUe(b,a,v),a},PUe=function(i,a,f){const p=i.append("g"),m=p.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(jjt,a.width).node().getBBox(),b=f.fontSize&&f.fontSize.replace?f.fontSize.replace("px",""):f.fontSize;return p.remove(),m.height+b*1.1*.5+a.padding},FUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+a.type).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},T9={drawRect:WK,drawCircle:SUe,drawSection:LUe,drawText:Fjt,drawLabel:AUe,drawTask:MUe,drawBackgroundRect:DUe,getTextObj:IUe,getNoteRect:Rgt,initGraphics:OUe,drawNode:NUe,getVirtualNodeHeight:PUe},BUe=function(i,a,f,p){var st,xt;const v=De(),m=v.leftMargin??50;Wt.debug("timeline",p.db);const b=v.securityLevel;let E;b==="sandbox"&&(E=xr("#i"+a));const A=xr(b==="sandbox"?E.nodes()[0].contentDocument.body:"body").select("#"+a);A.append("g");const P=p.db.getTasks(),F=p.db.getCommonDb().getDiagramTitle();Wt.debug("task",P),T9.initGraphics(A);const j=p.db.getSections();Wt.debug("sections",j);let R=0,H=0,Y=0,rt=0,J=50+m,it=50;rt=50;let ft=0,Tt=!0;j.forEach(function(ht){const dt={number:ft,descr:ht,section:ft,width:150,padding:20,maxHeight:R},Ct=T9.getVirtualNodeHeight(A,dt,v);Wt.debug("sectionHeight before draw",Ct),R=Math.max(R,Ct+20)});let kt=0,mt=0;Wt.debug("tasks.length",P.length);for(const[ht,dt]of P.entries()){const Ct={number:ht,descr:dt,section:dt.section,width:150,padding:20,maxHeight:H},tt=T9.getVirtualNodeHeight(A,Ct,v);Wt.debug("taskHeight before draw",tt),H=Math.max(H,tt+20),kt=Math.max(kt,dt.events.length);let Pt=0;for(let pt=0;pt0?j.forEach(ht=>{const dt=P.filter(pt=>pt.section===ht),Ct={number:ft,descr:ht,section:ft,width:200*Math.max(dt.length,1)-50,padding:20,maxHeight:R};Wt.debug("sectionNode",Ct);const tt=A.append("g"),Pt=T9.drawNode(tt,Ct,ft,v);Wt.debug("sectionNode output",Pt),tt.attr("transform",`translate(${J}, ${rt})`),it+=R+50,dt.length>0&&$jt(A,dt,ft,J,it,H,v,kt,mt,R,!1),J+=200*Math.max(dt.length,1),it=rt,ft++}):(Tt=!1,$jt(A,P,ft,J,it,H,v,kt,mt,R,!0));const ct=A.node().getBBox();Wt.debug("bounds",ct),F&&A.append("text").text(F).attr("x",ct.width/2-m).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),Y=Tt?R+H+150:H+100,A.append("g").attr("class","lineWrapper").append("line").attr("x1",m).attr("y1",Y).attr("x2",ct.width+3*m).attr("y2",Y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),s9(void 0,A,((st=v.timeline)==null?void 0:st.padding)??50,((xt=v.timeline)==null?void 0:xt.useMaxWidth)??!1)},$jt=function(i,a,f,p,v,m,b,E,C,A,P){var F;for(const j of a){const R={descr:j.task,section:f,number:f,width:150,padding:20,maxHeight:m};Wt.debug("taskNode",R);const H=i.append("g").attr("class","taskWrapper"),rt=T9.drawNode(H,R,f,b).height;if(Wt.debug("taskHeight after draw",rt),H.attr("transform",`translate(${p}, ${v})`),m=Math.max(m,rt),j.events){const J=i.append("g").attr("class","lineWrapper");let it=m;v+=100,it=it+RUe(i,j.events,f,p,v,b),v-=100,J.append("line").attr("x1",p+190/2).attr("y1",v+m).attr("x2",p+190/2).attr("y2",v+m+(P?m:A)+C+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}p=p+200,P&&!((F=b.timeline)!=null&&F.disableMulticolor)&&f++}v=v-10},RUe=function(i,a,f,p,v,m){let b=0;const E=v;v=v+100;for(const C of a){const A={descr:C,section:f,number:f,width:150,padding:20,maxHeight:50};Wt.debug("eventNode",A);const P=i.append("g").attr("class","eventWrapper"),j=T9.drawNode(P,A,f,m).height;b=b+j,P.attr("transform",`translate(${p}, ${v})`),v=v+10+j}return v=E,b},jUe={setConf:()=>{},draw:BUe},$Ue=i=>{let a="";for(let f=0;f"u"&&(pt.yylloc={});var nt=pt.yylloc;ut.push(nt);var Ot=pt.options&&pt.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Nt(){var ve;return ve=it.pop()||pt.lex()||wt,typeof ve!="number"&&(ve instanceof Array&&(it=ve,ve=it.pop()),ve=z.symbols_[ve]||ve),ve}for(var qt,Ct,Z,Tt,Ht={},It,Ft,ke,pn;;){if(Ct=K[K.length-1],this.defaultActions[Ct]?Z=this.defaultActions[Ct]:((qt===null||typeof qt>"u")&&(qt=Nt()),Z=bt[Ct]&&bt[Ct][qt]),typeof Z>"u"||!Z.length||!Z[0]){var Me="";pn=[];for(It in bt[Ct])this.terminals_[It]&&It>ht&&pn.push("'"+this.terminals_[It]+"'");pt.showPosition?Me="Parse error on line "+(yt+1)+`: +`+pt.showPosition()+` +Expecting `+pn.join(", ")+", got '"+(this.terminals_[qt]||qt)+"'":Me="Parse error on line "+(yt+1)+": Unexpected "+(qt==wt?"end of input":"'"+(this.terminals_[qt]||qt)+"'"),this.parseError(Me,{text:pt.match,token:this.terminals_[qt]||qt,line:pt.yylineno,loc:nt,expected:pn})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ct+", token: "+qt);switch(Z[0]){case 1:K.push(qt),st.push(pt.yytext),ut.push(pt.yylloc),K.push(Z[1]),qt=null,dt=pt.yyleng,mt=pt.yytext,yt=pt.yylineno,nt=pt.yylloc;break;case 2:if(Ft=this.productions_[Z[1]][1],Ht.$=st[st.length-Ft],Ht._$={first_line:ut[ut.length-(Ft||1)].first_line,last_line:ut[ut.length-1].last_line,first_column:ut[ut.length-(Ft||1)].first_column,last_column:ut[ut.length-1].last_column},Ot&&(Ht._$.range=[ut[ut.length-(Ft||1)].range[0],ut[ut.length-1].range[1]]),Tt=this.performAction.apply(Ht,[mt,dt,yt,U.yy,Z[1],st,ut].concat(X)),typeof Tt<"u")return Tt;Ft&&(K=K.slice(0,-1*Ft*2),st=st.slice(0,-1*Ft),ut=ut.slice(0,-1*Ft)),K.push(this.productions_[Z[1]][0]),st.push(Ht.$),ut.push(Ht._$),ke=bt[K[K.length-2]][K[K.length-1]],K.push(ke);break;case 3:return!0}}return!0}},N=function(){var j={EOF:1,parseError:function(z,K){if(this.yy.parser)this.yy.parser.parseError(z,K);else throw new Error(z)},setInput:function(R,z){return this.yy=z||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var z=R.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var z=R.length,K=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var it=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),K.length-1&&(this.yylineno-=K.length-1);var st=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:K?(K.length===it.length?this.yylloc.first_column:0)+it[it.length-K.length].length-K[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[st[0],st[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),z=new Array(R.length+1).join("-");return R+this.upcomingInput()+` +`+z+"^"},test_match:function(R,z){var K,it,st;if(this.options.backtrack_lexer&&(st={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(st.yylloc.range=this.yylloc.range.slice(0))),it=R[0].match(/(?:\r\n?|\n).*/g),it&&(this.yylineno+=it.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:it?it[it.length-1].length-it[it.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],K=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),K)return K;if(this._backtrack){for(var ut in st)this[ut]=st[ut];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,z,K,it;this._more||(this.yytext="",this.match="");for(var st=this._currentRules(),ut=0;utz[0].length)){if(z=K,it=ut,this.options.backtrack_lexer){if(R=this.test_match(K,st[ut]),R!==!1)return R;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(R=this.test_match(z,st[it]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var z=this.next();return z||this.lex()},begin:function(z){this.conditionStack.push(z)},popState:function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},pushState:function(z){this.begin(z)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(z,K,it,st){switch(it){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return j}();L.lexer=N;function B(){this.yy={}}return B.prototype=L,L.Parser=B,new B}();jgt.parser=jgt;const EUe=jgt;let pL="",Ajt=0;const $gt=[],GK=[],bL=[],Ljt=()=>LOt,Mjt=function(){$gt.length=0,GK.length=0,pL="",bL.length=0,ap()},Ijt=function(i){pL=i,$gt.push(i)},Djt=function(){return $gt},Ojt=function(){let i=Bjt();const a=100;let f=0;for(;!i&&ff.id===Ajt-1).events.push(i)},Fjt=function(i){const a={section:pL,type:pL,description:i,task:i,classes:[]};GK.push(a)},Bjt=function(){const i=function(f){return bL[f].processed};let a=!0;for(const[f,p]of bL.entries())i(f),a=a&&p.processed;return a},TUe=Object.freeze(Object.defineProperty({__proto__:null,addEvent:Pjt,addSection:Ijt,addTask:Njt,addTaskOrg:Fjt,clear:Mjt,default:{clear:Mjt,getCommonDb:Ljt,addSection:Ijt,getSections:Djt,getTasks:Ojt,addTask:Njt,addTaskOrg:Fjt,addEvent:Pjt},getCommonDb:Ljt,getSections:Djt,getTasks:Ojt},Symbol.toStringTag,{value:"Module"})),CUe=12,VK=function(i,a){const f=i.append("rect");return f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),f.attr("rx",a.rx),f.attr("ry",a.ry),a.class!==void 0&&f.attr("class",a.class),f},_Ue=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},SUe=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},Rjt=function(i,a){const f=a.text.replace(//gi," "),p=i.append("text");p.attr("x",a.x),p.attr("y",a.y),p.attr("class","legend"),p.style("text-anchor",a.anchor),a.class!==void 0&&p.attr("class",a.class);const v=p.append("tspan");return v.attr("x",a.x+a.textMargin*2),v.text(f),p},AUe=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,Rjt(i,a)},LUe=function(i,a,f){const p=i.append("g"),v=zgt();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width,v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,VK(p,v),$jt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let jjt=-1;const MUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");jjt++;const m=300+5*30;v.append("line").attr("id","task"+jjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),_Ue(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=zgt();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,VK(v,b),a.x+14,$jt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},IUe=function(i,a){VK(i,{x:a.startx,y:a.starty,width:a.stopx-a.startx,height:a.stopy-a.starty,fill:a.fill,class:"rect"}).lower()},DUe=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},zgt=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},$jt=function(){function i(v,m,b,E,_,L,N,B){const j=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("font-color",B).style("text-anchor","middle").text(v);p(j,N)}function a(v,m,b,E,_,L,N,B,j){const{taskFontSize:R,taskFontFamily:z}=B,K=v.split(//gi);for(let it=0;it)/).reverse(),v,m=[],b=1.1,E=f.attr("y"),_=parseFloat(f.attr("dy")),L=f.text(null).append("tspan").attr("x",0).attr("y",E).attr("dy",_+"em");for(let N=0;Na||v==="
")&&(m.pop(),L.text(m.join(" ").trim()),v==="
"?m=[""]:m=[v],L=f.append("tspan").attr("x",0).attr("y",E).attr("dy",b+"em").text(v))})}const NUe=function(i,a,f,p){const v=f%CUe-1,m=i.append("g");a.section=v,m.attr("class",(a.class?a.class+" ":"")+"timeline-node "+("section-"+v));const b=m.append("g"),E=m.append("g"),L=E.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(zjt,a.width).node().getBBox(),N=p.fontSize&&p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;return a.height=L.height+N*1.1*.5+a.padding,a.height=Math.max(a.height,a.maxHeight),a.width=a.width+2*a.padding,E.attr("transform","translate("+a.width/2+", "+a.padding/2+")"),FUe(b,a,v),a},PUe=function(i,a,f){const p=i.append("g"),m=p.append("text").text(a.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(zjt,a.width).node().getBBox(),b=f.fontSize&&f.fontSize.replace?f.fontSize.replace("px",""):f.fontSize;return p.remove(),m.height+b*1.1*.5+a.padding},FUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+a.type).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},AT={drawRect:VK,drawCircle:SUe,drawSection:LUe,drawText:Rjt,drawLabel:AUe,drawTask:MUe,drawBackgroundRect:IUe,getTextObj:DUe,getNoteRect:zgt,initGraphics:OUe,drawNode:NUe,getVirtualNodeHeight:PUe},BUe=function(i,a,f,p){var X,pt;const v=Le(),m=v.leftMargin??50;Ut.debug("timeline",p.db);const b=v.securityLevel;let E;b==="sandbox"&&(E=yr("#i"+a));const L=yr(b==="sandbox"?E.nodes()[0].contentDocument.body:"body").select("#"+a);L.append("g");const N=p.db.getTasks(),B=p.db.getCommonDb().getDiagramTitle();Ut.debug("task",N),AT.initGraphics(L);const j=p.db.getSections();Ut.debug("sections",j);let R=0,z=0,K=0,it=0,st=50+m,ut=50;it=50;let bt=0,mt=!0;j.forEach(function(U){const xt={number:bt,descr:U,section:bt,width:150,padding:20,maxHeight:R},nt=AT.getVirtualNodeHeight(L,xt,v);Ut.debug("sectionHeight before draw",nt),R=Math.max(R,nt+20)});let yt=0,dt=0;Ut.debug("tasks.length",N.length);for(const[U,xt]of N.entries()){const nt={number:U,descr:xt,section:xt.section,width:150,padding:20,maxHeight:z},Ot=AT.getVirtualNodeHeight(L,nt,v);Ut.debug("taskHeight before draw",Ot),z=Math.max(z,Ot+20),yt=Math.max(yt,xt.events.length);let Nt=0;for(let qt=0;qt0?j.forEach(U=>{const xt=N.filter(qt=>qt.section===U),nt={number:bt,descr:U,section:bt,width:200*Math.max(xt.length,1)-50,padding:20,maxHeight:R};Ut.debug("sectionNode",nt);const Ot=L.append("g"),Nt=AT.drawNode(Ot,nt,bt,v);Ut.debug("sectionNode output",Nt),Ot.attr("transform",`translate(${st}, ${it})`),ut+=R+50,xt.length>0&&qjt(L,xt,bt,st,ut,z,v,yt,dt,R,!1),st+=200*Math.max(xt.length,1),ut=it,bt++}):(mt=!1,qjt(L,N,bt,st,ut,z,v,yt,dt,R,!0));const ht=L.node().getBBox();Ut.debug("bounds",ht),B&&L.append("text").text(B).attr("x",ht.width/2-m).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),K=mt?R+z+150:z+100,L.append("g").attr("class","lineWrapper").append("line").attr("x1",m).attr("y1",K).attr("x2",ht.width+3*m).attr("y2",K).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),cT(void 0,L,((X=v.timeline)==null?void 0:X.padding)??50,((pt=v.timeline)==null?void 0:pt.useMaxWidth)??!1)},qjt=function(i,a,f,p,v,m,b,E,_,L,N){var B;for(const j of a){const R={descr:j.task,section:f,number:f,width:150,padding:20,maxHeight:m};Ut.debug("taskNode",R);const z=i.append("g").attr("class","taskWrapper"),it=AT.drawNode(z,R,f,b).height;if(Ut.debug("taskHeight after draw",it),z.attr("transform",`translate(${p}, ${v})`),m=Math.max(m,it),j.events){const st=i.append("g").attr("class","lineWrapper");let ut=m;v+=100,ut=ut+RUe(i,j.events,f,p,v,b),v-=100,st.append("line").attr("x1",p+190/2).attr("y1",v+m).attr("x2",p+190/2).attr("y2",v+m+(N?m:L)+_+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}p=p+200,N&&!((B=b.timeline)!=null&&B.disableMulticolor)&&f++}v=v-10},RUe=function(i,a,f,p,v,m){let b=0;const E=v;v=v+100;for(const _ of a){const L={descr:_,section:f,number:f,width:150,padding:20,maxHeight:50};Ut.debug("eventNode",L);const N=i.append("g").attr("class","eventWrapper"),j=AT.drawNode(N,L,f,m).height;b=b+j,N.attr("transform",`translate(${p}, ${v})`),v=v+10+j}return v=E,b},jUe={setConf:()=>{},draw:BUe},$Ue=i=>{let a="";for(let f=0;f"u"&&(X.yylloc={});var vt=X.yylloc;xt.push(vt);var Ot=X.options&&X.options.ranges;typeof Rt.yy.parseError=="function"?this.parseError=Rt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Vt(){var Ce;return Ce=yt.pop()||X.lex()||pt,typeof Ce!="number"&&(Ce instanceof Array&&(yt=Ce,Ce=yt.pop()),Ce=mt.symbols_[Ce]||Ce),Ce}for(var qe,_n,Te,Wn,Ae={},ne,ke,Ve,Ee;;){if(_n=ct[ct.length-1],this.defaultActions[_n]?Te=this.defaultActions[_n]:((qe===null||typeof qe>"u")&&(qe=Vt()),Te=ht[_n]&&ht[_n][qe]),typeof Te>"u"||!Te.length||!Te[0]){var He="";Ee=[];for(ne in ht[_n])this.terminals_[ne]&&ne>Pt&&Ee.push("'"+this.terminals_[ne]+"'");X.showPosition?He="Parse error on line "+(Ct+1)+`: -`+X.showPosition()+` -Expecting `+Ee.join(", ")+", got '"+(this.terminals_[qe]||qe)+"'":He="Parse error on line "+(Ct+1)+": Unexpected "+(qe==pt?"end of input":"'"+(this.terminals_[qe]||qe)+"'"),this.parseError(He,{text:X.match,token:this.terminals_[qe]||qe,line:X.yylineno,loc:vt,expected:Ee})}if(Te[0]instanceof Array&&Te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_n+", token: "+qe);switch(Te[0]){case 1:ct.push(qe),st.push(X.yytext),xt.push(X.yylloc),ct.push(Te[1]),qe=null,tt=X.yyleng,dt=X.yytext,Ct=X.yylineno,vt=X.yylloc;break;case 2:if(ke=this.productions_[Te[1]][1],Ae.$=st[st.length-ke],Ae._$={first_line:xt[xt.length-(ke||1)].first_line,last_line:xt[xt.length-1].last_line,first_column:xt[xt.length-(ke||1)].first_column,last_column:xt[xt.length-1].last_column},Ot&&(Ae._$.range=[xt[xt.length-(ke||1)].range[0],xt[xt.length-1].range[1]]),Wn=this.performAction.apply(Ae,[dt,tt,Ct,Rt.yy,Te[1],st,xt].concat(Ft)),typeof Wn<"u")return Wn;ke&&(ct=ct.slice(0,-1*ke*2),st=st.slice(0,-1*ke),xt=xt.slice(0,-1*ke)),ct.push(this.productions_[Te[1]][0]),st.push(Ae.$),xt.push(Ae._$),Ve=ht[ct[ct.length-2]][ct[ct.length-1]],ct.push(Ve);break;case 3:return!0}}return!0}},it=function(){var Tt={EOF:1,parseError:function(mt,ct){if(this.yy.parser)this.yy.parser.parseError(mt,ct);else throw new Error(mt)},setInput:function(kt,mt){return this.yy=mt||this.yy||{},this._input=kt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var kt=this._input[0];this.yytext+=kt,this.yyleng++,this.offset++,this.match+=kt,this.matched+=kt;var mt=kt.match(/(?:\r\n?|\n).*/g);return mt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),kt},unput:function(kt){var mt=kt.length,ct=kt.split(/(?:\r\n?|\n)/g);this._input=kt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var yt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ct.length-1&&(this.yylineno-=ct.length-1);var st=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ct?(ct.length===yt.length?this.yylloc.first_column:0)+yt[yt.length-ct.length].length-ct[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[st[0],st[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(kt){this.unput(this.match.slice(kt))},pastInput:function(){var kt=this.matched.substr(0,this.matched.length-this.match.length);return(kt.length>20?"...":"")+kt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var kt=this.match;return kt.length<20&&(kt+=this._input.substr(0,20-kt.length)),(kt.substr(0,20)+(kt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var kt=this.pastInput(),mt=new Array(kt.length+1).join("-");return kt+this.upcomingInput()+` -`+mt+"^"},test_match:function(kt,mt){var ct,yt,st;if(this.options.backtrack_lexer&&(st={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(st.yylloc.range=this.yylloc.range.slice(0))),yt=kt[0].match(/(?:\r\n?|\n).*/g),yt&&(this.yylineno+=yt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:yt?yt[yt.length-1].length-yt[yt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+kt[0].length},this.yytext+=kt[0],this.match+=kt[0],this.matches=kt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(kt[0].length),this.matched+=kt[0],ct=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ct)return ct;if(this._backtrack){for(var xt in st)this[xt]=st[xt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var kt,mt,ct,yt;this._more||(this.yytext="",this.match="");for(var st=this._currentRules(),xt=0;xtmt[0].length)){if(mt=ct,yt=xt,this.options.backtrack_lexer){if(kt=this.test_match(ct,st[xt]),kt!==!1)return kt;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(kt=this.test_match(mt,st[yt]),kt!==!1?kt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var mt=this.next();return mt||this.lex()},begin:function(mt){this.conditionStack.push(mt)},popState:function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},pushState:function(mt){this.begin(mt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(mt,ct,yt,st){switch(yt){case 0:return mt.getLogger().trace("Found comment",ct.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:mt.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return mt.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:mt.getLogger().trace("end icon"),this.popState();break;case 10:return mt.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return mt.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return mt.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return mt.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:mt.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return mt.getLogger().trace("description:",ct.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),mt.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),mt.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),mt.getLogger().trace("node end ...",ct.yytext),"NODE_DEND";case 30:return this.popState(),mt.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),mt.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),mt.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),mt.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),mt.getLogger().trace("node end (("),"NODE_DEND";case 35:return mt.getLogger().trace("Long description:",ct.yytext),20;case 36:return mt.getLogger().trace("Long description:",ct.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return Tt}();J.lexer=it;function ft(){this.yy={}}return ft.prototype=J,J.Parser=ft,new ft}();jgt.parser=jgt;const qUe=jgt,WP=i=>v0(i,De());let av=[],zjt=0,$gt={};const HUe=()=>{av=[],zjt=0,$gt={}},VUe=function(i){for(let a=av.length-1;a>=0;a--)if(av[a].levelav.length>0?av[0]:null,UUe=(i,a,f,p)=>{Wt.info("addNode",i,a,f,p);const v=De(),m={id:zjt++,nodeId:WP(a),level:i,descr:WP(f),type:p,children:[],width:De().mindmap.maxNodeWidth};switch(m.type){case Zu.ROUNDED_RECT:m.padding=2*v.mindmap.padding;break;case Zu.RECT:m.padding=2*v.mindmap.padding;break;case Zu.HEXAGON:m.padding=2*v.mindmap.padding;break;default:m.padding=v.mindmap.padding}const b=VUe(i);if(b)b.children.push(m),av.push(m);else if(av.length===0)av.push(m);else{let E=new Error('There can be only one root. No parent could be found for ("'+m.descr+'")');throw E.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},E}},Zu={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},WUe=(i,a)=>{switch(Wt.debug("In get type",i,a),i){case"[":return Zu.RECT;case"(":return a===")"?Zu.ROUNDED_RECT:Zu.CLOUD;case"((":return Zu.CIRCLE;case")":return Zu.CLOUD;case"))":return Zu.BANG;case"{{":return Zu.HEXAGON;default:return Zu.DEFAULT}},qjt=(i,a)=>{$gt[i]=a},KUe=i=>{const a=av[av.length-1];i&&i.icon&&(a.icon=WP(i.icon)),i&&i.class&&(a.class=WP(i.class))},_9=i=>{switch(i){case Zu.DEFAULT:return"no-border";case Zu.RECT:return"rect";case Zu.ROUNDED_RECT:return"rounded-rect";case Zu.CIRCLE:return"circle";case Zu.CLOUD:return"cloud";case Zu.BANG:return"bang";case Zu.HEXAGON:return"hexgon";default:return"no-border"}};let Hjt;const YUe=i=>{Hjt=i},XUe=()=>Wt,QUe=i=>av[i],zgt=i=>$gt[i],ZUe=Object.freeze(Object.defineProperty({__proto__:null,addNode:UUe,clear:HUe,decorateNode:KUe,getElementById:zgt,getLogger:XUe,getMindmap:GUe,getNodeById:QUe,getType:WUe,nodeType:Zu,get parseError(){return Hjt},sanitizeText:WP,setElementForId:qjt,setErrorHandler:YUe,type2Str:_9},Symbol.toStringTag,{value:"Module"})),Vjt=12,JUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},tWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("height",a.height).attr("width",a.width)},eWe=function(i,a){const f=a.width,p=a.height,v=.15*f,m=.25*f,b=.35*f,E=.2*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("d",`M0 0 a${v},${v} 0 0,1 ${f*.25},${-1*f*.1} +`}},Symbol.toStringTag,{value:"Module"}));var qgt=function(){var i=function(mt,yt,dt,ht){for(dt=dt||{},ht=mt.length;ht--;dt[mt[ht]]=yt);return dt},a=[1,4],f=[1,13],p=[1,12],v=[1,15],m=[1,16],b=[1,20],E=[1,19],_=[6,7,8],L=[1,26],N=[1,24],B=[1,25],j=[6,7,11],R=[1,6,13,15,16,19,22],z=[1,33],K=[1,34],it=[1,6,7,11,13,15,16,19,22],st={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(yt,dt,ht,wt,X,pt,U){var xt=pt.length-1;switch(X){case 6:case 7:return wt;case 8:wt.getLogger().trace("Stop NL ");break;case 9:wt.getLogger().trace("Stop EOF ");break;case 11:wt.getLogger().trace("Stop NL2 ");break;case 12:wt.getLogger().trace("Stop EOF2 ");break;case 15:wt.getLogger().info("Node: ",pt[xt].id),wt.addNode(pt[xt-1].length,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 16:wt.getLogger().trace("Icon: ",pt[xt]),wt.decorateNode({icon:pt[xt]});break;case 17:case 21:wt.decorateNode({class:pt[xt]});break;case 18:wt.getLogger().trace("SPACELIST");break;case 19:wt.getLogger().trace("Node: ",pt[xt].id),wt.addNode(0,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 20:wt.decorateNode({icon:pt[xt]});break;case 25:wt.getLogger().trace("node found ..",pt[xt-2]),this.$={id:pt[xt-1],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break;case 26:this.$={id:pt[xt],descr:pt[xt],type:wt.nodeType.DEFAULT};break;case 27:wt.getLogger().trace("node found ..",pt[xt-3]),this.$={id:pt[xt-3],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break}},table:[{3:1,4:2,5:3,6:[1,5],8:a},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:a},{6:f,7:[1,10],9:9,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(_,[2,3]),{1:[2,2]},i(_,[2,4]),i(_,[2,5]),{1:[2,6],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:f,9:22,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:L,7:N,10:23,11:B},i(j,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:b,22:E}),i(j,[2,18]),i(j,[2,19]),i(j,[2,20]),i(j,[2,21]),i(j,[2,23]),i(j,[2,24]),i(j,[2,26],{19:[1,30]}),{20:[1,31]},{6:L,7:N,10:32,11:B},{1:[2,7],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(R,[2,14],{7:z,11:K}),i(it,[2,8]),i(it,[2,9]),i(it,[2,10]),i(j,[2,15]),i(j,[2,16]),i(j,[2,17]),{20:[1,35]},{21:[1,36]},i(R,[2,13],{7:z,11:K}),i(it,[2,11]),i(it,[2,12]),{21:[1,37]},i(j,[2,25]),i(j,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(yt,dt){if(dt.recoverable)this.trace(yt);else{var ht=new Error(yt);throw ht.hash=dt,ht}},parse:function(yt){var dt=this,ht=[0],wt=[],X=[null],pt=[],U=this.table,xt="",nt=0,Ot=0,Nt=2,qt=1,Ct=pt.slice.call(arguments,1),Z=Object.create(this.lexer),Tt={yy:{}};for(var Ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ht)&&(Tt.yy[Ht]=this.yy[Ht]);Z.setInput(yt,Tt.yy),Tt.yy.lexer=Z,Tt.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var It=Z.yylloc;pt.push(It);var Ft=Z.options&&Z.options.ranges;typeof Tt.yy.parseError=="function"?this.parseError=Tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(){var Oe;return Oe=wt.pop()||Z.lex()||qt,typeof Oe!="number"&&(Oe instanceof Array&&(wt=Oe,Oe=wt.pop()),Oe=dt.symbols_[Oe]||Oe),Oe}for(var pn,Me,ve,Ge,Ke={},we,_e,$t,re;;){if(Me=ht[ht.length-1],this.defaultActions[Me]?ve=this.defaultActions[Me]:((pn===null||typeof pn>"u")&&(pn=ke()),ve=U[Me]&&U[Me][pn]),typeof ve>"u"||!ve.length||!ve[0]){var ie="";re=[];for(we in U[Me])this.terminals_[we]&&we>Nt&&re.push("'"+this.terminals_[we]+"'");Z.showPosition?ie="Parse error on line "+(nt+1)+`: +`+Z.showPosition()+` +Expecting `+re.join(", ")+", got '"+(this.terminals_[pn]||pn)+"'":ie="Parse error on line "+(nt+1)+": Unexpected "+(pn==qt?"end of input":"'"+(this.terminals_[pn]||pn)+"'"),this.parseError(ie,{text:Z.match,token:this.terminals_[pn]||pn,line:Z.yylineno,loc:It,expected:re})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Me+", token: "+pn);switch(ve[0]){case 1:ht.push(pn),X.push(Z.yytext),pt.push(Z.yylloc),ht.push(ve[1]),pn=null,Ot=Z.yyleng,xt=Z.yytext,nt=Z.yylineno,It=Z.yylloc;break;case 2:if(_e=this.productions_[ve[1]][1],Ke.$=X[X.length-_e],Ke._$={first_line:pt[pt.length-(_e||1)].first_line,last_line:pt[pt.length-1].last_line,first_column:pt[pt.length-(_e||1)].first_column,last_column:pt[pt.length-1].last_column},Ft&&(Ke._$.range=[pt[pt.length-(_e||1)].range[0],pt[pt.length-1].range[1]]),Ge=this.performAction.apply(Ke,[xt,Ot,nt,Tt.yy,ve[1],X,pt].concat(Ct)),typeof Ge<"u")return Ge;_e&&(ht=ht.slice(0,-1*_e*2),X=X.slice(0,-1*_e),pt=pt.slice(0,-1*_e)),ht.push(this.productions_[ve[1]][0]),X.push(Ke.$),pt.push(Ke._$),$t=U[ht[ht.length-2]][ht[ht.length-1]],ht.push($t);break;case 3:return!0}}return!0}},ut=function(){var mt={EOF:1,parseError:function(dt,ht){if(this.yy.parser)this.yy.parser.parseError(dt,ht);else throw new Error(dt)},setInput:function(yt,dt){return this.yy=dt||this.yy||{},this._input=yt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var yt=this._input[0];this.yytext+=yt,this.yyleng++,this.offset++,this.match+=yt,this.matched+=yt;var dt=yt.match(/(?:\r\n?|\n).*/g);return dt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),yt},unput:function(yt){var dt=yt.length,ht=yt.split(/(?:\r\n?|\n)/g);this._input=yt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-dt),this.offset-=dt;var wt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ht.length-1&&(this.yylineno-=ht.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ht?(ht.length===wt.length?this.yylloc.first_column:0)+wt[wt.length-ht.length].length-ht[0].length:this.yylloc.first_column-dt},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-dt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(yt){this.unput(this.match.slice(yt))},pastInput:function(){var yt=this.matched.substr(0,this.matched.length-this.match.length);return(yt.length>20?"...":"")+yt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var yt=this.match;return yt.length<20&&(yt+=this._input.substr(0,20-yt.length)),(yt.substr(0,20)+(yt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var yt=this.pastInput(),dt=new Array(yt.length+1).join("-");return yt+this.upcomingInput()+` +`+dt+"^"},test_match:function(yt,dt){var ht,wt,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),wt=yt[0].match(/(?:\r\n?|\n).*/g),wt&&(this.yylineno+=wt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:wt?wt[wt.length-1].length-wt[wt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+yt[0].length},this.yytext+=yt[0],this.match+=yt[0],this.matches=yt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(yt[0].length),this.matched+=yt[0],ht=this.performAction.call(this,this.yy,this,dt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ht)return ht;if(this._backtrack){for(var pt in X)this[pt]=X[pt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var yt,dt,ht,wt;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),pt=0;ptdt[0].length)){if(dt=ht,wt=pt,this.options.backtrack_lexer){if(yt=this.test_match(ht,X[pt]),yt!==!1)return yt;if(this._backtrack){dt=!1;continue}else return!1}else if(!this.options.flex)break}return dt?(yt=this.test_match(dt,X[wt]),yt!==!1?yt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var dt=this.next();return dt||this.lex()},begin:function(dt){this.conditionStack.push(dt)},popState:function(){var dt=this.conditionStack.length-1;return dt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(dt){return dt=this.conditionStack.length-1-Math.abs(dt||0),dt>=0?this.conditionStack[dt]:"INITIAL"},pushState:function(dt){this.begin(dt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(dt,ht,wt,X){switch(wt){case 0:return dt.getLogger().trace("Found comment",ht.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:dt.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return dt.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:dt.getLogger().trace("end icon"),this.popState();break;case 10:return dt.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return dt.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return dt.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return dt.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:dt.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return dt.getLogger().trace("description:",ht.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),dt.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),dt.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),dt.getLogger().trace("node end ...",ht.yytext),"NODE_DEND";case 30:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 35:return dt.getLogger().trace("Long description:",ht.yytext),20;case 36:return dt.getLogger().trace("Long description:",ht.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return mt}();st.lexer=ut;function bt(){this.yy={}}return bt.prototype=st,st.Parser=bt,new bt}();qgt.parser=qgt;const qUe=qgt,UP=i=>Dd(i,Le());let sv=[],Hjt=0,Hgt={};const HUe=()=>{sv=[],Hjt=0,Hgt={}},GUe=function(i){for(let a=sv.length-1;a>=0;a--)if(sv[a].levelsv.length>0?sv[0]:null,UUe=(i,a,f,p)=>{Ut.info("addNode",i,a,f,p);const v=Le(),m={id:Hjt++,nodeId:UP(a),level:i,descr:UP(f),type:p,children:[],width:Le().mindmap.maxNodeWidth};switch(m.type){case Vu.ROUNDED_RECT:m.padding=2*v.mindmap.padding;break;case Vu.RECT:m.padding=2*v.mindmap.padding;break;case Vu.HEXAGON:m.padding=2*v.mindmap.padding;break;default:m.padding=v.mindmap.padding}const b=GUe(i);if(b)b.children.push(m),sv.push(m);else if(sv.length===0)sv.push(m);else{let E=new Error('There can be only one root. No parent could be found for ("'+m.descr+'")');throw E.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},E}},Vu={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},WUe=(i,a)=>{switch(Ut.debug("In get type",i,a),i){case"[":return Vu.RECT;case"(":return a===")"?Vu.ROUNDED_RECT:Vu.CLOUD;case"((":return Vu.CIRCLE;case")":return Vu.CLOUD;case"))":return Vu.BANG;case"{{":return Vu.HEXAGON;default:return Vu.DEFAULT}},Gjt=(i,a)=>{Hgt[i]=a},KUe=i=>{const a=sv[sv.length-1];i&&i.icon&&(a.icon=UP(i.icon)),i&&i.class&&(a.class=UP(i.class))},LT=i=>{switch(i){case Vu.DEFAULT:return"no-border";case Vu.RECT:return"rect";case Vu.ROUNDED_RECT:return"rounded-rect";case Vu.CIRCLE:return"circle";case Vu.CLOUD:return"cloud";case Vu.BANG:return"bang";case Vu.HEXAGON:return"hexgon";default:return"no-border"}};let Vjt;const YUe=i=>{Vjt=i},XUe=()=>Ut,QUe=i=>sv[i],Ggt=i=>Hgt[i],ZUe=Object.freeze(Object.defineProperty({__proto__:null,addNode:UUe,clear:HUe,decorateNode:KUe,getElementById:Ggt,getLogger:XUe,getMindmap:VUe,getNodeById:QUe,getType:WUe,nodeType:Vu,get parseError(){return Vjt},sanitizeText:UP,setElementForId:Gjt,setErrorHandler:YUe,type2Str:LT},Symbol.toStringTag,{value:"Module"})),Ujt=12,JUe=function(i,a,f){i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 ${a.height-5} v${-a.height+2*5} q0,-5 5,-5 h${a.width-2*5} q5,0 5,5 v${a.height-5} H0 Z`),i.append("line").attr("class","node-line-"+f).attr("x1",0).attr("y1",a.height).attr("x2",a.width).attr("y2",a.height)},tWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("height",a.height).attr("width",a.width)},eWe=function(i,a){const f=a.width,p=a.height,v=.15*f,m=.25*f,b=.35*f,E=.2*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 0 a${v},${v} 0 0,1 ${f*.25},${-1*f*.1} a${b},${b} 1 0,1 ${f*.4},${-1*f*.1} a${m},${m} 1 0,1 ${f*.35},${1*f*.2} @@ -1543,7 +1542,7 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[qe]||qe)+"'":He="Parse erro a${v},${v} 1 0,1 ${-1*f*.1},${-1*p*.35} a${E},${E} 1 0,1 ${f*.1},${-1*p*.65} - H0 V0 Z`)},nWe=function(i,a){const f=a.width,p=a.height,v=.15*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${f*.25},${-1*p*.1} + H0 V0 Z`)},nWe=function(i,a){const f=a.width,p=a.height,v=.15*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${f*.25},${-1*p*.1} a${v},${v} 1 0,0 ${f*.25},0 a${v},${v} 1 0,0 ${f*.25},0 a${v},${v} 1 0,0 ${f*.25},${1*p*.1} @@ -1561,23 +1560,23 @@ Expecting `+Ee.join(", ")+", got '"+(this.terminals_[qe]||qe)+"'":He="Parse erro a${v*.8},${v*.8} 1 0,0 0,${-1*p*.34} a${v},${v} 1 0,0 ${f*.1},${-1*p*.33} - H0 V0 Z`)},rWe=function(i,a){i.append("circle").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("r",a.width/2)};function iWe(i,a,f,p,v){return i.insert("polygon",":first-child").attr("points",p.map(function(m){return m.x+","+m.y}).join(" ")).attr("transform","translate("+(v.width-a)/2+", "+f+")")}const sWe=function(i,a){const f=a.height,v=f/4,m=a.width-a.padding+2*v,b=[{x:v,y:0},{x:m-v,y:0},{x:m,y:-f/2},{x:m-v,y:-f},{x:v,y:-f},{x:0,y:-f/2}];iWe(i,m,f,b,a)},aWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+_9(a.type)).attr("height",a.height).attr("rx",a.padding).attr("ry",a.padding).attr("width",a.width)},Gjt={drawNode:function(i,a,f,p){const v=p.htmlLabels,m=f%(Vjt-1),b=i.append("g");a.section=m;let E="section-"+m;m<0&&(E+=" section-root"),b.attr("class",(a.class?a.class+" ":"")+"mindmap-node "+E);const C=b.append("g"),A=b.append("g"),P=a.descr.replace(/()/g,` -`);vK(A,P,{useHtmlLabels:v,width:a.width,classes:"mindmap-node-label"}),v||A.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const F=A.node().getBBox(),j=p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;if(a.height=F.height+j*1.1*.5+a.padding,a.width=F.width+2*a.padding,a.icon)if(a.type===Zu.CIRCLE)a.height+=50,a.width+=50,b.append("foreignObject").attr("height","50px").attr("width",a.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),A.attr("transform","translate("+a.width/2+", "+(a.height/2-1.5*a.padding)+")");else{a.width+=50;const R=a.height;a.height=Math.max(R,60);const H=Math.abs(a.height-R);b.append("foreignObject").attr("width","60px").attr("height",a.height).attr("style","text-align: center;margin-top:"+H/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),A.attr("transform","translate("+(25+a.width/2)+", "+(H/2+a.padding/2)+")")}else if(v){const R=(a.width-F.width)/2,H=(a.height-F.height)/2;A.attr("transform","translate("+R+", "+H+")")}else{const R=a.width/2,H=a.padding/2;A.attr("transform","translate("+R+", "+H+")")}switch(a.type){case Zu.DEFAULT:JUe(C,a,m);break;case Zu.ROUNDED_RECT:aWe(C,a);break;case Zu.RECT:tWe(C,a);break;case Zu.CIRCLE:C.attr("transform","translate("+a.width/2+", "+ +a.height/2+")"),rWe(C,a);break;case Zu.CLOUD:eWe(C,a);break;case Zu.BANG:nWe(C,a);break;case Zu.HEXAGON:sWe(C,a);break}return qjt(a.id,b),a.height},positionNode:function(i){const a=zgt(i.id),f=i.x||0,p=i.y||0;a.attr("transform","translate("+f+","+p+")")},drawEdge:function(a,f,p,v,m){const b=m%(Vjt-1),E=p.x+p.width/2,C=p.y+p.height/2,A=f.x+f.width/2,P=f.y+f.height/2,F=A>E?E+Math.abs(E-A)/2:E-Math.abs(E-A)/2,j=P>C?C+Math.abs(C-P)/2:C-Math.abs(C-P)/2,R=A>E?Math.abs(E-F)/2+E:-Math.abs(E-F)/2+E,H=P>C?Math.abs(C-j)/2+C:-Math.abs(C-j)/2+C;a.append("path").attr("d",p.direction==="TB"||p.direction==="BT"?`M${E},${C} Q${E},${H} ${F},${j} T${A},${P}`:`M${E},${C} Q${R},${C} ${F},${j} T${A},${P}`).attr("class","edge section-edge-"+b+" edge-depth-"+v)}};var Ujt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){function f(y){return f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},f(y)}function p(y,g){if(!(y instanceof g))throw new TypeError("Cannot call a class as a function")}function v(y,g){for(var x=0;xy.length)&&(g=y.length);for(var x=0,T=new Array(g);x"u"?null:window,H=R?R.navigator:null;R&&R.document;var Y=f(""),rt=f({}),J=f(function(){}),it=typeof HTMLElement>"u"?"undefined":f(HTMLElement),ft=function(g){return g&&g.instanceString&&kt(g.instanceString)?g.instanceString():null},Tt=function(g){return g!=null&&f(g)==Y},kt=function(g){return g!=null&&f(g)===J},mt=function(g){return!dt(g)&&(Array.isArray?Array.isArray(g):g!=null&&g instanceof Array)},ct=function(g){return g!=null&&f(g)===rt&&!mt(g)&&g.constructor===Object},yt=function(g){return g!=null&&f(g)===rt},st=function(g){return g!=null&&f(g)===f(1)&&!isNaN(g)},xt=function(g){return st(g)&&Math.floor(g)===g},ht=function(g){if(it!=="undefined")return g!=null&&g instanceof HTMLElement},dt=function(g){return Ct(g)||tt(g)},Ct=function(g){return ft(g)==="collection"&&g._private.single},tt=function(g){return ft(g)==="collection"&&!g._private.single},Pt=function(g){return ft(g)==="core"},pt=function(g){return ft(g)==="stylesheet"},Ft=function(g){return ft(g)==="event"},X=function(g){return g==null?!0:!!(g===""||g.match(/^\s+$/))},Rt=function(g){return typeof HTMLElement>"u"?!1:g instanceof HTMLElement},Bt=function(g){return ct(g)&&st(g.x1)&&st(g.x2)&&st(g.y1)&&st(g.y2)},vt=function(g){return yt(g)&&kt(g.then)},Ot=function(){return H&&H.userAgent.match(/msie|trident|edge/i)},Vt=function(g,x){x||(x=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var I=[],O=0;Ox?1:0},ye=function(g,x){return-1*$e(g,x)},fn=Object.assign!=null?Object.assign.bind(Object):function(y){for(var g=arguments,x=1;x1&&(Lt-=1),Lt<1/6?lt+(gt-lt)*6*Lt:Lt<1/2?gt:Lt<2/3?lt+(gt-lt)*(2/3-Lt)*6:lt}var U=new RegExp("^"+Ve+"$").exec(g);if(U){if(T=parseInt(U[1]),T<0?T=(360- -1*T%360)%360:T>360&&(T=T%360),T/=360,L=parseFloat(U[2]),L<0||L>100||(L=L/100,I=parseFloat(U[3]),I<0||I>100)||(I=I/100,O=U[4],O!==void 0&&(O=parseFloat(O),O<0||O>1)))return;if(L===0)$=z=S=Math.round(I*255);else{var et=I<.5?I*(1+L):I+L-I*L,at=2*I-et;$=Math.round(255*V(at,et,T+1/3)),z=Math.round(255*V(at,et,T)),S=Math.round(255*V(at,et,T-1/3))}x=[$,z,S,O]}return x},qt=function(g){var x,T=new RegExp("^"+ne+"$").exec(g);if(T){x=[];for(var L=[],I=1;I<=3;I++){var O=T[I];if(O[O.length-1]==="%"&&(L[I]=!0),O=parseFloat(O),L[I]&&(O=O/100*255),O<0||O>255)return;x.push(Math.floor(O))}var $=L[1]||L[2]||L[3],z=L[1]&&L[2]&&L[3];if($&&!z)return;var S=T[4];if(S!==void 0){if(S=parseFloat(S),S<0||S>1)return;x.push(S)}}return x},zi=function(g){return ki[g.toLowerCase()]},Se=function(g){return(mt(g)?g:null)||zi(g)||Yt(g)||qt(g)||Mi(g)},ki={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ri=function(g){for(var x=g.map,T=g.keys,L=T.length,I=0;I=g||Ht<0||U&&ie>=I}function Et(){var Xt=_r();if(Lt(Xt))return Dt(Xt);$=setTimeout(Et,gt(Xt))}function Dt(Xt){return $=void 0,et&&T?at(Xt):(T=L=void 0,O)}function It(){$!==void 0&&clearTimeout($),S=0,T=z=L=$=void 0}function zt(){return $===void 0?O:Dt(_r())}function te(){var Xt=_r(),Ht=Lt(Xt);if(T=arguments,L=this,z=Xt,Ht){if($===void 0)return lt(z);if(U)return clearTimeout($),$=setTimeout(Et,g),at(z)}return $===void 0&&($=setTimeout(Et,g)),O}return te.cancel=It,te.flush=zt,te}var os=zb,As=R?R.performance:null,ma=As&&As.now?function(){return As.now()}:function(){return Date.now()},vi=function(){if(R){if(R.requestAnimationFrame)return function(y){R.requestAnimationFrame(y)};if(R.mozRequestAnimationFrame)return function(y){R.mozRequestAnimationFrame(y)};if(R.webkitRequestAnimationFrame)return function(y){R.webkitRequestAnimationFrame(y)};if(R.msRequestAnimationFrame)return function(y){R.msRequestAnimationFrame(y)}}return function(y){y&&setTimeout(function(){y(ma())},1e3/60)}}(),Qc=function(g){return vi(g)},me=ma,bg=9261,Oe=65599,af=5381,fk=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bg,T=x,L;L=g.next(),!L.done;)T=T*Oe+L.value|0;return T},k3=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bg;return x*Oe+g|0},gm=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:af;return(x<<5)+x+g|0},A9=function(g,x){return g*2097152+x},au=function(g){return g[0]*2097152+g[1]},vg=function(g,x){return[k3(g[0],x[0]),gm(g[1],x[1])]},dk=function(g,x){var T={value:0,done:!1},L=0,I=g.length,O={next:function(){return L=0&&!(g[L]===x&&(g.splice(L,1),T));L--);},mL=function(g){g.splice(0,g.length)},YP=function(g,x){for(var T=0;T"u"?"undefined":f(Set))!==rY?Set:iY,I9=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(g===void 0||x===void 0||!Pt(g)){ou("An element must have a core reference and parameters set");return}var L=x.group;if(L==null&&(x.data&&x.data.source!=null&&x.data.target!=null?L="edges":L="nodes"),L!=="nodes"&&L!=="edges"){ou("An element must be of type `nodes` or `edges`; you specified `"+L+"`");return}this.length=1,this[0]=this;var I=this._private={cy:g,single:!0,data:x.data||{},position:x.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:L,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!x.selected,selectable:x.selectable===void 0?!0:!!x.selectable,locked:!!x.locked,grabbed:!1,grabbable:x.grabbable===void 0?!0:!!x.grabbable,pannable:x.pannable===void 0?L==="edges":!!x.pannable,active:!1,classes:new $5,animation:{current:[],queue:[]},rscratch:{},scratch:x.scratch||{},edges:[],children:[],parent:x.parent&&x.parent.isNode()?x.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(I.position.x==null&&(I.position.x=0),I.position.y==null&&(I.position.y=0),x.renderedPosition){var O=x.renderedPosition,$=g.pan(),z=g.zoom();I.position={x:(O.x-$.x)/z,y:(O.y-$.y)/z}}var S=[];mt(x.classes)?S=x.classes:Tt(x.classes)&&(S=x.classes.split(/\s+/));for(var V=0,U=S.length;VDt?1:0},V=function(Et,Dt,It,zt,te){var Xt;if(It==null&&(It=0),te==null&&(te=T),It<0)throw new Error("lo must be non-negative");for(zt==null&&(zt=Et.length);Itfe;0<=fe?Ut++:Ut--)ie.push(Ut);return ie}.apply(this).reverse(),Ht=[],zt=0,te=Xt.length;ztge;0<=ge?++ie:--ie)se.push(O(Et,It));return se},gt=function(Et,Dt,It,zt){var te,Xt,Ht;for(zt==null&&(zt=T),te=Et[It];It>Dt;){if(Ht=It-1>>1,Xt=Et[Ht],zt(te,Xt)<0){Et[It]=Xt,It=Ht;continue}break}return Et[It]=te},Lt=function(Et,Dt,It){var zt,te,Xt,Ht,ie;for(It==null&&(It=T),te=Et.length,ie=Dt,Xt=Et[Dt],zt=2*Dt+1;zt0;){var Xt=Dt.pop(),Ht=Lt(Xt),ie=Xt.id();if(et[ie]=Ht,Ht!==1/0)for(var Ut=Xt.neighborhood().intersect(lt),fe=0;fe0)for(xn.unshift(Ge);U[Xn];){var Cn=U[Xn];xn.unshift(Cn.edge),xn.unshift(Cn.node),Dn=Cn.node,Xn=Dn.id()}return $.spawn(xn)}}}},cY={kruskal:function(g){g=g||function(It){return 1};for(var x=this.byGroup(),T=x.nodes,L=x.edges,I=T.length,O=new Array(I),$=T,z=function(zt){for(var te=0;te0;){if(te(),Ht++,zt===V){for(var ie=[],Ut=I,fe=V,ge=Et[fe];ie.unshift(Ut),ge!=null&&ie.unshift(ge),Ut=Lt[fe],Ut!=null;)fe=Ut.id(),ge=Et[fe];return{found:!0,distance:U[zt],path:this.spawn(ie),steps:Ht}}at[zt]=!0;for(var se=It._private.edges,Ne=0;Nege&&(lt[fe]=ge,Dt[fe]=Ut,It[fe]=te),!I){var se=Ut*V+ie;!I&<[se]>ge&&(lt[se]=ge,Dt[se]=ie,It[se]=te)}}}for(var Ne=0;Ne1&&arguments[1]!==void 0?arguments[1]:O,Ua=It(Ni),sa=[],Xs=Ua;;){if(Xs==null)return x.spawn();var Cr=Dt(Xs),Jt=Cr.edge,jn=Cr.pred;if(sa.unshift(Xs[0]),Xs.same(ns)&&sa.length>0)break;Jt!=null&&sa.unshift(Jt),Xs=jn}return z.spawn(sa)},Xt=0;Xt=0;V--){var U=S[V],et=U[1],at=U[2];(x[et]===$&&x[at]===z||x[et]===z&&x[at]===$)&&S.splice(V,1)}for(var lt=0;ltL;){var I=Math.floor(Math.random()*x.length);x=bY(I,g,x),T--}return x},vY={kargerStein:function(){var g=this,x=this.byGroup(),T=x.nodes,L=x.edges;L.unmergeBy(function(xn){return xn.isLoop()});var I=T.length,O=L.length,$=Math.ceil(Math.pow(Math.log(I)/Math.LN2,2)),z=Math.floor(I/pY);if(I<2){ou("At least 2 nodes are required for Karger-Stein algorithm");return}for(var S=[],V=0;V1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=1/0,I=x;I1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=-1/0,I=x;I1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=0,I=0,O=x;O1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,L=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,I=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;L?g=g.slice(x,T):(T0&&g.splice(0,x));for(var $=0,z=g.length-1;z>=0;z--){var S=g[z];O?isFinite(S)||(g[z]=-1/0,$++):g.splice(z,1)}I&&g.sort(function(et,at){return et-at});var V=g.length,U=Math.floor(V/2);return V%2!==0?g[U+1+$]:(g[U-1+$]+g[U+$])/2},EY=function(g){return Math.PI*g/180},N9=function(g,x){return Math.atan2(x,g)-Math.PI/2},xL=Math.log2||function(y){return Math.log(y)/Math.log(2)},ZP=function(g){return g>0?1:g<0?-1:0},T3=function(g,x){return Math.sqrt(_3(g,x))},_3=function(g,x){var T=x.x-g.x,L=x.y-g.y;return T*T+L*L},TY=function(g){for(var x=g.length,T=0,L=0;L=g.x1&&g.y2>=g.y1)return{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,w:g.x2-g.x1,h:g.y2-g.y1};if(g.w!=null&&g.h!=null&&g.w>=0&&g.h>=0)return{x1:g.x1,y1:g.y1,x2:g.x1+g.w,y2:g.y1+g.h,w:g.w,h:g.h}}},CY=function(g){return{x1:g.x1,x2:g.x2,w:g.w,y1:g.y1,y2:g.y2,h:g.h}},SY=function(g){g.x1=1/0,g.y1=1/0,g.x2=-1/0,g.y2=-1/0,g.w=0,g.h=0},AY=function(g,x){g.x1=Math.min(g.x1,x.x1),g.x2=Math.max(g.x2,x.x2),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,x.y1),g.y2=Math.max(g.y2,x.y2),g.h=g.y2-g.y1},LY=function(g,x,T){g.x1=Math.min(g.x1,x),g.x2=Math.max(g.x2,x),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,T),g.y2=Math.max(g.y2,T),g.h=g.y2-g.y1},P9=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g.x1-=x,g.x2+=x,g.y1-=x,g.y2+=x,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},kL=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],T,L,I,O;if(x.length===1)T=L=I=O=x[0];else if(x.length===2)T=I=x[0],O=L=x[1];else if(x.length===4){var $=E(x,4);T=$[0],L=$[1],I=$[2],O=$[3]}return g.x1-=O,g.x2+=L,g.y1-=T,g.y2+=I,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},JP=function(g,x){g.x1=x.x1,g.y1=x.y1,g.x2=x.x2,g.y2=x.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1},EL=function(g,x){return!(g.x1>x.x2||x.x1>g.x2||g.x2x.y2||x.y1>g.y2)},H5=function(g,x,T){return g.x1<=x&&x<=g.x2&&g.y1<=T&&T<=g.y2},MY=function(g,x){return H5(g,x.x,x.y)},tF=function(g,x){return H5(g,x.x1,x.y1)&&H5(g,x.x2,x.y2)},eF=function(g,x,T,L,I,O,$){var z=mk(I,O),S=I/2,V=O/2,U;{var et=T-S+z-$,at=L-V-$,lt=T+S-z+$,gt=at;if(U=vm(g,x,T,L,et,at,lt,gt,!1),U.length>0)return U}{var Lt=T+S+$,Et=L-V+z-$,Dt=Lt,It=L+V-z+$;if(U=vm(g,x,T,L,Lt,Et,Dt,It,!1),U.length>0)return U}{var zt=T-S+z-$,te=L+V+$,Xt=T+S-z+$,Ht=te;if(U=vm(g,x,T,L,zt,te,Xt,Ht,!1),U.length>0)return U}{var ie=T-S-$,Ut=L-V+z-$,fe=ie,ge=L+V-z+$;if(U=vm(g,x,T,L,ie,Ut,fe,ge,!1),U.length>0)return U}var se;{var Ne=T-S+z,pe=L-V+z;if(se=vk(g,x,T,L,Ne,pe,z+$),se.length>0&&se[0]<=Ne&&se[1]<=pe)return[se[0],se[1]]}{var gn=T+S-z,je=L-V+z;if(se=vk(g,x,T,L,gn,je,z+$),se.length>0&&se[0]>=gn&&se[1]<=je)return[se[0],se[1]]}{var Ge=T+S-z,xn=L+V-z;if(se=vk(g,x,T,L,Ge,xn,z+$),se.length>0&&se[0]>=Ge&&se[1]>=xn)return[se[0],se[1]]}{var Dn=T-S+z,Xn=L+V-z;if(se=vk(g,x,T,L,Dn,Xn,z+$),se.length>0&&se[0]<=Dn&&se[1]>=Xn)return[se[0],se[1]]}return[]},DY=function(g,x,T,L,I,O,$){var z=$,S=Math.min(T,I),V=Math.max(T,I),U=Math.min(L,O),et=Math.max(L,O);return S-z<=g&&g<=V+z&&U-z<=x&&x<=et+z},IY=function(g,x,T,L,I,O,$,z,S){var V={x1:Math.min(T,$,I)-S,x2:Math.max(T,$,I)+S,y1:Math.min(L,z,O)-S,y2:Math.max(L,z,O)+S};return!(gV.x2||xV.y2)},OY=function(g,x,T,L){T-=L;var I=x*x-4*g*T;if(I<0)return[];var O=Math.sqrt(I),$=2*g,z=(-x+O)/$,S=(-x-O)/$;return[z,S]},NY=function(g,x,T,L,I){var O=1e-5;g===0&&(g=O),x/=g,T/=g,L/=g;var $,z,S,V,U,et,at,lt;if(z=(3*T-x*x)/9,S=-(27*L)+x*(9*T-2*(x*x)),S/=54,$=z*z*z+S*S,I[1]=0,at=x/3,$>0){U=S+Math.sqrt($),U=U<0?-Math.pow(-U,1/3):Math.pow(U,1/3),et=S-Math.sqrt($),et=et<0?-Math.pow(-et,1/3):Math.pow(et,1/3),I[0]=-at+U+et,at+=(U+et)/2,I[4]=I[2]=-at,at=Math.sqrt(3)*(-et+U)/2,I[3]=at,I[5]=-at;return}if(I[5]=I[3]=0,$===0){lt=S<0?-Math.pow(-S,1/3):Math.pow(S,1/3),I[0]=-at+2*lt,I[4]=I[2]=-(lt+at);return}z=-z,V=z*z*z,V=Math.acos(S/Math.sqrt(V)),lt=2*Math.sqrt(z),I[0]=-at+lt*Math.cos(V/3),I[2]=-at+lt*Math.cos((V+2*Math.PI)/3),I[4]=-at+lt*Math.cos((V+4*Math.PI)/3)},PY=function(g,x,T,L,I,O,$,z){var S=1*T*T-4*T*I+2*T*$+4*I*I-4*I*$+$*$+L*L-4*L*O+2*L*z+4*O*O-4*O*z+z*z,V=1*9*T*I-3*T*T-3*T*$-6*I*I+3*I*$+9*L*O-3*L*L-3*L*z-6*O*O+3*O*z,U=1*3*T*T-6*T*I+T*$-T*g+2*I*I+2*I*g-$*g+3*L*L-6*L*O+L*z-L*x+2*O*O+2*O*x-z*x,et=1*T*I-T*T+T*g-I*g+L*O-L*L+L*x-O*x,at=[];NY(S,V,U,et,at);for(var lt=1e-7,gt=[],Lt=0;Lt<6;Lt+=2)Math.abs(at[Lt+1])=0&&at[Lt]<=1&>.push(at[Lt]);gt.push(1),gt.push(0);for(var Et=-1,Dt,It,zt,te=0;te=0?ztS?(g-I)*(g-I)+(x-O)*(x-O):V-et},jd=function(g,x,T){for(var L,I,O,$,z,S=0,V=0;V=g&&g>=O||L<=g&&g<=O)z=(g-L)/(O-L)*($-I)+I,z>x&&S++;else continue;return S%2!==0},lv=function(g,x,T,L,I,O,$,z,S){var V=new Array(T.length),U;z[0]!=null?(U=Math.atan(z[1]/z[0]),z[0]<0?U=U+Math.PI/2:U=-U-Math.PI/2):U=z;for(var et=Math.cos(-U),at=Math.sin(-U),lt=0;lt0){var Lt=rF(V,-S);gt=nF(Lt)}else gt=V;return jd(g,x,gt)},BY=function(g,x,T,L,I,O,$){for(var z=new Array(T.length),S=O/2,V=$/2,U=CL(O,$),et=U*U,at=0;at=0&&Lt<=1&&Dt.push(Lt),Et>=0&&Et<=1&&Dt.push(Et),Dt.length===0)return[];var It=Dt[0]*z[0]+g,zt=Dt[0]*z[1]+x;if(Dt.length>1){if(Dt[0]==Dt[1])return[It,zt];var te=Dt[1]*z[0]+g,Xt=Dt[1]*z[1]+x;return[It,zt,te,Xt]}else return[It,zt]},TL=function(g,x,T){return x<=g&&g<=T||T<=g&&g<=x?g:g<=x&&x<=T||T<=x&&x<=g?x:T},vm=function(g,x,T,L,I,O,$,z,S){var V=g-I,U=T-g,et=$-I,at=x-O,lt=L-x,gt=z-O,Lt=et*at-gt*V,Et=U*at-lt*V,Dt=gt*U-et*lt;if(Dt!==0){var It=Lt/Dt,zt=Et/Dt,te=.001,Xt=0-te,Ht=1+te;return Xt<=It&&It<=Ht&&Xt<=zt&&zt<=Ht?[g+It*U,x+It*lt]:S?[g+It*U,x+It*lt]:[]}else return Lt===0||Et===0?TL(g,T,$)===$?[$,z]:TL(g,T,I)===I?[I,O]:TL(I,$,T)===T?[T,L]:[]:[]},wk=function(g,x,T,L,I,O,$,z){var S=[],V,U=new Array(T.length),et=!0;O==null&&(et=!1);var at;if(et){for(var lt=0;lt0){var gt=rF(U,-z);at=nF(gt)}else at=U}else at=T;for(var Lt,Et,Dt,It,zt=0;zt2){for(var je=[S[0],S[1]],Ge=Math.pow(je[0]-g,2)+Math.pow(je[1]-x,2),xn=1;xnV&&(V=zt)},get:function(It){return S[It]}},et=0;et<$.length;et++){var at=$[et],lt=at.id();T?z[lt]=at.outgoers().nodes():z[lt]=at.openNeighborhood().nodes(),U.set(lt,0)}for(var gt=function(It){for(var zt=$[It].id(),te=[],Xt={},Ht={},ie={},Ut=new pk(function(ur,er){return ie[ur]-ie[er]}),fe=0;fe<$.length;fe++){var ge=$[fe].id();Xt[ge]=[],Ht[ge]=0,ie[ge]=1/0}for(Ht[zt]=1,ie[zt]=0,Ut.push(zt);!Ut.empty();){var se=Ut.pop();if(te.push(se),I)for(var Ne=0;Ne0?je=gn.edgesTo(pe)[0]:je=pe.edgesTo(gn)[0];var Ge=L(je);pe=pe.id(),ie[pe]>ie[se]+Ge&&(ie[pe]=ie[se]+Ge,Ut.nodes.indexOf(pe)<0?Ut.push(pe):Ut.updateItem(pe),Ht[pe]=0,Xt[pe]=[]),ie[pe]==ie[se]+Ge&&(Ht[pe]=Ht[pe]+Ht[se],Xt[pe].push(se))}else for(var xn=0;xn0;){for(var Yn=te.pop(),rr=0;rr0&&$.push(T[z]);$.length!==0&&I.push(L.collection($))}return I},ZY=function(g,x){for(var T=0;T5&&arguments[5]!==void 0?arguments[5]:eX,$=L,z,S,V=0;V=2?yk(g,x,T,0,dF,nX):yk(g,x,T,0,fF)},squaredEuclidean:function(g,x,T){return yk(g,x,T,0,dF)},manhattan:function(g,x,T){return yk(g,x,T,0,fF)},max:function(g,x,T){return yk(g,x,T,-1/0,rX)}};U5["squared-euclidean"]=U5.squaredEuclidean,U5.squaredeuclidean=U5.squaredEuclidean;function B9(y,g,x,T,L,I){var O;return kt(y)?O=y:O=U5[y]||U5.euclidean,g===0&&kt(y)?O(L,I):O(g,x,T,L,I)}var iX=zf({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),LL=function(g){return iX(g)},R9=function(g,x,T,L,I){var O=I!=="kMedoids",$=O?function(U){return T[U]}:function(U){return L[U](T)},z=function(et){return L[et](x)},S=T,V=x;return B9(g,L.length,$,z,S,V)},ML=function(g,x,T){for(var L=T.length,I=new Array(L),O=new Array(L),$=new Array(x),z=null,S=0;ST)return!1}return!0},oX=function(g,x,T){for(var L=0;L$&&($=x[S][V],z=V);I[z].push(g[S])}for(var U=0;U=I.threshold||I.mode==="dendrogram"&&g.length===1)return!1;var lt=x[O],gt=x[L[O]],Lt;I.mode==="dendrogram"?Lt={left:lt,right:gt,key:lt.key}:Lt={value:lt.value.concat(gt.value),key:lt.key},g[lt.index]=Lt,g.splice(gt.index,1),x[lt.key]=Lt;for(var Et=0;EtT[gt.key][Dt.key]&&(z=T[gt.key][Dt.key])):I.linkage==="max"?(z=T[lt.key][Dt.key],T[lt.key][Dt.key]0&&L.push(I);return L},xF=function(g,x,T){for(var L=[],I=0;I$&&(O=S,$=x[I*g+S])}O>0&&L.push(O)}for(var V=0;VS&&(z=V,S=U)}T[I]=O[z]}return L=xF(g,x,T),L},kF=function(g){for(var x=this.cy(),T=this.nodes(),L=xX(g),I={},O=0;O=ge?(se=ge,ge=pe,Ne=gn):pe>se&&(se=pe);for(var je=0;je<$;je++)U[fe*$+je]=(1-L.damping)*(S[fe*$+je]-ge)+L.damping*It[je];U[fe*$+Ne]=(1-L.damping)*(S[fe*$+Ne]-se)+L.damping*It[Ne]}for(var Ge=0;Ge<$;Ge++){for(var xn=0,Dn=0;Dn<$;Dn++)It[Dn]=et[Dn*$+Ge],zt[Dn]=Math.max(0,U[Dn*$+Ge]),xn+=zt[Dn];xn-=zt[Ge],zt[Ge]=U[Ge*$+Ge],xn+=zt[Ge];for(var Xn=0;Xn<$;Xn++)et[Xn*$+Ge]=(1-L.damping)*Math.min(0,xn-zt[Xn])+L.damping*It[Xn];et[Ge*$+Ge]=(1-L.damping)*(xn-zt[Ge])+L.damping*It[Ge]}for(var Cn=0,Yn=0;Yn<$;Yn++){var rr=et[Yn*$+Yn]+U[Yn*$+Yn]>0?1:0;Ht[Ut%L.minIterations*$+Yn]=rr,Cn+=rr}if(Cn>0&&(Ut>=L.minIterations-1||Ut==L.maxIterations-1)){for(var wr=0,ur=0;ur<$;ur++){te[ur]=0;for(var er=0;er1||Xt>1)&&($=!0),U[It]=[],Dt.outgoers().forEach(function(ie){ie.isEdge()&&U[It].push(ie.id())})}else et[It]=[void 0,Dt.target().id()]}):O.forEach(function(Dt){var It=Dt.id();if(Dt.isNode()){var zt=Dt.degree(!0);zt%2&&(z?S?$=!0:S=It:z=It),U[It]=[],Dt.connectedEdges().forEach(function(te){return U[It].push(te.id())})}else et[It]=[Dt.source().id(),Dt.target().id()]});var at={found:!1,trail:void 0};if($)return at;if(S&&z)if(I){if(V&&S!=V)return at;V=S}else{if(V&&S!=V&&z!=V)return at;V||(V=S)}else V||(V=O[0].id());var lt=function(It){for(var zt=It,te=[It],Xt,Ht,ie;U[zt].length;)Xt=U[zt].shift(),Ht=et[Xt][0],ie=et[Xt][1],zt!=ie?(U[ie]=U[ie].filter(function(Ut){return Ut!=Xt}),zt=ie):!I&&zt!=Ht&&(U[Ht]=U[Ht].filter(function(Ut){return Ut!=Xt}),zt=Ht),te.unshift(Xt),te.unshift(zt);return te},gt=[],Lt=[];for(Lt=lt(V);Lt.length!=1;)U[Lt[0]].length==0?(gt.unshift(O.getElementById(Lt.shift())),gt.unshift(O.getElementById(Lt.shift()))):Lt=lt(Lt.shift()).concat(Lt);gt.unshift(O.getElementById(Lt.shift()));for(var Et in U)if(U[Et].length)return at;return at.found=!0,at.trail=this.spawn(gt,!0),at}},$9=function(){var g=this,x={},T=0,L=0,I=[],O=[],$={},z=function(et,at){for(var lt=O.length-1,gt=[],Lt=g.spawn();O[lt].x!=et||O[lt].y!=at;)gt.push(O.pop().edge),lt--;gt.push(O.pop().edge),gt.forEach(function(Et){var Dt=Et.connectedNodes().intersection(g);Lt.merge(Et),Dt.forEach(function(It){var zt=It.id(),te=It.connectedEdges().intersection(g);Lt.merge(It),x[zt].cutVertex?Lt.merge(te.filter(function(Xt){return Xt.isLoop()})):Lt.merge(te)})}),I.push(Lt)},S=function U(et,at,lt){et===lt&&(L+=1),x[at]={id:T,low:T++,cutVertex:!1};var gt=g.getElementById(at).connectedEdges().intersection(g);if(gt.size()===0)I.push(g.spawn(g.getElementById(at)));else{var Lt,Et,Dt,It;gt.forEach(function(zt){Lt=zt.source().id(),Et=zt.target().id(),Dt=Lt===at?Et:Lt,Dt!==lt&&(It=zt.id(),$[It]||($[It]=!0,O.push({x:at,y:Dt,edge:zt})),Dt in x?x[at].low=Math.min(x[at].low,x[Dt].id):(U(et,Dt,at),x[at].low=Math.min(x[at].low,x[Dt].low),x[at].id<=x[Dt].low&&(x[at].cutVertex=!0,z(at,Dt))))})}};g.forEach(function(U){if(U.isNode()){var et=U.id();et in x||(L=0,S(et,et),x[et].cutVertex=L>1)}});var V=Object.keys(x).filter(function(U){return x[U].cutVertex}).map(function(U){return g.getElementById(U)});return{cut:g.spawn(V),components:I}},LX={hopcroftTarjanBiconnected:$9,htbc:$9,htb:$9,hopcroftTarjanBiconnectedComponents:$9},z9=function(){var g=this,x={},T=0,L=[],I=[],O=g.spawn(g),$=function z(S){I.push(S),x[S]={index:T,low:T++,explored:!1};var V=g.getElementById(S).connectedEdges().intersection(g);if(V.forEach(function(gt){var Lt=gt.target().id();Lt!==S&&(Lt in x||z(Lt),x[Lt].explored||(x[S].low=Math.min(x[S].low,x[Lt].low)))}),x[S].index===x[S].low){for(var U=g.spawn();;){var et=I.pop();if(U.merge(g.getElementById(et)),x[et].low=x[S].index,x[et].explored=!0,et===S)break}var at=U.edgesWith(U),lt=U.merge(at);L.push(lt),O=O.difference(lt)}};return g.forEach(function(z){if(z.isNode()){var S=z.id();S in x||$(S)}}),{cut:O,components:L}},MX={tarjanStronglyConnected:z9,tsc:z9,tscc:z9,tarjanStronglyConnectedComponents:z9},EF={};[gk,oY,cY,lY,fY,gY,vY,qY,V5,G5,AL,tX,dX,mX,CX,AX,LX,MX].forEach(function(y){fn(EF,y)});/*! + H0 V0 Z`)},rWe=function(i,a){i.append("circle").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("r",a.width/2)};function iWe(i,a,f,p,v){return i.insert("polygon",":first-child").attr("points",p.map(function(m){return m.x+","+m.y}).join(" ")).attr("transform","translate("+(v.width-a)/2+", "+f+")")}const sWe=function(i,a){const f=a.height,v=f/4,m=a.width-a.padding+2*v,b=[{x:v,y:0},{x:m-v,y:0},{x:m,y:-f/2},{x:m-v,y:-f},{x:v,y:-f},{x:0,y:-f/2}];iWe(i,m,f,b,a)},aWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("height",a.height).attr("rx",a.padding).attr("ry",a.padding).attr("width",a.width)},Wjt={drawNode:function(i,a,f,p){const v=p.htmlLabels,m=f%(Ujt-1),b=i.append("g");a.section=m;let E="section-"+m;m<0&&(E+=" section-root"),b.attr("class",(a.class?a.class+" ":"")+"mindmap-node "+E);const _=b.append("g"),L=b.append("g"),N=a.descr.replace(/()/g,` +`);dK(L,N,{useHtmlLabels:v,width:a.width,classes:"mindmap-node-label"}),v||L.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const B=L.node().getBBox(),j=p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;if(a.height=B.height+j*1.1*.5+a.padding,a.width=B.width+2*a.padding,a.icon)if(a.type===Vu.CIRCLE)a.height+=50,a.width+=50,b.append("foreignObject").attr("height","50px").attr("width",a.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+a.width/2+", "+(a.height/2-1.5*a.padding)+")");else{a.width+=50;const R=a.height;a.height=Math.max(R,60);const z=Math.abs(a.height-R);b.append("foreignObject").attr("width","60px").attr("height",a.height).attr("style","text-align: center;margin-top:"+z/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+(25+a.width/2)+", "+(z/2+a.padding/2)+")")}else if(v){const R=(a.width-B.width)/2,z=(a.height-B.height)/2;L.attr("transform","translate("+R+", "+z+")")}else{const R=a.width/2,z=a.padding/2;L.attr("transform","translate("+R+", "+z+")")}switch(a.type){case Vu.DEFAULT:JUe(_,a,m);break;case Vu.ROUNDED_RECT:aWe(_,a);break;case Vu.RECT:tWe(_,a);break;case Vu.CIRCLE:_.attr("transform","translate("+a.width/2+", "+ +a.height/2+")"),rWe(_,a);break;case Vu.CLOUD:eWe(_,a);break;case Vu.BANG:nWe(_,a);break;case Vu.HEXAGON:sWe(_,a);break}return Gjt(a.id,b),a.height},positionNode:function(i){const a=Ggt(i.id),f=i.x||0,p=i.y||0;a.attr("transform","translate("+f+","+p+")")},drawEdge:function(a,f,p,v,m){const b=m%(Ujt-1),E=p.x+p.width/2,_=p.y+p.height/2,L=f.x+f.width/2,N=f.y+f.height/2,B=L>E?E+Math.abs(E-L)/2:E-Math.abs(E-L)/2,j=N>_?_+Math.abs(_-N)/2:_-Math.abs(_-N)/2,R=L>E?Math.abs(E-B)/2+E:-Math.abs(E-B)/2+E,z=N>_?Math.abs(_-j)/2+_:-Math.abs(_-j)/2+_;a.append("path").attr("d",p.direction==="TB"||p.direction==="BT"?`M${E},${_} Q${E},${z} ${B},${j} T${L},${N}`:`M${E},${_} Q${R},${_} ${B},${j} T${L},${N}`).attr("class","edge section-edge-"+b+" edge-depth-"+v)}};var Kjt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){function f(y){return f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},f(y)}function p(y,g){if(!(y instanceof g))throw new TypeError("Cannot call a class as a function")}function v(y,g){for(var x=0;xy.length)&&(g=y.length);for(var x=0,T=new Array(g);x"u"?null:window,z=R?R.navigator:null;R&&R.document;var K=f(""),it=f({}),st=f(function(){}),ut=typeof HTMLElement>"u"?"undefined":f(HTMLElement),bt=function(g){return g&&g.instanceString&&yt(g.instanceString)?g.instanceString():null},mt=function(g){return g!=null&&f(g)==K},yt=function(g){return g!=null&&f(g)===st},dt=function(g){return!xt(g)&&(Array.isArray?Array.isArray(g):g!=null&&g instanceof Array)},ht=function(g){return g!=null&&f(g)===it&&!dt(g)&&g.constructor===Object},wt=function(g){return g!=null&&f(g)===it},X=function(g){return g!=null&&f(g)===f(1)&&!isNaN(g)},pt=function(g){return X(g)&&Math.floor(g)===g},U=function(g){if(ut!=="undefined")return g!=null&&g instanceof HTMLElement},xt=function(g){return nt(g)||Ot(g)},nt=function(g){return bt(g)==="collection"&&g._private.single},Ot=function(g){return bt(g)==="collection"&&!g._private.single},Nt=function(g){return bt(g)==="core"},qt=function(g){return bt(g)==="stylesheet"},Ct=function(g){return bt(g)==="event"},Z=function(g){return g==null?!0:!!(g===""||g.match(/^\s+$/))},Tt=function(g){return typeof HTMLElement>"u"?!1:g instanceof HTMLElement},Ht=function(g){return ht(g)&&X(g.x1)&&X(g.x2)&&X(g.y1)&&X(g.y2)},It=function(g){return wt(g)&&yt(g.then)},Ft=function(){return z&&z.userAgent.match(/msie|trident|edge/i)},ke=function(g,x){x||(x=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var D=[],O=0;Ox?1:0},Ne=function(g,x){return-1*oe(g,x)},me=Object.assign!=null?Object.assign.bind(Object):function(y){for(var g=arguments,x=1;x1&&(At-=1),At<1/6?lt+(ft-lt)*6*At:At<1/2?ft:At<2/3?lt+(ft-lt)*(2/3-At)*6:lt}var W=new RegExp("^"+$t+"$").exec(g);if(W){if(T=parseInt(W[1]),T<0?T=(360- -1*T%360)%360:T>360&&(T=T%360),T/=360,A=parseFloat(W[2]),A<0||A>100||(A=A/100,D=parseFloat(W[3]),D<0||D>100)||(D=D/100,O=W[4],O!==void 0&&(O=parseFloat(O),O<0||O>1)))return;if(A===0)$=q=S=Math.round(D*255);else{var et=D<.5?D*(1+A):D+A-D*A,at=2*D-et;$=Math.round(255*G(at,et,T+1/3)),q=Math.round(255*G(at,et,T)),S=Math.round(255*G(at,et,T-1/3))}x=[$,q,S,O]}return x},ya=function(g){var x,T=new RegExp("^"+we+"$").exec(g);if(T){x=[];for(var A=[],D=1;D<=3;D++){var O=T[D];if(O[O.length-1]==="%"&&(A[D]=!0),O=parseFloat(O),A[D]&&(O=O/100*255),O<0||O>255)return;x.push(Math.floor(O))}var $=A[1]||A[2]||A[3],q=A[1]&&A[2]&&A[3];if($&&!q)return;var S=T[4];if(S!==void 0){if(S=parseFloat(S),S<0||S>1)return;x.push(S)}}return x},da=function(g){return ds[g.toLowerCase()]},Oo=function(g){return(dt(g)?g:null)||da(g)||cn(g)||ya(g)||li(g)},ds={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dr=function(g){for(var x=g.map,T=g.keys,A=T.length,D=0;D=g||zt<0||W&&ee>=D}function kt(){var Kt=No();if(At(Kt))return Mt(Kt);$=setTimeout(kt,ft(Kt))}function Mt(Kt){return $=void 0,et&&T?at(Kt):(T=A=void 0,O)}function Dt(){$!==void 0&&clearTimeout($),S=0,T=q=A=$=void 0}function jt(){return $===void 0?O:Mt(No())}function Zt(){var Kt=No(),zt=At(Kt);if(T=arguments,A=this,q=Kt,zt){if($===void 0)return lt(q);if(W)return clearTimeout($),$=setTimeout(kt,g),at(q)}return $===void 0&&($=setTimeout(kt,g)),O}return Zt.cancel=Dt,Zt.flush=jt,Zt}var Wc=xi,Ce=R?R.performance:null,gp=Ce&&Ce.now?function(){return Ce.now()}:function(){return Date.now()},Be=function(){if(R){if(R.requestAnimationFrame)return function(y){R.requestAnimationFrame(y)};if(R.mozRequestAnimationFrame)return function(y){R.mozRequestAnimationFrame(y)};if(R.webkitRequestAnimationFrame)return function(y){R.webkitRequestAnimationFrame(y)};if(R.msRequestAnimationFrame)return function(y){R.msRequestAnimationFrame(y)}}return function(y){y&&setTimeout(function(){y(gp())},1e3/60)}}(),Ff=function(g){return Be(g)},dg=gp,dm=9261,pk=65599,x3=5381,Ml=function(g){for(var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:dm,T=x,A;A=g.next(),!A.done;)T=T*pk+A.value|0;return T},T0=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:dm;return x*pk+g|0},cv=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:x3;return(x<<5)+x+g|0},F5=function(g,x){return g*2097152+x},jb=function(g){return g[0]*2097152+g[1]},B5=function(g,x){return[T0(g[0],x[0]),cv(g[1],x[1])]},l1=function(g,x){var T={value:0,done:!1},A=0,D=g.length,O={next:function(){return A=0&&!(g[A]===x&&(g.splice(A,1),T));A--);},mL=function(g){g.splice(0,g.length)},YP=function(g,x){for(var T=0;T"u"?"undefined":f(Set))!==eY?Set:nY,DT=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(g===void 0||x===void 0||!Nt(g)){bl("An element must have a core reference and parameters set");return}var A=x.group;if(A==null&&(x.data&&x.data.source!=null&&x.data.target!=null?A="edges":A="nodes"),A!=="nodes"&&A!=="edges"){bl("An element must be of type `nodes` or `edges`; you specified `"+A+"`");return}this.length=1,this[0]=this;var D=this._private={cy:g,single:!0,data:x.data||{},position:x.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:A,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!x.selected,selectable:x.selectable===void 0?!0:!!x.selectable,locked:!!x.locked,grabbed:!1,grabbable:x.grabbable===void 0?!0:!!x.grabbable,pannable:x.pannable===void 0?A==="edges":!!x.pannable,active:!1,classes:new z5,animation:{current:[],queue:[]},rscratch:{},scratch:x.scratch||{},edges:[],children:[],parent:x.parent&&x.parent.isNode()?x.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(D.position.x==null&&(D.position.x=0),D.position.y==null&&(D.position.y=0),x.renderedPosition){var O=x.renderedPosition,$=g.pan(),q=g.zoom();D.position={x:(O.x-$.x)/q,y:(O.y-$.y)/q}}var S=[];dt(x.classes)?S=x.classes:mt(x.classes)&&(S=x.classes.split(/\s+/));for(var G=0,W=S.length;GMt?1:0},G=function(kt,Mt,Dt,jt,Zt){var Kt;if(Dt==null&&(Dt=0),Zt==null&&(Zt=T),Dt<0)throw new Error("lo must be non-negative");for(jt==null&&(jt=kt.length);Dtfe;0<=fe?Vt++:Vt--)ee.push(Vt);return ee}.apply(this).reverse(),zt=[],jt=0,Zt=Kt.length;jtge;0<=ge?++ee:--ee)ne.push(O(kt,Dt));return ne},ft=function(kt,Mt,Dt,jt){var Zt,Kt,zt;for(jt==null&&(jt=T),Zt=kt[Dt];Dt>Mt;){if(zt=Dt-1>>1,Kt=kt[zt],jt(Zt,Kt)<0){kt[Dt]=Kt,Dt=zt;continue}break}return kt[Dt]=Zt},At=function(kt,Mt,Dt){var jt,Zt,Kt,zt,ee;for(Dt==null&&(Dt=T),Zt=kt.length,ee=Mt,Kt=kt[Mt],jt=2*Mt+1;jt0;){var Kt=Mt.pop(),zt=At(Kt),ee=Kt.id();if(et[ee]=zt,zt!==1/0)for(var Vt=Kt.neighborhood().intersect(lt),fe=0;fe0)for(En.unshift(Ve);W[Kn];){var Sn=W[Kn];En.unshift(Sn.edge),En.unshift(Sn.node),Dn=Sn.node,Kn=Dn.id()}return $.spawn(En)}}}},aY={kruskal:function(g){g=g||function(Dt){return 1};for(var x=this.byGroup(),T=x.nodes,A=x.edges,D=T.length,O=new Array(D),$=T,q=function(jt){for(var Zt=0;Zt0;){if(Zt(),zt++,jt===G){for(var ee=[],Vt=D,fe=G,ge=kt[fe];ee.unshift(Vt),ge!=null&&ee.unshift(ge),Vt=At[fe],Vt!=null;)fe=Vt.id(),ge=kt[fe];return{found:!0,distance:W[jt],path:this.spawn(ee),steps:zt}}at[jt]=!0;for(var ne=Dt._private.edges,Pe=0;Pege&&(lt[fe]=ge,Mt[fe]=Vt,Dt[fe]=Zt),!D){var ne=Vt*G+ee;!D&<[ne]>ge&&(lt[ne]=ge,Mt[ne]=ee,Dt[ne]=Zt)}}}for(var Pe=0;Pe1&&arguments[1]!==void 0?arguments[1]:O,Ga=Dt(Si),Ys=[],zs=Ga;;){if(zs==null)return x.spawn();var Er=Mt(zs),Qt=Er.edge,jn=Er.pred;if(Ys.unshift(zs[0]),zs.same(Ui)&&Ys.length>0)break;Qt!=null&&Ys.unshift(Qt),zs=jn}return q.spawn(Ys)},Kt=0;Kt=0;G--){var W=S[G],et=W[1],at=W[2];(x[et]===$&&x[at]===q||x[et]===q&&x[at]===$)&&S.splice(G,1)}for(var lt=0;ltA;){var D=Math.floor(Math.random()*x.length);x=gY(D,g,x),T--}return x},pY={kargerStein:function(){var g=this,x=this.byGroup(),T=x.nodes,A=x.edges;A.unmergeBy(function(En){return En.isLoop()});var D=T.length,O=A.length,$=Math.ceil(Math.pow(Math.log(D)/Math.LN2,2)),q=Math.floor(D/dY);if(D<2){bl("At least 2 nodes are required for Karger-Stein algorithm");return}for(var S=[],G=0;G1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=1/0,D=x;D1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=-1/0,D=x;D1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=0,D=0,O=x;O1&&arguments[1]!==void 0?arguments[1]:0,T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:g.length,A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,D=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;A?g=g.slice(x,T):(T0&&g.splice(0,x));for(var $=0,q=g.length-1;q>=0;q--){var S=g[q];O?isFinite(S)||(g[q]=-1/0,$++):g.splice(q,1)}D&&g.sort(function(et,at){return et-at});var G=g.length,W=Math.floor(G/2);return G%2!==0?g[W+1+$]:(g[W-1+$]+g[W+$])/2},xY=function(g){return Math.PI*g/180},NT=function(g,x){return Math.atan2(x,g)-Math.PI/2},xL=Math.log2||function(y){return Math.log(y)/Math.log(2)},ZP=function(g){return g>0?1:g<0?-1:0},E3=function(g,x){return Math.sqrt(T3(g,x))},T3=function(g,x){var T=x.x-g.x,A=x.y-g.y;return T*T+A*A},kY=function(g){for(var x=g.length,T=0,A=0;A=g.x1&&g.y2>=g.y1)return{x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2,w:g.x2-g.x1,h:g.y2-g.y1};if(g.w!=null&&g.h!=null&&g.w>=0&&g.h>=0)return{x1:g.x1,y1:g.y1,x2:g.x1+g.w,y2:g.y1+g.h,w:g.w,h:g.h}}},TY=function(g){return{x1:g.x1,x2:g.x2,w:g.w,y1:g.y1,y2:g.y2,h:g.h}},CY=function(g){g.x1=1/0,g.y1=1/0,g.x2=-1/0,g.y2=-1/0,g.w=0,g.h=0},_Y=function(g,x){g.x1=Math.min(g.x1,x.x1),g.x2=Math.max(g.x2,x.x2),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,x.y1),g.y2=Math.max(g.y2,x.y2),g.h=g.y2-g.y1},SY=function(g,x,T){g.x1=Math.min(g.x1,x),g.x2=Math.max(g.x2,x),g.w=g.x2-g.x1,g.y1=Math.min(g.y1,T),g.y2=Math.max(g.y2,T),g.h=g.y2-g.y1},PT=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g.x1-=x,g.x2+=x,g.y1-=x,g.y2+=x,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},kL=function(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],T,A,D,O;if(x.length===1)T=A=D=O=x[0];else if(x.length===2)T=D=x[0],O=A=x[1];else if(x.length===4){var $=E(x,4);T=$[0],A=$[1],D=$[2],O=$[3]}return g.x1-=O,g.x2+=A,g.y1-=T,g.y2+=D,g.w=g.x2-g.x1,g.h=g.y2-g.y1,g},JP=function(g,x){g.x1=x.x1,g.y1=x.y1,g.x2=x.x2,g.y2=x.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1},EL=function(g,x){return!(g.x1>x.x2||x.x1>g.x2||g.x2x.y2||x.y1>g.y2)},G5=function(g,x,T){return g.x1<=x&&x<=g.x2&&g.y1<=T&&T<=g.y2},AY=function(g,x){return G5(g,x.x,x.y)},tF=function(g,x){return G5(g,x.x1,x.y1)&&G5(g,x.x2,x.y2)},eF=function(g,x,T,A,D,O,$){var q=xk(D,O),S=D/2,G=O/2,W;{var et=T-S+q-$,at=A-G-$,lt=T+S-q+$,ft=at;if(W=vm(g,x,T,A,et,at,lt,ft,!1),W.length>0)return W}{var At=T+S+$,kt=A-G+q-$,Mt=At,Dt=A+G-q+$;if(W=vm(g,x,T,A,At,kt,Mt,Dt,!1),W.length>0)return W}{var jt=T-S+q-$,Zt=A+G+$,Kt=T+S-q+$,zt=Zt;if(W=vm(g,x,T,A,jt,Zt,Kt,zt,!1),W.length>0)return W}{var ee=T-S-$,Vt=A-G+q-$,fe=ee,ge=A+G-q+$;if(W=vm(g,x,T,A,ee,Vt,fe,ge,!1),W.length>0)return W}var ne;{var Pe=T-S+q,pe=A-G+q;if(ne=mk(g,x,T,A,Pe,pe,q+$),ne.length>0&&ne[0]<=Pe&&ne[1]<=pe)return[ne[0],ne[1]]}{var bn=T+S-q,ze=A-G+q;if(ne=mk(g,x,T,A,bn,ze,q+$),ne.length>0&&ne[0]>=bn&&ne[1]<=ze)return[ne[0],ne[1]]}{var Ve=T+S-q,En=A+G-q;if(ne=mk(g,x,T,A,Ve,En,q+$),ne.length>0&&ne[0]>=Ve&&ne[1]>=En)return[ne[0],ne[1]]}{var Dn=T-S+q,Kn=A+G-q;if(ne=mk(g,x,T,A,Dn,Kn,q+$),ne.length>0&&ne[0]<=Dn&&ne[1]>=Kn)return[ne[0],ne[1]]}return[]},LY=function(g,x,T,A,D,O,$){var q=$,S=Math.min(T,D),G=Math.max(T,D),W=Math.min(A,O),et=Math.max(A,O);return S-q<=g&&g<=G+q&&W-q<=x&&x<=et+q},MY=function(g,x,T,A,D,O,$,q,S){var G={x1:Math.min(T,$,D)-S,x2:Math.max(T,$,D)+S,y1:Math.min(A,q,O)-S,y2:Math.max(A,q,O)+S};return!(gG.x2||xG.y2)},IY=function(g,x,T,A){T-=A;var D=x*x-4*g*T;if(D<0)return[];var O=Math.sqrt(D),$=2*g,q=(-x+O)/$,S=(-x-O)/$;return[q,S]},DY=function(g,x,T,A,D){var O=1e-5;g===0&&(g=O),x/=g,T/=g,A/=g;var $,q,S,G,W,et,at,lt;if(q=(3*T-x*x)/9,S=-(27*A)+x*(9*T-2*(x*x)),S/=54,$=q*q*q+S*S,D[1]=0,at=x/3,$>0){W=S+Math.sqrt($),W=W<0?-Math.pow(-W,1/3):Math.pow(W,1/3),et=S-Math.sqrt($),et=et<0?-Math.pow(-et,1/3):Math.pow(et,1/3),D[0]=-at+W+et,at+=(W+et)/2,D[4]=D[2]=-at,at=Math.sqrt(3)*(-et+W)/2,D[3]=at,D[5]=-at;return}if(D[5]=D[3]=0,$===0){lt=S<0?-Math.pow(-S,1/3):Math.pow(S,1/3),D[0]=-at+2*lt,D[4]=D[2]=-(lt+at);return}q=-q,G=q*q*q,G=Math.acos(S/Math.sqrt(G)),lt=2*Math.sqrt(q),D[0]=-at+lt*Math.cos(G/3),D[2]=-at+lt*Math.cos((G+2*Math.PI)/3),D[4]=-at+lt*Math.cos((G+4*Math.PI)/3)},OY=function(g,x,T,A,D,O,$,q){var S=1*T*T-4*T*D+2*T*$+4*D*D-4*D*$+$*$+A*A-4*A*O+2*A*q+4*O*O-4*O*q+q*q,G=1*9*T*D-3*T*T-3*T*$-6*D*D+3*D*$+9*A*O-3*A*A-3*A*q-6*O*O+3*O*q,W=1*3*T*T-6*T*D+T*$-T*g+2*D*D+2*D*g-$*g+3*A*A-6*A*O+A*q-A*x+2*O*O+2*O*x-q*x,et=1*T*D-T*T+T*g-D*g+A*O-A*A+A*x-O*x,at=[];DY(S,G,W,et,at);for(var lt=1e-7,ft=[],At=0;At<6;At+=2)Math.abs(at[At+1])=0&&at[At]<=1&&ft.push(at[At]);ft.push(1),ft.push(0);for(var kt=-1,Mt,Dt,jt,Zt=0;Zt=0?jtS?(g-D)*(g-D)+(x-O)*(x-O):G-et},jd=function(g,x,T){for(var A,D,O,$,q,S=0,G=0;G=g&&g>=O||A<=g&&g<=O)q=(g-A)/(O-A)*($-D)+D,q>x&&S++;else continue;return S%2!==0},lv=function(g,x,T,A,D,O,$,q,S){var G=new Array(T.length),W;q[0]!=null?(W=Math.atan(q[1]/q[0]),q[0]<0?W=W+Math.PI/2:W=-W-Math.PI/2):W=q;for(var et=Math.cos(-W),at=Math.sin(-W),lt=0;lt0){var At=rF(G,-S);ft=nF(At)}else ft=G;return jd(g,x,ft)},PY=function(g,x,T,A,D,O,$){for(var q=new Array(T.length),S=O/2,G=$/2,W=_L(O,$),et=W*W,at=0;at=0&&At<=1&&Mt.push(At),kt>=0&&kt<=1&&Mt.push(kt),Mt.length===0)return[];var Dt=Mt[0]*q[0]+g,jt=Mt[0]*q[1]+x;if(Mt.length>1){if(Mt[0]==Mt[1])return[Dt,jt];var Zt=Mt[1]*q[0]+g,Kt=Mt[1]*q[1]+x;return[Dt,jt,Zt,Kt]}else return[Dt,jt]},TL=function(g,x,T){return x<=g&&g<=T||T<=g&&g<=x?g:g<=x&&x<=T||T<=x&&x<=g?x:T},vm=function(g,x,T,A,D,O,$,q,S){var G=g-D,W=T-g,et=$-D,at=x-O,lt=A-x,ft=q-O,At=et*at-ft*G,kt=W*at-lt*G,Mt=ft*W-et*lt;if(Mt!==0){var Dt=At/Mt,jt=kt/Mt,Zt=.001,Kt=0-Zt,zt=1+Zt;return Kt<=Dt&&Dt<=zt&&Kt<=jt&&jt<=zt?[g+Dt*W,x+Dt*lt]:S?[g+Dt*W,x+Dt*lt]:[]}else return At===0||kt===0?TL(g,T,$)===$?[$,q]:TL(g,T,D)===D?[D,O]:TL(D,$,T)===T?[T,A]:[]:[]},yk=function(g,x,T,A,D,O,$,q){var S=[],G,W=new Array(T.length),et=!0;O==null&&(et=!1);var at;if(et){for(var lt=0;lt0){var ft=rF(W,-q);at=nF(ft)}else at=W}else at=T;for(var At,kt,Mt,Dt,jt=0;jt2){for(var ze=[S[0],S[1]],Ve=Math.pow(ze[0]-g,2)+Math.pow(ze[1]-x,2),En=1;EnG&&(G=jt)},get:function(Dt){return S[Dt]}},et=0;et<$.length;et++){var at=$[et],lt=at.id();T?q[lt]=at.outgoers().nodes():q[lt]=at.openNeighborhood().nodes(),W.set(lt,0)}for(var ft=function(Dt){for(var jt=$[Dt].id(),Zt=[],Kt={},zt={},ee={},Vt=new vk(function(ur,tr){return ee[ur]-ee[tr]}),fe=0;fe<$.length;fe++){var ge=$[fe].id();Kt[ge]=[],zt[ge]=0,ee[ge]=1/0}for(zt[jt]=1,ee[jt]=0,Vt.push(jt);!Vt.empty();){var ne=Vt.pop();if(Zt.push(ne),D)for(var Pe=0;Pe0?ze=bn.edgesTo(pe)[0]:ze=pe.edgesTo(bn)[0];var Ve=A(ze);pe=pe.id(),ee[pe]>ee[ne]+Ve&&(ee[pe]=ee[ne]+Ve,Vt.nodes.indexOf(pe)<0?Vt.push(pe):Vt.updateItem(pe),zt[pe]=0,Kt[pe]=[]),ee[pe]==ee[ne]+Ve&&(zt[pe]=zt[pe]+zt[ne],Kt[pe].push(ne))}else for(var En=0;En0;){for(var Wn=Zt.pop(),rr=0;rr0&&$.push(T[q]);$.length!==0&&D.push(A.collection($))}return D},XY=function(g,x){for(var T=0;T5&&arguments[5]!==void 0?arguments[5]:JY,$=A,q,S,G=0;G=2?kk(g,x,T,0,dF,tX):kk(g,x,T,0,fF)},squaredEuclidean:function(g,x,T){return kk(g,x,T,0,dF)},manhattan:function(g,x,T){return kk(g,x,T,0,fF)},max:function(g,x,T){return kk(g,x,T,-1/0,eX)}};W5["squared-euclidean"]=W5.squaredEuclidean,W5.squaredeuclidean=W5.squaredEuclidean;function BT(y,g,x,T,A,D){var O;return yt(y)?O=y:O=W5[y]||W5.euclidean,g===0&&yt(y)?O(A,D):O(g,x,T,A,D)}var nX=Bf({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),LL=function(g){return nX(g)},RT=function(g,x,T,A,D){var O=D!=="kMedoids",$=O?function(W){return T[W]}:function(W){return A[W](T)},q=function(et){return A[et](x)},S=T,G=x;return BT(g,A.length,$,q,S,G)},ML=function(g,x,T){for(var A=T.length,D=new Array(A),O=new Array(A),$=new Array(x),q=null,S=0;ST)return!1}return!0},sX=function(g,x,T){for(var A=0;A$&&($=x[S][G],q=G);D[q].push(g[S])}for(var W=0;W=D.threshold||D.mode==="dendrogram"&&g.length===1)return!1;var lt=x[O],ft=x[A[O]],At;D.mode==="dendrogram"?At={left:lt,right:ft,key:lt.key}:At={value:lt.value.concat(ft.value),key:lt.key},g[lt.index]=At,g.splice(ft.index,1),x[lt.key]=At;for(var kt=0;ktT[ft.key][Mt.key]&&(q=T[ft.key][Mt.key])):D.linkage==="max"?(q=T[lt.key][Mt.key],T[lt.key][Mt.key]0&&A.push(D);return A},xF=function(g,x,T){for(var A=[],D=0;D$&&(O=S,$=x[D*g+S])}O>0&&A.push(O)}for(var G=0;GS&&(q=G,S=W)}T[D]=O[q]}return A=xF(g,x,T),A},kF=function(g){for(var x=this.cy(),T=this.nodes(),A=mX(g),D={},O=0;O=ge?(ne=ge,ge=pe,Pe=bn):pe>ne&&(ne=pe);for(var ze=0;ze<$;ze++)W[fe*$+ze]=(1-A.damping)*(S[fe*$+ze]-ge)+A.damping*Dt[ze];W[fe*$+Pe]=(1-A.damping)*(S[fe*$+Pe]-ne)+A.damping*Dt[Pe]}for(var Ve=0;Ve<$;Ve++){for(var En=0,Dn=0;Dn<$;Dn++)Dt[Dn]=et[Dn*$+Ve],jt[Dn]=Math.max(0,W[Dn*$+Ve]),En+=jt[Dn];En-=jt[Ve],jt[Ve]=W[Ve*$+Ve],En+=jt[Ve];for(var Kn=0;Kn<$;Kn++)et[Kn*$+Ve]=(1-A.damping)*Math.min(0,En-jt[Kn])+A.damping*Dt[Kn];et[Ve*$+Ve]=(1-A.damping)*(En-jt[Ve])+A.damping*Dt[Ve]}for(var Sn=0,Wn=0;Wn<$;Wn++){var rr=et[Wn*$+Wn]+W[Wn*$+Wn]>0?1:0;zt[Vt%A.minIterations*$+Wn]=rr,Sn+=rr}if(Sn>0&&(Vt>=A.minIterations-1||Vt==A.maxIterations-1)){for(var vr=0,ur=0;ur<$;ur++){Zt[ur]=0;for(var tr=0;tr1||Kt>1)&&($=!0),W[Dt]=[],Mt.outgoers().forEach(function(ee){ee.isEdge()&&W[Dt].push(ee.id())})}else et[Dt]=[void 0,Mt.target().id()]}):O.forEach(function(Mt){var Dt=Mt.id();if(Mt.isNode()){var jt=Mt.degree(!0);jt%2&&(q?S?$=!0:S=Dt:q=Dt),W[Dt]=[],Mt.connectedEdges().forEach(function(Zt){return W[Dt].push(Zt.id())})}else et[Dt]=[Mt.source().id(),Mt.target().id()]});var at={found:!1,trail:void 0};if($)return at;if(S&&q)if(D){if(G&&S!=G)return at;G=S}else{if(G&&S!=G&&q!=G)return at;G||(G=S)}else G||(G=O[0].id());var lt=function(Dt){for(var jt=Dt,Zt=[Dt],Kt,zt,ee;W[jt].length;)Kt=W[jt].shift(),zt=et[Kt][0],ee=et[Kt][1],jt!=ee?(W[ee]=W[ee].filter(function(Vt){return Vt!=Kt}),jt=ee):!D&&jt!=zt&&(W[zt]=W[zt].filter(function(Vt){return Vt!=Kt}),jt=zt),Zt.unshift(Kt),Zt.unshift(jt);return Zt},ft=[],At=[];for(At=lt(G);At.length!=1;)W[At[0]].length==0?(ft.unshift(O.getElementById(At.shift())),ft.unshift(O.getElementById(At.shift()))):At=lt(At.shift()).concat(At);ft.unshift(O.getElementById(At.shift()));for(var kt in W)if(W[kt].length)return at;return at.found=!0,at.trail=this.spawn(ft,!0),at}},$T=function(){var g=this,x={},T=0,A=0,D=[],O=[],$={},q=function(et,at){for(var lt=O.length-1,ft=[],At=g.spawn();O[lt].x!=et||O[lt].y!=at;)ft.push(O.pop().edge),lt--;ft.push(O.pop().edge),ft.forEach(function(kt){var Mt=kt.connectedNodes().intersection(g);At.merge(kt),Mt.forEach(function(Dt){var jt=Dt.id(),Zt=Dt.connectedEdges().intersection(g);At.merge(Dt),x[jt].cutVertex?At.merge(Zt.filter(function(Kt){return Kt.isLoop()})):At.merge(Zt)})}),D.push(At)},S=function W(et,at,lt){et===lt&&(A+=1),x[at]={id:T,low:T++,cutVertex:!1};var ft=g.getElementById(at).connectedEdges().intersection(g);if(ft.size()===0)D.push(g.spawn(g.getElementById(at)));else{var At,kt,Mt,Dt;ft.forEach(function(jt){At=jt.source().id(),kt=jt.target().id(),Mt=At===at?kt:At,Mt!==lt&&(Dt=jt.id(),$[Dt]||($[Dt]=!0,O.push({x:at,y:Mt,edge:jt})),Mt in x?x[at].low=Math.min(x[at].low,x[Mt].id):(W(et,Mt,at),x[at].low=Math.min(x[at].low,x[Mt].low),x[at].id<=x[Mt].low&&(x[at].cutVertex=!0,q(at,Mt))))})}};g.forEach(function(W){if(W.isNode()){var et=W.id();et in x||(A=0,S(et,et),x[et].cutVertex=A>1)}});var G=Object.keys(x).filter(function(W){return x[W].cutVertex}).map(function(W){return g.getElementById(W)});return{cut:g.spawn(G),components:D}},SX={hopcroftTarjanBiconnected:$T,htbc:$T,htb:$T,hopcroftTarjanBiconnectedComponents:$T},zT=function(){var g=this,x={},T=0,A=[],D=[],O=g.spawn(g),$=function q(S){D.push(S),x[S]={index:T,low:T++,explored:!1};var G=g.getElementById(S).connectedEdges().intersection(g);if(G.forEach(function(ft){var At=ft.target().id();At!==S&&(At in x||q(At),x[At].explored||(x[S].low=Math.min(x[S].low,x[At].low)))}),x[S].index===x[S].low){for(var W=g.spawn();;){var et=D.pop();if(W.merge(g.getElementById(et)),x[et].low=x[S].index,x[et].explored=!0,et===S)break}var at=W.edgesWith(W),lt=W.merge(at);A.push(lt),O=O.difference(lt)}};return g.forEach(function(q){if(q.isNode()){var S=q.id();S in x||$(S)}}),{cut:O,components:A}},AX={tarjanStronglyConnected:zT,tsc:zT,tscc:zT,tarjanStronglyConnectedComponents:zT},EF={};[bk,sY,aY,cY,lY,fY,pY,$Y,V5,U5,AL,ZY,hX,vX,TX,_X,SX,AX].forEach(function(y){me(EF,y)});/*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) Licensed under The MIT License (http://opensource.org/licenses/MIT) -*/var TF=0,_F=1,CF=2,hv=function y(g){if(!(this instanceof y))return new y(g);this.id="Thenable/1.0.7",this.state=TF,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof g=="function"&&g.call(this,this.fulfill.bind(this),this.reject.bind(this))};hv.prototype={fulfill:function(g){return SF(this,_F,"fulfillValue",g)},reject:function(g){return SF(this,CF,"rejectReason",g)},then:function(g,x){var T=this,L=new hv;return T.onFulfilled.push(MF(g,L,"fulfill")),T.onRejected.push(MF(x,L,"reject")),AF(T),L.proxy}};var SF=function(g,x,T,L){return g.state===TF&&(g.state=x,g[T]=L,AF(g)),g},AF=function(g){g.state===_F?LF(g,"onFulfilled",g.fulfillValue):g.state===CF&&LF(g,"onRejected",g.rejectReason)},LF=function(g,x,T){if(g[x].length!==0){var L=g[x];g[x]=[];var I=function(){for(var $=0;$0}},clearQueue:function(){return function(){var x=this,T=x.length!==void 0,L=T?x:[x],I=this._private.cy||this;if(!I.styleEnabled())return this;for(var O=0;O-1}var DQ=MQ;function IQ(y,g){var x=this.__data__,T=V9(x,y);return T<0?(++this.size,x.push([y,g])):x[T][1]=g,this}var OQ=IQ;function Y5(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g-1&&y%1==0&&y0&&this.spawn(L).updateStyle().emit("class"),x},addClass:function(g){return this.toggleClass(g,!0)},hasClass:function(g){var x=this[0];return x!=null&&x._private.classes.has(g)},toggleClass:function(g,x){mt(g)||(g=g.match(/\S+/g)||[]);for(var T=this,L=x===void 0,I=[],O=0,$=T.length;O<$;O++)for(var z=T[O],S=z._private.classes,V=!1,U=0;U0&&this.spawn(I).updateStyle().emit("class"),T},removeClass:function(g){return this.toggleClass(g,!1)},flashClass:function(g,x){var T=this;if(x==null)x=250;else if(x===0)return T;return T.addClass(g),setTimeout(function(){T.removeClass(g)},x),T}};K9.className=K9.classNames=K9.classes;var oc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Ae,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};oc.variable="(?:[\\w-.]|(?:\\\\"+oc.metaChar+"))+",oc.className="(?:[\\w-]|(?:\\\\"+oc.metaChar+"))+",oc.value=oc.string+"|"+oc.number,oc.id=oc.variable,function(){var y,g,x;for(y=oc.comparatorOp.split("|"),x=0;x=0)&&g!=="="&&(oc.comparatorOp+="|\\!"+g)}();var Zc=function(){return{checks:[]}},Qi={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},FL=[{selector:":selected",matches:function(g){return g.selected()}},{selector:":unselected",matches:function(g){return!g.selected()}},{selector:":selectable",matches:function(g){return g.selectable()}},{selector:":unselectable",matches:function(g){return!g.selectable()}},{selector:":locked",matches:function(g){return g.locked()}},{selector:":unlocked",matches:function(g){return!g.locked()}},{selector:":visible",matches:function(g){return g.visible()}},{selector:":hidden",matches:function(g){return!g.visible()}},{selector:":transparent",matches:function(g){return g.transparent()}},{selector:":grabbed",matches:function(g){return g.grabbed()}},{selector:":free",matches:function(g){return!g.grabbed()}},{selector:":removed",matches:function(g){return g.removed()}},{selector:":inside",matches:function(g){return!g.removed()}},{selector:":grabbable",matches:function(g){return g.grabbable()}},{selector:":ungrabbable",matches:function(g){return!g.grabbable()}},{selector:":animated",matches:function(g){return g.animated()}},{selector:":unanimated",matches:function(g){return!g.animated()}},{selector:":parent",matches:function(g){return g.isParent()}},{selector:":childless",matches:function(g){return g.isChildless()}},{selector:":child",matches:function(g){return g.isChild()}},{selector:":orphan",matches:function(g){return g.isOrphan()}},{selector:":nonorphan",matches:function(g){return g.isChild()}},{selector:":compound",matches:function(g){return g.isNode()?g.isParent():g.source().isParent()||g.target().isParent()}},{selector:":loop",matches:function(g){return g.isLoop()}},{selector:":simple",matches:function(g){return g.isSimple()}},{selector:":active",matches:function(g){return g.active()}},{selector:":inactive",matches:function(g){return!g.active()}},{selector:":backgrounding",matches:function(g){return g.backgrounding()}},{selector:":nonbackgrounding",matches:function(g){return!g.backgrounding()}}].sort(function(y,g){return ye(y.selector,g.selector)}),OZ=function(){for(var y={},g,x=0;x0&&V.edgeCount>0)return no("The selector `"+g+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(V.edgeCount>1)return no("The selector `"+g+"` is invalid because it uses multiple edge selectors"),!1;V.edgeCount===1&&no("The selector `"+g+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},jZ=function(){if(this.toStringCache!=null)return this.toStringCache;for(var g=function(V){return V??""},x=function(V){return Tt(V)?'"'+V+'"':g(V)},T=function(V){return" "+V+" "},L=function(V,U){var et=V.type,at=V.value;switch(et){case Qi.GROUP:{var lt=g(at);return lt.substring(0,lt.length-1)}case Qi.DATA_COMPARE:{var gt=V.field,Lt=V.operator;return"["+gt+T(g(Lt))+x(at)+"]"}case Qi.DATA_BOOL:{var Et=V.operator,Dt=V.field;return"["+g(Et)+Dt+"]"}case Qi.DATA_EXIST:{var It=V.field;return"["+It+"]"}case Qi.META_COMPARE:{var zt=V.operator,te=V.field;return"[["+te+T(g(zt))+x(at)+"]]"}case Qi.STATE:return at;case Qi.ID:return"#"+at;case Qi.CLASS:return"."+at;case Qi.PARENT:case Qi.CHILD:return I(V.parent,U)+T(">")+I(V.child,U);case Qi.ANCESTOR:case Qi.DESCENDANT:return I(V.ancestor,U)+" "+I(V.descendant,U);case Qi.COMPOUND_SPLIT:{var Xt=I(V.left,U),Ht=I(V.subject,U),ie=I(V.right,U);return Xt+(Xt.length>0?" ":"")+Ht+ie}case Qi.TRUE:return""}},I=function(V,U){return V.checks.reduce(function(et,at,lt){return et+(U===V&<===0?"$":"")+L(at,U)},"")},O="",$=0;$1&&$=0&&(x=x.replace("!",""),U=!0),x.indexOf("@")>=0&&(x=x.replace("@",""),V=!0),(I||$||V)&&(z=!I&&!O?"":""+g,S=""+T),V&&(g=z=z.toLowerCase(),T=S=S.toLowerCase()),x){case"*=":L=z.indexOf(S)>=0;break;case"$=":L=z.indexOf(S,z.length-S.length)>=0;break;case"^=":L=z.indexOf(S)===0;break;case"=":L=g===T;break;case">":et=!0,L=g>T;break;case">=":et=!0,L=g>=T;break;case"<":et=!0,L=g0;){var V=L.shift();g(V),I.add(V.id()),$&&T(L,I,V)}return y}function kk(y,g,x){if(x.isParent())for(var T=x._private.children,L=0;L1&&arguments[1]!==void 0?arguments[1]:!0;return Y9(this,y,g,kk)};function YF(y,g,x){if(x.isChild()){var T=x._private.parent;g.has(T.id())||y.push(T)}}Z5.forEachUp=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Y9(this,y,g,YF)};function WZ(y,g,x){YF(y,g,x),kk(y,g,x)}Z5.forEachUpAndDown=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Y9(this,y,g,WZ)},Z5.ancestors=Z5.parents;var Ek,XF;Ek=XF={data:Ic.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Ic.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Ic.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ic.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Ic.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Ic.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var g=this[0];if(g)return g._private.data.id}},Ek.attr=Ek.data,Ek.removeAttr=Ek.removeData;var KZ=XF,X9={};function J5(y){return function(g){var x=this;if(g===void 0&&(g=!0),x.length!==0)if(x.isNode()&&!x.removed()){for(var T=0,L=x[0],I=L._private.edges,O=0;Og}),minIndegree:t6("indegree",function(y,g){return yg}),minOutdegree:t6("outdegree",function(y,g){return yg})}),fn(X9,{totalDegree:function(g){for(var x=0,T=this.nodes(),L=0;L0,et=U;U&&(V=V[0]);var at=et?V.position():{x:0,y:0};x!==void 0?S.position(g,x+at[g]):I!==void 0&&S.position({x:I.x+at.x,y:I.y+at.y})}else{var lt=T.position(),gt=$?T.parent():null,Lt=gt&>.length>0,Et=Lt;Lt&&(gt=gt[0]);var Dt=Et?gt.position():{x:0,y:0};return I={x:lt.x-Dt.x,y:lt.y-Dt.y},g===void 0?I:I[g]}else if(!O)return;return this}},yp.modelPosition=yp.point=yp.position,yp.modelPositions=yp.points=yp.positions,yp.renderedPoint=yp.renderedPosition,yp.relativePoint=yp.relativePosition;var JF=QF,e6,Vb;e6=Vb={},Vb.renderedBoundingBox=function(y){var g=this.boundingBox(y),x=this.cy(),T=x.zoom(),L=x.pan(),I=g.x1*T+L.x,O=g.x2*T+L.x,$=g.y1*T+L.y,z=g.y2*T+L.y;return{x1:I,x2:O,y1:$,y2:z,w:O-I,h:z-$}},Vb.dirtyCompoundBoundsCache=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();return!g.styleEnabled()||!g.hasCompoundNodes()?this:(this.forEachUp(function(x){if(x.isParent()){var T=x._private;T.compoundBoundsClean=!1,T.bbCache=null,y||x.emitAndNotify("bounds")}}),this)},Vb.updateCompoundBounds=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();if(!g.styleEnabled()||!g.hasCompoundNodes())return this;if(!y&&g.batching())return this;function x(O){if(!O.isParent())return;var $=O._private,z=O.children(),S=O.pstyle("compound-sizing-wrt-labels").value==="include",V={width:{val:O.pstyle("min-width").pfValue,left:O.pstyle("min-width-bias-left"),right:O.pstyle("min-width-bias-right")},height:{val:O.pstyle("min-height").pfValue,top:O.pstyle("min-height-bias-top"),bottom:O.pstyle("min-height-bias-bottom")}},U=z.boundingBox({includeLabels:S,includeOverlays:!1,useCache:!1}),et=$.position;(U.w===0||U.h===0)&&(U={w:O.pstyle("width").pfValue,h:O.pstyle("height").pfValue},U.x1=et.x-U.w/2,U.x2=et.x+U.w/2,U.y1=et.y-U.h/2,U.y2=et.y+U.h/2);function at(Ut,fe,ge){var se=0,Ne=0,pe=fe+ge;return Ut>0&&pe>0&&(se=fe/pe*Ut,Ne=ge/pe*Ut),{biasDiff:se,biasComplementDiff:Ne}}function lt(Ut,fe,ge,se){if(ge.units==="%")switch(se){case"width":return Ut>0?ge.pfValue*Ut:0;case"height":return fe>0?ge.pfValue*fe:0;case"average":return Ut>0&&fe>0?ge.pfValue*(Ut+fe)/2:0;case"min":return Ut>0&&fe>0?Ut>fe?ge.pfValue*fe:ge.pfValue*Ut:0;case"max":return Ut>0&&fe>0?Ut>fe?ge.pfValue*Ut:ge.pfValue*fe:0;default:return 0}else return ge.units==="px"?ge.pfValue:0}var gt=V.width.left.value;V.width.left.units==="px"&&V.width.val>0&&(gt=gt*100/V.width.val);var Lt=V.width.right.value;V.width.right.units==="px"&&V.width.val>0&&(Lt=Lt*100/V.width.val);var Et=V.height.top.value;V.height.top.units==="px"&&V.height.val>0&&(Et=Et*100/V.height.val);var Dt=V.height.bottom.value;V.height.bottom.units==="px"&&V.height.val>0&&(Dt=Dt*100/V.height.val);var It=at(V.width.val-U.w,gt,Lt),zt=It.biasDiff,te=It.biasComplementDiff,Xt=at(V.height.val-U.h,Et,Dt),Ht=Xt.biasDiff,ie=Xt.biasComplementDiff;$.autoPadding=lt(U.w,U.h,O.pstyle("padding"),O.pstyle("padding-relative-to").value),$.autoWidth=Math.max(U.w,V.width.val),et.x=(-zt+U.x1+U.x2+te)/2,$.autoHeight=Math.max(U.h,V.height.val),et.y=(-Ht+U.y1+U.y2+ie)/2}for(var T=0;Tg.x2?L:g.x2,g.y1=Tg.y2?I:g.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1)},A3=function(g,x){return x==null?g:xp(g,x.x1,x.y1,x.x2,x.y2)},_k=function(g,x,T){return wp(g,x,T)},Q9=function(g,x,T){if(!x.cy().headless()){var L=x._private,I=L.rstyle,O=I.arrowWidth/2,$=x.pstyle(T+"-arrow-shape").value,z,S;if($!=="none"){T==="source"?(z=I.srcX,S=I.srcY):T==="target"?(z=I.tgtX,S=I.tgtY):(z=I.midX,S=I.midY);var V=L.arrowBounds=L.arrowBounds||{},U=V[T]=V[T]||{};U.x1=z-O,U.y1=S-O,U.x2=z+O,U.y2=S+O,U.w=U.x2-U.x1,U.h=U.y2-U.y1,P9(U,1),xp(g,U.x1,U.y1,U.x2,U.y2)}}},tB=function(g,x,T){if(!x.cy().headless()){var L;T?L=T+"-":L="";var I=x._private,O=I.rstyle,$=x.pstyle(L+"label").strValue;if($){var z=x.pstyle("text-halign"),S=x.pstyle("text-valign"),V=_k(O,"labelWidth",T),U=_k(O,"labelHeight",T),et=_k(O,"labelX",T),at=_k(O,"labelY",T),lt=x.pstyle(L+"text-margin-x").pfValue,gt=x.pstyle(L+"text-margin-y").pfValue,Lt=x.isEdge(),Et=x.pstyle(L+"text-rotation"),Dt=x.pstyle("text-outline-width").pfValue,It=x.pstyle("text-border-width").pfValue,zt=It/2,te=x.pstyle("text-background-padding").pfValue,Xt=2,Ht=U,ie=V,Ut=ie/2,fe=Ht/2,ge,se,Ne,pe;if(Lt)ge=et-Ut,se=et+Ut,Ne=at-fe,pe=at+fe;else{switch(z.value){case"left":ge=et-ie,se=et;break;case"center":ge=et-Ut,se=et+Ut;break;case"right":ge=et,se=et+ie;break}switch(S.value){case"top":Ne=at-Ht,pe=at;break;case"center":Ne=at-fe,pe=at+fe;break;case"bottom":Ne=at,pe=at+Ht;break}}ge+=lt-Math.max(Dt,zt)-te-Xt,se+=lt+Math.max(Dt,zt)+te+Xt,Ne+=gt-Math.max(Dt,zt)-te-Xt,pe+=gt+Math.max(Dt,zt)+te+Xt;var gn=T||"main",je=I.labelBounds,Ge=je[gn]=je[gn]||{};Ge.x1=ge,Ge.y1=Ne,Ge.x2=se,Ge.y2=pe,Ge.w=se-ge,Ge.h=pe-Ne;var xn=Lt&&Et.strValue==="autorotate",Dn=Et.pfValue!=null&&Et.pfValue!==0;if(xn||Dn){var Xn=xn?_k(I.rstyle,"labelAngle",T):Et.pfValue,Cn=Math.cos(Xn),Yn=Math.sin(Xn),rr=(ge+se)/2,wr=(Ne+pe)/2;if(!Lt){switch(z.value){case"left":rr=se;break;case"right":rr=ge;break}switch(S.value){case"top":wr=pe;break;case"bottom":wr=Ne;break}}var ur=function(La,Di){return La=La-rr,Di=Di-wr,{x:La*Cn-Di*Yn+rr,y:La*Yn+Di*Cn+wr}},er=ur(ge,Ne),bn=ur(ge,pe),pr=ur(se,Ne),fr=ur(se,pe);ge=Math.min(er.x,bn.x,pr.x,fr.x),se=Math.max(er.x,bn.x,pr.x,fr.x),Ne=Math.min(er.y,bn.y,pr.y,fr.y),pe=Math.max(er.y,bn.y,pr.y,fr.y)}var ri=gn+"Rot",_i=je[ri]=je[ri]||{};_i.x1=ge,_i.y1=Ne,_i.x2=se,_i.y2=pe,_i.w=se-ge,_i.h=pe-Ne,xp(g,ge,Ne,se,pe),xp(I.labelBounds.all,ge,Ne,se,pe)}return g}},YZ=function(g,x){var T=g._private.cy,L=T.styleEnabled(),I=T.headless(),O=Rd(),$=g._private,z=g.isNode(),S=g.isEdge(),V,U,et,at,lt,gt,Lt=$.rstyle,Et=z&&L?g.pstyle("bounds-expansion").pfValue:[0],Dt=function(_s){return _s.pstyle("display").value!=="none"},It=!L||Dt(g)&&(!S||Dt(g.source())&&Dt(g.target()));if(It){var zt=0,te=0;L&&x.includeOverlays&&(zt=g.pstyle("overlay-opacity").value,zt!==0&&(te=g.pstyle("overlay-padding").value));var Xt=0,Ht=0;L&&x.includeUnderlays&&(Xt=g.pstyle("underlay-opacity").value,Xt!==0&&(Ht=g.pstyle("underlay-padding").value));var ie=Math.max(te,Ht),Ut=0,fe=0;if(L&&(Ut=g.pstyle("width").pfValue,fe=Ut/2),z&&x.includeNodes){var ge=g.position();lt=ge.x,gt=ge.y;var se=g.outerWidth(),Ne=se/2,pe=g.outerHeight(),gn=pe/2;V=lt-Ne,U=lt+Ne,et=gt-gn,at=gt+gn,xp(O,V,et,U,at)}else if(S&&x.includeEdges)if(L&&!I){var je=g.pstyle("curve-style").strValue;if(V=Math.min(Lt.srcX,Lt.midX,Lt.tgtX),U=Math.max(Lt.srcX,Lt.midX,Lt.tgtX),et=Math.min(Lt.srcY,Lt.midY,Lt.tgtY),at=Math.max(Lt.srcY,Lt.midY,Lt.tgtY),V-=fe,U+=fe,et-=fe,at+=fe,xp(O,V,et,U,at),je==="haystack"){var Ge=Lt.haystackPts;if(Ge&&Ge.length===2){if(V=Ge[0].x,et=Ge[0].y,U=Ge[1].x,at=Ge[1].y,V>U){var xn=V;V=U,U=xn}if(et>at){var Dn=et;et=at,at=Dn}xp(O,V-fe,et-fe,U+fe,at+fe)}}else if(je==="bezier"||je==="unbundled-bezier"||je==="segments"||je==="taxi"){var Xn;switch(je){case"bezier":case"unbundled-bezier":Xn=Lt.bezierPts;break;case"segments":case"taxi":Xn=Lt.linePts;break}if(Xn!=null)for(var Cn=0;CnU){var bn=V;V=U,U=bn}if(et>at){var pr=et;et=at,at=pr}V-=fe,U+=fe,et-=fe,at+=fe,xp(O,V,et,U,at)}if(L&&x.includeEdges&&S&&(Q9(O,g,"mid-source"),Q9(O,g,"mid-target"),Q9(O,g,"source"),Q9(O,g,"target")),L){var fr=g.pstyle("ghost").value==="yes";if(fr){var ri=g.pstyle("ghost-offset-x").pfValue,_i=g.pstyle("ghost-offset-y").pfValue;xp(O,O.x1+ri,O.y1+_i,O.x2+ri,O.y2+_i)}}var ia=$.bodyBounds=$.bodyBounds||{};JP(ia,O),kL(ia,Et),P9(ia,1),L&&(V=O.x1,U=O.x2,et=O.y1,at=O.y2,xp(O,V-ie,et-ie,U+ie,at+ie));var La=$.overlayBounds=$.overlayBounds||{};JP(La,O),kL(La,Et),P9(La,1);var Di=$.labelBounds=$.labelBounds||{};Di.all!=null?SY(Di.all):Di.all=Rd(),L&&x.includeLabels&&(x.includeMainLabels&&tB(O,g,null),S&&(x.includeSourceLabels&&tB(O,g,"source"),x.includeTargetLabels&&tB(O,g,"target")))}return O.x1=_0(O.x1),O.y1=_0(O.y1),O.x2=_0(O.x2),O.y2=_0(O.y2),O.w=_0(O.x2-O.x1),O.h=_0(O.y2-O.y1),O.w>0&&O.h>0&&It&&(kL(O,Et),P9(O,1)),O},eB=function(g){var x=0,T=function(O){return(O?1:0)<0}},clearQueue:function(){return function(){var x=this,T=x.length!==void 0,A=T?x:[x],D=this._private.cy||this;if(!D.styleEnabled())return this;for(var O=0;O-1}var LQ=AQ;function MQ(y,g){var x=this.__data__,T=GT(x,y);return T<0?(++this.size,x.push([y,g])):x[T][1]=g,this}var IQ=MQ;function X5(y){var g=-1,x=y==null?0:y.length;for(this.clear();++g-1&&y%1==0&&y0&&this.spawn(A).updateStyle().emit("class"),x},addClass:function(g){return this.toggleClass(g,!0)},hasClass:function(g){var x=this[0];return x!=null&&x._private.classes.has(g)},toggleClass:function(g,x){dt(g)||(g=g.match(/\S+/g)||[]);for(var T=this,A=x===void 0,D=[],O=0,$=T.length;O<$;O++)for(var q=T[O],S=q._private.classes,G=!1,W=0;W0&&this.spawn(D).updateStyle().emit("class"),T},removeClass:function(g){return this.toggleClass(g,!1)},flashClass:function(g,x){var T=this;if(x==null)x=250;else if(x===0)return T;return T.addClass(g),setTimeout(function(){T.removeClass(g)},x),T}};KT.className=KT.classNames=KT.classes;var tc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Ke,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};tc.variable="(?:[\\w-.]|(?:\\\\"+tc.metaChar+"))+",tc.className="(?:[\\w-]|(?:\\\\"+tc.metaChar+"))+",tc.value=tc.string+"|"+tc.number,tc.id=tc.variable,function(){var y,g,x;for(y=tc.comparatorOp.split("|"),x=0;x=0)&&g!=="="&&(tc.comparatorOp+="|\\!"+g)}();var Kc=function(){return{checks:[]}},zi={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},FL=[{selector:":selected",matches:function(g){return g.selected()}},{selector:":unselected",matches:function(g){return!g.selected()}},{selector:":selectable",matches:function(g){return g.selectable()}},{selector:":unselectable",matches:function(g){return!g.selectable()}},{selector:":locked",matches:function(g){return g.locked()}},{selector:":unlocked",matches:function(g){return!g.locked()}},{selector:":visible",matches:function(g){return g.visible()}},{selector:":hidden",matches:function(g){return!g.visible()}},{selector:":transparent",matches:function(g){return g.transparent()}},{selector:":grabbed",matches:function(g){return g.grabbed()}},{selector:":free",matches:function(g){return!g.grabbed()}},{selector:":removed",matches:function(g){return g.removed()}},{selector:":inside",matches:function(g){return!g.removed()}},{selector:":grabbable",matches:function(g){return g.grabbable()}},{selector:":ungrabbable",matches:function(g){return!g.grabbable()}},{selector:":animated",matches:function(g){return g.animated()}},{selector:":unanimated",matches:function(g){return!g.animated()}},{selector:":parent",matches:function(g){return g.isParent()}},{selector:":childless",matches:function(g){return g.isChildless()}},{selector:":child",matches:function(g){return g.isChild()}},{selector:":orphan",matches:function(g){return g.isOrphan()}},{selector:":nonorphan",matches:function(g){return g.isChild()}},{selector:":compound",matches:function(g){return g.isNode()?g.isParent():g.source().isParent()||g.target().isParent()}},{selector:":loop",matches:function(g){return g.isLoop()}},{selector:":simple",matches:function(g){return g.isSimple()}},{selector:":active",matches:function(g){return g.active()}},{selector:":inactive",matches:function(g){return!g.active()}},{selector:":backgrounding",matches:function(g){return g.backgrounding()}},{selector:":nonbackgrounding",matches:function(g){return!g.backgrounding()}}].sort(function(y,g){return Ne(y.selector,g.selector)}),IZ=function(){for(var y={},g,x=0;x0&&G.edgeCount>0)return Sc("The selector `"+g+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(G.edgeCount>1)return Sc("The selector `"+g+"` is invalid because it uses multiple edge selectors"),!1;G.edgeCount===1&&Sc("The selector `"+g+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},BZ=function(){if(this.toStringCache!=null)return this.toStringCache;for(var g=function(G){return G??""},x=function(G){return mt(G)?'"'+G+'"':g(G)},T=function(G){return" "+G+" "},A=function(G,W){var et=G.type,at=G.value;switch(et){case zi.GROUP:{var lt=g(at);return lt.substring(0,lt.length-1)}case zi.DATA_COMPARE:{var ft=G.field,At=G.operator;return"["+ft+T(g(At))+x(at)+"]"}case zi.DATA_BOOL:{var kt=G.operator,Mt=G.field;return"["+g(kt)+Mt+"]"}case zi.DATA_EXIST:{var Dt=G.field;return"["+Dt+"]"}case zi.META_COMPARE:{var jt=G.operator,Zt=G.field;return"[["+Zt+T(g(jt))+x(at)+"]]"}case zi.STATE:return at;case zi.ID:return"#"+at;case zi.CLASS:return"."+at;case zi.PARENT:case zi.CHILD:return D(G.parent,W)+T(">")+D(G.child,W);case zi.ANCESTOR:case zi.DESCENDANT:return D(G.ancestor,W)+" "+D(G.descendant,W);case zi.COMPOUND_SPLIT:{var Kt=D(G.left,W),zt=D(G.subject,W),ee=D(G.right,W);return Kt+(Kt.length>0?" ":"")+zt+ee}case zi.TRUE:return""}},D=function(G,W){return G.checks.reduce(function(et,at,lt){return et+(W===G&<===0?"$":"")+A(at,W)},"")},O="",$=0;$1&&$=0&&(x=x.replace("!",""),W=!0),x.indexOf("@")>=0&&(x=x.replace("@",""),G=!0),(D||$||G)&&(q=!D&&!O?"":""+g,S=""+T),G&&(g=q=q.toLowerCase(),T=S=S.toLowerCase()),x){case"*=":A=q.indexOf(S)>=0;break;case"$=":A=q.indexOf(S,q.length-S.length)>=0;break;case"^=":A=q.indexOf(S)===0;break;case"=":A=g===T;break;case">":et=!0,A=g>T;break;case">=":et=!0,A=g>=T;break;case"<":et=!0,A=g0;){var G=A.shift();g(G),D.add(G.id()),$&&T(A,D,G)}return y}function Tk(y,g,x){if(x.isParent())for(var T=x._private.children,A=0;A1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,Tk)};function YF(y,g,x){if(x.isChild()){var T=x._private.parent;g.has(T.id())||y.push(T)}}J5.forEachUp=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,YF)};function VZ(y,g,x){YF(y,g,x),Tk(y,g,x)}J5.forEachUpAndDown=function(y){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return YT(this,y,g,VZ)},J5.ancestors=J5.parents;var Ck,XF;Ck=XF={data:Ac.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Ac.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Ac.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var g=this[0];if(g)return g._private.data.id}},Ck.attr=Ck.data,Ck.removeAttr=Ck.removeData;var UZ=XF,XT={};function tx(y){return function(g){var x=this;if(g===void 0&&(g=!0),x.length!==0)if(x.isNode()&&!x.removed()){for(var T=0,A=x[0],D=A._private.edges,O=0;Og}),minIndegree:ex("indegree",function(y,g){return yg}),minOutdegree:ex("outdegree",function(y,g){return yg})}),me(XT,{totalDegree:function(g){for(var x=0,T=this.nodes(),A=0;A0,et=W;W&&(G=G[0]);var at=et?G.position():{x:0,y:0};x!==void 0?S.position(g,x+at[g]):D!==void 0&&S.position({x:D.x+at.x,y:D.y+at.y})}else{var lt=T.position(),ft=$?T.parent():null,At=ft&&ft.length>0,kt=At;At&&(ft=ft[0]);var Mt=kt?ft.position():{x:0,y:0};return D={x:lt.x-Mt.x,y:lt.y-Mt.y},g===void 0?D:D[g]}else if(!O)return;return this}},wp.modelPosition=wp.point=wp.position,wp.modelPositions=wp.points=wp.positions,wp.renderedPoint=wp.renderedPosition,wp.relativePoint=wp.relativePosition;var JF=QF,nx,qb;nx=qb={},qb.renderedBoundingBox=function(y){var g=this.boundingBox(y),x=this.cy(),T=x.zoom(),A=x.pan(),D=g.x1*T+A.x,O=g.x2*T+A.x,$=g.y1*T+A.y,q=g.y2*T+A.y;return{x1:D,x2:O,y1:$,y2:q,w:O-D,h:q-$}},qb.dirtyCompoundBoundsCache=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();return!g.styleEnabled()||!g.hasCompoundNodes()?this:(this.forEachUp(function(x){if(x.isParent()){var T=x._private;T.compoundBoundsClean=!1,T.bbCache=null,y||x.emitAndNotify("bounds")}}),this)},qb.updateCompoundBounds=function(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,g=this.cy();if(!g.styleEnabled()||!g.hasCompoundNodes())return this;if(!y&&g.batching())return this;function x(O){if(!O.isParent())return;var $=O._private,q=O.children(),S=O.pstyle("compound-sizing-wrt-labels").value==="include",G={width:{val:O.pstyle("min-width").pfValue,left:O.pstyle("min-width-bias-left"),right:O.pstyle("min-width-bias-right")},height:{val:O.pstyle("min-height").pfValue,top:O.pstyle("min-height-bias-top"),bottom:O.pstyle("min-height-bias-bottom")}},W=q.boundingBox({includeLabels:S,includeOverlays:!1,useCache:!1}),et=$.position;(W.w===0||W.h===0)&&(W={w:O.pstyle("width").pfValue,h:O.pstyle("height").pfValue},W.x1=et.x-W.w/2,W.x2=et.x+W.w/2,W.y1=et.y-W.h/2,W.y2=et.y+W.h/2);function at(Vt,fe,ge){var ne=0,Pe=0,pe=fe+ge;return Vt>0&&pe>0&&(ne=fe/pe*Vt,Pe=ge/pe*Vt),{biasDiff:ne,biasComplementDiff:Pe}}function lt(Vt,fe,ge,ne){if(ge.units==="%")switch(ne){case"width":return Vt>0?ge.pfValue*Vt:0;case"height":return fe>0?ge.pfValue*fe:0;case"average":return Vt>0&&fe>0?ge.pfValue*(Vt+fe)/2:0;case"min":return Vt>0&&fe>0?Vt>fe?ge.pfValue*fe:ge.pfValue*Vt:0;case"max":return Vt>0&&fe>0?Vt>fe?ge.pfValue*Vt:ge.pfValue*fe:0;default:return 0}else return ge.units==="px"?ge.pfValue:0}var ft=G.width.left.value;G.width.left.units==="px"&&G.width.val>0&&(ft=ft*100/G.width.val);var At=G.width.right.value;G.width.right.units==="px"&&G.width.val>0&&(At=At*100/G.width.val);var kt=G.height.top.value;G.height.top.units==="px"&&G.height.val>0&&(kt=kt*100/G.height.val);var Mt=G.height.bottom.value;G.height.bottom.units==="px"&&G.height.val>0&&(Mt=Mt*100/G.height.val);var Dt=at(G.width.val-W.w,ft,At),jt=Dt.biasDiff,Zt=Dt.biasComplementDiff,Kt=at(G.height.val-W.h,kt,Mt),zt=Kt.biasDiff,ee=Kt.biasComplementDiff;$.autoPadding=lt(W.w,W.h,O.pstyle("padding"),O.pstyle("padding-relative-to").value),$.autoWidth=Math.max(W.w,G.width.val),et.x=(-jt+W.x1+W.x2+Zt)/2,$.autoHeight=Math.max(W.h,G.height.val),et.y=(-zt+W.y1+W.y2+ee)/2}for(var T=0;Tg.x2?A:g.x2,g.y1=Tg.y2?D:g.y2,g.w=g.x2-g.x1,g.h=g.y2-g.y1)},S3=function(g,x){return x==null?g:mp(g,x.x1,x.y1,x.x2,x.y2)},Sk=function(g,x,T){return bp(g,x,T)},QT=function(g,x,T){if(!x.cy().headless()){var A=x._private,D=A.rstyle,O=D.arrowWidth/2,$=x.pstyle(T+"-arrow-shape").value,q,S;if($!=="none"){T==="source"?(q=D.srcX,S=D.srcY):T==="target"?(q=D.tgtX,S=D.tgtY):(q=D.midX,S=D.midY);var G=A.arrowBounds=A.arrowBounds||{},W=G[T]=G[T]||{};W.x1=q-O,W.y1=S-O,W.x2=q+O,W.y2=S+O,W.w=W.x2-W.x1,W.h=W.y2-W.y1,PT(W,1),mp(g,W.x1,W.y1,W.x2,W.y2)}}},tB=function(g,x,T){if(!x.cy().headless()){var A;T?A=T+"-":A="";var D=x._private,O=D.rstyle,$=x.pstyle(A+"label").strValue;if($){var q=x.pstyle("text-halign"),S=x.pstyle("text-valign"),G=Sk(O,"labelWidth",T),W=Sk(O,"labelHeight",T),et=Sk(O,"labelX",T),at=Sk(O,"labelY",T),lt=x.pstyle(A+"text-margin-x").pfValue,ft=x.pstyle(A+"text-margin-y").pfValue,At=x.isEdge(),kt=x.pstyle(A+"text-rotation"),Mt=x.pstyle("text-outline-width").pfValue,Dt=x.pstyle("text-border-width").pfValue,jt=Dt/2,Zt=x.pstyle("text-background-padding").pfValue,Kt=2,zt=W,ee=G,Vt=ee/2,fe=zt/2,ge,ne,Pe,pe;if(At)ge=et-Vt,ne=et+Vt,Pe=at-fe,pe=at+fe;else{switch(q.value){case"left":ge=et-ee,ne=et;break;case"center":ge=et-Vt,ne=et+Vt;break;case"right":ge=et,ne=et+ee;break}switch(S.value){case"top":Pe=at-zt,pe=at;break;case"center":Pe=at-fe,pe=at+fe;break;case"bottom":Pe=at,pe=at+zt;break}}ge+=lt-Math.max(Mt,jt)-Zt-Kt,ne+=lt+Math.max(Mt,jt)+Zt+Kt,Pe+=ft-Math.max(Mt,jt)-Zt-Kt,pe+=ft+Math.max(Mt,jt)+Zt+Kt;var bn=T||"main",ze=D.labelBounds,Ve=ze[bn]=ze[bn]||{};Ve.x1=ge,Ve.y1=Pe,Ve.x2=ne,Ve.y2=pe,Ve.w=ne-ge,Ve.h=pe-Pe;var En=At&&kt.strValue==="autorotate",Dn=kt.pfValue!=null&&kt.pfValue!==0;if(En||Dn){var Kn=En?Sk(D.rstyle,"labelAngle",T):kt.pfValue,Sn=Math.cos(Kn),Wn=Math.sin(Kn),rr=(ge+ne)/2,vr=(Pe+pe)/2;if(!At){switch(q.value){case"left":rr=ne;break;case"right":rr=ge;break}switch(S.value){case"top":vr=pe;break;case"bottom":vr=Pe;break}}var ur=function(ka,Ci){return ka=ka-rr,Ci=Ci-vr,{x:ka*Sn-Ci*Wn+rr,y:ka*Wn+Ci*Sn+vr}},tr=ur(ge,Pe),wn=ur(ge,pe),gr=ur(ne,Pe),fr=ur(ne,pe);ge=Math.min(tr.x,wn.x,gr.x,fr.x),ne=Math.max(tr.x,wn.x,gr.x,fr.x),Pe=Math.min(tr.y,wn.y,gr.y,fr.y),pe=Math.max(tr.y,wn.y,gr.y,fr.y)}var Jr=bn+"Rot",wi=ze[Jr]=ze[Jr]||{};wi.x1=ge,wi.y1=Pe,wi.x2=ne,wi.y2=pe,wi.w=ne-ge,wi.h=pe-Pe,mp(g,ge,Pe,ne,pe),mp(D.labelBounds.all,ge,Pe,ne,pe)}return g}},WZ=function(g,x){var T=g._private.cy,A=T.styleEnabled(),D=T.headless(),O=Rd(),$=g._private,q=g.isNode(),S=g.isEdge(),G,W,et,at,lt,ft,At=$.rstyle,kt=q&&A?g.pstyle("bounds-expansion").pfValue:[0],Mt=function(gs){return gs.pstyle("display").value!=="none"},Dt=!A||Mt(g)&&(!S||Mt(g.source())&&Mt(g.target()));if(Dt){var jt=0,Zt=0;A&&x.includeOverlays&&(jt=g.pstyle("overlay-opacity").value,jt!==0&&(Zt=g.pstyle("overlay-padding").value));var Kt=0,zt=0;A&&x.includeUnderlays&&(Kt=g.pstyle("underlay-opacity").value,Kt!==0&&(zt=g.pstyle("underlay-padding").value));var ee=Math.max(Zt,zt),Vt=0,fe=0;if(A&&(Vt=g.pstyle("width").pfValue,fe=Vt/2),q&&x.includeNodes){var ge=g.position();lt=ge.x,ft=ge.y;var ne=g.outerWidth(),Pe=ne/2,pe=g.outerHeight(),bn=pe/2;G=lt-Pe,W=lt+Pe,et=ft-bn,at=ft+bn,mp(O,G,et,W,at)}else if(S&&x.includeEdges)if(A&&!D){var ze=g.pstyle("curve-style").strValue;if(G=Math.min(At.srcX,At.midX,At.tgtX),W=Math.max(At.srcX,At.midX,At.tgtX),et=Math.min(At.srcY,At.midY,At.tgtY),at=Math.max(At.srcY,At.midY,At.tgtY),G-=fe,W+=fe,et-=fe,at+=fe,mp(O,G,et,W,at),ze==="haystack"){var Ve=At.haystackPts;if(Ve&&Ve.length===2){if(G=Ve[0].x,et=Ve[0].y,W=Ve[1].x,at=Ve[1].y,G>W){var En=G;G=W,W=En}if(et>at){var Dn=et;et=at,at=Dn}mp(O,G-fe,et-fe,W+fe,at+fe)}}else if(ze==="bezier"||ze==="unbundled-bezier"||ze==="segments"||ze==="taxi"){var Kn;switch(ze){case"bezier":case"unbundled-bezier":Kn=At.bezierPts;break;case"segments":case"taxi":Kn=At.linePts;break}if(Kn!=null)for(var Sn=0;SnW){var wn=G;G=W,W=wn}if(et>at){var gr=et;et=at,at=gr}G-=fe,W+=fe,et-=fe,at+=fe,mp(O,G,et,W,at)}if(A&&x.includeEdges&&S&&(QT(O,g,"mid-source"),QT(O,g,"mid-target"),QT(O,g,"source"),QT(O,g,"target")),A){var fr=g.pstyle("ghost").value==="yes";if(fr){var Jr=g.pstyle("ghost-offset-x").pfValue,wi=g.pstyle("ghost-offset-y").pfValue;mp(O,O.x1+Jr,O.y1+wi,O.x2+Jr,O.y2+wi)}}var Ks=$.bodyBounds=$.bodyBounds||{};JP(Ks,O),kL(Ks,kt),PT(Ks,1),A&&(G=O.x1,W=O.x2,et=O.y1,at=O.y2,mp(O,G-ee,et-ee,W+ee,at+ee));var ka=$.overlayBounds=$.overlayBounds||{};JP(ka,O),kL(ka,kt),PT(ka,1);var Ci=$.labelBounds=$.labelBounds||{};Ci.all!=null?CY(Ci.all):Ci.all=Rd(),A&&x.includeLabels&&(x.includeMainLabels&&tB(O,g,null),S&&(x.includeSourceLabels&&tB(O,g,"source"),x.includeTargetLabels&&tB(O,g,"target")))}return O.x1=C0(O.x1),O.y1=C0(O.y1),O.x2=C0(O.x2),O.y2=C0(O.y2),O.w=C0(O.x2-O.x1),O.h=C0(O.y2-O.y1),O.w>0&&O.h>0&&Dt&&(kL(O,kt),PT(O,1)),O},eB=function(g){var x=0,T=function(O){return(O?1:0)<0&&arguments[0]!==void 0?arguments[0]:uJ,g=arguments.length>1?arguments[1]:void 0,x=0;x=0;$--)O($);return this},km.removeAllListeners=function(){return this.removeListener("*")},km.emit=km.trigger=function(y,g,x){var T=this.listeners,L=T.length;return this.emitting++,mt(g)||(g=[g]),lJ(this,function(I,O){x!=null&&(T=[{event:O.event,type:O.type,namespace:O.namespace,callback:x}],L=T.length);for(var $=function(V){var U=T[V];if(U.type===O.type&&(!U.namespace||U.namespace===O.namespace||U.namespace===cJ)&&I.eventMatches(I.context,U,O)){var et=[O];g!=null&&YP(et,g),I.beforeEmit(I.context,U,O),U.conf&&U.conf.one&&(I.listeners=I.listeners.filter(function(gt){return gt!==U}));var at=I.callbackContext(I.context,U,O),lt=U.callback.apply(at,et);I.afterEmit(I.context,U,O),lt===!1&&(O.stopPropagation(),O.preventDefault())}},z=0;z1&&!O){var $=this.length-1,z=this[$],S=z._private.data.id;this[$]=void 0,this[g]=z,I.set(S,{ele:z,index:g})}return this.length--,this},unmergeOne:function(g){g=g[0];var x=this._private,T=g._private.data.id,L=x.map,I=L.get(T);if(!I)return this;var O=I.index;return this.unmergeAt(O),this},unmerge:function(g){var x=this._private.cy;if(!g)return this;if(g&&Tt(g)){var T=g;g=x.mutableElements().filter(T)}for(var L=0;L=0;x--){var T=this[x];g(T)&&this.unmergeAt(x)}return this},map:function(g,x){for(var T=[],L=this,I=0;IT&&(T=z,L=$)}return{value:T,ele:L}},min:function(g,x){for(var T=1/0,L,I=this,O=0;O=0&&I"u"?"undefined":f(Symbol))!=g&&f(Symbol.iterator)!=g;x&&(eT[Symbol.iterator]=function(){var T=this,L={value:void 0,done:!1},I=0,O=this.length;return b({next:function(){return I1&&arguments[1]!==void 0?arguments[1]:!0,T=this[0],L=T.cy();if(L.styleEnabled()&&T){this.cleanStyle();var I=T._private.style[g];return I??(x?L.style().getDefaultProperty(g):null)}},numericStyle:function(g){var x=this[0];if(x.cy().styleEnabled()&&x){var T=x.pstyle(g);return T.pfValue!==void 0?T.pfValue:T.value}},numericStyleUnits:function(g){var x=this[0];if(x.cy().styleEnabled()&&x)return x.pstyle(g).units},renderedStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=this[0];if(T)return x.style().getRenderedStyle(T,g)},style:function(g,x){var T=this.cy();if(!T.styleEnabled())return this;var L=!1,I=T.style();if(ct(g)){var O=g;I.applyBypass(this,O,L),this.emitAndNotify("style")}else if(Tt(g))if(x===void 0){var $=this[0];return $?I.getStylePropertyValue($,g):void 0}else I.applyBypass(this,g,x,L),this.emitAndNotify("style");else if(g===void 0){var z=this[0];return z?I.getRawStyle(z):void 0}return this},removeStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=!1,L=x.style(),I=this;if(g===void 0)for(var O=0;O0&&g.push(V[0]),g.push($[0])}return this.spawn(g,!0).filter(y)},"neighborhood"),closedNeighborhood:function(g){return this.neighborhood().add(this).filter(g)},openNeighborhood:function(g){return this.neighborhood(g)}}),g1.neighbourhood=g1.neighborhood,g1.closedNeighbourhood=g1.closedNeighborhood,g1.openNeighbourhood=g1.openNeighborhood,fn(g1,{source:id(function(g){var x=this[0],T;return x&&(T=x._private.source||x.cy().collection()),T&&g?T.filter(g):T},"source"),target:id(function(g){var x=this[0],T;return x&&(T=x._private.target||x.cy().collection()),T&&g?T.filter(g):T},"target"),sources:xB({attr:"source"}),targets:xB({attr:"target"})});function xB(y){return function(x){for(var T=[],L=0;L0);return O},component:function(){var g=this[0];return g.cy().mutableElements().components(g)[0]}}),g1.componentsOf=g1.components;var Hf=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,L=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(g===void 0){ou("A collection must have a reference to the core");return}var I=new Hb,O=!1;if(!x)x=[];else if(x.length>0&&ct(x[0])&&!Ct(x[0])){O=!0;for(var $=[],z=new $5,S=0,V=x.length;S0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=x.cy(),L=T._private,I=[],O=[],$,z=0,S=x.length;z0){for(var Dn=$.length===x.length?x:new Hf(T,$),Xn=0;Xn0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=[],L={},I=x._private.cy;function O(pe){for(var gn=pe._private.edges,je=0;je0&&(y?ge.emitAndNotify("remove"):g&&ge.emit("remove"));for(var se=0;se0?se=pe:ge=pe;while(Math.abs(Ne)>O&&++gn<$);return pe}function te(fe){for(var ge=0,se=1,Ne=z-1;se!==Ne&&et[se]<=fe;++se)ge+=S;--se;var pe=(fe-et[se])/(et[se+1]-et[se]),gn=ge+pe*S,je=Et(gn,y,x);return je>=I?Dt(fe,gn):je===0?gn:zt(fe,ge,ge+S)}var Xt=!1;function Ht(){Xt=!0,(y!==g||x!==T)&&It()}var ie=function(ge){return Xt||Ht(),y===g&&x===T?ge:ge===0?0:ge===1?1:Lt(te(ge),g,T)};ie.getControlPoints=function(){return[{x:y,y:g},{x,y:T}]};var Ut="generateBezier("+[y,g,x,T]+")";return ie.toString=function(){return Ut},ie}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var xJ=function(){function y(T){return-T.tension*T.x-T.friction*T.v}function g(T,L,I){var O={x:T.x+I.dx*L,v:T.v+I.dv*L,tension:T.tension,friction:T.friction};return{dx:O.v,dv:y(O)}}function x(T,L){var I={dx:T.v,dv:y(T)},O=g(T,L*.5,I),$=g(T,L*.5,O),z=g(T,L,$),S=1/6*(I.dx+2*(O.dx+$.dx)+z.dx),V=1/6*(I.dv+2*(O.dv+$.dv)+z.dv);return T.x=T.x+S*L,T.v=T.v+V*L,T}return function T(L,I,O){var $={x:-1,v:0,tension:null,friction:null},z=[0],S=0,V=1/1e4,U=16/1e3,et,at,lt;for(L=parseFloat(L)||500,I=parseFloat(I)||20,O=O||null,$.tension=L,$.friction=I,et=O!==null,et?(S=T(L,I),at=S/O*U):at=U;lt=x(lt||$,at),z.push(1+lt.x),S+=16,Math.abs(lt.x)>V&&Math.abs(lt.v)>V;);return et?function(gt){return z[gt*(z.length-1)|0]}:S}}(),wu=function(g,x,T,L){var I=yJ(g,x,T,L);return function(O,$,z){return O+($-O)*I(z)}},sT={linear:function(g,x,T){return g+(x-g)*T},ease:wu(.25,.1,.25,1),"ease-in":wu(.42,0,1,1),"ease-out":wu(0,0,.58,1),"ease-in-out":wu(.42,0,.58,1),"ease-in-sine":wu(.47,0,.745,.715),"ease-out-sine":wu(.39,.575,.565,1),"ease-in-out-sine":wu(.445,.05,.55,.95),"ease-in-quad":wu(.55,.085,.68,.53),"ease-out-quad":wu(.25,.46,.45,.94),"ease-in-out-quad":wu(.455,.03,.515,.955),"ease-in-cubic":wu(.55,.055,.675,.19),"ease-out-cubic":wu(.215,.61,.355,1),"ease-in-out-cubic":wu(.645,.045,.355,1),"ease-in-quart":wu(.895,.03,.685,.22),"ease-out-quart":wu(.165,.84,.44,1),"ease-in-out-quart":wu(.77,0,.175,1),"ease-in-quint":wu(.755,.05,.855,.06),"ease-out-quint":wu(.23,1,.32,1),"ease-in-out-quint":wu(.86,0,.07,1),"ease-in-expo":wu(.95,.05,.795,.035),"ease-out-expo":wu(.19,1,.22,1),"ease-in-out-expo":wu(1,0,0,1),"ease-in-circ":wu(.6,.04,.98,.335),"ease-out-circ":wu(.075,.82,.165,1),"ease-in-out-circ":wu(.785,.135,.15,.86),spring:function(g,x,T){if(T===0)return sT.linear;var L=xJ(g,x,T);return function(I,O,$){return I+(O-I)*L($)}},"cubic-bezier":wu};function TB(y,g,x,T,L){if(T===1||g===x)return x;var I=L(g,x,T);return y==null||((y.roundValue||y.color)&&(I=Math.round(I)),y.min!==void 0&&(I=Math.max(I,y.min)),y.max!==void 0&&(I=Math.min(I,y.max))),I}function _B(y,g){return y.pfValue!=null||y.value!=null?y.pfValue!=null&&(g==null||g.type.units!=="%")?y.pfValue:y.value:y}function i6(y,g,x,T,L){var I=L!=null?L.type:null;x<0?x=0:x>1&&(x=1);var O=_B(y,L),$=_B(g,L);if(st(O)&&st($))return TB(I,O,$,x,T);if(mt(O)&&mt($)){for(var z=[],S=0;S<$.length;S++){var V=O[S],U=$[S];if(V!=null&&U!=null){var et=TB(I,V,U,x,T);z.push(et)}else z.push(U)}return z}}function kJ(y,g,x,T){var L=!T,I=y._private,O=g._private,$=O.easing,z=O.startTime,S=T?y:y.cy(),V=S.style();if(!O.easingImpl)if($==null)O.easingImpl=sT.linear;else{var U;if(Tt($)){var et=V.parse("transition-timing-function",$);U=et.value}else U=$;var at,lt;Tt(U)?(at=U,lt=[]):(at=U[1],lt=U.slice(2).map(function(Dn){return+Dn})),lt.length>0?(at==="spring"&<.push(O.duration),O.easingImpl=sT[at].apply(null,lt)):O.easingImpl=sT[at]}var gt=O.easingImpl,Lt;if(O.duration===0?Lt=1:Lt=(x-z)/O.duration,O.applying&&(Lt=O.progress),Lt<0?Lt=0:Lt>1&&(Lt=1),O.delay==null){var Et=O.startPosition,Dt=O.position;if(Dt&&L&&!y.locked()){var It={};Mk(Et.x,Dt.x)&&(It.x=i6(Et.x,Dt.x,Lt,gt)),Mk(Et.y,Dt.y)&&(It.y=i6(Et.y,Dt.y,Lt,gt)),y.position(It)}var zt=O.startPan,te=O.pan,Xt=I.pan,Ht=te!=null&&T;Ht&&(Mk(zt.x,te.x)&&(Xt.x=i6(zt.x,te.x,Lt,gt)),Mk(zt.y,te.y)&&(Xt.y=i6(zt.y,te.y,Lt,gt)),y.emit("pan"));var ie=O.startZoom,Ut=O.zoom,fe=Ut!=null&&T;fe&&(Mk(ie,Ut)&&(I.zoom=bk(I.minZoom,i6(ie,Ut,Lt,gt),I.maxZoom)),y.emit("zoom")),(Ht||fe)&&y.emit("viewport");var ge=O.style;if(ge&&ge.length>0&&L){for(var se=0;se=0;Ht--){var ie=Xt[Ht];ie()}Xt.splice(0,Xt.length)},Dt=at.length-1;Dt>=0;Dt--){var It=at[Dt],zt=It._private;if(zt.stopped){at.splice(Dt,1),zt.hooked=!1,zt.playing=!1,zt.started=!1,Et(zt.frames);continue}!zt.playing&&!zt.applying||(zt.playing&&zt.applying&&(zt.applying=!1),zt.started||EJ(V,It,y),kJ(V,It,y,U),zt.applying&&(zt.applying=!1),Et(zt.frames),zt.step!=null&&zt.step(y),It.completed()&&(at.splice(Dt,1),zt.hooked=!1,zt.playing=!1,zt.started=!1,Et(zt.completes)),gt=!0)}return!U&&at.length===0&<.length===0&&T.push(V),gt}for(var I=!1,O=0;O0?g.notify("draw",x):g.notify("draw")),x.unmerge(T),g.emit("step")}var TJ={animate:Ic.animate(),animation:Ic.animation(),animated:Ic.animated(),clearQueue:Ic.clearQueue(),delay:Ic.delay(),delayAnimation:Ic.delayAnimation(),stop:Ic.stop(),addToAnimationPool:function(g){var x=this;x.styleEnabled()&&x._private.aniEles.merge(g)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var g=this;if(g._private.animationsRunning=!0,!g.styleEnabled())return;function x(){g._private.animationsRunning&&Qc(function(I){CB(I,g),x()})}var T=g.renderer();T&&T.beforeRender?T.beforeRender(function(I,O){CB(O,g)},T.beforeRenderPriorities.animations):x()}},_J={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var L=x.qualifier;return L!=null?g!==T.target&&Ct(T.target)&&L.matches(T.target):!0},addEventFields:function(g,x){x.cy=g,x.target=g},callbackContext:function(g,x,T){return x.qualifier!=null?T.target:g}},aT=function(g){return Tt(g)?new ym(g):g},SB={createEmitter:function(){var g=this._private;return g.emitter||(g.emitter=new J9(_J,this)),this},emitter:function(){return this._private.emitter},on:function(g,x,T){return this.emitter().on(g,aT(x),T),this},removeListener:function(g,x,T){return this.emitter().removeListener(g,aT(x),T),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(g,x,T){return this.emitter().one(g,aT(x),T),this},once:function(g,x,T){return this.emitter().one(g,aT(x),T),this},emit:function(g,x){return this.emitter().emit(g,x),this},emitAndNotify:function(g,x){return this.emit(g),this.notify(g,x),this}};Ic.eventAliasesOn(SB);var zL={png:function(g){var x=this._private.renderer;return g=g||{},x.png(g)},jpg:function(g){var x=this._private.renderer;return g=g||{},g.bg=g.bg||"#fff",x.jpg(g)}};zL.jpeg=zL.jpg;var oT={layout:function(g){var x=this;if(g==null){ou("Layout options must be specified to make a layout");return}if(g.name==null){ou("A `name` must be specified to make a layout");return}var T=g.name,L=x.extension("layout",T);if(L==null){ou("No such layout `"+T+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var I;Tt(g.eles)?I=x.$(g.eles):I=g.eles!=null?g.eles:x.$();var O=new L(fn({},g,{cy:x,eles:I}));return O}};oT.createLayout=oT.makeLayout=oT.layout;var CJ={notify:function(g,x){var T=this._private;if(this.batching()){T.batchNotifications=T.batchNotifications||{};var L=T.batchNotifications[g]=T.batchNotifications[g]||this.collection();x!=null&&L.merge(x);return}if(T.notificationsEnabled){var I=this.renderer();this.destroyed()||!I||I.notify(g,x)}},notifications:function(g){var x=this._private;return g===void 0?x.notificationsEnabled:(x.notificationsEnabled=!!g,this)},noNotifications:function(g){this.notifications(!1),g(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var g=this._private;return g.batchCount==null&&(g.batchCount=0),g.batchCount===0&&(g.batchStyleEles=this.collection(),g.batchNotifications={}),g.batchCount++,this},endBatch:function(){var g=this._private;if(g.batchCount===0)return this;if(g.batchCount--,g.batchCount===0){g.batchStyleEles.updateStyle();var x=this.renderer();Object.keys(g.batchNotifications).forEach(function(T){var L=g.batchNotifications[T];L.empty()?x.notify(T):x.notify(T,L)})}return this},batch:function(g){return this.startBatch(),g(),this.endBatch(),this},batchData:function(g){var x=this;return this.batch(function(){for(var T=Object.keys(g),L=0;L0;)x.removeChild(x.childNodes[0]);g._private.renderer=null,g.mutableElements().forEach(function(T){var L=T._private;L.rscratch={},L.rstyle={},L.animation.current=[],L.animation.queue=[]})},onRender:function(g){return this.on("render",g)},offRender:function(g){return this.off("render",g)}};qL.invalidateDimensions=qL.resize;var cT={collection:function(g,x){return Tt(g)?this.$(g):dt(g)?g.collection():mt(g)?(x||(x={}),new Hf(this,g,x.unique,x.removed)):new Hf(this)},nodes:function(g){var x=this.$(function(T){return T.isNode()});return g?x.filter(g):x},edges:function(g){var x=this.$(function(T){return T.isEdge()});return g?x.filter(g):x},$:function(g){var x=this._private.elements;return g?x.filter(g):x.spawnSelf()},mutableElements:function(){return this._private.elements}};cT.elements=cT.filter=cT.$;var p1={},Dk="t",AJ="f";p1.apply=function(y){for(var g=this,x=g._private,T=x.cy,L=T.collection(),I=0;I0;if(et||U&&at){var lt=void 0;et&&at||et?lt=S.properties:at&&(lt=S.mappedProperties);for(var gt=0;gt1&&(zt=1),$.color){var Xt=T.valueMin[0],Ht=T.valueMax[0],ie=T.valueMin[1],Ut=T.valueMax[1],fe=T.valueMin[2],ge=T.valueMax[2],se=T.valueMin[3]==null?1:T.valueMin[3],Ne=T.valueMax[3]==null?1:T.valueMax[3],pe=[Math.round(Xt+(Ht-Xt)*zt),Math.round(ie+(Ut-ie)*zt),Math.round(fe+(ge-fe)*zt),Math.round(se+(Ne-se)*zt)];I={bypass:T.bypass,name:T.name,value:pe,strValue:"rgb("+pe[0]+", "+pe[1]+", "+pe[2]+")"}}else if($.number){var gn=T.valueMin+(T.valueMax-T.valueMin)*zt;I=this.parse(T.name,gn,T.bypass,et)}else return!1;if(!I)return gt(),!1;I.mapping=T,T=I;break}case O.data:{for(var je=T.field.split("."),Ge=U.data,xn=0;xn0&&I>0){for(var $={},z=!1,S=0;S0?y.delayAnimation(O).play().promise().then(It):It()}).then(function(){return y.animation({style:$,duration:I,easing:y.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){x.removeBypasses(y,L),y.emitAndNotify("style"),T.transitioning=!1})}else T.transitioning&&(this.removeBypasses(y,L),y.emitAndNotify("style"),T.transitioning=!1)},p1.checkTrigger=function(y,g,x,T,L,I){var O=this.properties[g],$=L(O);$!=null&&$(x,T)&&I(O)},p1.checkZOrderTrigger=function(y,g,x,T){var L=this;this.checkTrigger(y,g,x,T,function(I){return I.triggersZOrder},function(){L._private.cy.notify("zorder",y)})},p1.checkBoundsTrigger=function(y,g,x,T){this.checkTrigger(y,g,x,T,function(L){return L.triggersBounds},function(L){y.dirtyCompoundBoundsCache(),y.dirtyBoundingBoxCache(),L.triggersBoundsOfParallelBeziers&&(g==="curve-style"&&(x==="bezier"||T==="bezier")||g==="display"&&(x==="none"||T==="none"))&&y.parallelEdges().forEach(function(I){I.isBundledBezier()&&I.dirtyBoundingBoxCache()})})},p1.checkTriggers=function(y,g,x,T){y.dirtyStyleCache(),this.checkZOrderTrigger(y,g,x,T),this.checkBoundsTrigger(y,g,x,T)};var Ik={};Ik.applyBypass=function(y,g,x,T){var L=this,I=[],O=!0;if(g==="*"||g==="**"){if(x!==void 0)for(var $=0;$L.length?T=T.substr(L.length):T=""}function z(){I.length>O.length?I=I.substr(O.length):I=""}for(;;){var S=T.match(/^\s*$/);if(S)break;var V=T.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!V){no("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+T);break}L=V[0];var U=V[1];if(U!=="core"){var et=new ym(U);if(et.invalid){no("Skipping parsing of block: Invalid selector found in string stylesheet: "+U),$();continue}}var at=V[2],lt=!1;I=at;for(var gt=[];;){var Lt=I.match(/^\s*$/);if(Lt)break;var Et=I.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!Et){no("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+at),lt=!0;break}O=Et[0];var Dt=Et[1],It=Et[2],zt=g.properties[Dt];if(!zt){no("Skipping property: Invalid property name in: "+O),z();continue}var te=x.parse(Dt,It);if(!te){no("Skipping property: Invalid property definition in: "+O),z();continue}gt.push({name:Dt,val:It}),z()}if(lt){$();break}x.selector(U);for(var Xt=0;Xt=7&&g[0]==="d"&&(V=new RegExp($.data.regex).exec(g))){if(x)return!1;var et=$.data;return{name:y,value:V,strValue:""+g,mapped:et,field:V[1],bypass:x}}else if(g.length>=10&&g[0]==="m"&&(U=new RegExp($.mapData.regex).exec(g))){if(x||S.multiple)return!1;var at=$.mapData;if(!(S.color||S.number))return!1;var lt=this.parse(y,U[4]);if(!lt||lt.mapped)return!1;var gt=this.parse(y,U[5]);if(!gt||gt.mapped)return!1;if(lt.pfValue===gt.pfValue||lt.strValue===gt.strValue)return no("`"+y+": "+g+"` is not a valid mapper because the output range is zero; converting to `"+y+": "+lt.strValue+"`"),this.parse(y,lt.strValue);if(S.color){var Lt=lt.value,Et=gt.value,Dt=Lt[0]===Et[0]&&Lt[1]===Et[1]&&Lt[2]===Et[2]&&(Lt[3]===Et[3]||(Lt[3]==null||Lt[3]===1)&&(Et[3]==null||Et[3]===1));if(Dt)return!1}return{name:y,value:U,strValue:""+g,mapped:at,field:U[1],fieldMin:parseFloat(U[2]),fieldMax:parseFloat(U[3]),valueMin:lt.value,valueMax:gt.value,bypass:x}}}if(S.multiple&&T!=="multiple"){var It;if(z?It=g.split(/\s+/):mt(g)?It=g:It=[g],S.evenMultiple&&It.length%2!==0)return null;for(var zt=[],te=[],Xt=[],Ht="",ie=!1,Ut=0;Ut0?" ":"")+fe.strValue}return S.validate&&!S.validate(zt,te)?null:S.singleEnum&&ie?zt.length===1&&Tt(zt[0])?{name:y,value:zt[0],strValue:zt[0],bypass:x}:null:{name:y,value:zt,pfValue:Xt,strValue:Ht,bypass:x,units:te}}var ge=function(){for(var fr=0;frS.max||S.strictMax&&g===S.max))return null;var je={name:y,value:g,strValue:""+g+(se||""),units:se,bypass:x};return S.unitless||se!=="px"&&se!=="em"?je.pfValue=g:je.pfValue=se==="px"||!se?g:this.getEmSizeInPixels()*g,(se==="ms"||se==="s")&&(je.pfValue=se==="ms"?g:1e3*g),(se==="deg"||se==="rad")&&(je.pfValue=se==="rad"?g:EY(g)),se==="%"&&(je.pfValue=g/100),je}else if(S.propList){var Ge=[],xn=""+g;if(xn!=="none"){for(var Dn=xn.split(/\s*,\s*|\s+/),Xn=0;Xn0&&$>0&&!isNaN(T.w)&&!isNaN(T.h)&&T.w>0&&T.h>0){z=Math.min((O-2*x)/T.w,($-2*x)/T.h),z=z>this._private.maxZoom?this._private.maxZoom:z,z=z=T.minZoom&&(T.maxZoom=x),this},minZoom:function(g){return g===void 0?this._private.minZoom:this.zoomRange({min:g})},maxZoom:function(g){return g===void 0?this._private.maxZoom:this.zoomRange({max:g})},getZoomedViewport:function(g){var x=this._private,T=x.pan,L=x.zoom,I,O,$=!1;if(x.zoomingEnabled||($=!0),st(g)?O=g:ct(g)&&(O=g.level,g.position!=null?I=O9(g.position,L,T):g.renderedPosition!=null&&(I=g.renderedPosition),I!=null&&!x.panningEnabled&&($=!0)),O=O>x.maxZoom?x.maxZoom:O,O=Ox.maxZoom||!x.zoomingEnabled?O=!0:(x.zoom=z,I.push("zoom"))}if(L&&(!O||!g.cancelOnFailedZoom)&&x.panningEnabled){var S=g.pan;st(S.x)&&(x.pan.x=S.x,$=!1),st(S.y)&&(x.pan.y=S.y,$=!1),$||I.push("pan")}return I.length>0&&(I.push("viewport"),this.emit(I.join(" ")),this.notify("viewport")),this},center:function(g){var x=this.getCenterPan(g);return x&&(this._private.pan=x,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(g,x){if(this._private.panningEnabled){if(Tt(g)){var T=g;g=this.mutableElements().filter(T)}else dt(g)||(g=this.mutableElements());if(g.length!==0){var L=g.boundingBox(),I=this.width(),O=this.height();x=x===void 0?this._private.zoom:x;var $={x:(I-x*(L.x1+L.x2))/2,y:(O-x*(L.y1+L.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var g=this._private,x=g.container;return g.sizeCache=g.sizeCache||(x?function(){var T=R.getComputedStyle(x),L=function(O){return parseFloat(T.getPropertyValue(O))};return{width:x.clientWidth-L("padding-left")-L("padding-right"),height:x.clientHeight-L("padding-top")-L("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var g=this._private.pan,x=this._private.zoom,T=this.renderedExtent(),L={x1:(T.x1-g.x)/x,x2:(T.x2-g.x)/x,y1:(T.y1-g.y)/x,y2:(T.y2-g.y)/x};return L.w=L.x2-L.x1,L.h=L.y2-L.y1,L},renderedExtent:function(){var g=this.width(),x=this.height();return{x1:0,y1:0,x2:g,y2:x,w:g,h:x}},multiClickDebounceTime:function(g){if(g)this._private.multiClickDebounceTime=g;else return this._private.multiClickDebounceTime;return this}};L3.centre=L3.center,L3.autolockNodes=L3.autolock,L3.autoungrabifyNodes=L3.autoungrabify;var Ok={data:Ic.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Ic.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Ic.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ic.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Ok.attr=Ok.data,Ok.removeAttr=Ok.removeData;var Nk=function(g){var x=this;g=fn({},g);var T=g.container;T&&!ht(T)&&ht(T[0])&&(T=T[0]);var L=T?T._cyreg:null;L=L||{},L&&L.cy&&(L.cy.destroy(),L={});var I=L.readies=L.readies||[];T&&(T._cyreg=L),L.cy=x;var O=R!==void 0&&T!==void 0&&!g.headless,$=g;$.layout=fn({name:O?"grid":"null"},$.layout),$.renderer=fn({name:O?"canvas":"null"},$.renderer);var z=function(lt,gt,Lt){return gt!==void 0?gt:Lt!==void 0?Lt:lt},S=this._private={container:T,ready:!1,options:$,elements:new Hf(this),listeners:[],aniEles:new Hf(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:z(!0,$.zoomingEnabled),userZoomingEnabled:z(!0,$.userZoomingEnabled),panningEnabled:z(!0,$.panningEnabled),userPanningEnabled:z(!0,$.userPanningEnabled),boxSelectionEnabled:z(!0,$.boxSelectionEnabled),autolock:z(!1,$.autolock,$.autolockNodes),autoungrabify:z(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:z(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?O:$.styleEnabled,zoom:st($.zoom)?$.zoom:1,pan:{x:ct($.pan)&&st($.pan.x)?$.pan.x:0,y:ct($.pan)&&st($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:z(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var V=function(lt,gt){var Lt=lt.some(vt);if(Lt)return W5.all(lt).then(gt);gt(lt)};S.styleEnabled&&x.setStyle([]);var U=fn({},$,$.renderer);x.initRenderer(U);var et=function(lt,gt,Lt){x.notifications(!1);var Et=x.mutableElements();Et.length>0&&Et.remove(),lt!=null&&(ct(lt)||mt(lt))&&x.add(lt),x.one("layoutready",function(It){x.notifications(!0),x.emit(It),x.one("load",gt),x.emitAndNotify("load")}).one("layoutstop",function(){x.one("done",Lt),x.emit("done")});var Dt=fn({},x._private.options.layout);Dt.eles=x.elements(),x.layout(Dt).run()};V([$.style,$.elements],function(at){var lt=at[0],gt=at[1];S.styleEnabled&&x.style().append(lt),et(gt,function(){x.startAnimationLoop(),S.ready=!0,kt($.ready)&&x.on("ready",$.ready);for(var Lt=0;Lt0,z=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),S;if(dt(g.roots))S=g.roots;else if(mt(g.roots)){for(var V=[],U=0;U0;){var gn=pe(),je=fe(gn,se);if(je)gn.outgoers().filter(function(Di){return Di.isNode()&&T.has(Di)}).forEach(Ne);else if(je===null){no("Detected double maximal shift for node `"+gn.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}Ut();var Ge=0;if(g.avoidOverlap)for(var xn=0;xn0&&Et[0].length<=3?Xs/2:0),jn=2*Math.PI/Et[Zi].length*Ni;return Zi===0&&Et[0].length===1&&(Jt=1),{x:_i.x+Jt*Math.cos(jn),y:_i.y+Jt*Math.sin(jn)}}else{var Cr={x:_i.x+(Ni+1-(ns+1)/2)*Ua,y:(Zi+1)*sa};return Cr}};return T.nodes().layoutPositions(this,g,La),this};var IJ={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function fT(y){this.options=fn({},IJ,y)}fT.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,L=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,I=T.nodes().not(":parent");g.sort&&(I=I.sort(g.sort));for(var O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},z=g.sweep===void 0?2*Math.PI-2*Math.PI/I.length:g.sweep,S=z/Math.max(1,I.length-1),V,U=0,et=0;et1&&g.avoidOverlap){U*=1.75;var Et=Math.cos(S)-Math.cos(0),Dt=Math.sin(S)-Math.sin(0),It=Math.sqrt(U*U/(Et*Et+Dt*Dt));V=Math.max(It,V)}var zt=function(Xt,Ht){var ie=g.startAngle+Ht*S*(L?1:-1),Ut=V*Math.cos(ie),fe=V*Math.sin(ie),ge={x:$.x+Ut,y:$.y+fe};return ge};return T.nodes().layoutPositions(this,g,zt),this};var OJ={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(g){return g.degree()},levelWidth:function(g){return g.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function LB(y){this.options=fn({},OJ,y)}LB.prototype.run=function(){for(var y=this.options,g=y,x=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,T=y.cy,L=g.eles,I=L.nodes().not(":parent"),O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:T.width(),h:T.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},z=[],S=0,V=0;V0){var te=Math.abs(Dt[0].value-zt.value);te>=Lt&&(Dt=[],Et.push(Dt))}Dt.push(zt)}var Xt=S+g.minNodeSpacing;if(!g.avoidOverlap){var Ht=Et.length>0&&Et[0].length>1,ie=Math.min(O.w,O.h)/2-Xt,Ut=ie/(Et.length+Ht?1:0);Xt=Math.min(Xt,Ut)}for(var fe=0,ge=0;ge1&&g.avoidOverlap){var gn=Math.cos(pe)-Math.cos(0),je=Math.sin(pe)-Math.sin(0),Ge=Math.sqrt(Xt*Xt/(gn*gn+je*je));fe=Math.max(Ge,fe)}se.r=fe,fe+=Xt}if(g.equidistant){for(var xn=0,Dn=0,Xn=0;Xn=y.numIter||(zJ(T,y),T.temperature=T.temperature*y.coolingFactor,T.temperature=y.animationThreshold&&I(),Qc(U)}};V()}else{for(;S;)S=O(z),z++;IB(T,y),$()}return this},dT.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},dT.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var PJ=function(g,x,T){for(var L=T.eles.edges(),I=T.eles.nodes(),O={isCompound:g.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:I.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:L.size(),temperature:T.initialTemp,clientWidth:g.width(),clientHeight:g.width(),boundingBox:Rd(T.boundingBox?T.boundingBox:{x1:0,y1:0,w:g.width(),h:g.height()})},$=T.eles.components(),z={},S=0;S<$.length;S++)for(var V=$[S],U=0;U0){O.graphSet.push(Ht);for(var S=0;SL.count?0:L.graph},BJ=function y(g,x,T,L){var I=L.graphSet[T];if(-10)var U=L.nodeOverlap*V,et=Math.sqrt($*$+z*z),at=U*$/et,lt=U*z/et;else var gt=gT(g,$,z),Lt=gT(x,-1*$,-1*z),Et=Lt.x-gt.x,Dt=Lt.y-gt.y,It=Et*Et+Dt*Dt,et=Math.sqrt(It),U=(g.nodeRepulsion+x.nodeRepulsion)/It,at=U*Et/et,lt=U*Dt/et;g.isLocked||(g.offsetX-=at,g.offsetY-=lt),x.isLocked||(x.offsetX+=at,x.offsetY+=lt)}},VJ=function(g,x,T,L){if(T>0)var I=g.maxX-x.minX;else var I=x.maxX-g.minX;if(L>0)var O=g.maxY-x.minY;else var O=x.maxY-g.minY;return I>=0&&O>=0?Math.sqrt(I*I+O*O):0},gT=function(g,x,T){var L=g.positionX,I=g.positionY,O=g.height||1,$=g.width||1,z=T/x,S=O/$,V={};return x===0&&0T?(V.x=L,V.y=I+O/2,V):0x&&-1*S<=z&&z<=S?(V.x=L-$/2,V.y=I-$*T/2/x,V):0=S)?(V.x=L+O*x/2/T,V.y=I+O/2,V):(0>T&&(z<=-1*S||z>=S)&&(V.x=L-O*x/2/T,V.y=I-O/2),V)},GJ=function(g,x){for(var T=0;TT){var Lt=x.gravity*at/gt,Et=x.gravity*lt/gt;et.offsetX+=Lt,et.offsetY+=Et}}}}},WJ=function(g,x){var T=[],L=0,I=-1;for(T.push.apply(T,g.graphSet[0]),I+=g.graphSet[0].length;L<=I;){var O=T[L++],$=g.idToIndex[O],z=g.layoutNodes[$],S=z.children;if(0T)var I={x:T*g/L,y:T*x/L};else var I={x:g,y:x};return I},XJ=function y(g,x){var T=g.parentId;if(T!=null){var L=x.layoutNodes[x.idToIndex[T]],I=!1;if((L.maxX==null||g.maxX+L.padRight>L.maxX)&&(L.maxX=g.maxX+L.padRight,I=!0),(L.minX==null||g.minX-L.padLeftL.maxY)&&(L.maxY=g.maxY+L.padBottom,I=!0),(L.minY==null||g.minY-L.padTopEt&&(lt+=Lt+x.componentSpacing,at=0,gt=0,Lt=0)}}},QJ={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(g){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function OB(y){this.options=fn({},QJ,y)}OB.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,L=T.nodes().not(":parent");g.sort&&(L=L.sort(g.sort));var I=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()});if(I.h===0||I.w===0)T.nodes().layoutPositions(this,g,function(rr){return{x:I.x1,y:I.y1}});else{var O=L.size(),$=Math.sqrt(O*I.h/I.w),z=Math.round($),S=Math.round(I.w/I.h*$),V=function(wr){if(wr==null)return Math.min(z,S);var ur=Math.min(z,S);ur==z?z=wr:S=wr},U=function(wr){if(wr==null)return Math.max(z,S);var ur=Math.max(z,S);ur==z?z=wr:S=wr},et=g.rows,at=g.cols!=null?g.cols:g.columns;if(et!=null&&at!=null)z=et,S=at;else if(et!=null&&at==null)z=et,S=Math.ceil(O/z);else if(et==null&&at!=null)S=at,z=Math.ceil(O/S);else if(S*z>O){var lt=V(),gt=U();(lt-1)*gt>=O?V(lt-1):(gt-1)*lt>=O&&U(gt-1)}else for(;S*z=O?U(Et+1):V(Lt+1)}var Dt=I.w/S,It=I.h/z;if(g.condense&&(Dt=0,It=0),g.avoidOverlap)for(var zt=0;zt=S&&(gn=0,pe++)},Ge={},xn=0;xn(gn=FY(y,g,je[Ge],je[Ge+1],je[Ge+2],je[Ge+3])))return Lt(Ht,gn),!0}else if(Ut.edgeType==="bezier"||Ut.edgeType==="multibezier"||Ut.edgeType==="self"||Ut.edgeType==="compound"){for(var je=Ut.allpts,Ge=0;Ge+5(gn=PY(y,g,je[Ge],je[Ge+1],je[Ge+2],je[Ge+3],je[Ge+4],je[Ge+5])))return Lt(Ht,gn),!0}for(var xn=xn||ie.source,Dn=Dn||ie.target,Xn=L.getArrowWidth(fe,ge),Cn=[{name:"source",x:Ut.arrowStartX,y:Ut.arrowStartY,angle:Ut.srcArrowAngle},{name:"target",x:Ut.arrowEndX,y:Ut.arrowEndY,angle:Ut.tgtArrowAngle},{name:"mid-source",x:Ut.midX,y:Ut.midY,angle:Ut.midsrcArrowAngle},{name:"mid-target",x:Ut.midX,y:Ut.midY,angle:Ut.midtgtArrowAngle}],Ge=0;Ge0&&(Et(xn),Et(Dn))}function It(Ht,ie,Ut){return wp(Ht,ie,Ut)}function zt(Ht,ie){var Ut=Ht._private,fe=et,ge;ie?ge=ie+"-":ge="",Ht.boundingBox();var se=Ut.labelBounds[ie||"main"],Ne=Ht.pstyle(ge+"label").value,pe=Ht.pstyle("text-events").strValue==="yes";if(!(!pe||!Ne)){var gn=It(Ut.rscratch,"labelX",ie),je=It(Ut.rscratch,"labelY",ie),Ge=It(Ut.rscratch,"labelAngle",ie),xn=Ht.pstyle(ge+"text-margin-x").pfValue,Dn=Ht.pstyle(ge+"text-margin-y").pfValue,Xn=se.x1-fe-xn,Cn=se.x2+fe-xn,Yn=se.y1-fe-Dn,rr=se.y2+fe-Dn;if(Ge){var wr=Math.cos(Ge),ur=Math.sin(Ge),er=function(La,Di){return La=La-gn,Di=Di-je,{x:La*wr-Di*ur+gn,y:La*ur+Di*wr+je}},bn=er(Xn,Yn),pr=er(Xn,rr),fr=er(Cn,Yn),ri=er(Cn,rr),_i=[bn.x+xn,bn.y+Dn,fr.x+xn,fr.y+Dn,ri.x+xn,ri.y+Dn,pr.x+xn,pr.y+Dn];if(jd(y,g,_i))return Lt(Ht),!0}else if(H5(se,y,g))return Lt(Ht),!0}}for(var te=O.length-1;te>=0;te--){var Xt=O[te];Xt.isNode()?Et(Xt)||zt(Xt):Dt(Xt)||zt(Xt)||zt(Xt,"source")||zt(Xt,"target")}return $},M3.getAllInBox=function(y,g,x,T){var L=this.getCachedZSortedEles().interactive,I=[],O=Math.min(y,x),$=Math.max(y,x),z=Math.min(g,T),S=Math.max(g,T);y=O,x=$,g=z,T=S;for(var V=Rd({x1:y,y1:g,x2:x,y2:T}),U=0;U0?Math.max(ss-qo,0):Math.min(ss+qo,0)},Ne=se(fe,ie),pe=se(ge,Ut),gn=!1;Dt===S?Et=Math.abs(Ne)>Math.abs(pe)?L:T:Dt===z||Dt===$?(Et=T,gn=!0):(Dt===I||Dt===O)&&(Et=L,gn=!0);var je=Et===T,Ge=je?pe:Ne,xn=je?ge:fe,Dn=ZP(xn),Xn=!1;!(gn&&(zt||Xt))&&(Dt===$&&xn<0||Dt===z&&xn>0||Dt===I&&xn>0||Dt===O&&xn<0)&&(Dn*=-1,Ge=Dn*Math.abs(Ge),Xn=!0);var Cn;if(zt){var Yn=te<0?1+te:te;Cn=Yn*Ge}else{var rr=te<0?Ge:0;Cn=rr+te*Dn}var wr=function(ss){return Math.abs(ss)=Math.abs(Ge)},ur=wr(Cn),er=wr(Math.abs(Ge)-Math.abs(Cn)),bn=ur||er;if(bn&&!Xn)if(je){var pr=Math.abs(xn)<=et/2,fr=Math.abs(fe)<=at/2;if(pr){var ri=(V.x1+V.x2)/2,_i=V.y1,ia=V.y2;x.segpts=[ri,_i,ri,ia]}else if(fr){var La=(V.y1+V.y2)/2,Di=V.x1,wi=V.x2;x.segpts=[Di,La,wi,La]}else x.segpts=[V.x1,V.y2]}else{var _s=Math.abs(xn)<=U/2,Zi=Math.abs(ge)<=lt/2;if(_s){var Ni=(V.y1+V.y2)/2,ns=V.x1,Ua=V.x2;x.segpts=[ns,Ni,Ua,Ni]}else if(Zi){var sa=(V.x1+V.x2)/2,Xs=V.y1,Cr=V.y2;x.segpts=[sa,Xs,sa,Cr]}else x.segpts=[V.x2,V.y1]}else if(je){var Jt=V.y1+Cn+(Lt?et/2*Dn:0),jn=V.x1,Lr=V.x2;x.segpts=[jn,Jt,Lr,Jt]}else{var ir=V.x1+Cn+(Lt?U/2*Dn:0),sr=V.y1,Fa=V.y2;x.segpts=[ir,sr,ir,Fa]}},sd.tryToCorrectInvalidPoints=function(y,g){var x=y._private.rscratch;if(x.edgeType==="bezier"){var T=g.srcPos,L=g.tgtPos,I=g.srcW,O=g.srcH,$=g.tgtW,z=g.tgtH,S=g.srcShape,V=g.tgtShape,U=!st(x.startX)||!st(x.startY),et=!st(x.arrowStartX)||!st(x.arrowStartY),at=!st(x.endX)||!st(x.endY),lt=!st(x.arrowEndX)||!st(x.arrowEndY),gt=3,Lt=this.getArrowWidth(y.pstyle("width").pfValue,y.pstyle("arrow-scale").value)*this.arrowShapeWidth,Et=gt*Lt,Dt=T3({x:x.ctrlpts[0],y:x.ctrlpts[1]},{x:x.startX,y:x.startY}),It=Dtpe.poolIndex()){var gn=Ne;Ne=pe,pe=gn}var je=Ut.srcPos=Ne.position(),Ge=Ut.tgtPos=pe.position(),xn=Ut.srcW=Ne.outerWidth(),Dn=Ut.srcH=Ne.outerHeight(),Xn=Ut.tgtW=pe.outerWidth(),Cn=Ut.tgtH=pe.outerHeight(),Yn=Ut.srcShape=x.nodeShapes[g.getNodeShape(Ne)],rr=Ut.tgtShape=x.nodeShapes[g.getNodeShape(pe)];Ut.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var wr=0;wr0){var pr=I,fr=_3(pr,z5(x)),ri=_3(pr,z5(bn)),_i=fr;if(ri2){var ia=_3(pr,{x:bn[2],y:bn[3]});ia<_i&&(x=[bn[2],bn[3]])}}}var La=F9(x,fe,g.arrowShapes[$].spacing(y)+S),Di=F9(x,fe,g.arrowShapes[$].gap(y)+S);if(et.endX=Di[0],et.endY=Di[1],et.arrowEndX=La[0],et.arrowEndY=La[1],Ht==="inside-to-node")x=[I.x,I.y];else if(Xt.units)x=this.manualEndptToPx(T,Xt);else if(Ht==="outside-to-line")x=et.srcIntn;else if(Ht==="outside-to-node"||Ht==="outside-to-node-or-label"?Ne=ge:(Ht==="outside-to-line"||Ht==="outside-to-line-or-label")&&(Ne=[O.x,O.y]),x=g.nodeShapes[this.getNodeShape(T)].intersectLine(I.x,I.y,T.outerWidth(),T.outerHeight(),Ne[0],Ne[1],0),Ht==="outside-to-node-or-label"||Ht==="outside-to-line-or-label"){var wi=T._private.rscratch,_s=wi.labelWidth,Zi=wi.labelHeight,Ni=wi.labelX,ns=wi.labelY,Ua=_s/2,sa=Zi/2,Xs=T.pstyle("text-valign").value;Xs==="top"?ns-=sa:Xs==="bottom"&&(ns+=sa);var Cr=T.pstyle("text-halign").value;Cr==="left"?Ni-=Ua:Cr==="right"&&(Ni+=Ua);var Jt=wk(Ne[0],Ne[1],[Ni-Ua,ns-sa,Ni+Ua,ns-sa,Ni+Ua,ns+sa,Ni-Ua,ns+sa],I.x,I.y);if(Jt.length>0){var jn=O,Lr=_3(jn,z5(x)),ir=_3(jn,z5(Jt)),sr=Lr;if(ir2){var Fa=_3(jn,{x:Jt[2],y:Jt[3]});Fa=lt||Ht){Lt={cp:zt,segment:Xt};break}}if(Lt)break}var ie=Lt.cp,Ut=Lt.segment,fe=(lt-Et)/Ut.length,ge=Ut.t1-Ut.t0,se=at?Ut.t0+ge*fe:Ut.t1-ge*fe;se=bk(0,se,1),g=q5(ie.p0,ie.p1,ie.p2,se),et=qB(ie.p0,ie.p1,ie.p2,se);break}case"straight":case"segments":case"haystack":{for(var Ne=0,pe,gn,je,Ge,xn=T.allpts.length,Dn=0;Dn+3=lt));Dn+=2);var Xn=lt-gn,Cn=Xn/pe;Cn=bk(0,Cn,1),g=_Y(je,Ge,Cn),et=zB(je,Ge);break}}O("labelX",U,g.x),O("labelY",U,g.y),O("labelAutoAngle",U,et)}};S("source"),S("target"),this.applyLabelDimensions(y)}},kp.applyLabelDimensions=function(y){this.applyPrefixedLabelDimensions(y),y.isEdge()&&(this.applyPrefixedLabelDimensions(y,"source"),this.applyPrefixedLabelDimensions(y,"target"))},kp.applyPrefixedLabelDimensions=function(y,g){var x=y._private,T=this.getLabelText(y,g),L=this.calculateLabelDimensions(y,T),I=y.pstyle("line-height").pfValue,O=y.pstyle("text-wrap").strValue,$=wp(x.rscratch,"labelWrapCachedLines",g)||[],z=O!=="wrap"?1:Math.max($.length,1),S=L.height/z,V=S*I,U=L.width,et=L.height+(z-1)*(I-1)*S;bm(x.rstyle,"labelWidth",g,U),bm(x.rscratch,"labelWidth",g,U),bm(x.rstyle,"labelHeight",g,et),bm(x.rscratch,"labelHeight",g,et),bm(x.rscratch,"labelLineHeight",g,V)},kp.getLabelText=function(y,g){var x=y._private,T=g?g+"-":"",L=y.pstyle(T+"label").strValue,I=y.pstyle("text-transform").value,O=function(Xn,Cn){return Cn?(bm(x.rscratch,Xn,g,Cn),Cn):wp(x.rscratch,Xn,g)};if(!L)return"";I=="none"||(I=="uppercase"?L=L.toUpperCase():I=="lowercase"&&(L=L.toLowerCase()));var $=y.pstyle("text-wrap").value;if($==="wrap"){var z=O("labelKey");if(z!=null&&O("labelWrapKey")===z)return O("labelWrapCachedText");for(var S="​",V=L.split(` -`),U=y.pstyle("text-max-width").pfValue,et=y.pstyle("text-overflow-wrap").value,at=et==="anywhere",lt=[],gt=/[\s\u200b]+/,Lt=at?"":" ",Et=0;EtU){for(var Xt=Dt.split(gt),Ht="",ie=0;ieNe)break;pe+=L[Ge],Ge===L.length-1&&(je=!0)}return je||(pe+=gn),pe}return L},kp.getLabelJustification=function(y){var g=y.pstyle("text-justification").strValue,x=y.pstyle("text-halign").strValue;if(g==="auto")if(y.isNode())switch(x){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return g},kp.calculateLabelDimensions=function(y,g){var x=this,T=vp(g,y._private.labelDimsKey),L=x.labelDimCache||(x.labelDimCache=[]),I=L[T];if(I!=null)return I;var O=0,$=y.pstyle("font-style").strValue,z=y.pstyle("font-size").pfValue,S=y.pstyle("font-family").strValue,V=y.pstyle("font-weight").strValue,U=this.labelCalcCanvas,et=this.labelCalcCanvasContext;if(!U){U=this.labelCalcCanvas=document.createElement("canvas"),et=this.labelCalcCanvasContext=U.getContext("2d");var at=U.style;at.position="absolute",at.left="-9999px",at.top="-9999px",at.zIndex="-1",at.visibility="hidden",at.pointerEvents="none"}et.font="".concat($," ").concat(V," ").concat(z,"px ").concat(S);for(var lt=0,gt=0,Lt=g.split(` -`),Et=0;Et1&&arguments[1]!==void 0?arguments[1]:!0;if(g.merge(O),$)for(var z=0;z=y.desktopTapThreshold2}var bv=T(Jt);Gf&&(y.hoverData.tapholdCancelled=!0);var Cm=function(){var Ub=y.hoverData.dragDelta=y.hoverData.dragDelta||[];Ub.length===0?(Ub.push(io[0]),Ub.push(io[1])):(Ub[0]+=io[0],Ub[1]+=io[1])};Lr=!0,x(ro,["mousemove","vmousemove","tapdrag"],Jt,{x:Hr[0],y:Hr[1]});var d6=function(){y.data.bgActivePosistion=void 0,y.hoverData.selecting||ir.emit({originalEvent:Jt,type:"boxstart",position:{x:Hr[0],y:Hr[1]}}),Bc[4]=1,y.hoverData.selecting=!0,y.redrawHint("select",!0),y.redraw()};if(y.hoverData.which===3){if(Gf){var N3={originalEvent:Jt,type:"cxtdrag",position:{x:Hr[0],y:Hr[1]}};Ma?Ma.emit(N3):ir.emit(N3),y.hoverData.cxtDragged=!0,(!y.hoverData.cxtOver||ro!==y.hoverData.cxtOver)&&(y.hoverData.cxtOver&&y.hoverData.cxtOver.emit({originalEvent:Jt,type:"cxtdragout",position:{x:Hr[0],y:Hr[1]}}),y.hoverData.cxtOver=ro,ro&&ro.emit({originalEvent:Jt,type:"cxtdragover",position:{x:Hr[0],y:Hr[1]}}))}}else if(y.hoverData.dragging){if(Lr=!0,ir.panningEnabled()&&ir.userPanningEnabled()){var g6;if(y.hoverData.justStartedPan){var TT=y.hoverData.mdownPos;g6={x:(Hr[0]-TT[0])*sr,y:(Hr[1]-TT[1])*sr},y.hoverData.justStartedPan=!1}else g6={x:io[0]*sr,y:io[1]*sr};ir.panBy(g6),ir.emit("dragpan"),y.hoverData.dragged=!0}Hr=y.projectIntoViewport(Jt.clientX,Jt.clientY)}else if(Bc[4]==1&&(Ma==null||Ma.pannable())){if(Gf){if(!y.hoverData.dragging&&ir.boxSelectionEnabled()&&(bv||!ir.panningEnabled()||!ir.userPanningEnabled()))d6();else if(!y.hoverData.selecting&&ir.panningEnabled()&&ir.userPanningEnabled()){var P3=L(Ma,y.hoverData.downs);P3&&(y.hoverData.dragging=!0,y.hoverData.justStartedPan=!0,Bc[4]=0,y.data.bgActivePosistion=z5(ss),y.redrawHint("select",!0),y.redraw())}Ma&&Ma.pannable()&&Ma.active()&&Ma.unactivate()}}else{if(Ma&&Ma.pannable()&&Ma.active()&&Ma.unactivate(),(!Ma||!Ma.grabbed())&&ro!=Tc&&(Tc&&x(Tc,["mouseout","tapdragout"],Jt,{x:Hr[0],y:Hr[1]}),ro&&x(ro,["mouseover","tapdragover"],Jt,{x:Hr[0],y:Hr[1]}),y.hoverData.last=ro),Ma)if(Gf){if(ir.boxSelectionEnabled()&&bv)Ma&&Ma.grabbed()&&(gt(_l),Ma.emit("freeon"),_l.emit("free"),y.dragData.didDrag&&(Ma.emit("dragfreeon"),_l.emit("dragfree"))),d6();else if(Ma&&Ma.grabbed()&&y.nodeIsDraggable(Ma)){var $d=!y.dragData.didDrag;$d&&y.redrawHint("eles",!0),y.dragData.didDrag=!0,y.hoverData.draggingEles||at(_l,{inDragLayer:!0});var x1={x:0,y:0};if(st(io[0])&&st(io[1])&&(x1.x+=io[0],x1.y+=io[1],$d)){var zd=y.hoverData.dragDelta;zd&&st(zd[0])&&st(zd[1])&&(x1.x+=zd[0],x1.y+=zd[1])}y.hoverData.draggingEles=!0,_l.silentShift(x1).emit("position drag"),y.redrawHint("drag",!0),y.redraw()}}else Cm();Lr=!0}if(Bc[2]=Hr[0],Bc[3]=Hr[1],Lr)return Jt.stopPropagation&&Jt.stopPropagation(),Jt.preventDefault&&Jt.preventDefault(),!1}},!1);var Ut,fe,ge;y.registerBinding(window,"mouseup",function(Jt){var jn=y.hoverData.capture;if(jn){y.hoverData.capture=!1;var Lr=y.cy,ir=y.projectIntoViewport(Jt.clientX,Jt.clientY),sr=y.selection,Fa=y.findNearestElement(ir[0],ir[1],!0,!1),Hr=y.dragData.possibleDragElements,ss=y.hoverData.down,qo=T(Jt);if(y.data.bgActivePosistion&&(y.redrawHint("select",!0),y.redraw()),y.hoverData.tapholdCancelled=!0,y.data.bgActivePosistion=void 0,ss&&ss.unactivate(),y.hoverData.which===3){var Bc={originalEvent:Jt,type:"cxttapend",position:{x:ir[0],y:ir[1]}};if(ss?ss.emit(Bc):Lr.emit(Bc),!y.hoverData.cxtDragged){var ro={originalEvent:Jt,type:"cxttap",position:{x:ir[0],y:ir[1]}};ss?ss.emit(ro):Lr.emit(ro)}y.hoverData.cxtDragged=!1,y.hoverData.which=null}else if(y.hoverData.which===1){if(x(Fa,["mouseup","tapend","vmouseup"],Jt,{x:ir[0],y:ir[1]}),!y.dragData.didDrag&&!y.hoverData.dragged&&!y.hoverData.selecting&&!y.hoverData.isOverThresholdDrag&&(x(ss,["click","tap","vclick"],Jt,{x:ir[0],y:ir[1]}),fe=!1,Jt.timeStamp-ge<=Lr.multiClickDebounceTime()?(Ut&&clearTimeout(Ut),fe=!0,ge=null,x(ss,["dblclick","dbltap","vdblclick"],Jt,{x:ir[0],y:ir[1]})):(Ut=setTimeout(function(){fe||x(ss,["oneclick","onetap","voneclick"],Jt,{x:ir[0],y:ir[1]})},Lr.multiClickDebounceTime()),ge=Jt.timeStamp)),ss==null&&!y.dragData.didDrag&&!y.hoverData.selecting&&!y.hoverData.dragged&&!T(Jt)&&(Lr.$(g).unselect(["tapunselect"]),Hr.length>0&&y.redrawHint("eles",!0),y.dragData.possibleDragElements=Hr=Lr.collection()),Fa==ss&&!y.dragData.didDrag&&!y.hoverData.selecting&&Fa!=null&&Fa._private.selectable&&(y.hoverData.dragging||(Lr.selectionType()==="additive"||qo?Fa.selected()?Fa.unselect(["tapunselect"]):Fa.select(["tapselect"]):qo||(Lr.$(g).unmerge(Fa).unselect(["tapunselect"]),Fa.select(["tapselect"]))),y.redrawHint("eles",!0)),y.hoverData.selecting){var Tc=Lr.collection(y.getAllInBox(sr[0],sr[1],sr[2],sr[3]));y.redrawHint("select",!0),Tc.length>0&&y.redrawHint("eles",!0),Lr.emit({type:"boxend",originalEvent:Jt,position:{x:ir[0],y:ir[1]}});var Ma=function(Gf){return Gf.selectable()&&!Gf.selected()};Lr.selectionType()==="additive"||qo||Lr.$(g).unmerge(Tc).unselect(),Tc.emit("box").stdFilter(Ma).select().emit("boxselect"),y.redraw()}if(y.hoverData.dragging&&(y.hoverData.dragging=!1,y.redrawHint("select",!0),y.redrawHint("eles",!0),y.redraw()),!sr[4]){y.redrawHint("drag",!0),y.redrawHint("eles",!0);var io=ss&&ss.grabbed();gt(Hr),io&&(ss.emit("freeon"),Hr.emit("free"),y.dragData.didDrag&&(ss.emit("dragfreeon"),Hr.emit("dragfree")))}}sr[4]=0,y.hoverData.down=null,y.hoverData.cxtStarted=!1,y.hoverData.draggingEles=!1,y.hoverData.selecting=!1,y.hoverData.isOverThresholdDrag=!1,y.dragData.didDrag=!1,y.hoverData.dragged=!1,y.hoverData.dragDelta=[],y.hoverData.mdownPos=null,y.hoverData.mdownGPos=null}},!1);var se=function(Jt){if(!y.scrollingPage){var jn=y.cy,Lr=jn.zoom(),ir=jn.pan(),sr=y.projectIntoViewport(Jt.clientX,Jt.clientY),Fa=[sr[0]*Lr+ir.x,sr[1]*Lr+ir.y];if(y.hoverData.draggingEles||y.hoverData.dragging||y.hoverData.cxtStarted||Ht()){Jt.preventDefault();return}if(jn.panningEnabled()&&jn.userPanningEnabled()&&jn.zoomingEnabled()&&jn.userZoomingEnabled()){Jt.preventDefault(),y.data.wheelZooming=!0,clearTimeout(y.data.wheelTimeout),y.data.wheelTimeout=setTimeout(function(){y.data.wheelZooming=!1,y.redrawHint("eles",!0),y.redraw()},150);var Hr;Jt.deltaY!=null?Hr=Jt.deltaY/-250:Jt.wheelDeltaY!=null?Hr=Jt.wheelDeltaY/1e3:Hr=Jt.wheelDelta/1e3,Hr=Hr*y.wheelSensitivity;var ss=Jt.deltaMode===1;ss&&(Hr*=33);var qo=jn.zoom()*Math.pow(10,Hr);Jt.type==="gesturechange"&&(qo=y.gestureStartZoom*Jt.scale),jn.zoom({level:qo,renderedPosition:{x:Fa[0],y:Fa[1]}}),jn.emit(Jt.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};y.registerBinding(y.container,"wheel",se,!0),y.registerBinding(window,"scroll",function(Jt){y.scrollingPage=!0,clearTimeout(y.scrollingPageTimeout),y.scrollingPageTimeout=setTimeout(function(){y.scrollingPage=!1},250)},!0),y.registerBinding(y.container,"gesturestart",function(Jt){y.gestureStartZoom=y.cy.zoom(),y.hasTouchStarted||Jt.preventDefault()},!0),y.registerBinding(y.container,"gesturechange",function(Cr){y.hasTouchStarted||se(Cr)},!0),y.registerBinding(y.container,"mouseout",function(Jt){var jn=y.projectIntoViewport(Jt.clientX,Jt.clientY);y.cy.emit({originalEvent:Jt,type:"mouseout",position:{x:jn[0],y:jn[1]}})},!1),y.registerBinding(y.container,"mouseover",function(Jt){var jn=y.projectIntoViewport(Jt.clientX,Jt.clientY);y.cy.emit({originalEvent:Jt,type:"mouseover",position:{x:jn[0],y:jn[1]}})},!1);var Ne,pe,gn,je,Ge,xn,Dn,Xn,Cn,Yn,rr,wr,ur,er=function(Jt,jn,Lr,ir){return Math.sqrt((Lr-Jt)*(Lr-Jt)+(ir-jn)*(ir-jn))},bn=function(Jt,jn,Lr,ir){return(Lr-Jt)*(Lr-Jt)+(ir-jn)*(ir-jn)},pr;y.registerBinding(y.container,"touchstart",pr=function(Jt){if(y.hasTouchStarted=!0,!!ie(Jt)){Et(),y.touchData.capture=!0,y.data.bgActivePosistion=void 0;var jn=y.cy,Lr=y.touchData.now,ir=y.touchData.earlier;if(Jt.touches[0]){var sr=y.projectIntoViewport(Jt.touches[0].clientX,Jt.touches[0].clientY);Lr[0]=sr[0],Lr[1]=sr[1]}if(Jt.touches[1]){var sr=y.projectIntoViewport(Jt.touches[1].clientX,Jt.touches[1].clientY);Lr[2]=sr[0],Lr[3]=sr[1]}if(Jt.touches[2]){var sr=y.projectIntoViewport(Jt.touches[2].clientX,Jt.touches[2].clientY);Lr[4]=sr[0],Lr[5]=sr[1]}if(Jt.touches[1]){y.touchData.singleTouchMoved=!0,gt(y.dragData.touchDragEles);var Fa=y.findContainerClientCoords();Cn=Fa[0],Yn=Fa[1],rr=Fa[2],wr=Fa[3],Ne=Jt.touches[0].clientX-Cn,pe=Jt.touches[0].clientY-Yn,gn=Jt.touches[1].clientX-Cn,je=Jt.touches[1].clientY-Yn,ur=0<=Ne&&Ne<=rr&&0<=gn&&gn<=rr&&0<=pe&&pe<=wr&&0<=je&&je<=wr;var Hr=jn.pan(),ss=jn.zoom();Ge=er(Ne,pe,gn,je),xn=bn(Ne,pe,gn,je),Dn=[(Ne+gn)/2,(pe+je)/2],Xn=[(Dn[0]-Hr.x)/ss,(Dn[1]-Hr.y)/ss];var qo=200,Bc=qo*qo;if(xn=1){for(var Tp=y.touchData.startPosition=[],Uf=0;Uf=y.touchTapThreshold2}if(jn&&y.touchData.cxt){Jt.preventDefault();var Tp=Jt.touches[0].clientX-Cn,Uf=Jt.touches[0].clientY-Yn,Eg=Jt.touches[1].clientX-Cn,ad=Jt.touches[1].clientY-Yn,bv=bn(Tp,Uf,Eg,ad),Cm=bv/xn,d6=150,N3=d6*d6,g6=1.5,TT=g6*g6;if(Cm>=TT||bv>=N3){y.touchData.cxt=!1,y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var P3={originalEvent:Jt,type:"cxttapend",position:{x:sr[0],y:sr[1]}};y.touchData.start?(y.touchData.start.unactivate().emit(P3),y.touchData.start=null):ir.emit(P3)}}if(jn&&y.touchData.cxt){var P3={originalEvent:Jt,type:"cxtdrag",position:{x:sr[0],y:sr[1]}};y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.touchData.start?y.touchData.start.emit(P3):ir.emit(P3),y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxtDragged=!0;var $d=y.findNearestElement(sr[0],sr[1],!0,!0);(!y.touchData.cxtOver||$d!==y.touchData.cxtOver)&&(y.touchData.cxtOver&&y.touchData.cxtOver.emit({originalEvent:Jt,type:"cxtdragout",position:{x:sr[0],y:sr[1]}}),y.touchData.cxtOver=$d,$d&&$d.emit({originalEvent:Jt,type:"cxtdragover",position:{x:sr[0],y:sr[1]}}))}else if(jn&&Jt.touches[2]&&ir.boxSelectionEnabled())Jt.preventDefault(),y.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,y.touchData.selecting||ir.emit({originalEvent:Jt,type:"boxstart",position:{x:sr[0],y:sr[1]}}),y.touchData.selecting=!0,y.touchData.didSelect=!0,Lr[4]=1,!Lr||Lr.length===0||Lr[0]===void 0?(Lr[0]=(sr[0]+sr[2]+sr[4])/3,Lr[1]=(sr[1]+sr[3]+sr[5])/3,Lr[2]=(sr[0]+sr[2]+sr[4])/3+1,Lr[3]=(sr[1]+sr[3]+sr[5])/3+1):(Lr[2]=(sr[0]+sr[2]+sr[4])/3,Lr[3]=(sr[1]+sr[3]+sr[5])/3),y.redrawHint("select",!0),y.redraw();else if(jn&&Jt.touches[1]&&!y.touchData.didSelect&&ir.zoomingEnabled()&&ir.panningEnabled()&&ir.userZoomingEnabled()&&ir.userPanningEnabled()){Jt.preventDefault(),y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var x1=y.dragData.touchDragEles;if(x1){y.redrawHint("drag",!0);for(var zd=0;zd0&&!y.hoverData.draggingEles&&!y.swipePanning&&y.data.bgActivePosistion!=null&&(y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.redraw())}},!1);var ri;y.registerBinding(window,"touchcancel",ri=function(Jt){var jn=y.touchData.start;y.touchData.capture=!1,jn&&jn.unactivate()});var _i,ia,La,Di;if(y.registerBinding(window,"touchend",_i=function(Jt){var jn=y.touchData.start,Lr=y.touchData.capture;if(Lr)Jt.touches.length===0&&(y.touchData.capture=!1),Jt.preventDefault();else return;var ir=y.selection;y.swipePanning=!1,y.hoverData.draggingEles=!1;var sr=y.cy,Fa=sr.zoom(),Hr=y.touchData.now,ss=y.touchData.earlier;if(Jt.touches[0]){var qo=y.projectIntoViewport(Jt.touches[0].clientX,Jt.touches[0].clientY);Hr[0]=qo[0],Hr[1]=qo[1]}if(Jt.touches[1]){var qo=y.projectIntoViewport(Jt.touches[1].clientX,Jt.touches[1].clientY);Hr[2]=qo[0],Hr[3]=qo[1]}if(Jt.touches[2]){var qo=y.projectIntoViewport(Jt.touches[2].clientX,Jt.touches[2].clientY);Hr[4]=qo[0],Hr[5]=qo[1]}jn&&jn.unactivate();var Bc;if(y.touchData.cxt){if(Bc={originalEvent:Jt,type:"cxttapend",position:{x:Hr[0],y:Hr[1]}},jn?jn.emit(Bc):sr.emit(Bc),!y.touchData.cxtDragged){var ro={originalEvent:Jt,type:"cxttap",position:{x:Hr[0],y:Hr[1]}};jn?jn.emit(ro):sr.emit(ro)}y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxt=!1,y.touchData.start=null,y.redraw();return}if(!Jt.touches[2]&&sr.boxSelectionEnabled()&&y.touchData.selecting){y.touchData.selecting=!1;var Tc=sr.collection(y.getAllInBox(ir[0],ir[1],ir[2],ir[3]));ir[0]=void 0,ir[1]=void 0,ir[2]=void 0,ir[3]=void 0,ir[4]=0,y.redrawHint("select",!0),sr.emit({type:"boxend",originalEvent:Jt,position:{x:Hr[0],y:Hr[1]}});var Ma=function(N3){return N3.selectable()&&!N3.selected()};Tc.emit("box").stdFilter(Ma).select().emit("boxselect"),Tc.nonempty()&&y.redrawHint("eles",!0),y.redraw()}if(jn!=null&&jn.unactivate(),Jt.touches[2])y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);else if(!Jt.touches[1]){if(!Jt.touches[0]){if(!Jt.touches[0]){y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var io=y.dragData.touchDragEles;if(jn!=null){var _l=jn._private.grabbed;gt(io),y.redrawHint("drag",!0),y.redrawHint("eles",!0),_l&&(jn.emit("freeon"),io.emit("free"),y.dragData.didDrag&&(jn.emit("dragfreeon"),io.emit("dragfree"))),x(jn,["touchend","tapend","vmouseup","tapdragout"],Jt,{x:Hr[0],y:Hr[1]}),jn.unactivate(),y.touchData.start=null}else{var Gf=y.findNearestElement(Hr[0],Hr[1],!0,!0);x(Gf,["touchend","tapend","vmouseup","tapdragout"],Jt,{x:Hr[0],y:Hr[1]})}var Ep=y.touchData.startPosition[0]-Hr[0],Tp=Ep*Ep,Uf=y.touchData.startPosition[1]-Hr[1],Eg=Uf*Uf,ad=Tp+Eg,bv=ad*Fa*Fa;y.touchData.singleTouchMoved||(jn||sr.$(":selected").unselect(["tapunselect"]),x(jn,["tap","vclick"],Jt,{x:Hr[0],y:Hr[1]}),ia=!1,Jt.timeStamp-Di<=sr.multiClickDebounceTime()?(La&&clearTimeout(La),ia=!0,Di=null,x(jn,["dbltap","vdblclick"],Jt,{x:Hr[0],y:Hr[1]})):(La=setTimeout(function(){ia||x(jn,["onetap","voneclick"],Jt,{x:Hr[0],y:Hr[1]})},sr.multiClickDebounceTime()),Di=Jt.timeStamp)),jn!=null&&!y.dragData.didDrag&&jn._private.selectable&&bv"u"){var wi=[],_s=function(Jt){return{clientX:Jt.clientX,clientY:Jt.clientY,force:1,identifier:Jt.pointerId,pageX:Jt.pageX,pageY:Jt.pageY,radiusX:Jt.width/2,radiusY:Jt.height/2,screenX:Jt.screenX,screenY:Jt.screenY,target:Jt.target}},Zi=function(Jt){return{event:Jt,touch:_s(Jt)}},Ni=function(Jt){wi.push(Zi(Jt))},ns=function(Jt){for(var jn=0;jn0)return Cn[0]}return null},at=Object.keys(U),lt=0;lt0?et:eF(I,O,g,x,T,L,$)},checkPoint:function(g,x,T,L,I,O,$){var z=mk(L,I),S=2*z;if(lv(g,x,this.points,O,$,L,I-S,[0,-1],T)||lv(g,x,this.points,O,$,L-S,I,[0,-1],T))return!0;var V=L/2+2*T,U=I/2+2*T,et=[O-V,$-U,O-V,$,O+V,$,O+V,$-U];return!!(jd(g,x,et)||C3(g,x,S,S,O+L/2-z,$+I/2-z,T)||C3(g,x,S,S,O-L/2+z,$+I/2-z,T))}}},dv.registerNodeShapes=function(){var y=this.nodeShapes={},g=this;this.generateEllipse(),this.generatePolygon("triangle",rd(3,0)),this.generateRoundPolygon("round-triangle",rd(3,0)),this.generatePolygon("rectangle",rd(4,0)),y.square=y.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var x=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",x),this.generateRoundPolygon("round-diamond",x)}this.generatePolygon("pentagon",rd(5,0)),this.generateRoundPolygon("round-pentagon",rd(5,0)),this.generatePolygon("hexagon",rd(6,0)),this.generateRoundPolygon("round-hexagon",rd(6,0)),this.generatePolygon("heptagon",rd(7,0)),this.generateRoundPolygon("round-heptagon",rd(7,0)),this.generatePolygon("octagon",rd(8,0)),this.generateRoundPolygon("round-octagon",rd(8,0));var T=new Array(20);{var L=_L(5,0),I=_L(5,Math.PI/5),O=.5*(3-Math.sqrt(5));O*=1.57;for(var $=0;$=g.deqFastCost*zt)break}else if(S){if(Dt>=g.deqCost*at||Dt>=g.deqAvgCost*et)break}else if(It>=g.deqNoDrawCost*ZL)break;var te=g.deq(T,Lt,gt);if(te.length>0)for(var Xt=0;Xt0&&(g.onDeqd(T,lt),!S&&g.shouldRedraw(T,lt,Lt,gt)&&I())},$=g.priority||R5;L.beforeRender(O,$(T))}}}},itt=function(){function y(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:uv;p(this,y),this.idsByKey=new Hb,this.keyForId=new Hb,this.cachesByLvl=new Hb,this.lvls=[],this.getKey=g,this.doesEleInvalidateKey=x}return m(y,[{key:"getIdsFor",value:function(x){x==null&&ou("Can not get id list for null key");var T=this.idsByKey,L=this.idsByKey.get(x);return L||(L=new $5,T.set(x,L)),L}},{key:"addIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).add(T)}},{key:"deleteIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).delete(T)}},{key:"getNumberOfIdsForKey",value:function(x){return x==null?0:this.getIdsFor(x).size}},{key:"updateKeyMappingFor",value:function(x){var T=x.id(),L=this.keyForId.get(T),I=this.getKey(x);this.deleteIdForKey(L,T),this.addIdForKey(I,T),this.keyForId.set(T,I)}},{key:"deleteKeyMappingFor",value:function(x){var T=x.id(),L=this.keyForId.get(T);this.deleteIdForKey(L,T),this.keyForId.delete(T)}},{key:"keyHasChangedFor",value:function(x){var T=x.id(),L=this.keyForId.get(T),I=this.getKey(x);return L!==I}},{key:"isInvalid",value:function(x){return this.keyHasChangedFor(x)||this.doesEleInvalidateKey(x)}},{key:"getCachesAt",value:function(x){var T=this.cachesByLvl,L=this.lvls,I=T.get(x);return I||(I=new Hb,T.set(x,I),L.push(x)),I}},{key:"getCache",value:function(x,T){return this.getCachesAt(T).get(x)}},{key:"get",value:function(x,T){var L=this.getKey(x),I=this.getCache(L,T);return I!=null&&this.updateKeyMappingFor(x),I}},{key:"getForCachedKey",value:function(x,T){var L=this.keyForId.get(x.id()),I=this.getCache(L,T);return I}},{key:"hasCache",value:function(x,T){return this.getCachesAt(T).has(x)}},{key:"has",value:function(x,T){var L=this.getKey(x);return this.hasCache(L,T)}},{key:"setCache",value:function(x,T,L){L.key=x,this.getCachesAt(T).set(x,L)}},{key:"set",value:function(x,T,L){var I=this.getKey(x);this.setCache(I,T,L),this.updateKeyMappingFor(x)}},{key:"deleteCache",value:function(x,T){this.getCachesAt(T).delete(x)}},{key:"delete",value:function(x,T){var L=this.getKey(x);this.deleteCache(L,T)}},{key:"invalidateKey",value:function(x){var T=this;this.lvls.forEach(function(L){return T.deleteCache(x,L)})}},{key:"invalidate",value:function(x){var T=x.id(),L=this.keyForId.get(T);this.deleteKeyMappingFor(x);var I=this.doesEleInvalidateKey(x);return I&&this.invalidateKey(L),I||this.getNumberOfIdsForKey(L)===0}}]),y}(),wT=25,mT=50,o6=-4,JL=3,tM=7.99,stt=8,att=1024,ott=1024,UB=1024,ctt=.2,utt=.8,ltt=10,htt=.15,ftt=.1,dtt=.9,gtt=.9,ptt=100,btt=1,c6={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},vtt=zf({getKey:null,doesEleInvalidateKey:uv,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:cv,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jk=function(g,x){var T=this;T.renderer=g,T.onDequeues=[];var L=vtt(x);fn(T,L),T.lookup=new itt(L.getKey,L.doesEleInvalidateKey),T.setupDequeueing()},Ch=jk.prototype;Ch.reasons=c6,Ch.getTextureQueue=function(y){var g=this;return g.eleImgCaches=g.eleImgCaches||{},g.eleImgCaches[y]=g.eleImgCaches[y]||[]},Ch.getRetiredTextureQueue=function(y){var g=this,x=g.eleImgCaches.retired=g.eleImgCaches.retired||{},T=x[y]=x[y]||[];return T},Ch.getElementQueue=function(){var y=this,g=y.eleCacheQueue=y.eleCacheQueue||new pk(function(x,T){return T.reqs-x.reqs});return g},Ch.getElementKeyToQueue=function(){var y=this,g=y.eleKeyToCacheQueue=y.eleKeyToCacheQueue||{};return g},Ch.getElement=function(y,g,x,T,L){var I=this,O=this.renderer,$=O.cy.zoom(),z=this.lookup;if(!g||g.w===0||g.h===0||isNaN(g.w)||isNaN(g.h)||!y.visible()||y.removed()||!I.allowEdgeTxrCaching&&y.isEdge()||!I.allowParentTxrCaching&&y.isParent())return null;if(T==null&&(T=Math.ceil(xL($*x))),T=tM||T>JL)return null;var S=Math.pow(2,T),V=g.h*S,U=g.w*S,et=O.eleTextBiggerThanMin(y,S);if(!this.isVisible(y,et))return null;var at=z.get(y,T);if(at&&at.invalidated&&(at.invalidated=!1,at.texture.invalidatedWidth-=at.width),at)return at;var lt;if(V<=wT?lt=wT:V<=mT?lt=mT:lt=Math.ceil(V/mT)*mT,V>UB||U>ott)return null;var gt=I.getTextureQueue(lt),Lt=gt[gt.length-2],Et=function(){return I.recycleTexture(lt,U)||I.addTexture(lt,U)};Lt||(Lt=gt[gt.length-1]),Lt||(Lt=Et()),Lt.width-Lt.usedWidthT;ge--)Ut=I.getElement(y,g,x,ge,c6.downscale);fe()}else return I.queueElement(y,Xt.level-1),Xt;else{var se;if(!It&&!zt&&!te)for(var Ne=T-1;Ne>=o6;Ne--){var pe=z.get(y,Ne);if(pe){se=pe;break}}if(Dt(se))return I.queueElement(y,T),se;Lt.context.translate(Lt.usedWidth,0),Lt.context.scale(S,S),this.drawElement(Lt.context,y,g,et,!1),Lt.context.scale(1/S,1/S),Lt.context.translate(-Lt.usedWidth,0)}return at={x:Lt.usedWidth,texture:Lt,level:T,scale:S,width:U,height:V,scaledLabelShown:et},Lt.usedWidth+=Math.ceil(U+stt),Lt.eleCaches.push(at),z.set(y,T,at),I.checkTextureFullness(Lt),at},Ch.invalidateElements=function(y){for(var g=0;g=ctt*y.width&&this.retireTexture(y)},Ch.checkTextureFullness=function(y){var g=this,x=g.getTextureQueue(y.height);y.usedWidth/y.width>utt&&y.fullnessChecks>=ltt?pm(x,y):y.fullnessChecks++},Ch.retireTexture=function(y){var g=this,x=y.height,T=g.getTextureQueue(x),L=this.lookup;pm(T,y),y.retired=!0;for(var I=y.eleCaches,O=0;O=g)return O.retired=!1,O.usedWidth=0,O.invalidatedWidth=0,O.fullnessChecks=0,mL(O.eleCaches),O.context.setTransform(1,0,0,1,0,0),O.context.clearRect(0,0,O.width,O.height),pm(L,O),T.push(O),O}},Ch.queueElement=function(y,g){var x=this,T=x.getElementQueue(),L=x.getElementKeyToQueue(),I=this.getKey(y),O=L[I];if(O)O.level=Math.max(O.level,g),O.eles.merge(y),O.reqs++,T.updateItem(O);else{var $={eles:y.spawn().merge(y),level:g,reqs:1,key:I};T.push($),L[I]=$}},Ch.dequeue=function(y){for(var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),L=[],I=g.lookup,O=0;O0;O++){var $=x.pop(),z=$.key,S=$.eles[0],V=I.hasCache(S,$.level);if(T[z]=null,V)continue;L.push($);var U=g.getBoundingBox(S);g.getElement(S,U,y,$.level,c6.dequeue)}return L},Ch.removeFromQueue=function(y){var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),L=this.getKey(y),I=T[L];I!=null&&(I.eles.length===1?(I.reqs=E3,x.updateItem(I),x.pop(),T[L]=null):I.eles.unmerge(y))},Ch.onDequeue=function(y){this.onDequeues.push(y)},Ch.offDequeue=function(y){pm(this.onDequeues,y)},Ch.setupDequeueing=vT.setupDequeueing({deqRedrawThreshold:ptt,deqCost:htt,deqAvgCost:ftt,deqNoDrawCost:dtt,deqFastCost:gtt,deq:function(g,x,T){return g.dequeue(x,T)},onDeqd:function(g,x){for(var T=0;T=yT||x>$k)return null}T.validateLayersElesOrdering(x,y);var z=T.layersByLevel,S=Math.pow(2,x),V=z[x]=z[x]||[],U,et=T.levelIsComplete(x,y),at,lt=function(){var fe=function(gn){if(T.validateLayersElesOrdering(gn,y),T.levelIsComplete(gn,y))return at=z[gn],!0},ge=function(gn){if(!at)for(var je=x+gn;u6<=je&&je<=$k&&!fe(je);je+=gn);};ge(1),ge(-1);for(var se=V.length-1;se>=0;se--){var Ne=V[se];Ne.invalid&&pm(V,Ne)}};if(!et)lt();else return V;var gt=function(){if(!U){U=Rd();for(var fe=0;fenpt)return null;var Ne=T.makeLayer(U,x);if(ge!=null){var pe=V.indexOf(ge)+1;V.splice(pe,0,Ne)}else(fe.insert===void 0||fe.insert)&&V.unshift(Ne);return Ne};if(T.skipping&&!$)return null;for(var Et=null,Dt=y.length/wtt,It=!$,zt=0;zt=Dt||!tF(Et.bb,te.boundingBox()))&&(Et=Lt({insert:!0,after:Et}),!Et))return null;at||It?T.queueLayer(Et,te):T.drawEleInLayer(Et,te,x,g),Et.eles.push(te),Ht[x]=Et}return at||(It?null:V)},w1.getEleLevelForLayerLevel=function(y,g){return y},w1.drawEleInLayer=function(y,g,x,T){var L=this,I=this.renderer,O=y.context,$=g.boundingBox();$.w===0||$.h===0||!g.visible()||(x=L.getEleLevelForLayerLevel(x,T),I.setImgSmoothing(O,!1),I.drawCachedElement(O,g,null,null,x,rpt),I.setImgSmoothing(O,!0))},w1.levelIsComplete=function(y,g){var x=this,T=x.layersByLevel[y];if(!T||T.length===0)return!1;for(var L=0,I=0;I0||O.invalid)return!1;L+=O.eles.length}return L===g.length},w1.validateLayersElesOrdering=function(y,g){var x=this.layersByLevel[y];if(x)for(var T=0;T0){g=!0;break}}return g},w1.invalidateElements=function(y){var g=this;y.length!==0&&(g.lastInvalidationTime=me(),!(y.length===0||!g.haveLayers())&&g.updateElementsInLayers(y,function(T,L,I){g.invalidateLayer(T)}))},w1.invalidateLayer=function(y){if(this.lastInvalidationTime=me(),!y.invalid){var g=y.level,x=y.eles,T=this.layersByLevel[g];pm(T,y),y.elesQueue=[],y.invalid=!0,y.replacement&&(y.replacement.invalid=!0);for(var L=0;L3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,I=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$=g._private.rscratch;if(!(I&&!g.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var z;x&&(z=x,y.translate(-z.x1,-z.y1));var S=I?g.pstyle("opacity").value:1,V=I?g.pstyle("line-opacity").value:1,U=g.pstyle("curve-style").value,et=g.pstyle("line-style").value,at=g.pstyle("width").pfValue,lt=g.pstyle("line-cap").value,gt=S*V,Lt=S*V,Et=function(){var se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:gt;U==="straight-triangle"?(O.eleStrokeStyle(y,g,se),O.drawEdgeTrianglePath(g,y,$.allpts)):(y.lineWidth=at,y.lineCap=lt,O.eleStrokeStyle(y,g,se),O.drawEdgePath(g,y,$.allpts,et),y.lineCap="butt")},Dt=function(){L&&O.drawEdgeOverlay(y,g)},It=function(){L&&O.drawEdgeUnderlay(y,g)},zt=function(){var se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Lt;O.drawArrowheads(y,g,se)},te=function(){O.drawElementText(y,g,null,T)};y.lineJoin="round";var Xt=g.pstyle("ghost").value==="yes";if(Xt){var Ht=g.pstyle("ghost-offset-x").pfValue,ie=g.pstyle("ghost-offset-y").pfValue,Ut=g.pstyle("ghost-opacity").value,fe=gt*Ut;y.translate(Ht,ie),Et(fe),zt(fe),y.translate(-Ht,-ie)}It(),Et(),zt(),Dt(),te(),x&&y.translate(z.x1,z.y1)}};var Ttt=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T){if(T.visible()){var L=T.pstyle("".concat(g,"-opacity")).value;if(L!==0){var I=this,O=I.usePaths(),$=T._private.rscratch,z=T.pstyle("".concat(g,"-padding")).pfValue,S=2*z,V=T.pstyle("".concat(g,"-color")).value;x.lineWidth=S,$.edgeType==="self"&&!O?x.lineCap="butt":x.lineCap="round",I.colorStrokeStyle(x,V[0],V[1],V[2],L),I.drawEdgePath(T,x,$.allpts,"solid")}}}};pv.drawEdgeOverlay=Ttt("overlay"),pv.drawEdgeUnderlay=Ttt("underlay"),pv.drawEdgePath=function(y,g,x,T){var L=y._private.rscratch,I=g,O,$=!1,z=this.usePaths(),S=y.pstyle("line-dash-pattern").pfValue,V=y.pstyle("line-dash-offset").pfValue;if(z){var U=x.join("$"),et=L.pathCacheKey&&L.pathCacheKey===U;et?(O=g=L.pathCache,$=!0):(O=g=new Path2D,L.pathCacheKey=U,L.pathCache=O)}if(I.setLineDash)switch(T){case"dotted":I.setLineDash([1,1]);break;case"dashed":I.setLineDash(S),I.lineDashOffset=V;break;case"solid":I.setLineDash([]);break}if(!$&&!L.badLine)switch(g.beginPath&&g.beginPath(),g.moveTo(x[0],x[1]),L.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var at=2;at+35&&arguments[5]!==void 0?arguments[5]:!0,O=this;if(T==null){if(I&&!O.eleTextBiggerThanMin(g))return}else if(T===!1)return;if(g.isNode()){var $=g.pstyle("label");if(!$||!$.value)return;var z=O.getLabelJustification(g);y.textAlign=z,y.textBaseline="bottom"}else{var S=g.element()._private.rscratch.badLine,V=g.pstyle("label"),U=g.pstyle("source-label"),et=g.pstyle("target-label");if(S||(!V||!V.value)&&(!U||!U.value)&&(!et||!et.value))return;y.textAlign="center",y.textBaseline="bottom"}var at=!x,lt;x&&(lt=x,y.translate(-lt.x1,-lt.y1)),L==null?(O.drawText(y,g,null,at,I),g.isEdge()&&(O.drawText(y,g,"source",at,I),O.drawText(y,g,"target",at,I))):O.drawText(y,g,L,at,I),x&&y.translate(lt.x1,lt.y1)},l6.getFontCache=function(y){var g;this.fontCaches=this.fontCaches||[];for(var x=0;x2&&arguments[2]!==void 0?arguments[2]:!0,T=g.pstyle("font-style").strValue,L=g.pstyle("font-size").pfValue+"px",I=g.pstyle("font-family").strValue,O=g.pstyle("font-weight").strValue,$=x?g.effectiveOpacity()*g.pstyle("text-opacity").value:1,z=g.pstyle("text-outline-opacity").value*$,S=g.pstyle("color").value,V=g.pstyle("text-outline-color").value;y.font=T+" "+O+" "+L+" "+I,y.lineJoin="round",this.colorFillStyle(y,S[0],S[1],S[2],$),this.colorStrokeStyle(y,V[0],V[1],V[2],z)};function upt(y,g,x,T,L){var I=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5;y.beginPath(),y.moveTo(g+I,x),y.lineTo(g+T-I,x),y.quadraticCurveTo(g+T,x,g+T,x+I),y.lineTo(g+T,x+L-I),y.quadraticCurveTo(g+T,x+L,g+T-I,x+L),y.lineTo(g+I,x+L),y.quadraticCurveTo(g,x+L,g,x+L-I),y.lineTo(g,x+I),y.quadraticCurveTo(g,x,g+I,x),y.closePath(),y.fill()}l6.getTextAngle=function(y,g){var x,T=y._private,L=T.rscratch,I=g?g+"-":"",O=y.pstyle(I+"text-rotation"),$=wp(L,"labelAngle",g);return O.strValue==="autorotate"?x=y.isEdge()?$:0:O.strValue==="none"?x=0:x=O.pfValue,x},l6.drawText=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,I=g._private,O=I.rscratch,$=L?g.effectiveOpacity():1;if(!(L&&($===0||g.pstyle("text-opacity").value===0))){x==="main"&&(x=null);var z=wp(O,"labelX",x),S=wp(O,"labelY",x),V,U,et=this.getLabelText(g,x);if(et!=null&&et!==""&&!isNaN(z)&&!isNaN(S)){this.setupTextStyle(y,g,L);var at=x?x+"-":"",lt=wp(O,"labelWidth",x),gt=wp(O,"labelHeight",x),Lt=g.pstyle(at+"text-margin-x").pfValue,Et=g.pstyle(at+"text-margin-y").pfValue,Dt=g.isEdge(),It=g.pstyle("text-halign").value,zt=g.pstyle("text-valign").value;Dt&&(It="center",zt="center"),z+=Lt,S+=Et;var te;switch(T?te=this.getTextAngle(g,x):te=0,te!==0&&(V=z,U=S,y.translate(V,U),y.rotate(te),z=0,S=0),zt){case"top":break;case"center":S+=gt/2;break;case"bottom":S+=gt;break}var Xt=g.pstyle("text-background-opacity").value,Ht=g.pstyle("text-border-opacity").value,ie=g.pstyle("text-border-width").pfValue,Ut=g.pstyle("text-background-padding").pfValue;if(Xt>0||ie>0&&Ht>0){var fe=z-Ut;switch(It){case"left":fe-=lt;break;case"center":fe-=lt/2;break}var ge=S-gt-Ut,se=lt+2*Ut,Ne=gt+2*Ut;if(Xt>0){var pe=y.fillStyle,gn=g.pstyle("text-background-color").value;y.fillStyle="rgba("+gn[0]+","+gn[1]+","+gn[2]+","+Xt*$+")";var je=g.pstyle("text-background-shape").strValue;je.indexOf("round")===0?upt(y,fe,ge,se,Ne,2):y.fillRect(fe,ge,se,Ne),y.fillStyle=pe}if(ie>0&&Ht>0){var Ge=y.strokeStyle,xn=y.lineWidth,Dn=g.pstyle("text-border-color").value,Xn=g.pstyle("text-border-style").value;if(y.strokeStyle="rgba("+Dn[0]+","+Dn[1]+","+Dn[2]+","+Ht*$+")",y.lineWidth=ie,y.setLineDash)switch(Xn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"double":y.lineWidth=ie/4,y.setLineDash([]);break;case"solid":y.setLineDash([]);break}if(y.strokeRect(fe,ge,se,Ne),Xn==="double"){var Cn=ie/2;y.strokeRect(fe+Cn,ge+Cn,se-Cn*2,Ne-Cn*2)}y.setLineDash&&y.setLineDash([]),y.lineWidth=xn,y.strokeStyle=Ge}}var Yn=2*g.pstyle("text-outline-width").pfValue;if(Yn>0&&(y.lineWidth=Yn),g.pstyle("text-wrap").value==="wrap"){var rr=wp(O,"labelWrapCachedLines",x),wr=wp(O,"labelLineHeight",x),ur=lt/2,er=this.getLabelJustification(g);switch(er==="auto"||(It==="left"?er==="left"?z+=-lt:er==="center"&&(z+=-ur):It==="center"?er==="left"?z+=-ur:er==="right"&&(z+=ur):It==="right"&&(er==="center"?z+=ur:er==="right"&&(z+=lt))),zt){case"top":S-=(rr.length-1)*wr;break;case"center":case"bottom":S-=(rr.length-1)*wr;break}for(var bn=0;bn0&&y.strokeText(rr[bn],z,S),y.fillText(rr[bn],z,S),S+=wr}else Yn>0&&y.strokeText(et,z,S),y.fillText(et,z,S);te!==0&&(y.rotate(-te),y.translate(-V,-U))}}};var qk={};qk.drawNode=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,L=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,I=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$,z,S=g._private,V=S.rscratch,U=g.position();if(!(!st(U.x)||!st(U.y))&&!(I&&!g.visible())){var et=I?g.effectiveOpacity():1,at=O.usePaths(),lt,gt=!1,Lt=g.padding();$=g.width()+2*Lt,z=g.height()+2*Lt;var Et;x&&(Et=x,y.translate(-Et.x1,-Et.y1));for(var Dt=g.pstyle("background-image"),It=Dt.value,zt=new Array(It.length),te=new Array(It.length),Xt=0,Ht=0;Ht0&&arguments[0]!==void 0?arguments[0]:Ne;O.eleFillStyle(y,g,Ni)},xn=function(){var Ni=arguments.length>0&&arguments[0]!==void 0?arguments[0]:je;O.colorStrokeStyle(y,pe[0],pe[1],pe[2],Ni)},Dn=g.pstyle("shape").strValue,Xn=g.pstyle("shape-polygon-points").pfValue;if(at){y.translate(U.x,U.y);var Cn=O.nodePathCache=O.nodePathCache||[],Yn=L9(Dn==="polygon"?Dn+","+Xn.join(","):Dn,""+z,""+$),rr=Cn[Yn];rr!=null?(lt=rr,gt=!0,V.pathCache=lt):(lt=new Path2D,Cn[Yn]=V.pathCache=lt)}var wr=function(){if(!gt){var Ni=U;at&&(Ni={x:0,y:0}),O.nodeShapes[O.getNodeShape(g)].draw(lt||y,Ni.x,Ni.y,$,z)}at?y.fill(lt):y.fill()},ur=function(){for(var Ni=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,ns=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Ua=S.backgrounding,sa=0,Xs=0;Xs0&&arguments[0]!==void 0?arguments[0]:!1,ns=arguments.length>1&&arguments[1]!==void 0?arguments[1]:et;O.hasPie(g)&&(O.drawPie(y,g,ns),Ni&&(at||O.nodeShapes[O.getNodeShape(g)].draw(y,U.x,U.y,$,z)))},bn=function(){var Ni=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,ns=(ge>0?ge:-ge)*Ni,Ua=ge>0?0:255;ge!==0&&(O.colorFillStyle(y,Ua,Ua,Ua,ns),at?y.fill(lt):y.fill())},pr=function(){if(se>0){if(y.lineWidth=se,y.lineCap="butt",y.setLineDash)switch(gn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"solid":case"double":y.setLineDash([]);break}if(at?y.stroke(lt):y.stroke(),gn==="double"){y.lineWidth=se/3;var Ni=y.globalCompositeOperation;y.globalCompositeOperation="destination-out",at?y.stroke(lt):y.stroke(),y.globalCompositeOperation=Ni}y.setLineDash&&y.setLineDash([])}},fr=function(){L&&O.drawNodeOverlay(y,g,U,$,z)},ri=function(){L&&O.drawNodeUnderlay(y,g,U,$,z)},_i=function(){O.drawElementText(y,g,null,T)},ia=g.pstyle("ghost").value==="yes";if(ia){var La=g.pstyle("ghost-offset-x").pfValue,Di=g.pstyle("ghost-offset-y").pfValue,wi=g.pstyle("ghost-opacity").value,_s=wi*et;y.translate(La,Di),Ge(wi*Ne),wr(),ur(_s,!0),xn(wi*je),pr(),er(ge!==0||se!==0),ur(_s,!1),bn(_s),y.translate(-La,-Di)}at&&y.translate(-U.x,-U.y),ri(),at&&y.translate(U.x,U.y),Ge(),wr(),ur(et,!0),xn(),pr(),er(ge!==0||se!==0),ur(et,!1),bn(),at&&y.translate(-U.x,-U.y),_i(),fr(),x&&y.translate(Et.x1,Et.y1)}};var _tt=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T,L,I,O){var $=this;if(T.visible()){var z=T.pstyle("".concat(g,"-padding")).pfValue,S=T.pstyle("".concat(g,"-opacity")).value,V=T.pstyle("".concat(g,"-color")).value,U=T.pstyle("".concat(g,"-shape")).value;if(S>0){if(L=L||T.position(),I==null||O==null){var et=T.padding();I=T.width()+2*et,O=T.height()+2*et}$.colorFillStyle(x,V[0],V[1],V[2],S),$.nodeShapes[U].draw(x,L.x,L.y,I+z*2,O+z*2),x.fill()}}}};qk.drawNodeOverlay=_tt("overlay"),qk.drawNodeUnderlay=_tt("underlay"),qk.hasPie=function(y){return y=y[0],y._private.hasPie},qk.drawPie=function(y,g,x,T){g=g[0],T=T||g.position();var L=g.cy().style(),I=g.pstyle("pie-size"),O=T.x,$=T.y,z=g.width(),S=g.height(),V=Math.min(z,S)/2,U=0,et=this.usePaths();et&&(O=0,$=0),I.units==="%"?V=V*I.pfValue:I.pfValue!==void 0&&(V=I.pfValue/2);for(var at=1;at<=L.pieBackgroundN;at++){var lt=g.pstyle("pie-"+at+"-background-size").value,gt=g.pstyle("pie-"+at+"-background-color").value,Lt=g.pstyle("pie-"+at+"-background-opacity").value*x,Et=lt/100;Et+U>1&&(Et=1-U);var Dt=1.5*Math.PI+2*Math.PI*U,It=2*Math.PI*Et,zt=Dt+It;lt===0||U>=1||U+Et>1||(y.beginPath(),y.moveTo(O,$),y.arc(O,$,V,Dt,zt),y.closePath(),this.colorFillStyle(y,gt[0],gt[1],gt[2],Lt),y.fill(),U+=Et)}};var xg={},lpt=100;xg.getPixelRatio=function(){var y=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var g=y.backingStorePixelRatio||y.webkitBackingStorePixelRatio||y.mozBackingStorePixelRatio||y.msBackingStorePixelRatio||y.oBackingStorePixelRatio||y.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/g},xg.paintCache=function(y){for(var g=this.paintCaches=this.paintCaches||[],x=!0,T,L=0;LO.minMbLowQualFrames&&(O.motionBlurPxRatio=O.mbPxRBlurry)),O.clearingMotionBlur&&(O.motionBlurPxRatio=1),O.textureDrawLastFrame&&!U&&(V[O.NODE]=!0,V[O.SELECT_BOX]=!0);var Dt=z.style(),It=z.zoom(),zt=L!==void 0?L:It,te=z.pan(),Xt={x:te.x,y:te.y},Ht={zoom:It,pan:{x:te.x,y:te.y}},ie=O.prevViewport,Ut=ie===void 0||Ht.zoom!==ie.zoom||Ht.pan.x!==ie.pan.x||Ht.pan.y!==ie.pan.y;!Ut&&!(gt&&!lt)&&(O.motionBlurPxRatio=1),I&&(Xt=I),zt*=$,Xt.x*=$,Xt.y*=$;var fe=O.getCachedZSortedEles();function ge(Di,wi,_s,Zi,Ni){var ns=Di.globalCompositeOperation;Di.globalCompositeOperation="destination-out",O.colorFillStyle(Di,255,255,255,O.motionBlurTransparency),Di.fillRect(wi,_s,Zi,Ni),Di.globalCompositeOperation=ns}function se(Di,wi){var _s,Zi,Ni,ns;!O.clearingMotionBlur&&(Di===S.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]||Di===S.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG])?(_s={x:te.x*at,y:te.y*at},Zi=It*at,Ni=O.canvasWidth*at,ns=O.canvasHeight*at):(_s=Xt,Zi=zt,Ni=O.canvasWidth,ns=O.canvasHeight),Di.setTransform(1,0,0,1,0,0),wi==="motionBlur"?ge(Di,0,0,Ni,ns):!g&&(wi===void 0||wi)&&Di.clearRect(0,0,Ni,ns),x||(Di.translate(_s.x,_s.y),Di.scale(Zi,Zi)),I&&Di.translate(I.x,I.y),L&&Di.scale(L,L)}if(U||(O.textureDrawLastFrame=!1),U){if(O.textureDrawLastFrame=!0,!O.textureCache){O.textureCache={},O.textureCache.bb=z.mutableElements().boundingBox(),O.textureCache.texture=O.data.bufferCanvases[O.TEXTURE_BUFFER];var Ne=O.data.bufferContexts[O.TEXTURE_BUFFER];Ne.setTransform(1,0,0,1,0,0),Ne.clearRect(0,0,O.canvasWidth*O.textureMult,O.canvasHeight*O.textureMult),O.render({forcedContext:Ne,drawOnlyNodeLayer:!0,forcedPxRatio:$*O.textureMult});var Ht=O.textureCache.viewport={zoom:z.zoom(),pan:z.pan(),width:O.canvasWidth,height:O.canvasHeight};Ht.mpan={x:(0-Ht.pan.x)/Ht.zoom,y:(0-Ht.pan.y)/Ht.zoom}}V[O.DRAG]=!1,V[O.NODE]=!1;var pe=S.contexts[O.NODE],gn=O.textureCache.texture,Ht=O.textureCache.viewport;pe.setTransform(1,0,0,1,0,0),et?ge(pe,0,0,Ht.width,Ht.height):pe.clearRect(0,0,Ht.width,Ht.height);var je=Dt.core("outside-texture-bg-color").value,Ge=Dt.core("outside-texture-bg-opacity").value;O.colorFillStyle(pe,je[0],je[1],je[2],Ge),pe.fillRect(0,0,Ht.width,Ht.height);var It=z.zoom();se(pe,!1),pe.clearRect(Ht.mpan.x,Ht.mpan.y,Ht.width/Ht.zoom/$,Ht.height/Ht.zoom/$),pe.drawImage(gn,Ht.mpan.x,Ht.mpan.y,Ht.width/Ht.zoom/$,Ht.height/Ht.zoom/$)}else O.textureOnViewport&&!g&&(O.textureCache=null);var xn=z.extent(),Dn=O.pinching||O.hoverData.dragging||O.swipePanning||O.data.wheelZooming||O.hoverData.draggingEles||O.cy.animated(),Xn=O.hideEdgesOnViewport&&Dn,Cn=[];if(Cn[O.NODE]=!V[O.NODE]&&et&&!O.clearedForMotionBlur[O.NODE]||O.clearingMotionBlur,Cn[O.NODE]&&(O.clearedForMotionBlur[O.NODE]=!0),Cn[O.DRAG]=!V[O.DRAG]&&et&&!O.clearedForMotionBlur[O.DRAG]||O.clearingMotionBlur,Cn[O.DRAG]&&(O.clearedForMotionBlur[O.DRAG]=!0),V[O.NODE]||x||T||Cn[O.NODE]){var Yn=et&&!Cn[O.NODE]&&at!==1,pe=g||(Yn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]:S.contexts[O.NODE]),rr=et&&!Yn?"motionBlur":void 0;se(pe,rr),Xn?O.drawCachedNodes(pe,fe.nondrag,$,xn):O.drawLayeredElements(pe,fe.nondrag,$,xn),O.debug&&O.drawDebugPoints(pe,fe.nondrag),!x&&!et&&(V[O.NODE]=!1)}if(!T&&(V[O.DRAG]||x||Cn[O.DRAG])){var Yn=et&&!Cn[O.DRAG]&&at!==1,pe=g||(Yn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG]:S.contexts[O.DRAG]);se(pe,et&&!Yn?"motionBlur":void 0),Xn?O.drawCachedNodes(pe,fe.drag,$,xn):O.drawCachedElements(pe,fe.drag,$,xn),O.debug&&O.drawDebugPoints(pe,fe.drag),!x&&!et&&(V[O.DRAG]=!1)}if(O.showFps||!T&&V[O.SELECT_BOX]&&!x){var pe=g||S.contexts[O.SELECT_BOX];if(se(pe),O.selection[4]==1&&(O.hoverData.selecting||O.touchData.selecting)){var It=O.cy.zoom(),wr=Dt.core("selection-box-border-width").value/It;pe.lineWidth=wr,pe.fillStyle="rgba("+Dt.core("selection-box-color").value[0]+","+Dt.core("selection-box-color").value[1]+","+Dt.core("selection-box-color").value[2]+","+Dt.core("selection-box-opacity").value+")",pe.fillRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]),wr>0&&(pe.strokeStyle="rgba("+Dt.core("selection-box-border-color").value[0]+","+Dt.core("selection-box-border-color").value[1]+","+Dt.core("selection-box-border-color").value[2]+","+Dt.core("selection-box-opacity").value+")",pe.strokeRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]))}if(S.bgActivePosistion&&!O.hoverData.selecting){var It=O.cy.zoom(),ur=S.bgActivePosistion;pe.fillStyle="rgba("+Dt.core("active-bg-color").value[0]+","+Dt.core("active-bg-color").value[1]+","+Dt.core("active-bg-color").value[2]+","+Dt.core("active-bg-opacity").value+")",pe.beginPath(),pe.arc(ur.x,ur.y,Dt.core("active-bg-size").pfValue/It,0,2*Math.PI),pe.fill()}var er=O.lastRedrawTime;if(O.showFps&&er){er=Math.round(er);var bn=Math.round(1e3/er);pe.setTransform(1,0,0,1,0,0),pe.fillStyle="rgba(255, 0, 0, 0.75)",pe.strokeStyle="rgba(255, 0, 0, 0.75)",pe.lineWidth=1,pe.fillText("1 frame = "+er+" ms = "+bn+" fps",0,20);var pr=60;pe.strokeRect(0,30,250,20),pe.fillRect(0,30,250*Math.min(bn/pr,1),20)}x||(V[O.SELECT_BOX]=!1)}if(et&&at!==1){var fr=S.contexts[O.NODE],ri=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_NODE],_i=S.contexts[O.DRAG],ia=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_DRAG],La=function(wi,_s,Zi){wi.setTransform(1,0,0,1,0,0),Zi||!Et?wi.clearRect(0,0,O.canvasWidth,O.canvasHeight):ge(wi,0,0,O.canvasWidth,O.canvasHeight);var Ni=at;wi.drawImage(_s,0,0,O.canvasWidth*Ni,O.canvasHeight*Ni,0,0,O.canvasWidth,O.canvasHeight)};(V[O.NODE]||Cn[O.NODE])&&(La(fr,ri,Cn[O.NODE]),V[O.NODE]=!1),(V[O.DRAG]||Cn[O.DRAG])&&(La(_i,ia,Cn[O.DRAG]),V[O.DRAG]=!1)}O.prevViewport=Ht,O.clearingMotionBlur&&(O.clearingMotionBlur=!1,O.motionBlurCleared=!0,O.motionBlur=!0),et&&(O.motionBlurTimeout=setTimeout(function(){O.motionBlurTimeout=null,O.clearedForMotionBlur[O.NODE]=!1,O.clearedForMotionBlur[O.DRAG]=!1,O.motionBlur=!1,O.clearingMotionBlur=!U,O.mbFrames=0,V[O.NODE]=!0,V[O.DRAG]=!0,O.redraw()},lpt)),g||z.emit("render")};var I3={};I3.drawPolygonPath=function(y,g,x,T,L,I){var O=T/2,$=L/2;y.beginPath&&y.beginPath(),y.moveTo(g+O*I[0],x+$*I[1]);for(var z=1;z0&&O>0){at.clearRect(0,0,I,O),at.globalCompositeOperation="source-over";var lt=this.getCachedZSortedEles();if(y.full)at.translate(-T.x1*S,-T.y1*S),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(T.x1*S,T.y1*S);else{var gt=g.pan(),Lt={x:gt.x*S,y:gt.y*S};S*=g.zoom(),at.translate(Lt.x,Lt.y),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(-Lt.x,-Lt.y)}y.bg&&(at.globalCompositeOperation="destination-over",at.fillStyle=y.bg,at.rect(0,0,I,O),at.fill())}return et};function hpt(y,g){for(var x=atob(y),T=new ArrayBuffer(x.length),L=new Uint8Array(T),I=0;I"u"?"undefined":f(OffscreenCanvas))!=="undefined"?x=new OffscreenCanvas(y,g):(x=document.createElement("canvas"),x.width=y,x.height=g),x},[C0,gv,pv,kT,l6,qk,xg,I3,ET,Dtt].forEach(function(y){fn(Ec,y)});var h6=[{name:"null",impl:FB},{name:"base",impl:QL},{name:"canvas",impl:fpt}],kg=[{type:"layout",extensions:ett},{type:"renderer",extensions:h6}],Tm={},rM={};function m1(y,g,x){var T=x,L=function(ie){no("Can not register `"+g+"` for `"+y+"` since `"+ie+"` already exists in the prototype and can not be overridden")};if(y==="core"){if(Nk.prototype[g])return L(g);Nk.prototype[g]=x}else if(y==="collection"){if(Hf.prototype[g])return L(g);Hf.prototype[g]=x}else if(y==="layout"){for(var I=function(ie){this.options=ie,x.call(this,ie),ct(this._private)||(this._private={}),this._private.cy=ie.cy,this._private.listeners=[],this.createEmitter()},O=I.prototype=Object.create(x.prototype),$=[],z=0;z<$.length;z++){var S=$[z];O[S]=O[S]||function(){return this}}O.start&&!O.run?O.run=function(){return this.start(),this}:!O.start&&O.run&&(O.start=function(){return this.run(),this});var V=x.prototype.stop;O.stop=function(){var Ht=this.options;if(Ht&&Ht.animate){var ie=this.animations;if(ie)for(var Ut=0;UtH&&(this.rect.x-=(this.labelWidth-H)/2,this.setWidth(this.labelWidth)),this.labelHeight>Y&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-Y)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-Y),this.setHeight(this.labelHeight))}}},F.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},F.prototype.transform=function(R){var H=this.rect.x;H>C.WORLD_BOUNDARY?H=C.WORLD_BOUNDARY:H<-C.WORLD_BOUNDARY&&(H=-C.WORLD_BOUNDARY);var Y=this.rect.y;Y>C.WORLD_BOUNDARY?Y=C.WORLD_BOUNDARY:Y<-C.WORLD_BOUNDARY&&(Y=-C.WORLD_BOUNDARY);var rt=new P(H,Y),J=R.inverseTransformPoint(rt);this.setLocation(J.x,J.y)},F.prototype.getLeft=function(){return this.rect.x},F.prototype.getRight=function(){return this.rect.x+this.rect.width},F.prototype.getTop=function(){return this.rect.y},F.prototype.getBottom=function(){return this.rect.y+this.rect.height},F.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},f.exports=F},function(f,p,v){function m(b,E){b==null&&E==null?(this.x=0,this.y=0):(this.x=b,this.y=E)}m.prototype.getX=function(){return this.x},m.prototype.getY=function(){return this.y},m.prototype.setX=function(b){this.x=b},m.prototype.setY=function(b){this.y=b},m.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},m.prototype.getCopy=function(){return new m(this.x,this.y)},m.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},f.exports=m},function(f,p,v){var m=v(2),b=v(10),E=v(0),C=v(6),A=v(3),P=v(1),F=v(13),j=v(12),R=v(11);function H(rt,J,it){m.call(this,it),this.estimatedSize=b.MIN_VALUE,this.margin=E.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=rt,J!=null&&J instanceof C?this.graphManager=J:J!=null&&J instanceof Layout&&(this.graphManager=J.graphManager)}H.prototype=Object.create(m.prototype);for(var Y in m)H[Y]=m[Y];H.prototype.getNodes=function(){return this.nodes},H.prototype.getEdges=function(){return this.edges},H.prototype.getGraphManager=function(){return this.graphManager},H.prototype.getParent=function(){return this.parent},H.prototype.getLeft=function(){return this.left},H.prototype.getRight=function(){return this.right},H.prototype.getTop=function(){return this.top},H.prototype.getBottom=function(){return this.bottom},H.prototype.isConnected=function(){return this.isConnected},H.prototype.add=function(rt,J,it){if(J==null&&it==null){var ft=rt;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(ft)>-1)throw"Node already in graph!";return ft.owner=this,this.getNodes().push(ft),ft}else{var Tt=rt;if(!(this.getNodes().indexOf(J)>-1&&this.getNodes().indexOf(it)>-1))throw"Source or target not in graph!";if(!(J.owner==it.owner&&J.owner==this))throw"Both owners must be this graph!";return J.owner!=it.owner?null:(Tt.source=J,Tt.target=it,Tt.isInterGraph=!1,this.getEdges().push(Tt),J.edges.push(Tt),it!=J&&it.edges.push(Tt),Tt)}},H.prototype.remove=function(rt){var J=rt;if(rt instanceof A){if(J==null)throw"Node is null!";if(!(J.owner!=null&&J.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var it=J.edges.slice(),ft,Tt=it.length,kt=0;kt-1&&yt>-1))throw"Source and/or target doesn't know this edge!";ft.source.edges.splice(ct,1),ft.target!=ft.source&&ft.target.edges.splice(yt,1);var mt=ft.source.owner.getEdges().indexOf(ft);if(mt==-1)throw"Not in owner's edge list!";ft.source.owner.getEdges().splice(mt,1)}},H.prototype.updateLeftTop=function(){for(var rt=b.MAX_VALUE,J=b.MAX_VALUE,it,ft,Tt,kt=this.getNodes(),mt=kt.length,ct=0;ctit&&(rt=it),J>ft&&(J=ft)}return rt==b.MAX_VALUE?null:(kt[0].getParent().paddingLeft!=null?Tt=kt[0].getParent().paddingLeft:Tt=this.margin,this.left=J-Tt,this.top=rt-Tt,new j(this.left,this.top))},H.prototype.updateBounds=function(rt){for(var J=b.MAX_VALUE,it=-b.MAX_VALUE,ft=b.MAX_VALUE,Tt=-b.MAX_VALUE,kt,mt,ct,yt,st,xt=this.nodes,ht=xt.length,dt=0;dtkt&&(J=kt),itct&&(ft=ct),Ttkt&&(J=kt),itct&&(ft=ct),Tt=this.nodes.length){var ht=0;it.forEach(function(dt){dt.owner==rt&&ht++}),ht==this.nodes.length&&(this.isConnected=!0)}},f.exports=H},function(f,p,v){var m,b=v(1);function E(C){m=v(5),this.layout=C,this.graphs=[],this.edges=[]}E.prototype.addRoot=function(){var C=this.layout.newGraph(),A=this.layout.newNode(null),P=this.add(C,A);return this.setRootGraph(P),this.rootGraph},E.prototype.add=function(C,A,P,F,j){if(P==null&&F==null&&j==null){if(C==null)throw"Graph is null!";if(A==null)throw"Parent node is null!";if(this.graphs.indexOf(C)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(C),C.parent!=null)throw"Already has a parent!";if(A.child!=null)throw"Already has a child!";return C.parent=A,A.child=C,C}else{j=P,F=A,P=C;var R=F.getOwner(),H=j.getOwner();if(!(R!=null&&R.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(H!=null&&H.getGraphManager()==this))throw"Target not in this graph mgr!";if(R==H)return P.isInterGraph=!1,R.add(P,F,j);if(P.isInterGraph=!0,P.source=F,P.target=j,this.edges.indexOf(P)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(P),!(P.source!=null&&P.target!=null))throw"Edge source and/or target is null!";if(!(P.source.edges.indexOf(P)==-1&&P.target.edges.indexOf(P)==-1))throw"Edge already in source and/or target incidency list!";return P.source.edges.push(P),P.target.edges.push(P),P}},E.prototype.remove=function(C){if(C instanceof m){var A=C;if(A.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(A==this.rootGraph||A.parent!=null&&A.parent.graphManager==this))throw"Invalid parent node!";var P=[];P=P.concat(A.getEdges());for(var F,j=P.length,R=0;R=C.getRight()?A[0]+=Math.min(C.getX()-E.getX(),E.getRight()-C.getRight()):C.getX()<=E.getX()&&C.getRight()>=E.getRight()&&(A[0]+=Math.min(E.getX()-C.getX(),C.getRight()-E.getRight())),E.getY()<=C.getY()&&E.getBottom()>=C.getBottom()?A[1]+=Math.min(C.getY()-E.getY(),E.getBottom()-C.getBottom()):C.getY()<=E.getY()&&C.getBottom()>=E.getBottom()&&(A[1]+=Math.min(E.getY()-C.getY(),C.getBottom()-E.getBottom()));var j=Math.abs((C.getCenterY()-E.getCenterY())/(C.getCenterX()-E.getCenterX()));C.getCenterY()===E.getCenterY()&&C.getCenterX()===E.getCenterX()&&(j=1);var R=j*A[0],H=A[1]/j;A[0]R)return A[0]=P,A[1]=Y,A[2]=j,A[3]=xt,!1;if(Fj)return A[0]=H,A[1]=F,A[2]=yt,A[3]=R,!1;if(Pj?(A[0]=J,A[1]=it,tt=!0):(A[0]=rt,A[1]=Y,tt=!0):pt===X&&(P>j?(A[0]=H,A[1]=Y,tt=!0):(A[0]=ft,A[1]=it,tt=!0)),-Ft===X?j>P?(A[2]=st,A[3]=xt,Pt=!0):(A[2]=yt,A[3]=ct,Pt=!0):Ft===X&&(j>P?(A[2]=mt,A[3]=ct,Pt=!0):(A[2]=ht,A[3]=xt,Pt=!0)),tt&&Pt)return!1;if(P>j?F>R?(Rt=this.getCardinalDirection(pt,X,4),Bt=this.getCardinalDirection(Ft,X,2)):(Rt=this.getCardinalDirection(-pt,X,3),Bt=this.getCardinalDirection(-Ft,X,1)):F>R?(Rt=this.getCardinalDirection(-pt,X,1),Bt=this.getCardinalDirection(-Ft,X,3)):(Rt=this.getCardinalDirection(pt,X,2),Bt=this.getCardinalDirection(Ft,X,4)),!tt)switch(Rt){case 1:Ot=Y,vt=P+-kt/X,A[0]=vt,A[1]=Ot;break;case 2:vt=ft,Ot=F+Tt*X,A[0]=vt,A[1]=Ot;break;case 3:Ot=it,vt=P+kt/X,A[0]=vt,A[1]=Ot;break;case 4:vt=J,Ot=F+-Tt*X,A[0]=vt,A[1]=Ot;break}if(!Pt)switch(Bt){case 1:qe=ct,Vt=j+-Ct/X,A[2]=Vt,A[3]=qe;break;case 2:Vt=ht,qe=R+dt*X,A[2]=Vt,A[3]=qe;break;case 3:qe=xt,Vt=j+Ct/X,A[2]=Vt,A[3]=qe;break;case 4:Vt=st,qe=R+-dt*X,A[2]=Vt,A[3]=qe;break}}return!1},b.getCardinalDirection=function(E,C,A){return E>C?A:1+A%4},b.getIntersection=function(E,C,A,P){if(P==null)return this.getIntersection2(E,C,A);var F=E.x,j=E.y,R=C.x,H=C.y,Y=A.x,rt=A.y,J=P.x,it=P.y,ft=void 0,Tt=void 0,kt=void 0,mt=void 0,ct=void 0,yt=void 0,st=void 0,xt=void 0,ht=void 0;return kt=H-j,ct=F-R,st=R*j-F*H,mt=it-rt,yt=Y-J,xt=J*rt-Y*it,ht=kt*yt-mt*ct,ht===0?null:(ft=(ct*xt-yt*st)/ht,Tt=(mt*st-kt*xt)/ht,new m(ft,Tt))},b.angleOfVector=function(E,C,A,P){var F=void 0;return E!==A?(F=Math.atan((P-C)/(A-E)),A0?1:b<0?-1:0},m.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},m.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},f.exports=m},function(f,p,v){function m(){}m.MAX_VALUE=2147483647,m.MIN_VALUE=-2147483648,f.exports=m},function(f,p,v){var m=function(){function F(j,R){for(var H=0;H"u"?"undefined":m(E);return E==null||C!="object"&&C!="function"},f.exports=b},function(f,p,v){function m(Y){if(Array.isArray(Y)){for(var rt=0,J=Array(Y.length);rt0&&rt;){for(kt.push(ct[0]);kt.length>0&&rt;){var yt=kt[0];kt.splice(0,1),Tt.add(yt);for(var st=yt.getEdges(),ft=0;ft-1&&ct.splice(Ct,1)}Tt=new Set,mt=new Map}}return Y},H.prototype.createDummyNodesForBendpoints=function(Y){for(var rt=[],J=Y.source,it=this.graphManager.calcLowestCommonAncestor(Y.source,Y.target),ft=0;ft0){for(var it=this.edgeToDummyNodes.get(J),ft=0;ft=0&&rt.splice(xt,1);var ht=mt.getNeighborsList();ht.forEach(function(tt){if(J.indexOf(tt)<0){var Pt=it.get(tt),pt=Pt-1;pt==1&&yt.push(tt),it.set(tt,pt)}})}J=J.concat(yt),(rt.length==1||rt.length==2)&&(ft=!0,Tt=rt[0])}return Tt},H.prototype.setGraphManager=function(Y){this.graphManager=Y},f.exports=H},function(f,p,v){function m(){}m.seed=1,m.x=0,m.nextDouble=function(){return m.x=Math.sin(m.seed++)*1e4,m.x-Math.floor(m.x)},f.exports=m},function(f,p,v){var m=v(4);function b(E,C){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(E){this.lworldOrgX=E},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(E){this.lworldOrgY=E},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(E){this.lworldExtX=E},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(E){this.lworldExtY=E},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(E){this.ldeviceOrgX=E},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(E){this.ldeviceOrgY=E},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(E){this.ldeviceExtX=E},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(E){this.ldeviceExtY=E},b.prototype.transformX=function(E){var C=0,A=this.lworldExtX;return A!=0&&(C=this.ldeviceOrgX+(E-this.lworldOrgX)*this.ldeviceExtX/A),C},b.prototype.transformY=function(E){var C=0,A=this.lworldExtY;return A!=0&&(C=this.ldeviceOrgY+(E-this.lworldOrgY)*this.ldeviceExtY/A),C},b.prototype.inverseTransformX=function(E){var C=0,A=this.ldeviceExtX;return A!=0&&(C=this.lworldOrgX+(E-this.ldeviceOrgX)*this.lworldExtX/A),C},b.prototype.inverseTransformY=function(E){var C=0,A=this.ldeviceExtY;return A!=0&&(C=this.lworldOrgY+(E-this.ldeviceOrgY)*this.lworldExtY/A),C},b.prototype.inverseTransformPoint=function(E){var C=new m(this.inverseTransformX(E.x),this.inverseTransformY(E.y));return C},f.exports=b},function(f,p,v){function m(R){if(Array.isArray(R)){for(var H=0,Y=Array(R.length);HE.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*E.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-E.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT_INCREMENTAL):(R>E.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(E.COOLING_ADAPTATION_FACTOR,1-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*(1-E.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},F.prototype.calcSpringForces=function(){for(var R=this.getAllEdges(),H,Y=0;Y0&&arguments[0]!==void 0?arguments[0]:!0,H=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,Y,rt,J,it,ft=this.getAllNodes(),Tt;if(this.useFRGridVariant)for(this.totalIterations%E.GRID_CALCULATION_CHECK_PERIOD==1&&R&&this.updateGrid(),Tt=new Set,Y=0;Ykt||Tt>kt)&&(R.gravitationForceX=-this.gravityConstant*J,R.gravitationForceY=-this.gravityConstant*it)):(kt=H.getEstimatedSize()*this.compoundGravityRangeFactor,(ft>kt||Tt>kt)&&(R.gravitationForceX=-this.gravityConstant*J*this.compoundGravityConstant,R.gravitationForceY=-this.gravityConstant*it*this.compoundGravityConstant))},F.prototype.isConverged=function(){var R,H=!1;return this.totalIterations>this.maxIterations/3&&(H=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),R=this.totalDisplacement=ft.length||kt>=ft[0].length)){for(var mt=0;mtF}}]),A}();f.exports=C},function(f,p,v){var m=function(){function C(A,P){for(var F=0;F2&&arguments[2]!==void 0?arguments[2]:1,j=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,R=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,C),this.sequence1=A,this.sequence2=P,this.match_score=F,this.mismatch_penalty=j,this.gap_penalty=R,this.iMax=A.length+1,this.jMax=P.length+1,this.grid=new Array(this.iMax);for(var H=0;H=0;A--){var P=this.listeners[A];P.event===E&&P.callback===C&&this.listeners.splice(A,1)}},b.emit=function(E,C){for(var A=0;AP.coolingFactor*P.maxNodeDisplacement&&(this.displacementX=P.coolingFactor*P.maxNodeDisplacement*E.sign(this.displacementX)),Math.abs(this.displacementY)>P.coolingFactor*P.maxNodeDisplacement&&(this.displacementY=P.coolingFactor*P.maxNodeDisplacement*E.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),P.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},C.prototype.propogateDisplacementToChildren=function(P,F){for(var j=this.getChild().getNodes(),R,H=0;H0)this.positionNodesRadially(ct);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var yt=new Set(this.getAllNodes()),st=this.nodesWithGravity.filter(function(xt){return yt.has(xt)});this.graphManager.setAllNodesToApplyGravitation(st),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},kt.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%j.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var ct=new Set(this.getAllNodes()),yt=this.nodesWithGravity.filter(function(ht){return ct.has(ht)});this.graphManager.setAllNodesToApplyGravitation(yt),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=j.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=j.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var st=!this.isTreeGrowing&&!this.isGrowthFinished,xt=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(st,xt),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},kt.prototype.getPositionsData=function(){for(var ct=this.graphManager.getAllNodes(),yt={},st=0;st1){var tt;for(tt=0;ttxt&&(xt=Math.floor(Ct.y)),dt=Math.floor(Ct.x+F.DEFAULT_COMPONENT_SEPERATION)}this.transform(new Y(R.WORLD_CENTER_X-Ct.x/2,R.WORLD_CENTER_Y-Ct.y/2))},kt.radialLayout=function(ct,yt,st){var xt=Math.max(this.maxDiagonalInTree(ct),F.DEFAULT_RADIAL_SEPARATION);kt.branchRadialLayout(yt,null,0,359,0,xt);var ht=ft.calculateBounds(ct),dt=new Tt;dt.setDeviceOrgX(ht.getMinX()),dt.setDeviceOrgY(ht.getMinY()),dt.setWorldOrgX(st.x),dt.setWorldOrgY(st.y);for(var Ct=0;Ct1;){var qe=Vt[0];Vt.splice(0,1);var _n=X.indexOf(qe);_n>=0&&X.splice(_n,1),vt--,Rt--}yt!=null?Ot=(X.indexOf(Vt[0])+1)%vt:Ot=0;for(var Te=Math.abs(xt-st)/Rt,Wn=Ot;Bt!=Rt;Wn=++Wn%vt){var Ae=X[Wn].getOtherEnd(ct);if(Ae!=yt){var ne=(st+Bt*Te)%360,ke=(ne+Te)%360;kt.branchRadialLayout(Ae,ct,ne,ke,ht+dt,dt),Bt++}}},kt.maxDiagonalInTree=function(ct){for(var yt=J.MIN_VALUE,st=0;styt&&(yt=ht)}return yt},kt.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},kt.prototype.groupZeroDegreeMembers=function(){var ct=this,yt={};this.memberGroups={},this.idToDummyNode={};for(var st=[],xt=this.graphManager.getAllNodes(),ht=0;ht"u"&&(yt[tt]=[]),yt[tt]=yt[tt].concat(dt)}Object.keys(yt).forEach(function(Pt){if(yt[Pt].length>1){var pt="DummyCompound_"+Pt;ct.memberGroups[pt]=yt[Pt];var Ft=yt[Pt][0].getParent(),X=new A(ct.graphManager);X.id=pt,X.paddingLeft=Ft.paddingLeft||0,X.paddingRight=Ft.paddingRight||0,X.paddingBottom=Ft.paddingBottom||0,X.paddingTop=Ft.paddingTop||0,ct.idToDummyNode[pt]=X;var Rt=ct.getGraphManager().add(ct.newGraph(),X),Bt=Ft.getChild();Bt.add(X);for(var vt=0;vt=0;ct--){var yt=this.compoundOrder[ct],st=yt.id,xt=yt.paddingLeft,ht=yt.paddingTop;this.adjustLocations(this.tiledMemberPack[st],yt.rect.x,yt.rect.y,xt,ht)}},kt.prototype.repopulateZeroDegreeMembers=function(){var ct=this,yt=this.tiledZeroDegreePack;Object.keys(yt).forEach(function(st){var xt=ct.idToDummyNode[st],ht=xt.paddingLeft,dt=xt.paddingTop;ct.adjustLocations(yt[st],xt.rect.x,xt.rect.y,ht,dt)})},kt.prototype.getToBeTiled=function(ct){var yt=ct.id;if(this.toBeTiled[yt]!=null)return this.toBeTiled[yt];var st=ct.getChild();if(st==null)return this.toBeTiled[yt]=!1,!1;for(var xt=st.getNodes(),ht=0;ht0)return this.toBeTiled[yt]=!1,!1;if(dt.getChild()==null){this.toBeTiled[dt.id]=!1;continue}if(!this.getToBeTiled(dt))return this.toBeTiled[yt]=!1,!1}return this.toBeTiled[yt]=!0,!0},kt.prototype.getNodeDegree=function(ct){ct.id;for(var yt=ct.getEdges(),st=0,xt=0;xtPt&&(Pt=Ft.rect.height)}st+=Pt+ct.verticalPadding}},kt.prototype.tileCompoundMembers=function(ct,yt){var st=this;this.tiledMemberPack=[],Object.keys(ct).forEach(function(xt){var ht=yt[xt];st.tiledMemberPack[xt]=st.tileNodes(ct[xt],ht.paddingLeft+ht.paddingRight),ht.rect.width=st.tiledMemberPack[xt].width,ht.rect.height=st.tiledMemberPack[xt].height})},kt.prototype.tileNodes=function(ct,yt){var st=F.TILING_PADDING_VERTICAL,xt=F.TILING_PADDING_HORIZONTAL,ht={rows:[],rowWidth:[],rowHeight:[],width:0,height:yt,verticalPadding:st,horizontalPadding:xt};ct.sort(function(tt,Pt){return tt.rect.width*tt.rect.height>Pt.rect.width*Pt.rect.height?-1:tt.rect.width*tt.rect.height0&&(Ct+=ct.horizontalPadding),ct.rowWidth[st]=Ct,ct.width0&&(tt+=ct.verticalPadding);var Pt=0;tt>ct.rowHeight[st]&&(Pt=ct.rowHeight[st],ct.rowHeight[st]=tt,Pt=ct.rowHeight[st]-Pt),ct.height+=Pt,ct.rows[st].push(yt)},kt.prototype.getShortestRowIndex=function(ct){for(var yt=-1,st=Number.MAX_VALUE,xt=0;xtst&&(yt=xt,st=ct.rowWidth[xt]);return yt},kt.prototype.canAddHorizontal=function(ct,yt,st){var xt=this.getShortestRowIndex(ct);if(xt<0)return!0;var ht=ct.rowWidth[xt];if(ht+ct.horizontalPadding+yt<=ct.width)return!0;var dt=0;ct.rowHeight[xt]0&&(dt=st+ct.verticalPadding-ct.rowHeight[xt]);var Ct;ct.width-ht>=yt+ct.horizontalPadding?Ct=(ct.height+dt)/(ht+yt+ct.horizontalPadding):Ct=(ct.height+dt)/ct.width,dt=st+ct.verticalPadding;var tt;return ct.widthdt&&yt!=st){xt.splice(-1,1),ct.rows[st].push(ht),ct.rowWidth[yt]=ct.rowWidth[yt]-dt,ct.rowWidth[st]=ct.rowWidth[st]+dt,ct.width=ct.rowWidth[instance.getLongestRowIndex(ct)];for(var Ct=Number.MIN_VALUE,tt=0;ttCt&&(Ct=xt[tt].height);yt>0&&(Ct+=ct.verticalPadding);var Pt=ct.rowHeight[yt]+ct.rowHeight[st];ct.rowHeight[yt]=Ct,ct.rowHeight[st]0)for(var Bt=ht;Bt<=dt;Bt++)Rt[0]+=this.grid[Bt][Ct-1].length+this.grid[Bt][Ct].length-1;if(dt0)for(var Bt=Ct;Bt<=tt;Bt++)Rt[3]+=this.grid[ht-1][Bt].length+this.grid[ht][Bt].length-1;for(var vt=J.MAX_VALUE,Ot,Vt,qe=0;qe0){var tt;tt=Tt.getGraphManager().add(Tt.newGraph(),st),this.processChildrenList(tt,yt,Tt)}}},Y.prototype.stop=function(){return this.stopped=!0,this};var J=function(ft){ft("layout","cose-bilkent",Y)};typeof cytoscape<"u"&&J(cytoscape),p.exports=J}])})})(Kjt);var lWe=Kjt.exports;const hWe=PE(lWe);Wjt.use(hWe);function Qjt(i,a,f,p){Gjt.drawNode(i,a,f,p),a.children&&a.children.forEach((v,m)=>{Qjt(i,v,f<0?m:f,p)})}function fWe(i,a){a.edges().map((f,p)=>{const v=f.data();if(f[0]._private.bodyBounds){const m=f[0]._private.rscratch;Wt.trace("Edge: ",p,v),i.insert("path").attr("d",`M ${m.startX},${m.startY} L ${m.midX},${m.midY} L${m.endX},${m.endY} `).attr("class","edge section-edge-"+v.section+" edge-depth-"+v.depth)}})}function Zjt(i,a,f,p){a.add({group:"nodes",data:{id:i.id,labelText:i.descr,height:i.height,width:i.width,level:p,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(v=>{Zjt(v,a,f,p+1),a.add({group:"edges",data:{id:`${i.id}_${v.id}`,source:i.id,target:v.id,depth:p,section:v.section}})})}function dWe(i,a){return new Promise(f=>{const p=xr("body").append("div").attr("id","cy").attr("style","display:none"),v=Wjt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});p.remove(),Zjt(i,v,a,0),v.nodes().forEach(function(m){m.layoutDimensions=()=>{const b=m.data();return{w:b.width,h:b.height}}}),v.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),v.ready(m=>{Wt.info("Ready",m),f(v)})})}function gWe(i){i.nodes().map((a,f)=>{const p=a.data();p.x=a.position().x,p.y=a.position().y,Gjt.positionNode(p);const v=zgt(p.nodeId);Wt.info("Id:",f,"Position: (",a.position().x,", ",a.position().y,")",p),v.attr("transform",`translate(${a.position().x-p.width/2}, ${a.position().y-p.height/2})`),v.attr("attr",`apa-${f})`)})}const pWe={draw:async(i,a,f,p)=>{const v=De();v.htmlLabels=!1,Wt.debug(`Rendering mindmap diagram -`+i,p.parser);const m=De().securityLevel;let b;m==="sandbox"&&(b=xr("#i"+a));const C=xr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body").select("#"+a);C.append("g");const A=p.db.getMindmap(),P=C.append("g");P.attr("class","mindmap-edges");const F=C.append("g");F.attr("class","mindmap-nodes"),Qjt(F,A,-1,v);const j=await dWe(A,v);fWe(P,j),gWe(j),s9(void 0,C,v.mindmap.padding,v.mindmap.useMaxWidth)}},bWe=i=>{let a="";for(let f=0;f0&&arguments[0]!==void 0?arguments[0]:oJ,g=arguments.length>1?arguments[1]:void 0,x=0;x=0;$--)O($);return this},km.removeAllListeners=function(){return this.removeListener("*")},km.emit=km.trigger=function(y,g,x){var T=this.listeners,A=T.length;return this.emitting++,dt(g)||(g=[g]),cJ(this,function(D,O){x!=null&&(T=[{event:O.event,type:O.type,namespace:O.namespace,callback:x}],A=T.length);for(var $=function(G){var W=T[G];if(W.type===O.type&&(!W.namespace||W.namespace===O.namespace||W.namespace===aJ)&&D.eventMatches(D.context,W,O)){var et=[O];g!=null&&YP(et,g),D.beforeEmit(D.context,W,O),W.conf&&W.conf.one&&(D.listeners=D.listeners.filter(function(ft){return ft!==W}));var at=D.callbackContext(D.context,W,O),lt=W.callback.apply(at,et);D.afterEmit(D.context,W,O),lt===!1&&(O.stopPropagation(),O.preventDefault())}},q=0;q1&&!O){var $=this.length-1,q=this[$],S=q._private.data.id;this[$]=void 0,this[g]=q,D.set(S,{ele:q,index:g})}return this.length--,this},unmergeOne:function(g){g=g[0];var x=this._private,T=g._private.data.id,A=x.map,D=A.get(T);if(!D)return this;var O=D.index;return this.unmergeAt(O),this},unmerge:function(g){var x=this._private.cy;if(!g)return this;if(g&&mt(g)){var T=g;g=x.mutableElements().filter(T)}for(var A=0;A=0;x--){var T=this[x];g(T)&&this.unmergeAt(x)}return this},map:function(g,x){for(var T=[],A=this,D=0;DT&&(T=q,A=$)}return{value:T,ele:A}},min:function(g,x){for(var T=1/0,A,D=this,O=0;O=0&&D"u"?"undefined":f(Symbol))!=g&&f(Symbol.iterator)!=g;x&&(e9[Symbol.iterator]=function(){var T=this,A={value:void 0,done:!1},D=0,O=this.length;return b({next:function(){return D1&&arguments[1]!==void 0?arguments[1]:!0,T=this[0],A=T.cy();if(A.styleEnabled()&&T){this.cleanStyle();var D=T._private.style[g];return D??(x?A.style().getDefaultProperty(g):null)}},numericStyle:function(g){var x=this[0];if(x.cy().styleEnabled()&&x){var T=x.pstyle(g);return T.pfValue!==void 0?T.pfValue:T.value}},numericStyleUnits:function(g){var x=this[0];if(x.cy().styleEnabled()&&x)return x.pstyle(g).units},renderedStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=this[0];if(T)return x.style().getRenderedStyle(T,g)},style:function(g,x){var T=this.cy();if(!T.styleEnabled())return this;var A=!1,D=T.style();if(ht(g)){var O=g;D.applyBypass(this,O,A),this.emitAndNotify("style")}else if(mt(g))if(x===void 0){var $=this[0];return $?D.getStylePropertyValue($,g):void 0}else D.applyBypass(this,g,x,A),this.emitAndNotify("style");else if(g===void 0){var q=this[0];return q?D.getRawStyle(q):void 0}return this},removeStyle:function(g){var x=this.cy();if(!x.styleEnabled())return this;var T=!1,A=x.style(),D=this;if(g===void 0)for(var O=0;O0&&g.push(G[0]),g.push($[0])}return this.spawn(g,!0).filter(y)},"neighborhood"),closedNeighborhood:function(g){return this.neighborhood().add(this).filter(g)},openNeighborhood:function(g){return this.neighborhood(g)}}),h1.neighbourhood=h1.neighborhood,h1.closedNeighbourhood=h1.closedNeighborhood,h1.openNeighbourhood=h1.openNeighborhood,me(h1,{source:rd(function(g){var x=this[0],T;return x&&(T=x._private.source||x.cy().collection()),T&&g?T.filter(g):T},"source"),target:rd(function(g){var x=this[0],T;return x&&(T=x._private.target||x.cy().collection()),T&&g?T.filter(g):T},"target"),sources:xB({attr:"source"}),targets:xB({attr:"target"})});function xB(y){return function(x){for(var T=[],A=0;A0);return O},component:function(){var g=this[0];return g.cy().mutableElements().components(g)[0]}}),h1.componentsOf=h1.components;var jf=function(g,x){var T=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(g===void 0){bl("A collection must have a reference to the core");return}var D=new zb,O=!1;if(!x)x=[];else if(x.length>0&&ht(x[0])&&!nt(x[0])){O=!0;for(var $=[],q=new z5,S=0,G=x.length;S0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=x.cy(),A=T._private,D=[],O=[],$,q=0,S=x.length;q0){for(var Dn=$.length===x.length?x:new jf(T,$),Kn=0;Kn0&&arguments[0]!==void 0?arguments[0]:!0,g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,x=this,T=[],A={},D=x._private.cy;function O(pe){for(var bn=pe._private.edges,ze=0;ze0&&(y?ge.emitAndNotify("remove"):g&&ge.emit("remove"));for(var ne=0;ne0?ne=pe:ge=pe;while(Math.abs(Pe)>O&&++bn<$);return pe}function Zt(fe){for(var ge=0,ne=1,Pe=q-1;ne!==Pe&&et[ne]<=fe;++ne)ge+=S;--ne;var pe=(fe-et[ne])/(et[ne+1]-et[ne]),bn=ge+pe*S,ze=kt(bn,y,x);return ze>=D?Mt(fe,bn):ze===0?bn:jt(fe,ge,ge+S)}var Kt=!1;function zt(){Kt=!0,(y!==g||x!==T)&&Dt()}var ee=function(ge){return Kt||zt(),y===g&&x===T?ge:ge===0?0:ge===1?1:At(Zt(ge),g,T)};ee.getControlPoints=function(){return[{x:y,y:g},{x,y:T}]};var Vt="generateBezier("+[y,g,x,T]+")";return ee.toString=function(){return Vt},ee}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var mJ=function(){function y(T){return-T.tension*T.x-T.friction*T.v}function g(T,A,D){var O={x:T.x+D.dx*A,v:T.v+D.dv*A,tension:T.tension,friction:T.friction};return{dx:O.v,dv:y(O)}}function x(T,A){var D={dx:T.v,dv:y(T)},O=g(T,A*.5,D),$=g(T,A*.5,O),q=g(T,A,$),S=1/6*(D.dx+2*(O.dx+$.dx)+q.dx),G=1/6*(D.dv+2*(O.dv+$.dv)+q.dv);return T.x=T.x+S*A,T.v=T.v+G*A,T}return function T(A,D,O){var $={x:-1,v:0,tension:null,friction:null},q=[0],S=0,G=1/1e4,W=16/1e3,et,at,lt;for(A=parseFloat(A)||500,D=parseFloat(D)||20,O=O||null,$.tension=A,$.friction=D,et=O!==null,et?(S=T(A,D),at=S/O*W):at=W;lt=x(lt||$,at),q.push(1+lt.x),S+=16,Math.abs(lt.x)>G&&Math.abs(lt.v)>G;);return et?function(ft){return q[ft*(q.length-1)|0]}:S}}(),fu=function(g,x,T,A){var D=wJ(g,x,T,A);return function(O,$,q){return O+($-O)*D(q)}},s9={linear:function(g,x,T){return g+(x-g)*T},ease:fu(.25,.1,.25,1),"ease-in":fu(.42,0,1,1),"ease-out":fu(0,0,.58,1),"ease-in-out":fu(.42,0,.58,1),"ease-in-sine":fu(.47,0,.745,.715),"ease-out-sine":fu(.39,.575,.565,1),"ease-in-out-sine":fu(.445,.05,.55,.95),"ease-in-quad":fu(.55,.085,.68,.53),"ease-out-quad":fu(.25,.46,.45,.94),"ease-in-out-quad":fu(.455,.03,.515,.955),"ease-in-cubic":fu(.55,.055,.675,.19),"ease-out-cubic":fu(.215,.61,.355,1),"ease-in-out-cubic":fu(.645,.045,.355,1),"ease-in-quart":fu(.895,.03,.685,.22),"ease-out-quart":fu(.165,.84,.44,1),"ease-in-out-quart":fu(.77,0,.175,1),"ease-in-quint":fu(.755,.05,.855,.06),"ease-out-quint":fu(.23,1,.32,1),"ease-in-out-quint":fu(.86,0,.07,1),"ease-in-expo":fu(.95,.05,.795,.035),"ease-out-expo":fu(.19,1,.22,1),"ease-in-out-expo":fu(1,0,0,1),"ease-in-circ":fu(.6,.04,.98,.335),"ease-out-circ":fu(.075,.82,.165,1),"ease-in-out-circ":fu(.785,.135,.15,.86),spring:function(g,x,T){if(T===0)return s9.linear;var A=mJ(g,x,T);return function(D,O,$){return D+(O-D)*A($)}},"cubic-bezier":fu};function TB(y,g,x,T,A){if(T===1||g===x)return x;var D=A(g,x,T);return y==null||((y.roundValue||y.color)&&(D=Math.round(D)),y.min!==void 0&&(D=Math.max(D,y.min)),y.max!==void 0&&(D=Math.min(D,y.max))),D}function CB(y,g){return y.pfValue!=null||y.value!=null?y.pfValue!=null&&(g==null||g.type.units!=="%")?y.pfValue:y.value:y}function sx(y,g,x,T,A){var D=A!=null?A.type:null;x<0?x=0:x>1&&(x=1);var O=CB(y,A),$=CB(g,A);if(X(O)&&X($))return TB(D,O,$,x,T);if(dt(O)&&dt($)){for(var q=[],S=0;S<$.length;S++){var G=O[S],W=$[S];if(G!=null&&W!=null){var et=TB(D,G,W,x,T);q.push(et)}else q.push(W)}return q}}function yJ(y,g,x,T){var A=!T,D=y._private,O=g._private,$=O.easing,q=O.startTime,S=T?y:y.cy(),G=S.style();if(!O.easingImpl)if($==null)O.easingImpl=s9.linear;else{var W;if(mt($)){var et=G.parse("transition-timing-function",$);W=et.value}else W=$;var at,lt;mt(W)?(at=W,lt=[]):(at=W[1],lt=W.slice(2).map(function(Dn){return+Dn})),lt.length>0?(at==="spring"&<.push(O.duration),O.easingImpl=s9[at].apply(null,lt)):O.easingImpl=s9[at]}var ft=O.easingImpl,At;if(O.duration===0?At=1:At=(x-q)/O.duration,O.applying&&(At=O.progress),At<0?At=0:At>1&&(At=1),O.delay==null){var kt=O.startPosition,Mt=O.position;if(Mt&&A&&!y.locked()){var Dt={};Dk(kt.x,Mt.x)&&(Dt.x=sx(kt.x,Mt.x,At,ft)),Dk(kt.y,Mt.y)&&(Dt.y=sx(kt.y,Mt.y,At,ft)),y.position(Dt)}var jt=O.startPan,Zt=O.pan,Kt=D.pan,zt=Zt!=null&&T;zt&&(Dk(jt.x,Zt.x)&&(Kt.x=sx(jt.x,Zt.x,At,ft)),Dk(jt.y,Zt.y)&&(Kt.y=sx(jt.y,Zt.y,At,ft)),y.emit("pan"));var ee=O.startZoom,Vt=O.zoom,fe=Vt!=null&&T;fe&&(Dk(ee,Vt)&&(D.zoom=wk(D.minZoom,sx(ee,Vt,At,ft),D.maxZoom)),y.emit("zoom")),(zt||fe)&&y.emit("viewport");var ge=O.style;if(ge&&ge.length>0&&A){for(var ne=0;ne=0;zt--){var ee=Kt[zt];ee()}Kt.splice(0,Kt.length)},Mt=at.length-1;Mt>=0;Mt--){var Dt=at[Mt],jt=Dt._private;if(jt.stopped){at.splice(Mt,1),jt.hooked=!1,jt.playing=!1,jt.started=!1,kt(jt.frames);continue}!jt.playing&&!jt.applying||(jt.playing&&jt.applying&&(jt.applying=!1),jt.started||xJ(G,Dt,y),yJ(G,Dt,y,W),jt.applying&&(jt.applying=!1),kt(jt.frames),jt.step!=null&&jt.step(y),Dt.completed()&&(at.splice(Mt,1),jt.hooked=!1,jt.playing=!1,jt.started=!1,kt(jt.completes)),ft=!0)}return!W&&at.length===0&<.length===0&&T.push(G),ft}for(var D=!1,O=0;O0?g.notify("draw",x):g.notify("draw")),x.unmerge(T),g.emit("step")}var kJ={animate:Ac.animate(),animation:Ac.animation(),animated:Ac.animated(),clearQueue:Ac.clearQueue(),delay:Ac.delay(),delayAnimation:Ac.delayAnimation(),stop:Ac.stop(),addToAnimationPool:function(g){var x=this;x.styleEnabled()&&x._private.aniEles.merge(g)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var g=this;if(g._private.animationsRunning=!0,!g.styleEnabled())return;function x(){g._private.animationsRunning&&Ff(function(D){_B(D,g),x()})}var T=g.renderer();T&&T.beforeRender?T.beforeRender(function(D,O){_B(O,g)},T.beforeRenderPriorities.animations):x()}},EJ={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var A=x.qualifier;return A!=null?g!==T.target&&nt(T.target)&&A.matches(T.target):!0},addEventFields:function(g,x){x.cy=g,x.target=g},callbackContext:function(g,x,T){return x.qualifier!=null?T.target:g}},a9=function(g){return mt(g)?new ym(g):g},SB={createEmitter:function(){var g=this._private;return g.emitter||(g.emitter=new JT(EJ,this)),this},emitter:function(){return this._private.emitter},on:function(g,x,T){return this.emitter().on(g,a9(x),T),this},removeListener:function(g,x,T){return this.emitter().removeListener(g,a9(x),T),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(g,x,T){return this.emitter().one(g,a9(x),T),this},once:function(g,x,T){return this.emitter().one(g,a9(x),T),this},emit:function(g,x){return this.emitter().emit(g,x),this},emitAndNotify:function(g,x){return this.emit(g),this.notify(g,x),this}};Ac.eventAliasesOn(SB);var zL={png:function(g){var x=this._private.renderer;return g=g||{},x.png(g)},jpg:function(g){var x=this._private.renderer;return g=g||{},g.bg=g.bg||"#fff",x.jpg(g)}};zL.jpeg=zL.jpg;var o9={layout:function(g){var x=this;if(g==null){bl("Layout options must be specified to make a layout");return}if(g.name==null){bl("A `name` must be specified to make a layout");return}var T=g.name,A=x.extension("layout",T);if(A==null){bl("No such layout `"+T+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var D;mt(g.eles)?D=x.$(g.eles):D=g.eles!=null?g.eles:x.$();var O=new A(me({},g,{cy:x,eles:D}));return O}};o9.createLayout=o9.makeLayout=o9.layout;var TJ={notify:function(g,x){var T=this._private;if(this.batching()){T.batchNotifications=T.batchNotifications||{};var A=T.batchNotifications[g]=T.batchNotifications[g]||this.collection();x!=null&&A.merge(x);return}if(T.notificationsEnabled){var D=this.renderer();this.destroyed()||!D||D.notify(g,x)}},notifications:function(g){var x=this._private;return g===void 0?x.notificationsEnabled:(x.notificationsEnabled=!!g,this)},noNotifications:function(g){this.notifications(!1),g(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var g=this._private;return g.batchCount==null&&(g.batchCount=0),g.batchCount===0&&(g.batchStyleEles=this.collection(),g.batchNotifications={}),g.batchCount++,this},endBatch:function(){var g=this._private;if(g.batchCount===0)return this;if(g.batchCount--,g.batchCount===0){g.batchStyleEles.updateStyle();var x=this.renderer();Object.keys(g.batchNotifications).forEach(function(T){var A=g.batchNotifications[T];A.empty()?x.notify(T):x.notify(T,A)})}return this},batch:function(g){return this.startBatch(),g(),this.endBatch(),this},batchData:function(g){var x=this;return this.batch(function(){for(var T=Object.keys(g),A=0;A0;)x.removeChild(x.childNodes[0]);g._private.renderer=null,g.mutableElements().forEach(function(T){var A=T._private;A.rscratch={},A.rstyle={},A.animation.current=[],A.animation.queue=[]})},onRender:function(g){return this.on("render",g)},offRender:function(g){return this.off("render",g)}};qL.invalidateDimensions=qL.resize;var c9={collection:function(g,x){return mt(g)?this.$(g):xt(g)?g.collection():dt(g)?(x||(x={}),new jf(this,g,x.unique,x.removed)):new jf(this)},nodes:function(g){var x=this.$(function(T){return T.isNode()});return g?x.filter(g):x},edges:function(g){var x=this.$(function(T){return T.isEdge()});return g?x.filter(g):x},$:function(g){var x=this._private.elements;return g?x.filter(g):x.spawnSelf()},mutableElements:function(){return this._private.elements}};c9.elements=c9.filter=c9.$;var f1={},Ok="t",_J="f";f1.apply=function(y){for(var g=this,x=g._private,T=x.cy,A=T.collection(),D=0;D0;if(et||W&&at){var lt=void 0;et&&at||et?lt=S.properties:at&&(lt=S.mappedProperties);for(var ft=0;ft1&&(jt=1),$.color){var Kt=T.valueMin[0],zt=T.valueMax[0],ee=T.valueMin[1],Vt=T.valueMax[1],fe=T.valueMin[2],ge=T.valueMax[2],ne=T.valueMin[3]==null?1:T.valueMin[3],Pe=T.valueMax[3]==null?1:T.valueMax[3],pe=[Math.round(Kt+(zt-Kt)*jt),Math.round(ee+(Vt-ee)*jt),Math.round(fe+(ge-fe)*jt),Math.round(ne+(Pe-ne)*jt)];D={bypass:T.bypass,name:T.name,value:pe,strValue:"rgb("+pe[0]+", "+pe[1]+", "+pe[2]+")"}}else if($.number){var bn=T.valueMin+(T.valueMax-T.valueMin)*jt;D=this.parse(T.name,bn,T.bypass,et)}else return!1;if(!D)return ft(),!1;D.mapping=T,T=D;break}case O.data:{for(var ze=T.field.split("."),Ve=W.data,En=0;En0&&D>0){for(var $={},q=!1,S=0;S0?y.delayAnimation(O).play().promise().then(Dt):Dt()}).then(function(){return y.animation({style:$,duration:D,easing:y.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){x.removeBypasses(y,A),y.emitAndNotify("style"),T.transitioning=!1})}else T.transitioning&&(this.removeBypasses(y,A),y.emitAndNotify("style"),T.transitioning=!1)},f1.checkTrigger=function(y,g,x,T,A,D){var O=this.properties[g],$=A(O);$!=null&&$(x,T)&&D(O)},f1.checkZOrderTrigger=function(y,g,x,T){var A=this;this.checkTrigger(y,g,x,T,function(D){return D.triggersZOrder},function(){A._private.cy.notify("zorder",y)})},f1.checkBoundsTrigger=function(y,g,x,T){this.checkTrigger(y,g,x,T,function(A){return A.triggersBounds},function(A){y.dirtyCompoundBoundsCache(),y.dirtyBoundingBoxCache(),A.triggersBoundsOfParallelBeziers&&(g==="curve-style"&&(x==="bezier"||T==="bezier")||g==="display"&&(x==="none"||T==="none"))&&y.parallelEdges().forEach(function(D){D.isBundledBezier()&&D.dirtyBoundingBoxCache()})})},f1.checkTriggers=function(y,g,x,T){y.dirtyStyleCache(),this.checkZOrderTrigger(y,g,x,T),this.checkBoundsTrigger(y,g,x,T)};var Nk={};Nk.applyBypass=function(y,g,x,T){var A=this,D=[],O=!0;if(g==="*"||g==="**"){if(x!==void 0)for(var $=0;$A.length?T=T.substr(A.length):T=""}function q(){D.length>O.length?D=D.substr(O.length):D=""}for(;;){var S=T.match(/^\s*$/);if(S)break;var G=T.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!G){Sc("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+T);break}A=G[0];var W=G[1];if(W!=="core"){var et=new ym(W);if(et.invalid){Sc("Skipping parsing of block: Invalid selector found in string stylesheet: "+W),$();continue}}var at=G[2],lt=!1;D=at;for(var ft=[];;){var At=D.match(/^\s*$/);if(At)break;var kt=D.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!kt){Sc("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+at),lt=!0;break}O=kt[0];var Mt=kt[1],Dt=kt[2],jt=g.properties[Mt];if(!jt){Sc("Skipping property: Invalid property name in: "+O),q();continue}var Zt=x.parse(Mt,Dt);if(!Zt){Sc("Skipping property: Invalid property definition in: "+O),q();continue}ft.push({name:Mt,val:Dt}),q()}if(lt){$();break}x.selector(W);for(var Kt=0;Kt=7&&g[0]==="d"&&(G=new RegExp($.data.regex).exec(g))){if(x)return!1;var et=$.data;return{name:y,value:G,strValue:""+g,mapped:et,field:G[1],bypass:x}}else if(g.length>=10&&g[0]==="m"&&(W=new RegExp($.mapData.regex).exec(g))){if(x||S.multiple)return!1;var at=$.mapData;if(!(S.color||S.number))return!1;var lt=this.parse(y,W[4]);if(!lt||lt.mapped)return!1;var ft=this.parse(y,W[5]);if(!ft||ft.mapped)return!1;if(lt.pfValue===ft.pfValue||lt.strValue===ft.strValue)return Sc("`"+y+": "+g+"` is not a valid mapper because the output range is zero; converting to `"+y+": "+lt.strValue+"`"),this.parse(y,lt.strValue);if(S.color){var At=lt.value,kt=ft.value,Mt=At[0]===kt[0]&&At[1]===kt[1]&&At[2]===kt[2]&&(At[3]===kt[3]||(At[3]==null||At[3]===1)&&(kt[3]==null||kt[3]===1));if(Mt)return!1}return{name:y,value:W,strValue:""+g,mapped:at,field:W[1],fieldMin:parseFloat(W[2]),fieldMax:parseFloat(W[3]),valueMin:lt.value,valueMax:ft.value,bypass:x}}}if(S.multiple&&T!=="multiple"){var Dt;if(q?Dt=g.split(/\s+/):dt(g)?Dt=g:Dt=[g],S.evenMultiple&&Dt.length%2!==0)return null;for(var jt=[],Zt=[],Kt=[],zt="",ee=!1,Vt=0;Vt0?" ":"")+fe.strValue}return S.validate&&!S.validate(jt,Zt)?null:S.singleEnum&&ee?jt.length===1&&mt(jt[0])?{name:y,value:jt[0],strValue:jt[0],bypass:x}:null:{name:y,value:jt,pfValue:Kt,strValue:zt,bypass:x,units:Zt}}var ge=function(){for(var fr=0;frS.max||S.strictMax&&g===S.max))return null;var ze={name:y,value:g,strValue:""+g+(ne||""),units:ne,bypass:x};return S.unitless||ne!=="px"&&ne!=="em"?ze.pfValue=g:ze.pfValue=ne==="px"||!ne?g:this.getEmSizeInPixels()*g,(ne==="ms"||ne==="s")&&(ze.pfValue=ne==="ms"?g:1e3*g),(ne==="deg"||ne==="rad")&&(ze.pfValue=ne==="rad"?g:xY(g)),ne==="%"&&(ze.pfValue=g/100),ze}else if(S.propList){var Ve=[],En=""+g;if(En!=="none"){for(var Dn=En.split(/\s*,\s*|\s+/),Kn=0;Kn0&&$>0&&!isNaN(T.w)&&!isNaN(T.h)&&T.w>0&&T.h>0){q=Math.min((O-2*x)/T.w,($-2*x)/T.h),q=q>this._private.maxZoom?this._private.maxZoom:q,q=q=T.minZoom&&(T.maxZoom=x),this},minZoom:function(g){return g===void 0?this._private.minZoom:this.zoomRange({min:g})},maxZoom:function(g){return g===void 0?this._private.maxZoom:this.zoomRange({max:g})},getZoomedViewport:function(g){var x=this._private,T=x.pan,A=x.zoom,D,O,$=!1;if(x.zoomingEnabled||($=!0),X(g)?O=g:ht(g)&&(O=g.level,g.position!=null?D=OT(g.position,A,T):g.renderedPosition!=null&&(D=g.renderedPosition),D!=null&&!x.panningEnabled&&($=!0)),O=O>x.maxZoom?x.maxZoom:O,O=Ox.maxZoom||!x.zoomingEnabled?O=!0:(x.zoom=q,D.push("zoom"))}if(A&&(!O||!g.cancelOnFailedZoom)&&x.panningEnabled){var S=g.pan;X(S.x)&&(x.pan.x=S.x,$=!1),X(S.y)&&(x.pan.y=S.y,$=!1),$||D.push("pan")}return D.length>0&&(D.push("viewport"),this.emit(D.join(" ")),this.notify("viewport")),this},center:function(g){var x=this.getCenterPan(g);return x&&(this._private.pan=x,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(g,x){if(this._private.panningEnabled){if(mt(g)){var T=g;g=this.mutableElements().filter(T)}else xt(g)||(g=this.mutableElements());if(g.length!==0){var A=g.boundingBox(),D=this.width(),O=this.height();x=x===void 0?this._private.zoom:x;var $={x:(D-x*(A.x1+A.x2))/2,y:(O-x*(A.y1+A.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var g=this._private,x=g.container;return g.sizeCache=g.sizeCache||(x?function(){var T=R.getComputedStyle(x),A=function(O){return parseFloat(T.getPropertyValue(O))};return{width:x.clientWidth-A("padding-left")-A("padding-right"),height:x.clientHeight-A("padding-top")-A("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var g=this._private.pan,x=this._private.zoom,T=this.renderedExtent(),A={x1:(T.x1-g.x)/x,x2:(T.x2-g.x)/x,y1:(T.y1-g.y)/x,y2:(T.y2-g.y)/x};return A.w=A.x2-A.x1,A.h=A.y2-A.y1,A},renderedExtent:function(){var g=this.width(),x=this.height();return{x1:0,y1:0,x2:g,y2:x,w:g,h:x}},multiClickDebounceTime:function(g){if(g)this._private.multiClickDebounceTime=g;else return this._private.multiClickDebounceTime;return this}};A3.centre=A3.center,A3.autolockNodes=A3.autolock,A3.autoungrabifyNodes=A3.autoungrabify;var Pk={data:Ac.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Ac.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Ac.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Ac.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Pk.attr=Pk.data,Pk.removeAttr=Pk.removeData;var Fk=function(g){var x=this;g=me({},g);var T=g.container;T&&!U(T)&&U(T[0])&&(T=T[0]);var A=T?T._cyreg:null;A=A||{},A&&A.cy&&(A.cy.destroy(),A={});var D=A.readies=A.readies||[];T&&(T._cyreg=A),A.cy=x;var O=R!==void 0&&T!==void 0&&!g.headless,$=g;$.layout=me({name:O?"grid":"null"},$.layout),$.renderer=me({name:O?"canvas":"null"},$.renderer);var q=function(lt,ft,At){return ft!==void 0?ft:At!==void 0?At:lt},S=this._private={container:T,ready:!1,options:$,elements:new jf(this),listeners:[],aniEles:new jf(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:q(!0,$.zoomingEnabled),userZoomingEnabled:q(!0,$.userZoomingEnabled),panningEnabled:q(!0,$.panningEnabled),userPanningEnabled:q(!0,$.userPanningEnabled),boxSelectionEnabled:q(!0,$.boxSelectionEnabled),autolock:q(!1,$.autolock,$.autolockNodes),autoungrabify:q(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:q(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?O:$.styleEnabled,zoom:X($.zoom)?$.zoom:1,pan:{x:ht($.pan)&&X($.pan.x)?$.pan.x:0,y:ht($.pan)&&X($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:q(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var G=function(lt,ft){var At=lt.some(It);if(At)return K5.all(lt).then(ft);ft(lt)};S.styleEnabled&&x.setStyle([]);var W=me({},$,$.renderer);x.initRenderer(W);var et=function(lt,ft,At){x.notifications(!1);var kt=x.mutableElements();kt.length>0&&kt.remove(),lt!=null&&(ht(lt)||dt(lt))&&x.add(lt),x.one("layoutready",function(Dt){x.notifications(!0),x.emit(Dt),x.one("load",ft),x.emitAndNotify("load")}).one("layoutstop",function(){x.one("done",At),x.emit("done")});var Mt=me({},x._private.options.layout);Mt.eles=x.elements(),x.layout(Mt).run()};G([$.style,$.elements],function(at){var lt=at[0],ft=at[1];S.styleEnabled&&x.style().append(lt),et(ft,function(){x.startAnimationLoop(),S.ready=!0,yt($.ready)&&x.on("ready",$.ready);for(var At=0;At0,q=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),S;if(xt(g.roots))S=g.roots;else if(dt(g.roots)){for(var G=[],W=0;W0;){var bn=pe(),ze=fe(bn,ne);if(ze)bn.outgoers().filter(function(Ci){return Ci.isNode()&&T.has(Ci)}).forEach(Pe);else if(ze===null){Sc("Detected double maximal shift for node `"+bn.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}Vt();var Ve=0;if(g.avoidOverlap)for(var En=0;En0&&kt[0].length<=3?zs/2:0),jn=2*Math.PI/kt[qi].length*Si;return qi===0&&kt[0].length===1&&(Qt=1),{x:wi.x+Qt*Math.cos(jn),y:wi.y+Qt*Math.sin(jn)}}else{var Er={x:wi.x+(Si+1-(Ui+1)/2)*Ga,y:(qi+1)*Ys};return Er}};return T.nodes().layoutPositions(this,g,ka),this};var MJ={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function f9(y){this.options=me({},MJ,y)}f9.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,A=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,D=T.nodes().not(":parent");g.sort&&(D=D.sort(g.sort));for(var O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},q=g.sweep===void 0?2*Math.PI-2*Math.PI/D.length:g.sweep,S=q/Math.max(1,D.length-1),G,W=0,et=0;et1&&g.avoidOverlap){W*=1.75;var kt=Math.cos(S)-Math.cos(0),Mt=Math.sin(S)-Math.sin(0),Dt=Math.sqrt(W*W/(kt*kt+Mt*Mt));G=Math.max(Dt,G)}var jt=function(Kt,zt){var ee=g.startAngle+zt*S*(A?1:-1),Vt=G*Math.cos(ee),fe=G*Math.sin(ee),ge={x:$.x+Vt,y:$.y+fe};return ge};return T.nodes().layoutPositions(this,g,jt),this};var IJ={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(g){return g.degree()},levelWidth:function(g){return g.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function LB(y){this.options=me({},IJ,y)}LB.prototype.run=function(){for(var y=this.options,g=y,x=g.counterclockwise!==void 0?!g.counterclockwise:g.clockwise,T=y.cy,A=g.eles,D=A.nodes().not(":parent"),O=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:T.width(),h:T.height()}),$={x:O.x1+O.w/2,y:O.y1+O.h/2},q=[],S=0,G=0;G0){var Zt=Math.abs(Mt[0].value-jt.value);Zt>=At&&(Mt=[],kt.push(Mt))}Mt.push(jt)}var Kt=S+g.minNodeSpacing;if(!g.avoidOverlap){var zt=kt.length>0&&kt[0].length>1,ee=Math.min(O.w,O.h)/2-Kt,Vt=ee/(kt.length+zt?1:0);Kt=Math.min(Kt,Vt)}for(var fe=0,ge=0;ge1&&g.avoidOverlap){var bn=Math.cos(pe)-Math.cos(0),ze=Math.sin(pe)-Math.sin(0),Ve=Math.sqrt(Kt*Kt/(bn*bn+ze*ze));fe=Math.max(Ve,fe)}ne.r=fe,fe+=Kt}if(g.equidistant){for(var En=0,Dn=0,Kn=0;Kn=y.numIter||(jJ(T,y),T.temperature=T.temperature*y.coolingFactor,T.temperature=y.animationThreshold&&D(),Ff(W)}};G()}else{for(;S;)S=O(q),q++;DB(T,y),$()}return this},d9.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},d9.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var OJ=function(g,x,T){for(var A=T.eles.edges(),D=T.eles.nodes(),O={isCompound:g.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:D.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:A.size(),temperature:T.initialTemp,clientWidth:g.width(),clientHeight:g.width(),boundingBox:Rd(T.boundingBox?T.boundingBox:{x1:0,y1:0,w:g.width(),h:g.height()})},$=T.eles.components(),q={},S=0;S<$.length;S++)for(var G=$[S],W=0;W0){O.graphSet.push(zt);for(var S=0;SA.count?0:A.graph},PJ=function y(g,x,T,A){var D=A.graphSet[T];if(-10)var W=A.nodeOverlap*G,et=Math.sqrt($*$+q*q),at=W*$/et,lt=W*q/et;else var ft=g9(g,$,q),At=g9(x,-1*$,-1*q),kt=At.x-ft.x,Mt=At.y-ft.y,Dt=kt*kt+Mt*Mt,et=Math.sqrt(Dt),W=(g.nodeRepulsion+x.nodeRepulsion)/Dt,at=W*kt/et,lt=W*Mt/et;g.isLocked||(g.offsetX-=at,g.offsetY-=lt),x.isLocked||(x.offsetX+=at,x.offsetY+=lt)}},qJ=function(g,x,T,A){if(T>0)var D=g.maxX-x.minX;else var D=x.maxX-g.minX;if(A>0)var O=g.maxY-x.minY;else var O=x.maxY-g.minY;return D>=0&&O>=0?Math.sqrt(D*D+O*O):0},g9=function(g,x,T){var A=g.positionX,D=g.positionY,O=g.height||1,$=g.width||1,q=T/x,S=O/$,G={};return x===0&&0T?(G.x=A,G.y=D+O/2,G):0x&&-1*S<=q&&q<=S?(G.x=A-$/2,G.y=D-$*T/2/x,G):0=S)?(G.x=A+O*x/2/T,G.y=D+O/2,G):(0>T&&(q<=-1*S||q>=S)&&(G.x=A-O*x/2/T,G.y=D-O/2),G)},HJ=function(g,x){for(var T=0;TT){var At=x.gravity*at/ft,kt=x.gravity*lt/ft;et.offsetX+=At,et.offsetY+=kt}}}}},VJ=function(g,x){var T=[],A=0,D=-1;for(T.push.apply(T,g.graphSet[0]),D+=g.graphSet[0].length;A<=D;){var O=T[A++],$=g.idToIndex[O],q=g.layoutNodes[$],S=q.children;if(0T)var D={x:T*g/A,y:T*x/A};else var D={x:g,y:x};return D},KJ=function y(g,x){var T=g.parentId;if(T!=null){var A=x.layoutNodes[x.idToIndex[T]],D=!1;if((A.maxX==null||g.maxX+A.padRight>A.maxX)&&(A.maxX=g.maxX+A.padRight,D=!0),(A.minX==null||g.minX-A.padLeftA.maxY)&&(A.maxY=g.maxY+A.padBottom,D=!0),(A.minY==null||g.minY-A.padTopkt&&(lt+=At+x.componentSpacing,at=0,ft=0,At=0)}}},YJ={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(g){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(g,x){return!0},ready:void 0,stop:void 0,transform:function(g,x){return x}};function OB(y){this.options=me({},YJ,y)}OB.prototype.run=function(){var y=this.options,g=y,x=y.cy,T=g.eles,A=T.nodes().not(":parent");g.sort&&(A=A.sort(g.sort));var D=Rd(g.boundingBox?g.boundingBox:{x1:0,y1:0,w:x.width(),h:x.height()});if(D.h===0||D.w===0)T.nodes().layoutPositions(this,g,function(rr){return{x:D.x1,y:D.y1}});else{var O=A.size(),$=Math.sqrt(O*D.h/D.w),q=Math.round($),S=Math.round(D.w/D.h*$),G=function(vr){if(vr==null)return Math.min(q,S);var ur=Math.min(q,S);ur==q?q=vr:S=vr},W=function(vr){if(vr==null)return Math.max(q,S);var ur=Math.max(q,S);ur==q?q=vr:S=vr},et=g.rows,at=g.cols!=null?g.cols:g.columns;if(et!=null&&at!=null)q=et,S=at;else if(et!=null&&at==null)q=et,S=Math.ceil(O/q);else if(et==null&&at!=null)S=at,q=Math.ceil(O/S);else if(S*q>O){var lt=G(),ft=W();(lt-1)*ft>=O?G(lt-1):(ft-1)*lt>=O&&W(ft-1)}else for(;S*q=O?W(kt+1):G(At+1)}var Mt=D.w/S,Dt=D.h/q;if(g.condense&&(Mt=0,Dt=0),g.avoidOverlap)for(var jt=0;jt=S&&(bn=0,pe++)},Ve={},En=0;En(bn=NY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3])))return At(zt,bn),!0}else if(Vt.edgeType==="bezier"||Vt.edgeType==="multibezier"||Vt.edgeType==="self"||Vt.edgeType==="compound"){for(var ze=Vt.allpts,Ve=0;Ve+5(bn=OY(y,g,ze[Ve],ze[Ve+1],ze[Ve+2],ze[Ve+3],ze[Ve+4],ze[Ve+5])))return At(zt,bn),!0}for(var En=En||ee.source,Dn=Dn||ee.target,Kn=A.getArrowWidth(fe,ge),Sn=[{name:"source",x:Vt.arrowStartX,y:Vt.arrowStartY,angle:Vt.srcArrowAngle},{name:"target",x:Vt.arrowEndX,y:Vt.arrowEndY,angle:Vt.tgtArrowAngle},{name:"mid-source",x:Vt.midX,y:Vt.midY,angle:Vt.midsrcArrowAngle},{name:"mid-target",x:Vt.midX,y:Vt.midY,angle:Vt.midtgtArrowAngle}],Ve=0;Ve0&&(kt(En),kt(Dn))}function Dt(zt,ee,Vt){return bp(zt,ee,Vt)}function jt(zt,ee){var Vt=zt._private,fe=et,ge;ee?ge=ee+"-":ge="",zt.boundingBox();var ne=Vt.labelBounds[ee||"main"],Pe=zt.pstyle(ge+"label").value,pe=zt.pstyle("text-events").strValue==="yes";if(!(!pe||!Pe)){var bn=Dt(Vt.rscratch,"labelX",ee),ze=Dt(Vt.rscratch,"labelY",ee),Ve=Dt(Vt.rscratch,"labelAngle",ee),En=zt.pstyle(ge+"text-margin-x").pfValue,Dn=zt.pstyle(ge+"text-margin-y").pfValue,Kn=ne.x1-fe-En,Sn=ne.x2+fe-En,Wn=ne.y1-fe-Dn,rr=ne.y2+fe-Dn;if(Ve){var vr=Math.cos(Ve),ur=Math.sin(Ve),tr=function(ka,Ci){return ka=ka-bn,Ci=Ci-ze,{x:ka*vr-Ci*ur+bn,y:ka*ur+Ci*vr+ze}},wn=tr(Kn,Wn),gr=tr(Kn,rr),fr=tr(Sn,Wn),Jr=tr(Sn,rr),wi=[wn.x+En,wn.y+Dn,fr.x+En,fr.y+Dn,Jr.x+En,Jr.y+Dn,gr.x+En,gr.y+Dn];if(jd(y,g,wi))return At(zt),!0}else if(G5(ne,y,g))return At(zt),!0}}for(var Zt=O.length-1;Zt>=0;Zt--){var Kt=O[Zt];Kt.isNode()?kt(Kt)||jt(Kt):Mt(Kt)||jt(Kt)||jt(Kt,"source")||jt(Kt,"target")}return $},L3.getAllInBox=function(y,g,x,T){var A=this.getCachedZSortedEles().interactive,D=[],O=Math.min(y,x),$=Math.max(y,x),q=Math.min(g,T),S=Math.max(g,T);y=O,x=$,g=q,T=S;for(var G=Rd({x1:y,y1:g,x2:x,y2:T}),W=0;W0?Math.max(Ki-Po,0):Math.min(Ki+Po,0)},Pe=ne(fe,ee),pe=ne(ge,Vt),bn=!1;Mt===S?kt=Math.abs(Pe)>Math.abs(pe)?A:T:Mt===q||Mt===$?(kt=T,bn=!0):(Mt===D||Mt===O)&&(kt=A,bn=!0);var ze=kt===T,Ve=ze?pe:Pe,En=ze?ge:fe,Dn=ZP(En),Kn=!1;!(bn&&(jt||Kt))&&(Mt===$&&En<0||Mt===q&&En>0||Mt===D&&En>0||Mt===O&&En<0)&&(Dn*=-1,Ve=Dn*Math.abs(Ve),Kn=!0);var Sn;if(jt){var Wn=Zt<0?1+Zt:Zt;Sn=Wn*Ve}else{var rr=Zt<0?Ve:0;Sn=rr+Zt*Dn}var vr=function(Ki){return Math.abs(Ki)=Math.abs(Ve)},ur=vr(Sn),tr=vr(Math.abs(Ve)-Math.abs(Sn)),wn=ur||tr;if(wn&&!Kn)if(ze){var gr=Math.abs(En)<=et/2,fr=Math.abs(fe)<=at/2;if(gr){var Jr=(G.x1+G.x2)/2,wi=G.y1,Ks=G.y2;x.segpts=[Jr,wi,Jr,Ks]}else if(fr){var ka=(G.y1+G.y2)/2,Ci=G.x1,hi=G.x2;x.segpts=[Ci,ka,hi,ka]}else x.segpts=[G.x1,G.y2]}else{var gs=Math.abs(En)<=W/2,qi=Math.abs(ge)<=lt/2;if(gs){var Si=(G.y1+G.y2)/2,Ui=G.x1,Ga=G.x2;x.segpts=[Ui,Si,Ga,Si]}else if(qi){var Ys=(G.x1+G.x2)/2,zs=G.y1,Er=G.y2;x.segpts=[Ys,zs,Ys,Er]}else x.segpts=[G.x2,G.y1]}else if(ze){var Qt=G.y1+Sn+(At?et/2*Dn:0),jn=G.x1,_r=G.x2;x.segpts=[jn,Qt,_r,Qt]}else{var ir=G.x1+Sn+(At?W/2*Dn:0),sr=G.y1,Ia=G.y2;x.segpts=[ir,sr,ir,Ia]}},id.tryToCorrectInvalidPoints=function(y,g){var x=y._private.rscratch;if(x.edgeType==="bezier"){var T=g.srcPos,A=g.tgtPos,D=g.srcW,O=g.srcH,$=g.tgtW,q=g.tgtH,S=g.srcShape,G=g.tgtShape,W=!X(x.startX)||!X(x.startY),et=!X(x.arrowStartX)||!X(x.arrowStartY),at=!X(x.endX)||!X(x.endY),lt=!X(x.arrowEndX)||!X(x.arrowEndY),ft=3,At=this.getArrowWidth(y.pstyle("width").pfValue,y.pstyle("arrow-scale").value)*this.arrowShapeWidth,kt=ft*At,Mt=E3({x:x.ctrlpts[0],y:x.ctrlpts[1]},{x:x.startX,y:x.startY}),Dt=Mtpe.poolIndex()){var bn=Pe;Pe=pe,pe=bn}var ze=Vt.srcPos=Pe.position(),Ve=Vt.tgtPos=pe.position(),En=Vt.srcW=Pe.outerWidth(),Dn=Vt.srcH=Pe.outerHeight(),Kn=Vt.tgtW=pe.outerWidth(),Sn=Vt.tgtH=pe.outerHeight(),Wn=Vt.srcShape=x.nodeShapes[g.getNodeShape(Pe)],rr=Vt.tgtShape=x.nodeShapes[g.getNodeShape(pe)];Vt.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var vr=0;vr0){var gr=D,fr=T3(gr,q5(x)),Jr=T3(gr,q5(wn)),wi=fr;if(Jr2){var Ks=T3(gr,{x:wn[2],y:wn[3]});Ks0){var jn=O,_r=T3(jn,q5(x)),ir=T3(jn,q5(Qt)),sr=_r;if(ir<_r&&(x=[Qt[0],Qt[1]],sr=ir),Qt.length>2){var Ia=T3(jn,{x:Qt[2],y:Qt[3]});Ia=lt||zt){At={cp:jt,segment:Kt};break}}if(At)break}var ee=At.cp,Vt=At.segment,fe=(lt-kt)/Vt.length,ge=Vt.t1-Vt.t0,ne=at?Vt.t0+ge*fe:Vt.t1-ge*fe;ne=wk(0,ne,1),g=H5(ee.p0,ee.p1,ee.p2,ne),et=qB(ee.p0,ee.p1,ee.p2,ne);break}case"straight":case"segments":case"haystack":{for(var Pe=0,pe,bn,ze,Ve,En=T.allpts.length,Dn=0;Dn+3=lt));Dn+=2);var Kn=lt-bn,Sn=Kn/pe;Sn=wk(0,Sn,1),g=EY(ze,Ve,Sn),et=zB(ze,Ve);break}}O("labelX",W,g.x),O("labelY",W,g.y),O("labelAutoAngle",W,et)}};S("source"),S("target"),this.applyLabelDimensions(y)}},yp.applyLabelDimensions=function(y){this.applyPrefixedLabelDimensions(y),y.isEdge()&&(this.applyPrefixedLabelDimensions(y,"source"),this.applyPrefixedLabelDimensions(y,"target"))},yp.applyPrefixedLabelDimensions=function(y,g){var x=y._private,T=this.getLabelText(y,g),A=this.calculateLabelDimensions(y,T),D=y.pstyle("line-height").pfValue,O=y.pstyle("text-wrap").strValue,$=bp(x.rscratch,"labelWrapCachedLines",g)||[],q=O!=="wrap"?1:Math.max($.length,1),S=A.height/q,G=S*D,W=A.width,et=A.height+(q-1)*(D-1)*S;bm(x.rstyle,"labelWidth",g,W),bm(x.rscratch,"labelWidth",g,W),bm(x.rstyle,"labelHeight",g,et),bm(x.rscratch,"labelHeight",g,et),bm(x.rscratch,"labelLineHeight",g,G)},yp.getLabelText=function(y,g){var x=y._private,T=g?g+"-":"",A=y.pstyle(T+"label").strValue,D=y.pstyle("text-transform").value,O=function(Kn,Sn){return Sn?(bm(x.rscratch,Kn,g,Sn),Sn):bp(x.rscratch,Kn,g)};if(!A)return"";D=="none"||(D=="uppercase"?A=A.toUpperCase():D=="lowercase"&&(A=A.toLowerCase()));var $=y.pstyle("text-wrap").value;if($==="wrap"){var q=O("labelKey");if(q!=null&&O("labelWrapKey")===q)return O("labelWrapCachedText");for(var S="​",G=A.split(` +`),W=y.pstyle("text-max-width").pfValue,et=y.pstyle("text-overflow-wrap").value,at=et==="anywhere",lt=[],ft=/[\s\u200b]+/,At=at?"":" ",kt=0;ktW){for(var Kt=Mt.split(ft),zt="",ee=0;eePe)break;pe+=A[Ve],Ve===A.length-1&&(ze=!0)}return ze||(pe+=bn),pe}return A},yp.getLabelJustification=function(y){var g=y.pstyle("text-justification").strValue,x=y.pstyle("text-halign").strValue;if(g==="auto")if(y.isNode())switch(x){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return g},yp.calculateLabelDimensions=function(y,g){var x=this,T=td(g,y._private.labelDimsKey),A=x.labelDimCache||(x.labelDimCache=[]),D=A[T];if(D!=null)return D;var O=0,$=y.pstyle("font-style").strValue,q=y.pstyle("font-size").pfValue,S=y.pstyle("font-family").strValue,G=y.pstyle("font-weight").strValue,W=this.labelCalcCanvas,et=this.labelCalcCanvasContext;if(!W){W=this.labelCalcCanvas=document.createElement("canvas"),et=this.labelCalcCanvasContext=W.getContext("2d");var at=W.style;at.position="absolute",at.left="-9999px",at.top="-9999px",at.zIndex="-1",at.visibility="hidden",at.pointerEvents="none"}et.font="".concat($," ").concat(G," ").concat(q,"px ").concat(S);for(var lt=0,ft=0,At=g.split(` +`),kt=0;kt1&&arguments[1]!==void 0?arguments[1]:!0;if(g.merge(O),$)for(var q=0;q=y.desktopTapThreshold2}var bv=T(Qt);zf&&(y.hoverData.tapholdCancelled=!0);var _m=function(){var Gb=y.hoverData.dragDelta=y.hoverData.dragDelta||[];Gb.length===0?(Gb.push(Ja[0]),Gb.push(Ja[1])):(Gb[0]+=Ja[0],Gb[1]+=Ja[1])};_r=!0,x(Za,["mousemove","vmousemove","tapdrag"],Qt,{x:$r[0],y:$r[1]});var gx=function(){y.data.bgActivePosistion=void 0,y.hoverData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:$r[0],y:$r[1]}}),Nc[4]=1,y.hoverData.selecting=!0,y.redrawHint("select",!0),y.redraw()};if(y.hoverData.which===3){if(zf){var O3={originalEvent:Qt,type:"cxtdrag",position:{x:$r[0],y:$r[1]}};Ea?Ea.emit(O3):ir.emit(O3),y.hoverData.cxtDragged=!0,(!y.hoverData.cxtOver||Za!==y.hoverData.cxtOver)&&(y.hoverData.cxtOver&&y.hoverData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:$r[0],y:$r[1]}}),y.hoverData.cxtOver=Za,Za&&Za.emit({originalEvent:Qt,type:"cxtdragover",position:{x:$r[0],y:$r[1]}}))}}else if(y.hoverData.dragging){if(_r=!0,ir.panningEnabled()&&ir.userPanningEnabled()){var px;if(y.hoverData.justStartedPan){var T9=y.hoverData.mdownPos;px={x:($r[0]-T9[0])*sr,y:($r[1]-T9[1])*sr},y.hoverData.justStartedPan=!1}else px={x:Ja[0]*sr,y:Ja[1]*sr};ir.panBy(px),ir.emit("dragpan"),y.hoverData.dragged=!0}$r=y.projectIntoViewport(Qt.clientX,Qt.clientY)}else if(Nc[4]==1&&(Ea==null||Ea.pannable())){if(zf){if(!y.hoverData.dragging&&ir.boxSelectionEnabled()&&(bv||!ir.panningEnabled()||!ir.userPanningEnabled()))gx();else if(!y.hoverData.selecting&&ir.panningEnabled()&&ir.userPanningEnabled()){var N3=A(Ea,y.hoverData.downs);N3&&(y.hoverData.dragging=!0,y.hoverData.justStartedPan=!0,Nc[4]=0,y.data.bgActivePosistion=q5(Ki),y.redrawHint("select",!0),y.redraw())}Ea&&Ea.pannable()&&Ea.active()&&Ea.unactivate()}}else{if(Ea&&Ea.pannable()&&Ea.active()&&Ea.unactivate(),(!Ea||!Ea.grabbed())&&Za!=mc&&(mc&&x(mc,["mouseout","tapdragout"],Qt,{x:$r[0],y:$r[1]}),Za&&x(Za,["mouseover","tapdragover"],Qt,{x:$r[0],y:$r[1]}),y.hoverData.last=Za),Ea)if(zf){if(ir.boxSelectionEnabled()&&bv)Ea&&Ea.grabbed()&&(ft(vl),Ea.emit("freeon"),vl.emit("free"),y.dragData.didDrag&&(Ea.emit("dragfreeon"),vl.emit("dragfree"))),gx();else if(Ea&&Ea.grabbed()&&y.nodeIsDraggable(Ea)){var $d=!y.dragData.didDrag;$d&&y.redrawHint("eles",!0),y.dragData.didDrag=!0,y.hoverData.draggingEles||at(vl,{inDragLayer:!0});var w1={x:0,y:0};if(X(Ja[0])&&X(Ja[1])&&(w1.x+=Ja[0],w1.y+=Ja[1],$d)){var zd=y.hoverData.dragDelta;zd&&X(zd[0])&&X(zd[1])&&(w1.x+=zd[0],w1.y+=zd[1])}y.hoverData.draggingEles=!0,vl.silentShift(w1).emit("position drag"),y.redrawHint("drag",!0),y.redraw()}}else _m();_r=!0}if(Nc[2]=$r[0],Nc[3]=$r[1],_r)return Qt.stopPropagation&&Qt.stopPropagation(),Qt.preventDefault&&Qt.preventDefault(),!1}},!1);var Vt,fe,ge;y.registerBinding(window,"mouseup",function(Qt){var jn=y.hoverData.capture;if(jn){y.hoverData.capture=!1;var _r=y.cy,ir=y.projectIntoViewport(Qt.clientX,Qt.clientY),sr=y.selection,Ia=y.findNearestElement(ir[0],ir[1],!0,!1),$r=y.dragData.possibleDragElements,Ki=y.hoverData.down,Po=T(Qt);if(y.data.bgActivePosistion&&(y.redrawHint("select",!0),y.redraw()),y.hoverData.tapholdCancelled=!0,y.data.bgActivePosistion=void 0,Ki&&Ki.unactivate(),y.hoverData.which===3){var Nc={originalEvent:Qt,type:"cxttapend",position:{x:ir[0],y:ir[1]}};if(Ki?Ki.emit(Nc):_r.emit(Nc),!y.hoverData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:ir[0],y:ir[1]}};Ki?Ki.emit(Za):_r.emit(Za)}y.hoverData.cxtDragged=!1,y.hoverData.which=null}else if(y.hoverData.which===1){if(x(Ia,["mouseup","tapend","vmouseup"],Qt,{x:ir[0],y:ir[1]}),!y.dragData.didDrag&&!y.hoverData.dragged&&!y.hoverData.selecting&&!y.hoverData.isOverThresholdDrag&&(x(Ki,["click","tap","vclick"],Qt,{x:ir[0],y:ir[1]}),fe=!1,Qt.timeStamp-ge<=_r.multiClickDebounceTime()?(Vt&&clearTimeout(Vt),fe=!0,ge=null,x(Ki,["dblclick","dbltap","vdblclick"],Qt,{x:ir[0],y:ir[1]})):(Vt=setTimeout(function(){fe||x(Ki,["oneclick","onetap","voneclick"],Qt,{x:ir[0],y:ir[1]})},_r.multiClickDebounceTime()),ge=Qt.timeStamp)),Ki==null&&!y.dragData.didDrag&&!y.hoverData.selecting&&!y.hoverData.dragged&&!T(Qt)&&(_r.$(g).unselect(["tapunselect"]),$r.length>0&&y.redrawHint("eles",!0),y.dragData.possibleDragElements=$r=_r.collection()),Ia==Ki&&!y.dragData.didDrag&&!y.hoverData.selecting&&Ia!=null&&Ia._private.selectable&&(y.hoverData.dragging||(_r.selectionType()==="additive"||Po?Ia.selected()?Ia.unselect(["tapunselect"]):Ia.select(["tapselect"]):Po||(_r.$(g).unmerge(Ia).unselect(["tapunselect"]),Ia.select(["tapselect"]))),y.redrawHint("eles",!0)),y.hoverData.selecting){var mc=_r.collection(y.getAllInBox(sr[0],sr[1],sr[2],sr[3]));y.redrawHint("select",!0),mc.length>0&&y.redrawHint("eles",!0),_r.emit({type:"boxend",originalEvent:Qt,position:{x:ir[0],y:ir[1]}});var Ea=function(zf){return zf.selectable()&&!zf.selected()};_r.selectionType()==="additive"||Po||_r.$(g).unmerge(mc).unselect(),mc.emit("box").stdFilter(Ea).select().emit("boxselect"),y.redraw()}if(y.hoverData.dragging&&(y.hoverData.dragging=!1,y.redrawHint("select",!0),y.redrawHint("eles",!0),y.redraw()),!sr[4]){y.redrawHint("drag",!0),y.redrawHint("eles",!0);var Ja=Ki&&Ki.grabbed();ft($r),Ja&&(Ki.emit("freeon"),$r.emit("free"),y.dragData.didDrag&&(Ki.emit("dragfreeon"),$r.emit("dragfree")))}}sr[4]=0,y.hoverData.down=null,y.hoverData.cxtStarted=!1,y.hoverData.draggingEles=!1,y.hoverData.selecting=!1,y.hoverData.isOverThresholdDrag=!1,y.dragData.didDrag=!1,y.hoverData.dragged=!1,y.hoverData.dragDelta=[],y.hoverData.mdownPos=null,y.hoverData.mdownGPos=null}},!1);var ne=function(Qt){if(!y.scrollingPage){var jn=y.cy,_r=jn.zoom(),ir=jn.pan(),sr=y.projectIntoViewport(Qt.clientX,Qt.clientY),Ia=[sr[0]*_r+ir.x,sr[1]*_r+ir.y];if(y.hoverData.draggingEles||y.hoverData.dragging||y.hoverData.cxtStarted||zt()){Qt.preventDefault();return}if(jn.panningEnabled()&&jn.userPanningEnabled()&&jn.zoomingEnabled()&&jn.userZoomingEnabled()){Qt.preventDefault(),y.data.wheelZooming=!0,clearTimeout(y.data.wheelTimeout),y.data.wheelTimeout=setTimeout(function(){y.data.wheelZooming=!1,y.redrawHint("eles",!0),y.redraw()},150);var $r;Qt.deltaY!=null?$r=Qt.deltaY/-250:Qt.wheelDeltaY!=null?$r=Qt.wheelDeltaY/1e3:$r=Qt.wheelDelta/1e3,$r=$r*y.wheelSensitivity;var Ki=Qt.deltaMode===1;Ki&&($r*=33);var Po=jn.zoom()*Math.pow(10,$r);Qt.type==="gesturechange"&&(Po=y.gestureStartZoom*Qt.scale),jn.zoom({level:Po,renderedPosition:{x:Ia[0],y:Ia[1]}}),jn.emit(Qt.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};y.registerBinding(y.container,"wheel",ne,!0),y.registerBinding(window,"scroll",function(Qt){y.scrollingPage=!0,clearTimeout(y.scrollingPageTimeout),y.scrollingPageTimeout=setTimeout(function(){y.scrollingPage=!1},250)},!0),y.registerBinding(y.container,"gesturestart",function(Qt){y.gestureStartZoom=y.cy.zoom(),y.hasTouchStarted||Qt.preventDefault()},!0),y.registerBinding(y.container,"gesturechange",function(Er){y.hasTouchStarted||ne(Er)},!0),y.registerBinding(y.container,"mouseout",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseout",position:{x:jn[0],y:jn[1]}})},!1),y.registerBinding(y.container,"mouseover",function(Qt){var jn=y.projectIntoViewport(Qt.clientX,Qt.clientY);y.cy.emit({originalEvent:Qt,type:"mouseover",position:{x:jn[0],y:jn[1]}})},!1);var Pe,pe,bn,ze,Ve,En,Dn,Kn,Sn,Wn,rr,vr,ur,tr=function(Qt,jn,_r,ir){return Math.sqrt((_r-Qt)*(_r-Qt)+(ir-jn)*(ir-jn))},wn=function(Qt,jn,_r,ir){return(_r-Qt)*(_r-Qt)+(ir-jn)*(ir-jn)},gr;y.registerBinding(y.container,"touchstart",gr=function(Qt){if(y.hasTouchStarted=!0,!!ee(Qt)){kt(),y.touchData.capture=!0,y.data.bgActivePosistion=void 0;var jn=y.cy,_r=y.touchData.now,ir=y.touchData.earlier;if(Qt.touches[0]){var sr=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);_r[0]=sr[0],_r[1]=sr[1]}if(Qt.touches[1]){var sr=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);_r[2]=sr[0],_r[3]=sr[1]}if(Qt.touches[2]){var sr=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);_r[4]=sr[0],_r[5]=sr[1]}if(Qt.touches[1]){y.touchData.singleTouchMoved=!0,ft(y.dragData.touchDragEles);var Ia=y.findContainerClientCoords();Sn=Ia[0],Wn=Ia[1],rr=Ia[2],vr=Ia[3],Pe=Qt.touches[0].clientX-Sn,pe=Qt.touches[0].clientY-Wn,bn=Qt.touches[1].clientX-Sn,ze=Qt.touches[1].clientY-Wn,ur=0<=Pe&&Pe<=rr&&0<=bn&&bn<=rr&&0<=pe&&pe<=vr&&0<=ze&&ze<=vr;var $r=jn.pan(),Ki=jn.zoom();Ve=tr(Pe,pe,bn,ze),En=wn(Pe,pe,bn,ze),Dn=[(Pe+bn)/2,(pe+ze)/2],Kn=[(Dn[0]-$r.x)/Ki,(Dn[1]-$r.y)/Ki];var Po=200,Nc=Po*Po;if(En=1){for(var kp=y.touchData.startPosition=[],qf=0;qf<_r.length;qf++)kp[qf]=ir[qf]=_r[qf];var mg=Qt.touches[0];y.touchData.startGPosition=[mg.clientX,mg.clientY]}}},!1);var fr;y.registerBinding(window,"touchmove",fr=function(Qt){var jn=y.touchData.capture;if(!(!jn&&!ee(Qt))){var _r=y.selection,ir=y.cy,sr=y.touchData.now,Ia=y.touchData.earlier,$r=ir.zoom();if(Qt.touches[0]){var Ki=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);sr[0]=Ki[0],sr[1]=Ki[1]}if(Qt.touches[1]){var Ki=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);sr[2]=Ki[0],sr[3]=Ki[1]}if(Qt.touches[2]){var Ki=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);sr[4]=Ki[0],sr[5]=Ki[1]}var Po=y.touchData.startGPosition,Nc;if(jn&&Qt.touches[0]&&Po){for(var Za=[],mc=0;mc=y.touchTapThreshold2}if(jn&&y.touchData.cxt){Qt.preventDefault();var kp=Qt.touches[0].clientX-Sn,qf=Qt.touches[0].clientY-Wn,mg=Qt.touches[1].clientX-Sn,sd=Qt.touches[1].clientY-Wn,bv=wn(kp,qf,mg,sd),_m=bv/En,gx=150,O3=gx*gx,px=1.5,T9=px*px;if(_m>=T9||bv>=O3){y.touchData.cxt=!1,y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var N3={originalEvent:Qt,type:"cxttapend",position:{x:sr[0],y:sr[1]}};y.touchData.start?(y.touchData.start.unactivate().emit(N3),y.touchData.start=null):ir.emit(N3)}}if(jn&&y.touchData.cxt){var N3={originalEvent:Qt,type:"cxtdrag",position:{x:sr[0],y:sr[1]}};y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.touchData.start?y.touchData.start.emit(N3):ir.emit(N3),y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxtDragged=!0;var $d=y.findNearestElement(sr[0],sr[1],!0,!0);(!y.touchData.cxtOver||$d!==y.touchData.cxtOver)&&(y.touchData.cxtOver&&y.touchData.cxtOver.emit({originalEvent:Qt,type:"cxtdragout",position:{x:sr[0],y:sr[1]}}),y.touchData.cxtOver=$d,$d&&$d.emit({originalEvent:Qt,type:"cxtdragover",position:{x:sr[0],y:sr[1]}}))}else if(jn&&Qt.touches[2]&&ir.boxSelectionEnabled())Qt.preventDefault(),y.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,y.touchData.selecting||ir.emit({originalEvent:Qt,type:"boxstart",position:{x:sr[0],y:sr[1]}}),y.touchData.selecting=!0,y.touchData.didSelect=!0,_r[4]=1,!_r||_r.length===0||_r[0]===void 0?(_r[0]=(sr[0]+sr[2]+sr[4])/3,_r[1]=(sr[1]+sr[3]+sr[5])/3,_r[2]=(sr[0]+sr[2]+sr[4])/3+1,_r[3]=(sr[1]+sr[3]+sr[5])/3+1):(_r[2]=(sr[0]+sr[2]+sr[4])/3,_r[3]=(sr[1]+sr[3]+sr[5])/3),y.redrawHint("select",!0),y.redraw();else if(jn&&Qt.touches[1]&&!y.touchData.didSelect&&ir.zoomingEnabled()&&ir.panningEnabled()&&ir.userZoomingEnabled()&&ir.userPanningEnabled()){Qt.preventDefault(),y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var w1=y.dragData.touchDragEles;if(w1){y.redrawHint("drag",!0);for(var zd=0;zd0&&!y.hoverData.draggingEles&&!y.swipePanning&&y.data.bgActivePosistion!=null&&(y.data.bgActivePosistion=void 0,y.redrawHint("select",!0),y.redraw())}},!1);var Jr;y.registerBinding(window,"touchcancel",Jr=function(Qt){var jn=y.touchData.start;y.touchData.capture=!1,jn&&jn.unactivate()});var wi,Ks,ka,Ci;if(y.registerBinding(window,"touchend",wi=function(Qt){var jn=y.touchData.start,_r=y.touchData.capture;if(_r)Qt.touches.length===0&&(y.touchData.capture=!1),Qt.preventDefault();else return;var ir=y.selection;y.swipePanning=!1,y.hoverData.draggingEles=!1;var sr=y.cy,Ia=sr.zoom(),$r=y.touchData.now,Ki=y.touchData.earlier;if(Qt.touches[0]){var Po=y.projectIntoViewport(Qt.touches[0].clientX,Qt.touches[0].clientY);$r[0]=Po[0],$r[1]=Po[1]}if(Qt.touches[1]){var Po=y.projectIntoViewport(Qt.touches[1].clientX,Qt.touches[1].clientY);$r[2]=Po[0],$r[3]=Po[1]}if(Qt.touches[2]){var Po=y.projectIntoViewport(Qt.touches[2].clientX,Qt.touches[2].clientY);$r[4]=Po[0],$r[5]=Po[1]}jn&&jn.unactivate();var Nc;if(y.touchData.cxt){if(Nc={originalEvent:Qt,type:"cxttapend",position:{x:$r[0],y:$r[1]}},jn?jn.emit(Nc):sr.emit(Nc),!y.touchData.cxtDragged){var Za={originalEvent:Qt,type:"cxttap",position:{x:$r[0],y:$r[1]}};jn?jn.emit(Za):sr.emit(Za)}y.touchData.start&&(y.touchData.start._private.grabbed=!1),y.touchData.cxt=!1,y.touchData.start=null,y.redraw();return}if(!Qt.touches[2]&&sr.boxSelectionEnabled()&&y.touchData.selecting){y.touchData.selecting=!1;var mc=sr.collection(y.getAllInBox(ir[0],ir[1],ir[2],ir[3]));ir[0]=void 0,ir[1]=void 0,ir[2]=void 0,ir[3]=void 0,ir[4]=0,y.redrawHint("select",!0),sr.emit({type:"boxend",originalEvent:Qt,position:{x:$r[0],y:$r[1]}});var Ea=function(O3){return O3.selectable()&&!O3.selected()};mc.emit("box").stdFilter(Ea).select().emit("boxselect"),mc.nonempty()&&y.redrawHint("eles",!0),y.redraw()}if(jn!=null&&jn.unactivate(),Qt.touches[2])y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);else if(!Qt.touches[1]){if(!Qt.touches[0]){if(!Qt.touches[0]){y.data.bgActivePosistion=void 0,y.redrawHint("select",!0);var Ja=y.dragData.touchDragEles;if(jn!=null){var vl=jn._private.grabbed;ft(Ja),y.redrawHint("drag",!0),y.redrawHint("eles",!0),vl&&(jn.emit("freeon"),Ja.emit("free"),y.dragData.didDrag&&(jn.emit("dragfreeon"),Ja.emit("dragfree"))),x(jn,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]}),jn.unactivate(),y.touchData.start=null}else{var zf=y.findNearestElement($r[0],$r[1],!0,!0);x(zf,["touchend","tapend","vmouseup","tapdragout"],Qt,{x:$r[0],y:$r[1]})}var xp=y.touchData.startPosition[0]-$r[0],kp=xp*xp,qf=y.touchData.startPosition[1]-$r[1],mg=qf*qf,sd=kp+mg,bv=sd*Ia*Ia;y.touchData.singleTouchMoved||(jn||sr.$(":selected").unselect(["tapunselect"]),x(jn,["tap","vclick"],Qt,{x:$r[0],y:$r[1]}),Ks=!1,Qt.timeStamp-Ci<=sr.multiClickDebounceTime()?(ka&&clearTimeout(ka),Ks=!0,Ci=null,x(jn,["dbltap","vdblclick"],Qt,{x:$r[0],y:$r[1]})):(ka=setTimeout(function(){Ks||x(jn,["onetap","voneclick"],Qt,{x:$r[0],y:$r[1]})},sr.multiClickDebounceTime()),Ci=Qt.timeStamp)),jn!=null&&!y.dragData.didDrag&&jn._private.selectable&&bv"u"){var hi=[],gs=function(Qt){return{clientX:Qt.clientX,clientY:Qt.clientY,force:1,identifier:Qt.pointerId,pageX:Qt.pageX,pageY:Qt.pageY,radiusX:Qt.width/2,radiusY:Qt.height/2,screenX:Qt.screenX,screenY:Qt.screenY,target:Qt.target}},qi=function(Qt){return{event:Qt,touch:gs(Qt)}},Si=function(Qt){hi.push(qi(Qt))},Ui=function(Qt){for(var jn=0;jn0)return Sn[0]}return null},at=Object.keys(W),lt=0;lt0?et:eF(D,O,g,x,T,A,$)},checkPoint:function(g,x,T,A,D,O,$){var q=xk(A,D),S=2*q;if(lv(g,x,this.points,O,$,A,D-S,[0,-1],T)||lv(g,x,this.points,O,$,A-S,D,[0,-1],T))return!0;var G=A/2+2*T,W=D/2+2*T,et=[O-G,$-W,O-G,$,O+G,$,O+G,$-W];return!!(jd(g,x,et)||C3(g,x,S,S,O+A/2-q,$+D/2-q,T)||C3(g,x,S,S,O-A/2+q,$+D/2-q,T))}}},dv.registerNodeShapes=function(){var y=this.nodeShapes={},g=this;this.generateEllipse(),this.generatePolygon("triangle",nd(3,0)),this.generateRoundPolygon("round-triangle",nd(3,0)),this.generatePolygon("rectangle",nd(4,0)),y.square=y.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var x=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",x),this.generateRoundPolygon("round-diamond",x)}this.generatePolygon("pentagon",nd(5,0)),this.generateRoundPolygon("round-pentagon",nd(5,0)),this.generatePolygon("hexagon",nd(6,0)),this.generateRoundPolygon("round-hexagon",nd(6,0)),this.generatePolygon("heptagon",nd(7,0)),this.generateRoundPolygon("round-heptagon",nd(7,0)),this.generatePolygon("octagon",nd(8,0)),this.generateRoundPolygon("round-octagon",nd(8,0));var T=new Array(20);{var A=CL(5,0),D=CL(5,Math.PI/5),O=.5*(3-Math.sqrt(5));O*=1.57;for(var $=0;$=g.deqFastCost*jt)break}else if(S){if(Mt>=g.deqCost*at||Mt>=g.deqAvgCost*et)break}else if(Dt>=g.deqNoDrawCost*ZL)break;var Zt=g.deq(T,At,ft);if(Zt.length>0)for(var Kt=0;Kt0&&(g.onDeqd(T,lt),!S&&g.shouldRedraw(T,lt,At,ft)&&D())},$=g.priority||wL;A.beforeRender(O,$(T))}}}},ntt=function(){function y(g){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gm;p(this,y),this.idsByKey=new zb,this.keyForId=new zb,this.cachesByLvl=new zb,this.lvls=[],this.getKey=g,this.doesEleInvalidateKey=x}return m(y,[{key:"getIdsFor",value:function(x){x==null&&bl("Can not get id list for null key");var T=this.idsByKey,A=this.idsByKey.get(x);return A||(A=new z5,T.set(x,A)),A}},{key:"addIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).add(T)}},{key:"deleteIdForKey",value:function(x,T){x!=null&&this.getIdsFor(x).delete(T)}},{key:"getNumberOfIdsForKey",value:function(x){return x==null?0:this.getIdsFor(x).size}},{key:"updateKeyMappingFor",value:function(x){var T=x.id(),A=this.keyForId.get(T),D=this.getKey(x);this.deleteIdForKey(A,T),this.addIdForKey(D,T),this.keyForId.set(T,D)}},{key:"deleteKeyMappingFor",value:function(x){var T=x.id(),A=this.keyForId.get(T);this.deleteIdForKey(A,T),this.keyForId.delete(T)}},{key:"keyHasChangedFor",value:function(x){var T=x.id(),A=this.keyForId.get(T),D=this.getKey(x);return A!==D}},{key:"isInvalid",value:function(x){return this.keyHasChangedFor(x)||this.doesEleInvalidateKey(x)}},{key:"getCachesAt",value:function(x){var T=this.cachesByLvl,A=this.lvls,D=T.get(x);return D||(D=new zb,T.set(x,D),A.push(x)),D}},{key:"getCache",value:function(x,T){return this.getCachesAt(T).get(x)}},{key:"get",value:function(x,T){var A=this.getKey(x),D=this.getCache(A,T);return D!=null&&this.updateKeyMappingFor(x),D}},{key:"getForCachedKey",value:function(x,T){var A=this.keyForId.get(x.id()),D=this.getCache(A,T);return D}},{key:"hasCache",value:function(x,T){return this.getCachesAt(T).has(x)}},{key:"has",value:function(x,T){var A=this.getKey(x);return this.hasCache(A,T)}},{key:"setCache",value:function(x,T,A){A.key=x,this.getCachesAt(T).set(x,A)}},{key:"set",value:function(x,T,A){var D=this.getKey(x);this.setCache(D,T,A),this.updateKeyMappingFor(x)}},{key:"deleteCache",value:function(x,T){this.getCachesAt(T).delete(x)}},{key:"delete",value:function(x,T){var A=this.getKey(x);this.deleteCache(A,T)}},{key:"invalidateKey",value:function(x){var T=this;this.lvls.forEach(function(A){return T.deleteCache(x,A)})}},{key:"invalidate",value:function(x){var T=x.id(),A=this.keyForId.get(T);this.deleteKeyMappingFor(x);var D=this.doesEleInvalidateKey(x);return D&&this.invalidateKey(A),D||this.getNumberOfIdsForKey(A)===0}}]),y}(),w9=25,m9=50,cx=-4,JL=3,tM=7.99,rtt=8,itt=1024,stt=1024,UB=1024,att=.2,ott=.8,ctt=10,utt=.15,ltt=.1,htt=.9,ftt=.9,dtt=100,gtt=1,ux={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},ptt=Bf({getKey:null,doesEleInvalidateKey:gm,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:k3,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),zk=function(g,x){var T=this;T.renderer=g,T.onDequeues=[];var A=ptt(x);me(T,A),T.lookup=new ntt(A.getKey,A.doesEleInvalidateKey),T.setupDequeueing()},kh=zk.prototype;kh.reasons=ux,kh.getTextureQueue=function(y){var g=this;return g.eleImgCaches=g.eleImgCaches||{},g.eleImgCaches[y]=g.eleImgCaches[y]||[]},kh.getRetiredTextureQueue=function(y){var g=this,x=g.eleImgCaches.retired=g.eleImgCaches.retired||{},T=x[y]=x[y]||[];return T},kh.getElementQueue=function(){var y=this,g=y.eleCacheQueue=y.eleCacheQueue||new vk(function(x,T){return T.reqs-x.reqs});return g},kh.getElementKeyToQueue=function(){var y=this,g=y.eleKeyToCacheQueue=y.eleKeyToCacheQueue||{};return g},kh.getElement=function(y,g,x,T,A){var D=this,O=this.renderer,$=O.cy.zoom(),q=this.lookup;if(!g||g.w===0||g.h===0||isNaN(g.w)||isNaN(g.h)||!y.visible()||y.removed()||!D.allowEdgeTxrCaching&&y.isEdge()||!D.allowParentTxrCaching&&y.isParent())return null;if(T==null&&(T=Math.ceil(xL($*x))),T=tM||T>JL)return null;var S=Math.pow(2,T),G=g.h*S,W=g.w*S,et=O.eleTextBiggerThanMin(y,S);if(!this.isVisible(y,et))return null;var at=q.get(y,T);if(at&&at.invalidated&&(at.invalidated=!1,at.texture.invalidatedWidth-=at.width),at)return at;var lt;if(G<=w9?lt=w9:G<=m9?lt=m9:lt=Math.ceil(G/m9)*m9,G>UB||W>stt)return null;var ft=D.getTextureQueue(lt),At=ft[ft.length-2],kt=function(){return D.recycleTexture(lt,W)||D.addTexture(lt,W)};At||(At=ft[ft.length-1]),At||(At=kt()),At.width-At.usedWidthT;ge--)Vt=D.getElement(y,g,x,ge,ux.downscale);fe()}else return D.queueElement(y,Kt.level-1),Kt;else{var ne;if(!Dt&&!jt&&!Zt)for(var Pe=T-1;Pe>=cx;Pe--){var pe=q.get(y,Pe);if(pe){ne=pe;break}}if(Mt(ne))return D.queueElement(y,T),ne;At.context.translate(At.usedWidth,0),At.context.scale(S,S),this.drawElement(At.context,y,g,et,!1),At.context.scale(1/S,1/S),At.context.translate(-At.usedWidth,0)}return at={x:At.usedWidth,texture:At,level:T,scale:S,width:W,height:G,scaledLabelShown:et},At.usedWidth+=Math.ceil(W+rtt),At.eleCaches.push(at),q.set(y,T,at),D.checkTextureFullness(At),at},kh.invalidateElements=function(y){for(var g=0;g=att*y.width&&this.retireTexture(y)},kh.checkTextureFullness=function(y){var g=this,x=g.getTextureQueue(y.height);y.usedWidth/y.width>ott&&y.fullnessChecks>=ctt?pm(x,y):y.fullnessChecks++},kh.retireTexture=function(y){var g=this,x=y.height,T=g.getTextureQueue(x),A=this.lookup;pm(T,y),y.retired=!0;for(var D=y.eleCaches,O=0;O=g)return O.retired=!1,O.usedWidth=0,O.invalidatedWidth=0,O.fullnessChecks=0,mL(O.eleCaches),O.context.setTransform(1,0,0,1,0,0),O.context.clearRect(0,0,O.width,O.height),pm(A,O),T.push(O),O}},kh.queueElement=function(y,g){var x=this,T=x.getElementQueue(),A=x.getElementKeyToQueue(),D=this.getKey(y),O=A[D];if(O)O.level=Math.max(O.level,g),O.eles.merge(y),O.reqs++,T.updateItem(O);else{var $={eles:y.spawn().merge(y),level:g,reqs:1,key:D};T.push($),A[D]=$}},kh.dequeue=function(y){for(var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),A=[],D=g.lookup,O=0;O0;O++){var $=x.pop(),q=$.key,S=$.eles[0],G=D.hasCache(S,$.level);if(T[q]=null,G)continue;A.push($);var W=g.getBoundingBox(S);g.getElement(S,W,y,$.level,ux.dequeue)}return A},kh.removeFromQueue=function(y){var g=this,x=g.getElementQueue(),T=g.getElementKeyToQueue(),A=this.getKey(y),D=T[A];D!=null&&(D.eles.length===1?(D.reqs=$5,x.updateItem(D),x.pop(),T[A]=null):D.eles.unmerge(y))},kh.onDequeue=function(y){this.onDequeues.push(y)},kh.offDequeue=function(y){pm(this.onDequeues,y)},kh.setupDequeueing=v9.setupDequeueing({deqRedrawThreshold:dtt,deqCost:utt,deqAvgCost:ltt,deqNoDrawCost:htt,deqFastCost:ftt,deq:function(g,x,T){return g.dequeue(x,T)},onDeqd:function(g,x){for(var T=0;T=y9||x>qk)return null}T.validateLayersElesOrdering(x,y);var q=T.layersByLevel,S=Math.pow(2,x),G=q[x]=q[x]||[],W,et=T.levelIsComplete(x,y),at,lt=function(){var fe=function(bn){if(T.validateLayersElesOrdering(bn,y),T.levelIsComplete(bn,y))return at=q[bn],!0},ge=function(bn){if(!at)for(var ze=x+bn;lx<=ze&&ze<=qk&&!fe(ze);ze+=bn);};ge(1),ge(-1);for(var ne=G.length-1;ne>=0;ne--){var Pe=G[ne];Pe.invalid&&pm(G,Pe)}};if(!et)lt();else return G;var ft=function(){if(!W){W=Rd();for(var fe=0;fespt)return null;var Pe=T.makeLayer(W,x);if(ge!=null){var pe=G.indexOf(ge)+1;G.splice(pe,0,Pe)}else(fe.insert===void 0||fe.insert)&&G.unshift(Pe);return Pe};if(T.skipping&&!$)return null;for(var kt=null,Mt=y.length/btt,Dt=!$,jt=0;jt=Mt||!tF(kt.bb,Zt.boundingBox()))&&(kt=At({insert:!0,after:kt}),!kt))return null;at||Dt?T.queueLayer(kt,Zt):T.drawEleInLayer(kt,Zt,x,g),kt.eles.push(Zt),zt[x]=kt}return at||(Dt?null:G)},p1.getEleLevelForLayerLevel=function(y,g){return y},p1.drawEleInLayer=function(y,g,x,T){var A=this,D=this.renderer,O=y.context,$=g.boundingBox();$.w===0||$.h===0||!g.visible()||(x=A.getEleLevelForLayerLevel(x,T),D.setImgSmoothing(O,!1),D.drawCachedElement(O,g,null,null,x,apt),D.setImgSmoothing(O,!0))},p1.levelIsComplete=function(y,g){var x=this,T=x.layersByLevel[y];if(!T||T.length===0)return!1;for(var A=0,D=0;D0||O.invalid)return!1;A+=O.eles.length}return A===g.length},p1.validateLayersElesOrdering=function(y,g){var x=this.layersByLevel[y];if(x)for(var T=0;T0){g=!0;break}}return g},p1.invalidateElements=function(y){var g=this;y.length!==0&&(g.lastInvalidationTime=dg(),!(y.length===0||!g.haveLayers())&&g.updateElementsInLayers(y,function(T,A,D){g.invalidateLayer(T)}))},p1.invalidateLayer=function(y){if(this.lastInvalidationTime=dg(),!y.invalid){var g=y.level,x=y.eles,T=this.layersByLevel[g];pm(T,y),y.elesQueue=[],y.invalid=!0,y.replacement&&(y.replacement.invalid=!0);for(var A=0;A3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$=g._private.rscratch;if(!(D&&!g.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var q;x&&(q=x,y.translate(-q.x1,-q.y1));var S=D?g.pstyle("opacity").value:1,G=D?g.pstyle("line-opacity").value:1,W=g.pstyle("curve-style").value,et=g.pstyle("line-style").value,at=g.pstyle("width").pfValue,lt=g.pstyle("line-cap").value,ft=S*G,At=S*G,kt=function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ft;W==="straight-triangle"?(O.eleStrokeStyle(y,g,ne),O.drawEdgeTrianglePath(g,y,$.allpts)):(y.lineWidth=at,y.lineCap=lt,O.eleStrokeStyle(y,g,ne),O.drawEdgePath(g,y,$.allpts,et),y.lineCap="butt")},Mt=function(){A&&O.drawEdgeOverlay(y,g)},Dt=function(){A&&O.drawEdgeUnderlay(y,g)},jt=function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:At;O.drawArrowheads(y,g,ne)},Zt=function(){O.drawElementText(y,g,null,T)};y.lineJoin="round";var Kt=g.pstyle("ghost").value==="yes";if(Kt){var zt=g.pstyle("ghost-offset-x").pfValue,ee=g.pstyle("ghost-offset-y").pfValue,Vt=g.pstyle("ghost-opacity").value,fe=ft*Vt;y.translate(zt,ee),kt(fe),jt(fe),y.translate(-zt,-ee)}Dt(),kt(),jt(),Mt(),Zt(),x&&y.translate(q.x1,q.y1)}};var ktt=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T){if(T.visible()){var A=T.pstyle("".concat(g,"-opacity")).value;if(A!==0){var D=this,O=D.usePaths(),$=T._private.rscratch,q=T.pstyle("".concat(g,"-padding")).pfValue,S=2*q,G=T.pstyle("".concat(g,"-color")).value;x.lineWidth=S,$.edgeType==="self"&&!O?x.lineCap="butt":x.lineCap="round",D.colorStrokeStyle(x,G[0],G[1],G[2],A),D.drawEdgePath(T,x,$.allpts,"solid")}}}};pv.drawEdgeOverlay=ktt("overlay"),pv.drawEdgeUnderlay=ktt("underlay"),pv.drawEdgePath=function(y,g,x,T){var A=y._private.rscratch,D=g,O,$=!1,q=this.usePaths(),S=y.pstyle("line-dash-pattern").pfValue,G=y.pstyle("line-dash-offset").pfValue;if(q){var W=x.join("$"),et=A.pathCacheKey&&A.pathCacheKey===W;et?(O=g=A.pathCache,$=!0):(O=g=new Path2D,A.pathCacheKey=W,A.pathCache=O)}if(D.setLineDash)switch(T){case"dotted":D.setLineDash([1,1]);break;case"dashed":D.setLineDash(S),D.lineDashOffset=G;break;case"solid":D.setLineDash([]);break}if(!$&&!A.badLine)switch(g.beginPath&&g.beginPath(),g.moveTo(x[0],x[1]),A.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var at=2;at+35&&arguments[5]!==void 0?arguments[5]:!0,O=this;if(T==null){if(D&&!O.eleTextBiggerThanMin(g))return}else if(T===!1)return;if(g.isNode()){var $=g.pstyle("label");if(!$||!$.value)return;var q=O.getLabelJustification(g);y.textAlign=q,y.textBaseline="bottom"}else{var S=g.element()._private.rscratch.badLine,G=g.pstyle("label"),W=g.pstyle("source-label"),et=g.pstyle("target-label");if(S||(!G||!G.value)&&(!W||!W.value)&&(!et||!et.value))return;y.textAlign="center",y.textBaseline="bottom"}var at=!x,lt;x&&(lt=x,y.translate(-lt.x1,-lt.y1)),A==null?(O.drawText(y,g,null,at,D),g.isEdge()&&(O.drawText(y,g,"source",at,D),O.drawText(y,g,"target",at,D))):O.drawText(y,g,A,at,D),x&&y.translate(lt.x1,lt.y1)},hx.getFontCache=function(y){var g;this.fontCaches=this.fontCaches||[];for(var x=0;x2&&arguments[2]!==void 0?arguments[2]:!0,T=g.pstyle("font-style").strValue,A=g.pstyle("font-size").pfValue+"px",D=g.pstyle("font-family").strValue,O=g.pstyle("font-weight").strValue,$=x?g.effectiveOpacity()*g.pstyle("text-opacity").value:1,q=g.pstyle("text-outline-opacity").value*$,S=g.pstyle("color").value,G=g.pstyle("text-outline-color").value;y.font=T+" "+O+" "+A+" "+D,y.lineJoin="round",this.colorFillStyle(y,S[0],S[1],S[2],$),this.colorStrokeStyle(y,G[0],G[1],G[2],q)};function fpt(y,g,x,T,A){var D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5;y.beginPath(),y.moveTo(g+D,x),y.lineTo(g+T-D,x),y.quadraticCurveTo(g+T,x,g+T,x+D),y.lineTo(g+T,x+A-D),y.quadraticCurveTo(g+T,x+A,g+T-D,x+A),y.lineTo(g+D,x+A),y.quadraticCurveTo(g,x+A,g,x+A-D),y.lineTo(g,x+D),y.quadraticCurveTo(g,x,g+D,x),y.closePath(),y.fill()}hx.getTextAngle=function(y,g){var x,T=y._private,A=T.rscratch,D=g?g+"-":"",O=y.pstyle(D+"text-rotation"),$=bp(A,"labelAngle",g);return O.strValue==="autorotate"?x=y.isEdge()?$:0:O.strValue==="none"?x=0:x=O.pfValue,x},hx.drawText=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=g._private,O=D.rscratch,$=A?g.effectiveOpacity():1;if(!(A&&($===0||g.pstyle("text-opacity").value===0))){x==="main"&&(x=null);var q=bp(O,"labelX",x),S=bp(O,"labelY",x),G,W,et=this.getLabelText(g,x);if(et!=null&&et!==""&&!isNaN(q)&&!isNaN(S)){this.setupTextStyle(y,g,A);var at=x?x+"-":"",lt=bp(O,"labelWidth",x),ft=bp(O,"labelHeight",x),At=g.pstyle(at+"text-margin-x").pfValue,kt=g.pstyle(at+"text-margin-y").pfValue,Mt=g.isEdge(),Dt=g.pstyle("text-halign").value,jt=g.pstyle("text-valign").value;Mt&&(Dt="center",jt="center"),q+=At,S+=kt;var Zt;switch(T?Zt=this.getTextAngle(g,x):Zt=0,Zt!==0&&(G=q,W=S,y.translate(G,W),y.rotate(Zt),q=0,S=0),jt){case"top":break;case"center":S+=ft/2;break;case"bottom":S+=ft;break}var Kt=g.pstyle("text-background-opacity").value,zt=g.pstyle("text-border-opacity").value,ee=g.pstyle("text-border-width").pfValue,Vt=g.pstyle("text-background-padding").pfValue;if(Kt>0||ee>0&&zt>0){var fe=q-Vt;switch(Dt){case"left":fe-=lt;break;case"center":fe-=lt/2;break}var ge=S-ft-Vt,ne=lt+2*Vt,Pe=ft+2*Vt;if(Kt>0){var pe=y.fillStyle,bn=g.pstyle("text-background-color").value;y.fillStyle="rgba("+bn[0]+","+bn[1]+","+bn[2]+","+Kt*$+")";var ze=g.pstyle("text-background-shape").strValue;ze.indexOf("round")===0?fpt(y,fe,ge,ne,Pe,2):y.fillRect(fe,ge,ne,Pe),y.fillStyle=pe}if(ee>0&&zt>0){var Ve=y.strokeStyle,En=y.lineWidth,Dn=g.pstyle("text-border-color").value,Kn=g.pstyle("text-border-style").value;if(y.strokeStyle="rgba("+Dn[0]+","+Dn[1]+","+Dn[2]+","+zt*$+")",y.lineWidth=ee,y.setLineDash)switch(Kn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"double":y.lineWidth=ee/4,y.setLineDash([]);break;case"solid":y.setLineDash([]);break}if(y.strokeRect(fe,ge,ne,Pe),Kn==="double"){var Sn=ee/2;y.strokeRect(fe+Sn,ge+Sn,ne-Sn*2,Pe-Sn*2)}y.setLineDash&&y.setLineDash([]),y.lineWidth=En,y.strokeStyle=Ve}}var Wn=2*g.pstyle("text-outline-width").pfValue;if(Wn>0&&(y.lineWidth=Wn),g.pstyle("text-wrap").value==="wrap"){var rr=bp(O,"labelWrapCachedLines",x),vr=bp(O,"labelLineHeight",x),ur=lt/2,tr=this.getLabelJustification(g);switch(tr==="auto"||(Dt==="left"?tr==="left"?q+=-lt:tr==="center"&&(q+=-ur):Dt==="center"?tr==="left"?q+=-ur:tr==="right"&&(q+=ur):Dt==="right"&&(tr==="center"?q+=ur:tr==="right"&&(q+=lt))),jt){case"top":S-=(rr.length-1)*vr;break;case"center":case"bottom":S-=(rr.length-1)*vr;break}for(var wn=0;wn0&&y.strokeText(rr[wn],q,S),y.fillText(rr[wn],q,S),S+=vr}else Wn>0&&y.strokeText(et,q,S),y.fillText(et,q,S);Zt!==0&&(y.rotate(-Zt),y.translate(-G,-W))}}};var Gk={};Gk.drawNode=function(y,g,x){var T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,A=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,D=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,O=this,$,q,S=g._private,G=S.rscratch,W=g.position();if(!(!X(W.x)||!X(W.y))&&!(D&&!g.visible())){var et=D?g.effectiveOpacity():1,at=O.usePaths(),lt,ft=!1,At=g.padding();$=g.width()+2*At,q=g.height()+2*At;var kt;x&&(kt=x,y.translate(-kt.x1,-kt.y1));for(var Mt=g.pstyle("background-image"),Dt=Mt.value,jt=new Array(Dt.length),Zt=new Array(Dt.length),Kt=0,zt=0;zt0&&arguments[0]!==void 0?arguments[0]:Pe;O.eleFillStyle(y,g,Si)},En=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ze;O.colorStrokeStyle(y,pe[0],pe[1],pe[2],Si)},Dn=g.pstyle("shape").strValue,Kn=g.pstyle("shape-polygon-points").pfValue;if(at){y.translate(W.x,W.y);var Sn=O.nodePathCache=O.nodePathCache||[],Wn=ed(Dn==="polygon"?Dn+","+Kn.join(","):Dn,""+q,""+$),rr=Sn[Wn];rr!=null?(lt=rr,ft=!0,G.pathCache=lt):(lt=new Path2D,Sn[Wn]=G.pathCache=lt)}var vr=function(){if(!ft){var Si=W;at&&(Si={x:0,y:0}),O.nodeShapes[O.getNodeShape(g)].draw(lt||y,Si.x,Si.y,$,q)}at?y.fill(lt):y.fill()},ur=function(){for(var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Ga=S.backgrounding,Ys=0,zs=0;zs0&&arguments[0]!==void 0?arguments[0]:!1,Ui=arguments.length>1&&arguments[1]!==void 0?arguments[1]:et;O.hasPie(g)&&(O.drawPie(y,g,Ui),Si&&(at||O.nodeShapes[O.getNodeShape(g)].draw(y,W.x,W.y,$,q)))},wn=function(){var Si=arguments.length>0&&arguments[0]!==void 0?arguments[0]:et,Ui=(ge>0?ge:-ge)*Si,Ga=ge>0?0:255;ge!==0&&(O.colorFillStyle(y,Ga,Ga,Ga,Ui),at?y.fill(lt):y.fill())},gr=function(){if(ne>0){if(y.lineWidth=ne,y.lineCap="butt",y.setLineDash)switch(bn){case"dotted":y.setLineDash([1,1]);break;case"dashed":y.setLineDash([4,2]);break;case"solid":case"double":y.setLineDash([]);break}if(at?y.stroke(lt):y.stroke(),bn==="double"){y.lineWidth=ne/3;var Si=y.globalCompositeOperation;y.globalCompositeOperation="destination-out",at?y.stroke(lt):y.stroke(),y.globalCompositeOperation=Si}y.setLineDash&&y.setLineDash([])}},fr=function(){A&&O.drawNodeOverlay(y,g,W,$,q)},Jr=function(){A&&O.drawNodeUnderlay(y,g,W,$,q)},wi=function(){O.drawElementText(y,g,null,T)},Ks=g.pstyle("ghost").value==="yes";if(Ks){var ka=g.pstyle("ghost-offset-x").pfValue,Ci=g.pstyle("ghost-offset-y").pfValue,hi=g.pstyle("ghost-opacity").value,gs=hi*et;y.translate(ka,Ci),Ve(hi*Pe),vr(),ur(gs,!0),En(hi*ze),gr(),tr(ge!==0||ne!==0),ur(gs,!1),wn(gs),y.translate(-ka,-Ci)}at&&y.translate(-W.x,-W.y),Jr(),at&&y.translate(W.x,W.y),Ve(),vr(),ur(et,!0),En(),gr(),tr(ge!==0||ne!==0),ur(et,!1),wn(),at&&y.translate(-W.x,-W.y),wi(),fr(),x&&y.translate(kt.x1,kt.y1)}};var Ett=function(g){if(!["overlay","underlay"].includes(g))throw new Error("Invalid state");return function(x,T,A,D,O){var $=this;if(T.visible()){var q=T.pstyle("".concat(g,"-padding")).pfValue,S=T.pstyle("".concat(g,"-opacity")).value,G=T.pstyle("".concat(g,"-color")).value,W=T.pstyle("".concat(g,"-shape")).value;if(S>0){if(A=A||T.position(),D==null||O==null){var et=T.padding();D=T.width()+2*et,O=T.height()+2*et}$.colorFillStyle(x,G[0],G[1],G[2],S),$.nodeShapes[W].draw(x,A.x,A.y,D+q*2,O+q*2),x.fill()}}}};Gk.drawNodeOverlay=Ett("overlay"),Gk.drawNodeUnderlay=Ett("underlay"),Gk.hasPie=function(y){return y=y[0],y._private.hasPie},Gk.drawPie=function(y,g,x,T){g=g[0],T=T||g.position();var A=g.cy().style(),D=g.pstyle("pie-size"),O=T.x,$=T.y,q=g.width(),S=g.height(),G=Math.min(q,S)/2,W=0,et=this.usePaths();et&&(O=0,$=0),D.units==="%"?G=G*D.pfValue:D.pfValue!==void 0&&(G=D.pfValue/2);for(var at=1;at<=A.pieBackgroundN;at++){var lt=g.pstyle("pie-"+at+"-background-size").value,ft=g.pstyle("pie-"+at+"-background-color").value,At=g.pstyle("pie-"+at+"-background-opacity").value*x,kt=lt/100;kt+W>1&&(kt=1-W);var Mt=1.5*Math.PI+2*Math.PI*W,Dt=2*Math.PI*kt,jt=Mt+Dt;lt===0||W>=1||W+kt>1||(y.beginPath(),y.moveTo(O,$),y.arc(O,$,G,Mt,jt),y.closePath(),this.colorFillStyle(y,ft[0],ft[1],ft[2],At),y.fill(),W+=kt)}};var vg={},dpt=100;vg.getPixelRatio=function(){var y=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var g=y.backingStorePixelRatio||y.webkitBackingStorePixelRatio||y.mozBackingStorePixelRatio||y.msBackingStorePixelRatio||y.oBackingStorePixelRatio||y.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/g},vg.paintCache=function(y){for(var g=this.paintCaches=this.paintCaches||[],x=!0,T,A=0;AO.minMbLowQualFrames&&(O.motionBlurPxRatio=O.mbPxRBlurry)),O.clearingMotionBlur&&(O.motionBlurPxRatio=1),O.textureDrawLastFrame&&!W&&(G[O.NODE]=!0,G[O.SELECT_BOX]=!0);var Mt=q.style(),Dt=q.zoom(),jt=A!==void 0?A:Dt,Zt=q.pan(),Kt={x:Zt.x,y:Zt.y},zt={zoom:Dt,pan:{x:Zt.x,y:Zt.y}},ee=O.prevViewport,Vt=ee===void 0||zt.zoom!==ee.zoom||zt.pan.x!==ee.pan.x||zt.pan.y!==ee.pan.y;!Vt&&!(ft&&!lt)&&(O.motionBlurPxRatio=1),D&&(Kt=D),jt*=$,Kt.x*=$,Kt.y*=$;var fe=O.getCachedZSortedEles();function ge(Ci,hi,gs,qi,Si){var Ui=Ci.globalCompositeOperation;Ci.globalCompositeOperation="destination-out",O.colorFillStyle(Ci,255,255,255,O.motionBlurTransparency),Ci.fillRect(hi,gs,qi,Si),Ci.globalCompositeOperation=Ui}function ne(Ci,hi){var gs,qi,Si,Ui;!O.clearingMotionBlur&&(Ci===S.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]||Ci===S.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG])?(gs={x:Zt.x*at,y:Zt.y*at},qi=Dt*at,Si=O.canvasWidth*at,Ui=O.canvasHeight*at):(gs=Kt,qi=jt,Si=O.canvasWidth,Ui=O.canvasHeight),Ci.setTransform(1,0,0,1,0,0),hi==="motionBlur"?ge(Ci,0,0,Si,Ui):!g&&(hi===void 0||hi)&&Ci.clearRect(0,0,Si,Ui),x||(Ci.translate(gs.x,gs.y),Ci.scale(qi,qi)),D&&Ci.translate(D.x,D.y),A&&Ci.scale(A,A)}if(W||(O.textureDrawLastFrame=!1),W){if(O.textureDrawLastFrame=!0,!O.textureCache){O.textureCache={},O.textureCache.bb=q.mutableElements().boundingBox(),O.textureCache.texture=O.data.bufferCanvases[O.TEXTURE_BUFFER];var Pe=O.data.bufferContexts[O.TEXTURE_BUFFER];Pe.setTransform(1,0,0,1,0,0),Pe.clearRect(0,0,O.canvasWidth*O.textureMult,O.canvasHeight*O.textureMult),O.render({forcedContext:Pe,drawOnlyNodeLayer:!0,forcedPxRatio:$*O.textureMult});var zt=O.textureCache.viewport={zoom:q.zoom(),pan:q.pan(),width:O.canvasWidth,height:O.canvasHeight};zt.mpan={x:(0-zt.pan.x)/zt.zoom,y:(0-zt.pan.y)/zt.zoom}}G[O.DRAG]=!1,G[O.NODE]=!1;var pe=S.contexts[O.NODE],bn=O.textureCache.texture,zt=O.textureCache.viewport;pe.setTransform(1,0,0,1,0,0),et?ge(pe,0,0,zt.width,zt.height):pe.clearRect(0,0,zt.width,zt.height);var ze=Mt.core("outside-texture-bg-color").value,Ve=Mt.core("outside-texture-bg-opacity").value;O.colorFillStyle(pe,ze[0],ze[1],ze[2],Ve),pe.fillRect(0,0,zt.width,zt.height);var Dt=q.zoom();ne(pe,!1),pe.clearRect(zt.mpan.x,zt.mpan.y,zt.width/zt.zoom/$,zt.height/zt.zoom/$),pe.drawImage(bn,zt.mpan.x,zt.mpan.y,zt.width/zt.zoom/$,zt.height/zt.zoom/$)}else O.textureOnViewport&&!g&&(O.textureCache=null);var En=q.extent(),Dn=O.pinching||O.hoverData.dragging||O.swipePanning||O.data.wheelZooming||O.hoverData.draggingEles||O.cy.animated(),Kn=O.hideEdgesOnViewport&&Dn,Sn=[];if(Sn[O.NODE]=!G[O.NODE]&&et&&!O.clearedForMotionBlur[O.NODE]||O.clearingMotionBlur,Sn[O.NODE]&&(O.clearedForMotionBlur[O.NODE]=!0),Sn[O.DRAG]=!G[O.DRAG]&&et&&!O.clearedForMotionBlur[O.DRAG]||O.clearingMotionBlur,Sn[O.DRAG]&&(O.clearedForMotionBlur[O.DRAG]=!0),G[O.NODE]||x||T||Sn[O.NODE]){var Wn=et&&!Sn[O.NODE]&&at!==1,pe=g||(Wn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_NODE]:S.contexts[O.NODE]),rr=et&&!Wn?"motionBlur":void 0;ne(pe,rr),Kn?O.drawCachedNodes(pe,fe.nondrag,$,En):O.drawLayeredElements(pe,fe.nondrag,$,En),O.debug&&O.drawDebugPoints(pe,fe.nondrag),!x&&!et&&(G[O.NODE]=!1)}if(!T&&(G[O.DRAG]||x||Sn[O.DRAG])){var Wn=et&&!Sn[O.DRAG]&&at!==1,pe=g||(Wn?O.data.bufferContexts[O.MOTIONBLUR_BUFFER_DRAG]:S.contexts[O.DRAG]);ne(pe,et&&!Wn?"motionBlur":void 0),Kn?O.drawCachedNodes(pe,fe.drag,$,En):O.drawCachedElements(pe,fe.drag,$,En),O.debug&&O.drawDebugPoints(pe,fe.drag),!x&&!et&&(G[O.DRAG]=!1)}if(O.showFps||!T&&G[O.SELECT_BOX]&&!x){var pe=g||S.contexts[O.SELECT_BOX];if(ne(pe),O.selection[4]==1&&(O.hoverData.selecting||O.touchData.selecting)){var Dt=O.cy.zoom(),vr=Mt.core("selection-box-border-width").value/Dt;pe.lineWidth=vr,pe.fillStyle="rgba("+Mt.core("selection-box-color").value[0]+","+Mt.core("selection-box-color").value[1]+","+Mt.core("selection-box-color").value[2]+","+Mt.core("selection-box-opacity").value+")",pe.fillRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]),vr>0&&(pe.strokeStyle="rgba("+Mt.core("selection-box-border-color").value[0]+","+Mt.core("selection-box-border-color").value[1]+","+Mt.core("selection-box-border-color").value[2]+","+Mt.core("selection-box-opacity").value+")",pe.strokeRect(O.selection[0],O.selection[1],O.selection[2]-O.selection[0],O.selection[3]-O.selection[1]))}if(S.bgActivePosistion&&!O.hoverData.selecting){var Dt=O.cy.zoom(),ur=S.bgActivePosistion;pe.fillStyle="rgba("+Mt.core("active-bg-color").value[0]+","+Mt.core("active-bg-color").value[1]+","+Mt.core("active-bg-color").value[2]+","+Mt.core("active-bg-opacity").value+")",pe.beginPath(),pe.arc(ur.x,ur.y,Mt.core("active-bg-size").pfValue/Dt,0,2*Math.PI),pe.fill()}var tr=O.lastRedrawTime;if(O.showFps&&tr){tr=Math.round(tr);var wn=Math.round(1e3/tr);pe.setTransform(1,0,0,1,0,0),pe.fillStyle="rgba(255, 0, 0, 0.75)",pe.strokeStyle="rgba(255, 0, 0, 0.75)",pe.lineWidth=1,pe.fillText("1 frame = "+tr+" ms = "+wn+" fps",0,20);var gr=60;pe.strokeRect(0,30,250,20),pe.fillRect(0,30,250*Math.min(wn/gr,1),20)}x||(G[O.SELECT_BOX]=!1)}if(et&&at!==1){var fr=S.contexts[O.NODE],Jr=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_NODE],wi=S.contexts[O.DRAG],Ks=O.data.bufferCanvases[O.MOTIONBLUR_BUFFER_DRAG],ka=function(hi,gs,qi){hi.setTransform(1,0,0,1,0,0),qi||!kt?hi.clearRect(0,0,O.canvasWidth,O.canvasHeight):ge(hi,0,0,O.canvasWidth,O.canvasHeight);var Si=at;hi.drawImage(gs,0,0,O.canvasWidth*Si,O.canvasHeight*Si,0,0,O.canvasWidth,O.canvasHeight)};(G[O.NODE]||Sn[O.NODE])&&(ka(fr,Jr,Sn[O.NODE]),G[O.NODE]=!1),(G[O.DRAG]||Sn[O.DRAG])&&(ka(wi,Ks,Sn[O.DRAG]),G[O.DRAG]=!1)}O.prevViewport=zt,O.clearingMotionBlur&&(O.clearingMotionBlur=!1,O.motionBlurCleared=!0,O.motionBlur=!0),et&&(O.motionBlurTimeout=setTimeout(function(){O.motionBlurTimeout=null,O.clearedForMotionBlur[O.NODE]=!1,O.clearedForMotionBlur[O.DRAG]=!1,O.motionBlur=!1,O.clearingMotionBlur=!W,O.mbFrames=0,G[O.NODE]=!0,G[O.DRAG]=!0,O.redraw()},dpt)),g||q.emit("render")};var I3={};I3.drawPolygonPath=function(y,g,x,T,A,D){var O=T/2,$=A/2;y.beginPath&&y.beginPath(),y.moveTo(g+O*D[0],x+$*D[1]);for(var q=1;q0&&O>0){at.clearRect(0,0,D,O),at.globalCompositeOperation="source-over";var lt=this.getCachedZSortedEles();if(y.full)at.translate(-T.x1*S,-T.y1*S),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(T.x1*S,T.y1*S);else{var ft=g.pan(),At={x:ft.x*S,y:ft.y*S};S*=g.zoom(),at.translate(At.x,At.y),at.scale(S,S),this.drawElements(at,lt),at.scale(1/S,1/S),at.translate(-At.x,-At.y)}y.bg&&(at.globalCompositeOperation="destination-over",at.fillStyle=y.bg,at.rect(0,0,D,O),at.fill())}return et};function gpt(y,g){for(var x=atob(y),T=new ArrayBuffer(x.length),A=new Uint8Array(T),D=0;D"u"?"undefined":f(OffscreenCanvas))!=="undefined"?x=new OffscreenCanvas(y,g):(x=document.createElement("canvas"),x.width=y,x.height=g),x},[_0,gv,pv,k9,hx,Gk,vg,I3,E9,Ltt].forEach(function(y){me(wc,y)});var fx=[{name:"null",impl:FB},{name:"base",impl:QL},{name:"canvas",impl:ppt}],wg=[{type:"layout",extensions:JJ},{type:"renderer",extensions:fx}],Tm={},rM={};function b1(y,g,x){var T=x,A=function(ee){Sc("Can not register `"+g+"` for `"+y+"` since `"+ee+"` already exists in the prototype and can not be overridden")};if(y==="core"){if(Fk.prototype[g])return A(g);Fk.prototype[g]=x}else if(y==="collection"){if(jf.prototype[g])return A(g);jf.prototype[g]=x}else if(y==="layout"){for(var D=function(ee){this.options=ee,x.call(this,ee),ht(this._private)||(this._private={}),this._private.cy=ee.cy,this._private.listeners=[],this.createEmitter()},O=D.prototype=Object.create(x.prototype),$=[],q=0;q<$.length;q++){var S=$[q];O[S]=O[S]||function(){return this}}O.start&&!O.run?O.run=function(){return this.start(),this}:!O.start&&O.run&&(O.start=function(){return this.run(),this});var G=x.prototype.stop;O.stop=function(){var zt=this.options;if(zt&&zt.animate){var ee=this.animations;if(ee)for(var Vt=0;Vtz&&(this.rect.x-=(this.labelWidth-z)/2,this.setWidth(this.labelWidth)),this.labelHeight>K&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-K)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-K),this.setHeight(this.labelHeight))}}},B.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},B.prototype.transform=function(R){var z=this.rect.x;z>_.WORLD_BOUNDARY?z=_.WORLD_BOUNDARY:z<-_.WORLD_BOUNDARY&&(z=-_.WORLD_BOUNDARY);var K=this.rect.y;K>_.WORLD_BOUNDARY?K=_.WORLD_BOUNDARY:K<-_.WORLD_BOUNDARY&&(K=-_.WORLD_BOUNDARY);var it=new N(z,K),st=R.inverseTransformPoint(it);this.setLocation(st.x,st.y)},B.prototype.getLeft=function(){return this.rect.x},B.prototype.getRight=function(){return this.rect.x+this.rect.width},B.prototype.getTop=function(){return this.rect.y},B.prototype.getBottom=function(){return this.rect.y+this.rect.height},B.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},f.exports=B},function(f,p,v){function m(b,E){b==null&&E==null?(this.x=0,this.y=0):(this.x=b,this.y=E)}m.prototype.getX=function(){return this.x},m.prototype.getY=function(){return this.y},m.prototype.setX=function(b){this.x=b},m.prototype.setY=function(b){this.y=b},m.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},m.prototype.getCopy=function(){return new m(this.x,this.y)},m.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},f.exports=m},function(f,p,v){var m=v(2),b=v(10),E=v(0),_=v(6),L=v(3),N=v(1),B=v(13),j=v(12),R=v(11);function z(it,st,ut){m.call(this,ut),this.estimatedSize=b.MIN_VALUE,this.margin=E.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=it,st!=null&&st instanceof _?this.graphManager=st:st!=null&&st instanceof Layout&&(this.graphManager=st.graphManager)}z.prototype=Object.create(m.prototype);for(var K in m)z[K]=m[K];z.prototype.getNodes=function(){return this.nodes},z.prototype.getEdges=function(){return this.edges},z.prototype.getGraphManager=function(){return this.graphManager},z.prototype.getParent=function(){return this.parent},z.prototype.getLeft=function(){return this.left},z.prototype.getRight=function(){return this.right},z.prototype.getTop=function(){return this.top},z.prototype.getBottom=function(){return this.bottom},z.prototype.isConnected=function(){return this.isConnected},z.prototype.add=function(it,st,ut){if(st==null&&ut==null){var bt=it;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(bt)>-1)throw"Node already in graph!";return bt.owner=this,this.getNodes().push(bt),bt}else{var mt=it;if(!(this.getNodes().indexOf(st)>-1&&this.getNodes().indexOf(ut)>-1))throw"Source or target not in graph!";if(!(st.owner==ut.owner&&st.owner==this))throw"Both owners must be this graph!";return st.owner!=ut.owner?null:(mt.source=st,mt.target=ut,mt.isInterGraph=!1,this.getEdges().push(mt),st.edges.push(mt),ut!=st&&ut.edges.push(mt),mt)}},z.prototype.remove=function(it){var st=it;if(it instanceof L){if(st==null)throw"Node is null!";if(!(st.owner!=null&&st.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var ut=st.edges.slice(),bt,mt=ut.length,yt=0;yt-1&&wt>-1))throw"Source and/or target doesn't know this edge!";bt.source.edges.splice(ht,1),bt.target!=bt.source&&bt.target.edges.splice(wt,1);var dt=bt.source.owner.getEdges().indexOf(bt);if(dt==-1)throw"Not in owner's edge list!";bt.source.owner.getEdges().splice(dt,1)}},z.prototype.updateLeftTop=function(){for(var it=b.MAX_VALUE,st=b.MAX_VALUE,ut,bt,mt,yt=this.getNodes(),dt=yt.length,ht=0;htut&&(it=ut),st>bt&&(st=bt)}return it==b.MAX_VALUE?null:(yt[0].getParent().paddingLeft!=null?mt=yt[0].getParent().paddingLeft:mt=this.margin,this.left=st-mt,this.top=it-mt,new j(this.left,this.top))},z.prototype.updateBounds=function(it){for(var st=b.MAX_VALUE,ut=-b.MAX_VALUE,bt=b.MAX_VALUE,mt=-b.MAX_VALUE,yt,dt,ht,wt,X,pt=this.nodes,U=pt.length,xt=0;xtyt&&(st=yt),utht&&(bt=ht),mtyt&&(st=yt),utht&&(bt=ht),mt=this.nodes.length){var U=0;ut.forEach(function(xt){xt.owner==it&&U++}),U==this.nodes.length&&(this.isConnected=!0)}},f.exports=z},function(f,p,v){var m,b=v(1);function E(_){m=v(5),this.layout=_,this.graphs=[],this.edges=[]}E.prototype.addRoot=function(){var _=this.layout.newGraph(),L=this.layout.newNode(null),N=this.add(_,L);return this.setRootGraph(N),this.rootGraph},E.prototype.add=function(_,L,N,B,j){if(N==null&&B==null&&j==null){if(_==null)throw"Graph is null!";if(L==null)throw"Parent node is null!";if(this.graphs.indexOf(_)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(_),_.parent!=null)throw"Already has a parent!";if(L.child!=null)throw"Already has a child!";return _.parent=L,L.child=_,_}else{j=N,B=L,N=_;var R=B.getOwner(),z=j.getOwner();if(!(R!=null&&R.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(z!=null&&z.getGraphManager()==this))throw"Target not in this graph mgr!";if(R==z)return N.isInterGraph=!1,R.add(N,B,j);if(N.isInterGraph=!0,N.source=B,N.target=j,this.edges.indexOf(N)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(N),!(N.source!=null&&N.target!=null))throw"Edge source and/or target is null!";if(!(N.source.edges.indexOf(N)==-1&&N.target.edges.indexOf(N)==-1))throw"Edge already in source and/or target incidency list!";return N.source.edges.push(N),N.target.edges.push(N),N}},E.prototype.remove=function(_){if(_ instanceof m){var L=_;if(L.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(L==this.rootGraph||L.parent!=null&&L.parent.graphManager==this))throw"Invalid parent node!";var N=[];N=N.concat(L.getEdges());for(var B,j=N.length,R=0;R=_.getRight()?L[0]+=Math.min(_.getX()-E.getX(),E.getRight()-_.getRight()):_.getX()<=E.getX()&&_.getRight()>=E.getRight()&&(L[0]+=Math.min(E.getX()-_.getX(),_.getRight()-E.getRight())),E.getY()<=_.getY()&&E.getBottom()>=_.getBottom()?L[1]+=Math.min(_.getY()-E.getY(),E.getBottom()-_.getBottom()):_.getY()<=E.getY()&&_.getBottom()>=E.getBottom()&&(L[1]+=Math.min(E.getY()-_.getY(),_.getBottom()-E.getBottom()));var j=Math.abs((_.getCenterY()-E.getCenterY())/(_.getCenterX()-E.getCenterX()));_.getCenterY()===E.getCenterY()&&_.getCenterX()===E.getCenterX()&&(j=1);var R=j*L[0],z=L[1]/j;L[0]R)return L[0]=N,L[1]=K,L[2]=j,L[3]=pt,!1;if(Bj)return L[0]=z,L[1]=B,L[2]=wt,L[3]=R,!1;if(Nj?(L[0]=st,L[1]=ut,Ot=!0):(L[0]=it,L[1]=K,Ot=!0):qt===Z&&(N>j?(L[0]=z,L[1]=K,Ot=!0):(L[0]=bt,L[1]=ut,Ot=!0)),-Ct===Z?j>N?(L[2]=X,L[3]=pt,Nt=!0):(L[2]=wt,L[3]=ht,Nt=!0):Ct===Z&&(j>N?(L[2]=dt,L[3]=ht,Nt=!0):(L[2]=U,L[3]=pt,Nt=!0)),Ot&&Nt)return!1;if(N>j?B>R?(Tt=this.getCardinalDirection(qt,Z,4),Ht=this.getCardinalDirection(Ct,Z,2)):(Tt=this.getCardinalDirection(-qt,Z,3),Ht=this.getCardinalDirection(-Ct,Z,1)):B>R?(Tt=this.getCardinalDirection(-qt,Z,1),Ht=this.getCardinalDirection(-Ct,Z,3)):(Tt=this.getCardinalDirection(qt,Z,2),Ht=this.getCardinalDirection(Ct,Z,4)),!Ot)switch(Tt){case 1:Ft=K,It=N+-yt/Z,L[0]=It,L[1]=Ft;break;case 2:It=bt,Ft=B+mt*Z,L[0]=It,L[1]=Ft;break;case 3:Ft=ut,It=N+yt/Z,L[0]=It,L[1]=Ft;break;case 4:It=st,Ft=B+-mt*Z,L[0]=It,L[1]=Ft;break}if(!Nt)switch(Ht){case 1:pn=ht,ke=j+-nt/Z,L[2]=ke,L[3]=pn;break;case 2:ke=U,pn=R+xt*Z,L[2]=ke,L[3]=pn;break;case 3:pn=pt,ke=j+nt/Z,L[2]=ke,L[3]=pn;break;case 4:ke=X,pn=R+-xt*Z,L[2]=ke,L[3]=pn;break}}return!1},b.getCardinalDirection=function(E,_,L){return E>_?L:1+L%4},b.getIntersection=function(E,_,L,N){if(N==null)return this.getIntersection2(E,_,L);var B=E.x,j=E.y,R=_.x,z=_.y,K=L.x,it=L.y,st=N.x,ut=N.y,bt=void 0,mt=void 0,yt=void 0,dt=void 0,ht=void 0,wt=void 0,X=void 0,pt=void 0,U=void 0;return yt=z-j,ht=B-R,X=R*j-B*z,dt=ut-it,wt=K-st,pt=st*it-K*ut,U=yt*wt-dt*ht,U===0?null:(bt=(ht*pt-wt*X)/U,mt=(dt*X-yt*pt)/U,new m(bt,mt))},b.angleOfVector=function(E,_,L,N){var B=void 0;return E!==L?(B=Math.atan((N-_)/(L-E)),L0?1:b<0?-1:0},m.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},m.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},f.exports=m},function(f,p,v){function m(){}m.MAX_VALUE=2147483647,m.MIN_VALUE=-2147483648,f.exports=m},function(f,p,v){var m=function(){function B(j,R){for(var z=0;z"u"?"undefined":m(E);return E==null||_!="object"&&_!="function"},f.exports=b},function(f,p,v){function m(K){if(Array.isArray(K)){for(var it=0,st=Array(K.length);it0&⁢){for(yt.push(ht[0]);yt.length>0&⁢){var wt=yt[0];yt.splice(0,1),mt.add(wt);for(var X=wt.getEdges(),bt=0;bt-1&&ht.splice(nt,1)}mt=new Set,dt=new Map}}return K},z.prototype.createDummyNodesForBendpoints=function(K){for(var it=[],st=K.source,ut=this.graphManager.calcLowestCommonAncestor(K.source,K.target),bt=0;bt0){for(var ut=this.edgeToDummyNodes.get(st),bt=0;bt=0&&it.splice(pt,1);var U=dt.getNeighborsList();U.forEach(function(Ot){if(st.indexOf(Ot)<0){var Nt=ut.get(Ot),qt=Nt-1;qt==1&&wt.push(Ot),ut.set(Ot,qt)}})}st=st.concat(wt),(it.length==1||it.length==2)&&(bt=!0,mt=it[0])}return mt},z.prototype.setGraphManager=function(K){this.graphManager=K},f.exports=z},function(f,p,v){function m(){}m.seed=1,m.x=0,m.nextDouble=function(){return m.x=Math.sin(m.seed++)*1e4,m.x-Math.floor(m.x)},f.exports=m},function(f,p,v){var m=v(4);function b(E,_){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(E){this.lworldOrgX=E},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(E){this.lworldOrgY=E},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(E){this.lworldExtX=E},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(E){this.lworldExtY=E},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(E){this.ldeviceOrgX=E},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(E){this.ldeviceOrgY=E},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(E){this.ldeviceExtX=E},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(E){this.ldeviceExtY=E},b.prototype.transformX=function(E){var _=0,L=this.lworldExtX;return L!=0&&(_=this.ldeviceOrgX+(E-this.lworldOrgX)*this.ldeviceExtX/L),_},b.prototype.transformY=function(E){var _=0,L=this.lworldExtY;return L!=0&&(_=this.ldeviceOrgY+(E-this.lworldOrgY)*this.ldeviceExtY/L),_},b.prototype.inverseTransformX=function(E){var _=0,L=this.ldeviceExtX;return L!=0&&(_=this.lworldOrgX+(E-this.ldeviceOrgX)*this.lworldExtX/L),_},b.prototype.inverseTransformY=function(E){var _=0,L=this.ldeviceExtY;return L!=0&&(_=this.lworldOrgY+(E-this.ldeviceOrgY)*this.lworldExtY/L),_},b.prototype.inverseTransformPoint=function(E){var _=new m(this.inverseTransformX(E.x),this.inverseTransformY(E.y));return _},f.exports=b},function(f,p,v){function m(R){if(Array.isArray(R)){for(var z=0,K=Array(R.length);zE.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*E.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-E.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT_INCREMENTAL):(R>E.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(E.COOLING_ADAPTATION_FACTOR,1-(R-E.ADAPTATION_LOWER_NODE_LIMIT)/(E.ADAPTATION_UPPER_NODE_LIMIT-E.ADAPTATION_LOWER_NODE_LIMIT)*(1-E.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=E.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},B.prototype.calcSpringForces=function(){for(var R=this.getAllEdges(),z,K=0;K0&&arguments[0]!==void 0?arguments[0]:!0,z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,K,it,st,ut,bt=this.getAllNodes(),mt;if(this.useFRGridVariant)for(this.totalIterations%E.GRID_CALCULATION_CHECK_PERIOD==1&&R&&this.updateGrid(),mt=new Set,K=0;Kyt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st,R.gravitationForceY=-this.gravityConstant*ut)):(yt=z.getEstimatedSize()*this.compoundGravityRangeFactor,(bt>yt||mt>yt)&&(R.gravitationForceX=-this.gravityConstant*st*this.compoundGravityConstant,R.gravitationForceY=-this.gravityConstant*ut*this.compoundGravityConstant))},B.prototype.isConverged=function(){var R,z=!1;return this.totalIterations>this.maxIterations/3&&(z=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),R=this.totalDisplacement=bt.length||yt>=bt[0].length)){for(var dt=0;dtB}}]),L}();f.exports=_},function(f,p,v){var m=function(){function _(L,N){for(var B=0;B2&&arguments[2]!==void 0?arguments[2]:1,j=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,R=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,_),this.sequence1=L,this.sequence2=N,this.match_score=B,this.mismatch_penalty=j,this.gap_penalty=R,this.iMax=L.length+1,this.jMax=N.length+1,this.grid=new Array(this.iMax);for(var z=0;z=0;L--){var N=this.listeners[L];N.event===E&&N.callback===_&&this.listeners.splice(L,1)}},b.emit=function(E,_){for(var L=0;LN.coolingFactor*N.maxNodeDisplacement&&(this.displacementX=N.coolingFactor*N.maxNodeDisplacement*E.sign(this.displacementX)),Math.abs(this.displacementY)>N.coolingFactor*N.maxNodeDisplacement&&(this.displacementY=N.coolingFactor*N.maxNodeDisplacement*E.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),N.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},_.prototype.propogateDisplacementToChildren=function(N,B){for(var j=this.getChild().getNodes(),R,z=0;z0)this.positionNodesRadially(ht);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var wt=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(pt){return wt.has(pt)});this.graphManager.setAllNodesToApplyGravitation(X),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},yt.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%j.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var ht=new Set(this.getAllNodes()),wt=this.nodesWithGravity.filter(function(U){return ht.has(U)});this.graphManager.setAllNodesToApplyGravitation(wt),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=j.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=j.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var X=!this.isTreeGrowing&&!this.isGrowthFinished,pt=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(X,pt),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},yt.prototype.getPositionsData=function(){for(var ht=this.graphManager.getAllNodes(),wt={},X=0;X1){var Ot;for(Ot=0;Otpt&&(pt=Math.floor(nt.y)),xt=Math.floor(nt.x+B.DEFAULT_COMPONENT_SEPERATION)}this.transform(new K(R.WORLD_CENTER_X-nt.x/2,R.WORLD_CENTER_Y-nt.y/2))},yt.radialLayout=function(ht,wt,X){var pt=Math.max(this.maxDiagonalInTree(ht),B.DEFAULT_RADIAL_SEPARATION);yt.branchRadialLayout(wt,null,0,359,0,pt);var U=bt.calculateBounds(ht),xt=new mt;xt.setDeviceOrgX(U.getMinX()),xt.setDeviceOrgY(U.getMinY()),xt.setWorldOrgX(X.x),xt.setWorldOrgY(X.y);for(var nt=0;nt1;){var pn=ke[0];ke.splice(0,1);var Me=Z.indexOf(pn);Me>=0&&Z.splice(Me,1),It--,Tt--}wt!=null?Ft=(Z.indexOf(ke[0])+1)%It:Ft=0;for(var ve=Math.abs(pt-X)/Tt,Ge=Ft;Ht!=Tt;Ge=++Ge%It){var Ke=Z[Ge].getOtherEnd(ht);if(Ke!=wt){var we=(X+Ht*ve)%360,_e=(we+ve)%360;yt.branchRadialLayout(Ke,ht,we,_e,U+xt,xt),Ht++}}},yt.maxDiagonalInTree=function(ht){for(var wt=st.MIN_VALUE,X=0;Xwt&&(wt=U)}return wt},yt.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},yt.prototype.groupZeroDegreeMembers=function(){var ht=this,wt={};this.memberGroups={},this.idToDummyNode={};for(var X=[],pt=this.graphManager.getAllNodes(),U=0;U"u"&&(wt[Ot]=[]),wt[Ot]=wt[Ot].concat(xt)}Object.keys(wt).forEach(function(Nt){if(wt[Nt].length>1){var qt="DummyCompound_"+Nt;ht.memberGroups[qt]=wt[Nt];var Ct=wt[Nt][0].getParent(),Z=new L(ht.graphManager);Z.id=qt,Z.paddingLeft=Ct.paddingLeft||0,Z.paddingRight=Ct.paddingRight||0,Z.paddingBottom=Ct.paddingBottom||0,Z.paddingTop=Ct.paddingTop||0,ht.idToDummyNode[qt]=Z;var Tt=ht.getGraphManager().add(ht.newGraph(),Z),Ht=Ct.getChild();Ht.add(Z);for(var It=0;It=0;ht--){var wt=this.compoundOrder[ht],X=wt.id,pt=wt.paddingLeft,U=wt.paddingTop;this.adjustLocations(this.tiledMemberPack[X],wt.rect.x,wt.rect.y,pt,U)}},yt.prototype.repopulateZeroDegreeMembers=function(){var ht=this,wt=this.tiledZeroDegreePack;Object.keys(wt).forEach(function(X){var pt=ht.idToDummyNode[X],U=pt.paddingLeft,xt=pt.paddingTop;ht.adjustLocations(wt[X],pt.rect.x,pt.rect.y,U,xt)})},yt.prototype.getToBeTiled=function(ht){var wt=ht.id;if(this.toBeTiled[wt]!=null)return this.toBeTiled[wt];var X=ht.getChild();if(X==null)return this.toBeTiled[wt]=!1,!1;for(var pt=X.getNodes(),U=0;U0)return this.toBeTiled[wt]=!1,!1;if(xt.getChild()==null){this.toBeTiled[xt.id]=!1;continue}if(!this.getToBeTiled(xt))return this.toBeTiled[wt]=!1,!1}return this.toBeTiled[wt]=!0,!0},yt.prototype.getNodeDegree=function(ht){ht.id;for(var wt=ht.getEdges(),X=0,pt=0;ptNt&&(Nt=Ct.rect.height)}X+=Nt+ht.verticalPadding}},yt.prototype.tileCompoundMembers=function(ht,wt){var X=this;this.tiledMemberPack=[],Object.keys(ht).forEach(function(pt){var U=wt[pt];X.tiledMemberPack[pt]=X.tileNodes(ht[pt],U.paddingLeft+U.paddingRight),U.rect.width=X.tiledMemberPack[pt].width,U.rect.height=X.tiledMemberPack[pt].height})},yt.prototype.tileNodes=function(ht,wt){var X=B.TILING_PADDING_VERTICAL,pt=B.TILING_PADDING_HORIZONTAL,U={rows:[],rowWidth:[],rowHeight:[],width:0,height:wt,verticalPadding:X,horizontalPadding:pt};ht.sort(function(Ot,Nt){return Ot.rect.width*Ot.rect.height>Nt.rect.width*Nt.rect.height?-1:Ot.rect.width*Ot.rect.height0&&(nt+=ht.horizontalPadding),ht.rowWidth[X]=nt,ht.width0&&(Ot+=ht.verticalPadding);var Nt=0;Ot>ht.rowHeight[X]&&(Nt=ht.rowHeight[X],ht.rowHeight[X]=Ot,Nt=ht.rowHeight[X]-Nt),ht.height+=Nt,ht.rows[X].push(wt)},yt.prototype.getShortestRowIndex=function(ht){for(var wt=-1,X=Number.MAX_VALUE,pt=0;ptX&&(wt=pt,X=ht.rowWidth[pt]);return wt},yt.prototype.canAddHorizontal=function(ht,wt,X){var pt=this.getShortestRowIndex(ht);if(pt<0)return!0;var U=ht.rowWidth[pt];if(U+ht.horizontalPadding+wt<=ht.width)return!0;var xt=0;ht.rowHeight[pt]0&&(xt=X+ht.verticalPadding-ht.rowHeight[pt]);var nt;ht.width-U>=wt+ht.horizontalPadding?nt=(ht.height+xt)/(U+wt+ht.horizontalPadding):nt=(ht.height+xt)/ht.width,xt=X+ht.verticalPadding;var Ot;return ht.widthxt&&wt!=X){pt.splice(-1,1),ht.rows[X].push(U),ht.rowWidth[wt]=ht.rowWidth[wt]-xt,ht.rowWidth[X]=ht.rowWidth[X]+xt,ht.width=ht.rowWidth[instance.getLongestRowIndex(ht)];for(var nt=Number.MIN_VALUE,Ot=0;Otnt&&(nt=pt[Ot].height);wt>0&&(nt+=ht.verticalPadding);var Nt=ht.rowHeight[wt]+ht.rowHeight[X];ht.rowHeight[wt]=nt,ht.rowHeight[X]0)for(var Ht=U;Ht<=xt;Ht++)Tt[0]+=this.grid[Ht][nt-1].length+this.grid[Ht][nt].length-1;if(xt0)for(var Ht=nt;Ht<=Ot;Ht++)Tt[3]+=this.grid[U-1][Ht].length+this.grid[U][Ht].length-1;for(var It=st.MAX_VALUE,Ft,ke,pn=0;pn0){var Ot;Ot=mt.getGraphManager().add(mt.newGraph(),X),this.processChildrenList(Ot,wt,mt)}}},K.prototype.stop=function(){return this.stopped=!0,this};var st=function(bt){bt("layout","cose-bilkent",K)};typeof cytoscape<"u"&&st(cytoscape),p.exports=st}])})})(Xjt);var lWe=Xjt.exports;const hWe=B7(lWe);Yjt.use(hWe);function Jjt(i,a,f,p){Wjt.drawNode(i,a,f,p),a.children&&a.children.forEach((v,m)=>{Jjt(i,v,f<0?m:f,p)})}function fWe(i,a){a.edges().map((f,p)=>{const v=f.data();if(f[0]._private.bodyBounds){const m=f[0]._private.rscratch;Ut.trace("Edge: ",p,v),i.insert("path").attr("d",`M ${m.startX},${m.startY} L ${m.midX},${m.midY} L${m.endX},${m.endY} `).attr("class","edge section-edge-"+v.section+" edge-depth-"+v.depth)}})}function t$t(i,a,f,p){a.add({group:"nodes",data:{id:i.id,labelText:i.descr,height:i.height,width:i.width,level:p,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(v=>{t$t(v,a,f,p+1),a.add({group:"edges",data:{id:`${i.id}_${v.id}`,source:i.id,target:v.id,depth:p,section:v.section}})})}function dWe(i,a){return new Promise(f=>{const p=yr("body").append("div").attr("id","cy").attr("style","display:none"),v=Yjt({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});p.remove(),t$t(i,v,a,0),v.nodes().forEach(function(m){m.layoutDimensions=()=>{const b=m.data();return{w:b.width,h:b.height}}}),v.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),v.ready(m=>{Ut.info("Ready",m),f(v)})})}function gWe(i){i.nodes().map((a,f)=>{const p=a.data();p.x=a.position().x,p.y=a.position().y,Wjt.positionNode(p);const v=Ggt(p.nodeId);Ut.info("Id:",f,"Position: (",a.position().x,", ",a.position().y,")",p),v.attr("transform",`translate(${a.position().x-p.width/2}, ${a.position().y-p.height/2})`),v.attr("attr",`apa-${f})`)})}const pWe={draw:async(i,a,f,p)=>{const v=Le();v.htmlLabels=!1,Ut.debug(`Rendering mindmap diagram +`+i,p.parser);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const _=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body").select("#"+a);_.append("g");const L=p.db.getMindmap(),N=_.append("g");N.attr("class","mindmap-edges");const B=_.append("g");B.attr("class","mindmap-nodes"),Jjt(B,L,-1,v);const j=await dWe(L,v);fWe(N,j),gWe(j),cT(void 0,_,v.mindmap.padding,v.mindmap.useMaxWidth)}},bWe=i=>{let a="";for(let f=0;f"u"&&(kt.yylloc={});var yt=kt.yylloc;R.push(yt);var st=kt.options&&kt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(){var vt;return vt=F.pop()||kt.lex()||ft,typeof vt!="number"&&(vt instanceof Array&&(F=vt,vt=F.pop()),vt=A.symbols_[vt]||vt),vt}for(var ht,dt,Ct,tt,Pt={},pt,Ft,X,Rt;;){if(dt=P[P.length-1],this.defaultActions[dt]?Ct=this.defaultActions[dt]:((ht===null||typeof ht>"u")&&(ht=xt()),Ct=H[dt]&&H[dt][ht]),typeof Ct>"u"||!Ct.length||!Ct[0]){var Bt="";Rt=[];for(pt in H[dt])this.terminals_[pt]&&pt>it&&Rt.push("'"+this.terminals_[pt]+"'");kt.showPosition?Bt="Parse error on line "+(rt+1)+`: -`+kt.showPosition()+` -Expecting `+Rt.join(", ")+", got '"+(this.terminals_[ht]||ht)+"'":Bt="Parse error on line "+(rt+1)+": Unexpected "+(ht==ft?"end of input":"'"+(this.terminals_[ht]||ht)+"'"),this.parseError(Bt,{text:kt.match,token:this.terminals_[ht]||ht,line:kt.yylineno,loc:yt,expected:Rt})}if(Ct[0]instanceof Array&&Ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+dt+", token: "+ht);switch(Ct[0]){case 1:P.push(ht),j.push(kt.yytext),R.push(kt.yylloc),P.push(Ct[1]),ht=null,J=kt.yyleng,Y=kt.yytext,rt=kt.yylineno,yt=kt.yylloc;break;case 2:if(Ft=this.productions_[Ct[1]][1],Pt.$=j[j.length-Ft],Pt._$={first_line:R[R.length-(Ft||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(Ft||1)].first_column,last_column:R[R.length-1].last_column},st&&(Pt._$.range=[R[R.length-(Ft||1)].range[0],R[R.length-1].range[1]]),tt=this.performAction.apply(Pt,[Y,J,rt,mt.yy,Ct[1],j,R].concat(Tt)),typeof tt<"u")return tt;Ft&&(P=P.slice(0,-1*Ft*2),j=j.slice(0,-1*Ft),R=R.slice(0,-1*Ft)),P.push(this.productions_[Ct[1]][0]),j.push(Pt.$),R.push(Pt._$),X=H[P[P.length-2]][P[P.length-1]],P.push(X);break;case 3:return!0}}return!0}},m=function(){var E={EOF:1,parseError:function(A,P){if(this.yy.parser)this.yy.parser.parseError(A,P);else throw new Error(A)},setInput:function(C,A){return this.yy=A||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var A=C.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},unput:function(C){var A=C.length,P=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var F=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),P.length-1&&(this.yylineno-=P.length-1);var j=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:P?(P.length===F.length?this.yylloc.first_column:0)+F[F.length-P.length].length-P[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(C){this.unput(this.match.slice(C))},pastInput:function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var C=this.pastInput(),A=new Array(C.length+1).join("-");return C+this.upcomingInput()+` -`+A+"^"},test_match:function(C,A){var P,F,j;if(this.options.backtrack_lexer&&(j={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(j.yylloc.range=this.yylloc.range.slice(0))),F=C[0].match(/(?:\r\n?|\n).*/g),F&&(this.yylineno+=F.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:F?F[F.length-1].length-F[F.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],P=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),P)return P;if(this._backtrack){for(var R in j)this[R]=j[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,A,P,F;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),R=0;RA[0].length)){if(A=P,F=R,this.options.backtrack_lexer){if(C=this.test_match(P,j[R]),C!==!1)return C;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(C=this.test_match(A,j[F]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var A=this.next();return A||this.lex()},begin:function(A){this.conditionStack.push(A)},popState:function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},pushState:function(A){this.begin(A)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(A,P,F,j){switch(F){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return E}();v.lexer=m;function b(){this.yy={}}return b.prototype=v,v.Parser=b,new b}();Vgt.parser=Vgt;const KK=Vgt;let YK=[],XK=[],wL={};const wWe=()=>{YK=[],XK=[],wL={},cg()};class mWe{constructor(a,f,p=0){this.source=a,this.target=f,this.value=p}}const yWe=(i,a,f)=>{YK.push(new mWe(i,a,f))};class xWe{constructor(a){this.ID=a}}const kWe={nodesMap:wL,getConfig:()=>De().sankey,getNodes:()=>XK,getLinks:()=>YK,getGraph:()=>({nodes:XK.map(i=>({id:i.ID})),links:YK.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:yWe,findOrCreateNode:i=>(i=ui.sanitizeText(i,De()),wL[i]||(wL[i]=new xWe(i),XK.push(wL[i])),wL[i]),getAccTitle:ug,setAccTitle:m0,getAccDescription:hg,setAccDescription:lg,getDiagramTitle:hp,setDiagramTitle:Nb,clear:wWe};function Jjt(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f=v)&&(f=v)}return f}function t$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function Ggt(i,a){let f=0;if(a===void 0)for(let p of i)(p=+p)&&(f+=p);else{let p=-1;for(let v of i)(v=+a(v,++p,i))&&(f+=v)}return f}function EWe(i){return i.target.depth}function TWe(i){return i.depth}function _We(i,a){return a-1-i.height}function e$t(i,a){return i.sourceLinks.length?i.depth:a-1}function CWe(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?t$t(i.sourceLinks,EWe)-1:0}function QK(i){return function(){return i}}function n$t(i,a){return ZK(i.source,a.source)||i.index-a.index}function r$t(i,a){return ZK(i.target,a.target)||i.index-a.index}function ZK(i,a){return i.y0-a.y0}function Ugt(i){return i.value}function SWe(i){return i.index}function AWe(i){return i.nodes}function LWe(i){return i.links}function i$t(i,a){const f=i.get(a);if(!f)throw new Error("missing: "+a);return f}function s$t({nodes:i}){for(const a of i){let f=a.y0,p=f;for(const v of a.sourceLinks)v.y0=f+v.width/2,f+=v.width;for(const v of a.targetLinks)v.y1=p+v.width/2,p+=v.width}}function MWe(){let i=0,a=0,f=1,p=1,v=24,m=8,b,E=SWe,C=e$t,A,P,F=AWe,j=LWe,R=6;function H(){const Pt={nodes:F.apply(null,arguments),links:j.apply(null,arguments)};return Y(Pt),rt(Pt),J(Pt),it(Pt),kt(Pt),s$t(Pt),Pt}H.update=function(Pt){return s$t(Pt),Pt},H.nodeId=function(Pt){return arguments.length?(E=typeof Pt=="function"?Pt:QK(Pt),H):E},H.nodeAlign=function(Pt){return arguments.length?(C=typeof Pt=="function"?Pt:QK(Pt),H):C},H.nodeSort=function(Pt){return arguments.length?(A=Pt,H):A},H.nodeWidth=function(Pt){return arguments.length?(v=+Pt,H):v},H.nodePadding=function(Pt){return arguments.length?(m=b=+Pt,H):m},H.nodes=function(Pt){return arguments.length?(F=typeof Pt=="function"?Pt:QK(Pt),H):F},H.links=function(Pt){return arguments.length?(j=typeof Pt=="function"?Pt:QK(Pt),H):j},H.linkSort=function(Pt){return arguments.length?(P=Pt,H):P},H.size=function(Pt){return arguments.length?(i=a=0,f=+Pt[0],p=+Pt[1],H):[f-i,p-a]},H.extent=function(Pt){return arguments.length?(i=+Pt[0][0],f=+Pt[1][0],a=+Pt[0][1],p=+Pt[1][1],H):[[i,a],[f,p]]},H.iterations=function(Pt){return arguments.length?(R=+Pt,H):R};function Y({nodes:Pt,links:pt}){for(const[X,Rt]of Pt.entries())Rt.index=X,Rt.sourceLinks=[],Rt.targetLinks=[];const Ft=new Map(Pt.map((X,Rt)=>[E(X,Rt,Pt),X]));for(const[X,Rt]of pt.entries()){Rt.index=X;let{source:Bt,target:vt}=Rt;typeof Bt!="object"&&(Bt=Rt.source=i$t(Ft,Bt)),typeof vt!="object"&&(vt=Rt.target=i$t(Ft,vt)),Bt.sourceLinks.push(Rt),vt.targetLinks.push(Rt)}if(P!=null)for(const{sourceLinks:X,targetLinks:Rt}of Pt)X.sort(P),Rt.sort(P)}function rt({nodes:Pt}){for(const pt of Pt)pt.value=pt.fixedValue===void 0?Math.max(Ggt(pt.sourceLinks,Ugt),Ggt(pt.targetLinks,Ugt)):pt.fixedValue}function J({nodes:Pt}){const pt=Pt.length;let Ft=new Set(Pt),X=new Set,Rt=0;for(;Ft.size;){for(const Bt of Ft){Bt.depth=Rt;for(const{target:vt}of Bt.sourceLinks)X.add(vt)}if(++Rt>pt)throw new Error("circular link");Ft=X,X=new Set}}function it({nodes:Pt}){const pt=Pt.length;let Ft=new Set(Pt),X=new Set,Rt=0;for(;Ft.size;){for(const Bt of Ft){Bt.height=Rt;for(const{source:vt}of Bt.targetLinks)X.add(vt)}if(++Rt>pt)throw new Error("circular link");Ft=X,X=new Set}}function ft({nodes:Pt}){const pt=Jjt(Pt,Rt=>Rt.depth)+1,Ft=(f-i-v)/(pt-1),X=new Array(pt);for(const Rt of Pt){const Bt=Math.max(0,Math.min(pt-1,Math.floor(C.call(null,Rt,pt))));Rt.layer=Bt,Rt.x0=i+Bt*Ft,Rt.x1=Rt.x0+v,X[Bt]?X[Bt].push(Rt):X[Bt]=[Rt]}if(A)for(const Rt of X)Rt.sort(A);return X}function Tt(Pt){const pt=t$t(Pt,Ft=>(p-a-(Ft.length-1)*b)/Ggt(Ft,Ugt));for(const Ft of Pt){let X=a;for(const Rt of Ft){Rt.y0=X,Rt.y1=X+Rt.value*pt,X=Rt.y1+b;for(const Bt of Rt.sourceLinks)Bt.width=Bt.value*pt}X=(p-X+b)/(Ft.length+1);for(let Rt=0;RtFt.length)-1)),Tt(pt);for(let Ft=0;Ft0))continue;let qe=(Ot/Vt-vt.y0)*pt;vt.y0+=qe,vt.y1+=qe,ht(vt)}A===void 0&&Bt.sort(ZK),yt(Bt,Ft)}}function ct(Pt,pt,Ft){for(let X=Pt.length,Rt=X-2;Rt>=0;--Rt){const Bt=Pt[Rt];for(const vt of Bt){let Ot=0,Vt=0;for(const{target:_n,value:Te}of vt.sourceLinks){let Wn=Te*(_n.layer-vt.layer);Ot+=tt(vt,_n)*Wn,Vt+=Wn}if(!(Vt>0))continue;let qe=(Ot/Vt-vt.y0)*pt;vt.y0+=qe,vt.y1+=qe,ht(vt)}A===void 0&&Bt.sort(ZK),yt(Bt,Ft)}}function yt(Pt,pt){const Ft=Pt.length>>1,X=Pt[Ft];xt(Pt,X.y0-b,Ft-1,pt),st(Pt,X.y1+b,Ft+1,pt),xt(Pt,p,Pt.length-1,pt),st(Pt,a,0,pt)}function st(Pt,pt,Ft,X){for(;Ft1e-6&&(Rt.y0+=Bt,Rt.y1+=Bt),pt=Rt.y1+b}}function xt(Pt,pt,Ft,X){for(;Ft>=0;--Ft){const Rt=Pt[Ft],Bt=(Rt.y1-pt)*X;Bt>1e-6&&(Rt.y0-=Bt,Rt.y1-=Bt),pt=Rt.y0-b}}function ht({sourceLinks:Pt,targetLinks:pt}){if(P===void 0){for(const{source:{sourceLinks:Ft}}of pt)Ft.sort(r$t);for(const{target:{targetLinks:Ft}}of Pt)Ft.sort(n$t)}}function dt(Pt){if(P===void 0)for(const{sourceLinks:pt,targetLinks:Ft}of Pt)pt.sort(r$t),Ft.sort(n$t)}function Ct(Pt,pt){let Ft=Pt.y0-(Pt.sourceLinks.length-1)*b/2;for(const{target:X,width:Rt}of Pt.sourceLinks){if(X===pt)break;Ft+=Rt+b}for(const{source:X,width:Rt}of pt.targetLinks){if(X===Pt)break;Ft-=Rt}return Ft}function tt(Pt,pt){let Ft=pt.y0-(pt.targetLinks.length-1)*b/2;for(const{source:X,width:Rt}of pt.targetLinks){if(X===Pt)break;Ft+=Rt+b}for(const{target:X,width:Rt}of Pt.sourceLinks){if(X===pt)break;Ft-=Rt}return Ft}return H}var Wgt=Math.PI,Kgt=2*Wgt,C9=1e-6,DWe=Kgt-C9;function Ygt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function a$t(){return new Ygt}Ygt.prototype=a$t.prototype={constructor:Ygt,moveTo:function(i,a){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,a){this._+="L"+(this._x1=+i)+","+(this._y1=+a)},quadraticCurveTo:function(i,a,f,p){this._+="Q"+ +i+","+ +a+","+(this._x1=+f)+","+(this._y1=+p)},bezierCurveTo:function(i,a,f,p,v,m){this._+="C"+ +i+","+ +a+","+ +f+","+ +p+","+(this._x1=+v)+","+(this._y1=+m)},arcTo:function(i,a,f,p,v){i=+i,a=+a,f=+f,p=+p,v=+v;var m=this._x1,b=this._y1,E=f-i,C=p-a,A=m-i,P=b-a,F=A*A+P*P;if(v<0)throw new Error("negative radius: "+v);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=a);else if(F>C9)if(!(Math.abs(P*E-C*A)>C9)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,H=E*E+C*C,Y=j*j+R*R,rt=Math.sqrt(H),J=Math.sqrt(F),it=v*Math.tan((Wgt-Math.acos((H+F-Y)/(2*rt*J)))/2),ft=it/J,Tt=it/rt;Math.abs(ft-1)>C9&&(this._+="L"+(i+ft*A)+","+(a+ft*P)),this._+="A"+v+","+v+",0,0,"+ +(P*j>A*R)+","+(this._x1=i+Tt*E)+","+(this._y1=a+Tt*C)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),C=i+b,A=a+E,P=1^m,F=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+C+","+A:(Math.abs(this._x1-C)>C9||Math.abs(this._y1-A)>C9)&&(this._+="L"+C+","+A),f&&(F<0&&(F=F%Kgt+Kgt),F>DWe?this._+="A"+f+","+f+",0,1,"+P+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+P+","+(this._x1=C)+","+(this._y1=A):F>C9&&(this._+="A"+f+","+f+",0,"+ +(F>=Wgt)+","+P+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function o$t(i){return function(){return i}}function IWe(i){return i[0]}function OWe(i){return i[1]}var NWe=Array.prototype.slice;function PWe(i){return i.source}function FWe(i){return i.target}function BWe(i){var a=PWe,f=FWe,p=IWe,v=OWe,m=null;function b(){var E,C=NWe.call(arguments),A=a.apply(this,C),P=f.apply(this,C);if(m||(m=E=a$t()),i(m,+p.apply(this,(C[0]=A,C)),+v.apply(this,C),+p.apply(this,(C[0]=P,C)),+v.apply(this,C)),E)return m=null,E+""||null}return b.source=function(E){return arguments.length?(a=E,b):a},b.target=function(E){return arguments.length?(f=E,b):f},b.x=function(E){return arguments.length?(p=typeof E=="function"?E:o$t(+E),b):p},b.y=function(E){return arguments.length?(v=typeof E=="function"?E:o$t(+E),b):v},b.context=function(E){return arguments.length?(m=E??null,b):m},b}function RWe(i,a,f,p,v){i.moveTo(a,f),i.bezierCurveTo(a=(a+p)/2,f,a,v,p,v)}function jWe(){return BWe(RWe)}function $We(i){return[i.source.x1,i.y0]}function zWe(i){return[i.target.x0,i.y1]}function qWe(){return jWe().source($We).target(zWe)}const Xgt=class{static next(i){return new Xgt(i+ ++Xgt.count)}constructor(i){this.id=i,this.href=`#${i}`}toString(){return"url("+this.href+")"}};let Qgt=Xgt;Qgt.count=0;const HWe={left:TWe,right:_We,center:CWe,justify:e$t},VWe={draw:function(i,a,f,p){const{securityLevel:v,sankey:m}=De(),b=i9.sankey;let E;v==="sandbox"&&(E=xr("#i"+a));const C=xr(v==="sandbox"?E.nodes()[0].contentDocument.body:"body"),A=v==="sandbox"?C.select(`[id="${a}"]`):xr(`[id="${a}"]`),P=(m==null?void 0:m.width)??b.width,F=(m==null?void 0:m.height)??b.width,j=(m==null?void 0:m.useMaxWidth)??b.useMaxWidth,R=(m==null?void 0:m.nodeAlignment)??b.nodeAlignment,H=(m==null?void 0:m.prefix)??b.prefix,Y=(m==null?void 0:m.suffix)??b.suffix,rt=(m==null?void 0:m.showValues)??b.showValues;og(A,F,P,j);const J=p.db.getGraph(),it=HWe[R],ft=10;MWe().nodeId(xt=>xt.id).nodeWidth(ft).nodePadding(10+(rt?15:0)).nodeAlign(it).extent([[0,0],[P,F]])(J);const kt=E1t(CEe);A.append("g").attr("class","nodes").selectAll(".node").data(J.nodes).join("g").attr("class","node").attr("id",xt=>(xt.uid=Qgt.next("node-")).id).attr("transform",function(xt){return"translate("+xt.x0+","+xt.y0+")"}).attr("x",xt=>xt.x0).attr("y",xt=>xt.y0).append("rect").attr("height",xt=>xt.y1-xt.y0).attr("width",xt=>xt.x1-xt.x0).attr("fill",xt=>kt(xt.id));const mt=({id:xt,value:ht})=>rt?`${xt} -${H}${Math.round(ht*100)/100}${Y}`:xt;A.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(J.nodes).join("text").attr("x",xt=>xt.x0

(xt.y1+xt.y0)/2).attr("dy",`${rt?"0":"0.35"}em`).attr("text-anchor",xt=>xt.x0

(ht.uid=Qgt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",ht=>ht.source.x1).attr("x2",ht=>ht.target.x0);xt.append("stop").attr("offset","0%").attr("stop-color",ht=>kt(ht.source.id)),xt.append("stop").attr("offset","100%").attr("stop-color",ht=>kt(ht.target.id))}let st;switch(yt){case"gradient":st=xt=>xt.uid;break;case"source":st=xt=>kt(xt.source.id);break;case"target":st=xt=>kt(xt.target.id);break;default:st=yt}ct.append("path").attr("d",qWe()).attr("stroke",st).attr("stroke-width",xt=>Math.max(1,xt.width))}},GWe=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` -`).trim(),UWe=KK.parse.bind(KK);KK.parse=i=>UWe(GWe(i));const WWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:KK,db:kWe,renderer:VWe}},Symbol.toStringTag,{value:"Module"}));return Pb}); +`}},Symbol.toStringTag,{value:"Module"}));var Wgt=function(){var i=function(E,_,L,N){for(L=L||{},N=E.length;N--;L[E[N]]=_);return L},a=[1,9],f=[1,10],p=[1,5,10,12],v={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(_,L,N,B,j,R,z){var K=R.length-1;switch(j){case 7:const it=B.findOrCreateNode(R[K-4].trim().replaceAll('""','"')),st=B.findOrCreateNode(R[K-2].trim().replaceAll('""','"')),ut=parseFloat(R[K].trim());B.addLink(it,st,ut);break;case 8:case 9:case 11:this.$=R[K];break;case 10:this.$=R[K-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:a,20:f},{1:[2,6],7:11,10:[1,12]},i(f,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(p,[2,8]),i(p,[2,9]),{19:[1,16]},i(p,[2,11]),{1:[2,1]},{1:[2,5]},i(f,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:a,20:f},{15:18,16:7,17:8,18:a,20:f},{18:[1,19]},i(f,[2,3]),{12:[1,20]},i(p,[2,10]),{15:21,16:7,17:8,18:a,20:f},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(_,L){if(L.recoverable)this.trace(_);else{var N=new Error(_);throw N.hash=L,N}},parse:function(_){var L=this,N=[0],B=[],j=[null],R=[],z=this.table,K="",it=0,st=0,ut=2,bt=1,mt=R.slice.call(arguments,1),yt=Object.create(this.lexer),dt={yy:{}};for(var ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ht)&&(dt.yy[ht]=this.yy[ht]);yt.setInput(_,dt.yy),dt.yy.lexer=yt,dt.yy.parser=this,typeof yt.yylloc>"u"&&(yt.yylloc={});var wt=yt.yylloc;R.push(wt);var X=yt.options&&yt.options.ranges;typeof dt.yy.parseError=="function"?this.parseError=dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(){var It;return It=B.pop()||yt.lex()||bt,typeof It!="number"&&(It instanceof Array&&(B=It,It=B.pop()),It=L.symbols_[It]||It),It}for(var U,xt,nt,Ot,Nt={},qt,Ct,Z,Tt;;){if(xt=N[N.length-1],this.defaultActions[xt]?nt=this.defaultActions[xt]:((U===null||typeof U>"u")&&(U=pt()),nt=z[xt]&&z[xt][U]),typeof nt>"u"||!nt.length||!nt[0]){var Ht="";Tt=[];for(qt in z[xt])this.terminals_[qt]&&qt>ut&&Tt.push("'"+this.terminals_[qt]+"'");yt.showPosition?Ht="Parse error on line "+(it+1)+`: +`+yt.showPosition()+` +Expecting `+Tt.join(", ")+", got '"+(this.terminals_[U]||U)+"'":Ht="Parse error on line "+(it+1)+": Unexpected "+(U==bt?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(Ht,{text:yt.match,token:this.terminals_[U]||U,line:yt.yylineno,loc:wt,expected:Tt})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+U);switch(nt[0]){case 1:N.push(U),j.push(yt.yytext),R.push(yt.yylloc),N.push(nt[1]),U=null,st=yt.yyleng,K=yt.yytext,it=yt.yylineno,wt=yt.yylloc;break;case 2:if(Ct=this.productions_[nt[1]][1],Nt.$=j[j.length-Ct],Nt._$={first_line:R[R.length-(Ct||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(Ct||1)].first_column,last_column:R[R.length-1].last_column},X&&(Nt._$.range=[R[R.length-(Ct||1)].range[0],R[R.length-1].range[1]]),Ot=this.performAction.apply(Nt,[K,st,it,dt.yy,nt[1],j,R].concat(mt)),typeof Ot<"u")return Ot;Ct&&(N=N.slice(0,-1*Ct*2),j=j.slice(0,-1*Ct),R=R.slice(0,-1*Ct)),N.push(this.productions_[nt[1]][0]),j.push(Nt.$),R.push(Nt._$),Z=z[N[N.length-2]][N[N.length-1]],N.push(Z);break;case 3:return!0}}return!0}},m=function(){var E={EOF:1,parseError:function(L,N){if(this.yy.parser)this.yy.parser.parseError(L,N);else throw new Error(L)},setInput:function(_,L){return this.yy=L||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var L=_.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var L=_.length,N=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),N.length-1&&(this.yylineno-=N.length-1);var j=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===B.length?this.yylloc.first_column:0)+B[B.length-N.length].length-N[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),L=new Array(_.length+1).join("-");return _+this.upcomingInput()+` +`+L+"^"},test_match:function(_,L){var N,B,j;if(this.options.backtrack_lexer&&(j={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(j.yylloc.range=this.yylloc.range.slice(0))),B=_[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],N=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var R in j)this[R]=j[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,L,N,B;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),R=0;RL[0].length)){if(L=N,B=R,this.options.backtrack_lexer){if(_=this.test_match(N,j[R]),_!==!1)return _;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(_=this.test_match(L,j[B]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var L=this.next();return L||this.lex()},begin:function(L){this.conditionStack.push(L)},popState:function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},pushState:function(L){this.begin(L)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(L,N,B,j){switch(B){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return E}();v.lexer=m;function b(){this.yy={}}return b.prototype=v,v.Parser=b,new b}();Wgt.parser=Wgt;const UK=Wgt;let WK=[],KK=[],vL={};const wWe=()=>{WK=[],KK=[],vL={},ap()};class mWe{constructor(a,f,p=0){this.source=a,this.target=f,this.value=p}}const yWe=(i,a,f)=>{WK.push(new mWe(i,a,f))};class xWe{constructor(a){this.ID=a}}const kWe={nodesMap:vL,getConfig:()=>Le().sankey,getNodes:()=>KK,getLinks:()=>WK,getGraph:()=>({nodes:KK.map(i=>({id:i.ID})),links:WK.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:yWe,findOrCreateNode:i=>(i=Yr.sanitizeText(i,Le()),vL[i]||(vL[i]=new xWe(i),KK.push(vL[i])),vL[i]),getAccTitle:op,setAccTitle:cg,getAccDescription:up,setAccDescription:cp,getDiagramTitle:Db,setDiagramTitle:Z2,clear:wWe};function e$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f=v)&&(f=v)}return f}function n$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function Kgt(i,a){let f=0;if(a===void 0)for(let p of i)(p=+p)&&(f+=p);else{let p=-1;for(let v of i)(v=+a(v,++p,i))&&(f+=v)}return f}function EWe(i){return i.target.depth}function TWe(i){return i.depth}function CWe(i,a){return a-1-i.height}function r$t(i,a){return i.sourceLinks.length?i.depth:a-1}function _We(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?n$t(i.sourceLinks,EWe)-1:0}function YK(i){return function(){return i}}function i$t(i,a){return XK(i.source,a.source)||i.index-a.index}function s$t(i,a){return XK(i.target,a.target)||i.index-a.index}function XK(i,a){return i.y0-a.y0}function Ygt(i){return i.value}function SWe(i){return i.index}function AWe(i){return i.nodes}function LWe(i){return i.links}function a$t(i,a){const f=i.get(a);if(!f)throw new Error("missing: "+a);return f}function o$t({nodes:i}){for(const a of i){let f=a.y0,p=f;for(const v of a.sourceLinks)v.y0=f+v.width/2,f+=v.width;for(const v of a.targetLinks)v.y1=p+v.width/2,p+=v.width}}function MWe(){let i=0,a=0,f=1,p=1,v=24,m=8,b,E=SWe,_=r$t,L,N,B=AWe,j=LWe,R=6;function z(){const Nt={nodes:B.apply(null,arguments),links:j.apply(null,arguments)};return K(Nt),it(Nt),st(Nt),ut(Nt),yt(Nt),o$t(Nt),Nt}z.update=function(Nt){return o$t(Nt),Nt},z.nodeId=function(Nt){return arguments.length?(E=typeof Nt=="function"?Nt:YK(Nt),z):E},z.nodeAlign=function(Nt){return arguments.length?(_=typeof Nt=="function"?Nt:YK(Nt),z):_},z.nodeSort=function(Nt){return arguments.length?(L=Nt,z):L},z.nodeWidth=function(Nt){return arguments.length?(v=+Nt,z):v},z.nodePadding=function(Nt){return arguments.length?(m=b=+Nt,z):m},z.nodes=function(Nt){return arguments.length?(B=typeof Nt=="function"?Nt:YK(Nt),z):B},z.links=function(Nt){return arguments.length?(j=typeof Nt=="function"?Nt:YK(Nt),z):j},z.linkSort=function(Nt){return arguments.length?(N=Nt,z):N},z.size=function(Nt){return arguments.length?(i=a=0,f=+Nt[0],p=+Nt[1],z):[f-i,p-a]},z.extent=function(Nt){return arguments.length?(i=+Nt[0][0],f=+Nt[1][0],a=+Nt[0][1],p=+Nt[1][1],z):[[i,a],[f,p]]},z.iterations=function(Nt){return arguments.length?(R=+Nt,z):R};function K({nodes:Nt,links:qt}){for(const[Z,Tt]of Nt.entries())Tt.index=Z,Tt.sourceLinks=[],Tt.targetLinks=[];const Ct=new Map(Nt.map((Z,Tt)=>[E(Z,Tt,Nt),Z]));for(const[Z,Tt]of qt.entries()){Tt.index=Z;let{source:Ht,target:It}=Tt;typeof Ht!="object"&&(Ht=Tt.source=a$t(Ct,Ht)),typeof It!="object"&&(It=Tt.target=a$t(Ct,It)),Ht.sourceLinks.push(Tt),It.targetLinks.push(Tt)}if(N!=null)for(const{sourceLinks:Z,targetLinks:Tt}of Nt)Z.sort(N),Tt.sort(N)}function it({nodes:Nt}){for(const qt of Nt)qt.value=qt.fixedValue===void 0?Math.max(Kgt(qt.sourceLinks,Ygt),Kgt(qt.targetLinks,Ygt)):qt.fixedValue}function st({nodes:Nt}){const qt=Nt.length;let Ct=new Set(Nt),Z=new Set,Tt=0;for(;Ct.size;){for(const Ht of Ct){Ht.depth=Tt;for(const{target:It}of Ht.sourceLinks)Z.add(It)}if(++Tt>qt)throw new Error("circular link");Ct=Z,Z=new Set}}function ut({nodes:Nt}){const qt=Nt.length;let Ct=new Set(Nt),Z=new Set,Tt=0;for(;Ct.size;){for(const Ht of Ct){Ht.height=Tt;for(const{source:It}of Ht.targetLinks)Z.add(It)}if(++Tt>qt)throw new Error("circular link");Ct=Z,Z=new Set}}function bt({nodes:Nt}){const qt=e$t(Nt,Tt=>Tt.depth)+1,Ct=(f-i-v)/(qt-1),Z=new Array(qt);for(const Tt of Nt){const Ht=Math.max(0,Math.min(qt-1,Math.floor(_.call(null,Tt,qt))));Tt.layer=Ht,Tt.x0=i+Ht*Ct,Tt.x1=Tt.x0+v,Z[Ht]?Z[Ht].push(Tt):Z[Ht]=[Tt]}if(L)for(const Tt of Z)Tt.sort(L);return Z}function mt(Nt){const qt=n$t(Nt,Ct=>(p-a-(Ct.length-1)*b)/Kgt(Ct,Ygt));for(const Ct of Nt){let Z=a;for(const Tt of Ct){Tt.y0=Z,Tt.y1=Z+Tt.value*qt,Z=Tt.y1+b;for(const Ht of Tt.sourceLinks)Ht.width=Ht.value*qt}Z=(p-Z+b)/(Ct.length+1);for(let Tt=0;TtCt.length)-1)),mt(qt);for(let Ct=0;Ct0))continue;let pn=(Ft/ke-It.y0)*qt;It.y0+=pn,It.y1+=pn,U(It)}L===void 0&&Ht.sort(XK),wt(Ht,Ct)}}function ht(Nt,qt,Ct){for(let Z=Nt.length,Tt=Z-2;Tt>=0;--Tt){const Ht=Nt[Tt];for(const It of Ht){let Ft=0,ke=0;for(const{target:Me,value:ve}of It.sourceLinks){let Ge=ve*(Me.layer-It.layer);Ft+=Ot(It,Me)*Ge,ke+=Ge}if(!(ke>0))continue;let pn=(Ft/ke-It.y0)*qt;It.y0+=pn,It.y1+=pn,U(It)}L===void 0&&Ht.sort(XK),wt(Ht,Ct)}}function wt(Nt,qt){const Ct=Nt.length>>1,Z=Nt[Ct];pt(Nt,Z.y0-b,Ct-1,qt),X(Nt,Z.y1+b,Ct+1,qt),pt(Nt,p,Nt.length-1,qt),X(Nt,a,0,qt)}function X(Nt,qt,Ct,Z){for(;Ct1e-6&&(Tt.y0+=Ht,Tt.y1+=Ht),qt=Tt.y1+b}}function pt(Nt,qt,Ct,Z){for(;Ct>=0;--Ct){const Tt=Nt[Ct],Ht=(Tt.y1-qt)*Z;Ht>1e-6&&(Tt.y0-=Ht,Tt.y1-=Ht),qt=Tt.y0-b}}function U({sourceLinks:Nt,targetLinks:qt}){if(N===void 0){for(const{source:{sourceLinks:Ct}}of qt)Ct.sort(s$t);for(const{target:{targetLinks:Ct}}of Nt)Ct.sort(i$t)}}function xt(Nt){if(N===void 0)for(const{sourceLinks:qt,targetLinks:Ct}of Nt)qt.sort(s$t),Ct.sort(i$t)}function nt(Nt,qt){let Ct=Nt.y0-(Nt.sourceLinks.length-1)*b/2;for(const{target:Z,width:Tt}of Nt.sourceLinks){if(Z===qt)break;Ct+=Tt+b}for(const{source:Z,width:Tt}of qt.targetLinks){if(Z===Nt)break;Ct-=Tt}return Ct}function Ot(Nt,qt){let Ct=qt.y0-(qt.targetLinks.length-1)*b/2;for(const{source:Z,width:Tt}of qt.targetLinks){if(Z===Nt)break;Ct+=Tt+b}for(const{target:Z,width:Tt}of Nt.sourceLinks){if(Z===qt)break;Ct-=Tt}return Ct}return z}var Xgt=Math.PI,Qgt=2*Xgt,MT=1e-6,IWe=Qgt-MT;function Zgt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function c$t(){return new Zgt}Zgt.prototype=c$t.prototype={constructor:Zgt,moveTo:function(i,a){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,a){this._+="L"+(this._x1=+i)+","+(this._y1=+a)},quadraticCurveTo:function(i,a,f,p){this._+="Q"+ +i+","+ +a+","+(this._x1=+f)+","+(this._y1=+p)},bezierCurveTo:function(i,a,f,p,v,m){this._+="C"+ +i+","+ +a+","+ +f+","+ +p+","+(this._x1=+v)+","+(this._y1=+m)},arcTo:function(i,a,f,p,v){i=+i,a=+a,f=+f,p=+p,v=+v;var m=this._x1,b=this._y1,E=f-i,_=p-a,L=m-i,N=b-a,B=L*L+N*N;if(v<0)throw new Error("negative radius: "+v);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=a);else if(B>MT)if(!(Math.abs(N*E-_*L)>MT)||!v)this._+="L"+(this._x1=i)+","+(this._y1=a);else{var j=f-m,R=p-b,z=E*E+_*_,K=j*j+R*R,it=Math.sqrt(z),st=Math.sqrt(B),ut=v*Math.tan((Xgt-Math.acos((z+B-K)/(2*it*st)))/2),bt=ut/st,mt=ut/it;Math.abs(bt-1)>MT&&(this._+="L"+(i+bt*L)+","+(a+bt*N)),this._+="A"+v+","+v+",0,0,"+ +(N*j>L*R)+","+(this._x1=i+mt*E)+","+(this._y1=a+mt*_)}},arc:function(i,a,f,p,v,m){i=+i,a=+a,f=+f,m=!!m;var b=f*Math.cos(p),E=f*Math.sin(p),_=i+b,L=a+E,N=1^m,B=m?p-v:v-p;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+_+","+L:(Math.abs(this._x1-_)>MT||Math.abs(this._y1-L)>MT)&&(this._+="L"+_+","+L),f&&(B<0&&(B=B%Qgt+Qgt),B>IWe?this._+="A"+f+","+f+",0,1,"+N+","+(i-b)+","+(a-E)+"A"+f+","+f+",0,1,"+N+","+(this._x1=_)+","+(this._y1=L):B>MT&&(this._+="A"+f+","+f+",0,"+ +(B>=Xgt)+","+N+","+(this._x1=i+f*Math.cos(v))+","+(this._y1=a+f*Math.sin(v))))},rect:function(i,a,f,p){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+a)+"h"+ +f+"v"+ +p+"h"+-f+"Z"},toString:function(){return this._}};function u$t(i){return function(){return i}}function DWe(i){return i[0]}function OWe(i){return i[1]}var NWe=Array.prototype.slice;function PWe(i){return i.source}function FWe(i){return i.target}function BWe(i){var a=PWe,f=FWe,p=DWe,v=OWe,m=null;function b(){var E,_=NWe.call(arguments),L=a.apply(this,_),N=f.apply(this,_);if(m||(m=E=c$t()),i(m,+p.apply(this,(_[0]=L,_)),+v.apply(this,_),+p.apply(this,(_[0]=N,_)),+v.apply(this,_)),E)return m=null,E+""||null}return b.source=function(E){return arguments.length?(a=E,b):a},b.target=function(E){return arguments.length?(f=E,b):f},b.x=function(E){return arguments.length?(p=typeof E=="function"?E:u$t(+E),b):p},b.y=function(E){return arguments.length?(v=typeof E=="function"?E:u$t(+E),b):v},b.context=function(E){return arguments.length?(m=E??null,b):m},b}function RWe(i,a,f,p,v){i.moveTo(a,f),i.bezierCurveTo(a=(a+p)/2,f,a,v,p,v)}function jWe(){return BWe(RWe)}function $We(i){return[i.source.x1,i.y0]}function zWe(i){return[i.target.x0,i.y1]}function qWe(){return jWe().source($We).target(zWe)}const Jgt=class{static next(i){return new Jgt(i+ ++Jgt.count)}constructor(i){this.id=i,this.href=`#${i}`}toString(){return"url("+this.href+")"}};let tpt=Jgt;tpt.count=0;const HWe={left:TWe,right:CWe,center:_We,justify:r$t},GWe={draw:function(i,a,f,p){const{securityLevel:v,sankey:m}=Le(),b=oT.sankey;let E;v==="sandbox"&&(E=yr("#i"+a));const _=yr(v==="sandbox"?E.nodes()[0].contentDocument.body:"body"),L=v==="sandbox"?_.select(`[id="${a}"]`):yr(`[id="${a}"]`),N=(m==null?void 0:m.width)??b.width,B=(m==null?void 0:m.height)??b.width,j=(m==null?void 0:m.useMaxWidth)??b.useMaxWidth,R=(m==null?void 0:m.nodeAlignment)??b.nodeAlignment,z=(m==null?void 0:m.prefix)??b.prefix,K=(m==null?void 0:m.suffix)??b.suffix,it=(m==null?void 0:m.showValues)??b.showValues;og(L,B,N,j);const st=p.db.getGraph(),ut=HWe[R],bt=10;MWe().nodeId(pt=>pt.id).nodeWidth(bt).nodePadding(10+(it?15:0)).nodeAlign(ut).extent([[0,0],[N,B]])(st);const yt=x1t(S7e);L.append("g").attr("class","nodes").selectAll(".node").data(st.nodes).join("g").attr("class","node").attr("id",pt=>(pt.uid=tpt.next("node-")).id).attr("transform",function(pt){return"translate("+pt.x0+","+pt.y0+")"}).attr("x",pt=>pt.x0).attr("y",pt=>pt.y0).append("rect").attr("height",pt=>pt.y1-pt.y0).attr("width",pt=>pt.x1-pt.x0).attr("fill",pt=>yt(pt.id));const dt=({id:pt,value:U})=>it?`${pt} +${z}${Math.round(U*100)/100}${K}`:pt;L.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(st.nodes).join("text").attr("x",pt=>pt.x0(pt.y1+pt.y0)/2).attr("dy",`${it?"0":"0.35"}em`).attr("text-anchor",pt=>pt.x0(U.uid=tpt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",U=>U.source.x1).attr("x2",U=>U.target.x0);pt.append("stop").attr("offset","0%").attr("stop-color",U=>yt(U.source.id)),pt.append("stop").attr("offset","100%").attr("stop-color",U=>yt(U.target.id))}let X;switch(wt){case"gradient":X=pt=>pt.uid;break;case"source":X=pt=>yt(pt.source.id);break;case"target":X=pt=>yt(pt.target.id);break;default:X=wt}ht.append("path").attr("d",qWe()).attr("stroke",X).attr("stroke-width",pt=>Math.max(1,pt.width))}},VWe=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),UWe=UK.parse.bind(UK);UK.parse=i=>UWe(VWe(i));const WWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:UK,db:kWe,renderer:GWe}},Symbol.toStringTag,{value:"Module"}));return Ob});